From 062d5d439c4a759a0c240d0dae74983a38d2d92d Mon Sep 17 00:00:00 2001 From: slandymani Date: Tue, 6 Aug 2024 16:11:40 +0300 Subject: [PATCH] fix oracle activate; use codec to convert ValAddress, AccAddress --- proto/oracle/v1/tx.proto | 2 +- x/mint/keeper/keeper.go | 7 +- x/mint/keeper/msg_server.go | 2 +- x/mint/types/expected_keepers.go | 2 + x/oracle/keeper/collector.go | 4 +- x/oracle/keeper/grpc_query.go | 34 ++++--- x/oracle/keeper/keeper.go | 48 +++++---- x/oracle/keeper/msg_server.go | 41 +++++--- x/oracle/keeper/owasm.go | 2 +- x/oracle/keeper/report.go | 6 +- x/oracle/keeper/request.go | 2 +- x/oracle/keeper/reward.go | 2 +- x/oracle/keeper/validator_status.go | 2 +- x/oracle/types/expected_keepers.go | 3 + x/oracle/types/tx.pb.go | 150 ++++++++++++++-------------- 15 files changed, 165 insertions(+), 142 deletions(-) diff --git a/proto/oracle/v1/tx.proto b/proto/oracle/v1/tx.proto index 14dab9c2..9624d4fc 100644 --- a/proto/oracle/v1/tx.proto +++ b/proto/oracle/v1/tx.proto @@ -221,7 +221,7 @@ message MsgActivate { option (gogoproto.equal) = true; // Validator is the validator address who sign this message and request to be // activated. - string validator = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; } // MsgActivateResponse is response data for MsgActivate message diff --git a/x/mint/keeper/keeper.go b/x/mint/keeper/keeper.go index b9305955..536a94f0 100644 --- a/x/mint/keeper/keeper.go +++ b/x/mint/keeper/keeper.go @@ -5,6 +5,7 @@ import ( "fmt" "cosmossdk.io/collections" + addresscodec "cosmossdk.io/core/address" storetypes "cosmossdk.io/core/store" "cosmossdk.io/errors" "cosmossdk.io/log" @@ -22,6 +23,7 @@ type Keeper struct { stakingKeeper minttypes.StakingKeeper authKeeper minttypes.AccountKeeper bankKeeper minttypes.BankKeeper + addressCodec addresscodec.Codec feeCollectorName string // the address capable of executing a MsgUpdateParams message. Typically, this @@ -57,6 +59,7 @@ func NewKeeper( bankKeeper: bk, authKeeper: ak, feeCollectorName: feeCollectorName, + addressCodec: ak.AddressCodec(), authority: authority, Params: collections.NewItem(sb, minttypes.ParamsKey, "params", codec.CollValue[minttypes.Params](cdc)), Minter: collections.NewItem(sb, minttypes.MinterKey, "minter", codec.CollValue[minttypes.Minter](cdc)), @@ -82,12 +85,12 @@ func (k Keeper) Logger(ctx context.Context) log.Logger { return sdkCtx.Logger().With("module", "x/"+minttypes.ModuleName) } -// get the minter +// GetMinter returns the minter func (k Keeper) GetMinter(ctx context.Context) (minttypes.Minter, error) { return k.Minter.Get(ctx) } -// set the minter +// SetMinter sets minter to the store func (k Keeper) SetMinter(ctx context.Context, minter minttypes.Minter) error { return k.Minter.Set(ctx, minter) } diff --git a/x/mint/keeper/msg_server.go b/x/mint/keeper/msg_server.go index b20ae310..c3fc168f 100644 --- a/x/mint/keeper/msg_server.go +++ b/x/mint/keeper/msg_server.go @@ -48,7 +48,7 @@ func (ms msgServer) WithdrawCoinsToAccFromTreasury( return nil, errors.Wrapf(minttypes.ErrExceedsWithdrawalLimitPerTime, "amount: %s", msg.Amount.String()) } - receiver, err := sdk.AccAddressFromBech32(msg.Receiver) + receiver, err := ms.addressCodec.StringToBytes(msg.Receiver) if err != nil { return nil, errors.Wrapf(err, "failed to parse receiver address %s", msg.Receiver) } diff --git a/x/mint/types/expected_keepers.go b/x/mint/types/expected_keepers.go index 5f323120..3a332710 100644 --- a/x/mint/types/expected_keepers.go +++ b/x/mint/types/expected_keepers.go @@ -3,6 +3,7 @@ package types import ( "context" + "cosmossdk.io/core/address" "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -15,6 +16,7 @@ type StakingKeeper interface { // AccountKeeper defines the contract required for account APIs. type AccountKeeper interface { + AddressCodec() address.Codec GetModuleAddress(name string) sdk.AccAddress // TODO remove with genesis 2-phases refactor https://github.com/cosmos/cosmos-sdk/issues/2862 diff --git a/x/oracle/keeper/collector.go b/x/oracle/keeper/collector.go index 19fc7c77..3314dd27 100644 --- a/x/oracle/keeper/collector.go +++ b/x/oracle/keeper/collector.go @@ -40,7 +40,7 @@ func (k Keeper) CollectReward( accumulatedAmount := accumulatedDataProvidersRewards.AccumulatedAmount currentRewardPerByte := accumulatedDataProvidersRewards.CurrentRewardPerByte - var rewPerByteInFeeDenom sdk.Coins + rewPerByteInFeeDenom := sdk.Coins{} for _, rawReq := range rawRequests { rawRep, ok := rawReportsMap[rawReq.GetExternalID()] @@ -50,7 +50,7 @@ func (k Keeper) CollectReward( } ds := k.MustGetDataSource(ctx, rawReq.GetDataSourceID()) - dsOwnerAddr, err := sdk.AccAddressFromBech32(ds.Owner) + dsOwnerAddr, err := k.addressCodec.StringToBytes(ds.Owner) if err != nil { return nil, errors.Wrapf(err, "parsing data source owner address: %s", dsOwnerAddr) } diff --git a/x/oracle/keeper/grpc_query.go b/x/oracle/keeper/grpc_query.go index deb44e95..6f056384 100644 --- a/x/oracle/keeper/grpc_query.go +++ b/x/oracle/keeper/grpc_query.go @@ -204,13 +204,14 @@ func (k Querier) PendingRequests( return nil, status.Error(codes.InvalidArgument, "empty request") } ctx := sdk.UnwrapSDKContext(c) - valAddress, err := sdk.ValAddressFromBech32(req.ValidatorAddress) + val, err := k.validatorAddressCodec.StringToBytes(req.ValidatorAddress) if err != nil { return nil, status.Error( codes.InvalidArgument, fmt.Sprintf("unable to parse given validator address: %v", err), ) } + valAddress := sdk.ValAddress(val) lastExpired, err := k.GetRequestLastExpired(ctx) if err != nil { @@ -239,14 +240,14 @@ func (k Querier) PendingRequests( // If the validator isn't in requested validators set, then skip it. isInValidatorSet := false for _, v := range oracleReq.RequestedValidators { - val, err := sdk.ValAddressFromBech32(v) + val, err := k.validatorAddressCodec.StringToBytes(v) if err != nil { return nil, status.Error( codes.Internal, fmt.Sprintf("unable to parse validator address in requested validators %v: %v", v, err), ) } - if valAddress.Equals(val) { + if valAddress.Equals(sdk.ValAddress(val)) { isInValidatorSet = true break } @@ -258,14 +259,14 @@ func (k Querier) PendingRequests( // If the validator has reported, then skip it. reported := false for _, r := range reports { - val, err := sdk.ValAddressFromBech32(r.Validator) + val, err := k.validatorAddressCodec.StringToBytes(r.Validator) if err != nil { return nil, status.Error( codes.Internal, fmt.Sprintf("unable to parse validator address in requested validators %v: %v", r.Validator, err), ) } - if valAddress.Equals(val) { + if valAddress.Equals(sdk.ValAddress(val)) { reported = true break } @@ -290,7 +291,7 @@ func (k Querier) Validator( return nil, status.Error(codes.InvalidArgument, "empty request") } ctx := sdk.UnwrapSDKContext(c) - val, err := sdk.ValAddressFromBech32(req.ValidatorAddress) + val, err := k.validatorAddressCodec.StringToBytes(req.ValidatorAddress) if err != nil { return nil, err } @@ -307,11 +308,11 @@ func (k Querier) IsReporter( req *types.QueryIsReporterRequest, ) (*types.QueryIsReporterResponse, error) { ctx := sdk.UnwrapSDKContext(c) - val, err := sdk.ValAddressFromBech32(req.ValidatorAddress) + val, err := k.validatorAddressCodec.StringToBytes(req.ValidatorAddress) if err != nil { return nil, err } - rep, err := sdk.AccAddressFromBech32(req.ReporterAddress) + rep, err := k.validatorAddressCodec.StringToBytes(req.ReporterAddress) if err != nil { return nil, err } @@ -327,7 +328,7 @@ func (k Querier) Reporters( if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } - val, err := sdk.ValAddressFromBech32(req.ValidatorAddress) + val, err := k.validatorAddressCodec.StringToBytes(req.ValidatorAddress) if err != nil { return nil, err } @@ -363,7 +364,7 @@ func (k Querier) ActiveValidators( result := types.QueryActiveValidatorsResponse{} err := k.stakingKeeper.IterateBondedValidatorsByPower(ctx, func(idx int64, val stakingtypes.ValidatorI) (stop bool) { - valAddr, err := sdk.ValAddressFromBech32(val.GetOperator()) + valAddr, err := k.validatorAddressCodec.StringToBytes(val.GetOperator()) if err != nil { return false } @@ -443,13 +444,14 @@ func (k Querier) RequestVerification( } // Provided validator's address should be valid - validator, err := sdk.ValAddressFromBech32(req.Validator) + val, err := k.validatorAddressCodec.StringToBytes(req.Validator) if err != nil { return nil, status.Error( codes.InvalidArgument, fmt.Sprintf("unable to parse validator address: %s", err.Error()), ) } + validator := sdk.ValAddress(val) // Provided signature should be valid, which means this query request should be signed by the provided reporter pk, err := hex.DecodeString(req.Reporter) @@ -503,8 +505,8 @@ func (k Querier) RequestVerification( // Provided validator should be assigned to response to the request isValidatorAssigned := false for _, requestedValidator := range request.RequestedValidators { - v, _ := sdk.ValAddressFromBech32(requestedValidator) - if validator.Equals(v) { + v, _ := k.validatorAddressCodec.StringToBytes(requestedValidator) + if validator.Equals(sdk.ValAddress(v)) { isValidatorAssigned = true break } @@ -553,8 +555,8 @@ func (k Querier) RequestVerification( isValidatorReported := false for _, report := range reports { - reportVal, _ := sdk.ValAddressFromBech32(report.Validator) - if reportVal.Equals(validator) { + reportVal, _ := k.validatorAddressCodec.StringToBytes(report.Validator) + if sdk.ValAddress(reportVal).Equals(validator) { isValidatorReported = true break } @@ -608,7 +610,7 @@ func (k Querier) DataProviderAccumulatedReward(c context.Context, req *types.Que return nil, status.Error(codes.InvalidArgument, "empty request") } ctx := sdk.UnwrapSDKContext(c) - addr, err := sdk.AccAddressFromBech32(req.DataProviderAddress) + addr, err := k.addressCodec.StringToBytes(req.DataProviderAddress) if err != nil { return nil, err } diff --git a/x/oracle/keeper/keeper.go b/x/oracle/keeper/keeper.go index 78c42992..169e9245 100644 --- a/x/oracle/keeper/keeper.go +++ b/x/oracle/keeper/keeper.go @@ -6,6 +6,7 @@ import ( "time" "cosmossdk.io/collections" + addresscodec "cosmossdk.io/core/address" corestoretypes "cosmossdk.io/core/store" "cosmossdk.io/log" owasm "github.com/ODIN-PROTOCOL/wasmvm/v2" @@ -26,14 +27,16 @@ type Keeper struct { feeCollectorName string owasmVM *owasm.Vm - AuthKeeper types.AccountKeeper - BankKeeper types.BankKeeper - stakingKeeper types.StakingKeeper - distrKeeper types.DistrKeeper - authzKeeper types.AuthzKeeper - channelKeeper types.ChannelKeeper - portKeeper types.PortKeeper - scopedKeeper capabilitykeeper.ScopedKeeper + AuthKeeper types.AccountKeeper + BankKeeper types.BankKeeper + stakingKeeper types.StakingKeeper + distrKeeper types.DistrKeeper + authzKeeper types.AuthzKeeper + channelKeeper types.ChannelKeeper + portKeeper types.PortKeeper + scopedKeeper capabilitykeeper.ScopedKeeper + validatorAddressCodec addresscodec.Codec + addressCodec addresscodec.Codec // the address capable of executing a MsgUpdateParams message. Typically, this // should be the x/gov module account. @@ -81,20 +84,21 @@ func NewKeeper( sb := collections.NewSchemaBuilder(storeService) k := Keeper{ - cdc: cdc, - fileCache: filecache.New(fileDir), - feeCollectorName: feeCollectorName, - owasmVM: owasmVM, - AuthKeeper: authKeeper, - BankKeeper: bankKeeper, - stakingKeeper: stakingKeeper, - distrKeeper: distrKeeper, - authzKeeper: authzKeeper, - channelKeeper: channelKeeper, - portKeeper: portKeeper, - scopedKeeper: scopeKeeper, - authority: authority, - storeService: storeService, + cdc: cdc, + fileCache: filecache.New(fileDir), + feeCollectorName: feeCollectorName, + owasmVM: owasmVM, + AuthKeeper: authKeeper, + BankKeeper: bankKeeper, + stakingKeeper: stakingKeeper, + distrKeeper: distrKeeper, + authzKeeper: authzKeeper, + channelKeeper: channelKeeper, + portKeeper: portKeeper, + scopedKeeper: scopeKeeper, + validatorAddressCodec: stakingKeeper.ValidatorAddressCodec(), + authority: authority, + storeService: storeService, Params: collections.NewItem(sb, types.ParamsKeyPrefix, "params", codec.CollValue[types.Params](cdc)), DataSources: collections.NewMap(sb, types.DataSourceStoreKeyPrefix, "data_sources", collections.Uint64Key, codec.CollValue[types.DataSource](cdc)), diff --git a/x/oracle/keeper/msg_server.go b/x/oracle/keeper/msg_server.go index cce445e6..c4a4612d 100644 --- a/x/oracle/keeper/msg_server.go +++ b/x/oracle/keeper/msg_server.go @@ -1,6 +1,7 @@ package keeper import ( + "bytes" "context" "fmt" @@ -30,7 +31,7 @@ func (k msgServer) RequestData( ) (*types.MsgRequestDataResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - payer, err := sdk.AccAddressFromBech32(msg.Sender) + payer, err := k.addressCodec.StringToBytes(msg.Sender) if err != nil { return nil, err } @@ -57,7 +58,7 @@ func (k msgServer) ReportData(goCtx context.Context, msg *types.MsgReportData) ( } } - validator, err := sdk.ValAddressFromBech32(msg.Validator) + validator, err := k.validatorAddressCodec.StringToBytes(msg.Validator) if err != nil { return nil, err } @@ -108,7 +109,7 @@ func (k msgServer) ReportData(goCtx context.Context, msg *types.MsgReportData) ( ctx.EventManager().EmitEvent(sdk.NewEvent( types.EventTypeReport, sdk.NewAttribute(types.AttributeKeyID, fmt.Sprintf("%d", msg.RequestID)), - sdk.NewAttribute(types.AttributeKeyValidator, validator.String()), + sdk.NewAttribute(types.AttributeKeyValidator, sdk.ValAddress(validator).String()), )) return &types.MsgReportDataResponse{}, nil } @@ -128,12 +129,12 @@ func (k msgServer) CreateDataSource( } } - owner, err := sdk.AccAddressFromBech32(msg.Owner) + owner, err := k.addressCodec.StringToBytes(msg.Owner) if err != nil { return nil, err } - treasury, err := sdk.AccAddressFromBech32(msg.Treasury) + treasury, err := k.addressCodec.StringToBytes(msg.Treasury) if err != nil { return nil, err } @@ -164,22 +165,22 @@ func (k msgServer) EditDataSource( return nil, err } - owner, err := sdk.AccAddressFromBech32(dataSource.Owner) + owner, err := k.addressCodec.StringToBytes(dataSource.Owner) if err != nil { return nil, err } - sender, err := sdk.AccAddressFromBech32(msg.Sender) + sender, err := k.addressCodec.StringToBytes(msg.Sender) if err != nil { return nil, err } // sender must be the owner of data source - if !owner.Equals(sender) { + if !bytes.Equal(owner, sender) { return nil, types.ErrEditorNotAuthorized } - treasury, err := sdk.AccAddressFromBech32(msg.Treasury) + treasury, err := k.addressCodec.StringToBytes(msg.Treasury) if err != nil { return nil, err } @@ -192,7 +193,7 @@ func (k msgServer) EditDataSource( } } - newOwner, err := sdk.AccAddressFromBech32(msg.Owner) + newOwner, err := k.addressCodec.StringToBytes(msg.Owner) if err != nil { return nil, err } @@ -225,7 +226,7 @@ func (k msgServer) CreateOracleScript( } } - owner, err := sdk.AccAddressFromBech32(msg.Owner) + owner, err := k.addressCodec.StringToBytes(msg.Owner) if err != nil { return nil, err } @@ -261,18 +262,18 @@ func (k msgServer) EditOracleScript( return nil, err } - owner, err := sdk.AccAddressFromBech32(oracleScript.Owner) + owner, err := k.addressCodec.StringToBytes(oracleScript.Owner) if err != nil { return nil, err } - sender, err := sdk.AccAddressFromBech32(msg.Sender) + sender, err := k.addressCodec.StringToBytes(msg.Sender) if err != nil { return nil, err } // sender must be the owner of oracle script - if !owner.Equals(sender) { + if !bytes.Equal(owner, sender) { return nil, types.ErrEditorNotAuthorized } @@ -289,7 +290,7 @@ func (k msgServer) EditOracleScript( return nil, err } - newOwner, err := sdk.AccAddressFromBech32(msg.Owner) + newOwner, err := k.addressCodec.StringToBytes(msg.Owner) if err != nil { return nil, err } @@ -309,14 +310,22 @@ func (k msgServer) EditOracleScript( func (k msgServer) Activate(goCtx context.Context, msg *types.MsgActivate) (*types.MsgActivateResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - valAddr, err := sdk.ValAddressFromBech32(msg.Validator) + k.Logger(ctx).Info("here1") + fmt.Println("here1") + fmt.Println(msg.Validator) + k.Logger(ctx).Info(msg.Validator) + valAddr, err := k.validatorAddressCodec.StringToBytes(msg.Validator) if err != nil { return nil, err } + fmt.Println("here2") + k.Logger(ctx).Info("here2") err = k.Keeper.Activate(ctx, valAddr) if err != nil { return nil, err } + fmt.Println("here3") + k.Logger(ctx).Info("here3") ctx.EventManager().EmitEvent(sdk.NewEvent( types.EventTypeActivate, sdk.NewAttribute(types.AttributeKeyValidator, msg.Validator), diff --git a/x/oracle/keeper/owasm.go b/x/oracle/keeper/owasm.go index 672afa60..b7eb6438 100644 --- a/x/oracle/keeper/owasm.go +++ b/x/oracle/keeper/owasm.go @@ -40,7 +40,7 @@ func (k Keeper) GetRandomValidators(ctx sdk.Context, size int, id uint64) ([]sdk valPowers := make([]uint64, 0) err := k.stakingKeeper.IterateBondedValidatorsByPower(ctx, func(idx int64, val stakingtypes.ValidatorI) (stop bool) { - valAddr, err := sdk.ValAddressFromBech32(val.GetOperator()) + valAddr, err := k.validatorAddressCodec.StringToBytes(val.GetOperator()) if err != nil { return false } diff --git a/x/oracle/keeper/report.go b/x/oracle/keeper/report.go index 9fcee695..f594d384 100644 --- a/x/oracle/keeper/report.go +++ b/x/oracle/keeper/report.go @@ -18,7 +18,7 @@ func (k Keeper) HasReport(ctx context.Context, rid types.RequestID, val sdk.ValA // SetReport saves the report to the storage without performing validation. func (k Keeper) SetReport(ctx context.Context, rid types.RequestID, rep types.Report) error { - val, _ := sdk.ValAddressFromBech32(rep.Validator) + val, _ := k.validatorAddressCodec.StringToBytes(rep.Validator) return k.Reports.Set(ctx, collections.Join(uint64(rid), []byte(val)), rep) } @@ -49,11 +49,11 @@ func (k Keeper) CheckValidReport( } found := false for _, reqVal := range req.RequestedValidators { - v, err := sdk.ValAddressFromBech32(reqVal) + v, err := k.validatorAddressCodec.StringToBytes(reqVal) if err != nil { return err } - if v.Equals(val) { + if sdk.ValAddress(v).Equals(val) { found = true break } diff --git a/x/oracle/keeper/request.go b/x/oracle/keeper/request.go index 169b3852..4f4e42d6 100644 --- a/x/oracle/keeper/request.go +++ b/x/oracle/keeper/request.go @@ -115,7 +115,7 @@ func (k Keeper) ProcessExpiredRequests(ctx context.Context) error { // Deactivate all validators that do not report to this request. for _, val := range req.RequestedValidators { - v, _ := sdk.ValAddressFromBech32(val) + v, _ := k.validatorAddressCodec.StringToBytes(val) hasReport, err := k.HasReport(ctx, currentReqID, v) if err != nil { diff --git a/x/oracle/keeper/reward.go b/x/oracle/keeper/reward.go index 67aaa13c..5f15f3c4 100644 --- a/x/oracle/keeper/reward.go +++ b/x/oracle/keeper/reward.go @@ -54,7 +54,7 @@ func (k Keeper) AllocateRewardsToDataProviders(ctx sdk.Context, rid oracletypes. for _, rawReq := range request.RawRequests { ds := k.MustGetDataSource(ctx, rawReq.GetDataSourceID()) - ownerAccAddr, err := sdk.AccAddressFromBech32(ds.Owner) + ownerAccAddr, err := k.addressCodec.StringToBytes(ds.Owner) if err != nil { return err } diff --git a/x/oracle/keeper/validator_status.go b/x/oracle/keeper/validator_status.go index 90d647be..1e3c2669 100644 --- a/x/oracle/keeper/validator_status.go +++ b/x/oracle/keeper/validator_status.go @@ -32,7 +32,7 @@ func (k Keeper) AllocateTokens(ctx sdk.Context, previousVotes []abci.VoteInfo) e return err } - valAddress, err := sdk.ValAddressFromBech32(val.GetOperator()) + valAddress, err := k.validatorAddressCodec.StringToBytes(val.GetOperator()) status, err := k.GetValidatorStatus(ctx, valAddress) if err != nil { return err diff --git a/x/oracle/types/expected_keepers.go b/x/oracle/types/expected_keepers.go index 9d65c2e5..830def2c 100644 --- a/x/oracle/types/expected_keepers.go +++ b/x/oracle/types/expected_keepers.go @@ -4,6 +4,7 @@ import ( "context" "time" + "cosmossdk.io/core/address" "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/authz" @@ -14,6 +15,7 @@ import ( // AccountKeeper defines the expected account keeper. type AccountKeeper interface { + AddressCodec() address.Codec GetAccount(ctx context.Context, addr sdk.AccAddress) sdk.AccountI GetModuleAccount(ctx context.Context, name string) sdk.ModuleAccountI @@ -32,6 +34,7 @@ type BankKeeper interface { // StakingKeeper defines the expected staking keeper. type StakingKeeper interface { + ValidatorAddressCodec() address.Codec ValidatorByConsAddr(context.Context, sdk.ConsAddress) (stakingtypes.ValidatorI, error) IterateBondedValidatorsByPower( ctx context.Context, diff --git a/x/oracle/types/tx.pb.go b/x/oracle/types/tx.pb.go index 17143055..f6dc86dd 100644 --- a/x/oracle/types/tx.pb.go +++ b/x/oracle/types/tx.pb.go @@ -1083,82 +1083,82 @@ func init() { proto.RegisterFile("oracle/v1/tx.proto", fileDescriptor_31571edce0 var fileDescriptor_31571edce0094a5d = []byte{ // 1230 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0xcd, 0x6e, 0xdb, 0x46, - 0x10, 0xb6, 0x2c, 0x59, 0x11, 0x57, 0xb2, 0x13, 0x33, 0xfe, 0xa1, 0xe8, 0x5a, 0x52, 0x04, 0xc3, - 0x50, 0x52, 0x48, 0x8c, 0xdd, 0xa2, 0x40, 0xdc, 0x43, 0x11, 0xc9, 0xfd, 0x31, 0x62, 0xd9, 0x01, - 0x9d, 0xf4, 0x10, 0xa0, 0x50, 0xd7, 0xe4, 0x9a, 0x26, 0x2c, 0x72, 0xd5, 0x5d, 0xca, 0x3f, 0xd7, + 0x10, 0xb6, 0x2c, 0x59, 0x11, 0x47, 0xb2, 0x1d, 0x33, 0xfe, 0xa1, 0xe8, 0x5a, 0x52, 0x04, 0xc3, + 0x50, 0x52, 0x48, 0x8a, 0xdd, 0xa2, 0x40, 0xdc, 0x43, 0x11, 0xc9, 0xfd, 0x31, 0x62, 0xd9, 0x01, + 0x9d, 0xf4, 0x10, 0xa0, 0x50, 0xd7, 0xe4, 0x9a, 0x26, 0x2c, 0x71, 0xd5, 0x5d, 0xca, 0x3f, 0xd7, 0x1e, 0x7b, 0x69, 0xfb, 0x06, 0x41, 0x8f, 0x3d, 0xe5, 0x90, 0x57, 0x28, 0x90, 0x63, 0x90, 0x5e, - 0x7a, 0x52, 0x0b, 0xf9, 0x90, 0x9e, 0xfa, 0x00, 0x3d, 0x15, 0xdc, 0x5d, 0x51, 0xa4, 0x2c, 0x59, - 0x71, 0x90, 0xe6, 0x62, 0x73, 0xe6, 0x9b, 0x19, 0x0e, 0xbf, 0x6f, 0x86, 0x5c, 0x01, 0x19, 0x13, - 0x68, 0x34, 0x91, 0x76, 0xbc, 0xa6, 0x79, 0xa7, 0x95, 0x16, 0xc1, 0x1e, 0x96, 0x25, 0xee, 0xab, - 0x1c, 0xaf, 0xa9, 0x73, 0x16, 0xb6, 0x30, 0xf3, 0x6a, 0xfe, 0x15, 0x0f, 0x50, 0x17, 0xfa, 0x49, - 0x22, 0x94, 0xfb, 0x73, 0x06, 0xa6, 0x0e, 0xa6, 0xda, 0x3e, 0xa4, 0x3e, 0xb8, 0x8f, 0x3c, 0xb8, - 0xa6, 0x19, 0xd8, 0x76, 0x05, 0x9e, 0xe5, 0x78, 0x83, 0x17, 0xe4, 0x86, 0x80, 0x16, 0x45, 0xaa, - 0x43, 0x2d, 0xbf, 0xac, 0x43, 0x2d, 0x01, 0xcc, 0x42, 0xc7, 0x76, 0xb1, 0xc6, 0xfe, 0x72, 0x57, - 0xf1, 0x3c, 0x0e, 0x66, 0xea, 0xd4, 0xd2, 0xd1, 0x77, 0x6d, 0x44, 0xbd, 0x4d, 0xe8, 0x41, 0x79, - 0x07, 0xdc, 0xe0, 0x9d, 0x34, 0xa8, 0x41, 0xec, 0x96, 0xd7, 0xb0, 0x4d, 0x25, 0x56, 0x88, 0x95, - 0x12, 0xd5, 0x95, 0x6e, 0x27, 0x3f, 0xb3, 0xcb, 0xb0, 0x3d, 0x06, 0x6d, 0x6d, 0xfe, 0x7b, 0xc1, - 0xa3, 0xcf, 0xe0, 0xb0, 0x6d, 0xca, 0x2a, 0x48, 0x19, 0xb0, 0xd9, 0x34, 0xa1, 0x07, 0x95, 0xc9, - 0x42, 0xac, 0x94, 0xd1, 0x03, 0x5b, 0x5e, 0x02, 0x12, 0xa4, 0x47, 0x0d, 0x03, 0xb7, 0x5d, 0x4f, - 0x89, 0xfb, 0x37, 0xd1, 0x53, 0x90, 0x1e, 0xd5, 0x7c, 0xdb, 0x07, 0x1d, 0xdb, 0x15, 0x60, 0x82, - 0x83, 0x8e, 0xed, 0x72, 0xf0, 0x36, 0x90, 0x8c, 0xa6, 0x8d, 0x5c, 0xd6, 0xde, 0x54, 0x21, 0x56, - 0x92, 0xaa, 0x99, 0x6e, 0x27, 0x9f, 0xaa, 0x31, 0xe7, 0xd6, 0xa6, 0x9e, 0xe2, 0xf0, 0x96, 0x29, - 0x1f, 0x02, 0xe9, 0x00, 0xa1, 0x46, 0xd3, 0x76, 0x6c, 0x4f, 0x49, 0x16, 0xe2, 0xa5, 0xf4, 0x7a, - 0xb6, 0x22, 0x18, 0xf3, 0xe9, 0xad, 0x08, 0x7a, 0x2b, 0x35, 0x6c, 0xbb, 0xd5, 0xbb, 0x2f, 0x3a, - 0xf9, 0x89, 0x5f, 0xff, 0xcc, 0x97, 0x2c, 0xdb, 0x3b, 0x6c, 0xef, 0x57, 0x0c, 0xec, 0x08, 0x7a, - 0xc5, 0xbf, 0x32, 0x35, 0x8f, 0x34, 0xef, 0xac, 0x85, 0x28, 0x4b, 0xa0, 0x7a, 0xea, 0x00, 0xa1, - 0x6d, 0xbf, 0xb8, 0x9c, 0x07, 0xe9, 0x16, 0x41, 0x2d, 0x48, 0x50, 0xc3, 0x82, 0x54, 0xb9, 0xc6, - 0x7a, 0x06, 0xc2, 0xf5, 0x25, 0xa4, 0x7e, 0x00, 0x3a, 0x45, 0x46, 0xdb, 0xe3, 0x01, 0x29, 0x1e, - 0x20, 0x5c, 0x7e, 0xc0, 0x5d, 0x90, 0xa4, 0xc8, 0x35, 0x11, 0x51, 0x24, 0xf6, 0x4c, 0xca, 0xab, - 0xe7, 0xe5, 0x39, 0xd1, 0xeb, 0x7d, 0xd3, 0x24, 0x88, 0xd2, 0x3d, 0x8f, 0xd8, 0xae, 0xa5, 0x8b, - 0xb8, 0x8d, 0xe2, 0xdf, 0x4f, 0xf3, 0xb1, 0xef, 0x5f, 0x3f, 0xbb, 0x23, 0x1c, 0x3f, 0xbc, 0x7e, - 0x76, 0x47, 0x48, 0xa0, 0x09, 0x59, 0x8b, 0x0a, 0x58, 0x88, 0x8a, 0xac, 0x23, 0xda, 0xc2, 0x2e, - 0x45, 0xc5, 0x7f, 0x62, 0x60, 0x9a, 0x41, 0x2d, 0x4c, 0xb8, 0xfc, 0xf7, 0x00, 0x20, 0x3c, 0xb0, - 0x2f, 0xbc, 0xda, 0xed, 0xe4, 0x25, 0x91, 0xce, 0x34, 0xef, 0x1b, 0xba, 0x24, 0xa2, 0xb7, 0x4c, - 0xf9, 0x53, 0x90, 0x26, 0xf0, 0xa4, 0x41, 0x58, 0x31, 0xaa, 0x4c, 0x32, 0xaa, 0xe7, 0x2a, 0xc1, - 0x0a, 0x54, 0x74, 0x78, 0xc2, 0xef, 0x54, 0x4d, 0xf8, 0x2c, 0xeb, 0x80, 0xf4, 0x1c, 0x54, 0xfe, - 0x0c, 0x48, 0xc7, 0xb0, 0x69, 0x9b, 0xd0, 0xc3, 0x84, 0x8d, 0x82, 0x54, 0xbd, 0xf5, 0xea, 0x79, - 0x79, 0x59, 0x3c, 0xfc, 0xd7, 0x3d, 0x2c, 0xca, 0x42, 0x3f, 0x67, 0x63, 0xa5, 0x47, 0x44, 0xdf, - 0xe7, 0x73, 0x31, 0x1d, 0x70, 0xe1, 0xdf, 0xa7, 0xb8, 0x08, 0xe6, 0x23, 0xcf, 0x1b, 0x30, 0xf1, - 0x63, 0x1c, 0xdc, 0xac, 0x53, 0xab, 0x46, 0x10, 0xf4, 0x90, 0x8f, 0xec, 0xe1, 0x36, 0x31, 0x90, - 0x2c, 0x83, 0x84, 0x0b, 0x1d, 0xc4, 0x98, 0x90, 0x74, 0x76, 0x2d, 0x17, 0x40, 0xda, 0x44, 0x7c, - 0x3b, 0x6c, 0xec, 0xb2, 0xa9, 0x96, 0xf4, 0xb0, 0x4b, 0xce, 0x01, 0xa1, 0x2a, 0xdc, 0x6f, 0x22, - 0xf6, 0x38, 0x19, 0x3d, 0xe4, 0x91, 0xbf, 0x01, 0xf1, 0x03, 0x84, 0x94, 0xc4, 0xbb, 0x9f, 0x46, - 0xbf, 0xae, 0xfc, 0x31, 0x48, 0x79, 0x04, 0x41, 0xda, 0x26, 0x67, 0x62, 0x39, 0x46, 0x0f, 0x52, - 0x10, 0x29, 0x57, 0xc0, 0x14, 0x3e, 0x71, 0x11, 0x51, 0x92, 0x63, 0x52, 0x78, 0x58, 0x68, 0x58, - 0xaf, 0xbd, 0xe1, 0xb0, 0x7e, 0x38, 0x64, 0x58, 0x17, 0x85, 0x40, 0x83, 0xcc, 0x17, 0x97, 0xc1, - 0xd2, 0x10, 0x41, 0x02, 0xc1, 0x7e, 0x8f, 0x83, 0xd9, 0x3a, 0xb5, 0x3e, 0x37, 0x6d, 0x2f, 0x24, - 0xd7, 0x17, 0x60, 0xc6, 0x7f, 0xb3, 0x34, 0x28, 0x33, 0xfb, 0x23, 0x5c, 0xe8, 0x76, 0xf2, 0x99, - 0x7e, 0x1c, 0x9b, 0xe2, 0x88, 0xad, 0x67, 0xcc, 0xbe, 0x65, 0x06, 0xb2, 0x4f, 0x8e, 0x96, 0x3d, - 0x3e, 0x4e, 0xf6, 0xc4, 0x28, 0xd9, 0xa7, 0xde, 0x83, 0xec, 0xc9, 0xab, 0xcb, 0x7e, 0xed, 0xaa, - 0xb2, 0xa7, 0xde, 0x50, 0xf6, 0xdb, 0x43, 0x64, 0x9f, 0x17, 0xb2, 0x47, 0xf5, 0x2b, 0x2e, 0x81, - 0xec, 0x05, 0x51, 0x03, 0xc9, 0x7f, 0x9b, 0x64, 0xdb, 0xcb, 0x47, 0x22, 0xfc, 0xd9, 0x79, 0xcb, - 0x2d, 0x5d, 0x00, 0x49, 0x6a, 0x1c, 0x22, 0x07, 0x0a, 0x2d, 0x85, 0x25, 0xdf, 0x03, 0xd7, 0xc5, - 0xfc, 0x18, 0xd8, 0x44, 0x8d, 0x36, 0x69, 0x32, 0x2d, 0xa5, 0xea, 0x6c, 0xb7, 0x93, 0x9f, 0xe6, - 0x4d, 0xd5, 0xb0, 0x89, 0x1e, 0xeb, 0xdb, 0xfa, 0x34, 0xed, 0x9b, 0xa4, 0xe9, 0x37, 0xe2, 0xe7, - 0xb0, 0xad, 0xcb, 0xe8, 0xec, 0xfa, 0x3d, 0xec, 0x55, 0x79, 0x08, 0xc1, 0xd9, 0xc8, 0x5e, 0x85, - 0xd9, 0x2a, 0xe6, 0xc1, 0xf2, 0x50, 0x1a, 0x03, 0xa2, 0x7f, 0xe6, 0x2f, 0x43, 0x5f, 0x86, 0x08, - 0xcd, 0xef, 0xfa, 0x6c, 0xf0, 0x76, 0x5b, 0xd6, 0x97, 0x2d, 0x31, 0x4e, 0xb6, 0xa9, 0x2b, 0xca, - 0x96, 0x1c, 0x26, 0xdb, 0xff, 0xb6, 0x17, 0x97, 0xbd, 0x0e, 0x07, 0xb9, 0x17, 0xaf, 0xc3, 0x41, - 0x77, 0x20, 0x99, 0x03, 0xd2, 0x75, 0x6a, 0xdd, 0x37, 0x3c, 0xfb, 0x18, 0x7a, 0x48, 0xfe, 0x24, - 0xfc, 0x39, 0x8d, 0x8d, 0xe9, 0x27, 0xf4, 0x15, 0x5d, 0x1d, 0xfe, 0x15, 0xbd, 0x2e, 0xba, 0xea, - 0xd5, 0x2f, 0xce, 0xb3, 0x01, 0xe9, 0x99, 0x41, 0x17, 0xbf, 0xc4, 0xc0, 0xf5, 0x3a, 0xb5, 0x1e, - 0xb7, 0x4c, 0xe8, 0xa1, 0x87, 0x90, 0x40, 0x87, 0xfa, 0xad, 0xc0, 0xb6, 0x77, 0x88, 0x89, 0xed, - 0x9d, 0x8d, 0x6f, 0x25, 0x08, 0x95, 0x35, 0x90, 0x6c, 0xb1, 0x0a, 0x6c, 0x3c, 0xd2, 0xeb, 0xb3, - 0xa1, 0x93, 0x04, 0x2f, 0x2d, 0x8e, 0x11, 0x22, 0x6c, 0x63, 0x95, 0xf5, 0x1d, 0x14, 0xf0, 0xfb, - 0xbe, 0x29, 0xfa, 0x0e, 0x37, 0x54, 0xcc, 0x82, 0xc5, 0x81, 0x1e, 0x7b, 0xfd, 0xaf, 0x3f, 0x9d, - 0x02, 0xf1, 0x3a, 0xb5, 0xe4, 0x07, 0x20, 0x1d, 0x3e, 0x13, 0x67, 0x43, 0xb7, 0x8e, 0x9e, 0xa4, - 0xd4, 0x5b, 0x23, 0xa1, 0x5e, 0x51, 0xf9, 0x2b, 0x00, 0x42, 0x07, 0x2c, 0x65, 0x30, 0xa1, 0x87, - 0xa8, 0x85, 0x51, 0x48, 0x50, 0xe9, 0x09, 0xb8, 0x71, 0xe1, 0x80, 0x92, 0x8b, 0x66, 0x0d, 0xe2, - 0xea, 0xea, 0xe5, 0x78, 0x50, 0xfb, 0x11, 0x98, 0x19, 0xf8, 0x96, 0x7e, 0x10, 0xcd, 0x8c, 0xa2, - 0xea, 0xca, 0x65, 0x68, 0x50, 0xf5, 0x5b, 0x20, 0x0f, 0x79, 0x5d, 0x17, 0x86, 0xf5, 0x14, 0x8e, - 0x50, 0x4b, 0xe3, 0x22, 0xc2, 0x9c, 0x5c, 0x78, 0x4f, 0xe5, 0x2e, 0xf6, 0x16, 0xa9, 0xbe, 0x7a, - 0x39, 0x1e, 0xd4, 0xae, 0x82, 0x54, 0xb0, 0x51, 0x0b, 0xd1, 0x9c, 0x9e, 0x5f, 0xcd, 0x0d, 0xf7, - 0x07, 0x35, 0x76, 0x40, 0x26, 0xb2, 0x0e, 0x6a, 0x34, 0x3e, 0x8c, 0xa9, 0xc5, 0xd1, 0x58, 0xaf, - 0x5e, 0xf5, 0xc1, 0x8b, 0x6e, 0x2e, 0xf6, 0xb2, 0x9b, 0x8b, 0xfd, 0xd5, 0xcd, 0xc5, 0x7e, 0x3a, - 0xcf, 0x4d, 0xbc, 0x3c, 0xcf, 0x4d, 0xfc, 0x71, 0x9e, 0x9b, 0x78, 0xb2, 0x16, 0x3a, 0x2d, 0xec, - 0x6e, 0x6e, 0xed, 0x94, 0x1f, 0xea, 0xbb, 0x8f, 0x76, 0x6b, 0xbb, 0xdb, 0x1a, 0x36, 0x6d, 0xb7, - 0x6c, 0x60, 0x82, 0xb4, 0x53, 0xf1, 0x33, 0x93, 0x1f, 0x1e, 0xf6, 0x93, 0xec, 0x67, 0xe0, 0x47, - 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x80, 0xc3, 0x87, 0xf8, 0xbc, 0x0e, 0x00, 0x00, + 0x7a, 0x52, 0x0b, 0xf9, 0x90, 0x9e, 0xfa, 0x00, 0x3d, 0x15, 0x5c, 0xae, 0x28, 0x52, 0x96, 0xec, + 0xd8, 0x48, 0x73, 0xb1, 0x39, 0xf3, 0xcd, 0x0c, 0x87, 0xdf, 0x37, 0x43, 0xae, 0x40, 0x26, 0x14, + 0xe9, 0x0d, 0x5c, 0x3e, 0x5a, 0x2d, 0x3b, 0x27, 0xa5, 0x16, 0x25, 0x0e, 0x91, 0x25, 0xcf, 0x57, + 0x3a, 0x5a, 0x55, 0x67, 0x4d, 0x62, 0x12, 0xee, 0x2d, 0xbb, 0x57, 0x5e, 0x80, 0x3a, 0xdf, 0x4f, + 0x12, 0xa1, 0x9e, 0x3f, 0xa3, 0x13, 0xd6, 0x24, 0xac, 0xbc, 0x87, 0x98, 0x0b, 0xee, 0x61, 0x07, + 0xad, 0x96, 0x75, 0x62, 0xd9, 0x02, 0x4f, 0x7b, 0x78, 0xdd, 0x2b, 0xe8, 0x19, 0x02, 0x5a, 0x10, + 0xa9, 0x4d, 0x66, 0xba, 0x65, 0x9b, 0xcc, 0x14, 0xc0, 0x0c, 0x6a, 0x5a, 0x36, 0x29, 0xf3, 0xbf, + 0x9e, 0x2b, 0x7f, 0x16, 0x85, 0xa9, 0x1a, 0x33, 0x35, 0xfc, 0x5d, 0x1b, 0x33, 0x67, 0x03, 0x39, + 0x48, 0xde, 0x86, 0x9b, 0x5e, 0x27, 0x75, 0xa6, 0x53, 0xab, 0xe5, 0xd4, 0x2d, 0x43, 0x89, 0xe4, + 0x22, 0x85, 0x58, 0x65, 0xb9, 0xdb, 0xc9, 0x4e, 0xed, 0x70, 0x6c, 0x97, 0x43, 0x9b, 0x1b, 0xff, + 0x9e, 0xf3, 0x68, 0x53, 0x24, 0x68, 0x1b, 0xb2, 0x0a, 0x09, 0x1d, 0x35, 0x1a, 0x06, 0x72, 0x90, + 0x32, 0x9e, 0x8b, 0x14, 0x52, 0x9a, 0x6f, 0xcb, 0x8b, 0x20, 0x21, 0x76, 0x58, 0xd7, 0x49, 0xdb, + 0x76, 0x94, 0xa8, 0x7b, 0x13, 0x2d, 0x81, 0xd8, 0x61, 0xd5, 0xb5, 0x5d, 0xb0, 0x69, 0xd9, 0x02, + 0x8c, 0x79, 0x60, 0xd3, 0xb2, 0x3d, 0xf0, 0x0e, 0x48, 0x7a, 0xc3, 0xc2, 0x36, 0x6f, 0x6f, 0x22, + 0x17, 0x29, 0x48, 0x95, 0x54, 0xb7, 0x93, 0x4d, 0x54, 0xb9, 0x73, 0x73, 0x43, 0x4b, 0x78, 0xf0, + 0xa6, 0x21, 0x1f, 0x80, 0xb4, 0x8f, 0x71, 0xbd, 0x61, 0x35, 0x2d, 0x47, 0x89, 0xe7, 0xa2, 0x85, + 0xe4, 0x5a, 0xba, 0x24, 0x18, 0x73, 0xe9, 0x2d, 0x09, 0x7a, 0x4b, 0x55, 0x62, 0xd9, 0x95, 0x7b, + 0x2f, 0x3b, 0xd9, 0xb1, 0x5f, 0xff, 0xcc, 0x16, 0x4c, 0xcb, 0x39, 0x68, 0xef, 0x95, 0x74, 0xd2, + 0x14, 0xf4, 0x8a, 0x7f, 0x45, 0x66, 0x1c, 0x96, 0x9d, 0xd3, 0x16, 0x66, 0x3c, 0x81, 0x69, 0x89, + 0x7d, 0x8c, 0xb7, 0xdc, 0xe2, 0x72, 0x16, 0x92, 0x2d, 0x8a, 0x5b, 0x88, 0xe2, 0xba, 0x89, 0x98, + 0x72, 0x83, 0xf7, 0x0c, 0xc2, 0xf5, 0x25, 0x62, 0x6e, 0x00, 0x3e, 0xc1, 0x7a, 0xdb, 0xf1, 0x02, + 0x12, 0x5e, 0x80, 0x70, 0xb9, 0x01, 0xf7, 0x20, 0xce, 0xb0, 0x6d, 0x60, 0xaa, 0x48, 0xfc, 0x99, + 0x94, 0xd7, 0x2f, 0x8a, 0xb3, 0xa2, 0xd7, 0x07, 0x86, 0x41, 0x31, 0x63, 0xbb, 0x0e, 0xb5, 0x6c, + 0x53, 0x13, 0x71, 0xeb, 0xf9, 0xbf, 0x9f, 0x65, 0x23, 0xdf, 0xbf, 0x79, 0x7e, 0x57, 0x38, 0x7e, + 0x78, 0xf3, 0xfc, 0xae, 0x90, 0xa0, 0x2c, 0x64, 0xcd, 0x2b, 0x30, 0x1f, 0x16, 0x59, 0xc3, 0xac, + 0x45, 0x6c, 0x86, 0xf3, 0xff, 0x44, 0x60, 0x92, 0x43, 0x2d, 0x42, 0x3d, 0xf9, 0xef, 0x03, 0x50, + 0x2f, 0xb0, 0x2f, 0xbc, 0xda, 0xed, 0x64, 0x25, 0x91, 0xce, 0x35, 0xef, 0x1b, 0x9a, 0x24, 0xa2, + 0x37, 0x0d, 0xf9, 0x53, 0x48, 0x52, 0x74, 0x5c, 0xa7, 0xbc, 0x18, 0x53, 0xc6, 0x39, 0xd5, 0xb3, + 0x25, 0x7f, 0x05, 0x4a, 0x1a, 0x3a, 0xf6, 0xee, 0x54, 0x89, 0xb9, 0x2c, 0x6b, 0x40, 0x7b, 0x0e, + 0x26, 0x7f, 0x06, 0xd2, 0x11, 0x6a, 0x58, 0x06, 0x72, 0x08, 0xe5, 0xa3, 0x20, 0x55, 0x6e, 0xbf, + 0x7e, 0x51, 0x5c, 0x12, 0x0f, 0xff, 0x75, 0x0f, 0x0b, 0xb3, 0xd0, 0xcf, 0x59, 0x5f, 0xee, 0x11, + 0xd1, 0xf7, 0xb9, 0x5c, 0x4c, 0xfa, 0x5c, 0xb8, 0xf7, 0xc9, 0x2f, 0xc0, 0x5c, 0xe8, 0x79, 0x7d, + 0x26, 0x7e, 0x8c, 0xc2, 0xad, 0x1a, 0x33, 0xab, 0x14, 0x23, 0x07, 0xbb, 0xc8, 0x2e, 0x69, 0x53, + 0x1d, 0xcb, 0x32, 0xc4, 0x6c, 0xd4, 0xc4, 0x9c, 0x09, 0x49, 0xe3, 0xd7, 0x72, 0x0e, 0x92, 0x06, + 0xf6, 0xb6, 0xc3, 0x22, 0x36, 0x9f, 0x6a, 0x49, 0x0b, 0xba, 0xe4, 0x0c, 0x08, 0x55, 0xd1, 0x5e, + 0x03, 0xf3, 0xc7, 0x49, 0x69, 0x01, 0x8f, 0xfc, 0x0d, 0x44, 0xf7, 0x31, 0x56, 0x62, 0xef, 0x7e, + 0x1a, 0xdd, 0xba, 0xf2, 0xc7, 0x90, 0x70, 0x28, 0x46, 0xac, 0x4d, 0x4f, 0xc5, 0x72, 0x8c, 0x1e, + 0x24, 0x3f, 0x52, 0x2e, 0xc1, 0x04, 0x39, 0xb6, 0x31, 0x55, 0xe2, 0x97, 0xa4, 0x78, 0x61, 0x81, + 0x61, 0xbd, 0xf1, 0x96, 0xc3, 0xfa, 0xe1, 0x90, 0x61, 0x5d, 0x10, 0x02, 0x0d, 0x32, 0x9f, 0x5f, + 0x82, 0xc5, 0x21, 0x82, 0xf8, 0x82, 0xfd, 0x1e, 0x85, 0x99, 0x1a, 0x33, 0x3f, 0x37, 0x2c, 0x27, + 0x20, 0xd7, 0x17, 0x30, 0xe5, 0xbe, 0x59, 0xea, 0x8c, 0x9b, 0xfd, 0x11, 0xce, 0x75, 0x3b, 0xd9, + 0x54, 0x3f, 0x8e, 0x4f, 0x71, 0xc8, 0xd6, 0x52, 0x46, 0xdf, 0x32, 0x7c, 0xd9, 0xc7, 0x47, 0xcb, + 0x1e, 0xbd, 0x4c, 0xf6, 0xd8, 0x28, 0xd9, 0x27, 0xde, 0x83, 0xec, 0xf1, 0xab, 0xcb, 0x7e, 0xe3, + 0xaa, 0xb2, 0x27, 0xde, 0x52, 0xf6, 0x3b, 0x43, 0x64, 0x9f, 0x13, 0xb2, 0x87, 0xf5, 0xcb, 0x2f, + 0x42, 0xfa, 0x9c, 0xa8, 0xbe, 0xe4, 0xbf, 0x8d, 0xf3, 0xed, 0xf5, 0x46, 0x22, 0xf8, 0xd9, 0xb9, + 0xe6, 0x96, 0xce, 0x43, 0x9c, 0xe9, 0x07, 0xb8, 0x89, 0x84, 0x96, 0xc2, 0x92, 0xef, 0xc3, 0xb4, + 0x98, 0x1f, 0x9d, 0x18, 0xb8, 0xde, 0xa6, 0x0d, 0xae, 0xa5, 0x54, 0x99, 0xe9, 0x76, 0xb2, 0x93, + 0x5e, 0x53, 0x55, 0x62, 0xe0, 0x27, 0xda, 0x96, 0x36, 0xc9, 0xfa, 0x26, 0x6d, 0xb8, 0x8d, 0xb8, + 0x39, 0x7c, 0xeb, 0x52, 0x1a, 0xbf, 0x7e, 0x0f, 0x7b, 0x55, 0x1c, 0x42, 0x70, 0x3a, 0xb4, 0x57, + 0x41, 0xb6, 0xf2, 0x59, 0x58, 0x1a, 0x4a, 0xa3, 0x4f, 0xf4, 0xcf, 0xde, 0xcb, 0xd0, 0x95, 0x21, + 0x44, 0xf3, 0xbb, 0x3e, 0x1b, 0x5c, 0x6f, 0xcb, 0xfa, 0xb2, 0xc5, 0x2e, 0x93, 0x6d, 0xe2, 0x8a, + 0xb2, 0xc5, 0x87, 0xc9, 0xf6, 0xbf, 0xed, 0xc5, 0x45, 0xaf, 0xc3, 0x41, 0xee, 0xc5, 0xeb, 0x70, + 0xd0, 0xed, 0x4b, 0x76, 0x04, 0xc9, 0x1a, 0x33, 0x1f, 0xe8, 0x8e, 0x75, 0x84, 0x1c, 0x1c, 0xfe, + 0x9c, 0x46, 0xae, 0xf1, 0x39, 0x5d, 0x19, 0xfe, 0x39, 0x9d, 0x16, 0xed, 0xf5, 0x6e, 0x94, 0x9f, + 0xe3, 0x93, 0xd2, 0x33, 0xfd, 0x76, 0x7e, 0x89, 0xc0, 0x74, 0x8d, 0x99, 0x4f, 0x5a, 0x06, 0x72, + 0xf0, 0x23, 0x44, 0x51, 0x93, 0xc9, 0x9f, 0x80, 0x84, 0xda, 0xce, 0x01, 0xa1, 0x96, 0x73, 0x2a, + 0x7a, 0x1a, 0xcd, 0x51, 0x3f, 0x54, 0x2e, 0x43, 0xbc, 0xc5, 0x2b, 0xf0, 0x39, 0x49, 0xae, 0xcd, + 0x04, 0x8e, 0x14, 0x5e, 0x69, 0x71, 0x9e, 0x10, 0x61, 0xeb, 0x2b, 0xbc, 0x6f, 0xbf, 0x80, 0xdb, + 0xf7, 0x2d, 0xd1, 0x77, 0xb0, 0xa1, 0x7c, 0x1a, 0x16, 0x06, 0x7a, 0xec, 0xf5, 0xbf, 0xf6, 0x6c, + 0x02, 0xa2, 0x35, 0x66, 0xca, 0x0f, 0x21, 0x19, 0x3c, 0x1c, 0xa7, 0x03, 0xb7, 0x0e, 0x1f, 0xa9, + 0xd4, 0xdb, 0x23, 0xa1, 0x5e, 0x51, 0xf9, 0x2b, 0x80, 0xc0, 0x49, 0x4b, 0x19, 0x4c, 0xe8, 0x21, + 0x6a, 0x6e, 0x14, 0xe2, 0x57, 0x7a, 0x0a, 0x37, 0xcf, 0x9d, 0x54, 0x32, 0xe1, 0xac, 0x41, 0x5c, + 0x5d, 0xb9, 0x18, 0xf7, 0x6b, 0x3f, 0x86, 0xa9, 0x81, 0x8f, 0xea, 0x07, 0xe1, 0xcc, 0x30, 0xaa, + 0x2e, 0x5f, 0x84, 0xfa, 0x55, 0xbf, 0x05, 0x79, 0xc8, 0x7b, 0x3b, 0x37, 0xac, 0xa7, 0x60, 0x84, + 0x5a, 0xb8, 0x2c, 0x22, 0xc8, 0xc9, 0xb9, 0x17, 0x56, 0xe6, 0x7c, 0x6f, 0xa1, 0xea, 0x2b, 0x17, + 0xe3, 0x7e, 0xed, 0x0a, 0x24, 0xfc, 0xd5, 0x9a, 0x0f, 0xe7, 0xf4, 0xfc, 0x6a, 0x66, 0xb8, 0xdf, + 0xaf, 0xb1, 0x0d, 0xa9, 0xd0, 0x3a, 0xa8, 0xe1, 0xf8, 0x20, 0xa6, 0xe6, 0x47, 0x63, 0xbd, 0x7a, + 0x95, 0x87, 0x2f, 0xbb, 0x99, 0xc8, 0xab, 0x6e, 0x26, 0xf2, 0x57, 0x37, 0x13, 0xf9, 0xe9, 0x2c, + 0x33, 0xf6, 0xea, 0x2c, 0x33, 0xf6, 0xc7, 0x59, 0x66, 0xec, 0xe9, 0x6a, 0xe0, 0xd8, 0xb0, 0xb3, + 0xb1, 0xb9, 0x5d, 0x7c, 0xa4, 0xed, 0x3c, 0xde, 0xa9, 0xee, 0x6c, 0x95, 0x89, 0x61, 0xd9, 0x45, + 0x9d, 0x50, 0x5c, 0x3e, 0x11, 0xbf, 0x37, 0xbd, 0x53, 0xc4, 0x5e, 0x9c, 0xff, 0x1e, 0xfc, 0xe8, + 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x4b, 0x0f, 0x75, 0xc5, 0x0e, 0x00, 0x00, } func (this *MsgRequestData) Equal(that interface{}) bool {