diff --git a/api/cosmos/evm/vm/v1/query.pulsar.go b/api/cosmos/evm/vm/v1/query.pulsar.go index dd6e0a7f6..a75e16d33 100644 --- a/api/cosmos/evm/vm/v1/query.pulsar.go +++ b/api/cosmos/evm/vm/v1/query.pulsar.go @@ -8087,6 +8087,7 @@ var ( fd_EthCallRequest_gas_cap protoreflect.FieldDescriptor fd_EthCallRequest_proposer_address protoreflect.FieldDescriptor fd_EthCallRequest_chain_id protoreflect.FieldDescriptor + fd_EthCallRequest_overrides protoreflect.FieldDescriptor ) func init() { @@ -8096,6 +8097,7 @@ func init() { fd_EthCallRequest_gas_cap = md_EthCallRequest.Fields().ByName("gas_cap") fd_EthCallRequest_proposer_address = md_EthCallRequest.Fields().ByName("proposer_address") fd_EthCallRequest_chain_id = md_EthCallRequest.Fields().ByName("chain_id") + fd_EthCallRequest_overrides = md_EthCallRequest.Fields().ByName("overrides") } var _ protoreflect.Message = (*fastReflection_EthCallRequest)(nil) @@ -8187,6 +8189,12 @@ func (x *fastReflection_EthCallRequest) Range(f func(protoreflect.FieldDescripto return } } + if len(x.Overrides) != 0 { + value := protoreflect.ValueOfBytes(x.Overrides) + if !f(fd_EthCallRequest_overrides, value) { + return + } + } } // Has reports whether a field is populated. @@ -8210,6 +8218,8 @@ func (x *fastReflection_EthCallRequest) Has(fd protoreflect.FieldDescriptor) boo return len(x.ProposerAddress) != 0 case "cosmos.evm.vm.v1.EthCallRequest.chain_id": return x.ChainId != int64(0) + case "cosmos.evm.vm.v1.EthCallRequest.overrides": + return len(x.Overrides) != 0 default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.evm.vm.v1.EthCallRequest")) @@ -8234,6 +8244,8 @@ func (x *fastReflection_EthCallRequest) Clear(fd protoreflect.FieldDescriptor) { x.ProposerAddress = nil case "cosmos.evm.vm.v1.EthCallRequest.chain_id": x.ChainId = int64(0) + case "cosmos.evm.vm.v1.EthCallRequest.overrides": + x.Overrides = nil default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.evm.vm.v1.EthCallRequest")) @@ -8262,6 +8274,9 @@ func (x *fastReflection_EthCallRequest) Get(descriptor protoreflect.FieldDescrip case "cosmos.evm.vm.v1.EthCallRequest.chain_id": value := x.ChainId return protoreflect.ValueOfInt64(value) + case "cosmos.evm.vm.v1.EthCallRequest.overrides": + value := x.Overrides + return protoreflect.ValueOfBytes(value) default: if descriptor.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.evm.vm.v1.EthCallRequest")) @@ -8290,6 +8305,8 @@ func (x *fastReflection_EthCallRequest) Set(fd protoreflect.FieldDescriptor, val x.ProposerAddress = value.Bytes() case "cosmos.evm.vm.v1.EthCallRequest.chain_id": x.ChainId = value.Int() + case "cosmos.evm.vm.v1.EthCallRequest.overrides": + x.Overrides = value.Bytes() default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.evm.vm.v1.EthCallRequest")) @@ -8318,6 +8335,8 @@ func (x *fastReflection_EthCallRequest) Mutable(fd protoreflect.FieldDescriptor) panic(fmt.Errorf("field proposer_address of message cosmos.evm.vm.v1.EthCallRequest is not mutable")) case "cosmos.evm.vm.v1.EthCallRequest.chain_id": panic(fmt.Errorf("field chain_id of message cosmos.evm.vm.v1.EthCallRequest is not mutable")) + case "cosmos.evm.vm.v1.EthCallRequest.overrides": + panic(fmt.Errorf("field overrides of message cosmos.evm.vm.v1.EthCallRequest is not mutable")) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.evm.vm.v1.EthCallRequest")) @@ -8339,6 +8358,8 @@ func (x *fastReflection_EthCallRequest) NewField(fd protoreflect.FieldDescriptor return protoreflect.ValueOfBytes(nil) case "cosmos.evm.vm.v1.EthCallRequest.chain_id": return protoreflect.ValueOfInt64(int64(0)) + case "cosmos.evm.vm.v1.EthCallRequest.overrides": + return protoreflect.ValueOfBytes(nil) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.evm.vm.v1.EthCallRequest")) @@ -8422,6 +8443,10 @@ func (x *fastReflection_EthCallRequest) ProtoMethods() *protoiface.Methods { if x.ChainId != 0 { n += 1 + runtime.Sov(uint64(x.ChainId)) } + l = len(x.Overrides) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } if x.unknownFields != nil { n += len(x.unknownFields) } @@ -8451,6 +8476,13 @@ func (x *fastReflection_EthCallRequest) ProtoMethods() *protoiface.Methods { i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } + if len(x.Overrides) > 0 { + i -= len(x.Overrides) + copy(dAtA[i:], x.Overrides) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Overrides))) + i-- + dAtA[i] = 0x2a + } if x.ChainId != 0 { i = runtime.EncodeVarint(dAtA, i, uint64(x.ChainId)) i-- @@ -8630,6 +8662,40 @@ func (x *fastReflection_EthCallRequest) ProtoMethods() *protoiface.Methods { break } } + case 5: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Overrides", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Overrides = append(x.Overrides[:0], dAtA[iNdEx:postIndex]...) + if x.Overrides == nil { + x.Overrides = []byte{} + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := runtime.Skip(dAtA[iNdEx:]) @@ -14286,6 +14352,8 @@ type EthCallRequest struct { ProposerAddress []byte `protobuf:"bytes,3,opt,name=proposer_address,json=proposerAddress,proto3" json:"proposer_address,omitempty"` // chain_id is the eip155 chain id parsed from the requested block header ChainId int64 `protobuf:"varint,4,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + // state overrides encoded as json + Overrides []byte `protobuf:"bytes,5,opt,name=overrides,proto3" json:"overrides,omitempty"` } func (x *EthCallRequest) Reset() { @@ -14336,6 +14404,13 @@ func (x *EthCallRequest) GetChainId() int64 { return 0 } +func (x *EthCallRequest) GetOverrides() []byte { + if x != nil { + return x.Overrides + } + return nil +} + // EstimateGasResponse defines EstimateGas response type EstimateGasResponse struct { state protoimpl.MessageState @@ -14911,7 +14986,7 @@ var file_cosmos_evm_vm_v1_query_proto_rawDesc = []byte{ 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, - 0xb7, 0x01, 0x0a, 0x0e, 0x45, 0x74, 0x68, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, + 0xd5, 0x01, 0x0a, 0x0e, 0x45, 0x74, 0x68, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x61, 0x73, 0x5f, 0x63, 0x61, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x67, 0x61, 0x73, 0x43, 0x61, 0x70, 0x12, @@ -14922,225 +14997,227 @@ var file_cosmos_evm_vm_v1_query_proto_rawDesc = []byte{ 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x54, 0x0a, 0x13, 0x45, 0x73, 0x74, - 0x69, 0x6d, 0x61, 0x74, 0x65, 0x47, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x10, 0x0a, 0x03, 0x67, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x67, - 0x61, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x03, 0x72, 0x65, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x76, 0x6d, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, - 0x89, 0x04, 0x0a, 0x13, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, 0x78, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, - 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x75, 0x6d, 0x54, 0x78, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x40, 0x0a, 0x0c, 0x74, 0x72, - 0x61, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x0b, 0x74, 0x72, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x43, 0x0a, 0x0c, - 0x70, 0x72, 0x65, 0x64, 0x65, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x76, 0x65, + 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x6f, 0x76, + 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x22, 0x54, 0x0a, 0x13, 0x45, 0x73, 0x74, 0x69, 0x6d, + 0x61, 0x74, 0x65, 0x47, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, + 0x0a, 0x03, 0x67, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x67, 0x61, 0x73, + 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x72, + 0x65, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x76, 0x6d, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x89, 0x04, + 0x0a, 0x13, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, 0x78, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, - 0x6d, 0x54, 0x78, 0x52, 0x0c, 0x70, 0x72, 0x65, 0x64, 0x65, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, - 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x61, - 0x73, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, - 0x61, 0x73, 0x68, 0x12, 0x48, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x42, 0x0d, 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0xa8, 0xe7, 0xb0, - 0x2a, 0x01, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x5d, 0x0a, - 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x32, 0xfa, 0xde, 0x1f, 0x2e, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, - 0x43, 0x6f, 0x6e, 0x73, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0f, 0x70, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x19, 0x0a, 0x08, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x67, 0x61, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x61, 0x78, 0x47, 0x61, 0x73, 0x4a, 0x04, 0x08, 0x02, 0x10, - 0x03, 0x52, 0x08, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x2a, 0x0a, 0x14, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xb7, 0x03, 0x0a, 0x16, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x54, 0x72, 0x61, 0x63, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x31, 0x0a, 0x03, 0x74, 0x78, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x54, 0x78, - 0x52, 0x03, 0x74, 0x78, 0x73, 0x12, 0x40, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x54, - 0x72, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x63, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x48, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0d, 0xc8, 0xde, 0x1f, 0x00, 0x90, - 0xdf, 0x1f, 0x01, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x5d, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x5f, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x32, 0xfa, - 0xde, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, - 0x0d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x67, 0x61, 0x73, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x61, 0x78, 0x47, 0x61, - 0x73, 0x22, 0x2d, 0x0a, 0x17, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x72, 0x61, 0x63, 0x65, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x22, 0x15, 0x0a, 0x13, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x61, 0x73, 0x65, 0x46, 0x65, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4c, 0x0a, 0x14, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x42, 0x61, 0x73, 0x65, 0x46, 0x65, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x34, 0x0a, 0x08, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x66, 0x65, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x19, 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, - 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x07, 0x62, 0x61, - 0x73, 0x65, 0x46, 0x65, 0x65, 0x22, 0x1f, 0x0a, 0x1d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x6c, - 0x6f, 0x62, 0x61, 0x6c, 0x4d, 0x69, 0x6e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x63, 0x0a, 0x1e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, - 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4d, 0x69, 0x6e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x0d, 0x6d, 0x69, 0x6e, 0x5f, - 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x1d, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, - 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x0b, - 0x6d, 0x69, 0x6e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x32, 0x8a, 0x0f, 0x0a, 0x05, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x85, 0x01, 0x0a, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2f, 0x65, 0x76, 0x6d, 0x2f, 0x76, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x2f, 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, 0x9e, 0x01, - 0x0a, 0x0d, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x2b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x2c, 0x12, 0x2a, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x65, 0x76, 0x6d, 0x2f, - 0x76, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x2f, 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, 0xaf, - 0x01, 0x0a, 0x10, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x2e, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, - 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, - 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x12, 0x32, 0x2f, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x65, 0x76, 0x6d, 0x2f, 0x76, 0x6d, 0x2f, 0x76, 0x31, 0x2f, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x2f, 0x7b, 0x63, 0x6f, 0x6e, 0x73, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, - 0x12, 0x86, 0x01, 0x0a, 0x07, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x25, 0x2e, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, - 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x65, 0x76, 0x6d, - 0x2f, 0x76, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, - 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, 0x8b, 0x01, 0x0a, 0x07, 0x53, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, - 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x12, 0x29, 0x2f, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x65, 0x76, 0x6d, 0x2f, 0x76, 0x6d, 0x2f, 0x76, 0x31, 0x2f, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2f, 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x7d, 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x7d, 0x12, 0x7a, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x22, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, - 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, - 0x12, 0x21, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x65, 0x76, 0x6d, 0x2f, 0x76, 0x6d, - 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2f, 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x7d, 0x12, 0x77, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x24, 0x2e, + 0x6d, 0x54, 0x78, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x40, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x63, + 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, + 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, + 0x31, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x74, + 0x72, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x43, 0x0a, 0x0c, 0x70, 0x72, + 0x65, 0x64, 0x65, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x54, + 0x78, 0x52, 0x0c, 0x70, 0x72, 0x65, 0x64, 0x65, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x12, + 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x61, 0x73, 0x68, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, + 0x68, 0x12, 0x48, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x42, 0x0d, 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, + 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x5d, 0x0a, 0x10, 0x70, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x32, 0xfa, 0xde, 0x1f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, + 0x6e, 0x73, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, + 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6d, + 0x61, 0x78, 0x5f, 0x67, 0x61, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x4d, 0x61, 0x78, 0x47, 0x61, 0x73, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, + 0x08, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x2a, 0x0a, 0x14, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xb7, 0x03, 0x0a, 0x16, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, + 0x72, 0x61, 0x63, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x31, 0x0a, 0x03, 0x74, 0x78, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, - 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x65, 0x76, 0x6d, 0x2f, - 0x76, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x78, 0x0a, 0x07, - 0x45, 0x74, 0x68, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x74, 0x68, 0x43, 0x61, - 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, - 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2f, 0x65, 0x76, 0x6d, 0x2f, 0x76, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x74, - 0x68, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x12, 0x7e, 0x0a, 0x0b, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, - 0x74, 0x65, 0x47, 0x61, 0x73, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, - 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x74, 0x68, 0x43, 0x61, 0x6c, 0x6c, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x73, 0x74, 0x69, 0x6d, - 0x61, 0x74, 0x65, 0x47, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, - 0x65, 0x76, 0x6d, 0x2f, 0x76, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, - 0x74, 0x65, 0x5f, 0x67, 0x61, 0x73, 0x12, 0x7c, 0x0a, 0x07, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, - 0x78, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, - 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2f, 0x65, 0x76, 0x6d, 0x2f, 0x76, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x72, 0x61, 0x63, - 0x65, 0x5f, 0x74, 0x78, 0x12, 0x88, 0x01, 0x0a, 0x0a, 0x54, 0x72, 0x61, 0x63, 0x65, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x12, 0x28, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, - 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x72, 0x61, 0x63, - 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, + 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x54, 0x78, 0x52, 0x03, + 0x74, 0x78, 0x73, 0x12, 0x40, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, + 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x63, 0x65, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x48, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0d, 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, + 0x01, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x5d, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x32, 0xfa, 0xde, 0x1f, + 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, + 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x67, 0x61, 0x73, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x61, 0x78, 0x47, 0x61, 0x73, 0x22, + 0x2d, 0x0a, 0x17, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x72, 0x61, 0x63, 0x65, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x15, + 0x0a, 0x13, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x61, 0x73, 0x65, 0x46, 0x65, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4c, 0x0a, 0x14, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x61, + 0x73, 0x65, 0x46, 0x65, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, + 0x08, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x66, 0x65, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x19, 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, + 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x07, 0x62, 0x61, 0x73, 0x65, + 0x46, 0x65, 0x65, 0x22, 0x1f, 0x0a, 0x1d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x6c, 0x6f, 0x62, + 0x61, 0x6c, 0x4d, 0x69, 0x6e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x22, 0x63, 0x0a, 0x1e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x6c, 0x6f, + 0x62, 0x61, 0x6c, 0x4d, 0x69, 0x6e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x0d, 0x6d, 0x69, 0x6e, 0x5f, 0x67, 0x61, + 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0xc8, + 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, + 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x0b, 0x6d, 0x69, + 0x6e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x32, 0x8a, 0x0f, 0x0a, 0x05, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x12, 0x85, 0x01, 0x0a, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x25, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, + 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, + 0x65, 0x76, 0x6d, 0x2f, 0x76, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x2f, 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, 0x9e, 0x01, 0x0a, 0x0d, + 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x72, 0x61, 0x63, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, - 0x12, 0x1d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x65, 0x76, 0x6d, 0x2f, 0x76, 0x6d, - 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, - 0x7c, 0x0a, 0x07, 0x42, 0x61, 0x73, 0x65, 0x46, 0x65, 0x65, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x73, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, + 0x12, 0x2a, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x65, 0x76, 0x6d, 0x2f, 0x76, 0x6d, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x2f, 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, 0xaf, 0x01, 0x0a, + 0x10, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x2e, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, + 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, + 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x12, 0x32, 0x2f, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2f, 0x65, 0x76, 0x6d, 0x2f, 0x76, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2f, + 0x7b, 0x63, 0x6f, 0x6e, 0x73, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, 0x86, + 0x01, 0x0a, 0x07, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x42, 0x61, 0x73, 0x65, 0x46, 0x65, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x65, 0x72, 0x79, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x61, 0x73, 0x65, 0x46, 0x65, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1c, 0x12, 0x1a, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x65, 0x76, 0x6d, 0x2f, 0x76, - 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x66, 0x65, 0x65, 0x12, 0x77, 0x0a, - 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x24, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, - 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x65, 0x76, 0x6d, 0x2f, 0x76, 0x6d, 0x2f, 0x76, 0x31, 0x2f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x9f, 0x01, 0x0a, 0x11, 0x47, 0x6c, 0x6f, 0x62, 0x61, - 0x6c, 0x4d, 0x69, 0x6e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x2f, 0x2e, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4d, 0x69, 0x6e, 0x47, 0x61, - 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, + 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x26, 0x12, 0x24, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x65, 0x76, 0x6d, 0x2f, 0x76, + 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, 0x8b, 0x01, 0x0a, 0x07, 0x53, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, + 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x12, 0x29, 0x2f, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2f, 0x65, 0x76, 0x6d, 0x2f, 0x76, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2f, 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2f, + 0x7b, 0x6b, 0x65, 0x79, 0x7d, 0x12, 0x7a, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4d, 0x69, 0x6e, 0x47, - 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2f, 0x65, 0x76, 0x6d, 0x2f, 0x76, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x69, 0x6e, 0x5f, 0x67, - 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x42, 0xad, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, - 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, - 0x31, 0x42, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, - 0x26, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x65, 0x76, 0x6d, 0x2f, 0x76, 0x6d, 0x2f, - 0x76, 0x31, 0x3b, 0x76, 0x6d, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x45, 0x56, 0xaa, 0x02, 0x10, - 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x45, 0x76, 0x6d, 0x2e, 0x56, 0x6d, 0x2e, 0x56, 0x31, - 0xca, 0x02, 0x10, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x45, 0x76, 0x6d, 0x5c, 0x56, 0x6d, - 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1c, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x45, 0x76, 0x6d, - 0x5c, 0x56, 0x6d, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0xea, 0x02, 0x13, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x45, 0x76, 0x6d, - 0x3a, 0x3a, 0x56, 0x6d, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x23, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, + 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x12, 0x21, + 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x65, 0x76, 0x6d, 0x2f, 0x76, 0x6d, 0x2f, 0x76, + 0x31, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2f, 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x7d, 0x12, 0x77, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x24, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x25, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, + 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, + 0x12, 0x18, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x65, 0x76, 0x6d, 0x2f, 0x76, 0x6d, + 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x78, 0x0a, 0x07, 0x45, 0x74, + 0x68, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, + 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x74, 0x68, 0x43, 0x61, 0x6c, 0x6c, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x74, + 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2f, 0x65, 0x76, 0x6d, 0x2f, 0x76, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x74, 0x68, 0x5f, + 0x63, 0x61, 0x6c, 0x6c, 0x12, 0x7e, 0x0a, 0x0b, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, + 0x47, 0x61, 0x73, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, + 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x74, 0x68, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, + 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, + 0x65, 0x47, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x65, 0x76, + 0x6d, 0x2f, 0x76, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, + 0x5f, 0x67, 0x61, 0x73, 0x12, 0x7c, 0x0a, 0x07, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, 0x78, 0x12, + 0x25, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, + 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x72, 0x61, 0x63, 0x65, 0x54, 0x78, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, + 0x72, 0x61, 0x63, 0x65, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, + 0x65, 0x76, 0x6d, 0x2f, 0x76, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, + 0x74, 0x78, 0x12, 0x88, 0x01, 0x0a, 0x0a, 0x54, 0x72, 0x61, 0x63, 0x65, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x12, 0x28, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, + 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x72, 0x61, 0x63, 0x65, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x54, 0x72, 0x61, 0x63, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, + 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x65, 0x76, 0x6d, 0x2f, 0x76, 0x6d, 0x2f, 0x76, + 0x31, 0x2f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x7c, 0x0a, + 0x07, 0x42, 0x61, 0x73, 0x65, 0x46, 0x65, 0x65, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x42, 0x61, 0x73, 0x65, 0x46, 0x65, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, + 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x61, 0x73, 0x65, 0x46, 0x65, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, + 0x1a, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x65, 0x76, 0x6d, 0x2f, 0x76, 0x6d, 0x2f, + 0x76, 0x31, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x66, 0x65, 0x65, 0x12, 0x77, 0x0a, 0x06, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x24, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, + 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2f, 0x65, 0x76, 0x6d, 0x2f, 0x76, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x9f, 0x01, 0x0a, 0x11, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4d, + 0x69, 0x6e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x2f, 0x2e, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4d, 0x69, 0x6e, 0x47, 0x61, 0x73, 0x50, + 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x4d, 0x69, 0x6e, 0x47, 0x61, 0x73, + 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x65, + 0x76, 0x6d, 0x2f, 0x76, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x69, 0x6e, 0x5f, 0x67, 0x61, 0x73, + 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x42, 0xad, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x65, 0x76, 0x6d, 0x2e, 0x76, 0x6d, 0x2e, 0x76, 0x31, 0x42, + 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x26, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x65, 0x76, 0x6d, 0x2f, 0x76, 0x6d, 0x2f, 0x76, 0x31, + 0x3b, 0x76, 0x6d, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x45, 0x56, 0xaa, 0x02, 0x10, 0x43, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x45, 0x76, 0x6d, 0x2e, 0x56, 0x6d, 0x2e, 0x56, 0x31, 0xca, 0x02, + 0x10, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x45, 0x76, 0x6d, 0x5c, 0x56, 0x6d, 0x5c, 0x56, + 0x31, 0xe2, 0x02, 0x1c, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x45, 0x76, 0x6d, 0x5c, 0x56, + 0x6d, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0xea, 0x02, 0x13, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x45, 0x76, 0x6d, 0x3a, 0x3a, + 0x56, 0x6d, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/cosmos/evm/vm/v1/query.proto b/proto/cosmos/evm/vm/v1/query.proto index c34d4b4d4..376d9bdeb 100644 --- a/proto/cosmos/evm/vm/v1/query.proto +++ b/proto/cosmos/evm/vm/v1/query.proto @@ -258,6 +258,8 @@ message EthCallRequest { "github.com/cosmos/cosmos-sdk/types.ConsAddress" ]; // chain_id is the eip155 chain id parsed from the requested block header int64 chain_id = 4; + // state overrides encoded as json + bytes overrides = 5; } // EstimateGasResponse defines EstimateGas response diff --git a/rpc/backend/backend.go b/rpc/backend/backend.go index 0f892ce48..ee9c7b975 100644 --- a/rpc/backend/backend.go +++ b/rpc/backend/backend.go @@ -2,6 +2,7 @@ package backend import ( "context" + "encoding/json" "fmt" "math/big" "time" @@ -112,7 +113,7 @@ type EVMBackend interface { SendRawTransaction(data hexutil.Bytes) (common.Hash, error) SetTxDefaults(args evmtypes.TransactionArgs) (evmtypes.TransactionArgs, error) EstimateGas(args evmtypes.TransactionArgs, blockNrOptional *rpctypes.BlockNumber) (hexutil.Uint64, error) - DoCall(args evmtypes.TransactionArgs, blockNr rpctypes.BlockNumber) (*evmtypes.MsgEthereumTxResponse, error) + DoCall(args evmtypes.TransactionArgs, blockNr rpctypes.BlockNumber, overrides *json.RawMessage) (*evmtypes.MsgEthereumTxResponse, error) GasPrice() (*hexutil.Big, error) // Filter API diff --git a/rpc/backend/call_tx.go b/rpc/backend/call_tx.go index fbc1554b7..76690a2e9 100644 --- a/rpc/backend/call_tx.go +++ b/rpc/backend/call_tx.go @@ -287,7 +287,10 @@ func (b *Backend) SetTxDefaults(args evmtypes.TransactionArgs) (evmtypes.Transac } // EstimateGas returns an estimate of gas usage for the given smart contract call. -func (b *Backend) EstimateGas(args evmtypes.TransactionArgs, blockNrOptional *rpctypes.BlockNumber) (hexutil.Uint64, error) { +func (b *Backend) EstimateGas( + args evmtypes.TransactionArgs, + blockNrOptional *rpctypes.BlockNumber, +) (hexutil.Uint64, error) { blockNr := rpctypes.EthPendingBlockNumber if blockNrOptional != nil { blockNr = *blockNrOptional @@ -327,7 +330,7 @@ func (b *Backend) EstimateGas(args evmtypes.TransactionArgs, blockNrOptional *rp // DoCall performs a simulated call operation through the evmtypes. It returns the // estimated gas used on the operation or an error if fails. func (b *Backend) DoCall( - args evmtypes.TransactionArgs, blockNr rpctypes.BlockNumber, + args evmtypes.TransactionArgs, blockNr rpctypes.BlockNumber, overrides *json.RawMessage, ) (*evmtypes.MsgEthereumTxResponse, error) { bz, err := json.Marshal(&args) if err != nil { @@ -339,11 +342,17 @@ func (b *Backend) DoCall( return nil, errors.New("header not found") } + var bzOverrides []byte + if overrides != nil { + bzOverrides = *overrides + } + req := evmtypes.EthCallRequest{ Args: bz, GasCap: b.RPCGasCap(), ProposerAddress: sdk.ConsAddress(header.Header.ProposerAddress), ChainId: b.EvmChainID.Int64(), + Overrides: bzOverrides, } // From ContextWithHeight: if the provided height is 0, diff --git a/rpc/namespaces/ethereum/eth/api.go b/rpc/namespaces/ethereum/eth/api.go index 98bb89138..9f8543d8f 100644 --- a/rpc/namespaces/ethereum/eth/api.go +++ b/rpc/namespaces/ethereum/eth/api.go @@ -2,7 +2,7 @@ package eth import ( "context" - "fmt" + "encoding/json" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" @@ -68,7 +68,7 @@ type EthereumAPI interface { // // Allows developers to read data from the blockchain which includes executing // smart contracts. However, no data is published to the Ethereum network. - Call(args evmtypes.TransactionArgs, blockNrOrHash rpctypes.BlockNumberOrHash, override *rpctypes.StateOverride) (hexutil.Bytes, error) + Call(args evmtypes.TransactionArgs, blockNrOrHash rpctypes.BlockNumberOrHash, overrides *json.RawMessage) (hexutil.Bytes, error) // Chain Information // @@ -266,22 +266,18 @@ func (e *PublicAPI) GetProof(address common.Address, /////////////////////////////////////////////////////////////////////////////// // Call performs a raw contract call. -func (e *PublicAPI) Call(args evmtypes.TransactionArgs, +func (e *PublicAPI) Call( + args evmtypes.TransactionArgs, blockNrOrHash rpctypes.BlockNumberOrHash, - override *rpctypes.StateOverride, + overrides *json.RawMessage, ) (hexutil.Bytes, error) { e.logger.Debug("eth_call", "args", args.String(), "block number or hash", blockNrOrHash) - if override != nil { - e.logger.Debug("eth_call", "error", "overrides are unsupported in call queries") - return nil, fmt.Errorf("overrides are unsupported in call queries") - } - blockNum, err := e.backend.BlockNumberFromTendermint(blockNrOrHash) if err != nil { return nil, err } - data, err := e.backend.DoCall(args, blockNum) + data, err := e.backend.DoCall(args, blockNum, overrides) if err != nil { return []byte{}, err } diff --git a/rpc/types/types.go b/rpc/types/types.go index df44e50d6..07fa21d27 100644 --- a/rpc/types/types.go +++ b/rpc/types/types.go @@ -1,11 +1,16 @@ package types import ( + "fmt" "math/big" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/tracing" ethtypes "github.com/ethereum/go-ethereum/core/types" + "github.com/holiman/uint256" + + "github.com/cosmos/evm/x/vm/statedb" ) // Copied the Account and StorageResult types since they are registered under an @@ -55,6 +60,42 @@ type RPCTransaction struct { // StateOverride is the collection of overridden accounts. type StateOverride map[common.Address]OverrideAccount +// Apply overrides the fields of specified accounts into the given state. +func (diff *StateOverride) Apply(db *statedb.StateDB) error { + if db == nil || diff == nil { + return nil + } + for addr, account := range *diff { + // Override account nonce. + if account.Nonce != nil { + db.SetNonce(addr, uint64(*account.Nonce), tracing.NonceChangeUnspecified) + } + // Override account(contract) code. + if account.Code != nil { + db.SetCode(addr, *account.Code) + } + // Override account balance. + if account.Balance != nil && *account.Balance != nil { + u256Balance, _ := uint256.FromBig((*big.Int)(*account.Balance)) + db.SetBalance(addr, u256Balance) + } + if account.State != nil && account.StateDiff != nil { + return fmt.Errorf("account %s has both 'state' and 'stateDiff'", addr.Hex()) + } + // Replace entire state if caller requires. + if account.State != nil { + db.SetStorage(addr, *account.State) + } + // Apply state diff into specified accounts. + if account.StateDiff != nil { + for key, value := range *account.StateDiff { + db.SetState(addr, key, value) + } + } + } + return nil +} + // OverrideAccount indicates the overriding fields of account during the execution of // a message call. // Note, state and stateDiff can't be specified at the same time. If state is diff --git a/tests/integration/rpc/backend/test_call_tx.go b/tests/integration/rpc/backend/test_call_tx.go index 66eb99140..f90b296f9 100644 --- a/tests/integration/rpc/backend/test_call_tx.go +++ b/tests/integration/rpc/backend/test_call_tx.go @@ -425,11 +425,24 @@ func (s *TestSuite) TestDoCall() { argsBz, err := json.Marshal(callArgs) s.Require().NoError(err) + overrides := json.RawMessage(`{ + "` + toAddr.Hex() + `": { + "balance": "0x1000000000000000000", + "nonce": "0x1", + "code": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063c6888fa11461003b578063c8e7ca2e14610057575b600080fd5b610055600480360381019061005091906100a3565b610075565b005b61005f61007f565b60405161006c91906100e1565b60405180910390f35b8060008190555050565b60008054905090565b600080fd5b6000819050919050565b61009d8161008a565b81146100a857600080fd5b50565b6000813590506100ba81610094565b92915050565b6000602082840312156100d6576100d5610085565b5b60006100e4848285016100ab565b91505092915050565b6100f68161008a565b82525050565b600060208201905061011160008301846100ed565b9291505056fea2646970667358221220c7d2d7c0b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b264736f6c634300080a0033", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x123" + } + } + }`) + invalidOverrides := json.RawMessage(`{"invalid": json}`) + emptyOverrides := json.RawMessage(`{}`) testCases := []struct { name string registerMock func() blockNum rpctypes.BlockNumber callArgs evmtypes.TransactionArgs + overrides *json.RawMessage expEthTx *evmtypes.MsgEthereumTxResponse expPass bool }{ @@ -444,6 +457,7 @@ func (s *TestSuite) TestDoCall() { }, rpctypes.BlockNumber(1), callArgs, + nil, &evmtypes.MsgEthereumTxResponse{}, false, }, @@ -458,6 +472,67 @@ func (s *TestSuite) TestDoCall() { }, rpctypes.BlockNumber(1), callArgs, + nil, + &evmtypes.MsgEthereumTxResponse{}, + true, + }, + { + "pass - With state overrides", + func() { + client := s.backend.ClientCtx.Client.(*mocks.Client) + QueryClient := s.backend.QueryClient.QueryClient.(*mocks.EVMQueryClient) + _, err := RegisterBlock(client, 1, bz) + s.Require().NoError(err) + expected := &evmtypes.EthCallRequest{ + Args: argsBz, + ChainId: s.backend.EvmChainID.Int64(), + Overrides: overrides, + } + RegisterEthCall(QueryClient, expected) + }, + rpctypes.BlockNumber(1), + callArgs, + &overrides, + &evmtypes.MsgEthereumTxResponse{}, + true, + }, + { + "fail - Invalid state overrides JSON", + func() { + client := s.backend.ClientCtx.Client.(*mocks.Client) + QueryClient := s.backend.QueryClient.QueryClient.(*mocks.EVMQueryClient) + _, err := RegisterBlock(client, 1, bz) + s.Require().NoError(err) + expected := &evmtypes.EthCallRequest{ + Args: argsBz, + ChainId: s.backend.EvmChainID.Int64(), + Overrides: invalidOverrides, + } + RegisterEthCallError(QueryClient, expected) + }, + rpctypes.BlockNumber(1), + callArgs, + &invalidOverrides, + &evmtypes.MsgEthereumTxResponse{}, + false, + }, + { + "pass - Empty state overrides", + func() { + client := s.backend.ClientCtx.Client.(*mocks.Client) + QueryClient := s.backend.QueryClient.QueryClient.(*mocks.EVMQueryClient) + _, err := RegisterBlock(client, 1, bz) + s.Require().NoError(err) + expected := &evmtypes.EthCallRequest{ + Args: argsBz, + ChainId: s.backend.EvmChainID.Int64(), + Overrides: emptyOverrides, + } + RegisterEthCall(QueryClient, expected) + }, + rpctypes.BlockNumber(1), + callArgs, + &emptyOverrides, &evmtypes.MsgEthereumTxResponse{}, true, }, @@ -468,9 +543,10 @@ func (s *TestSuite) TestDoCall() { s.SetupTest() // reset test and queries tc.registerMock() - msgEthTx, err := s.backend.DoCall(tc.callArgs, tc.blockNum) + msgEthTx, err := s.backend.DoCall(tc.callArgs, tc.blockNum, tc.overrides) if tc.expPass { + s.Require().NoError(err) s.Require().Equal(tc.expEthTx, msgEthTx) } else { s.Require().Error(err) diff --git a/tests/integration/x/vm/test_state_transition.go b/tests/integration/x/vm/test_state_transition.go index d39e2f096..1fcca7ae5 100644 --- a/tests/integration/x/vm/test_state_transition.go +++ b/tests/integration/x/vm/test_state_transition.go @@ -6,6 +6,7 @@ import ( "math/big" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core" gethtypes "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/params" @@ -14,6 +15,7 @@ import ( tmproto "github.com/cometbft/cometbft/proto/tendermint/types" cmttypes "github.com/cometbft/cometbft/types" + rpctypes "github.com/cosmos/evm/rpc/types" "github.com/cosmos/evm/testutil/config" "github.com/cosmos/evm/testutil/integration/evm/factory" "github.com/cosmos/evm/testutil/integration/evm/grpc" @@ -688,11 +690,24 @@ func (s *KeeperTestSuite) TestApplyMessageWithConfig() { s.EnableFeemarket = true defer func() { s.EnableFeemarket = false }() s.SetupTest() + + testAddr := utiltx.GenerateAddress() + balance := (*hexutil.Big)(big.NewInt(1000000000000000000)) + nonce := hexutil.Uint64(0) + + overrides := rpctypes.StateOverride{ + testAddr: rpctypes.OverrideAccount{ + Balance: &balance, + Nonce: &nonce, + }, + } + testCases := []struct { name string getMessage func() core.Message getEVMParams func() types.Params getFeeMarketParams func() feemarkettypes.Params + overrides *rpctypes.StateOverride expErr bool expVMErr bool expectedGasUsed uint64 @@ -711,6 +726,65 @@ func (s *KeeperTestSuite) TestApplyMessageWithConfig() { }, types.DefaultParams, feemarkettypes.DefaultParams, + nil, + false, + false, + params.TxGas, + }, + { + "success - message applied with balance override", + func() core.Message { + sender := s.Keyring.GetKey(0) + recipient := s.Keyring.GetAddr(1) + msg, err := s.Factory.GenerateGethCoreMsg(sender.Priv, types.EvmTxArgs{ + To: &recipient, + Amount: big.NewInt(100), + GasLimit: params.TxGas, + }) + s.Require().NoError(err) + return *msg + }, + types.DefaultParams, + feemarkettypes.DefaultParams, + &overrides, + false, + false, + params.TxGas, + }, + { + "success - simple transfer from overridden address", + func() core.Message { + sender := s.Keyring.GetKey(0) + recipient := s.Keyring.GetAddr(1) + msg, err := s.Factory.GenerateGethCoreMsg(sender.Priv, types.EvmTxArgs{ + To: &recipient, + Amount: big.NewInt(50), + }) + s.Require().NoError(err) + return *msg + }, + types.DefaultParams, + feemarkettypes.DefaultParams, + &overrides, + false, + false, + params.TxGas, + }, + { + "success - empty state overrides", + func() core.Message { + sender := s.Keyring.GetKey(0) + recipient := s.Keyring.GetAddr(1) + msg, err := s.Factory.GenerateGethCoreMsg(sender.Priv, types.EvmTxArgs{ + To: &recipient, + Amount: big.NewInt(100), + }) + s.Require().NoError(err) + return *msg + }, + types.DefaultParams, + feemarkettypes.DefaultParams, + &rpctypes.StateOverride{}, false, false, params.TxGas, @@ -738,6 +812,7 @@ func (s *KeeperTestSuite) TestApplyMessageWithConfig() { return defaultParams }, feemarkettypes.DefaultParams, + nil, false, true, 0, @@ -763,6 +838,7 @@ func (s *KeeperTestSuite) TestApplyMessageWithConfig() { return defaultParams }, feemarkettypes.DefaultParams, + nil, false, true, 0, @@ -787,6 +863,7 @@ func (s *KeeperTestSuite) TestApplyMessageWithConfig() { params.MinGasMultiplier = sdkmath.LegacyNewDec(math.MaxInt64).MulInt64(100) return params }, + nil, true, false, 0, @@ -820,15 +897,27 @@ func (s *KeeperTestSuite) TestApplyMessageWithConfig() { ) s.Require().NoError(err) - // Function being tested - res, err := s.Network.App.GetEVMKeeper().ApplyMessageWithConfig(s.Network.GetContext(), msg, nil, true, config, txConfig, false) + res, err := s.Network.App.GetEVMKeeper().ApplyMessageWithConfig( + s.Network.GetContext(), + msg, + nil, + true, + config, + txConfig, + false, + tc.overrides, + ) if tc.expErr { s.Require().Error(err) } else if !tc.expVMErr { s.Require().NoError(err) s.Require().False(res.Failed()) - s.Require().Equal(tc.expectedGasUsed, res.GasUsed) + if tc.overrides != nil && len(*tc.overrides) > 0 { + s.Require().Equal(tc.expectedGasUsed, res.GasUsed) + } else { + s.Require().Equal(tc.expectedGasUsed, res.GasUsed) + } } err = s.Network.NextBlock() @@ -837,11 +926,6 @@ func (s *KeeperTestSuite) TestApplyMessageWithConfig() { return } - if tc.expVMErr { - s.Require().NotEmpty(res.VmError) - return - } - s.Require().NoError(err) }) } diff --git a/x/vm/keeper/grpc_query.go b/x/vm/keeper/grpc_query.go index 3c8f787ef..0e7ea99db 100644 --- a/x/vm/keeper/grpc_query.go +++ b/x/vm/keeper/grpc_query.go @@ -21,6 +21,7 @@ import ( tmproto "github.com/cometbft/cometbft/proto/tendermint/types" + rpctypes "github.com/cosmos/evm/rpc/types" cosmosevmtypes "github.com/cosmos/evm/types" evmante "github.com/cosmos/evm/x/vm/ante" "github.com/cosmos/evm/x/vm/statedb" @@ -229,6 +230,13 @@ func (k Keeper) EthCall(c context.Context, req *types.EthCallRequest) (*types.Ms return nil, status.Error(codes.InvalidArgument, "empty request") } + var overrides rpctypes.StateOverride + if len(req.Overrides) > 0 { + if err := json.Unmarshal(req.Overrides, &overrides); err != nil { + return nil, status.Error(codes.InvalidArgument, fmt.Sprintf("invalid state overrides format: %s", err.Error())) + } + } + ctx := sdk.UnwrapSDKContext(c) var args types.TransactionArgs @@ -254,7 +262,7 @@ func (k Keeper) EthCall(c context.Context, req *types.EthCallRequest) (*types.Ms txConfig := statedb.NewEmptyTxConfig(common.BytesToHash(ctx.HeaderHash())) // pass false to not commit StateDB - res, err := k.ApplyMessageWithConfig(ctx, msg, nil, false, cfg, txConfig, false) + res, err := k.ApplyMessageWithConfig(ctx, msg, nil, false, cfg, txConfig, false, &overrides) if err != nil { return nil, status.Error(codes.Internal, err.Error()) } @@ -390,7 +398,7 @@ func (k Keeper) EstimateGasInternal(c context.Context, req *types.EthCallRequest tmpCtx = buildTraceCtx(tmpCtx, msg.GasLimit) } // pass false to not commit StateDB - rsp, err = k.ApplyMessageWithConfig(tmpCtx, msg, nil, false, cfg, txConfig, false) + rsp, err = k.ApplyMessageWithConfig(tmpCtx, msg, nil, false, cfg, txConfig, false, nil) if err != nil { if errors.Is(err, core.ErrIntrinsicGas) { return true, nil, nil // Special case, raise gas limit @@ -505,7 +513,7 @@ func (k Keeper) TraceTx(c context.Context, req *types.QueryTraceTxRequest) (*typ ctx = buildTraceCtx(ctx, msg.GasLimit) // we ignore the error here. this endpoint, ideally, is called internally from the ETH backend, which will call this query // using all previous txs in the trace transaction's block. some of those _could_ be invalid transactions. - rsp, _ := k.ApplyMessageWithConfig(ctx, *msg, nil, true, cfg, txConfig, false) + rsp, _ := k.ApplyMessageWithConfig(ctx, *msg, nil, true, cfg, txConfig, false, nil) if rsp != nil { ctx.GasMeter().ConsumeGas(rsp.GasUsed, "evm predecessor tx") txConfig.LogIndex += uint(len(rsp.Logs)) @@ -690,7 +698,7 @@ func (k *Keeper) traceTx( // Build EVM execution context ctx = buildTraceCtx(ctx, msg.GasLimit) - res, err := k.ApplyMessageWithConfig(ctx, *msg, tracer.Hooks, commitMessage, cfg, txConfig, false) + res, err := k.ApplyMessageWithConfig(ctx, *msg, tracer.Hooks, commitMessage, cfg, txConfig, false, nil) if err != nil { return nil, 0, status.Error(codes.Internal, err.Error()) } diff --git a/x/vm/keeper/state_transition.go b/x/vm/keeper/state_transition.go index 2c518878d..9d8eae443 100644 --- a/x/vm/keeper/state_transition.go +++ b/x/vm/keeper/state_transition.go @@ -13,6 +13,7 @@ import ( cmttypes "github.com/cometbft/cometbft/types" + rpctypes "github.com/cosmos/evm/rpc/types" cosmosevmtypes "github.com/cosmos/evm/types" "github.com/cosmos/evm/utils" "github.com/cosmos/evm/x/vm/statedb" @@ -193,7 +194,7 @@ func (k *Keeper) ApplyTransaction(ctx sdk.Context, tx *ethtypes.Transaction) (*t tmpCtx, commitFn := ctx.CacheContext() // pass true to commit the StateDB - res, err := k.ApplyMessageWithConfig(tmpCtx, *msg, nil, true, cfg, txConfig, false) + res, err := k.ApplyMessageWithConfig(tmpCtx, *msg, nil, true, cfg, txConfig, false, nil) if err != nil { // when a transaction contains multiple msg, as long as one of the msg fails // all gas will be deducted. so is not msg.Gas() @@ -293,7 +294,7 @@ func (k *Keeper) ApplyMessage(ctx sdk.Context, msg core.Message, tracer *tracing } txConfig := statedb.NewEmptyTxConfig(common.BytesToHash(ctx.HeaderHash())) - return k.ApplyMessageWithConfig(ctx, msg, tracer, commit, cfg, txConfig, internal) + return k.ApplyMessageWithConfig(ctx, msg, tracer, commit, cfg, txConfig, internal, nil) } // ApplyMessageWithConfig computes the new state by applying the given message against the existing state. @@ -334,13 +335,27 @@ func (k *Keeper) ApplyMessage(ctx sdk.Context, msg core.Message, tracer *tracing // # Commit parameter // // If commit is true, the `StateDB` will be committed, otherwise discarded. -func (k *Keeper) ApplyMessageWithConfig(ctx sdk.Context, msg core.Message, tracer *tracing.Hooks, commit bool, cfg *statedb.EVMConfig, txConfig statedb.TxConfig, internal bool) (*types.MsgEthereumTxResponse, error) { +func (k *Keeper) ApplyMessageWithConfig( + ctx sdk.Context, + msg core.Message, + tracer *tracing.Hooks, + commit bool, + cfg *statedb.EVMConfig, + txConfig statedb.TxConfig, + internal bool, + overrides *rpctypes.StateOverride, +) (*types.MsgEthereumTxResponse, error) { var ( ret []byte // return bytes from evm execution vmErr error // vm errors do not effect consensus and are therefore not assigned to err ) stateDB := statedb.New(ctx, k, txConfig) + if overrides != nil { + if err := overrides.Apply(stateDB); err != nil { + return nil, errorsmod.Wrap(err, "failed to apply state override") + } + } evm := k.NewEVM(ctx, msg, cfg, tracer, stateDB) leftoverGas := msg.GasLimit diff --git a/x/vm/statedb/state_object.go b/x/vm/statedb/state_object.go index a85bcb4df..fc9d1b988 100644 --- a/x/vm/statedb/state_object.go +++ b/x/vm/statedb/state_object.go @@ -66,6 +66,9 @@ type stateObject struct { // state storage originStorage Storage dirtyStorage Storage + // overridden state, when not nil, replace the whole committed state, + // mainly to support the stateOverrides in eth_call. + overrideStorage Storage address common.Address @@ -228,6 +231,13 @@ func (s *stateObject) Nonce() uint64 { // GetCommittedState query the committed state func (s *stateObject) GetCommittedState(key common.Hash) common.Hash { + if s.overrideStorage != nil { + if value, ok := s.overrideStorage[key]; ok { + return value + } + return common.Hash{} + } + if value, cached := s.originStorage[key]; cached { return value } @@ -263,6 +273,12 @@ func (s *stateObject) SetState(key common.Hash, value common.Hash) common.Hash { return prev } +func (s *stateObject) SetStorage(storage Storage) { + s.overrideStorage = storage + s.originStorage = make(Storage) + s.dirtyStorage = make(Storage) +} + func (s *stateObject) setState(key, value common.Hash) { s.dirtyStorage[key] = value } diff --git a/x/vm/statedb/statedb.go b/x/vm/statedb/statedb.go index cce997d66..4a1dc2db5 100644 --- a/x/vm/statedb/statedb.go +++ b/x/vm/statedb/statedb.go @@ -486,6 +486,22 @@ func (s *StateDB) SetState(addr common.Address, key, value common.Hash) common.H return common.Hash{} } +// SetBalance sets the balance of account associated with addr to amount. +func (s *StateDB) SetBalance(addr common.Address, amount *uint256.Int) { + stateObject := s.getOrNewStateObject(addr) + if stateObject != nil { + stateObject.SetBalance(amount) + } +} + +// SetStorage replaces the entire storage for the specified account with given +// storage. This function should only be used for debugging and the mutations +// must be discarded afterwards. +func (s *StateDB) SetStorage(addr common.Address, storage Storage) { + stateObject := s.getOrNewStateObject(addr) + stateObject.SetStorage(storage) +} + // SelfDestruct marks the given account as self-destructed. // This clears the account balance. // diff --git a/x/vm/statedb/statedb_test.go b/x/vm/statedb/statedb_test.go index 07b54bf1c..2272506b4 100644 --- a/x/vm/statedb/statedb_test.go +++ b/x/vm/statedb/statedb_test.go @@ -690,6 +690,45 @@ func (suite *StateDBTestSuite) TestIterateStorage() { suite.Require().Equal(1, len(storage)) } +func (suite *StateDBTestSuite) TestSetStorage() { + contract := common.BigToAddress(big.NewInt(101)) + + testCases := []struct { + name string + prestate map[common.Hash]common.Hash + assert func(*statedb.StateDB) + }{ + { + "set storage", + map[common.Hash]common.Hash{ + common.BigToHash(big.NewInt(0)): common.BigToHash(big.NewInt(0)), + common.BigToHash(big.NewInt(1)): common.BigToHash(big.NewInt(1)), + common.BigToHash(big.NewInt(2)): common.BigToHash(big.NewInt(2)), + }, + func(db *statedb.StateDB) { + db.SetStorage(contract, map[common.Hash]common.Hash{ + common.BigToHash(big.NewInt(1)): common.BigToHash(big.NewInt(3)), + }) + + suite.Require().Equal(common.Hash{}, db.GetState(contract, common.BigToHash(big.NewInt(0)))) + suite.Require().Equal(common.BigToHash(big.NewInt(3)), db.GetState(contract, common.BigToHash(big.NewInt(1)))) + suite.Require().Equal(common.Hash{}, db.GetState(contract, common.BigToHash(big.NewInt(2)))) + }, + }, + } + + for _, tc := range testCases { + suite.Run(tc.name, func() { + keeper := mocks.NewEVMKeeper() + db := statedb.New(sdk.Context{}, keeper, emptyTxConfig) + for k, v := range tc.prestate { + db.SetState(contract, k, v) + } + tc.assert(db) + }) + } +} + func CollectContractStorage(db vm.StateDB) statedb.Storage { storage := make(statedb.Storage) stDB, ok := db.(*statedb.StateDB) diff --git a/x/vm/types/query.pb.go b/x/vm/types/query.pb.go index 218ebe7d5..ea0eb51f4 100644 --- a/x/vm/types/query.pb.go +++ b/x/vm/types/query.pb.go @@ -881,6 +881,8 @@ type EthCallRequest struct { ProposerAddress github_com_cosmos_cosmos_sdk_types.ConsAddress `protobuf:"bytes,3,opt,name=proposer_address,json=proposerAddress,proto3,casttype=github.com/cosmos/cosmos-sdk/types.ConsAddress" json:"proposer_address,omitempty"` // chain_id is the eip155 chain id parsed from the requested block header ChainId int64 `protobuf:"varint,4,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + // state overrides encoded as json + Overrides []byte `protobuf:"bytes,5,opt,name=overrides,proto3" json:"overrides,omitempty"` } func (m *EthCallRequest) Reset() { *m = EthCallRequest{} } @@ -944,6 +946,13 @@ func (m *EthCallRequest) GetChainId() int64 { return 0 } +func (m *EthCallRequest) GetOverrides() []byte { + if m != nil { + return m.Overrides + } + return nil +} + // EstimateGasResponse defines EstimateGas response type EstimateGasResponse struct { // gas returns the estimated gas @@ -1517,109 +1526,110 @@ func init() { func init() { proto.RegisterFile("cosmos/evm/vm/v1/query.proto", fileDescriptor_0e8f08e175b3ef0c) } var fileDescriptor_0e8f08e175b3ef0c = []byte{ - // 1624 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x58, 0xcf, 0x6f, 0x13, 0xc7, - 0x17, 0xcf, 0xc6, 0x4e, 0xec, 0x8c, 0x13, 0x08, 0x43, 0xf8, 0xe2, 0xec, 0x37, 0xb1, 0xc3, 0x42, - 0x7e, 0x12, 0x76, 0x49, 0x4a, 0x2b, 0x95, 0x1e, 0xda, 0x24, 0x0a, 0x81, 0x02, 0x15, 0xdd, 0x46, - 0x3d, 0x54, 0xaa, 0xac, 0xf1, 0x7a, 0x58, 0xaf, 0xe2, 0xdd, 0x31, 0x3b, 0xeb, 0xd4, 0x81, 0xd2, - 0x43, 0xa5, 0x22, 0x28, 0x17, 0xa4, 0xde, 0x5b, 0x8e, 0xbd, 0xb5, 0x37, 0xfe, 0x05, 0x8e, 0x48, - 0xbd, 0x54, 0x3d, 0xd0, 0x0a, 0x2a, 0xb5, 0x7f, 0x43, 0x4f, 0xd5, 0xfc, 0x58, 0xdb, 0xeb, 0xf5, - 0xda, 0xa1, 0xa2, 0xb7, 0x4a, 0x56, 0x32, 0x3f, 0xde, 0xbc, 0xf7, 0x79, 0x6f, 0xde, 0xbc, 0xf7, - 0xb1, 0xc1, 0x8c, 0x45, 0xa8, 0x4b, 0xa8, 0x81, 0xf7, 0x5d, 0x83, 0x7d, 0xd6, 0x8c, 0x5b, 0x0d, - 0xec, 0x1f, 0xe8, 0x75, 0x9f, 0x04, 0x04, 0x4e, 0x8a, 0x5d, 0x1d, 0xef, 0xbb, 0x3a, 0xfb, 0xac, - 0xa9, 0xc7, 0x90, 0xeb, 0x78, 0xc4, 0xe0, 0x7f, 0x85, 0x90, 0xba, 0x22, 0x55, 0x94, 0x11, 0xc5, - 0xe2, 0xb4, 0xb1, 0xbf, 0x56, 0xc6, 0x01, 0x5a, 0x33, 0xea, 0xc8, 0x76, 0x3c, 0x14, 0x38, 0xc4, - 0x93, 0xb2, 0x6a, 0xcc, 0x1c, 0x53, 0x2d, 0xf6, 0xa6, 0x63, 0x7b, 0x41, 0x53, 0x6e, 0x4d, 0xd9, - 0xc4, 0x26, 0x7c, 0x68, 0xb0, 0x91, 0x5c, 0x9d, 0xb1, 0x09, 0xb1, 0x6b, 0xd8, 0x40, 0x75, 0xc7, - 0x40, 0x9e, 0x47, 0x02, 0x6e, 0x89, 0xca, 0xdd, 0xa2, 0xdc, 0xe5, 0xb3, 0x72, 0xe3, 0xa6, 0x11, - 0x38, 0x2e, 0xa6, 0x01, 0x72, 0xeb, 0x42, 0x40, 0x9b, 0x02, 0xf0, 0x43, 0x86, 0x76, 0x8b, 0x78, - 0x37, 0x1d, 0xdb, 0xc4, 0xb7, 0x1a, 0x98, 0x06, 0xda, 0x35, 0x70, 0x3c, 0xb2, 0x4a, 0xeb, 0xc4, - 0xa3, 0x18, 0xbe, 0x09, 0x46, 0x2d, 0xbe, 0x92, 0x57, 0xe6, 0x94, 0xa5, 0xdc, 0xfa, 0xac, 0xde, - 0x1d, 0x1a, 0x7d, 0xab, 0x8a, 0x1c, 0x4f, 0x1e, 0x93, 0xc2, 0xda, 0xdb, 0x52, 0xdb, 0x86, 0x65, - 0x91, 0x86, 0x17, 0x48, 0x23, 0x30, 0x0f, 0x32, 0xa8, 0x52, 0xf1, 0x31, 0xa5, 0x5c, 0xdd, 0x98, - 0x19, 0x4e, 0x2f, 0x66, 0xef, 0x3f, 0x2e, 0x0e, 0xfd, 0xf9, 0xb8, 0x38, 0xa4, 0x59, 0x60, 0x2a, - 0x7a, 0x54, 0x22, 0xc9, 0x83, 0x4c, 0x19, 0xd5, 0x90, 0x67, 0xe1, 0xf0, 0xac, 0x9c, 0xc2, 0xff, - 0x83, 0x31, 0x8b, 0x54, 0x70, 0xa9, 0x8a, 0x68, 0x35, 0x3f, 0xcc, 0xf7, 0xb2, 0x6c, 0xe1, 0x32, - 0xa2, 0x55, 0x38, 0x05, 0x46, 0x3c, 0xc2, 0x0e, 0xa5, 0xe6, 0x94, 0xa5, 0xb4, 0x29, 0x26, 0xda, - 0xbb, 0x60, 0x5a, 0x7a, 0xcb, 0x9c, 0xf9, 0x07, 0x28, 0xef, 0x29, 0x40, 0xed, 0xa5, 0x41, 0x82, - 0x9d, 0x07, 0x47, 0x44, 0x9c, 0x4a, 0x51, 0x4d, 0x13, 0x62, 0x75, 0x43, 0x2c, 0x42, 0x15, 0x64, - 0x29, 0x33, 0xca, 0xf0, 0x0d, 0x73, 0x7c, 0xad, 0x39, 0x53, 0x81, 0x84, 0xd6, 0x92, 0xd7, 0x70, - 0xcb, 0xd8, 0x97, 0x1e, 0x4c, 0xc8, 0xd5, 0x0f, 0xf8, 0xa2, 0x76, 0x15, 0xcc, 0x70, 0x1c, 0x1f, - 0xa3, 0x9a, 0x53, 0x41, 0x01, 0xf1, 0xbb, 0x9c, 0x39, 0x05, 0xc6, 0x2d, 0xe2, 0x75, 0xe3, 0xc8, - 0xb1, 0xb5, 0x8d, 0x98, 0x57, 0x0f, 0x15, 0x30, 0x9b, 0xa0, 0x4d, 0x3a, 0xb6, 0x08, 0x8e, 0x86, - 0xa8, 0xa2, 0x1a, 0x43, 0xb0, 0xaf, 0xd1, 0xb5, 0x30, 0x89, 0x36, 0xc5, 0x3d, 0xbf, 0xca, 0xf5, - 0x9c, 0x97, 0x49, 0xd4, 0x3a, 0x3a, 0x28, 0x89, 0xb4, 0xab, 0xd2, 0xd8, 0x47, 0x01, 0xf1, 0x91, - 0x3d, 0xd8, 0x18, 0x9c, 0x04, 0xa9, 0x3d, 0x7c, 0x20, 0xf3, 0x8d, 0x0d, 0x3b, 0xcc, 0xaf, 0x4a, - 0xf3, 0x2d, 0x65, 0xd2, 0xfc, 0x14, 0x18, 0xd9, 0x47, 0xb5, 0x46, 0x68, 0x5c, 0x4c, 0xb4, 0xb7, - 0xc0, 0xa4, 0x4c, 0xa5, 0xca, 0x2b, 0x39, 0xb9, 0x08, 0x8e, 0x75, 0x9c, 0x93, 0x26, 0x20, 0x48, - 0xb3, 0xdc, 0xe7, 0xa7, 0xc6, 0x4d, 0x3e, 0xd6, 0x6e, 0xcb, 0x17, 0xbf, 0xdb, 0xbc, 0x46, 0x6c, - 0x1a, 0x9a, 0x80, 0x20, 0xcd, 0x5f, 0x8c, 0xd0, 0xcf, 0xc7, 0xf0, 0x12, 0x00, 0xed, 0xda, 0xc5, - 0x7d, 0xcb, 0xad, 0x2f, 0x84, 0x4f, 0x9e, 0x15, 0x3a, 0x5d, 0x94, 0x49, 0x59, 0xe8, 0xf4, 0x1b, - 0xed, 0x50, 0x99, 0x1d, 0x27, 0x3b, 0x40, 0x3e, 0x50, 0x64, 0x60, 0x43, 0xe3, 0x12, 0xe7, 0x32, - 0x48, 0xd7, 0x88, 0xcd, 0xbc, 0x4b, 0x2d, 0xe5, 0xd6, 0x4f, 0xc4, 0xcb, 0xca, 0x35, 0x62, 0x9b, - 0x5c, 0x04, 0xee, 0xf4, 0x00, 0xb5, 0x38, 0x10, 0x94, 0xb0, 0xd3, 0x89, 0xaa, 0x55, 0xf9, 0x6e, - 0x20, 0x1f, 0xb9, 0x61, 0x1c, 0x34, 0x53, 0x02, 0x0c, 0x57, 0x25, 0xc0, 0x77, 0xc0, 0x68, 0x9d, - 0xaf, 0xc8, 0xca, 0x97, 0x8f, 0x43, 0x14, 0x27, 0x36, 0xc7, 0x9e, 0x3e, 0x2f, 0x0e, 0x7d, 0xff, - 0xc7, 0x8f, 0x2b, 0x8a, 0x29, 0x8f, 0x68, 0x4f, 0x14, 0x70, 0x64, 0x3b, 0xa8, 0x6e, 0xa1, 0x5a, - 0xad, 0x23, 0xdc, 0xc8, 0xb7, 0x69, 0x78, 0x31, 0x6c, 0x0c, 0x4f, 0x82, 0x8c, 0x8d, 0x68, 0xc9, - 0x42, 0x75, 0xf9, 0x46, 0x46, 0x6d, 0x44, 0xb7, 0x50, 0x1d, 0x7e, 0x0a, 0x26, 0xeb, 0x3e, 0xa9, - 0x13, 0x8a, 0xfd, 0xd6, 0x3b, 0x63, 0x6f, 0x64, 0x7c, 0x73, 0xfd, 0xaf, 0xe7, 0x45, 0xdd, 0x76, - 0x82, 0x6a, 0xa3, 0xac, 0x5b, 0xc4, 0x35, 0x64, 0xf3, 0x10, 0xff, 0xce, 0xd1, 0xca, 0x9e, 0x11, - 0x1c, 0xd4, 0x31, 0xd5, 0xb7, 0xda, 0x0f, 0xdc, 0x3c, 0x1a, 0xea, 0x0a, 0x1f, 0xe7, 0x34, 0xc8, - 0x5a, 0xac, 0x6a, 0x97, 0x9c, 0x4a, 0x3e, 0x3d, 0xa7, 0x2c, 0xa5, 0xcc, 0x0c, 0x9f, 0x5f, 0xa9, - 0x68, 0xbb, 0xe0, 0xf8, 0x36, 0x0d, 0x1c, 0x17, 0x05, 0x78, 0x07, 0xb5, 0xa3, 0x31, 0x09, 0x52, - 0x36, 0x12, 0xe0, 0xd3, 0x26, 0x1b, 0xb2, 0x15, 0x1f, 0x07, 0x1c, 0xf7, 0xb8, 0xc9, 0x86, 0x4c, - 0xeb, 0xbe, 0x5b, 0xc2, 0xbe, 0x4f, 0xc4, 0x83, 0x1e, 0x33, 0x33, 0xfb, 0xee, 0x36, 0x9b, 0x6a, - 0x0f, 0xd2, 0x61, 0x16, 0xf8, 0xc8, 0xc2, 0xbb, 0xcd, 0x30, 0x28, 0x6b, 0x20, 0xe5, 0xd2, 0xb0, - 0xb7, 0x14, 0xe3, 0x11, 0xbe, 0x4e, 0xed, 0xed, 0xa0, 0x8a, 0x7d, 0xdc, 0x70, 0x77, 0x9b, 0x26, - 0x93, 0x85, 0xef, 0x81, 0xf1, 0x80, 0x29, 0x29, 0xc9, 0xbe, 0x94, 0x4a, 0xea, 0x4b, 0xdc, 0x94, - 0xec, 0x4b, 0xb9, 0xa0, 0x3d, 0x81, 0x5b, 0x60, 0xbc, 0xee, 0xe3, 0x0a, 0xb6, 0x30, 0xa5, 0xc4, - 0xa7, 0xf9, 0x34, 0x4f, 0xc1, 0x81, 0xd6, 0x23, 0x87, 0x58, 0x5d, 0x2d, 0xd7, 0x88, 0xb5, 0x17, - 0x56, 0xb0, 0x11, 0x1e, 0xc6, 0x1c, 0x5f, 0x13, 0xf5, 0x0b, 0xce, 0x02, 0x20, 0x44, 0xf8, 0x33, - 0x1b, 0xe5, 0x11, 0x19, 0xe3, 0x2b, 0xbc, 0x33, 0x5d, 0x0e, 0xb7, 0x59, 0x83, 0xce, 0x67, 0xb8, - 0x1b, 0xaa, 0x2e, 0xba, 0xb7, 0x1e, 0x76, 0x6f, 0x7d, 0x37, 0xec, 0xde, 0x9b, 0x13, 0x2c, 0xcd, - 0x1e, 0xfd, 0x5a, 0x54, 0x44, 0xaa, 0x09, 0x4d, 0x6c, 0xbb, 0x67, 0xb6, 0x64, 0xff, 0x9d, 0x6c, - 0x19, 0x8b, 0x64, 0x0b, 0xd4, 0xc0, 0x84, 0xf0, 0xc1, 0x45, 0xcd, 0x12, 0x4b, 0x10, 0xd0, 0x11, - 0x86, 0xeb, 0xa8, 0xb9, 0x83, 0xe8, 0xfb, 0xe9, 0xec, 0xf0, 0x64, 0xca, 0xcc, 0x06, 0xcd, 0x92, - 0xe3, 0x55, 0x70, 0x53, 0x5b, 0x91, 0xc5, 0xb1, 0x95, 0x0a, 0xed, 0xca, 0x55, 0x41, 0x01, 0x0a, - 0x1f, 0x08, 0x1b, 0x6b, 0x4f, 0x52, 0xe0, 0x7f, 0x6d, 0xe1, 0x4d, 0xa6, 0xb5, 0x23, 0x75, 0x82, - 0x66, 0x58, 0x3f, 0x06, 0xa7, 0x4e, 0xd0, 0xa4, 0xaf, 0x21, 0x75, 0xfe, 0xbb, 0xf5, 0x43, 0xde, - 0xba, 0x76, 0x0e, 0x9c, 0x8c, 0x5d, 0x5c, 0x9f, 0x8b, 0x3e, 0xd1, 0xea, 0xf5, 0x14, 0x5f, 0xc2, - 0xb8, 0xcd, 0x4a, 0xa7, 0xa2, 0xcb, 0x52, 0xc5, 0x05, 0x90, 0x65, 0x85, 0xbf, 0x74, 0x13, 0xcb, - 0x5e, 0xba, 0x39, 0xfd, 0xcb, 0xf3, 0xe2, 0x09, 0xe1, 0x21, 0xad, 0xec, 0xe9, 0x0e, 0x31, 0x5c, - 0x14, 0x54, 0xf5, 0x2b, 0x5e, 0xc0, 0x7a, 0x3c, 0x3f, 0xad, 0x15, 0x25, 0xbb, 0xd9, 0xa9, 0x91, - 0x32, 0xaa, 0x5d, 0x77, 0xbc, 0x1d, 0x44, 0x6f, 0xf8, 0x4e, 0x8b, 0x5a, 0x68, 0x16, 0x28, 0x24, - 0x09, 0x48, 0xc3, 0x1b, 0x60, 0xc2, 0x75, 0x3c, 0xe6, 0x74, 0xa9, 0xce, 0x36, 0xa4, 0xf5, 0x59, - 0x76, 0x4b, 0xc9, 0x08, 0x72, 0x6e, 0x5b, 0xd5, 0xfa, 0xd7, 0x47, 0xc1, 0x08, 0xb7, 0x02, 0xbf, - 0x52, 0x40, 0x46, 0x12, 0x2c, 0x38, 0x1f, 0xcf, 0xc2, 0x1e, 0x0c, 0x5a, 0x5d, 0x18, 0x24, 0x26, - 0x70, 0x6a, 0x67, 0xbf, 0xfc, 0xe9, 0xf7, 0x6f, 0x86, 0xe7, 0xe1, 0x69, 0x23, 0xf6, 0xed, 0x42, - 0x92, 0x2c, 0xe3, 0x8e, 0x4c, 0x9a, 0xbb, 0xf0, 0x5b, 0x05, 0x4c, 0x44, 0x78, 0x2c, 0x3c, 0x9b, - 0x60, 0xa6, 0x17, 0x5f, 0x56, 0x57, 0x0f, 0x27, 0x2c, 0x91, 0xad, 0x73, 0x64, 0xab, 0x70, 0x25, - 0x8e, 0x2c, 0xa4, 0xcc, 0x31, 0x80, 0x3f, 0x28, 0x60, 0xb2, 0x9b, 0x92, 0x42, 0x3d, 0xc1, 0x6c, - 0x02, 0x13, 0x56, 0x8d, 0x43, 0xcb, 0x4b, 0xa4, 0x17, 0x39, 0xd2, 0x0b, 0x70, 0x3d, 0x8e, 0x74, - 0x3f, 0x3c, 0xd3, 0x06, 0xdb, 0xc9, 0xb2, 0xef, 0xc2, 0x7b, 0x0a, 0xc8, 0x48, 0xf2, 0x99, 0x78, - 0xb5, 0x51, 0x5e, 0x9b, 0x78, 0xb5, 0x5d, 0x1c, 0x56, 0x5b, 0xe5, 0xb0, 0x16, 0xe0, 0x99, 0x38, - 0x2c, 0x49, 0x66, 0x69, 0x47, 0xe8, 0x1e, 0x2a, 0x20, 0x23, 0x69, 0x68, 0x22, 0x90, 0x28, 0xe7, - 0x4d, 0x04, 0xd2, 0xc5, 0x66, 0xb5, 0x35, 0x0e, 0xe4, 0x2c, 0x5c, 0x8e, 0x03, 0xa1, 0x42, 0xb4, - 0x8d, 0xc3, 0xb8, 0xb3, 0x87, 0x0f, 0xee, 0xc2, 0xdb, 0x20, 0xcd, 0xd8, 0x2a, 0xd4, 0x12, 0x53, - 0xa6, 0x45, 0x81, 0xd5, 0xd3, 0x7d, 0x65, 0x24, 0x86, 0x65, 0x8e, 0xe1, 0x34, 0x3c, 0xd5, 0x2b, - 0x9b, 0x2a, 0x91, 0x48, 0x7c, 0x06, 0x46, 0x05, 0x61, 0x83, 0x67, 0x12, 0x34, 0x47, 0x78, 0xa1, - 0x3a, 0x3f, 0x40, 0x4a, 0x22, 0x98, 0xe3, 0x08, 0x54, 0x98, 0x8f, 0x23, 0x10, 0x64, 0x10, 0x36, - 0x41, 0x46, 0x72, 0x41, 0x38, 0x17, 0xd7, 0x19, 0xa5, 0x89, 0xea, 0xe2, 0xa0, 0x4e, 0x16, 0xda, - 0xd5, 0xb8, 0xdd, 0x19, 0xa8, 0xc6, 0xed, 0xe2, 0xa0, 0x5a, 0xb2, 0x98, 0xb9, 0x2f, 0x40, 0xae, - 0x83, 0xcc, 0x1d, 0xc2, 0x7a, 0x0f, 0x9f, 0x7b, 0xb0, 0x41, 0x6d, 0x81, 0xdb, 0x9e, 0x83, 0x85, - 0x1e, 0xb6, 0xa5, 0x38, 0x2b, 0x91, 0xf0, 0x73, 0x90, 0x91, 0x5d, 0x3e, 0x31, 0xf7, 0xa2, 0x84, - 0x30, 0x31, 0xf7, 0xba, 0xc8, 0x42, 0x3f, 0xef, 0x45, 0x8b, 0x0f, 0x9a, 0xf0, 0xbe, 0x02, 0x40, - 0xbb, 0xfd, 0xc0, 0xa5, 0x7e, 0xaa, 0x3b, 0xa9, 0x85, 0xba, 0x7c, 0x08, 0x49, 0x89, 0x63, 0x9e, - 0xe3, 0x28, 0xc2, 0xd9, 0x24, 0x1c, 0xbc, 0x27, 0xb2, 0x40, 0xc8, 0x16, 0xd6, 0xa7, 0x1a, 0x74, - 0x76, 0xbe, 0x3e, 0xd5, 0x20, 0xd2, 0x09, 0xfb, 0x05, 0x22, 0xec, 0x90, 0x2c, 0xf3, 0x25, 0x7f, - 0x39, 0x93, 0xf8, 0xa6, 0x3a, 0x7e, 0x0b, 0x4a, 0xcc, 0xfc, 0xe8, 0x6f, 0x43, 0xfd, 0x32, 0x5f, - 0x10, 0x2c, 0xf8, 0x9d, 0x02, 0x8e, 0xc5, 0x7a, 0x29, 0x4c, 0x2a, 0xc4, 0x49, 0x6d, 0x59, 0x3d, - 0x7f, 0xf8, 0x03, 0x12, 0xda, 0x22, 0x87, 0x76, 0x0a, 0x16, 0xe3, 0xd0, 0x22, 0xed, 0x7b, 0xf3, - 0xe2, 0xd3, 0x17, 0x05, 0xe5, 0xd9, 0x8b, 0x82, 0xf2, 0xdb, 0x8b, 0x82, 0xf2, 0xe8, 0x65, 0x61, - 0xe8, 0xd9, 0xcb, 0xc2, 0xd0, 0xcf, 0x2f, 0x0b, 0x43, 0x9f, 0xcc, 0xc5, 0x09, 0x14, 0x53, 0xd2, - 0x64, 0x6a, 0x38, 0x7d, 0x2a, 0x8f, 0x72, 0xba, 0xf6, 0xc6, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, - 0xd0, 0x32, 0x62, 0xca, 0x4c, 0x14, 0x00, 0x00, + // 1640 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x58, 0xcf, 0x6f, 0x1b, 0xc5, + 0x17, 0xcf, 0xc6, 0x4e, 0xec, 0x8c, 0x93, 0x36, 0x9d, 0xa6, 0xdf, 0x3a, 0xfb, 0x4d, 0xec, 0x74, + 0xdb, 0xfc, 0x6c, 0xba, 0xdb, 0x84, 0x82, 0x44, 0x39, 0x40, 0x12, 0xa5, 0x69, 0x69, 0x8b, 0xca, + 0x12, 0x71, 0x40, 0x42, 0xd6, 0x78, 0x3d, 0x5d, 0xaf, 0xe2, 0xdd, 0x71, 0x77, 0xd6, 0xc6, 0x69, + 0x29, 0x07, 0x24, 0xaa, 0x96, 0x5e, 0x2a, 0x71, 0x87, 0x1e, 0xb9, 0xc1, 0x8d, 0x7f, 0xa1, 0xc7, + 0x4a, 0x08, 0x09, 0x71, 0x28, 0xa8, 0x45, 0x82, 0xbf, 0x81, 0x13, 0x9a, 0x1f, 0x6b, 0x7b, 0xb3, + 0x5e, 0x3b, 0x45, 0xe5, 0x86, 0x14, 0xb5, 0x3b, 0x6f, 0xde, 0xbc, 0xf7, 0x79, 0x6f, 0xde, 0xbc, + 0xf7, 0x49, 0xc0, 0x8c, 0x45, 0xa8, 0x4b, 0xa8, 0x81, 0x9b, 0xae, 0xc1, 0x7e, 0xd6, 0x8c, 0x5b, + 0x0d, 0xec, 0xef, 0xeb, 0x75, 0x9f, 0x04, 0x04, 0x4e, 0x8a, 0x5d, 0x1d, 0x37, 0x5d, 0x9d, 0xfd, + 0xac, 0xa9, 0xc7, 0x90, 0xeb, 0x78, 0xc4, 0xe0, 0xff, 0x0a, 0x25, 0x75, 0x45, 0x9a, 0x28, 0x23, + 0x8a, 0xc5, 0x69, 0xa3, 0xb9, 0x56, 0xc6, 0x01, 0x5a, 0x33, 0xea, 0xc8, 0x76, 0x3c, 0x14, 0x38, + 0xc4, 0x93, 0xba, 0x6a, 0xcc, 0x1d, 0x33, 0x2d, 0xf6, 0xa6, 0x63, 0x7b, 0x41, 0x4b, 0x6e, 0x4d, + 0xd9, 0xc4, 0x26, 0xfc, 0xd3, 0x60, 0x5f, 0x52, 0x3a, 0x63, 0x13, 0x62, 0xd7, 0xb0, 0x81, 0xea, + 0x8e, 0x81, 0x3c, 0x8f, 0x04, 0xdc, 0x13, 0x95, 0xbb, 0x45, 0xb9, 0xcb, 0x57, 0xe5, 0xc6, 0x4d, + 0x23, 0x70, 0x5c, 0x4c, 0x03, 0xe4, 0xd6, 0x85, 0x82, 0x36, 0x05, 0xe0, 0xfb, 0x0c, 0xed, 0x16, + 0xf1, 0x6e, 0x3a, 0xb6, 0x89, 0x6f, 0x35, 0x30, 0x0d, 0xb4, 0x6b, 0xe0, 0x78, 0x44, 0x4a, 0xeb, + 0xc4, 0xa3, 0x18, 0xbe, 0x0e, 0x46, 0x2d, 0x2e, 0xc9, 0x2b, 0x73, 0xca, 0x52, 0x6e, 0x7d, 0x56, + 0x3f, 0x98, 0x1a, 0x7d, 0xab, 0x8a, 0x1c, 0x4f, 0x1e, 0x93, 0xca, 0xda, 0x9b, 0xd2, 0xda, 0x86, + 0x65, 0x91, 0x86, 0x17, 0x48, 0x27, 0x30, 0x0f, 0x32, 0xa8, 0x52, 0xf1, 0x31, 0xa5, 0xdc, 0xdc, + 0x98, 0x19, 0x2e, 0x2f, 0x66, 0xef, 0x3f, 0x2e, 0x0e, 0xfd, 0xf9, 0xb8, 0x38, 0xa4, 0x59, 0x60, + 0x2a, 0x7a, 0x54, 0x22, 0xc9, 0x83, 0x4c, 0x19, 0xd5, 0x90, 0x67, 0xe1, 0xf0, 0xac, 0x5c, 0xc2, + 0xff, 0x83, 0x31, 0x8b, 0x54, 0x70, 0xa9, 0x8a, 0x68, 0x35, 0x3f, 0xcc, 0xf7, 0xb2, 0x4c, 0x70, + 0x19, 0xd1, 0x2a, 0x9c, 0x02, 0x23, 0x1e, 0x61, 0x87, 0x52, 0x73, 0xca, 0x52, 0xda, 0x14, 0x0b, + 0xed, 0x6d, 0x30, 0x2d, 0xa3, 0x65, 0xc1, 0xfc, 0x03, 0x94, 0xf7, 0x14, 0xa0, 0xf6, 0xb2, 0x20, + 0xc1, 0xce, 0x83, 0x23, 0x22, 0x4f, 0xa5, 0xa8, 0xa5, 0x09, 0x21, 0xdd, 0x10, 0x42, 0xa8, 0x82, + 0x2c, 0x65, 0x4e, 0x19, 0xbe, 0x61, 0x8e, 0xaf, 0xbd, 0x66, 0x26, 0x90, 0xb0, 0x5a, 0xf2, 0x1a, + 0x6e, 0x19, 0xfb, 0x32, 0x82, 0x09, 0x29, 0x7d, 0x8f, 0x0b, 0xb5, 0xab, 0x60, 0x86, 0xe3, 0xf8, + 0x10, 0xd5, 0x9c, 0x0a, 0x0a, 0x88, 0x7f, 0x20, 0x98, 0x53, 0x60, 0xdc, 0x22, 0xde, 0x41, 0x1c, + 0x39, 0x26, 0xdb, 0x88, 0x45, 0xf5, 0x50, 0x01, 0xb3, 0x09, 0xd6, 0x64, 0x60, 0x8b, 0xe0, 0x68, + 0x88, 0x2a, 0x6a, 0x31, 0x04, 0xfb, 0x0a, 0x43, 0x0b, 0x8b, 0x68, 0x53, 0xdc, 0xf3, 0xcb, 0x5c, + 0xcf, 0x79, 0x59, 0x44, 0xed, 0xa3, 0x83, 0x8a, 0x48, 0xbb, 0x2a, 0x9d, 0x7d, 0x10, 0x10, 0x1f, + 0xd9, 0x83, 0x9d, 0xc1, 0x49, 0x90, 0xda, 0xc3, 0xfb, 0xb2, 0xde, 0xd8, 0x67, 0x97, 0xfb, 0x55, + 0xe9, 0xbe, 0x6d, 0x4c, 0xba, 0x9f, 0x02, 0x23, 0x4d, 0x54, 0x6b, 0x84, 0xce, 0xc5, 0x42, 0x7b, + 0x03, 0x4c, 0xca, 0x52, 0xaa, 0xbc, 0x54, 0x90, 0x8b, 0xe0, 0x58, 0xd7, 0x39, 0xe9, 0x02, 0x82, + 0x34, 0xab, 0x7d, 0x7e, 0x6a, 0xdc, 0xe4, 0xdf, 0xda, 0x6d, 0xf9, 0xe2, 0x77, 0x5b, 0xd7, 0x88, + 0x4d, 0x43, 0x17, 0x10, 0xa4, 0xf9, 0x8b, 0x11, 0xf6, 0xf9, 0x37, 0xbc, 0x04, 0x40, 0xa7, 0x77, + 0xf1, 0xd8, 0x72, 0xeb, 0x0b, 0xe1, 0x93, 0x67, 0x8d, 0x4e, 0x17, 0x6d, 0x52, 0x36, 0x3a, 0xfd, + 0x46, 0x27, 0x55, 0x66, 0xd7, 0xc9, 0x2e, 0x90, 0x0f, 0x14, 0x99, 0xd8, 0xd0, 0xb9, 0xc4, 0xb9, + 0x0c, 0xd2, 0x35, 0x62, 0xb3, 0xe8, 0x52, 0x4b, 0xb9, 0xf5, 0x13, 0xf1, 0xb6, 0x72, 0x8d, 0xd8, + 0x26, 0x57, 0x81, 0x3b, 0x3d, 0x40, 0x2d, 0x0e, 0x04, 0x25, 0xfc, 0x74, 0xa3, 0x6a, 0x77, 0xbe, + 0x1b, 0xc8, 0x47, 0x6e, 0x98, 0x07, 0xcd, 0x94, 0x00, 0x43, 0xa9, 0x04, 0xf8, 0x16, 0x18, 0xad, + 0x73, 0x89, 0xec, 0x7c, 0xf9, 0x38, 0x44, 0x71, 0x62, 0x73, 0xec, 0xc9, 0xb3, 0xe2, 0xd0, 0xb7, + 0x7f, 0x7c, 0xbf, 0xa2, 0x98, 0xf2, 0x88, 0xf6, 0x93, 0x02, 0x8e, 0x6c, 0x07, 0xd5, 0x2d, 0x54, + 0xab, 0x75, 0xa5, 0x1b, 0xf9, 0x36, 0x0d, 0x2f, 0x86, 0x7d, 0xc3, 0x93, 0x20, 0x63, 0x23, 0x5a, + 0xb2, 0x50, 0x5d, 0xbe, 0x91, 0x51, 0x1b, 0xd1, 0x2d, 0x54, 0x87, 0x1f, 0x83, 0xc9, 0xba, 0x4f, + 0xea, 0x84, 0x62, 0xbf, 0xfd, 0xce, 0xd8, 0x1b, 0x19, 0xdf, 0x5c, 0xff, 0xeb, 0x59, 0x51, 0xb7, + 0x9d, 0xa0, 0xda, 0x28, 0xeb, 0x16, 0x71, 0x0d, 0x39, 0x3c, 0xc4, 0x7f, 0xe7, 0x68, 0x65, 0xcf, + 0x08, 0xf6, 0xeb, 0x98, 0xea, 0x5b, 0x9d, 0x07, 0x6e, 0x1e, 0x0d, 0x6d, 0x85, 0x8f, 0x73, 0x1a, + 0x64, 0x2d, 0xd6, 0xb5, 0x4b, 0x4e, 0x25, 0x9f, 0x9e, 0x53, 0x96, 0x52, 0x66, 0x86, 0xaf, 0xaf, + 0x54, 0xe0, 0x0c, 0x18, 0x23, 0x4d, 0xec, 0xfb, 0x4e, 0x05, 0xd3, 0xfc, 0x08, 0xc7, 0xda, 0x11, + 0x68, 0xbb, 0xe0, 0xf8, 0x36, 0x0d, 0x1c, 0x17, 0x05, 0x78, 0x07, 0x75, 0x72, 0x35, 0x09, 0x52, + 0x36, 0x12, 0xa1, 0xa5, 0x4d, 0xf6, 0xc9, 0x24, 0x3e, 0x0e, 0x78, 0x54, 0xe3, 0x26, 0xfb, 0x64, + 0x3e, 0x9b, 0x6e, 0x09, 0xfb, 0x3e, 0x11, 0xcf, 0x7d, 0xcc, 0xcc, 0x34, 0xdd, 0x6d, 0xb6, 0xd4, + 0x1e, 0xa4, 0xc3, 0x1a, 0xf1, 0x91, 0x85, 0x77, 0x5b, 0x61, 0xca, 0xd6, 0x40, 0xca, 0xa5, 0xe1, + 0xe4, 0x29, 0xc6, 0xf3, 0x7f, 0x9d, 0xda, 0xdb, 0x41, 0x15, 0xfb, 0xb8, 0xe1, 0xee, 0xb6, 0x4c, + 0xa6, 0x0b, 0xdf, 0x01, 0xe3, 0x01, 0x33, 0x52, 0x92, 0x53, 0x2b, 0x95, 0x34, 0xb5, 0xb8, 0x2b, + 0x39, 0xb5, 0x72, 0x41, 0x67, 0x01, 0xb7, 0xc0, 0x78, 0xdd, 0xc7, 0x15, 0x6c, 0x61, 0x4a, 0x89, + 0x4f, 0xf3, 0x69, 0x5e, 0xa0, 0x03, 0xbd, 0x47, 0x0e, 0xb1, 0xae, 0x5b, 0xae, 0x11, 0x6b, 0x2f, + 0xec, 0x6f, 0x23, 0x3c, 0xc9, 0x39, 0x2e, 0x13, 0xdd, 0x0d, 0xce, 0x02, 0x20, 0x54, 0xf8, 0x23, + 0x1c, 0xe5, 0x19, 0x19, 0xe3, 0x12, 0x3e, 0xb7, 0x2e, 0x87, 0xdb, 0x6c, 0x7c, 0xe7, 0x33, 0x3c, + 0x0c, 0x55, 0x17, 0xb3, 0x5d, 0x0f, 0x67, 0xbb, 0xbe, 0x1b, 0xce, 0xf6, 0xcd, 0x09, 0x56, 0x84, + 0x8f, 0x7e, 0x2d, 0x2a, 0xa2, 0x10, 0x85, 0x25, 0xb6, 0xdd, 0xb3, 0x96, 0xb2, 0xff, 0x4e, 0x2d, + 0x8d, 0x45, 0x6b, 0x49, 0x03, 0x13, 0x22, 0x06, 0x17, 0xb5, 0x4a, 0xac, 0x40, 0x40, 0x57, 0x1a, + 0xae, 0xa3, 0xd6, 0x0e, 0xa2, 0xef, 0xa6, 0xb3, 0xc3, 0x93, 0x29, 0x33, 0x1b, 0xb4, 0x4a, 0x8e, + 0x57, 0xc1, 0x2d, 0x6d, 0x45, 0xb6, 0xce, 0x76, 0x29, 0x74, 0xfa, 0x5a, 0x05, 0x05, 0x28, 0x7c, + 0x3e, 0xec, 0x5b, 0xfb, 0x21, 0x05, 0xfe, 0xd7, 0x51, 0xde, 0x64, 0x56, 0xbb, 0x4a, 0x27, 0x68, + 0x85, 0xdd, 0x65, 0x70, 0xe9, 0x04, 0x2d, 0xfa, 0x0a, 0x4a, 0xe7, 0xbf, 0x5b, 0x3f, 0xe4, 0xad, + 0x6b, 0xe7, 0xc0, 0xc9, 0xd8, 0xc5, 0xf5, 0xb9, 0xe8, 0x13, 0x6d, 0x26, 0x40, 0xf1, 0x25, 0x8c, + 0x3b, 0x9c, 0x75, 0x2a, 0x2a, 0x96, 0x26, 0x2e, 0x80, 0x2c, 0x1b, 0x0b, 0xa5, 0x9b, 0x58, 0x4e, + 0xda, 0xcd, 0xe9, 0x5f, 0x9e, 0x15, 0x4f, 0x88, 0x08, 0x69, 0x65, 0x4f, 0x77, 0x88, 0xe1, 0xa2, + 0xa0, 0xaa, 0x5f, 0xf1, 0x02, 0xc6, 0x00, 0xf8, 0x69, 0xad, 0x28, 0xb9, 0xcf, 0x4e, 0x8d, 0x94, + 0x51, 0xed, 0xba, 0xe3, 0xed, 0x20, 0x7a, 0xc3, 0x77, 0xda, 0xc4, 0x43, 0xb3, 0x40, 0x21, 0x49, + 0x41, 0x3a, 0xde, 0x00, 0x13, 0xae, 0xe3, 0xb1, 0xa0, 0x4b, 0x75, 0xb6, 0x21, 0xbd, 0xcf, 0xb2, + 0x5b, 0x4a, 0x46, 0x90, 0x73, 0x3b, 0xa6, 0xd6, 0xbf, 0x3c, 0x0a, 0x46, 0xb8, 0x17, 0xf8, 0x85, + 0x02, 0x32, 0x92, 0x7e, 0xc1, 0xf9, 0x78, 0x15, 0xf6, 0xe0, 0xd7, 0xea, 0xc2, 0x20, 0x35, 0x81, + 0x53, 0x3b, 0xfb, 0xf9, 0x8f, 0xbf, 0x7f, 0x35, 0x3c, 0x0f, 0x4f, 0x1b, 0xb1, 0xdf, 0x3d, 0x24, + 0x05, 0x33, 0xee, 0xc8, 0xa2, 0xb9, 0x0b, 0xbf, 0x56, 0xc0, 0x44, 0x84, 0xe5, 0xc2, 0xb3, 0x09, + 0x6e, 0x7a, 0xb1, 0x69, 0x75, 0xf5, 0x70, 0xca, 0x12, 0xd9, 0x3a, 0x47, 0xb6, 0x0a, 0x57, 0xe2, + 0xc8, 0x42, 0x42, 0x1d, 0x03, 0xf8, 0x9d, 0x02, 0x26, 0x0f, 0x12, 0x56, 0xa8, 0x27, 0xb8, 0x4d, + 0xe0, 0xc9, 0xaa, 0x71, 0x68, 0x7d, 0x89, 0xf4, 0x22, 0x47, 0x7a, 0x01, 0xae, 0xc7, 0x91, 0x36, + 0xc3, 0x33, 0x1d, 0xb0, 0xdd, 0x1c, 0xfc, 0x2e, 0xbc, 0xa7, 0x80, 0x8c, 0xa4, 0xa6, 0x89, 0x57, + 0x1b, 0x65, 0xbd, 0x89, 0x57, 0x7b, 0x80, 0xe1, 0x6a, 0xab, 0x1c, 0xd6, 0x02, 0x3c, 0x13, 0x87, + 0x25, 0xa9, 0x2e, 0xed, 0x4a, 0xdd, 0x43, 0x05, 0x64, 0x24, 0x49, 0x4d, 0x04, 0x12, 0x65, 0xc4, + 0x89, 0x40, 0x0e, 0x70, 0x5d, 0x6d, 0x8d, 0x03, 0x39, 0x0b, 0x97, 0xe3, 0x40, 0xa8, 0x50, 0xed, + 0xe0, 0x30, 0xee, 0xec, 0xe1, 0xfd, 0xbb, 0xf0, 0x36, 0x48, 0x33, 0x2e, 0x0b, 0xb5, 0xc4, 0x92, + 0x69, 0x13, 0x64, 0xf5, 0x74, 0x5f, 0x1d, 0x89, 0x61, 0x99, 0x63, 0x38, 0x0d, 0x4f, 0xf5, 0xaa, + 0xa6, 0x4a, 0x24, 0x13, 0x9f, 0x80, 0x51, 0x41, 0xe7, 0xe0, 0x99, 0x04, 0xcb, 0x11, 0xd6, 0xa8, + 0xce, 0x0f, 0xd0, 0x92, 0x08, 0xe6, 0x38, 0x02, 0x15, 0xe6, 0xe3, 0x08, 0x04, 0x55, 0x84, 0x2d, + 0x90, 0x91, 0x4c, 0x11, 0xce, 0xc5, 0x6d, 0x46, 0x49, 0xa4, 0xba, 0x38, 0x68, 0x92, 0x85, 0x7e, + 0x35, 0xee, 0x77, 0x06, 0xaa, 0x71, 0xbf, 0x38, 0xa8, 0x96, 0x2c, 0xe6, 0xee, 0x33, 0x90, 0xeb, + 0x22, 0x73, 0x87, 0xf0, 0xde, 0x23, 0xe6, 0x1e, 0x6c, 0x50, 0x5b, 0xe0, 0xbe, 0xe7, 0x60, 0xa1, + 0x87, 0x6f, 0xa9, 0xce, 0x5a, 0x24, 0xfc, 0x14, 0x64, 0xe4, 0x94, 0x4f, 0xac, 0xbd, 0x28, 0x21, + 0x4c, 0xac, 0xbd, 0x03, 0x64, 0xa1, 0x5f, 0xf4, 0x62, 0xc4, 0x07, 0x2d, 0x78, 0x5f, 0x01, 0xa0, + 0x33, 0x7e, 0xe0, 0x52, 0x3f, 0xd3, 0xdd, 0xd4, 0x42, 0x5d, 0x3e, 0x84, 0xa6, 0xc4, 0x31, 0xcf, + 0x71, 0x14, 0xe1, 0x6c, 0x12, 0x0e, 0x3e, 0x13, 0x59, 0x22, 0xe4, 0x08, 0xeb, 0xd3, 0x0d, 0xba, + 0x27, 0x5f, 0x9f, 0x6e, 0x10, 0x99, 0x84, 0xfd, 0x12, 0x11, 0x4e, 0x48, 0x56, 0xf9, 0x92, 0xbf, + 0x9c, 0x49, 0x7c, 0x53, 0x5d, 0x7f, 0x29, 0x4a, 0xac, 0xfc, 0xe8, 0x5f, 0x8e, 0xfa, 0x55, 0xbe, + 0x20, 0x58, 0xf0, 0x1b, 0x05, 0x1c, 0x8b, 0xcd, 0x52, 0x98, 0xd4, 0x88, 0x93, 0xc6, 0xb2, 0x7a, + 0xfe, 0xf0, 0x07, 0x24, 0xb4, 0x45, 0x0e, 0xed, 0x14, 0x2c, 0xc6, 0xa1, 0x45, 0xc6, 0xf7, 0xe6, + 0xc5, 0x27, 0xcf, 0x0b, 0xca, 0xd3, 0xe7, 0x05, 0xe5, 0xb7, 0xe7, 0x05, 0xe5, 0xd1, 0x8b, 0xc2, + 0xd0, 0xd3, 0x17, 0x85, 0xa1, 0x9f, 0x5f, 0x14, 0x86, 0x3e, 0x9a, 0x8b, 0x13, 0x28, 0x66, 0xa4, + 0xc5, 0xcc, 0x70, 0xfa, 0x54, 0x1e, 0xe5, 0x74, 0xed, 0xb5, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, + 0x50, 0xfe, 0xe3, 0x4a, 0x6a, 0x14, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -2838,6 +2848,13 @@ func (m *EthCallRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.Overrides) > 0 { + i -= len(m.Overrides) + copy(dAtA[i:], m.Overrides) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Overrides))) + i-- + dAtA[i] = 0x2a + } if m.ChainId != 0 { i = encodeVarintQuery(dAtA, i, uint64(m.ChainId)) i-- @@ -3553,6 +3570,10 @@ func (m *EthCallRequest) Size() (n int) { if m.ChainId != 0 { n += 1 + sovQuery(uint64(m.ChainId)) } + l = len(m.Overrides) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } return n } @@ -5517,6 +5538,40 @@ func (m *EthCallRequest) Unmarshal(dAtA []byte) error { break } } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Overrides", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Overrides = append(m.Overrides[:0], dAtA[iNdEx:postIndex]...) + if m.Overrides == nil { + m.Overrides = []byte{} + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:])