2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| @@ -9,4 +9,4 @@ install: | ||||
| .PHONY: test | ||||
| test:	build | ||||
| 	cd examples/dummy && make | ||||
| 	cd examples/go-kit && make | ||||
| 	cd examples/js-grpc && make | ||||
|   | ||||
| @@ -1,9 +1,11 @@ | ||||
| { | ||||
|   "build-date": "2016-12-15T11:05:13.620228009+01:00", | ||||
|   "build-hostname": "moul-rose.local", | ||||
|   "build-user": "moul", | ||||
|   "pwd": "/Users/moul/Git/moul/protoc-gen-gotemplate/examples/dummy", | ||||
|   "build-date": "2016-12-20T11:30:36.474403064+01:00", | ||||
|   "build-hostname": "Zoon-MacBook.local", | ||||
|   "build-user": "zoon", | ||||
|   "go-pwd": "github.com/protoc-gen-gotemplate/examples/dummy", | ||||
|   "pwd": "/Users/zoon/Projects/gopath/src/github.com/protoc-gen-gotemplate/examples/dummy", | ||||
|   "debug": false, | ||||
|   "destination-dir": ".", | ||||
|   "file": { | ||||
|     "name": "dummy.proto", | ||||
|     "package": "dummy", | ||||
| @@ -840,11 +842,40 @@ | ||||
|     ] | ||||
|   }, | ||||
|   "environment": [ | ||||
|     "TERM_PROGRAM=iTerm.app", | ||||
|     "ANDROID_HOME=/usr/local/opt/android-sdk", | ||||
|     "TERM=xterm-256color", | ||||
|     "SHELL=/bin/zsh", | ||||
|     "TMPDIR=/var/folders/wr/dddkjx017kv8qk4q_jd2ly080000gn/T/", | ||||
|     "PWD=/Users/moul/Git/moul/protoc-gen-gotemplate/examples/dummy", | ||||
|     "MAKEFLAGS=", | ||||
|     "TMPDIR=/var/folders/sq/wlptrlpn4v52xv7xpsgw0fc80000gn/T/", | ||||
|     "Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.q9vxeee00S/Render", | ||||
|     "TERM_PROGRAM_VERSION=3.0.12", | ||||
|     "TERM_SESSION_ID=w0t0p0:6D29EB08-1B96-41B8-8672-0B035605AEE5", | ||||
|     "ZSH=/Users/zoon/.oh-my-zsh", | ||||
|     "USER=zoon", | ||||
|     "SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.5ZcNGIwTRZ/Listeners", | ||||
|     "__CF_USER_TEXT_ENCODING=0x1F5:0x0:0x0", | ||||
|     "MAKELEVEL=2", | ||||
|     "PAGER=less", | ||||
|     "MFLAGS=", | ||||
|     "LSCOLORS=Gxfxcxdxbxegedabagacad", | ||||
|     "PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/zoon/Projects/gopath/bin", | ||||
|     "_=/usr/local/bin/protoc", | ||||
|     "PWD=/Users/zoon/Projects/gopath/src/github.com/protoc-gen-gotemplate/examples/dummy", | ||||
|     "JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home", | ||||
|     "EDITOR=micro", | ||||
|     "LANG=en_US.UTF-8", | ||||
|     "GOPATH=/Users/moul/go", | ||||
|     "ANDROID_SDK=/usr/local/opt/android-sdk", | ||||
|     "ITERM_PROFILE=Default", | ||||
|     "XPC_FLAGS=0x0", | ||||
|     "XPC_SERVICE_NAME=0", | ||||
|     "COLORFGBG=15;0", | ||||
|     "SHLVL=3", | ||||
|     "HOME=/Users/zoon", | ||||
|     "ITERM_SESSION_ID=w0t0p0:6D29EB08-1B96-41B8-8672-0B035605AEE5", | ||||
|     "LESS=-R", | ||||
|     "LOGNAME=zoon", | ||||
|     "LC_CTYPE=UTF-8", | ||||
|     "GOPATH=/Users/zoon/Projects/gopath" | ||||
|   ] | ||||
| } | ||||
| } | ||||
							
								
								
									
										13
									
								
								examples/js-grpc/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								examples/js-grpc/Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| .PHONY: build | ||||
| build: | ||||
| 	mkdir -p output | ||||
| 	protoc -I. --gotemplate_out=template_dir=templates,debug=true:output ./protos/*.proto | ||||
|  | ||||
|  | ||||
| .PHONY: re | ||||
| re: clean build | ||||
|  | ||||
|  | ||||
| .PHONY: clean | ||||
| clean: | ||||
| 	rm -rf output | ||||
							
								
								
									
										146
									
								
								examples/js-grpc/output/test/test_grpc_js.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										146
									
								
								examples/js-grpc/output/test/test_grpc_js.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,146 @@ | ||||
| // GENERATED CODE -- DO NOT EDIT! | ||||
|  | ||||
| 'use strict'; | ||||
| var grpc = require('grpc'); | ||||
| var test_pb = require('./test_pb.js'); | ||||
|  | ||||
|  | ||||
| function serialize_test_TestNoStreamRequest(arg) { | ||||
|   if (!(arg instanceof test_pb.TestNoStreamRequest)) { | ||||
|     throw new Error('Expected argument of type test.TestNoStreamRequest'); | ||||
|   } | ||||
|   return new Buffer(arg.serializeBinary()); | ||||
| } | ||||
|  | ||||
| function deserialize_test_TestNoStreamRequest(buffer_arg) { | ||||
|   return test_pb.TestNoStreamRequest.deserializeBinary(new Uint8Array(buffer_arg)); | ||||
| } | ||||
|  | ||||
| function serialize_test_TestNoStreamReply(arg) { | ||||
|   if (!(arg instanceof test_pb.TestNoStreamReply)) { | ||||
|     throw new Error('Expected argument of type test.TestNoStreamReply'); | ||||
|   } | ||||
|   return new Buffer(arg.serializeBinary()); | ||||
| } | ||||
|  | ||||
| function deserialize_test_TestNoStreamReply(buffer_arg) { | ||||
|   return test_pb.TestNoStreamReply.deserializeBinary(new Uint8Array(buffer_arg)); | ||||
| } | ||||
|  | ||||
| function serialize_test_TestStreamRequestRequest(arg) { | ||||
|   if (!(arg instanceof test_pb.TestStreamRequestRequest)) { | ||||
|     throw new Error('Expected argument of type test.TestStreamRequestRequest'); | ||||
|   } | ||||
|   return new Buffer(arg.serializeBinary()); | ||||
| } | ||||
|  | ||||
| function deserialize_test_TestStreamRequestRequest(buffer_arg) { | ||||
|   return test_pb.TestStreamRequestRequest.deserializeBinary(new Uint8Array(buffer_arg)); | ||||
| } | ||||
|  | ||||
| function serialize_test_TestStreamRequestReply(arg) { | ||||
|   if (!(arg instanceof test_pb.TestStreamRequestReply)) { | ||||
|     throw new Error('Expected argument of type test.TestStreamRequestReply'); | ||||
|   } | ||||
|   return new Buffer(arg.serializeBinary()); | ||||
| } | ||||
|  | ||||
| function deserialize_test_TestStreamRequestReply(buffer_arg) { | ||||
|   return test_pb.TestStreamRequestReply.deserializeBinary(new Uint8Array(buffer_arg)); | ||||
| } | ||||
|  | ||||
| function serialize_test_TestStreamReplyRequest(arg) { | ||||
|   if (!(arg instanceof test_pb.TestStreamReplyRequest)) { | ||||
|     throw new Error('Expected argument of type test.TestStreamReplyRequest'); | ||||
|   } | ||||
|   return new Buffer(arg.serializeBinary()); | ||||
| } | ||||
|  | ||||
| function deserialize_test_TestStreamReplyRequest(buffer_arg) { | ||||
|   return test_pb.TestStreamReplyRequest.deserializeBinary(new Uint8Array(buffer_arg)); | ||||
| } | ||||
|  | ||||
| function serialize_test_TestStreamReplyReply(arg) { | ||||
|   if (!(arg instanceof test_pb.TestStreamReplyReply)) { | ||||
|     throw new Error('Expected argument of type test.TestStreamReplyReply'); | ||||
|   } | ||||
|   return new Buffer(arg.serializeBinary()); | ||||
| } | ||||
|  | ||||
| function deserialize_test_TestStreamReplyReply(buffer_arg) { | ||||
|   return test_pb.TestStreamReplyReply.deserializeBinary(new Uint8Array(buffer_arg)); | ||||
| } | ||||
|  | ||||
| function serialize_test_TestStreamBothRequest(arg) { | ||||
|   if (!(arg instanceof test_pb.TestStreamBothRequest)) { | ||||
|     throw new Error('Expected argument of type test.TestStreamBothRequest'); | ||||
|   } | ||||
|   return new Buffer(arg.serializeBinary()); | ||||
| } | ||||
|  | ||||
| function deserialize_test_TestStreamBothRequest(buffer_arg) { | ||||
|   return test_pb.TestStreamBothRequest.deserializeBinary(new Uint8Array(buffer_arg)); | ||||
| } | ||||
|  | ||||
| function serialize_test_TestStreamBothReply(arg) { | ||||
|   if (!(arg instanceof test_pb.TestStreamBothReply)) { | ||||
|     throw new Error('Expected argument of type test.TestStreamBothReply'); | ||||
|   } | ||||
|   return new Buffer(arg.serializeBinary()); | ||||
| } | ||||
|  | ||||
| function deserialize_test_TestStreamBothReply(buffer_arg) { | ||||
|   return test_pb.TestStreamBothReply.deserializeBinary(new Uint8Array(buffer_arg)); | ||||
| } | ||||
|  | ||||
|  | ||||
| var TestServiceService = exports.TestServiceService = { | ||||
|    | ||||
|   testNoStream: { | ||||
|     path: '/test.TestService/TestNoStream', | ||||
|     requestStream: false, | ||||
|     responseStream: false, | ||||
|     requestType: test_pb.TestNoStreamRequest, | ||||
|     responseType: test_pb.TestNoStreamReply, | ||||
|     requestSerialize: serialize_test_TestNoStreamRequest, | ||||
|     requestDeserialize: deserialize_test_TestNoStreamRequest, | ||||
|     responseSerialize: serialize_test_TestNoStreamReply, | ||||
|     responseDeserialize: deserialize_test_TestNoStreamReply, | ||||
|   }, | ||||
|   testStreamRequest: { | ||||
|     path: '/test.TestService/TestStreamRequest', | ||||
|     requestStream: true, | ||||
|     responseStream: false, | ||||
|     requestType: test_pb.TestStreamRequestRequest, | ||||
|     responseType: test_pb.TestStreamRequestReply, | ||||
|     requestSerialize: serialize_test_TestStreamRequestRequest, | ||||
|     requestDeserialize: deserialize_test_TestStreamRequestRequest, | ||||
|     responseSerialize: serialize_test_TestStreamRequestReply, | ||||
|     responseDeserialize: deserialize_test_TestStreamRequestReply, | ||||
|   }, | ||||
|   testStreamReply: { | ||||
|     path: '/test.TestService/TestStreamReply', | ||||
|     requestStream: false, | ||||
|     responseStream: true, | ||||
|     requestType: test_pb.TestStreamReplyRequest, | ||||
|     responseType: test_pb.TestStreamReplyReply, | ||||
|     requestSerialize: serialize_test_TestStreamReplyRequest, | ||||
|     requestDeserialize: deserialize_test_TestStreamReplyRequest, | ||||
|     responseSerialize: serialize_test_TestStreamReplyReply, | ||||
|     responseDeserialize: deserialize_test_TestStreamReplyReply, | ||||
|   }, | ||||
|   testStreamBoth: { | ||||
|     path: '/test.TestService/TestStreamBoth', | ||||
|     requestStream: true, | ||||
|     responseStream: true, | ||||
|     requestType: test_pb.TestStreamBothRequest, | ||||
|     responseType: test_pb.TestStreamBothReply, | ||||
|     requestSerialize: serialize_test_TestStreamBothRequest, | ||||
|     requestDeserialize: deserialize_test_TestStreamBothRequest, | ||||
|     responseSerialize: serialize_test_TestStreamBothReply, | ||||
|     responseDeserialize: deserialize_test_TestStreamBothReply, | ||||
|   }, | ||||
|    | ||||
| } | ||||
|  | ||||
| exports.TestServiceClient = grpc.makeGenericClientConstructor(TestServiceService); | ||||
							
								
								
									
										34
									
								
								examples/js-grpc/protos/test.proto
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								examples/js-grpc/protos/test.proto
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| syntax = "proto3"; | ||||
|  | ||||
| package test; | ||||
|  | ||||
| option go_package = "github.com/united-drivers/models/go/test;testpb"; | ||||
|  | ||||
| service TestService { | ||||
|   rpc TestNoStream(TestNoStreamRequest) returns (TestNoStreamReply); | ||||
|   rpc TestStreamRequest(stream TestStreamRequestRequest) returns (TestStreamRequestReply); | ||||
|   rpc TestStreamReply(TestStreamReplyRequest) returns (stream TestStreamReplyReply); | ||||
|   rpc TestStreamBoth(stream TestStreamBothRequest) returns (stream TestStreamBothReply); | ||||
| } | ||||
|  | ||||
| message TestMessage { | ||||
|   string a = 1; | ||||
|   int32 b = 2; | ||||
|   int64 c = 3; | ||||
|   float d = 4; | ||||
|   double e = 5; | ||||
|   repeated string n = 14; | ||||
|   repeated int32 o = 15; | ||||
|   repeated int64 p = 16; | ||||
|   repeated float q = 17; | ||||
|   repeated double r = 18; | ||||
| } | ||||
|  | ||||
| message TestNoStreamRequest { TestMessage message = 1; } | ||||
| message TestNoStreamReply   { TestMessage message = 1; string err_msg = 2; } | ||||
| message TestStreamRequestRequest { TestMessage message = 1; } | ||||
| message TestStreamRequestReply   { TestMessage message = 1; string err_msg = 2; } | ||||
| message TestStreamReplyRequest { TestMessage message = 1; } | ||||
| message TestStreamReplyReply   { TestMessage message = 1; string err_msg = 2; } | ||||
| message TestStreamBothRequest { TestMessage message = 1; } | ||||
| message TestStreamBothReply   { TestMessage message = 1; string err_msg = 2; } | ||||
| @@ -0,0 +1,47 @@ | ||||
| // GENERATED CODE -- DO NOT EDIT! | ||||
| {{$Package:=.File.Package}} | ||||
| 'use strict'; | ||||
| var grpc = require('grpc'); | ||||
| var {{$Package}}_pb = require('./{{$Package}}_pb.js'); | ||||
|  | ||||
| {{range .File.Service}}{{range .Method}} | ||||
| function serialize_{{$Package}}_{{.InputType | splitArray "." | last}}(arg) { | ||||
|   if (!(arg instanceof {{$Package}}_pb.{{.InputType | splitArray "." | last}})) { | ||||
|     throw new Error('Expected argument of type {{$Package}}.{{.InputType | splitArray "." | last}}'); | ||||
|   } | ||||
|   return new Buffer(arg.serializeBinary()); | ||||
| } | ||||
|  | ||||
| function deserialize_{{$Package}}_{{.InputType | splitArray "." | last}}(buffer_arg) { | ||||
|   return {{$Package}}_pb.{{.InputType | splitArray "." | last}}.deserializeBinary(new Uint8Array(buffer_arg)); | ||||
| } | ||||
|  | ||||
| function serialize_{{$Package}}_{{.OutputType | splitArray "." | last}}(arg) { | ||||
|   if (!(arg instanceof {{$Package}}_pb.{{.OutputType | splitArray "." | last}})) { | ||||
|     throw new Error('Expected argument of type {{$Package}}.{{.OutputType | splitArray "." | last}}'); | ||||
|   } | ||||
|   return new Buffer(arg.serializeBinary()); | ||||
| } | ||||
|  | ||||
| function deserialize_{{$Package}}_{{.OutputType | splitArray "." | last}}(buffer_arg) { | ||||
|   return {{$Package}}_pb.{{.OutputType | splitArray "." | last}}.deserializeBinary(new Uint8Array(buffer_arg)); | ||||
| } | ||||
| {{end}}{{end}} | ||||
| {{range .File.Service}} | ||||
| var {{.Name}}Service = exports.{{.Name}}Service = { | ||||
|   {{$serviceName:=.Name}} | ||||
|   {{range .Method}}{{.Name | lowerCamelCase}}: { | ||||
|     path: '/{{$Package}}.{{$serviceName}}/{{.Name}}', | ||||
|     requestStream: {{.ClientStreaming | default "false"}}, | ||||
|     responseStream: {{.ServerStreaming | default "false"}}, | ||||
|     requestType: {{$Package}}_pb.{{.InputType | splitArray "." | last}}, | ||||
|     responseType: {{$Package}}_pb.{{.OutputType | splitArray "." | last}}, | ||||
|     requestSerialize: serialize_{{$Package}}_{{.InputType | splitArray "." | last}}, | ||||
|     requestDeserialize: deserialize_{{$Package}}_{{.InputType | splitArray "." | last}}, | ||||
|     responseSerialize: serialize_{{$Package}}_{{.OutputType | splitArray "." | last}}, | ||||
|     responseDeserialize: deserialize_{{$Package}}_{{.OutputType | splitArray "." | last}}, | ||||
|   }, | ||||
|   {{end}} | ||||
| } | ||||
|  | ||||
| exports.{{.Name}}Client = grpc.makeGenericClientConstructor({{.Name}}Service);{{end}} | ||||
| @@ -1,56 +0,0 @@ | ||||
| // GENERATED CODE -- DO NOT EDIT! | ||||
|  | ||||
| 'use strict'; | ||||
| {{$file:=.File}}{{$service:=.Service}} | ||||
|  | ||||
| var {{$file.Package}}_pb = require('../{{$file.Package}}/{{$file.Package}}_pb.js'); | ||||
| var grpc = require('grpc'); | ||||
| var base64 = require('base64-js'); | ||||
|  | ||||
| function serializeToBase64(req) { | ||||
|     return base64.fromByteArray(req) | ||||
| } | ||||
|  | ||||
| function deserializeFromBase64(b64) { | ||||
|     return new Uint8Array(base64.toByteArray(b64)) | ||||
| } | ||||
| {{range .Service.Method}} | ||||
| function serialize_{{$file.Package}}_{{.Name}}Request(arg) { | ||||
|     if (!(arg instanceof {{$file.Package}}_pb.{{.Name}}Request)) { | ||||
|         throw new Error('Expected argument of type {{$file.Package}}.{{.Name}}Request'); | ||||
|     } | ||||
|     return serializeToBase64(arg.serializeBinary()); | ||||
| } | ||||
|  | ||||
| function deserialize_{{$file.Package}}_{{.Name}}Request(base64) { | ||||
|     return {{$file.Package}}_pb.{{.Name}}Request.deserializeBinary(deserializeFromBase64(base64)); | ||||
| } | ||||
|  | ||||
| function serialize_{{$file.Package}}_{{.Name}}Reply(arg) { | ||||
|     if (!(arg instanceof {{$file.Package}}_pb.{{.Name}}Reply)) { | ||||
|         throw new Error('Expected argument of type {{$file.Package}}.{{.Name}}Reply'); | ||||
|     } | ||||
|     return serializeToBase64(arg.serializeBinary()); | ||||
| } | ||||
|  | ||||
| function deserialize_{{$file.Package}}_{{.Name}}Reply(base64) { | ||||
|     return {{$file.Package}}_pb.{{.Name}}Reply.deserializeBinary(deserializeFromBase64(base64)); | ||||
| } | ||||
| {{end}} | ||||
| var TestServiceService = { | ||||
|     {{range .Service.Method}} | ||||
|     {{.Name}}: { | ||||
|         path: '/{{$file.Package}}.{{$service.Name}}/{{.Name}}', | ||||
|         requestStream: {{if .ClientStreaming}}true{{else}}false{{end}}, | ||||
|         responseStream: {{if .ServerStreaming}}true{{else}}false{{end}}, | ||||
|         requestType: {{$file.Package}}_pb.{{.Name}}Request, | ||||
|         responseType: {{$file.Package}}_pb.{{.Name}}Reply, | ||||
|         requestSerialize: serialize_{{$file.Package}}_{{.Name}}Request, | ||||
|         requestDeserialize: deserialize_{{$file.Package}}_{{.Name}}Request, | ||||
|         responseSerialize: serialize_{{$file.Package}}_{{.Name}}Reply, | ||||
|         responseDeserialize: deserialize_{{$file.Package}}_{{.Name}}Reply, | ||||
|     }, | ||||
|     {{end}} | ||||
| }; | ||||
|  | ||||
| exports.TestServiceClient = grpc.makeGenericClientConstructor({{.Service.Name}}Service); | ||||
| @@ -0,0 +1,44 @@ | ||||
| // GENERATED CODE -- DO NOT EDIT! | ||||
| {{$Package:=.File.Package}} | ||||
| 'use strict'; | ||||
| var grpc = require('grpc'); | ||||
| var {{$Package}}_pb = require('./{{$Package}}_pb.js'); | ||||
| {{range .File.Service}}{{range .Method}} | ||||
| function serialize_{{$Package}}_{{.InputType | splitArray "." | last}}(arg) { | ||||
|   if (!(arg instanceof {{$Package}}_pb.{{.InputType | splitArray "." | last}})) { | ||||
|     throw new Error('Expected argument of type {{$Package}}.{{.InputType | splitArray "." | last}}'); | ||||
|   } | ||||
|   return new Buffer(arg.serializeBinary()); | ||||
| } | ||||
|  | ||||
| function deserialize_{{$Package}}_{{.InputType | splitArray "." | last}}(buffer_arg) { | ||||
|   return {{$Package}}_pb.{{.InputType | splitArray "." | last}}.deserializeBinary(new Uint8Array(buffer_arg)); | ||||
| } | ||||
|  | ||||
| function serialize_{{$Package}}_{{.OutputType | splitArray "." | last}}(arg) { | ||||
|   if (!(arg instanceof {{$Package}}_pb.{{.OutputType | splitArray "." | last}})) { | ||||
|     throw new Error('Expected argument of type {{$Package}}.{{.OutputType | splitArray "." | last}}'); | ||||
|   } | ||||
|   return new Buffer(arg.serializeBinary()); | ||||
| } | ||||
|  | ||||
| function deserialize_{{$Package}}_{{.OutputType | splitArray "." | last}}(buffer_arg) { | ||||
|   return {{$Package}}_pb.{{.OutputType | splitArray "." | last}}.deserializeBinary(new Uint8Array(buffer_arg)); | ||||
| } | ||||
| {{end}}{{end}} | ||||
| {{range .File.Service}} | ||||
| var {{.Name}}Service = exports.{{.Name}}Service = { | ||||
|   {{$serviceName:=.Name}}{{range .Method}}{{.Name | lowerCamelCase}}: { | ||||
|     path: '/{{$Package}}.{{$serviceName}}/{{.Name}}', | ||||
|     requestStream: {{.ClientStreaming | default "false"}}, | ||||
|     responseStream: {{.ServerStreaming | default "false"}}, | ||||
|     requestType: {{$Package}}_pb.{{.InputType | splitArray "." | last}}, | ||||
|     responseType: {{$Package}}_pb.{{.OutputType | splitArray "." | last}}, | ||||
|     requestSerialize: serialize_{{$Package}}_{{.InputType | splitArray "." | last}}, | ||||
|     requestDeserialize: deserialize_{{$Package}}_{{.InputType | splitArray "." | last}}, | ||||
|     responseSerialize: serialize_{{$Package}}_{{.OutputType | splitArray "." | last}}, | ||||
|     responseDeserialize: deserialize_{{$Package}}_{{.OutputType | splitArray "." | last}}, | ||||
|   },{{end}} | ||||
| } | ||||
|  | ||||
| exports.{{.Name}}Client = grpc.makeGenericClientConstructor({{.Name}}Service);{{end}} | ||||
							
								
								
									
										10
									
								
								glide.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										10
									
								
								glide.lock
									
									
									
										generated
									
									
									
								
							| @@ -1,19 +1,21 @@ | ||||
| hash: f044e7016f8e72eb5deff471923e17f1fbc26046692649b3289220d2cab9e68a | ||||
| updated: 2016-12-15T13:43:12.466003615+01:00 | ||||
| hash: 488701437e53b39667ed5a84ed1500e727ea8d4902d804c3ea7eb50b1fc022a1 | ||||
| updated: 2016-12-20T11:08:43.124170177+01:00 | ||||
| imports: | ||||
| - name: github.com/aokoli/goutils | ||||
|   version: 9c37978a95bd5c709a15883b6242714ea6709e64 | ||||
| - name: github.com/golang/protobuf | ||||
|   version: 8ee79997227bf9b34611aee7946ae64735e6fd93 | ||||
|   version: 98fa357170587e470c5f27d3c3ea0947b71eb455 | ||||
|   subpackages: | ||||
|   - proto | ||||
|   - protoc-gen-go/descriptor | ||||
|   - protoc-gen-go/generator | ||||
|   - protoc-gen-go/plugin | ||||
| - name: github.com/huandu/xstrings | ||||
|   version: 3959339b333561bf62a38b424fd41517c2c90f40 | ||||
| - name: github.com/kr/fs | ||||
|   version: 2788f0dbd16903de03cb8186e5c7d97b69ad387b | ||||
| - name: github.com/Masterminds/sprig | ||||
|   version: 69011c0cd9b4d2e0733c4d9e2c8e2a5a0d0a2f2f | ||||
|   version: 1e60e4ce482a1e2c7b9c9be667535ef152e04300 | ||||
| - name: github.com/satori/go.uuid | ||||
|   version: 879c5887cd475cd7864858769793b2ceb0d44feb | ||||
| testImports: [] | ||||
|   | ||||
| @@ -8,3 +8,4 @@ import: | ||||
|   - protoc-gen-go/plugin | ||||
| - package: github.com/kr/fs | ||||
| - package: github.com/Masterminds/sprig | ||||
| - package: github.com/huandu/xstrings | ||||
|   | ||||
							
								
								
									
										28
									
								
								helpers.go
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								helpers.go
									
									
									
									
									
								
							| @@ -2,9 +2,11 @@ package main | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"strings" | ||||
| 	"text/template" | ||||
|  | ||||
| 	"github.com/Masterminds/sprig" | ||||
| 	"github.com/huandu/xstrings" | ||||
| ) | ||||
|  | ||||
| var ProtoHelpersFuncMap = template.FuncMap{ | ||||
| @@ -21,12 +23,34 @@ var ProtoHelpersFuncMap = template.FuncMap{ | ||||
| 		a, _ := json.MarshalIndent(v, "", "  ") | ||||
| 		return string(a) | ||||
| 	}, | ||||
| 	"first": func(a []interface{}) interface{} { | ||||
| 	"splitArray": func(sep string, s string) []string { | ||||
| 		return strings.Split(s, sep) | ||||
| 	}, | ||||
| 	"first": func(a []string) string { | ||||
| 		return a[0] | ||||
| 	}, | ||||
| 	"last": func(a []interface{}) interface{} { | ||||
| 	"last": func(a []string) string { | ||||
| 		return a[len(a)-1] | ||||
| 	}, | ||||
| 	"upperFirst": func(s string) string { | ||||
| 		return strings.ToUpper(s[:1]) + s[1:] | ||||
| 	}, | ||||
| 	"lowerFirst": func(s string) string { | ||||
| 		return strings.ToLower(s[:1]) + s[1:] | ||||
| 	}, | ||||
| 	"camelCase": func(s string) string { | ||||
| 		return xstrings.ToCamelCase(s) | ||||
| 	}, | ||||
| 	"lowerCamelCase": func(s string) string { | ||||
| 		cc := xstrings.ToCamelCase(s) | ||||
| 		return strings.ToLower(cc[:1]) + cc[1:] | ||||
| 	}, | ||||
| 	"snakeCase": func(s string) string { | ||||
| 		return xstrings.ToSnakeCase(s) | ||||
| 	}, | ||||
| 	"kebabCase": func(s string) string { | ||||
| 		return strings.Replace(xstrings.ToSnakeCase(s), "_", "-", -1) | ||||
| 	}, | ||||
| } | ||||
|  | ||||
| func init() { | ||||
|   | ||||
							
								
								
									
										7
									
								
								vendor/github.com/Masterminds/sprig/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								vendor/github.com/Masterminds/sprig/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -166,13 +166,6 @@ parse, it returns the time unaltered. See `time.ParseDuration` for info on durat | ||||
|   follows: []byte are converted, fmt.Stringers will have String() called. | ||||
|   errors will have Error() called. All others will be passed through | ||||
|   fmt.Sprtinf("%v"). | ||||
| - set: Takes a dict, a key, and a value, and sets that key/value pair in | ||||
|   the dict. `set $dict $key $value`. For convenience, it returns the dict, | ||||
|   even though the dict was modified in place. | ||||
| - unset: Takes a dict and a key, and deletes that key/value pair from the | ||||
|   dict. `unset $dict $key`. This returns the dict for convenience. | ||||
| - hasKey: Takes a dict and a key, and returns boolean true if the key is in | ||||
|   the dict. | ||||
|  | ||||
| ``` | ||||
| {{$t := tuple 1 "a" "foo"}} | ||||
|   | ||||
							
								
								
									
										45
									
								
								vendor/github.com/Masterminds/sprig/functions.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										45
									
								
								vendor/github.com/Masterminds/sprig/functions.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -99,14 +99,6 @@ OS: | ||||
| 	- env: Resolve an environment variable | ||||
| 	- expandenv: Expand a string through the environment | ||||
|  | ||||
| File Paths: | ||||
| 	- base: Return the last element of a path. https://golang.org/pkg/path#Base | ||||
| 	- dir: Remove the last element of a path. https://golang.org/pkg/path#Dir | ||||
| 	- clean: Clean a path to the shortest equivalent name.  (e.g. remove "foo/.." | ||||
| 	from "foo/../bar.html") https://golang.org/pkg/path#Clean | ||||
| 	- ext: https://golang.org/pkg/path#Ext | ||||
| 	- isAbs: https://golang.org/pkg/path#IsAbs | ||||
|  | ||||
| Encoding: | ||||
| 	- b64enc: Base 64 encode a string. | ||||
| 	- b64dec: Base 64 decode a string. | ||||
| @@ -143,13 +135,6 @@ Data Structures: | ||||
| 	  follows: []byte are converted, fmt.Stringers will have String() called. | ||||
| 	  errors will have Error() called. All others will be passed through | ||||
| 	  fmt.Sprtinf("%v"). | ||||
| 	- set: Takes a dict, a key, and a value, and sets that key/value pair in | ||||
| 	  the dict. `set $dict $key $value`. For convenience, it returns the dict, | ||||
| 	  even though the dict was modified in place. | ||||
| 	- unset: Takes a dict and a key, and deletes that key/value pair from the | ||||
| 	  dict. `unset $dict $key`. This returns the dict for convenience. | ||||
| 	- hasKey: Takes a dict and a key, and returns boolean true if the key is in | ||||
| 	  the dict. | ||||
|  | ||||
| Math Functions: | ||||
|  | ||||
| @@ -194,7 +179,6 @@ import ( | ||||
| 	"math" | ||||
| 	"math/big" | ||||
| 	"os" | ||||
| 	"path" | ||||
| 	"reflect" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| @@ -379,13 +363,6 @@ var genericMap = map[string]interface{}{ | ||||
| 	"env":       func(s string) string { return os.Getenv(s) }, | ||||
| 	"expandenv": func(s string) string { return os.ExpandEnv(s) }, | ||||
|  | ||||
| 	// File Paths: | ||||
| 	"base":  path.Base, | ||||
| 	"dir":   path.Dir, | ||||
| 	"clean": path.Clean, | ||||
| 	"ext":   path.Ext, | ||||
| 	"isAbs": path.IsAbs, | ||||
|  | ||||
| 	// Encoding: | ||||
| 	"b64enc": base64encode, | ||||
| 	"b64dec": base64decode, | ||||
| @@ -393,11 +370,8 @@ var genericMap = map[string]interface{}{ | ||||
| 	"b32dec": base32decode, | ||||
|  | ||||
| 	// Data Structures: | ||||
| 	"tuple":  tuple, | ||||
| 	"dict":   dict, | ||||
| 	"set":    set, | ||||
| 	"unset":  unset, | ||||
| 	"hasKey": hasKey, | ||||
| 	"tuple": tuple, | ||||
| 	"dict":  dict, | ||||
|  | ||||
| 	// Crypto: | ||||
| 	"genPrivateKey": generatePrivateKey, | ||||
| @@ -660,21 +634,6 @@ func tuple(v ...interface{}) []interface{} { | ||||
| 	return v | ||||
| } | ||||
|  | ||||
| func set(d map[string]interface{}, key string, value interface{}) map[string]interface{} { | ||||
| 	d[key] = value | ||||
| 	return d | ||||
| } | ||||
|  | ||||
| func unset(d map[string]interface{}, key string) map[string]interface{} { | ||||
| 	delete(d, key) | ||||
| 	return d | ||||
| } | ||||
|  | ||||
| func hasKey(d map[string]interface{}, key string) bool { | ||||
| 	_, ok := d[key] | ||||
| 	return ok | ||||
| } | ||||
|  | ||||
| func dict(v ...interface{}) map[string]interface{} { | ||||
| 	dict := map[string]interface{}{} | ||||
| 	lenv := len(v) | ||||
|   | ||||
							
								
								
									
										69
									
								
								vendor/github.com/Masterminds/sprig/functions_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										69
									
								
								vendor/github.com/Masterminds/sprig/functions_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -12,7 +12,6 @@ import ( | ||||
| 	"text/template" | ||||
|  | ||||
| 	"github.com/aokoli/goutils" | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| ) | ||||
|  | ||||
| // This is woefully incomplete. Please help. | ||||
| @@ -285,16 +284,6 @@ func TestEmpty(t *testing.T) { | ||||
| 	if err := runt(tpl, "1"); err != nil { | ||||
| 		t.Error(err) | ||||
| 	} | ||||
|  | ||||
| 	dict := map[string]interface{}{"top": map[string]interface{}{}} | ||||
| 	tpl = `{{if empty .top.NoSuchThing}}1{{else}}0{{end}}` | ||||
| 	if err := runtv(tpl, "1", dict); err != nil { | ||||
| 		t.Error(err) | ||||
| 	} | ||||
| 	tpl = `{{if empty .bottom.NoSuchThing}}1{{else}}0{{end}}` | ||||
| 	if err := runtv(tpl, "1", dict); err != nil { | ||||
| 		t.Error(err) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func TestSplit(t *testing.T) { | ||||
| @@ -533,43 +522,6 @@ func TestDict(t *testing.T) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func TestUnset(t *testing.T) { | ||||
| 	tpl := `{{- $d := dict "one" 1 "two" 222222 -}} | ||||
| 	{{- $_ := unset $d "two" -}} | ||||
| 	{{- range $k, $v := $d}}{{$k}}{{$v}}{{- end -}} | ||||
| 	` | ||||
|  | ||||
| 	expect := "one1" | ||||
| 	if err := runt(tpl, expect); err != nil { | ||||
| 		t.Error(err) | ||||
| 	} | ||||
| } | ||||
| func TestHasKey(t *testing.T) { | ||||
| 	tpl := `{{- $d := dict "one" 1 "two" 222222 -}} | ||||
| 	{{- if hasKey $d "one" -}}1{{- end -}} | ||||
| 	` | ||||
|  | ||||
| 	expect := "1" | ||||
| 	if err := runt(tpl, expect); err != nil { | ||||
| 		t.Error(err) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func TestSet(t *testing.T) { | ||||
| 	tpl := `{{- $d := dict "one" 1 "two" 222222 -}} | ||||
| 	{{- $_ := set $d "two" 2 -}} | ||||
| 	{{- $_ := set $d "three" 3 -}} | ||||
| 	{{- if hasKey $d "one" -}}{{$d.one}}{{- end -}} | ||||
| 	{{- if hasKey $d "two" -}}{{$d.two}}{{- end -}} | ||||
| 	{{- if hasKey $d "three" -}}{{$d.three}}{{- end -}} | ||||
| 	` | ||||
|  | ||||
| 	expect := "123" | ||||
| 	if err := runt(tpl, expect); err != nil { | ||||
| 		t.Error(err) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func TestUntil(t *testing.T) { | ||||
| 	tests := map[string]string{ | ||||
| 		`{{range $i, $e := until 5}}{{$i}}{{$e}}{{end}}`:   "0011223344", | ||||
| @@ -599,27 +551,6 @@ func TestUntilStep(t *testing.T) { | ||||
|  | ||||
| } | ||||
|  | ||||
| func TestBase(t *testing.T) { | ||||
| 	assert.NoError(t, runt(`{{ base "foo/bar" }}`, "bar")) | ||||
| } | ||||
|  | ||||
| func TestDir(t *testing.T) { | ||||
| 	assert.NoError(t, runt(`{{ dir "foo/bar/baz" }}`, "foo/bar")) | ||||
| } | ||||
|  | ||||
| func TestIsAbs(t *testing.T) { | ||||
| 	assert.NoError(t, runt(`{{ isAbs "/foo" }}`, "true")) | ||||
| 	assert.NoError(t, runt(`{{ isAbs "foo" }}`, "false")) | ||||
| } | ||||
|  | ||||
| func TestClean(t *testing.T) { | ||||
| 	assert.NoError(t, runt(`{{ clean "/foo/../foo/../bar" }}`, "/bar")) | ||||
| } | ||||
|  | ||||
| func TestExt(t *testing.T) { | ||||
| 	assert.NoError(t, runt(`{{ ext "/foo/bar/baz.txt" }}`, ".txt")) | ||||
| } | ||||
|  | ||||
| func TestDelete(t *testing.T) { | ||||
| 	fmap := TxtFuncMap() | ||||
| 	delete(fmap, "split") | ||||
|   | ||||
							
								
								
									
										762
									
								
								vendor/github.com/golang/protobuf/_conformance/conformance_proto/conformance.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										762
									
								
								vendor/github.com/golang/protobuf/_conformance/conformance_proto/conformance.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -169,13 +169,6 @@ func (m *ConformanceRequest) GetJsonPayload() string { | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *ConformanceRequest) GetRequestedOutputFormat() WireFormat { | ||||
| 	if m != nil { | ||||
| 		return m.RequestedOutputFormat | ||||
| 	} | ||||
| 	return WireFormat_UNSPECIFIED | ||||
| } | ||||
|  | ||||
| // XXX_OneofFuncs is for the internal use of the proto package. | ||||
| func (*ConformanceRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { | ||||
| 	return _ConformanceRequest_OneofMarshaler, _ConformanceRequest_OneofUnmarshaler, _ConformanceRequest_OneofSizer, []interface{}{ | ||||
| @@ -578,22 +571,22 @@ type TestAllTypes struct { | ||||
| 	// (protobuf says names can be any valid C/C++ identifier.) | ||||
| 	Fieldname1    int32 `protobuf:"varint,401,opt,name=fieldname1" json:"fieldname1,omitempty"` | ||||
| 	FieldName2    int32 `protobuf:"varint,402,opt,name=field_name2,json=fieldName2" json:"field_name2,omitempty"` | ||||
| 	XFieldName3   int32 `protobuf:"varint,403,opt,name=_field_name3,json=FieldName3" json:"_field_name3,omitempty"` | ||||
| 	XFieldName3   int32 `protobuf:"varint,403,opt,name=_field_name3,json=fieldName3" json:"_field_name3,omitempty"` | ||||
| 	Field_Name4_  int32 `protobuf:"varint,404,opt,name=field__name4_,json=fieldName4" json:"field__name4_,omitempty"` | ||||
| 	Field0Name5   int32 `protobuf:"varint,405,opt,name=field0name5" json:"field0name5,omitempty"` | ||||
| 	Field_0Name6  int32 `protobuf:"varint,406,opt,name=field_0_name6,json=field0Name6" json:"field_0_name6,omitempty"` | ||||
| 	FieldName7    int32 `protobuf:"varint,407,opt,name=fieldName7" json:"fieldName7,omitempty"` | ||||
| 	FieldName8    int32 `protobuf:"varint,408,opt,name=FieldName8" json:"FieldName8,omitempty"` | ||||
| 	FieldName8    int32 `protobuf:"varint,408,opt,name=FieldName8,json=fieldName8" json:"FieldName8,omitempty"` | ||||
| 	Field_Name9   int32 `protobuf:"varint,409,opt,name=field_Name9,json=fieldName9" json:"field_Name9,omitempty"` | ||||
| 	Field_Name10  int32 `protobuf:"varint,410,opt,name=Field_Name10,json=FieldName10" json:"Field_Name10,omitempty"` | ||||
| 	FIELD_NAME11  int32 `protobuf:"varint,411,opt,name=FIELD_NAME11,json=FIELDNAME11" json:"FIELD_NAME11,omitempty"` | ||||
| 	FIELDName12   int32 `protobuf:"varint,412,opt,name=FIELD_name12,json=FIELDName12" json:"FIELD_name12,omitempty"` | ||||
| 	XFieldName13  int32 `protobuf:"varint,413,opt,name=__field_name13,json=FieldName13" json:"__field_name13,omitempty"` | ||||
| 	X_FieldName14 int32 `protobuf:"varint,414,opt,name=__Field_name14,json=FieldName14" json:"__Field_name14,omitempty"` | ||||
| 	Field_Name10  int32 `protobuf:"varint,410,opt,name=Field_Name10,json=fieldName10" json:"Field_Name10,omitempty"` | ||||
| 	FIELD_NAME11  int32 `protobuf:"varint,411,opt,name=FIELD_NAME11,json=fIELDNAME11" json:"FIELD_NAME11,omitempty"` | ||||
| 	FIELDName12   int32 `protobuf:"varint,412,opt,name=FIELD_name12,json=fIELDName12" json:"FIELD_name12,omitempty"` | ||||
| 	XFieldName13  int32 `protobuf:"varint,413,opt,name=__field_name13,json=fieldName13" json:"__field_name13,omitempty"` | ||||
| 	X_FieldName14 int32 `protobuf:"varint,414,opt,name=__Field_name14,json=fieldName14" json:"__Field_name14,omitempty"` | ||||
| 	Field_Name15  int32 `protobuf:"varint,415,opt,name=field__name15,json=fieldName15" json:"field__name15,omitempty"` | ||||
| 	Field__Name16 int32 `protobuf:"varint,416,opt,name=field__Name16,json=fieldName16" json:"field__Name16,omitempty"` | ||||
| 	FieldName17__ int32 `protobuf:"varint,417,opt,name=field_name17__,json=fieldName17" json:"field_name17__,omitempty"` | ||||
| 	FieldName18__ int32 `protobuf:"varint,418,opt,name=Field_name18__,json=FieldName18" json:"Field_name18__,omitempty"` | ||||
| 	FieldName18__ int32 `protobuf:"varint,418,opt,name=Field_name18__,json=fieldName18" json:"Field_name18__,omitempty"` | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) Reset()                    { *m = TestAllTypes{} } | ||||
| @@ -650,111 +643,6 @@ func (m *TestAllTypes) GetOneofField() isTestAllTypes_OneofField { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetOptionalInt32() int32 { | ||||
| 	if m != nil { | ||||
| 		return m.OptionalInt32 | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetOptionalInt64() int64 { | ||||
| 	if m != nil { | ||||
| 		return m.OptionalInt64 | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetOptionalUint32() uint32 { | ||||
| 	if m != nil { | ||||
| 		return m.OptionalUint32 | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetOptionalUint64() uint64 { | ||||
| 	if m != nil { | ||||
| 		return m.OptionalUint64 | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetOptionalSint32() int32 { | ||||
| 	if m != nil { | ||||
| 		return m.OptionalSint32 | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetOptionalSint64() int64 { | ||||
| 	if m != nil { | ||||
| 		return m.OptionalSint64 | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetOptionalFixed32() uint32 { | ||||
| 	if m != nil { | ||||
| 		return m.OptionalFixed32 | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetOptionalFixed64() uint64 { | ||||
| 	if m != nil { | ||||
| 		return m.OptionalFixed64 | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetOptionalSfixed32() int32 { | ||||
| 	if m != nil { | ||||
| 		return m.OptionalSfixed32 | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetOptionalSfixed64() int64 { | ||||
| 	if m != nil { | ||||
| 		return m.OptionalSfixed64 | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetOptionalFloat() float32 { | ||||
| 	if m != nil { | ||||
| 		return m.OptionalFloat | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetOptionalDouble() float64 { | ||||
| 	if m != nil { | ||||
| 		return m.OptionalDouble | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetOptionalBool() bool { | ||||
| 	if m != nil { | ||||
| 		return m.OptionalBool | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetOptionalString() string { | ||||
| 	if m != nil { | ||||
| 		return m.OptionalString | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetOptionalBytes() []byte { | ||||
| 	if m != nil { | ||||
| 		return m.OptionalBytes | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetOptionalNestedMessage() *TestAllTypes_NestedMessage { | ||||
| 	if m != nil { | ||||
| 		return m.OptionalNestedMessage | ||||
| @@ -769,34 +657,6 @@ func (m *TestAllTypes) GetOptionalForeignMessage() *ForeignMessage { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetOptionalNestedEnum() TestAllTypes_NestedEnum { | ||||
| 	if m != nil { | ||||
| 		return m.OptionalNestedEnum | ||||
| 	} | ||||
| 	return TestAllTypes_FOO | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetOptionalForeignEnum() ForeignEnum { | ||||
| 	if m != nil { | ||||
| 		return m.OptionalForeignEnum | ||||
| 	} | ||||
| 	return ForeignEnum_FOREIGN_FOO | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetOptionalStringPiece() string { | ||||
| 	if m != nil { | ||||
| 		return m.OptionalStringPiece | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetOptionalCord() string { | ||||
| 	if m != nil { | ||||
| 		return m.OptionalCord | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetRecursiveMessage() *TestAllTypes { | ||||
| 	if m != nil { | ||||
| 		return m.RecursiveMessage | ||||
| @@ -804,111 +664,6 @@ func (m *TestAllTypes) GetRecursiveMessage() *TestAllTypes { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetRepeatedInt32() []int32 { | ||||
| 	if m != nil { | ||||
| 		return m.RepeatedInt32 | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetRepeatedInt64() []int64 { | ||||
| 	if m != nil { | ||||
| 		return m.RepeatedInt64 | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetRepeatedUint32() []uint32 { | ||||
| 	if m != nil { | ||||
| 		return m.RepeatedUint32 | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetRepeatedUint64() []uint64 { | ||||
| 	if m != nil { | ||||
| 		return m.RepeatedUint64 | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetRepeatedSint32() []int32 { | ||||
| 	if m != nil { | ||||
| 		return m.RepeatedSint32 | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetRepeatedSint64() []int64 { | ||||
| 	if m != nil { | ||||
| 		return m.RepeatedSint64 | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetRepeatedFixed32() []uint32 { | ||||
| 	if m != nil { | ||||
| 		return m.RepeatedFixed32 | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetRepeatedFixed64() []uint64 { | ||||
| 	if m != nil { | ||||
| 		return m.RepeatedFixed64 | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetRepeatedSfixed32() []int32 { | ||||
| 	if m != nil { | ||||
| 		return m.RepeatedSfixed32 | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetRepeatedSfixed64() []int64 { | ||||
| 	if m != nil { | ||||
| 		return m.RepeatedSfixed64 | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetRepeatedFloat() []float32 { | ||||
| 	if m != nil { | ||||
| 		return m.RepeatedFloat | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetRepeatedDouble() []float64 { | ||||
| 	if m != nil { | ||||
| 		return m.RepeatedDouble | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetRepeatedBool() []bool { | ||||
| 	if m != nil { | ||||
| 		return m.RepeatedBool | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetRepeatedString() []string { | ||||
| 	if m != nil { | ||||
| 		return m.RepeatedString | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetRepeatedBytes() [][]byte { | ||||
| 	if m != nil { | ||||
| 		return m.RepeatedBytes | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetRepeatedNestedMessage() []*TestAllTypes_NestedMessage { | ||||
| 	if m != nil { | ||||
| 		return m.RepeatedNestedMessage | ||||
| @@ -923,34 +678,6 @@ func (m *TestAllTypes) GetRepeatedForeignMessage() []*ForeignMessage { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetRepeatedNestedEnum() []TestAllTypes_NestedEnum { | ||||
| 	if m != nil { | ||||
| 		return m.RepeatedNestedEnum | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetRepeatedForeignEnum() []ForeignEnum { | ||||
| 	if m != nil { | ||||
| 		return m.RepeatedForeignEnum | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetRepeatedStringPiece() []string { | ||||
| 	if m != nil { | ||||
| 		return m.RepeatedStringPiece | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetRepeatedCord() []string { | ||||
| 	if m != nil { | ||||
| 		return m.RepeatedCord | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetMapInt32Int32() map[int32]int32 { | ||||
| 	if m != nil { | ||||
| 		return m.MapInt32Int32 | ||||
| @@ -1357,132 +1084,6 @@ func (m *TestAllTypes) GetRepeatedValue() []*google_protobuf3.Value { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetFieldname1() int32 { | ||||
| 	if m != nil { | ||||
| 		return m.Fieldname1 | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetFieldName2() int32 { | ||||
| 	if m != nil { | ||||
| 		return m.FieldName2 | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetXFieldName3() int32 { | ||||
| 	if m != nil { | ||||
| 		return m.XFieldName3 | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetField_Name4_() int32 { | ||||
| 	if m != nil { | ||||
| 		return m.Field_Name4_ | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetField0Name5() int32 { | ||||
| 	if m != nil { | ||||
| 		return m.Field0Name5 | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetField_0Name6() int32 { | ||||
| 	if m != nil { | ||||
| 		return m.Field_0Name6 | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetFieldName7() int32 { | ||||
| 	if m != nil { | ||||
| 		return m.FieldName7 | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetFieldName8() int32 { | ||||
| 	if m != nil { | ||||
| 		return m.FieldName8 | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetField_Name9() int32 { | ||||
| 	if m != nil { | ||||
| 		return m.Field_Name9 | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetField_Name10() int32 { | ||||
| 	if m != nil { | ||||
| 		return m.Field_Name10 | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetFIELD_NAME11() int32 { | ||||
| 	if m != nil { | ||||
| 		return m.FIELD_NAME11 | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetFIELDName12() int32 { | ||||
| 	if m != nil { | ||||
| 		return m.FIELDName12 | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetXFieldName13() int32 { | ||||
| 	if m != nil { | ||||
| 		return m.XFieldName13 | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetX_FieldName14() int32 { | ||||
| 	if m != nil { | ||||
| 		return m.X_FieldName14 | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetField_Name15() int32 { | ||||
| 	if m != nil { | ||||
| 		return m.Field_Name15 | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetField__Name16() int32 { | ||||
| 	if m != nil { | ||||
| 		return m.Field__Name16 | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetFieldName17__() int32 { | ||||
| 	if m != nil { | ||||
| 		return m.FieldName17__ | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes) GetFieldName18__() int32 { | ||||
| 	if m != nil { | ||||
| 		return m.FieldName18__ | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| // XXX_OneofFuncs is for the internal use of the proto package. | ||||
| func (*TestAllTypes) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { | ||||
| 	return _TestAllTypes_OneofMarshaler, _TestAllTypes_OneofUnmarshaler, _TestAllTypes_OneofSizer, []interface{}{ | ||||
| @@ -1666,13 +1267,6 @@ func (m *TestAllTypes_NestedMessage) String() string            { return proto.C | ||||
| func (*TestAllTypes_NestedMessage) ProtoMessage()               {} | ||||
| func (*TestAllTypes_NestedMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } | ||||
|  | ||||
| func (m *TestAllTypes_NestedMessage) GetA() int32 { | ||||
| 	if m != nil { | ||||
| 		return m.A | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *TestAllTypes_NestedMessage) GetCorecursive() *TestAllTypes { | ||||
| 	if m != nil { | ||||
| 		return m.Corecursive | ||||
| @@ -1689,13 +1283,6 @@ func (m *ForeignMessage) String() string            { return proto.CompactTextSt | ||||
| func (*ForeignMessage) ProtoMessage()               {} | ||||
| func (*ForeignMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } | ||||
|  | ||||
| func (m *ForeignMessage) GetC() int32 { | ||||
| 	if m != nil { | ||||
| 		return m.C | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func init() { | ||||
| 	proto.RegisterType((*ConformanceRequest)(nil), "conformance.ConformanceRequest") | ||||
| 	proto.RegisterType((*ConformanceResponse)(nil), "conformance.ConformanceResponse") | ||||
| @@ -1710,177 +1297,176 @@ func init() { | ||||
| func init() { proto.RegisterFile("conformance_proto/conformance.proto", fileDescriptor0) } | ||||
|  | ||||
| var fileDescriptor0 = []byte{ | ||||
| 	// 2737 bytes of a gzipped FileDescriptorProto | ||||
| 	// 2731 bytes of a gzipped FileDescriptorProto | ||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x94, 0x5a, 0xd9, 0x72, 0xdb, 0xc8, | ||||
| 	0xd5, 0x16, 0x08, 0x59, 0x4b, 0x93, 0x92, 0xa8, 0xd6, 0xd6, 0x96, 0x5d, 0x63, 0x58, 0xb2, 0x7f, | ||||
| 	0xd3, 0xf6, 0x8c, 0xac, 0x05, 0x86, 0x65, 0xcf, 0x3f, 0x8e, 0x45, 0x9b, 0xb4, 0xe4, 0x8c, 0x25, | ||||
| 	0x17, 0x64, 0x8d, 0xab, 0x9c, 0x0b, 0x06, 0xa6, 0x20, 0x15, 0xc7, 0x24, 0xc1, 0x01, 0x48, 0x4f, | ||||
| 	0x94, 0xcb, 0xbc, 0x41, 0xf6, 0x7d, 0xbd, 0xcf, 0x7a, 0x93, 0xa4, 0x92, 0xab, 0x54, 0x6e, 0xb2, | ||||
| 	0x27, 0x95, 0x3d, 0x79, 0x85, 0xbc, 0x43, 0x52, 0xbd, 0xa2, 0xbb, 0x01, 0x50, 0xf4, 0x54, 0x0d, | ||||
| 	0x25, 0x1e, 0x7c, 0xfd, 0x9d, 0xd3, 0xe7, 0x1c, 0x7c, 0x2d, 0x1c, 0x18, 0x2c, 0xd7, 0x83, 0xf6, | ||||
| 	0x51, 0x10, 0xb6, 0xbc, 0x76, 0xdd, 0xaf, 0x75, 0xc2, 0xa0, 0x1b, 0xdc, 0x90, 0x2c, 0x2b, 0xc4, | ||||
| 	0x02, 0xf3, 0x92, 0x69, 0xf1, 0xec, 0x71, 0x10, 0x1c, 0x37, 0xfd, 0x1b, 0xe4, 0xd2, 0x8b, 0xde, | ||||
| 	0xd1, 0x0d, 0xaf, 0x7d, 0x42, 0x71, 0x8b, 0x6f, 0xe8, 0x97, 0x0e, 0x7b, 0xa1, 0xd7, 0x6d, 0x04, | ||||
| 	0x6d, 0x76, 0xdd, 0xd2, 0xaf, 0x1f, 0x35, 0xfc, 0xe6, 0x61, 0xad, 0xe5, 0x45, 0x2f, 0x19, 0xe2, | ||||
| 	0xbc, 0x8e, 0x88, 0xba, 0x61, 0xaf, 0xde, 0x65, 0x57, 0x2f, 0xe8, 0x57, 0xbb, 0x8d, 0x96, 0x1f, | ||||
| 	0x75, 0xbd, 0x56, 0x27, 0x2b, 0x80, 0x0f, 0x43, 0xaf, 0xd3, 0xf1, 0xc3, 0x88, 0x5e, 0x5f, 0xfa, | ||||
| 	0x85, 0x01, 0xe0, 0xfd, 0x78, 0x2f, 0xae, 0xff, 0x41, 0xcf, 0x8f, 0xba, 0xf0, 0x3a, 0x28, 0xf2, | ||||
| 	0x15, 0xb5, 0x8e, 0x77, 0xd2, 0x0c, 0xbc, 0x43, 0x64, 0x58, 0x46, 0xa9, 0xb0, 0x3d, 0xe4, 0x4e, | ||||
| 	0xf1, 0x2b, 0x4f, 0xe8, 0x05, 0xb8, 0x0c, 0x0a, 0xef, 0x47, 0x41, 0x5b, 0x00, 0x73, 0x96, 0x51, | ||||
| 	0x1a, 0xdf, 0x1e, 0x72, 0xf3, 0xd8, 0xca, 0x41, 0x7b, 0x60, 0x21, 0xa4, 0xe4, 0xfe, 0x61, 0x2d, | ||||
| 	0xe8, 0x75, 0x3b, 0xbd, 0x6e, 0x8d, 0x78, 0xed, 0x22, 0xd3, 0x32, 0x4a, 0x93, 0xeb, 0x0b, 0x2b, | ||||
| 	0x72, 0x9a, 0x9f, 0x35, 0x42, 0xbf, 0x4a, 0x2e, 0xbb, 0x73, 0x62, 0xdd, 0x1e, 0x59, 0x46, 0xcd, | ||||
| 	0xe5, 0x71, 0x30, 0xca, 0x1c, 0x2e, 0x7d, 0x2a, 0x07, 0x66, 0x94, 0x4d, 0x44, 0x9d, 0xa0, 0x1d, | ||||
| 	0xf9, 0xf0, 0x22, 0xc8, 0x77, 0xbc, 0x30, 0xf2, 0x6b, 0x7e, 0x18, 0x06, 0x21, 0xd9, 0x00, 0x8e, | ||||
| 	0x0b, 0x10, 0x63, 0x05, 0xdb, 0xe0, 0x55, 0x30, 0x15, 0xf9, 0x61, 0xc3, 0x6b, 0x36, 0x3e, 0xc9, | ||||
| 	0x61, 0x23, 0x0c, 0x36, 0x29, 0x2e, 0x50, 0xe8, 0x65, 0x30, 0x11, 0xf6, 0xda, 0x38, 0xc1, 0x0c, | ||||
| 	0xc8, 0xf7, 0x59, 0x60, 0x66, 0x0a, 0x4b, 0x4b, 0x9d, 0x39, 0x68, 0xea, 0x86, 0xd3, 0x52, 0xb7, | ||||
| 	0x08, 0x46, 0xa3, 0x97, 0x8d, 0x4e, 0xc7, 0x3f, 0x44, 0x67, 0xd8, 0x75, 0x6e, 0x28, 0x8f, 0x81, | ||||
| 	0x91, 0xd0, 0x8f, 0x7a, 0xcd, 0xee, 0xd2, 0x7f, 0xaa, 0xa0, 0xf0, 0xd4, 0x8f, 0xba, 0x5b, 0xcd, | ||||
| 	0xe6, 0xd3, 0x93, 0x8e, 0x1f, 0xc1, 0xcb, 0x60, 0x32, 0xe8, 0xe0, 0x5e, 0xf3, 0x9a, 0xb5, 0x46, | ||||
| 	0xbb, 0xbb, 0xb1, 0x4e, 0x12, 0x70, 0xc6, 0x9d, 0xe0, 0xd6, 0x1d, 0x6c, 0xd4, 0x61, 0x8e, 0x4d, | ||||
| 	0xf6, 0x65, 0x2a, 0x30, 0xc7, 0x86, 0x57, 0xc0, 0x94, 0x80, 0xf5, 0x28, 0x1d, 0xde, 0xd5, 0x84, | ||||
| 	0x2b, 0x56, 0x1f, 0x10, 0x6b, 0x02, 0xe8, 0xd8, 0x64, 0x57, 0xc3, 0x2a, 0x50, 0x63, 0x8c, 0x28, | ||||
| 	0x23, 0xde, 0xde, 0x74, 0x0c, 0xdc, 0x4f, 0x32, 0x46, 0x94, 0x11, 0xd7, 0x08, 0xaa, 0x40, 0xc7, | ||||
| 	0x86, 0x57, 0x41, 0x51, 0x00, 0x8f, 0x1a, 0x9f, 0xf0, 0x0f, 0x37, 0xd6, 0xd1, 0xa8, 0x65, 0x94, | ||||
| 	0x46, 0x5d, 0x41, 0x50, 0xa5, 0xe6, 0x24, 0xd4, 0xb1, 0xd1, 0x98, 0x65, 0x94, 0x46, 0x34, 0xa8, | ||||
| 	0x63, 0xc3, 0xeb, 0x60, 0x3a, 0x76, 0xcf, 0x69, 0xc7, 0x2d, 0xa3, 0x34, 0xe5, 0x0a, 0x8e, 0x7d, | ||||
| 	0x66, 0x4f, 0x01, 0x3b, 0x36, 0x02, 0x96, 0x51, 0x2a, 0xea, 0x60, 0xc7, 0x56, 0x52, 0x7f, 0xd4, | ||||
| 	0x0c, 0xbc, 0x2e, 0xca, 0x5b, 0x46, 0x29, 0x17, 0xa7, 0xbe, 0x8a, 0x8d, 0xca, 0xfe, 0x0f, 0x83, | ||||
| 	0xde, 0x8b, 0xa6, 0x8f, 0x0a, 0x96, 0x51, 0x32, 0xe2, 0xfd, 0x3f, 0x20, 0x56, 0xb8, 0x0c, 0xc4, | ||||
| 	0xca, 0xda, 0x8b, 0x20, 0x68, 0xa2, 0x09, 0xcb, 0x28, 0x8d, 0xb9, 0x05, 0x6e, 0x2c, 0x07, 0x41, | ||||
| 	0xd3, 0xf6, 0x8c, 0x6c, 0x49, 0x30, 0x2c, 0x7b, 0xfe, 0x71, 0x2c, 0xda, 0xa4, 0x25, 0x67, 0x2c, | ||||
| 	0xb9, 0x20, 0x6b, 0x5c, 0xe5, 0x5c, 0x30, 0x10, 0x05, 0xa9, 0x38, 0x26, 0x09, 0x0e, 0x40, 0x7a, | ||||
| 	0xa2, 0x5c, 0xe6, 0x0d, 0xb2, 0xef, 0xeb, 0x7d, 0xd6, 0x9b, 0x24, 0x95, 0x5c, 0xa5, 0x72, 0x93, | ||||
| 	0x3d, 0xa9, 0xec, 0xc9, 0x2b, 0xe4, 0x1d, 0x92, 0xea, 0x15, 0xdd, 0x0d, 0x80, 0xa2, 0xa7, 0x6a, | ||||
| 	0x28, 0xf1, 0xe0, 0xeb, 0xef, 0x9c, 0x3e, 0xe7, 0xe0, 0x6b, 0xe1, 0xc0, 0x60, 0xb9, 0x1e, 0xb4, | ||||
| 	0x8f, 0x82, 0xb0, 0xe5, 0xb5, 0xeb, 0x7e, 0xad, 0x13, 0x06, 0xdd, 0xe0, 0x86, 0x64, 0x59, 0x21, | ||||
| 	0x16, 0x98, 0x97, 0x4c, 0x8b, 0x67, 0x8f, 0x83, 0xe0, 0xb8, 0xe9, 0xdf, 0x20, 0x97, 0x0e, 0x7a, | ||||
| 	0x47, 0x37, 0xbc, 0xf6, 0x09, 0xc5, 0x2d, 0xbe, 0xa1, 0x5f, 0x3a, 0xec, 0x85, 0x5e, 0xb7, 0x11, | ||||
| 	0xb4, 0xd9, 0x75, 0x4b, 0xbf, 0x7e, 0xd4, 0xf0, 0x9b, 0x87, 0xb5, 0x96, 0x17, 0xbd, 0x64, 0x88, | ||||
| 	0xf3, 0x3a, 0x22, 0xea, 0x86, 0xbd, 0x7a, 0x97, 0x5d, 0xbd, 0xa0, 0x5f, 0xed, 0x36, 0x5a, 0x7e, | ||||
| 	0xd4, 0xf5, 0x5a, 0x9d, 0xac, 0x00, 0x3e, 0x0c, 0xbd, 0x4e, 0xc7, 0x0f, 0x23, 0x7a, 0x7d, 0xe9, | ||||
| 	0x17, 0x06, 0x80, 0x0f, 0xe2, 0xbd, 0xb8, 0xfe, 0x07, 0x3d, 0x3f, 0xea, 0xc2, 0xeb, 0xa0, 0xc8, | ||||
| 	0x57, 0xd4, 0x3a, 0xde, 0x49, 0x33, 0xf0, 0x0e, 0x91, 0x61, 0x19, 0xa5, 0xc2, 0xd6, 0x90, 0x3b, | ||||
| 	0xc5, 0xaf, 0x3c, 0xa5, 0x17, 0xe0, 0x32, 0x28, 0xbc, 0x1f, 0x05, 0x6d, 0x01, 0xcc, 0x59, 0x46, | ||||
| 	0x69, 0x7c, 0x6b, 0xc8, 0xcd, 0x63, 0x2b, 0x07, 0xed, 0x82, 0x85, 0x90, 0x92, 0xfb, 0x87, 0xb5, | ||||
| 	0xa0, 0xd7, 0xed, 0xf4, 0xba, 0x35, 0xe2, 0xb5, 0x8b, 0x4c, 0xcb, 0x28, 0x4d, 0xae, 0x2d, 0xac, | ||||
| 	0xc8, 0x69, 0x7e, 0xde, 0x08, 0xfd, 0x2a, 0xb9, 0xec, 0xce, 0x89, 0x75, 0xbb, 0x64, 0x19, 0x35, | ||||
| 	0x97, 0xc7, 0xc1, 0x28, 0x73, 0xb8, 0xf4, 0xa9, 0x1c, 0x98, 0x51, 0x36, 0x11, 0x75, 0x82, 0x76, | ||||
| 	0xe4, 0xc3, 0x8b, 0x20, 0xdf, 0xf1, 0xc2, 0xc8, 0xaf, 0xf9, 0x61, 0x18, 0x84, 0x64, 0x03, 0x38, | ||||
| 	0x2e, 0x40, 0x8c, 0x15, 0x6c, 0x83, 0x57, 0xc1, 0x54, 0xe4, 0x87, 0x0d, 0xaf, 0xd9, 0xf8, 0x24, | ||||
| 	0x87, 0x8d, 0x30, 0xd8, 0xa4, 0xb8, 0x40, 0xa1, 0x97, 0xc1, 0x44, 0xd8, 0x6b, 0xe3, 0x04, 0x33, | ||||
| 	0x20, 0xdf, 0x67, 0x81, 0x99, 0x29, 0x2c, 0x2d, 0x75, 0xe6, 0xa0, 0xa9, 0x1b, 0x4e, 0x4b, 0xdd, | ||||
| 	0x22, 0x18, 0x8d, 0x5e, 0x36, 0x3a, 0x1d, 0xff, 0x10, 0x9d, 0x61, 0xd7, 0xb9, 0xa1, 0x3c, 0x06, | ||||
| 	0x46, 0x42, 0x3f, 0xea, 0x35, 0xbb, 0x4b, 0xff, 0xa9, 0x82, 0xc2, 0x33, 0x3f, 0xea, 0x6e, 0x36, | ||||
| 	0x9b, 0xcf, 0x4e, 0x3a, 0x7e, 0x04, 0x2f, 0x83, 0xc9, 0xa0, 0x83, 0x7b, 0xcd, 0x6b, 0xd6, 0x1a, | ||||
| 	0xed, 0xee, 0xfa, 0x1a, 0x49, 0xc0, 0x19, 0x77, 0x82, 0x5b, 0xb7, 0xb1, 0x51, 0x87, 0x39, 0x36, | ||||
| 	0xd9, 0x97, 0xa9, 0xc0, 0x1c, 0x1b, 0x5e, 0x01, 0x53, 0x02, 0xd6, 0xa3, 0x74, 0x78, 0x57, 0x13, | ||||
| 	0xae, 0x58, 0xbd, 0x4f, 0xac, 0x09, 0xa0, 0x63, 0x93, 0x5d, 0x0d, 0xab, 0x40, 0x8d, 0x31, 0xa2, | ||||
| 	0x8c, 0x78, 0x7b, 0xd3, 0x31, 0x70, 0x2f, 0xc9, 0x18, 0x51, 0x46, 0x5c, 0x23, 0xa8, 0x02, 0x1d, | ||||
| 	0x1b, 0x5e, 0x05, 0x45, 0x01, 0x3c, 0x6a, 0x7c, 0xc2, 0x3f, 0x5c, 0x5f, 0x43, 0xa3, 0x96, 0x51, | ||||
| 	0x1a, 0x75, 0x05, 0x41, 0x95, 0x9a, 0x93, 0x50, 0xc7, 0x46, 0x63, 0x96, 0x51, 0x1a, 0xd1, 0xa0, | ||||
| 	0x8e, 0x0d, 0xaf, 0x83, 0xe9, 0xd8, 0x3d, 0xa7, 0x1d, 0xb7, 0x8c, 0xd2, 0x94, 0x2b, 0x38, 0xf6, | ||||
| 	0x98, 0x3d, 0x05, 0xec, 0xd8, 0x08, 0x58, 0x46, 0xa9, 0xa8, 0x83, 0x1d, 0x5b, 0x49, 0xfd, 0x51, | ||||
| 	0x33, 0xf0, 0xba, 0x28, 0x6f, 0x19, 0xa5, 0x5c, 0x9c, 0xfa, 0x2a, 0x36, 0x2a, 0xfb, 0x3f, 0x0c, | ||||
| 	0x7a, 0x07, 0x4d, 0x1f, 0x15, 0x2c, 0xa3, 0x64, 0xc4, 0xfb, 0x7f, 0x48, 0xac, 0x70, 0x19, 0x88, | ||||
| 	0x95, 0xb5, 0x83, 0x20, 0x68, 0xa2, 0x09, 0xcb, 0x28, 0x8d, 0xb9, 0x05, 0x6e, 0x2c, 0x07, 0x41, | ||||
| 	0x53, 0xcd, 0x66, 0x37, 0x6c, 0xb4, 0x8f, 0xd1, 0x24, 0xee, 0x2a, 0x29, 0x9b, 0xc4, 0xaa, 0x44, | ||||
| 	0xf7, 0xe2, 0xa4, 0xeb, 0x47, 0x68, 0x0a, 0xb7, 0x71, 0x1c, 0x5d, 0x19, 0x1b, 0x61, 0x0d, 0x2c, | ||||
| 	0x08, 0x58, 0x9b, 0xde, 0xde, 0x2d, 0x3f, 0x8a, 0xbc, 0x63, 0x1f, 0x41, 0xcb, 0x28, 0xe5, 0xd7, | ||||
| 	0xaf, 0x28, 0x37, 0xb6, 0xdc, 0xa2, 0x2b, 0xbb, 0x04, 0xff, 0x98, 0xc2, 0xdd, 0x39, 0xce, 0xa3, | ||||
| 	0x98, 0xe1, 0x01, 0x40, 0x71, 0x96, 0x82, 0xd0, 0x6f, 0x1c, 0xb7, 0x85, 0x87, 0x19, 0xe2, 0xe1, | ||||
| 	0x9c, 0xe2, 0xa1, 0x4a, 0x31, 0x9c, 0x75, 0x5e, 0x24, 0x53, 0xb1, 0xc3, 0xf7, 0xc0, 0xac, 0x1e, | ||||
| 	0xb7, 0xdf, 0xee, 0xb5, 0xd0, 0x1c, 0x51, 0xa3, 0x4b, 0xa7, 0x05, 0x5d, 0x69, 0xf7, 0x5a, 0x2e, | ||||
| 	0x54, 0x23, 0xc6, 0x36, 0xf8, 0x2e, 0x98, 0x4b, 0x84, 0x4b, 0x88, 0xe7, 0x09, 0x31, 0x4a, 0x8b, | ||||
| 	0x95, 0x90, 0xcd, 0x68, 0x81, 0x12, 0x36, 0x47, 0x62, 0xa3, 0xd5, 0xaa, 0x75, 0x1a, 0x7e, 0xdd, | ||||
| 	0x47, 0x08, 0xd7, 0xac, 0x9c, 0x1b, 0xcb, 0xc5, 0xeb, 0x68, 0xdd, 0x9e, 0xe0, 0xcb, 0xf0, 0x8a, | ||||
| 	0xd4, 0x0a, 0xf5, 0x20, 0x3c, 0x44, 0x67, 0x19, 0xde, 0x88, 0xdb, 0xe1, 0x7e, 0x10, 0x1e, 0xc2, | ||||
| 	0x2a, 0x98, 0x0e, 0xfd, 0x7a, 0x2f, 0x8c, 0x1a, 0xaf, 0x7c, 0x91, 0xd6, 0x73, 0x24, 0xad, 0x67, | ||||
| 	0x33, 0x73, 0xe0, 0x16, 0xc5, 0x1a, 0x9e, 0xce, 0xcb, 0x60, 0x32, 0xf4, 0x3b, 0xbe, 0x87, 0xf3, | ||||
| 	0x48, 0x6f, 0xe6, 0x0b, 0x96, 0x89, 0xd5, 0x86, 0x5b, 0x85, 0xda, 0xc8, 0x30, 0xc7, 0x46, 0x96, | ||||
| 	0x65, 0x62, 0xb5, 0x91, 0x60, 0x54, 0x1b, 0x04, 0x8c, 0xa9, 0xcd, 0x45, 0xcb, 0xc4, 0x6a, 0xc3, | ||||
| 	0xcd, 0xb1, 0xda, 0x28, 0x40, 0xc7, 0x46, 0x4b, 0x96, 0x89, 0xd5, 0x46, 0x06, 0x6a, 0x8c, 0x4c, | ||||
| 	0x6d, 0x96, 0x2d, 0x13, 0xab, 0x0d, 0x37, 0xef, 0x27, 0x19, 0x99, 0xda, 0x5c, 0xb2, 0x4c, 0xac, | ||||
| 	0x36, 0x32, 0x90, 0xaa, 0x8d, 0x00, 0x72, 0x59, 0xb8, 0x6c, 0x99, 0x58, 0x6d, 0xb8, 0x5d, 0x52, | ||||
| 	0x1b, 0x15, 0xea, 0xd8, 0xe8, 0xff, 0x2c, 0x13, 0xab, 0x8d, 0x02, 0xa5, 0x6a, 0x13, 0xbb, 0xe7, | ||||
| 	0xb4, 0x57, 0x2c, 0x13, 0xab, 0x8d, 0x08, 0x40, 0x52, 0x1b, 0x0d, 0xec, 0xd8, 0xa8, 0x64, 0x99, | ||||
| 	0x58, 0x6d, 0x54, 0x30, 0x55, 0x9b, 0x38, 0x08, 0xa2, 0x36, 0x57, 0x2d, 0x13, 0xab, 0x8d, 0x08, | ||||
| 	0x81, 0xab, 0x8d, 0x80, 0x31, 0xb5, 0xb9, 0x66, 0x99, 0x58, 0x6d, 0xb8, 0x39, 0x56, 0x1b, 0x01, | ||||
| 	0x24, 0x6a, 0x73, 0xdd, 0x32, 0xb1, 0xda, 0x70, 0x23, 0x57, 0x9b, 0x38, 0x42, 0xaa, 0x36, 0x6f, | ||||
| 	0x5a, 0x26, 0x56, 0x1b, 0x11, 0x9f, 0x50, 0x9b, 0x98, 0x8d, 0xa8, 0xcd, 0x5b, 0x96, 0x89, 0xd5, | ||||
| 	0x46, 0xd0, 0x71, 0xb5, 0x11, 0x30, 0x4d, 0x6d, 0x56, 0x2d, 0xf3, 0xb5, 0xd4, 0x86, 0xf3, 0x24, | ||||
| 	0xd4, 0x26, 0xce, 0x92, 0xa6, 0x36, 0x6b, 0xc4, 0x43, 0x7f, 0xb5, 0x11, 0xc9, 0x4c, 0xa8, 0x8d, | ||||
| 	0x1e, 0x37, 0x11, 0x85, 0x0d, 0xcb, 0x1c, 0x5c, 0x6d, 0xd4, 0x88, 0xb9, 0xda, 0x24, 0xc2, 0x25, | ||||
| 	0x77, 0x70, 0xd2, 0xf5, 0x23, 0x34, 0x85, 0xdb, 0x38, 0x8e, 0xae, 0x8c, 0x8d, 0xb0, 0x06, 0x16, | ||||
| 	0x04, 0xac, 0x4d, 0x6f, 0xef, 0x96, 0x1f, 0x45, 0xde, 0xb1, 0x8f, 0xa0, 0x65, 0x94, 0xf2, 0x6b, | ||||
| 	0x57, 0x94, 0x1b, 0x5b, 0x6e, 0xd1, 0x95, 0x1d, 0x82, 0x7f, 0x42, 0xe1, 0xee, 0x1c, 0xe7, 0x51, | ||||
| 	0xcc, 0x70, 0x1f, 0xa0, 0x38, 0x4b, 0x41, 0xe8, 0x37, 0x8e, 0xdb, 0xc2, 0xc3, 0x0c, 0xf1, 0x70, | ||||
| 	0x4e, 0xf1, 0x50, 0xa5, 0x18, 0xce, 0x3a, 0x2f, 0x92, 0xa9, 0xd8, 0xe1, 0x7b, 0x60, 0x56, 0x8f, | ||||
| 	0xdb, 0x6f, 0xf7, 0x5a, 0x68, 0x8e, 0xa8, 0xd1, 0xa5, 0xd3, 0x82, 0xae, 0xb4, 0x7b, 0x2d, 0x17, | ||||
| 	0xaa, 0x11, 0x63, 0x1b, 0x7c, 0x17, 0xcc, 0x25, 0xc2, 0x25, 0xc4, 0xf3, 0x84, 0x18, 0xa5, 0xc5, | ||||
| 	0x4a, 0xc8, 0x66, 0xb4, 0x40, 0x09, 0x9b, 0x23, 0xb1, 0xd1, 0x6a, 0xd5, 0x3a, 0x0d, 0xbf, 0xee, | ||||
| 	0x23, 0x84, 0x6b, 0x56, 0xce, 0x8d, 0xe5, 0xe2, 0x75, 0xb4, 0x6e, 0x4f, 0xf1, 0x65, 0x78, 0x45, | ||||
| 	0x6a, 0x85, 0x7a, 0x10, 0x1e, 0xa2, 0xb3, 0x0c, 0x6f, 0xc4, 0xed, 0xf0, 0x20, 0x08, 0x0f, 0x61, | ||||
| 	0x15, 0x4c, 0x87, 0x7e, 0xbd, 0x17, 0x46, 0x8d, 0x57, 0xbe, 0x48, 0xeb, 0x39, 0x92, 0xd6, 0xb3, | ||||
| 	0x99, 0x39, 0x70, 0x8b, 0x62, 0x0d, 0x4f, 0xe7, 0x65, 0x30, 0x19, 0xfa, 0x1d, 0xdf, 0xc3, 0x79, | ||||
| 	0xa4, 0x37, 0xf3, 0x05, 0xcb, 0xc4, 0x6a, 0xc3, 0xad, 0x42, 0x6d, 0x64, 0x98, 0x63, 0x23, 0xcb, | ||||
| 	0x32, 0xb1, 0xda, 0x48, 0x30, 0xaa, 0x0d, 0x02, 0xc6, 0xd4, 0xe6, 0xa2, 0x65, 0x62, 0xb5, 0xe1, | ||||
| 	0xe6, 0x58, 0x6d, 0x14, 0xa0, 0x63, 0xa3, 0x25, 0xcb, 0xc4, 0x6a, 0x23, 0x03, 0x35, 0x46, 0xa6, | ||||
| 	0x36, 0xcb, 0x96, 0x89, 0xd5, 0x86, 0x9b, 0xf7, 0x92, 0x8c, 0x4c, 0x6d, 0x2e, 0x59, 0x26, 0x56, | ||||
| 	0x1b, 0x19, 0x48, 0xd5, 0x46, 0x00, 0xb9, 0x2c, 0x5c, 0xb6, 0x4c, 0xac, 0x36, 0xdc, 0x2e, 0xa9, | ||||
| 	0x8d, 0x0a, 0x75, 0x6c, 0xf4, 0x7f, 0x96, 0x89, 0xd5, 0x46, 0x81, 0x52, 0xb5, 0x89, 0xdd, 0x73, | ||||
| 	0xda, 0x2b, 0x96, 0x89, 0xd5, 0x46, 0x04, 0x20, 0xa9, 0x8d, 0x06, 0x76, 0x6c, 0x54, 0xb2, 0x4c, | ||||
| 	0xac, 0x36, 0x2a, 0x98, 0xaa, 0x4d, 0x1c, 0x04, 0x51, 0x9b, 0xab, 0x96, 0x89, 0xd5, 0x46, 0x84, | ||||
| 	0xc0, 0xd5, 0x46, 0xc0, 0x98, 0xda, 0x5c, 0xb3, 0x4c, 0xac, 0x36, 0xdc, 0x1c, 0xab, 0x8d, 0x00, | ||||
| 	0x12, 0xb5, 0xb9, 0x6e, 0x99, 0x58, 0x6d, 0xb8, 0x91, 0xab, 0x4d, 0x1c, 0x21, 0x55, 0x9b, 0x37, | ||||
| 	0x2d, 0x13, 0xab, 0x8d, 0x88, 0x4f, 0xa8, 0x4d, 0xcc, 0x46, 0xd4, 0xe6, 0x2d, 0xcb, 0xc4, 0x6a, | ||||
| 	0x23, 0xe8, 0xb8, 0xda, 0x08, 0x98, 0xa6, 0x36, 0x37, 0x2d, 0xf3, 0xb5, 0xd4, 0x86, 0xf3, 0x24, | ||||
| 	0xd4, 0x26, 0xce, 0x92, 0xa6, 0x36, 0xab, 0xc4, 0x43, 0x7f, 0xb5, 0x11, 0xc9, 0x4c, 0xa8, 0x8d, | ||||
| 	0x1e, 0x37, 0x11, 0x85, 0x75, 0xcb, 0x1c, 0x5c, 0x6d, 0xd4, 0x88, 0xb9, 0xda, 0x24, 0xc2, 0x25, | ||||
| 	0xc4, 0x36, 0x21, 0xee, 0xa3, 0x36, 0x5a, 0xa0, 0x5c, 0x6d, 0xb4, 0x6a, 0x31, 0xb5, 0x71, 0x70, | ||||
| 	0xcd, 0xa8, 0xda, 0xa8, 0x75, 0x13, 0x6a, 0x23, 0xd6, 0x11, 0xb5, 0xb9, 0xc5, 0xf0, 0x46, 0xdc, | ||||
| 	0x0e, 0x44, 0x6d, 0x9e, 0x82, 0xa9, 0x96, 0xd7, 0xa1, 0x02, 0xc1, 0x64, 0x62, 0x93, 0x24, 0xf5, | ||||
| 	0xcd, 0xec, 0x0c, 0x3c, 0xf6, 0x3a, 0x44, 0x3b, 0xc8, 0x47, 0xa5, 0xdd, 0x0d, 0x4f, 0xdc, 0x89, | ||||
| 	0x96, 0x6c, 0x93, 0x58, 0x1d, 0x9b, 0xa9, 0xca, 0xed, 0xc1, 0x58, 0x1d, 0x9b, 0x7c, 0x28, 0xac, | ||||
| 	0xcc, 0x06, 0x9f, 0x83, 0x69, 0xcc, 0x4a, 0xe5, 0x87, 0xab, 0xd0, 0x1d, 0xc2, 0xbb, 0xd2, 0x97, | ||||
| 	0xcd, 0xa8, 0xda, 0xa8, 0x75, 0x13, 0x6a, 0x23, 0xd6, 0x11, 0xb5, 0xb9, 0xcd, 0xf0, 0x46, 0xdc, | ||||
| 	0x0e, 0x44, 0x6d, 0x9e, 0x81, 0xa9, 0x96, 0xd7, 0xa1, 0x02, 0xc1, 0x64, 0x62, 0x83, 0x24, 0xf5, | ||||
| 	0xcd, 0xec, 0x0c, 0x3c, 0xf1, 0x3a, 0x44, 0x3b, 0xc8, 0x47, 0xa5, 0xdd, 0x0d, 0x4f, 0xdc, 0x89, | ||||
| 	0x96, 0x6c, 0x93, 0x58, 0x1d, 0x9b, 0xa9, 0xca, 0x9d, 0xc1, 0x58, 0x1d, 0x9b, 0x7c, 0x28, 0xac, | ||||
| 	0xcc, 0x06, 0x5f, 0x80, 0x69, 0xcc, 0x4a, 0xe5, 0x87, 0xab, 0xd0, 0x5d, 0xc2, 0xbb, 0xd2, 0x97, | ||||
| 	0x97, 0x4a, 0x13, 0xfd, 0xa4, 0xcc, 0x38, 0x3c, 0xd9, 0x2a, 0x73, 0x3b, 0x36, 0x17, 0xae, 0xb7, | ||||
| 	0x07, 0xe4, 0x76, 0x6c, 0xfa, 0xa9, 0x72, 0x73, 0x2b, 0xe7, 0xa6, 0x22, 0xc7, 0xb5, 0xee, 0xff, | ||||
| 	0x07, 0xe0, 0xa6, 0x02, 0xb8, 0xaf, 0xc5, 0x2d, 0x5b, 0x65, 0x6e, 0xc7, 0xe6, 0xf2, 0xf8, 0xce, | ||||
| 	0x80, 0xdc, 0x8e, 0xbd, 0xaf, 0xc5, 0x2d, 0x5b, 0xe1, 0xc7, 0xc1, 0x0c, 0xe6, 0x66, 0xda, 0x26, | ||||
| 	0x24, 0xf5, 0x2e, 0x61, 0x5f, 0xed, 0xcb, 0xce, 0x74, 0x96, 0xfd, 0xa0, 0xfc, 0x38, 0x50, 0xd5, | ||||
| 	0xae, 0x78, 0x70, 0x6c, 0xa1, 0xc4, 0x1f, 0x19, 0xd4, 0x83, 0x63, 0xb3, 0x1f, 0x9a, 0x07, 0x61, | ||||
| 	0x87, 0x47, 0x60, 0x8e, 0xe4, 0x87, 0x6f, 0x42, 0x28, 0xf8, 0x3d, 0xe2, 0x63, 0xbd, 0x7f, 0x8e, | ||||
| 	0x18, 0x98, 0xff, 0xa4, 0x5e, 0x70, 0xc8, 0xfa, 0x15, 0xd5, 0x0f, 0xae, 0x04, 0xdf, 0xcb, 0xd6, | ||||
| 	0xc0, 0x7e, 0x1c, 0x9b, 0xff, 0xd4, 0xfd, 0xc4, 0x57, 0xd4, 0xfb, 0x95, 0x1e, 0x1a, 0xe5, 0x41, | ||||
| 	0xef, 0x57, 0x72, 0x9c, 0x68, 0xf7, 0x2b, 0x3d, 0x62, 0x9e, 0x81, 0x62, 0xcc, 0xca, 0xce, 0x98, | ||||
| 	0xfb, 0x84, 0xf6, 0xad, 0xd3, 0x69, 0xe9, 0xe9, 0x43, 0x79, 0x27, 0x5b, 0x8a, 0x11, 0xee, 0x02, | ||||
| 	0xec, 0x89, 0x9c, 0x46, 0xf4, 0x48, 0x7a, 0x40, 0x58, 0xaf, 0xf5, 0x65, 0xc5, 0xe7, 0x14, 0xfe, | ||||
| 	0x9f, 0x52, 0xe6, 0x5b, 0xb1, 0x45, 0xb4, 0x3b, 0x95, 0x42, 0x76, 0x7e, 0x55, 0x06, 0x69, 0x77, | ||||
| 	0x02, 0xa5, 0x9f, 0x52, 0xbb, 0x4b, 0x56, 0x9e, 0x04, 0xc6, 0x4d, 0x8f, 0xbc, 0xea, 0x00, 0x49, | ||||
| 	0xa0, 0xcb, 0xc9, 0x69, 0x18, 0x27, 0x41, 0x32, 0xc2, 0x0e, 0x38, 0x2b, 0x11, 0x6b, 0x87, 0xe4, | ||||
| 	0x43, 0xe2, 0xe1, 0xe6, 0x00, 0x1e, 0x94, 0x63, 0x91, 0x7a, 0x9a, 0x6f, 0xa5, 0x5e, 0x84, 0x11, | ||||
| 	0x58, 0x94, 0x3c, 0xea, 0xa7, 0xe6, 0x36, 0x71, 0xe9, 0x0c, 0xe0, 0x52, 0x3d, 0x33, 0xa9, 0xcf, | ||||
| 	0x85, 0x56, 0xfa, 0x55, 0x78, 0x0c, 0xe6, 0x93, 0xdb, 0x24, 0x47, 0xdf, 0xce, 0x20, 0xf7, 0x80, | ||||
| 	0xb4, 0x0d, 0x7c, 0xf4, 0x49, 0xf7, 0x80, 0x76, 0x05, 0xbe, 0x0f, 0x16, 0x52, 0x76, 0x47, 0x3c, | ||||
| 	0x3d, 0x22, 0x9e, 0x36, 0x06, 0xdf, 0x5a, 0xec, 0x6a, 0xb6, 0x95, 0x72, 0x09, 0x2e, 0x83, 0x42, | ||||
| 	0xd0, 0xf6, 0x83, 0x23, 0x7e, 0xdc, 0x04, 0xf8, 0x11, 0x7b, 0x7b, 0xc8, 0xcd, 0x13, 0x2b, 0x3b, | ||||
| 	0x3c, 0x3e, 0x06, 0x66, 0x29, 0x48, 0xab, 0x6d, 0xe7, 0xb5, 0x1e, 0xb7, 0xb6, 0x87, 0x5c, 0x48, | ||||
| 	0x68, 0xd4, 0x5a, 0x8a, 0x08, 0x58, 0xb7, 0x7f, 0xc0, 0x27, 0x12, 0xc4, 0xca, 0x7a, 0xf7, 0x22, | ||||
| 	0xa0, 0x5f, 0x59, 0xdb, 0x86, 0x6c, 0xbc, 0x01, 0x88, 0x91, 0x76, 0xe1, 0x05, 0x00, 0x18, 0x04, | ||||
| 	0xdf, 0x87, 0x11, 0x7e, 0x10, 0xdd, 0x1e, 0x72, 0xc7, 0x29, 0x02, 0xdf, 0x5b, 0xca, 0x56, 0x1d, | ||||
| 	0x1b, 0x75, 0x2d, 0xa3, 0x34, 0xac, 0x6c, 0xd5, 0xb1, 0x63, 0x47, 0x54, 0x7b, 0x7a, 0xf8, 0xf1, | ||||
| 	0x58, 0x38, 0xa2, 0x62, 0x22, 0x78, 0x98, 0x90, 0xbc, 0xc2, 0x8f, 0xc6, 0x82, 0x87, 0x09, 0x43, | ||||
| 	0x85, 0x47, 0x43, 0xca, 0xf6, 0xe1, 0xe0, 0x8f, 0x78, 0x22, 0x66, 0x52, 0x9e, 0x3d, 0xe9, 0x69, | ||||
| 	0x8c, 0x88, 0x0c, 0x9b, 0xa6, 0xa1, 0x5f, 0x19, 0x24, 0xf7, 0x8b, 0x2b, 0x74, 0xdc, 0xb6, 0xc2, | ||||
| 	0xe7, 0x3c, 0x2b, 0x78, 0xab, 0xef, 0x79, 0xcd, 0x9e, 0x1f, 0x3f, 0xa6, 0x61, 0xd3, 0x33, 0xba, | ||||
| 	0x0e, 0xba, 0x60, 0x5e, 0x9d, 0xd1, 0x08, 0xc6, 0x5f, 0x1b, 0xec, 0xd1, 0x56, 0x67, 0x24, 0x7a, | ||||
| 	0x47, 0x29, 0x67, 0x95, 0x49, 0x4e, 0x06, 0xa7, 0x63, 0x0b, 0xce, 0xdf, 0xf4, 0xe1, 0x74, 0xec, | ||||
| 	0x24, 0xa7, 0x63, 0x73, 0xce, 0x03, 0xe9, 0x21, 0xbf, 0xa7, 0x06, 0xfa, 0x5b, 0x4a, 0x7a, 0x3e, | ||||
| 	0x41, 0x7a, 0x20, 0x45, 0x3a, 0xa7, 0x0e, 0x89, 0xb2, 0x68, 0xa5, 0x58, 0x7f, 0xd7, 0x8f, 0x96, | ||||
| 	0x07, 0x3b, 0xa7, 0x8e, 0x94, 0xd2, 0x32, 0x40, 0x1a, 0x47, 0xb0, 0xfe, 0x3e, 0x2b, 0x03, 0xa4, | ||||
| 	0x97, 0xb4, 0x0c, 0x10, 0x5b, 0x5a, 0xa8, 0xb4, 0xd3, 0x04, 0xe9, 0x1f, 0xb2, 0x42, 0xa5, 0xcd, | ||||
| 	0xa7, 0x85, 0x4a, 0x8d, 0x69, 0xb4, 0x4c, 0x61, 0x38, 0xed, 0x1f, 0xb3, 0x68, 0xe9, 0x4d, 0xa8, | ||||
| 	0xd1, 0x52, 0x63, 0x5a, 0x06, 0xc8, 0x3d, 0x2a, 0x58, 0xff, 0x94, 0x95, 0x01, 0x72, 0xdb, 0x6a, | ||||
| 	0x19, 0x20, 0x36, 0xce, 0xb9, 0x27, 0x3d, 0x1c, 0x28, 0xcd, 0xff, 0x67, 0x83, 0xc8, 0x60, 0xdf, | ||||
| 	0xe6, 0x97, 0x1f, 0x0a, 0xa5, 0x20, 0xd5, 0x91, 0x81, 0x60, 0xfc, 0x8b, 0xc1, 0x9e, 0xb4, 0xfa, | ||||
| 	0x35, 0xbf, 0x32, 0x58, 0xc8, 0xe0, 0x94, 0x1a, 0xea, 0xaf, 0x7d, 0x38, 0x45, 0xf3, 0x2b, 0x53, | ||||
| 	0x08, 0xa9, 0x46, 0xda, 0x30, 0x42, 0x90, 0xfe, 0x8d, 0x92, 0x9e, 0xd2, 0xfc, 0xea, 0xcc, 0x22, | ||||
| 	0x8b, 0x56, 0x8a, 0xf5, 0xef, 0xfd, 0x68, 0x45, 0xf3, 0xab, 0x13, 0x8e, 0xb4, 0x0c, 0xa8, 0xcd, | ||||
| 	0xff, 0x8f, 0xac, 0x0c, 0xc8, 0xcd, 0xaf, 0x0c, 0x03, 0xd2, 0x42, 0xd5, 0x9a, 0xff, 0x9f, 0x59, | ||||
| 	0xa1, 0x2a, 0xcd, 0xaf, 0x8e, 0x0e, 0xd2, 0x68, 0xb5, 0xe6, 0xff, 0x57, 0x16, 0xad, 0xd2, 0xfc, | ||||
| 	0xea, 0xb3, 0x68, 0x5a, 0x06, 0xd4, 0xe6, 0xff, 0x77, 0x56, 0x06, 0xe4, 0xe6, 0x57, 0x06, 0x0e, | ||||
| 	0x9c, 0xf3, 0xa1, 0x34, 0xd7, 0xe5, 0xef, 0x70, 0xd0, 0x77, 0x73, 0x6c, 0x4e, 0x96, 0xd8, 0x3b, | ||||
| 	0x43, 0xc4, 0x33, 0x5f, 0x6e, 0x81, 0x8f, 0x80, 0x18, 0x1a, 0xd6, 0xc4, 0xcb, 0x1a, 0xf4, 0xbd, | ||||
| 	0x5c, 0xc6, 0xf9, 0xf1, 0x94, 0x43, 0x5c, 0xe1, 0x5f, 0x98, 0xe0, 0x47, 0xc1, 0x8c, 0x34, 0xc4, | ||||
| 	0xe6, 0x2f, 0x8e, 0xd0, 0xf7, 0xb3, 0xc8, 0xaa, 0x18, 0xf3, 0xd8, 0x8b, 0x5e, 0xc6, 0x64, 0xc2, | ||||
| 	0x04, 0xb7, 0xd4, 0xb9, 0x70, 0xaf, 0xde, 0x45, 0x3f, 0xa0, 0x44, 0x0b, 0x69, 0x45, 0xe8, 0xd5, | ||||
| 	0xbb, 0xca, 0xc4, 0xb8, 0x57, 0xef, 0xc2, 0x4d, 0x20, 0x66, 0x8b, 0x35, 0xaf, 0x7d, 0x82, 0x7e, | ||||
| 	0x48, 0xd7, 0xcf, 0x26, 0xd6, 0x6f, 0xb5, 0x4f, 0xdc, 0x3c, 0x87, 0x6e, 0xb5, 0x4f, 0xe0, 0x5d, | ||||
| 	0x69, 0xd6, 0xfc, 0x0a, 0x97, 0x01, 0xfd, 0x88, 0xae, 0x9d, 0x4f, 0xac, 0xa5, 0x55, 0x12, 0xd3, | ||||
| 	0x4d, 0xf2, 0x15, 0x97, 0x27, 0x6e, 0x50, 0x5e, 0x9e, 0x1f, 0xe7, 0x48, 0xb5, 0xfb, 0x95, 0x47, | ||||
| 	0xf4, 0xa5, 0x54, 0x1e, 0x41, 0x14, 0x97, 0xe7, 0x27, 0xb9, 0x0c, 0x85, 0x93, 0xca, 0xc3, 0x97, | ||||
| 	0xc5, 0xe5, 0x91, 0xb9, 0x48, 0x79, 0x48, 0x75, 0x7e, 0x9a, 0xc5, 0x25, 0x55, 0x27, 0x1e, 0x0a, | ||||
| 	0xb2, 0x55, 0xb8, 0x3a, 0xf2, 0xad, 0x82, 0xab, 0xf3, 0x4b, 0x4a, 0x94, 0x5d, 0x1d, 0xe9, 0xee, | ||||
| 	0x60, 0xd5, 0x11, 0x14, 0xb8, 0x3a, 0x3f, 0xa3, 0xeb, 0x33, 0xaa, 0xc3, 0xa1, 0xac, 0x3a, 0x62, | ||||
| 	0x25, 0xad, 0xce, 0xcf, 0xe9, 0xda, 0xcc, 0xea, 0x70, 0x38, 0xad, 0xce, 0x05, 0x00, 0xc8, 0xfe, | ||||
| 	0xdb, 0x5e, 0xcb, 0x5f, 0x43, 0x9f, 0x36, 0xc9, 0x6b, 0x28, 0xc9, 0x04, 0x2d, 0x90, 0xa7, 0xfd, | ||||
| 	0x8b, 0xbf, 0xae, 0xa3, 0xcf, 0xc8, 0x88, 0x5d, 0x6c, 0x82, 0x17, 0x41, 0xa1, 0x16, 0x43, 0x36, | ||||
| 	0xd0, 0x67, 0x19, 0xa4, 0xca, 0x21, 0x1b, 0x70, 0x09, 0x4c, 0x50, 0x04, 0x81, 0xd8, 0x35, 0xf4, | ||||
| 	0x39, 0x9d, 0x86, 0xfc, 0x3d, 0x49, 0xbe, 0xad, 0x62, 0xc8, 0x4d, 0xf4, 0x79, 0x8a, 0x90, 0x6d, | ||||
| 	0x70, 0x99, 0xd3, 0xac, 0x12, 0x1e, 0x07, 0x7d, 0x41, 0x01, 0x61, 0x1e, 0x47, 0xec, 0x08, 0x7f, | ||||
| 	0xbb, 0x85, 0xbe, 0xa8, 0x3b, 0xba, 0x85, 0x01, 0x22, 0xb4, 0x4d, 0xf4, 0x25, 0x3d, 0xda, 0xcd, | ||||
| 	0x78, 0xcb, 0xf8, 0xeb, 0x6d, 0xf4, 0x65, 0x9d, 0xe2, 0x36, 0x5c, 0x02, 0x85, 0xaa, 0x40, 0xac, | ||||
| 	0xad, 0xa2, 0xaf, 0xb0, 0x38, 0x04, 0xc9, 0xda, 0x2a, 0xc1, 0xec, 0x54, 0xde, 0x7d, 0x50, 0xdb, | ||||
| 	0xdd, 0x7a, 0x5c, 0x59, 0x5b, 0x43, 0x5f, 0xe5, 0x18, 0x6c, 0xa4, 0xb6, 0x18, 0x43, 0x72, 0xbd, | ||||
| 	0x8e, 0xbe, 0xa6, 0x60, 0x88, 0x0d, 0x5e, 0x02, 0x93, 0x35, 0x29, 0xbf, 0x6b, 0x1b, 0xe8, 0xeb, | ||||
| 	0x09, 0x6f, 0x1b, 0x14, 0x55, 0x8d, 0x51, 0x36, 0xfa, 0x46, 0x02, 0x65, 0xc7, 0x09, 0xa4, 0xa0, | ||||
| 	0x9b, 0xe8, 0x9b, 0x72, 0x02, 0x09, 0x48, 0xca, 0x32, 0xdd, 0x9d, 0x83, 0xbe, 0x95, 0x00, 0x39, | ||||
| 	0xd8, 0x9f, 0x14, 0xd3, 0xad, 0x5a, 0x0d, 0x7d, 0x3b, 0x81, 0xba, 0x85, 0x51, 0x52, 0x4c, 0x9b, | ||||
| 	0xb5, 0x1a, 0xfa, 0x4e, 0x22, 0xaa, 0xcd, 0xc5, 0xe7, 0x60, 0x42, 0x7d, 0xd0, 0x29, 0x00, 0xc3, | ||||
| 	0x63, 0x6f, 0x44, 0x0d, 0x0f, 0xbe, 0x0d, 0xf2, 0xf5, 0x40, 0xbc, 0xd4, 0x40, 0xb9, 0xd3, 0x5e, | ||||
| 	0x80, 0xc8, 0xe8, 0xc5, 0x7b, 0x00, 0x26, 0x87, 0x94, 0xb0, 0x08, 0xcc, 0x97, 0xfe, 0x09, 0x73, | ||||
| 	0x81, 0x7f, 0x85, 0xb3, 0xe0, 0x0c, 0xbd, 0x7d, 0x72, 0xc4, 0x46, 0xbf, 0xdc, 0xc9, 0x6d, 0x1a, | ||||
| 	0x31, 0x83, 0x3c, 0x90, 0x94, 0x19, 0xcc, 0x14, 0x06, 0x53, 0x66, 0x28, 0x83, 0xd9, 0xb4, 0xd1, | ||||
| 	0xa3, 0xcc, 0x31, 0x91, 0xc2, 0x31, 0x91, 0xce, 0xa1, 0x8c, 0x18, 0x65, 0x8e, 0xe1, 0x14, 0x8e, | ||||
| 	0xe1, 0x24, 0x47, 0x62, 0x94, 0x28, 0x73, 0x4c, 0xa7, 0x70, 0x4c, 0xa7, 0x73, 0x28, 0x23, 0x43, | ||||
| 	0x99, 0x03, 0xa6, 0x70, 0x40, 0x99, 0xe3, 0x01, 0x98, 0x4f, 0x1f, 0x0c, 0xca, 0x2c, 0xa3, 0x29, | ||||
| 	0x2c, 0xa3, 0x19, 0x2c, 0xea, 0xf0, 0x4f, 0x66, 0x19, 0x49, 0x61, 0x19, 0x91, 0x59, 0xaa, 0x00, | ||||
| 	0x65, 0x8d, 0xf7, 0x64, 0x9e, 0xa9, 0x14, 0x9e, 0xa9, 0x2c, 0x1e, 0x6d, 0x7c, 0x27, 0xf3, 0x14, | ||||
| 	0x53, 0x78, 0x8a, 0xa9, 0xdd, 0x26, 0x0f, 0xe9, 0x4e, 0xeb, 0xd7, 0x9c, 0xcc, 0xb0, 0x05, 0x66, | ||||
| 	0x52, 0xe6, 0x71, 0xa7, 0x51, 0x18, 0x32, 0xc5, 0x5d, 0x50, 0xd4, 0x87, 0x6f, 0xf2, 0xfa, 0xb1, | ||||
| 	0x94, 0xf5, 0x63, 0x29, 0x4d, 0xa2, 0x0f, 0xda, 0x64, 0x8e, 0xf1, 0x14, 0x8e, 0xf1, 0xe4, 0x36, | ||||
| 	0xf4, 0x89, 0xda, 0x69, 0x14, 0x05, 0x99, 0x22, 0x04, 0xe7, 0xfa, 0x8c, 0xcc, 0x52, 0xa8, 0xde, | ||||
| 	0x91, 0xa9, 0x5e, 0xe3, 0x7d, 0x95, 0xe4, 0xf3, 0x18, 0x9c, 0xef, 0x37, 0x33, 0x4b, 0x71, 0xba, | ||||
| 	0xa6, 0x3a, 0xed, 0xfb, 0x0a, 0x4b, 0x72, 0xd4, 0xa4, 0x0d, 0x97, 0x36, 0x2b, 0x4b, 0x71, 0x72, | ||||
| 	0x47, 0x76, 0x32, 0xe8, 0x4b, 0x2d, 0xc9, 0x9b, 0x07, 0xce, 0x66, 0xce, 0xcb, 0x52, 0xdc, 0xad, | ||||
| 	0xa8, 0xee, 0xb2, 0x5f, 0x75, 0xc5, 0x2e, 0x96, 0x6e, 0x03, 0x20, 0x4d, 0xf6, 0x46, 0x81, 0x59, | ||||
| 	0xdd, 0xdb, 0x2b, 0x0e, 0xe1, 0x5f, 0xca, 0x5b, 0x6e, 0xd1, 0xa0, 0xbf, 0x3c, 0x2f, 0xe6, 0xb0, | ||||
| 	0xbb, 0xdd, 0xca, 0xc3, 0xe2, 0x7f, 0xf9, 0x7f, 0x46, 0x79, 0x42, 0x8c, 0xa2, 0xf0, 0xa9, 0xb2, | ||||
| 	0xf4, 0x06, 0x98, 0xd4, 0x06, 0x92, 0x05, 0x60, 0xd4, 0xf9, 0x81, 0x52, 0xbf, 0x76, 0x13, 0x80, | ||||
| 	0xf8, 0xdf, 0x30, 0xc1, 0x29, 0x90, 0x3f, 0xd8, 0xdd, 0x7f, 0x52, 0xb9, 0xbf, 0x53, 0xdd, 0xa9, | ||||
| 	0x3c, 0x28, 0x0e, 0xc1, 0x02, 0x18, 0x7b, 0xe2, 0xee, 0x3d, 0xdd, 0x2b, 0x1f, 0x54, 0x8b, 0x06, | ||||
| 	0x1c, 0x03, 0xc3, 0x8f, 0xf6, 0xf7, 0x76, 0x8b, 0xb9, 0x6b, 0xf7, 0x40, 0x5e, 0x9e, 0x07, 0x4e, | ||||
| 	0x81, 0x7c, 0x75, 0xcf, 0xad, 0xec, 0x3c, 0xdc, 0xad, 0xd1, 0x48, 0x25, 0x03, 0x8d, 0x58, 0x31, | ||||
| 	0x3c, 0x2f, 0xe6, 0xca, 0x17, 0xc1, 0x85, 0x7a, 0xd0, 0x4a, 0xfc, 0x61, 0x26, 0x25, 0xe7, 0xc5, | ||||
| 	0x08, 0xb1, 0x6e, 0xfc, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x33, 0xc2, 0x0c, 0xb6, 0xeb, 0x26, 0x00, | ||||
| 	0x00, | ||||
| 	0x07, 0xe0, 0xa6, 0x02, 0xb8, 0xa7, 0xc5, 0x2d, 0x5b, 0x65, 0x6e, 0xc7, 0xe6, 0xf2, 0xf8, 0xce, | ||||
| 	0x80, 0xdc, 0x8e, 0xbd, 0xa7, 0xc5, 0x2d, 0x5b, 0xe1, 0xc7, 0xc1, 0x0c, 0xe6, 0x66, 0xda, 0x26, | ||||
| 	0x24, 0xf5, 0x1e, 0x61, 0xbf, 0xd9, 0x97, 0x9d, 0xe9, 0x2c, 0xfb, 0x41, 0xf9, 0x71, 0xa0, 0xaa, | ||||
| 	0x5d, 0xf1, 0xe0, 0xd8, 0x42, 0x89, 0x3f, 0x32, 0xa8, 0x07, 0xc7, 0x66, 0x3f, 0x34, 0x0f, 0xc2, | ||||
| 	0x0e, 0x8f, 0xc0, 0x1c, 0xc9, 0x0f, 0xdf, 0x84, 0x50, 0xf0, 0xfb, 0xc4, 0xc7, 0x5a, 0xff, 0x1c, | ||||
| 	0x31, 0x30, 0xff, 0x49, 0xbd, 0xe0, 0x90, 0xf5, 0x2b, 0xaa, 0x1f, 0x5c, 0x09, 0xbe, 0x97, 0xcd, | ||||
| 	0x81, 0xfd, 0x38, 0x36, 0xff, 0xa9, 0xfb, 0x89, 0xaf, 0xa8, 0xf7, 0x2b, 0x3d, 0x34, 0xca, 0x83, | ||||
| 	0xde, 0xaf, 0xe4, 0x38, 0xd1, 0xee, 0x57, 0x7a, 0xc4, 0x3c, 0x07, 0xc5, 0x98, 0x95, 0x9d, 0x31, | ||||
| 	0x0f, 0x08, 0xed, 0x5b, 0xa7, 0xd3, 0xd2, 0xd3, 0x87, 0xf2, 0x4e, 0xb6, 0x14, 0x23, 0xdc, 0x01, | ||||
| 	0xd8, 0x13, 0x39, 0x8d, 0xe8, 0x91, 0xf4, 0x90, 0xb0, 0x5e, 0xeb, 0xcb, 0x8a, 0xcf, 0x29, 0xfc, | ||||
| 	0x3f, 0xa5, 0xcc, 0xb7, 0x62, 0x8b, 0x68, 0x77, 0x2a, 0x85, 0xec, 0xfc, 0xaa, 0x0c, 0xd2, 0xee, | ||||
| 	0x04, 0x4a, 0x3f, 0xa5, 0x76, 0x97, 0xac, 0x3c, 0x09, 0x8c, 0x9b, 0x1e, 0x79, 0xd5, 0x01, 0x92, | ||||
| 	0x40, 0x97, 0x93, 0xd3, 0x30, 0x4e, 0x82, 0x64, 0x84, 0x1d, 0x70, 0x56, 0x22, 0xd6, 0x0e, 0xc9, | ||||
| 	0x47, 0xc4, 0xc3, 0xad, 0x01, 0x3c, 0x28, 0xc7, 0x22, 0xf5, 0x34, 0xdf, 0x4a, 0xbd, 0x08, 0x23, | ||||
| 	0xb0, 0x28, 0x79, 0xd4, 0x4f, 0xcd, 0x2d, 0xe2, 0xd2, 0x19, 0xc0, 0xa5, 0x7a, 0x66, 0x52, 0x9f, | ||||
| 	0x0b, 0xad, 0xf4, 0xab, 0xf0, 0x18, 0xcc, 0x27, 0xb7, 0x49, 0x8e, 0xbe, 0xed, 0x41, 0xee, 0x01, | ||||
| 	0x69, 0x1b, 0xf8, 0xe8, 0x93, 0xee, 0x01, 0xed, 0x0a, 0x7c, 0x1f, 0x2c, 0xa4, 0xec, 0x8e, 0x78, | ||||
| 	0x7a, 0x4c, 0x3c, 0xad, 0x0f, 0xbe, 0xb5, 0xd8, 0xd5, 0x6c, 0x2b, 0xe5, 0x12, 0x5c, 0x06, 0x85, | ||||
| 	0xa0, 0xed, 0x07, 0x47, 0xfc, 0xb8, 0x09, 0xf0, 0x23, 0xf6, 0xd6, 0x90, 0x9b, 0x27, 0x56, 0x76, | ||||
| 	0x78, 0x7c, 0x0c, 0xcc, 0x52, 0x90, 0x56, 0xdb, 0xce, 0x6b, 0x3d, 0x6e, 0x6d, 0x0d, 0xb9, 0x90, | ||||
| 	0xd0, 0xa8, 0xb5, 0x14, 0x11, 0xb0, 0x6e, 0xff, 0x80, 0x4f, 0x24, 0x88, 0x95, 0xf5, 0xee, 0x45, | ||||
| 	0x40, 0xbf, 0xb2, 0xb6, 0x0d, 0xd9, 0x78, 0x03, 0x10, 0x23, 0xed, 0xc2, 0x0b, 0x00, 0x30, 0x08, | ||||
| 	0xbe, 0x0f, 0x23, 0xfc, 0x20, 0xba, 0x35, 0xe4, 0x8e, 0x53, 0x04, 0xbe, 0xb7, 0x94, 0xad, 0x3a, | ||||
| 	0x36, 0xea, 0x5a, 0x46, 0x69, 0x58, 0xd9, 0xaa, 0x63, 0xc7, 0x8e, 0xa8, 0xf6, 0xf4, 0xf0, 0xe3, | ||||
| 	0xb1, 0x70, 0x44, 0xc5, 0x44, 0xf0, 0x30, 0x21, 0x79, 0x85, 0x1f, 0x8d, 0x05, 0x0f, 0x13, 0x86, | ||||
| 	0x0a, 0x8f, 0x86, 0x94, 0xed, 0xc3, 0xc1, 0x1f, 0xf1, 0x44, 0xcc, 0xa4, 0x3c, 0xbb, 0xd2, 0xd3, | ||||
| 	0x18, 0x11, 0x19, 0x36, 0x4d, 0x43, 0xbf, 0x32, 0x48, 0xee, 0x17, 0x57, 0xe8, 0xb8, 0x6d, 0x85, | ||||
| 	0xcf, 0x79, 0x56, 0xf0, 0x56, 0xdf, 0xf3, 0x9a, 0x3d, 0x3f, 0x7e, 0x4c, 0xc3, 0xa6, 0xe7, 0x74, | ||||
| 	0x1d, 0x74, 0xc1, 0xbc, 0x3a, 0xa3, 0x11, 0x8c, 0xbf, 0x36, 0xd8, 0xa3, 0xad, 0xce, 0x48, 0xf4, | ||||
| 	0x8e, 0x52, 0xce, 0x2a, 0x93, 0x9c, 0x0c, 0x4e, 0xc7, 0x16, 0x9c, 0xbf, 0xe9, 0xc3, 0xe9, 0xd8, | ||||
| 	0x49, 0x4e, 0xc7, 0xe6, 0x9c, 0xfb, 0xd2, 0x43, 0x7e, 0x4f, 0x0d, 0xf4, 0xb7, 0x94, 0xf4, 0x7c, | ||||
| 	0x82, 0x74, 0x5f, 0x8a, 0x74, 0x4e, 0x1d, 0x12, 0x65, 0xd1, 0x4a, 0xb1, 0xfe, 0xae, 0x1f, 0x2d, | ||||
| 	0x0f, 0x76, 0x4e, 0x1d, 0x29, 0xa5, 0x65, 0x80, 0x34, 0x8e, 0x60, 0xfd, 0x7d, 0x56, 0x06, 0x48, | ||||
| 	0x2f, 0x69, 0x19, 0x20, 0xb6, 0xb4, 0x50, 0x69, 0xa7, 0x09, 0xd2, 0x3f, 0x64, 0x85, 0x4a, 0x9b, | ||||
| 	0x4f, 0x0b, 0x95, 0x1a, 0xd3, 0x68, 0x99, 0xc2, 0x70, 0xda, 0x3f, 0x66, 0xd1, 0xd2, 0x9b, 0x50, | ||||
| 	0xa3, 0xa5, 0xc6, 0xb4, 0x0c, 0x90, 0x7b, 0x54, 0xb0, 0xfe, 0x29, 0x2b, 0x03, 0xe4, 0xb6, 0xd5, | ||||
| 	0x32, 0x40, 0x6c, 0x9c, 0x73, 0x57, 0x7a, 0x38, 0x50, 0x9a, 0xff, 0xcf, 0x06, 0x91, 0xc1, 0xbe, | ||||
| 	0xcd, 0x2f, 0x3f, 0x14, 0x4a, 0x41, 0xaa, 0x23, 0x03, 0xc1, 0xf8, 0x17, 0x83, 0x3d, 0x69, 0xf5, | ||||
| 	0x6b, 0x7e, 0x65, 0xb0, 0x90, 0xc1, 0x29, 0x35, 0xd4, 0x5f, 0xfb, 0x70, 0x8a, 0xe6, 0x57, 0xa6, | ||||
| 	0x10, 0x52, 0x8d, 0xb4, 0x61, 0x84, 0x20, 0xfd, 0x1b, 0x25, 0x3d, 0xa5, 0xf9, 0xd5, 0x99, 0x45, | ||||
| 	0x16, 0xad, 0x14, 0xeb, 0xdf, 0xfb, 0xd1, 0x8a, 0xe6, 0x57, 0x27, 0x1c, 0x69, 0x19, 0x50, 0x9b, | ||||
| 	0xff, 0x1f, 0x59, 0x19, 0x90, 0x9b, 0x5f, 0x19, 0x06, 0xa4, 0x85, 0xaa, 0x35, 0xff, 0x3f, 0xb3, | ||||
| 	0x42, 0x55, 0x9a, 0x5f, 0x1d, 0x1d, 0xa4, 0xd1, 0x6a, 0xcd, 0xff, 0xaf, 0x2c, 0x5a, 0xa5, 0xf9, | ||||
| 	0xd5, 0x67, 0xd1, 0xb4, 0x0c, 0xa8, 0xcd, 0xff, 0xef, 0xac, 0x0c, 0xc8, 0xcd, 0xaf, 0x0c, 0x1c, | ||||
| 	0x38, 0xe7, 0x23, 0x69, 0xae, 0xcb, 0xdf, 0xe1, 0xa0, 0xef, 0xe6, 0xd8, 0x9c, 0x2c, 0xb1, 0x77, | ||||
| 	0x86, 0x88, 0x67, 0xbe, 0xdc, 0x02, 0x1f, 0x03, 0x31, 0x34, 0xac, 0x89, 0x97, 0x35, 0xe8, 0x7b, | ||||
| 	0xb9, 0x8c, 0xf3, 0xe3, 0x19, 0x87, 0xb8, 0xc2, 0xbf, 0x30, 0xc1, 0x8f, 0x82, 0x19, 0x69, 0x88, | ||||
| 	0xcd, 0x5f, 0x1c, 0xa1, 0xef, 0x67, 0x91, 0x55, 0x31, 0xe6, 0x89, 0x17, 0xbd, 0x8c, 0xc9, 0x84, | ||||
| 	0x09, 0x6e, 0xaa, 0x73, 0xe1, 0x5e, 0xbd, 0x8b, 0x7e, 0x40, 0x89, 0x16, 0xd2, 0x8a, 0xd0, 0xab, | ||||
| 	0x77, 0x95, 0x89, 0x71, 0xaf, 0xde, 0x85, 0x1b, 0x40, 0xcc, 0x16, 0x6b, 0x5e, 0xfb, 0x04, 0xfd, | ||||
| 	0x90, 0xae, 0x9f, 0x4d, 0xac, 0xdf, 0x6c, 0x9f, 0xb8, 0x79, 0x0e, 0xdd, 0x6c, 0x9f, 0xc0, 0x7b, | ||||
| 	0xd2, 0xac, 0xf9, 0x15, 0x2e, 0x03, 0xfa, 0x11, 0x5d, 0x3b, 0x9f, 0x58, 0x4b, 0xab, 0x24, 0xa6, | ||||
| 	0x9b, 0xe4, 0x2b, 0x2e, 0x4f, 0xdc, 0xa0, 0xbc, 0x3c, 0x3f, 0xce, 0x91, 0x6a, 0xf7, 0x2b, 0x8f, | ||||
| 	0xe8, 0x4b, 0xa9, 0x3c, 0x82, 0x28, 0x2e, 0xcf, 0x4f, 0x72, 0x19, 0x0a, 0x27, 0x95, 0x87, 0x2f, | ||||
| 	0x8b, 0xcb, 0x23, 0x73, 0x91, 0xf2, 0x90, 0xea, 0xfc, 0x34, 0x8b, 0x4b, 0xaa, 0x4e, 0x3c, 0x14, | ||||
| 	0x64, 0xab, 0x70, 0x75, 0xe4, 0x5b, 0x05, 0x57, 0xe7, 0x97, 0x94, 0x28, 0xbb, 0x3a, 0xd2, 0xdd, | ||||
| 	0xc1, 0xaa, 0x23, 0x28, 0x70, 0x75, 0x7e, 0x46, 0xd7, 0x67, 0x54, 0x87, 0x43, 0x59, 0x75, 0xc4, | ||||
| 	0x4a, 0x5a, 0x9d, 0x9f, 0xd3, 0xb5, 0x99, 0xd5, 0xe1, 0x70, 0x5a, 0x9d, 0x0b, 0x00, 0x90, 0xfd, | ||||
| 	0xb7, 0xbd, 0x96, 0xbf, 0x8a, 0x3e, 0x6d, 0x92, 0xd7, 0x50, 0x92, 0x09, 0x5a, 0x20, 0x4f, 0xfb, | ||||
| 	0x17, 0x7f, 0x5d, 0x43, 0x9f, 0x91, 0x11, 0x3b, 0xd8, 0x04, 0x2f, 0x82, 0x42, 0x2d, 0x86, 0xac, | ||||
| 	0xa3, 0xcf, 0xea, 0x90, 0x75, 0xb8, 0x04, 0x26, 0x28, 0x82, 0x40, 0xec, 0x1a, 0xfa, 0x9c, 0x8e, | ||||
| 	0x21, 0x7f, 0x4f, 0x92, 0x6f, 0x37, 0x31, 0xe4, 0x16, 0xfa, 0x3c, 0x45, 0xc8, 0x36, 0xb8, 0xcc, | ||||
| 	0x69, 0x6e, 0x12, 0x1e, 0x07, 0x7d, 0x41, 0x01, 0x61, 0x1e, 0x47, 0xec, 0x08, 0x7f, 0xbb, 0x8d, | ||||
| 	0xbe, 0xa8, 0x3b, 0xba, 0x8d, 0x01, 0x55, 0xfe, 0x6d, 0x03, 0x7d, 0x49, 0x07, 0x6c, 0xc4, 0x5b, | ||||
| 	0xc6, 0x5f, 0xef, 0xa0, 0x2f, 0xeb, 0x88, 0x3b, 0x70, 0x09, 0x14, 0xaa, 0x02, 0xb1, 0x7a, 0x13, | ||||
| 	0x7d, 0x45, 0x8e, 0x83, 0xda, 0x08, 0x66, 0xbb, 0xf2, 0xee, 0xc3, 0xda, 0xce, 0xe6, 0x93, 0xca, | ||||
| 	0xea, 0x2a, 0xfa, 0x2a, 0xc7, 0x60, 0x23, 0xb5, 0xc5, 0x18, 0x92, 0xeb, 0x35, 0xf4, 0x35, 0x05, | ||||
| 	0x43, 0x6c, 0xf0, 0x12, 0x98, 0xac, 0x49, 0xf9, 0x5d, 0x5d, 0x47, 0x5f, 0x4f, 0x78, 0x5b, 0xa7, | ||||
| 	0xa8, 0x6a, 0x8c, 0xb2, 0xd1, 0x37, 0x12, 0x28, 0x3b, 0x4e, 0x20, 0x05, 0xdd, 0x42, 0xdf, 0x4c, | ||||
| 	0x80, 0xa4, 0x2c, 0xd3, 0xdd, 0x39, 0xe8, 0x5b, 0x09, 0x90, 0x83, 0xfd, 0x49, 0x31, 0xdd, 0xae, | ||||
| 	0xd5, 0xd0, 0xb7, 0x13, 0xa8, 0xdb, 0x18, 0x25, 0xc5, 0xb4, 0x51, 0xab, 0xa1, 0xef, 0x24, 0x50, | ||||
| 	0x1b, 0x8b, 0x2f, 0xc0, 0x84, 0xfa, 0xa0, 0x53, 0x00, 0x86, 0xc7, 0xde, 0x88, 0x1a, 0x1e, 0x7c, | ||||
| 	0x1b, 0xe4, 0xeb, 0x81, 0x78, 0xa9, 0x81, 0x72, 0xa7, 0xbd, 0x00, 0x91, 0xd1, 0x8b, 0xf7, 0x01, | ||||
| 	0x4c, 0x0e, 0x29, 0x61, 0x11, 0x98, 0x2f, 0xfd, 0x13, 0xe6, 0x02, 0xff, 0x0a, 0x67, 0xc1, 0x19, | ||||
| 	0x7a, 0xfb, 0xe4, 0x88, 0x8d, 0x7e, 0xb9, 0x9b, 0xdb, 0x30, 0x62, 0x06, 0x79, 0x20, 0x29, 0x33, | ||||
| 	0x98, 0x29, 0x0c, 0xa6, 0xcc, 0x50, 0x06, 0xb3, 0x69, 0xa3, 0x47, 0x99, 0x63, 0x22, 0x85, 0x63, | ||||
| 	0x22, 0x9d, 0x43, 0x19, 0x31, 0xca, 0x1c, 0xc3, 0x29, 0x1c, 0xc3, 0x49, 0x8e, 0xc4, 0x28, 0x51, | ||||
| 	0xe6, 0x98, 0x4e, 0xe1, 0x98, 0x4e, 0xe7, 0x50, 0x46, 0x86, 0x32, 0x07, 0x4c, 0xe1, 0x80, 0x32, | ||||
| 	0xc7, 0x43, 0x30, 0x9f, 0x3e, 0x18, 0x94, 0x59, 0x46, 0x53, 0x58, 0x46, 0x33, 0x58, 0xd4, 0xe1, | ||||
| 	0x9f, 0xcc, 0x32, 0x92, 0xc2, 0x32, 0x22, 0xb3, 0x54, 0x01, 0xca, 0x1a, 0xef, 0xc9, 0x3c, 0x53, | ||||
| 	0x29, 0x3c, 0x53, 0x59, 0x3c, 0xda, 0xf8, 0x4e, 0xe6, 0x29, 0xa6, 0xf0, 0x14, 0x53, 0xbb, 0x4d, | ||||
| 	0x1e, 0xd2, 0x9d, 0xd6, 0xaf, 0x39, 0x99, 0x61, 0x13, 0xcc, 0xa4, 0xcc, 0xe3, 0x4e, 0xa3, 0x30, | ||||
| 	0x64, 0x8a, 0x7b, 0xa0, 0xa8, 0x0f, 0xdf, 0xe4, 0xf5, 0x63, 0x29, 0xeb, 0xc7, 0x52, 0x9a, 0x44, | ||||
| 	0x1f, 0xb4, 0xc9, 0x1c, 0xe3, 0x29, 0x1c, 0xe3, 0xc9, 0x6d, 0xe8, 0x13, 0xb5, 0xd3, 0x28, 0x0a, | ||||
| 	0x32, 0x45, 0x08, 0xce, 0xf5, 0x19, 0x99, 0xa5, 0x50, 0xbd, 0x23, 0x53, 0xbd, 0xc6, 0xfb, 0x2a, | ||||
| 	0xc9, 0xe7, 0x31, 0x38, 0xdf, 0x6f, 0x66, 0x96, 0xe2, 0x74, 0x55, 0x75, 0xda, 0xf7, 0x15, 0x96, | ||||
| 	0xe4, 0xa8, 0x49, 0x1b, 0x2e, 0x6d, 0x56, 0x96, 0xe2, 0xe4, 0xae, 0xec, 0x64, 0xd0, 0x97, 0x5a, | ||||
| 	0x92, 0x37, 0x0f, 0x9c, 0xcd, 0x9c, 0x97, 0xa5, 0xb8, 0x5b, 0x51, 0xdd, 0x65, 0xbf, 0xea, 0x8a, | ||||
| 	0x5d, 0x2c, 0xdd, 0x01, 0x40, 0x9a, 0xec, 0x8d, 0x02, 0xb3, 0xba, 0xbb, 0x5b, 0x1c, 0xc2, 0xbf, | ||||
| 	0x94, 0x37, 0xdd, 0xa2, 0x41, 0x7f, 0x79, 0x51, 0xcc, 0x61, 0x77, 0x3b, 0x95, 0x47, 0xc5, 0xff, | ||||
| 	0xf2, 0xff, 0x8c, 0xf2, 0x84, 0x18, 0x45, 0xe1, 0x53, 0x65, 0xe9, 0x0d, 0x30, 0xa9, 0x0d, 0x24, | ||||
| 	0x0b, 0xc0, 0xa8, 0xf3, 0x03, 0xa5, 0x7e, 0xed, 0x16, 0x00, 0xf1, 0xbf, 0x61, 0x82, 0x53, 0x20, | ||||
| 	0xbf, 0xbf, 0xb3, 0xf7, 0xb4, 0xf2, 0x60, 0xbb, 0xba, 0x5d, 0x79, 0x58, 0x1c, 0x82, 0x05, 0x30, | ||||
| 	0xf6, 0xd4, 0xdd, 0x7d, 0xb6, 0x5b, 0xde, 0xaf, 0x16, 0x0d, 0x38, 0x06, 0x86, 0x1f, 0xef, 0xed, | ||||
| 	0xee, 0x14, 0x73, 0xd7, 0xee, 0x83, 0xbc, 0x3c, 0x0f, 0x9c, 0x02, 0xf9, 0xea, 0xae, 0x5b, 0xd9, | ||||
| 	0x7e, 0xb4, 0x53, 0xa3, 0x91, 0x4a, 0x06, 0x1a, 0xb1, 0x62, 0x78, 0x51, 0xcc, 0x95, 0x2f, 0x82, | ||||
| 	0x0b, 0xf5, 0xa0, 0x95, 0xf8, 0xc3, 0x4c, 0x4a, 0xce, 0xc1, 0x08, 0xb1, 0xae, 0xff, 0x2f, 0x00, | ||||
| 	0x00, 0xff, 0xff, 0x46, 0x1f, 0xdb, 0xdc, 0xeb, 0x26, 0x00, 0x00, | ||||
| } | ||||
|   | ||||
							
								
								
									
										93
									
								
								vendor/github.com/golang/protobuf/descriptor/descriptor.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										93
									
								
								vendor/github.com/golang/protobuf/descriptor/descriptor.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,93 +0,0 @@ | ||||
| // Go support for Protocol Buffers - Google's data interchange format | ||||
| // | ||||
| // Copyright 2016 The Go Authors.  All rights reserved. | ||||
| // https://github.com/golang/protobuf | ||||
| // | ||||
| // Redistribution and use in source and binary forms, with or without | ||||
| // modification, are permitted provided that the following conditions are | ||||
| // met: | ||||
| // | ||||
| //     * Redistributions of source code must retain the above copyright | ||||
| // notice, this list of conditions and the following disclaimer. | ||||
| //     * Redistributions in binary form must reproduce the above | ||||
| // copyright notice, this list of conditions and the following disclaimer | ||||
| // in the documentation and/or other materials provided with the | ||||
| // distribution. | ||||
| //     * Neither the name of Google Inc. nor the names of its | ||||
| // contributors may be used to endorse or promote products derived from | ||||
| // this software without specific prior written permission. | ||||
| // | ||||
| // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
| // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
| // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||||
| // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
| // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||||
| // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||
| // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||
| // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
| // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| // Package descriptor provides functions for obtaining protocol buffer | ||||
| // descriptors for generated Go types. | ||||
| // | ||||
| // These functions cannot go in package proto because they depend on the | ||||
| // generated protobuf descriptor messages, which themselves depend on proto. | ||||
| package descriptor | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"compress/gzip" | ||||
| 	"fmt" | ||||
| 	"io/ioutil" | ||||
|  | ||||
| 	"github.com/golang/protobuf/proto" | ||||
| 	protobuf "google.golang.org/genproto/protobuf" | ||||
| ) | ||||
|  | ||||
| // extractFile extracts a FileDescriptorProto from a gzip'd buffer. | ||||
| func extractFile(gz []byte) (*protobuf.FileDescriptorProto, error) { | ||||
| 	r, err := gzip.NewReader(bytes.NewReader(gz)) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("failed to open gzip reader: %v", err) | ||||
| 	} | ||||
| 	defer r.Close() | ||||
|  | ||||
| 	b, err := ioutil.ReadAll(r) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("failed to uncompress descriptor: %v", err) | ||||
| 	} | ||||
|  | ||||
| 	fd := new(protobuf.FileDescriptorProto) | ||||
| 	if err := proto.Unmarshal(b, fd); err != nil { | ||||
| 		return nil, fmt.Errorf("malformed FileDescriptorProto: %v", err) | ||||
| 	} | ||||
|  | ||||
| 	return fd, nil | ||||
| } | ||||
|  | ||||
| // Message is a proto.Message with a method to return its descriptor. | ||||
| // | ||||
| // Message types generated by the protocol compiler always satisfy | ||||
| // the Message interface. | ||||
| type Message interface { | ||||
| 	proto.Message | ||||
| 	Descriptor() ([]byte, []int) | ||||
| } | ||||
|  | ||||
| // ForMessage returns a FileDescriptorProto and a DescriptorProto from within it | ||||
| // describing the given message. | ||||
| func ForMessage(msg Message) (fd *protobuf.FileDescriptorProto, md *protobuf.DescriptorProto) { | ||||
| 	gz, path := msg.Descriptor() | ||||
| 	fd, err := extractFile(gz) | ||||
| 	if err != nil { | ||||
| 		panic(fmt.Sprintf("invalid FileDescriptorProto for %T: %v", msg, err)) | ||||
| 	} | ||||
|  | ||||
| 	md = fd.MessageType[path[0]] | ||||
| 	for _, i := range path[1:] { | ||||
| 		md = md.NestedType[i] | ||||
| 	} | ||||
| 	return fd, md | ||||
| } | ||||
							
								
								
									
										32
									
								
								vendor/github.com/golang/protobuf/descriptor/descriptor_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										32
									
								
								vendor/github.com/golang/protobuf/descriptor/descriptor_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,32 +0,0 @@ | ||||
| package descriptor_test | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/golang/protobuf/descriptor" | ||||
| 	tpb "github.com/golang/protobuf/proto/testdata" | ||||
| 	protobuf "google.golang.org/genproto/protobuf" | ||||
| ) | ||||
|  | ||||
| func TestMessage(t *testing.T) { | ||||
| 	var msg *protobuf.DescriptorProto | ||||
| 	fd, md := descriptor.ForMessage(msg) | ||||
| 	if pkg, want := fd.GetPackage(), "google.protobuf"; pkg != want { | ||||
| 		t.Errorf("descriptor.ForMessage(%T).GetPackage() = %q; want %q", msg, pkg, want) | ||||
| 	} | ||||
| 	if name, want := md.GetName(), "DescriptorProto"; name != want { | ||||
| 		t.Fatalf("descriptor.ForMessage(%T).GetName() = %q; want %q", msg, name, want) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func Example_Options() { | ||||
| 	var msg *tpb.MyMessageSet | ||||
| 	_, md := descriptor.ForMessage(msg) | ||||
| 	if md.GetOptions().GetMessageSetWireFormat() { | ||||
| 		fmt.Printf("%v uses option message_set_wire_format.\n", md.GetName()) | ||||
| 	} | ||||
|  | ||||
| 	// Output: | ||||
| 	// MyMessageSet uses option message_set_wire_format. | ||||
| } | ||||
							
								
								
									
										18
									
								
								vendor/github.com/golang/protobuf/jsonpb/jsonpb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								vendor/github.com/golang/protobuf/jsonpb/jsonpb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -585,14 +585,7 @@ func (u *Unmarshaler) unmarshalValue(target reflect.Value, inputValue json.RawMe | ||||
| 		case "Any": | ||||
| 			return fmt.Errorf("unmarshaling Any not supported yet") | ||||
| 		case "Duration": | ||||
| 			ivStr := string(inputValue) | ||||
| 			if ivStr == "null" { | ||||
| 				target.Field(0).SetInt(0) | ||||
| 				target.Field(1).SetInt(0) | ||||
| 				return nil | ||||
| 			} | ||||
|  | ||||
| 			unq, err := strconv.Unquote(ivStr) | ||||
| 			unq, err := strconv.Unquote(string(inputValue)) | ||||
| 			if err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| @@ -607,14 +600,7 @@ func (u *Unmarshaler) unmarshalValue(target reflect.Value, inputValue json.RawMe | ||||
| 			target.Field(1).SetInt(ns) | ||||
| 			return nil | ||||
| 		case "Timestamp": | ||||
| 			ivStr := string(inputValue) | ||||
| 			if ivStr == "null" { | ||||
| 				target.Field(0).SetInt(0) | ||||
| 				target.Field(1).SetInt(0) | ||||
| 				return nil | ||||
| 			} | ||||
|  | ||||
| 			unq, err := strconv.Unquote(ivStr) | ||||
| 			unq, err := strconv.Unquote(string(inputValue)) | ||||
| 			if err != nil { | ||||
| 				return err | ||||
| 			} | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/golang/protobuf/jsonpb/jsonpb_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/golang/protobuf/jsonpb/jsonpb_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -467,11 +467,9 @@ var unmarshalingTests = []struct { | ||||
| 	{"camelName input", Unmarshaler{}, `{"oBool":true}`, &pb.Simple{OBool: proto.Bool(true)}}, | ||||
|  | ||||
| 	{"Duration", Unmarshaler{}, `{"dur":"3.000s"}`, &pb.KnownTypes{Dur: &durpb.Duration{Seconds: 3}}}, | ||||
| 	{"null Duration", Unmarshaler{}, `{"dur":null}`, &pb.KnownTypes{Dur: &durpb.Duration{Seconds: 0}}}, | ||||
| 	{"Timestamp", Unmarshaler{}, `{"ts":"2014-05-13T16:53:20.021Z"}`, &pb.KnownTypes{Ts: &tspb.Timestamp{Seconds: 14e8, Nanos: 21e6}}}, | ||||
| 	{"PreEpochTimestamp", Unmarshaler{}, `{"ts":"1969-12-31T23:59:58.999999995Z"}`, &pb.KnownTypes{Ts: &tspb.Timestamp{Seconds: -2, Nanos: 999999995}}}, | ||||
| 	{"ZeroTimeTimestamp", Unmarshaler{}, `{"ts":"0001-01-01T00:00:00Z"}`, &pb.KnownTypes{Ts: &tspb.Timestamp{Seconds: -62135596800, Nanos: 0}}}, | ||||
| 	{"null Timestamp", Unmarshaler{}, `{"ts":null}`, &pb.KnownTypes{Ts: &tspb.Timestamp{Seconds: 0, Nanos: 0}}}, | ||||
|  | ||||
| 	{"DoubleValue", Unmarshaler{}, `{"dbl":1.2}`, &pb.KnownTypes{Dbl: &wpb.DoubleValue{Value: 1.2}}}, | ||||
| 	{"FloatValue", Unmarshaler{}, `{"flt":1.2}`, &pb.KnownTypes{Flt: &wpb.FloatValue{Value: 1.2}}}, | ||||
|   | ||||
							
								
								
									
										7
									
								
								vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -71,13 +71,6 @@ func (m *Simple3) String() string            { return proto.CompactTextString(m) | ||||
| func (*Simple3) ProtoMessage()               {} | ||||
| func (*Simple3) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } | ||||
|  | ||||
| func (m *Simple3) GetDub() float64 { | ||||
| 	if m != nil { | ||||
| 		return m.Dub | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type Mappy struct { | ||||
| 	Nummy    map[int64]int32    `protobuf:"bytes,1,rep,name=nummy" json:"nummy,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` | ||||
| 	Strry    map[string]string  `protobuf:"bytes,2,rep,name=strry" json:"strry,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` | ||||
|   | ||||
							
								
								
									
										138
									
								
								vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										138
									
								
								vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -360,7 +360,7 @@ type MsgWithOneof_Salary struct { | ||||
| 	Salary int64 `protobuf:"varint,2,opt,name=salary,oneof"` | ||||
| } | ||||
| type MsgWithOneof_Country struct { | ||||
| 	Country string `protobuf:"bytes,3,opt,name=Country,oneof"` | ||||
| 	Country string `protobuf:"bytes,3,opt,name=Country,json=country,oneof"` | ||||
| } | ||||
| type MsgWithOneof_HomeAddress struct { | ||||
| 	HomeAddress string `protobuf:"bytes,4,opt,name=home_address,json=homeAddress,oneof"` | ||||
| @@ -559,7 +559,6 @@ var E_Complex_RealExtension = &proto.ExtensionDesc{ | ||||
| 	Field:         123, | ||||
| 	Name:          "jsonpb.Complex.real_extension", | ||||
| 	Tag:           "bytes,123,opt,name=real_extension,json=realExtension", | ||||
| 	Filename:      "test_objects.proto", | ||||
| } | ||||
|  | ||||
| type KnownTypes struct { | ||||
| @@ -681,7 +680,6 @@ var E_Name = &proto.ExtensionDesc{ | ||||
| 	Field:         124, | ||||
| 	Name:          "jsonpb.name", | ||||
| 	Tag:           "bytes,124,opt,name=name", | ||||
| 	Filename:      "test_objects.proto", | ||||
| } | ||||
|  | ||||
| func init() { | ||||
| @@ -701,71 +699,71 @@ func init() { | ||||
| func init() { proto.RegisterFile("test_objects.proto", fileDescriptor1) } | ||||
|  | ||||
| var fileDescriptor1 = []byte{ | ||||
| 	// 1054 bytes of a gzipped FileDescriptorProto | ||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x74, 0x95, 0xdf, 0x72, 0xdb, 0x44, | ||||
| 	0x14, 0xc6, 0x23, 0xc9, 0x96, 0xed, 0x75, 0x12, 0xcc, 0x4e, 0x4a, 0x15, 0x13, 0x40, 0x63, 0x4a, | ||||
| 	0x11, 0x85, 0xba, 0x83, 0xe2, 0xf1, 0x30, 0x85, 0x9b, 0xa4, 0x31, 0x94, 0x81, 0x94, 0x99, 0x4d, | ||||
| 	0x43, 0x2f, 0x3d, 0x72, 0xbc, 0x71, 0x55, 0x64, 0xad, 0x67, 0x77, 0x45, 0xea, 0x81, 0x8b, 0x5c, | ||||
| 	0x73, 0xcd, 0x2b, 0xc0, 0x23, 0xf0, 0x44, 0x3c, 0x48, 0xe7, 0x9c, 0xd5, 0x9f, 0xc4, 0x8e, 0xaf, | ||||
| 	0xe2, 0xb3, 0xe7, 0x3b, 0x5f, 0x56, 0xbf, 0x3d, 0xbb, 0x87, 0x50, 0xcd, 0x95, 0x1e, 0x8b, 0xc9, | ||||
| 	0x1b, 0x7e, 0xa1, 0x55, 0x7f, 0x21, 0x85, 0x16, 0xd4, 0x7d, 0xa3, 0x44, 0xba, 0x98, 0x74, 0xf7, | ||||
| 	0x67, 0x42, 0xcc, 0x12, 0xfe, 0x04, 0x57, 0x27, 0xd9, 0xe5, 0x93, 0x28, 0x5d, 0x1a, 0x49, 0xf7, | ||||
| 	0xe3, 0xd5, 0xd4, 0x34, 0x93, 0x91, 0x8e, 0x45, 0x9a, 0xe7, 0x0f, 0x56, 0xf3, 0x4a, 0xcb, 0xec, | ||||
| 	0x42, 0xe7, 0xd9, 0x4f, 0x56, 0xb3, 0x3a, 0x9e, 0x73, 0xa5, 0xa3, 0xf9, 0x62, 0x93, 0xfd, 0x95, | ||||
| 	0x8c, 0x16, 0x0b, 0x2e, 0xf3, 0x1d, 0xf6, 0xfe, 0xb1, 0x89, 0x7b, 0x16, 0xcf, 0x17, 0x09, 0xa7, | ||||
| 	0xf7, 0x88, 0x2b, 0xc6, 0x13, 0x21, 0x12, 0xcf, 0xf2, 0xad, 0xa0, 0xc9, 0xea, 0xe2, 0x58, 0x88, | ||||
| 	0x84, 0xde, 0x27, 0x0d, 0x31, 0x8e, 0x53, 0x7d, 0x18, 0x7a, 0xb6, 0x6f, 0x05, 0x75, 0xe6, 0x8a, | ||||
| 	0x1f, 0x21, 0x2a, 0x13, 0xc3, 0x81, 0xe7, 0xf8, 0x56, 0xe0, 0x98, 0xc4, 0x70, 0x40, 0xf7, 0x49, | ||||
| 	0x53, 0x8c, 0x33, 0x53, 0x52, 0xf3, 0xad, 0x60, 0x87, 0x35, 0xc4, 0x39, 0x86, 0x55, 0x6a, 0x38, | ||||
| 	0xf0, 0xea, 0xbe, 0x15, 0xd4, 0xf2, 0x54, 0x51, 0xa5, 0x4c, 0x95, 0xeb, 0x5b, 0xc1, 0xfb, 0xac, | ||||
| 	0x21, 0xce, 0x6e, 0x54, 0x29, 0x53, 0xd5, 0xf0, 0xad, 0x80, 0xe6, 0xa9, 0xe1, 0xc0, 0x6c, 0xe2, | ||||
| 	0x32, 0x11, 0x91, 0xf6, 0x9a, 0xbe, 0x15, 0xd8, 0xcc, 0x15, 0xdf, 0x43, 0x64, 0x6a, 0xa6, 0x22, | ||||
| 	0x9b, 0x24, 0xdc, 0x6b, 0xf9, 0x56, 0x60, 0xb1, 0x86, 0x38, 0xc1, 0x30, 0xb7, 0xd3, 0x32, 0x4e, | ||||
| 	0x67, 0x1e, 0xf1, 0xad, 0xa0, 0x05, 0x76, 0x18, 0x1a, 0xbb, 0xc9, 0x52, 0x73, 0xe5, 0xb5, 0x7d, | ||||
| 	0x2b, 0xd8, 0x66, 0xae, 0x38, 0x86, 0xa8, 0xf7, 0xaf, 0x4d, 0x1a, 0x8c, 0x2f, 0x78, 0xa4, 0x15, | ||||
| 	0x80, 0x92, 0x05, 0x28, 0x07, 0x40, 0xc9, 0x02, 0x94, 0x2c, 0x41, 0x39, 0x00, 0x4a, 0x96, 0xa0, | ||||
| 	0x64, 0x09, 0xca, 0x01, 0x50, 0xb2, 0x04, 0x25, 0x2b, 0x50, 0x0e, 0x80, 0x92, 0x15, 0x28, 0x59, | ||||
| 	0x81, 0x72, 0x00, 0x94, 0xac, 0x40, 0xc9, 0x0a, 0x94, 0x03, 0xa0, 0xe4, 0xd9, 0x8d, 0xaa, 0x12, | ||||
| 	0x94, 0x03, 0xa0, 0x64, 0x05, 0x4a, 0x96, 0xa0, 0x1c, 0x00, 0x25, 0x4b, 0x50, 0xb2, 0x02, 0xe5, | ||||
| 	0x00, 0x28, 0x59, 0x81, 0x92, 0x15, 0x28, 0x07, 0x40, 0xc9, 0x0a, 0x94, 0x2c, 0x41, 0x39, 0x00, | ||||
| 	0x4a, 0x1a, 0x50, 0xff, 0xd9, 0xc4, 0x7d, 0x15, 0x4f, 0x67, 0x5c, 0xd3, 0x47, 0xa4, 0x7e, 0x21, | ||||
| 	0x12, 0x21, 0xb1, 0x9f, 0x76, 0xc3, 0xbd, 0xbe, 0xb9, 0x0d, 0x7d, 0x93, 0xee, 0x3f, 0x83, 0x1c, | ||||
| 	0x33, 0x12, 0xfa, 0x18, 0xfc, 0x8c, 0x1a, 0xe0, 0x6d, 0x52, 0xbb, 0x12, 0xff, 0xd2, 0x87, 0xc4, | ||||
| 	0x55, 0xd8, 0xb5, 0x78, 0x80, 0xed, 0x70, 0xb7, 0x50, 0x9b, 0x5e, 0x66, 0x79, 0x96, 0x7e, 0x61, | ||||
| 	0x80, 0xa0, 0x12, 0xf6, 0xb9, 0xae, 0x04, 0x40, 0xb9, 0xb4, 0x21, 0xcd, 0x01, 0x7b, 0x7b, 0xe8, | ||||
| 	0xf9, 0x5e, 0xa1, 0xcc, 0xcf, 0x9d, 0x15, 0x79, 0xfa, 0x15, 0x69, 0xc9, 0x71, 0x21, 0xbe, 0x87, | ||||
| 	0xb6, 0x6b, 0xe2, 0xa6, 0xcc, 0x7f, 0xf5, 0x3e, 0x23, 0x75, 0xb3, 0xe9, 0x06, 0x71, 0xd8, 0xe8, | ||||
| 	0xa4, 0xb3, 0x45, 0x5b, 0xa4, 0xfe, 0x03, 0x1b, 0x8d, 0x5e, 0x74, 0x2c, 0xda, 0x24, 0xb5, 0xe3, | ||||
| 	0x9f, 0xcf, 0x47, 0x1d, 0xbb, 0xf7, 0xb7, 0x4d, 0x6a, 0xa7, 0xd1, 0x42, 0xd1, 0x6f, 0x49, 0x7b, | ||||
| 	0x6e, 0xda, 0x05, 0xd8, 0x63, 0x8f, 0xb5, 0xc3, 0x0f, 0x0b, 0x7f, 0x90, 0xf4, 0x4f, 0xb1, 0x7f, | ||||
| 	0xce, 0xb4, 0x1c, 0xa5, 0x5a, 0x2e, 0x59, 0x6b, 0x5e, 0xc4, 0xf4, 0x88, 0xec, 0xcc, 0xb1, 0x37, | ||||
| 	0x8b, 0xaf, 0xb6, 0xb1, 0xfc, 0xa3, 0xdb, 0xe5, 0xd0, 0xaf, 0xe6, 0xb3, 0x8d, 0x41, 0x7b, 0x5e, | ||||
| 	0xad, 0x74, 0xbf, 0x23, 0xbb, 0xb7, 0xfd, 0x69, 0x87, 0x38, 0xbf, 0xf1, 0x25, 0x1e, 0xa3, 0xc3, | ||||
| 	0xe0, 0x27, 0xdd, 0x23, 0xf5, 0xdf, 0xa3, 0x24, 0xe3, 0xf8, 0x24, 0xb4, 0x98, 0x09, 0x9e, 0xda, | ||||
| 	0xdf, 0x58, 0xdd, 0x17, 0xa4, 0xb3, 0x6a, 0x7f, 0xb3, 0xbe, 0x69, 0xea, 0x1f, 0xdc, 0xac, 0x5f, | ||||
| 	0x3f, 0x94, 0xca, 0xaf, 0xf7, 0x97, 0x45, 0xb6, 0x4f, 0xd5, 0xec, 0x55, 0xac, 0x5f, 0xff, 0x92, | ||||
| 	0x72, 0x71, 0x49, 0x3f, 0x20, 0x75, 0x1d, 0xeb, 0x84, 0xa3, 0x5d, 0xeb, 0xf9, 0x16, 0x33, 0x21, | ||||
| 	0xf5, 0x88, 0xab, 0xa2, 0x24, 0x92, 0x4b, 0xf4, 0x74, 0x9e, 0x6f, 0xb1, 0x3c, 0xa6, 0x5d, 0xd2, | ||||
| 	0x78, 0x26, 0x32, 0xd8, 0x09, 0x3e, 0x54, 0x50, 0x53, 0x2c, 0xd0, 0x4f, 0xc9, 0xf6, 0x6b, 0x31, | ||||
| 	0xe7, 0xe3, 0x68, 0x3a, 0x95, 0x5c, 0x29, 0x7c, 0xaf, 0x40, 0xd0, 0x86, 0xd5, 0x23, 0xb3, 0x78, | ||||
| 	0xdc, 0x20, 0xf5, 0x2c, 0x8d, 0x45, 0xda, 0x7b, 0x48, 0x6a, 0x8c, 0x47, 0x49, 0xf5, 0xf9, 0x16, | ||||
| 	0xbe, 0x2c, 0x26, 0x78, 0xd4, 0x6c, 0x4e, 0x3b, 0xd7, 0xd7, 0xd7, 0xd7, 0x76, 0xef, 0x0a, 0xfe, | ||||
| 	0x23, 0x7c, 0xc9, 0x5b, 0x7a, 0x40, 0x5a, 0xf1, 0x3c, 0x9a, 0xc5, 0x29, 0xec, 0xcc, 0xc8, 0xab, | ||||
| 	0x85, 0xaa, 0x24, 0x3c, 0x21, 0xbb, 0x92, 0x47, 0xc9, 0x98, 0xbf, 0xd5, 0x3c, 0x55, 0xb1, 0x48, | ||||
| 	0xe9, 0x76, 0xd5, 0x52, 0x51, 0xe2, 0xfd, 0x71, 0xbb, 0x27, 0x73, 0x7b, 0xb6, 0x03, 0x45, 0xa3, | ||||
| 	0xa2, 0xa6, 0xf7, 0x7f, 0x8d, 0x90, 0x9f, 0x52, 0x71, 0x95, 0xbe, 0x5c, 0x2e, 0xb8, 0xa2, 0x0f, | ||||
| 	0x88, 0x1d, 0xa5, 0xde, 0x2e, 0x96, 0xee, 0xf5, 0xcd, 0x28, 0xe8, 0x17, 0xa3, 0xa0, 0x7f, 0x94, | ||||
| 	0x2e, 0x99, 0x1d, 0xa5, 0xf4, 0x4b, 0xe2, 0x4c, 0x33, 0x73, 0x4b, 0xdb, 0xe1, 0xfe, 0x9a, 0xec, | ||||
| 	0x24, 0x1f, 0x48, 0x0c, 0x54, 0xf4, 0x73, 0x62, 0x2b, 0xed, 0x6d, 0xa3, 0xf6, 0xfe, 0x9a, 0xf6, | ||||
| 	0x0c, 0x87, 0x13, 0xb3, 0x15, 0xdc, 0x7e, 0x5b, 0xab, 0xfc, 0x7c, 0xbb, 0x6b, 0xc2, 0x97, 0xc5, | ||||
| 	0x9c, 0x62, 0xb6, 0x56, 0xb4, 0x4f, 0x9c, 0xe9, 0x24, 0xc1, 0xd3, 0x69, 0x87, 0x07, 0xeb, 0x3b, | ||||
| 	0xc0, 0xe7, 0xe8, 0x57, 0x80, 0xcc, 0x40, 0x48, 0x1f, 0x13, 0xe7, 0x32, 0xd1, 0x78, 0x58, 0x70, | ||||
| 	0x35, 0x56, 0xf5, 0xf8, 0xb0, 0xe5, 0xf2, 0xcb, 0x44, 0x83, 0x3c, 0xce, 0x07, 0xce, 0x5d, 0x72, | ||||
| 	0x6c, 0xf6, 0x5c, 0x1e, 0x0f, 0x07, 0xb0, 0x9b, 0x6c, 0x38, 0xc0, 0x21, 0x74, 0xd7, 0x6e, 0xce, | ||||
| 	0x6f, 0xea, 0xb3, 0xe1, 0x00, 0xed, 0x0f, 0x43, 0x9c, 0x4c, 0x1b, 0xec, 0x0f, 0xc3, 0xc2, 0xfe, | ||||
| 	0x30, 0x44, 0xfb, 0xc3, 0x10, 0xc7, 0xd5, 0x26, 0xfb, 0x52, 0x9f, 0xa1, 0xbe, 0x86, 0xc3, 0xa6, | ||||
| 	0xb5, 0x01, 0x25, 0xdc, 0x36, 0x23, 0x47, 0x1d, 0xf8, 0xc3, 0xbb, 0x41, 0x36, 0xf8, 0x9b, 0x07, | ||||
| 	0x3c, 0xf7, 0x57, 0x5a, 0xd2, 0xaf, 0x49, 0xbd, 0x9a, 0x78, 0x77, 0x7d, 0x00, 0x3e, 0xec, 0xa6, | ||||
| 	0xc0, 0x28, 0x9f, 0xfa, 0xa4, 0x96, 0x46, 0x73, 0xbe, 0xd2, 0xa2, 0x7f, 0xe2, 0x5b, 0x80, 0x99, | ||||
| 	0x77, 0x01, 0x00, 0x00, 0xff, 0xff, 0x7e, 0xe7, 0x47, 0x52, 0x0e, 0x09, 0x00, 0x00, | ||||
| 	// 1055 bytes of a gzipped FileDescriptorProto | ||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x74, 0x95, 0x51, 0x73, 0xdb, 0x44, | ||||
| 	0x10, 0xc7, 0x23, 0xc9, 0x96, 0xec, 0x73, 0x12, 0xcc, 0x4d, 0x4a, 0x15, 0x13, 0x40, 0x63, 0x4a, | ||||
| 	0x11, 0x85, 0xba, 0x83, 0xe2, 0xf1, 0x30, 0x85, 0x97, 0xa4, 0x31, 0x94, 0x81, 0x94, 0x99, 0x4b, | ||||
| 	0x43, 0x1f, 0x3d, 0x72, 0x7c, 0x71, 0x55, 0x64, 0x9d, 0xe7, 0xee, 0x44, 0xea, 0x81, 0x87, 0x3c, | ||||
| 	0xf3, 0xcc, 0x57, 0x80, 0x8f, 0xc0, 0x27, 0xe2, 0x83, 0x74, 0x76, 0x4f, 0xb2, 0x12, 0x3b, 0x7e, | ||||
| 	0x8a, 0xf7, 0xf6, 0xbf, 0xff, 0x9c, 0x7e, 0xb7, 0x77, 0x4b, 0xa8, 0xe6, 0x4a, 0x8f, 0xc4, 0xf8, | ||||
| 	0x0d, 0xbf, 0xd0, 0xaa, 0x37, 0x97, 0x42, 0x0b, 0xea, 0xbe, 0x51, 0x22, 0x9b, 0x8f, 0x3b, 0xfb, | ||||
| 	0x53, 0x21, 0xa6, 0x29, 0x7f, 0x82, 0xab, 0xe3, 0xfc, 0xf2, 0x49, 0x9c, 0x2d, 0x8c, 0xa4, 0xf3, | ||||
| 	0xf1, 0x6a, 0x6a, 0x92, 0xcb, 0x58, 0x27, 0x22, 0x2b, 0xf2, 0x07, 0xab, 0x79, 0xa5, 0x65, 0x7e, | ||||
| 	0xa1, 0x8b, 0xec, 0x27, 0xab, 0x59, 0x9d, 0xcc, 0xb8, 0xd2, 0xf1, 0x6c, 0xbe, 0xc9, 0xfe, 0x4a, | ||||
| 	0xc6, 0xf3, 0x39, 0x97, 0xc5, 0x0e, 0xbb, 0xff, 0xd8, 0xc4, 0x3d, 0x4b, 0x66, 0xf3, 0x94, 0xd3, | ||||
| 	0x7b, 0xc4, 0x15, 0xa3, 0xb1, 0x10, 0xa9, 0x6f, 0x05, 0x56, 0xd8, 0x60, 0x75, 0x71, 0x2c, 0x44, | ||||
| 	0x4a, 0xef, 0x13, 0x4f, 0x8c, 0x92, 0x4c, 0x1f, 0x46, 0xbe, 0x1d, 0x58, 0x61, 0x9d, 0xb9, 0xe2, | ||||
| 	0x47, 0x88, 0x96, 0x89, 0x41, 0xdf, 0x77, 0x02, 0x2b, 0x74, 0x4c, 0x62, 0xd0, 0xa7, 0xfb, 0xa4, | ||||
| 	0x21, 0x46, 0xb9, 0x29, 0xa9, 0x05, 0x56, 0xb8, 0xc3, 0x3c, 0x71, 0x8e, 0x61, 0x95, 0x1a, 0xf4, | ||||
| 	0xfd, 0x7a, 0x60, 0x85, 0xb5, 0x22, 0x55, 0x56, 0x29, 0x53, 0xe5, 0x06, 0x56, 0xf8, 0x3e, 0xf3, | ||||
| 	0xc4, 0xd9, 0x8d, 0x2a, 0x65, 0xaa, 0xbc, 0xc0, 0x0a, 0x69, 0x91, 0x1a, 0xf4, 0xcd, 0x26, 0x2e, | ||||
| 	0x53, 0x11, 0x6b, 0xbf, 0x11, 0x58, 0xa1, 0xcd, 0x5c, 0xf1, 0x3d, 0x44, 0xa6, 0x66, 0x22, 0xf2, | ||||
| 	0x71, 0xca, 0xfd, 0x66, 0x60, 0x85, 0x16, 0xf3, 0xc4, 0x09, 0x86, 0x85, 0x9d, 0x96, 0x49, 0x36, | ||||
| 	0xf5, 0x49, 0x60, 0x85, 0x4d, 0xb0, 0xc3, 0xd0, 0xd8, 0x8d, 0x17, 0x9a, 0x2b, 0xbf, 0x15, 0x58, | ||||
| 	0xe1, 0x36, 0x73, 0xc5, 0x31, 0x44, 0xdd, 0x7f, 0x6d, 0xe2, 0x31, 0x3e, 0xe7, 0xb1, 0x56, 0x00, | ||||
| 	0x4a, 0x96, 0xa0, 0x1c, 0x00, 0x25, 0x4b, 0x50, 0x72, 0x09, 0xca, 0x01, 0x50, 0x72, 0x09, 0x4a, | ||||
| 	0x2e, 0x41, 0x39, 0x00, 0x4a, 0x2e, 0x41, 0xc9, 0x0a, 0x94, 0x03, 0xa0, 0x64, 0x05, 0x4a, 0x56, | ||||
| 	0xa0, 0x1c, 0x00, 0x25, 0x2b, 0x50, 0xb2, 0x02, 0xe5, 0x00, 0x28, 0x79, 0x76, 0xa3, 0x6a, 0x09, | ||||
| 	0xca, 0x01, 0x50, 0xb2, 0x02, 0x25, 0x97, 0xa0, 0x1c, 0x00, 0x25, 0x97, 0xa0, 0x64, 0x05, 0xca, | ||||
| 	0x01, 0x50, 0xb2, 0x02, 0x25, 0x2b, 0x50, 0x0e, 0x80, 0x92, 0x15, 0x28, 0xb9, 0x04, 0xe5, 0x00, | ||||
| 	0x28, 0x69, 0x40, 0xfd, 0x67, 0x13, 0xf7, 0x55, 0x32, 0x99, 0x72, 0x4d, 0x1f, 0x91, 0xfa, 0x85, | ||||
| 	0x48, 0x85, 0xc4, 0x7e, 0xda, 0x8d, 0xf6, 0x7a, 0xe6, 0x36, 0xf4, 0x4c, 0xba, 0xf7, 0x0c, 0x72, | ||||
| 	0xcc, 0x48, 0xe8, 0x63, 0xf0, 0x33, 0x6a, 0x80, 0xb7, 0x49, 0xed, 0x4a, 0xfc, 0x4b, 0x1f, 0x12, | ||||
| 	0x57, 0x61, 0xd7, 0xe2, 0x01, 0xb6, 0xa2, 0xdd, 0x52, 0x6d, 0x7a, 0x99, 0x15, 0x59, 0xfa, 0x85, | ||||
| 	0x01, 0x82, 0x4a, 0xd8, 0xe7, 0xba, 0x12, 0x00, 0x15, 0x52, 0x4f, 0x9a, 0x03, 0xf6, 0xf7, 0xd0, | ||||
| 	0xf3, 0xbd, 0x52, 0x59, 0x9c, 0x3b, 0x2b, 0xf3, 0xf4, 0x2b, 0xd2, 0x94, 0xa3, 0x52, 0x7c, 0x0f, | ||||
| 	0x6d, 0xd7, 0xc4, 0x0d, 0x59, 0xfc, 0xea, 0x7e, 0x46, 0xea, 0x66, 0xd3, 0x1e, 0x71, 0xd8, 0xf0, | ||||
| 	0xa4, 0xbd, 0x45, 0x9b, 0xa4, 0xfe, 0x03, 0x1b, 0x0e, 0x5f, 0xb4, 0x2d, 0xda, 0x20, 0xb5, 0xe3, | ||||
| 	0x9f, 0xcf, 0x87, 0x6d, 0xbb, 0xfb, 0xb7, 0x4d, 0x6a, 0xa7, 0xf1, 0x5c, 0xd1, 0x6f, 0x49, 0x6b, | ||||
| 	0x66, 0xda, 0x05, 0xd8, 0x63, 0x8f, 0xb5, 0xa2, 0x0f, 0x4b, 0x7f, 0x90, 0xf4, 0x4e, 0xb1, 0x7f, | ||||
| 	0xce, 0xb4, 0x1c, 0x66, 0x5a, 0x2e, 0x58, 0x73, 0x56, 0xc6, 0xf4, 0x88, 0xec, 0xcc, 0xb0, 0x37, | ||||
| 	0xcb, 0xaf, 0xb6, 0xb1, 0xfc, 0xa3, 0xdb, 0xe5, 0xd0, 0xaf, 0xe6, 0xb3, 0x8d, 0x41, 0x6b, 0x56, | ||||
| 	0xad, 0x74, 0xbe, 0x23, 0xbb, 0xb7, 0xfd, 0x69, 0x9b, 0x38, 0xbf, 0xf1, 0x05, 0x1e, 0xa3, 0xc3, | ||||
| 	0xe0, 0x27, 0xdd, 0x23, 0xf5, 0xdf, 0xe3, 0x34, 0xe7, 0xf8, 0x24, 0x34, 0x99, 0x09, 0x9e, 0xda, | ||||
| 	0xdf, 0x58, 0x9d, 0x17, 0xa4, 0xbd, 0x6a, 0x7f, 0xb3, 0xbe, 0x61, 0xea, 0x1f, 0xdc, 0xac, 0x5f, | ||||
| 	0x3f, 0x94, 0xca, 0xaf, 0xfb, 0x97, 0x45, 0xb6, 0x4f, 0xd5, 0xf4, 0x55, 0xa2, 0x5f, 0xff, 0x92, | ||||
| 	0x71, 0x71, 0x49, 0x3f, 0x20, 0x75, 0x9d, 0xe8, 0x94, 0xa3, 0x5d, 0xf3, 0xf9, 0x16, 0x33, 0x21, | ||||
| 	0xf5, 0x89, 0xab, 0xe2, 0x34, 0x96, 0x0b, 0xf4, 0x74, 0x9e, 0x6f, 0xb1, 0x22, 0xa6, 0x1d, 0xe2, | ||||
| 	0x3d, 0x13, 0x39, 0xec, 0x04, 0x1f, 0x2a, 0xa8, 0xf1, 0x2e, 0xcc, 0x02, 0xfd, 0x94, 0x6c, 0xbf, | ||||
| 	0x16, 0x33, 0x3e, 0x8a, 0x27, 0x13, 0xc9, 0x95, 0xc2, 0xf7, 0x0a, 0x04, 0x2d, 0x58, 0x3d, 0x32, | ||||
| 	0x8b, 0xc7, 0x1e, 0xa9, 0xe7, 0x59, 0x22, 0xb2, 0xee, 0x43, 0x52, 0x63, 0x3c, 0x4e, 0xab, 0xcf, | ||||
| 	0xb7, 0xf0, 0x65, 0x31, 0xc1, 0xa3, 0x46, 0x63, 0xd2, 0xbe, 0xbe, 0xbe, 0xbe, 0xb6, 0xbb, 0x57, | ||||
| 	0xf0, 0x1f, 0xe1, 0x4b, 0xde, 0xd2, 0x03, 0xd2, 0x4c, 0x66, 0xf1, 0x34, 0xc9, 0x60, 0x67, 0x46, | ||||
| 	0x5e, 0x2d, 0x54, 0x25, 0xd1, 0x09, 0xd9, 0x95, 0x3c, 0x4e, 0x47, 0xfc, 0xad, 0xe6, 0x99, 0x4a, | ||||
| 	0x44, 0x46, 0xb7, 0xab, 0x96, 0x8a, 0x53, 0xff, 0x8f, 0xdb, 0x3d, 0x59, 0xd8, 0xb3, 0x1d, 0x28, | ||||
| 	0x1a, 0x96, 0x35, 0xdd, 0xff, 0x6b, 0x84, 0xfc, 0x94, 0x89, 0xab, 0xec, 0xe5, 0x62, 0xce, 0x15, | ||||
| 	0x7d, 0x40, 0xec, 0x38, 0xf3, 0x77, 0xb1, 0x74, 0xaf, 0x67, 0x46, 0x41, 0xaf, 0x1c, 0x05, 0xbd, | ||||
| 	0xa3, 0x6c, 0xc1, 0xec, 0x38, 0xa3, 0x5f, 0x12, 0x67, 0x92, 0x9b, 0x5b, 0xda, 0x8a, 0xf6, 0xd7, | ||||
| 	0x64, 0x27, 0xc5, 0x40, 0x62, 0xa0, 0xa2, 0x9f, 0x13, 0x5b, 0x69, 0x7f, 0x1b, 0xb5, 0xf7, 0xd7, | ||||
| 	0xb4, 0x67, 0x38, 0x9c, 0x98, 0xad, 0xe0, 0xf6, 0xdb, 0x5a, 0x15, 0xe7, 0xdb, 0x59, 0x13, 0xbe, | ||||
| 	0x2c, 0xe7, 0x14, 0xb3, 0xb5, 0xa2, 0x3d, 0xe2, 0x4c, 0xc6, 0x29, 0x9e, 0x4e, 0x2b, 0x3a, 0x58, | ||||
| 	0xdf, 0x01, 0x3e, 0x47, 0xbf, 0x02, 0x64, 0x06, 0x42, 0xfa, 0x98, 0x38, 0x97, 0xa9, 0xc6, 0xc3, | ||||
| 	0x82, 0xab, 0xb1, 0xaa, 0xc7, 0x87, 0xad, 0x90, 0x5f, 0xa6, 0x1a, 0xe4, 0x49, 0x31, 0x70, 0xee, | ||||
| 	0x92, 0x63, 0xb3, 0x17, 0xf2, 0x64, 0xd0, 0x87, 0xdd, 0xe4, 0x83, 0x3e, 0x0e, 0xa1, 0xbb, 0x76, | ||||
| 	0x73, 0x7e, 0x53, 0x9f, 0x0f, 0xfa, 0x68, 0x7f, 0x18, 0xe1, 0x64, 0xda, 0x60, 0x7f, 0x18, 0x95, | ||||
| 	0xf6, 0x87, 0x11, 0xda, 0x1f, 0x46, 0x38, 0xae, 0x36, 0xd9, 0x2f, 0xf5, 0x39, 0xea, 0x6b, 0x38, | ||||
| 	0x6c, 0x9a, 0x1b, 0x50, 0xc2, 0x6d, 0x33, 0x72, 0xd4, 0x81, 0x3f, 0xbc, 0x1b, 0x64, 0x83, 0xbf, | ||||
| 	0x79, 0xc0, 0x0b, 0x7f, 0xa5, 0x25, 0xfd, 0x9a, 0xd4, 0xab, 0x89, 0x77, 0xd7, 0x07, 0xe0, 0xc3, | ||||
| 	0x6e, 0x0a, 0x8c, 0xf2, 0x69, 0x40, 0x6a, 0x59, 0x3c, 0xe3, 0x2b, 0x2d, 0xfa, 0x27, 0xbe, 0x05, | ||||
| 	0x98, 0x79, 0x17, 0x00, 0x00, 0xff, 0xff, 0xda, 0x8b, 0x4a, 0x7a, 0x0e, 0x09, 0x00, 0x00, | ||||
| } | ||||
|   | ||||
							
								
								
									
										11
									
								
								vendor/github.com/golang/protobuf/proto/encode.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								vendor/github.com/golang/protobuf/proto/encode.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1075,17 +1075,10 @@ func (o *Buffer) enc_map(p *Properties, base structPointer) error { | ||||
|  | ||||
| func (o *Buffer) enc_exts(p *Properties, base structPointer) error { | ||||
| 	exts := structPointer_Extensions(base, p.field) | ||||
|  | ||||
| 	v, mu := exts.extensionsRead() | ||||
| 	if v == nil { | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	mu.Lock() | ||||
| 	defer mu.Unlock() | ||||
| 	if err := encodeExtensionsMap(v); err != nil { | ||||
| 	if err := encodeExtensions(exts); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	v, _ := exts.extensionsRead() | ||||
|  | ||||
| 	return o.enc_map_body(v) | ||||
| } | ||||
|   | ||||
							
								
								
									
										1
									
								
								vendor/github.com/golang/protobuf/proto/extensions.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/golang/protobuf/proto/extensions.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -154,7 +154,6 @@ type ExtensionDesc struct { | ||||
| 	Field         int32       // field number | ||||
| 	Name          string      // fully-qualified name of extension, for text formatting | ||||
| 	Tag           string      // protobuf tag style | ||||
| 	Filename      string      // name of the file in which the extension is defined | ||||
| } | ||||
|  | ||||
| func (ed *ExtensionDesc) repeated() bool { | ||||
|   | ||||
							
								
								
									
										28
									
								
								vendor/github.com/golang/protobuf/proto/extensions_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										28
									
								
								vendor/github.com/golang/protobuf/proto/extensions_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -40,7 +40,6 @@ import ( | ||||
|  | ||||
| 	"github.com/golang/protobuf/proto" | ||||
| 	pb "github.com/golang/protobuf/proto/testdata" | ||||
| 	"golang.org/x/sync/errgroup" | ||||
| ) | ||||
|  | ||||
| func TestGetExtensionsWithMissingExtensions(t *testing.T) { | ||||
| @@ -507,30 +506,3 @@ func TestClearAllExtensions(t *testing.T) { | ||||
| 		t.Errorf("proto.HasExtension(%s): got true, want false", proto.MarshalTextString(m)) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func TestMarshalRace(t *testing.T) { | ||||
| 	// unregistered extension | ||||
| 	desc := &proto.ExtensionDesc{ | ||||
| 		ExtendedType:  (*pb.MyMessage)(nil), | ||||
| 		ExtensionType: (*bool)(nil), | ||||
| 		Field:         101010100, | ||||
| 		Name:          "emptyextension", | ||||
| 		Tag:           "varint,0,opt", | ||||
| 	} | ||||
|  | ||||
| 	m := &pb.MyMessage{Count: proto.Int32(4)} | ||||
| 	if err := proto.SetExtension(m, desc, proto.Bool(true)); err != nil { | ||||
| 		t.Errorf("proto.SetExtension(m, desc, true): got error %q, want nil", err) | ||||
| 	} | ||||
|  | ||||
| 	var g errgroup.Group | ||||
| 	for n := 3; n > 0; n-- { | ||||
| 		g.Go(func() error { | ||||
| 			_, err := proto.Marshal(m) | ||||
| 			return err | ||||
| 		}) | ||||
| 	} | ||||
| 	if err := g.Wait(); err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| } | ||||
|   | ||||
							
								
								
									
										46
									
								
								vendor/github.com/golang/protobuf/proto/map_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										46
									
								
								vendor/github.com/golang/protobuf/proto/map_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,46 +0,0 @@ | ||||
| package proto_test | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/golang/protobuf/proto" | ||||
| 	ppb "github.com/golang/protobuf/proto/proto3_proto" | ||||
| ) | ||||
|  | ||||
| func marshalled() []byte { | ||||
| 	m := &ppb.IntMaps{} | ||||
| 	for i := 0; i < 1000; i++ { | ||||
| 		m.Maps = append(m.Maps, &ppb.IntMap{ | ||||
| 			Rtt: map[int32]int32{1: 2}, | ||||
| 		}) | ||||
| 	} | ||||
| 	b, err := proto.Marshal(m) | ||||
| 	if err != nil { | ||||
| 		panic(fmt.Sprintf("Can't marshal %+v: %v", m, err)) | ||||
| 	} | ||||
| 	return b | ||||
| } | ||||
|  | ||||
| func BenchmarkConcurrentMapUnmarshal(b *testing.B) { | ||||
| 	in := marshalled() | ||||
| 	b.RunParallel(func(pb *testing.PB) { | ||||
| 		for pb.Next() { | ||||
| 			var out ppb.IntMaps | ||||
| 			if err := proto.Unmarshal(in, &out); err != nil { | ||||
| 				b.Errorf("Can't unmarshal ppb.IntMaps: %v", err) | ||||
| 			} | ||||
| 		} | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func BenchmarkSequentialMapUnmarshal(b *testing.B) { | ||||
| 	in := marshalled() | ||||
| 	b.ResetTimer() | ||||
| 	for i := 0; i < b.N; i++ { | ||||
| 		var out ppb.IntMaps | ||||
| 		if err := proto.Unmarshal(in, &out); err != nil { | ||||
| 			b.Errorf("Can't unmarshal ppb.IntMaps: %v", err) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										222
									
								
								vendor/github.com/golang/protobuf/proto/proto3_proto/proto3.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										222
									
								
								vendor/github.com/golang/protobuf/proto/proto3_proto/proto3.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -12,8 +12,6 @@ It has these top-level messages: | ||||
| 	Message | ||||
| 	Nested | ||||
| 	MessageWithMap | ||||
| 	IntMap | ||||
| 	IntMaps | ||||
| */ | ||||
| package proto3_proto | ||||
|  | ||||
| @@ -30,9 +28,7 @@ var _ = math.Inf | ||||
|  | ||||
| // This is a compile-time assertion to ensure that this generated file | ||||
| // is compatible with the proto package it is being compiled against. | ||||
| // A compilation error at this line likely means your copy of the | ||||
| // proto package needs to be updated. | ||||
| const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package | ||||
| const _ = proto.ProtoPackageIsVersion1 | ||||
|  | ||||
| type Message_Humour int32 | ||||
|  | ||||
| @@ -69,10 +65,10 @@ type Message struct { | ||||
| 	ResultCount  int64                            `protobuf:"varint,7,opt,name=result_count,json=resultCount" json:"result_count,omitempty"` | ||||
| 	TrueScotsman bool                             `protobuf:"varint,8,opt,name=true_scotsman,json=trueScotsman" json:"true_scotsman,omitempty"` | ||||
| 	Score        float32                          `protobuf:"fixed32,9,opt,name=score" json:"score,omitempty"` | ||||
| 	Key          []uint64                         `protobuf:"varint,5,rep,packed,name=key" json:"key,omitempty"` | ||||
| 	ShortKey     []int32                          `protobuf:"varint,19,rep,packed,name=short_key,json=shortKey" json:"short_key,omitempty"` | ||||
| 	Key          []uint64                         `protobuf:"varint,5,rep,name=key" json:"key,omitempty"` | ||||
| 	ShortKey     []int32                          `protobuf:"varint,19,rep,name=short_key,json=shortKey" json:"short_key,omitempty"` | ||||
| 	Nested       *Nested                          `protobuf:"bytes,6,opt,name=nested" json:"nested,omitempty"` | ||||
| 	RFunny       []Message_Humour                 `protobuf:"varint,16,rep,packed,name=r_funny,json=rFunny,enum=proto3_proto.Message_Humour" json:"r_funny,omitempty"` | ||||
| 	RFunny       []Message_Humour                 `protobuf:"varint,16,rep,name=r_funny,json=rFunny,enum=proto3_proto.Message_Humour" json:"r_funny,omitempty"` | ||||
| 	Terrain      map[string]*Nested               `protobuf:"bytes,10,rep,name=terrain" json:"terrain,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` | ||||
| 	Proto2Field  *testdata.SubDefaults            `protobuf:"bytes,11,opt,name=proto2_field,json=proto2Field" json:"proto2_field,omitempty"` | ||||
| 	Proto2Value  map[string]*testdata.SubDefaults `protobuf:"bytes,13,rep,name=proto2_value,json=proto2Value" json:"proto2_value,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` | ||||
| @@ -87,69 +83,6 @@ func (m *Message) String() string            { return proto.CompactTextString(m) | ||||
| func (*Message) ProtoMessage()               {} | ||||
| func (*Message) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } | ||||
|  | ||||
| func (m *Message) GetName() string { | ||||
| 	if m != nil { | ||||
| 		return m.Name | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *Message) GetHilarity() Message_Humour { | ||||
| 	if m != nil { | ||||
| 		return m.Hilarity | ||||
| 	} | ||||
| 	return Message_UNKNOWN | ||||
| } | ||||
|  | ||||
| func (m *Message) GetHeightInCm() uint32 { | ||||
| 	if m != nil { | ||||
| 		return m.HeightInCm | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *Message) GetData() []byte { | ||||
| 	if m != nil { | ||||
| 		return m.Data | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *Message) GetResultCount() int64 { | ||||
| 	if m != nil { | ||||
| 		return m.ResultCount | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *Message) GetTrueScotsman() bool { | ||||
| 	if m != nil { | ||||
| 		return m.TrueScotsman | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *Message) GetScore() float32 { | ||||
| 	if m != nil { | ||||
| 		return m.Score | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *Message) GetKey() []uint64 { | ||||
| 	if m != nil { | ||||
| 		return m.Key | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *Message) GetShortKey() []int32 { | ||||
| 	if m != nil { | ||||
| 		return m.ShortKey | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *Message) GetNested() *Nested { | ||||
| 	if m != nil { | ||||
| 		return m.Nested | ||||
| @@ -157,13 +90,6 @@ func (m *Message) GetNested() *Nested { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *Message) GetRFunny() []Message_Humour { | ||||
| 	if m != nil { | ||||
| 		return m.RFunny | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *Message) GetTerrain() map[string]*Nested { | ||||
| 	if m != nil { | ||||
| 		return m.Terrain | ||||
| @@ -223,20 +149,6 @@ func (m *Nested) String() string            { return proto.CompactTextString(m) | ||||
| func (*Nested) ProtoMessage()               {} | ||||
| func (*Nested) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } | ||||
|  | ||||
| func (m *Nested) GetBunny() string { | ||||
| 	if m != nil { | ||||
| 		return m.Bunny | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *Nested) GetCute() bool { | ||||
| 	if m != nil { | ||||
| 		return m.Cute | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| type MessageWithMap struct { | ||||
| 	ByteMapping map[bool][]byte `protobuf:"bytes,1,rep,name=byte_mapping,json=byteMapping" json:"byte_mapping,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value,proto3"` | ||||
| } | ||||
| @@ -253,95 +165,55 @@ func (m *MessageWithMap) GetByteMapping() map[bool][]byte { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type IntMap struct { | ||||
| 	Rtt map[int32]int32 `protobuf:"bytes,1,rep,name=rtt" json:"rtt,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` | ||||
| } | ||||
|  | ||||
| func (m *IntMap) Reset()                    { *m = IntMap{} } | ||||
| func (m *IntMap) String() string            { return proto.CompactTextString(m) } | ||||
| func (*IntMap) ProtoMessage()               {} | ||||
| func (*IntMap) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } | ||||
|  | ||||
| func (m *IntMap) GetRtt() map[int32]int32 { | ||||
| 	if m != nil { | ||||
| 		return m.Rtt | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type IntMaps struct { | ||||
| 	Maps []*IntMap `protobuf:"bytes,1,rep,name=maps" json:"maps,omitempty"` | ||||
| } | ||||
|  | ||||
| func (m *IntMaps) Reset()                    { *m = IntMaps{} } | ||||
| func (m *IntMaps) String() string            { return proto.CompactTextString(m) } | ||||
| func (*IntMaps) ProtoMessage()               {} | ||||
| func (*IntMaps) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } | ||||
|  | ||||
| func (m *IntMaps) GetMaps() []*IntMap { | ||||
| 	if m != nil { | ||||
| 		return m.Maps | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func init() { | ||||
| 	proto.RegisterType((*Message)(nil), "proto3_proto.Message") | ||||
| 	proto.RegisterType((*Nested)(nil), "proto3_proto.Nested") | ||||
| 	proto.RegisterType((*MessageWithMap)(nil), "proto3_proto.MessageWithMap") | ||||
| 	proto.RegisterType((*IntMap)(nil), "proto3_proto.IntMap") | ||||
| 	proto.RegisterType((*IntMaps)(nil), "proto3_proto.IntMaps") | ||||
| 	proto.RegisterEnum("proto3_proto.Message_Humour", Message_Humour_name, Message_Humour_value) | ||||
| } | ||||
|  | ||||
| func init() { proto.RegisterFile("proto3_proto/proto3.proto", fileDescriptor0) } | ||||
|  | ||||
| var fileDescriptor0 = []byte{ | ||||
| 	// 733 bytes of a gzipped FileDescriptorProto | ||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x84, 0x53, 0x6d, 0x6f, 0xf3, 0x34, | ||||
| 	0x14, 0x25, 0x4d, 0x5f, 0xd2, 0x9b, 0x74, 0x0b, 0x5e, 0x91, 0xbc, 0x02, 0x52, 0x28, 0x12, 0x8a, | ||||
| 	0x78, 0x49, 0xa1, 0xd3, 0xd0, 0x84, 0x10, 0x68, 0x1b, 0x9b, 0xa8, 0xd6, 0x95, 0xca, 0xdd, 0x98, | ||||
| 	0xf8, 0x14, 0xa5, 0xad, 0xdb, 0x46, 0x34, 0x4e, 0x49, 0x1c, 0xa4, 0xfc, 0x1d, 0xfe, 0x28, 0x8f, | ||||
| 	0x6c, 0xa7, 0x5d, 0x36, 0x65, 0xcf, 0xf3, 0x29, 0xf6, 0xf1, 0xb9, 0xf7, 0x9c, 0x1c, 0x5f, 0xc3, | ||||
| 	0xe9, 0x2e, 0x89, 0x79, 0x7c, 0xe6, 0xcb, 0xcf, 0x40, 0x6d, 0x3c, 0xf9, 0x41, 0x56, 0xf9, 0xa8, | ||||
| 	0x77, 0xba, 0x8e, 0xe3, 0xf5, 0x96, 0x2a, 0xca, 0x3c, 0x5b, 0x0d, 0x02, 0x96, 0x2b, 0x62, 0xef, | ||||
| 	0x84, 0xd3, 0x94, 0x2f, 0x03, 0x1e, 0x0c, 0xc4, 0x42, 0x81, 0xfd, 0xff, 0x5b, 0xd0, 0xba, 0xa7, | ||||
| 	0x69, 0x1a, 0xac, 0x29, 0x42, 0x50, 0x67, 0x41, 0x44, 0xb1, 0xe6, 0x68, 0x6e, 0x9b, 0xc8, 0x35, | ||||
| 	0xba, 0x00, 0x63, 0x13, 0x6e, 0x83, 0x24, 0xe4, 0x39, 0xae, 0x39, 0x9a, 0x7b, 0x34, 0xfc, 0xcc, | ||||
| 	0x2b, 0x0b, 0x7a, 0x45, 0xb1, 0xf7, 0x7b, 0x16, 0xc5, 0x59, 0x42, 0x0e, 0x6c, 0xe4, 0x80, 0xb5, | ||||
| 	0xa1, 0xe1, 0x7a, 0xc3, 0xfd, 0x90, 0xf9, 0x8b, 0x08, 0xeb, 0x8e, 0xe6, 0x76, 0x08, 0x28, 0x6c, | ||||
| 	0xc4, 0xae, 0x23, 0xa1, 0x27, 0xec, 0xe0, 0xba, 0xa3, 0xb9, 0x16, 0x91, 0x6b, 0xf4, 0x05, 0x58, | ||||
| 	0x09, 0x4d, 0xb3, 0x2d, 0xf7, 0x17, 0x71, 0xc6, 0x38, 0x6e, 0x39, 0x9a, 0xab, 0x13, 0x53, 0x61, | ||||
| 	0xd7, 0x02, 0x42, 0x5f, 0x42, 0x87, 0x27, 0x19, 0xf5, 0xd3, 0x45, 0xcc, 0xd3, 0x28, 0x60, 0xd8, | ||||
| 	0x70, 0x34, 0xd7, 0x20, 0x96, 0x00, 0x67, 0x05, 0x86, 0xba, 0xd0, 0x48, 0x17, 0x71, 0x42, 0x71, | ||||
| 	0xdb, 0xd1, 0xdc, 0x1a, 0x51, 0x1b, 0x64, 0x83, 0xfe, 0x37, 0xcd, 0x71, 0xc3, 0xd1, 0xdd, 0x3a, | ||||
| 	0x11, 0x4b, 0xf4, 0x29, 0xb4, 0xd3, 0x4d, 0x9c, 0x70, 0x5f, 0xe0, 0x27, 0x8e, 0xee, 0x36, 0x88, | ||||
| 	0x21, 0x81, 0x3b, 0x9a, 0xa3, 0x6f, 0xa1, 0xc9, 0x68, 0xca, 0xe9, 0x12, 0x37, 0x1d, 0xcd, 0x35, | ||||
| 	0x87, 0xdd, 0x97, 0xbf, 0x3e, 0x91, 0x67, 0xa4, 0xe0, 0xa0, 0x73, 0x68, 0x25, 0xfe, 0x2a, 0x63, | ||||
| 	0x2c, 0xc7, 0xb6, 0xa3, 0x7f, 0x30, 0xa9, 0x66, 0x72, 0x2b, 0xb8, 0xe8, 0x67, 0x68, 0x71, 0x9a, | ||||
| 	0x24, 0x41, 0xc8, 0x30, 0x38, 0xba, 0x6b, 0x0e, 0xfb, 0xd5, 0x65, 0x0f, 0x8a, 0x74, 0xc3, 0x78, | ||||
| 	0x92, 0x93, 0x7d, 0x09, 0xba, 0x00, 0x75, 0xff, 0x43, 0x7f, 0x15, 0xd2, 0xed, 0x12, 0x9b, 0xd2, | ||||
| 	0xe8, 0x27, 0xde, 0xfe, 0xae, 0xbd, 0x59, 0x36, 0xff, 0x8d, 0xae, 0x82, 0x6c, 0xcb, 0x53, 0x62, | ||||
| 	0x2a, 0xea, 0xad, 0x60, 0xa2, 0xd1, 0xa1, 0xf2, 0xdf, 0x60, 0x9b, 0x51, 0xdc, 0x91, 0xe2, 0x5f, | ||||
| 	0x55, 0x8b, 0x4f, 0x25, 0xf3, 0x4f, 0x41, 0x54, 0x06, 0x8a, 0x56, 0x12, 0x41, 0xdf, 0x83, 0x11, | ||||
| 	0xb0, 0x9c, 0x6f, 0x42, 0xb6, 0xc6, 0x47, 0x45, 0x52, 0x6a, 0x0e, 0xbd, 0xfd, 0x1c, 0x7a, 0x97, | ||||
| 	0x2c, 0x27, 0x07, 0x16, 0x3a, 0x07, 0x33, 0x0a, 0x58, 0xee, 0xcb, 0x5d, 0x8a, 0x8f, 0xa5, 0x76, | ||||
| 	0x75, 0x11, 0x08, 0xe2, 0x83, 0xe4, 0xa1, 0x73, 0x80, 0x34, 0x9b, 0x47, 0xca, 0x14, 0xfe, 0xb8, | ||||
| 	0xf8, 0xd7, 0x2a, 0xc7, 0xa4, 0x44, 0x44, 0x3f, 0x80, 0xb1, 0xd8, 0x84, 0xdb, 0x65, 0x42, 0x19, | ||||
| 	0x46, 0x52, 0xea, 0x8d, 0xa2, 0x03, 0xad, 0x37, 0x05, 0xab, 0x1c, 0xf8, 0x7e, 0x72, 0xd4, 0xd3, | ||||
| 	0x90, 0x93, 0xf3, 0x35, 0x34, 0x54, 0x70, 0xb5, 0xf7, 0xcc, 0x86, 0xa2, 0xfc, 0x54, 0xbb, 0xd0, | ||||
| 	0x7a, 0x8f, 0x60, 0xbf, 0x4e, 0xb1, 0xa2, 0xeb, 0x37, 0x2f, 0xbb, 0xbe, 0x71, 0x91, 0xcf, 0x6d, | ||||
| 	0xfb, 0xbf, 0x42, 0x53, 0x0d, 0x14, 0x32, 0xa1, 0xf5, 0x38, 0xb9, 0x9b, 0xfc, 0xf1, 0x34, 0xb1, | ||||
| 	0x3f, 0x42, 0x06, 0xd4, 0xa7, 0x8f, 0x93, 0x99, 0xad, 0xa1, 0x0e, 0xb4, 0x67, 0xe3, 0xcb, 0xe9, | ||||
| 	0xec, 0x61, 0x74, 0x7d, 0x67, 0xd7, 0xd0, 0x31, 0x98, 0x57, 0xa3, 0xf1, 0xd8, 0xbf, 0xba, 0x1c, | ||||
| 	0x8d, 0x6f, 0xfe, 0xb2, 0xf5, 0xfe, 0x10, 0x9a, 0xca, 0xac, 0x78, 0x33, 0x73, 0x39, 0xbe, 0xca, | ||||
| 	0x8f, 0xda, 0x88, 0x57, 0xba, 0xc8, 0xb8, 0x32, 0x64, 0x10, 0xb9, 0xee, 0xff, 0xa7, 0xc1, 0x51, | ||||
| 	0x91, 0xd9, 0x53, 0xc8, 0x37, 0xf7, 0xc1, 0x0e, 0x4d, 0xc1, 0x9a, 0xe7, 0x9c, 0xfa, 0x51, 0xb0, | ||||
| 	0xdb, 0x89, 0x39, 0xd0, 0x64, 0xce, 0xdf, 0x55, 0xe6, 0x5c, 0xd4, 0x78, 0x57, 0x39, 0xa7, 0xf7, | ||||
| 	0x8a, 0x5f, 0x4c, 0xd5, 0xfc, 0x19, 0xe9, 0xfd, 0x02, 0xf6, 0x6b, 0x42, 0x39, 0x30, 0x43, 0x05, | ||||
| 	0xd6, 0x2d, 0x07, 0x66, 0x95, 0x93, 0xf9, 0x07, 0x9a, 0x23, 0xc6, 0x85, 0xb7, 0x01, 0xe8, 0x09, | ||||
| 	0xe7, 0x85, 0xa5, 0xcf, 0x5f, 0x5a, 0x52, 0x14, 0x8f, 0x70, 0xae, 0x2c, 0x08, 0x66, 0xef, 0x47, | ||||
| 	0x30, 0xf6, 0x40, 0x59, 0xb2, 0x51, 0x21, 0xd9, 0x28, 0x4b, 0x9e, 0x41, 0x4b, 0xf5, 0x4b, 0x91, | ||||
| 	0x0b, 0xf5, 0x28, 0xd8, 0xa5, 0x85, 0x68, 0xb7, 0x4a, 0x94, 0x48, 0xc6, 0xbc, 0xa9, 0x8e, 0xde, | ||||
| 	0x05, 0x00, 0x00, 0xff, 0xff, 0x75, 0x38, 0xad, 0x84, 0xe4, 0x05, 0x00, 0x00, | ||||
| 	// 669 bytes of a gzipped FileDescriptorProto | ||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x84, 0x53, 0x6d, 0x6f, 0xd3, 0x3a, | ||||
| 	0x18, 0xbd, 0x7d, 0x4f, 0x9f, 0xa4, 0x5b, 0xae, 0xb7, 0x2b, 0x79, 0xbd, 0x7c, 0x18, 0x45, 0x42, | ||||
| 	0x13, 0x2f, 0x19, 0x14, 0x21, 0x4d, 0x08, 0x81, 0xb6, 0xb1, 0x89, 0x6a, 0x5d, 0xa9, 0xdc, 0x8d, | ||||
| 	0x89, 0x4f, 0x51, 0xd2, 0xba, 0x6d, 0x44, 0xe3, 0x54, 0x89, 0x83, 0x94, 0xbf, 0xc3, 0x1f, 0x05, | ||||
| 	0xbf, 0xa4, 0x5d, 0x36, 0x75, 0xf0, 0x29, 0xf6, 0x79, 0xce, 0xf1, 0xf3, 0xe4, 0xf8, 0x18, 0xf6, | ||||
| 	0x96, 0x71, 0xc4, 0xa3, 0x37, 0xae, 0xfa, 0x1c, 0xea, 0x8d, 0xa3, 0x3e, 0xc8, 0x2a, 0x96, 0xda, | ||||
| 	0x7b, 0xb3, 0x28, 0x9a, 0x2d, 0xa8, 0xa6, 0xf8, 0xe9, 0xf4, 0xd0, 0x63, 0x99, 0x26, 0xb6, 0x77, | ||||
| 	0x38, 0x4d, 0xf8, 0xc4, 0xe3, 0xde, 0xa1, 0x5c, 0x68, 0xb0, 0xf3, 0xab, 0x01, 0x8d, 0x4b, 0x9a, | ||||
| 	0x24, 0xde, 0x8c, 0x22, 0x04, 0x55, 0xe6, 0x85, 0x14, 0x97, 0xf6, 0x4b, 0x07, 0x4d, 0xa2, 0xd6, | ||||
| 	0xe8, 0x08, 0x8c, 0x79, 0xb0, 0xf0, 0xe2, 0x80, 0x67, 0xb8, 0x2c, 0xf0, 0xad, 0xee, 0x23, 0xa7, | ||||
| 	0xd8, 0xd0, 0xc9, 0xc5, 0xce, 0xe7, 0x34, 0x8c, 0xd2, 0x98, 0xac, 0xd9, 0x68, 0x1f, 0xac, 0x39, | ||||
| 	0x0d, 0x66, 0x73, 0xee, 0x06, 0xcc, 0x1d, 0x87, 0xb8, 0x22, 0xd4, 0x2d, 0x02, 0x1a, 0xeb, 0xb1, | ||||
| 	0xd3, 0x50, 0xf6, 0x93, 0xe3, 0xe0, 0xaa, 0xa8, 0x58, 0x44, 0xad, 0xd1, 0x63, 0xb0, 0x62, 0x9a, | ||||
| 	0xa4, 0x0b, 0xee, 0x8e, 0xa3, 0x94, 0x71, 0xdc, 0x10, 0xb5, 0x0a, 0x31, 0x35, 0x76, 0x2a, 0x21, | ||||
| 	0xf4, 0x04, 0x5a, 0x3c, 0x4e, 0xa9, 0x9b, 0x8c, 0x23, 0x9e, 0x84, 0x1e, 0xc3, 0x86, 0xe0, 0x18, | ||||
| 	0xc4, 0x92, 0xe0, 0x28, 0xc7, 0xd0, 0x2e, 0xd4, 0x44, 0x3d, 0xa6, 0xb8, 0x29, 0x8a, 0x65, 0xa2, | ||||
| 	0x37, 0xc8, 0x86, 0xca, 0x77, 0x9a, 0xe1, 0xda, 0x7e, 0xe5, 0xa0, 0x4a, 0xe4, 0x12, 0xfd, 0x0f, | ||||
| 	0xcd, 0x64, 0x1e, 0xc5, 0xdc, 0x95, 0xf8, 0x8e, 0xc0, 0x6b, 0xc4, 0x50, 0xc0, 0x85, 0x28, 0xbe, | ||||
| 	0x80, 0x3a, 0x13, 0x56, 0xd1, 0x09, 0xae, 0x8b, 0x53, 0xcc, 0xee, 0xee, 0xdd, 0x5f, 0x1f, 0xa8, | ||||
| 	0x1a, 0xc9, 0x39, 0xe8, 0x2d, 0x34, 0x62, 0x77, 0x9a, 0x32, 0x96, 0x61, 0x5b, 0x1c, 0xf4, 0x37, | ||||
| 	0xa7, 0xea, 0xf1, 0xb9, 0xe4, 0xa2, 0xf7, 0xd0, 0xe0, 0x34, 0x8e, 0xbd, 0x80, 0x61, 0x10, 0x32, | ||||
| 	0xb3, 0xdb, 0xd9, 0x2c, 0xbb, 0xd2, 0xa4, 0x33, 0xc6, 0xe3, 0x8c, 0xac, 0x24, 0xe2, 0x7e, 0xf4, | ||||
| 	0xfd, 0x77, 0xdd, 0x69, 0x40, 0x17, 0x13, 0x6c, 0xaa, 0x41, 0xff, 0x73, 0x56, 0x77, 0xed, 0x8c, | ||||
| 	0x52, 0xff, 0x13, 0x9d, 0x7a, 0xc2, 0xbd, 0x84, 0x98, 0x9a, 0x7a, 0x2e, 0x99, 0xa8, 0xb7, 0x56, | ||||
| 	0xfe, 0xf0, 0x16, 0x29, 0xc5, 0x2d, 0xd5, 0xfc, 0xe9, 0xe6, 0xe6, 0x43, 0xc5, 0xfc, 0x2a, 0x89, | ||||
| 	0x7a, 0x80, 0xfc, 0x28, 0x85, 0xa0, 0x57, 0x60, 0x88, 0x98, 0xf1, 0x79, 0xc0, 0x66, 0x78, 0x2b, | ||||
| 	0x77, 0x4a, 0xe7, 0xd0, 0x59, 0xe5, 0xd0, 0x39, 0x66, 0x19, 0x59, 0xb3, 0x84, 0x57, 0xa6, 0xb8, | ||||
| 	0xa5, 0xcc, 0x55, 0xbb, 0x04, 0x6f, 0xab, 0xde, 0x9b, 0x45, 0x20, 0x89, 0x57, 0x8a, 0x27, 0x64, | ||||
| 	0x90, 0xa4, 0x7e, 0xa8, 0x87, 0xc2, 0xff, 0xe6, 0xff, 0xba, 0x69, 0x62, 0x52, 0x20, 0xa2, 0xd7, | ||||
| 	0x60, 0x8c, 0x45, 0x2e, 0x27, 0x31, 0x65, 0x18, 0xa9, 0x56, 0x0f, 0x88, 0xd6, 0xb4, 0xf6, 0x10, | ||||
| 	0xac, 0xa2, 0xe1, 0xab, 0xe4, 0xe8, 0xa7, 0xa1, 0x92, 0xf3, 0x0c, 0x6a, 0xda, 0xb8, 0xf2, 0x1f, | ||||
| 	0xb2, 0xa1, 0x29, 0xef, 0xca, 0x47, 0xa5, 0xf6, 0x35, 0xd8, 0xf7, 0x5d, 0xdc, 0x70, 0xea, 0xf3, | ||||
| 	0xbb, 0xa7, 0x3e, 0x70, 0x91, 0xb7, 0xc7, 0x76, 0x3e, 0x42, 0x5d, 0x07, 0x0a, 0x99, 0xd0, 0xb8, | ||||
| 	0x1e, 0x5c, 0x0c, 0xbe, 0xdc, 0x0c, 0xec, 0x7f, 0x90, 0x01, 0xd5, 0xe1, 0xf5, 0x60, 0x64, 0x97, | ||||
| 	0x50, 0x0b, 0x9a, 0xa3, 0xfe, 0xf1, 0x70, 0x74, 0xd5, 0x3b, 0xbd, 0xb0, 0xcb, 0x68, 0x1b, 0xcc, | ||||
| 	0x93, 0x5e, 0xbf, 0xef, 0x9e, 0x1c, 0xf7, 0xfa, 0x67, 0xdf, 0xec, 0x4a, 0xa7, 0x0b, 0x75, 0x3d, | ||||
| 	0xac, 0x7c, 0x33, 0xbe, 0x8a, 0xaf, 0x9e, 0x47, 0x6f, 0xe4, 0x2b, 0x1d, 0xa7, 0x5c, 0x0f, 0x64, | ||||
| 	0x10, 0xb5, 0xee, 0xfc, 0x2c, 0xc1, 0x56, 0xee, 0xd9, 0x4d, 0xc0, 0xe7, 0x97, 0xde, 0x12, 0x09, | ||||
| 	0xc3, 0xfc, 0x8c, 0x53, 0x37, 0xf4, 0x96, 0x4b, 0x99, 0x83, 0x92, 0xf2, 0xf9, 0xe5, 0x46, 0x9f, | ||||
| 	0x73, 0x8d, 0x73, 0x22, 0x04, 0x97, 0x9a, 0x9f, 0xa7, 0xca, 0xbf, 0x45, 0xda, 0x1f, 0xc0, 0xbe, | ||||
| 	0x4f, 0x28, 0x1a, 0x66, 0x68, 0xc3, 0x76, 0x8b, 0x86, 0x59, 0x05, 0x67, 0xfc, 0xba, 0x6e, 0xfd, | ||||
| 	0x3b, 0x00, 0x00, 0xff, 0xff, 0x8b, 0x40, 0x3c, 0xbe, 0x3c, 0x05, 0x00, 0x00, | ||||
| } | ||||
|   | ||||
							
								
								
									
										9
									
								
								vendor/github.com/golang/protobuf/proto/proto3_proto/proto3.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								vendor/github.com/golang/protobuf/proto/proto3_proto/proto3.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -76,12 +76,3 @@ message Nested { | ||||
| message MessageWithMap { | ||||
|   map<bool, bytes> byte_mapping = 1; | ||||
| } | ||||
|  | ||||
|  | ||||
| message IntMap { | ||||
|   map<int32, int32> rtt = 1; | ||||
| } | ||||
|  | ||||
| message IntMaps { | ||||
|   repeated IntMap maps = 1; | ||||
| } | ||||
|   | ||||
							
								
								
									
										10
									
								
								vendor/github.com/golang/protobuf/proto/proto3_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								vendor/github.com/golang/protobuf/proto/proto3_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -93,16 +93,6 @@ func TestRoundTripProto3(t *testing.T) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func TestGettersForBasicTypesExist(t *testing.T) { | ||||
| 	var m pb.Message | ||||
| 	if got := m.GetNested().GetBunny(); got != "" { | ||||
| 		t.Errorf("m.GetNested().GetBunny() = %q, want empty string", got) | ||||
| 	} | ||||
| 	if got := m.GetNested().GetCute(); got { | ||||
| 		t.Errorf("m.GetNested().GetCute() = %t, want false", got) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func TestProto3SetDefaults(t *testing.T) { | ||||
| 	in := &pb.Message{ | ||||
| 		Terrain: map[string]*pb.Nested{ | ||||
|   | ||||
							
								
								
									
										855
									
								
								vendor/github.com/golang/protobuf/proto/testdata/test.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										855
									
								
								vendor/github.com/golang/protobuf/proto/testdata/test.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										6
									
								
								vendor/github.com/golang/protobuf/proto/text_parser.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/github.com/golang/protobuf/proto/text_parser.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -592,11 +592,7 @@ func (p *textParser) readStruct(sv reflect.Value, terminator string) error { | ||||
| 			props = oop.Prop | ||||
| 			nv := reflect.New(oop.Type.Elem()) | ||||
| 			dst = nv.Elem().Field(0) | ||||
| 			field := sv.Field(oop.Field) | ||||
| 			if !field.IsNil() { | ||||
| 				return p.errorf("field '%s' would overwrite already parsed oneof '%s'", name, sv.Type().Field(oop.Field).Name) | ||||
| 			} | ||||
| 			field.Set(nv) | ||||
| 			sv.Field(oop.Field).Set(nv) | ||||
| 		} | ||||
| 		if !dst.IsValid() { | ||||
| 			return p.errorf("unknown field name %q in %v", name, st) | ||||
|   | ||||
							
								
								
									
										11
									
								
								vendor/github.com/golang/protobuf/proto/text_parser_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								vendor/github.com/golang/protobuf/proto/text_parser_test.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -635,17 +635,6 @@ func TestOneofParsing(t *testing.T) { | ||||
| 	if !Equal(m, want) { | ||||
| 		t.Errorf("\n got %v\nwant %v", m, want) | ||||
| 	} | ||||
|  | ||||
| 	const inOverwrite = `name:"Shrek" number:42` | ||||
| 	m = new(Communique) | ||||
| 	testErr := "line 1.13: field 'number' would overwrite already parsed oneof 'Union'" | ||||
| 	if err := UnmarshalText(inOverwrite, m); err == nil { | ||||
| 		t.Errorf("TestOneofParsing: Didn't get expected error: %v", testErr) | ||||
| 	} else if err.Error() != testErr { | ||||
| 		t.Errorf("TestOneofParsing: Incorrect error.\nHave: %v\nWant: %v", | ||||
| 			err.Error(), testErr) | ||||
| 	} | ||||
|  | ||||
| } | ||||
|  | ||||
| var benchInput string | ||||
|   | ||||
							
								
								
									
										309
									
								
								vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										309
									
								
								vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -900,8 +900,19 @@ type FileOptions struct { | ||||
| 	// generated to contain the file's getDescriptor() method as well as any | ||||
| 	// top-level extensions defined in the file. | ||||
| 	JavaMultipleFiles *bool `protobuf:"varint,10,opt,name=java_multiple_files,json=javaMultipleFiles,def=0" json:"java_multiple_files,omitempty"` | ||||
| 	// This option does nothing. | ||||
| 	JavaGenerateEqualsAndHash *bool `protobuf:"varint,20,opt,name=java_generate_equals_and_hash,json=javaGenerateEqualsAndHash" json:"java_generate_equals_and_hash,omitempty"` | ||||
| 	// If set true, then the Java code generator will generate equals() and | ||||
| 	// hashCode() methods for all messages defined in the .proto file. | ||||
| 	// This increases generated code size, potentially substantially for large | ||||
| 	// protos, which may harm a memory-constrained application. | ||||
| 	// - In the full runtime this is a speed optimization, as the | ||||
| 	// AbstractMessage base class includes reflection-based implementations of | ||||
| 	// these methods. | ||||
| 	// - In the lite runtime, setting this option changes the semantics of | ||||
| 	// equals() and hashCode() to more closely match those of the full runtime; | ||||
| 	// the generated methods compute their results based on field values rather | ||||
| 	// than object identity. (Implementations should not assume that hashcodes | ||||
| 	// will be consistent across runtimes or versions of the protocol compiler.) | ||||
| 	JavaGenerateEqualsAndHash *bool `protobuf:"varint,20,opt,name=java_generate_equals_and_hash,json=javaGenerateEqualsAndHash,def=0" json:"java_generate_equals_and_hash,omitempty"` | ||||
| 	// If set true, then the Java2 code generator will generate code that | ||||
| 	// throws an exception whenever an attempt is made to assign a non-UTF-8 | ||||
| 	// byte sequence to a string field. | ||||
| @@ -962,6 +973,7 @@ func (*FileOptions) ExtensionRangeArray() []proto.ExtensionRange { | ||||
| } | ||||
|  | ||||
| const Default_FileOptions_JavaMultipleFiles bool = false | ||||
| const Default_FileOptions_JavaGenerateEqualsAndHash bool = false | ||||
| const Default_FileOptions_JavaStringCheckUtf8 bool = false | ||||
| const Default_FileOptions_OptimizeFor FileOptions_OptimizeMode = FileOptions_SPEED | ||||
| const Default_FileOptions_CcGenericServices bool = false | ||||
| @@ -995,7 +1007,7 @@ func (m *FileOptions) GetJavaGenerateEqualsAndHash() bool { | ||||
| 	if m != nil && m.JavaGenerateEqualsAndHash != nil { | ||||
| 		return *m.JavaGenerateEqualsAndHash | ||||
| 	} | ||||
| 	return false | ||||
| 	return Default_FileOptions_JavaGenerateEqualsAndHash | ||||
| } | ||||
|  | ||||
| func (m *FileOptions) GetJavaStringCheckUtf8() bool { | ||||
| @@ -1225,7 +1237,7 @@ type FieldOptions struct { | ||||
| 	// | ||||
| 	// | ||||
| 	// Note that implementations may choose not to check required fields within | ||||
| 	// a lazy sub-message.  That is, calling IsInitialized() on the outer message | ||||
| 	// a lazy sub-message.  That is, calling IsInitialized() on the outher message | ||||
| 	// may return true even if the inner message has missing required fields. | ||||
| 	// This is necessary because otherwise the inner message would have to be | ||||
| 	// parsed in order to perform the check, defeating the purpose of lazy | ||||
| @@ -1917,149 +1929,148 @@ func init() { | ||||
| func init() { proto.RegisterFile("google/protobuf/descriptor.proto", fileDescriptor0) } | ||||
|  | ||||
| var fileDescriptor0 = []byte{ | ||||
| 	// 2295 bytes of a gzipped FileDescriptorProto | ||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xcc, 0x59, 0x4f, 0x6f, 0x1b, 0xc7, | ||||
| 	0x15, 0xcf, 0xf2, 0x9f, 0xc8, 0x47, 0x8a, 0x1a, 0x8d, 0x14, 0x67, 0xad, 0xfc, 0xb1, 0xcc, 0xd8, | ||||
| 	0xb1, 0x6c, 0xb7, 0x74, 0x20, 0xff, 0x89, 0xa3, 0x14, 0x29, 0x28, 0x71, 0xad, 0xd0, 0x90, 0x44, | ||||
| 	0x76, 0x29, 0xb5, 0x4e, 0x2e, 0x8b, 0xd1, 0xee, 0x90, 0x5a, 0x7b, 0x39, 0xbb, 0xdd, 0x5d, 0xda, | ||||
| 	0x56, 0x4e, 0x06, 0x7a, 0xea, 0xa5, 0xe7, 0xa2, 0x2d, 0x7a, 0xc8, 0x25, 0x40, 0x3f, 0x40, 0x0f, | ||||
| 	0xfd, 0x0a, 0x05, 0x0a, 0xf4, 0x2b, 0x14, 0x05, 0xda, 0x6f, 0xd0, 0x6b, 0x31, 0x33, 0xbb, 0xcb, | ||||
| 	0x5d, 0xfe, 0x89, 0xd5, 0x00, 0x49, 0x7a, 0x12, 0xe7, 0xf7, 0x7e, 0xef, 0xcd, 0x9b, 0x37, 0x6f, | ||||
| 	0xde, 0xbc, 0x1d, 0xc1, 0xe6, 0xd0, 0x75, 0x87, 0x0e, 0xbd, 0xe3, 0xf9, 0x6e, 0xe8, 0x9e, 0x8e, | ||||
| 	0x07, 0x77, 0x2c, 0x1a, 0x98, 0xbe, 0xed, 0x85, 0xae, 0xdf, 0x14, 0x18, 0x5e, 0x91, 0x8c, 0x66, | ||||
| 	0xcc, 0x68, 0x1c, 0xc2, 0xea, 0x23, 0xdb, 0xa1, 0xed, 0x84, 0xd8, 0xa7, 0x21, 0x7e, 0x08, 0x85, | ||||
| 	0x81, 0xed, 0x50, 0x55, 0xd9, 0xcc, 0x6f, 0x55, 0xb7, 0xaf, 0x35, 0xa7, 0x94, 0x9a, 0x59, 0x8d, | ||||
| 	0x1e, 0x87, 0x75, 0xa1, 0xd1, 0xf8, 0x67, 0x01, 0xd6, 0xe6, 0x48, 0x31, 0x86, 0x02, 0x23, 0x23, | ||||
| 	0x6e, 0x51, 0xd9, 0xaa, 0xe8, 0xe2, 0x37, 0x56, 0x61, 0xc9, 0x23, 0xe6, 0x33, 0x32, 0xa4, 0x6a, | ||||
| 	0x4e, 0xc0, 0xf1, 0x10, 0xbf, 0x07, 0x60, 0x51, 0x8f, 0x32, 0x8b, 0x32, 0xf3, 0x5c, 0xcd, 0x6f, | ||||
| 	0xe6, 0xb7, 0x2a, 0x7a, 0x0a, 0xc1, 0xb7, 0x61, 0xd5, 0x1b, 0x9f, 0x3a, 0xb6, 0x69, 0xa4, 0x68, | ||||
| 	0xb0, 0x99, 0xdf, 0x2a, 0xea, 0x48, 0x0a, 0xda, 0x13, 0xf2, 0x0d, 0x58, 0x79, 0x41, 0xc9, 0xb3, | ||||
| 	0x34, 0xb5, 0x2a, 0xa8, 0x75, 0x0e, 0xa7, 0x88, 0x7b, 0x50, 0x1b, 0xd1, 0x20, 0x20, 0x43, 0x6a, | ||||
| 	0x84, 0xe7, 0x1e, 0x55, 0x0b, 0x62, 0xf5, 0x9b, 0x33, 0xab, 0x9f, 0x5e, 0x79, 0x35, 0xd2, 0x3a, | ||||
| 	0x3e, 0xf7, 0x28, 0x6e, 0x41, 0x85, 0xb2, 0xf1, 0x48, 0x5a, 0x28, 0x2e, 0x88, 0x9f, 0xc6, 0xc6, | ||||
| 	0xa3, 0x69, 0x2b, 0x65, 0xae, 0x16, 0x99, 0x58, 0x0a, 0xa8, 0xff, 0xdc, 0x36, 0xa9, 0x5a, 0x12, | ||||
| 	0x06, 0x6e, 0xcc, 0x18, 0xe8, 0x4b, 0xf9, 0xb4, 0x8d, 0x58, 0x0f, 0xef, 0x41, 0x85, 0xbe, 0x0c, | ||||
| 	0x29, 0x0b, 0x6c, 0x97, 0xa9, 0x4b, 0xc2, 0xc8, 0xf5, 0x39, 0xbb, 0x48, 0x1d, 0x6b, 0xda, 0xc4, | ||||
| 	0x44, 0x0f, 0x3f, 0x80, 0x25, 0xd7, 0x0b, 0x6d, 0x97, 0x05, 0x6a, 0x79, 0x53, 0xd9, 0xaa, 0x6e, | ||||
| 	0xbf, 0x33, 0x37, 0x11, 0xba, 0x92, 0xa3, 0xc7, 0x64, 0xdc, 0x01, 0x14, 0xb8, 0x63, 0xdf, 0xa4, | ||||
| 	0x86, 0xe9, 0x5a, 0xd4, 0xb0, 0xd9, 0xc0, 0x55, 0x2b, 0xc2, 0xc0, 0x95, 0xd9, 0x85, 0x08, 0xe2, | ||||
| 	0x9e, 0x6b, 0xd1, 0x0e, 0x1b, 0xb8, 0x7a, 0x3d, 0xc8, 0x8c, 0xf1, 0x25, 0x28, 0x05, 0xe7, 0x2c, | ||||
| 	0x24, 0x2f, 0xd5, 0x9a, 0xc8, 0x90, 0x68, 0xd4, 0xf8, 0x4f, 0x11, 0x56, 0x2e, 0x92, 0x62, 0x9f, | ||||
| 	0x40, 0x71, 0xc0, 0x57, 0xa9, 0xe6, 0xfe, 0x97, 0x18, 0x48, 0x9d, 0x6c, 0x10, 0x4b, 0xdf, 0x32, | ||||
| 	0x88, 0x2d, 0xa8, 0x32, 0x1a, 0x84, 0xd4, 0x92, 0x19, 0x91, 0xbf, 0x60, 0x4e, 0x81, 0x54, 0x9a, | ||||
| 	0x4d, 0xa9, 0xc2, 0xb7, 0x4a, 0xa9, 0x27, 0xb0, 0x92, 0xb8, 0x64, 0xf8, 0x84, 0x0d, 0xe3, 0xdc, | ||||
| 	0xbc, 0xf3, 0x3a, 0x4f, 0x9a, 0x5a, 0xac, 0xa7, 0x73, 0x35, 0xbd, 0x4e, 0x33, 0x63, 0xdc, 0x06, | ||||
| 	0x70, 0x19, 0x75, 0x07, 0x86, 0x45, 0x4d, 0x47, 0x2d, 0x2f, 0x88, 0x52, 0x97, 0x53, 0x66, 0xa2, | ||||
| 	0xe4, 0x4a, 0xd4, 0x74, 0xf0, 0xc7, 0x93, 0x54, 0x5b, 0x5a, 0x90, 0x29, 0x87, 0xf2, 0x90, 0xcd, | ||||
| 	0x64, 0xdb, 0x09, 0xd4, 0x7d, 0xca, 0xf3, 0x9e, 0x5a, 0xd1, 0xca, 0x2a, 0xc2, 0x89, 0xe6, 0x6b, | ||||
| 	0x57, 0xa6, 0x47, 0x6a, 0x72, 0x61, 0xcb, 0x7e, 0x7a, 0x88, 0xdf, 0x87, 0x04, 0x30, 0x44, 0x5a, | ||||
| 	0x81, 0xa8, 0x42, 0xb5, 0x18, 0x3c, 0x22, 0x23, 0xba, 0xf1, 0x10, 0xea, 0xd9, 0xf0, 0xe0, 0x75, | ||||
| 	0x28, 0x06, 0x21, 0xf1, 0x43, 0x91, 0x85, 0x45, 0x5d, 0x0e, 0x30, 0x82, 0x3c, 0x65, 0x96, 0xa8, | ||||
| 	0x72, 0x45, 0x9d, 0xff, 0xdc, 0xf8, 0x08, 0x96, 0x33, 0xd3, 0x5f, 0x54, 0xb1, 0xf1, 0xdb, 0x12, | ||||
| 	0xac, 0xcf, 0xcb, 0xb9, 0xb9, 0xe9, 0x7f, 0x09, 0x4a, 0x6c, 0x3c, 0x3a, 0xa5, 0xbe, 0x9a, 0x17, | ||||
| 	0x16, 0xa2, 0x11, 0x6e, 0x41, 0xd1, 0x21, 0xa7, 0xd4, 0x51, 0x0b, 0x9b, 0xca, 0x56, 0x7d, 0xfb, | ||||
| 	0xf6, 0x85, 0xb2, 0xba, 0x79, 0xc0, 0x55, 0x74, 0xa9, 0x89, 0x3f, 0x85, 0x42, 0x54, 0xe2, 0xb8, | ||||
| 	0x85, 0x5b, 0x17, 0xb3, 0xc0, 0x73, 0x51, 0x17, 0x7a, 0xf8, 0x6d, 0xa8, 0xf0, 0xbf, 0x32, 0xb6, | ||||
| 	0x25, 0xe1, 0x73, 0x99, 0x03, 0x3c, 0xae, 0x78, 0x03, 0xca, 0x22, 0xcd, 0x2c, 0x1a, 0x5f, 0x0d, | ||||
| 	0xc9, 0x98, 0x6f, 0x8c, 0x45, 0x07, 0x64, 0xec, 0x84, 0xc6, 0x73, 0xe2, 0x8c, 0xa9, 0x48, 0x98, | ||||
| 	0x8a, 0x5e, 0x8b, 0xc0, 0x9f, 0x73, 0x0c, 0x5f, 0x81, 0xaa, 0xcc, 0x4a, 0x9b, 0x59, 0xf4, 0xa5, | ||||
| 	0xa8, 0x3e, 0x45, 0x5d, 0x26, 0x6a, 0x87, 0x23, 0x7c, 0xfa, 0xa7, 0x81, 0xcb, 0xe2, 0xad, 0x15, | ||||
| 	0x53, 0x70, 0x40, 0x4c, 0xff, 0xd1, 0x74, 0xe1, 0x7b, 0x77, 0xfe, 0xf2, 0xa6, 0x73, 0xb1, 0xf1, | ||||
| 	0xe7, 0x1c, 0x14, 0xc4, 0x79, 0x5b, 0x81, 0xea, 0xf1, 0xe7, 0x3d, 0xcd, 0x68, 0x77, 0x4f, 0x76, | ||||
| 	0x0f, 0x34, 0xa4, 0xe0, 0x3a, 0x80, 0x00, 0x1e, 0x1d, 0x74, 0x5b, 0xc7, 0x28, 0x97, 0x8c, 0x3b, | ||||
| 	0x47, 0xc7, 0x0f, 0xee, 0xa1, 0x7c, 0xa2, 0x70, 0x22, 0x81, 0x42, 0x9a, 0x70, 0x77, 0x1b, 0x15, | ||||
| 	0x31, 0x82, 0x9a, 0x34, 0xd0, 0x79, 0xa2, 0xb5, 0x1f, 0xdc, 0x43, 0xa5, 0x2c, 0x72, 0x77, 0x1b, | ||||
| 	0x2d, 0xe1, 0x65, 0xa8, 0x08, 0x64, 0xb7, 0xdb, 0x3d, 0x40, 0xe5, 0xc4, 0x66, 0xff, 0x58, 0xef, | ||||
| 	0x1c, 0xed, 0xa3, 0x4a, 0x62, 0x73, 0x5f, 0xef, 0x9e, 0xf4, 0x10, 0x24, 0x16, 0x0e, 0xb5, 0x7e, | ||||
| 	0xbf, 0xb5, 0xaf, 0xa1, 0x6a, 0xc2, 0xd8, 0xfd, 0xfc, 0x58, 0xeb, 0xa3, 0x5a, 0xc6, 0xad, 0xbb, | ||||
| 	0xdb, 0x68, 0x39, 0x99, 0x42, 0x3b, 0x3a, 0x39, 0x44, 0x75, 0xbc, 0x0a, 0xcb, 0x72, 0x8a, 0xd8, | ||||
| 	0x89, 0x95, 0x29, 0xe8, 0xc1, 0x3d, 0x84, 0x26, 0x8e, 0x48, 0x2b, 0xab, 0x19, 0xe0, 0xc1, 0x3d, | ||||
| 	0x84, 0x1b, 0x7b, 0x50, 0x14, 0xd9, 0x85, 0x31, 0xd4, 0x0f, 0x5a, 0xbb, 0xda, 0x81, 0xd1, 0xed, | ||||
| 	0x1d, 0x77, 0xba, 0x47, 0xad, 0x03, 0xa4, 0x4c, 0x30, 0x5d, 0xfb, 0xd9, 0x49, 0x47, 0xd7, 0xda, | ||||
| 	0x28, 0x97, 0xc6, 0x7a, 0x5a, 0xeb, 0x58, 0x6b, 0xa3, 0x7c, 0xc3, 0x84, 0xf5, 0x79, 0x75, 0x66, | ||||
| 	0xee, 0xc9, 0x48, 0x6d, 0x71, 0x6e, 0xc1, 0x16, 0x0b, 0x5b, 0x33, 0x5b, 0xfc, 0x95, 0x02, 0x6b, | ||||
| 	0x73, 0x6a, 0xed, 0xdc, 0x49, 0x7e, 0x0a, 0x45, 0x99, 0xa2, 0xf2, 0xf6, 0xb9, 0x39, 0xb7, 0x68, | ||||
| 	0x8b, 0x84, 0x9d, 0xb9, 0x81, 0x84, 0x5e, 0xfa, 0x06, 0xce, 0x2f, 0xb8, 0x81, 0xb9, 0x89, 0x19, | ||||
| 	0x27, 0x7f, 0xa5, 0x80, 0xba, 0xc8, 0xf6, 0x6b, 0x0a, 0x45, 0x2e, 0x53, 0x28, 0x3e, 0x99, 0x76, | ||||
| 	0xe0, 0xea, 0xe2, 0x35, 0xcc, 0x78, 0xf1, 0xb5, 0x02, 0x97, 0xe6, 0x37, 0x2a, 0x73, 0x7d, 0xf8, | ||||
| 	0x14, 0x4a, 0x23, 0x1a, 0x9e, 0xb9, 0xf1, 0x65, 0xfd, 0xc1, 0x9c, 0x2b, 0x80, 0x8b, 0xa7, 0x63, | ||||
| 	0x15, 0x69, 0xa5, 0xef, 0x90, 0xfc, 0xa2, 0x6e, 0x43, 0x7a, 0x33, 0xe3, 0xe9, 0xaf, 0x73, 0xf0, | ||||
| 	0xe6, 0x5c, 0xe3, 0x73, 0x1d, 0x7d, 0x17, 0xc0, 0x66, 0xde, 0x38, 0x94, 0x17, 0xb2, 0xac, 0x4f, | ||||
| 	0x15, 0x81, 0x88, 0xb3, 0xcf, 0x6b, 0xcf, 0x38, 0x4c, 0xe4, 0x79, 0x21, 0x07, 0x09, 0x09, 0xc2, | ||||
| 	0xc3, 0x89, 0xa3, 0x05, 0xe1, 0xe8, 0x7b, 0x0b, 0x56, 0x3a, 0x73, 0xd7, 0x7d, 0x08, 0xc8, 0x74, | ||||
| 	0x6c, 0xca, 0x42, 0x23, 0x08, 0x7d, 0x4a, 0x46, 0x36, 0x1b, 0x8a, 0x02, 0x5c, 0xde, 0x29, 0x0e, | ||||
| 	0x88, 0x13, 0x50, 0x7d, 0x45, 0x8a, 0xfb, 0xb1, 0x94, 0x6b, 0x88, 0x5b, 0xc6, 0x4f, 0x69, 0x94, | ||||
| 	0x32, 0x1a, 0x52, 0x9c, 0x68, 0x34, 0x7e, 0xb3, 0x04, 0xd5, 0x54, 0x5b, 0x87, 0xaf, 0x42, 0xed, | ||||
| 	0x29, 0x79, 0x4e, 0x8c, 0xb8, 0x55, 0x97, 0x91, 0xa8, 0x72, 0xac, 0x17, 0xb5, 0xeb, 0x1f, 0xc2, | ||||
| 	0xba, 0xa0, 0xb8, 0xe3, 0x90, 0xfa, 0x86, 0xe9, 0x90, 0x20, 0x10, 0x41, 0x2b, 0x0b, 0x2a, 0xe6, | ||||
| 	0xb2, 0x2e, 0x17, 0xed, 0xc5, 0x12, 0x7c, 0x1f, 0xd6, 0x84, 0xc6, 0x68, 0xec, 0x84, 0xb6, 0xe7, | ||||
| 	0x50, 0x83, 0x7f, 0x3c, 0x04, 0xa2, 0x10, 0x27, 0x9e, 0xad, 0x72, 0xc6, 0x61, 0x44, 0xe0, 0x1e, | ||||
| 	0x05, 0xb8, 0x0d, 0xef, 0x0a, 0xb5, 0x21, 0x65, 0xd4, 0x27, 0x21, 0x35, 0xe8, 0x2f, 0xc7, 0xc4, | ||||
| 	0x09, 0x0c, 0xc2, 0x2c, 0xe3, 0x8c, 0x04, 0x67, 0xea, 0x3a, 0x37, 0xb0, 0x9b, 0x53, 0x15, 0xfd, | ||||
| 	0x32, 0x27, 0xee, 0x47, 0x3c, 0x4d, 0xd0, 0x5a, 0xcc, 0xfa, 0x8c, 0x04, 0x67, 0x78, 0x07, 0x2e, | ||||
| 	0x09, 0x2b, 0x41, 0xe8, 0xdb, 0x6c, 0x68, 0x98, 0x67, 0xd4, 0x7c, 0x66, 0x8c, 0xc3, 0xc1, 0x43, | ||||
| 	0xf5, 0xed, 0xf4, 0xfc, 0xc2, 0xc3, 0xbe, 0xe0, 0xec, 0x71, 0xca, 0x49, 0x38, 0x78, 0x88, 0xfb, | ||||
| 	0x50, 0xe3, 0x9b, 0x31, 0xb2, 0xbf, 0xa4, 0xc6, 0xc0, 0xf5, 0xc5, 0xcd, 0x52, 0x9f, 0x73, 0xb2, | ||||
| 	0x53, 0x11, 0x6c, 0x76, 0x23, 0x85, 0x43, 0xd7, 0xa2, 0x3b, 0xc5, 0x7e, 0x4f, 0xd3, 0xda, 0x7a, | ||||
| 	0x35, 0xb6, 0xf2, 0xc8, 0xf5, 0x79, 0x42, 0x0d, 0xdd, 0x24, 0xc0, 0x55, 0x99, 0x50, 0x43, 0x37, | ||||
| 	0x0e, 0xef, 0x7d, 0x58, 0x33, 0x4d, 0xb9, 0x66, 0xdb, 0x34, 0xa2, 0x16, 0x3f, 0x50, 0x51, 0x26, | ||||
| 	0x58, 0xa6, 0xb9, 0x2f, 0x09, 0x51, 0x8e, 0x07, 0xf8, 0x63, 0x78, 0x73, 0x12, 0xac, 0xb4, 0xe2, | ||||
| 	0xea, 0xcc, 0x2a, 0xa7, 0x55, 0xef, 0xc3, 0x9a, 0x77, 0x3e, 0xab, 0x88, 0x33, 0x33, 0x7a, 0xe7, | ||||
| 	0xd3, 0x6a, 0xd7, 0xc5, 0x67, 0x9b, 0x4f, 0x4d, 0x12, 0x52, 0x4b, 0x7d, 0x2b, 0xcd, 0x4e, 0x09, | ||||
| 	0xf0, 0x1d, 0x40, 0xa6, 0x69, 0x50, 0x46, 0x4e, 0x1d, 0x6a, 0x10, 0x9f, 0x32, 0x12, 0xa8, 0x57, | ||||
| 	0xd2, 0xe4, 0xba, 0x69, 0x6a, 0x42, 0xda, 0x12, 0x42, 0x7c, 0x0b, 0x56, 0xdd, 0xd3, 0xa7, 0xa6, | ||||
| 	0xcc, 0x2c, 0xc3, 0xf3, 0xe9, 0xc0, 0x7e, 0xa9, 0x5e, 0x13, 0x61, 0x5a, 0xe1, 0x02, 0x91, 0x57, | ||||
| 	0x3d, 0x01, 0xe3, 0x9b, 0x80, 0xcc, 0xe0, 0x8c, 0xf8, 0x9e, 0xb8, 0xda, 0x03, 0x8f, 0x98, 0x54, | ||||
| 	0xbd, 0x2e, 0xa9, 0x12, 0x3f, 0x8a, 0x61, 0xfc, 0x04, 0xd6, 0xc7, 0xcc, 0x66, 0x21, 0xf5, 0x3d, | ||||
| 	0x9f, 0xf2, 0x0e, 0x5d, 0x1e, 0x33, 0xf5, 0x5f, 0x4b, 0x0b, 0x7a, 0xec, 0x93, 0x34, 0x5b, 0xee, | ||||
| 	0xae, 0xbe, 0x36, 0x9e, 0x05, 0x1b, 0x3b, 0x50, 0x4b, 0x6f, 0x3a, 0xae, 0x80, 0xdc, 0x76, 0xa4, | ||||
| 	0xf0, 0x0b, 0x74, 0xaf, 0xdb, 0xe6, 0x57, 0xdf, 0x17, 0x1a, 0xca, 0xf1, 0x2b, 0xf8, 0xa0, 0x73, | ||||
| 	0xac, 0x19, 0xfa, 0xc9, 0xd1, 0x71, 0xe7, 0x50, 0x43, 0xf9, 0x5b, 0x95, 0xf2, 0xbf, 0x97, 0xd0, | ||||
| 	0xab, 0x57, 0xaf, 0x5e, 0xe5, 0x1e, 0x17, 0xca, 0x1f, 0xa0, 0x1b, 0x8d, 0xbf, 0xe6, 0xa0, 0x9e, | ||||
| 	0x6d, 0x7e, 0xf1, 0x4f, 0xe0, 0xad, 0xf8, 0x4b, 0x35, 0xa0, 0xa1, 0xf1, 0xc2, 0xf6, 0x45, 0x36, | ||||
| 	0x8e, 0x88, 0x6c, 0x1f, 0x93, 0x40, 0xae, 0x47, 0xac, 0x3e, 0x0d, 0x7f, 0x61, 0xfb, 0x3c, 0xd7, | ||||
| 	0x46, 0x24, 0xc4, 0x07, 0x70, 0x85, 0xb9, 0x46, 0x10, 0x12, 0x66, 0x11, 0xdf, 0x32, 0x26, 0x6f, | ||||
| 	0x04, 0x06, 0x31, 0x4d, 0x1a, 0x04, 0xae, 0xbc, 0x05, 0x12, 0x2b, 0xef, 0x30, 0xb7, 0x1f, 0x91, | ||||
| 	0x27, 0xe5, 0xb1, 0x15, 0x51, 0xa7, 0x36, 0x3d, 0xbf, 0x68, 0xd3, 0xdf, 0x86, 0xca, 0x88, 0x78, | ||||
| 	0x06, 0x65, 0xa1, 0x7f, 0x2e, 0x5a, 0xb6, 0xb2, 0x5e, 0x1e, 0x11, 0x4f, 0xe3, 0xe3, 0xef, 0x6e, | ||||
| 	0x27, 0xb2, 0xd1, 0x2c, 0xa3, 0x4a, 0xe3, 0x1f, 0x79, 0xa8, 0xa5, 0x9b, 0x37, 0xde, 0x0b, 0x9b, | ||||
| 	0xa2, 0x50, 0x2b, 0xe2, 0x28, 0xbf, 0xff, 0x8d, 0xad, 0x5e, 0x73, 0x8f, 0x57, 0xf0, 0x9d, 0x92, | ||||
| 	0x6c, 0xa9, 0x74, 0xa9, 0xc9, 0x6f, 0x4f, 0x7e, 0x78, 0xa9, 0x6c, 0xd4, 0xcb, 0x7a, 0x34, 0xc2, | ||||
| 	0xfb, 0x50, 0x7a, 0x1a, 0x08, 0xdb, 0x25, 0x61, 0xfb, 0xda, 0x37, 0xdb, 0x7e, 0xdc, 0x17, 0xc6, | ||||
| 	0x2b, 0x8f, 0xfb, 0xc6, 0x51, 0x57, 0x3f, 0x6c, 0x1d, 0xe8, 0x91, 0x3a, 0xbe, 0x0c, 0x05, 0x87, | ||||
| 	0x7c, 0x79, 0x9e, 0xad, 0xf5, 0x02, 0xba, 0x68, 0xf8, 0x2f, 0x43, 0xe1, 0x05, 0x25, 0xcf, 0xb2, | ||||
| 	0x15, 0x56, 0x40, 0xdf, 0xe1, 0x31, 0xb8, 0x03, 0x45, 0x11, 0x2f, 0x0c, 0x10, 0x45, 0x0c, 0xbd, | ||||
| 	0x81, 0xcb, 0x50, 0xd8, 0xeb, 0xea, 0xfc, 0x28, 0x20, 0xa8, 0x49, 0xd4, 0xe8, 0x75, 0xb4, 0x3d, | ||||
| 	0x0d, 0xe5, 0x1a, 0xf7, 0xa1, 0x24, 0x83, 0xc0, 0x8f, 0x49, 0x12, 0x06, 0xf4, 0x46, 0x34, 0x8c, | ||||
| 	0x6c, 0x28, 0xb1, 0xf4, 0xe4, 0x70, 0x57, 0xd3, 0x51, 0x2e, 0xbb, 0xc9, 0x05, 0x54, 0x6c, 0x04, | ||||
| 	0x50, 0x4b, 0x77, 0x6f, 0xdf, 0x4b, 0x7e, 0x35, 0xfe, 0xa2, 0x40, 0x35, 0xd5, 0x8d, 0xf1, 0x3e, | ||||
| 	0x80, 0x38, 0x8e, 0xfb, 0xc2, 0x20, 0x8e, 0x4d, 0x82, 0x28, 0x35, 0x40, 0x40, 0x2d, 0x8e, 0x5c, | ||||
| 	0x74, 0xeb, 0xbe, 0x17, 0xe7, 0xff, 0xa8, 0x00, 0x9a, 0xee, 0xe4, 0xa6, 0x1c, 0x54, 0x7e, 0x50, | ||||
| 	0x07, 0xff, 0xa0, 0x40, 0x3d, 0xdb, 0xbe, 0x4d, 0xb9, 0x77, 0xf5, 0x07, 0x75, 0xef, 0xf7, 0x0a, | ||||
| 	0x2c, 0x67, 0x9a, 0xb6, 0xff, 0x2b, 0xef, 0x7e, 0x97, 0x87, 0xb5, 0x39, 0x7a, 0xb8, 0x15, 0x75, | ||||
| 	0xb7, 0xb2, 0xe1, 0xfe, 0xf1, 0x45, 0xe6, 0x6a, 0xf2, 0xfb, 0xb3, 0x47, 0xfc, 0x30, 0x6a, 0x86, | ||||
| 	0x6f, 0x02, 0xb2, 0x2d, 0xca, 0x42, 0x7b, 0x60, 0x53, 0x3f, 0xfa, 0x22, 0x97, 0x2d, 0xef, 0xca, | ||||
| 	0x04, 0x97, 0x1f, 0xe5, 0x3f, 0x02, 0xec, 0xb9, 0x81, 0x1d, 0xda, 0xcf, 0xa9, 0x61, 0xb3, 0xf8, | ||||
| 	0xf3, 0x9d, 0xb7, 0xc0, 0x05, 0x1d, 0xc5, 0x92, 0x0e, 0x0b, 0x13, 0x36, 0xa3, 0x43, 0x32, 0xc5, | ||||
| 	0xe6, 0x15, 0x30, 0xaf, 0xa3, 0x58, 0x92, 0xb0, 0xaf, 0x42, 0xcd, 0x72, 0xc7, 0xbc, 0xa1, 0x90, | ||||
| 	0x3c, 0x5e, 0x70, 0x15, 0xbd, 0x2a, 0xb1, 0x84, 0x12, 0x75, 0x7c, 0x93, 0x77, 0x83, 0x9a, 0x5e, | ||||
| 	0x95, 0x98, 0xa4, 0xdc, 0x80, 0x15, 0x32, 0x1c, 0xfa, 0xdc, 0x78, 0x6c, 0x48, 0xf6, 0xb0, 0xf5, | ||||
| 	0x04, 0x16, 0xc4, 0x8d, 0xc7, 0x50, 0x8e, 0xe3, 0xc0, 0x6f, 0x36, 0x1e, 0x09, 0xc3, 0x93, 0xaf, | ||||
| 	0x37, 0xb9, 0xad, 0x8a, 0x5e, 0x66, 0xb1, 0xf0, 0x2a, 0xd4, 0xec, 0xc0, 0x98, 0x3c, 0x23, 0xe6, | ||||
| 	0x36, 0x73, 0x5b, 0x65, 0xbd, 0x6a, 0x07, 0xc9, 0xbb, 0x51, 0xe3, 0xeb, 0x1c, 0xd4, 0xb3, 0xcf, | ||||
| 	0xa0, 0xb8, 0x0d, 0x65, 0xc7, 0x35, 0x89, 0x48, 0x04, 0xf9, 0x06, 0xbf, 0xf5, 0x9a, 0x97, 0xd3, | ||||
| 	0xe6, 0x41, 0xc4, 0xd7, 0x13, 0xcd, 0x8d, 0xbf, 0x29, 0x50, 0x8e, 0x61, 0x7c, 0x09, 0x0a, 0x1e, | ||||
| 	0x09, 0xcf, 0x84, 0xb9, 0xe2, 0x6e, 0x0e, 0x29, 0xba, 0x18, 0x73, 0x3c, 0xf0, 0x08, 0x13, 0x29, | ||||
| 	0x10, 0xe1, 0x7c, 0xcc, 0xf7, 0xd5, 0xa1, 0xc4, 0x12, 0x0d, 0xb2, 0x3b, 0x1a, 0x51, 0x16, 0x06, | ||||
| 	0xf1, 0xbe, 0x46, 0xf8, 0x5e, 0x04, 0xe3, 0xdb, 0xb0, 0x1a, 0xfa, 0xc4, 0x76, 0x32, 0xdc, 0x82, | ||||
| 	0xe0, 0xa2, 0x58, 0x90, 0x90, 0x77, 0xe0, 0x72, 0x6c, 0xd7, 0xa2, 0x21, 0x31, 0xcf, 0xa8, 0x35, | ||||
| 	0x51, 0x2a, 0x89, 0x37, 0xb6, 0xb7, 0x22, 0x42, 0x3b, 0x92, 0xc7, 0xba, 0x8d, 0xbf, 0x2b, 0xb0, | ||||
| 	0x1a, 0xb7, 0xf4, 0x56, 0x12, 0xac, 0x43, 0x00, 0xc2, 0x98, 0x1b, 0xa6, 0xc3, 0x35, 0x9b, 0xca, | ||||
| 	0x33, 0x7a, 0xcd, 0x56, 0xa2, 0xa4, 0xa7, 0x0c, 0x6c, 0x8c, 0x00, 0x26, 0x92, 0x85, 0x61, 0xbb, | ||||
| 	0x02, 0xd5, 0xe8, 0x8d, 0x5b, 0xfc, 0xa3, 0x44, 0x7e, 0x04, 0x82, 0x84, 0x78, 0xef, 0x8f, 0xd7, | ||||
| 	0xa1, 0x78, 0x4a, 0x87, 0x36, 0x8b, 0x5e, 0xde, 0xe4, 0x20, 0x7e, 0xcf, 0x2b, 0x24, 0xef, 0x79, | ||||
| 	0xbb, 0x4f, 0x60, 0xcd, 0x74, 0x47, 0xd3, 0xee, 0xee, 0xa2, 0xa9, 0x0f, 0xd1, 0xe0, 0x33, 0xe5, | ||||
| 	0x0b, 0x98, 0x74, 0x6a, 0x5f, 0xe5, 0xf2, 0xfb, 0xbd, 0xdd, 0x3f, 0xe5, 0x36, 0xf6, 0xa5, 0x5e, | ||||
| 	0x2f, 0x5e, 0xa6, 0x4e, 0x07, 0x0e, 0x35, 0xb9, 0xeb, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x5f, | ||||
| 	0x1c, 0x48, 0x4f, 0x0d, 0x1a, 0x00, 0x00, | ||||
| 	// 2287 bytes of a gzipped FileDescriptorProto | ||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xcc, 0x59, 0xcd, 0x73, 0xdb, 0xc6, | ||||
| 	0x15, 0x0f, 0xf8, 0x25, 0xf2, 0x91, 0xa2, 0x56, 0x2b, 0xc5, 0x86, 0xe5, 0x38, 0x96, 0x19, 0x3b, | ||||
| 	0x96, 0xed, 0x96, 0xce, 0xc8, 0x1f, 0x71, 0x94, 0x4e, 0x3a, 0x94, 0x08, 0x2b, 0xf4, 0x50, 0x22, | ||||
| 	0x0b, 0x4a, 0xad, 0x93, 0x1e, 0x30, 0x2b, 0x60, 0x49, 0xc1, 0x06, 0x17, 0x28, 0x00, 0xda, 0x56, | ||||
| 	0x4e, 0x9e, 0xe9, 0xa9, 0xc7, 0xde, 0x3a, 0x6d, 0xa7, 0xd3, 0xc9, 0x25, 0x33, 0xfd, 0x03, 0x7a, | ||||
| 	0xe8, 0xbd, 0xd7, 0xce, 0xf4, 0xde, 0x63, 0x67, 0xda, 0xff, 0xa0, 0xd7, 0xce, 0xee, 0x02, 0x20, | ||||
| 	0xf8, 0x15, 0xab, 0x99, 0x49, 0xd2, 0x93, 0xb8, 0xbf, 0xf7, 0x7b, 0x0f, 0x6f, 0xdf, 0x3e, 0xbc, | ||||
| 	0xf7, 0xb0, 0x82, 0xcd, 0x81, 0xeb, 0x0e, 0x1c, 0x7a, 0xd7, 0xf3, 0xdd, 0xd0, 0x3d, 0x19, 0xf5, | ||||
| 	0xef, 0x5a, 0x34, 0x30, 0x7d, 0xdb, 0x0b, 0x5d, 0xbf, 0x2e, 0x30, 0xbc, 0x22, 0x19, 0xf5, 0x98, | ||||
| 	0x51, 0x3b, 0x80, 0xd5, 0xc7, 0xb6, 0x43, 0x9b, 0x09, 0xb1, 0x47, 0x43, 0xfc, 0x08, 0x72, 0x7d, | ||||
| 	0xdb, 0xa1, 0xaa, 0xb2, 0x99, 0xdd, 0x2a, 0x6f, 0x5f, 0xaf, 0x4f, 0x29, 0xd5, 0x27, 0x35, 0xba, | ||||
| 	0x1c, 0xd6, 0x85, 0x46, 0xed, 0x9f, 0x39, 0x58, 0x9b, 0x23, 0xc5, 0x18, 0x72, 0x8c, 0x0c, 0xb9, | ||||
| 	0x45, 0x65, 0xab, 0xa4, 0x8b, 0xdf, 0x58, 0x85, 0x25, 0x8f, 0x98, 0xcf, 0xc9, 0x80, 0xaa, 0x19, | ||||
| 	0x01, 0xc7, 0x4b, 0xfc, 0x2e, 0x80, 0x45, 0x3d, 0xca, 0x2c, 0xca, 0xcc, 0x33, 0x35, 0xbb, 0x99, | ||||
| 	0xdd, 0x2a, 0xe9, 0x29, 0x04, 0xdf, 0x81, 0x55, 0x6f, 0x74, 0xe2, 0xd8, 0xa6, 0x91, 0xa2, 0xc1, | ||||
| 	0x66, 0x76, 0x2b, 0xaf, 0x23, 0x29, 0x68, 0x8e, 0xc9, 0x37, 0x61, 0xe5, 0x25, 0x25, 0xcf, 0xd3, | ||||
| 	0xd4, 0xb2, 0xa0, 0x56, 0x39, 0x9c, 0x22, 0xee, 0x41, 0x65, 0x48, 0x83, 0x80, 0x0c, 0xa8, 0x11, | ||||
| 	0x9e, 0x79, 0x54, 0xcd, 0x89, 0xdd, 0x6f, 0xce, 0xec, 0x7e, 0x7a, 0xe7, 0xe5, 0x48, 0xeb, 0xe8, | ||||
| 	0xcc, 0xa3, 0xb8, 0x01, 0x25, 0xca, 0x46, 0x43, 0x69, 0x21, 0xbf, 0x20, 0x7e, 0x1a, 0x1b, 0x0d, | ||||
| 	0xa7, 0xad, 0x14, 0xb9, 0x5a, 0x64, 0x62, 0x29, 0xa0, 0xfe, 0x0b, 0xdb, 0xa4, 0x6a, 0x41, 0x18, | ||||
| 	0xb8, 0x39, 0x63, 0xa0, 0x27, 0xe5, 0xd3, 0x36, 0x62, 0x3d, 0xbc, 0x07, 0x25, 0xfa, 0x2a, 0xa4, | ||||
| 	0x2c, 0xb0, 0x5d, 0xa6, 0x2e, 0x09, 0x23, 0x37, 0xe6, 0x9c, 0x22, 0x75, 0xac, 0x69, 0x13, 0x63, | ||||
| 	0x3d, 0xfc, 0x10, 0x96, 0x5c, 0x2f, 0xb4, 0x5d, 0x16, 0xa8, 0xc5, 0x4d, 0x65, 0xab, 0xbc, 0xfd, | ||||
| 	0xce, 0xdc, 0x44, 0xe8, 0x48, 0x8e, 0x1e, 0x93, 0x71, 0x0b, 0x50, 0xe0, 0x8e, 0x7c, 0x93, 0x1a, | ||||
| 	0xa6, 0x6b, 0x51, 0xc3, 0x66, 0x7d, 0x57, 0x2d, 0x09, 0x03, 0x57, 0x67, 0x37, 0x22, 0x88, 0x7b, | ||||
| 	0xae, 0x45, 0x5b, 0xac, 0xef, 0xea, 0xd5, 0x60, 0x62, 0x8d, 0x2f, 0x40, 0x21, 0x38, 0x63, 0x21, | ||||
| 	0x79, 0xa5, 0x56, 0x44, 0x86, 0x44, 0xab, 0xda, 0x7f, 0xf2, 0xb0, 0x72, 0x9e, 0x14, 0xfb, 0x18, | ||||
| 	0xf2, 0x7d, 0xbe, 0x4b, 0x35, 0xf3, 0xbf, 0xc4, 0x40, 0xea, 0x4c, 0x06, 0xb1, 0xf0, 0x0d, 0x83, | ||||
| 	0xd8, 0x80, 0x32, 0xa3, 0x41, 0x48, 0x2d, 0x99, 0x11, 0xd9, 0x73, 0xe6, 0x14, 0x48, 0xa5, 0xd9, | ||||
| 	0x94, 0xca, 0x7d, 0xa3, 0x94, 0x7a, 0x0a, 0x2b, 0x89, 0x4b, 0x86, 0x4f, 0xd8, 0x20, 0xce, 0xcd, | ||||
| 	0xbb, 0x6f, 0xf2, 0xa4, 0xae, 0xc5, 0x7a, 0x3a, 0x57, 0xd3, 0xab, 0x74, 0x62, 0x8d, 0x9b, 0x00, | ||||
| 	0x2e, 0xa3, 0x6e, 0xdf, 0xb0, 0xa8, 0xe9, 0xa8, 0xc5, 0x05, 0x51, 0xea, 0x70, 0xca, 0x4c, 0x94, | ||||
| 	0x5c, 0x89, 0x9a, 0x0e, 0xfe, 0x68, 0x9c, 0x6a, 0x4b, 0x0b, 0x32, 0xe5, 0x40, 0xbe, 0x64, 0x33, | ||||
| 	0xd9, 0x76, 0x0c, 0x55, 0x9f, 0xf2, 0xbc, 0xa7, 0x56, 0xb4, 0xb3, 0x92, 0x70, 0xa2, 0xfe, 0xc6, | ||||
| 	0x9d, 0xe9, 0x91, 0x9a, 0xdc, 0xd8, 0xb2, 0x9f, 0x5e, 0xe2, 0xf7, 0x20, 0x01, 0x0c, 0x91, 0x56, | ||||
| 	0x20, 0xaa, 0x50, 0x25, 0x06, 0x0f, 0xc9, 0x90, 0x6e, 0x3c, 0x82, 0xea, 0x64, 0x78, 0xf0, 0x3a, | ||||
| 	0xe4, 0x83, 0x90, 0xf8, 0xa1, 0xc8, 0xc2, 0xbc, 0x2e, 0x17, 0x18, 0x41, 0x96, 0x32, 0x4b, 0x54, | ||||
| 	0xb9, 0xbc, 0xce, 0x7f, 0x6e, 0x7c, 0x08, 0xcb, 0x13, 0x8f, 0x3f, 0xaf, 0x62, 0xed, 0x37, 0x05, | ||||
| 	0x58, 0x9f, 0x97, 0x73, 0x73, 0xd3, 0xff, 0x02, 0x14, 0xd8, 0x68, 0x78, 0x42, 0x7d, 0x35, 0x2b, | ||||
| 	0x2c, 0x44, 0x2b, 0xdc, 0x80, 0xbc, 0x43, 0x4e, 0xa8, 0xa3, 0xe6, 0x36, 0x95, 0xad, 0xea, 0xf6, | ||||
| 	0x9d, 0x73, 0x65, 0x75, 0xbd, 0xcd, 0x55, 0x74, 0xa9, 0x89, 0x3f, 0x81, 0x5c, 0x54, 0xe2, 0xb8, | ||||
| 	0x85, 0xdb, 0xe7, 0xb3, 0xc0, 0x73, 0x51, 0x17, 0x7a, 0xf8, 0x32, 0x94, 0xf8, 0x5f, 0x19, 0xdb, | ||||
| 	0x82, 0xf0, 0xb9, 0xc8, 0x01, 0x1e, 0x57, 0xbc, 0x01, 0x45, 0x91, 0x66, 0x16, 0x8d, 0x5b, 0x43, | ||||
| 	0xb2, 0xe6, 0x07, 0x63, 0xd1, 0x3e, 0x19, 0x39, 0xa1, 0xf1, 0x82, 0x38, 0x23, 0x2a, 0x12, 0xa6, | ||||
| 	0xa4, 0x57, 0x22, 0xf0, 0xa7, 0x1c, 0xc3, 0x57, 0xa1, 0x2c, 0xb3, 0xd2, 0x66, 0x16, 0x7d, 0x25, | ||||
| 	0xaa, 0x4f, 0x5e, 0x97, 0x89, 0xda, 0xe2, 0x08, 0x7f, 0xfc, 0xb3, 0xc0, 0x65, 0xf1, 0xd1, 0x8a, | ||||
| 	0x47, 0x70, 0x40, 0x3c, 0xfe, 0xc3, 0xe9, 0xc2, 0x77, 0x65, 0xfe, 0xf6, 0xa6, 0x73, 0xb1, 0xf6, | ||||
| 	0xe7, 0x0c, 0xe4, 0xc4, 0xfb, 0xb6, 0x02, 0xe5, 0xa3, 0xcf, 0xba, 0x9a, 0xd1, 0xec, 0x1c, 0xef, | ||||
| 	0xb6, 0x35, 0xa4, 0xe0, 0x2a, 0x80, 0x00, 0x1e, 0xb7, 0x3b, 0x8d, 0x23, 0x94, 0x49, 0xd6, 0xad, | ||||
| 	0xc3, 0xa3, 0x87, 0xf7, 0x51, 0x36, 0x51, 0x38, 0x96, 0x40, 0x2e, 0x4d, 0xb8, 0xb7, 0x8d, 0xf2, | ||||
| 	0x18, 0x41, 0x45, 0x1a, 0x68, 0x3d, 0xd5, 0x9a, 0x0f, 0xef, 0xa3, 0xc2, 0x24, 0x72, 0x6f, 0x1b, | ||||
| 	0x2d, 0xe1, 0x65, 0x28, 0x09, 0x64, 0xb7, 0xd3, 0x69, 0xa3, 0x62, 0x62, 0xb3, 0x77, 0xa4, 0xb7, | ||||
| 	0x0e, 0xf7, 0x51, 0x29, 0xb1, 0xb9, 0xaf, 0x77, 0x8e, 0xbb, 0x08, 0x12, 0x0b, 0x07, 0x5a, 0xaf, | ||||
| 	0xd7, 0xd8, 0xd7, 0x50, 0x39, 0x61, 0xec, 0x7e, 0x76, 0xa4, 0xf5, 0x50, 0x65, 0xc2, 0xad, 0x7b, | ||||
| 	0xdb, 0x68, 0x39, 0x79, 0x84, 0x76, 0x78, 0x7c, 0x80, 0xaa, 0x78, 0x15, 0x96, 0xe5, 0x23, 0x62, | ||||
| 	0x27, 0x56, 0xa6, 0xa0, 0x87, 0xf7, 0x11, 0x1a, 0x3b, 0x22, 0xad, 0xac, 0x4e, 0x00, 0x0f, 0xef, | ||||
| 	0x23, 0x5c, 0xdb, 0x83, 0xbc, 0xc8, 0x2e, 0x8c, 0xa1, 0xda, 0x6e, 0xec, 0x6a, 0x6d, 0xa3, 0xd3, | ||||
| 	0x3d, 0x6a, 0x75, 0x0e, 0x1b, 0x6d, 0xa4, 0x8c, 0x31, 0x5d, 0xfb, 0xc9, 0x71, 0x4b, 0xd7, 0x9a, | ||||
| 	0x28, 0x93, 0xc6, 0xba, 0x5a, 0xe3, 0x48, 0x6b, 0xa2, 0x6c, 0xcd, 0x84, 0xf5, 0x79, 0x75, 0x66, | ||||
| 	0xee, 0x9b, 0x91, 0x3a, 0xe2, 0xcc, 0x82, 0x23, 0x16, 0xb6, 0x66, 0x8e, 0xf8, 0x4b, 0x05, 0xd6, | ||||
| 	0xe6, 0xd4, 0xda, 0xb9, 0x0f, 0xf9, 0x31, 0xe4, 0x65, 0x8a, 0xca, 0xee, 0x73, 0x6b, 0x6e, 0xd1, | ||||
| 	0x16, 0x09, 0x3b, 0xd3, 0x81, 0x84, 0x5e, 0xba, 0x03, 0x67, 0x17, 0x74, 0x60, 0x6e, 0x62, 0xc6, | ||||
| 	0xc9, 0x5f, 0x2a, 0xa0, 0x2e, 0xb2, 0xfd, 0x86, 0x42, 0x91, 0x99, 0x28, 0x14, 0x1f, 0x4f, 0x3b, | ||||
| 	0x70, 0x6d, 0xf1, 0x1e, 0x66, 0xbc, 0xf8, 0x4a, 0x81, 0x0b, 0xf3, 0x07, 0x95, 0xb9, 0x3e, 0x7c, | ||||
| 	0x02, 0x85, 0x21, 0x0d, 0x4f, 0xdd, 0xb8, 0x59, 0xbf, 0x3f, 0xa7, 0x05, 0x70, 0xf1, 0x74, 0xac, | ||||
| 	0x22, 0xad, 0x74, 0x0f, 0xc9, 0x2e, 0x9a, 0x36, 0xa4, 0x37, 0x33, 0x9e, 0xfe, 0x2a, 0x03, 0x6f, | ||||
| 	0xcf, 0x35, 0x3e, 0xd7, 0xd1, 0x2b, 0x00, 0x36, 0xf3, 0x46, 0xa1, 0x6c, 0xc8, 0xb2, 0x3e, 0x95, | ||||
| 	0x04, 0x22, 0xde, 0x7d, 0x5e, 0x7b, 0x46, 0x61, 0x22, 0xcf, 0x0a, 0x39, 0x48, 0x48, 0x10, 0x1e, | ||||
| 	0x8d, 0x1d, 0xcd, 0x09, 0x47, 0xdf, 0x5d, 0xb0, 0xd3, 0x99, 0x5e, 0xf7, 0x01, 0x20, 0xd3, 0xb1, | ||||
| 	0x29, 0x0b, 0x8d, 0x20, 0xf4, 0x29, 0x19, 0xda, 0x6c, 0x20, 0x0a, 0x70, 0x71, 0x27, 0xdf, 0x27, | ||||
| 	0x4e, 0x40, 0xf5, 0x15, 0x29, 0xee, 0xc5, 0x52, 0xae, 0x21, 0xba, 0x8c, 0x9f, 0xd2, 0x28, 0x4c, | ||||
| 	0x68, 0x48, 0x71, 0xa2, 0x51, 0xfb, 0xf5, 0x12, 0x94, 0x53, 0x63, 0x1d, 0xbe, 0x06, 0x95, 0x67, | ||||
| 	0xe4, 0x05, 0x31, 0xe2, 0x51, 0x5d, 0x46, 0xa2, 0xcc, 0xb1, 0x6e, 0x34, 0xae, 0x7f, 0x00, 0xeb, | ||||
| 	0x82, 0xe2, 0x8e, 0x42, 0xea, 0x1b, 0xa6, 0x43, 0x82, 0x40, 0x04, 0xad, 0x28, 0xa8, 0x98, 0xcb, | ||||
| 	0x3a, 0x5c, 0xb4, 0x17, 0x4b, 0xf0, 0x03, 0x58, 0x13, 0x1a, 0xc3, 0x91, 0x13, 0xda, 0x9e, 0x43, | ||||
| 	0x0d, 0xfe, 0xf1, 0x10, 0x88, 0x42, 0x9c, 0x78, 0xb6, 0xca, 0x19, 0x07, 0x11, 0x81, 0x7b, 0x14, | ||||
| 	0xe0, 0x7d, 0xb8, 0x22, 0xd4, 0x06, 0x94, 0x51, 0x9f, 0x84, 0xd4, 0xa0, 0xbf, 0x18, 0x11, 0x27, | ||||
| 	0x30, 0x08, 0xb3, 0x8c, 0x53, 0x12, 0x9c, 0xaa, 0xeb, 0x69, 0x03, 0x97, 0x38, 0x77, 0x3f, 0xa2, | ||||
| 	0x6a, 0x82, 0xd9, 0x60, 0xd6, 0xa7, 0x24, 0x38, 0xc5, 0x3b, 0x70, 0x41, 0x18, 0x0a, 0x42, 0xdf, | ||||
| 	0x66, 0x03, 0xc3, 0x3c, 0xa5, 0xe6, 0x73, 0x63, 0x14, 0xf6, 0x1f, 0xa9, 0x97, 0xd3, 0x16, 0x84, | ||||
| 	0x93, 0x3d, 0xc1, 0xd9, 0xe3, 0x94, 0xe3, 0xb0, 0xff, 0x08, 0xf7, 0xa0, 0xc2, 0xcf, 0x63, 0x68, | ||||
| 	0x7f, 0x41, 0x8d, 0xbe, 0xeb, 0x8b, 0xe6, 0x52, 0x9d, 0xf3, 0x72, 0xa7, 0x82, 0x58, 0xef, 0x44, | ||||
| 	0x0a, 0x07, 0xae, 0x45, 0x77, 0xf2, 0xbd, 0xae, 0xa6, 0x35, 0xf5, 0x72, 0x6c, 0xe5, 0xb1, 0xeb, | ||||
| 	0xf3, 0x9c, 0x1a, 0xb8, 0x49, 0x8c, 0xcb, 0x32, 0xa7, 0x06, 0x6e, 0x1c, 0xe1, 0x07, 0xb0, 0x66, | ||||
| 	0x9a, 0x72, 0xdb, 0xb6, 0x69, 0x44, 0x53, 0x7e, 0xa0, 0xa2, 0x89, 0x78, 0x99, 0xe6, 0xbe, 0x24, | ||||
| 	0x44, 0x69, 0x1e, 0xe0, 0x8f, 0xe0, 0xed, 0x71, 0xbc, 0xd2, 0x8a, 0xab, 0x33, 0xbb, 0x9c, 0x56, | ||||
| 	0x7d, 0x00, 0x6b, 0xde, 0xd9, 0xac, 0x22, 0x9e, 0x78, 0xa2, 0x77, 0x36, 0xad, 0x76, 0x43, 0x7c, | ||||
| 	0xb9, 0xf9, 0xd4, 0x24, 0x21, 0xb5, 0xd4, 0x8b, 0x69, 0x76, 0x4a, 0x80, 0xef, 0x02, 0x32, 0x4d, | ||||
| 	0x83, 0x32, 0x72, 0xe2, 0x50, 0x83, 0xf8, 0x94, 0x91, 0x40, 0xbd, 0x9a, 0x26, 0x57, 0x4d, 0x53, | ||||
| 	0x13, 0xd2, 0x86, 0x10, 0xe2, 0xdb, 0xb0, 0xea, 0x9e, 0x3c, 0x33, 0x65, 0x72, 0x19, 0x9e, 0x4f, | ||||
| 	0xfb, 0xf6, 0x2b, 0xf5, 0xba, 0x08, 0xd3, 0x0a, 0x17, 0x88, 0xd4, 0xea, 0x0a, 0x18, 0xdf, 0x02, | ||||
| 	0x64, 0x06, 0xa7, 0xc4, 0xf7, 0x44, 0x77, 0x0f, 0x3c, 0x62, 0x52, 0xf5, 0x86, 0xa4, 0x4a, 0xfc, | ||||
| 	0x30, 0x86, 0xf1, 0x53, 0x58, 0x1f, 0x31, 0x9b, 0x85, 0xd4, 0xf7, 0x7c, 0xca, 0x87, 0x74, 0xf9, | ||||
| 	0xa6, 0xa9, 0xff, 0x5a, 0x5a, 0x30, 0x66, 0x1f, 0xa7, 0xd9, 0xf2, 0x74, 0xf5, 0xb5, 0xd1, 0x2c, | ||||
| 	0x58, 0xdb, 0x81, 0x4a, 0xfa, 0xd0, 0x71, 0x09, 0xe4, 0xb1, 0x23, 0x85, 0xf7, 0xd0, 0xbd, 0x4e, | ||||
| 	0x93, 0x77, 0xbf, 0xcf, 0x35, 0x94, 0xe1, 0x5d, 0xb8, 0xdd, 0x3a, 0xd2, 0x0c, 0xfd, 0xf8, 0xf0, | ||||
| 	0xa8, 0x75, 0xa0, 0xa1, 0xec, 0xed, 0x52, 0xf1, 0xdf, 0x4b, 0xe8, 0xf5, 0xeb, 0xd7, 0xaf, 0x33, | ||||
| 	0x4f, 0x72, 0xc5, 0xf7, 0xd1, 0xcd, 0xda, 0x5f, 0x33, 0x50, 0x9d, 0x9c, 0x7f, 0xf1, 0x8f, 0xe0, | ||||
| 	0x62, 0xfc, 0xb1, 0x1a, 0xd0, 0xd0, 0x78, 0x69, 0xfb, 0x22, 0x1b, 0x87, 0x44, 0x4e, 0x90, 0x49, | ||||
| 	0x20, 0xd7, 0x23, 0x56, 0x8f, 0x86, 0x3f, 0xb3, 0x7d, 0x9e, 0x6b, 0x43, 0x12, 0xe2, 0x36, 0x5c, | ||||
| 	0x65, 0xae, 0x11, 0x84, 0x84, 0x59, 0xc4, 0xb7, 0x8c, 0xf1, 0x35, 0x81, 0x41, 0x4c, 0x93, 0x06, | ||||
| 	0x81, 0x2b, 0x1b, 0x41, 0x62, 0xe5, 0x1d, 0xe6, 0xf6, 0x22, 0xf2, 0xb8, 0x42, 0x36, 0x22, 0xea, | ||||
| 	0xd4, 0xa1, 0x67, 0x17, 0x1d, 0xfa, 0x65, 0x28, 0x0d, 0x89, 0x67, 0x50, 0x16, 0xfa, 0x67, 0x62, | ||||
| 	0x6a, 0x2b, 0xea, 0xc5, 0x21, 0xf1, 0x34, 0xbe, 0xfe, 0xf6, 0x4e, 0x22, 0x15, 0xcd, 0xda, 0x3f, | ||||
| 	0xb2, 0x50, 0x49, 0x4f, 0x6e, 0x7c, 0x10, 0x36, 0x45, 0x95, 0x56, 0xc4, 0x4b, 0xfc, 0xde, 0xd7, | ||||
| 	0xce, 0x79, 0xf5, 0x3d, 0x5e, 0xbe, 0x77, 0x0a, 0x72, 0x9e, 0xd2, 0xa5, 0x26, 0x6f, 0x9d, 0xfc, | ||||
| 	0xb5, 0xa5, 0x72, 0x4a, 0x2f, 0xea, 0xd1, 0x0a, 0xef, 0x43, 0xe1, 0x59, 0x20, 0x6c, 0x17, 0x84, | ||||
| 	0xed, 0xeb, 0x5f, 0x6f, 0xfb, 0x49, 0x4f, 0x18, 0x2f, 0x3d, 0xe9, 0x19, 0x87, 0x1d, 0xfd, 0xa0, | ||||
| 	0xd1, 0xd6, 0x23, 0x75, 0x7c, 0x09, 0x72, 0x0e, 0xf9, 0xe2, 0x6c, 0xb2, 0xd0, 0x0b, 0xe8, 0xbc, | ||||
| 	0x81, 0xbf, 0x04, 0xb9, 0x97, 0x94, 0x3c, 0x9f, 0x2c, 0xaf, 0x02, 0xfa, 0x16, 0x5f, 0x80, 0xbb, | ||||
| 	0x90, 0x17, 0xf1, 0xc2, 0x00, 0x51, 0xc4, 0xd0, 0x5b, 0xb8, 0x08, 0xb9, 0xbd, 0x8e, 0xce, 0x5f, | ||||
| 	0x02, 0x04, 0x15, 0x89, 0x1a, 0xdd, 0x96, 0xb6, 0xa7, 0xa1, 0x4c, 0xed, 0x01, 0x14, 0x64, 0x10, | ||||
| 	0xf8, 0x0b, 0x92, 0x84, 0x01, 0xbd, 0x15, 0x2d, 0x23, 0x1b, 0x4a, 0x2c, 0x3d, 0x3e, 0xd8, 0xd5, | ||||
| 	0x74, 0x94, 0x49, 0x1f, 0x6f, 0x00, 0x95, 0xf4, 0xd0, 0xf6, 0xdd, 0xe4, 0xd4, 0x5f, 0x14, 0x28, | ||||
| 	0xa7, 0x86, 0x30, 0xde, 0xfe, 0x89, 0xe3, 0xb8, 0x2f, 0x0d, 0xe2, 0xd8, 0x24, 0x88, 0x92, 0x02, | ||||
| 	0x04, 0xd4, 0xe0, 0xc8, 0x79, 0x0f, 0xed, 0x3b, 0x71, 0xfe, 0x0f, 0x0a, 0xa0, 0xe9, 0x01, 0x6e, | ||||
| 	0xca, 0x41, 0xe5, 0x7b, 0x75, 0xf0, 0xf7, 0x0a, 0x54, 0x27, 0xa7, 0xb6, 0x29, 0xf7, 0xae, 0x7d, | ||||
| 	0xaf, 0xee, 0xfd, 0x4e, 0x81, 0xe5, 0x89, 0x59, 0xed, 0xff, 0xca, 0xbb, 0xdf, 0x66, 0x61, 0x6d, | ||||
| 	0x8e, 0x1e, 0x6e, 0x44, 0x43, 0xad, 0x9c, 0xb3, 0x7f, 0x78, 0x9e, 0x67, 0xd5, 0x79, 0xcf, 0xec, | ||||
| 	0x12, 0x3f, 0x8c, 0x66, 0xe0, 0x5b, 0x80, 0x6c, 0x8b, 0xb2, 0xd0, 0xee, 0xdb, 0xd4, 0x8f, 0x3e, | ||||
| 	0xc4, 0xe5, 0xa4, 0xbb, 0x32, 0xc6, 0xe5, 0xb7, 0xf8, 0x0f, 0x00, 0x7b, 0x6e, 0x60, 0x87, 0xf6, | ||||
| 	0x0b, 0x6a, 0xd8, 0x2c, 0xfe, 0x6a, 0xe7, 0x93, 0x6f, 0x4e, 0x47, 0xb1, 0xa4, 0xc5, 0xc2, 0x84, | ||||
| 	0xcd, 0xe8, 0x80, 0x4c, 0xb1, 0x79, 0xed, 0xcb, 0xea, 0x28, 0x96, 0x24, 0xec, 0x6b, 0x50, 0xb1, | ||||
| 	0xdc, 0x11, 0x1f, 0x22, 0x24, 0x8f, 0x97, 0x5a, 0x45, 0x2f, 0x4b, 0x2c, 0xa1, 0x44, 0x53, 0xde, | ||||
| 	0xf8, 0xba, 0xa0, 0xa2, 0x97, 0x25, 0x26, 0x29, 0x37, 0x61, 0x85, 0x0c, 0x06, 0x3e, 0x37, 0x1e, | ||||
| 	0x1b, 0x92, 0xa3, 0x6b, 0x35, 0x81, 0x05, 0x71, 0xe3, 0x09, 0x14, 0xe3, 0x38, 0xf0, 0x6e, 0xc6, | ||||
| 	0x23, 0x61, 0x78, 0xf2, 0xd2, 0x26, 0xb3, 0x55, 0xd2, 0x8b, 0x2c, 0x16, 0x5e, 0x83, 0x8a, 0x1d, | ||||
| 	0x18, 0xe3, 0xdb, 0xc3, 0xcc, 0x66, 0x66, 0xab, 0xa8, 0x97, 0xed, 0x20, 0xb9, 0x2e, 0xaa, 0x7d, | ||||
| 	0x95, 0x81, 0xea, 0xe4, 0xed, 0x27, 0x6e, 0x42, 0xd1, 0x71, 0x4d, 0x22, 0x12, 0x41, 0x5e, 0xbd, | ||||
| 	0x6f, 0xbd, 0xe1, 0xc2, 0xb4, 0xde, 0x8e, 0xf8, 0x7a, 0xa2, 0xb9, 0xf1, 0x37, 0x05, 0x8a, 0x31, | ||||
| 	0x8c, 0x2f, 0x40, 0xce, 0x23, 0xe1, 0xa9, 0x30, 0x97, 0xdf, 0xcd, 0x20, 0x45, 0x17, 0x6b, 0x8e, | ||||
| 	0x07, 0x1e, 0x61, 0x22, 0x05, 0x22, 0x9c, 0xaf, 0xf9, 0xb9, 0x3a, 0x94, 0x58, 0x62, 0x28, 0x76, | ||||
| 	0x87, 0x43, 0xca, 0xc2, 0x20, 0x3e, 0xd7, 0x08, 0xdf, 0x8b, 0x60, 0x7c, 0x07, 0x56, 0x43, 0x9f, | ||||
| 	0xd8, 0xce, 0x04, 0x37, 0x27, 0xb8, 0x28, 0x16, 0x24, 0xe4, 0x1d, 0xb8, 0x14, 0xdb, 0xb5, 0x68, | ||||
| 	0x48, 0xcc, 0x53, 0x6a, 0x8d, 0x95, 0x0a, 0xe2, 0x6a, 0xed, 0x62, 0x44, 0x68, 0x46, 0xf2, 0x58, | ||||
| 	0xb7, 0xf6, 0x77, 0x05, 0x56, 0xe3, 0x31, 0xde, 0x4a, 0x82, 0x75, 0x00, 0x40, 0x18, 0x73, 0xc3, | ||||
| 	0x74, 0xb8, 0x66, 0x53, 0x79, 0x46, 0xaf, 0xde, 0x48, 0x94, 0xf4, 0x94, 0x81, 0x8d, 0x21, 0xc0, | ||||
| 	0x58, 0xb2, 0x30, 0x6c, 0x57, 0xa1, 0x1c, 0x5d, 0x6d, 0x8b, 0xff, 0x8f, 0xc8, 0x6f, 0x3f, 0x90, | ||||
| 	0x10, 0x9f, 0xf7, 0xf1, 0x3a, 0xe4, 0x4f, 0xe8, 0xc0, 0x66, 0xd1, 0x85, 0x9b, 0x5c, 0xc4, 0xd7, | ||||
| 	0x78, 0xb9, 0xe4, 0x1a, 0x6f, 0xf7, 0xe7, 0xb0, 0x66, 0xba, 0xc3, 0x69, 0x77, 0x77, 0xd1, 0xd4, | ||||
| 	0xf7, 0x67, 0xf0, 0xa9, 0xf2, 0x39, 0x8c, 0xa7, 0xb3, 0x3f, 0x2a, 0xca, 0x97, 0x99, 0xec, 0x7e, | ||||
| 	0x77, 0xf7, 0x4f, 0x99, 0x8d, 0x7d, 0xa9, 0xda, 0x8d, 0x77, 0xaa, 0xd3, 0xbe, 0x43, 0x4d, 0xee, | ||||
| 	0xfd, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x05, 0x54, 0xc8, 0x7d, 0x07, 0x1a, 0x00, 0x00, | ||||
| } | ||||
|   | ||||
							
								
								
									
										14
									
								
								vendor/github.com/golang/protobuf/protoc-gen-go/generator/generator.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								vendor/github.com/golang/protobuf/protoc-gen-go/generator/generator.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -626,6 +626,7 @@ func (g *Generator) CommandLineParameters(parameter string) { | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if pluginList != "" { | ||||
| 		// Amend the set of plugins. | ||||
| 		enabled := make(map[string]bool) | ||||
| @@ -1180,6 +1181,7 @@ func (g *Generator) generate(file *FileDescriptor) { | ||||
| 		g.P("const _ = ", g.Pkg["proto"], ".ProtoPackageIsVersion", generatedCodeVersion, " // please upgrade the proto package") | ||||
| 		g.P() | ||||
| 	} | ||||
|  | ||||
| 	for _, td := range g.file.imp { | ||||
| 		g.generateImported(td) | ||||
| 	} | ||||
| @@ -2076,6 +2078,11 @@ func (g *Generator) generateMessage(message *Descriptor) { | ||||
| 			star = "*" | ||||
| 		} | ||||
|  | ||||
| 		// In proto3, only generate getters for message fields and oneof fields. | ||||
| 		if message.proto3() && *field.Type != descriptor.FieldDescriptorProto_TYPE_MESSAGE && !oneof { | ||||
| 			continue | ||||
| 		} | ||||
|  | ||||
| 		// Only export getter symbols for basic types, | ||||
| 		// and for messages and enums in the same package. | ||||
| 		// Groups are not exported. | ||||
| @@ -2134,11 +2141,7 @@ func (g *Generator) generateMessage(message *Descriptor) { | ||||
| 			continue | ||||
| 		} | ||||
| 		if !oneof { | ||||
| 			if message.proto3() { | ||||
| 				g.P("if m != nil {") | ||||
| 			} else { | ||||
| 				g.P("if m != nil && m." + fname + " != nil {") | ||||
| 			} | ||||
| 			g.P("if m != nil && m." + fname + " != nil {") | ||||
| 			g.In() | ||||
| 			g.P("return " + star + "m." + fname) | ||||
| 			g.Out() | ||||
| @@ -2556,7 +2559,6 @@ func (g *Generator) generateExtension(ext *ExtensionDescriptor) { | ||||
| 	g.P("Field: ", field.Number, ",") | ||||
| 	g.P(`Name: "`, extName, `",`) | ||||
| 	g.P("Tag: ", tag, ",") | ||||
| 	g.P(`Filename: "`, g.file.GetName(), `",`) | ||||
|  | ||||
| 	g.Out() | ||||
| 	g.P("}") | ||||
|   | ||||
							
								
								
									
										4
									
								
								vendor/github.com/golang/protobuf/protoc-gen-go/grpc/grpc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/golang/protobuf/protoc-gen-go/grpc/grpc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -48,7 +48,7 @@ import ( | ||||
| // It is incremented whenever an incompatibility between the generated code and | ||||
| // the grpc package is introduced; the generated code references | ||||
| // a constant, grpc.SupportPackageIsVersionN (where N is generatedCodeVersion). | ||||
| const generatedCodeVersion = 4 | ||||
| const generatedCodeVersion = 3 | ||||
|  | ||||
| // Paths for packages used by code generated in this file, | ||||
| // relative to the import_prefix of the generator.Generator. | ||||
| @@ -254,7 +254,7 @@ func (g *grpc) generateService(file *generator.FileDescriptor, service *pb.Servi | ||||
| 		g.P("},") | ||||
| 	} | ||||
| 	g.P("},") | ||||
| 	g.P("Metadata: \"", file.GetName(), "\",") | ||||
| 	g.P("Metadata: ", file.VarName(), ",") | ||||
| 	g.P("}") | ||||
| 	g.P() | ||||
| } | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/golang/protobuf/protoc-gen-go/testdata/Makefile
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/golang/protobuf/protoc-gen-go/testdata/Makefile
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -58,7 +58,7 @@ testbuild:	regenerate | ||||
|  | ||||
| regenerate: | ||||
| 	# Invoke protoc once to generate three independent .pb.go files in the same package. | ||||
| 	protoc --go_out=. multi/multi1.proto multi/multi2.proto multi/multi3.proto | ||||
| 	protoc --go_out=. multi/multi{1,2,3}.proto | ||||
|  | ||||
| #extension_test:	extension_test.$O | ||||
| #	$(LD) -L. -o $@ $< | ||||
|   | ||||
							
								
								
									
										24
									
								
								vendor/github.com/huandu/xstrings/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								vendor/github.com/huandu/xstrings/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| # Compiled Object files, Static and Dynamic libs (Shared Objects) | ||||
| *.o | ||||
| *.a | ||||
| *.so | ||||
|  | ||||
| # Folders | ||||
| _obj | ||||
| _test | ||||
|  | ||||
| # Architecture specific extensions/prefixes | ||||
| *.[568vq] | ||||
| [568vq].out | ||||
|  | ||||
| *.cgo1.go | ||||
| *.cgo2.c | ||||
| _cgo_defun.c | ||||
| _cgo_gotypes.go | ||||
| _cgo_export.* | ||||
|  | ||||
| _testmain.go | ||||
|  | ||||
| *.exe | ||||
| *.test | ||||
| *.prof | ||||
							
								
								
									
										1
									
								
								vendor/github.com/huandu/xstrings/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/huandu/xstrings/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| language: go | ||||
							
								
								
									
										23
									
								
								vendor/github.com/huandu/xstrings/CONTRIBUTING.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								vendor/github.com/huandu/xstrings/CONTRIBUTING.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| # Contributing # | ||||
|  | ||||
| Thanks for your contribution in advance. No matter what you will contribute to this project, pull request or bug report or feature discussion, it's always highly appreciated. | ||||
|  | ||||
| ## New API or feature ## | ||||
|  | ||||
| I want to speak more about how to add new functions to this package. | ||||
|  | ||||
| Package `xstring` is a collection of useful string functions which should be implemented in Go. It's a bit subject to say which function should be included and which should not. I set up following rules in order to make it clear and as objective as possible. | ||||
|  | ||||
| * Rule 1: Only string algorithm, which takes string as input, can be included. | ||||
| * Rule 2: If a function has been implemented in package `string`, it must not be included. | ||||
| * Rule 3: If a function is not language neutral, it must not be included. | ||||
| * Rule 4: If a function is a part of standard library in other languages, it can be included. | ||||
| * Rule 5: If a function is quite useful in some famous framework or library, it can be included. | ||||
|  | ||||
| New function must be discussed in project issues before submitting any code. If a pull request with new functions is sent without any ref issue, it will be rejected. | ||||
|  | ||||
| ## Pull request ## | ||||
|  | ||||
| Pull request is always welcome. Just make sure you have run `go fmt` and all test cases passed before submit. | ||||
|  | ||||
| If the pull request is to add a new API or feature, don't forget to update README.md and add new API in function list. | ||||
							
								
								
									
										22
									
								
								vendor/github.com/huandu/xstrings/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								vendor/github.com/huandu/xstrings/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| The MIT License (MIT) | ||||
|  | ||||
| Copyright (c) 2015 Huan Du | ||||
|  | ||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
| of this software and associated documentation files (the "Software"), to deal | ||||
| in the Software without restriction, including without limitation the rights | ||||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
| copies of the Software, and to permit persons to whom the Software is | ||||
| furnished to do so, subject to the following conditions: | ||||
|  | ||||
| The above copyright notice and this permission notice shall be included in all | ||||
| copies or substantial portions of the Software. | ||||
|  | ||||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||||
| SOFTWARE. | ||||
|  | ||||
							
								
								
									
										114
									
								
								vendor/github.com/huandu/xstrings/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								vendor/github.com/huandu/xstrings/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,114 @@ | ||||
| # xstrings # | ||||
|  | ||||
| [](https://travis-ci.org/huandu/xstrings) | ||||
| [](https://godoc.org/github.com/huandu/xstrings) | ||||
|  | ||||
| Go package [xstrings](https://godoc.org/github.com/huandu/xstrings) is a collection of string functions, which are widely used in other languages but absent in Go package [strings](http://golang.org/pkg/strings). | ||||
|  | ||||
| All functions are well tested and carefully tuned for performance. | ||||
|  | ||||
| ## Propose a new function ## | ||||
|  | ||||
| Please review [contributing guideline](CONTRIBUTING.md) and [create new issue](https://github.com/huandu/xstrings/issues) to state why it should be included. | ||||
|  | ||||
| ## Install ## | ||||
|  | ||||
| Use `go get` to install this library. | ||||
|  | ||||
| 	go get github.com/huandu/xstrings | ||||
|  | ||||
| ## API document ## | ||||
|  | ||||
| See [GoDoc](https://godoc.org/github.com/huandu/xstrings) for full document. | ||||
|  | ||||
| ## Function list ## | ||||
|  | ||||
| Go functions have a unique naming style. One, who has experience in other language but new in Go, may have difficulties to find out right string function to use. | ||||
|  | ||||
| Here is a list of functions in [strings](http://golang.org/pkg/strings) and [xstrings](https://godoc.org/github.com/huandu/xstrings) with enough extra information about how to map these functions to their friends in other languages. Hope this list could be helpful for fresh gophers. | ||||
|  | ||||
| ### Package `xstrings` functions ### | ||||
|  | ||||
| *Keep this table sorted by Function in ascending order.* | ||||
|  | ||||
| | Function | Friends | # | | ||||
| | -------- | ------- | --- | | ||||
| | [Center](https://godoc.org/github.com/huandu/xstrings#Center) | `str.center` in Python; `String#center` in Ruby | [#30](https://github.com/huandu/xstrings/issues/30) | | ||||
| | [Count](https://godoc.org/github.com/huandu/xstrings#Count) | `String#count` in Ruby | [#16](https://github.com/huandu/xstrings/issues/16) | | ||||
| | [Delete](https://godoc.org/github.com/huandu/xstrings#Delete) | `String#delete` in Ruby | [#17](https://github.com/huandu/xstrings/issues/17) | | ||||
| | [ExpandTabs](https://godoc.org/github.com/huandu/xstrings#ExpandTabs) | `str.expandtabs` in Python | [#27](https://github.com/huandu/xstrings/issues/27) | | ||||
| | [FirstRuneToLower](https://godoc.org/github.com/huandu/xstrings#FirstRuneToLower) | `lcfirst` in PHP or Perl | [#15](https://github.com/huandu/xstrings/issues/15) | | ||||
| | [FirstRuneToUpper](https://godoc.org/github.com/huandu/xstrings#FirstRuneToUpper) | `String#capitalize` in Ruby; `ucfirst` in PHP or Perl | [#15](https://github.com/huandu/xstrings/issues/15) | | ||||
| | [Insert](https://godoc.org/github.com/huandu/xstrings#Insert) | `String#insert` in Ruby | [#18](https://github.com/huandu/xstrings/issues/18) | | ||||
| | [LastPartition](https://godoc.org/github.com/huandu/xstrings#LastPartition) | `str.rpartition` in Python; `String#rpartition` in Ruby | [#19](https://github.com/huandu/xstrings/issues/19) | | ||||
| | [LeftJustify](https://godoc.org/github.com/huandu/xstrings#LeftJustify) | `str.ljust` in Python; `String#ljust` in Ruby | [#28](https://github.com/huandu/xstrings/issues/28) | | ||||
| | [Len](https://godoc.org/github.com/huandu/xstrings#Len) | `mb_strlen` in PHP | [#23](https://github.com/huandu/xstrings/issues/23) | | ||||
| | [Partition](https://godoc.org/github.com/huandu/xstrings#Partition) | `str.partition` in Python; `String#partition` in Ruby | [#10](https://github.com/huandu/xstrings/issues/10) | | ||||
| | [Reverse](https://godoc.org/github.com/huandu/xstrings#Reverse) | `String#reverse` in Ruby; `strrev` in PHP; `reverse` in Perl | [#7](https://github.com/huandu/xstrings/issues/7) | | ||||
| | [RightJustify](https://godoc.org/github.com/huandu/xstrings#RightJustify) | `str.rjust` in Python; `String#rjust` in Ruby | [#29](https://github.com/huandu/xstrings/issues/29) | | ||||
| | [RuneWidth](https://godoc.org/github.com/huandu/xstrings#RuneWidth) | - | [#27](https://github.com/huandu/xstrings/issues/27) | | ||||
| | [Scrub](https://godoc.org/github.com/huandu/xstrings#Scrub) | `String#scrub` in Ruby | [#20](https://github.com/huandu/xstrings/issues/20) | | ||||
| | [Shuffle](https://godoc.org/github.com/huandu/xstrings#Shuffle) | `str_shuffle` in PHP | [#13](https://github.com/huandu/xstrings/issues/13) | | ||||
| | [ShuffleSource](https://godoc.org/github.com/huandu/xstrings#ShuffleSource) | `str_shuffle` in PHP | [#13](https://github.com/huandu/xstrings/issues/13) | | ||||
| | [Slice](https://godoc.org/github.com/huandu/xstrings#Slice) | `mb_substr` in PHP | [#9](https://github.com/huandu/xstrings/issues/9) | | ||||
| | [Squeeze](https://godoc.org/github.com/huandu/xstrings#Squeeze) | `String#squeeze` in Ruby | [#11](https://github.com/huandu/xstrings/issues/11) | | ||||
| | [Successor](https://godoc.org/github.com/huandu/xstrings#Successor) | `String#succ` or `String#next` in Ruby | [#22](https://github.com/huandu/xstrings/issues/22) | | ||||
| | [SwapCase](https://godoc.org/github.com/huandu/xstrings#SwapCase) | `str.swapcase` in Python; `String#swapcase` in Ruby | [#12](https://github.com/huandu/xstrings/issues/12) | | ||||
| | [ToCamelCase](https://godoc.org/github.com/huandu/xstrings#ToCamelCase) | `String#camelize` in RoR | [#1](https://github.com/huandu/xstrings/issues/1) | | ||||
| | [ToSnakeCase](https://godoc.org/github.com/huandu/xstrings#ToSnakeCase) | `String#underscore` in RoR | [#1](https://github.com/huandu/xstrings/issues/1) | | ||||
| | [Translate](https://godoc.org/github.com/huandu/xstrings#Translate) | `str.translate` in Python; `String#tr` in Ruby; `strtr` in PHP; `tr///` in Perl | [#21](https://github.com/huandu/xstrings/issues/21) | | ||||
| | [Width](https://godoc.org/github.com/huandu/xstrings#Width) | `mb_strwidth` in PHP | [#26](https://github.com/huandu/xstrings/issues/26) | | ||||
| | [WordCount](https://godoc.org/github.com/huandu/xstrings#WordCount) | `str_word_count` in PHP | [#14](https://github.com/huandu/xstrings/issues/14) | | ||||
| | [WordSplit](https://godoc.org/github.com/huandu/xstrings#WordSplit) | - | [#14](https://github.com/huandu/xstrings/issues/14) | | ||||
|  | ||||
| ### Package `strings` functions ### | ||||
|  | ||||
| *Keep this table sorted by Function in ascending order.* | ||||
|  | ||||
| | Function | Friends | | ||||
| | -------- | ------- | | ||||
| | [Contains](http://golang.org/pkg/strings/#Contains) | `String#include?` in Ruby | | ||||
| | [ContainsAny](http://golang.org/pkg/strings/#ContainsAny) | - | | ||||
| | [ContainsRune](http://golang.org/pkg/strings/#ContainsRune) | - | | ||||
| | [Count](http://golang.org/pkg/strings/#Count) | `str.count` in Python; `substr_count` in PHP | | ||||
| | [EqualFold](http://golang.org/pkg/strings/#EqualFold) | `stricmp` in PHP; `String#casecmp` in Ruby | | ||||
| | [Fields](http://golang.org/pkg/strings/#Fields) | `str.split` in Python; `split` in Perl; `String#split` in Ruby | | ||||
| | [FieldsFunc](http://golang.org/pkg/strings/#FieldsFunc) | - | | ||||
| | [HasPrefix](http://golang.org/pkg/strings/#HasPrefix) | `str.startswith` in Python; `String#start_with?` in Ruby | | ||||
| | [HasSuffix](http://golang.org/pkg/strings/#HasSuffix) | `str.endswith` in Python; `String#end_with?` in Ruby | | ||||
| | [Index](http://golang.org/pkg/strings/#Index) | `str.index` in Python; `String#index` in Ruby; `strpos` in PHP; `index` in Perl | | ||||
| | [IndexAny](http://golang.org/pkg/strings/#IndexAny) | - | | ||||
| | [IndexByte](http://golang.org/pkg/strings/#IndexByte) | - | | ||||
| | [IndexFunc](http://golang.org/pkg/strings/#IndexFunc) | - | | ||||
| | [IndexRune](http://golang.org/pkg/strings/#IndexRune) | - | | ||||
| | [Join](http://golang.org/pkg/strings/#Join) | `str.join` in Python; `Array#join` in Ruby; `implode` in PHP; `join` in Perl | | ||||
| | [LastIndex](http://golang.org/pkg/strings/#LastIndex) | `str.rindex` in Python; `String#rindex`; `strrpos` in PHP; `rindex` in Perl | | ||||
| | [LastIndexAny](http://golang.org/pkg/strings/#LastIndexAny) | - | | ||||
| | [LastIndexFunc](http://golang.org/pkg/strings/#LastIndexFunc) | - | | ||||
| | [Map](http://golang.org/pkg/strings/#Map) | `String#each_codepoint` in Ruby | | ||||
| | [Repeat](http://golang.org/pkg/strings/#Repeat) | operator `*` in Python and Ruby; `str_repeat` in PHP | | ||||
| | [Replace](http://golang.org/pkg/strings/#Replace) | `str.replace` in Python; `String#sub` in Ruby; `str_replace` in PHP | | ||||
| | [Split](http://golang.org/pkg/strings/#Split) | `str.split` in Python; `String#split` in Ruby; `explode` in PHP; `split` in Perl | | ||||
| | [SplitAfter](http://golang.org/pkg/strings/#SplitAfter) | - | | ||||
| | [SplitAfterN](http://golang.org/pkg/strings/#SplitAfterN) | - | | ||||
| | [SplitN](http://golang.org/pkg/strings/#SplitN) | `str.split` in Python; `String#split` in Ruby; `explode` in PHP; `split` in Perl | | ||||
| | [Title](http://golang.org/pkg/strings/#Title) | `str.title` in Python | | ||||
| | [ToLower](http://golang.org/pkg/strings/#ToLower) | `str.lower` in Python; `String#downcase` in Ruby; `strtolower` in PHP; `lc` in Perl | | ||||
| | [ToLowerSpecial](http://golang.org/pkg/strings/#ToLowerSpecial) | - | | ||||
| | [ToTitle](http://golang.org/pkg/strings/#ToTitle) | - | | ||||
| | [ToTitleSpecial](http://golang.org/pkg/strings/#ToTitleSpecial) | - | | ||||
| | [ToUpper](http://golang.org/pkg/strings/#ToUpper) | `str.upper` in Python; `String#upcase` in Ruby; `strtoupper` in PHP; `uc` in Perl | | ||||
| | [ToUpperSpecial](http://golang.org/pkg/strings/#ToUpperSpecial) | - | | ||||
| | [Trim](http://golang.org/pkg/strings/#Trim) | `str.strip` in Python; `String#strip` in Ruby; `trim` in PHP | | ||||
| | [TrimFunc](http://golang.org/pkg/strings/#TrimFunc) | - | | ||||
| | [TrimLeft](http://golang.org/pkg/strings/#TrimLeft) | `str.lstrip` in Python; `String#lstrip` in Ruby; `ltrim` in PHP | | ||||
| | [TrimLeftFunc](http://golang.org/pkg/strings/#TrimLeftFunc) | - | | ||||
| | [TrimPrefix](http://golang.org/pkg/strings/#TrimPrefix) | - | | ||||
| | [TrimRight](http://golang.org/pkg/strings/#TrimRight) | `str.rstrip` in Python; `String#rstrip` in Ruby; `rtrim` in PHP | | ||||
| | [TrimRightFunc](http://golang.org/pkg/strings/#TrimRightFunc) | - | | ||||
| | [TrimSpace](http://golang.org/pkg/strings/#TrimSpace) | `str.strip` in Python; `String#strip` in Ruby; `trim` in PHP | | ||||
| | [TrimSuffix](http://golang.org/pkg/strings/#TrimSuffix) | `String#chomp` in Ruby; `chomp` in Perl | | ||||
|  | ||||
| ## License ## | ||||
|  | ||||
| This library is licensed under MIT license. See LICENSE for details. | ||||
							
								
								
									
										25
									
								
								vendor/github.com/huandu/xstrings/common.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								vendor/github.com/huandu/xstrings/common.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| // Copyright 2015 Huan Du. All rights reserved. | ||||
| // Licensed under the MIT license that can be found in the LICENSE file. | ||||
|  | ||||
| package xstrings | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| ) | ||||
|  | ||||
| const _BUFFER_INIT_GROW_SIZE_MAX = 2048 | ||||
|  | ||||
| // Lazy initialize a buffer. | ||||
| func allocBuffer(orig, cur string) *bytes.Buffer { | ||||
| 	output := &bytes.Buffer{} | ||||
| 	maxSize := len(orig) * 4 | ||||
|  | ||||
| 	// Avoid to reserve too much memory at once. | ||||
| 	if maxSize > _BUFFER_INIT_GROW_SIZE_MAX { | ||||
| 		maxSize = _BUFFER_INIT_GROW_SIZE_MAX | ||||
| 	} | ||||
|  | ||||
| 	output.Grow(maxSize) | ||||
| 	output.WriteString(orig[:len(orig)-len(cur)]) | ||||
| 	return output | ||||
| } | ||||
							
								
								
									
										357
									
								
								vendor/github.com/huandu/xstrings/convert.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										357
									
								
								vendor/github.com/huandu/xstrings/convert.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,357 @@ | ||||
| // Copyright 2015 Huan Du. All rights reserved. | ||||
| // Licensed under the MIT license that can be found in the LICENSE file. | ||||
|  | ||||
| package xstrings | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"math/rand" | ||||
| 	"unicode" | ||||
| 	"unicode/utf8" | ||||
| ) | ||||
|  | ||||
| // ToCamelCase can convert all lower case characters behind underscores | ||||
| // to upper case character. | ||||
| // Underscore character will be removed in result except following cases. | ||||
| //     * More than 1 underscore. | ||||
| //           "a__b" => "A_B" | ||||
| //     * At the beginning of string. | ||||
| //           "_a" => "_A" | ||||
| //     * At the end of string. | ||||
| //           "ab_" => "Ab_" | ||||
| func ToCamelCase(str string) string { | ||||
| 	if len(str) == 0 { | ||||
| 		return "" | ||||
| 	} | ||||
|  | ||||
| 	buf := &bytes.Buffer{} | ||||
| 	var r0, r1 rune | ||||
| 	var size int | ||||
|  | ||||
| 	// leading '_' will appear in output. | ||||
| 	for len(str) > 0 { | ||||
| 		r0, size = utf8.DecodeRuneInString(str) | ||||
| 		str = str[size:] | ||||
|  | ||||
| 		if r0 != '_' { | ||||
| 			break | ||||
| 		} | ||||
|  | ||||
| 		buf.WriteRune(r0) | ||||
| 	} | ||||
|  | ||||
| 	if len(str) == 0 { | ||||
| 		return buf.String() | ||||
| 	} | ||||
|  | ||||
| 	buf.WriteRune(unicode.ToUpper(r0)) | ||||
| 	r0, size = utf8.DecodeRuneInString(str) | ||||
| 	str = str[size:] | ||||
|  | ||||
| 	for len(str) > 0 { | ||||
| 		r1 = r0 | ||||
| 		r0, size = utf8.DecodeRuneInString(str) | ||||
| 		str = str[size:] | ||||
|  | ||||
| 		if r1 == '_' && r0 != '_' { | ||||
| 			r0 = unicode.ToUpper(r0) | ||||
| 		} else { | ||||
| 			buf.WriteRune(r1) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	buf.WriteRune(r0) | ||||
| 	return buf.String() | ||||
| } | ||||
|  | ||||
| // ToSnakeCase can convert all upper case characters in a string to | ||||
| // underscore format. | ||||
| // | ||||
| // Some samples. | ||||
| //     "FirstName"  => "first_name" | ||||
| //     "HTTPServer" => "http_server" | ||||
| //     "NoHTTPS"    => "no_https" | ||||
| //     "GO_PATH"    => "go_path" | ||||
| //     "GO PATH"    => "go_path"      // space is converted to underscore. | ||||
| //     "GO-PATH"    => "go_path"      // hyphen is converted to underscore. | ||||
| func ToSnakeCase(str string) string { | ||||
| 	if len(str) == 0 { | ||||
| 		return "" | ||||
| 	} | ||||
|  | ||||
| 	buf := &bytes.Buffer{} | ||||
| 	var prev, r0, r1 rune | ||||
| 	var size int | ||||
|  | ||||
| 	r0 = '_' | ||||
|  | ||||
| 	for len(str) > 0 { | ||||
| 		prev = r0 | ||||
| 		r0, size = utf8.DecodeRuneInString(str) | ||||
| 		str = str[size:] | ||||
|  | ||||
| 		switch { | ||||
| 		case r0 == utf8.RuneError: | ||||
| 			buf.WriteByte(byte(str[0])) | ||||
|  | ||||
| 		case unicode.IsUpper(r0): | ||||
| 			if prev != '_' { | ||||
| 				buf.WriteRune('_') | ||||
| 			} | ||||
|  | ||||
| 			buf.WriteRune(unicode.ToLower(r0)) | ||||
|  | ||||
| 			if len(str) == 0 { | ||||
| 				break | ||||
| 			} | ||||
|  | ||||
| 			r0, size = utf8.DecodeRuneInString(str) | ||||
| 			str = str[size:] | ||||
|  | ||||
| 			if !unicode.IsUpper(r0) { | ||||
| 				buf.WriteRune(r0) | ||||
| 				break | ||||
| 			} | ||||
|  | ||||
| 			// find next non-upper-case character and insert `_` properly. | ||||
| 			// it's designed to convert `HTTPServer` to `http_server`. | ||||
| 			// if there are more than 2 adjacent upper case characters in a word, | ||||
| 			// treat them as an abbreviation plus a normal word. | ||||
| 			for len(str) > 0 { | ||||
| 				r1 = r0 | ||||
| 				r0, size = utf8.DecodeRuneInString(str) | ||||
| 				str = str[size:] | ||||
|  | ||||
| 				if r0 == utf8.RuneError { | ||||
| 					buf.WriteRune(unicode.ToLower(r1)) | ||||
| 					buf.WriteByte(byte(str[0])) | ||||
| 					break | ||||
| 				} | ||||
|  | ||||
| 				if !unicode.IsUpper(r0) { | ||||
| 					if r0 == '_' || r0 == ' ' || r0 == '-' { | ||||
| 						r0 = '_' | ||||
|  | ||||
| 						buf.WriteRune(unicode.ToLower(r1)) | ||||
| 					} else { | ||||
| 						buf.WriteRune('_') | ||||
| 						buf.WriteRune(unicode.ToLower(r1)) | ||||
| 						buf.WriteRune(r0) | ||||
| 					} | ||||
|  | ||||
| 					break | ||||
| 				} | ||||
|  | ||||
| 				buf.WriteRune(unicode.ToLower(r1)) | ||||
| 			} | ||||
|  | ||||
| 			if len(str) == 0 || r0 == '_' { | ||||
| 				buf.WriteRune(unicode.ToLower(r0)) | ||||
| 				break | ||||
| 			} | ||||
|  | ||||
| 		default: | ||||
| 			if r0 == ' ' || r0 == '-' { | ||||
| 				r0 = '_' | ||||
| 			} | ||||
|  | ||||
| 			buf.WriteRune(r0) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return buf.String() | ||||
| } | ||||
|  | ||||
| // SwapCase will swap characters case from upper to lower or lower to upper. | ||||
| func SwapCase(str string) string { | ||||
| 	var r rune | ||||
| 	var size int | ||||
|  | ||||
| 	buf := &bytes.Buffer{} | ||||
|  | ||||
| 	for len(str) > 0 { | ||||
| 		r, size = utf8.DecodeRuneInString(str) | ||||
|  | ||||
| 		switch { | ||||
| 		case unicode.IsUpper(r): | ||||
| 			buf.WriteRune(unicode.ToLower(r)) | ||||
|  | ||||
| 		case unicode.IsLower(r): | ||||
| 			buf.WriteRune(unicode.ToUpper(r)) | ||||
|  | ||||
| 		default: | ||||
| 			buf.WriteRune(r) | ||||
| 		} | ||||
|  | ||||
| 		str = str[size:] | ||||
| 	} | ||||
|  | ||||
| 	return buf.String() | ||||
| } | ||||
|  | ||||
| // FirstRuneToUpper converts first rune to upper case if necessary. | ||||
| func FirstRuneToUpper(str string) string { | ||||
| 	if str == "" { | ||||
| 		return str | ||||
| 	} | ||||
|  | ||||
| 	r, size := utf8.DecodeRuneInString(str) | ||||
|  | ||||
| 	if !unicode.IsLower(r) { | ||||
| 		return str | ||||
| 	} | ||||
|  | ||||
| 	buf := &bytes.Buffer{} | ||||
| 	buf.WriteRune(unicode.ToUpper(r)) | ||||
| 	buf.WriteString(str[size:]) | ||||
| 	return buf.String() | ||||
| } | ||||
|  | ||||
| // FirstRuneToLower converts first rune to lower case if necessary. | ||||
| func FirstRuneToLower(str string) string { | ||||
| 	if str == "" { | ||||
| 		return str | ||||
| 	} | ||||
|  | ||||
| 	r, size := utf8.DecodeRuneInString(str) | ||||
|  | ||||
| 	if !unicode.IsUpper(r) { | ||||
| 		return str | ||||
| 	} | ||||
|  | ||||
| 	buf := &bytes.Buffer{} | ||||
| 	buf.WriteRune(unicode.ToLower(r)) | ||||
| 	buf.WriteString(str[size:]) | ||||
| 	return buf.String() | ||||
| } | ||||
|  | ||||
| // Shuffle randomizes runes in a string and returns the result. | ||||
| // It uses default random source in `math/rand`. | ||||
| func Shuffle(str string) string { | ||||
| 	if str == "" { | ||||
| 		return str | ||||
| 	} | ||||
|  | ||||
| 	runes := []rune(str) | ||||
| 	index := 0 | ||||
|  | ||||
| 	for i := len(runes) - 1; i > 0; i-- { | ||||
| 		index = rand.Intn(i + 1) | ||||
|  | ||||
| 		if i != index { | ||||
| 			runes[i], runes[index] = runes[index], runes[i] | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return string(runes) | ||||
| } | ||||
|  | ||||
| // ShuffleSource randomizes runes in a string with given random source. | ||||
| func ShuffleSource(str string, src rand.Source) string { | ||||
| 	if str == "" { | ||||
| 		return str | ||||
| 	} | ||||
|  | ||||
| 	runes := []rune(str) | ||||
| 	index := 0 | ||||
| 	r := rand.New(src) | ||||
|  | ||||
| 	for i := len(runes) - 1; i > 0; i-- { | ||||
| 		index = r.Intn(i + 1) | ||||
|  | ||||
| 		if i != index { | ||||
| 			runes[i], runes[index] = runes[index], runes[i] | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return string(runes) | ||||
| } | ||||
|  | ||||
| // Successor returns the successor to string. | ||||
| // | ||||
| // If there is one alphanumeric rune is found in string, increase the rune by 1. | ||||
| // If increment generates a "carry", the rune to the left of it is incremented. | ||||
| // This process repeats until there is no carry, adding an additional rune if necessary. | ||||
| // | ||||
| // If there is no alphanumeric rune, the rightmost rune will be increased by 1 | ||||
| // regardless whether the result is a valid rune or not. | ||||
| // | ||||
| // Only following characters are alphanumeric. | ||||
| //     * a - z | ||||
| //     * A - Z | ||||
| //     * 0 - 9 | ||||
| // | ||||
| // Samples (borrowed from ruby's String#succ document): | ||||
| //     "abcd"      => "abce" | ||||
| //     "THX1138"   => "THX1139" | ||||
| //     "<<koala>>" => "<<koalb>>" | ||||
| //     "1999zzz"   => "2000aaa" | ||||
| //     "ZZZ9999"   => "AAAA0000" | ||||
| //     "***"       => "**+" | ||||
| func Successor(str string) string { | ||||
| 	if str == "" { | ||||
| 		return str | ||||
| 	} | ||||
|  | ||||
| 	var r rune | ||||
| 	var i int | ||||
| 	carry := ' ' | ||||
| 	runes := []rune(str) | ||||
| 	l := len(runes) | ||||
| 	lastAlphanumeric := l | ||||
|  | ||||
| 	for i = l - 1; i >= 0; i-- { | ||||
| 		r = runes[i] | ||||
|  | ||||
| 		if ('a' <= r && r <= 'y') || | ||||
| 			('A' <= r && r <= 'Y') || | ||||
| 			('0' <= r && r <= '8') { | ||||
| 			runes[i]++ | ||||
| 			carry = ' ' | ||||
| 			lastAlphanumeric = i | ||||
| 			break | ||||
| 		} | ||||
|  | ||||
| 		switch r { | ||||
| 		case 'z': | ||||
| 			runes[i] = 'a' | ||||
| 			carry = 'a' | ||||
| 			lastAlphanumeric = i | ||||
|  | ||||
| 		case 'Z': | ||||
| 			runes[i] = 'A' | ||||
| 			carry = 'A' | ||||
| 			lastAlphanumeric = i | ||||
|  | ||||
| 		case '9': | ||||
| 			runes[i] = '0' | ||||
| 			carry = '0' | ||||
| 			lastAlphanumeric = i | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	// Needs to add one character for carry. | ||||
| 	if i < 0 && carry != ' ' { | ||||
| 		buf := &bytes.Buffer{} | ||||
| 		buf.Grow(l + 4) // Reserve enough space for write. | ||||
|  | ||||
| 		if lastAlphanumeric != 0 { | ||||
| 			buf.WriteString(str[:lastAlphanumeric]) | ||||
| 		} | ||||
|  | ||||
| 		buf.WriteRune(carry) | ||||
|  | ||||
| 		for _, r = range runes[lastAlphanumeric:] { | ||||
| 			buf.WriteRune(r) | ||||
| 		} | ||||
|  | ||||
| 		return buf.String() | ||||
| 	} | ||||
|  | ||||
| 	// No alphanumeric character. Simply increase last rune's value. | ||||
| 	if lastAlphanumeric == l { | ||||
| 		runes[l-1]++ | ||||
| 	} | ||||
|  | ||||
| 	return string(runes) | ||||
| } | ||||
							
								
								
									
										163
									
								
								vendor/github.com/huandu/xstrings/convert_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								vendor/github.com/huandu/xstrings/convert_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,163 @@ | ||||
| // Copyright 2015 Huan Du. All rights reserved. | ||||
| // Licensed under the MIT license that can be found in the LICENSE file. | ||||
|  | ||||
| package xstrings | ||||
|  | ||||
| import ( | ||||
| 	"sort" | ||||
| 	"strings" | ||||
| 	"testing" | ||||
| ) | ||||
|  | ||||
| func TestToSnakeCase(t *testing.T) { | ||||
| 	runTestCases(t, ToSnakeCase, _M{ | ||||
| 		"HTTPServer":         "http_server", | ||||
| 		"_camelCase":         "_camel_case", | ||||
| 		"NoHTTPS":            "no_https", | ||||
| 		"Wi_thF":             "wi_th_f", | ||||
| 		"_AnotherTES_TCaseP": "_another_tes_t_case_p", | ||||
| 		"ALL":                "all", | ||||
| 		"_HELLO_WORLD_":      "_hello_world_", | ||||
| 		"HELLO_WORLD":        "hello_world", | ||||
| 		"HELLO____WORLD":     "hello____world", | ||||
| 		"TW":                 "tw", | ||||
| 		"_C":                 "_c", | ||||
|  | ||||
| 		"  sentence case  ":                                    "__sentence_case__", | ||||
| 		" Mixed-hyphen case _and SENTENCE_case and UPPER-case": "_mixed_hyphen_case__and_sentence_case_and_upper_case", | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestToCamelCase(t *testing.T) { | ||||
| 	runTestCases(t, ToCamelCase, _M{ | ||||
| 		"http_server":     "HttpServer", | ||||
| 		"_camel_case":     "_CamelCase", | ||||
| 		"no_https":        "NoHttps", | ||||
| 		"_complex__case_": "_Complex_Case_", | ||||
| 		"all":             "All", | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestSwapCase(t *testing.T) { | ||||
| 	runTestCases(t, SwapCase, _M{ | ||||
| 		"swapCase": "SWAPcASE", | ||||
| 		"Θ~λa云Ξπ":  "θ~ΛA云ξΠ", | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestFirstRuneToUpper(t *testing.T) { | ||||
| 	runTestCases(t, FirstRuneToUpper, _M{ | ||||
| 		"hello, world!": "Hello, world!", | ||||
| 		"Hello, world!": "Hello, world!", | ||||
| 		"你好,世界!":        "你好,世界!", | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestFirstRuneToLower(t *testing.T) { | ||||
| 	runTestCases(t, FirstRuneToLower, _M{ | ||||
| 		"hello, world!": "hello, world!", | ||||
| 		"Hello, world!": "hello, world!", | ||||
| 		"你好,世界!":        "你好,世界!", | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestShuffle(t *testing.T) { | ||||
| 	// It seems there is no reliable way to test shuffled string. | ||||
| 	// Runner just make sure shuffled string has the same runes as origin string. | ||||
| 	runner := func(str string) string { | ||||
| 		s := Shuffle(str) | ||||
| 		slice := sort.StringSlice(strings.Split(s, "")) | ||||
| 		slice.Sort() | ||||
| 		return strings.Join(slice, "") | ||||
| 	} | ||||
|  | ||||
| 	runTestCases(t, runner, _M{ | ||||
| 		"":            "", | ||||
| 		"facgbheidjk": "abcdefghijk", | ||||
| 		"尝试中文":        "中尝文试", | ||||
| 		"zh英文hun排":    "hhnuz排文英", | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| type testShuffleSource int | ||||
|  | ||||
| // A generated random number sequance just for testing. | ||||
| var testShuffleTable = []int64{ | ||||
| 	1874068156324778273, | ||||
| 	3328451335138149956, | ||||
| 	5263531936693774911, | ||||
| 	7955079406183515637, | ||||
| 	2703501726821866378, | ||||
| 	2740103009342231109, | ||||
| 	6941261091797652072, | ||||
| 	1905388747193831650, | ||||
| 	7981306761429961588, | ||||
| 	6426100070888298971, | ||||
| 	4831389563158288344, | ||||
| 	261049867304784443, | ||||
| 	1460320609597786623, | ||||
| 	5600924393587988459, | ||||
| 	8995016276575641803, | ||||
| 	732830328053361739, | ||||
| 	5486140987150761883, | ||||
| 	545291762129038907, | ||||
| 	6382800227808658932, | ||||
| 	2781055864473387780, | ||||
| 	1598098976185383115, | ||||
| 	4990765271833742716, | ||||
| 	5018949295715050020, | ||||
| 	2568779411109623071, | ||||
| 	3902890183311134652, | ||||
| 	4893789450120281907, | ||||
| 	2338498362660772719, | ||||
| 	2601737961087659062, | ||||
| 	7273596521315663110, | ||||
| 	3337066551442961397, | ||||
| 	8121576815539813105, | ||||
| 	2740376916591569721, | ||||
| 	8249030965139585917, | ||||
| 	898860202204764712, | ||||
| 	9010467728050264449, | ||||
| 	685213522303989579, | ||||
| 	2050257992909156333, | ||||
| 	6281838661429879825, | ||||
| 	2227583514184312746, | ||||
| 	2873287401706343734, | ||||
| } | ||||
|  | ||||
| func (src testShuffleSource) Int63() int64 { | ||||
| 	n := testShuffleTable[int(src)%len(testShuffleTable)] | ||||
| 	src++ | ||||
| 	return n | ||||
| } | ||||
|  | ||||
| func (src testShuffleSource) Seed(int64) {} | ||||
|  | ||||
| func TestShuffleSource(t *testing.T) { | ||||
| 	var src testShuffleSource | ||||
| 	runner := func(str string) string { | ||||
| 		return ShuffleSource(str, src) | ||||
| 	} | ||||
|  | ||||
| 	runTestCases(t, runner, _M{ | ||||
| 		"":            "", | ||||
| 		"facgbheidjk": "bakefjgichd", | ||||
| 		"尝试中文怎么样":     "怎试中样尝么文", | ||||
| 		"zh英文hun排":    "hh英nzu文排", | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestSuccessor(t *testing.T) { | ||||
| 	runTestCases(t, Successor, _M{ | ||||
| 		"":          "", | ||||
| 		"abcd":      "abce", | ||||
| 		"THX1138":   "THX1139", | ||||
| 		"<<koala>>": "<<koalb>>", | ||||
| 		"1999zzz":   "2000aaa", | ||||
| 		"ZZZ9999":   "AAAA0000", | ||||
| 		"***":       "**+", | ||||
|  | ||||
| 		"来点中文试试":               "来点中文试诖", | ||||
| 		"中cZ英ZZ文zZ混9zZ9杂99进z位": "中dA英AA文aA混0aA0杂00进a位", | ||||
| 	}) | ||||
| } | ||||
							
								
								
									
										120
									
								
								vendor/github.com/huandu/xstrings/count.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								vendor/github.com/huandu/xstrings/count.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,120 @@ | ||||
| // Copyright 2015 Huan Du. All rights reserved. | ||||
| // Licensed under the MIT license that can be found in the LICENSE file. | ||||
|  | ||||
| package xstrings | ||||
|  | ||||
| import ( | ||||
| 	"unicode" | ||||
| 	"unicode/utf8" | ||||
| ) | ||||
|  | ||||
| // Get str's utf8 rune length. | ||||
| func Len(str string) int { | ||||
| 	return utf8.RuneCountInString(str) | ||||
| } | ||||
|  | ||||
| // Count number of words in a string. | ||||
| // | ||||
| // Word is defined as a locale dependent string containing alphabetic characters, | ||||
| // which may also contain but not start with `'` and `-` characters. | ||||
| func WordCount(str string) int { | ||||
| 	var r rune | ||||
| 	var size, n int | ||||
|  | ||||
| 	inWord := false | ||||
|  | ||||
| 	for len(str) > 0 { | ||||
| 		r, size = utf8.DecodeRuneInString(str) | ||||
|  | ||||
| 		switch { | ||||
| 		case isAlphabet(r): | ||||
| 			if !inWord { | ||||
| 				inWord = true | ||||
| 				n++ | ||||
| 			} | ||||
|  | ||||
| 		case inWord && (r == '\'' || r == '-'): | ||||
| 			// Still in word. | ||||
|  | ||||
| 		default: | ||||
| 			inWord = false | ||||
| 		} | ||||
|  | ||||
| 		str = str[size:] | ||||
| 	} | ||||
|  | ||||
| 	return n | ||||
| } | ||||
|  | ||||
| const minCJKCharacter = '\u3400' | ||||
|  | ||||
| // Checks r is a letter but not CJK character. | ||||
| func isAlphabet(r rune) bool { | ||||
| 	if !unicode.IsLetter(r) { | ||||
| 		return false | ||||
| 	} | ||||
|  | ||||
| 	switch { | ||||
| 	// Quick check for non-CJK character. | ||||
| 	case r < minCJKCharacter: | ||||
| 		return true | ||||
|  | ||||
| 	// Common CJK characters. | ||||
| 	case r >= '\u4E00' && r <= '\u9FCC': | ||||
| 		return false | ||||
|  | ||||
| 	// Rare CJK characters. | ||||
| 	case r >= '\u3400' && r <= '\u4D85': | ||||
| 		return false | ||||
|  | ||||
| 	// Rare and historic CJK characters. | ||||
| 	case r >= '\U00020000' && r <= '\U0002B81D': | ||||
| 		return false | ||||
| 	} | ||||
|  | ||||
| 	return true | ||||
| } | ||||
|  | ||||
| // Width returns string width in monotype font. | ||||
| // Multi-byte characters are usually twice the width of single byte characters. | ||||
| // | ||||
| // Algorithm comes from `mb_strwidth` in PHP. | ||||
| // http://php.net/manual/en/function.mb-strwidth.php | ||||
| func Width(str string) int { | ||||
| 	var r rune | ||||
| 	var size, n int | ||||
|  | ||||
| 	for len(str) > 0 { | ||||
| 		r, size = utf8.DecodeRuneInString(str) | ||||
| 		n += RuneWidth(r) | ||||
| 		str = str[size:] | ||||
| 	} | ||||
|  | ||||
| 	return n | ||||
| } | ||||
|  | ||||
| // RuneWidth returns character width in monotype font. | ||||
| // Multi-byte characters are usually twice the width of single byte characters. | ||||
| // | ||||
| // Algorithm comes from `mb_strwidth` in PHP. | ||||
| // http://php.net/manual/en/function.mb-strwidth.php | ||||
| func RuneWidth(r rune) int { | ||||
| 	switch { | ||||
| 	case r == utf8.RuneError || r < '\x20': | ||||
| 		return 0 | ||||
|  | ||||
| 	case '\x20' <= r && r < '\u2000': | ||||
| 		return 1 | ||||
|  | ||||
| 	case '\u2000' <= r && r < '\uFF61': | ||||
| 		return 2 | ||||
|  | ||||
| 	case '\uFF61' <= r && r < '\uFFA0': | ||||
| 		return 1 | ||||
|  | ||||
| 	case '\uFFA0' <= r: | ||||
| 		return 2 | ||||
| 	} | ||||
|  | ||||
| 	return 0 | ||||
| } | ||||
							
								
								
									
										62
									
								
								vendor/github.com/huandu/xstrings/count_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								vendor/github.com/huandu/xstrings/count_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | ||||
| // Copyright 2015 Huan Du. All rights reserved. | ||||
| // Licensed under the MIT license that can be found in the LICENSE file. | ||||
|  | ||||
| package xstrings | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"testing" | ||||
| ) | ||||
|  | ||||
| func TestLen(t *testing.T) { | ||||
| 	runner := func(str string) string { | ||||
| 		return fmt.Sprint(Len(str)) | ||||
| 	} | ||||
|  | ||||
| 	runTestCases(t, runner, _M{ | ||||
| 		"abcdef":    "6", | ||||
| 		"中文":        "2", | ||||
| 		"中yin文hun排": "9", | ||||
| 		"":          "0", | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestWordCount(t *testing.T) { | ||||
| 	runner := func(str string) string { | ||||
| 		return fmt.Sprint(WordCount(str)) | ||||
| 	} | ||||
|  | ||||
| 	runTestCases(t, runner, _M{ | ||||
| 		"one word: λ":             "3", | ||||
| 		"中文":                      "0", | ||||
| 		"你好,sekai!":               "1", | ||||
| 		"oh, it's super-fancy!!a": "4", | ||||
| 		"":        "0", | ||||
| 		"-":       "0", | ||||
| 		"it's-'s": "1", | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestWidth(t *testing.T) { | ||||
| 	runner := func(str string) string { | ||||
| 		return fmt.Sprint(Width(str)) | ||||
| 	} | ||||
|  | ||||
| 	runTestCases(t, runner, _M{ | ||||
| 		"abcd\t0123\n7890": "12", | ||||
| 		"中zh英eng文混排":       "15", | ||||
| 		"": "0", | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestRuneWidth(t *testing.T) { | ||||
| 	runner := func(str string) string { | ||||
| 		return fmt.Sprint(RuneWidth([]rune(str)[0])) | ||||
| 	} | ||||
|  | ||||
| 	runTestCases(t, runner, _M{ | ||||
| 		"a":    "1", | ||||
| 		"中":    "2", | ||||
| 		"\x11": "0", | ||||
| 	}) | ||||
| } | ||||
							
								
								
									
										8
									
								
								vendor/github.com/huandu/xstrings/doc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								vendor/github.com/huandu/xstrings/doc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| // Copyright 2015 Huan Du. All rights reserved. | ||||
| // Licensed under the MIT license that can be found in the LICENSE file. | ||||
|  | ||||
| // Package `xstrings` is to provide string algorithms which are useful but not included in `strings` package. | ||||
| // See project home page for details. https://github.com/huandu/xstrings | ||||
| // | ||||
| // Package `xstrings` assumes all strings are encoded in utf8. | ||||
| package xstrings | ||||
							
								
								
									
										170
									
								
								vendor/github.com/huandu/xstrings/format.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										170
									
								
								vendor/github.com/huandu/xstrings/format.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,170 @@ | ||||
| // Copyright 2015 Huan Du. All rights reserved. | ||||
| // Licensed under the MIT license that can be found in the LICENSE file. | ||||
|  | ||||
| package xstrings | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"unicode/utf8" | ||||
| ) | ||||
|  | ||||
| // ExpandTabs can expand tabs ('\t') rune in str to one or more spaces dpending on | ||||
| // current column and tabSize. | ||||
| // The column number is reset to zero after each newline ('\n') occurring in the str. | ||||
| // | ||||
| // ExpandTabs uses RuneWidth to decide rune's width. | ||||
| // For example, CJK characters will be treated as two characters. | ||||
| // | ||||
| // If tabSize <= 0, ExpandTabs panics with error. | ||||
| // | ||||
| // Samples: | ||||
| //     ExpandTabs("a\tbc\tdef\tghij\tk", 4) => "a   bc  def ghij    k" | ||||
| //     ExpandTabs("abcdefg\thij\nk\tl", 4)  => "abcdefg hij\nk   l" | ||||
| //     ExpandTabs("z中\t文\tw", 4)           => "z中 文  w" | ||||
| func ExpandTabs(str string, tabSize int) string { | ||||
| 	if tabSize <= 0 { | ||||
| 		panic("tab size must be positive") | ||||
| 	} | ||||
|  | ||||
| 	var r rune | ||||
| 	var i, size, column, expand int | ||||
| 	var output *bytes.Buffer | ||||
|  | ||||
| 	orig := str | ||||
|  | ||||
| 	for len(str) > 0 { | ||||
| 		r, size = utf8.DecodeRuneInString(str) | ||||
|  | ||||
| 		if r == '\t' { | ||||
| 			expand = tabSize - column%tabSize | ||||
|  | ||||
| 			if output == nil { | ||||
| 				output = allocBuffer(orig, str) | ||||
| 			} | ||||
|  | ||||
| 			for i = 0; i < expand; i++ { | ||||
| 				output.WriteByte(byte(' ')) | ||||
| 			} | ||||
|  | ||||
| 			column += expand | ||||
| 		} else { | ||||
| 			if r == '\n' { | ||||
| 				column = 0 | ||||
| 			} else { | ||||
| 				column += RuneWidth(r) | ||||
| 			} | ||||
|  | ||||
| 			if output != nil { | ||||
| 				output.WriteRune(r) | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		str = str[size:] | ||||
| 	} | ||||
|  | ||||
| 	if output == nil { | ||||
| 		return orig | ||||
| 	} | ||||
|  | ||||
| 	return output.String() | ||||
| } | ||||
|  | ||||
| // LeftJustify returns a string with pad string at right side if str's rune length is smaller than length. | ||||
| // If str's rune length is larger than length, str itself will be returned. | ||||
| // | ||||
| // If pad is an empty string, str will be returned. | ||||
| // | ||||
| // Samples: | ||||
| //     LeftJustify("hello", 4, " ")    => "hello" | ||||
| //     LeftJustify("hello", 10, " ")   => "hello     " | ||||
| //     LeftJustify("hello", 10, "123") => "hello12312" | ||||
| func LeftJustify(str string, length int, pad string) string { | ||||
| 	l := Len(str) | ||||
|  | ||||
| 	if l >= length || pad == "" { | ||||
| 		return str | ||||
| 	} | ||||
|  | ||||
| 	remains := length - l | ||||
| 	padLen := Len(pad) | ||||
|  | ||||
| 	output := &bytes.Buffer{} | ||||
| 	output.Grow(len(str) + (remains/padLen+1)*len(pad)) | ||||
| 	output.WriteString(str) | ||||
| 	writePadString(output, pad, padLen, remains) | ||||
| 	return output.String() | ||||
| } | ||||
|  | ||||
| // RightJustify returns a string with pad string at left side if str's rune length is smaller than length. | ||||
| // If str's rune length is larger than length, str itself will be returned. | ||||
| // | ||||
| // If pad is an empty string, str will be returned. | ||||
| // | ||||
| // Samples: | ||||
| //     RightJustify("hello", 4, " ")    => "hello" | ||||
| //     RightJustify("hello", 10, " ")   => "     hello" | ||||
| //     RightJustify("hello", 10, "123") => "12312hello" | ||||
| func RightJustify(str string, length int, pad string) string { | ||||
| 	l := Len(str) | ||||
|  | ||||
| 	if l >= length || pad == "" { | ||||
| 		return str | ||||
| 	} | ||||
|  | ||||
| 	remains := length - l | ||||
| 	padLen := Len(pad) | ||||
|  | ||||
| 	output := &bytes.Buffer{} | ||||
| 	output.Grow(len(str) + (remains/padLen+1)*len(pad)) | ||||
| 	writePadString(output, pad, padLen, remains) | ||||
| 	output.WriteString(str) | ||||
| 	return output.String() | ||||
| } | ||||
|  | ||||
| // Center returns a string with pad string at both side if str's rune length is smaller than length. | ||||
| // If str's rune length is larger than length, str itself will be returned. | ||||
| // | ||||
| // If pad is an empty string, str will be returned. | ||||
| // | ||||
| // Samples: | ||||
| //     Center("hello", 4, " ")    => "hello" | ||||
| //     Center("hello", 10, " ")   => "  hello   " | ||||
| //     Center("hello", 10, "123") => "12hello123" | ||||
| func Center(str string, length int, pad string) string { | ||||
| 	l := Len(str) | ||||
|  | ||||
| 	if l >= length || pad == "" { | ||||
| 		return str | ||||
| 	} | ||||
|  | ||||
| 	remains := length - l | ||||
| 	padLen := Len(pad) | ||||
|  | ||||
| 	output := &bytes.Buffer{} | ||||
| 	output.Grow(len(str) + (remains/padLen+1)*len(pad)) | ||||
| 	writePadString(output, pad, padLen, remains/2) | ||||
| 	output.WriteString(str) | ||||
| 	writePadString(output, pad, padLen, (remains+1)/2) | ||||
| 	return output.String() | ||||
| } | ||||
|  | ||||
| func writePadString(output *bytes.Buffer, pad string, padLen, remains int) { | ||||
| 	var r rune | ||||
| 	var size int | ||||
|  | ||||
| 	repeats := remains / padLen | ||||
|  | ||||
| 	for i := 0; i < repeats; i++ { | ||||
| 		output.WriteString(pad) | ||||
| 	} | ||||
|  | ||||
| 	remains = remains % padLen | ||||
|  | ||||
| 	if remains != 0 { | ||||
| 		for i := 0; i < remains; i++ { | ||||
| 			r, size = utf8.DecodeRuneInString(pad) | ||||
| 			output.WriteRune(r) | ||||
| 			pad = pad[size:] | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										100
									
								
								vendor/github.com/huandu/xstrings/format_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								vendor/github.com/huandu/xstrings/format_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,100 @@ | ||||
| // Copyright 2015 Huan Du. All rights reserved. | ||||
| // Licensed under the MIT license that can be found in the LICENSE file. | ||||
|  | ||||
| package xstrings | ||||
|  | ||||
| import ( | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| 	"testing" | ||||
| ) | ||||
|  | ||||
| func TestExpandTabs(t *testing.T) { | ||||
| 	runner := func(str string) (result string) { | ||||
| 		defer func() { | ||||
| 			if e := recover(); e != nil { | ||||
| 				result = e.(string) | ||||
| 			} | ||||
| 		}() | ||||
|  | ||||
| 		input := strings.Split(str, separator) | ||||
| 		n, _ := strconv.Atoi(input[1]) | ||||
| 		return ExpandTabs(input[0], n) | ||||
| 	} | ||||
|  | ||||
| 	runTestCases(t, runner, _M{ | ||||
| 		sep("a\tbc\tdef\tghij\tk", "4"): "a   bc  def ghij    k", | ||||
| 		sep("abcdefg\thij\nk\tl", "4"):  "abcdefg hij\nk   l", | ||||
| 		sep("z中\t文\tw", "4"):            "z中 文  w", | ||||
| 		sep("abcdef", "4"):              "abcdef", | ||||
|  | ||||
| 		sep("abc\td\tef\tghij\nk\tl", "3"): "abc   d  ef ghij\nk  l", | ||||
| 		sep("abc\td\tef\tghij\nk\tl", "1"): "abc d ef ghij\nk l", | ||||
|  | ||||
| 		sep("abc", "0"):  "tab size must be positive", | ||||
| 		sep("abc", "-1"): "tab size must be positive", | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestLeftJustify(t *testing.T) { | ||||
| 	runner := func(str string) string { | ||||
| 		input := strings.Split(str, separator) | ||||
| 		n, _ := strconv.Atoi(input[1]) | ||||
| 		return LeftJustify(input[0], n, input[2]) | ||||
| 	} | ||||
|  | ||||
| 	runTestCases(t, runner, _M{ | ||||
| 		sep("hello", "4", " "):    "hello", | ||||
| 		sep("hello", "10", " "):   "hello     ", | ||||
| 		sep("hello", "10", "123"): "hello12312", | ||||
|  | ||||
| 		sep("hello中文test", "4", " "):    "hello中文test", | ||||
| 		sep("hello中文test", "12", " "):   "hello中文test ", | ||||
| 		sep("hello中文test", "18", "测试!"): "hello中文test测试!测试!测", | ||||
|  | ||||
| 		sep("hello中文test", "0", "123"): "hello中文test", | ||||
| 		sep("hello中文test", "18", ""):   "hello中文test", | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestRightJustify(t *testing.T) { | ||||
| 	runner := func(str string) string { | ||||
| 		input := strings.Split(str, separator) | ||||
| 		n, _ := strconv.Atoi(input[1]) | ||||
| 		return RightJustify(input[0], n, input[2]) | ||||
| 	} | ||||
|  | ||||
| 	runTestCases(t, runner, _M{ | ||||
| 		sep("hello", "4", " "):    "hello", | ||||
| 		sep("hello", "10", " "):   "     hello", | ||||
| 		sep("hello", "10", "123"): "12312hello", | ||||
|  | ||||
| 		sep("hello中文test", "4", " "):    "hello中文test", | ||||
| 		sep("hello中文test", "12", " "):   " hello中文test", | ||||
| 		sep("hello中文test", "18", "测试!"): "测试!测试!测hello中文test", | ||||
|  | ||||
| 		sep("hello中文test", "0", "123"): "hello中文test", | ||||
| 		sep("hello中文test", "18", ""):   "hello中文test", | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestCenter(t *testing.T) { | ||||
| 	runner := func(str string) string { | ||||
| 		input := strings.Split(str, separator) | ||||
| 		n, _ := strconv.Atoi(input[1]) | ||||
| 		return Center(input[0], n, input[2]) | ||||
| 	} | ||||
|  | ||||
| 	runTestCases(t, runner, _M{ | ||||
| 		sep("hello", "4", " "):    "hello", | ||||
| 		sep("hello", "10", " "):   "  hello   ", | ||||
| 		sep("hello", "10", "123"): "12hello123", | ||||
|  | ||||
| 		sep("hello中文test", "4", " "):    "hello中文test", | ||||
| 		sep("hello中文test", "12", " "):   "hello中文test ", | ||||
| 		sep("hello中文test", "18", "测试!"): "测试!hello中文test测试!测", | ||||
|  | ||||
| 		sep("hello中文test", "0", "123"): "hello中文test", | ||||
| 		sep("hello中文test", "18", ""):   "hello中文test", | ||||
| 	}) | ||||
| } | ||||
							
								
								
									
										217
									
								
								vendor/github.com/huandu/xstrings/manipulate.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										217
									
								
								vendor/github.com/huandu/xstrings/manipulate.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,217 @@ | ||||
| // Copyright 2015 Huan Du. All rights reserved. | ||||
| // Licensed under the MIT license that can be found in the LICENSE file. | ||||
|  | ||||
| package xstrings | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"strings" | ||||
| 	"unicode/utf8" | ||||
| ) | ||||
|  | ||||
| // Reverse a utf8 encoded string. | ||||
| func Reverse(str string) string { | ||||
| 	var size int | ||||
|  | ||||
| 	tail := len(str) | ||||
| 	buf := make([]byte, tail) | ||||
| 	s := buf | ||||
|  | ||||
| 	for len(str) > 0 { | ||||
| 		_, size = utf8.DecodeRuneInString(str) | ||||
| 		tail -= size | ||||
| 		s = append(s[:tail], []byte(str[:size])...) | ||||
| 		str = str[size:] | ||||
| 	} | ||||
|  | ||||
| 	return string(buf) | ||||
| } | ||||
|  | ||||
| // Slice a string by rune. | ||||
| // | ||||
| // Start must satisfy 0 <= start <= rune length. | ||||
| // | ||||
| // End can be positive, zero or negative. | ||||
| // If end >= 0, start and end must satisfy start <= end <= rune length. | ||||
| // If end < 0, it means slice to the end of string. | ||||
| // | ||||
| // Otherwise, Slice will panic as out of range. | ||||
| func Slice(str string, start, end int) string { | ||||
| 	var size, startPos, endPos int | ||||
|  | ||||
| 	origin := str | ||||
|  | ||||
| 	if start < 0 || end > len(str) || (end >= 0 && start > end) { | ||||
| 		panic("out of range") | ||||
| 	} | ||||
|  | ||||
| 	if end >= 0 { | ||||
| 		end -= start | ||||
| 	} | ||||
|  | ||||
| 	for start > 0 && len(str) > 0 { | ||||
| 		_, size = utf8.DecodeRuneInString(str) | ||||
| 		start-- | ||||
| 		startPos += size | ||||
| 		str = str[size:] | ||||
| 	} | ||||
|  | ||||
| 	if end < 0 { | ||||
| 		return origin[startPos:] | ||||
| 	} | ||||
|  | ||||
| 	endPos = startPos | ||||
|  | ||||
| 	for end > 0 && len(str) > 0 { | ||||
| 		_, size = utf8.DecodeRuneInString(str) | ||||
| 		end-- | ||||
| 		endPos += size | ||||
| 		str = str[size:] | ||||
| 	} | ||||
|  | ||||
| 	if len(str) == 0 && (start > 0 || end > 0) { | ||||
| 		panic("out of range") | ||||
| 	} | ||||
|  | ||||
| 	return origin[startPos:endPos] | ||||
| } | ||||
|  | ||||
| // Partition splits a string by sep into three parts. | ||||
| // The return value is a slice of strings with head, match and tail. | ||||
| // | ||||
| // If str contains sep, for example "hello" and "l", Partition returns | ||||
| //     "he", "l", "lo" | ||||
| // | ||||
| // If str doesn't contain sep, for example "hello" and "x", Partition returns | ||||
| //     "hello", "", "" | ||||
| func Partition(str, sep string) (head, match, tail string) { | ||||
| 	index := strings.Index(str, sep) | ||||
|  | ||||
| 	if index == -1 { | ||||
| 		head = str | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	head = str[:index] | ||||
| 	match = str[index : index+len(sep)] | ||||
| 	tail = str[index+len(sep):] | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // LastPartition splits a string by last instance of sep into three parts. | ||||
| // The return value is a slice of strings with head, match and tail. | ||||
| // | ||||
| // If str contains sep, for example "hello" and "l", LastPartition returns | ||||
| //     "hel", "l", "o" | ||||
| // | ||||
| // If str doesn't contain sep, for example "hello" and "x", LastPartition returns | ||||
| //     "", "", "hello" | ||||
| func LastPartition(str, sep string) (head, match, tail string) { | ||||
| 	index := strings.LastIndex(str, sep) | ||||
|  | ||||
| 	if index == -1 { | ||||
| 		tail = str | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	head = str[:index] | ||||
| 	match = str[index : index+len(sep)] | ||||
| 	tail = str[index+len(sep):] | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // Insert src into dst at given rune index. | ||||
| // Index is counted by runes instead of bytes. | ||||
| // | ||||
| // If index is out of range of dst, panic with out of range. | ||||
| func Insert(dst, src string, index int) string { | ||||
| 	return Slice(dst, 0, index) + src + Slice(dst, index, -1) | ||||
| } | ||||
|  | ||||
| // Scrubs invalid utf8 bytes with repl string. | ||||
| // Adjacent invalid bytes are replaced only once. | ||||
| func Scrub(str, repl string) string { | ||||
| 	var buf *bytes.Buffer | ||||
| 	var r rune | ||||
| 	var size, pos int | ||||
| 	var hasError bool | ||||
|  | ||||
| 	origin := str | ||||
|  | ||||
| 	for len(str) > 0 { | ||||
| 		r, size = utf8.DecodeRuneInString(str) | ||||
|  | ||||
| 		if r == utf8.RuneError { | ||||
| 			if !hasError { | ||||
| 				if buf == nil { | ||||
| 					buf = &bytes.Buffer{} | ||||
| 				} | ||||
|  | ||||
| 				buf.WriteString(origin[:pos]) | ||||
| 				hasError = true | ||||
| 			} | ||||
| 		} else if hasError { | ||||
| 			hasError = false | ||||
| 			buf.WriteString(repl) | ||||
|  | ||||
| 			origin = origin[pos:] | ||||
| 			pos = 0 | ||||
| 		} | ||||
|  | ||||
| 		pos += size | ||||
| 		str = str[size:] | ||||
| 	} | ||||
|  | ||||
| 	if buf != nil { | ||||
| 		buf.WriteString(origin) | ||||
| 		return buf.String() | ||||
| 	} | ||||
|  | ||||
| 	// No invalid byte. | ||||
| 	return origin | ||||
| } | ||||
|  | ||||
| // Splits a string into words. Returns a slice of words. | ||||
| // If there is no word in a string, return nil. | ||||
| // | ||||
| // Word is defined as a locale dependent string containing alphabetic characters, | ||||
| // which may also contain but not start with `'` and `-` characters. | ||||
| func WordSplit(str string) []string { | ||||
| 	var word string | ||||
| 	var words []string | ||||
| 	var r rune | ||||
| 	var size, pos int | ||||
|  | ||||
| 	inWord := false | ||||
|  | ||||
| 	for len(str) > 0 { | ||||
| 		r, size = utf8.DecodeRuneInString(str) | ||||
|  | ||||
| 		switch { | ||||
| 		case isAlphabet(r): | ||||
| 			if !inWord { | ||||
| 				inWord = true | ||||
| 				word = str | ||||
| 				pos = 0 | ||||
| 			} | ||||
|  | ||||
| 		case inWord && (r == '\'' || r == '-'): | ||||
| 			// Still in word. | ||||
|  | ||||
| 		default: | ||||
| 			if inWord { | ||||
| 				inWord = false | ||||
| 				words = append(words, word[:pos]) | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		pos += size | ||||
| 		str = str[size:] | ||||
| 	} | ||||
|  | ||||
| 	if inWord { | ||||
| 		words = append(words, word[:pos]) | ||||
| 	} | ||||
|  | ||||
| 	return words | ||||
| } | ||||
							
								
								
									
										142
									
								
								vendor/github.com/huandu/xstrings/manipulate_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								vendor/github.com/huandu/xstrings/manipulate_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,142 @@ | ||||
| // Copyright 2015 Huan Du. All rights reserved. | ||||
| // Licensed under the MIT license that can be found in the LICENSE file. | ||||
|  | ||||
| package xstrings | ||||
|  | ||||
| import ( | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| 	"testing" | ||||
| ) | ||||
|  | ||||
| func TestReverse(t *testing.T) { | ||||
| 	runTestCases(t, Reverse, _M{ | ||||
| 		"reverse string": "gnirts esrever", | ||||
| 		"中文如何?":          "?何如文中", | ||||
| 		"中en文混~排怎样?a":    "a?样怎排~混文ne中", | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestSlice(t *testing.T) { | ||||
| 	runner := func(str string) (result string) { | ||||
| 		defer func() { | ||||
| 			if e := recover(); e != nil { | ||||
| 				result = e.(string) | ||||
| 			} | ||||
| 		}() | ||||
|  | ||||
| 		strs := split(str) | ||||
| 		start, _ := strconv.ParseInt(strs[1], 10, 0) | ||||
| 		end, _ := strconv.ParseInt(strs[2], 10, 0) | ||||
|  | ||||
| 		result = Slice(strs[0], int(start), int(end)) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	runTestCases(t, runner, _M{ | ||||
| 		sep("abcdefghijk", "3", "8"):      "defgh", | ||||
| 		sep("来点中文如何?", "2", "7"):          "中文如何?", | ||||
| 		sep("中en文混~排总是少不了的a", "2", "8"):   "n文混~排总", | ||||
| 		sep("中en文混~排总是少不了的a", "0", "0"):   "", | ||||
| 		sep("中en文混~排总是少不了的a", "14", "14"): "", | ||||
| 		sep("中en文混~排总是少不了的a", "5", "-1"):  "~排总是少不了的a", | ||||
| 		sep("中en文混~排总是少不了的a", "14", "-1"): "", | ||||
|  | ||||
| 		sep("let us slice out of range", "-3", "3"): "out of range", | ||||
| 		sep("超出范围哦", "2", "6"):                      "out of range", | ||||
| 		sep("don't do this", "3", "2"):              "out of range", | ||||
| 		sep("千gan万de不piao要liang", "19", "19"):       "out of range", | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestPartition(t *testing.T) { | ||||
| 	runner := func(str string) string { | ||||
| 		input := strings.Split(str, separator) | ||||
| 		head, match, tail := Partition(input[0], input[1]) | ||||
| 		return sep(head, match, tail) | ||||
| 	} | ||||
|  | ||||
| 	runTestCases(t, runner, _M{ | ||||
| 		sep("hello", "l"):           sep("he", "l", "lo"), | ||||
| 		sep("中文总少不了", "少"):          sep("中文总", "少", "不了"), | ||||
| 		sep("z这个zh英文混排hao不", "h英文"): sep("z这个z", "h英文", "混排hao不"), | ||||
| 		sep("边界tiao件zen能忘", "边界"):   sep("", "边界", "tiao件zen能忘"), | ||||
| 		sep("尾巴ye别忘le", "忘le"):      sep("尾巴ye别", "忘le", ""), | ||||
|  | ||||
| 		sep("hello", "x"):     sep("hello", "", ""), | ||||
| 		sep("不是晩香玉", "晚"):     sep("不是晩香玉", "", ""), // Hint: 晩 is not 晚 :) | ||||
| 		sep("来ge混排ba", "e 混"): sep("来ge混排ba", "", ""), | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestLastPartition(t *testing.T) { | ||||
| 	runner := func(str string) string { | ||||
| 		input := strings.Split(str, separator) | ||||
| 		head, match, tail := LastPartition(input[0], input[1]) | ||||
| 		return sep(head, match, tail) | ||||
| 	} | ||||
|  | ||||
| 	runTestCases(t, runner, _M{ | ||||
| 		sep("hello", "l"):               sep("hel", "l", "o"), | ||||
| 		sep("少量中文总少不了", "少"):            sep("少量中文总", "少", "不了"), | ||||
| 		sep("z这个zh英文ch英文混排hao不", "h英文"): sep("z这个zh英文c", "h英文", "混排hao不"), | ||||
| 		sep("边界tiao件zen能忘边界", "边界"):     sep("边界tiao件zen能忘", "边界", ""), | ||||
| 		sep("尾巴ye别忘le", "尾巴"):           sep("", "尾巴", "ye别忘le"), | ||||
|  | ||||
| 		sep("hello", "x"):     sep("", "", "hello"), | ||||
| 		sep("不是晩香玉", "晚"):     sep("", "", "不是晩香玉"), // Hint: 晩 is not 晚 :) | ||||
| 		sep("来ge混排ba", "e 混"): sep("", "", "来ge混排ba"), | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestInsert(t *testing.T) { | ||||
| 	runner := func(str string) (result string) { | ||||
| 		defer func() { | ||||
| 			if e := recover(); e != nil { | ||||
| 				result = e.(string) | ||||
| 			} | ||||
| 		}() | ||||
|  | ||||
| 		strs := split(str) | ||||
| 		index, _ := strconv.ParseInt(strs[2], 10, 0) | ||||
| 		result = Insert(strs[0], strs[1], int(index)) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	runTestCases(t, runner, _M{ | ||||
| 		sep("abcdefg", "hi", "3"):    "abchidefg", | ||||
| 		sep("少量中文是必须的", "混pai", "4"): "少量中文混pai是必须的", | ||||
| 		sep("zh英文hun排", "~!", "5"):   "zh英文h~!un排", | ||||
| 		sep("插在begining", "我", "0"):  "我插在begining", | ||||
| 		sep("插在ending", "我", "8"):    "插在ending我", | ||||
|  | ||||
| 		sep("超tian出yuan边tu界po", "foo", "-1"): "out of range", | ||||
| 		sep("超tian出yuan边tu界po", "foo", "17"): "out of range", | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestScrub(t *testing.T) { | ||||
| 	runner := func(str string) string { | ||||
| 		strs := split(str) | ||||
| 		return Scrub(strs[0], strs[1]) | ||||
| 	} | ||||
|  | ||||
| 	runTestCases(t, runner, _M{ | ||||
| 		sep("ab\uFFFDcd\xFF\xCEefg\xFF\xFC\xFD\xFAhijk", "*"): "ab*cd*efg*hijk", | ||||
| 		sep("no错误です", "*"):                                    "no错误です", | ||||
| 		sep("", "*"):                                          "", | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestWordSplit(t *testing.T) { | ||||
| 	runner := func(str string) string { | ||||
| 		return sep(WordSplit(str)...) | ||||
| 	} | ||||
|  | ||||
| 	runTestCases(t, runner, _M{ | ||||
| 		"one word":                   sep("one", "word"), | ||||
| 		"一个字:把他给我拿下!":                "", | ||||
| 		"it's a super-fancy one!!!a": sep("it's", "a", "super-fancy", "one", "a"), | ||||
| 		"a -b-c' 'd'e":               sep("a", "b-c'", "d'e"), | ||||
| 	}) | ||||
| } | ||||
							
								
								
									
										545
									
								
								vendor/github.com/huandu/xstrings/translate.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										545
									
								
								vendor/github.com/huandu/xstrings/translate.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,545 @@ | ||||
| // Copyright 2015 Huan Du. All rights reserved. | ||||
| // Licensed under the MIT license that can be found in the LICENSE file. | ||||
|  | ||||
| package xstrings | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"unicode" | ||||
| 	"unicode/utf8" | ||||
| ) | ||||
|  | ||||
| type runeRangeMap struct { | ||||
| 	FromLo rune // Lower bound of range map. | ||||
| 	FromHi rune // An inclusive higher bound of range map. | ||||
| 	ToLo   rune | ||||
| 	ToHi   rune | ||||
| } | ||||
|  | ||||
| type runeDict struct { | ||||
| 	Dict [unicode.MaxASCII + 1]rune | ||||
| } | ||||
|  | ||||
| type runeMap map[rune]rune | ||||
|  | ||||
| // Translator can translate string with pre-compiled from and to patterns. | ||||
| // If a from/to pattern pair needs to be used more than once, it's recommended | ||||
| // to create a Translator and reuse it. | ||||
| type Translator struct { | ||||
| 	quickDict  *runeDict       // A quick dictionary to look up rune by index. Only availabe for latin runes. | ||||
| 	runeMap    runeMap         // Rune map for translation. | ||||
| 	ranges     []*runeRangeMap // Ranges of runes. | ||||
| 	mappedRune rune            // If mappedRune >= 0, all matched runes are translated to the mappedRune. | ||||
| 	reverted   bool            // If to pattern is empty, all matched characters will be deleted. | ||||
| 	hasPattern bool | ||||
| } | ||||
|  | ||||
| // NewTranslator creates new Translator through a from/to pattern pair. | ||||
| func NewTranslator(from, to string) *Translator { | ||||
| 	tr := &Translator{} | ||||
|  | ||||
| 	if from == "" { | ||||
| 		return tr | ||||
| 	} | ||||
|  | ||||
| 	reverted := from[0] == '^' | ||||
| 	deletion := len(to) == 0 | ||||
|  | ||||
| 	if reverted { | ||||
| 		from = from[1:] | ||||
| 	} | ||||
|  | ||||
| 	var fromStart, fromEnd, fromRangeStep rune | ||||
| 	var toStart, toEnd, toRangeStep rune | ||||
| 	var fromRangeSize, toRangeSize rune | ||||
| 	var singleRunes []rune | ||||
|  | ||||
| 	// Update the to rune range. | ||||
| 	updateRange := func() { | ||||
| 		// No more rune to read in the to rune pattern. | ||||
| 		if toEnd == utf8.RuneError { | ||||
| 			return | ||||
| 		} | ||||
|  | ||||
| 		if toRangeStep == 0 { | ||||
| 			to, toStart, toEnd, toRangeStep = nextRuneRange(to, toEnd) | ||||
| 			return | ||||
| 		} | ||||
|  | ||||
| 		// Current range is not empty. Consume 1 rune from start. | ||||
| 		if toStart != toEnd { | ||||
| 			toStart += toRangeStep | ||||
| 			return | ||||
| 		} | ||||
|  | ||||
| 		// No more rune. Repeat the last rune. | ||||
| 		if to == "" { | ||||
| 			toEnd = utf8.RuneError | ||||
| 			return | ||||
| 		} | ||||
|  | ||||
| 		// Both start and end are used. Read two more runes from the to pattern. | ||||
| 		to, toStart, toEnd, toRangeStep = nextRuneRange(to, utf8.RuneError) | ||||
| 	} | ||||
|  | ||||
| 	if deletion { | ||||
| 		toStart = utf8.RuneError | ||||
| 		toEnd = utf8.RuneError | ||||
| 	} else { | ||||
| 		// If from pattern is reverted, only the last rune in the to pattern will be used. | ||||
| 		if reverted { | ||||
| 			var size int | ||||
|  | ||||
| 			for len(to) > 0 { | ||||
| 				toStart, size = utf8.DecodeRuneInString(to) | ||||
| 				to = to[size:] | ||||
| 			} | ||||
|  | ||||
| 			toEnd = utf8.RuneError | ||||
| 		} else { | ||||
| 			to, toStart, toEnd, toRangeStep = nextRuneRange(to, utf8.RuneError) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	fromEnd = utf8.RuneError | ||||
|  | ||||
| 	for len(from) > 0 { | ||||
| 		from, fromStart, fromEnd, fromRangeStep = nextRuneRange(from, fromEnd) | ||||
|  | ||||
| 		// fromStart is a single character. Just map it with a rune in the to pattern. | ||||
| 		if fromRangeStep == 0 { | ||||
| 			singleRunes = tr.addRune(fromStart, toStart, singleRunes) | ||||
| 			updateRange() | ||||
| 			continue | ||||
| 		} | ||||
|  | ||||
| 		for toEnd != utf8.RuneError && fromStart != fromEnd { | ||||
| 			// If mapped rune is a single character instead of a range, simply shift first | ||||
| 			// rune in the range. | ||||
| 			if toRangeStep == 0 { | ||||
| 				singleRunes = tr.addRune(fromStart, toStart, singleRunes) | ||||
| 				updateRange() | ||||
| 				fromStart += fromRangeStep | ||||
| 				continue | ||||
| 			} | ||||
|  | ||||
| 			fromRangeSize = (fromEnd - fromStart) * fromRangeStep | ||||
| 			toRangeSize = (toEnd - toStart) * toRangeStep | ||||
|  | ||||
| 			// Not enough runes in the to pattern. Need to read more. | ||||
| 			if fromRangeSize > toRangeSize { | ||||
| 				fromStart, toStart = tr.addRuneRange(fromStart, fromStart+toRangeSize*fromRangeStep, toStart, toEnd, singleRunes) | ||||
| 				fromStart += fromRangeStep | ||||
| 				updateRange() | ||||
|  | ||||
| 				// Edge case: If fromRangeSize == toRangeSize + 1, the last fromStart value needs be considered | ||||
| 				// as a single rune. | ||||
| 				if fromStart == fromEnd { | ||||
| 					singleRunes = tr.addRune(fromStart, toStart, singleRunes) | ||||
| 					updateRange() | ||||
| 				} | ||||
|  | ||||
| 				continue | ||||
| 			} | ||||
|  | ||||
| 			fromStart, toStart = tr.addRuneRange(fromStart, fromEnd, toStart, toStart+fromRangeSize*toRangeStep, singleRunes) | ||||
| 			updateRange() | ||||
| 			break | ||||
| 		} | ||||
|  | ||||
| 		if fromStart == fromEnd { | ||||
| 			fromEnd = utf8.RuneError | ||||
| 			continue | ||||
| 		} | ||||
|  | ||||
| 		fromStart, toStart = tr.addRuneRange(fromStart, fromEnd, toStart, toStart, singleRunes) | ||||
| 		fromEnd = utf8.RuneError | ||||
| 	} | ||||
|  | ||||
| 	if fromEnd != utf8.RuneError { | ||||
| 		singleRunes = tr.addRune(fromEnd, toStart, singleRunes) | ||||
| 	} | ||||
|  | ||||
| 	tr.reverted = reverted | ||||
| 	tr.mappedRune = -1 | ||||
| 	tr.hasPattern = true | ||||
|  | ||||
| 	// Translate RuneError only if in deletion or reverted mode. | ||||
| 	if deletion || reverted { | ||||
| 		tr.mappedRune = toStart | ||||
| 	} | ||||
|  | ||||
| 	return tr | ||||
| } | ||||
|  | ||||
| func (tr *Translator) addRune(from, to rune, singleRunes []rune) []rune { | ||||
| 	if from <= unicode.MaxASCII { | ||||
| 		if tr.quickDict == nil { | ||||
| 			tr.quickDict = &runeDict{} | ||||
| 		} | ||||
|  | ||||
| 		tr.quickDict.Dict[from] = to | ||||
| 	} else { | ||||
| 		if tr.runeMap == nil { | ||||
| 			tr.runeMap = make(runeMap) | ||||
| 		} | ||||
|  | ||||
| 		tr.runeMap[from] = to | ||||
| 	} | ||||
|  | ||||
| 	singleRunes = append(singleRunes, from) | ||||
| 	return singleRunes | ||||
| } | ||||
|  | ||||
| func (tr *Translator) addRuneRange(fromLo, fromHi, toLo, toHi rune, singleRunes []rune) (rune, rune) { | ||||
| 	var r rune | ||||
| 	var rrm *runeRangeMap | ||||
|  | ||||
| 	if fromLo < fromHi { | ||||
| 		rrm = &runeRangeMap{ | ||||
| 			FromLo: fromLo, | ||||
| 			FromHi: fromHi, | ||||
| 			ToLo:   toLo, | ||||
| 			ToHi:   toHi, | ||||
| 		} | ||||
| 	} else { | ||||
| 		rrm = &runeRangeMap{ | ||||
| 			FromLo: fromHi, | ||||
| 			FromHi: fromLo, | ||||
| 			ToLo:   toHi, | ||||
| 			ToHi:   toLo, | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	// If there is any single rune conflicts with this rune range, clear single rune record. | ||||
| 	for _, r = range singleRunes { | ||||
| 		if rrm.FromLo <= r && r <= rrm.FromHi { | ||||
| 			if r <= unicode.MaxASCII { | ||||
| 				tr.quickDict.Dict[r] = 0 | ||||
| 			} else { | ||||
| 				delete(tr.runeMap, r) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	tr.ranges = append(tr.ranges, rrm) | ||||
| 	return fromHi, toHi | ||||
| } | ||||
|  | ||||
| func nextRuneRange(str string, last rune) (remaining string, start, end rune, rangeStep rune) { | ||||
| 	var r rune | ||||
| 	var size int | ||||
|  | ||||
| 	remaining = str | ||||
| 	escaping := false | ||||
| 	isRange := false | ||||
|  | ||||
| 	for len(remaining) > 0 { | ||||
| 		r, size = utf8.DecodeRuneInString(remaining) | ||||
| 		remaining = remaining[size:] | ||||
|  | ||||
| 		// Parse special characters. | ||||
| 		if !escaping { | ||||
| 			if r == '\\' { | ||||
| 				escaping = true | ||||
| 				continue | ||||
| 			} | ||||
|  | ||||
| 			if r == '-' { | ||||
| 				// Ignore slash at beginning of string. | ||||
| 				if last == utf8.RuneError { | ||||
| 					continue | ||||
| 				} | ||||
|  | ||||
| 				start = last | ||||
| 				isRange = true | ||||
| 				continue | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		escaping = false | ||||
|  | ||||
| 		if last != utf8.RuneError { | ||||
| 			// This is a range which start and end are the same. | ||||
| 			// Considier it as a normal character. | ||||
| 			if isRange && last == r { | ||||
| 				isRange = false | ||||
| 				continue | ||||
| 			} | ||||
|  | ||||
| 			start = last | ||||
| 			end = r | ||||
|  | ||||
| 			if isRange { | ||||
| 				if start < end { | ||||
| 					rangeStep = 1 | ||||
| 				} else { | ||||
| 					rangeStep = -1 | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			return | ||||
| 		} | ||||
|  | ||||
| 		last = r | ||||
| 	} | ||||
|  | ||||
| 	start = last | ||||
| 	end = utf8.RuneError | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // Translate str with a from/to pattern pair. | ||||
| // | ||||
| // See comment in Translate function for usage and samples. | ||||
| func (tr *Translator) Translate(str string) string { | ||||
| 	if !tr.hasPattern || str == "" { | ||||
| 		return str | ||||
| 	} | ||||
|  | ||||
| 	var r rune | ||||
| 	var size int | ||||
| 	var needTr bool | ||||
|  | ||||
| 	orig := str | ||||
|  | ||||
| 	var output *bytes.Buffer | ||||
|  | ||||
| 	for len(str) > 0 { | ||||
| 		r, size = utf8.DecodeRuneInString(str) | ||||
| 		r, needTr = tr.TranslateRune(r) | ||||
|  | ||||
| 		if needTr && output == nil { | ||||
| 			output = allocBuffer(orig, str) | ||||
| 		} | ||||
|  | ||||
| 		if r != utf8.RuneError && output != nil { | ||||
| 			output.WriteRune(r) | ||||
| 		} | ||||
|  | ||||
| 		str = str[size:] | ||||
| 	} | ||||
|  | ||||
| 	// No character is translated. | ||||
| 	if output == nil { | ||||
| 		return orig | ||||
| 	} | ||||
|  | ||||
| 	return output.String() | ||||
| } | ||||
|  | ||||
| // TranslateRune return translated rune and true if r matches the from pattern. | ||||
| // If r doesn't match the pattern, original r is returned and translated is false. | ||||
| func (tr *Translator) TranslateRune(r rune) (result rune, translated bool) { | ||||
| 	switch { | ||||
| 	case tr.quickDict != nil: | ||||
| 		if r <= unicode.MaxASCII { | ||||
| 			result = tr.quickDict.Dict[r] | ||||
|  | ||||
| 			if result != 0 { | ||||
| 				translated = true | ||||
|  | ||||
| 				if tr.mappedRune >= 0 { | ||||
| 					result = tr.mappedRune | ||||
| 				} | ||||
|  | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		fallthrough | ||||
|  | ||||
| 	case tr.runeMap != nil: | ||||
| 		var ok bool | ||||
|  | ||||
| 		if result, ok = tr.runeMap[r]; ok { | ||||
| 			translated = true | ||||
|  | ||||
| 			if tr.mappedRune >= 0 { | ||||
| 				result = tr.mappedRune | ||||
| 			} | ||||
|  | ||||
| 			break | ||||
| 		} | ||||
|  | ||||
| 		fallthrough | ||||
|  | ||||
| 	default: | ||||
| 		var rrm *runeRangeMap | ||||
| 		ranges := tr.ranges | ||||
|  | ||||
| 		for i := len(ranges) - 1; i >= 0; i-- { | ||||
| 			rrm = ranges[i] | ||||
|  | ||||
| 			if rrm.FromLo <= r && r <= rrm.FromHi { | ||||
| 				translated = true | ||||
|  | ||||
| 				if tr.mappedRune >= 0 { | ||||
| 					result = tr.mappedRune | ||||
| 					break | ||||
| 				} | ||||
|  | ||||
| 				if rrm.ToLo < rrm.ToHi { | ||||
| 					result = rrm.ToLo + r - rrm.FromLo | ||||
| 				} else if rrm.ToLo > rrm.ToHi { | ||||
| 					// ToHi can be smaller than ToLo if range is from higher to lower. | ||||
| 					result = rrm.ToLo - r + rrm.FromLo | ||||
| 				} else { | ||||
| 					result = rrm.ToLo | ||||
| 				} | ||||
|  | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if tr.reverted { | ||||
| 		if !translated { | ||||
| 			result = tr.mappedRune | ||||
| 		} | ||||
|  | ||||
| 		translated = !translated | ||||
| 	} | ||||
|  | ||||
| 	if !translated { | ||||
| 		result = r | ||||
| 	} | ||||
|  | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // HasPattern returns true if Translator has one pattern at least. | ||||
| func (tr *Translator) HasPattern() bool { | ||||
| 	return tr.hasPattern | ||||
| } | ||||
|  | ||||
| // Translate str with the characters defined in from replaced by characters defined in to. | ||||
| // | ||||
| // From and to are patterns representing a set of characters. Pattern is defined as following. | ||||
| // | ||||
| //     * Special characters | ||||
| //       * '-' means a range of runes, e.g. | ||||
| //         * "a-z" means all characters from 'a' to 'z' inclusive; | ||||
| //         * "z-a" means all characters from 'z' to 'a' inclusive. | ||||
| //       * '^' as first character means a set of all runes excepted listed, e.g. | ||||
| //         * "^a-z" means all characters except 'a' to 'z' inclusive. | ||||
| //       * '\' escapes special characters. | ||||
| //     * Normal character represents itself, e.g. "abc" is a set including 'a', 'b' and 'c'. | ||||
| // | ||||
| // Translate will try to find a 1:1 mapping from from to to. | ||||
| // If to is smaller than from, last rune in to will be used to map "out of range" characters in from. | ||||
| // | ||||
| // Note that '^' only works in the from pattern. It will be considered as a normal character in the to pattern. | ||||
| // | ||||
| // If the to pattern is an empty string, Translate works exactly the same as Delete. | ||||
| // | ||||
| // Samples: | ||||
| //     Translate("hello", "aeiou", "12345")    => "h2ll4" | ||||
| //     Translate("hello", "a-z", "A-Z")        => "HELLO" | ||||
| //     Translate("hello", "z-a", "a-z")        => "svool" | ||||
| //     Translate("hello", "aeiou", "*")        => "h*ll*" | ||||
| //     Translate("hello", "^l", "*")           => "**ll*" | ||||
| //     Translate("hello ^ world", `\^lo`, "*") => "he*** * w*r*d" | ||||
| func Translate(str, from, to string) string { | ||||
| 	tr := NewTranslator(from, to) | ||||
| 	return tr.Translate(str) | ||||
| } | ||||
|  | ||||
| // Delete runes in str matching the pattern. | ||||
| // Pattern is defined in Translate function. | ||||
| // | ||||
| // Samples: | ||||
| //     Delete("hello", "aeiou") => "hll" | ||||
| //     Delete("hello", "a-k")   => "llo" | ||||
| //     Delete("hello", "^a-k")  => "he" | ||||
| func Delete(str, pattern string) string { | ||||
| 	tr := NewTranslator(pattern, "") | ||||
| 	return tr.Translate(str) | ||||
| } | ||||
|  | ||||
| // Count how many runes in str match the pattern. | ||||
| // Pattern is defined in Translate function. | ||||
| // | ||||
| // Samples: | ||||
| //     Count("hello", "aeiou") => 3 | ||||
| //     Count("hello", "a-k")   => 3 | ||||
| //     Count("hello", "^a-k")  => 2 | ||||
| func Count(str, pattern string) int { | ||||
| 	if pattern == "" || str == "" { | ||||
| 		return 0 | ||||
| 	} | ||||
|  | ||||
| 	var r rune | ||||
| 	var size int | ||||
| 	var matched bool | ||||
|  | ||||
| 	tr := NewTranslator(pattern, "") | ||||
| 	cnt := 0 | ||||
|  | ||||
| 	for len(str) > 0 { | ||||
| 		r, size = utf8.DecodeRuneInString(str) | ||||
| 		str = str[size:] | ||||
|  | ||||
| 		if _, matched = tr.TranslateRune(r); matched { | ||||
| 			cnt++ | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return cnt | ||||
| } | ||||
|  | ||||
| // Squeeze deletes adjacent repeated runes in str. | ||||
| // If pattern is not empty, only runes matching the pattern will be squeezed. | ||||
| // | ||||
| // Samples: | ||||
| //     Squeeze("hello", "")    => "helo" | ||||
| //     Squeeze("hello", "m-z") => "hello" | ||||
| func Squeeze(str, pattern string) string { | ||||
| 	var last, r rune | ||||
| 	var size int | ||||
| 	var skipSqueeze, matched bool | ||||
| 	var tr *Translator | ||||
| 	var output *bytes.Buffer | ||||
|  | ||||
| 	orig := str | ||||
| 	last = -1 | ||||
|  | ||||
| 	if len(pattern) > 0 { | ||||
| 		tr = NewTranslator(pattern, "") | ||||
| 	} | ||||
|  | ||||
| 	for len(str) > 0 { | ||||
| 		r, size = utf8.DecodeRuneInString(str) | ||||
|  | ||||
| 		// Need to squeeze the str. | ||||
| 		if last == r && !skipSqueeze { | ||||
| 			if tr != nil { | ||||
| 				if _, matched = tr.TranslateRune(r); !matched { | ||||
| 					skipSqueeze = true | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			if output == nil { | ||||
| 				output = allocBuffer(orig, str) | ||||
| 			} | ||||
|  | ||||
| 			if skipSqueeze { | ||||
| 				output.WriteRune(r) | ||||
| 			} | ||||
| 		} else { | ||||
| 			if output != nil { | ||||
| 				output.WriteRune(r) | ||||
| 			} | ||||
|  | ||||
| 			last = r | ||||
| 		} | ||||
|  | ||||
| 		str = str[size:] | ||||
| 	} | ||||
|  | ||||
| 	if output == nil { | ||||
| 		return orig | ||||
| 	} | ||||
|  | ||||
| 	return output.String() | ||||
| } | ||||
							
								
								
									
										92
									
								
								vendor/github.com/huandu/xstrings/translate_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								vendor/github.com/huandu/xstrings/translate_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,92 @@ | ||||
| // Copyright 2015 Huan Du. All rights reserved. | ||||
| // Licensed under the MIT license that can be found in the LICENSE file. | ||||
|  | ||||
| package xstrings | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"strings" | ||||
| 	"testing" | ||||
| ) | ||||
|  | ||||
| func TestTranslate(t *testing.T) { | ||||
| 	runner := func(str string) string { | ||||
| 		input := strings.Split(str, separator) | ||||
| 		return Translate(input[0], input[1], input[2]) | ||||
| 	} | ||||
|  | ||||
| 	runTestCases(t, runner, _M{ | ||||
| 		sep("hello", "aeiou", "12345"):    "h2ll4", | ||||
| 		sep("hello", "aeiou", ""):         "hll", | ||||
| 		sep("hello", "a-z", "A-Z"):        "HELLO", | ||||
| 		sep("hello", "z-a", "a-z"):        "svool", | ||||
| 		sep("hello", "aeiou", "*"):        "h*ll*", | ||||
| 		sep("hello", "^l", "*"):           "**ll*", | ||||
| 		sep("hello", "p-z", "*"):          "hello", | ||||
| 		sep("hello ^ world", `\^lo`, "*"): "he*** * w*r*d", | ||||
|  | ||||
| 		sep("中文字符测试", "文中谁敢试?", "123456"):  "21字符测5", | ||||
| 		sep("中文字符测试", "^文中谁敢试?", "123456"): "中文666试", | ||||
| 		sep("中文字符测试", "字-试", "0-9"):        "中90999", | ||||
|  | ||||
| 		sep("h1e2l3l4o, w5o6r7l8d", "a-z,0-9", `A-Z\-a-czk-p`):       "HbEcLzLkO- WlOmRnLoD", | ||||
| 		sep("h1e2l3l4o, w5o6r7l8d", "a-zoh-n", "b-zakt-z"):           "t1f2x3x4k, x5k6s7x8e", | ||||
| 		sep("h1e2l3l4o, w5o6r7l8d", "helloa-zoh-n", "99999b-zakt-z"): "t1f2x3x4k, x5k6s7x8e", | ||||
|  | ||||
| 		sep("hello", "e-", "p"):        "hpllo", | ||||
| 		sep("hello", "-e-", "p"):       "hpllo", | ||||
| 		sep("hello", "----e---", "p"):  "hpllo", | ||||
| 		sep("hello", "^---e----", "p"): "peppp", | ||||
|  | ||||
| 		sep("hel\uFFFDlo", "\uFFFD", "H"):    "helHlo", | ||||
| 		sep("hel\uFFFDlo", "^\uFFFD", "H"):   "HHHHH", | ||||
| 		sep("hel\uFFFDlo", "o-\uFFFDh", "H"): "HelHlH", | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestDelete(t *testing.T) { | ||||
| 	runner := func(str string) string { | ||||
| 		input := strings.Split(str, separator) | ||||
| 		return Delete(input[0], input[1]) | ||||
| 	} | ||||
|  | ||||
| 	runTestCases(t, runner, _M{ | ||||
| 		sep("hello", "aeiou"): "hll", | ||||
| 		sep("hello", "a-k"):   "llo", | ||||
| 		sep("hello", "^a-k"):  "he", | ||||
|  | ||||
| 		sep("中文字符测试", "文中谁敢试?"): "字符测", | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestCount(t *testing.T) { | ||||
| 	runner := func(str string) string { | ||||
| 		input := strings.Split(str, separator) | ||||
| 		return fmt.Sprint(Count(input[0], input[1])) | ||||
| 	} | ||||
|  | ||||
| 	runTestCases(t, runner, _M{ | ||||
| 		sep("hello", "aeiou"): "2", | ||||
| 		sep("hello", "a-k"):   "2", | ||||
| 		sep("hello", "^a-k"):  "3", | ||||
|  | ||||
| 		sep("中文字符测试", "文中谁敢试?"): "3", | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestSqueeze(t *testing.T) { | ||||
| 	runner := func(str string) string { | ||||
| 		input := strings.Split(str, separator) | ||||
| 		return Squeeze(input[0], input[1]) | ||||
| 	} | ||||
|  | ||||
| 	runTestCases(t, runner, _M{ | ||||
| 		sep("hello", ""):     "helo", | ||||
| 		sep("hello", "a-k"):  "hello", | ||||
| 		sep("hello", "^a-k"): "helo", | ||||
| 		sep("hello", "^a-l"): "hello", | ||||
|  | ||||
| 		sep("打打打打个劫!!", ""):  "打个劫!", | ||||
| 		sep("打打打打个劫!!", "打"): "打个劫!!", | ||||
| 	}) | ||||
| } | ||||
							
								
								
									
										33
									
								
								vendor/github.com/huandu/xstrings/util_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								vendor/github.com/huandu/xstrings/util_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | ||||
| // Copyright 2015 Huan Du. All rights reserved. | ||||
| // Licensed under the MIT license that can be found in the LICENSE file. | ||||
|  | ||||
| package xstrings | ||||
|  | ||||
| import ( | ||||
| 	"strings" | ||||
| 	"testing" | ||||
| ) | ||||
|  | ||||
| type _M map[string]string | ||||
|  | ||||
| const ( | ||||
| 	separator = " ¶ " | ||||
| ) | ||||
|  | ||||
| func runTestCases(t *testing.T, converter func(string) string, cases map[string]string) { | ||||
| 	for k, v := range cases { | ||||
| 		s := converter(k) | ||||
|  | ||||
| 		if s != v { | ||||
| 			t.Fatalf("case fails. [case:%v]\nshould => %#v\nactual => %#v", k, v, s) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func sep(strs ...string) string { | ||||
| 	return strings.Join(strs, separator) | ||||
| } | ||||
|  | ||||
| func split(str string) []string { | ||||
| 	return strings.Split(str, separator) | ||||
| } | ||||
		Reference in New Issue
	
	Block a user