diff --git a/go.mod b/go.mod index 6d0755fa..6b141b21 100644 --- a/go.mod +++ b/go.mod @@ -16,3 +16,8 @@ require ( golang.org/x/text v0.9.0 // indirect google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f // indirect ) + +retract ( + // API changed in an incompatible way + v1.4.8 +) \ No newline at end of file diff --git a/proto/all_test.go b/proto/all_test.go index fc4e53d6..29d24ea7 100644 --- a/proto/all_test.go +++ b/proto/all_test.go @@ -1646,97 +1646,6 @@ func TestExtensionMapFieldMarshalDeterministic(t *testing.T) { } } -// Many extensions, because small maps might not iterate differently on each iteration. -var exts = []*ExtensionDesc{ - E_X201, - E_X202, - E_X203, - E_X204, - E_X205, - E_X206, - E_X207, - E_X208, - E_X209, - E_X210, - E_X211, - E_X212, - E_X213, - E_X214, - E_X215, - E_X216, - E_X217, - E_X218, - E_X219, - E_X220, - E_X221, - E_X222, - E_X223, - E_X224, - E_X225, - E_X226, - E_X227, - E_X228, - E_X229, - E_X230, - E_X231, - E_X232, - E_X233, - E_X234, - E_X235, - E_X236, - E_X237, - E_X238, - E_X239, - E_X240, - E_X241, - E_X242, - E_X243, - E_X244, - E_X245, - E_X246, - E_X247, - E_X248, - E_X249, - E_X250, -} - -func TestMessageSetMarshalOrder(t *testing.T) { - m := &MyMessageSet{} - for _, x := range exts { - if err := SetExtension(m, x, &Empty{}); err != nil { - t.Fatalf("SetExtension: %v", err) - } - } - - buf, err := Marshal(m) - if err != nil { - t.Fatalf("Marshal: %v", err) - } - - // Serialize m several times, and check we get the same bytes each time. - for i := 0; i < 10; i++ { - b1, err := Marshal(m) - if err != nil { - t.Fatalf("Marshal: %v", err) - } - if !bytes.Equal(b1, buf) { - t.Errorf("Bytes differ on re-Marshal #%d", i) - } - - m2 := &MyMessageSet{} - if err = Unmarshal(buf, m2); err != nil { - t.Errorf("Unmarshal: %v", err) - } - b2, err := Marshal(m2) - if err != nil { - t.Errorf("re-Marshal: %v", err) - } - if !bytes.Equal(b2, buf) { - t.Errorf("Bytes differ on round-trip #%d", i) - } - } -} - func TestUnmarshalMergesMessages(t *testing.T) { // If a nested message occurs twice in the input, // the fields should be merged when decoding. diff --git a/proto/extensions_test.go b/proto/extensions_test.go index 875f88c5..31698fe4 100644 --- a/proto/extensions_test.go +++ b/proto/extensions_test.go @@ -458,12 +458,6 @@ func TestExtensionsRoundTrip(t *testing.T) { if _, err = proto.GetExtension(msg, pb.E_Ext_More); err != proto.ErrMissingExtension { t.Errorf("got %v, expected ErrMissingExtension", e) } - if _, err := proto.GetExtension(msg, pb.E_X215); err == nil { - t.Error("expected bad extension error, got nil") - } - if err := proto.SetExtension(msg, pb.E_X215, 12); err == nil { - t.Error("expected extension err") - } if err := proto.SetExtension(msg, pb.E_Ext_More, 12); err == nil { t.Error("expected some sort of type mismatch error, got nil") } diff --git a/proto/merge.go b/proto/merge.go index e9992118..8f349b2d 100644 --- a/proto/merge.go +++ b/proto/merge.go @@ -2,7 +2,6 @@ package proto import ( "bytes" - "compress/gzip" "errors" "fmt" "runtime" @@ -24,8 +23,8 @@ import ( // // In contrast to MergedFileDescriptorsWithValidation, // MergedFileDescriptors does not validate import paths -func MergedFileDescriptors(globalFiles *protoregistry.Files, appFiles map[string][]byte) (*descriptorpb.FileDescriptorSet, error) { - return mergedFileDescriptors(globalFiles, appFiles, false) +func MergedFileDescriptors(globalFiles *protoregistry.Files, gogoFiles *protoregistry.Files) (*descriptorpb.FileDescriptorSet, error) { + return mergedFileDescriptors(globalFiles, gogoFiles, false) } // MergedFileDescriptorsWithValidation returns a single FileDescriptorSet containing all the @@ -34,22 +33,22 @@ func MergedFileDescriptors(globalFiles *protoregistry.Files, appFiles map[string // If there are any incorrect import paths that do not match // the fully qualified package name, or if there is a common file descriptor // that differs accross globalFiles and appFiles, an error is returned. -func MergedFileDescriptorsWithValidation(globalFiles *protoregistry.Files, appFiles map[string][]byte) (*descriptorpb.FileDescriptorSet, error) { - return mergedFileDescriptors(globalFiles, appFiles, true) +func MergedFileDescriptorsWithValidation(globalFiles *protoregistry.Files, gogoFiles *protoregistry.Files) (*descriptorpb.FileDescriptorSet, error) { + return mergedFileDescriptors(globalFiles, gogoFiles, true) } // MergedGlobalFileDescriptors calls MergedFileDescriptors // with [protoregistry.GlobalFiles] and all files // registered through [RegisterFile]. func MergedGlobalFileDescriptors() (*descriptorpb.FileDescriptorSet, error) { - return MergedFileDescriptors(protoregistry.GlobalFiles, protoFiles) + return MergedFileDescriptors(protoregistry.GlobalFiles, gogoProtoRegistry) } // MergedGlobalFileDescriptorsWithValidation calls MergedFileDescriptorsWithValidation // with [protoregistry.GlobalFiles] and all files // registered through [RegisterFile]. func MergedGlobalFileDescriptorsWithValidation() (*descriptorpb.FileDescriptorSet, error) { - return MergedFileDescriptorsWithValidation(protoregistry.GlobalFiles, protoFiles) + return MergedFileDescriptorsWithValidation(protoregistry.GlobalFiles, gogoProtoRegistry) } // MergedRegistry returns a *protoregistry.Files that acts as a single registry @@ -177,7 +176,7 @@ LOOP: type descriptorProcessor struct { processWG sync.WaitGroup globalFileCh chan protoreflect.FileDescriptor - appFileCh chan []byte + appFileCh chan protoreflect.FileDescriptor fdWG sync.WaitGroup fdCh chan *descriptorpb.FileDescriptorProto @@ -186,7 +185,7 @@ type descriptorProcessor struct { // process reads from p.globalFileCh and p.appFileCh, processing each file descriptor as appropriate, // and sends the processed file descriptors through p.fdCh for eventual return from mergedFileDescriptors. -// Any errors during processing are sent to ec.ProcessErrCh, +// Any errors during processing are sent to ec.ProcessErrCh, // which collects the errors also for possible return from mergedFileDescriptors. // // If validate is true, extra work is performed to validate import paths @@ -213,45 +212,19 @@ func (p *descriptorProcessor) process(globalFiles *protoregistry.Files, ec *desc } // Now handle all the app files. - - // Reuse a single gzip reader throughout the loop, - // so we don't have to repeatedly allocate new readers. - gzr := new(gzip.Reader) - - // Also reuse a single byte buffer for each gzip read. - buf := new(bytes.Buffer) - - for compressedBz := range p.appFileCh { - if err := gzr.Reset(bytes.NewReader(compressedBz)); err != nil { - // This should only fail if there is an invalid gzip header in compressedBz. - ec.ProcessErrCh <- fmt.Errorf("failed to reset gzip reader: %w", err) - continue - } - - buf.Reset() - if _, err := buf.ReadFrom(gzr); err != nil { - // This should only fail if there was invalidly gzipped content in compressedBz. - ec.ProcessErrCh <- fmt.Errorf("failed to read from gzip reader: %w", err) - continue - } - - fd := &descriptorpb.FileDescriptorProto{} - if err := protov2.Unmarshal(buf.Bytes(), fd); err != nil { - // This should only fail if the gzipped data contained invalid bytes for a FileDescriptorProto. - ec.ProcessErrCh <- err - continue - } - + for gogoFd := range p.appFileCh { + // If the app FD is not in protoregistry, we need to track it. + gogoFdp := protodesc.ToFileDescriptorProto(gogoFd) if validate { - // Ensure the import path on the app file is good. - if err := CheckImportPath(fd.GetName(), fd.GetPackage()); err != nil { + if err := CheckImportPath(gogoFdp.GetName(), gogoFdp.GetPackage()); err != nil { + // Track the import error but don't stop processing. + // It is more helpful to present all the import errors, + // rather than just stopping on the first one. ec.ImportErrCh <- err - // Don't break the loop here, continue to check for a file descriptor diff. } } - // If the app FD is not in protoregistry, we need to track it. - protoregFd, err := globalFiles.FindFileByPath(*fd.Name) + protoregFd, err := globalFiles.FindFileByPath(*gogoFdp.Name) if err != nil { if !errors.Is(err, protoregistry.NotFound) { // Non-nil error, and it wasn't a not found error. @@ -260,15 +233,16 @@ func (p *descriptorProcessor) process(globalFiles *protoregistry.Files, ec *desc } // Otherwise it was a not found error, so add it. // At this point we can't validate. - p.fdCh <- fd + p.fdCh <- gogoFdp continue } if validate { fdp := protodesc.ToFileDescriptorProto(protoregFd) - if !protov2.Equal(fdp, fd) { - diff := cmp.Diff(fdp, fd, protocmp.Transform()) - ec.DiffCh <- fmt.Sprintf("Mismatch in %s:\n%s", *fd.Name, diff) + + if !protov2.Equal(fdp, gogoFdp) { + diff := cmp.Diff(fdp, gogoFdp, protocmp.Transform()) + ec.DiffCh <- fmt.Sprintf("Mismatch in %s:\n%s", *gogoFdp.Name, diff) } } } @@ -295,7 +269,7 @@ func (p *descriptorProcessor) collectFDs() { // If validate is true, do extra work to validate that import paths are properly formed // and that "duplicated" file descriptors across globalFiles and appFiles // are indeed identical, returning an error if either of those conditions are invalidated. -func mergedFileDescriptors(globalFiles *protoregistry.Files, appFiles map[string][]byte, validate bool) (*descriptorpb.FileDescriptorSet, error) { +func mergedFileDescriptors(globalFiles *protoregistry.Files, gogoFiles *protoregistry.Files, validate bool) (*descriptorpb.FileDescriptorSet, error) { // GOMAXPROCS is the number of CPU cores available, by default. // Respect that setting as the number of CPU-bound goroutines, // and for channel sizes. @@ -305,7 +279,7 @@ func mergedFileDescriptors(globalFiles *protoregistry.Files, appFiles map[string p := &descriptorProcessor{ globalFileCh: make(chan protoreflect.FileDescriptor, nProcs), - appFileCh: make(chan []byte, nProcs), + appFileCh: make(chan protoreflect.FileDescriptor, nProcs), fdCh: make(chan *descriptorpb.FileDescriptorProto, nProcs), fds: make([]*descriptorpb.FileDescriptorProto, 0, globalFiles.NumFiles()), @@ -330,10 +304,11 @@ func mergedFileDescriptors(globalFiles *protoregistry.Files, appFiles map[string // Signal that no more global files will be sent. close(p.globalFileCh) - // Same for appFiles: send everything then signal app files are finished. - for _, bz := range appFiles { - p.appFileCh <- bz - } + // Same for gogoFiles: send everything then signal app files are finished. + gogoFiles.RangeFiles(func(fileDescriptor protoreflect.FileDescriptor) bool { + p.appFileCh <- fileDescriptor + return true + }) close(p.appFileCh) // Since we are done sending file descriptors and we have closed those channels, @@ -360,3 +335,52 @@ func mergedFileDescriptors(globalFiles *protoregistry.Files, appFiles map[string File: p.fds, }, nil } + +// HybridResolver is a protodesc.Resolver that uses both protoregistry.GlobalFiles +// and the gogo proto global registry, checking protoregistry.GlobalFiles first and +// then gogo proto global registry. +var HybridResolver Resolver = &hybridResolver{} + +// Resolver is a protodesc.Resolver that can range over all the files in the resolver. +type Resolver interface { + protodesc.Resolver + + // RangeFiles calls f for each file descriptor in the resolver while f returns true. + RangeFiles(f func(fileDescriptor protoreflect.FileDescriptor) bool) +} + +type hybridResolver struct{} + +var _ protodesc.Resolver = &hybridResolver{} + +func (r *hybridResolver) FindFileByPath(path string) (protoreflect.FileDescriptor, error) { + if fd, err := protoregistry.GlobalFiles.FindFileByPath(path); err == nil { + return fd, nil + } + + return gogoProtoRegistry.FindFileByPath(path) +} + +func (r *hybridResolver) FindDescriptorByName(name protoreflect.FullName) (protoreflect.Descriptor, error) { + if desc, err := protoregistry.GlobalFiles.FindDescriptorByName(name); err == nil { + return desc, nil + } + + return gogoProtoRegistry.FindDescriptorByName(name) +} + +func (r *hybridResolver) RangeFiles(f func(fileDescriptor protoreflect.FileDescriptor) bool) { + seen := make(map[protoreflect.FullName]bool, protoregistry.GlobalFiles.NumFiles()) + + protoregistry.GlobalFiles.RangeFiles(func(fd protoreflect.FileDescriptor) bool { + seen[fd.FullName()] = true + return f(fd) + }) + + gogoProtoRegistry.RangeFiles(func(fd protoreflect.FileDescriptor) bool { + if seen[fd.FullName()] { + return true + } + return f(fd) + }) +} diff --git a/proto/message_set_test.go b/proto/message_set_test.go deleted file mode 100644 index 5ae4f8bc..00000000 --- a/proto/message_set_test.go +++ /dev/null @@ -1,88 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2014 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 proto_test - -import ( - "bytes" - "fmt" - "testing" - - "github.com/cosmos/gogoproto/proto" - . "github.com/cosmos/gogoproto/proto/test_proto" -) - -func TestUnmarshalMessageSetWithDuplicate(t *testing.T) { - /* - Message{ - Tag{1, StartGroup}, - Message{ - Tag{2, Varint}, Uvarint(12345), - Tag{3, Bytes}, Bytes("hoo"), - }, - Tag{1, EndGroup}, - Tag{1, StartGroup}, - Message{ - Tag{2, Varint}, Uvarint(12345), - Tag{3, Bytes}, Bytes("hah"), - }, - Tag{1, EndGroup}, - } - */ - var in []byte - fmt.Sscanf("0b10b9601a03686f6f0c0b10b9601a036861680c", "%x", &in) - - /* - Message{ - Tag{1, StartGroup}, - Message{ - Tag{2, Varint}, Uvarint(12345), - Tag{3, Bytes}, Bytes("hoohah"), - }, - Tag{1, EndGroup}, - } - */ - var want []byte - fmt.Sscanf("0b10b9601a06686f6f6861680c", "%x", &want) - - var m MyMessageSet - if err := proto.Unmarshal(in, &m); err != nil { - t.Fatalf("unexpected Unmarshal error: %v", err) - } - got, err := proto.Marshal(&m) - if err != nil { - t.Fatalf("unexpected Marshal error: %v", err) - } - - if !bytes.Equal(got, want) { - t.Errorf("output mismatch:\ngot %x\nwant %x", got, want) - } -} diff --git a/proto/properties.go b/proto/properties.go index fdb6bc49..10cd830e 100644 --- a/proto/properties.go +++ b/proto/properties.go @@ -41,6 +41,8 @@ package proto */ import ( + "bytes" + "compress/gzip" "fmt" "log" "reflect" @@ -48,6 +50,11 @@ import ( "strconv" "strings" "sync" + + protov2 "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protodesc" + "google.golang.org/protobuf/reflect/protoregistry" + "google.golang.org/protobuf/types/descriptorpb" ) // Constants that identify the encoding of a value on the wire. @@ -596,13 +603,62 @@ func MessageType(name string) reflect.Type { // A registry of all linked proto files. var ( - protoFiles = make(map[string][]byte) // file name => fileDescriptor + protoFiles = make(map[string][]byte) // file name => fileDescriptor + gogoProtoRegistry = new(protoregistry.Files) + + // GogoResolver is a Resolver that resolves types generated by gogoproto. + GogoResolver Resolver = gogoProtoRegistry + + // Reuse a single gzip reader throughout the loop, + // so we don't have to repeatedly allocate new readers. + registryGzr = new(gzip.Reader) + + // Also reuse a single byte buffer for each gzip read. + registryBuf = new(bytes.Buffer) ) // RegisterFile is called from generated code and maps from the // full file name of a .proto file to its compressed FileDescriptorProto. func RegisterFile(filename string, fileDescriptor []byte) { protoFiles[filename] = fileDescriptor + + if err := registryGzr.Reset(bytes.NewReader(fileDescriptor)); err != nil { + panic(err) + } + + registryBuf.Reset() + if _, err := registryBuf.ReadFrom(registryGzr); err != nil { + // This should only fail if there was invalidly gzipped content in compressedBz. + panic(err) + } + + fd := &descriptorpb.FileDescriptorProto{} + if err := protov2.Unmarshal(registryBuf.Bytes(), fd); err != nil { + // This should only fail if the gzipped data contained invalid bytes for a FileDescriptorProto. + panic(err) + } + + // Ensure the import path on the app file is good. + if err := CheckImportPath(fd.GetName(), fd.GetPackage()); err != nil { + fmt.Printf("WARNING: proto: %v\n", err) + } + + file, err := protodesc.FileOptions{AllowUnresolvable: true}.New(fd, gogoProtoRegistry) + if err != nil { + panic(err) + } + + // only register files if they are registered the first time + // this isn't ideal, but it's needed to make tests pass and some legacy + // code bases may have this issue, and we don't want to fail them here + if _, err := gogoProtoRegistry.FindFileByPath(file.Path()); err != nil { + err = gogoProtoRegistry.RegisterFile(file) + if err != nil { + panic(err) + } + } else { + fmt.Printf("WARNING: proto: file %q already registered\n", file.Path()) + } } // FileDescriptor returns the compressed FileDescriptorProto for a .proto file. diff --git a/proto/test_proto/test.pb.go b/proto/test_proto/test.pb.go index b07c2374..842301bf 100644 --- a/proto/test_proto/test.pb.go +++ b/proto/test_proto/test.pb.go @@ -261,7 +261,7 @@ func (x *Defaults_Color) UnmarshalJSON(data []byte) error { } func (Defaults_Color) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8ca34d01332f1402, []int{21, 0} + return fileDescriptor_8ca34d01332f1402, []int{20, 0} } type RepeatedEnum_Color int32 @@ -298,7 +298,7 @@ func (x *RepeatedEnum_Color) UnmarshalJSON(data []byte) error { } func (RepeatedEnum_Color) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_8ca34d01332f1402, []int{23, 0} + return fileDescriptor_8ca34d01332f1402, []int{22, 0} } type GoEnum struct { @@ -2211,46 +2211,6 @@ func (m *DefaultsMessage) XXX_DiscardUnknown() { var xxx_messageInfo_DefaultsMessage proto.InternalMessageInfo -type MyMessageSet struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - proto.XXX_InternalExtensions `protobuf_messageset:"1" json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MyMessageSet) Reset() { *m = MyMessageSet{} } -func (m *MyMessageSet) String() string { return proto.CompactTextString(m) } -func (*MyMessageSet) ProtoMessage() {} -func (*MyMessageSet) Descriptor() ([]byte, []int) { - return fileDescriptor_8ca34d01332f1402, []int{17} -} - -var extRange_MyMessageSet = []proto.ExtensionRange{ - {Start: 100, End: 2147483646}, -} - -func (*MyMessageSet) ExtensionRangeArray() []proto.ExtensionRange { - return extRange_MyMessageSet -} - -func (m *MyMessageSet) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MyMessageSet.Unmarshal(m, b) -} -func (m *MyMessageSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MyMessageSet.Marshal(b, m, deterministic) -} -func (m *MyMessageSet) XXX_Merge(src proto.Message) { - xxx_messageInfo_MyMessageSet.Merge(m, src) -} -func (m *MyMessageSet) XXX_Size() int { - return xxx_messageInfo_MyMessageSet.Size(m) -} -func (m *MyMessageSet) XXX_DiscardUnknown() { - xxx_messageInfo_MyMessageSet.DiscardUnknown(m) -} - -var xxx_messageInfo_MyMessageSet proto.InternalMessageInfo - type Empty struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -2261,7 +2221,7 @@ func (m *Empty) Reset() { *m = Empty{} } func (m *Empty) String() string { return proto.CompactTextString(m) } func (*Empty) ProtoMessage() {} func (*Empty) Descriptor() ([]byte, []int) { - return fileDescriptor_8ca34d01332f1402, []int{18} + return fileDescriptor_8ca34d01332f1402, []int{17} } func (m *Empty) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Empty.Unmarshal(m, b) @@ -2292,7 +2252,7 @@ func (m *MessageList) Reset() { *m = MessageList{} } func (m *MessageList) String() string { return proto.CompactTextString(m) } func (*MessageList) ProtoMessage() {} func (*MessageList) Descriptor() ([]byte, []int) { - return fileDescriptor_8ca34d01332f1402, []int{19} + return fileDescriptor_8ca34d01332f1402, []int{18} } func (m *MessageList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageList.Unmarshal(m, b) @@ -2331,7 +2291,7 @@ func (m *MessageList_Message) Reset() { *m = MessageList_Message{} } func (m *MessageList_Message) String() string { return proto.CompactTextString(m) } func (*MessageList_Message) ProtoMessage() {} func (*MessageList_Message) Descriptor() ([]byte, []int) { - return fileDescriptor_8ca34d01332f1402, []int{19, 0} + return fileDescriptor_8ca34d01332f1402, []int{18, 0} } func (m *MessageList_Message) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageList_Message.Unmarshal(m, b) @@ -2377,7 +2337,7 @@ func (m *Strings) Reset() { *m = Strings{} } func (m *Strings) String() string { return proto.CompactTextString(m) } func (*Strings) ProtoMessage() {} func (*Strings) Descriptor() ([]byte, []int) { - return fileDescriptor_8ca34d01332f1402, []int{20} + return fileDescriptor_8ca34d01332f1402, []int{19} } func (m *Strings) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Strings.Unmarshal(m, b) @@ -2445,7 +2405,7 @@ func (m *Defaults) Reset() { *m = Defaults{} } func (m *Defaults) String() string { return proto.CompactTextString(m) } func (*Defaults) ProtoMessage() {} func (*Defaults) Descriptor() ([]byte, []int) { - return fileDescriptor_8ca34d01332f1402, []int{21} + return fileDescriptor_8ca34d01332f1402, []int{20} } func (m *Defaults) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Defaults.Unmarshal(m, b) @@ -2630,7 +2590,7 @@ func (m *SubDefaults) Reset() { *m = SubDefaults{} } func (m *SubDefaults) String() string { return proto.CompactTextString(m) } func (*SubDefaults) ProtoMessage() {} func (*SubDefaults) Descriptor() ([]byte, []int) { - return fileDescriptor_8ca34d01332f1402, []int{22} + return fileDescriptor_8ca34d01332f1402, []int{21} } func (m *SubDefaults) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SubDefaults.Unmarshal(m, b) @@ -2670,7 +2630,7 @@ func (m *RepeatedEnum) Reset() { *m = RepeatedEnum{} } func (m *RepeatedEnum) String() string { return proto.CompactTextString(m) } func (*RepeatedEnum) ProtoMessage() {} func (*RepeatedEnum) Descriptor() ([]byte, []int) { - return fileDescriptor_8ca34d01332f1402, []int{23} + return fileDescriptor_8ca34d01332f1402, []int{22} } func (m *RepeatedEnum) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RepeatedEnum.Unmarshal(m, b) @@ -2714,7 +2674,7 @@ func (m *MoreRepeated) Reset() { *m = MoreRepeated{} } func (m *MoreRepeated) String() string { return proto.CompactTextString(m) } func (*MoreRepeated) ProtoMessage() {} func (*MoreRepeated) Descriptor() ([]byte, []int) { - return fileDescriptor_8ca34d01332f1402, []int{24} + return fileDescriptor_8ca34d01332f1402, []int{23} } func (m *MoreRepeated) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MoreRepeated.Unmarshal(m, b) @@ -2794,7 +2754,7 @@ func (m *GroupOld) Reset() { *m = GroupOld{} } func (m *GroupOld) String() string { return proto.CompactTextString(m) } func (*GroupOld) ProtoMessage() {} func (*GroupOld) Descriptor() ([]byte, []int) { - return fileDescriptor_8ca34d01332f1402, []int{25} + return fileDescriptor_8ca34d01332f1402, []int{24} } func (m *GroupOld) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupOld.Unmarshal(m, b) @@ -2832,7 +2792,7 @@ func (m *GroupOld_G) Reset() { *m = GroupOld_G{} } func (m *GroupOld_G) String() string { return proto.CompactTextString(m) } func (*GroupOld_G) ProtoMessage() {} func (*GroupOld_G) Descriptor() ([]byte, []int) { - return fileDescriptor_8ca34d01332f1402, []int{25, 0} + return fileDescriptor_8ca34d01332f1402, []int{24, 0} } func (m *GroupOld_G) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupOld_G.Unmarshal(m, b) @@ -2870,7 +2830,7 @@ func (m *GroupNew) Reset() { *m = GroupNew{} } func (m *GroupNew) String() string { return proto.CompactTextString(m) } func (*GroupNew) ProtoMessage() {} func (*GroupNew) Descriptor() ([]byte, []int) { - return fileDescriptor_8ca34d01332f1402, []int{26} + return fileDescriptor_8ca34d01332f1402, []int{25} } func (m *GroupNew) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupNew.Unmarshal(m, b) @@ -2909,7 +2869,7 @@ func (m *GroupNew_G) Reset() { *m = GroupNew_G{} } func (m *GroupNew_G) String() string { return proto.CompactTextString(m) } func (*GroupNew_G) ProtoMessage() {} func (*GroupNew_G) Descriptor() ([]byte, []int) { - return fileDescriptor_8ca34d01332f1402, []int{26, 0} + return fileDescriptor_8ca34d01332f1402, []int{25, 0} } func (m *GroupNew_G) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupNew_G.Unmarshal(m, b) @@ -2955,7 +2915,7 @@ func (m *FloatingPoint) Reset() { *m = FloatingPoint{} } func (m *FloatingPoint) String() string { return proto.CompactTextString(m) } func (*FloatingPoint) ProtoMessage() {} func (*FloatingPoint) Descriptor() ([]byte, []int) { - return fileDescriptor_8ca34d01332f1402, []int{27} + return fileDescriptor_8ca34d01332f1402, []int{26} } func (m *FloatingPoint) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FloatingPoint.Unmarshal(m, b) @@ -3003,7 +2963,7 @@ func (m *MessageWithMap) Reset() { *m = MessageWithMap{} } func (m *MessageWithMap) String() string { return proto.CompactTextString(m) } func (*MessageWithMap) ProtoMessage() {} func (*MessageWithMap) Descriptor() ([]byte, []int) { - return fileDescriptor_8ca34d01332f1402, []int{28} + return fileDescriptor_8ca34d01332f1402, []int{27} } func (m *MessageWithMap) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithMap.Unmarshal(m, b) @@ -3085,7 +3045,7 @@ func (m *Oneof) Reset() { *m = Oneof{} } func (m *Oneof) String() string { return proto.CompactTextString(m) } func (*Oneof) ProtoMessage() {} func (*Oneof) Descriptor() ([]byte, []int) { - return fileDescriptor_8ca34d01332f1402, []int{29} + return fileDescriptor_8ca34d01332f1402, []int{28} } func (m *Oneof) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Oneof.Unmarshal(m, b) @@ -3360,7 +3320,7 @@ func (m *Oneof_F_Group) Reset() { *m = Oneof_F_Group{} } func (m *Oneof_F_Group) String() string { return proto.CompactTextString(m) } func (*Oneof_F_Group) ProtoMessage() {} func (*Oneof_F_Group) Descriptor() ([]byte, []int) { - return fileDescriptor_8ca34d01332f1402, []int{29, 0} + return fileDescriptor_8ca34d01332f1402, []int{28, 0} } func (m *Oneof_F_Group) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Oneof_F_Group.Unmarshal(m, b) @@ -3409,7 +3369,7 @@ func (m *Communique) Reset() { *m = Communique{} } func (m *Communique) String() string { return proto.CompactTextString(m) } func (*Communique) ProtoMessage() {} func (*Communique) Descriptor() ([]byte, []int) { - return fileDescriptor_8ca34d01332f1402, []int{30} + return fileDescriptor_8ca34d01332f1402, []int{29} } func (m *Communique) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Communique.Unmarshal(m, b) @@ -3545,7 +3505,7 @@ func (m *TestUTF8) Reset() { *m = TestUTF8{} } func (m *TestUTF8) String() string { return proto.CompactTextString(m) } func (*TestUTF8) ProtoMessage() {} func (*TestUTF8) Descriptor() ([]byte, []int) { - return fileDescriptor_8ca34d01332f1402, []int{31} + return fileDescriptor_8ca34d01332f1402, []int{30} } func (m *TestUTF8) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TestUTF8.Unmarshal(m, b) @@ -3939,456 +3899,6 @@ var E_DefaultEnum = &proto.ExtensionDesc{ Filename: "test_proto/test.proto", } -var E_X201 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 201, - Name: "test_proto.x201", - Tag: "bytes,201,opt,name=x201", - Filename: "test_proto/test.proto", -} - -var E_X202 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 202, - Name: "test_proto.x202", - Tag: "bytes,202,opt,name=x202", - Filename: "test_proto/test.proto", -} - -var E_X203 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 203, - Name: "test_proto.x203", - Tag: "bytes,203,opt,name=x203", - Filename: "test_proto/test.proto", -} - -var E_X204 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 204, - Name: "test_proto.x204", - Tag: "bytes,204,opt,name=x204", - Filename: "test_proto/test.proto", -} - -var E_X205 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 205, - Name: "test_proto.x205", - Tag: "bytes,205,opt,name=x205", - Filename: "test_proto/test.proto", -} - -var E_X206 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 206, - Name: "test_proto.x206", - Tag: "bytes,206,opt,name=x206", - Filename: "test_proto/test.proto", -} - -var E_X207 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 207, - Name: "test_proto.x207", - Tag: "bytes,207,opt,name=x207", - Filename: "test_proto/test.proto", -} - -var E_X208 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 208, - Name: "test_proto.x208", - Tag: "bytes,208,opt,name=x208", - Filename: "test_proto/test.proto", -} - -var E_X209 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 209, - Name: "test_proto.x209", - Tag: "bytes,209,opt,name=x209", - Filename: "test_proto/test.proto", -} - -var E_X210 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 210, - Name: "test_proto.x210", - Tag: "bytes,210,opt,name=x210", - Filename: "test_proto/test.proto", -} - -var E_X211 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 211, - Name: "test_proto.x211", - Tag: "bytes,211,opt,name=x211", - Filename: "test_proto/test.proto", -} - -var E_X212 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 212, - Name: "test_proto.x212", - Tag: "bytes,212,opt,name=x212", - Filename: "test_proto/test.proto", -} - -var E_X213 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 213, - Name: "test_proto.x213", - Tag: "bytes,213,opt,name=x213", - Filename: "test_proto/test.proto", -} - -var E_X214 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 214, - Name: "test_proto.x214", - Tag: "bytes,214,opt,name=x214", - Filename: "test_proto/test.proto", -} - -var E_X215 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 215, - Name: "test_proto.x215", - Tag: "bytes,215,opt,name=x215", - Filename: "test_proto/test.proto", -} - -var E_X216 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 216, - Name: "test_proto.x216", - Tag: "bytes,216,opt,name=x216", - Filename: "test_proto/test.proto", -} - -var E_X217 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 217, - Name: "test_proto.x217", - Tag: "bytes,217,opt,name=x217", - Filename: "test_proto/test.proto", -} - -var E_X218 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 218, - Name: "test_proto.x218", - Tag: "bytes,218,opt,name=x218", - Filename: "test_proto/test.proto", -} - -var E_X219 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 219, - Name: "test_proto.x219", - Tag: "bytes,219,opt,name=x219", - Filename: "test_proto/test.proto", -} - -var E_X220 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 220, - Name: "test_proto.x220", - Tag: "bytes,220,opt,name=x220", - Filename: "test_proto/test.proto", -} - -var E_X221 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 221, - Name: "test_proto.x221", - Tag: "bytes,221,opt,name=x221", - Filename: "test_proto/test.proto", -} - -var E_X222 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 222, - Name: "test_proto.x222", - Tag: "bytes,222,opt,name=x222", - Filename: "test_proto/test.proto", -} - -var E_X223 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 223, - Name: "test_proto.x223", - Tag: "bytes,223,opt,name=x223", - Filename: "test_proto/test.proto", -} - -var E_X224 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 224, - Name: "test_proto.x224", - Tag: "bytes,224,opt,name=x224", - Filename: "test_proto/test.proto", -} - -var E_X225 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 225, - Name: "test_proto.x225", - Tag: "bytes,225,opt,name=x225", - Filename: "test_proto/test.proto", -} - -var E_X226 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 226, - Name: "test_proto.x226", - Tag: "bytes,226,opt,name=x226", - Filename: "test_proto/test.proto", -} - -var E_X227 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 227, - Name: "test_proto.x227", - Tag: "bytes,227,opt,name=x227", - Filename: "test_proto/test.proto", -} - -var E_X228 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 228, - Name: "test_proto.x228", - Tag: "bytes,228,opt,name=x228", - Filename: "test_proto/test.proto", -} - -var E_X229 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 229, - Name: "test_proto.x229", - Tag: "bytes,229,opt,name=x229", - Filename: "test_proto/test.proto", -} - -var E_X230 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 230, - Name: "test_proto.x230", - Tag: "bytes,230,opt,name=x230", - Filename: "test_proto/test.proto", -} - -var E_X231 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 231, - Name: "test_proto.x231", - Tag: "bytes,231,opt,name=x231", - Filename: "test_proto/test.proto", -} - -var E_X232 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 232, - Name: "test_proto.x232", - Tag: "bytes,232,opt,name=x232", - Filename: "test_proto/test.proto", -} - -var E_X233 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 233, - Name: "test_proto.x233", - Tag: "bytes,233,opt,name=x233", - Filename: "test_proto/test.proto", -} - -var E_X234 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 234, - Name: "test_proto.x234", - Tag: "bytes,234,opt,name=x234", - Filename: "test_proto/test.proto", -} - -var E_X235 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 235, - Name: "test_proto.x235", - Tag: "bytes,235,opt,name=x235", - Filename: "test_proto/test.proto", -} - -var E_X236 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 236, - Name: "test_proto.x236", - Tag: "bytes,236,opt,name=x236", - Filename: "test_proto/test.proto", -} - -var E_X237 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 237, - Name: "test_proto.x237", - Tag: "bytes,237,opt,name=x237", - Filename: "test_proto/test.proto", -} - -var E_X238 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 238, - Name: "test_proto.x238", - Tag: "bytes,238,opt,name=x238", - Filename: "test_proto/test.proto", -} - -var E_X239 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 239, - Name: "test_proto.x239", - Tag: "bytes,239,opt,name=x239", - Filename: "test_proto/test.proto", -} - -var E_X240 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 240, - Name: "test_proto.x240", - Tag: "bytes,240,opt,name=x240", - Filename: "test_proto/test.proto", -} - -var E_X241 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 241, - Name: "test_proto.x241", - Tag: "bytes,241,opt,name=x241", - Filename: "test_proto/test.proto", -} - -var E_X242 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 242, - Name: "test_proto.x242", - Tag: "bytes,242,opt,name=x242", - Filename: "test_proto/test.proto", -} - -var E_X243 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 243, - Name: "test_proto.x243", - Tag: "bytes,243,opt,name=x243", - Filename: "test_proto/test.proto", -} - -var E_X244 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 244, - Name: "test_proto.x244", - Tag: "bytes,244,opt,name=x244", - Filename: "test_proto/test.proto", -} - -var E_X245 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 245, - Name: "test_proto.x245", - Tag: "bytes,245,opt,name=x245", - Filename: "test_proto/test.proto", -} - -var E_X246 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 246, - Name: "test_proto.x246", - Tag: "bytes,246,opt,name=x246", - Filename: "test_proto/test.proto", -} - -var E_X247 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 247, - Name: "test_proto.x247", - Tag: "bytes,247,opt,name=x247", - Filename: "test_proto/test.proto", -} - -var E_X248 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 248, - Name: "test_proto.x248", - Tag: "bytes,248,opt,name=x248", - Filename: "test_proto/test.proto", -} - -var E_X249 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 249, - Name: "test_proto.x249", - Tag: "bytes,249,opt,name=x249", - Filename: "test_proto/test.proto", -} - -var E_X250 = &proto.ExtensionDesc{ - ExtendedType: (*MyMessageSet)(nil), - ExtensionType: (*Empty)(nil), - Field: 250, - Name: "test_proto.x250", - Tag: "bytes,250,opt,name=x250", - Filename: "test_proto/test.proto", -} - func init() { proto.RegisterEnum("test_proto.FOO", FOO_name, FOO_value) proto.RegisterEnum("test_proto.GoTest_KIND", GoTest_KIND_name, GoTest_KIND_value) @@ -4425,7 +3935,6 @@ func init() { proto.RegisterMapType((map[int32]int32)(nil), "test_proto.Ext.MapFieldEntry") proto.RegisterType((*ComplexExtension)(nil), "test_proto.ComplexExtension") proto.RegisterType((*DefaultsMessage)(nil), "test_proto.DefaultsMessage") - proto.RegisterType((*MyMessageSet)(nil), "test_proto.MyMessageSet") proto.RegisterType((*Empty)(nil), "test_proto.Empty") proto.RegisterType((*MessageList)(nil), "test_proto.MessageList") proto.RegisterType((*MessageList_Message)(nil), "test_proto.MessageList.Message") @@ -4485,360 +3994,280 @@ func init() { proto.RegisterExtension(E_DefaultString) proto.RegisterExtension(E_DefaultBytes) proto.RegisterExtension(E_DefaultEnum) - proto.RegisterExtension(E_X201) - proto.RegisterExtension(E_X202) - proto.RegisterExtension(E_X203) - proto.RegisterExtension(E_X204) - proto.RegisterExtension(E_X205) - proto.RegisterExtension(E_X206) - proto.RegisterExtension(E_X207) - proto.RegisterExtension(E_X208) - proto.RegisterExtension(E_X209) - proto.RegisterExtension(E_X210) - proto.RegisterExtension(E_X211) - proto.RegisterExtension(E_X212) - proto.RegisterExtension(E_X213) - proto.RegisterExtension(E_X214) - proto.RegisterExtension(E_X215) - proto.RegisterExtension(E_X216) - proto.RegisterExtension(E_X217) - proto.RegisterExtension(E_X218) - proto.RegisterExtension(E_X219) - proto.RegisterExtension(E_X220) - proto.RegisterExtension(E_X221) - proto.RegisterExtension(E_X222) - proto.RegisterExtension(E_X223) - proto.RegisterExtension(E_X224) - proto.RegisterExtension(E_X225) - proto.RegisterExtension(E_X226) - proto.RegisterExtension(E_X227) - proto.RegisterExtension(E_X228) - proto.RegisterExtension(E_X229) - proto.RegisterExtension(E_X230) - proto.RegisterExtension(E_X231) - proto.RegisterExtension(E_X232) - proto.RegisterExtension(E_X233) - proto.RegisterExtension(E_X234) - proto.RegisterExtension(E_X235) - proto.RegisterExtension(E_X236) - proto.RegisterExtension(E_X237) - proto.RegisterExtension(E_X238) - proto.RegisterExtension(E_X239) - proto.RegisterExtension(E_X240) - proto.RegisterExtension(E_X241) - proto.RegisterExtension(E_X242) - proto.RegisterExtension(E_X243) - proto.RegisterExtension(E_X244) - proto.RegisterExtension(E_X245) - proto.RegisterExtension(E_X246) - proto.RegisterExtension(E_X247) - proto.RegisterExtension(E_X248) - proto.RegisterExtension(E_X249) - proto.RegisterExtension(E_X250) } func init() { proto.RegisterFile("test_proto/test.proto", fileDescriptor_8ca34d01332f1402) } var fileDescriptor_8ca34d01332f1402 = []byte{ - // 4797 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x5b, 0x5b, 0x73, 0x1b, 0x47, - 0x76, 0xd6, 0x0c, 0xee, 0x07, 0x20, 0x31, 0x6c, 0xd1, 0x12, 0x44, 0x59, 0xd2, 0x08, 0x6b, 0xaf, - 0x61, 0x49, 0x86, 0x48, 0x60, 0x08, 0x49, 0x70, 0xec, 0x58, 0x94, 0x08, 0x9a, 0x25, 0x91, 0x90, - 0x87, 0xb4, 0x9d, 0x55, 0x1e, 0x50, 0x20, 0x31, 0x04, 0xb1, 0x02, 0x66, 0x60, 0x60, 0xb8, 0x22, - 0x93, 0x4a, 0x95, 0x1f, 0x53, 0x95, 0xa7, 0x6c, 0x92, 0xaa, 0xbc, 0xe7, 0x25, 0x2f, 0xb9, 0x3d, - 0x24, 0xbf, 0x21, 0xbe, 0xad, 0x77, 0xd7, 0x7b, 0x4b, 0xb2, 0xc9, 0xe6, 0x7e, 0xcf, 0xe6, 0xbe, - 0x97, 0xbc, 0x38, 0xd5, 0xa7, 0x7b, 0x66, 0x7a, 0x06, 0x50, 0x93, 0x7c, 0xe2, 0x74, 0xf7, 0x77, - 0xbe, 0xbe, 0x7d, 0x73, 0xce, 0xe9, 0xc6, 0x10, 0x9e, 0x73, 0xad, 0xb1, 0xdb, 0x1a, 0x8e, 0x1c, - 0xd7, 0xb9, 0x49, 0x1f, 0xcb, 0xf8, 0x48, 0x20, 0xa8, 0x2e, 0x5e, 0x87, 0xe4, 0x9a, 0xb3, 0x6a, - 0x1f, 0x0c, 0xc8, 0x55, 0x88, 0xed, 0x39, 0x4e, 0x41, 0xd1, 0xd5, 0xd2, 0x6c, 0x25, 0x5f, 0x0e, - 0x30, 0xe5, 0x46, 0xb3, 0x69, 0xd2, 0xb6, 0xe2, 0x2d, 0xc8, 0xae, 0x39, 0xdb, 0xd6, 0xd8, 0x6d, - 0xf4, 0xac, 0x7e, 0x87, 0xcc, 0x43, 0xe2, 0x61, 0x7b, 0xc7, 0xea, 0xa3, 0x4d, 0xc6, 0x64, 0x05, - 0x42, 0x20, 0xbe, 0x7d, 0x34, 0xb4, 0x0a, 0x2a, 0x56, 0xe2, 0x73, 0xf1, 0x0f, 0x8b, 0xb4, 0x1b, - 0x6a, 0x49, 0xae, 0x43, 0xfc, 0x41, 0xcf, 0xee, 0xf0, 0x7e, 0xce, 0x8b, 0xfd, 0x30, 0x44, 0xf9, - 0xc1, 0xfa, 0xe6, 0x7d, 0x13, 0x41, 0xb4, 0x87, 0xed, 0xf6, 0x4e, 0x9f, 0x92, 0x29, 0xb4, 0x07, - 0x2c, 0xd0, 0xda, 0x47, 0xed, 0x51, 0x7b, 0x50, 0x88, 0xe9, 0x4a, 0x29, 0x61, 0xb2, 0x02, 0x79, - 0x0d, 0x66, 0x4c, 0xeb, 0xbd, 0x83, 0xde, 0xc8, 0xea, 0xe0, 0xf0, 0x0a, 0x71, 0x5d, 0x2d, 0x65, - 0xa7, 0xf5, 0x80, 0xcd, 0x66, 0x18, 0xcd, 0xcc, 0x87, 0x56, 0xdb, 0xf5, 0xcc, 0x13, 0x7a, 0xec, - 0x18, 0x73, 0x01, 0x4d, 0xcd, 0x9b, 0x43, 0xb7, 0xe7, 0xd8, 0xed, 0x3e, 0x33, 0x4f, 0xea, 0x8a, - 0xd4, 0x3c, 0x84, 0x26, 0x5f, 0x84, 0x7c, 0xa3, 0xb5, 0xe2, 0x38, 0xfd, 0xd6, 0x88, 0x8f, 0xaa, - 0x00, 0xba, 0x5a, 0x4a, 0x9b, 0x33, 0x0d, 0x5a, 0xeb, 0x0d, 0x95, 0x94, 0x40, 0x6b, 0xb4, 0xd6, - 0x6d, 0xb7, 0x5a, 0x09, 0x80, 0x59, 0x5d, 0x2d, 0x25, 0xcc, 0xd9, 0x06, 0x56, 0x4f, 0x20, 0x6b, - 0x46, 0x80, 0xcc, 0xe9, 0x6a, 0x29, 0xc6, 0x90, 0x35, 0xc3, 0x47, 0xde, 0x00, 0xd2, 0x68, 0x35, - 0x7a, 0x87, 0x56, 0x47, 0x64, 0x9d, 0xd1, 0xd5, 0x52, 0xca, 0xd4, 0x1a, 0xbc, 0x61, 0x0a, 0x5a, - 0x64, 0x9e, 0xd5, 0xd5, 0x52, 0xd2, 0x43, 0x0b, 0xdc, 0xd7, 0x60, 0xae, 0xd1, 0x7a, 0xbb, 0x17, - 0x1e, 0x70, 0x5e, 0x57, 0x4b, 0x33, 0x66, 0xbe, 0xc1, 0xea, 0x27, 0xb1, 0x22, 0xb1, 0xa6, 0xab, - 0xa5, 0x38, 0xc7, 0x0a, 0xbc, 0x38, 0xbb, 0x46, 0xdf, 0x69, 0xbb, 0x01, 0x74, 0x4e, 0x57, 0x4b, - 0xaa, 0x39, 0xdb, 0xc0, 0xea, 0x30, 0xeb, 0x7d, 0xe7, 0x60, 0xa7, 0x6f, 0x05, 0x50, 0xa2, 0xab, - 0x25, 0xc5, 0xcc, 0x37, 0x58, 0x7d, 0x18, 0xbb, 0xe5, 0x8e, 0x7a, 0x76, 0x37, 0xc0, 0x9e, 0x45, - 0x1d, 0xe7, 0x1b, 0xac, 0x3e, 0x3c, 0x82, 0x95, 0x23, 0xd7, 0x1a, 0x07, 0x50, 0x4b, 0x57, 0x4b, - 0x39, 0x73, 0xb6, 0x81, 0xd5, 0x11, 0xd6, 0xc8, 0x1a, 0xec, 0xe9, 0x6a, 0x69, 0x8e, 0xb2, 0x4e, - 0x59, 0x83, 0xad, 0xc8, 0x1a, 0x74, 0x75, 0xb5, 0x44, 0x38, 0x56, 0x58, 0x83, 0x32, 0x9c, 0x6d, - 0xb4, 0xb6, 0xf6, 0xa2, 0x1b, 0xb7, 0xaf, 0xab, 0xa5, 0xbc, 0x39, 0xd7, 0xf0, 0x5a, 0xa6, 0xe1, - 0x45, 0xf6, 0x9e, 0xae, 0x96, 0x34, 0x1f, 0x2f, 0xf0, 0x8b, 0x9a, 0x64, 0x52, 0x2f, 0xcc, 0xeb, - 0x31, 0x41, 0x93, 0xac, 0x32, 0xac, 0x49, 0x0e, 0x7c, 0x4e, 0x8f, 0x89, 0x9a, 0x8c, 0x20, 0xb1, - 0x7b, 0x8e, 0x3c, 0xa7, 0xc7, 0x44, 0x4d, 0x72, 0x64, 0x44, 0x93, 0x1c, 0x7b, 0x5e, 0x8f, 0x85, - 0x35, 0x39, 0x81, 0x16, 0x99, 0x0b, 0x7a, 0x2c, 0xac, 0x49, 0x8e, 0x0e, 0x6b, 0x92, 0x83, 0x2f, - 0xe8, 0xb1, 0x90, 0x26, 0xa3, 0x58, 0x91, 0x78, 0x41, 0x8f, 0x85, 0x34, 0x29, 0xce, 0xce, 0xd3, - 0x24, 0x87, 0x5e, 0xd4, 0x63, 0xa2, 0x26, 0x45, 0x56, 0x5f, 0x93, 0x1c, 0xfa, 0xbc, 0x1e, 0x0b, - 0x69, 0x52, 0xc4, 0xfa, 0x9a, 0xe4, 0xd8, 0x4b, 0x7a, 0x2c, 0xa4, 0x49, 0x8e, 0x7d, 0x59, 0xd4, - 0x24, 0x87, 0x7e, 0xa0, 0xe8, 0x31, 0x51, 0x94, 0x1c, 0x7a, 0x3d, 0x24, 0x4a, 0x8e, 0xfd, 0x90, - 0x62, 0x45, 0x55, 0x46, 0xc1, 0xe2, 0x2a, 0x7c, 0x44, 0xc1, 0xa2, 0x2c, 0x39, 0xf8, 0x66, 0x44, - 0x96, 0x1c, 0xfe, 0x31, 0x85, 0x87, 0x75, 0x39, 0x69, 0x20, 0xf2, 0x7f, 0x42, 0x0d, 0xc2, 0xc2, - 0xe4, 0x06, 0x81, 0x30, 0x1d, 0xee, 0x44, 0x0b, 0x97, 0x75, 0xc5, 0x17, 0xa6, 0xe7, 0x59, 0x45, - 0x61, 0xfa, 0xc0, 0x2b, 0x18, 0x32, 0xb8, 0x30, 0x27, 0x90, 0x35, 0x23, 0x40, 0xea, 0xba, 0x12, - 0x08, 0xd3, 0x47, 0x86, 0x84, 0xe9, 0x63, 0xaf, 0xea, 0x8a, 0x28, 0xcc, 0x29, 0x68, 0x91, 0xb9, - 0xa8, 0x2b, 0xa2, 0x30, 0x7d, 0xb4, 0x28, 0x4c, 0x1f, 0xfc, 0x05, 0x5d, 0x11, 0x84, 0x39, 0x89, - 0x15, 0x89, 0x5f, 0xd0, 0x15, 0x41, 0x98, 0xe1, 0xd9, 0x31, 0x61, 0xfa, 0xd0, 0x17, 0x75, 0x25, - 0x10, 0x66, 0x98, 0x95, 0x0b, 0xd3, 0x87, 0x7e, 0x51, 0x57, 0x04, 0x61, 0x86, 0xb1, 0x5c, 0x98, - 0x3e, 0xf6, 0x25, 0x8c, 0xd3, 0x9e, 0x30, 0x7d, 0xac, 0x20, 0x4c, 0x1f, 0xfa, 0x3b, 0x34, 0xa6, - 0xfb, 0xc2, 0xf4, 0xa1, 0xa2, 0x30, 0x7d, 0xec, 0xef, 0x52, 0x6c, 0x20, 0xcc, 0x49, 0xb0, 0xb8, - 0x0a, 0xbf, 0x47, 0xc1, 0x81, 0x30, 0x7d, 0x70, 0x58, 0x98, 0x3e, 0xfc, 0xf7, 0x29, 0x5c, 0x14, - 0xe6, 0x34, 0x03, 0x91, 0xff, 0x0f, 0xa8, 0x81, 0x28, 0x4c, 0xdf, 0xa0, 0x8c, 0xd3, 0xa4, 0xc2, - 0xec, 0x58, 0x7b, 0xed, 0x83, 0x3e, 0x95, 0x71, 0x89, 0x2a, 0xb3, 0x1e, 0x77, 0x47, 0x07, 0x16, - 0x9d, 0xab, 0xe3, 0xf4, 0xef, 0x7b, 0x6d, 0xa4, 0x4c, 0x87, 0xcf, 0x04, 0x1a, 0x18, 0xbc, 0x4c, - 0x15, 0x5a, 0x57, 0xab, 0x15, 0x33, 0xcf, 0x54, 0x3a, 0x89, 0xaf, 0x19, 0x02, 0xfe, 0x1a, 0xd5, - 0x69, 0x5d, 0xad, 0x19, 0x0c, 0x5f, 0x33, 0x02, 0x7c, 0x95, 0x4e, 0xc0, 0x13, 0x6b, 0x60, 0x71, - 0x9d, 0xaa, 0xb5, 0x1e, 0xab, 0x56, 0x16, 0xcd, 0x39, 0x4f, 0xb2, 0xd3, 0x8c, 0x42, 0xdd, 0xdc, - 0xa0, 0xa2, 0xad, 0xc7, 0x6a, 0x86, 0x6f, 0x24, 0xf6, 0x54, 0xa1, 0x42, 0xe7, 0xd2, 0x0d, 0x6c, - 0x5e, 0xa1, 0xda, 0xad, 0xc7, 0xab, 0x95, 0xc5, 0x45, 0x53, 0xe3, 0x0a, 0x9e, 0x62, 0x13, 0xea, - 0xa7, 0x4c, 0x35, 0x5c, 0x8f, 0xd7, 0x0c, 0xdf, 0x26, 0xdc, 0xcf, 0x9c, 0x27, 0xe5, 0xc0, 0xe4, - 0x26, 0xd5, 0x72, 0x3d, 0x59, 0x5d, 0x32, 0x96, 0x96, 0xef, 0x98, 0x79, 0xa6, 0xe9, 0xc0, 0xc6, - 0xa0, 0xfd, 0x70, 0x51, 0x07, 0x46, 0x8b, 0x54, 0xd5, 0xf5, 0x64, 0xe5, 0xd6, 0xd2, 0xed, 0xca, - 0x6d, 0x53, 0xe3, 0xea, 0x0e, 0xac, 0x5e, 0xa7, 0x56, 0x5c, 0xde, 0x81, 0xd5, 0x12, 0xd5, 0x77, - 0x5d, 0xdb, 0xb7, 0xfa, 0x7d, 0xe7, 0x86, 0x5e, 0x7c, 0xea, 0x8c, 0xfa, 0x9d, 0xab, 0x45, 0x30, - 0x35, 0xae, 0x78, 0xb1, 0xd7, 0x39, 0x4f, 0xf2, 0x81, 0xf9, 0xaf, 0xd2, 0x8c, 0x35, 0x57, 0x4f, - 0xad, 0xf4, 0xba, 0xb6, 0x33, 0xb6, 0xcc, 0x3c, 0x13, 0x7f, 0x64, 0x4d, 0xb6, 0xa2, 0xeb, 0xf8, - 0x55, 0x6a, 0x36, 0x57, 0x8f, 0xbd, 0x52, 0xad, 0xd0, 0x9e, 0xa6, 0xad, 0xe3, 0x56, 0x74, 0x1d, - 0x7f, 0x8d, 0xda, 0x90, 0x7a, 0xec, 0x95, 0x9a, 0xc1, 0x6d, 0xc4, 0x75, 0xac, 0xc1, 0xbc, 0xf0, - 0x2e, 0x04, 0x56, 0xbf, 0x4e, 0xad, 0xf2, 0xac, 0x27, 0xe2, 0xbf, 0x11, 0x53, 0xed, 0x42, 0xbd, - 0xfd, 0x06, 0xb5, 0xd3, 0x58, 0x6f, 0xc4, 0x7f, 0x31, 0x02, 0xbb, 0x5b, 0x70, 0x2e, 0x92, 0x4b, - 0xb4, 0x86, 0xed, 0xdd, 0x27, 0x56, 0xa7, 0x50, 0xa1, 0x29, 0xc5, 0x8a, 0xaa, 0x29, 0xe6, 0xd9, - 0x50, 0x5a, 0xf1, 0x08, 0x9b, 0xc9, 0x1d, 0x38, 0x1f, 0x4d, 0x2e, 0x3c, 0xcb, 0x2a, 0xcd, 0x31, - 0xd0, 0x72, 0x3e, 0x9c, 0x67, 0x44, 0x4c, 0x85, 0xa0, 0xe2, 0x99, 0x1a, 0x34, 0xe9, 0x08, 0x4c, - 0x83, 0xd8, 0xc2, 0x4d, 0x5f, 0x83, 0x0b, 0x93, 0xe9, 0x87, 0x67, 0xbc, 0x4c, 0xb3, 0x10, 0x34, - 0x3e, 0x17, 0xcd, 0x44, 0x26, 0xcc, 0xa7, 0xf4, 0x5d, 0xa3, 0x69, 0x89, 0x68, 0x3e, 0xd1, 0xfb, - 0xab, 0x50, 0x98, 0x48, 0x50, 0x3c, 0xeb, 0x5b, 0x34, 0x4f, 0x41, 0xeb, 0xe7, 0x22, 0xb9, 0x4a, - 0xd4, 0x78, 0x4a, 0xd7, 0xb7, 0x69, 0xe2, 0x22, 0x18, 0x4f, 0xf4, 0x8c, 0x4b, 0x16, 0x4e, 0x61, - 0x3c, 0xdb, 0x3b, 0x34, 0x93, 0xe1, 0x4b, 0x16, 0xca, 0x66, 0xc4, 0x7e, 0x23, 0x39, 0x8d, 0x67, - 0x5b, 0xa7, 0xa9, 0x0d, 0xef, 0x37, 0x9c, 0xde, 0x70, 0xe3, 0x9f, 0xa1, 0xc6, 0x5b, 0xd3, 0x67, - 0xfc, 0xa3, 0x18, 0x4d, 0x4a, 0xb8, 0xf5, 0xd6, 0xb4, 0x29, 0xfb, 0xd6, 0x53, 0xa6, 0xfc, 0x63, - 0x6a, 0x4d, 0x04, 0xeb, 0x89, 0x39, 0xbf, 0x01, 0x0b, 0x53, 0xf2, 0x15, 0xcf, 0xfe, 0x27, 0xd4, - 0x3e, 0x8f, 0xf6, 0xe7, 0x27, 0x52, 0x97, 0x49, 0x86, 0x29, 0x23, 0xf8, 0x29, 0x65, 0xd0, 0x42, - 0x0c, 0x13, 0x63, 0x68, 0xc0, 0x8c, 0x97, 0x8f, 0x77, 0x47, 0xce, 0xc1, 0xb0, 0xd0, 0xd0, 0xd5, - 0x12, 0x54, 0xf4, 0x29, 0xa7, 0x63, 0x2f, 0x3d, 0x5f, 0xa3, 0x38, 0x33, 0x6c, 0xc6, 0x78, 0x18, - 0x33, 0xe3, 0x79, 0xa4, 0xc7, 0x9e, 0xc9, 0xc3, 0x70, 0x3e, 0x8f, 0x60, 0x46, 0x79, 0xbc, 0x70, - 0xc7, 0x78, 0x1e, 0xeb, 0xca, 0x33, 0x78, 0xbc, 0xe0, 0xc7, 0x79, 0x42, 0x66, 0x0b, 0xcb, 0xc1, - 0x99, 0x1c, 0xdb, 0xc9, 0x0b, 0xd1, 0x43, 0xfa, 0x1a, 0x9e, 0xae, 0xc2, 0x95, 0xcc, 0x4c, 0x18, - 0xde, 0xa4, 0xd9, 0x5b, 0xcf, 0x30, 0x0b, 0x8d, 0x66, 0xd2, 0xec, 0xe7, 0xa7, 0x98, 0x15, 0x7f, - 0x53, 0x81, 0xf8, 0x83, 0xf5, 0xcd, 0xfb, 0x24, 0x0d, 0xf1, 0x77, 0x9a, 0xeb, 0xf7, 0xb5, 0x33, - 0xf4, 0x69, 0xa5, 0xd9, 0x7c, 0xa8, 0x29, 0x24, 0x03, 0x89, 0x95, 0x2f, 0x6d, 0xaf, 0x6e, 0x69, - 0x2a, 0xc9, 0x43, 0xb6, 0xb1, 0xbe, 0xb9, 0xb6, 0x6a, 0x3e, 0x32, 0xd7, 0x37, 0xb7, 0xb5, 0x18, - 0x6d, 0x6b, 0x3c, 0x6c, 0xde, 0xdd, 0xd6, 0xe2, 0x24, 0x05, 0x31, 0x5a, 0x97, 0x20, 0x00, 0xc9, - 0xad, 0x6d, 0x73, 0x7d, 0x73, 0x4d, 0x4b, 0x52, 0x96, 0xed, 0xf5, 0x8d, 0x55, 0x2d, 0x45, 0x91, - 0xdb, 0x6f, 0x3f, 0x7a, 0xb8, 0xaa, 0xa5, 0xe9, 0xe3, 0x5d, 0xd3, 0xbc, 0xfb, 0x25, 0x2d, 0x43, - 0x8d, 0x36, 0xee, 0x3e, 0xd2, 0x00, 0x9b, 0xef, 0xae, 0x3c, 0x5c, 0xd5, 0xb2, 0x24, 0x07, 0xe9, - 0xc6, 0xdb, 0x9b, 0xf7, 0xb6, 0xd7, 0x9b, 0x9b, 0x5a, 0xae, 0xf8, 0x8b, 0x50, 0x60, 0xcb, 0x1c, - 0x5a, 0x45, 0x76, 0x65, 0xf0, 0x06, 0x24, 0xd8, 0xde, 0x28, 0xa8, 0x95, 0x6b, 0x93, 0x7b, 0x33, - 0x69, 0x54, 0x66, 0xbb, 0xc4, 0x0c, 0x17, 0x2e, 0x41, 0x82, 0xad, 0xd3, 0x3c, 0x24, 0xd8, 0xfa, - 0xa8, 0x78, 0x95, 0xc0, 0x0a, 0xc5, 0xdf, 0x52, 0x01, 0xd6, 0x9c, 0xad, 0x27, 0xbd, 0x21, 0x5e, - 0xdc, 0x5c, 0x02, 0x18, 0x3f, 0xe9, 0x0d, 0x5b, 0xf8, 0x06, 0xf2, 0x4b, 0x87, 0x0c, 0xad, 0x41, - 0xdf, 0x4b, 0xae, 0x42, 0x0e, 0x9b, 0xf9, 0x2b, 0x82, 0x77, 0x0d, 0x29, 0x33, 0x4b, 0xeb, 0xb8, - 0x93, 0x0c, 0x43, 0x6a, 0x06, 0x5e, 0x31, 0x24, 0x05, 0x48, 0xcd, 0x20, 0x57, 0x00, 0x8b, 0xad, - 0x31, 0x46, 0x53, 0xbc, 0x56, 0xc8, 0x98, 0xd8, 0x2f, 0x8b, 0xaf, 0xe4, 0x75, 0xc0, 0x3e, 0xd9, - 0xcc, 0xf3, 0xd3, 0xde, 0x12, 0x6f, 0xc0, 0x65, 0xfa, 0xc0, 0xe6, 0x1b, 0x98, 0x2c, 0x34, 0x21, - 0xe3, 0xd7, 0xd3, 0xde, 0xb0, 0x96, 0xcf, 0x49, 0xc3, 0x39, 0x01, 0x56, 0xf9, 0x93, 0x62, 0x00, - 0x3e, 0x9e, 0x39, 0x1c, 0x0f, 0x33, 0x62, 0x03, 0x2a, 0x5e, 0x82, 0x99, 0x4d, 0xc7, 0x66, 0xef, - 0x31, 0xae, 0x53, 0x0e, 0x94, 0x76, 0x41, 0xc1, 0xf3, 0xaf, 0xd2, 0x2e, 0x5e, 0x06, 0x10, 0xda, - 0x34, 0x50, 0x76, 0x58, 0x1b, 0xfa, 0x03, 0x65, 0xa7, 0x78, 0x1d, 0x92, 0x1b, 0xed, 0xc3, 0xed, - 0x76, 0x97, 0x5c, 0x05, 0xe8, 0xb7, 0xc7, 0x6e, 0x6b, 0x0f, 0x77, 0xe2, 0xf3, 0xcf, 0x3f, 0xff, - 0x5c, 0xc1, 0x64, 0x3a, 0x43, 0x6b, 0xd9, 0x8e, 0x8c, 0x01, 0x9a, 0xfd, 0xce, 0x86, 0x35, 0x1e, - 0xb7, 0xbb, 0x16, 0x59, 0x86, 0xa4, 0x6d, 0x8d, 0x69, 0xf4, 0x55, 0xf0, 0xae, 0xe9, 0x92, 0xb8, - 0x0e, 0x01, 0xae, 0xbc, 0x89, 0x20, 0x93, 0x83, 0x89, 0x06, 0x31, 0xfb, 0x60, 0x80, 0x37, 0x6a, - 0x09, 0x93, 0x3e, 0x2e, 0x3c, 0x0f, 0x49, 0x86, 0x21, 0x04, 0xe2, 0x76, 0x7b, 0x60, 0x15, 0x58, - 0xcf, 0xf8, 0x5c, 0xfc, 0xaa, 0x02, 0xb0, 0x69, 0x3d, 0x3d, 0x51, 0xaf, 0x01, 0x4e, 0xd2, 0x6b, - 0x8c, 0xf5, 0xfa, 0xaa, 0xac, 0x57, 0xaa, 0xb6, 0x3d, 0xc7, 0xe9, 0xb4, 0xd8, 0x46, 0xb3, 0xeb, - 0xbf, 0x0c, 0xad, 0xc1, 0x9d, 0x2b, 0x3e, 0x86, 0xdc, 0xba, 0x6d, 0x5b, 0x23, 0x6f, 0x54, 0x04, - 0xe2, 0xfb, 0xce, 0xd8, 0xe5, 0x37, 0x91, 0xf8, 0x4c, 0x0a, 0x10, 0x1f, 0x3a, 0x23, 0x97, 0xcd, - 0xb4, 0x1e, 0x37, 0x16, 0x17, 0x17, 0x4d, 0xac, 0x21, 0xcf, 0x43, 0x66, 0xd7, 0xb1, 0x6d, 0x6b, - 0x97, 0x4e, 0x23, 0x86, 0x47, 0xc7, 0xa0, 0xa2, 0xf8, 0xcb, 0x0a, 0xe4, 0x9a, 0xee, 0x7e, 0x40, - 0xae, 0x41, 0xec, 0x89, 0x75, 0x84, 0xc3, 0x8b, 0x99, 0xf4, 0x91, 0xbe, 0x30, 0x5f, 0x69, 0xf7, - 0x0f, 0xd8, 0xbd, 0x64, 0xce, 0x64, 0x05, 0x72, 0x0e, 0x92, 0x4f, 0xad, 0x5e, 0x77, 0xdf, 0x45, - 0x4e, 0xd5, 0xe4, 0x25, 0x52, 0x86, 0x44, 0x8f, 0x0e, 0xb6, 0x10, 0xc7, 0x15, 0x2b, 0x88, 0x2b, - 0x26, 0xce, 0xc2, 0x64, 0xb0, 0x6b, 0xe9, 0x74, 0x47, 0x7b, 0xff, 0xfd, 0xf7, 0xdf, 0x57, 0x8b, - 0xfb, 0x30, 0xef, 0xbd, 0xc4, 0xa1, 0xe9, 0x3e, 0x82, 0x42, 0xdf, 0x72, 0x5a, 0x7b, 0x3d, 0xbb, - 0xdd, 0xef, 0x1f, 0xb5, 0x9e, 0x3a, 0x76, 0xab, 0x6d, 0xb7, 0x9c, 0xf1, 0x6e, 0x7b, 0x84, 0x4b, - 0x20, 0xeb, 0x64, 0xbe, 0x6f, 0x39, 0x0d, 0x66, 0xf8, 0xae, 0x63, 0xdf, 0xb5, 0x9b, 0xd4, 0xaa, - 0xf8, 0x59, 0x1c, 0x32, 0x1b, 0x47, 0x1e, 0xff, 0x3c, 0x24, 0x76, 0x9d, 0x03, 0x9b, 0xad, 0x67, - 0xc2, 0x64, 0x05, 0x7f, 0x9f, 0x54, 0x61, 0x9f, 0xe6, 0x21, 0xf1, 0xde, 0x81, 0xe3, 0x5a, 0x38, - 0xe5, 0x8c, 0xc9, 0x0a, 0x74, 0xc5, 0x86, 0x96, 0x5b, 0x88, 0xe3, 0x35, 0x05, 0x7d, 0x0c, 0xd6, - 0x20, 0x71, 0xa2, 0x35, 0x20, 0x8b, 0x90, 0x74, 0xe8, 0x1e, 0x8c, 0x0b, 0x49, 0xbc, 0x87, 0x0d, - 0x19, 0x88, 0xbb, 0x63, 0x72, 0x1c, 0x79, 0x00, 0x73, 0x4f, 0xad, 0xd6, 0xe0, 0x60, 0xec, 0xb6, - 0xba, 0x4e, 0xab, 0x63, 0x59, 0x43, 0x6b, 0x54, 0x98, 0xc1, 0xde, 0x42, 0x1e, 0x62, 0xda, 0x82, - 0x9a, 0xb3, 0x4f, 0xad, 0x8d, 0x83, 0xb1, 0xbb, 0xe6, 0xdc, 0x47, 0x3b, 0xb2, 0x0c, 0x99, 0x91, - 0x45, 0xfd, 0x02, 0x1d, 0x72, 0x6e, 0x72, 0x04, 0x21, 0xe3, 0xf4, 0xc8, 0x1a, 0x62, 0x05, 0xb9, - 0x05, 0xe9, 0x9d, 0xde, 0x13, 0x6b, 0xbc, 0x6f, 0x75, 0x0a, 0x29, 0x5d, 0x29, 0xcd, 0x56, 0x2e, - 0x8a, 0x56, 0xfe, 0x02, 0x97, 0xef, 0x39, 0x7d, 0x67, 0x64, 0xfa, 0x60, 0xf2, 0x1a, 0x64, 0xc6, - 0xce, 0xc0, 0x62, 0x6a, 0x4f, 0x63, 0xb0, 0xbd, 0x32, 0xdd, 0x72, 0xcb, 0x19, 0x58, 0x9e, 0x57, - 0xf3, 0x2c, 0xc8, 0x45, 0x36, 0xdc, 0x1d, 0x7a, 0x98, 0x28, 0x00, 0x5e, 0xf8, 0xd0, 0x41, 0xe1, - 0xe1, 0x82, 0x2c, 0xd0, 0x41, 0x75, 0xf7, 0x68, 0xce, 0x56, 0xc8, 0xe2, 0x59, 0xde, 0x2f, 0x2f, - 0xdc, 0x80, 0x8c, 0x4f, 0x18, 0xb8, 0x43, 0xe6, 0x82, 0x32, 0xe8, 0x21, 0x98, 0x3b, 0x64, 0xfe, - 0xe7, 0x45, 0x48, 0xe0, 0xc0, 0x69, 0xe4, 0x32, 0x57, 0x69, 0xa0, 0xcc, 0x40, 0x62, 0xcd, 0x5c, - 0x5d, 0xdd, 0xd4, 0x14, 0x8c, 0x99, 0x0f, 0xdf, 0x5e, 0xd5, 0x54, 0x41, 0xbf, 0xbf, 0xad, 0x42, - 0x6c, 0xf5, 0x10, 0x95, 0xd3, 0x69, 0xbb, 0x6d, 0xef, 0x0d, 0xa7, 0xcf, 0xa4, 0x0e, 0x99, 0x41, - 0xdb, 0xeb, 0x4b, 0xc5, 0x25, 0x0e, 0xf9, 0x92, 0xd5, 0x43, 0xb7, 0xbc, 0xd1, 0x66, 0x3d, 0xaf, - 0xda, 0xee, 0xe8, 0xc8, 0x4c, 0x0f, 0x78, 0x71, 0xe1, 0x55, 0x98, 0x09, 0x35, 0x89, 0xaf, 0x68, - 0x62, 0xca, 0x2b, 0x9a, 0xe0, 0xaf, 0x68, 0x5d, 0xbd, 0xad, 0x54, 0xea, 0x10, 0x1f, 0x38, 0x23, - 0x8b, 0x3c, 0x37, 0x75, 0x81, 0x0b, 0x5d, 0x94, 0x4c, 0x3e, 0x32, 0x14, 0x13, 0x6d, 0x2a, 0x2f, - 0x43, 0xdc, 0xb5, 0x0e, 0xdd, 0x67, 0xd9, 0xee, 0xb3, 0xf9, 0x51, 0x48, 0xe5, 0x15, 0x48, 0xda, - 0x07, 0x83, 0x1d, 0x6b, 0xf4, 0x2c, 0x70, 0x0f, 0x07, 0xc6, 0x41, 0xc5, 0x77, 0x40, 0xbb, 0xe7, - 0x0c, 0x86, 0x7d, 0xeb, 0x70, 0xf5, 0xd0, 0xb5, 0xec, 0x71, 0xcf, 0xb1, 0xe9, 0x1c, 0xf6, 0x7a, - 0x23, 0x74, 0x6b, 0x38, 0x07, 0x2c, 0x50, 0x37, 0x33, 0xb6, 0x76, 0x1d, 0xbb, 0xc3, 0xa7, 0xc6, - 0x4b, 0x14, 0xed, 0xee, 0xf7, 0x46, 0xd4, 0xa3, 0xd1, 0xe0, 0xc3, 0x0a, 0xc5, 0x35, 0xc8, 0xf3, - 0x63, 0xd8, 0x98, 0x77, 0x5c, 0xbc, 0x06, 0x39, 0xaf, 0x0a, 0x7f, 0xf9, 0x49, 0x43, 0xfc, 0xf1, - 0xaa, 0xd9, 0xd4, 0xce, 0xd0, 0x7d, 0x6d, 0x6e, 0xae, 0x6a, 0x0a, 0x7d, 0xd8, 0x7e, 0xb7, 0x19, - 0xda, 0xcb, 0xe7, 0x21, 0xe7, 0x8f, 0x7d, 0xcb, 0x72, 0xb1, 0x85, 0x46, 0xa9, 0x54, 0x5d, 0x4d, - 0x2b, 0xc5, 0x14, 0x24, 0x56, 0x07, 0x43, 0xf7, 0xa8, 0xf8, 0x4b, 0x90, 0xe5, 0xa0, 0x87, 0xbd, - 0xb1, 0x4b, 0xee, 0x40, 0x6a, 0xc0, 0xe7, 0xab, 0x60, 0x2e, 0x1a, 0x96, 0x75, 0x80, 0xf4, 0x9e, - 0x4d, 0x0f, 0xbf, 0x50, 0x85, 0x94, 0xe0, 0xde, 0xb9, 0xe7, 0x51, 0x45, 0xcf, 0xc3, 0x7c, 0x54, - 0x4c, 0xf0, 0x51, 0xc5, 0x0d, 0x48, 0xb1, 0xc0, 0x3c, 0xc6, 0x74, 0x83, 0x9d, 0xdf, 0x99, 0xc6, - 0x98, 0xf8, 0xb2, 0xac, 0x8e, 0xe5, 0x50, 0x57, 0x20, 0x8b, 0xef, 0x8c, 0xaf, 0x42, 0xea, 0xcd, - 0x01, 0xab, 0x98, 0xe2, 0xff, 0x28, 0x01, 0x69, 0x6f, 0xad, 0xc8, 0x45, 0x48, 0xb2, 0x43, 0x2c, - 0x52, 0x79, 0x97, 0x3a, 0x09, 0x3c, 0xb6, 0x92, 0x8b, 0x90, 0xe2, 0x07, 0x55, 0x1e, 0x70, 0xd4, - 0x6a, 0xc5, 0x4c, 0xb2, 0x83, 0xa9, 0xdf, 0x58, 0x33, 0xd0, 0x4f, 0xb2, 0xeb, 0x9a, 0x24, 0x3b, - 0x7a, 0x12, 0x1d, 0x32, 0xfe, 0x61, 0x13, 0x43, 0x04, 0xbf, 0x9b, 0x49, 0x7b, 0xa7, 0x4b, 0x01, - 0x51, 0x33, 0xd0, 0x81, 0xf2, 0x8b, 0x98, 0x74, 0x23, 0xc8, 0x9b, 0xd2, 0xde, 0x91, 0x11, 0x7f, - 0x79, 0xf2, 0x6e, 0x5d, 0x52, 0xfc, 0x90, 0x18, 0x00, 0x6a, 0x06, 0x7a, 0x26, 0xef, 0x8a, 0x25, - 0xc5, 0x0f, 0x82, 0xe4, 0x0a, 0x1d, 0x22, 0x1e, 0xec, 0xd0, 0xff, 0x04, 0xf7, 0x29, 0x49, 0x76, - 0xdc, 0x23, 0x57, 0x29, 0x03, 0x3b, 0xbd, 0xa1, 0x6b, 0x08, 0x2e, 0x4f, 0x52, 0xfc, 0x50, 0x47, - 0xae, 0x53, 0x08, 0x5b, 0xfe, 0x02, 0x3c, 0xe3, 0xa6, 0x24, 0xc5, 0x6f, 0x4a, 0x88, 0x4e, 0x3b, - 0x44, 0x0f, 0x85, 0x5e, 0x49, 0xb8, 0x15, 0x49, 0xb2, 0x5b, 0x11, 0x72, 0x19, 0xe9, 0xd8, 0xa4, - 0x72, 0xc1, 0x0d, 0x48, 0x8a, 0x9f, 0x02, 0x83, 0x76, 0xcc, 0x25, 0xfd, 0xdb, 0x8e, 0x14, 0x3f, - 0xe7, 0x91, 0xdb, 0x74, 0xbf, 0xa8, 0xc2, 0x0b, 0xb3, 0xe8, 0x8b, 0x17, 0x44, 0xe9, 0x79, 0xbb, - 0xca, 0x5c, 0x71, 0x9d, 0xb9, 0x31, 0x33, 0xd1, 0xc0, 0x37, 0x62, 0x81, 0x5a, 0x3e, 0xea, 0xd9, - 0x7b, 0x85, 0x3c, 0xae, 0x45, 0xac, 0x67, 0xef, 0x99, 0x89, 0x06, 0xad, 0x61, 0x2a, 0xd8, 0xa4, - 0x6d, 0x1a, 0xb6, 0xc5, 0x5f, 0x61, 0x8d, 0xb4, 0x8a, 0x14, 0x20, 0xd1, 0x68, 0x6d, 0xb6, 0xed, - 0xc2, 0x1c, 0xb3, 0xb3, 0xdb, 0xb6, 0x19, 0x6f, 0x6c, 0xb6, 0x6d, 0xf2, 0x32, 0xc4, 0xc6, 0x07, - 0x3b, 0x05, 0x32, 0xf9, 0xb3, 0xe0, 0xd6, 0xc1, 0x8e, 0x37, 0x18, 0x93, 0x62, 0xc8, 0x45, 0x48, - 0x8f, 0xdd, 0x51, 0xeb, 0x17, 0xac, 0x91, 0x53, 0x38, 0x8b, 0xcb, 0x78, 0xc6, 0x4c, 0x8d, 0xdd, - 0xd1, 0x63, 0x6b, 0xe4, 0x9c, 0xd0, 0x07, 0x17, 0x2f, 0x43, 0x56, 0xe0, 0x25, 0x79, 0x50, 0x6c, - 0x96, 0xc0, 0xd4, 0x95, 0x5b, 0xa6, 0x62, 0x17, 0xdf, 0x81, 0x9c, 0x77, 0xc4, 0xc2, 0x19, 0x1b, - 0xf4, 0x6d, 0xea, 0x3b, 0x23, 0x7c, 0x4b, 0x67, 0x2b, 0x97, 0xc3, 0x11, 0x33, 0x00, 0xf2, 0xc8, - 0xc5, 0xc0, 0x45, 0x2d, 0x32, 0x18, 0xa5, 0xf8, 0x03, 0x05, 0x72, 0x1b, 0xce, 0x28, 0xf8, 0xfd, - 0x62, 0x1e, 0x12, 0x3b, 0x8e, 0xd3, 0x1f, 0x23, 0x71, 0xda, 0x64, 0x05, 0xf2, 0x22, 0xe4, 0xf0, - 0xc1, 0x3b, 0x24, 0xab, 0xfe, 0x2d, 0x50, 0x16, 0xeb, 0xf9, 0xb9, 0x98, 0x40, 0xbc, 0x67, 0xbb, - 0x63, 0xee, 0xd1, 0xf0, 0x99, 0x7c, 0x01, 0xb2, 0xf4, 0xaf, 0x67, 0x19, 0xf7, 0xb3, 0x69, 0xa0, - 0xd5, 0xdc, 0xf0, 0x25, 0x98, 0x41, 0x0d, 0xf8, 0xb0, 0x94, 0x7f, 0xe3, 0x93, 0x63, 0x0d, 0x1c, - 0x58, 0x80, 0x14, 0x73, 0x08, 0x63, 0xfc, 0xc1, 0x37, 0x63, 0x7a, 0x45, 0xea, 0x66, 0xf1, 0xa0, - 0xc2, 0x32, 0x90, 0x94, 0xc9, 0x4b, 0xc5, 0x7b, 0x90, 0xc6, 0x70, 0xd9, 0xec, 0x77, 0xc8, 0x0b, - 0xa0, 0x74, 0x0b, 0x16, 0x86, 0xeb, 0x73, 0xa1, 0x53, 0x08, 0x07, 0x94, 0xd7, 0x4c, 0xa5, 0xbb, - 0x30, 0x07, 0xca, 0x1a, 0x3d, 0x16, 0x1c, 0x72, 0x87, 0xad, 0x1c, 0x16, 0xdf, 0xe2, 0x24, 0x9b, - 0xd6, 0x53, 0x39, 0xc9, 0xa6, 0xf5, 0x94, 0x91, 0x5c, 0x99, 0x20, 0xa1, 0xa5, 0x23, 0xfe, 0x1b, - 0xb8, 0x72, 0x54, 0xac, 0xc2, 0x0c, 0xbe, 0xa8, 0x3d, 0xbb, 0xfb, 0xc8, 0xe9, 0xd9, 0x78, 0x10, - 0xd9, 0xc3, 0x04, 0x4e, 0x31, 0x95, 0x3d, 0xba, 0x0f, 0xd6, 0x61, 0x7b, 0x97, 0xa5, 0xc3, 0x69, - 0x93, 0x15, 0x8a, 0xdf, 0x8f, 0xc3, 0x2c, 0x77, 0xb2, 0xef, 0xf6, 0xdc, 0xfd, 0x8d, 0xf6, 0x90, - 0x6c, 0x42, 0x8e, 0xfa, 0xd7, 0xd6, 0xa0, 0x3d, 0x1c, 0xd2, 0x17, 0x59, 0xc1, 0xd0, 0x7c, 0x7d, - 0x8a, 0xdb, 0xe6, 0x16, 0xe5, 0xcd, 0xf6, 0xc0, 0xda, 0x60, 0x68, 0x16, 0xa8, 0xb3, 0x76, 0x50, - 0x43, 0x1e, 0x40, 0x76, 0x30, 0xee, 0xfa, 0x74, 0x2c, 0xd2, 0x5f, 0x93, 0xd0, 0x6d, 0x8c, 0xbb, - 0x21, 0x36, 0x18, 0xf8, 0x15, 0x74, 0x70, 0xd4, 0x3b, 0xfb, 0x6c, 0xb1, 0x63, 0x07, 0x47, 0x5d, - 0x49, 0x78, 0x70, 0x3b, 0x41, 0x0d, 0x69, 0x00, 0xd0, 0x57, 0xcd, 0x75, 0xe8, 0x09, 0x0f, 0xb5, - 0x94, 0xad, 0x94, 0x24, 0x6c, 0x5b, 0xee, 0x68, 0xdb, 0xd9, 0x72, 0x47, 0x3c, 0x21, 0x19, 0xf3, - 0xe2, 0xc2, 0xeb, 0xa0, 0x45, 0x57, 0xe1, 0xb8, 0x9c, 0x24, 0x23, 0xe4, 0x24, 0x0b, 0x3f, 0x07, - 0xf9, 0xc8, 0xb4, 0x45, 0x73, 0xc2, 0xcc, 0x6f, 0x8a, 0xe6, 0xd9, 0xca, 0x85, 0xd0, 0x37, 0x1a, - 0xe2, 0xd6, 0x8b, 0xcc, 0xaf, 0x83, 0x16, 0x5d, 0x02, 0x91, 0x3a, 0x2d, 0x39, 0xd0, 0xa0, 0xfd, - 0xab, 0x30, 0x13, 0x9a, 0xb4, 0x68, 0x9c, 0x39, 0x66, 0x5a, 0xc5, 0x5f, 0x49, 0x40, 0xa2, 0x69, - 0x5b, 0xce, 0x1e, 0x39, 0x1f, 0x8e, 0x9d, 0x6f, 0x9e, 0xf1, 0xe2, 0xe6, 0x85, 0x48, 0xdc, 0x7c, - 0xf3, 0x8c, 0x1f, 0x35, 0x2f, 0x44, 0xa2, 0xa6, 0xd7, 0x54, 0x33, 0xc8, 0xa5, 0x89, 0x98, 0xf9, - 0xe6, 0x19, 0x21, 0x60, 0x5e, 0x9a, 0x08, 0x98, 0x41, 0x73, 0xcd, 0xa0, 0x0e, 0x36, 0x1c, 0x2d, - 0xdf, 0x3c, 0x13, 0x44, 0xca, 0x8b, 0xd1, 0x48, 0xe9, 0x37, 0xd6, 0x0c, 0x36, 0x24, 0x21, 0x4a, - 0xe2, 0x90, 0x58, 0x7c, 0xbc, 0x18, 0x8d, 0x8f, 0x68, 0xc7, 0x23, 0xe3, 0xc5, 0x68, 0x64, 0xc4, - 0x46, 0x1e, 0x09, 0x2f, 0x44, 0x22, 0x21, 0x92, 0xb2, 0x10, 0x78, 0x31, 0x1a, 0x02, 0x99, 0x9d, - 0x30, 0x52, 0x31, 0xfe, 0xf9, 0x8d, 0x35, 0x83, 0x18, 0x91, 0xe0, 0x27, 0x3b, 0x88, 0xe0, 0x6e, - 0x60, 0x18, 0xa8, 0xd1, 0x85, 0xf3, 0x12, 0xd4, 0xbc, 0xf4, 0x13, 0x16, 0x5c, 0x51, 0x2f, 0x41, - 0x33, 0x20, 0xb5, 0xc7, 0xcf, 0xea, 0x1a, 0x7a, 0xb2, 0x90, 0x38, 0x51, 0x02, 0xe5, 0x46, 0x0b, - 0x3d, 0x1a, 0x9d, 0xdd, 0x1e, 0x3b, 0x70, 0x94, 0x60, 0xa6, 0xd1, 0x7a, 0xd8, 0x1e, 0x75, 0x29, - 0x74, 0xbb, 0xdd, 0xf5, 0x6f, 0x3d, 0xa8, 0x0a, 0xb2, 0x0d, 0xde, 0xb2, 0xdd, 0xee, 0x92, 0x73, - 0x9e, 0xc4, 0x3a, 0xd8, 0xaa, 0x70, 0x91, 0x2d, 0x9c, 0xa7, 0x4b, 0xc7, 0xc8, 0xd0, 0x37, 0xce, - 0x71, 0xdf, 0xb8, 0x92, 0x82, 0xc4, 0x81, 0xdd, 0x73, 0xec, 0x95, 0x0c, 0xa4, 0x5c, 0x67, 0x34, - 0x68, 0xbb, 0x4e, 0xf1, 0x87, 0x0a, 0xc0, 0x3d, 0x67, 0x30, 0x38, 0xb0, 0x7b, 0xef, 0x1d, 0x58, - 0xe4, 0x32, 0x64, 0x07, 0xed, 0x27, 0x56, 0x6b, 0x60, 0xb5, 0x76, 0x47, 0xde, 0xdb, 0x90, 0xa1, - 0x55, 0x1b, 0xd6, 0xbd, 0xd1, 0x11, 0x29, 0x78, 0x09, 0x3c, 0x2a, 0x08, 0x85, 0xc9, 0x13, 0xfa, - 0x79, 0x9e, 0x8e, 0x26, 0xf9, 0x4e, 0x7a, 0x09, 0x29, 0x3b, 0xe4, 0xa4, 0xf8, 0x1e, 0xb2, 0x63, - 0xce, 0x79, 0x48, 0xba, 0xd6, 0x60, 0xd8, 0xda, 0x45, 0xc1, 0x50, 0x51, 0x24, 0x68, 0xf9, 0x1e, - 0xb9, 0x09, 0xb1, 0x5d, 0xa7, 0x8f, 0x52, 0x39, 0x76, 0x77, 0x28, 0x92, 0xbc, 0x04, 0xb1, 0xc1, - 0x98, 0xc9, 0x27, 0x5b, 0x39, 0x1b, 0xca, 0x20, 0x58, 0xc8, 0xa2, 0xc0, 0xc1, 0xb8, 0xeb, 0xcf, - 0xbd, 0xf8, 0xa9, 0x0a, 0x69, 0xba, 0x5f, 0x6f, 0x6f, 0x37, 0x6e, 0xe3, 0xb1, 0x61, 0xb7, 0xdd, - 0xc7, 0x1b, 0x02, 0xfa, 0x9a, 0xf2, 0x12, 0xad, 0xff, 0x8a, 0xb5, 0xeb, 0x3a, 0x23, 0x74, 0xcd, - 0x19, 0x93, 0x97, 0xe8, 0x92, 0xb3, 0xac, 0x38, 0xc6, 0x67, 0xc9, 0x8a, 0x98, 0xd1, 0xb7, 0x87, - 0x2d, 0xea, 0x03, 0x98, 0xbf, 0x0c, 0x9d, 0xae, 0xbd, 0xee, 0xe8, 0xd1, 0xed, 0x81, 0x75, 0xc4, - 0xfc, 0x64, 0x72, 0x80, 0x05, 0xf2, 0xb3, 0xec, 0xc8, 0xc7, 0x76, 0x92, 0x7d, 0x5f, 0x55, 0x7c, - 0x96, 0xf1, 0x3b, 0x14, 0x14, 0x9c, 0xfb, 0xb0, 0xb8, 0x70, 0x07, 0xb2, 0x02, 0xef, 0x71, 0xae, - 0x28, 0x16, 0xf1, 0x63, 0x21, 0xd6, 0xe3, 0x6e, 0x75, 0x44, 0x3f, 0x46, 0x57, 0xd4, 0xa1, 0x1a, - 0xbe, 0x96, 0x87, 0x58, 0xa3, 0xd9, 0xa4, 0x79, 0x56, 0xa3, 0xd9, 0x5c, 0xd2, 0x94, 0xfa, 0x12, - 0xa4, 0xbb, 0x23, 0xcb, 0xa2, 0xae, 0xf7, 0x59, 0xe7, 0xbc, 0x2f, 0xe3, 0xb2, 0xfa, 0xb0, 0xfa, - 0x5b, 0x90, 0xda, 0x65, 0x27, 0x3d, 0xf2, 0xcc, 0x5b, 0x8d, 0xc2, 0x1f, 0xb3, 0xdb, 0xb5, 0xe7, - 0x45, 0x40, 0xf4, 0x7c, 0x68, 0x7a, 0x3c, 0xf5, 0x6d, 0xc8, 0x8c, 0x5a, 0xc7, 0x93, 0x7e, 0xc0, - 0x62, 0xb9, 0x9c, 0x34, 0x3d, 0xe2, 0x55, 0xf5, 0x35, 0x98, 0xb3, 0x1d, 0xef, 0x47, 0xbe, 0x56, - 0x87, 0x7b, 0xb2, 0x69, 0x49, 0xb4, 0xd7, 0x81, 0xc5, 0x3e, 0x15, 0xb0, 0x1d, 0xde, 0xc0, 0xbc, - 0x5f, 0x7d, 0x15, 0x34, 0x81, 0x68, 0x8f, 0xb9, 0x4b, 0x19, 0xcf, 0x1e, 0xfb, 0x3a, 0xc1, 0xe7, - 0x41, 0x0f, 0x1b, 0xa1, 0xe1, 0x3e, 0x50, 0x46, 0xd3, 0x65, 0x1f, 0x7b, 0xf8, 0x34, 0x18, 0x56, - 0x26, 0x69, 0x68, 0x44, 0x90, 0xd1, 0xec, 0xb3, 0x2f, 0x41, 0x44, 0x9a, 0x9a, 0x11, 0x59, 0x9d, - 0x83, 0x13, 0x0c, 0xa7, 0xc7, 0x3e, 0xe5, 0xf0, 0x79, 0x58, 0xc0, 0x99, 0x42, 0x74, 0xdc, 0x80, - 0xbe, 0xcc, 0xbe, 0xf3, 0x08, 0x11, 0x4d, 0x8c, 0x68, 0x7c, 0x82, 0x11, 0x3d, 0x61, 0x9f, 0x55, - 0xf8, 0x44, 0x5b, 0xd3, 0x46, 0x34, 0x3e, 0xc1, 0x88, 0xfa, 0xec, 0x93, 0x8b, 0x10, 0x51, 0xcd, - 0xa8, 0xaf, 0x03, 0x11, 0x37, 0x9e, 0x47, 0x67, 0x29, 0xd3, 0x80, 0x7d, 0x4a, 0x13, 0x6c, 0x3d, - 0x33, 0x9a, 0x46, 0x75, 0xdc, 0xa0, 0x6c, 0xf6, 0x9d, 0x4d, 0x98, 0xaa, 0x66, 0xd4, 0x1f, 0xc0, - 0x59, 0x71, 0x7a, 0x27, 0x1a, 0x96, 0xc3, 0x3e, 0x12, 0x09, 0x26, 0xc8, 0xad, 0xa6, 0x92, 0x1d, - 0x37, 0xb0, 0x21, 0xfb, 0x80, 0x24, 0x42, 0x56, 0x33, 0xea, 0xf7, 0x20, 0x2f, 0x90, 0xed, 0xe0, - 0xbd, 0x82, 0x8c, 0xe8, 0x3d, 0xf6, 0xd9, 0x93, 0x4f, 0x44, 0x33, 0xaa, 0xe8, 0xee, 0xb1, 0x1c, - 0x43, 0x4a, 0x33, 0x62, 0x5f, 0xed, 0x04, 0xe3, 0x41, 0x9b, 0xc8, 0x8b, 0xb2, 0xc3, 0x12, 0x12, - 0x19, 0xcf, 0x98, 0x7d, 0xd1, 0x13, 0x0c, 0x87, 0x9a, 0xd4, 0x07, 0xa1, 0x49, 0x59, 0x34, 0xcd, - 0x90, 0xb2, 0xb8, 0x18, 0x11, 0x4b, 0x12, 0x48, 0x59, 0xbc, 0xbe, 0x12, 0xa6, 0x4f, 0x8b, 0xf5, - 0x07, 0x30, 0x7b, 0x1a, 0x97, 0xf5, 0x81, 0xc2, 0xee, 0x32, 0xaa, 0xe5, 0x25, 0x63, 0x69, 0xd9, - 0x9c, 0xe9, 0x84, 0x3c, 0xd7, 0x1a, 0xcc, 0x9c, 0xc2, 0x6d, 0x7d, 0xa8, 0xb0, 0x1b, 0x01, 0xca, - 0x65, 0xe6, 0x3a, 0x61, 0xdf, 0x35, 0x73, 0x0a, 0xc7, 0xf5, 0x91, 0xc2, 0xae, 0x90, 0x8c, 0x8a, - 0x4f, 0xe3, 0xf9, 0xae, 0x99, 0x53, 0x38, 0xae, 0x8f, 0xd9, 0x89, 0x5f, 0x35, 0xaa, 0x22, 0x0d, - 0x7a, 0x8a, 0xd9, 0xd3, 0x38, 0xae, 0x4f, 0x14, 0xbc, 0x52, 0x52, 0x0d, 0xc3, 0x5f, 0x1f, 0xdf, - 0x77, 0xcd, 0x9e, 0xc6, 0x71, 0x7d, 0x4d, 0xc1, 0xab, 0x27, 0xd5, 0x58, 0x0e, 0x11, 0x85, 0x47, - 0x74, 0x12, 0xc7, 0xf5, 0xa9, 0x82, 0xf7, 0x41, 0xaa, 0x51, 0xf3, 0x89, 0xb6, 0x26, 0x46, 0x74, - 0x12, 0xc7, 0xf5, 0x75, 0x3c, 0x5f, 0xd5, 0x55, 0xe3, 0x56, 0x88, 0x08, 0x7d, 0x57, 0xfe, 0x54, - 0x8e, 0xeb, 0x1b, 0x0a, 0x5e, 0xdd, 0xa9, 0xc6, 0x6d, 0xd3, 0x1b, 0x41, 0xe0, 0xbb, 0xf2, 0xa7, - 0x72, 0x5c, 0xdf, 0x54, 0xf0, 0x8e, 0x4f, 0x35, 0xee, 0x84, 0xa9, 0xd0, 0x77, 0x69, 0xa7, 0x73, - 0x5c, 0x9f, 0x29, 0xf8, 0x45, 0x8f, 0xba, 0xbc, 0x68, 0x7a, 0x83, 0x10, 0x7c, 0x97, 0x76, 0x3a, - 0xc7, 0xf5, 0x2d, 0x05, 0x3f, 0xf3, 0x51, 0x97, 0x97, 0x22, 0x64, 0x35, 0xa3, 0xbe, 0x0a, 0xb9, - 0x93, 0x3b, 0xae, 0x6f, 0x8b, 0x37, 0xa8, 0xd9, 0x8e, 0xe0, 0xbd, 0x1e, 0x0b, 0xfb, 0x77, 0x02, - 0xd7, 0xf5, 0x1d, 0x4c, 0xfe, 0xea, 0xcf, 0xbd, 0xc9, 0xee, 0x19, 0x99, 0xc9, 0x8d, 0x8e, 0xb5, - 0xf7, 0xda, 0x9e, 0xe3, 0x04, 0x5b, 0xca, 0x1c, 0x5a, 0x33, 0x78, 0x7b, 0x4e, 0xe0, 0xcd, 0xbe, - 0xab, 0xe0, 0xb5, 0x64, 0x8e, 0x53, 0xa3, 0x85, 0xff, 0x1e, 0x31, 0xd7, 0x66, 0x07, 0x73, 0x3e, - 0xde, 0xaf, 0x7d, 0x4f, 0x39, 0x9d, 0x63, 0xab, 0xc7, 0x9a, 0x9b, 0xab, 0xfe, 0xe2, 0x60, 0xcd, - 0x1b, 0x10, 0x3f, 0xac, 0x2c, 0x2e, 0x85, 0x53, 0x3c, 0xf1, 0x56, 0x9e, 0xb9, 0xb3, 0x6c, 0x65, - 0x2e, 0xf4, 0xf3, 0xc5, 0x60, 0xe8, 0x1e, 0x99, 0x68, 0xc9, 0x19, 0x2a, 0x12, 0x86, 0x0f, 0xa5, - 0x0c, 0x15, 0xce, 0x50, 0x95, 0x30, 0x7c, 0x24, 0x65, 0xa8, 0x72, 0x06, 0x43, 0xc2, 0xf0, 0xb1, - 0x94, 0xc1, 0xe0, 0x0c, 0xcb, 0x12, 0x86, 0x4f, 0xa4, 0x0c, 0xcb, 0x9c, 0xa1, 0x26, 0x61, 0xf8, - 0x9a, 0x94, 0xa1, 0xc6, 0x19, 0x6e, 0x49, 0x18, 0x3e, 0x95, 0x32, 0xdc, 0xe2, 0x0c, 0xb7, 0x25, - 0x0c, 0x5f, 0x97, 0x32, 0xdc, 0xe6, 0x0c, 0x77, 0x24, 0x0c, 0xdf, 0x90, 0x32, 0xdc, 0x61, 0x0c, - 0x4b, 0x8b, 0x12, 0x86, 0x6f, 0xca, 0x18, 0x96, 0x16, 0x39, 0x83, 0x4c, 0x93, 0x9f, 0x49, 0x19, - 0xb8, 0x26, 0x97, 0x64, 0x9a, 0xfc, 0x96, 0x94, 0x81, 0x6b, 0x72, 0x49, 0xa6, 0xc9, 0x6f, 0x4b, - 0x19, 0xb8, 0x26, 0x97, 0x64, 0x9a, 0xfc, 0x8e, 0x94, 0x81, 0x6b, 0x72, 0x49, 0xa6, 0xc9, 0xef, - 0x4a, 0x19, 0xb8, 0x26, 0x97, 0x64, 0x9a, 0xfc, 0x9e, 0x94, 0x81, 0x6b, 0x72, 0x49, 0xa6, 0xc9, - 0x3f, 0x91, 0x32, 0x70, 0x4d, 0x2e, 0xc9, 0x34, 0xf9, 0xa7, 0x52, 0x06, 0xae, 0xc9, 0x25, 0x99, - 0x26, 0xff, 0x4c, 0xca, 0xc0, 0x35, 0x59, 0x91, 0x69, 0xf2, 0xfb, 0x32, 0x86, 0x0a, 0xd7, 0x64, - 0x45, 0xa6, 0xc9, 0x3f, 0x97, 0x32, 0x70, 0x4d, 0x56, 0x64, 0x9a, 0xfc, 0x0b, 0x29, 0x03, 0xd7, - 0x64, 0x45, 0xa6, 0xc9, 0x1f, 0x48, 0x19, 0xb8, 0x26, 0x2b, 0x32, 0x4d, 0xfe, 0xa5, 0x94, 0x81, - 0x6b, 0xb2, 0x22, 0xd3, 0xe4, 0x5f, 0x49, 0x19, 0xb8, 0x26, 0x2b, 0x32, 0x4d, 0xfe, 0xb5, 0x94, - 0x81, 0x6b, 0xb2, 0x22, 0xd3, 0xe4, 0xdf, 0x48, 0x19, 0xb8, 0x26, 0x2b, 0x32, 0x4d, 0xfe, 0xad, - 0x94, 0x81, 0x6b, 0xb2, 0x22, 0xd3, 0xe4, 0xdf, 0x49, 0x19, 0xb8, 0x26, 0xab, 0x32, 0x4d, 0xfe, - 0xbd, 0x8c, 0xa1, 0xca, 0x35, 0x59, 0x95, 0x69, 0xf2, 0x1f, 0xa4, 0x0c, 0x5c, 0x93, 0x55, 0x99, - 0x26, 0xff, 0x51, 0xca, 0xc0, 0x35, 0x59, 0x95, 0x69, 0xf2, 0x9f, 0xa4, 0x0c, 0x5c, 0x93, 0x55, - 0x99, 0x26, 0xff, 0x59, 0xca, 0xc0, 0x35, 0x59, 0x95, 0x69, 0xf2, 0x5f, 0xa4, 0x0c, 0x5c, 0x93, - 0x55, 0x99, 0x26, 0xff, 0x55, 0xca, 0xc0, 0x35, 0x59, 0x95, 0x69, 0xf2, 0xdf, 0xa4, 0x0c, 0x5c, - 0x93, 0x55, 0x99, 0x26, 0x7f, 0x28, 0x65, 0xe0, 0x9a, 0xac, 0xca, 0x34, 0xf9, 0xef, 0x52, 0x06, - 0xae, 0x49, 0x43, 0xa6, 0xc9, 0xff, 0x90, 0x31, 0x18, 0x5c, 0x93, 0x86, 0x4c, 0x93, 0xff, 0x29, - 0x65, 0xe0, 0x9a, 0x34, 0x64, 0x9a, 0xfc, 0x2f, 0x29, 0x03, 0xd7, 0xa4, 0x21, 0xd3, 0xe4, 0x7f, - 0x4b, 0x19, 0xb8, 0x26, 0x0d, 0x99, 0x26, 0xff, 0x47, 0xca, 0xc0, 0x35, 0x69, 0xc8, 0x34, 0xf9, - 0xbf, 0x52, 0x06, 0xae, 0x49, 0x43, 0xa6, 0xc9, 0x1f, 0x49, 0x19, 0xb8, 0x26, 0x0d, 0x99, 0x26, - 0x7f, 0x2c, 0x65, 0xe0, 0x9a, 0x34, 0x64, 0x9a, 0xfc, 0x89, 0x94, 0x81, 0x6b, 0xd2, 0x90, 0x69, - 0xf2, 0xa7, 0x52, 0x06, 0xae, 0xc9, 0x65, 0x99, 0x26, 0xff, 0x4f, 0xc6, 0xb0, 0xbc, 0xb8, 0x52, - 0x7e, 0x7c, 0xa3, 0xdb, 0x73, 0xf7, 0x0f, 0x76, 0xca, 0xbb, 0xce, 0xe0, 0xe6, 0xae, 0x33, 0x1e, - 0x38, 0xe3, 0x9b, 0x5d, 0xa7, 0xeb, 0xb0, 0xff, 0x63, 0x0f, 0xfe, 0x9b, 0x9d, 0xd9, 0xfe, 0x7f, - 0x00, 0x00, 0x00, 0xff, 0xff, 0xa6, 0xa0, 0xe2, 0xf3, 0xe5, 0x3e, 0x00, 0x00, + // 4315 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x5b, 0x4b, 0x73, 0x1b, 0x57, + 0x76, 0x56, 0x37, 0xde, 0x07, 0x20, 0xd1, 0xbc, 0xa2, 0x25, 0x88, 0xb2, 0xa4, 0x16, 0xc6, 0x1e, + 0xc3, 0x92, 0x0c, 0x49, 0x60, 0x0b, 0x92, 0xe0, 0xd8, 0x19, 0x51, 0x02, 0x68, 0x96, 0x44, 0x40, + 0x6e, 0xd2, 0x76, 0x46, 0x59, 0xa0, 0x40, 0xa2, 0x01, 0x62, 0x04, 0x74, 0xc3, 0x40, 0x63, 0x44, + 0x26, 0x95, 0x2a, 0x2f, 0x53, 0x95, 0x55, 0x26, 0x49, 0x55, 0xf6, 0xd9, 0x64, 0x93, 0xd7, 0x22, + 0xf9, 0x0d, 0xf1, 0x3c, 0x32, 0x49, 0x26, 0xaf, 0x45, 0xaa, 0xf2, 0x0f, 0xb2, 0xcc, 0x63, 0xe5, + 0xa9, 0x73, 0xee, 0xed, 0xee, 0xdb, 0x0d, 0x08, 0x24, 0x57, 0xec, 0x7b, 0xef, 0xf7, 0x9d, 0xfb, + 0xfa, 0xfa, 0x9c, 0x73, 0x2f, 0x9a, 0xf0, 0x8e, 0x6b, 0x4d, 0xdd, 0xf6, 0x78, 0xe2, 0xb8, 0xce, + 0x5d, 0x7c, 0x2c, 0xd3, 0x23, 0x83, 0xa0, 0xba, 0x78, 0x1b, 0x92, 0xdb, 0x4e, 0xdd, 0x9e, 0x8d, + 0xd8, 0x4d, 0x88, 0xf5, 0x1c, 0xa7, 0xa0, 0xe8, 0x6a, 0x69, 0xb5, 0x92, 0x2f, 0x07, 0x98, 0x72, + 0xa3, 0xd5, 0x32, 0xb1, 0xad, 0xf8, 0x10, 0xb2, 0xdb, 0xce, 0xbe, 0x35, 0x75, 0x1b, 0x03, 0x6b, + 0xd8, 0x65, 0xeb, 0x90, 0x78, 0xd1, 0x39, 0xb0, 0x86, 0xc4, 0xc9, 0x98, 0xbc, 0xc0, 0x18, 0xc4, + 0xf7, 0x4f, 0xc6, 0x56, 0x41, 0xa5, 0x4a, 0x7a, 0x2e, 0xfe, 0x6d, 0x11, 0xbb, 0x41, 0x26, 0xbb, + 0x0d, 0xf1, 0xe7, 0x03, 0xbb, 0x2b, 0xfa, 0xb9, 0x2c, 0xf7, 0xc3, 0x11, 0xe5, 0xe7, 0x3b, 0xcd, + 0x67, 0x26, 0x81, 0xb0, 0x87, 0xfd, 0xce, 0xc1, 0x10, 0x8d, 0x29, 0xd8, 0x03, 0x15, 0xb0, 0xf6, + 0x65, 0x67, 0xd2, 0x19, 0x15, 0x62, 0xba, 0x52, 0x4a, 0x98, 0xbc, 0xc0, 0x3e, 0x81, 0x15, 0xd3, + 0xfa, 0x7a, 0x36, 0x98, 0x58, 0x5d, 0x1a, 0x5e, 0x21, 0xae, 0xab, 0xa5, 0xec, 0xa2, 0x1e, 0xa8, + 0xd9, 0x0c, 0xa3, 0x39, 0x7d, 0x6c, 0x75, 0x5c, 0x8f, 0x9e, 0xd0, 0x63, 0xa7, 0xd0, 0x25, 0x34, + 0xd2, 0x5b, 0x63, 0x77, 0xe0, 0xd8, 0x9d, 0x21, 0xa7, 0x27, 0x75, 0x65, 0x29, 0x3d, 0x84, 0x66, + 0xdf, 0x87, 0x7c, 0xa3, 0xbd, 0xe5, 0x38, 0xc3, 0xf6, 0x44, 0x8c, 0xaa, 0x00, 0xba, 0x5a, 0x4a, + 0x9b, 0x2b, 0x0d, 0xac, 0xf5, 0x86, 0xca, 0x4a, 0xa0, 0x35, 0xda, 0x3b, 0xb6, 0xbb, 0x59, 0x09, + 0x80, 0x59, 0x5d, 0x2d, 0x25, 0xcc, 0xd5, 0x06, 0x55, 0xcf, 0x21, 0xab, 0x46, 0x80, 0xcc, 0xe9, + 0x6a, 0x29, 0xc6, 0x91, 0x55, 0xc3, 0x47, 0xde, 0x01, 0xd6, 0x68, 0x37, 0x06, 0xc7, 0x56, 0x57, + 0xb6, 0xba, 0xa2, 0xab, 0xa5, 0x94, 0xa9, 0x35, 0x44, 0xc3, 0x02, 0xb4, 0x6c, 0x79, 0x55, 0x57, + 0x4b, 0x49, 0x0f, 0x2d, 0xd9, 0xbe, 0x05, 0x6b, 0x8d, 0xf6, 0x17, 0x83, 0xf0, 0x80, 0xf3, 0xba, + 0x5a, 0x5a, 0x31, 0xf3, 0x0d, 0x5e, 0x3f, 0x8f, 0x95, 0x0d, 0x6b, 0xba, 0x5a, 0x8a, 0x0b, 0xac, + 0x64, 0x97, 0x66, 0xd7, 0x18, 0x3a, 0x1d, 0x37, 0x80, 0xae, 0xe9, 0x6a, 0x49, 0x35, 0x57, 0x1b, + 0x54, 0x1d, 0xb6, 0xfa, 0xcc, 0x99, 0x1d, 0x0c, 0xad, 0x00, 0xca, 0x74, 0xb5, 0xa4, 0x98, 0xf9, + 0x06, 0xaf, 0x0f, 0x63, 0xf7, 0xdc, 0xc9, 0xc0, 0xee, 0x07, 0xd8, 0x8b, 0xa4, 0xe3, 0x7c, 0x83, + 0xd7, 0x87, 0x47, 0xb0, 0x75, 0xe2, 0x5a, 0xd3, 0x00, 0x6a, 0xe9, 0x6a, 0x29, 0x67, 0xae, 0x36, + 0xa8, 0x3a, 0x62, 0x35, 0xb2, 0x06, 0x3d, 0x5d, 0x2d, 0xad, 0xa1, 0xd5, 0x05, 0x6b, 0xb0, 0x17, + 0x59, 0x83, 0xbe, 0xae, 0x96, 0x98, 0xc0, 0x4a, 0x6b, 0x50, 0x86, 0x8b, 0x8d, 0xf6, 0x5e, 0x2f, + 0xba, 0x71, 0x47, 0xba, 0x5a, 0xca, 0x9b, 0x6b, 0x0d, 0xaf, 0x65, 0x11, 0x5e, 0xb6, 0x3e, 0xd0, + 0xd5, 0x92, 0xe6, 0xe3, 0x25, 0xfb, 0xb2, 0x26, 0xb9, 0xd4, 0x0b, 0xeb, 0x7a, 0x4c, 0xd2, 0x24, + 0xaf, 0x0c, 0x6b, 0x52, 0x00, 0xdf, 0xd1, 0x63, 0xb2, 0x26, 0x23, 0x48, 0xea, 0x5e, 0x20, 0x2f, + 0xe9, 0x31, 0x59, 0x93, 0x02, 0x19, 0xd1, 0xa4, 0xc0, 0x5e, 0xd6, 0x63, 0x61, 0x4d, 0xce, 0xa1, + 0x65, 0xcb, 0x05, 0x3d, 0x16, 0xd6, 0xa4, 0x40, 0x87, 0x35, 0x29, 0xc0, 0x57, 0xf4, 0x58, 0x48, + 0x93, 0x51, 0xac, 0x6c, 0x78, 0x43, 0x8f, 0x85, 0x34, 0x29, 0xcf, 0xce, 0xd3, 0xa4, 0x80, 0x5e, + 0xd5, 0x63, 0xb2, 0x26, 0x65, 0xab, 0xbe, 0x26, 0x05, 0xf4, 0x5d, 0x3d, 0x16, 0xd2, 0xa4, 0x8c, + 0xf5, 0x35, 0x29, 0xb0, 0xd7, 0xf4, 0x58, 0x48, 0x93, 0x02, 0xfb, 0xa1, 0xac, 0x49, 0x01, 0xfd, + 0x56, 0xd1, 0x63, 0xb2, 0x28, 0x05, 0xf4, 0x76, 0x48, 0x94, 0x02, 0xfb, 0x53, 0xc4, 0xca, 0xaa, + 0x8c, 0x82, 0xe5, 0x55, 0xf8, 0x19, 0x82, 0x65, 0x59, 0x0a, 0xf0, 0xdd, 0x88, 0x2c, 0x05, 0xfc, + 0xe7, 0x08, 0x0f, 0xeb, 0x72, 0x9e, 0x20, 0xdb, 0xff, 0x05, 0x12, 0xc2, 0xc2, 0x14, 0x84, 0x40, + 0x98, 0x8e, 0x70, 0xa2, 0x85, 0xeb, 0xba, 0xe2, 0x0b, 0xd3, 0xf3, 0xac, 0xb2, 0x30, 0x7d, 0xe0, + 0x0d, 0x0a, 0x19, 0x42, 0x98, 0x73, 0xc8, 0xaa, 0x11, 0x20, 0x75, 0x5d, 0x09, 0x84, 0xe9, 0x23, + 0x43, 0xc2, 0xf4, 0xb1, 0x37, 0x75, 0x45, 0x16, 0xe6, 0x02, 0xb4, 0x6c, 0xb9, 0xa8, 0x2b, 0xb2, + 0x30, 0x7d, 0xb4, 0x2c, 0x4c, 0x1f, 0xfc, 0x3d, 0x5d, 0x91, 0x84, 0x39, 0x8f, 0x95, 0x0d, 0xbf, + 0xa7, 0x2b, 0x92, 0x30, 0xc3, 0xb3, 0xe3, 0xc2, 0xf4, 0xa1, 0xef, 0xeb, 0x4a, 0x20, 0xcc, 0xb0, + 0x55, 0x21, 0x4c, 0x1f, 0xfa, 0x7d, 0x5d, 0x91, 0x84, 0x19, 0xc6, 0x0a, 0x61, 0xfa, 0xd8, 0x0f, + 0x28, 0x4e, 0x7b, 0xc2, 0xf4, 0xb1, 0x92, 0x30, 0x7d, 0xe8, 0x5f, 0x60, 0x4c, 0xf7, 0x85, 0xe9, + 0x43, 0x65, 0x61, 0xfa, 0xd8, 0xbf, 0x44, 0x6c, 0x20, 0xcc, 0x79, 0xb0, 0xbc, 0x0a, 0x7f, 0x85, + 0xe0, 0x40, 0x98, 0x3e, 0x38, 0x2c, 0x4c, 0x1f, 0xfe, 0xd7, 0x08, 0x97, 0x85, 0xb9, 0x88, 0x20, + 0xdb, 0xff, 0x1b, 0x24, 0xc8, 0xc2, 0xf4, 0x09, 0x65, 0x9a, 0x26, 0x0a, 0xb3, 0x6b, 0xf5, 0x3a, + 0xb3, 0x21, 0xca, 0xb8, 0x84, 0xca, 0xac, 0xc5, 0xdd, 0xc9, 0xcc, 0xc2, 0xb9, 0x3a, 0xce, 0xf0, + 0x99, 0xd7, 0xc6, 0xca, 0x38, 0x7c, 0x2e, 0xd0, 0x80, 0xf0, 0x21, 0x2a, 0xb4, 0xa6, 0x6e, 0x56, + 0xcc, 0x3c, 0x57, 0xe9, 0x3c, 0xbe, 0x6a, 0x48, 0xf8, 0x5b, 0xa8, 0xd3, 0x9a, 0x5a, 0x35, 0x38, + 0xbe, 0x6a, 0x04, 0xf8, 0x4d, 0x9c, 0x80, 0x27, 0xd6, 0x80, 0x71, 0x1b, 0xd5, 0x5a, 0x8b, 0x6d, + 0x56, 0xee, 0x99, 0x6b, 0x9e, 0x64, 0x17, 0x91, 0x42, 0xdd, 0xdc, 0x41, 0xd1, 0xd6, 0x62, 0x55, + 0xc3, 0x27, 0xc9, 0x3d, 0x55, 0x50, 0xe8, 0x42, 0xba, 0x01, 0xe7, 0x23, 0xd4, 0x6e, 0x2d, 0xbe, + 0x59, 0xb9, 0x77, 0xcf, 0xd4, 0x84, 0x82, 0x17, 0x70, 0x42, 0xfd, 0x94, 0x51, 0xc3, 0xb5, 0x78, + 0xd5, 0xf0, 0x39, 0xe1, 0x7e, 0xd6, 0x3c, 0x29, 0x07, 0x94, 0xbb, 0xa8, 0xe5, 0x5a, 0x72, 0xf3, + 0xbe, 0x71, 0xff, 0xc1, 0x63, 0x33, 0xcf, 0x35, 0x1d, 0x70, 0x0c, 0xec, 0x47, 0x88, 0x3a, 0x20, + 0xdd, 0x43, 0x55, 0xd7, 0x92, 0x95, 0x87, 0xf7, 0x1f, 0x55, 0x1e, 0x99, 0x9a, 0x50, 0x77, 0xc0, + 0xfa, 0x14, 0x59, 0x42, 0xde, 0x01, 0xeb, 0x3e, 0xea, 0xbb, 0xa6, 0x1d, 0x59, 0xc3, 0xa1, 0x73, + 0x47, 0x2f, 0xbe, 0x71, 0x26, 0xc3, 0xee, 0xcd, 0x22, 0x98, 0x9a, 0x50, 0xbc, 0xdc, 0xeb, 0x9a, + 0x27, 0xf9, 0x80, 0xfe, 0x87, 0x98, 0xb1, 0xe6, 0x6a, 0xa9, 0xad, 0x41, 0xdf, 0x76, 0xa6, 0x96, + 0x99, 0xe7, 0xe2, 0x8f, 0xac, 0xc9, 0x5e, 0x74, 0x1d, 0x7f, 0x82, 0xb4, 0xb5, 0x5a, 0xec, 0xa3, + 0xcd, 0x0a, 0xf6, 0xb4, 0x68, 0x1d, 0xf7, 0xa2, 0xeb, 0xf8, 0x47, 0xc8, 0x61, 0xb5, 0xd8, 0x47, + 0x55, 0x43, 0x70, 0xe4, 0x75, 0xac, 0xc2, 0xba, 0xf4, 0x2e, 0x04, 0xac, 0x3f, 0x46, 0x56, 0x9e, + 0xf7, 0xc4, 0xfc, 0x37, 0x62, 0x21, 0x2f, 0xd4, 0xdb, 0x9f, 0x20, 0x4f, 0xe3, 0xbd, 0x31, 0xff, + 0xc5, 0x08, 0x78, 0x0f, 0xe1, 0x52, 0x24, 0x97, 0x68, 0x8f, 0x3b, 0x87, 0xaf, 0xad, 0x6e, 0xa1, + 0x82, 0x29, 0xc5, 0x96, 0xaa, 0x29, 0xe6, 0xc5, 0x50, 0x5a, 0xf1, 0x92, 0x9a, 0xd9, 0x63, 0xb8, + 0x1c, 0x4d, 0x2e, 0x3c, 0xe6, 0x26, 0xe6, 0x18, 0xc4, 0x5c, 0x0f, 0xe7, 0x19, 0x11, 0xaa, 0x14, + 0x54, 0x3c, 0xaa, 0x81, 0x49, 0x47, 0x40, 0x0d, 0x62, 0x8b, 0xa0, 0x7e, 0x02, 0x57, 0xe6, 0xd3, + 0x0f, 0x8f, 0xfc, 0x00, 0xb3, 0x10, 0x22, 0x5f, 0x8a, 0x66, 0x22, 0x73, 0xf4, 0x05, 0x7d, 0x57, + 0x31, 0x2d, 0x91, 0xe9, 0x73, 0xbd, 0x7f, 0x0c, 0x85, 0xb9, 0x04, 0xc5, 0x63, 0x3f, 0xc4, 0x3c, + 0x85, 0xd8, 0xef, 0x44, 0x72, 0x95, 0x28, 0x79, 0x41, 0xd7, 0x8f, 0x30, 0x71, 0x91, 0xc8, 0x73, + 0x3d, 0xd3, 0x92, 0x85, 0x53, 0x18, 0x8f, 0xfb, 0x18, 0x33, 0x19, 0xb1, 0x64, 0xa1, 0x6c, 0x46, + 0xee, 0x37, 0x92, 0xd3, 0x78, 0xdc, 0x1a, 0xa6, 0x36, 0xa2, 0xdf, 0x70, 0x7a, 0x23, 0xc8, 0xbf, + 0x81, 0xe4, 0xbd, 0xc5, 0x33, 0xfe, 0x9f, 0x18, 0x26, 0x25, 0x82, 0xbd, 0xb7, 0x68, 0xca, 0x3e, + 0x7b, 0xc1, 0x94, 0xff, 0x17, 0xd9, 0x4c, 0x62, 0xcf, 0xcd, 0xf9, 0x07, 0xb0, 0xb1, 0x20, 0x5f, + 0xf1, 0xf8, 0xff, 0x87, 0xfc, 0x3c, 0xf1, 0x2f, 0xcf, 0xa5, 0x2e, 0xf3, 0x16, 0x16, 0x8c, 0xe0, + 0xff, 0xd1, 0x82, 0x16, 0xb2, 0x30, 0x37, 0x86, 0x06, 0xac, 0x78, 0xf9, 0x78, 0x7f, 0xe2, 0xcc, + 0xc6, 0x85, 0x86, 0xae, 0x96, 0xa0, 0xa2, 0x2f, 0x38, 0x1d, 0x7b, 0xe9, 0xf9, 0x36, 0xe2, 0xcc, + 0x30, 0x8d, 0xdb, 0xe1, 0x96, 0xb9, 0x9d, 0x97, 0x7a, 0xec, 0xad, 0x76, 0x38, 0xce, 0xb7, 0x23, + 0xd1, 0xd0, 0x8e, 0x17, 0xee, 0xb8, 0x9d, 0x57, 0xba, 0xf2, 0x16, 0x3b, 0x5e, 0xf0, 0x13, 0x76, + 0x42, 0xb4, 0x8d, 0x07, 0xc1, 0x99, 0x9c, 0xda, 0xd9, 0x7b, 0xd1, 0x43, 0xfa, 0x36, 0x9d, 0xae, + 0xc2, 0x95, 0x9c, 0x26, 0x0d, 0x6f, 0x9e, 0xf6, 0xf9, 0x5b, 0x68, 0xa1, 0xd1, 0xcc, 0xd3, 0x7e, + 0x7b, 0x01, 0xad, 0xf8, 0xa7, 0x0a, 0xc4, 0x9f, 0xef, 0x34, 0x9f, 0xb1, 0x34, 0xc4, 0xbf, 0x6c, + 0xed, 0x3c, 0xd3, 0x2e, 0xe0, 0xd3, 0x56, 0xab, 0xf5, 0x42, 0x53, 0x58, 0x06, 0x12, 0x5b, 0x3f, + 0xdc, 0xaf, 0xef, 0x69, 0x2a, 0xcb, 0x43, 0xb6, 0xb1, 0xd3, 0xdc, 0xae, 0x9b, 0x2f, 0xcd, 0x9d, + 0xe6, 0xbe, 0x16, 0xc3, 0xb6, 0xc6, 0x8b, 0xd6, 0x93, 0x7d, 0x2d, 0xce, 0x52, 0x10, 0xc3, 0xba, + 0x04, 0x03, 0x48, 0xee, 0xed, 0x9b, 0x3b, 0xcd, 0x6d, 0x2d, 0x89, 0x56, 0xf6, 0x77, 0x76, 0xeb, + 0x5a, 0x0a, 0x91, 0xfb, 0x5f, 0xbc, 0x7c, 0x51, 0xd7, 0xd2, 0xf8, 0xf8, 0xc4, 0x34, 0x9f, 0xfc, + 0x50, 0xcb, 0x20, 0x69, 0xf7, 0xc9, 0x4b, 0x0d, 0xa8, 0xf9, 0xc9, 0xd6, 0x8b, 0xba, 0x96, 0x65, + 0x39, 0x48, 0x37, 0xbe, 0x68, 0x3e, 0xdd, 0xdf, 0x69, 0x35, 0xb5, 0x5c, 0xf1, 0x77, 0xa1, 0xc0, + 0x97, 0x39, 0xb4, 0x8a, 0xfc, 0xca, 0xe0, 0x07, 0x90, 0xe0, 0x7b, 0xa3, 0x90, 0x56, 0x6e, 0xcd, + 0xef, 0xcd, 0x3c, 0xa9, 0xcc, 0x77, 0x89, 0x13, 0x37, 0xae, 0x41, 0x82, 0xaf, 0xd3, 0x3a, 0x24, + 0xf8, 0xfa, 0xa8, 0x74, 0x95, 0xc0, 0x0b, 0xc5, 0x3f, 0x53, 0x01, 0xb6, 0x9d, 0xbd, 0xd7, 0x83, + 0x31, 0x5d, 0xdc, 0x5c, 0x03, 0x98, 0xbe, 0x1e, 0x8c, 0xdb, 0xf4, 0x06, 0x8a, 0x4b, 0x87, 0x0c, + 0xd6, 0x90, 0xef, 0x65, 0x37, 0x21, 0x47, 0xcd, 0xe2, 0x15, 0xa1, 0xbb, 0x86, 0x94, 0x99, 0xc5, + 0x3a, 0xe1, 0x24, 0xc3, 0x90, 0xaa, 0x41, 0x57, 0x0c, 0x49, 0x09, 0x52, 0x35, 0xd8, 0x0d, 0xa0, + 0x62, 0x7b, 0x4a, 0xd1, 0x94, 0xae, 0x15, 0x32, 0x26, 0xf5, 0xcb, 0xe3, 0x2b, 0xfb, 0x14, 0xa8, + 0x4f, 0x3e, 0xf3, 0xfc, 0xa2, 0xb7, 0xc4, 0x1b, 0x70, 0x19, 0x1f, 0xf8, 0x7c, 0x03, 0xca, 0x46, + 0x0b, 0x32, 0x7e, 0x3d, 0xf6, 0x46, 0xb5, 0x62, 0x4e, 0x1a, 0xcd, 0x09, 0xa8, 0xca, 0x9f, 0x14, + 0x07, 0x88, 0xf1, 0xac, 0xd1, 0x78, 0x38, 0x89, 0x0f, 0xa8, 0x78, 0x0d, 0x56, 0x9a, 0x8e, 0xcd, + 0xdf, 0x63, 0x5a, 0xa7, 0x1c, 0x28, 0x9d, 0x82, 0x42, 0xe7, 0x5f, 0xa5, 0x53, 0xbc, 0x0e, 0x20, + 0xb5, 0x69, 0xa0, 0x1c, 0xf0, 0x36, 0xf2, 0x07, 0xca, 0x41, 0xf1, 0x36, 0x24, 0x77, 0x3b, 0xc7, + 0xfb, 0x9d, 0x3e, 0xbb, 0x09, 0x30, 0xec, 0x4c, 0xdd, 0x76, 0x8f, 0x76, 0xe2, 0xbb, 0xef, 0xbe, + 0xfb, 0x4e, 0xa1, 0x64, 0x3a, 0x83, 0xb5, 0x7c, 0x47, 0xa6, 0x00, 0xad, 0x61, 0x77, 0xd7, 0x9a, + 0x4e, 0x3b, 0x7d, 0x8b, 0x3d, 0x80, 0xa4, 0x6d, 0x4d, 0x31, 0xfa, 0x2a, 0x74, 0xd7, 0x74, 0x4d, + 0x5e, 0x87, 0x00, 0x57, 0x6e, 0x12, 0xc8, 0x14, 0x60, 0xa6, 0x41, 0xcc, 0x9e, 0x8d, 0xe8, 0x46, + 0x2d, 0x61, 0xe2, 0xe3, 0xc6, 0xbb, 0x90, 0xe4, 0x18, 0xc6, 0x20, 0x6e, 0x77, 0x46, 0x56, 0x81, + 0xf7, 0x4c, 0xcf, 0xc5, 0x9f, 0x28, 0x00, 0x4d, 0xeb, 0xcd, 0x99, 0x7a, 0x0d, 0x70, 0x4b, 0x7a, + 0x8d, 0xf1, 0x5e, 0x3f, 0x5e, 0xd6, 0x2b, 0xaa, 0xad, 0xe7, 0x38, 0xdd, 0x36, 0xdf, 0x68, 0x7e, + 0xfd, 0x97, 0xc1, 0x1a, 0xda, 0xb9, 0xe2, 0x2b, 0xc8, 0xed, 0xd8, 0xb6, 0x35, 0xf1, 0x46, 0xc5, + 0x20, 0x7e, 0xe4, 0x4c, 0x5d, 0x71, 0x13, 0x49, 0xcf, 0xac, 0x00, 0xf1, 0xb1, 0x33, 0x71, 0xf9, + 0x4c, 0x6b, 0x71, 0xe3, 0xde, 0xbd, 0x7b, 0x26, 0xd5, 0xb0, 0x77, 0x21, 0x73, 0xe8, 0xd8, 0xb6, + 0x75, 0x88, 0xd3, 0x88, 0xd1, 0xd1, 0x31, 0xa8, 0x28, 0xfe, 0xbe, 0x02, 0xb9, 0x96, 0x7b, 0x14, + 0x18, 0xd7, 0x20, 0xf6, 0xda, 0x3a, 0xa1, 0xe1, 0xc5, 0x4c, 0x7c, 0xc4, 0x17, 0xe6, 0xc7, 0x9d, + 0xe1, 0x8c, 0xdf, 0x4b, 0xe6, 0x4c, 0x5e, 0x60, 0x97, 0x20, 0xf9, 0xc6, 0x1a, 0xf4, 0x8f, 0x5c, + 0xb2, 0xa9, 0x9a, 0xa2, 0xc4, 0xca, 0x90, 0x18, 0xe0, 0x60, 0x0b, 0x71, 0x5a, 0xb1, 0x82, 0xbc, + 0x62, 0xf2, 0x2c, 0x4c, 0x0e, 0xbb, 0x95, 0x4e, 0x77, 0xb5, 0x6f, 0xbe, 0xf9, 0xe6, 0x1b, 0xb5, + 0x78, 0x04, 0xeb, 0xde, 0x4b, 0x1c, 0x9a, 0xee, 0x4b, 0x28, 0x0c, 0x2d, 0xa7, 0xdd, 0x1b, 0xd8, + 0x9d, 0xe1, 0xf0, 0xa4, 0xfd, 0xc6, 0xb1, 0xdb, 0x1d, 0xbb, 0xed, 0x4c, 0x0f, 0x3b, 0x13, 0x5a, + 0x82, 0x65, 0x9d, 0xac, 0x0f, 0x2d, 0xa7, 0xc1, 0x89, 0x5f, 0x39, 0xf6, 0x13, 0xbb, 0x85, 0xac, + 0xe2, 0xaf, 0xe2, 0x90, 0xd9, 0x3d, 0xf1, 0xec, 0xaf, 0x43, 0xe2, 0xd0, 0x99, 0xd9, 0x7c, 0x3d, + 0x13, 0x26, 0x2f, 0xf8, 0xfb, 0xa4, 0x4a, 0xfb, 0xb4, 0x0e, 0x89, 0xaf, 0x67, 0x8e, 0x6b, 0xd1, + 0x94, 0x33, 0x26, 0x2f, 0xe0, 0x8a, 0x8d, 0x2d, 0xb7, 0x10, 0xa7, 0x6b, 0x0a, 0x7c, 0x0c, 0xd6, + 0x20, 0x71, 0xa6, 0x35, 0x60, 0xf7, 0x20, 0xe9, 0xe0, 0x1e, 0x4c, 0x0b, 0x49, 0xba, 0x87, 0x0d, + 0x11, 0xe4, 0xdd, 0x31, 0x05, 0x8e, 0x3d, 0x87, 0xb5, 0x37, 0x56, 0x7b, 0x34, 0x9b, 0xba, 0xed, + 0xbe, 0xd3, 0xee, 0x5a, 0xd6, 0xd8, 0x9a, 0x14, 0x56, 0xa8, 0xb7, 0x90, 0x87, 0x58, 0xb4, 0xa0, + 0xe6, 0xea, 0x1b, 0x6b, 0x77, 0x36, 0x75, 0xb7, 0x9d, 0x67, 0xc4, 0x63, 0x0f, 0x20, 0x33, 0xb1, + 0xd0, 0x2f, 0xe0, 0x90, 0x73, 0xf3, 0x23, 0x08, 0x91, 0xd3, 0x13, 0x6b, 0x4c, 0x15, 0xec, 0x21, + 0xa4, 0x0f, 0x06, 0xaf, 0xad, 0xe9, 0x91, 0xd5, 0x2d, 0xa4, 0x74, 0xa5, 0xb4, 0x5a, 0xb9, 0x2a, + 0xb3, 0xfc, 0x05, 0x2e, 0x3f, 0x75, 0x86, 0xce, 0xc4, 0xf4, 0xc1, 0xec, 0x13, 0xc8, 0x4c, 0x9d, + 0x91, 0xc5, 0xd5, 0x9e, 0xa6, 0x60, 0x7b, 0x63, 0x31, 0x73, 0xcf, 0x19, 0x59, 0x9e, 0x57, 0xf3, + 0x18, 0xec, 0x2a, 0x1f, 0xee, 0x01, 0x1e, 0x26, 0x0a, 0x40, 0x17, 0x3e, 0x38, 0x28, 0x3a, 0x5c, + 0xb0, 0x0d, 0x1c, 0x54, 0xbf, 0x87, 0x39, 0x5b, 0x21, 0x4b, 0x67, 0x79, 0xbf, 0xbc, 0x71, 0x07, + 0x32, 0xbe, 0xc1, 0xc0, 0x1d, 0x72, 0x17, 0x94, 0x21, 0x0f, 0xc1, 0xdd, 0x21, 0xf7, 0x3f, 0xef, + 0x43, 0x82, 0x06, 0x8e, 0x91, 0xcb, 0xac, 0x63, 0xa0, 0xcc, 0x40, 0x62, 0xdb, 0xac, 0xd7, 0x9b, + 0x9a, 0x42, 0x31, 0xf3, 0xc5, 0x17, 0x75, 0x4d, 0x95, 0xf4, 0xfb, 0xe7, 0x2a, 0xc4, 0xea, 0xc7, + 0xa4, 0x9c, 0x6e, 0xc7, 0xed, 0x78, 0x6f, 0x38, 0x3e, 0xb3, 0x1a, 0x64, 0x46, 0x1d, 0xaf, 0x2f, + 0x95, 0x96, 0x38, 0xe4, 0x4b, 0xea, 0xc7, 0x6e, 0x79, 0xb7, 0xc3, 0x7b, 0xae, 0xdb, 0xee, 0xe4, + 0xc4, 0x4c, 0x8f, 0x44, 0x71, 0xe3, 0x63, 0x58, 0x09, 0x35, 0xc9, 0xaf, 0x68, 0x62, 0xc1, 0x2b, + 0x9a, 0x10, 0xaf, 0x68, 0x4d, 0x7d, 0xa4, 0x54, 0x6a, 0x10, 0x1f, 0x39, 0x13, 0x8b, 0xbd, 0xb3, + 0x70, 0x81, 0x0b, 0x7d, 0x92, 0x4c, 0x3e, 0x32, 0x14, 0x93, 0x38, 0x95, 0x0f, 0x21, 0xee, 0x5a, + 0xc7, 0xee, 0xdb, 0xb8, 0x47, 0x7c, 0x7e, 0x08, 0xa9, 0x7c, 0x04, 0x49, 0x7b, 0x36, 0x3a, 0xb0, + 0x26, 0x6f, 0x03, 0x0f, 0x68, 0x60, 0x02, 0x54, 0xfc, 0x12, 0xb4, 0xa7, 0xce, 0x68, 0x3c, 0xb4, + 0x8e, 0xeb, 0xc7, 0xae, 0x65, 0x4f, 0x07, 0x8e, 0x8d, 0x73, 0xe8, 0x0d, 0x26, 0xe4, 0xd6, 0x68, + 0x0e, 0x54, 0x40, 0x37, 0x33, 0xb5, 0x0e, 0x1d, 0xbb, 0x2b, 0xa6, 0x26, 0x4a, 0x88, 0x76, 0x8f, + 0x06, 0x13, 0xf4, 0x68, 0x18, 0x7c, 0x78, 0xa1, 0xb8, 0x0d, 0x79, 0x71, 0x0c, 0x9b, 0x8a, 0x8e, + 0x8b, 0xb7, 0x20, 0xe7, 0x55, 0xd1, 0x2f, 0x3f, 0x69, 0x88, 0xbf, 0xaa, 0x9b, 0x2d, 0xed, 0x02, + 0xee, 0x6b, 0xab, 0x59, 0xd7, 0x14, 0x7c, 0xd8, 0xff, 0xaa, 0x15, 0xda, 0xcb, 0x14, 0x24, 0xea, + 0xa3, 0xb1, 0x7b, 0x52, 0xfc, 0x3d, 0xc8, 0x0a, 0x4b, 0x2f, 0x06, 0x53, 0x97, 0x3d, 0x86, 0xd4, + 0x48, 0xcc, 0x48, 0xa1, 0x6c, 0x33, 0x2c, 0xdc, 0x00, 0xe9, 0x3d, 0x9b, 0x1e, 0x7e, 0x63, 0x13, + 0x52, 0x92, 0x03, 0x17, 0xbe, 0x45, 0x95, 0x7d, 0x0b, 0xf7, 0x42, 0x31, 0xc9, 0x0b, 0x15, 0x77, + 0x21, 0xc5, 0x43, 0xef, 0x94, 0x12, 0x0a, 0x7e, 0x42, 0xe7, 0x2a, 0xe2, 0xf2, 0xca, 0xf2, 0x3a, + 0x9e, 0x25, 0xdd, 0x80, 0x2c, 0xbd, 0x15, 0xbe, 0xce, 0xd0, 0x5f, 0x03, 0x55, 0x71, 0x4d, 0xff, + 0x5d, 0x02, 0xd2, 0xde, 0x6a, 0xb0, 0xab, 0x90, 0xe4, 0xc7, 0x54, 0x32, 0xe5, 0x5d, 0xdb, 0x24, + 0xe8, 0x60, 0xca, 0xae, 0x42, 0x4a, 0x1c, 0x45, 0x45, 0x48, 0x51, 0x37, 0x2b, 0x66, 0x92, 0x1f, + 0x3d, 0xfd, 0xc6, 0xaa, 0x41, 0x9e, 0x90, 0x5f, 0xc8, 0x24, 0xf9, 0xe1, 0x92, 0xe9, 0x90, 0xf1, + 0x8f, 0x93, 0x14, 0x04, 0xc4, 0xed, 0x4b, 0xda, 0x3b, 0x3f, 0x4a, 0x88, 0xaa, 0x41, 0x2e, 0x52, + 0x5c, 0xb5, 0xa4, 0x1b, 0x41, 0x66, 0x94, 0xf6, 0x0e, 0x85, 0xf4, 0xdb, 0x92, 0x77, 0xaf, 0x92, + 0x12, 0xc7, 0xc0, 0x00, 0x50, 0x35, 0xc8, 0xf7, 0x78, 0x97, 0x28, 0x29, 0x71, 0xd4, 0x63, 0x37, + 0x70, 0x88, 0x74, 0x74, 0x23, 0x0f, 0x13, 0xdc, 0x98, 0x24, 0xf9, 0x81, 0x8e, 0xdd, 0x44, 0x0b, + 0xfc, 0x7c, 0x46, 0x2f, 0x7f, 0x70, 0x3d, 0x92, 0x12, 0xc7, 0x36, 0x76, 0x1b, 0x21, 0x7c, 0xf9, + 0x0b, 0xf0, 0x96, 0xbb, 0x90, 0x94, 0xb8, 0x0b, 0x61, 0x3a, 0x76, 0x48, 0x3e, 0x88, 0xfc, 0x8e, + 0x74, 0xef, 0x91, 0xe4, 0xf7, 0x1e, 0xec, 0x3a, 0x99, 0xe3, 0x93, 0xca, 0x05, 0x77, 0x1c, 0x29, + 0x71, 0xce, 0x0b, 0xda, 0x29, 0x5b, 0xf4, 0xef, 0x33, 0x52, 0xe2, 0x24, 0xc7, 0x1e, 0xe1, 0x7e, + 0xa1, 0x86, 0x0b, 0xab, 0xe4, 0x6d, 0x37, 0x64, 0xe9, 0x79, 0xbb, 0xca, 0x9d, 0x6d, 0x8d, 0x3b, + 0x2a, 0x33, 0xd1, 0x20, 0xcd, 0x6f, 0x20, 0xf3, 0xe5, 0xc0, 0xee, 0x15, 0xf2, 0xb4, 0x16, 0xb1, + 0x81, 0xdd, 0x33, 0x13, 0x0d, 0xac, 0xe1, 0x2a, 0x68, 0x62, 0x9b, 0x46, 0x6d, 0xf1, 0x8f, 0x78, + 0x23, 0x56, 0xb1, 0x02, 0x24, 0x1a, 0xed, 0x66, 0xc7, 0x2e, 0xac, 0x71, 0x9e, 0xdd, 0xb1, 0xcd, + 0x78, 0xa3, 0xd9, 0xb1, 0xd9, 0x87, 0x10, 0x9b, 0xce, 0x0e, 0x0a, 0x6c, 0xfe, 0x87, 0xbf, 0xbd, + 0xd9, 0x81, 0x37, 0x18, 0x13, 0x31, 0xec, 0x2a, 0xa4, 0xa7, 0xee, 0xa4, 0xfd, 0x3b, 0xd6, 0xc4, + 0x29, 0x5c, 0xa4, 0x65, 0xbc, 0x60, 0xa6, 0xa6, 0xee, 0xe4, 0x95, 0x35, 0x71, 0xce, 0xe8, 0x65, + 0x8b, 0xd7, 0x21, 0x2b, 0xd9, 0x65, 0x79, 0x50, 0x6c, 0x9e, 0xa2, 0xd4, 0x94, 0x87, 0xa6, 0x62, + 0x17, 0xbf, 0x84, 0x9c, 0x77, 0x88, 0xa2, 0x19, 0x1b, 0xf8, 0x36, 0x0d, 0x9d, 0x09, 0xbd, 0xa5, + 0xab, 0x95, 0xeb, 0xe1, 0x98, 0x18, 0x00, 0x45, 0x6c, 0xe2, 0xe0, 0xa2, 0x16, 0x19, 0x8c, 0x52, + 0xfc, 0x2f, 0x05, 0x72, 0xbb, 0xce, 0x24, 0xf8, 0x85, 0x62, 0x1d, 0x12, 0x07, 0x8e, 0x33, 0x9c, + 0x92, 0xe1, 0xb4, 0xc9, 0x0b, 0xec, 0x7d, 0xc8, 0xd1, 0x83, 0x77, 0x0c, 0x56, 0xfd, 0x7b, 0x9e, + 0x2c, 0xd5, 0x8b, 0x93, 0x2f, 0x83, 0xf8, 0xc0, 0x76, 0xa7, 0xc2, 0x67, 0xd1, 0x33, 0xfb, 0x1e, + 0x64, 0xf1, 0xaf, 0xc7, 0x8c, 0xfb, 0xf9, 0x32, 0x60, 0xb5, 0x20, 0x7e, 0x00, 0x2b, 0xa4, 0x01, + 0x1f, 0x96, 0xf2, 0xef, 0x74, 0x72, 0xbc, 0x41, 0x00, 0x0b, 0x90, 0xe2, 0x0e, 0x61, 0x4a, 0x3f, + 0xe9, 0x66, 0x4c, 0xaf, 0x88, 0x8e, 0x94, 0x8e, 0x22, 0x3c, 0xc7, 0x48, 0x99, 0xa2, 0x54, 0x7c, + 0x0a, 0x69, 0x0a, 0x88, 0xad, 0x61, 0x97, 0xbd, 0x07, 0x4a, 0xbf, 0x60, 0x51, 0x40, 0xbe, 0x14, + 0x3a, 0x67, 0x08, 0x40, 0x79, 0xdb, 0x54, 0xfa, 0x1b, 0x6b, 0xa0, 0x6c, 0x63, 0xe2, 0x7f, 0x2c, + 0x5c, 0xb2, 0x72, 0x5c, 0xfc, 0x5c, 0x18, 0x69, 0x5a, 0x6f, 0x96, 0x1b, 0x69, 0x5a, 0x6f, 0xb8, + 0x91, 0x1b, 0x73, 0x46, 0xb0, 0x74, 0x22, 0x7e, 0xe5, 0x56, 0x4e, 0x8a, 0x9b, 0xb0, 0x42, 0x2f, + 0xea, 0xc0, 0xee, 0xbf, 0x74, 0x06, 0x36, 0x1d, 0x35, 0x7a, 0x94, 0xa2, 0x29, 0xa6, 0xd2, 0xc3, + 0x7d, 0xb0, 0x8e, 0x3b, 0x87, 0x3c, 0xe1, 0x4d, 0x9b, 0xbc, 0x50, 0xfc, 0xcf, 0x38, 0xac, 0x0a, + 0x27, 0xfb, 0xd5, 0xc0, 0x3d, 0xda, 0xed, 0x8c, 0x59, 0x13, 0x72, 0xe8, 0x5f, 0xdb, 0xa3, 0xce, + 0x78, 0x8c, 0x2f, 0xb2, 0x42, 0xc1, 0xf7, 0xf6, 0x02, 0xb7, 0x2d, 0x18, 0xe5, 0x66, 0x67, 0x64, + 0xed, 0x72, 0x34, 0x0f, 0xc5, 0x59, 0x3b, 0xa8, 0x61, 0xcf, 0x21, 0x3b, 0x9a, 0xf6, 0x7d, 0x73, + 0x3c, 0x96, 0xdf, 0x5a, 0x62, 0x6e, 0x77, 0xda, 0x0f, 0x59, 0x83, 0x91, 0x5f, 0x81, 0x83, 0x43, + 0xef, 0xec, 0x5b, 0x8b, 0x9d, 0x3a, 0x38, 0x74, 0x25, 0xe1, 0xc1, 0x1d, 0x04, 0x35, 0xac, 0x01, + 0x80, 0xaf, 0x9a, 0xeb, 0xe0, 0x19, 0x8e, 0xb4, 0x94, 0xad, 0x94, 0x96, 0x58, 0xdb, 0x73, 0x27, + 0xfb, 0xce, 0x9e, 0x3b, 0x11, 0x29, 0xc7, 0x54, 0x14, 0x37, 0x3e, 0x05, 0x2d, 0xba, 0x0a, 0xa7, + 0x65, 0x1d, 0x19, 0x29, 0xeb, 0xd8, 0xf8, 0x2d, 0xc8, 0x47, 0xa6, 0x2d, 0xd3, 0x19, 0xa7, 0xdf, + 0x95, 0xe9, 0xd9, 0xca, 0x95, 0xd0, 0x57, 0x18, 0xf2, 0xd6, 0xcb, 0x96, 0x3f, 0x05, 0x2d, 0xba, + 0x04, 0xb2, 0xe9, 0xf4, 0x92, 0x23, 0x0b, 0xf1, 0x3f, 0x86, 0x95, 0xd0, 0xa4, 0x65, 0x72, 0xe6, + 0x94, 0x69, 0x15, 0xff, 0x20, 0x01, 0x89, 0x96, 0x6d, 0x39, 0x3d, 0x76, 0x39, 0x1c, 0x3b, 0x3f, + 0xbb, 0xe0, 0xc5, 0xcd, 0x2b, 0x91, 0xb8, 0xf9, 0xd9, 0x05, 0x3f, 0x6a, 0x5e, 0x89, 0x44, 0x4d, + 0xaf, 0xa9, 0x6a, 0xb0, 0x6b, 0x73, 0x31, 0xf3, 0xb3, 0x0b, 0x52, 0xc0, 0xbc, 0x36, 0x17, 0x30, + 0x83, 0xe6, 0xaa, 0x81, 0x0e, 0x36, 0x1c, 0x2d, 0x3f, 0xbb, 0x10, 0x44, 0xca, 0xab, 0xd1, 0x48, + 0xe9, 0x37, 0x56, 0x0d, 0x3e, 0x24, 0x29, 0x4a, 0xd2, 0x90, 0x78, 0x7c, 0xbc, 0x1a, 0x8d, 0x8f, + 0xc4, 0x13, 0x91, 0xf1, 0x6a, 0x34, 0x32, 0x52, 0xa3, 0x88, 0x84, 0x57, 0x22, 0x91, 0x90, 0x8c, + 0xf2, 0x10, 0x78, 0x35, 0x1a, 0x02, 0x39, 0x4f, 0x1a, 0xa9, 0x1c, 0xff, 0xfc, 0xc6, 0xaa, 0xc1, + 0x8c, 0x48, 0xf0, 0x5b, 0x76, 0xd4, 0xa0, 0xdd, 0xa0, 0x30, 0x50, 0xc5, 0x85, 0xf3, 0x52, 0xd0, + 0xfc, 0xd2, 0x8f, 0x54, 0x68, 0x45, 0xbd, 0x04, 0xcd, 0x80, 0x54, 0x4f, 0x9c, 0xc6, 0x35, 0xf2, + 0x64, 0x21, 0x71, 0x92, 0x04, 0xca, 0x8d, 0x36, 0x79, 0x34, 0x9c, 0x5d, 0x8f, 0x1f, 0x29, 0x4a, + 0xb0, 0xd2, 0x68, 0xbf, 0xe8, 0x4c, 0xfa, 0x08, 0xdd, 0xef, 0xf4, 0xfd, 0x7b, 0x0d, 0x54, 0x41, + 0xb6, 0x21, 0x5a, 0xf6, 0x3b, 0x7d, 0x76, 0xc9, 0x93, 0x58, 0x97, 0x5a, 0x15, 0x21, 0xb2, 0x8d, + 0xcb, 0xb8, 0x74, 0xdc, 0x18, 0xf9, 0xc6, 0x35, 0xe1, 0x1b, 0xb7, 0x52, 0x90, 0x98, 0xd9, 0x03, + 0xc7, 0xde, 0xca, 0x40, 0xca, 0x75, 0x26, 0xa3, 0x8e, 0xeb, 0x14, 0xff, 0x5b, 0x01, 0x78, 0xea, + 0x8c, 0x46, 0x33, 0x7b, 0xf0, 0xf5, 0xcc, 0x62, 0xd7, 0x21, 0x3b, 0xea, 0xbc, 0xb6, 0xda, 0x23, + 0xab, 0x7d, 0x38, 0xf1, 0xde, 0x86, 0x0c, 0x56, 0xed, 0x5a, 0x4f, 0x27, 0x27, 0xac, 0xe0, 0xa5, + 0xe8, 0xa4, 0x20, 0x12, 0xa6, 0x48, 0xd9, 0xd7, 0x45, 0x3a, 0x9a, 0x14, 0x3b, 0xe9, 0x25, 0xa4, + 0xfc, 0x18, 0x93, 0x12, 0x7b, 0xc8, 0x0f, 0x32, 0x97, 0x21, 0xe9, 0x5a, 0xa3, 0x71, 0xfb, 0x90, + 0x04, 0x83, 0xa2, 0x48, 0x60, 0xf9, 0x29, 0xbb, 0x0b, 0xb1, 0x43, 0x67, 0x48, 0x52, 0x39, 0x75, + 0x77, 0x10, 0xc9, 0x3e, 0x80, 0xd8, 0x68, 0xca, 0xe5, 0x93, 0xad, 0x5c, 0x0c, 0x65, 0x10, 0x3c, + 0x64, 0x21, 0x70, 0x34, 0xed, 0xfb, 0x73, 0x2f, 0xfe, 0x52, 0x85, 0x34, 0xee, 0xd7, 0x17, 0xfb, + 0x8d, 0x47, 0x74, 0x30, 0x38, 0xec, 0x0c, 0xe9, 0x0e, 0x00, 0x5f, 0x53, 0x51, 0xc2, 0xfa, 0x1f, + 0x5b, 0x87, 0xae, 0x33, 0x21, 0xd7, 0x9c, 0x31, 0x45, 0x09, 0x97, 0x9c, 0x67, 0xc5, 0x31, 0x31, + 0x4b, 0x5e, 0xa4, 0x8c, 0xbe, 0x33, 0x6e, 0xa3, 0x0f, 0xe0, 0xfe, 0x32, 0x74, 0x7e, 0xf6, 0xba, + 0xc3, 0xc3, 0xd9, 0x73, 0xeb, 0x84, 0xfb, 0xc9, 0xe4, 0x88, 0x0a, 0xec, 0x37, 0xf9, 0xa1, 0x8e, + 0xef, 0x24, 0xff, 0x82, 0xaa, 0xf8, 0x36, 0xf2, 0x97, 0x08, 0x0a, 0x4e, 0x76, 0x54, 0xdc, 0x78, + 0x0c, 0x59, 0xc9, 0xee, 0x69, 0xae, 0x28, 0x16, 0xf1, 0x63, 0x21, 0xab, 0xa7, 0xdd, 0xdb, 0xc8, + 0x7e, 0x0c, 0x57, 0xd4, 0x41, 0x0d, 0xdf, 0xca, 0x43, 0xac, 0xd1, 0x6a, 0x61, 0x9e, 0xd5, 0x68, + 0xb5, 0xee, 0x6b, 0x4a, 0xed, 0x3e, 0xa4, 0xfb, 0x13, 0xcb, 0x42, 0xd7, 0xfb, 0xb6, 0x93, 0xdc, + 0x8f, 0x68, 0x59, 0x7d, 0x58, 0xed, 0x73, 0x48, 0x1d, 0xf2, 0xb3, 0x1c, 0x7b, 0xeb, 0xbd, 0x45, + 0xe1, 0xef, 0xf9, 0xfd, 0xd9, 0xbb, 0x32, 0x20, 0x7a, 0x02, 0x34, 0x3d, 0x3b, 0xb5, 0x7d, 0xc8, + 0x4c, 0xda, 0xa7, 0x1b, 0xfd, 0x96, 0xc7, 0xf2, 0xe5, 0x46, 0xd3, 0x13, 0x51, 0x55, 0xdb, 0x86, + 0x35, 0xdb, 0xf1, 0x7e, 0xc6, 0x6b, 0x77, 0x85, 0x27, 0x5b, 0x94, 0x44, 0x7b, 0x1d, 0x58, 0xfc, + 0x63, 0x00, 0xdb, 0x11, 0x0d, 0xdc, 0xfb, 0xd5, 0xea, 0xa0, 0x49, 0x86, 0x7a, 0xdc, 0x5d, 0x2e, + 0xb3, 0xd3, 0xe3, 0xdf, 0x1f, 0xf8, 0x76, 0xc8, 0xc3, 0x46, 0xcc, 0x08, 0x1f, 0xb8, 0xcc, 0x4c, + 0x9f, 0x7f, 0xce, 0xe1, 0x9b, 0xa1, 0xb0, 0x32, 0x6f, 0x06, 0x23, 0xc2, 0x32, 0x33, 0x47, 0xfc, + 0x5b, 0x0f, 0xd9, 0x4c, 0xd5, 0x88, 0xac, 0xce, 0xec, 0x0c, 0xc3, 0x19, 0xf0, 0x8f, 0x35, 0x7c, + 0x3b, 0x3c, 0xe0, 0x2c, 0x30, 0x74, 0xda, 0x80, 0x7e, 0xc4, 0xbf, 0xe4, 0x08, 0x19, 0x9a, 0x1b, + 0xd1, 0xf4, 0x0c, 0x23, 0x7a, 0xcd, 0x3f, 0x9c, 0xf0, 0x0d, 0xed, 0x2d, 0x1a, 0xd1, 0xf4, 0x0c, + 0x23, 0x1a, 0xf2, 0x8f, 0x2a, 0x42, 0x86, 0xaa, 0x46, 0x6d, 0x07, 0x98, 0xbc, 0xf1, 0x22, 0x3a, + 0x2f, 0xb5, 0x34, 0xe2, 0x1f, 0xcb, 0x04, 0x5b, 0xcf, 0x49, 0x8b, 0x4c, 0x9d, 0x36, 0x28, 0x9b, + 0x7f, 0x49, 0x13, 0x36, 0x55, 0x35, 0x6a, 0xcf, 0xe1, 0xa2, 0x3c, 0xbd, 0x33, 0x0d, 0xcb, 0xe1, + 0x9f, 0x81, 0x04, 0x13, 0x14, 0xac, 0x85, 0xc6, 0x4e, 0x1b, 0xd8, 0x98, 0x7f, 0x22, 0x12, 0x31, + 0x56, 0x35, 0x6a, 0x4f, 0x21, 0x2f, 0x19, 0x3b, 0xa0, 0x7b, 0x85, 0x65, 0x86, 0xbe, 0xe6, 0x1f, + 0x36, 0xf9, 0x86, 0x30, 0xa3, 0x8a, 0xee, 0x1e, 0xcf, 0x31, 0x96, 0x9a, 0x99, 0xf0, 0xef, 0x72, + 0x82, 0xf1, 0x10, 0x27, 0xf2, 0xa2, 0x1c, 0xf0, 0x84, 0x64, 0x99, 0x9d, 0x29, 0xff, 0x66, 0x27, + 0x18, 0x0e, 0x52, 0x6a, 0xa3, 0xd0, 0xa4, 0x2c, 0x4c, 0x33, 0x96, 0x5a, 0x71, 0x29, 0x22, 0x96, + 0x96, 0x40, 0xca, 0xf2, 0x05, 0x95, 0x34, 0x7d, 0x2c, 0xd6, 0x9e, 0xc3, 0xea, 0x79, 0x5c, 0xd6, + 0xb7, 0x0a, 0xbf, 0xcb, 0xd8, 0x2c, 0xdf, 0x37, 0xee, 0x3f, 0x30, 0x57, 0xba, 0x21, 0xcf, 0xb5, + 0x0d, 0x2b, 0xe7, 0x70, 0x5b, 0x3f, 0x55, 0xf8, 0x8d, 0x00, 0xda, 0x32, 0x73, 0xdd, 0xb0, 0xef, + 0x5a, 0x39, 0x87, 0xe3, 0xfa, 0x99, 0xc2, 0xaf, 0x90, 0x8c, 0x8a, 0x6f, 0xc6, 0xf3, 0x5d, 0x2b, + 0xe7, 0x70, 0x5c, 0x3f, 0xe7, 0x27, 0x7e, 0xd5, 0xd8, 0x94, 0xcd, 0x90, 0xa7, 0x58, 0x3d, 0x8f, + 0xe3, 0xfa, 0x85, 0x42, 0x57, 0x4a, 0xaa, 0x61, 0xf8, 0xeb, 0xe3, 0xfb, 0xae, 0xd5, 0xf3, 0x38, + 0xae, 0x7f, 0x50, 0xe8, 0xea, 0x49, 0x35, 0x1e, 0x84, 0x0c, 0x85, 0x47, 0x74, 0x16, 0xc7, 0xf5, + 0x4b, 0x85, 0xee, 0x83, 0x54, 0xa3, 0xea, 0x1b, 0xda, 0x9b, 0x1b, 0xd1, 0x59, 0x1c, 0xd7, 0x3f, + 0xd2, 0xf9, 0xaa, 0xa6, 0x1a, 0x0f, 0x43, 0x86, 0xc8, 0x77, 0xe5, 0xcf, 0xe5, 0xb8, 0xfe, 0x49, + 0xa1, 0xab, 0x3b, 0xd5, 0x78, 0x64, 0x7a, 0x23, 0x08, 0x7c, 0x57, 0xfe, 0x5c, 0x8e, 0xeb, 0x9f, + 0x15, 0xba, 0xe3, 0x53, 0x8d, 0xc7, 0x61, 0x53, 0xe4, 0xbb, 0xb4, 0xf3, 0x39, 0xae, 0x5f, 0x29, + 0xf4, 0xcd, 0x8e, 0xfa, 0xe0, 0x9e, 0xe9, 0x0d, 0x42, 0xf2, 0x5d, 0xda, 0xf9, 0x1c, 0xd7, 0xbf, + 0x28, 0xf4, 0x21, 0x8f, 0xfa, 0xe0, 0x7e, 0xc4, 0x58, 0xd5, 0xa8, 0xd5, 0x21, 0x77, 0x76, 0xc7, + 0xf5, 0xaf, 0xf2, 0x0d, 0x6a, 0xb6, 0x2b, 0x79, 0xaf, 0x57, 0xd2, 0xfe, 0x9d, 0xc1, 0x75, 0xfd, + 0x1b, 0x25, 0x7f, 0xb5, 0x77, 0x3e, 0xe3, 0xf7, 0x8c, 0x9c, 0x72, 0xa7, 0x6b, 0xf5, 0x3e, 0xe9, + 0x39, 0x4e, 0xb0, 0xa5, 0xdc, 0xa1, 0xb5, 0x82, 0xb7, 0xe7, 0x0c, 0xde, 0xec, 0xdf, 0x15, 0xba, + 0x96, 0xcc, 0x09, 0xd3, 0xc4, 0xf0, 0xdf, 0x23, 0xee, 0xda, 0xec, 0x60, 0xce, 0xa7, 0xfb, 0xb5, + 0xff, 0x50, 0xce, 0xe7, 0xd8, 0x6a, 0xb1, 0x56, 0xb3, 0xee, 0x2f, 0x0e, 0xd6, 0x6c, 0x95, 0x5f, + 0xdd, 0xe9, 0x0f, 0xdc, 0xa3, 0xd9, 0x41, 0xf9, 0xd0, 0x19, 0xdd, 0x3d, 0x74, 0xa6, 0x23, 0x67, + 0x7a, 0xb7, 0xef, 0xf4, 0x1d, 0xfe, 0x5f, 0x1c, 0xc1, 0xff, 0x72, 0x70, 0xf3, 0xbf, 0x0e, 0x00, + 0x00, 0xff, 0xff, 0xcb, 0xb4, 0x20, 0x14, 0xe3, 0x31, 0x00, 0x00, } diff --git a/proto/test_proto/test.proto b/proto/test_proto/test.proto index de73635f..7a53c530 100644 --- a/proto/test_proto/test.proto +++ b/proto/test_proto/test.proto @@ -361,67 +361,9 @@ extend DefaultsMessage { optional DefaultsMessage.DefaultsEnum default_enum = 216 [default = ONE]; } -message MyMessageSet { - option message_set_wire_format = true; - extensions 100 to max; -} - message Empty { } -extend MyMessageSet { - optional Empty x201 = 201; - optional Empty x202 = 202; - optional Empty x203 = 203; - optional Empty x204 = 204; - optional Empty x205 = 205; - optional Empty x206 = 206; - optional Empty x207 = 207; - optional Empty x208 = 208; - optional Empty x209 = 209; - optional Empty x210 = 210; - optional Empty x211 = 211; - optional Empty x212 = 212; - optional Empty x213 = 213; - optional Empty x214 = 214; - optional Empty x215 = 215; - optional Empty x216 = 216; - optional Empty x217 = 217; - optional Empty x218 = 218; - optional Empty x219 = 219; - optional Empty x220 = 220; - optional Empty x221 = 221; - optional Empty x222 = 222; - optional Empty x223 = 223; - optional Empty x224 = 224; - optional Empty x225 = 225; - optional Empty x226 = 226; - optional Empty x227 = 227; - optional Empty x228 = 228; - optional Empty x229 = 229; - optional Empty x230 = 230; - optional Empty x231 = 231; - optional Empty x232 = 232; - optional Empty x233 = 233; - optional Empty x234 = 234; - optional Empty x235 = 235; - optional Empty x236 = 236; - optional Empty x237 = 237; - optional Empty x238 = 238; - optional Empty x239 = 239; - optional Empty x240 = 240; - optional Empty x241 = 241; - optional Empty x242 = 242; - optional Empty x243 = 243; - optional Empty x244 = 244; - optional Empty x245 = 245; - optional Empty x246 = 246; - optional Empty x247 = 247; - optional Empty x248 = 248; - optional Empty x249 = 249; - optional Empty x250 = 250; -} - message MessageList { repeated group Message = 1 { required string name = 2; diff --git a/protoc-gen-gogo/descriptor/descriptor_test.go b/protoc-gen-gogo/descriptor/descriptor_test.go index ecb95690..0296c670 100644 --- a/protoc-gen-gogo/descriptor/descriptor_test.go +++ b/protoc-gen-gogo/descriptor/descriptor_test.go @@ -1,10 +1,8 @@ package descriptor_test import ( - "fmt" "testing" - tpb "github.com/cosmos/gogoproto/proto/test_proto" "github.com/cosmos/gogoproto/protoc-gen-gogo/descriptor" ) @@ -18,14 +16,3 @@ func TestMessage(t *testing.T) { 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. -} diff --git a/test/mergedregistry/bench_test.go b/test/mergedregistry/bench_test.go index 9fb37bbd..c826b1d7 100644 --- a/test/mergedregistry/bench_test.go +++ b/test/mergedregistry/bench_test.go @@ -6,10 +6,11 @@ import ( "fmt" "testing" - "github.com/cosmos/gogoproto/proto" "google.golang.org/protobuf/reflect/protodesc" "google.golang.org/protobuf/reflect/protoregistry" "google.golang.org/protobuf/types/descriptorpb" + + "github.com/cosmos/gogoproto/proto" ) func BenchmarkDefaultGlobalMergedFileDescriptors(b *testing.B) { @@ -38,7 +39,8 @@ func BenchmarkDefaultGlobalMergedFileDescriptors(b *testing.B) { } // Generated by manually marshalling from simd: -// bz, err := json.Marshal(proto.AllFileDescriptors()) +// +// bz, err := json.Marshal(proto.AllFileDescriptors()) // if err != nil { // panic(err) // } @@ -50,7 +52,8 @@ func BenchmarkDefaultGlobalMergedFileDescriptors(b *testing.B) { var simdAllFDs_c4489d []byte // Generated by manually marshalling from simd: -// var m []*descriptorpb.FileDescriptorProto +// +// var m []*descriptorpb.FileDescriptorProto // protoregistry.GlobalFiles.RangeFiles(func(fd protoreflect.FileDescriptor) bool { // m = append(m, protodesc.ToFileDescriptorProto(fd)) // return true @@ -63,6 +66,7 @@ var simdAllFDs_c4489d []byte // if err := os.WriteFile("/tmp/globalfd.json", bz, 0600); err != nil { // panic(err) // } +// //go:embed testdata/simd-globalfd-c4489d.json var simdGlobalFDs_c4489d []byte @@ -75,6 +79,8 @@ func BenchmarkRepresentativeMergedFileDescriptors(b *testing.B) { b.Fatal(err) } + allFiles := fileDescriptorMapToFiles(b, allFDs) + // But the global FDs are much more touchy. // Some reference files we don't have available in this test package. // @@ -139,7 +145,7 @@ SECONDPASS: b.ResetTimer() for i := 0; i < b.N; i++ { - fds, err := proto.MergedFileDescriptors(gf, allFDs) + fds, err := proto.MergedFileDescriptors(gf, allFiles) if err != nil { b.Fatal(err) } diff --git a/test/mergedregistry/merge_test.go b/test/mergedregistry/merge_test.go index 2056dd1b..f19ef666 100644 --- a/test/mergedregistry/merge_test.go +++ b/test/mergedregistry/merge_test.go @@ -4,16 +4,18 @@ import ( "bytes" "compress/gzip" "fmt" + "io" "strings" "testing" - "github.com/cosmos/gogoproto/proto" - _ "github.com/cosmos/gogoproto/types" protov2 "google.golang.org/protobuf/proto" "google.golang.org/protobuf/reflect/protodesc" "google.golang.org/protobuf/reflect/protoreflect" "google.golang.org/protobuf/reflect/protoregistry" "google.golang.org/protobuf/types/descriptorpb" + + "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" ) func TestMergedRegistry(t *testing.T) { @@ -31,7 +33,7 @@ func TestMergedFileDescriptorsWithValidation(t *testing.T) { t.Run("correct merge", func(t *testing.T) { t.Parallel() - appFDs := proto.AllFileDescriptors() + appFDs := proto.GogoResolver.(*protoregistry.Files) globalFiles := protoregistry.GlobalFiles fdSet, err := proto.MergedFileDescriptorsWithValidation(globalFiles, appFDs) @@ -41,7 +43,7 @@ func TestMergedFileDescriptorsWithValidation(t *testing.T) { // In this case, addition is fine since we know up front // that there is no overlap in globalFiles and appFDs. - wantSize := globalFiles.NumFiles() + len(appFDs) + wantSize := globalFiles.NumFiles() + appFDs.NumFiles() if len(fdSet.File) != wantSize { t.Fatalf("wrong merged fd count: got %d, want %d", len(fdSet.File), wantSize) @@ -61,12 +63,14 @@ func TestMergedFileDescriptorsWithValidation(t *testing.T) { return false }) - for name := range appFDs { - _, ok := gotNames[name] + appFDs.RangeFiles(func(fileDescriptor protoreflect.FileDescriptor) bool { + _, ok := gotNames[fileDescriptor.Path()] if !ok { - t.Fatalf("app fd %s not in merged file descriptor set", name) + t.Fatalf("app path %s not in merged file descriptor set", fileDescriptor.Path()) } - } + + return true + }) }) t.Run("debug error on import path for global files", func(t *testing.T) { @@ -107,8 +111,10 @@ func TestMergedFileDescriptorsWithValidation(t *testing.T) { "example.com/foo/bar": rewriteGzippedFDProto(fdBytes, "example.com/foo/bar"), } + appFiles := fileDescriptorMapToFiles(t, appFDs) + // Merging just this one global should error due to an invalid path. - _, err := proto.MergedFileDescriptorsWithValidation(nil, appFDs) + _, err := proto.MergedFileDescriptorsWithValidation(nil, appFiles) if err == nil { t.Fatal("expected error when merging app FD with invalid path, but did not get error") } @@ -151,7 +157,7 @@ func TestMergedFileDescriptorsWithValidation(t *testing.T) { } gf.RegisterFile(modF) - _, err = proto.MergedFileDescriptorsWithValidation(gf, appFDs) // merged.File is slice of *descriptorpb.FileDescriptorProto + _, err = proto.MergedFileDescriptorsWithValidation(gf, proto.GogoResolver.(*protoregistry.Files)) // merged.File is slice of *descriptorpb.FileDescriptorProto if err == nil { t.Fatal("expected error when merging app FD mismatched with global FD, but did not get error") } @@ -209,3 +215,35 @@ func rewriteGzippedFDProto(bz []byte, newName string) []byte { return buf.Bytes() } + +func fileDescriptorMapToFiles(tb testing.TB, m map[string][]byte) *protoregistry.Files { + files := new(protoregistry.Files) + for _, bz := range m { + gzr, err := gzip.NewReader(bytes.NewReader(bz)) + if err != nil { + tb.Fatal(err) + } + + unzipped, err := io.ReadAll(gzr) + if err != nil { + tb.Fatal(err) + } + + fd := &descriptorpb.FileDescriptorProto{} + if err := protov2.Unmarshal(unzipped, fd); err != nil { + tb.Fatal(err) + } + + file, err := protodesc.FileOptions{AllowUnresolvable: true}.New(fd, files) + if err != nil { + tb.Fatal(err) + } + + err = files.RegisterFile(file) + if err != nil { + tb.Fatal(err) + } + } + + return files +} diff --git a/test/typedeclimport/Makefile b/test/typedeclimport/Makefile deleted file mode 100644 index ffee08da..00000000 --- a/test/typedeclimport/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -regenerate: - cd .. && protoc-min-version --version="3.0.0" --gogo_out=Mtypedeclimport/subpkg/subpkg.proto=github.com/cosmos/gogoproto/test/typedeclimport/subpkg:. --proto_path=../:../protobuf/:. typedeclimport/typedeclimport.proto - cd .. && protoc-min-version --version="3.0.0" --gogo_out=. --proto_path=../:../protobuf/:. ./subpkg/subpkg/./subpkg/subpkg.proto \ No newline at end of file diff --git a/test/typedeclimport/models.go b/test/typedeclimport/models.go deleted file mode 100644 index 3e5ada62..00000000 --- a/test/typedeclimport/models.go +++ /dev/null @@ -1,8 +0,0 @@ -package typedeclimport - -import subpkg "github.com/cosmos/gogoproto/test/typedeclimport/subpkg" - -type SomeMessage struct { - subpkg.AnotherMessage - Imported subpkg.AnotherMessage -} diff --git a/test/typedeclimport/subpkg/subpkg.pb.go b/test/typedeclimport/subpkg/subpkg.pb.go deleted file mode 100644 index b146f9ab..00000000 --- a/test/typedeclimport/subpkg/subpkg.pb.go +++ /dev/null @@ -1,385 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: subpkg/subpkg.proto - -package subpkg - -import ( - bytes "bytes" - fmt "fmt" - _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/cosmos/gogoproto/proto" - io "io" - math "math" - math_bits "math/bits" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -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.GoGoProtoPackageIsVersion3 // please upgrade the proto package - -type AnotherMessage struct { - Foo string `protobuf:"bytes,1,opt,name=foo,proto3" json:"foo,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *AnotherMessage) Reset() { *m = AnotherMessage{} } -func (m *AnotherMessage) String() string { return proto.CompactTextString(m) } -func (*AnotherMessage) ProtoMessage() {} -func (*AnotherMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_c6b173f9733d328d, []int{0} -} -func (m *AnotherMessage) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *AnotherMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_AnotherMessage.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *AnotherMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_AnotherMessage.Merge(m, src) -} -func (m *AnotherMessage) XXX_Size() int { - return m.Size() -} -func (m *AnotherMessage) XXX_DiscardUnknown() { - xxx_messageInfo_AnotherMessage.DiscardUnknown(m) -} - -var xxx_messageInfo_AnotherMessage proto.InternalMessageInfo - -func (m *AnotherMessage) GetFoo() string { - if m != nil { - return m.Foo - } - return "" -} - -func init() { - proto.RegisterType((*AnotherMessage)(nil), "subpkg.AnotherMessage") -} - -func init() { proto.RegisterFile("subpkg/subpkg.proto", fileDescriptor_c6b173f9733d328d) } - -var fileDescriptor_c6b173f9733d328d = []byte{ - // 119 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x2e, 0x2e, 0x4d, 0x2a, - 0xc8, 0x4e, 0xd7, 0x87, 0x50, 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, 0x6c, 0x10, 0x9e, 0x94, - 0x48, 0x7a, 0x7e, 0x7a, 0x3e, 0x58, 0x48, 0x1f, 0xc4, 0x82, 0xc8, 0x2a, 0x29, 0x71, 0xf1, 0x39, - 0xe6, 0xe5, 0x97, 0x64, 0xa4, 0x16, 0xf9, 0xa6, 0x16, 0x17, 0x27, 0xa6, 0xa7, 0x0a, 0x09, 0x70, - 0x31, 0xa7, 0xe5, 0xe7, 0x4b, 0x30, 0x2a, 0x30, 0x6a, 0x70, 0x06, 0x81, 0x98, 0x4e, 0x22, 0x0f, - 0x1e, 0xca, 0x31, 0xae, 0x78, 0x24, 0xc7, 0x78, 0xe2, 0x91, 0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, - 0x0f, 0x1e, 0xc9, 0x31, 0x26, 0xb1, 0x81, 0x0d, 0x30, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xa6, - 0xfb, 0x46, 0x16, 0x75, 0x00, 0x00, 0x00, -} - -func (this *AnotherMessage) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil - } - return fmt.Errorf("that == nil && this != nil") - } - - that1, ok := that.(*AnotherMessage) - if !ok { - that2, ok := that.(AnotherMessage) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *AnotherMessage") - } - } - if that1 == nil { - if this == nil { - return nil - } - return fmt.Errorf("that is type *AnotherMessage but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *AnotherMessage but is not nil && this == nil") - } - if this.Foo != that1.Foo { - return fmt.Errorf("Foo this(%v) Not Equal that(%v)", this.Foo, that1.Foo) - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) - } - return nil -} -func (this *AnotherMessage) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*AnotherMessage) - if !ok { - that2, ok := that.(AnotherMessage) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.Foo != that1.Foo { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (m *AnotherMessage) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *AnotherMessage) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *AnotherMessage) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i -= len(m.XXX_unrecognized) - copy(dAtA[i:], m.XXX_unrecognized) - } - if len(m.Foo) > 0 { - i -= len(m.Foo) - copy(dAtA[i:], m.Foo) - i = encodeVarintSubpkg(dAtA, i, uint64(len(m.Foo))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func encodeVarintSubpkg(dAtA []byte, offset int, v uint64) int { - offset -= sovSubpkg(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *AnotherMessage) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Foo) - if l > 0 { - n += 1 + l + sovSubpkg(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovSubpkg(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozSubpkg(x uint64) (n int) { - return sovSubpkg(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *AnotherMessage) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSubpkg - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: AnotherMessage: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AnotherMessage: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Foo", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSubpkg - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthSubpkg - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthSubpkg - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Foo = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipSubpkg(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSubpkg - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipSubpkg(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowSubpkg - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowSubpkg - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowSubpkg - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthSubpkg - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupSubpkg - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthSubpkg - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthSubpkg = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowSubpkg = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupSubpkg = fmt.Errorf("proto: unexpected end of group") -) diff --git a/test/typedeclimport/subpkg/subpkg.proto b/test/typedeclimport/subpkg/subpkg.proto deleted file mode 100644 index 781bceb4..00000000 --- a/test/typedeclimport/subpkg/subpkg.proto +++ /dev/null @@ -1,13 +0,0 @@ -syntax = "proto3"; - -package subpkg; - -import "gogoproto/gogo.proto"; - -option (gogoproto.marshaler_all) = true; -option (gogoproto.unmarshaler_all) = true; -option (gogoproto.sizer_all) = true; -option (gogoproto.equal_all) = true; -option (gogoproto.verbose_equal_all) = true; - -message AnotherMessage { string foo = 1; } \ No newline at end of file diff --git a/test/typedeclimport/typedeclimport.pb.go b/test/typedeclimport/typedeclimport.pb.go deleted file mode 100644 index 19d318f6..00000000 --- a/test/typedeclimport/typedeclimport.pb.go +++ /dev/null @@ -1,384 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: typedeclimport.proto - -package typedeclimport - -import ( - bytes "bytes" - fmt "fmt" - _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/cosmos/gogoproto/proto" - subpkg "github.com/cosmos/gogoproto/test/typedeclimport/subpkg" - io "io" - math "math" - math_bits "math/bits" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -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.GoGoProtoPackageIsVersion3 // please upgrade the proto package - -func (m *SomeMessage) Reset() { *m = SomeMessage{} } -func (m *SomeMessage) String() string { return proto.CompactTextString(m) } -func (*SomeMessage) ProtoMessage() {} -func (*SomeMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_47149c7887ba1639, []int{0} -} -func (m *SomeMessage) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *SomeMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_SomeMessage.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *SomeMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_SomeMessage.Merge(m, src) -} -func (m *SomeMessage) XXX_Size() int { - return m.Size() -} -func (m *SomeMessage) XXX_DiscardUnknown() { - xxx_messageInfo_SomeMessage.DiscardUnknown(m) -} - -var xxx_messageInfo_SomeMessage proto.InternalMessageInfo - -func (m *SomeMessage) GetImported() subpkg.AnotherMessage { - if m != nil { - return m.Imported - } - return subpkg.AnotherMessage{} -} - -func init() { - proto.RegisterType((*SomeMessage)(nil), "typedeclimport.SomeMessage") -} - -func init() { proto.RegisterFile("typedeclimport.proto", fileDescriptor_47149c7887ba1639) } - -var fileDescriptor_47149c7887ba1639 = []byte{ - // 169 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x29, 0xa9, 0x2c, 0x48, - 0x4d, 0x49, 0x4d, 0xce, 0xc9, 0xcc, 0x2d, 0xc8, 0x2f, 0x2a, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, - 0x17, 0xe2, 0x43, 0x15, 0x95, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0x4b, 0xe9, 0x83, 0x58, 0x10, - 0x55, 0x52, 0xea, 0x25, 0xa9, 0xc5, 0x25, 0xfa, 0xa8, 0x4a, 0xf5, 0x8b, 0x4b, 0x93, 0x0a, 0xb2, - 0xd3, 0xa1, 0x14, 0x44, 0xa1, 0x92, 0x2f, 0x17, 0x77, 0x70, 0x7e, 0x6e, 0xaa, 0x6f, 0x6a, 0x71, - 0x71, 0x62, 0x7a, 0xaa, 0x90, 0x05, 0x17, 0x07, 0x44, 0x71, 0x6a, 0x8a, 0x04, 0xa3, 0x02, 0xa3, - 0x06, 0xb7, 0x91, 0x98, 0x1e, 0x54, 0xbd, 0x63, 0x5e, 0x7e, 0x49, 0x46, 0x6a, 0x11, 0x54, 0xa5, - 0x13, 0xcb, 0x89, 0x7b, 0xf2, 0x0c, 0x41, 0x70, 0xd5, 0x56, 0x2c, 0x1f, 0x16, 0xca, 0x33, 0x38, - 0x89, 0x3c, 0x78, 0x28, 0xc7, 0xb8, 0xe2, 0x91, 0x1c, 0xe3, 0x89, 0x47, 0x72, 0x8c, 0x17, 0x1e, - 0xc9, 0x31, 0x3e, 0x78, 0x24, 0xc7, 0x98, 0xc4, 0x06, 0xb6, 0xcb, 0x18, 0x10, 0x00, 0x00, 0xff, - 0xff, 0xd8, 0x21, 0xbf, 0xf3, 0xd2, 0x00, 0x00, 0x00, -} - -func (this *SomeMessage) VerboseEqual(that interface{}) error { - if that == nil { - if this == nil { - return nil - } - return fmt.Errorf("that == nil && this != nil") - } - - that1, ok := that.(*SomeMessage) - if !ok { - that2, ok := that.(SomeMessage) - if ok { - that1 = &that2 - } else { - return fmt.Errorf("that is not of type *SomeMessage") - } - } - if that1 == nil { - if this == nil { - return nil - } - return fmt.Errorf("that is type *SomeMessage but is nil && this != nil") - } else if this == nil { - return fmt.Errorf("that is type *SomeMessage but is not nil && this == nil") - } - if !this.Imported.Equal(&that1.Imported) { - return fmt.Errorf("Imported this(%v) Not Equal that(%v)", this.Imported, that1.Imported) - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return fmt.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized) - } - return nil -} -func (this *SomeMessage) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*SomeMessage) - if !ok { - that2, ok := that.(SomeMessage) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Imported.Equal(&that1.Imported) { - return false - } - if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { - return false - } - return true -} -func (m *SomeMessage) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *SomeMessage) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SomeMessage) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i -= len(m.XXX_unrecognized) - copy(dAtA[i:], m.XXX_unrecognized) - } - { - size, err := m.Imported.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypedeclimport(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func encodeVarintTypedeclimport(dAtA []byte, offset int, v uint64) int { - offset -= sovTypedeclimport(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *SomeMessage) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Imported.Size() - n += 1 + l + sovTypedeclimport(uint64(l)) - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func sovTypedeclimport(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozTypedeclimport(x uint64) (n int) { - return sovTypedeclimport(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *SomeMessage) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypedeclimport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: SomeMessage: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SomeMessage: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Imported", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypedeclimport - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypedeclimport - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypedeclimport - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Imported.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypedeclimport(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypedeclimport - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipTypedeclimport(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowTypedeclimport - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowTypedeclimport - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowTypedeclimport - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthTypedeclimport - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupTypedeclimport - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthTypedeclimport - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthTypedeclimport = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowTypedeclimport = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupTypedeclimport = fmt.Errorf("proto: unexpected end of group") -) diff --git a/test/typedeclimport/typedeclimport.proto b/test/typedeclimport/typedeclimport.proto deleted file mode 100644 index 59cbb0d7..00000000 --- a/test/typedeclimport/typedeclimport.proto +++ /dev/null @@ -1,18 +0,0 @@ -syntax = "proto3"; - -package typedeclimport; - -import "gogoproto/gogo.proto"; - -import "test/typedeclimport/subpkg/subpkg.proto"; - -option (gogoproto.unmarshaler_all) = true; -option (gogoproto.marshaler_all) = true; -option (gogoproto.sizer_all) = true; -option (gogoproto.equal_all) = true; -option (gogoproto.verbose_equal_all) = true; - -message SomeMessage { - option (gogoproto.typedecl) = false; - subpkg.AnotherMessage imported = 1 [ (gogoproto.nullable) = false ]; -} \ No newline at end of file diff --git a/test/typedeclimport/typedeclimport_test.go b/test/typedeclimport/typedeclimport_test.go deleted file mode 100644 index bea4cae7..00000000 --- a/test/typedeclimport/typedeclimport_test.go +++ /dev/null @@ -1,7 +0,0 @@ -package typedeclimport - -import "testing" - -func Test(t *testing.T) { - // No need to do anything, if this test runs, it means it works -}