diff --git a/hiro.pb.go b/hiro.pb.go index 3dc86e5..915d0f7 100644 --- a/hiro.pb.go +++ b/hiro.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.31.0 -// protoc v4.25.0 +// protoc v4.23.4 // source: hiro.proto // The request and response objects for Hiro. @@ -151,6 +151,8 @@ const ( RpcId_RPC_ID_ECONOMY_PLACEMENT_SUCCESS RpcId = 1001 // Webhook RPC to handle Rewarded Video Ad placement failure callbacks. RpcId_RPC_ID_ECONOMY_PLACEMENT_FAIL RpcId = 1002 + // RPC to upload Hiro system configurations for the storage personalizer. + RpcId_RPC_ID_STORAGE_PERSONALIZER_UPLOAD RpcId = 1003 ) // Enum value maps for RpcId. @@ -212,6 +214,7 @@ var ( 56: "RPC_ID_INCENTIVES_RECIPIENT_CLAIM", 1001: "RPC_ID_ECONOMY_PLACEMENT_SUCCESS", 1002: "RPC_ID_ECONOMY_PLACEMENT_FAIL", + 1003: "RPC_ID_STORAGE_PERSONALIZER_UPLOAD", } RpcId_value = map[string]int32{ "RPC_ID_UNSPECIFIED": 0, @@ -270,6 +273,7 @@ var ( "RPC_ID_INCENTIVES_RECIPIENT_CLAIM": 56, "RPC_ID_ECONOMY_PLACEMENT_SUCCESS": 1001, "RPC_ID_ECONOMY_PLACEMENT_FAIL": 1002, + "RPC_ID_STORAGE_PERSONALIZER_UPLOAD": 1003, } ) @@ -300,55 +304,6 @@ func (RpcId) EnumDescriptor() ([]byte, []int) { return file_hiro_proto_rawDescGZIP(), []int{0} } -// Types of incentives. -type IncentiveType int32 - -const ( - // Unspecified. Defaults to INVITE. - IncentiveType_INCENTIVE_TYPE_UNSPECIFIED IncentiveType = 0 - // An invite with an associated incentive reward. - IncentiveType_INCENTIVE_TYPE_INVITE IncentiveType = 1 -) - -// Enum value maps for IncentiveType. -var ( - IncentiveType_name = map[int32]string{ - 0: "INCENTIVE_TYPE_UNSPECIFIED", - 1: "INCENTIVE_TYPE_INVITE", - } - IncentiveType_value = map[string]int32{ - "INCENTIVE_TYPE_UNSPECIFIED": 0, - "INCENTIVE_TYPE_INVITE": 1, - } -) - -func (x IncentiveType) Enum() *IncentiveType { - p := new(IncentiveType) - *p = x - return p -} - -func (x IncentiveType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (IncentiveType) Descriptor() protoreflect.EnumDescriptor { - return file_hiro_proto_enumTypes[1].Descriptor() -} - -func (IncentiveType) Type() protoreflect.EnumType { - return &file_hiro_proto_enumTypes[1] -} - -func (x IncentiveType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use IncentiveType.Descriptor instead. -func (IncentiveType) EnumDescriptor() ([]byte, []int) { - return file_hiro_proto_rawDescGZIP(), []int{1} -} - type ProgressionPreconditionsOperator int32 const ( @@ -393,11 +348,11 @@ func (x ProgressionPreconditionsOperator) String() string { } func (ProgressionPreconditionsOperator) Descriptor() protoreflect.EnumDescriptor { - return file_hiro_proto_enumTypes[2].Descriptor() + return file_hiro_proto_enumTypes[1].Descriptor() } func (ProgressionPreconditionsOperator) Type() protoreflect.EnumType { - return &file_hiro_proto_enumTypes[2] + return &file_hiro_proto_enumTypes[1] } func (x ProgressionPreconditionsOperator) Number() protoreflect.EnumNumber { @@ -406,7 +361,7 @@ func (x ProgressionPreconditionsOperator) Number() protoreflect.EnumNumber { // Deprecated: Use ProgressionPreconditionsOperator.Descriptor instead. func (ProgressionPreconditionsOperator) EnumDescriptor() ([]byte, []int) { - return file_hiro_proto_rawDescGZIP(), []int{2} + return file_hiro_proto_rawDescGZIP(), []int{1} } type ProgressionDeltaState int32 @@ -449,11 +404,11 @@ func (x ProgressionDeltaState) String() string { } func (ProgressionDeltaState) Descriptor() protoreflect.EnumDescriptor { - return file_hiro_proto_enumTypes[3].Descriptor() + return file_hiro_proto_enumTypes[2].Descriptor() } func (ProgressionDeltaState) Type() protoreflect.EnumType { - return &file_hiro_proto_enumTypes[3] + return &file_hiro_proto_enumTypes[2] } func (x ProgressionDeltaState) Number() protoreflect.EnumNumber { @@ -462,7 +417,7 @@ func (x ProgressionDeltaState) Number() protoreflect.EnumNumber { // Deprecated: Use ProgressionDeltaState.Descriptor instead. func (ProgressionDeltaState) EnumDescriptor() ([]byte, []int) { - return file_hiro_proto_rawDescGZIP(), []int{3} + return file_hiro_proto_rawDescGZIP(), []int{2} } // Indicate how a stats update should be handled. @@ -510,11 +465,11 @@ func (x StatUpdateOperator) String() string { } func (StatUpdateOperator) Descriptor() protoreflect.EnumDescriptor { - return file_hiro_proto_enumTypes[4].Descriptor() + return file_hiro_proto_enumTypes[3].Descriptor() } func (StatUpdateOperator) Type() protoreflect.EnumType { - return &file_hiro_proto_enumTypes[4] + return &file_hiro_proto_enumTypes[3] } func (x StatUpdateOperator) Number() protoreflect.EnumNumber { @@ -523,7 +478,7 @@ func (x StatUpdateOperator) Number() protoreflect.EnumNumber { // Deprecated: Use StatUpdateOperator.Descriptor instead. func (StatUpdateOperator) EnumDescriptor() ([]byte, []int) { - return file_hiro_proto_rawDescGZIP(), []int{4} + return file_hiro_proto_rawDescGZIP(), []int{3} } // The store types supported by the Economy system. @@ -567,11 +522,11 @@ func (x EconomyStoreType) String() string { } func (EconomyStoreType) Descriptor() protoreflect.EnumDescriptor { - return file_hiro_proto_enumTypes[5].Descriptor() + return file_hiro_proto_enumTypes[4].Descriptor() } func (EconomyStoreType) Type() protoreflect.EnumType { - return &file_hiro_proto_enumTypes[5] + return &file_hiro_proto_enumTypes[4] } func (x EconomyStoreType) Number() protoreflect.EnumNumber { @@ -580,6 +535,55 @@ func (x EconomyStoreType) Number() protoreflect.EnumNumber { // Deprecated: Use EconomyStoreType.Descriptor instead. func (EconomyStoreType) EnumDescriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{4} +} + +// Types of incentives. +type IncentiveType int32 + +const ( + // Unspecified. Defaults to INVITE. + IncentiveType_INCENTIVE_TYPE_UNSPECIFIED IncentiveType = 0 + // An invite with an associated incentive reward. + IncentiveType_INCENTIVE_TYPE_INVITE IncentiveType = 1 +) + +// Enum value maps for IncentiveType. +var ( + IncentiveType_name = map[int32]string{ + 0: "INCENTIVE_TYPE_UNSPECIFIED", + 1: "INCENTIVE_TYPE_INVITE", + } + IncentiveType_value = map[string]int32{ + "INCENTIVE_TYPE_UNSPECIFIED": 0, + "INCENTIVE_TYPE_INVITE": 1, + } +) + +func (x IncentiveType) Enum() *IncentiveType { + p := new(IncentiveType) + *p = x + return p +} + +func (x IncentiveType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (IncentiveType) Descriptor() protoreflect.EnumDescriptor { + return file_hiro_proto_enumTypes[5].Descriptor() +} + +func (IncentiveType) Type() protoreflect.EnumType { + return &file_hiro_proto_enumTypes[5] +} + +func (x IncentiveType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use IncentiveType.Descriptor instead. +func (IncentiveType) EnumDescriptor() ([]byte, []int) { return file_hiro_proto_rawDescGZIP(), []int{5} } @@ -648,20 +652,20 @@ func (TutorialState) EnumDescriptor() ([]byte, []int) { return file_hiro_proto_rawDescGZIP(), []int{6} } -// The result of claiming an incentive. -type IncentiveClaim struct { +// The cost(s) associated with permanently unlocking a progression. +type ProgressionCost struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Reward granted. - Reward *Reward `protobuf:"bytes,1,opt,name=reward,proto3" json:"reward,omitempty"` - // Claim time in UTC seconds. - ClaimTimeSec int64 `protobuf:"varint,2,opt,name=claim_time_sec,json=claimTimeSec,proto3" json:"claim_time_sec,omitempty"` + // The items which will be deducted. + Items map[string]int64 `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // The currencies which will be deducted. + Currencies map[string]int64 `protobuf:"bytes,2,rep,name=currencies,proto3" json:"currencies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` } -func (x *IncentiveClaim) Reset() { - *x = IncentiveClaim{} +func (x *ProgressionCost) Reset() { + *x = ProgressionCost{} if protoimpl.UnsafeEnabled { mi := &file_hiro_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -669,13 +673,13 @@ func (x *IncentiveClaim) Reset() { } } -func (x *IncentiveClaim) String() string { +func (x *ProgressionCost) String() string { return protoimpl.X.MessageStringOf(x) } -func (*IncentiveClaim) ProtoMessage() {} +func (*ProgressionCost) ProtoMessage() {} -func (x *IncentiveClaim) ProtoReflect() protoreflect.Message { +func (x *ProgressionCost) ProtoReflect() protoreflect.Message { mi := &file_hiro_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -687,63 +691,59 @@ func (x *IncentiveClaim) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use IncentiveClaim.ProtoReflect.Descriptor instead. -func (*IncentiveClaim) Descriptor() ([]byte, []int) { +// Deprecated: Use ProgressionCost.ProtoReflect.Descriptor instead. +func (*ProgressionCost) Descriptor() ([]byte, []int) { return file_hiro_proto_rawDescGZIP(), []int{0} } -func (x *IncentiveClaim) GetReward() *Reward { +func (x *ProgressionCost) GetItems() map[string]int64 { if x != nil { - return x.Reward + return x.Items } return nil } -func (x *IncentiveClaim) GetClaimTimeSec() int64 { +func (x *ProgressionCost) GetCurrencies() map[string]int64 { if x != nil { - return x.ClaimTimeSec + return x.Currencies } - return 0 + return nil } -// An incentive set up by a user. -type Incentive struct { +// Preconditions associated with a progression. +type ProgressionPreconditions struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The ID of the incentive. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // Name. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // Description. - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - // Shareable incentive code. - Code string `protobuf:"bytes,4,opt,name=code,proto3" json:"code,omitempty"` - // The type of the incentive. - Type IncentiveType `protobuf:"varint,5,opt,name=type,proto3,enum=hiro.IncentiveType" json:"type,omitempty"` - // Create time in UTC seconds. - CreateTimeSec int64 `protobuf:"varint,6,opt,name=create_time_sec,json=createTimeSec,proto3" json:"create_time_sec,omitempty"` - // Update time in UTC seconds. - UpdateTimeSec int64 `protobuf:"varint,7,opt,name=update_time_sec,json=updateTimeSec,proto3" json:"update_time_sec,omitempty"` - // Expiry time in UTC seconds. - ExpiryTimeSec int64 `protobuf:"varint,8,opt,name=expiry_time_sec,json=expiryTimeSec,proto3" json:"expiry_time_sec,omitempty"` - // Available reward. - RecipientRewards *AvailableRewards `protobuf:"bytes,9,opt,name=recipient_rewards,json=recipientRewards,proto3" json:"recipient_rewards,omitempty"` - // Sender reward. - SenderRewards *AvailableRewards `protobuf:"bytes,10,opt,name=sender_rewards,json=senderRewards,proto3" json:"sender_rewards,omitempty"` - // Recipient user IDs for which the owner of the incentive has not yet claimed their sender reward. - UnclaimedRecipients []string `protobuf:"bytes,11,rep,name=unclaimed_recipients,json=unclaimedRecipients,proto3" json:"unclaimed_recipients,omitempty"` - // Sender rewards so far collected for this incentive. - Rewards []*Reward `protobuf:"bytes,12,rep,name=rewards,proto3" json:"rewards,omitempty"` - // Max claims. - MaxClaims int64 `protobuf:"varint,13,opt,name=max_claims,json=maxClaims,proto3" json:"max_claims,omitempty"` - // Current user IDs that have claimed, and their outcomes. - Claims map[string]*IncentiveClaim `protobuf:"bytes,14,rep,name=claims,proto3" json:"claims,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Counts required. + Counts map[string]int64 `protobuf:"bytes,1,rep,name=counts,proto3" json:"counts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Purchase cost paid. + Cost *ProgressionCost `protobuf:"bytes,2,opt,name=cost,proto3" json:"cost,omitempty"` + // Other progressions. + Progressions []string `protobuf:"bytes,3,rep,name=progressions,proto3" json:"progressions,omitempty"` + // Achievements. + Achievements []string `protobuf:"bytes,4,rep,name=achievements,proto3" json:"achievements,omitempty"` + // Items with associated minimum counts. + ItemsMin map[string]int64 `protobuf:"bytes,5,rep,name=items_min,json=itemsMin,proto3" json:"items_min,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Items with associated maximum counts. + ItemsMax map[string]int64 `protobuf:"bytes,6,rep,name=items_max,json=itemsMax,proto3" json:"items_max,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Stats with associated minimum values. + StatsMin map[string]int64 `protobuf:"bytes,7,rep,name=stats_min,json=statsMin,proto3" json:"stats_min,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Stats with associated maximum values. + StatsMax map[string]int64 `protobuf:"bytes,8,rep,name=stats_max,json=statsMax,proto3" json:"stats_max,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Energies with associated minimum counts. + EnergyMin map[string]int64 `protobuf:"bytes,9,rep,name=energy_min,json=energyMin,proto3" json:"energy_min,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Energies with associated maximum counts. + EnergyMax map[string]int64 `protobuf:"bytes,10,rep,name=energy_max,json=energyMax,proto3" json:"energy_max,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Currencies with associated minimum counts. + CurrencyMin map[string]int64 `protobuf:"bytes,11,rep,name=currency_min,json=currencyMin,proto3" json:"currency_min,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Currencies with associated maximum counts. + CurrencyMax map[string]int64 `protobuf:"bytes,12,rep,name=currency_max,json=currencyMax,proto3" json:"currency_max,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` } -func (x *Incentive) Reset() { - *x = Incentive{} +func (x *ProgressionPreconditions) Reset() { + *x = ProgressionPreconditions{} if protoimpl.UnsafeEnabled { mi := &file_hiro_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -751,13 +751,13 @@ func (x *Incentive) Reset() { } } -func (x *Incentive) String() string { +func (x *ProgressionPreconditions) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Incentive) ProtoMessage() {} +func (*ProgressionPreconditions) ProtoMessage() {} -func (x *Incentive) ProtoReflect() protoreflect.Message { +func (x *ProgressionPreconditions) ProtoReflect() protoreflect.Message { mi := &file_hiro_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -769,121 +769,111 @@ func (x *Incentive) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Incentive.ProtoReflect.Descriptor instead. -func (*Incentive) Descriptor() ([]byte, []int) { +// Deprecated: Use ProgressionPreconditions.ProtoReflect.Descriptor instead. +func (*ProgressionPreconditions) Descriptor() ([]byte, []int) { return file_hiro_proto_rawDescGZIP(), []int{1} } -func (x *Incentive) GetId() string { +func (x *ProgressionPreconditions) GetCounts() map[string]int64 { if x != nil { - return x.Id + return x.Counts } - return "" + return nil } -func (x *Incentive) GetName() string { +func (x *ProgressionPreconditions) GetCost() *ProgressionCost { if x != nil { - return x.Name + return x.Cost } - return "" + return nil } -func (x *Incentive) GetDescription() string { +func (x *ProgressionPreconditions) GetProgressions() []string { if x != nil { - return x.Description + return x.Progressions } - return "" + return nil } -func (x *Incentive) GetCode() string { +func (x *ProgressionPreconditions) GetAchievements() []string { if x != nil { - return x.Code + return x.Achievements } - return "" + return nil } -func (x *Incentive) GetType() IncentiveType { +func (x *ProgressionPreconditions) GetItemsMin() map[string]int64 { if x != nil { - return x.Type + return x.ItemsMin } - return IncentiveType_INCENTIVE_TYPE_UNSPECIFIED + return nil } -func (x *Incentive) GetCreateTimeSec() int64 { - if x != nil { - return x.CreateTimeSec - } - return 0 -} - -func (x *Incentive) GetUpdateTimeSec() int64 { - if x != nil { - return x.UpdateTimeSec - } - return 0 -} - -func (x *Incentive) GetExpiryTimeSec() int64 { +func (x *ProgressionPreconditions) GetItemsMax() map[string]int64 { if x != nil { - return x.ExpiryTimeSec + return x.ItemsMax } - return 0 + return nil } -func (x *Incentive) GetRecipientRewards() *AvailableRewards { +func (x *ProgressionPreconditions) GetStatsMin() map[string]int64 { if x != nil { - return x.RecipientRewards + return x.StatsMin } return nil } -func (x *Incentive) GetSenderRewards() *AvailableRewards { +func (x *ProgressionPreconditions) GetStatsMax() map[string]int64 { if x != nil { - return x.SenderRewards + return x.StatsMax } return nil } -func (x *Incentive) GetUnclaimedRecipients() []string { +func (x *ProgressionPreconditions) GetEnergyMin() map[string]int64 { if x != nil { - return x.UnclaimedRecipients + return x.EnergyMin } return nil } -func (x *Incentive) GetRewards() []*Reward { +func (x *ProgressionPreconditions) GetEnergyMax() map[string]int64 { if x != nil { - return x.Rewards + return x.EnergyMax } return nil } -func (x *Incentive) GetMaxClaims() int64 { +func (x *ProgressionPreconditions) GetCurrencyMin() map[string]int64 { if x != nil { - return x.MaxClaims + return x.CurrencyMin } - return 0 + return nil } -func (x *Incentive) GetClaims() map[string]*IncentiveClaim { +func (x *ProgressionPreconditions) GetCurrencyMax() map[string]int64 { if x != nil { - return x.Claims + return x.CurrencyMax } return nil } -// A list of incentives set up by a user. -type IncentiveList struct { +// A complex set of progression preconditions. +type ProgressionPreconditionsBlock struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Incentives set up by a single user. - Incentives []*Incentive `protobuf:"bytes,1,rep,name=incentives,proto3" json:"incentives,omitempty"` + // Direct preconditions. + Direct *ProgressionPreconditions `protobuf:"bytes,1,opt,name=direct,proto3" json:"direct,omitempty"` + // Operator for any nested block. + Operator ProgressionPreconditionsOperator `protobuf:"varint,2,opt,name=operator,proto3,enum=hiro.ProgressionPreconditionsOperator" json:"operator,omitempty"` + // Nested block of preconditions, if any. + Nested *ProgressionPreconditionsBlock `protobuf:"bytes,3,opt,name=nested,proto3" json:"nested,omitempty"` } -func (x *IncentiveList) Reset() { - *x = IncentiveList{} +func (x *ProgressionPreconditionsBlock) Reset() { + *x = ProgressionPreconditionsBlock{} if protoimpl.UnsafeEnabled { mi := &file_hiro_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -891,13 +881,13 @@ func (x *IncentiveList) Reset() { } } -func (x *IncentiveList) String() string { +func (x *ProgressionPreconditionsBlock) String() string { return protoimpl.X.MessageStringOf(x) } -func (*IncentiveList) ProtoMessage() {} +func (*ProgressionPreconditionsBlock) ProtoMessage() {} -func (x *IncentiveList) ProtoReflect() protoreflect.Message { +func (x *ProgressionPreconditionsBlock) ProtoReflect() protoreflect.Message { mi := &file_hiro_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -909,54 +899,60 @@ func (x *IncentiveList) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use IncentiveList.ProtoReflect.Descriptor instead. -func (*IncentiveList) Descriptor() ([]byte, []int) { +// Deprecated: Use ProgressionPreconditionsBlock.ProtoReflect.Descriptor instead. +func (*ProgressionPreconditionsBlock) Descriptor() ([]byte, []int) { return file_hiro_proto_rawDescGZIP(), []int{2} } -func (x *IncentiveList) GetIncentives() []*Incentive { +func (x *ProgressionPreconditionsBlock) GetDirect() *ProgressionPreconditions { if x != nil { - return x.Incentives + return x.Direct } return nil } -// An incentive claimant's view of a single incentive. -type IncentiveInfo struct { +func (x *ProgressionPreconditionsBlock) GetOperator() ProgressionPreconditionsOperator { + if x != nil { + return x.Operator + } + return ProgressionPreconditionsOperator_PROGRESSION_PRECONDITIONS_OPERATOR_UNSPECIFIED +} + +func (x *ProgressionPreconditionsBlock) GetNested() *ProgressionPreconditionsBlock { + if x != nil { + return x.Nested + } + return nil +} + +// A progression element which can be unlocked to access further progressions. +type Progression struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The ID of the incentive. + // The ID of the progression. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // Name. + // The name of the progression. May be an i18n code. Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // Description. + // A description of the progression. May be an i18n code. Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - // Unique shareable incentive code. - Code string `protobuf:"bytes,4,opt,name=code,proto3" json:"code,omitempty"` - // The type of the incentive. - Type IncentiveType `protobuf:"varint,5,opt,name=type,proto3,enum=hiro.IncentiveType" json:"type,omitempty"` - // Incentive sender user ID. - Sender string `protobuf:"bytes,6,opt,name=sender,proto3" json:"sender,omitempty"` - // Available rewards that the caller can claim. - AvailableRewards *AvailableRewards `protobuf:"bytes,7,opt,name=available_rewards,json=availableRewards,proto3" json:"available_rewards,omitempty"` - // Indicator if the caller can claim rewards. - CanClaim bool `protobuf:"varint,8,opt,name=can_claim,json=canClaim,proto3" json:"can_claim,omitempty"` - // Reward that was granted. - Reward *Reward `protobuf:"bytes,9,opt,name=reward,proto3" json:"reward,omitempty"` - // Create time in UTC seconds. - CreateTimeSec int64 `protobuf:"varint,10,opt,name=create_time_sec,json=createTimeSec,proto3" json:"create_time_sec,omitempty"` - // Update time in UTC seconds. - UpdateTimeSec int64 `protobuf:"varint,11,opt,name=update_time_sec,json=updateTimeSec,proto3" json:"update_time_sec,omitempty"` - // Expiry time in UTC seconds. - ExpiryTimeSec int64 `protobuf:"varint,12,opt,name=expiry_time_sec,json=expiryTimeSec,proto3" json:"expiry_time_sec,omitempty"` - // Claim time in UTC seconds. - ClaimTimeSec int64 `protobuf:"varint,13,opt,name=claim_time_sec,json=claimTimeSec,proto3" json:"claim_time_sec,omitempty"` + // The category to group the progression together with others. + Category string `protobuf:"bytes,4,opt,name=category,proto3" json:"category,omitempty"` + // Current count, if any. + Counts map[string]int64 `protobuf:"bytes,5,rep,name=counts,proto3" json:"counts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Additional metadata properties. + AdditionalProperties map[string]string `protobuf:"bytes,6,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Flag indicating unlock status. + Unlocked bool `protobuf:"varint,7,opt,name=unlocked,proto3" json:"unlocked,omitempty"` + // All preconditions. + Preconditions *ProgressionPreconditionsBlock `protobuf:"bytes,8,opt,name=preconditions,proto3" json:"preconditions,omitempty"` + // Unmet preconditions. + UnmetPreconditions *ProgressionPreconditionsBlock `protobuf:"bytes,9,opt,name=unmet_preconditions,json=unmetPreconditions,proto3" json:"unmet_preconditions,omitempty"` } -func (x *IncentiveInfo) Reset() { - *x = IncentiveInfo{} +func (x *Progression) Reset() { + *x = Progression{} if protoimpl.UnsafeEnabled { mi := &file_hiro_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -964,13 +960,13 @@ func (x *IncentiveInfo) Reset() { } } -func (x *IncentiveInfo) String() string { +func (x *Progression) String() string { return protoimpl.X.MessageStringOf(x) } -func (*IncentiveInfo) ProtoMessage() {} +func (*Progression) ProtoMessage() {} -func (x *IncentiveInfo) ProtoReflect() protoreflect.Message { +func (x *Progression) ProtoReflect() protoreflect.Message { mi := &file_hiro_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -982,114 +978,92 @@ func (x *IncentiveInfo) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use IncentiveInfo.ProtoReflect.Descriptor instead. -func (*IncentiveInfo) Descriptor() ([]byte, []int) { +// Deprecated: Use Progression.ProtoReflect.Descriptor instead. +func (*Progression) Descriptor() ([]byte, []int) { return file_hiro_proto_rawDescGZIP(), []int{3} } -func (x *IncentiveInfo) GetId() string { +func (x *Progression) GetId() string { if x != nil { return x.Id } return "" } -func (x *IncentiveInfo) GetName() string { +func (x *Progression) GetName() string { if x != nil { return x.Name } return "" } -func (x *IncentiveInfo) GetDescription() string { +func (x *Progression) GetDescription() string { if x != nil { return x.Description } return "" } -func (x *IncentiveInfo) GetCode() string { +func (x *Progression) GetCategory() string { if x != nil { - return x.Code + return x.Category } return "" } -func (x *IncentiveInfo) GetType() IncentiveType { - if x != nil { - return x.Type - } - return IncentiveType_INCENTIVE_TYPE_UNSPECIFIED -} - -func (x *IncentiveInfo) GetSender() string { +func (x *Progression) GetCounts() map[string]int64 { if x != nil { - return x.Sender + return x.Counts } - return "" + return nil } -func (x *IncentiveInfo) GetAvailableRewards() *AvailableRewards { +func (x *Progression) GetAdditionalProperties() map[string]string { if x != nil { - return x.AvailableRewards + return x.AdditionalProperties } return nil } -func (x *IncentiveInfo) GetCanClaim() bool { +func (x *Progression) GetUnlocked() bool { if x != nil { - return x.CanClaim + return x.Unlocked } return false } -func (x *IncentiveInfo) GetReward() *Reward { +func (x *Progression) GetPreconditions() *ProgressionPreconditionsBlock { if x != nil { - return x.Reward + return x.Preconditions } return nil } -func (x *IncentiveInfo) GetCreateTimeSec() int64 { - if x != nil { - return x.CreateTimeSec - } - return 0 -} - -func (x *IncentiveInfo) GetUpdateTimeSec() int64 { - if x != nil { - return x.UpdateTimeSec - } - return 0 -} - -func (x *IncentiveInfo) GetExpiryTimeSec() int64 { - if x != nil { - return x.ExpiryTimeSec - } - return 0 -} - -func (x *IncentiveInfo) GetClaimTimeSec() int64 { +func (x *Progression) GetUnmetPreconditions() *ProgressionPreconditionsBlock { if x != nil { - return x.ClaimTimeSec + return x.UnmetPreconditions } - return 0 + return nil } -// Request by a user to set up a new incentive. -type IncentiveSenderCreateRequest struct { +// A change in a given progression, compared to a previously known state. +type ProgressionDelta struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The incentive configuration ID. + // The ID of the progression. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Potential state change. + State ProgressionDeltaState `protobuf:"varint,2,opt,name=state,proto3,enum=hiro.ProgressionDeltaState" json:"state,omitempty"` + // Changes to counts, if any. + Counts map[string]int64 `protobuf:"bytes,3,rep,name=counts,proto3" json:"counts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Changes to preconditions, if any. + Preconditions *ProgressionPreconditionsBlock `protobuf:"bytes,4,opt,name=preconditions,proto3" json:"preconditions,omitempty"` } -func (x *IncentiveSenderCreateRequest) Reset() { - *x = IncentiveSenderCreateRequest{} +func (x *ProgressionDelta) Reset() { + *x = ProgressionDelta{} if protoimpl.UnsafeEnabled { mi := &file_hiro_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1097,13 +1071,13 @@ func (x *IncentiveSenderCreateRequest) Reset() { } } -func (x *IncentiveSenderCreateRequest) String() string { +func (x *ProgressionDelta) String() string { return protoimpl.X.MessageStringOf(x) } -func (*IncentiveSenderCreateRequest) ProtoMessage() {} +func (*ProgressionDelta) ProtoMessage() {} -func (x *IncentiveSenderCreateRequest) ProtoReflect() protoreflect.Message { +func (x *ProgressionDelta) ProtoReflect() protoreflect.Message { mi := &file_hiro_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1115,44 +1089,67 @@ func (x *IncentiveSenderCreateRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use IncentiveSenderCreateRequest.ProtoReflect.Descriptor instead. -func (*IncentiveSenderCreateRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use ProgressionDelta.ProtoReflect.Descriptor instead. +func (*ProgressionDelta) Descriptor() ([]byte, []int) { return file_hiro_proto_rawDescGZIP(), []int{4} } -func (x *IncentiveSenderCreateRequest) GetId() string { +func (x *ProgressionDelta) GetId() string { if x != nil { return x.Id } return "" } -// Request by a user to delete an incentive they had set up. -type IncentiveSenderDeleteRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The unique incentive code. - Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` -} - -func (x *IncentiveSenderDeleteRequest) Reset() { - *x = IncentiveSenderDeleteRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_hiro_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ProgressionDelta) GetState() ProgressionDeltaState { + if x != nil { + return x.State } + return ProgressionDeltaState_PROGRESSION_DELTA_STATE_UNSPECIFIED } -func (x *IncentiveSenderDeleteRequest) String() string { +func (x *ProgressionDelta) GetCounts() map[string]int64 { + if x != nil { + return x.Counts + } + return nil +} + +func (x *ProgressionDelta) GetPreconditions() *ProgressionPreconditionsBlock { + if x != nil { + return x.Preconditions + } + return nil +} + +// All or a filtered list of progressions for a user. +type ProgressionList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Progressions keyed by progression ID. + Progressions map[string]*Progression `protobuf:"bytes,1,rep,name=progressions,proto3" json:"progressions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Progression deltas keyed by progression ID. + Deltas map[string]*ProgressionDelta `protobuf:"bytes,2,rep,name=deltas,proto3" json:"deltas,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *ProgressionList) Reset() { + *x = ProgressionList{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProgressionList) String() string { return protoimpl.X.MessageStringOf(x) } -func (*IncentiveSenderDeleteRequest) ProtoMessage() {} +func (*ProgressionList) ProtoMessage() {} -func (x *IncentiveSenderDeleteRequest) ProtoReflect() protoreflect.Message { +func (x *ProgressionList) ProtoReflect() protoreflect.Message { mi := &file_hiro_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1164,32 +1161,37 @@ func (x *IncentiveSenderDeleteRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use IncentiveSenderDeleteRequest.ProtoReflect.Descriptor instead. -func (*IncentiveSenderDeleteRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use ProgressionList.ProtoReflect.Descriptor instead. +func (*ProgressionList) Descriptor() ([]byte, []int) { return file_hiro_proto_rawDescGZIP(), []int{5} } -func (x *IncentiveSenderDeleteRequest) GetCode() string { +func (x *ProgressionList) GetProgressions() map[string]*Progression { if x != nil { - return x.Code + return x.Progressions } - return "" + return nil } -// Request by a user to claim rewards from an incentive they had set up. -type IncentiveSenderClaimRequest struct { +func (x *ProgressionList) GetDeltas() map[string]*ProgressionDelta { + if x != nil { + return x.Deltas + } + return nil +} + +// Request progressions for a user, optionally including previously seen state for delta calculations. +type ProgressionGetRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The unique incentive code. - Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` - // The recipient ID(s) to claim for, or empty for all. - RecipientIds []string `protobuf:"bytes,2,rep,name=recipient_ids,json=recipientIds,proto3" json:"recipient_ids,omitempty"` + // Optional last known progressions state, keyed by progression ID. + Progressions map[string]*Progression `protobuf:"bytes,1,rep,name=progressions,proto3" json:"progressions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } -func (x *IncentiveSenderClaimRequest) Reset() { - *x = IncentiveSenderClaimRequest{} +func (x *ProgressionGetRequest) Reset() { + *x = ProgressionGetRequest{} if protoimpl.UnsafeEnabled { mi := &file_hiro_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1197,13 +1199,13 @@ func (x *IncentiveSenderClaimRequest) Reset() { } } -func (x *IncentiveSenderClaimRequest) String() string { +func (x *ProgressionGetRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*IncentiveSenderClaimRequest) ProtoMessage() {} +func (*ProgressionGetRequest) ProtoMessage() {} -func (x *IncentiveSenderClaimRequest) ProtoReflect() protoreflect.Message { +func (x *ProgressionGetRequest) ProtoReflect() protoreflect.Message { mi := &file_hiro_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1215,37 +1217,30 @@ func (x *IncentiveSenderClaimRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use IncentiveSenderClaimRequest.ProtoReflect.Descriptor instead. -func (*IncentiveSenderClaimRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use ProgressionGetRequest.ProtoReflect.Descriptor instead. +func (*ProgressionGetRequest) Descriptor() ([]byte, []int) { return file_hiro_proto_rawDescGZIP(), []int{6} } -func (x *IncentiveSenderClaimRequest) GetCode() string { - if x != nil { - return x.Code - } - return "" -} - -func (x *IncentiveSenderClaimRequest) GetRecipientIds() []string { +func (x *ProgressionGetRequest) GetProgressions() map[string]*Progression { if x != nil { - return x.RecipientIds + return x.Progressions } return nil } -// Request by a potential incentive claimant to view incentive information. -type IncentiveRecipientGetRequest struct { +// Request to permanently unlock a progression, if supported by that specific progression. +type ProgressionPurchaseRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The unique incentive code. - Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` + // ID of the progression to permanently unlock. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } -func (x *IncentiveRecipientGetRequest) Reset() { - *x = IncentiveRecipientGetRequest{} +func (x *ProgressionPurchaseRequest) Reset() { + *x = ProgressionPurchaseRequest{} if protoimpl.UnsafeEnabled { mi := &file_hiro_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1253,13 +1248,13 @@ func (x *IncentiveRecipientGetRequest) Reset() { } } -func (x *IncentiveRecipientGetRequest) String() string { +func (x *ProgressionPurchaseRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*IncentiveRecipientGetRequest) ProtoMessage() {} +func (*ProgressionPurchaseRequest) ProtoMessage() {} -func (x *IncentiveRecipientGetRequest) ProtoReflect() protoreflect.Message { +func (x *ProgressionPurchaseRequest) ProtoReflect() protoreflect.Message { mi := &file_hiro_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1271,30 +1266,32 @@ func (x *IncentiveRecipientGetRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use IncentiveRecipientGetRequest.ProtoReflect.Descriptor instead. -func (*IncentiveRecipientGetRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use ProgressionPurchaseRequest.ProtoReflect.Descriptor instead. +func (*ProgressionPurchaseRequest) Descriptor() ([]byte, []int) { return file_hiro_proto_rawDescGZIP(), []int{7} } -func (x *IncentiveRecipientGetRequest) GetCode() string { +func (x *ProgressionPurchaseRequest) GetId() string { if x != nil { - return x.Code + return x.Id } return "" } -// Request by a potential incentive claimant to claim an incentive. -type IncentiveRecipientClaimRequest struct { +// Request to update a progression, if supported by that specific progression. +type ProgressionUpdateRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The unique incentive code. - Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` + // ID of the progression to update. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // One or more counts to add to the progression. + Counts map[string]int64 `protobuf:"bytes,2,rep,name=counts,proto3" json:"counts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` } -func (x *IncentiveRecipientClaimRequest) Reset() { - *x = IncentiveRecipientClaimRequest{} +func (x *ProgressionUpdateRequest) Reset() { + *x = ProgressionUpdateRequest{} if protoimpl.UnsafeEnabled { mi := &file_hiro_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1302,13 +1299,13 @@ func (x *IncentiveRecipientClaimRequest) Reset() { } } -func (x *IncentiveRecipientClaimRequest) String() string { +func (x *ProgressionUpdateRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*IncentiveRecipientClaimRequest) ProtoMessage() {} +func (*ProgressionUpdateRequest) ProtoMessage() {} -func (x *IncentiveRecipientClaimRequest) ProtoReflect() protoreflect.Message { +func (x *ProgressionUpdateRequest) ProtoReflect() protoreflect.Message { mi := &file_hiro_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1320,32 +1317,41 @@ func (x *IncentiveRecipientClaimRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use IncentiveRecipientClaimRequest.ProtoReflect.Descriptor instead. -func (*IncentiveRecipientClaimRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use ProgressionUpdateRequest.ProtoReflect.Descriptor instead. +func (*ProgressionUpdateRequest) Descriptor() ([]byte, []int) { return file_hiro_proto_rawDescGZIP(), []int{8} } -func (x *IncentiveRecipientClaimRequest) GetCode() string { +func (x *ProgressionUpdateRequest) GetId() string { if x != nil { - return x.Code + return x.Id } return "" } -// The cost(s) associated with permanently unlocking a progression. -type ProgressionCost struct { +func (x *ProgressionUpdateRequest) GetCounts() map[string]int64 { + if x != nil { + return x.Counts + } + return nil +} + +// Describes a single stat update. +type StatUpdate struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The items which will be deducted. - Items map[string]int64 `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - // The currencies which will be deducted. - Currencies map[string]int64 `protobuf:"bytes,2,rep,name=currencies,proto3" json:"currencies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Name. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Value. + Value int64 `protobuf:"varint,2,opt,name=value,proto3" json:"value,omitempty"` + // Operator. + Operator StatUpdateOperator `protobuf:"varint,3,opt,name=operator,proto3,enum=hiro.StatUpdateOperator" json:"operator,omitempty"` } -func (x *ProgressionCost) Reset() { - *x = ProgressionCost{} +func (x *StatUpdate) Reset() { + *x = StatUpdate{} if protoimpl.UnsafeEnabled { mi := &file_hiro_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1353,13 +1359,13 @@ func (x *ProgressionCost) Reset() { } } -func (x *ProgressionCost) String() string { +func (x *StatUpdate) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ProgressionCost) ProtoMessage() {} +func (*StatUpdate) ProtoMessage() {} -func (x *ProgressionCost) ProtoReflect() protoreflect.Message { +func (x *StatUpdate) ProtoReflect() protoreflect.Message { mi := &file_hiro_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1371,59 +1377,46 @@ func (x *ProgressionCost) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ProgressionCost.ProtoReflect.Descriptor instead. -func (*ProgressionCost) Descriptor() ([]byte, []int) { +// Deprecated: Use StatUpdate.ProtoReflect.Descriptor instead. +func (*StatUpdate) Descriptor() ([]byte, []int) { return file_hiro_proto_rawDescGZIP(), []int{9} } -func (x *ProgressionCost) GetItems() map[string]int64 { +func (x *StatUpdate) GetName() string { if x != nil { - return x.Items + return x.Name } - return nil + return "" } -func (x *ProgressionCost) GetCurrencies() map[string]int64 { +func (x *StatUpdate) GetValue() int64 { if x != nil { - return x.Currencies + return x.Value } - return nil + return 0 } -// Preconditions associated with a progression. -type ProgressionPreconditions struct { +func (x *StatUpdate) GetOperator() StatUpdateOperator { + if x != nil { + return x.Operator + } + return StatUpdateOperator_STAT_UPDATE_OPERATOR_UNSPECIFIED +} + +// Request an optionally batched stats update. +type StatUpdateRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Counts required. - Counts map[string]int64 `protobuf:"bytes,1,rep,name=counts,proto3" json:"counts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - // Purchase cost paid. - Cost *ProgressionCost `protobuf:"bytes,2,opt,name=cost,proto3" json:"cost,omitempty"` - // Other progressions. - Progressions []string `protobuf:"bytes,3,rep,name=progressions,proto3" json:"progressions,omitempty"` - // Achievements. - Achievements []string `protobuf:"bytes,4,rep,name=achievements,proto3" json:"achievements,omitempty"` - // Items with associated minimum counts. - ItemsMin map[string]int64 `protobuf:"bytes,5,rep,name=items_min,json=itemsMin,proto3" json:"items_min,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - // Items with associated maximum counts. - ItemsMax map[string]int64 `protobuf:"bytes,6,rep,name=items_max,json=itemsMax,proto3" json:"items_max,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - // Stats with associated minimum values. - StatsMin map[string]int64 `protobuf:"bytes,7,rep,name=stats_min,json=statsMin,proto3" json:"stats_min,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - // Stats with associated maximum values. - StatsMax map[string]int64 `protobuf:"bytes,8,rep,name=stats_max,json=statsMax,proto3" json:"stats_max,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - // Energies with associated minimum counts. - EnergyMin map[string]int64 `protobuf:"bytes,9,rep,name=energy_min,json=energyMin,proto3" json:"energy_min,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - // Energies with associated maximum counts. - EnergyMax map[string]int64 `protobuf:"bytes,10,rep,name=energy_max,json=energyMax,proto3" json:"energy_max,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - // Currencies with associated minimum counts. - CurrencyMin map[string]int64 `protobuf:"bytes,11,rep,name=currency_min,json=currencyMin,proto3" json:"currency_min,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - // Currencies with associated maximum counts. - CurrencyMax map[string]int64 `protobuf:"bytes,12,rep,name=currency_max,json=currencyMax,proto3" json:"currency_max,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Public stat updates. + Public []*StatUpdate `protobuf:"bytes,1,rep,name=public,proto3" json:"public,omitempty"` + // Private stat updates. + Private []*StatUpdate `protobuf:"bytes,2,rep,name=private,proto3" json:"private,omitempty"` } -func (x *ProgressionPreconditions) Reset() { - *x = ProgressionPreconditions{} +func (x *StatUpdateRequest) Reset() { + *x = StatUpdateRequest{} if protoimpl.UnsafeEnabled { mi := &file_hiro_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1431,13 +1424,13 @@ func (x *ProgressionPreconditions) Reset() { } } -func (x *ProgressionPreconditions) String() string { +func (x *StatUpdateRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ProgressionPreconditions) ProtoMessage() {} +func (*StatUpdateRequest) ProtoMessage() {} -func (x *ProgressionPreconditions) ProtoReflect() protoreflect.Message { +func (x *StatUpdateRequest) ProtoReflect() protoreflect.Message { mi := &file_hiro_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1449,126 +1442,184 @@ func (x *ProgressionPreconditions) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ProgressionPreconditions.ProtoReflect.Descriptor instead. -func (*ProgressionPreconditions) Descriptor() ([]byte, []int) { +// Deprecated: Use StatUpdateRequest.ProtoReflect.Descriptor instead. +func (*StatUpdateRequest) Descriptor() ([]byte, []int) { return file_hiro_proto_rawDescGZIP(), []int{10} } -func (x *ProgressionPreconditions) GetCounts() map[string]int64 { +func (x *StatUpdateRequest) GetPublic() []*StatUpdate { if x != nil { - return x.Counts + return x.Public } return nil } -func (x *ProgressionPreconditions) GetCost() *ProgressionCost { +func (x *StatUpdateRequest) GetPrivate() []*StatUpdate { if x != nil { - return x.Cost + return x.Private } return nil } -func (x *ProgressionPreconditions) GetProgressions() []string { +// A single stat with associated information. +type Stat struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Name. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Indicator if this belongs to public or private stats. + Public bool `protobuf:"varint,2,opt,name=public,proto3" json:"public,omitempty"` + // Update time in UTC seconds. + UpdateTimeSec int64 `protobuf:"varint,3,opt,name=update_time_sec,json=updateTimeSec,proto3" json:"update_time_sec,omitempty"` + // Current value. + Value int64 `protobuf:"varint,4,opt,name=value,proto3" json:"value,omitempty"` + // Number of values submitted. + Count int64 `protobuf:"varint,5,opt,name=count,proto3" json:"count,omitempty"` + // Total of all submitted values. + Total int64 `protobuf:"varint,6,opt,name=total,proto3" json:"total,omitempty"` + // Smallest value submitted. + Min int64 `protobuf:"varint,7,opt,name=min,proto3" json:"min,omitempty"` + // Largest value submitted. + Max int64 `protobuf:"varint,8,opt,name=max,proto3" json:"max,omitempty"` + // First value submitted. + First int64 `protobuf:"varint,9,opt,name=first,proto3" json:"first,omitempty"` + // Latest value submitted. + Last int64 `protobuf:"varint,10,opt,name=last,proto3" json:"last,omitempty"` +} + +func (x *Stat) Reset() { + *x = Stat{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Stat) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Stat) ProtoMessage() {} + +func (x *Stat) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Stat.ProtoReflect.Descriptor instead. +func (*Stat) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{11} +} + +func (x *Stat) GetName() string { if x != nil { - return x.Progressions + return x.Name } - return nil + return "" } -func (x *ProgressionPreconditions) GetAchievements() []string { +func (x *Stat) GetPublic() bool { if x != nil { - return x.Achievements + return x.Public } - return nil + return false } -func (x *ProgressionPreconditions) GetItemsMin() map[string]int64 { +func (x *Stat) GetUpdateTimeSec() int64 { if x != nil { - return x.ItemsMin + return x.UpdateTimeSec } - return nil + return 0 } -func (x *ProgressionPreconditions) GetItemsMax() map[string]int64 { +func (x *Stat) GetValue() int64 { if x != nil { - return x.ItemsMax + return x.Value } - return nil + return 0 } -func (x *ProgressionPreconditions) GetStatsMin() map[string]int64 { +func (x *Stat) GetCount() int64 { if x != nil { - return x.StatsMin + return x.Count } - return nil + return 0 } -func (x *ProgressionPreconditions) GetStatsMax() map[string]int64 { +func (x *Stat) GetTotal() int64 { if x != nil { - return x.StatsMax + return x.Total } - return nil + return 0 } -func (x *ProgressionPreconditions) GetEnergyMin() map[string]int64 { +func (x *Stat) GetMin() int64 { if x != nil { - return x.EnergyMin + return x.Min } - return nil + return 0 } -func (x *ProgressionPreconditions) GetEnergyMax() map[string]int64 { +func (x *Stat) GetMax() int64 { if x != nil { - return x.EnergyMax + return x.Max } - return nil + return 0 } -func (x *ProgressionPreconditions) GetCurrencyMin() map[string]int64 { +func (x *Stat) GetFirst() int64 { if x != nil { - return x.CurrencyMin + return x.First } - return nil + return 0 } -func (x *ProgressionPreconditions) GetCurrencyMax() map[string]int64 { +func (x *Stat) GetLast() int64 { if x != nil { - return x.CurrencyMax + return x.Last } - return nil + return 0 } -// A complex set of progression preconditions. -type ProgressionPreconditionsBlock struct { +// A list of stats all belonging to one user. +type StatList struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Direct preconditions. - Direct *ProgressionPreconditions `protobuf:"bytes,1,opt,name=direct,proto3" json:"direct,omitempty"` - // Operator for any nested block. - Operator ProgressionPreconditionsOperator `protobuf:"varint,2,opt,name=operator,proto3,enum=hiro.ProgressionPreconditionsOperator" json:"operator,omitempty"` - // Nested block of preconditions, if any. - Nested *ProgressionPreconditionsBlock `protobuf:"bytes,3,opt,name=nested,proto3" json:"nested,omitempty"` + // Public stat names and their associated data. + Public map[string]*Stat `protobuf:"bytes,1,rep,name=public,proto3" json:"public,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Private stat names and their associated data. + Private map[string]*Stat `protobuf:"bytes,2,rep,name=private,proto3" json:"private,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } -func (x *ProgressionPreconditionsBlock) Reset() { - *x = ProgressionPreconditionsBlock{} +func (x *StatList) Reset() { + *x = StatList{} if protoimpl.UnsafeEnabled { - mi := &file_hiro_proto_msgTypes[11] + mi := &file_hiro_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ProgressionPreconditionsBlock) String() string { +func (x *StatList) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ProgressionPreconditionsBlock) ProtoMessage() {} +func (*StatList) ProtoMessage() {} -func (x *ProgressionPreconditionsBlock) ProtoReflect() protoreflect.Message { - mi := &file_hiro_proto_msgTypes[11] +func (x *StatList) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1579,75 +1630,72 @@ func (x *ProgressionPreconditionsBlock) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ProgressionPreconditionsBlock.ProtoReflect.Descriptor instead. -func (*ProgressionPreconditionsBlock) Descriptor() ([]byte, []int) { - return file_hiro_proto_rawDescGZIP(), []int{11} +// Deprecated: Use StatList.ProtoReflect.Descriptor instead. +func (*StatList) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{12} } -func (x *ProgressionPreconditionsBlock) GetDirect() *ProgressionPreconditions { +func (x *StatList) GetPublic() map[string]*Stat { if x != nil { - return x.Direct + return x.Public } return nil } -func (x *ProgressionPreconditionsBlock) GetOperator() ProgressionPreconditionsOperator { - if x != nil { - return x.Operator - } - return ProgressionPreconditionsOperator_PROGRESSION_PRECONDITIONS_OPERATOR_UNSPECIFIED -} - -func (x *ProgressionPreconditionsBlock) GetNested() *ProgressionPreconditionsBlock { +func (x *StatList) GetPrivate() map[string]*Stat { if x != nil { - return x.Nested + return x.Private } return nil } -// A progression element which can be unlocked to access further progressions. -type Progression struct { +// A receipt reply from a channel message send operation. +type ChannelMessageAck struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The ID of the progression. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // The name of the progression. May be an i18n code. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // A description of the progression. May be an i18n code. - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - // The category to group the progression together with others. - Category string `protobuf:"bytes,4,opt,name=category,proto3" json:"category,omitempty"` - // Current count, if any. - Counts map[string]int64 `protobuf:"bytes,5,rep,name=counts,proto3" json:"counts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - // Additional metadata properties. - AdditionalProperties map[string]string `protobuf:"bytes,6,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Flag indicating unlock status. - Unlocked bool `protobuf:"varint,7,opt,name=unlocked,proto3" json:"unlocked,omitempty"` - // All preconditions. - Preconditions *ProgressionPreconditionsBlock `protobuf:"bytes,8,opt,name=preconditions,proto3" json:"preconditions,omitempty"` - // Unmet preconditions. - UnmetPreconditions *ProgressionPreconditionsBlock `protobuf:"bytes,9,opt,name=unmet_preconditions,json=unmetPreconditions,proto3" json:"unmet_preconditions,omitempty"` + // The channel the message was sent to. + ChannelId string `protobuf:"bytes,1,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` + // The unique ID assigned to the message. + MessageId string `protobuf:"bytes,2,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` + // The code representing a message type or category. + Code int32 `protobuf:"varint,3,opt,name=code,proto3" json:"code,omitempty"` + // Username of the message sender. + Username string `protobuf:"bytes,4,opt,name=username,proto3" json:"username,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the message was created. + CreateTime int64 `protobuf:"varint,5,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the message was last updated. + UpdateTime int64 `protobuf:"varint,6,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` + // True if the message was persisted to the channel's history, false otherwise. + Persistent bool `protobuf:"varint,7,opt,name=persistent,proto3" json:"persistent,omitempty"` + // The name of the chat room, or an empty string if this message was not sent through a chat room. + RoomName string `protobuf:"bytes,8,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` + // The ID of the group, or an empty string if this message was not sent through a group channel. + GroupId string `protobuf:"bytes,9,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + // The ID of the first DM user, or an empty string if this message was not sent through a DM chat. + UserIdOne string `protobuf:"bytes,10,opt,name=user_id_one,json=userIdOne,proto3" json:"user_id_one,omitempty"` + // The ID of the second DM user, or an empty string if this message was not sent through a DM chat. + UserIdTwo string `protobuf:"bytes,11,opt,name=user_id_two,json=userIdTwo,proto3" json:"user_id_two,omitempty"` } -func (x *Progression) Reset() { - *x = Progression{} +func (x *ChannelMessageAck) Reset() { + *x = ChannelMessageAck{} if protoimpl.UnsafeEnabled { - mi := &file_hiro_proto_msgTypes[12] + mi := &file_hiro_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *Progression) String() string { +func (x *ChannelMessageAck) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Progression) ProtoMessage() {} +func (*ChannelMessageAck) ProtoMessage() {} -func (x *Progression) ProtoReflect() protoreflect.Message { - mi := &file_hiro_proto_msgTypes[12] +func (x *ChannelMessageAck) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1658,107 +1706,121 @@ func (x *Progression) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Progression.ProtoReflect.Descriptor instead. -func (*Progression) Descriptor() ([]byte, []int) { - return file_hiro_proto_rawDescGZIP(), []int{12} +// Deprecated: Use ChannelMessageAck.ProtoReflect.Descriptor instead. +func (*ChannelMessageAck) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{13} } -func (x *Progression) GetId() string { +func (x *ChannelMessageAck) GetChannelId() string { if x != nil { - return x.Id + return x.ChannelId } return "" } -func (x *Progression) GetName() string { +func (x *ChannelMessageAck) GetMessageId() string { if x != nil { - return x.Name + return x.MessageId } return "" } -func (x *Progression) GetDescription() string { +func (x *ChannelMessageAck) GetCode() int32 { if x != nil { - return x.Description + return x.Code } - return "" + return 0 } -func (x *Progression) GetCategory() string { +func (x *ChannelMessageAck) GetUsername() string { if x != nil { - return x.Category + return x.Username } return "" } -func (x *Progression) GetCounts() map[string]int64 { +func (x *ChannelMessageAck) GetCreateTime() int64 { if x != nil { - return x.Counts + return x.CreateTime } - return nil + return 0 } -func (x *Progression) GetAdditionalProperties() map[string]string { +func (x *ChannelMessageAck) GetUpdateTime() int64 { if x != nil { - return x.AdditionalProperties + return x.UpdateTime } - return nil + return 0 } -func (x *Progression) GetUnlocked() bool { +func (x *ChannelMessageAck) GetPersistent() bool { if x != nil { - return x.Unlocked + return x.Persistent } return false } -func (x *Progression) GetPreconditions() *ProgressionPreconditionsBlock { +func (x *ChannelMessageAck) GetRoomName() string { if x != nil { - return x.Preconditions + return x.RoomName } - return nil + return "" } -func (x *Progression) GetUnmetPreconditions() *ProgressionPreconditionsBlock { +func (x *ChannelMessageAck) GetGroupId() string { if x != nil { - return x.UnmetPreconditions + return x.GroupId } - return nil + return "" } -// A change in a given progression, compared to a previously known state. -type ProgressionDelta struct { +func (x *ChannelMessageAck) GetUserIdOne() string { + if x != nil { + return x.UserIdOne + } + return "" +} + +func (x *ChannelMessageAck) GetUserIdTwo() string { + if x != nil { + return x.UserIdTwo + } + return "" +} + +// Update or create the mobile push device tokens and preferences. +type DevicePrefsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The ID of the progression. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // Potential state change. - State ProgressionDeltaState `protobuf:"varint,2,opt,name=state,proto3,enum=hiro.ProgressionDeltaState" json:"state,omitempty"` - // Changes to counts, if any. - Counts map[string]int64 `protobuf:"bytes,3,rep,name=counts,proto3" json:"counts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - // Changes to preconditions, if any. - Preconditions *ProgressionPreconditionsBlock `protobuf:"bytes,4,opt,name=preconditions,proto3" json:"preconditions,omitempty"` + // The device ID to set. + DeviceId string `protobuf:"bytes,1,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + // The push token from the Android device. This or 'push_token_ios' must be set. + PushTokenAndroid string `protobuf:"bytes,2,opt,name=push_token_android,json=pushTokenAndroid,proto3" json:"push_token_android,omitempty"` + // The push token from the iOS device. This or 'push_token_android' must be set. + PushTokenIos string `protobuf:"bytes,3,opt,name=push_token_ios,json=pushTokenIos,proto3" json:"push_token_ios,omitempty"` + // Additional device preferences for push events. Must be owned by the user. + Preferences map[string]bool `protobuf:"bytes,4,rep,name=preferences,proto3" json:"preferences,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` } -func (x *ProgressionDelta) Reset() { - *x = ProgressionDelta{} +func (x *DevicePrefsRequest) Reset() { + *x = DevicePrefsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_hiro_proto_msgTypes[13] + mi := &file_hiro_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ProgressionDelta) String() string { +func (x *DevicePrefsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ProgressionDelta) ProtoMessage() {} +func (*DevicePrefsRequest) ProtoMessage() {} -func (x *ProgressionDelta) ProtoReflect() protoreflect.Message { - mi := &file_hiro_proto_msgTypes[13] +func (x *DevicePrefsRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1769,68 +1831,74 @@ func (x *ProgressionDelta) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ProgressionDelta.ProtoReflect.Descriptor instead. -func (*ProgressionDelta) Descriptor() ([]byte, []int) { - return file_hiro_proto_rawDescGZIP(), []int{13} +// Deprecated: Use DevicePrefsRequest.ProtoReflect.Descriptor instead. +func (*DevicePrefsRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{14} } -func (x *ProgressionDelta) GetId() string { +func (x *DevicePrefsRequest) GetDeviceId() string { if x != nil { - return x.Id + return x.DeviceId } return "" } -func (x *ProgressionDelta) GetState() ProgressionDeltaState { +func (x *DevicePrefsRequest) GetPushTokenAndroid() string { if x != nil { - return x.State + return x.PushTokenAndroid } - return ProgressionDeltaState_PROGRESSION_DELTA_STATE_UNSPECIFIED + return "" } -func (x *ProgressionDelta) GetCounts() map[string]int64 { +func (x *DevicePrefsRequest) GetPushTokenIos() string { if x != nil { - return x.Counts + return x.PushTokenIos } - return nil + return "" } -func (x *ProgressionDelta) GetPreconditions() *ProgressionPreconditionsBlock { +func (x *DevicePrefsRequest) GetPreferences() map[string]bool { if x != nil { - return x.Preconditions + return x.Preferences } return nil } -// All or a filtered list of progressions for a user. -type ProgressionList struct { +// Energy modifier granted. +type RewardEnergyModifier struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Progressions keyed by progression ID. - Progressions map[string]*Progression `protobuf:"bytes,1,rep,name=progressions,proto3" json:"progressions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Progression deltas keyed by progression ID. - Deltas map[string]*ProgressionDelta `protobuf:"bytes,2,rep,name=deltas,proto3" json:"deltas,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // The ID of they modifier granted. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The energy modifier operator. + Operator string `protobuf:"bytes,2,opt,name=operator,proto3" json:"operator,omitempty"` + // The value to apply. Its behavior depends on the operator. + Value int64 `protobuf:"varint,3,opt,name=value,proto3" json:"value,omitempty"` + // The duration of the energy modifier in seconds. + DurationSec uint64 `protobuf:"varint,4,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"` + // The weight of the energy modifier, if weighted. Otherwise, -1. + Weight int64 `protobuf:"varint,5,opt,name=weight,proto3" json:"weight,omitempty"` } -func (x *ProgressionList) Reset() { - *x = ProgressionList{} +func (x *RewardEnergyModifier) Reset() { + *x = RewardEnergyModifier{} if protoimpl.UnsafeEnabled { - mi := &file_hiro_proto_msgTypes[14] + mi := &file_hiro_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ProgressionList) String() string { +func (x *RewardEnergyModifier) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ProgressionList) ProtoMessage() {} +func (*RewardEnergyModifier) ProtoMessage() {} -func (x *ProgressionList) ProtoReflect() protoreflect.Message { - mi := &file_hiro_proto_msgTypes[14] +func (x *RewardEnergyModifier) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1841,86 +1909,66 @@ func (x *ProgressionList) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ProgressionList.ProtoReflect.Descriptor instead. -func (*ProgressionList) Descriptor() ([]byte, []int) { - return file_hiro_proto_rawDescGZIP(), []int{14} +// Deprecated: Use RewardEnergyModifier.ProtoReflect.Descriptor instead. +func (*RewardEnergyModifier) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{15} } -func (x *ProgressionList) GetProgressions() map[string]*Progression { +func (x *RewardEnergyModifier) GetId() string { if x != nil { - return x.Progressions + return x.Id } - return nil + return "" } -func (x *ProgressionList) GetDeltas() map[string]*ProgressionDelta { +func (x *RewardEnergyModifier) GetOperator() string { if x != nil { - return x.Deltas + return x.Operator } - return nil -} - -// Request progressions for a user, optionally including previously seen state for delta calculations. -type ProgressionGetRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Optional last known progressions state, keyed by progression ID. - Progressions map[string]*Progression `protobuf:"bytes,1,rep,name=progressions,proto3" json:"progressions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + return "" } -func (x *ProgressionGetRequest) Reset() { - *x = ProgressionGetRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_hiro_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *RewardEnergyModifier) GetValue() int64 { + if x != nil { + return x.Value } + return 0 } -func (x *ProgressionGetRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProgressionGetRequest) ProtoMessage() {} - -func (x *ProgressionGetRequest) ProtoReflect() protoreflect.Message { - mi := &file_hiro_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *RewardEnergyModifier) GetDurationSec() uint64 { + if x != nil { + return x.DurationSec } - return mi.MessageOf(x) -} - -// Deprecated: Use ProgressionGetRequest.ProtoReflect.Descriptor instead. -func (*ProgressionGetRequest) Descriptor() ([]byte, []int) { - return file_hiro_proto_rawDescGZIP(), []int{15} + return 0 } -func (x *ProgressionGetRequest) GetProgressions() map[string]*Progression { +func (x *RewardEnergyModifier) GetWeight() int64 { if x != nil { - return x.Progressions + return x.Weight } - return nil + return 0 } -// Request to permanently unlock a progression, if supported by that specific progression. -type ProgressionPurchaseRequest struct { +// A reward modifier temporally adjusts the way all rewards are handled in the economy. +type RewardModifier struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // ID of the progression to permanently unlock. + // The ID of the reward content to modify. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The type of reward content to modify. + Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` + // The operator to apply. + Operator string `protobuf:"bytes,3,opt,name=operator,proto3" json:"operator,omitempty"` + // The value to apply. Its behavior depends on the operator. + Value int64 `protobuf:"varint,4,opt,name=value,proto3" json:"value,omitempty"` + // The duration of the item modifier in seconds. + DurationSec uint64 `protobuf:"varint,5,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"` } -func (x *ProgressionPurchaseRequest) Reset() { - *x = ProgressionPurchaseRequest{} +func (x *RewardModifier) Reset() { + *x = RewardModifier{} if protoimpl.UnsafeEnabled { mi := &file_hiro_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1928,13 +1976,13 @@ func (x *ProgressionPurchaseRequest) Reset() { } } -func (x *ProgressionPurchaseRequest) String() string { +func (x *RewardModifier) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ProgressionPurchaseRequest) ProtoMessage() {} +func (*RewardModifier) ProtoMessage() {} -func (x *ProgressionPurchaseRequest) ProtoReflect() protoreflect.Message { +func (x *RewardModifier) ProtoReflect() protoreflect.Message { mi := &file_hiro_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1946,46 +1994,82 @@ func (x *ProgressionPurchaseRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ProgressionPurchaseRequest.ProtoReflect.Descriptor instead. -func (*ProgressionPurchaseRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use RewardModifier.ProtoReflect.Descriptor instead. +func (*RewardModifier) Descriptor() ([]byte, []int) { return file_hiro_proto_rawDescGZIP(), []int{16} } -func (x *ProgressionPurchaseRequest) GetId() string { +func (x *RewardModifier) GetId() string { if x != nil { return x.Id } return "" } -// Request to update a progression, if supported by that specific progression. -type ProgressionUpdateRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *RewardModifier) GetType() string { + if x != nil { + return x.Type + } + return "" +} - // ID of the progression to update. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // One or more counts to add to the progression. - Counts map[string]int64 `protobuf:"bytes,2,rep,name=counts,proto3" json:"counts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +func (x *RewardModifier) GetOperator() string { + if x != nil { + return x.Operator + } + return "" } -func (x *ProgressionUpdateRequest) Reset() { - *x = ProgressionUpdateRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_hiro_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *RewardModifier) GetValue() int64 { + if x != nil { + return x.Value } + return 0 } -func (x *ProgressionUpdateRequest) String() string { +func (x *RewardModifier) GetDurationSec() uint64 { + if x != nil { + return x.DurationSec + } + return 0 +} + +// Rewards granted to the player. +type Reward struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The items granted. + Items map[string]int64 `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // The currencies granted. + Currencies map[string]int64 `protobuf:"bytes,2,rep,name=currencies,proto3" json:"currencies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // The energy granted. + Energies map[string]int32 `protobuf:"bytes,3,rep,name=energies,proto3" json:"energies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // The energy modifier granted. + EnergyModifiers []*RewardEnergyModifier `protobuf:"bytes,4,rep,name=energy_modifiers,json=energyModifiers,proto3" json:"energy_modifiers,omitempty"` + // The reward modifiers granted. + RewardModifiers []*RewardModifier `protobuf:"bytes,5,rep,name=reward_modifiers,json=rewardModifiers,proto3" json:"reward_modifiers,omitempty"` + // When the reward was granted, in UNIX time. + GrantTimeSec int64 `protobuf:"varint,6,opt,name=grant_time_sec,json=grantTimeSec,proto3" json:"grant_time_sec,omitempty"` +} + +func (x *Reward) Reset() { + *x = Reward{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Reward) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ProgressionUpdateRequest) ProtoMessage() {} +func (*Reward) ProtoMessage() {} -func (x *ProgressionUpdateRequest) ProtoReflect() protoreflect.Message { +func (x *Reward) ProtoReflect() protoreflect.Message { mi := &file_hiro_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1997,41 +2081,65 @@ func (x *ProgressionUpdateRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ProgressionUpdateRequest.ProtoReflect.Descriptor instead. -func (*ProgressionUpdateRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use Reward.ProtoReflect.Descriptor instead. +func (*Reward) Descriptor() ([]byte, []int) { return file_hiro_proto_rawDescGZIP(), []int{17} } -func (x *ProgressionUpdateRequest) GetId() string { +func (x *Reward) GetItems() map[string]int64 { if x != nil { - return x.Id + return x.Items } - return "" + return nil } -func (x *ProgressionUpdateRequest) GetCounts() map[string]int64 { +func (x *Reward) GetCurrencies() map[string]int64 { if x != nil { - return x.Counts + return x.Currencies } return nil } -// Describes a single stat update. -type StatUpdate struct { +func (x *Reward) GetEnergies() map[string]int32 { + if x != nil { + return x.Energies + } + return nil +} + +func (x *Reward) GetEnergyModifiers() []*RewardEnergyModifier { + if x != nil { + return x.EnergyModifiers + } + return nil +} + +func (x *Reward) GetRewardModifiers() []*RewardModifier { + if x != nil { + return x.RewardModifiers + } + return nil +} + +func (x *Reward) GetGrantTimeSec() int64 { + if x != nil { + return x.GrantTimeSec + } + return 0 +} + +// A list of rewards granted to the player. +type RewardList struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Name. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Value. - Value int64 `protobuf:"varint,2,opt,name=value,proto3" json:"value,omitempty"` - // Operator. - Operator StatUpdateOperator `protobuf:"varint,3,opt,name=operator,proto3,enum=hiro.StatUpdateOperator" json:"operator,omitempty"` + // The rewards granted. + Rewards []*Reward `protobuf:"bytes,1,rep,name=rewards,proto3" json:"rewards,omitempty"` } -func (x *StatUpdate) Reset() { - *x = StatUpdate{} +func (x *RewardList) Reset() { + *x = RewardList{} if protoimpl.UnsafeEnabled { mi := &file_hiro_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2039,13 +2147,13 @@ func (x *StatUpdate) Reset() { } } -func (x *StatUpdate) String() string { +func (x *RewardList) String() string { return protoimpl.X.MessageStringOf(x) } -func (*StatUpdate) ProtoMessage() {} +func (*RewardList) ProtoMessage() {} -func (x *StatUpdate) ProtoReflect() protoreflect.Message { +func (x *RewardList) ProtoReflect() protoreflect.Message { mi := &file_hiro_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2057,46 +2165,34 @@ func (x *StatUpdate) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use StatUpdate.ProtoReflect.Descriptor instead. -func (*StatUpdate) Descriptor() ([]byte, []int) { +// Deprecated: Use RewardList.ProtoReflect.Descriptor instead. +func (*RewardList) Descriptor() ([]byte, []int) { return file_hiro_proto_rawDescGZIP(), []int{18} } -func (x *StatUpdate) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *StatUpdate) GetValue() int64 { - if x != nil { - return x.Value - } - return 0 -} - -func (x *StatUpdate) GetOperator() StatUpdateOperator { +func (x *RewardList) GetRewards() []*Reward { if x != nil { - return x.Operator + return x.Rewards } - return StatUpdateOperator_STAT_UPDATE_OPERATOR_UNSPECIFIED + return nil } -// Request an optionally batched stats update. -type StatUpdateRequest struct { +// A range of possible values. +type RewardRangeInt32 struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Public stat updates. - Public []*StatUpdate `protobuf:"bytes,1,rep,name=public,proto3" json:"public,omitempty"` - // Private stat updates. - Private []*StatUpdate `protobuf:"bytes,2,rep,name=private,proto3" json:"private,omitempty"` + // The minimum bound of the range. + Min int32 `protobuf:"varint,1,opt,name=min,proto3" json:"min,omitempty"` + // The maximum bound of the range. + Max int32 `protobuf:"varint,2,opt,name=max,proto3" json:"max,omitempty"` + // A number that the result must be a multiple of. + Multiple int32 `protobuf:"varint,3,opt,name=multiple,proto3" json:"multiple,omitempty"` } -func (x *StatUpdateRequest) Reset() { - *x = StatUpdateRequest{} +func (x *RewardRangeInt32) Reset() { + *x = RewardRangeInt32{} if protoimpl.UnsafeEnabled { mi := &file_hiro_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2104,13 +2200,13 @@ func (x *StatUpdateRequest) Reset() { } } -func (x *StatUpdateRequest) String() string { +func (x *RewardRangeInt32) String() string { return protoimpl.X.MessageStringOf(x) } -func (*StatUpdateRequest) ProtoMessage() {} +func (*RewardRangeInt32) ProtoMessage() {} -func (x *StatUpdateRequest) ProtoReflect() protoreflect.Message { +func (x *RewardRangeInt32) ProtoReflect() protoreflect.Message { mi := &file_hiro_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2122,55 +2218,48 @@ func (x *StatUpdateRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use StatUpdateRequest.ProtoReflect.Descriptor instead. -func (*StatUpdateRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use RewardRangeInt32.ProtoReflect.Descriptor instead. +func (*RewardRangeInt32) Descriptor() ([]byte, []int) { return file_hiro_proto_rawDescGZIP(), []int{19} } -func (x *StatUpdateRequest) GetPublic() []*StatUpdate { +func (x *RewardRangeInt32) GetMin() int32 { if x != nil { - return x.Public + return x.Min } - return nil + return 0 } -func (x *StatUpdateRequest) GetPrivate() []*StatUpdate { +func (x *RewardRangeInt32) GetMax() int32 { if x != nil { - return x.Private + return x.Max } - return nil + return 0 } -// A single stat with associated information. -type Stat struct { +func (x *RewardRangeInt32) GetMultiple() int32 { + if x != nil { + return x.Multiple + } + return 0 +} + +// A range of possible values. +type RewardRangeInt64 struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Name. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Indicator if this belongs to public or private stats. - Public bool `protobuf:"varint,2,opt,name=public,proto3" json:"public,omitempty"` - // Update time in UTC seconds. - UpdateTimeSec int64 `protobuf:"varint,3,opt,name=update_time_sec,json=updateTimeSec,proto3" json:"update_time_sec,omitempty"` - // Current value. - Value int64 `protobuf:"varint,4,opt,name=value,proto3" json:"value,omitempty"` - // Number of values submitted. - Count int64 `protobuf:"varint,5,opt,name=count,proto3" json:"count,omitempty"` - // Total of all submitted values. - Total int64 `protobuf:"varint,6,opt,name=total,proto3" json:"total,omitempty"` - // Smallest value submitted. - Min int64 `protobuf:"varint,7,opt,name=min,proto3" json:"min,omitempty"` - // Largest value submitted. - Max int64 `protobuf:"varint,8,opt,name=max,proto3" json:"max,omitempty"` - // First value submitted. - First int64 `protobuf:"varint,9,opt,name=first,proto3" json:"first,omitempty"` - // Latest value submitted. - Last int64 `protobuf:"varint,10,opt,name=last,proto3" json:"last,omitempty"` + // The minimum bound of the range. + Min int64 `protobuf:"varint,1,opt,name=min,proto3" json:"min,omitempty"` + // The maximum bound of the range. + Max int64 `protobuf:"varint,2,opt,name=max,proto3" json:"max,omitempty"` + // A number that the result must be a multiple of. + Multiple int64 `protobuf:"varint,3,opt,name=multiple,proto3" json:"multiple,omitempty"` } -func (x *Stat) Reset() { - *x = Stat{} +func (x *RewardRangeInt64) Reset() { + *x = RewardRangeInt64{} if protoimpl.UnsafeEnabled { mi := &file_hiro_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2178,13 +2267,13 @@ func (x *Stat) Reset() { } } -func (x *Stat) String() string { +func (x *RewardRangeInt64) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Stat) ProtoMessage() {} +func (*RewardRangeInt64) ProtoMessage() {} -func (x *Stat) ProtoReflect() protoreflect.Message { +func (x *RewardRangeInt64) ProtoReflect() protoreflect.Message { mi := &file_hiro_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2196,95 +2285,44 @@ func (x *Stat) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Stat.ProtoReflect.Descriptor instead. -func (*Stat) Descriptor() ([]byte, []int) { +// Deprecated: Use RewardRangeInt64.ProtoReflect.Descriptor instead. +func (*RewardRangeInt64) Descriptor() ([]byte, []int) { return file_hiro_proto_rawDescGZIP(), []int{20} } -func (x *Stat) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Stat) GetPublic() bool { +func (x *RewardRangeInt64) GetMin() int64 { if x != nil { - return x.Public + return x.Min } - return false + return 0 } -func (x *Stat) GetUpdateTimeSec() int64 { +func (x *RewardRangeInt64) GetMax() int64 { if x != nil { - return x.UpdateTimeSec + return x.Max } return 0 } -func (x *Stat) GetValue() int64 { +func (x *RewardRangeInt64) GetMultiple() int64 { if x != nil { - return x.Value + return x.Multiple } return 0 } -func (x *Stat) GetCount() int64 { - if x != nil { - return x.Count - } - return 0 +// A possible item reward. +type AvailableRewardsItem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The possible count of the reward. + Count *RewardRangeInt64 `protobuf:"bytes,1,opt,name=count,proto3" json:"count,omitempty"` } -func (x *Stat) GetTotal() int64 { - if x != nil { - return x.Total - } - return 0 -} - -func (x *Stat) GetMin() int64 { - if x != nil { - return x.Min - } - return 0 -} - -func (x *Stat) GetMax() int64 { - if x != nil { - return x.Max - } - return 0 -} - -func (x *Stat) GetFirst() int64 { - if x != nil { - return x.First - } - return 0 -} - -func (x *Stat) GetLast() int64 { - if x != nil { - return x.Last - } - return 0 -} - -// A list of stats all belonging to one user. -type StatList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Public stat names and their associated data. - Public map[string]*Stat `protobuf:"bytes,1,rep,name=public,proto3" json:"public,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Private stat names and their associated data. - Private map[string]*Stat `protobuf:"bytes,2,rep,name=private,proto3" json:"private,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *StatList) Reset() { - *x = StatList{} +func (x *AvailableRewardsItem) Reset() { + *x = AvailableRewardsItem{} if protoimpl.UnsafeEnabled { mi := &file_hiro_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2292,13 +2330,13 @@ func (x *StatList) Reset() { } } -func (x *StatList) String() string { +func (x *AvailableRewardsItem) String() string { return protoimpl.X.MessageStringOf(x) } -func (*StatList) ProtoMessage() {} +func (*AvailableRewardsItem) ProtoMessage() {} -func (x *StatList) ProtoReflect() protoreflect.Message { +func (x *AvailableRewardsItem) ProtoReflect() protoreflect.Message { mi := &file_hiro_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2310,57 +2348,34 @@ func (x *StatList) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use StatList.ProtoReflect.Descriptor instead. -func (*StatList) Descriptor() ([]byte, []int) { +// Deprecated: Use AvailableRewardsItem.ProtoReflect.Descriptor instead. +func (*AvailableRewardsItem) Descriptor() ([]byte, []int) { return file_hiro_proto_rawDescGZIP(), []int{21} } -func (x *StatList) GetPublic() map[string]*Stat { - if x != nil { - return x.Public - } - return nil -} - -func (x *StatList) GetPrivate() map[string]*Stat { +func (x *AvailableRewardsItem) GetCount() *RewardRangeInt64 { if x != nil { - return x.Private + return x.Count } return nil } -// A receipt reply from a channel message send operation. -type ChannelMessageAck struct { +// A possible item reward. +type AvailableRewardsItemSet struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The channel the message was sent to. - ChannelId string `protobuf:"bytes,1,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` - // The unique ID assigned to the message. - MessageId string `protobuf:"bytes,2,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` - // The code representing a message type or category. - Code int32 `protobuf:"varint,3,opt,name=code,proto3" json:"code,omitempty"` - // Username of the message sender. - Username string `protobuf:"bytes,4,opt,name=username,proto3" json:"username,omitempty"` - // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the message was created. - CreateTime int64 `protobuf:"varint,5,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` - // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the message was last updated. - UpdateTime int64 `protobuf:"varint,6,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` - // True if the message was persisted to the channel's history, false otherwise. - Persistent bool `protobuf:"varint,7,opt,name=persistent,proto3" json:"persistent,omitempty"` - // The name of the chat room, or an empty string if this message was not sent through a chat room. - RoomName string `protobuf:"bytes,8,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` - // The ID of the group, or an empty string if this message was not sent through a group channel. - GroupId string `protobuf:"bytes,9,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` - // The ID of the first DM user, or an empty string if this message was not sent through a DM chat. - UserIdOne string `protobuf:"bytes,10,opt,name=user_id_one,json=userIdOne,proto3" json:"user_id_one,omitempty"` - // The ID of the second DM user, or an empty string if this message was not sent through a DM chat. - UserIdTwo string `protobuf:"bytes,11,opt,name=user_id_two,json=userIdTwo,proto3" json:"user_id_two,omitempty"` + // The number of items to draw from the set. + Count *RewardRangeInt64 `protobuf:"bytes,1,opt,name=count,proto3" json:"count,omitempty"` + // The number of repeat items that may be drawn from the set. Also includes the user's inventory. + MaxRepeats int64 `protobuf:"varint,2,opt,name=max_repeats,json=maxRepeats,proto3" json:"max_repeats,omitempty"` + // Drawn items must exist in the intersection of these sets. + Set []string `protobuf:"bytes,3,rep,name=set,proto3" json:"set,omitempty"` } -func (x *ChannelMessageAck) Reset() { - *x = ChannelMessageAck{} +func (x *AvailableRewardsItemSet) Reset() { + *x = AvailableRewardsItemSet{} if protoimpl.UnsafeEnabled { mi := &file_hiro_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2368,13 +2383,13 @@ func (x *ChannelMessageAck) Reset() { } } -func (x *ChannelMessageAck) String() string { +func (x *AvailableRewardsItemSet) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ChannelMessageAck) ProtoMessage() {} +func (*AvailableRewardsItemSet) ProtoMessage() {} -func (x *ChannelMessageAck) ProtoReflect() protoreflect.Message { +func (x *AvailableRewardsItemSet) ProtoReflect() protoreflect.Message { mi := &file_hiro_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2386,121 +2401,108 @@ func (x *ChannelMessageAck) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ChannelMessageAck.ProtoReflect.Descriptor instead. -func (*ChannelMessageAck) Descriptor() ([]byte, []int) { +// Deprecated: Use AvailableRewardsItemSet.ProtoReflect.Descriptor instead. +func (*AvailableRewardsItemSet) Descriptor() ([]byte, []int) { return file_hiro_proto_rawDescGZIP(), []int{22} } -func (x *ChannelMessageAck) GetChannelId() string { - if x != nil { - return x.ChannelId - } - return "" -} - -func (x *ChannelMessageAck) GetMessageId() string { +func (x *AvailableRewardsItemSet) GetCount() *RewardRangeInt64 { if x != nil { - return x.MessageId + return x.Count } - return "" + return nil } -func (x *ChannelMessageAck) GetCode() int32 { +func (x *AvailableRewardsItemSet) GetMaxRepeats() int64 { if x != nil { - return x.Code + return x.MaxRepeats } return 0 } -func (x *ChannelMessageAck) GetUsername() string { +func (x *AvailableRewardsItemSet) GetSet() []string { if x != nil { - return x.Username + return x.Set } - return "" + return nil } -func (x *ChannelMessageAck) GetCreateTime() int64 { - if x != nil { - return x.CreateTime - } - return 0 -} +// A possible currency reward. +type AvailableRewardsCurrency struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (x *ChannelMessageAck) GetUpdateTime() int64 { - if x != nil { - return x.UpdateTime - } - return 0 + // The possible count of the currency. + Count *RewardRangeInt64 `protobuf:"bytes,1,opt,name=count,proto3" json:"count,omitempty"` } -func (x *ChannelMessageAck) GetPersistent() bool { - if x != nil { - return x.Persistent +func (x *AvailableRewardsCurrency) Reset() { + *x = AvailableRewardsCurrency{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return false } -func (x *ChannelMessageAck) GetRoomName() string { - if x != nil { - return x.RoomName - } - return "" +func (x *AvailableRewardsCurrency) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *ChannelMessageAck) GetGroupId() string { - if x != nil { - return x.GroupId +func (*AvailableRewardsCurrency) ProtoMessage() {} + +func (x *AvailableRewardsCurrency) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (x *ChannelMessageAck) GetUserIdOne() string { - if x != nil { - return x.UserIdOne - } - return "" +// Deprecated: Use AvailableRewardsCurrency.ProtoReflect.Descriptor instead. +func (*AvailableRewardsCurrency) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{23} } -func (x *ChannelMessageAck) GetUserIdTwo() string { +func (x *AvailableRewardsCurrency) GetCount() *RewardRangeInt64 { if x != nil { - return x.UserIdTwo + return x.Count } - return "" + return nil } -// Update or create the mobile push device tokens and preferences. -type DevicePrefsRequest struct { +// A possible energy reward. +type AvailableRewardsEnergy struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The device ID to set. - DeviceId string `protobuf:"bytes,1,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` - // The push token from the Android device. This or 'push_token_ios' must be set. - PushTokenAndroid string `protobuf:"bytes,2,opt,name=push_token_android,json=pushTokenAndroid,proto3" json:"push_token_android,omitempty"` - // The push token from the iOS device. This or 'push_token_android' must be set. - PushTokenIos string `protobuf:"bytes,3,opt,name=push_token_ios,json=pushTokenIos,proto3" json:"push_token_ios,omitempty"` - // Additional device preferences for push events. Must be owned by the user. - Preferences map[string]bool `protobuf:"bytes,4,rep,name=preferences,proto3" json:"preferences,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // The possible count of the energy. + Count *RewardRangeInt32 `protobuf:"bytes,1,opt,name=count,proto3" json:"count,omitempty"` } -func (x *DevicePrefsRequest) Reset() { - *x = DevicePrefsRequest{} +func (x *AvailableRewardsEnergy) Reset() { + *x = AvailableRewardsEnergy{} if protoimpl.UnsafeEnabled { - mi := &file_hiro_proto_msgTypes[23] + mi := &file_hiro_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *DevicePrefsRequest) String() string { +func (x *AvailableRewardsEnergy) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DevicePrefsRequest) ProtoMessage() {} +func (*AvailableRewardsEnergy) ProtoMessage() {} -func (x *DevicePrefsRequest) ProtoReflect() protoreflect.Message { - mi := &file_hiro_proto_msgTypes[23] +func (x *AvailableRewardsEnergy) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2511,74 +2513,51 @@ func (x *DevicePrefsRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DevicePrefsRequest.ProtoReflect.Descriptor instead. -func (*DevicePrefsRequest) Descriptor() ([]byte, []int) { - return file_hiro_proto_rawDescGZIP(), []int{23} +// Deprecated: Use AvailableRewardsEnergy.ProtoReflect.Descriptor instead. +func (*AvailableRewardsEnergy) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{24} } -func (x *DevicePrefsRequest) GetDeviceId() string { +func (x *AvailableRewardsEnergy) GetCount() *RewardRangeInt32 { if x != nil { - return x.DeviceId + return x.Count } - return "" + return nil } -func (x *DevicePrefsRequest) GetPushTokenAndroid() string { - if x != nil { - return x.PushTokenAndroid - } - return "" -} +// A possible energy reward. +type AvailableRewardsEnergyModifier struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (x *DevicePrefsRequest) GetPushTokenIos() string { - if x != nil { - return x.PushTokenIos - } - return "" -} - -func (x *DevicePrefsRequest) GetPreferences() map[string]bool { - if x != nil { - return x.Preferences - } - return nil -} - -// Energy modifier granted. -type RewardEnergyModifier struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The ID of they modifier granted. + // The ID of the energy to modify. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // The energy modifier operator. + // The operator of the energy modifier. Operator string `protobuf:"bytes,2,opt,name=operator,proto3" json:"operator,omitempty"` - // The value to apply. Its behavior depends on the operator. - Value int64 `protobuf:"varint,3,opt,name=value,proto3" json:"value,omitempty"` - // The duration of the energy modifier in seconds. - DurationSec uint64 `protobuf:"varint,4,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"` - // The weight of the energy modifier, if weighted. Otherwise, -1. - Weight int64 `protobuf:"varint,5,opt,name=weight,proto3" json:"weight,omitempty"` + // The value of the energy modifier. + Value *RewardRangeInt64 `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` + // The possible duration of the modifier. + DurationSec *RewardRangeInt64 `protobuf:"bytes,4,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"` } -func (x *RewardEnergyModifier) Reset() { - *x = RewardEnergyModifier{} +func (x *AvailableRewardsEnergyModifier) Reset() { + *x = AvailableRewardsEnergyModifier{} if protoimpl.UnsafeEnabled { - mi := &file_hiro_proto_msgTypes[24] + mi := &file_hiro_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *RewardEnergyModifier) String() string { +func (x *AvailableRewardsEnergyModifier) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RewardEnergyModifier) ProtoMessage() {} +func (*AvailableRewardsEnergyModifier) ProtoMessage() {} -func (x *RewardEnergyModifier) ProtoReflect() protoreflect.Message { - mi := &file_hiro_proto_msgTypes[24] +func (x *AvailableRewardsEnergyModifier) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2589,81 +2568,74 @@ func (x *RewardEnergyModifier) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RewardEnergyModifier.ProtoReflect.Descriptor instead. -func (*RewardEnergyModifier) Descriptor() ([]byte, []int) { - return file_hiro_proto_rawDescGZIP(), []int{24} +// Deprecated: Use AvailableRewardsEnergyModifier.ProtoReflect.Descriptor instead. +func (*AvailableRewardsEnergyModifier) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{25} } -func (x *RewardEnergyModifier) GetId() string { +func (x *AvailableRewardsEnergyModifier) GetId() string { if x != nil { return x.Id } return "" } -func (x *RewardEnergyModifier) GetOperator() string { +func (x *AvailableRewardsEnergyModifier) GetOperator() string { if x != nil { return x.Operator } return "" } -func (x *RewardEnergyModifier) GetValue() int64 { +func (x *AvailableRewardsEnergyModifier) GetValue() *RewardRangeInt64 { if x != nil { return x.Value } - return 0 + return nil } -func (x *RewardEnergyModifier) GetDurationSec() uint64 { +func (x *AvailableRewardsEnergyModifier) GetDurationSec() *RewardRangeInt64 { if x != nil { return x.DurationSec } - return 0 -} - -func (x *RewardEnergyModifier) GetWeight() int64 { - if x != nil { - return x.Weight - } - return 0 + return nil } -// A reward modifier temporally adjusts the way all rewards are handled in the economy. -type RewardModifier struct { +// A possible modifier reward. +type AvailableRewardsRewardModifier struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The ID of the reward content to modify. + // The ID of the reward item, currency, energy, or energy modifier to modify. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // The type of reward content to modify. Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` - // The operator to apply. + // The operator of the modifier. Operator string `protobuf:"bytes,3,opt,name=operator,proto3" json:"operator,omitempty"` - // The value to apply. Its behavior depends on the operator. - Value int64 `protobuf:"varint,4,opt,name=value,proto3" json:"value,omitempty"` - // The duration of the item modifier in seconds. - DurationSec uint64 `protobuf:"varint,5,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"` + // The value of the modifier. + Value *RewardRangeInt64 `protobuf:"bytes,4,opt,name=value,proto3" json:"value,omitempty"` + // The possible duration of the modifier. + DurationSec *RewardRangeInt64 `protobuf:"bytes,5,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"` } -func (x *RewardModifier) Reset() { - *x = RewardModifier{} +func (x *AvailableRewardsRewardModifier) Reset() { + *x = AvailableRewardsRewardModifier{} if protoimpl.UnsafeEnabled { - mi := &file_hiro_proto_msgTypes[25] + mi := &file_hiro_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *RewardModifier) String() string { +func (x *AvailableRewardsRewardModifier) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RewardModifier) ProtoMessage() {} +func (*AvailableRewardsRewardModifier) ProtoMessage() {} -func (x *RewardModifier) ProtoReflect() protoreflect.Message { - mi := &file_hiro_proto_msgTypes[25] +func (x *AvailableRewardsRewardModifier) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2674,83 +2646,85 @@ func (x *RewardModifier) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RewardModifier.ProtoReflect.Descriptor instead. -func (*RewardModifier) Descriptor() ([]byte, []int) { - return file_hiro_proto_rawDescGZIP(), []int{25} +// Deprecated: Use AvailableRewardsRewardModifier.ProtoReflect.Descriptor instead. +func (*AvailableRewardsRewardModifier) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{26} } -func (x *RewardModifier) GetId() string { +func (x *AvailableRewardsRewardModifier) GetId() string { if x != nil { return x.Id } return "" } -func (x *RewardModifier) GetType() string { +func (x *AvailableRewardsRewardModifier) GetType() string { if x != nil { return x.Type } return "" } -func (x *RewardModifier) GetOperator() string { +func (x *AvailableRewardsRewardModifier) GetOperator() string { if x != nil { return x.Operator } return "" } -func (x *RewardModifier) GetValue() int64 { +func (x *AvailableRewardsRewardModifier) GetValue() *RewardRangeInt64 { if x != nil { return x.Value } - return 0 + return nil } -func (x *RewardModifier) GetDurationSec() uint64 { +func (x *AvailableRewardsRewardModifier) GetDurationSec() *RewardRangeInt64 { if x != nil { return x.DurationSec } - return 0 + return nil } -// Rewards granted to the player. -type Reward struct { +// The reward contents for available rewards. +type AvailableRewardsContents struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The items granted. - Items map[string]int64 `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - // The currencies granted. - Currencies map[string]int64 `protobuf:"bytes,2,rep,name=currencies,proto3" json:"currencies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - // The energy granted. - Energies map[string]int32 `protobuf:"bytes,3,rep,name=energies,proto3" json:"energies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - // The energy modifier granted. - EnergyModifiers []*RewardEnergyModifier `protobuf:"bytes,4,rep,name=energy_modifiers,json=energyModifiers,proto3" json:"energy_modifiers,omitempty"` - // The reward modifiers granted. - RewardModifiers []*RewardModifier `protobuf:"bytes,5,rep,name=reward_modifiers,json=rewardModifiers,proto3" json:"reward_modifiers,omitempty"` - // When the reward was granted, in UNIX time. - GrantTimeSec int64 `protobuf:"varint,6,opt,name=grant_time_sec,json=grantTimeSec,proto3" json:"grant_time_sec,omitempty"` + // All possible items from this particular reward. + Items map[string]*AvailableRewardsItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // All possible item sets from this particular reward. + ItemSets []*AvailableRewardsItemSet `protobuf:"bytes,2,rep,name=item_sets,json=itemSets,proto3" json:"item_sets,omitempty"` + // All possible currencies from this particular reward. + Currencies map[string]*AvailableRewardsCurrency `protobuf:"bytes,3,rep,name=currencies,proto3" json:"currencies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // All possible energies from this particular reward. + Energies map[string]*AvailableRewardsEnergy `protobuf:"bytes,4,rep,name=energies,proto3" json:"energies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // All possible energy reward modifiers from this particular reward. + EnergyModifiers []*AvailableRewardsEnergyModifier `protobuf:"bytes,5,rep,name=energy_modifiers,json=energyModifiers,proto3" json:"energy_modifiers,omitempty"` + // All reward modifiers from this particular reward. + RewardModifiers []*AvailableRewardsRewardModifier `protobuf:"bytes,6,rep,name=reward_modifiers,json=rewardModifiers,proto3" json:"reward_modifiers,omitempty"` + // The weight of the reward contents. + Weight int64 `protobuf:"varint,7,opt,name=weight,proto3" json:"weight,omitempty"` } -func (x *Reward) Reset() { - *x = Reward{} +func (x *AvailableRewardsContents) Reset() { + *x = AvailableRewardsContents{} if protoimpl.UnsafeEnabled { - mi := &file_hiro_proto_msgTypes[26] + mi := &file_hiro_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *Reward) String() string { +func (x *AvailableRewardsContents) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Reward) ProtoMessage() {} +func (*AvailableRewardsContents) ProtoMessage() {} -func (x *Reward) ProtoReflect() protoreflect.Message { - mi := &file_hiro_proto_msgTypes[26] +func (x *AvailableRewardsContents) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2761,80 +2735,94 @@ func (x *Reward) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Reward.ProtoReflect.Descriptor instead. -func (*Reward) Descriptor() ([]byte, []int) { - return file_hiro_proto_rawDescGZIP(), []int{26} +// Deprecated: Use AvailableRewardsContents.ProtoReflect.Descriptor instead. +func (*AvailableRewardsContents) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{27} } -func (x *Reward) GetItems() map[string]int64 { +func (x *AvailableRewardsContents) GetItems() map[string]*AvailableRewardsItem { if x != nil { return x.Items } return nil } -func (x *Reward) GetCurrencies() map[string]int64 { +func (x *AvailableRewardsContents) GetItemSets() []*AvailableRewardsItemSet { + if x != nil { + return x.ItemSets + } + return nil +} + +func (x *AvailableRewardsContents) GetCurrencies() map[string]*AvailableRewardsCurrency { if x != nil { return x.Currencies } return nil } -func (x *Reward) GetEnergies() map[string]int32 { +func (x *AvailableRewardsContents) GetEnergies() map[string]*AvailableRewardsEnergy { if x != nil { return x.Energies } return nil } -func (x *Reward) GetEnergyModifiers() []*RewardEnergyModifier { +func (x *AvailableRewardsContents) GetEnergyModifiers() []*AvailableRewardsEnergyModifier { if x != nil { return x.EnergyModifiers } return nil } -func (x *Reward) GetRewardModifiers() []*RewardModifier { +func (x *AvailableRewardsContents) GetRewardModifiers() []*AvailableRewardsRewardModifier { if x != nil { return x.RewardModifiers } return nil } -func (x *Reward) GetGrantTimeSec() int64 { +func (x *AvailableRewardsContents) GetWeight() int64 { if x != nil { - return x.GrantTimeSec + return x.Weight } return 0 } -// A list of rewards granted to the player. -type RewardList struct { +// The available rewards and their probabilistic weights. +type AvailableRewards struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The rewards granted. - Rewards []*Reward `protobuf:"bytes,1,rep,name=rewards,proto3" json:"rewards,omitempty"` + // The guaranteed contents to grant. + Guaranteed *AvailableRewardsContents `protobuf:"bytes,1,opt,name=guaranteed,proto3" json:"guaranteed,omitempty"` + // The weighted contents to grant. + Weighted []*AvailableRewardsContents `protobuf:"bytes,2,rep,name=weighted,proto3" json:"weighted,omitempty"` + // The number of weighted reward contents to select from among the possibilities. + MaxRolls int64 `protobuf:"varint,3,opt,name=max_rolls,json=maxRolls,proto3" json:"max_rolls,omitempty"` + // The total weight that all weighted reward contents are calculated against. Auto calculated if set to 0 but can be + // set to a higher value to introduce a chance of a "none" reward. + TotalWeight int64 `protobuf:"varint,4,opt,name=total_weight,json=totalWeight,proto3" json:"total_weight,omitempty"` } -func (x *RewardList) Reset() { - *x = RewardList{} +func (x *AvailableRewards) Reset() { + *x = AvailableRewards{} if protoimpl.UnsafeEnabled { - mi := &file_hiro_proto_msgTypes[27] + mi := &file_hiro_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *RewardList) String() string { +func (x *AvailableRewards) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RewardList) ProtoMessage() {} +func (*AvailableRewards) ProtoMessage() {} -func (x *RewardList) ProtoReflect() protoreflect.Message { - mi := &file_hiro_proto_msgTypes[27] +func (x *AvailableRewards) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2845,49 +2833,68 @@ func (x *RewardList) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RewardList.ProtoReflect.Descriptor instead. -func (*RewardList) Descriptor() ([]byte, []int) { - return file_hiro_proto_rawDescGZIP(), []int{27} +// Deprecated: Use AvailableRewards.ProtoReflect.Descriptor instead. +func (*AvailableRewards) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{28} } -func (x *RewardList) GetRewards() []*Reward { +func (x *AvailableRewards) GetGuaranteed() *AvailableRewardsContents { if x != nil { - return x.Rewards + return x.Guaranteed } return nil } -// A range of possible values. -type RewardRangeInt32 struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The minimum bound of the range. - Min int32 `protobuf:"varint,1,opt,name=min,proto3" json:"min,omitempty"` - // The maximum bound of the range. - Max int32 `protobuf:"varint,2,opt,name=max,proto3" json:"max,omitempty"` - // A number that the result must be a multiple of. - Multiple int32 `protobuf:"varint,3,opt,name=multiple,proto3" json:"multiple,omitempty"` -} - -func (x *RewardRangeInt32) Reset() { - *x = RewardRangeInt32{} - if protoimpl.UnsafeEnabled { - mi := &file_hiro_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *AvailableRewards) GetWeighted() []*AvailableRewardsContents { + if x != nil { + return x.Weighted } + return nil } -func (x *RewardRangeInt32) String() string { +func (x *AvailableRewards) GetMaxRolls() int64 { + if x != nil { + return x.MaxRolls + } + return 0 +} + +func (x *AvailableRewards) GetTotalWeight() int64 { + if x != nil { + return x.TotalWeight + } + return 0 +} + +// The result of claiming an incentive. +type IncentiveClaim struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Reward granted. + Reward *Reward `protobuf:"bytes,1,opt,name=reward,proto3" json:"reward,omitempty"` + // Claim time in UTC seconds. + ClaimTimeSec int64 `protobuf:"varint,2,opt,name=claim_time_sec,json=claimTimeSec,proto3" json:"claim_time_sec,omitempty"` +} + +func (x *IncentiveClaim) Reset() { + *x = IncentiveClaim{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IncentiveClaim) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RewardRangeInt32) ProtoMessage() {} +func (*IncentiveClaim) ProtoMessage() {} -func (x *RewardRangeInt32) ProtoReflect() protoreflect.Message { - mi := &file_hiro_proto_msgTypes[28] +func (x *IncentiveClaim) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2898,63 +2905,78 @@ func (x *RewardRangeInt32) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RewardRangeInt32.ProtoReflect.Descriptor instead. -func (*RewardRangeInt32) Descriptor() ([]byte, []int) { - return file_hiro_proto_rawDescGZIP(), []int{28} -} - -func (x *RewardRangeInt32) GetMin() int32 { - if x != nil { - return x.Min - } - return 0 +// Deprecated: Use IncentiveClaim.ProtoReflect.Descriptor instead. +func (*IncentiveClaim) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{29} } -func (x *RewardRangeInt32) GetMax() int32 { +func (x *IncentiveClaim) GetReward() *Reward { if x != nil { - return x.Max + return x.Reward } - return 0 + return nil } -func (x *RewardRangeInt32) GetMultiple() int32 { +func (x *IncentiveClaim) GetClaimTimeSec() int64 { if x != nil { - return x.Multiple + return x.ClaimTimeSec } return 0 } -// A range of possible values. -type RewardRangeInt64 struct { +// An incentive set up by a user. +type Incentive struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The minimum bound of the range. - Min int64 `protobuf:"varint,1,opt,name=min,proto3" json:"min,omitempty"` - // The maximum bound of the range. - Max int64 `protobuf:"varint,2,opt,name=max,proto3" json:"max,omitempty"` - // A number that the result must be a multiple of. - Multiple int64 `protobuf:"varint,3,opt,name=multiple,proto3" json:"multiple,omitempty"` + // The ID of the incentive. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Name. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // Description. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // Shareable incentive code. + Code string `protobuf:"bytes,4,opt,name=code,proto3" json:"code,omitempty"` + // The type of the incentive. + Type IncentiveType `protobuf:"varint,5,opt,name=type,proto3,enum=hiro.IncentiveType" json:"type,omitempty"` + // Create time in UTC seconds. + CreateTimeSec int64 `protobuf:"varint,6,opt,name=create_time_sec,json=createTimeSec,proto3" json:"create_time_sec,omitempty"` + // Update time in UTC seconds. + UpdateTimeSec int64 `protobuf:"varint,7,opt,name=update_time_sec,json=updateTimeSec,proto3" json:"update_time_sec,omitempty"` + // Expiry time in UTC seconds. + ExpiryTimeSec int64 `protobuf:"varint,8,opt,name=expiry_time_sec,json=expiryTimeSec,proto3" json:"expiry_time_sec,omitempty"` + // Available reward. + RecipientRewards *AvailableRewards `protobuf:"bytes,9,opt,name=recipient_rewards,json=recipientRewards,proto3" json:"recipient_rewards,omitempty"` + // Sender reward. + SenderRewards *AvailableRewards `protobuf:"bytes,10,opt,name=sender_rewards,json=senderRewards,proto3" json:"sender_rewards,omitempty"` + // Recipient user IDs for which the owner of the incentive has not yet claimed their sender reward. + UnclaimedRecipients []string `protobuf:"bytes,11,rep,name=unclaimed_recipients,json=unclaimedRecipients,proto3" json:"unclaimed_recipients,omitempty"` + // Sender rewards so far collected for this incentive. + Rewards []*Reward `protobuf:"bytes,12,rep,name=rewards,proto3" json:"rewards,omitempty"` + // Max claims. + MaxClaims int64 `protobuf:"varint,13,opt,name=max_claims,json=maxClaims,proto3" json:"max_claims,omitempty"` + // Current user IDs that have claimed, and their outcomes. + Claims map[string]*IncentiveClaim `protobuf:"bytes,14,rep,name=claims,proto3" json:"claims,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } -func (x *RewardRangeInt64) Reset() { - *x = RewardRangeInt64{} +func (x *Incentive) Reset() { + *x = Incentive{} if protoimpl.UnsafeEnabled { - mi := &file_hiro_proto_msgTypes[29] + mi := &file_hiro_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *RewardRangeInt64) String() string { +func (x *Incentive) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RewardRangeInt64) ProtoMessage() {} +func (*Incentive) ProtoMessage() {} -func (x *RewardRangeInt64) ProtoReflect() protoreflect.Message { - mi := &file_hiro_proto_msgTypes[29] +func (x *Incentive) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2965,59 +2987,136 @@ func (x *RewardRangeInt64) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RewardRangeInt64.ProtoReflect.Descriptor instead. -func (*RewardRangeInt64) Descriptor() ([]byte, []int) { - return file_hiro_proto_rawDescGZIP(), []int{29} +// Deprecated: Use Incentive.ProtoReflect.Descriptor instead. +func (*Incentive) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{30} } -func (x *RewardRangeInt64) GetMin() int64 { +func (x *Incentive) GetId() string { if x != nil { - return x.Min + return x.Id + } + return "" +} + +func (x *Incentive) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Incentive) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Incentive) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *Incentive) GetType() IncentiveType { + if x != nil { + return x.Type + } + return IncentiveType_INCENTIVE_TYPE_UNSPECIFIED +} + +func (x *Incentive) GetCreateTimeSec() int64 { + if x != nil { + return x.CreateTimeSec } return 0 } -func (x *RewardRangeInt64) GetMax() int64 { +func (x *Incentive) GetUpdateTimeSec() int64 { if x != nil { - return x.Max + return x.UpdateTimeSec } return 0 } -func (x *RewardRangeInt64) GetMultiple() int64 { +func (x *Incentive) GetExpiryTimeSec() int64 { if x != nil { - return x.Multiple + return x.ExpiryTimeSec } return 0 } -// A possible item reward. -type AvailableRewardsItem struct { +func (x *Incentive) GetRecipientRewards() *AvailableRewards { + if x != nil { + return x.RecipientRewards + } + return nil +} + +func (x *Incentive) GetSenderRewards() *AvailableRewards { + if x != nil { + return x.SenderRewards + } + return nil +} + +func (x *Incentive) GetUnclaimedRecipients() []string { + if x != nil { + return x.UnclaimedRecipients + } + return nil +} + +func (x *Incentive) GetRewards() []*Reward { + if x != nil { + return x.Rewards + } + return nil +} + +func (x *Incentive) GetMaxClaims() int64 { + if x != nil { + return x.MaxClaims + } + return 0 +} + +func (x *Incentive) GetClaims() map[string]*IncentiveClaim { + if x != nil { + return x.Claims + } + return nil +} + +// A list of incentives set up by a user. +type IncentiveList struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The possible count of the reward. - Count *RewardRangeInt64 `protobuf:"bytes,1,opt,name=count,proto3" json:"count,omitempty"` + // Incentives set up by a single user. + Incentives []*Incentive `protobuf:"bytes,1,rep,name=incentives,proto3" json:"incentives,omitempty"` } -func (x *AvailableRewardsItem) Reset() { - *x = AvailableRewardsItem{} +func (x *IncentiveList) Reset() { + *x = IncentiveList{} if protoimpl.UnsafeEnabled { - mi := &file_hiro_proto_msgTypes[30] + mi := &file_hiro_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *AvailableRewardsItem) String() string { +func (x *IncentiveList) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AvailableRewardsItem) ProtoMessage() {} +func (*IncentiveList) ProtoMessage() {} -func (x *AvailableRewardsItem) ProtoReflect() protoreflect.Message { - mi := &file_hiro_proto_msgTypes[30] +func (x *IncentiveList) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3028,49 +3127,69 @@ func (x *AvailableRewardsItem) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AvailableRewardsItem.ProtoReflect.Descriptor instead. -func (*AvailableRewardsItem) Descriptor() ([]byte, []int) { - return file_hiro_proto_rawDescGZIP(), []int{30} +// Deprecated: Use IncentiveList.ProtoReflect.Descriptor instead. +func (*IncentiveList) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{31} } -func (x *AvailableRewardsItem) GetCount() *RewardRangeInt64 { +func (x *IncentiveList) GetIncentives() []*Incentive { if x != nil { - return x.Count + return x.Incentives } return nil } -// A possible item reward. -type AvailableRewardsItemSet struct { +// An incentive claimant's view of a single incentive. +type IncentiveInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The number of items to draw from the set. - Count *RewardRangeInt64 `protobuf:"bytes,1,opt,name=count,proto3" json:"count,omitempty"` - // The number of repeat items that may be drawn from the set. Also includes the user's inventory. - MaxRepeats int64 `protobuf:"varint,2,opt,name=max_repeats,json=maxRepeats,proto3" json:"max_repeats,omitempty"` - // Drawn items must exist in the intersection of these sets. - Set []string `protobuf:"bytes,3,rep,name=set,proto3" json:"set,omitempty"` + // The ID of the incentive. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Name. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // Description. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // Unique shareable incentive code. + Code string `protobuf:"bytes,4,opt,name=code,proto3" json:"code,omitempty"` + // The type of the incentive. + Type IncentiveType `protobuf:"varint,5,opt,name=type,proto3,enum=hiro.IncentiveType" json:"type,omitempty"` + // Incentive sender user ID. + Sender string `protobuf:"bytes,6,opt,name=sender,proto3" json:"sender,omitempty"` + // Available rewards that the caller can claim. + AvailableRewards *AvailableRewards `protobuf:"bytes,7,opt,name=available_rewards,json=availableRewards,proto3" json:"available_rewards,omitempty"` + // Indicator if the caller can claim rewards. + CanClaim bool `protobuf:"varint,8,opt,name=can_claim,json=canClaim,proto3" json:"can_claim,omitempty"` + // Reward that was granted. + Reward *Reward `protobuf:"bytes,9,opt,name=reward,proto3" json:"reward,omitempty"` + // Create time in UTC seconds. + CreateTimeSec int64 `protobuf:"varint,10,opt,name=create_time_sec,json=createTimeSec,proto3" json:"create_time_sec,omitempty"` + // Update time in UTC seconds. + UpdateTimeSec int64 `protobuf:"varint,11,opt,name=update_time_sec,json=updateTimeSec,proto3" json:"update_time_sec,omitempty"` + // Expiry time in UTC seconds. + ExpiryTimeSec int64 `protobuf:"varint,12,opt,name=expiry_time_sec,json=expiryTimeSec,proto3" json:"expiry_time_sec,omitempty"` + // Claim time in UTC seconds. + ClaimTimeSec int64 `protobuf:"varint,13,opt,name=claim_time_sec,json=claimTimeSec,proto3" json:"claim_time_sec,omitempty"` } -func (x *AvailableRewardsItemSet) Reset() { - *x = AvailableRewardsItemSet{} +func (x *IncentiveInfo) Reset() { + *x = IncentiveInfo{} if protoimpl.UnsafeEnabled { - mi := &file_hiro_proto_msgTypes[31] + mi := &file_hiro_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *AvailableRewardsItemSet) String() string { +func (x *IncentiveInfo) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AvailableRewardsItemSet) ProtoMessage() {} +func (*IncentiveInfo) ProtoMessage() {} -func (x *AvailableRewardsItemSet) ProtoReflect() protoreflect.Message { - mi := &file_hiro_proto_msgTypes[31] +func (x *IncentiveInfo) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3081,93 +3200,114 @@ func (x *AvailableRewardsItemSet) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AvailableRewardsItemSet.ProtoReflect.Descriptor instead. -func (*AvailableRewardsItemSet) Descriptor() ([]byte, []int) { - return file_hiro_proto_rawDescGZIP(), []int{31} +// Deprecated: Use IncentiveInfo.ProtoReflect.Descriptor instead. +func (*IncentiveInfo) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{32} } -func (x *AvailableRewardsItemSet) GetCount() *RewardRangeInt64 { +func (x *IncentiveInfo) GetId() string { if x != nil { - return x.Count + return x.Id } - return nil + return "" } -func (x *AvailableRewardsItemSet) GetMaxRepeats() int64 { +func (x *IncentiveInfo) GetName() string { if x != nil { - return x.MaxRepeats + return x.Name } - return 0 + return "" } -func (x *AvailableRewardsItemSet) GetSet() []string { +func (x *IncentiveInfo) GetDescription() string { if x != nil { - return x.Set + return x.Description } - return nil + return "" } -// A possible currency reward. -type AvailableRewardsCurrency struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *IncentiveInfo) GetCode() string { + if x != nil { + return x.Code + } + return "" +} - // The possible count of the currency. - Count *RewardRangeInt64 `protobuf:"bytes,1,opt,name=count,proto3" json:"count,omitempty"` +func (x *IncentiveInfo) GetType() IncentiveType { + if x != nil { + return x.Type + } + return IncentiveType_INCENTIVE_TYPE_UNSPECIFIED } -func (x *AvailableRewardsCurrency) Reset() { - *x = AvailableRewardsCurrency{} - if protoimpl.UnsafeEnabled { - mi := &file_hiro_proto_msgTypes[32] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *IncentiveInfo) GetSender() string { + if x != nil { + return x.Sender } + return "" } -func (x *AvailableRewardsCurrency) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *IncentiveInfo) GetAvailableRewards() *AvailableRewards { + if x != nil { + return x.AvailableRewards + } + return nil } -func (*AvailableRewardsCurrency) ProtoMessage() {} +func (x *IncentiveInfo) GetCanClaim() bool { + if x != nil { + return x.CanClaim + } + return false +} -func (x *AvailableRewardsCurrency) ProtoReflect() protoreflect.Message { - mi := &file_hiro_proto_msgTypes[32] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *IncentiveInfo) GetReward() *Reward { + if x != nil { + return x.Reward } - return mi.MessageOf(x) + return nil } -// Deprecated: Use AvailableRewardsCurrency.ProtoReflect.Descriptor instead. -func (*AvailableRewardsCurrency) Descriptor() ([]byte, []int) { - return file_hiro_proto_rawDescGZIP(), []int{32} +func (x *IncentiveInfo) GetCreateTimeSec() int64 { + if x != nil { + return x.CreateTimeSec + } + return 0 +} + +func (x *IncentiveInfo) GetUpdateTimeSec() int64 { + if x != nil { + return x.UpdateTimeSec + } + return 0 +} + +func (x *IncentiveInfo) GetExpiryTimeSec() int64 { + if x != nil { + return x.ExpiryTimeSec + } + return 0 } -func (x *AvailableRewardsCurrency) GetCount() *RewardRangeInt64 { +func (x *IncentiveInfo) GetClaimTimeSec() int64 { if x != nil { - return x.Count + return x.ClaimTimeSec } - return nil + return 0 } -// A possible energy reward. -type AvailableRewardsEnergy struct { +// Request by a user to set up a new incentive. +type IncentiveSenderCreateRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The possible count of the energy. - Count *RewardRangeInt32 `protobuf:"bytes,1,opt,name=count,proto3" json:"count,omitempty"` + // The incentive configuration ID. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } -func (x *AvailableRewardsEnergy) Reset() { - *x = AvailableRewardsEnergy{} +func (x *IncentiveSenderCreateRequest) Reset() { + *x = IncentiveSenderCreateRequest{} if protoimpl.UnsafeEnabled { mi := &file_hiro_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -3175,13 +3315,13 @@ func (x *AvailableRewardsEnergy) Reset() { } } -func (x *AvailableRewardsEnergy) String() string { +func (x *IncentiveSenderCreateRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AvailableRewardsEnergy) ProtoMessage() {} +func (*IncentiveSenderCreateRequest) ProtoMessage() {} -func (x *AvailableRewardsEnergy) ProtoReflect() protoreflect.Message { +func (x *IncentiveSenderCreateRequest) ProtoReflect() protoreflect.Message { mi := &file_hiro_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -3193,36 +3333,30 @@ func (x *AvailableRewardsEnergy) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AvailableRewardsEnergy.ProtoReflect.Descriptor instead. -func (*AvailableRewardsEnergy) Descriptor() ([]byte, []int) { +// Deprecated: Use IncentiveSenderCreateRequest.ProtoReflect.Descriptor instead. +func (*IncentiveSenderCreateRequest) Descriptor() ([]byte, []int) { return file_hiro_proto_rawDescGZIP(), []int{33} } -func (x *AvailableRewardsEnergy) GetCount() *RewardRangeInt32 { +func (x *IncentiveSenderCreateRequest) GetId() string { if x != nil { - return x.Count + return x.Id } - return nil + return "" } -// A possible energy reward. -type AvailableRewardsEnergyModifier struct { +// Request by a user to delete an incentive they had set up. +type IncentiveSenderDeleteRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The ID of the energy to modify. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // The operator of the energy modifier. - Operator string `protobuf:"bytes,2,opt,name=operator,proto3" json:"operator,omitempty"` - // The value of the energy modifier. - Value *RewardRangeInt64 `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` - // The possible duration of the modifier. - DurationSec *RewardRangeInt64 `protobuf:"bytes,4,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"` + // The unique incentive code. + Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` } -func (x *AvailableRewardsEnergyModifier) Reset() { - *x = AvailableRewardsEnergyModifier{} +func (x *IncentiveSenderDeleteRequest) Reset() { + *x = IncentiveSenderDeleteRequest{} if protoimpl.UnsafeEnabled { mi := &file_hiro_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -3230,13 +3364,13 @@ func (x *AvailableRewardsEnergyModifier) Reset() { } } -func (x *AvailableRewardsEnergyModifier) String() string { +func (x *IncentiveSenderDeleteRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AvailableRewardsEnergyModifier) ProtoMessage() {} +func (*IncentiveSenderDeleteRequest) ProtoMessage() {} -func (x *AvailableRewardsEnergyModifier) ProtoReflect() protoreflect.Message { +func (x *IncentiveSenderDeleteRequest) ProtoReflect() protoreflect.Message { mi := &file_hiro_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -3248,59 +3382,32 @@ func (x *AvailableRewardsEnergyModifier) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AvailableRewardsEnergyModifier.ProtoReflect.Descriptor instead. -func (*AvailableRewardsEnergyModifier) Descriptor() ([]byte, []int) { +// Deprecated: Use IncentiveSenderDeleteRequest.ProtoReflect.Descriptor instead. +func (*IncentiveSenderDeleteRequest) Descriptor() ([]byte, []int) { return file_hiro_proto_rawDescGZIP(), []int{34} } -func (x *AvailableRewardsEnergyModifier) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *AvailableRewardsEnergyModifier) GetOperator() string { +func (x *IncentiveSenderDeleteRequest) GetCode() string { if x != nil { - return x.Operator + return x.Code } return "" } -func (x *AvailableRewardsEnergyModifier) GetValue() *RewardRangeInt64 { - if x != nil { - return x.Value - } - return nil -} - -func (x *AvailableRewardsEnergyModifier) GetDurationSec() *RewardRangeInt64 { - if x != nil { - return x.DurationSec - } - return nil -} - -// A possible modifier reward. -type AvailableRewardsRewardModifier struct { +// Request by a user to claim rewards from an incentive they had set up. +type IncentiveSenderClaimRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The ID of the reward item, currency, energy, or energy modifier to modify. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // The type of reward content to modify. - Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` - // The operator of the modifier. - Operator string `protobuf:"bytes,3,opt,name=operator,proto3" json:"operator,omitempty"` - // The value of the modifier. - Value *RewardRangeInt64 `protobuf:"bytes,4,opt,name=value,proto3" json:"value,omitempty"` - // The possible duration of the modifier. - DurationSec *RewardRangeInt64 `protobuf:"bytes,5,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"` + // The unique incentive code. + Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` + // The recipient ID(s) to claim for, or empty for all. + RecipientIds []string `protobuf:"bytes,2,rep,name=recipient_ids,json=recipientIds,proto3" json:"recipient_ids,omitempty"` } -func (x *AvailableRewardsRewardModifier) Reset() { - *x = AvailableRewardsRewardModifier{} +func (x *IncentiveSenderClaimRequest) Reset() { + *x = IncentiveSenderClaimRequest{} if protoimpl.UnsafeEnabled { mi := &file_hiro_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -3308,13 +3415,13 @@ func (x *AvailableRewardsRewardModifier) Reset() { } } -func (x *AvailableRewardsRewardModifier) String() string { +func (x *IncentiveSenderClaimRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AvailableRewardsRewardModifier) ProtoMessage() {} +func (*IncentiveSenderClaimRequest) ProtoMessage() {} -func (x *AvailableRewardsRewardModifier) ProtoReflect() protoreflect.Message { +func (x *IncentiveSenderClaimRequest) ProtoReflect() protoreflect.Message { mi := &file_hiro_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -3326,70 +3433,37 @@ func (x *AvailableRewardsRewardModifier) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AvailableRewardsRewardModifier.ProtoReflect.Descriptor instead. -func (*AvailableRewardsRewardModifier) Descriptor() ([]byte, []int) { +// Deprecated: Use IncentiveSenderClaimRequest.ProtoReflect.Descriptor instead. +func (*IncentiveSenderClaimRequest) Descriptor() ([]byte, []int) { return file_hiro_proto_rawDescGZIP(), []int{35} } -func (x *AvailableRewardsRewardModifier) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *AvailableRewardsRewardModifier) GetType() string { - if x != nil { - return x.Type - } - return "" -} - -func (x *AvailableRewardsRewardModifier) GetOperator() string { +func (x *IncentiveSenderClaimRequest) GetCode() string { if x != nil { - return x.Operator + return x.Code } return "" } -func (x *AvailableRewardsRewardModifier) GetValue() *RewardRangeInt64 { - if x != nil { - return x.Value - } - return nil -} - -func (x *AvailableRewardsRewardModifier) GetDurationSec() *RewardRangeInt64 { +func (x *IncentiveSenderClaimRequest) GetRecipientIds() []string { if x != nil { - return x.DurationSec + return x.RecipientIds } return nil } -// The reward contents for available rewards. -type AvailableRewardsContents struct { +// Request by a potential incentive claimant to view incentive information. +type IncentiveRecipientGetRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // All possible items from this particular reward. - Items map[string]*AvailableRewardsItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // All possible item sets from this particular reward. - ItemSets []*AvailableRewardsItemSet `protobuf:"bytes,2,rep,name=item_sets,json=itemSets,proto3" json:"item_sets,omitempty"` - // All possible currencies from this particular reward. - Currencies map[string]*AvailableRewardsCurrency `protobuf:"bytes,3,rep,name=currencies,proto3" json:"currencies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // All possible energies from this particular reward. - Energies map[string]*AvailableRewardsEnergy `protobuf:"bytes,4,rep,name=energies,proto3" json:"energies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // All possible energy reward modifiers from this particular reward. - EnergyModifiers []*AvailableRewardsEnergyModifier `protobuf:"bytes,5,rep,name=energy_modifiers,json=energyModifiers,proto3" json:"energy_modifiers,omitempty"` - // All reward modifiers from this particular reward. - RewardModifiers []*AvailableRewardsRewardModifier `protobuf:"bytes,6,rep,name=reward_modifiers,json=rewardModifiers,proto3" json:"reward_modifiers,omitempty"` - // The weight of the reward contents. - Weight int64 `protobuf:"varint,7,opt,name=weight,proto3" json:"weight,omitempty"` + // The unique incentive code. + Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` } -func (x *AvailableRewardsContents) Reset() { - *x = AvailableRewardsContents{} +func (x *IncentiveRecipientGetRequest) Reset() { + *x = IncentiveRecipientGetRequest{} if protoimpl.UnsafeEnabled { mi := &file_hiro_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -3397,13 +3471,13 @@ func (x *AvailableRewardsContents) Reset() { } } -func (x *AvailableRewardsContents) String() string { +func (x *IncentiveRecipientGetRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AvailableRewardsContents) ProtoMessage() {} +func (*IncentiveRecipientGetRequest) ProtoMessage() {} -func (x *AvailableRewardsContents) ProtoReflect() protoreflect.Message { +func (x *IncentiveRecipientGetRequest) ProtoReflect() protoreflect.Message { mi := &file_hiro_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -3415,79 +3489,30 @@ func (x *AvailableRewardsContents) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AvailableRewardsContents.ProtoReflect.Descriptor instead. -func (*AvailableRewardsContents) Descriptor() ([]byte, []int) { +// Deprecated: Use IncentiveRecipientGetRequest.ProtoReflect.Descriptor instead. +func (*IncentiveRecipientGetRequest) Descriptor() ([]byte, []int) { return file_hiro_proto_rawDescGZIP(), []int{36} } -func (x *AvailableRewardsContents) GetItems() map[string]*AvailableRewardsItem { - if x != nil { - return x.Items - } - return nil -} - -func (x *AvailableRewardsContents) GetItemSets() []*AvailableRewardsItemSet { - if x != nil { - return x.ItemSets - } - return nil -} - -func (x *AvailableRewardsContents) GetCurrencies() map[string]*AvailableRewardsCurrency { - if x != nil { - return x.Currencies - } - return nil -} - -func (x *AvailableRewardsContents) GetEnergies() map[string]*AvailableRewardsEnergy { - if x != nil { - return x.Energies - } - return nil -} - -func (x *AvailableRewardsContents) GetEnergyModifiers() []*AvailableRewardsEnergyModifier { - if x != nil { - return x.EnergyModifiers - } - return nil -} - -func (x *AvailableRewardsContents) GetRewardModifiers() []*AvailableRewardsRewardModifier { - if x != nil { - return x.RewardModifiers - } - return nil -} - -func (x *AvailableRewardsContents) GetWeight() int64 { +func (x *IncentiveRecipientGetRequest) GetCode() string { if x != nil { - return x.Weight + return x.Code } - return 0 + return "" } -// The available rewards and their probabilistic weights. -type AvailableRewards struct { +// Request by a potential incentive claimant to claim an incentive. +type IncentiveRecipientClaimRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The guaranteed contents to grant. - Guaranteed *AvailableRewardsContents `protobuf:"bytes,1,opt,name=guaranteed,proto3" json:"guaranteed,omitempty"` - // The weighted contents to grant. - Weighted []*AvailableRewardsContents `protobuf:"bytes,2,rep,name=weighted,proto3" json:"weighted,omitempty"` - // The number of weighted reward contents to select from among the possibilities. - MaxRolls int64 `protobuf:"varint,3,opt,name=max_rolls,json=maxRolls,proto3" json:"max_rolls,omitempty"` - // The total weight that all weighted reward contents are calculated against. Auto calculated if set to 0 but can be - // set to a higher value to introduce a chance of a "none" reward. - TotalWeight int64 `protobuf:"varint,4,opt,name=total_weight,json=totalWeight,proto3" json:"total_weight,omitempty"` + // The unique incentive code. + Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` } -func (x *AvailableRewards) Reset() { - *x = AvailableRewards{} +func (x *IncentiveRecipientClaimRequest) Reset() { + *x = IncentiveRecipientClaimRequest{} if protoimpl.UnsafeEnabled { mi := &file_hiro_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -3495,13 +3520,13 @@ func (x *AvailableRewards) Reset() { } } -func (x *AvailableRewards) String() string { +func (x *IncentiveRecipientClaimRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AvailableRewards) ProtoMessage() {} +func (*IncentiveRecipientClaimRequest) ProtoMessage() {} -func (x *AvailableRewards) ProtoReflect() protoreflect.Message { +func (x *IncentiveRecipientClaimRequest) ProtoReflect() protoreflect.Message { mi := &file_hiro_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -3513,37 +3538,16 @@ func (x *AvailableRewards) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AvailableRewards.ProtoReflect.Descriptor instead. -func (*AvailableRewards) Descriptor() ([]byte, []int) { +// Deprecated: Use IncentiveRecipientClaimRequest.ProtoReflect.Descriptor instead. +func (*IncentiveRecipientClaimRequest) Descriptor() ([]byte, []int) { return file_hiro_proto_rawDescGZIP(), []int{37} } -func (x *AvailableRewards) GetGuaranteed() *AvailableRewardsContents { - if x != nil { - return x.Guaranteed - } - return nil -} - -func (x *AvailableRewards) GetWeighted() []*AvailableRewardsContents { - if x != nil { - return x.Weighted - } - return nil -} - -func (x *AvailableRewards) GetMaxRolls() int64 { - if x != nil { - return x.MaxRolls - } - return 0 -} - -func (x *AvailableRewards) GetTotalWeight() int64 { +func (x *IncentiveRecipientClaimRequest) GetCode() string { if x != nil { - return x.TotalWeight + return x.Code } - return 0 + return "" } // Find and retrieve an event leaderboard by ID, automatically joining the event if necessary. @@ -9188,578 +9192,578 @@ var file_hiro_proto_rawDesc = []byte{ 0x0a, 0x0a, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x04, 0x68, 0x69, 0x72, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5c, 0x0a, 0x0e, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, - 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x24, 0x0a, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x52, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x0e, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x53, - 0x65, 0x63, 0x22, 0x8a, 0x05, 0x0a, 0x09, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, - 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, - 0x53, 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x65, 0x78, - 0x70, 0x69, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x43, 0x0a, 0x11, 0x72, - 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, - 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x10, - 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, - 0x12, 0x3d, 0x0a, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, - 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, - 0x52, 0x0d, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, - 0x31, 0x0a, 0x14, 0x75, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x63, - 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x75, - 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, - 0x74, 0x73, 0x12, 0x26, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x0c, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x52, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, - 0x78, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x6d, 0x61, 0x78, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x33, 0x0a, 0x06, 0x63, 0x6c, 0x61, - 0x69, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x69, 0x72, 0x6f, - 0x2e, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x1a, 0x4f, - 0x0a, 0x0b, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x43, - 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0x40, 0x0a, 0x0d, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x2f, 0x0a, 0x0a, 0x69, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x49, 0x6e, 0x63, 0x65, - 0x6e, 0x74, 0x69, 0x76, 0x65, 0x52, 0x0a, 0x69, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, - 0x73, 0x22, 0xd0, 0x03, 0x0a, 0x0d, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x68, 0x69, - 0x72, 0x6f, 0x2e, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x43, - 0x0a, 0x11, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, - 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x73, 0x52, 0x10, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x61, 0x6e, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x61, 0x6e, 0x43, 0x6c, 0x61, 0x69, 0x6d, - 0x12, 0x24, 0x0a, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x06, - 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x26, - 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, - 0x63, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x24, - 0x0a, 0x0e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x54, 0x69, 0x6d, - 0x65, 0x53, 0x65, 0x63, 0x22, 0x2e, 0x0a, 0x1c, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, - 0x65, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x22, 0x32, 0x0a, 0x1c, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, - 0x65, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x56, 0x0a, 0x1b, 0x49, 0x6e, 0x63, 0x65, - 0x6e, 0x74, 0x69, 0x76, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x6c, 0x61, 0x69, 0x6d, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, - 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, - 0x22, 0x32, 0x0a, 0x1c, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, - 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x63, 0x6f, 0x64, 0x65, 0x22, 0x34, 0x0a, 0x1e, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, - 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x89, 0x02, 0x0a, 0x0f, 0x50, - 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x36, - 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x89, 0x02, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, + 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x73, 0x74, 0x2e, 0x49, + 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, + 0x12, 0x45, 0x0a, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, + 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x73, 0x74, 0x2e, 0x43, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0xec, 0x0a, 0x0a, 0x18, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x42, 0x0a, + 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x43, 0x6f, 0x73, 0x74, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x45, 0x0a, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x63, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x68, 0x69, 0x72, - 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x73, - 0x74, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x1a, 0x38, 0x0a, - 0x0a, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x63, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xec, 0x0a, 0x0a, 0x18, 0x50, 0x72, 0x6f, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x42, 0x0a, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x29, 0x0a, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, - 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x73, 0x74, 0x52, 0x04, 0x63, 0x6f, - 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x63, - 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x49, 0x0a, 0x09, 0x69, 0x74, - 0x65, 0x6d, 0x73, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, + 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x12, 0x29, 0x0a, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x15, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x43, 0x6f, 0x73, 0x74, 0x52, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, + 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x12, 0x49, 0x0a, 0x09, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x5f, 0x6d, 0x69, + 0x6e, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, + 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x4d, 0x69, 0x6e, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x4d, 0x69, 0x6e, 0x12, + 0x49, 0x0a, 0x09, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x06, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x4d, 0x61, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x08, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x4d, 0x61, 0x78, 0x12, 0x49, 0x0a, 0x09, 0x73, 0x74, + 0x61, 0x74, 0x73, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x74, - 0x65, 0x6d, 0x73, 0x4d, 0x69, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x69, 0x74, 0x65, - 0x6d, 0x73, 0x4d, 0x69, 0x6e, 0x12, 0x49, 0x0a, 0x09, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x5f, 0x6d, - 0x61, 0x78, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, - 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x4d, 0x61, - 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x4d, 0x61, 0x78, - 0x12, 0x49, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x07, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x4d, 0x69, 0x6e, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x73, 0x4d, 0x69, 0x6e, 0x12, 0x49, 0x0a, 0x09, 0x73, - 0x74, 0x61, 0x74, 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, - 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x73, 0x4d, 0x61, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x74, - 0x61, 0x74, 0x73, 0x4d, 0x61, 0x78, 0x12, 0x4c, 0x0a, 0x0a, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, - 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x68, 0x69, 0x72, - 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, - 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x6e, 0x65, 0x72, 0x67, - 0x79, 0x4d, 0x69, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x65, 0x6e, 0x65, 0x72, 0x67, - 0x79, 0x4d, 0x69, 0x6e, 0x12, 0x4c, 0x0a, 0x0a, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x5f, 0x6d, - 0x61, 0x78, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x73, 0x4d, 0x69, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x74, 0x61, + 0x74, 0x73, 0x4d, 0x69, 0x6e, 0x12, 0x49, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x6d, + 0x61, 0x78, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, - 0x61, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, - 0x61, 0x78, 0x12, 0x52, 0x0a, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, - 0x69, 0x6e, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, - 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, - 0x79, 0x4d, 0x69, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x63, 0x79, 0x4d, 0x69, 0x6e, 0x12, 0x52, 0x0a, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x63, 0x79, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x68, - 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, - 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x61, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x61, 0x78, 0x1a, 0x39, 0x0a, 0x0b, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3b, 0x0a, 0x0d, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x4d, 0x69, - 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x3b, 0x0a, 0x0d, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x4d, 0x61, 0x78, 0x45, 0x6e, + 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x4d, 0x61, + 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x73, 0x4d, 0x61, 0x78, + 0x12, 0x4c, 0x0a, 0x0a, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x09, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, + 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, 0x69, 0x6e, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x09, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, 0x69, 0x6e, 0x12, 0x4c, + 0x0a, 0x0a, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x0a, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, 0x61, 0x78, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x09, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, 0x61, 0x78, 0x12, 0x52, 0x0a, 0x0c, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x0b, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x69, 0x6e, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x69, 0x6e, + 0x12, 0x52, 0x0a, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x61, 0x78, + 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, + 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x4d, + 0x61, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x4d, 0x61, 0x78, 0x1a, 0x39, 0x0a, 0x0b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x3b, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x73, 0x4d, 0x69, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x3b, 0x0a, 0x0d, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x4d, 0x69, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3b, 0x0a, 0x0d, - 0x53, 0x74, 0x61, 0x74, 0x73, 0x4d, 0x61, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x49, 0x74, 0x65, 0x6d, 0x73, 0x4d, 0x61, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x45, 0x6e, 0x65, - 0x72, 0x67, 0x79, 0x4d, 0x69, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x45, 0x6e, 0x65, 0x72, 0x67, - 0x79, 0x4d, 0x61, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3e, 0x0a, 0x10, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, - 0x79, 0x4d, 0x69, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3e, 0x0a, 0x10, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, - 0x79, 0x4d, 0x61, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd8, 0x01, 0x0a, 0x1d, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x36, 0x0a, 0x06, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, - 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x06, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x12, - 0x42, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x26, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x6f, 0x72, 0x12, 0x3b, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x22, 0xc9, 0x04, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, - 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, - 0x72, 0x79, 0x12, 0x35, 0x0a, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x60, 0x0a, 0x15, 0x61, 0x64, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, - 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, - 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x75, - 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x75, - 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x49, 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, - 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x54, 0x0a, 0x13, 0x75, 0x6e, 0x6d, 0x65, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x63, - 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x23, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x12, 0x75, 0x6e, 0x6d, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x47, 0x0a, 0x19, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x97, 0x02, 0x0a, - 0x10, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x74, - 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x31, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x1b, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, - 0x12, 0x49, 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, - 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x0d, 0x70, 0x72, - 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3b, 0x0a, 0x0d, 0x53, 0x74, 0x61, + 0x74, 0x73, 0x4d, 0x69, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc0, 0x02, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x0c, 0x70, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x27, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x39, 0x0a, 0x06, 0x64, 0x65, 0x6c, 0x74, 0x61, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, - 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x44, - 0x65, 0x6c, 0x74, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x64, 0x65, 0x6c, 0x74, - 0x61, 0x73, 0x1a, 0x52, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, - 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x51, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x73, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3b, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x73, 0x4d, + 0x61, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, 0x69, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xbe, 0x01, 0x0a, 0x15, 0x50, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x68, 0x69, 0x72, 0x6f, - 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x52, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x27, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x68, - 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2c, 0x0a, 0x1a, 0x50, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xa9, 0x01, 0x0a, 0x18, 0x50, 0x72, 0x6f, - 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x42, 0x0a, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, - 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6c, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x34, 0x0a, 0x08, - 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, - 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x22, 0x69, 0x0a, 0x11, 0x53, 0x74, 0x61, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x12, 0x2a, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x52, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x22, 0xea, 0x01, - 0x0a, 0x04, 0x53, 0x74, 0x61, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x10, 0x0a, 0x03, - 0x6d, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x10, - 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6d, 0x61, 0x78, - 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x72, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x05, 0x66, 0x69, 0x72, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x61, 0x73, 0x74, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x6c, 0x61, 0x73, 0x74, 0x22, 0x84, 0x02, 0x0a, 0x08, 0x53, - 0x74, 0x61, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x12, 0x35, 0x0a, 0x07, 0x70, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, - 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x50, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x1a, 0x45, 0x0a, 0x0b, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x46, 0x0a, 0x0c, 0x50, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x68, 0x69, 0x72, - 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0xdb, 0x02, 0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x41, 0x63, 0x6b, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, - 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, - 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, - 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, - 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, 0x65, 0x72, - 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6f, 0x6d, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, - 0x1e, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x6f, 0x6e, 0x65, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x4f, 0x6e, 0x65, 0x12, - 0x1e, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x74, 0x77, 0x6f, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x54, 0x77, 0x6f, 0x22, - 0x92, 0x02, 0x0a, 0x12, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x65, 0x66, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x75, 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x5f, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x10, 0x70, 0x75, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, - 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x75, 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, - 0x69, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x75, 0x73, 0x68, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6f, 0x73, 0x12, 0x4b, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x68, - 0x69, 0x72, 0x6f, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x65, 0x66, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x73, 0x1a, 0x3e, 0x0a, 0x10, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0x93, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x45, - 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x21, 0x0a, 0x0c, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x65, 0x63, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x89, 0x01, 0x0a, 0x0e, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x73, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x64, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x22, 0x91, 0x04, 0x0a, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x49, - 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, - 0x12, 0x3c, 0x0a, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x36, - 0x0a, 0x08, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x45, - 0x6e, 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x65, 0x6e, - 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x10, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, - 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, - 0x65, 0x72, 0x67, 0x79, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0f, 0x65, 0x6e, - 0x65, 0x72, 0x67, 0x79, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x3f, 0x0a, - 0x10, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0f, 0x72, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x24, - 0x0a, 0x0e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x54, 0x69, 0x6d, - 0x65, 0x53, 0x65, 0x63, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, - 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, 0x61, 0x78, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x3e, 0x0a, 0x10, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x69, 0x6e, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x3e, 0x0a, 0x10, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x61, 0x78, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0xd8, 0x01, 0x0a, 0x1d, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, + 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x12, 0x36, 0x0a, 0x06, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x06, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x12, 0x42, 0x0a, 0x08, 0x6f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x6f, 0x72, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x3b, 0x0a, + 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x52, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x22, 0xc9, 0x04, 0x0a, 0x0b, 0x50, + 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, + 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x35, 0x0a, 0x06, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x73, 0x12, 0x60, 0x0a, 0x15, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x14, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, + 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x65, + 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x65, + 0x64, 0x12, 0x49, 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x0d, 0x70, + 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x54, 0x0a, 0x13, + 0x75, 0x6e, 0x6d, 0x65, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x69, 0x72, 0x6f, + 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x12, + 0x75, 0x6e, 0x6d, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3b, 0x0a, - 0x0d, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x34, 0x0a, 0x0a, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x68, 0x69, 0x72, 0x6f, - 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, - 0x22, 0x52, 0x0a, 0x10, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, - 0x6e, 0x74, 0x33, 0x32, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x75, 0x6c, 0x74, - 0x69, 0x70, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6d, 0x75, 0x6c, 0x74, - 0x69, 0x70, 0x6c, 0x65, 0x22, 0x52, 0x0a, 0x10, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, - 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, - 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x12, 0x1a, 0x0a, 0x08, - 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, - 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x22, 0x44, 0x0a, 0x14, 0x41, 0x76, 0x61, 0x69, - 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x49, 0x74, 0x65, 0x6d, - 0x12, 0x2c, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x6e, - 0x67, 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x7a, - 0x0a, 0x17, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x65, 0x74, 0x12, 0x2c, 0x0a, 0x05, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, - 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, - 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6d, 0x61, - 0x78, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x74, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x73, 0x65, 0x74, 0x22, 0x48, 0x0a, 0x18, 0x41, 0x76, - 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x43, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x05, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x46, 0x0a, 0x16, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x12, 0x2c, - 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, - 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, - 0x49, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xb5, 0x01, 0x0a, - 0x1e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x73, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, + 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x47, 0x0a, + 0x19, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, + 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x97, 0x02, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x31, 0x0a, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, + 0x74, 0x61, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3a, + 0x0a, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x49, 0x0a, 0x0d, 0x70, 0x72, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0xc0, 0x02, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, + 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x39, 0x0a, 0x06, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x73, 0x1a, 0x52, 0x0a, 0x11, + 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x1a, 0x51, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0xbe, 0x01, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, + 0x0c, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x1a, 0x52, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, + 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2c, 0x0a, 0x1a, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x22, 0xa9, 0x01, 0x0a, 0x18, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2c, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, - 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x74, - 0x36, 0x34, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0c, 0x64, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x6e, - 0x67, 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x0b, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x65, 0x63, 0x22, 0xc9, 0x01, 0x0a, 0x1e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, - 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, + 0x42, 0x0a, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6c, + 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x34, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x6f, 0x72, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x69, 0x0a, 0x11, + 0x53, 0x74, 0x61, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x28, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x10, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x12, 0x2a, 0x0a, 0x07, 0x70, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x07, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x22, 0xea, 0x01, 0x0a, 0x04, 0x53, 0x74, 0x61, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x12, 0x26, 0x0a, 0x0f, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x53, 0x65, 0x63, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, + 0x72, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x66, 0x69, 0x72, 0x73, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x61, 0x73, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, + 0x6c, 0x61, 0x73, 0x74, 0x22, 0x84, 0x02, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x74, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x32, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x4c, 0x69, 0x73, + 0x74, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x12, 0x35, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x1a, 0x45, 0x0a, 0x0b, + 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x20, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x46, 0x0a, 0x0c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xdb, 0x02, 0x0a, 0x11, + 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x63, + 0x6b, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, + 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x1f, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x1f, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, + 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x75, 0x73, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x6f, 0x6e, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x4f, 0x6e, 0x65, 0x12, 0x1e, 0x0a, 0x0b, 0x75, 0x73, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x74, 0x77, 0x6f, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x54, 0x77, 0x6f, 0x22, 0x92, 0x02, 0x0a, 0x12, 0x44, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x65, 0x66, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x2c, 0x0a, + 0x12, 0x70, 0x75, 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x61, 0x6e, 0x64, 0x72, + 0x6f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x75, 0x73, 0x68, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x70, + 0x75, 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x69, 0x6f, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x75, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6f, + 0x73, 0x12, 0x4b, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x44, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x65, 0x66, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0b, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x1a, 0x3e, + 0x0a, 0x10, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x93, + 0x01, 0x0a, 0x14, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, + 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0b, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x12, 0x16, 0x0a, 0x06, + 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x77, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x22, 0x89, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0c, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, - 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x6e, - 0x74, 0x36, 0x34, 0x52, 0x0b, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, - 0x22, 0xfb, 0x05, 0x0a, 0x18, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3f, 0x0a, - 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x68, - 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x49, 0x74, 0x65, - 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x3a, - 0x0a, 0x09, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, - 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x65, 0x74, - 0x52, 0x08, 0x69, 0x74, 0x65, 0x6d, 0x53, 0x65, 0x74, 0x73, 0x12, 0x4e, 0x0a, 0x0a, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, - 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x43, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x48, 0x0a, 0x08, 0x65, 0x6e, - 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x68, - 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x45, 0x6e, 0x65, - 0x72, 0x67, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x65, 0x72, - 0x67, 0x69, 0x65, 0x73, 0x12, 0x4f, 0x0a, 0x10, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x5f, 0x6d, - 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, - 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, 0x6f, 0x64, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x52, 0x0f, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, 0x6f, 0x64, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x4f, 0x0a, 0x10, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, - 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, - 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x6f, 0x64, - 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x6f, 0x64, - 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x1a, 0x54, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, + 0x0c, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0b, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, + 0x22, 0x91, 0x04, 0x0a, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x3c, 0x0a, 0x0a, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, + 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x43, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x36, 0x0a, 0x08, 0x65, 0x6e, 0x65, 0x72, + 0x67, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x69, 0x65, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, + 0x12, 0x45, 0x0a, 0x10, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, 0x6f, + 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0f, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, 0x6f, + 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x3f, 0x0a, 0x10, 0x72, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, + 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, + 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x67, 0x72, 0x61, 0x6e, + 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0c, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5d, 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, - 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x34, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, - 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, - 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x59, 0x0a, 0x0d, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, - 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x65, - 0x72, 0x67, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xce, - 0x01, 0x0a, 0x10, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x65, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3b, 0x0a, 0x0d, 0x45, 0x6e, 0x65, 0x72, 0x67, + 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x34, 0x0a, 0x0a, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x26, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x52, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x22, 0x52, 0x0a, 0x10, 0x52, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x10, + 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6d, 0x69, 0x6e, + 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6d, + 0x61, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x22, 0x52, + 0x0a, 0x10, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x74, + 0x36, 0x34, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, + 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, + 0x6c, 0x65, 0x22, 0x44, 0x0a, 0x14, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x2c, 0x0a, 0x05, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, + 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x74, 0x36, + 0x34, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x7a, 0x0a, 0x17, 0x41, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x49, 0x74, 0x65, 0x6d, + 0x53, 0x65, 0x74, 0x12, 0x2c, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x03, 0x73, 0x65, 0x74, 0x22, 0x48, 0x0a, 0x18, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x12, 0x2c, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x6e, + 0x67, 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x46, + 0x0a, 0x16, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x73, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x52, + 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xb5, 0x01, 0x0a, 0x1e, 0x41, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x65, 0x72, 0x67, + 0x79, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0c, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x73, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, + 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x74, 0x36, + 0x34, 0x52, 0x0b, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x22, 0xc9, + 0x01, 0x0a, 0x1e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x73, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, + 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, + 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, + 0x72, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, + 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x39, 0x0a, 0x0c, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x0b, 0x64, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x22, 0xfb, 0x05, 0x0a, 0x18, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0a, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, - 0x65, 0x65, 0x64, 0x12, 0x3a, 0x0a, 0x08, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, - 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x08, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x12, - 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x6f, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x52, 0x6f, 0x6c, 0x6c, 0x73, 0x12, 0x21, 0x0a, 0x0c, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3f, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x3a, 0x0a, 0x09, 0x69, 0x74, 0x65, 0x6d, + 0x5f, 0x73, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x65, 0x74, 0x52, 0x08, 0x69, 0x74, 0x65, 0x6d, + 0x53, 0x65, 0x74, 0x73, 0x12, 0x4e, 0x0a, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, + 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x69, 0x65, 0x73, 0x12, 0x48, 0x0a, 0x08, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, 0x12, 0x4f, + 0x0a, 0x10, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, + 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, + 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0f, + 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, + 0x4f, 0x0a, 0x10, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x69, 0x72, 0x6f, + 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x73, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, + 0x0f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, + 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x1a, 0x54, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, + 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x49, + 0x74, 0x65, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5d, + 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x34, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x59, 0x0a, + 0x0d, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xce, 0x01, 0x0a, 0x10, 0x41, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x3e, 0x0a, + 0x0a, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x0a, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x65, 0x64, 0x12, 0x3a, 0x0a, + 0x08, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1e, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x08, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, + 0x5f, 0x72, 0x6f, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, + 0x78, 0x52, 0x6f, 0x6c, 0x6c, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, + 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x5c, 0x0a, 0x0e, 0x49, 0x6e, 0x63, + 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x24, 0x0a, 0x06, 0x72, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, + 0x73, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x22, 0x8a, 0x05, 0x0a, 0x09, 0x49, 0x6e, 0x63, 0x65, + 0x6e, 0x74, 0x69, 0x76, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, + 0x27, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, + 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, + 0x12, 0x26, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, + 0x73, 0x65, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x69, + 0x72, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, + 0x12, 0x43, 0x0a, 0x11, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x73, 0x52, 0x10, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x3d, 0x0a, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, + 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x0d, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x73, 0x12, 0x31, 0x0a, 0x14, 0x75, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, + 0x64, 0x5f, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x13, 0x75, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x63, + 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x26, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, + 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x33, + 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, + 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x2e, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x63, 0x6c, 0x61, + 0x69, 0x6d, 0x73, 0x1a, 0x4f, 0x0a, 0x0b, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x49, 0x6e, 0x63, 0x65, 0x6e, + 0x74, 0x69, 0x76, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x40, 0x0a, 0x0d, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, + 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x0a, 0x69, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, + 0x76, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x68, 0x69, 0x72, 0x6f, + 0x2e, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x52, 0x0a, 0x69, 0x6e, 0x63, 0x65, + 0x6e, 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0xd0, 0x03, 0x0a, 0x0d, 0x49, 0x6e, 0x63, 0x65, 0x6e, + 0x74, 0x69, 0x76, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, + 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x13, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, + 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6e, + 0x64, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x11, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x10, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x61, 0x6e, 0x5f, + 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x61, 0x6e, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x24, 0x0a, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x52, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x53, 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x65, + 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0c, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, + 0x53, 0x65, 0x63, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6c, 0x61, + 0x69, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x22, 0x2e, 0x0a, 0x1c, 0x49, 0x6e, 0x63, + 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x32, 0x0a, 0x1c, 0x49, 0x6e, 0x63, + 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x56, 0x0a, + 0x1b, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, + 0x6e, 0x74, 0x49, 0x64, 0x73, 0x22, 0x32, 0x0a, 0x1c, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, + 0x76, 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x34, 0x0a, 0x1e, 0x49, 0x6e, 0x63, + 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x43, + 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x25, 0x0a, 0x13, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x47, 0x65, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x5a, 0x0a, 0x16, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, @@ -10830,7 +10834,7 @@ var file_hiro_proto_rawDesc = []byte{ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, 0xe9, 0x1e, 0x0a, 0x05, 0x52, 0x70, 0x63, 0x49, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, 0x92, 0x1f, 0x0a, 0x05, 0x52, 0x70, 0x63, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x42, 0x0a, 0x15, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x49, 0x4e, 0x56, 0x45, 0x4e, 0x54, 0x4f, 0x52, 0x59, 0x5f, 0x4c, 0x49, @@ -11077,83 +11081,86 @@ var file_hiro_proto_rawDesc = []byte{ 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0xe9, 0x07, 0x12, 0x22, 0x0a, 0x1d, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x45, 0x43, 0x4f, 0x4e, 0x4f, 0x4d, 0x59, 0x5f, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, - 0x10, 0xea, 0x07, 0x2a, 0x4a, 0x0a, 0x0d, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x49, 0x4e, 0x43, 0x45, 0x4e, 0x54, 0x49, 0x56, - 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, - 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x49, 0x4e, 0x43, 0x45, 0x4e, 0x54, 0x49, 0x56, - 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x10, 0x01, 0x2a, - 0x85, 0x02, 0x0a, 0x20, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, - 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x12, 0x32, 0x0a, 0x2e, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, - 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, - 0x53, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x2a, 0x0a, 0x26, 0x50, 0x52, 0x4f, 0x47, + 0x10, 0xea, 0x07, 0x12, 0x27, 0x0a, 0x22, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x54, + 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x50, 0x45, 0x52, 0x53, 0x4f, 0x4e, 0x41, 0x4c, 0x49, 0x5a, + 0x45, 0x52, 0x5f, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0xeb, 0x07, 0x2a, 0x85, 0x02, 0x0a, + 0x20, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, + 0x72, 0x12, 0x32, 0x0a, 0x2e, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, + 0x5f, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4f, + 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x2a, 0x0a, 0x26, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, + 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, + 0x4e, 0x53, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x41, 0x4e, 0x44, 0x10, + 0x01, 0x12, 0x29, 0x0a, 0x25, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, + 0x5f, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4f, + 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x2a, 0x0a, 0x26, + 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x52, 0x45, 0x43, + 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, + 0x4f, 0x52, 0x5f, 0x58, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x2a, 0x0a, 0x26, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4e, 0x44, 0x49, - 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x41, - 0x4e, 0x44, 0x10, 0x01, 0x12, 0x29, 0x0a, 0x25, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, - 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, - 0x53, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x4f, 0x52, 0x10, 0x02, 0x12, - 0x2a, 0x0a, 0x26, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, - 0x52, 0x45, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4f, 0x50, 0x45, - 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x58, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x2a, 0x0a, 0x26, 0x50, - 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x52, 0x45, 0x43, 0x4f, - 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, - 0x52, 0x5f, 0x4e, 0x4f, 0x54, 0x10, 0x04, 0x2a, 0xb1, 0x01, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x27, 0x0a, 0x23, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, - 0x5f, 0x44, 0x45, 0x4c, 0x54, 0x41, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, - 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x25, 0x0a, 0x21, 0x50, 0x52, - 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4c, 0x54, 0x41, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, - 0x01, 0x12, 0x24, 0x0a, 0x20, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, - 0x5f, 0x44, 0x45, 0x4c, 0x54, 0x41, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x4c, - 0x4f, 0x43, 0x4b, 0x45, 0x44, 0x10, 0x02, 0x12, 0x22, 0x0a, 0x1e, 0x50, 0x52, 0x4f, 0x47, 0x52, + 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x4e, + 0x4f, 0x54, 0x10, 0x04, 0x2a, 0xb1, 0x01, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x27, + 0x0a, 0x23, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, + 0x4c, 0x54, 0x41, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x25, 0x0a, 0x21, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4c, 0x54, 0x41, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x4c, 0x4f, 0x43, 0x4b, 0x45, 0x44, 0x10, 0x03, 0x2a, 0xb4, 0x01, 0x0a, 0x12, - 0x53, 0x74, 0x61, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x12, 0x24, 0x0a, 0x20, 0x53, 0x54, 0x41, 0x54, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, - 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x41, 0x54, - 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, - 0x5f, 0x53, 0x45, 0x54, 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x53, 0x54, 0x41, 0x54, 0x5f, 0x55, - 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x44, - 0x45, 0x4c, 0x54, 0x41, 0x10, 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x41, 0x54, 0x5f, 0x55, - 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x4d, - 0x49, 0x4e, 0x10, 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x41, 0x54, 0x5f, 0x55, 0x50, 0x44, - 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x4d, 0x41, 0x58, - 0x10, 0x04, 0x2a, 0xa3, 0x01, 0x0a, 0x10, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x1e, 0x45, 0x43, 0x4f, 0x4e, 0x4f, - 0x4d, 0x59, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x25, 0x0a, 0x21, 0x45, - 0x43, 0x4f, 0x4e, 0x4f, 0x4d, 0x59, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x53, 0x54, 0x4f, 0x52, 0x45, - 0x10, 0x01, 0x12, 0x22, 0x0a, 0x1e, 0x45, 0x43, 0x4f, 0x4e, 0x4f, 0x4d, 0x59, 0x5f, 0x53, 0x54, - 0x4f, 0x52, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x47, 0x4f, 0x4f, 0x47, 0x4c, 0x45, 0x5f, - 0x50, 0x4c, 0x41, 0x59, 0x10, 0x02, 0x12, 0x20, 0x0a, 0x1c, 0x45, 0x43, 0x4f, 0x4e, 0x4f, 0x4d, - 0x59, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x42, 0x49, - 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x54, 0x10, 0x03, 0x2a, 0xbe, 0x01, 0x0a, 0x0d, 0x54, 0x75, 0x74, - 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x55, - 0x54, 0x4f, 0x52, 0x49, 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, - 0x45, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x54, 0x55, 0x54, 0x4f, 0x52, 0x49, 0x41, 0x4c, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x50, 0x54, 0x45, 0x44, 0x10, 0x01, - 0x12, 0x1b, 0x0a, 0x17, 0x54, 0x55, 0x54, 0x4f, 0x52, 0x49, 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x44, 0x45, 0x43, 0x4c, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1e, 0x0a, - 0x1a, 0x54, 0x55, 0x54, 0x4f, 0x52, 0x49, 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, - 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x03, 0x12, 0x1c, 0x0a, - 0x18, 0x54, 0x55, 0x54, 0x4f, 0x52, 0x49, 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, - 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x1c, 0x0a, 0x18, 0x54, - 0x55, 0x54, 0x4f, 0x52, 0x49, 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x42, - 0x41, 0x4e, 0x44, 0x4f, 0x4e, 0x45, 0x44, 0x10, 0x05, 0x3a, 0x3b, 0x0a, 0x05, 0x69, 0x6e, 0x70, - 0x75, 0x74, 0x12, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6e, - 0x70, 0x75, 0x74, 0x88, 0x01, 0x01, 0x3a, 0x3d, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x12, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x88, 0x01, 0x01, 0x42, 0x1c, 0x5a, 0x1a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x65, 0x72, 0x6f, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x68, - 0x69, 0x72, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x01, 0x12, 0x24, + 0x0a, 0x20, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, + 0x4c, 0x54, 0x41, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x4c, 0x4f, 0x43, 0x4b, + 0x45, 0x44, 0x10, 0x02, 0x12, 0x22, 0x0a, 0x1e, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, + 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4c, 0x54, 0x41, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, + 0x4c, 0x4f, 0x43, 0x4b, 0x45, 0x44, 0x10, 0x03, 0x2a, 0xb4, 0x01, 0x0a, 0x12, 0x53, 0x74, 0x61, + 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, + 0x24, 0x0a, 0x20, 0x53, 0x54, 0x41, 0x54, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4f, + 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x41, 0x54, 0x5f, 0x55, 0x50, + 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x53, 0x45, + 0x54, 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x53, 0x54, 0x41, 0x54, 0x5f, 0x55, 0x50, 0x44, 0x41, + 0x54, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x44, 0x45, 0x4c, 0x54, + 0x41, 0x10, 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x41, 0x54, 0x5f, 0x55, 0x50, 0x44, 0x41, + 0x54, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x4d, 0x49, 0x4e, 0x10, + 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x41, 0x54, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, + 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x4d, 0x41, 0x58, 0x10, 0x04, 0x2a, + 0xa3, 0x01, 0x0a, 0x10, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x1e, 0x45, 0x43, 0x4f, 0x4e, 0x4f, 0x4d, 0x59, 0x5f, + 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x25, 0x0a, 0x21, 0x45, 0x43, 0x4f, 0x4e, + 0x4f, 0x4d, 0x59, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, + 0x50, 0x50, 0x4c, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x10, 0x01, 0x12, + 0x22, 0x0a, 0x1e, 0x45, 0x43, 0x4f, 0x4e, 0x4f, 0x4d, 0x59, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x45, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x47, 0x4f, 0x4f, 0x47, 0x4c, 0x45, 0x5f, 0x50, 0x4c, 0x41, + 0x59, 0x10, 0x02, 0x12, 0x20, 0x0a, 0x1c, 0x45, 0x43, 0x4f, 0x4e, 0x4f, 0x4d, 0x59, 0x5f, 0x53, + 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x42, 0x49, 0x4e, 0x53, 0x54, + 0x41, 0x4e, 0x54, 0x10, 0x03, 0x2a, 0x4a, 0x0a, 0x0d, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, + 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x49, 0x4e, 0x43, 0x45, 0x4e, 0x54, + 0x49, 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x49, 0x4e, 0x43, 0x45, 0x4e, 0x54, + 0x49, 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x10, + 0x01, 0x2a, 0xbe, 0x01, 0x0a, 0x0d, 0x54, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x55, 0x54, 0x4f, 0x52, 0x49, 0x41, 0x4c, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, + 0x54, 0x55, 0x54, 0x4f, 0x52, 0x49, 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, + 0x43, 0x43, 0x45, 0x50, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x54, 0x55, 0x54, + 0x4f, 0x52, 0x49, 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x43, 0x4c, + 0x49, 0x4e, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1e, 0x0a, 0x1a, 0x54, 0x55, 0x54, 0x4f, 0x52, 0x49, + 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x47, + 0x52, 0x45, 0x53, 0x53, 0x10, 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x54, 0x55, 0x54, 0x4f, 0x52, 0x49, + 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, + 0x45, 0x44, 0x10, 0x04, 0x12, 0x1c, 0x0a, 0x18, 0x54, 0x55, 0x54, 0x4f, 0x52, 0x49, 0x41, 0x4c, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x42, 0x41, 0x4e, 0x44, 0x4f, 0x4e, 0x45, 0x44, + 0x10, 0x05, 0x3a, 0x3b, 0x0a, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x21, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, + 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xe8, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x88, 0x01, 0x01, 0x3a, + 0x3d, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xe9, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x88, 0x01, 0x01, 0x42, 0x1c, + 0x5a, 0x1a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x65, 0x72, + 0x6f, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x68, 0x69, 0x72, 0x6f, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -11172,50 +11179,50 @@ var file_hiro_proto_enumTypes = make([]protoimpl.EnumInfo, 7) var file_hiro_proto_msgTypes = make([]protoimpl.MessageInfo, 185) var file_hiro_proto_goTypes = []interface{}{ (RpcId)(0), // 0: hiro.RpcId - (IncentiveType)(0), // 1: hiro.IncentiveType - (ProgressionPreconditionsOperator)(0), // 2: hiro.ProgressionPreconditionsOperator - (ProgressionDeltaState)(0), // 3: hiro.ProgressionDeltaState - (StatUpdateOperator)(0), // 4: hiro.StatUpdateOperator - (EconomyStoreType)(0), // 5: hiro.EconomyStoreType + (ProgressionPreconditionsOperator)(0), // 1: hiro.ProgressionPreconditionsOperator + (ProgressionDeltaState)(0), // 2: hiro.ProgressionDeltaState + (StatUpdateOperator)(0), // 3: hiro.StatUpdateOperator + (EconomyStoreType)(0), // 4: hiro.EconomyStoreType + (IncentiveType)(0), // 5: hiro.IncentiveType (TutorialState)(0), // 6: hiro.TutorialState - (*IncentiveClaim)(nil), // 7: hiro.IncentiveClaim - (*Incentive)(nil), // 8: hiro.Incentive - (*IncentiveList)(nil), // 9: hiro.IncentiveList - (*IncentiveInfo)(nil), // 10: hiro.IncentiveInfo - (*IncentiveSenderCreateRequest)(nil), // 11: hiro.IncentiveSenderCreateRequest - (*IncentiveSenderDeleteRequest)(nil), // 12: hiro.IncentiveSenderDeleteRequest - (*IncentiveSenderClaimRequest)(nil), // 13: hiro.IncentiveSenderClaimRequest - (*IncentiveRecipientGetRequest)(nil), // 14: hiro.IncentiveRecipientGetRequest - (*IncentiveRecipientClaimRequest)(nil), // 15: hiro.IncentiveRecipientClaimRequest - (*ProgressionCost)(nil), // 16: hiro.ProgressionCost - (*ProgressionPreconditions)(nil), // 17: hiro.ProgressionPreconditions - (*ProgressionPreconditionsBlock)(nil), // 18: hiro.ProgressionPreconditionsBlock - (*Progression)(nil), // 19: hiro.Progression - (*ProgressionDelta)(nil), // 20: hiro.ProgressionDelta - (*ProgressionList)(nil), // 21: hiro.ProgressionList - (*ProgressionGetRequest)(nil), // 22: hiro.ProgressionGetRequest - (*ProgressionPurchaseRequest)(nil), // 23: hiro.ProgressionPurchaseRequest - (*ProgressionUpdateRequest)(nil), // 24: hiro.ProgressionUpdateRequest - (*StatUpdate)(nil), // 25: hiro.StatUpdate - (*StatUpdateRequest)(nil), // 26: hiro.StatUpdateRequest - (*Stat)(nil), // 27: hiro.Stat - (*StatList)(nil), // 28: hiro.StatList - (*ChannelMessageAck)(nil), // 29: hiro.ChannelMessageAck - (*DevicePrefsRequest)(nil), // 30: hiro.DevicePrefsRequest - (*RewardEnergyModifier)(nil), // 31: hiro.RewardEnergyModifier - (*RewardModifier)(nil), // 32: hiro.RewardModifier - (*Reward)(nil), // 33: hiro.Reward - (*RewardList)(nil), // 34: hiro.RewardList - (*RewardRangeInt32)(nil), // 35: hiro.RewardRangeInt32 - (*RewardRangeInt64)(nil), // 36: hiro.RewardRangeInt64 - (*AvailableRewardsItem)(nil), // 37: hiro.AvailableRewardsItem - (*AvailableRewardsItemSet)(nil), // 38: hiro.AvailableRewardsItemSet - (*AvailableRewardsCurrency)(nil), // 39: hiro.AvailableRewardsCurrency - (*AvailableRewardsEnergy)(nil), // 40: hiro.AvailableRewardsEnergy - (*AvailableRewardsEnergyModifier)(nil), // 41: hiro.AvailableRewardsEnergyModifier - (*AvailableRewardsRewardModifier)(nil), // 42: hiro.AvailableRewardsRewardModifier - (*AvailableRewardsContents)(nil), // 43: hiro.AvailableRewardsContents - (*AvailableRewards)(nil), // 44: hiro.AvailableRewards + (*ProgressionCost)(nil), // 7: hiro.ProgressionCost + (*ProgressionPreconditions)(nil), // 8: hiro.ProgressionPreconditions + (*ProgressionPreconditionsBlock)(nil), // 9: hiro.ProgressionPreconditionsBlock + (*Progression)(nil), // 10: hiro.Progression + (*ProgressionDelta)(nil), // 11: hiro.ProgressionDelta + (*ProgressionList)(nil), // 12: hiro.ProgressionList + (*ProgressionGetRequest)(nil), // 13: hiro.ProgressionGetRequest + (*ProgressionPurchaseRequest)(nil), // 14: hiro.ProgressionPurchaseRequest + (*ProgressionUpdateRequest)(nil), // 15: hiro.ProgressionUpdateRequest + (*StatUpdate)(nil), // 16: hiro.StatUpdate + (*StatUpdateRequest)(nil), // 17: hiro.StatUpdateRequest + (*Stat)(nil), // 18: hiro.Stat + (*StatList)(nil), // 19: hiro.StatList + (*ChannelMessageAck)(nil), // 20: hiro.ChannelMessageAck + (*DevicePrefsRequest)(nil), // 21: hiro.DevicePrefsRequest + (*RewardEnergyModifier)(nil), // 22: hiro.RewardEnergyModifier + (*RewardModifier)(nil), // 23: hiro.RewardModifier + (*Reward)(nil), // 24: hiro.Reward + (*RewardList)(nil), // 25: hiro.RewardList + (*RewardRangeInt32)(nil), // 26: hiro.RewardRangeInt32 + (*RewardRangeInt64)(nil), // 27: hiro.RewardRangeInt64 + (*AvailableRewardsItem)(nil), // 28: hiro.AvailableRewardsItem + (*AvailableRewardsItemSet)(nil), // 29: hiro.AvailableRewardsItemSet + (*AvailableRewardsCurrency)(nil), // 30: hiro.AvailableRewardsCurrency + (*AvailableRewardsEnergy)(nil), // 31: hiro.AvailableRewardsEnergy + (*AvailableRewardsEnergyModifier)(nil), // 32: hiro.AvailableRewardsEnergyModifier + (*AvailableRewardsRewardModifier)(nil), // 33: hiro.AvailableRewardsRewardModifier + (*AvailableRewardsContents)(nil), // 34: hiro.AvailableRewardsContents + (*AvailableRewards)(nil), // 35: hiro.AvailableRewards + (*IncentiveClaim)(nil), // 36: hiro.IncentiveClaim + (*Incentive)(nil), // 37: hiro.Incentive + (*IncentiveList)(nil), // 38: hiro.IncentiveList + (*IncentiveInfo)(nil), // 39: hiro.IncentiveInfo + (*IncentiveSenderCreateRequest)(nil), // 40: hiro.IncentiveSenderCreateRequest + (*IncentiveSenderDeleteRequest)(nil), // 41: hiro.IncentiveSenderDeleteRequest + (*IncentiveSenderClaimRequest)(nil), // 42: hiro.IncentiveSenderClaimRequest + (*IncentiveRecipientGetRequest)(nil), // 43: hiro.IncentiveRecipientGetRequest + (*IncentiveRecipientClaimRequest)(nil), // 44: hiro.IncentiveRecipientClaimRequest (*EventLeaderboardGet)(nil), // 45: hiro.EventLeaderboardGet (*EventLeaderboardUpdate)(nil), // 46: hiro.EventLeaderboardUpdate (*EventLeaderboardClaim)(nil), // 47: hiro.EventLeaderboardClaim @@ -11291,34 +11298,34 @@ var file_hiro_proto_goTypes = []interface{}{ (*AchievementsGetRequest)(nil), // 117: hiro.AchievementsGetRequest (*AchievementsUpdateAck)(nil), // 118: hiro.AchievementsUpdateAck (*AchievementsUpdateRequest)(nil), // 119: hiro.AchievementsUpdateRequest - nil, // 120: hiro.Incentive.ClaimsEntry - nil, // 121: hiro.ProgressionCost.ItemsEntry - nil, // 122: hiro.ProgressionCost.CurrenciesEntry - nil, // 123: hiro.ProgressionPreconditions.CountsEntry - nil, // 124: hiro.ProgressionPreconditions.ItemsMinEntry - nil, // 125: hiro.ProgressionPreconditions.ItemsMaxEntry - nil, // 126: hiro.ProgressionPreconditions.StatsMinEntry - nil, // 127: hiro.ProgressionPreconditions.StatsMaxEntry - nil, // 128: hiro.ProgressionPreconditions.EnergyMinEntry - nil, // 129: hiro.ProgressionPreconditions.EnergyMaxEntry - nil, // 130: hiro.ProgressionPreconditions.CurrencyMinEntry - nil, // 131: hiro.ProgressionPreconditions.CurrencyMaxEntry - nil, // 132: hiro.Progression.CountsEntry - nil, // 133: hiro.Progression.AdditionalPropertiesEntry - nil, // 134: hiro.ProgressionDelta.CountsEntry - nil, // 135: hiro.ProgressionList.ProgressionsEntry - nil, // 136: hiro.ProgressionList.DeltasEntry - nil, // 137: hiro.ProgressionGetRequest.ProgressionsEntry - nil, // 138: hiro.ProgressionUpdateRequest.CountsEntry - nil, // 139: hiro.StatList.PublicEntry - nil, // 140: hiro.StatList.PrivateEntry - nil, // 141: hiro.DevicePrefsRequest.PreferencesEntry - nil, // 142: hiro.Reward.ItemsEntry - nil, // 143: hiro.Reward.CurrenciesEntry - nil, // 144: hiro.Reward.EnergiesEntry - nil, // 145: hiro.AvailableRewardsContents.ItemsEntry - nil, // 146: hiro.AvailableRewardsContents.CurrenciesEntry - nil, // 147: hiro.AvailableRewardsContents.EnergiesEntry + nil, // 120: hiro.ProgressionCost.ItemsEntry + nil, // 121: hiro.ProgressionCost.CurrenciesEntry + nil, // 122: hiro.ProgressionPreconditions.CountsEntry + nil, // 123: hiro.ProgressionPreconditions.ItemsMinEntry + nil, // 124: hiro.ProgressionPreconditions.ItemsMaxEntry + nil, // 125: hiro.ProgressionPreconditions.StatsMinEntry + nil, // 126: hiro.ProgressionPreconditions.StatsMaxEntry + nil, // 127: hiro.ProgressionPreconditions.EnergyMinEntry + nil, // 128: hiro.ProgressionPreconditions.EnergyMaxEntry + nil, // 129: hiro.ProgressionPreconditions.CurrencyMinEntry + nil, // 130: hiro.ProgressionPreconditions.CurrencyMaxEntry + nil, // 131: hiro.Progression.CountsEntry + nil, // 132: hiro.Progression.AdditionalPropertiesEntry + nil, // 133: hiro.ProgressionDelta.CountsEntry + nil, // 134: hiro.ProgressionList.ProgressionsEntry + nil, // 135: hiro.ProgressionList.DeltasEntry + nil, // 136: hiro.ProgressionGetRequest.ProgressionsEntry + nil, // 137: hiro.ProgressionUpdateRequest.CountsEntry + nil, // 138: hiro.StatList.PublicEntry + nil, // 139: hiro.StatList.PrivateEntry + nil, // 140: hiro.DevicePrefsRequest.PreferencesEntry + nil, // 141: hiro.Reward.ItemsEntry + nil, // 142: hiro.Reward.CurrenciesEntry + nil, // 143: hiro.Reward.EnergiesEntry + nil, // 144: hiro.AvailableRewardsContents.ItemsEntry + nil, // 145: hiro.AvailableRewardsContents.CurrenciesEntry + nil, // 146: hiro.AvailableRewardsContents.EnergiesEntry + nil, // 147: hiro.Incentive.ClaimsEntry nil, // 148: hiro.EventLeaderboard.RewardTiersEntry nil, // 149: hiro.EventLeaderboard.ChangeZonesEntry nil, // 150: hiro.EventLeaderboard.AdditionalPropertiesEntry @@ -11366,82 +11373,82 @@ var file_hiro_proto_goTypes = []interface{}{ (*descriptorpb.EnumValueOptions)(nil), // 192: google.protobuf.EnumValueOptions } var file_hiro_proto_depIdxs = []int32{ - 33, // 0: hiro.IncentiveClaim.reward:type_name -> hiro.Reward - 1, // 1: hiro.Incentive.type:type_name -> hiro.IncentiveType - 44, // 2: hiro.Incentive.recipient_rewards:type_name -> hiro.AvailableRewards - 44, // 3: hiro.Incentive.sender_rewards:type_name -> hiro.AvailableRewards - 33, // 4: hiro.Incentive.rewards:type_name -> hiro.Reward - 120, // 5: hiro.Incentive.claims:type_name -> hiro.Incentive.ClaimsEntry - 8, // 6: hiro.IncentiveList.incentives:type_name -> hiro.Incentive - 1, // 7: hiro.IncentiveInfo.type:type_name -> hiro.IncentiveType - 44, // 8: hiro.IncentiveInfo.available_rewards:type_name -> hiro.AvailableRewards - 33, // 9: hiro.IncentiveInfo.reward:type_name -> hiro.Reward - 121, // 10: hiro.ProgressionCost.items:type_name -> hiro.ProgressionCost.ItemsEntry - 122, // 11: hiro.ProgressionCost.currencies:type_name -> hiro.ProgressionCost.CurrenciesEntry - 123, // 12: hiro.ProgressionPreconditions.counts:type_name -> hiro.ProgressionPreconditions.CountsEntry - 16, // 13: hiro.ProgressionPreconditions.cost:type_name -> hiro.ProgressionCost - 124, // 14: hiro.ProgressionPreconditions.items_min:type_name -> hiro.ProgressionPreconditions.ItemsMinEntry - 125, // 15: hiro.ProgressionPreconditions.items_max:type_name -> hiro.ProgressionPreconditions.ItemsMaxEntry - 126, // 16: hiro.ProgressionPreconditions.stats_min:type_name -> hiro.ProgressionPreconditions.StatsMinEntry - 127, // 17: hiro.ProgressionPreconditions.stats_max:type_name -> hiro.ProgressionPreconditions.StatsMaxEntry - 128, // 18: hiro.ProgressionPreconditions.energy_min:type_name -> hiro.ProgressionPreconditions.EnergyMinEntry - 129, // 19: hiro.ProgressionPreconditions.energy_max:type_name -> hiro.ProgressionPreconditions.EnergyMaxEntry - 130, // 20: hiro.ProgressionPreconditions.currency_min:type_name -> hiro.ProgressionPreconditions.CurrencyMinEntry - 131, // 21: hiro.ProgressionPreconditions.currency_max:type_name -> hiro.ProgressionPreconditions.CurrencyMaxEntry - 17, // 22: hiro.ProgressionPreconditionsBlock.direct:type_name -> hiro.ProgressionPreconditions - 2, // 23: hiro.ProgressionPreconditionsBlock.operator:type_name -> hiro.ProgressionPreconditionsOperator - 18, // 24: hiro.ProgressionPreconditionsBlock.nested:type_name -> hiro.ProgressionPreconditionsBlock - 132, // 25: hiro.Progression.counts:type_name -> hiro.Progression.CountsEntry - 133, // 26: hiro.Progression.additional_properties:type_name -> hiro.Progression.AdditionalPropertiesEntry - 18, // 27: hiro.Progression.preconditions:type_name -> hiro.ProgressionPreconditionsBlock - 18, // 28: hiro.Progression.unmet_preconditions:type_name -> hiro.ProgressionPreconditionsBlock - 3, // 29: hiro.ProgressionDelta.state:type_name -> hiro.ProgressionDeltaState - 134, // 30: hiro.ProgressionDelta.counts:type_name -> hiro.ProgressionDelta.CountsEntry - 18, // 31: hiro.ProgressionDelta.preconditions:type_name -> hiro.ProgressionPreconditionsBlock - 135, // 32: hiro.ProgressionList.progressions:type_name -> hiro.ProgressionList.ProgressionsEntry - 136, // 33: hiro.ProgressionList.deltas:type_name -> hiro.ProgressionList.DeltasEntry - 137, // 34: hiro.ProgressionGetRequest.progressions:type_name -> hiro.ProgressionGetRequest.ProgressionsEntry - 138, // 35: hiro.ProgressionUpdateRequest.counts:type_name -> hiro.ProgressionUpdateRequest.CountsEntry - 4, // 36: hiro.StatUpdate.operator:type_name -> hiro.StatUpdateOperator - 25, // 37: hiro.StatUpdateRequest.public:type_name -> hiro.StatUpdate - 25, // 38: hiro.StatUpdateRequest.private:type_name -> hiro.StatUpdate - 139, // 39: hiro.StatList.public:type_name -> hiro.StatList.PublicEntry - 140, // 40: hiro.StatList.private:type_name -> hiro.StatList.PrivateEntry - 141, // 41: hiro.DevicePrefsRequest.preferences:type_name -> hiro.DevicePrefsRequest.PreferencesEntry - 142, // 42: hiro.Reward.items:type_name -> hiro.Reward.ItemsEntry - 143, // 43: hiro.Reward.currencies:type_name -> hiro.Reward.CurrenciesEntry - 144, // 44: hiro.Reward.energies:type_name -> hiro.Reward.EnergiesEntry - 31, // 45: hiro.Reward.energy_modifiers:type_name -> hiro.RewardEnergyModifier - 32, // 46: hiro.Reward.reward_modifiers:type_name -> hiro.RewardModifier - 33, // 47: hiro.RewardList.rewards:type_name -> hiro.Reward - 36, // 48: hiro.AvailableRewardsItem.count:type_name -> hiro.RewardRangeInt64 - 36, // 49: hiro.AvailableRewardsItemSet.count:type_name -> hiro.RewardRangeInt64 - 36, // 50: hiro.AvailableRewardsCurrency.count:type_name -> hiro.RewardRangeInt64 - 35, // 51: hiro.AvailableRewardsEnergy.count:type_name -> hiro.RewardRangeInt32 - 36, // 52: hiro.AvailableRewardsEnergyModifier.value:type_name -> hiro.RewardRangeInt64 - 36, // 53: hiro.AvailableRewardsEnergyModifier.duration_sec:type_name -> hiro.RewardRangeInt64 - 36, // 54: hiro.AvailableRewardsRewardModifier.value:type_name -> hiro.RewardRangeInt64 - 36, // 55: hiro.AvailableRewardsRewardModifier.duration_sec:type_name -> hiro.RewardRangeInt64 - 145, // 56: hiro.AvailableRewardsContents.items:type_name -> hiro.AvailableRewardsContents.ItemsEntry - 38, // 57: hiro.AvailableRewardsContents.item_sets:type_name -> hiro.AvailableRewardsItemSet - 146, // 58: hiro.AvailableRewardsContents.currencies:type_name -> hiro.AvailableRewardsContents.CurrenciesEntry - 147, // 59: hiro.AvailableRewardsContents.energies:type_name -> hiro.AvailableRewardsContents.EnergiesEntry - 41, // 60: hiro.AvailableRewardsContents.energy_modifiers:type_name -> hiro.AvailableRewardsEnergyModifier - 42, // 61: hiro.AvailableRewardsContents.reward_modifiers:type_name -> hiro.AvailableRewardsRewardModifier - 43, // 62: hiro.AvailableRewards.guaranteed:type_name -> hiro.AvailableRewardsContents - 43, // 63: hiro.AvailableRewards.weighted:type_name -> hiro.AvailableRewardsContents - 44, // 64: hiro.EventLeaderboardRewardTier.available_rewards:type_name -> hiro.AvailableRewards + 120, // 0: hiro.ProgressionCost.items:type_name -> hiro.ProgressionCost.ItemsEntry + 121, // 1: hiro.ProgressionCost.currencies:type_name -> hiro.ProgressionCost.CurrenciesEntry + 122, // 2: hiro.ProgressionPreconditions.counts:type_name -> hiro.ProgressionPreconditions.CountsEntry + 7, // 3: hiro.ProgressionPreconditions.cost:type_name -> hiro.ProgressionCost + 123, // 4: hiro.ProgressionPreconditions.items_min:type_name -> hiro.ProgressionPreconditions.ItemsMinEntry + 124, // 5: hiro.ProgressionPreconditions.items_max:type_name -> hiro.ProgressionPreconditions.ItemsMaxEntry + 125, // 6: hiro.ProgressionPreconditions.stats_min:type_name -> hiro.ProgressionPreconditions.StatsMinEntry + 126, // 7: hiro.ProgressionPreconditions.stats_max:type_name -> hiro.ProgressionPreconditions.StatsMaxEntry + 127, // 8: hiro.ProgressionPreconditions.energy_min:type_name -> hiro.ProgressionPreconditions.EnergyMinEntry + 128, // 9: hiro.ProgressionPreconditions.energy_max:type_name -> hiro.ProgressionPreconditions.EnergyMaxEntry + 129, // 10: hiro.ProgressionPreconditions.currency_min:type_name -> hiro.ProgressionPreconditions.CurrencyMinEntry + 130, // 11: hiro.ProgressionPreconditions.currency_max:type_name -> hiro.ProgressionPreconditions.CurrencyMaxEntry + 8, // 12: hiro.ProgressionPreconditionsBlock.direct:type_name -> hiro.ProgressionPreconditions + 1, // 13: hiro.ProgressionPreconditionsBlock.operator:type_name -> hiro.ProgressionPreconditionsOperator + 9, // 14: hiro.ProgressionPreconditionsBlock.nested:type_name -> hiro.ProgressionPreconditionsBlock + 131, // 15: hiro.Progression.counts:type_name -> hiro.Progression.CountsEntry + 132, // 16: hiro.Progression.additional_properties:type_name -> hiro.Progression.AdditionalPropertiesEntry + 9, // 17: hiro.Progression.preconditions:type_name -> hiro.ProgressionPreconditionsBlock + 9, // 18: hiro.Progression.unmet_preconditions:type_name -> hiro.ProgressionPreconditionsBlock + 2, // 19: hiro.ProgressionDelta.state:type_name -> hiro.ProgressionDeltaState + 133, // 20: hiro.ProgressionDelta.counts:type_name -> hiro.ProgressionDelta.CountsEntry + 9, // 21: hiro.ProgressionDelta.preconditions:type_name -> hiro.ProgressionPreconditionsBlock + 134, // 22: hiro.ProgressionList.progressions:type_name -> hiro.ProgressionList.ProgressionsEntry + 135, // 23: hiro.ProgressionList.deltas:type_name -> hiro.ProgressionList.DeltasEntry + 136, // 24: hiro.ProgressionGetRequest.progressions:type_name -> hiro.ProgressionGetRequest.ProgressionsEntry + 137, // 25: hiro.ProgressionUpdateRequest.counts:type_name -> hiro.ProgressionUpdateRequest.CountsEntry + 3, // 26: hiro.StatUpdate.operator:type_name -> hiro.StatUpdateOperator + 16, // 27: hiro.StatUpdateRequest.public:type_name -> hiro.StatUpdate + 16, // 28: hiro.StatUpdateRequest.private:type_name -> hiro.StatUpdate + 138, // 29: hiro.StatList.public:type_name -> hiro.StatList.PublicEntry + 139, // 30: hiro.StatList.private:type_name -> hiro.StatList.PrivateEntry + 140, // 31: hiro.DevicePrefsRequest.preferences:type_name -> hiro.DevicePrefsRequest.PreferencesEntry + 141, // 32: hiro.Reward.items:type_name -> hiro.Reward.ItemsEntry + 142, // 33: hiro.Reward.currencies:type_name -> hiro.Reward.CurrenciesEntry + 143, // 34: hiro.Reward.energies:type_name -> hiro.Reward.EnergiesEntry + 22, // 35: hiro.Reward.energy_modifiers:type_name -> hiro.RewardEnergyModifier + 23, // 36: hiro.Reward.reward_modifiers:type_name -> hiro.RewardModifier + 24, // 37: hiro.RewardList.rewards:type_name -> hiro.Reward + 27, // 38: hiro.AvailableRewardsItem.count:type_name -> hiro.RewardRangeInt64 + 27, // 39: hiro.AvailableRewardsItemSet.count:type_name -> hiro.RewardRangeInt64 + 27, // 40: hiro.AvailableRewardsCurrency.count:type_name -> hiro.RewardRangeInt64 + 26, // 41: hiro.AvailableRewardsEnergy.count:type_name -> hiro.RewardRangeInt32 + 27, // 42: hiro.AvailableRewardsEnergyModifier.value:type_name -> hiro.RewardRangeInt64 + 27, // 43: hiro.AvailableRewardsEnergyModifier.duration_sec:type_name -> hiro.RewardRangeInt64 + 27, // 44: hiro.AvailableRewardsRewardModifier.value:type_name -> hiro.RewardRangeInt64 + 27, // 45: hiro.AvailableRewardsRewardModifier.duration_sec:type_name -> hiro.RewardRangeInt64 + 144, // 46: hiro.AvailableRewardsContents.items:type_name -> hiro.AvailableRewardsContents.ItemsEntry + 29, // 47: hiro.AvailableRewardsContents.item_sets:type_name -> hiro.AvailableRewardsItemSet + 145, // 48: hiro.AvailableRewardsContents.currencies:type_name -> hiro.AvailableRewardsContents.CurrenciesEntry + 146, // 49: hiro.AvailableRewardsContents.energies:type_name -> hiro.AvailableRewardsContents.EnergiesEntry + 32, // 50: hiro.AvailableRewardsContents.energy_modifiers:type_name -> hiro.AvailableRewardsEnergyModifier + 33, // 51: hiro.AvailableRewardsContents.reward_modifiers:type_name -> hiro.AvailableRewardsRewardModifier + 34, // 52: hiro.AvailableRewards.guaranteed:type_name -> hiro.AvailableRewardsContents + 34, // 53: hiro.AvailableRewards.weighted:type_name -> hiro.AvailableRewardsContents + 24, // 54: hiro.IncentiveClaim.reward:type_name -> hiro.Reward + 5, // 55: hiro.Incentive.type:type_name -> hiro.IncentiveType + 35, // 56: hiro.Incentive.recipient_rewards:type_name -> hiro.AvailableRewards + 35, // 57: hiro.Incentive.sender_rewards:type_name -> hiro.AvailableRewards + 24, // 58: hiro.Incentive.rewards:type_name -> hiro.Reward + 147, // 59: hiro.Incentive.claims:type_name -> hiro.Incentive.ClaimsEntry + 37, // 60: hiro.IncentiveList.incentives:type_name -> hiro.Incentive + 5, // 61: hiro.IncentiveInfo.type:type_name -> hiro.IncentiveType + 35, // 62: hiro.IncentiveInfo.available_rewards:type_name -> hiro.AvailableRewards + 24, // 63: hiro.IncentiveInfo.reward:type_name -> hiro.Reward + 35, // 64: hiro.EventLeaderboardRewardTier.available_rewards:type_name -> hiro.AvailableRewards 50, // 65: hiro.EventLeaderboardRewardTiers.reward_tiers:type_name -> hiro.EventLeaderboardRewardTier - 44, // 66: hiro.EventLeaderboard.available_rewards:type_name -> hiro.AvailableRewards + 35, // 66: hiro.EventLeaderboard.available_rewards:type_name -> hiro.AvailableRewards 148, // 67: hiro.EventLeaderboard.reward_tiers:type_name -> hiro.EventLeaderboard.RewardTiersEntry 149, // 68: hiro.EventLeaderboard.change_zones:type_name -> hiro.EventLeaderboard.ChangeZonesEntry - 33, // 69: hiro.EventLeaderboard.reward:type_name -> hiro.Reward + 24, // 69: hiro.EventLeaderboard.reward:type_name -> hiro.Reward 150, // 70: hiro.EventLeaderboard.additional_properties:type_name -> hiro.EventLeaderboard.AdditionalPropertiesEntry 49, // 71: hiro.EventLeaderboard.scores:type_name -> hiro.EventLeaderboardScore - 44, // 72: hiro.EconomyDonation.recipient_available_rewards:type_name -> hiro.AvailableRewards + 35, // 72: hiro.EconomyDonation.recipient_available_rewards:type_name -> hiro.AvailableRewards 54, // 73: hiro.EconomyDonation.contributors:type_name -> hiro.EconomyDonationContributor - 44, // 74: hiro.EconomyDonation.contributor_available_rewards:type_name -> hiro.AvailableRewards - 33, // 75: hiro.EconomyDonation.recipient_rewards:type_name -> hiro.Reward + 35, // 74: hiro.EconomyDonation.contributor_available_rewards:type_name -> hiro.AvailableRewards + 24, // 75: hiro.EconomyDonation.recipient_rewards:type_name -> hiro.Reward 151, // 76: hiro.EconomyDonation.additional_properties:type_name -> hiro.EconomyDonation.AdditionalPropertiesEntry 55, // 77: hiro.EconomyDonationAck.donation:type_name -> hiro.EconomyDonation 55, // 78: hiro.EconomyDonationsList.donations:type_name -> hiro.EconomyDonation @@ -11450,15 +11457,15 @@ var file_hiro_proto_depIdxs = []int32{ 153, // 81: hiro.EconomyDonationsByUserList.user_donations:type_name -> hiro.EconomyDonationsByUserList.UserDonationsEntry 154, // 82: hiro.EconomyListStoreItemCost.currencies:type_name -> hiro.EconomyListStoreItemCost.CurrenciesEntry 64, // 83: hiro.EconomyListStoreItem.cost:type_name -> hiro.EconomyListStoreItemCost - 44, // 84: hiro.EconomyListStoreItem.available_rewards:type_name -> hiro.AvailableRewards + 35, // 84: hiro.EconomyListStoreItem.available_rewards:type_name -> hiro.AvailableRewards 155, // 85: hiro.EconomyListStoreItem.additional_properties:type_name -> hiro.EconomyListStoreItem.AdditionalPropertiesEntry - 33, // 86: hiro.EconomyListPlacement.reward:type_name -> hiro.Reward - 44, // 87: hiro.EconomyListPlacement.available_rewards:type_name -> hiro.AvailableRewards + 24, // 86: hiro.EconomyListPlacement.reward:type_name -> hiro.Reward + 35, // 87: hiro.EconomyListPlacement.available_rewards:type_name -> hiro.AvailableRewards 156, // 88: hiro.EconomyListPlacement.additional_properties:type_name -> hiro.EconomyListPlacement.AdditionalPropertiesEntry 65, // 89: hiro.EconomyList.store_items:type_name -> hiro.EconomyListStoreItem 66, // 90: hiro.EconomyList.placements:type_name -> hiro.EconomyListPlacement 157, // 91: hiro.EconomyList.donations:type_name -> hiro.EconomyList.DonationsEntry - 44, // 92: hiro.InventoryItem.consume_available_rewards:type_name -> hiro.AvailableRewards + 35, // 92: hiro.InventoryItem.consume_available_rewards:type_name -> hiro.AvailableRewards 158, // 93: hiro.InventoryItem.string_properties:type_name -> hiro.InventoryItem.StringPropertiesEntry 159, // 94: hiro.InventoryItem.numeric_properties:type_name -> hiro.InventoryItem.NumericPropertiesEntry 160, // 95: hiro.InventoryGrantRequest.items:type_name -> hiro.InventoryGrantRequest.ItemsEntry @@ -11473,26 +11480,26 @@ var file_hiro_proto_depIdxs = []int32{ 168, // 104: hiro.InventoryConsumeRewards.instance_rewards:type_name -> hiro.InventoryConsumeRewards.InstanceRewardsEntry 73, // 105: hiro.InventoryUpdateAck.inventory:type_name -> hiro.Inventory 169, // 106: hiro.InventoryList.items:type_name -> hiro.InventoryList.ItemsEntry - 5, // 107: hiro.EconomyListRequest.store_type:type_name -> hiro.EconomyStoreType + 4, // 107: hiro.EconomyListRequest.store_type:type_name -> hiro.EconomyStoreType 170, // 108: hiro.EconomyGrantRequest.currencies:type_name -> hiro.EconomyGrantRequest.CurrenciesEntry - 32, // 109: hiro.EconomyGrantRequest.reward_modifiers:type_name -> hiro.RewardModifier + 23, // 109: hiro.EconomyGrantRequest.reward_modifiers:type_name -> hiro.RewardModifier 171, // 110: hiro.EconomyGrantRequest.items:type_name -> hiro.EconomyGrantRequest.ItemsEntry - 5, // 111: hiro.EconomyPurchaseIntentRequest.store_type:type_name -> hiro.EconomyStoreType - 5, // 112: hiro.EconomyPurchaseRequest.store_type:type_name -> hiro.EconomyStoreType - 33, // 113: hiro.EconomyPlacementStatus.reward:type_name -> hiro.Reward + 4, // 111: hiro.EconomyPurchaseIntentRequest.store_type:type_name -> hiro.EconomyStoreType + 4, // 112: hiro.EconomyPurchaseRequest.store_type:type_name -> hiro.EconomyStoreType + 24, // 113: hiro.EconomyPlacementStatus.reward:type_name -> hiro.Reward 172, // 114: hiro.EconomyUpdateAck.wallet:type_name -> hiro.EconomyUpdateAck.WalletEntry 73, // 115: hiro.EconomyUpdateAck.inventory:type_name -> hiro.Inventory - 33, // 116: hiro.EconomyUpdateAck.reward:type_name -> hiro.Reward + 24, // 116: hiro.EconomyUpdateAck.reward:type_name -> hiro.Reward 173, // 117: hiro.EconomyPurchaseAck.wallet:type_name -> hiro.EconomyPurchaseAck.WalletEntry 73, // 118: hiro.EconomyPurchaseAck.inventory:type_name -> hiro.Inventory - 33, // 119: hiro.EconomyPurchaseAck.reward:type_name -> hiro.Reward + 24, // 119: hiro.EconomyPurchaseAck.reward:type_name -> hiro.Reward 87, // 120: hiro.Energy.modifiers:type_name -> hiro.EnergyModifier - 44, // 121: hiro.Energy.available_rewards:type_name -> hiro.AvailableRewards + 35, // 121: hiro.Energy.available_rewards:type_name -> hiro.AvailableRewards 174, // 122: hiro.Energy.additional_properties:type_name -> hiro.Energy.AdditionalPropertiesEntry 175, // 123: hiro.EnergyList.energies:type_name -> hiro.EnergyList.EnergiesEntry 176, // 124: hiro.EnergySpendRequest.amounts:type_name -> hiro.EnergySpendRequest.AmountsEntry 89, // 125: hiro.EnergySpendReward.energies:type_name -> hiro.EnergyList - 33, // 126: hiro.EnergySpendReward.reward:type_name -> hiro.Reward + 24, // 126: hiro.EnergySpendReward.reward:type_name -> hiro.Reward 92, // 127: hiro.LeaderboardConfigList.leaderboard_configs:type_name -> hiro.LeaderboardConfig 6, // 128: hiro.Tutorial.state:type_name -> hiro.TutorialState 177, // 129: hiro.Tutorial.additional_properties:type_name -> hiro.Tutorial.AdditionalPropertiesEntry @@ -11502,8 +11509,8 @@ var file_hiro_proto_depIdxs = []int32{ 180, // 133: hiro.UnlockableCost.currencies:type_name -> hiro.UnlockableCost.CurrenciesEntry 107, // 134: hiro.Unlockable.start_cost:type_name -> hiro.UnlockableCost 107, // 135: hiro.Unlockable.cost:type_name -> hiro.UnlockableCost - 33, // 136: hiro.Unlockable.reward:type_name -> hiro.Reward - 44, // 137: hiro.Unlockable.available_rewards:type_name -> hiro.AvailableRewards + 24, // 136: hiro.Unlockable.reward:type_name -> hiro.Reward + 35, // 137: hiro.Unlockable.available_rewards:type_name -> hiro.AvailableRewards 181, // 138: hiro.Unlockable.additional_properties:type_name -> hiro.Unlockable.AdditionalPropertiesEntry 182, // 139: hiro.UnlockableSlotCost.items:type_name -> hiro.UnlockableSlotCost.ItemsEntry 183, // 140: hiro.UnlockableSlotCost.currencies:type_name -> hiro.UnlockableSlotCost.CurrenciesEntry @@ -11511,15 +11518,15 @@ var file_hiro_proto_depIdxs = []int32{ 108, // 142: hiro.UnlockablesList.overflow:type_name -> hiro.Unlockable 109, // 143: hiro.UnlockablesList.slot_cost:type_name -> hiro.UnlockableSlotCost 110, // 144: hiro.UnlockablesReward.unlockables:type_name -> hiro.UnlockablesList - 33, // 145: hiro.UnlockablesReward.reward:type_name -> hiro.Reward - 44, // 146: hiro.UnlockablesReward.available_rewards:type_name -> hiro.AvailableRewards - 33, // 147: hiro.SubAchievement.reward:type_name -> hiro.Reward - 44, // 148: hiro.SubAchievement.available_rewards:type_name -> hiro.AvailableRewards + 24, // 145: hiro.UnlockablesReward.reward:type_name -> hiro.Reward + 35, // 146: hiro.UnlockablesReward.available_rewards:type_name -> hiro.AvailableRewards + 24, // 147: hiro.SubAchievement.reward:type_name -> hiro.Reward + 35, // 148: hiro.SubAchievement.available_rewards:type_name -> hiro.AvailableRewards 184, // 149: hiro.SubAchievement.additional_properties:type_name -> hiro.SubAchievement.AdditionalPropertiesEntry - 44, // 150: hiro.Achievement.available_rewards:type_name -> hiro.AvailableRewards - 33, // 151: hiro.Achievement.reward:type_name -> hiro.Reward - 44, // 152: hiro.Achievement.available_total_reward:type_name -> hiro.AvailableRewards - 33, // 153: hiro.Achievement.total_reward:type_name -> hiro.Reward + 35, // 150: hiro.Achievement.available_rewards:type_name -> hiro.AvailableRewards + 24, // 151: hiro.Achievement.reward:type_name -> hiro.Reward + 35, // 152: hiro.Achievement.available_total_reward:type_name -> hiro.AvailableRewards + 24, // 153: hiro.Achievement.total_reward:type_name -> hiro.Reward 185, // 154: hiro.Achievement.sub_achievements:type_name -> hiro.Achievement.SubAchievementsEntry 186, // 155: hiro.Achievement.additional_properties:type_name -> hiro.Achievement.AdditionalPropertiesEntry 187, // 156: hiro.AchievementList.achievements:type_name -> hiro.AchievementList.AchievementsEntry @@ -11527,24 +11534,24 @@ var file_hiro_proto_depIdxs = []int32{ 189, // 158: hiro.AchievementsUpdateAck.achievements:type_name -> hiro.AchievementsUpdateAck.AchievementsEntry 190, // 159: hiro.AchievementsUpdateAck.repeat_achievements:type_name -> hiro.AchievementsUpdateAck.RepeatAchievementsEntry 191, // 160: hiro.AchievementsUpdateRequest.achievements:type_name -> hiro.AchievementsUpdateRequest.AchievementsEntry - 7, // 161: hiro.Incentive.ClaimsEntry.value:type_name -> hiro.IncentiveClaim - 19, // 162: hiro.ProgressionList.ProgressionsEntry.value:type_name -> hiro.Progression - 20, // 163: hiro.ProgressionList.DeltasEntry.value:type_name -> hiro.ProgressionDelta - 19, // 164: hiro.ProgressionGetRequest.ProgressionsEntry.value:type_name -> hiro.Progression - 27, // 165: hiro.StatList.PublicEntry.value:type_name -> hiro.Stat - 27, // 166: hiro.StatList.PrivateEntry.value:type_name -> hiro.Stat - 37, // 167: hiro.AvailableRewardsContents.ItemsEntry.value:type_name -> hiro.AvailableRewardsItem - 39, // 168: hiro.AvailableRewardsContents.CurrenciesEntry.value:type_name -> hiro.AvailableRewardsCurrency - 40, // 169: hiro.AvailableRewardsContents.EnergiesEntry.value:type_name -> hiro.AvailableRewardsEnergy + 10, // 161: hiro.ProgressionList.ProgressionsEntry.value:type_name -> hiro.Progression + 11, // 162: hiro.ProgressionList.DeltasEntry.value:type_name -> hiro.ProgressionDelta + 10, // 163: hiro.ProgressionGetRequest.ProgressionsEntry.value:type_name -> hiro.Progression + 18, // 164: hiro.StatList.PublicEntry.value:type_name -> hiro.Stat + 18, // 165: hiro.StatList.PrivateEntry.value:type_name -> hiro.Stat + 28, // 166: hiro.AvailableRewardsContents.ItemsEntry.value:type_name -> hiro.AvailableRewardsItem + 30, // 167: hiro.AvailableRewardsContents.CurrenciesEntry.value:type_name -> hiro.AvailableRewardsCurrency + 31, // 168: hiro.AvailableRewardsContents.EnergiesEntry.value:type_name -> hiro.AvailableRewardsEnergy + 36, // 169: hiro.Incentive.ClaimsEntry.value:type_name -> hiro.IncentiveClaim 51, // 170: hiro.EventLeaderboard.RewardTiersEntry.value:type_name -> hiro.EventLeaderboardRewardTiers 52, // 171: hiro.EventLeaderboard.ChangeZonesEntry.value:type_name -> hiro.EventLeaderboardChangeZone - 34, // 172: hiro.EconomyDonationClaimRewards.ClaimedRewardsEntry.value:type_name -> hiro.RewardList + 25, // 172: hiro.EconomyDonationClaimRewards.ClaimedRewardsEntry.value:type_name -> hiro.RewardList 57, // 173: hiro.EconomyDonationsByUserList.UserDonationsEntry.value:type_name -> hiro.EconomyDonationsList 55, // 174: hiro.EconomyList.DonationsEntry.value:type_name -> hiro.EconomyDonation 71, // 175: hiro.InventoryUpdateItemsRequest.ItemUpdatesEntry.value:type_name -> hiro.InventoryUpdateItemProperties 68, // 176: hiro.Inventory.ItemsEntry.value:type_name -> hiro.InventoryItem - 34, // 177: hiro.InventoryConsumeRewards.RewardsEntry.value:type_name -> hiro.RewardList - 34, // 178: hiro.InventoryConsumeRewards.InstanceRewardsEntry.value:type_name -> hiro.RewardList + 25, // 177: hiro.InventoryConsumeRewards.RewardsEntry.value:type_name -> hiro.RewardList + 25, // 178: hiro.InventoryConsumeRewards.InstanceRewardsEntry.value:type_name -> hiro.RewardList 68, // 179: hiro.InventoryList.ItemsEntry.value:type_name -> hiro.InventoryItem 88, // 180: hiro.EnergyList.EnergiesEntry.value:type_name -> hiro.Energy 94, // 181: hiro.TutorialList.TutorialsEntry.value:type_name -> hiro.Tutorial @@ -11569,7 +11576,7 @@ func file_hiro_proto_init() { } if !protoimpl.UnsafeEnabled { file_hiro_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IncentiveClaim); i { + switch v := v.(*ProgressionCost); i { case 0: return &v.state case 1: @@ -11581,7 +11588,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Incentive); i { + switch v := v.(*ProgressionPreconditions); i { case 0: return &v.state case 1: @@ -11593,7 +11600,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IncentiveList); i { + switch v := v.(*ProgressionPreconditionsBlock); i { case 0: return &v.state case 1: @@ -11605,7 +11612,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IncentiveInfo); i { + switch v := v.(*Progression); i { case 0: return &v.state case 1: @@ -11617,7 +11624,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IncentiveSenderCreateRequest); i { + switch v := v.(*ProgressionDelta); i { case 0: return &v.state case 1: @@ -11629,7 +11636,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IncentiveSenderDeleteRequest); i { + switch v := v.(*ProgressionList); i { case 0: return &v.state case 1: @@ -11641,7 +11648,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IncentiveSenderClaimRequest); i { + switch v := v.(*ProgressionGetRequest); i { case 0: return &v.state case 1: @@ -11653,7 +11660,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IncentiveRecipientGetRequest); i { + switch v := v.(*ProgressionPurchaseRequest); i { case 0: return &v.state case 1: @@ -11665,7 +11672,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IncentiveRecipientClaimRequest); i { + switch v := v.(*ProgressionUpdateRequest); i { case 0: return &v.state case 1: @@ -11677,7 +11684,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProgressionCost); i { + switch v := v.(*StatUpdate); i { case 0: return &v.state case 1: @@ -11689,7 +11696,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProgressionPreconditions); i { + switch v := v.(*StatUpdateRequest); i { case 0: return &v.state case 1: @@ -11701,7 +11708,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProgressionPreconditionsBlock); i { + switch v := v.(*Stat); i { case 0: return &v.state case 1: @@ -11713,7 +11720,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Progression); i { + switch v := v.(*StatList); i { case 0: return &v.state case 1: @@ -11725,7 +11732,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProgressionDelta); i { + switch v := v.(*ChannelMessageAck); i { case 0: return &v.state case 1: @@ -11737,7 +11744,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProgressionList); i { + switch v := v.(*DevicePrefsRequest); i { case 0: return &v.state case 1: @@ -11749,7 +11756,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProgressionGetRequest); i { + switch v := v.(*RewardEnergyModifier); i { case 0: return &v.state case 1: @@ -11761,7 +11768,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProgressionPurchaseRequest); i { + switch v := v.(*RewardModifier); i { case 0: return &v.state case 1: @@ -11773,7 +11780,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProgressionUpdateRequest); i { + switch v := v.(*Reward); i { case 0: return &v.state case 1: @@ -11785,7 +11792,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatUpdate); i { + switch v := v.(*RewardList); i { case 0: return &v.state case 1: @@ -11797,7 +11804,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatUpdateRequest); i { + switch v := v.(*RewardRangeInt32); i { case 0: return &v.state case 1: @@ -11809,7 +11816,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Stat); i { + switch v := v.(*RewardRangeInt64); i { case 0: return &v.state case 1: @@ -11821,7 +11828,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatList); i { + switch v := v.(*AvailableRewardsItem); i { case 0: return &v.state case 1: @@ -11833,7 +11840,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChannelMessageAck); i { + switch v := v.(*AvailableRewardsItemSet); i { case 0: return &v.state case 1: @@ -11845,7 +11852,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DevicePrefsRequest); i { + switch v := v.(*AvailableRewardsCurrency); i { case 0: return &v.state case 1: @@ -11857,7 +11864,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RewardEnergyModifier); i { + switch v := v.(*AvailableRewardsEnergy); i { case 0: return &v.state case 1: @@ -11869,7 +11876,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RewardModifier); i { + switch v := v.(*AvailableRewardsEnergyModifier); i { case 0: return &v.state case 1: @@ -11881,7 +11888,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Reward); i { + switch v := v.(*AvailableRewardsRewardModifier); i { case 0: return &v.state case 1: @@ -11893,7 +11900,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RewardList); i { + switch v := v.(*AvailableRewardsContents); i { case 0: return &v.state case 1: @@ -11905,7 +11912,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RewardRangeInt32); i { + switch v := v.(*AvailableRewards); i { case 0: return &v.state case 1: @@ -11917,7 +11924,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RewardRangeInt64); i { + switch v := v.(*IncentiveClaim); i { case 0: return &v.state case 1: @@ -11929,7 +11936,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AvailableRewardsItem); i { + switch v := v.(*Incentive); i { case 0: return &v.state case 1: @@ -11941,7 +11948,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AvailableRewardsItemSet); i { + switch v := v.(*IncentiveList); i { case 0: return &v.state case 1: @@ -11953,7 +11960,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AvailableRewardsCurrency); i { + switch v := v.(*IncentiveInfo); i { case 0: return &v.state case 1: @@ -11965,7 +11972,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AvailableRewardsEnergy); i { + switch v := v.(*IncentiveSenderCreateRequest); i { case 0: return &v.state case 1: @@ -11977,7 +11984,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AvailableRewardsEnergyModifier); i { + switch v := v.(*IncentiveSenderDeleteRequest); i { case 0: return &v.state case 1: @@ -11989,7 +11996,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AvailableRewardsRewardModifier); i { + switch v := v.(*IncentiveSenderClaimRequest); i { case 0: return &v.state case 1: @@ -12001,7 +12008,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AvailableRewardsContents); i { + switch v := v.(*IncentiveRecipientGetRequest); i { case 0: return &v.state case 1: @@ -12013,7 +12020,7 @@ func file_hiro_proto_init() { } } file_hiro_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AvailableRewards); i { + switch v := v.(*IncentiveRecipientClaimRequest); i { case 0: return &v.state case 1: diff --git a/hiro.proto b/hiro.proto index 2851b22..9ea6aa2 100644 --- a/hiro.proto +++ b/hiro.proto @@ -156,6 +156,8 @@ enum RpcId { RPC_ID_ECONOMY_PLACEMENT_SUCCESS = 1001; // Webhook RPC to handle Rewarded Video Ad placement failure callbacks. RPC_ID_ECONOMY_PLACEMENT_FAIL = 1002; + // RPC to upload Hiro system configurations for the storage personalizer. + RPC_ID_STORAGE_PERSONALIZER_UPLOAD = 1003; } // The cost(s) associated with permanently unlocking a progression. diff --git a/personalizer_storage.go b/personalizer_storage.go index ebb15ca..84ae585 100644 --- a/personalizer_storage.go +++ b/personalizer_storage.go @@ -16,6 +16,7 @@ package hiro import ( "context" + "database/sql" "encoding/json" "strings" "sync" @@ -26,6 +27,18 @@ import ( ) const StoragePersonalizerCollectionDefault = "hiro_datadefinitions" +const storagePersonalizerKeyAchievements = "achievements" +const storagePersonalizerKeyEconomy = "economy" +const storagePersonalizerKeyEnergy = "energy" +const storagePersonalizerKeyEventLeaderboards = "event_leaderboards" +const storagePersonalizerKeyIncentives = "incentives" +const storagePersonalizerKeyLeaderboards = "leaderboards" +const storagePersonalizerKeyProgression = "progression" +const storagePersonalizerKeyStats = "stats" +const storagePersonalizerKeyTeams = "teams" +const storagePersonalizerKeyTutorials = "tutorials" +const storagePersonalizerKeyUnlockables = "unlockables" +const storagePersonalizerKeyBase = "base" var _ Personalizer = (*StoragePersonalizer)(nil) @@ -43,7 +56,22 @@ type StoragePersonalizer struct { logger runtime.Logger } -func NewStoragePersonalizerDefault() *StoragePersonalizer { +type storagePersonalizerUploadRequest struct { + Achievements *AchievementsConfig `json:"achievements"` + Economy *EconomyConfig `json:"economy"` + Energy *EnergyConfig `json:"energy"` + EventLeaderboard *EventLeaderboardsConfig `json:"event_leaderboard"` + Incentives *IncentivesConfig `json:"incentives"` + Leaderboards *LeaderboardConfig `json:"leaderboards"` + Progression *ProgressionConfig `json:"progression"` + Stats *StatsConfig `json:"stats"` + Teams *TeamsConfig `json:"teams"` + Tutorials *TutorialsConfig `json:"tutorials"` + Unlockables *UnlockablesConfig `json:"unlockables"` + Base *BaseSystemConfig `json:"base"` +} + +func NewStoragePersonalizerDefault(initializer *runtime.Initializer) *StoragePersonalizer { return &StoragePersonalizer{ cache: make(map[SystemType]*StoragePersonalizerCachedStorageObject, 20), cacheExpiry: 10 * time.Minute, @@ -51,13 +79,166 @@ func NewStoragePersonalizerDefault() *StoragePersonalizer { } } -func NewStoragePersonalizer(logger runtime.Logger, cacheExpirySec int, collection string) *StoragePersonalizer { - return &StoragePersonalizer{ +func NewStoragePersonalizer(logger runtime.Logger, cacheExpirySec int, collection string, initializer runtime.Initializer, register bool) *StoragePersonalizer { + personalizer := &StoragePersonalizer{ cache: make(map[SystemType]*StoragePersonalizerCachedStorageObject, 20), cacheExpiry: time.Duration(cacheExpirySec) * time.Second, collection: collection, logger: logger, } + + if register { + err := initializer.RegisterRpc(RpcId_RPC_ID_STORAGE_PERSONALIZER_UPLOAD.String(), rpcStoragePersonalizerUpload(initializer, personalizer)) + if err != nil { + logger.WithField("error", err.Error()).Error("Error registering storage personalizer upload RPC.") + } + } + + return personalizer +} + +func rpcStoragePersonalizerUpload(initializer runtime.Initializer, p *StoragePersonalizer) func(context.Context, runtime.Logger, *sql.DB, runtime.NakamaModule, string) (string, error) { + return func(ctx context.Context, logger runtime.Logger, db *sql.DB, nk runtime.NakamaModule, payload string) (string, error) { + _, ok := ctx.Value(runtime.RUNTIME_CTX_USER_ID).(string) + if ok { + return "", ErrSessionUser + } + + req := &storagePersonalizerUploadRequest{} + err := json.Unmarshal([]byte(payload), req) + if err != nil { + return "", ErrPayloadDecode + } + + writes := []*runtime.StorageWrite{} + + if req.Achievements != nil { + write, err := p.newStorageWrite(req.Achievements, storagePersonalizerKeyAchievements) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating achievements storage object.") + return "", ErrInternal + } + + writes = append(writes, write) + } + + if req.Economy != nil { + write, err := p.newStorageWrite(req.Economy, storagePersonalizerKeyEconomy) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating economy storage object.") + return "", ErrInternal + } + + writes = append(writes, write) + } + + if req.Energy != nil { + write, err := p.newStorageWrite(req.Energy, storagePersonalizerKeyEnergy) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating energy storage object.") + return "", ErrInternal + } + + writes = append(writes, write) + } + + if req.EventLeaderboard != nil { + write, err := p.newStorageWrite(req.EventLeaderboard, storagePersonalizerKeyEventLeaderboards) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating event leaderboard storage object.") + return "", ErrInternal + } + + writes = append(writes, write) + } + + if req.Incentives != nil { + write, err := p.newStorageWrite(req.Incentives, storagePersonalizerKeyIncentives) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating incentives storage object.") + return "", ErrInternal + } + + writes = append(writes, write) + } + + if req.Leaderboards != nil { + write, err := p.newStorageWrite(req.Leaderboards, storagePersonalizerKeyLeaderboards) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating leaderboards storage object.") + return "", ErrInternal + } + + writes = append(writes, write) + } + + if req.Progression != nil { + write, err := p.newStorageWrite(req.Progression, storagePersonalizerKeyProgression) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating progression storage object.") + return "", ErrInternal + } + + writes = append(writes, write) + } + + if req.Stats != nil { + write, err := p.newStorageWrite(req.Stats, storagePersonalizerKeyStats) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating stats storage object.") + return "", ErrInternal + } + + writes = append(writes, write) + } + + if req.Teams != nil { + write, err := p.newStorageWrite(req.Teams, storagePersonalizerKeyTeams) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating teams storage object.") + return "", ErrInternal + } + + writes = append(writes, write) + } + + if req.Tutorials != nil { + write, err := p.newStorageWrite(req.Tutorials, storagePersonalizerKeyTutorials) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating tutorials storage object.") + return "", ErrInternal + } + + writes = append(writes, write) + } + + if req.Unlockables != nil { + write, err := p.newStorageWrite(req.Unlockables, storagePersonalizerKeyUnlockables) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating unlockables storage object.") + return "", ErrInternal + } + + writes = append(writes, write) + } + + if req.Base != nil { + write, err := p.newStorageWrite(req.Base, storagePersonalizerKeyBase) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating base storage object.") + return "", ErrInternal + } + + writes = append(writes, write) + } + + _, err = nk.StorageWrite(ctx, writes) + if err != nil { + return "", err + } + + return "{}", nil + } } func (p *StoragePersonalizer) GetValue(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, system System, userID string) (any, error) { @@ -72,29 +253,29 @@ func (p *StoragePersonalizer) GetValue(ctx context.Context, logger runtime.Logge var readOp *runtime.StorageRead switch systemType { case SystemTypeAchievements: - readOp = &runtime.StorageRead{Collection: p.collection, Key: "achievements"} + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyAchievements} case SystemTypeEconomy: - readOp = &runtime.StorageRead{Collection: p.collection, Key: "economy"} + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyEconomy} case SystemTypeEnergy: - readOp = &runtime.StorageRead{Collection: p.collection, Key: "energy"} + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyEnergy} case SystemTypeEventLeaderboards: - readOp = &runtime.StorageRead{Collection: p.collection, Key: "event_leaderboards"} + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyEventLeaderboards} case SystemTypeIncentives: - readOp = &runtime.StorageRead{Collection: p.collection, Key: "incentives"} + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyIncentives} case SystemTypeLeaderboards: - readOp = &runtime.StorageRead{Collection: p.collection, Key: "leaderboards"} + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyLeaderboards} case SystemTypeProgression: - readOp = &runtime.StorageRead{Collection: p.collection, Key: "progression"} + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyProgression} case SystemTypeStats: - readOp = &runtime.StorageRead{Collection: p.collection, Key: "stats"} + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyStats} case SystemTypeTeams: - readOp = &runtime.StorageRead{Collection: p.collection, Key: "teams"} + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyTeams} case SystemTypeTutorials: - readOp = &runtime.StorageRead{Collection: p.collection, Key: "tutorials"} + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyTutorials} case SystemTypeUnlockables: - readOp = &runtime.StorageRead{Collection: p.collection, Key: "unlockables"} + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyUnlockables} case SystemTypeBase: - readOp = &runtime.StorageRead{Collection: p.collection, Key: "base"} + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyBase} default: return nil, runtime.NewError("hiro system type unknown", 3) } @@ -132,3 +313,18 @@ func (p *StoragePersonalizer) GetValue(ctx context.Context, logger runtime.Logge return config, nil } + +func (p *StoragePersonalizer) newStorageWrite(config any, storageKey string) (*runtime.StorageWrite, error) { + json, err := json.Marshal(config) + if err != nil { + return nil, err + } + + return &runtime.StorageWrite{ + Collection: p.collection, + Key: storageKey, + Value: string(json), + PermissionRead: 0, + PermissionWrite: 0, + }, nil +}