From c899da9f8de1c9965c6bf4a4b8074e7c62c1d7b4 Mon Sep 17 00:00:00 2001 From: Callum Waters Date: Tue, 15 Aug 2023 12:48:35 +0200 Subject: [PATCH] chore!: align staking module with mainline SDK (#339) This PR restores the staking module and affected modules (genutil, distribution and gov) to the same version as the SDK v0.46.x mainline branch. This will make it easier to unfork the repo in the future. --- client/flags/flags.go | 3 - go.mod | 1 - go.sum | 1 - proto/cosmos/staking/v1beta1/staking.proto | 3 - proto/cosmos/staking/v1beta1/tx.proto | 10 +- simapp/simd/cmd/testnet.go | 9 +- testutil/network/network.go | 48 +- x/auth/migrations/v043/store_test.go | 7 +- x/distribution/abci_test.go | 6 +- x/distribution/client/testutil/suite.go | 6 +- x/distribution/keeper/allocation_test.go | 38 +- x/distribution/keeper/delegation_test.go | 42 +- x/distribution/keeper/grpc_query_test.go | 4 +- x/distribution/keeper/querier_test.go | 4 +- x/distribution/simulation/operations_test.go | 8 +- x/distribution/types/distribution.pb.go | 2 +- x/distribution/types/genesis.pb.go | 2 +- x/distribution/types/params.go | 4 +- x/distribution/types/query.pb.go | 2 +- x/distribution/types/tx.pb.go | 2 +- x/evidence/keeper/infraction_test.go | 8 +- x/evidence/types/evidence.pb.go | 2 +- x/evidence/types/query.pb.go | 2 +- x/evidence/types/tx.pb.go | 2 +- x/genutil/client/cli/gentx.go | 15 +- x/genutil/client/cli/init.go | 4 - x/genutil/client/cli/init_test.go | 38 - x/genutil/client/cli/migrate.go | 140 +- x/genutil/client/testutil/suite.go | 2 - x/genutil/gentx_test.go | 18 +- x/genutil/types/genesis.pb.go | 2 +- x/genutil/types/genesis_state_test.go | 19 +- x/gov/abci_test.go | 5 - x/gov/keeper/common_test.go | 16 +- x/gov/keeper/vote.go | 1 + x/gov/migrations/v046/store.go | 14 - x/gov/spec/03_messages.md | 2 - x/gov/types/events.go | 1 + x/gov/types/v1/gov.pb.go | 2 +- x/gov/types/v1/msgs.go | 6 +- x/gov/types/v1/msgs_test.go | 4 +- x/gov/types/v1/tx.pb.go | 2 +- x/gov/types/v1beta1/genesis.pb.go | 2 +- x/gov/types/v1beta1/gov.pb.go | 2 +- x/gov/types/v1beta1/query.pb.go | 2 +- x/gov/types/v1beta1/tx.pb.go | 2 +- x/slashing/abci_test.go | 4 +- x/slashing/app_test.go | 5 - x/slashing/keeper/keeper_test.go | 24 +- x/slashing/simulation/operations_test.go | 6 +- x/slashing/types/genesis.pb.go | 2 +- x/slashing/types/query.pb.go | 2 +- x/slashing/types/slashing.pb.go | 2 +- x/slashing/types/tx.pb.go | 2 +- x/staking/app_test.go | 14 +- x/staking/bench_test.go | 5 +- x/staking/client/cli/flags.go | 8 - x/staking/client/cli/tx.go | 53 +- x/staking/client/cli/tx_test.go | 18 +- x/staking/client/testutil/suite.go | 8 +- x/staking/genesis_test.go | 6 +- x/staking/keeper/delegation_test.go | 84 +- x/staking/keeper/genesis_test.go | 7 +- x/staking/keeper/grpc_query_test.go | 11 +- x/staking/keeper/historical_info_test.go | 31 +- x/staking/keeper/msg_server.go | 27 +- x/staking/keeper/querier.go | 31 - x/staking/keeper/querier_test.go | 93 +- x/staking/keeper/slash_test.go | 4 +- x/staking/keeper/validator.go | 14 - x/staking/keeper/validator_test.go | 104 +- x/staking/migrations/v043/store_test.go | 6 +- x/staking/simulation/decoder_test.go | 6 +- x/staking/simulation/genesis.go | 5 +- x/staking/simulation/operations.go | 11 +- x/staking/simulation/operations_test.go | 6 +- x/staking/teststaking/helper.go | 17 +- x/staking/teststaking/validator.go | 20 +- x/staking/types/authz.pb.go | 2 +- x/staking/types/errors.go | 3 - x/staking/types/genesis.pb.go | 2 +- x/staking/types/historical_info_test.go | 14 +- x/staking/types/keys_test.go | 8 +- x/staking/types/msg.go | 21 +- x/staking/types/msg_test.go | 14 +- x/staking/types/querier.go | 14 - x/staking/types/query.pb.go | 2 +- x/staking/types/staking.pb.go | 1198 +++++++++--------- x/staking/types/tx.pb.go | 213 +--- x/staking/types/validator.go | 4 +- x/staking/types/validator_test.go | 63 +- 91 files changed, 957 insertions(+), 1752 deletions(-) diff --git a/client/flags/flags.go b/client/flags/flags.go index 2011eada195f..96306f5ca4ed 100644 --- a/client/flags/flags.go +++ b/client/flags/flags.go @@ -85,9 +85,6 @@ const ( // Tendermint logging flags FlagLogLevel = "log_level" FlagLogFormat = "log_format" - - // QGB related flags - FlagEVMAddress = "evm-address" ) // LineBreak can be included in a command list to provide a blank line diff --git a/go.mod b/go.mod index fa3abbb1fd1b..9ec9309533c4 100644 --- a/go.mod +++ b/go.mod @@ -20,7 +20,6 @@ require ( github.com/cosmos/gogoproto v1.4.10 github.com/cosmos/iavl v0.19.6 github.com/cosmos/ledger-cosmos-go v0.12.2 - github.com/ethereum/go-ethereum v1.10.17 github.com/gogo/gateway v1.1.0 github.com/gogo/protobuf v1.3.2 github.com/golang/mock v1.6.0 diff --git a/go.sum b/go.sum index 45de03145c59..971d64cb3a69 100644 --- a/go.sum +++ b/go.sum @@ -301,7 +301,6 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/ethereum/go-ethereum v1.10.17 h1:XEcumY+qSr1cZQaWsQs5Kck3FHB0V2RiMHPdTBJ+oT8= github.com/ethereum/go-ethereum v1.10.17/go.mod h1:Lt5WzjM07XlXc95YzrhosmR4J9Ahd6X2wyEV2SvGhk0= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= diff --git a/proto/cosmos/staking/v1beta1/staking.proto b/proto/cosmos/staking/v1beta1/staking.proto index 57ebfb8d4f69..6dc965feab47 100644 --- a/proto/cosmos/staking/v1beta1/staking.proto +++ b/proto/cosmos/staking/v1beta1/staking.proto @@ -124,9 +124,6 @@ message Validator { (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false ]; - // This is a hex encoded 0x EVM public key that will be used by this - // validator on the target EVM chain. - string evm_address = 12; } // BondStatus is the status of a validator. diff --git a/proto/cosmos/staking/v1beta1/tx.proto b/proto/cosmos/staking/v1beta1/tx.proto index e5e9a40bf214..b4866d36dbaf 100644 --- a/proto/cosmos/staking/v1beta1/tx.proto +++ b/proto/cosmos/staking/v1beta1/tx.proto @@ -62,9 +62,6 @@ message MsgCreateValidator { string validator_address = 5 [(cosmos_proto.scalar) = "cosmos.AddressString"]; google.protobuf.Any pubkey = 6 [(cosmos_proto.accepts_interface) = "cosmos.crypto.PubKey"]; cosmos.base.v1beta1.Coin value = 7 [(gogoproto.nullable) = false]; - // This is a hex encoded 0x EVM public key that will be used by this - // validator on the target EVM chain. - string evm_address = 8; } // MsgCreateValidatorResponse defines the Msg/CreateValidator response type. @@ -88,7 +85,6 @@ message MsgEditValidator { [(cosmos_proto.scalar) = "cosmos.Dec", (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec"]; string min_self_delegation = 4 [(cosmos_proto.scalar) = "cosmos.Int", (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int"]; - string evm_address = 5; } // MsgEditValidatorResponse defines the Msg/EditValidator response type. @@ -151,10 +147,10 @@ message MsgCancelUnbondingDelegation { option (cosmos.msg.v1.signer) = "delegator_address"; option (gogoproto.equal) = false; - string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // amount is always less than or equal to unbonding delegation entry balance - cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false]; + cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false]; // creation_height is the height which the unbonding took place. int64 creation_height = 4; } diff --git a/simapp/simd/cmd/testnet.go b/simapp/simd/cmd/testnet.go index 19c88684c4e3..10fde021701c 100644 --- a/simapp/simd/cmd/testnet.go +++ b/simapp/simd/cmd/testnet.go @@ -10,8 +10,6 @@ import ( "os" "path/filepath" - "github.com/cosmos/cosmos-sdk/x/staking/teststaking" - "github.com/spf13/cobra" tmconfig "github.com/tendermint/tendermint/config" tmos "github.com/tendermint/tendermint/libs/os" @@ -289,11 +287,6 @@ func initTestnetFiles( genBalances = append(genBalances, banktypes.Balance{Address: addr.String(), Coins: coins.Sort()}) genAccounts = append(genAccounts, authtypes.NewBaseAccount(addr, nil, 0, 0)) - evmAddress, err := teststaking.RandomEVMAddress() - if err != nil { - return err - } - valTokens := sdk.TokensFromConsensusPower(100, sdk.DefaultPowerReduction) createValMsg, err := stakingtypes.NewMsgCreateValidator( sdk.ValAddress(addr), @@ -301,7 +294,7 @@ func initTestnetFiles( sdk.NewCoin(sdk.DefaultBondDenom, valTokens), stakingtypes.NewDescription(nodeDirName, "", "", "", ""), stakingtypes.NewCommissionRates(sdk.OneDec(), sdk.OneDec(), sdk.OneDec()), - sdk.OneInt(), *evmAddress, + sdk.OneInt(), ) if err != nil { return err diff --git a/testutil/network/network.go b/testutil/network/network.go index a8006da2ed54..e08787435037 100644 --- a/testutil/network/network.go +++ b/testutil/network/network.go @@ -3,7 +3,6 @@ package network import ( "bufio" "context" - "crypto/ecdsa" "encoding/json" "errors" "fmt" @@ -16,10 +15,7 @@ import ( "testing" "time" - "github.com/ethereum/go-ethereum/crypto" - "cosmossdk.io/math" - "github.com/ethereum/go-ethereum/common" "github.com/rs/zerolog" "github.com/spf13/cobra" tmrand "github.com/tendermint/tendermint/libs/rand" @@ -172,9 +168,6 @@ type ( api *api.Server grpc *grpc.Server grpcWeb *http.Server - - EVMPrivateKey *ecdsa.PrivateKey - EVMAddr common.Address } ) @@ -407,13 +400,6 @@ func New(l Logger, baseDir string, cfg Config) (*Network, error) { return nil, err } - evmPrivateKey, err := crypto.GenerateKey() - if err != nil { - return nil, err - } - orchEVMPublicKey := evmPrivateKey.Public().(*ecdsa.PublicKey) - evmAddr := crypto.PubkeyToAddress(*orchEVMPublicKey) - createValMsg, err := stakingtypes.NewMsgCreateValidator( sdk.ValAddress(addr), valPubKeys[i], @@ -421,7 +407,6 @@ func New(l Logger, baseDir string, cfg Config) (*Network, error) { stakingtypes.NewDescription(nodeDirName, "", "", "", ""), stakingtypes.NewCommissionRates(commission, sdk.OneDec(), sdk.OneDec()), sdk.OneInt(), - evmAddr, ) if err != nil { return nil, err @@ -478,20 +463,18 @@ func New(l Logger, baseDir string, cfg Config) (*Network, error) { WithAccountRetriever(cfg.AccountRetriever) network.Validators[i] = &Validator{ - AppConfig: appCfg, - ClientCtx: clientCtx, - Ctx: ctx, - Dir: filepath.Join(network.BaseDir, nodeDirName), - NodeID: nodeID, - PubKey: pubKey, - Moniker: nodeDirName, - RPCAddress: tmCfg.RPC.ListenAddress, - P2PAddress: tmCfg.P2P.ListenAddress, - APIAddress: apiAddr, - Address: addr, - ValAddress: sdk.ValAddress(addr), - EVMPrivateKey: evmPrivateKey, - EVMAddr: evmAddr, + AppConfig: appCfg, + ClientCtx: clientCtx, + Ctx: ctx, + Dir: filepath.Join(network.BaseDir, nodeDirName), + NodeID: nodeID, + PubKey: pubKey, + Moniker: nodeDirName, + RPCAddress: tmCfg.RPC.ListenAddress, + P2PAddress: tmCfg.P2P.ListenAddress, + APIAddress: apiAddr, + Address: addr, + ValAddress: sdk.ValAddress(addr), } } @@ -546,12 +529,7 @@ func (n *Network) LatestHeight() (int64, error) { // committed after a given block. If that height is not reached within a timeout, // an error is returned. Regardless, the latest height queried is returned. func (n *Network) WaitForHeight(h int64) (int64, error) { - timeout := 10 * n.Config.TimeoutCommit - if timeout < 15*time.Second { - timeout = 15 * time.Second - } - - return n.WaitForHeightWithTimeout(h, timeout) + return n.WaitForHeightWithTimeout(h, 10*time.Second) } // WaitForHeightWithTimeout is the same as WaitForHeight except the caller can diff --git a/x/auth/migrations/v043/store_test.go b/x/auth/migrations/v043/store_test.go index 096cd239dd1c..df7902c191bd 100644 --- a/x/auth/migrations/v043/store_test.go +++ b/x/auth/migrations/v043/store_test.go @@ -5,8 +5,6 @@ import ( "testing" "time" - "github.com/cosmos/cosmos-sdk/x/staking/teststaking" - "github.com/stretchr/testify/require" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" @@ -654,9 +652,6 @@ func createValidator(t *testing.T, ctx sdk.Context, app *simapp.SimApp, powers i pks := simapp.CreateTestPubKeys(1) cdc := simapp.MakeTestEncodingConfig().Codec - evmAddr, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - app.StakingKeeper = stakingkeeper.NewKeeper( cdc, app.GetKey(stakingtypes.StoreKey), @@ -665,7 +660,7 @@ func createValidator(t *testing.T, ctx sdk.Context, app *simapp.SimApp, powers i app.GetSubspace(stakingtypes.ModuleName), ) - val1, err := stakingtypes.NewValidator(valAddrs[0], pks[0], stakingtypes.Description{}, *evmAddr) + val1, err := stakingtypes.NewValidator(valAddrs[0], pks[0], stakingtypes.Description{}) require.NoError(t, err) app.StakingKeeper.SetValidator(ctx, val1) diff --git a/x/distribution/abci_test.go b/x/distribution/abci_test.go index 00e2b738a02e..ea31b564bd63 100644 --- a/x/distribution/abci_test.go +++ b/x/distribution/abci_test.go @@ -45,9 +45,7 @@ func TestVerifyProposerRewardAssignement(t *testing.T) { validators[i].addr = sdk.ValAddress(addrs[i]) validators[i].pubkey = ed25519.GenPrivKey().PubKey() validators[i].votes = make([]abci.VoteInfo, totalValidators) - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - tstaking.CreateValidatorWithValPower(validators[i].addr, validators[i].pubkey, power, *randomEVMAddress, true) + tstaking.CreateValidatorWithValPower(validators[i].addr, validators[i].pubkey, power, true) } app.EndBlock(abci.RequestEndBlock{}) require.NotEmpty(t, app.Commit()) @@ -104,6 +102,6 @@ func TestVerifyProposerRewardAssignement(t *testing.T) { rewardsValidatorBeforeLazyValidator := app.DistrKeeper.GetValidatorOutstandingRewardsCoins(ctx, validators[lazyValidatorIdx+1].addr) rewardsLazyValidator := app.DistrKeeper.GetValidatorOutstandingRewardsCoins(ctx, validators[lazyValidatorIdx].addr) rewardsValidatorAfterLazyValidator := app.DistrKeeper.GetValidatorOutstandingRewardsCoins(ctx, validators[lazyValidatorIdx+1].addr) - require.True(t, rewardsLazyValidator[0].Amount.Equal(rewardsValidatorAfterLazyValidator[0].Amount)) + require.True(t, rewardsLazyValidator[0].Amount.LT(rewardsValidatorAfterLazyValidator[0].Amount)) require.Equal(t, rewardsValidatorBeforeLazyValidator, rewardsValidatorAfterLazyValidator) } diff --git a/x/distribution/client/testutil/suite.go b/x/distribution/client/testutil/suite.go index 4656ca1d8102..fdf9648b659e 100644 --- a/x/distribution/client/testutil/suite.go +++ b/x/distribution/client/testutil/suite.go @@ -80,13 +80,13 @@ func (s *IntegrationTestSuite) TestGetCmdQueryParams() { { "json output", []string{fmt.Sprintf("--%s=json", tmcli.OutputFlag)}, - `{"community_tax":"0.020000000000000000","base_proposer_reward":"0.000000000000000000","bonus_proposer_reward":"0.000000000000000000","withdraw_addr_enabled":true}`, + `{"community_tax":"0.020000000000000000","base_proposer_reward":"0.010000000000000000","bonus_proposer_reward":"0.040000000000000000","withdraw_addr_enabled":true}`, }, { "text output", []string{fmt.Sprintf("--%s=text", tmcli.OutputFlag)}, - `base_proposer_reward: "0.000000000000000000" -bonus_proposer_reward: "0.000000000000000000" + `base_proposer_reward: "0.010000000000000000" +bonus_proposer_reward: "0.040000000000000000" community_tax: "0.020000000000000000" withdraw_addr_enabled: true`, }, diff --git a/x/distribution/keeper/allocation_test.go b/x/distribution/keeper/allocation_test.go index 0c05a257c349..d32b43690cac 100644 --- a/x/distribution/keeper/allocation_test.go +++ b/x/distribution/keeper/allocation_test.go @@ -21,14 +21,12 @@ func TestAllocateTokensToValidatorWithCommission(t *testing.T) { ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs := simapp.AddTestAddrs(app, ctx, 3, sdk.NewInt(1234)) - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) valAddrs := simapp.ConvertAddrsToValAddrs(addrs) tstaking := teststaking.NewHelper(t, ctx, app.StakingKeeper) // create validator with 50% commission tstaking.Commission = stakingtypes.NewCommissionRates(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) - tstaking.CreateValidator(sdk.ValAddress(addrs[0]), valConsPk1, sdk.NewInt(100), *randomEVMAddress, true) + tstaking.CreateValidator(sdk.ValAddress(addrs[0]), valConsPk1, sdk.NewInt(100), true) val := app.StakingKeeper.Validator(ctx, valAddrs[0]) // allocate tokens @@ -55,20 +53,16 @@ func TestAllocateTokensToManyValidators(t *testing.T) { app.DistrKeeper.SetFeePool(ctx, disttypes.InitialFeePool()) addrs := simapp.AddTestAddrs(app, ctx, 2, sdk.NewInt(1234)) - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) valAddrs := simapp.ConvertAddrsToValAddrs(addrs) tstaking := teststaking.NewHelper(t, ctx, app.StakingKeeper) // create validator with 50% commission tstaking.Commission = stakingtypes.NewCommissionRates(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) - tstaking.CreateValidator(valAddrs[0], valConsPk1, sdk.NewInt(100), *randomEVMAddress, true) + tstaking.CreateValidator(valAddrs[0], valConsPk1, sdk.NewInt(100), true) // create second validator with 0% commission - randomEVMAddress2, err := teststaking.RandomEVMAddress() - require.NoError(t, err) tstaking.Commission = stakingtypes.NewCommissionRates(sdk.NewDec(0), sdk.NewDec(0), sdk.NewDec(0)) - tstaking.CreateValidator(valAddrs[1], valConsPk2, sdk.NewInt(100), *randomEVMAddress2, true) + tstaking.CreateValidator(valAddrs[1], valConsPk2, sdk.NewInt(100), true) abciValA := abci.Validator{ Address: valConsPk1.Address(), @@ -111,18 +105,18 @@ func TestAllocateTokensToManyValidators(t *testing.T) { app.DistrKeeper.AllocateTokens(ctx, 200, 200, valConsAddr2, votes) // 98 outstanding rewards (100 less 2 to community pool) - require.Equal(t, sdk.DecCoins{{Denom: sdk.DefaultBondDenom, Amount: sdk.NewDecWithPrec(490, 1)}}, app.DistrKeeper.GetValidatorOutstandingRewards(ctx, valAddrs[0]).Rewards) - require.Equal(t, sdk.DecCoins{{Denom: sdk.DefaultBondDenom, Amount: sdk.NewDecWithPrec(490, 1)}}, app.DistrKeeper.GetValidatorOutstandingRewards(ctx, valAddrs[1]).Rewards) + require.Equal(t, sdk.DecCoins{{Denom: sdk.DefaultBondDenom, Amount: sdk.NewDecWithPrec(465, 1)}}, app.DistrKeeper.GetValidatorOutstandingRewards(ctx, valAddrs[0]).Rewards) + require.Equal(t, sdk.DecCoins{{Denom: sdk.DefaultBondDenom, Amount: sdk.NewDecWithPrec(515, 1)}}, app.DistrKeeper.GetValidatorOutstandingRewards(ctx, valAddrs[1]).Rewards) // 2 community pool coins require.Equal(t, sdk.DecCoins{{Denom: sdk.DefaultBondDenom, Amount: sdk.NewDec(2)}}, app.DistrKeeper.GetFeePool(ctx).CommunityPool) // 50% commission for first proposer, (0.5 * 93%) * 100 / 2 = 23.25 - require.Equal(t, sdk.DecCoins{{Denom: sdk.DefaultBondDenom, Amount: sdk.NewDecWithPrec(2450, 2)}}, app.DistrKeeper.GetValidatorAccumulatedCommission(ctx, valAddrs[0]).Commission) + require.Equal(t, sdk.DecCoins{{Denom: sdk.DefaultBondDenom, Amount: sdk.NewDecWithPrec(2325, 2)}}, app.DistrKeeper.GetValidatorAccumulatedCommission(ctx, valAddrs[0]).Commission) // zero commission for second proposer require.True(t, app.DistrKeeper.GetValidatorAccumulatedCommission(ctx, valAddrs[1]).Commission.IsZero()) - // just staking.proportional for first proposer less commission = (0.5 * 98%) * 100 / 2 = 24.50 - require.Equal(t, sdk.DecCoins{{Denom: sdk.DefaultBondDenom, Amount: sdk.NewDecWithPrec(2450, 2)}}, app.DistrKeeper.GetValidatorCurrentRewards(ctx, valAddrs[0]).Rewards) - // proposer reward + staking.proportional for second proposer = (0.5 * (98%)) * 100 = 49 - require.Equal(t, sdk.DecCoins{{Denom: sdk.DefaultBondDenom, Amount: sdk.NewDecWithPrec(490, 1)}}, app.DistrKeeper.GetValidatorCurrentRewards(ctx, valAddrs[1]).Rewards) + // just staking.proportional for first proposer less commission = (0.5 * 93%) * 100 / 2 = 23.25 + require.Equal(t, sdk.DecCoins{{Denom: sdk.DefaultBondDenom, Amount: sdk.NewDecWithPrec(2325, 2)}}, app.DistrKeeper.GetValidatorCurrentRewards(ctx, valAddrs[0]).Rewards) + // proposer reward + staking.proportional for second proposer = (5 % + 0.5 * (93%)) * 100 = 51.5 + require.Equal(t, sdk.DecCoins{{Denom: sdk.DefaultBondDenom, Amount: sdk.NewDecWithPrec(515, 1)}}, app.DistrKeeper.GetValidatorCurrentRewards(ctx, valAddrs[1]).Rewards) } func TestAllocateTokensTruncation(t *testing.T) { @@ -137,22 +131,16 @@ func TestAllocateTokensTruncation(t *testing.T) { tstaking := teststaking.NewHelper(t, ctx, app.StakingKeeper) // create validator with 10% commission - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) tstaking.Commission = stakingtypes.NewCommissionRates(sdk.NewDecWithPrec(1, 1), sdk.NewDecWithPrec(1, 1), sdk.NewDec(0)) - tstaking.CreateValidator(valAddrs[0], valConsPk1, sdk.NewInt(110), *randomEVMAddress, true) + tstaking.CreateValidator(valAddrs[0], valConsPk1, sdk.NewInt(110), true) // create second validator with 10% commission - randomEVMAddress2, err := teststaking.RandomEVMAddress() - require.NoError(t, err) tstaking.Commission = stakingtypes.NewCommissionRates(sdk.NewDecWithPrec(1, 1), sdk.NewDecWithPrec(1, 1), sdk.NewDec(0)) - tstaking.CreateValidator(valAddrs[1], valConsPk2, sdk.NewInt(100), *randomEVMAddress2, true) + tstaking.CreateValidator(valAddrs[1], valConsPk2, sdk.NewInt(100), true) // create third validator with 10% commission - randomEVMAddress3, err := teststaking.RandomEVMAddress() - require.NoError(t, err) tstaking.Commission = stakingtypes.NewCommissionRates(sdk.NewDecWithPrec(1, 1), sdk.NewDecWithPrec(1, 1), sdk.NewDec(0)) - tstaking.CreateValidator(valAddrs[2], valConsPk3, sdk.NewInt(100), *randomEVMAddress3, true) + tstaking.CreateValidator(valAddrs[2], valConsPk3, sdk.NewInt(100), true) abciValA := abci.Validator{ Address: valConsPk1.Address(), diff --git a/x/distribution/keeper/delegation_test.go b/x/distribution/keeper/delegation_test.go index cb96232b0be5..24027780ce32 100644 --- a/x/distribution/keeper/delegation_test.go +++ b/x/distribution/keeper/delegation_test.go @@ -26,10 +26,8 @@ func TestCalculateRewardsBasic(t *testing.T) { valAddrs := simapp.ConvertAddrsToValAddrs(addr) // create validator with 50% commission - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) tstaking.Commission = stakingtypes.NewCommissionRates(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) - tstaking.CreateValidator(valAddrs[0], valConsPk1, sdk.NewInt(100), *randomEVMAddress, true) + tstaking.CreateValidator(valAddrs[0], valConsPk1, sdk.NewInt(100), true) // end block to bond validator and start new block staking.EndBlocker(ctx, app.StakingKeeper) @@ -84,9 +82,7 @@ func TestCalculateRewardsAfterSlash(t *testing.T) { // create validator with 50% commission tstaking.Commission = stakingtypes.NewCommissionRates(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) valPower := int64(100) - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - tstaking.CreateValidatorWithValPower(valAddrs[0], valConsPk1, valPower, *randomEVMAddress, true) + tstaking.CreateValidatorWithValPower(valAddrs[0], valConsPk1, valPower, true) // end block to bond validator staking.EndBlocker(ctx, app.StakingKeeper) @@ -147,11 +143,9 @@ func TestCalculateRewardsAfterManySlashes(t *testing.T) { valAddrs := simapp.ConvertAddrsToValAddrs(addr) // create validator with 50% commission - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) valPower := int64(100) tstaking.Commission = stakingtypes.NewCommissionRates(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) - tstaking.CreateValidatorWithValPower(valAddrs[0], valConsPk1, valPower, *randomEVMAddress, true) + tstaking.CreateValidatorWithValPower(valAddrs[0], valConsPk1, valPower, true) // end block to bond validator staking.EndBlocker(ctx, app.StakingKeeper) @@ -224,10 +218,8 @@ func TestCalculateRewardsMultiDelegator(t *testing.T) { valAddrs := simapp.ConvertAddrsToValAddrs(addr) // create validator with 50% commission - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) tstaking.Commission = stakingtypes.NewCommissionRates(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) - tstaking.CreateValidator(valAddrs[0], valConsPk1, sdk.NewInt(100), *randomEVMAddress, true) + tstaking.CreateValidator(valAddrs[0], valConsPk1, sdk.NewInt(100), true) // end block to bond validator staking.EndBlocker(ctx, app.StakingKeeper) @@ -298,11 +290,9 @@ func TestWithdrawDelegationRewardsBasic(t *testing.T) { app.AccountKeeper.SetModuleAccount(ctx, distrAcc) // create validator with 50% commission - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) power := int64(100) tstaking.Commission = stakingtypes.NewCommissionRates(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) - valTokens := tstaking.CreateValidatorWithValPower(valAddrs[0], valConsPk1, power, *randomEVMAddress, true) + valTokens := tstaking.CreateValidatorWithValPower(valAddrs[0], valConsPk1, power, true) // assert correct initial balance expTokens := balanceTokens.Sub(valTokens) @@ -330,7 +320,7 @@ func TestWithdrawDelegationRewardsBasic(t *testing.T) { require.Equal(t, uint64(2), app.DistrKeeper.GetValidatorHistoricalReferenceCount(ctx)) // withdraw rewards - _, err = app.DistrKeeper.WithdrawDelegationRewards(ctx, sdk.AccAddress(valAddrs[0]), valAddrs[0]) + _, err := app.DistrKeeper.WithdrawDelegationRewards(ctx, sdk.AccAddress(valAddrs[0]), valAddrs[0]) require.Nil(t, err) // historical count should still be 2 (added one record, cleared one) @@ -364,11 +354,9 @@ func TestCalculateRewardsAfterManySlashesInSameBlock(t *testing.T) { tstaking := teststaking.NewHelper(t, ctx, app.StakingKeeper) // create validator with 50% commission - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) valPower := int64(100) tstaking.Commission = stakingtypes.NewCommissionRates(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) - tstaking.CreateValidatorWithValPower(valAddrs[0], valConsPk1, valPower, *randomEVMAddress, true) + tstaking.CreateValidatorWithValPower(valAddrs[0], valConsPk1, valPower, true) // end block to bond validator staking.EndBlocker(ctx, app.StakingKeeper) @@ -434,11 +422,9 @@ func TestCalculateRewardsMultiDelegatorMultiSlash(t *testing.T) { valAddrs := simapp.ConvertAddrsToValAddrs(addr) // create validator with 50% commission - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) tstaking.Commission = stakingtypes.NewCommissionRates(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) valPower := int64(100) - tstaking.CreateValidatorWithValPower(valAddrs[0], valConsPk1, valPower, *randomEVMAddress, true) + tstaking.CreateValidatorWithValPower(valAddrs[0], valConsPk1, valPower, true) // end block to bond validator staking.EndBlocker(ctx, app.StakingKeeper) @@ -520,10 +506,8 @@ func TestCalculateRewardsMultiDelegatorMultWithdraw(t *testing.T) { tokens := sdk.DecCoins{sdk.NewDecCoinFromDec(sdk.DefaultBondDenom, sdk.NewDec(initial))} // create validator with 50% commission - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) tstaking.Commission = stakingtypes.NewCommissionRates(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) - tstaking.CreateValidator(valAddrs[0], valConsPk1, sdk.NewInt(100), *randomEVMAddress, true) + tstaking.CreateValidator(valAddrs[0], valConsPk1, sdk.NewInt(100), true) // end block to bond validator staking.EndBlocker(ctx, app.StakingKeeper) @@ -561,7 +545,7 @@ func TestCalculateRewardsMultiDelegatorMultWithdraw(t *testing.T) { app.DistrKeeper.AllocateTokensToValidator(ctx, val, tokens) // first delegator withdraws - _, err = app.DistrKeeper.WithdrawDelegationRewards(ctx, sdk.AccAddress(valAddrs[0]), valAddrs[0]) + _, err := app.DistrKeeper.WithdrawDelegationRewards(ctx, sdk.AccAddress(valAddrs[0]), valAddrs[0]) require.NoError(t, err) // second delegator withdraws @@ -668,11 +652,7 @@ func Test100PercentCommissionReward(t *testing.T) { // create validator with 100% commission tstaking.Commission = stakingtypes.NewCommissionRates(sdk.NewDecWithPrec(10, 1), sdk.NewDecWithPrec(10, 1), sdk.NewDec(0)) - - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - - tstaking.CreateValidator(valAddrs[0], valConsPk1, sdk.NewInt(100), *randomEVMAddress, true) + tstaking.CreateValidator(valAddrs[0], valConsPk1, sdk.NewInt(100), true) app.StakingKeeper.Delegation(ctx, sdk.AccAddress(valAddrs[0]), valAddrs[0]) // end block to bond validator diff --git a/x/distribution/keeper/grpc_query_test.go b/x/distribution/keeper/grpc_query_test.go index 591664aa6525..d51f4a28a0ba 100644 --- a/x/distribution/keeper/grpc_query_test.go +++ b/x/distribution/keeper/grpc_query_test.go @@ -344,9 +344,7 @@ func (suite *KeeperTestSuite) TestGRPCDelegationRewards() { tstaking := teststaking.NewHelper(suite.T(), ctx, app.StakingKeeper) tstaking.Commission = stakingtypes.NewCommissionRates(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) - randomEVMAddress, err := teststaking.RandomEVMAddress() - suite.NoError(err) - tstaking.CreateValidator(valAddrs[0], valConsPk1, sdk.NewInt(100), *randomEVMAddress, true) + tstaking.CreateValidator(valAddrs[0], valConsPk1, sdk.NewInt(100), true) staking.EndBlocker(ctx, app.StakingKeeper) ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) diff --git a/x/distribution/keeper/querier_test.go b/x/distribution/keeper/querier_test.go index fcc122cffae2..9e1fe7cccce5 100644 --- a/x/distribution/keeper/querier_test.go +++ b/x/distribution/keeper/querier_test.go @@ -175,9 +175,7 @@ func TestQueries(t *testing.T) { // test delegation rewards query tstaking := teststaking.NewHelper(t, ctx, app.StakingKeeper) tstaking.Commission = stakingtypes.NewCommissionRates(sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(5, 1), sdk.NewDec(0)) - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - tstaking.CreateValidator(valOpAddr1, valConsPk1, sdk.NewInt(100), *randomEVMAddress, true) + tstaking.CreateValidator(valOpAddr1, valConsPk1, sdk.NewInt(100), true) staking.EndBlocker(ctx, app.StakingKeeper) diff --git a/x/distribution/simulation/operations_test.go b/x/distribution/simulation/operations_test.go index 34fe6171f455..fdde63e43caa 100644 --- a/x/distribution/simulation/operations_test.go +++ b/x/distribution/simulation/operations_test.go @@ -4,8 +4,6 @@ import ( "math/rand" "testing" - "github.com/cosmos/cosmos-sdk/x/staking/teststaking" - "github.com/stretchr/testify/suite" abci "github.com/tendermint/tendermint/abci/types" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" @@ -257,10 +255,8 @@ func (suite *SimTestSuite) getTestingValidator(accounts []simtypes.Account, comm account := accounts[n] valPubKey := account.PubKey valAddr := sdk.ValAddress(account.PubKey.Address().Bytes()) - - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(err) - validator, err := stakingtypes.NewValidator(valAddr, valPubKey, stakingtypes.Description{}, *randomEVMAddress) + validator, err := stakingtypes.NewValidator(valAddr, valPubKey, stakingtypes. + Description{}) require.NoError(err) validator, err = validator.SetInitialCommission(commission) require.NoError(err) diff --git a/x/distribution/types/distribution.pb.go b/x/distribution/types/distribution.pb.go index a1d4e49c4c75..714525f71f09 100644 --- a/x/distribution/types/distribution.pb.go +++ b/x/distribution/types/distribution.pb.go @@ -8,7 +8,7 @@ import ( _ "github.com/cosmos/cosmos-proto" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/cosmos/gogoproto/gogoproto" + _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" io "io" math "math" diff --git a/x/distribution/types/genesis.pb.go b/x/distribution/types/genesis.pb.go index 7375cc4c0ae8..a1f2d7ba7b70 100644 --- a/x/distribution/types/genesis.pb.go +++ b/x/distribution/types/genesis.pb.go @@ -8,7 +8,7 @@ import ( _ "github.com/cosmos/cosmos-proto" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/cosmos/gogoproto/gogoproto" + _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" io "io" math "math" diff --git a/x/distribution/types/params.go b/x/distribution/types/params.go index 4dbd88db739f..a4ea2ddea005 100644 --- a/x/distribution/types/params.go +++ b/x/distribution/types/params.go @@ -26,8 +26,8 @@ func ParamKeyTable() paramtypes.KeyTable { func DefaultParams() Params { return Params{ CommunityTax: sdk.NewDecWithPrec(2, 2), // 2% - BaseProposerReward: sdk.ZeroDec(), // deprecated - BonusProposerReward: sdk.ZeroDec(), // deprecated + BaseProposerReward: sdk.NewDecWithPrec(1, 2), // 1% + BonusProposerReward: sdk.NewDecWithPrec(4, 2), // 4% WithdrawAddrEnabled: true, } } diff --git a/x/distribution/types/query.pb.go b/x/distribution/types/query.pb.go index 773d2482b97c..b6a794bfbf45 100644 --- a/x/distribution/types/query.pb.go +++ b/x/distribution/types/query.pb.go @@ -10,7 +10,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/cosmos/gogoproto/gogoproto" + _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" proto "github.com/gogo/protobuf/proto" _ "google.golang.org/genproto/googleapis/api/annotations" diff --git a/x/distribution/types/tx.pb.go b/x/distribution/types/tx.pb.go index ed24c8e59ac8..0eaca3be21c9 100644 --- a/x/distribution/types/tx.pb.go +++ b/x/distribution/types/tx.pb.go @@ -10,7 +10,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/cosmos-sdk/types/msgservice" - _ "github.com/cosmos/gogoproto/gogoproto" + _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" proto "github.com/gogo/protobuf/proto" grpc "google.golang.org/grpc" diff --git a/x/evidence/keeper/infraction_test.go b/x/evidence/keeper/infraction_test.go index a22b2f239e56..4c7368b1df7c 100644 --- a/x/evidence/keeper/infraction_test.go +++ b/x/evidence/keeper/infraction_test.go @@ -16,11 +16,9 @@ func (suite *KeeperTestSuite) TestHandleDoubleSign() { power := int64(100) stakingParams := suite.app.StakingKeeper.GetParams(ctx) operatorAddr, val := valAddresses[0], pubkeys[0] - randomEVMAddress, err := teststaking.RandomEVMAddress() - suite.NoError(err) tstaking := teststaking.NewHelper(suite.T(), ctx, suite.app.StakingKeeper) - selfDelegation := tstaking.CreateValidatorWithValPower(operatorAddr, val, power, *randomEVMAddress, true) + selfDelegation := tstaking.CreateValidatorWithValPower(operatorAddr, val, power, true) // execute end-blocker and verify validator attributes staking.EndBlocker(ctx, suite.app.StakingKeeper) @@ -84,11 +82,9 @@ func (suite *KeeperTestSuite) TestHandleDoubleSign_TooOld() { power := int64(100) stakingParams := suite.app.StakingKeeper.GetParams(ctx) operatorAddr, val := valAddresses[0], pubkeys[0] - randomEVMAddress, err := teststaking.RandomEVMAddress() - suite.NoError(err) tstaking := teststaking.NewHelper(suite.T(), ctx, suite.app.StakingKeeper) - amt := tstaking.CreateValidatorWithValPower(operatorAddr, val, power, *randomEVMAddress, true) + amt := tstaking.CreateValidatorWithValPower(operatorAddr, val, power, true) // execute end-blocker and verify validator attributes staking.EndBlocker(ctx, suite.app.StakingKeeper) diff --git a/x/evidence/types/evidence.pb.go b/x/evidence/types/evidence.pb.go index 1a41c566473e..52189e758405 100644 --- a/x/evidence/types/evidence.pb.go +++ b/x/evidence/types/evidence.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/cosmos/cosmos-proto" - _ "github.com/cosmos/gogoproto/gogoproto" + _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "google.golang.org/protobuf/types/known/timestamppb" diff --git a/x/evidence/types/query.pb.go b/x/evidence/types/query.pb.go index c693ac6b814d..e084ea29c899 100644 --- a/x/evidence/types/query.pb.go +++ b/x/evidence/types/query.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" types "github.com/cosmos/cosmos-sdk/codec/types" query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/cosmos/gogoproto/gogoproto" + _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" proto "github.com/gogo/protobuf/proto" github_com_tendermint_tendermint_libs_bytes "github.com/tendermint/tendermint/libs/bytes" diff --git a/x/evidence/types/tx.pb.go b/x/evidence/types/tx.pb.go index 5e3328e4769e..edae6d9b1c89 100644 --- a/x/evidence/types/tx.pb.go +++ b/x/evidence/types/tx.pb.go @@ -10,7 +10,7 @@ import ( _ "github.com/cosmos/cosmos-proto" types "github.com/cosmos/cosmos-sdk/codec/types" _ "github.com/cosmos/cosmos-sdk/types/msgservice" - _ "github.com/cosmos/gogoproto/gogoproto" + _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" proto "github.com/gogo/protobuf/proto" grpc "google.golang.org/grpc" diff --git a/x/genutil/client/cli/gentx.go b/x/genutil/client/cli/gentx.go index 06890976a886..4880fa375503 100644 --- a/x/genutil/client/cli/gentx.go +++ b/x/genutil/client/cli/gentx.go @@ -51,8 +51,7 @@ $ %s gentx my-key-name 1000000stake --home=/path/to/home/dir --keyring-backend=o --commission-rate=0.07 \ --details="..." \ --security-contact="..." \ - --website="..." \ - --evm-address="..." + --website="..." `, defaultsDesc, version.AppName, ), RunE: func(cmd *cobra.Command, args []string) error { @@ -110,18 +109,8 @@ $ %s gentx my-key-name 1000000stake --home=/path/to/home/dir --keyring-backend=o moniker = m } - evmAddress, err := cmd.Flags().GetString(flags.FlagEVMAddress) - if err != nil { - return errors.Wrapf(err, "failed to get the EVM address") - } - // set flags for creating a gentx - createValCfg, err := cli.PrepareConfigForTxCreateValidator( - cmd.Flags(), moniker, - nodeID, genDoc.ChainID, - valPubKey, - evmAddress, - ) + createValCfg, err := cli.PrepareConfigForTxCreateValidator(cmd.Flags(), moniker, nodeID, genDoc.ChainID, valPubKey) if err != nil { return errors.Wrap(err, "error creating configuration to create validator msg") } diff --git a/x/genutil/client/cli/init.go b/x/genutil/client/cli/init.go index 91d0255dc802..f3a186b77fe8 100644 --- a/x/genutil/client/cli/init.go +++ b/x/genutil/client/cli/init.go @@ -163,10 +163,6 @@ func InitCmd(mbm module.BasicManager, defaultNodeHome string) *cobra.Command { genDoc.Validators = nil genDoc.AppState = appState - if serverCtx.DefaultConsensusParams != nil { - genDoc.ConsensusParams = serverCtx.DefaultConsensusParams - } - if err = genutil.ExportGenesisFile(genDoc, genFile); err != nil { return errors.Wrap(err, "Failed to export genesis file") } diff --git a/x/genutil/client/cli/init_test.go b/x/genutil/client/cli/init_test.go index 058c088565a2..705af61cace3 100644 --- a/x/genutil/client/cli/init_test.go +++ b/x/genutil/client/cli/init_test.go @@ -14,7 +14,6 @@ import ( abci_server "github.com/tendermint/tendermint/abci/server" "github.com/tendermint/tendermint/libs/cli" "github.com/tendermint/tendermint/libs/log" - coretypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" @@ -284,43 +283,6 @@ func TestInitConfig(t *testing.T) { require.Contains(t, out, "\"chain_id\": \"foo\"") } -func TestInitWithConsensusParams(t *testing.T) { - home := t.TempDir() - logger := log.NewNopLogger() - cfg, err := genutiltest.CreateDefaultTendermintConfig(home) - require.NoError(t, err) - - serverCtx := server.NewContext(viper.New(), cfg, logger) - - // set new default consensus params - cps := coretypes.DefaultConsensusParams() - cps.Block.MaxBytes = 100000000 - cps.Block.MaxGas = 420420420 - serverCtx.DefaultConsensusParams = cps - - interfaceRegistry := types.NewInterfaceRegistry() - marshaler := codec.NewProtoCodec(interfaceRegistry) - clientCtx := client.Context{}. - WithCodec(marshaler). - WithLegacyAmino(makeCodec()). - WithHomeDir(home) - - ctx := context.Background() - ctx = context.WithValue(ctx, client.ClientContextKey, &clientCtx) - ctx = context.WithValue(ctx, server.ServerContextKey, serverCtx) - - cmd := genutilcli.InitCmd(testMbm, home) - cmd.SetArgs([]string{"testnode"}) - - err = cmd.ExecuteContext(ctx) - require.NoError(t, err) - - genDoc, err := coretypes.GenesisDocFromFile(cfg.GenesisFile()) - require.NoError(t, err) - - require.Equal(t, genDoc.ConsensusParams, cps) -} - // custom tx codec func makeCodec() *codec.LegacyAmino { cdc := codec.NewLegacyAmino() diff --git a/x/genutil/client/cli/migrate.go b/x/genutil/client/cli/migrate.go index c16fcb843d06..33b2d0c760b2 100644 --- a/x/genutil/client/cli/migrate.go +++ b/x/genutil/client/cli/migrate.go @@ -62,73 +62,7 @@ $ %s migrate v0.36 /path/to/genesis.json --chain-id=cosmoshub-3 --genesis-time=2 `, version.AppName), Args: cobra.ExactArgs(2), RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - var err error - - target := args[0] - importGenesis := args[1] - - genDoc, err := validateGenDoc(importGenesis) - if err != nil { - return err - } - - // Since some default values are valid values, we just print to - // make sure the user didn't forget to update these values. - if genDoc.ConsensusParams.Evidence.MaxBytes == 0 { - fmt.Printf("Warning: consensus_params.evidence.max_bytes is set to 0. If this is"+ - " deliberate, feel free to ignore this warning. If not, please have a look at the chain"+ - " upgrade guide at %s.\n", chainUpgradeGuide) - } - - var initialState types.AppMap - if err := json.Unmarshal(genDoc.AppState, &initialState); err != nil { - return errors.Wrap(err, "failed to JSON unmarshal initial genesis state") - } - - migrationFunc := GetMigrationCallback(target) - if migrationFunc == nil { - return fmt.Errorf("unknown migration function for version: %s", target) - } - - // TODO: handler error from migrationFunc call - newGenState := migrationFunc(initialState, clientCtx) - - genDoc.AppState, err = json.Marshal(newGenState) - if err != nil { - return errors.Wrap(err, "failed to JSON marshal migrated genesis state") - } - - genesisTime, _ := cmd.Flags().GetString(flagGenesisTime) - if genesisTime != "" { - var t time.Time - - err := t.UnmarshalText([]byte(genesisTime)) - if err != nil { - return errors.Wrap(err, "failed to unmarshal genesis time") - } - - genDoc.GenesisTime = t - } - - chainID, _ := cmd.Flags().GetString(flags.FlagChainID) - if chainID != "" { - genDoc.ChainID = chainID - } - - bz, err := tmjson.Marshal(genDoc) - if err != nil { - return errors.Wrap(err, "failed to marshal genesis doc") - } - - sortedBz, err := sdk.SortJSON(bz) - if err != nil { - return errors.Wrap(err, "failed to sort JSON genesis doc") - } - - cmd.Println(string(sortedBz)) - return nil + return MigrateHandler(cmd, args, migrationMap) }, } @@ -137,3 +71,75 @@ $ %s migrate v0.36 /path/to/genesis.json --chain-id=cosmoshub-3 --genesis-time=2 return cmd } + +// MigrateHandler handles the migration command with a migration map as input, +// returning an error upon failure. +func MigrateHandler(cmd *cobra.Command, args []string, migrations types.MigrationMap) error { + clientCtx := client.GetClientContextFromCmd(cmd) + + var err error + + target := args[0] + importGenesis := args[1] + + genDoc, err := validateGenDoc(importGenesis) + if err != nil { + return err + } + + // Since some default values are valid values, we just print to + // make sure the user didn't forget to update these values. + if genDoc.ConsensusParams.Evidence.MaxBytes == 0 { + fmt.Printf("Warning: consensus_params.evidence.max_bytes is set to 0. If this is"+ + " deliberate, feel free to ignore this warning. If not, please have a look at the chain"+ + " upgrade guide at %s.\n", chainUpgradeGuide) + } + + var initialState types.AppMap + if err := json.Unmarshal(genDoc.AppState, &initialState); err != nil { + return errors.Wrap(err, "failed to JSON unmarshal initial genesis state") + } + + migrationFunc := migrations[target] + if migrationFunc == nil { + return fmt.Errorf("unknown migration function for version: %s", target) + } + + // TODO: handler error from migrationFunc call + newGenState := migrationFunc(initialState, clientCtx) + + genDoc.AppState, err = json.Marshal(newGenState) + if err != nil { + return errors.Wrap(err, "failed to JSON marshal migrated genesis state") + } + + genesisTime, _ := cmd.Flags().GetString(flagGenesisTime) + if genesisTime != "" { + var t time.Time + + err := t.UnmarshalText([]byte(genesisTime)) + if err != nil { + return errors.Wrap(err, "failed to unmarshal genesis time") + } + + genDoc.GenesisTime = t + } + + chainID, _ := cmd.Flags().GetString(flags.FlagChainID) + if chainID != "" { + genDoc.ChainID = chainID + } + + bz, err := tmjson.Marshal(genDoc) + if err != nil { + return errors.Wrap(err, "failed to marshal genesis doc") + } + + sortedBz, err := sdk.SortJSON(bz) + if err != nil { + return errors.Wrap(err, "failed to sort JSON genesis doc") + } + + cmd.Println(string(sortedBz)) + return nil +} diff --git a/x/genutil/client/testutil/suite.go b/x/genutil/client/testutil/suite.go index 42458448e019..755d20154eb3 100644 --- a/x/genutil/client/testutil/suite.go +++ b/x/genutil/client/testutil/suite.go @@ -72,7 +72,6 @@ func (s *IntegrationTestSuite) TestGenTxCmd() { fmt.Sprintf("--%s=%s", flags.FlagChainID, s.network.Config.ChainID), val.Moniker, amount.String(), - fmt.Sprintf("--%s=%s", flags.FlagEVMAddress, val.EVMAddr.Hex()), }, expError: false, }, @@ -93,7 +92,6 @@ func (s *IntegrationTestSuite) TestGenTxCmd() { fmt.Sprintf("--%s={\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"BOIkjkFruMpfOFC9oNPhiJGfmY2pHF/gwHdLDLnrnS0=\"}", stakingcli.FlagPubKey), val.Moniker, amount.String(), - fmt.Sprintf("--%s=%s", flags.FlagEVMAddress, val.EVMAddr.Hex()), }, expError: false, }, diff --git a/x/genutil/gentx_test.go b/x/genutil/gentx_test.go index ce4f62a66a42..be286051321d 100644 --- a/x/genutil/gentx_test.go +++ b/x/genutil/gentx_test.go @@ -7,8 +7,6 @@ import ( "testing" "time" - "github.com/cosmos/cosmos-sdk/x/staking/teststaking" - "github.com/stretchr/testify/suite" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" @@ -31,12 +29,8 @@ var ( pk2 = priv2.PubKey() addr1 = sdk.AccAddress(pk1.Address()) addr2 = sdk.AccAddress(pk2.Address()) - - evmAddr1, _ = teststaking.RandomEVMAddress() - evmAddr2, _ = teststaking.RandomEVMAddress() - - desc = stakingtypes.NewDescription("testname", "", "", "", "") - comm = stakingtypes.CommissionRates{} + desc = stakingtypes.NewDescription("testname", "", "", "", "") + comm = stakingtypes.CommissionRates{} ) // GenTxTestSuite is a test suite to be used with gentx tests. @@ -61,14 +55,10 @@ func (suite *GenTxTestSuite) SetupTest() { amount := sdk.NewInt64Coin(sdk.DefaultBondDenom, 50) one := sdk.OneInt() suite.msg1, err = stakingtypes.NewMsgCreateValidator( - sdk.ValAddress(pk1.Address()), pk1, amount, desc, comm, one, - *evmAddr1, - ) + sdk.ValAddress(pk1.Address()), pk1, amount, desc, comm, one) suite.NoError(err) suite.msg2, err = stakingtypes.NewMsgCreateValidator( - sdk.ValAddress(pk2.Address()), pk1, amount, desc, comm, one, - *evmAddr2, - ) + sdk.ValAddress(pk2.Address()), pk1, amount, desc, comm, one) suite.NoError(err) } diff --git a/x/genutil/types/genesis.pb.go b/x/genutil/types/genesis.pb.go index 916b7d36998b..e1cd6af76145 100644 --- a/x/genutil/types/genesis.pb.go +++ b/x/genutil/types/genesis.pb.go @@ -6,7 +6,7 @@ package types import ( encoding_json "encoding/json" fmt "fmt" - _ "github.com/cosmos/gogoproto/gogoproto" + _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" io "io" math "math" diff --git a/x/genutil/types/genesis_state_test.go b/x/genutil/types/genesis_state_test.go index 76b8a24e5a24..9c225fd3f7c4 100644 --- a/x/genutil/types/genesis_state_test.go +++ b/x/genutil/types/genesis_state_test.go @@ -4,8 +4,6 @@ import ( "encoding/json" "testing" - "github.com/cosmos/cosmos-sdk/x/staking/teststaking" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -19,11 +17,8 @@ import ( ) var ( - pk1 = ed25519.GenPrivKey().PubKey() - evmAddr1, _ = teststaking.RandomEVMAddress() - - pk2 = ed25519.GenPrivKey().PubKey() - evmAddr2, _ = teststaking.RandomEVMAddress() + pk1 = ed25519.GenPrivKey().PubKey() + pk2 = ed25519.GenPrivKey().PubKey() ) func TestNetGenesisState(t *testing.T) { @@ -43,15 +38,11 @@ func TestValidateGenesisMultipleMessages(t *testing.T) { comm := stakingtypes.CommissionRates{} msg1, err := stakingtypes.NewMsgCreateValidator(sdk.ValAddress(pk1.Address()), pk1, - sdk.NewInt64Coin(sdk.DefaultBondDenom, 50), desc, comm, sdk.OneInt(), - *evmAddr1, - ) + sdk.NewInt64Coin(sdk.DefaultBondDenom, 50), desc, comm, sdk.OneInt()) require.NoError(t, err) msg2, err := stakingtypes.NewMsgCreateValidator(sdk.ValAddress(pk2.Address()), pk2, - sdk.NewInt64Coin(sdk.DefaultBondDenom, 50), desc, comm, sdk.OneInt(), - *evmAddr2, - ) + sdk.NewInt64Coin(sdk.DefaultBondDenom, 50), desc, comm, sdk.OneInt()) require.NoError(t, err) txGen := simapp.MakeTestEncodingConfig().TxConfig @@ -68,7 +59,7 @@ func TestValidateGenesisMultipleMessages(t *testing.T) { func TestValidateGenesisBadMessage(t *testing.T) { desc := stakingtypes.NewDescription("testname", "", "", "", "") - msg1 := stakingtypes.NewMsgEditValidator(sdk.ValAddress(pk1.Address()), desc, nil, nil, nil) + msg1 := stakingtypes.NewMsgEditValidator(sdk.ValAddress(pk1.Address()), desc, nil, nil) txGen := simapp.MakeTestEncodingConfig().TxConfig txBuilder := txGen.NewTxBuilder() diff --git a/x/gov/abci_test.go b/x/gov/abci_test.go index eeb0e1d15bd7..ad789edeec89 100644 --- a/x/gov/abci_test.go +++ b/x/gov/abci_test.go @@ -4,8 +4,6 @@ import ( "testing" "time" - "github.com/cosmos/cosmos-sdk/x/staking/teststaking" - "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" @@ -376,12 +374,9 @@ func createValidators(t *testing.T, stakingMsgSvr stakingtypes.MsgServer, ctx sd for i := 0; i < len(addrs); i++ { valTokens := sdk.TokensFromConsensusPower(powerAmt[i], sdk.DefaultPowerReduction) - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) valCreateMsg, err := stakingtypes.NewMsgCreateValidator( addrs[i], pubkeys[i], sdk.NewCoin(sdk.DefaultBondDenom, valTokens), TestDescription, TestCommissionRates, sdk.OneInt(), - *randomEVMAddress, ) require.NoError(t, err) res, err := stakingMsgSvr.CreateValidator(sdk.WrapSDKContext(ctx), valCreateMsg) diff --git a/x/gov/keeper/common_test.go b/x/gov/keeper/common_test.go index 591296db65f7..e5e5bf183109 100644 --- a/x/gov/keeper/common_test.go +++ b/x/gov/keeper/common_test.go @@ -3,8 +3,6 @@ package keeper_test import ( "testing" - "github.com/cosmos/cosmos-sdk/x/staking/teststaking" - "github.com/stretchr/testify/require" "github.com/cosmos/cosmos-sdk/simapp" @@ -52,19 +50,11 @@ func createValidators(t *testing.T, ctx sdk.Context, app *simapp.SimApp, powers app.GetSubspace(stakingtypes.ModuleName), ) - randomEVMAddress1, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - val1, err := stakingtypes.NewValidator(valAddrs[0], pks[0], stakingtypes.Description{}, *randomEVMAddress1) - require.NoError(t, err) - - randomEVMAddress2, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - val2, err := stakingtypes.NewValidator(valAddrs[1], pks[1], stakingtypes.Description{}, *randomEVMAddress2) + val1, err := stakingtypes.NewValidator(valAddrs[0], pks[0], stakingtypes.Description{}) require.NoError(t, err) - - randomEVMAddress3, err := teststaking.RandomEVMAddress() + val2, err := stakingtypes.NewValidator(valAddrs[1], pks[1], stakingtypes.Description{}) require.NoError(t, err) - val3, err := stakingtypes.NewValidator(valAddrs[2], pks[2], stakingtypes.Description{}, *randomEVMAddress3) + val3, err := stakingtypes.NewValidator(valAddrs[2], pks[2], stakingtypes.Description{}) require.NoError(t, err) app.StakingKeeper.SetValidator(ctx, val1) diff --git a/x/gov/keeper/vote.go b/x/gov/keeper/vote.go index 4e2436ff84b5..8fa690eeca87 100644 --- a/x/gov/keeper/vote.go +++ b/x/gov/keeper/vote.go @@ -38,6 +38,7 @@ func (keeper Keeper) AddVote(ctx sdk.Context, proposalID uint64, voterAddr sdk.A ctx.EventManager().EmitEvent( sdk.NewEvent( types.EventTypeProposalVote, + sdk.NewAttribute(types.AttributeKeyVoter, voterAddr.String()), sdk.NewAttribute(types.AttributeKeyOption, options.String()), sdk.NewAttribute(types.AttributeKeyProposalID, fmt.Sprintf("%d", proposalID)), ), diff --git a/x/gov/migrations/v046/store.go b/x/gov/migrations/v046/store.go index 9fbcf9f3413d..5da5d253fe47 100644 --- a/x/gov/migrations/v046/store.go +++ b/x/gov/migrations/v046/store.go @@ -93,17 +93,3 @@ func MigrateStore(ctx sdk.Context, storeKey storetypes.StoreKey, cdc codec.Binar return migrateProposals(store, cdc) } - -// Migrate_V046_4_To_V046_5 is a helper function to migrate chains from <=v0.46.6 -// to v0.46.7 ONLY. -// -// IMPORTANT: Please do not use this function if you are upgrading to v0.46 -// from <=v0.45. -// -// This function migrates the store in-place by fixing the gov votes weight to -// be stored as decimals strings (instead of the sdk.Dec BigInt representation). -// -// The store is expected to be the gov store, and not any prefixed substore. -func Migrate_V046_6_To_V046_7(store sdk.KVStore, cdc codec.BinaryCodec) error { - return migrateVotes(store, cdc) -} diff --git a/x/gov/spec/03_messages.md b/x/gov/spec/03_messages.md index 595aa0b75137..405931da5070 100644 --- a/x/gov/spec/03_messages.md +++ b/x/gov/spec/03_messages.md @@ -16,8 +16,6 @@ must be registered in the app's `MsgServiceRouter`. Each of these messages must have one signer, namely the gov module account. And finally, the metadata length must not be larger than the `maxMetadataLen` config passed into the gov keeper. -NOTE DIFF FROM UPSTREAM: All proposals must have at least one `sdk.Msg` in the `messages` field. - **State modifications:** * Generate new `proposalID` diff --git a/x/gov/types/events.go b/x/gov/types/events.go index 7217e7e38793..9468c0fc9862 100644 --- a/x/gov/types/events.go +++ b/x/gov/types/events.go @@ -10,6 +10,7 @@ const ( EventTypeSignalProposal = "signal_proposal" AttributeKeyProposalResult = "proposal_result" + AttributeKeyVoter = "voter" AttributeKeyOption = "option" AttributeKeyProposalID = "proposal_id" AttributeKeyProposalMessages = "proposal_messages" // Msg type_urls in the proposal diff --git a/x/gov/types/v1/gov.pb.go b/x/gov/types/v1/gov.pb.go index d2d4a7449021..36b207454fff 100644 --- a/x/gov/types/v1/gov.pb.go +++ b/x/gov/types/v1/gov.pb.go @@ -8,7 +8,7 @@ import ( _ "github.com/cosmos/cosmos-proto" types1 "github.com/cosmos/cosmos-sdk/codec/types" types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/cosmos/gogoproto/gogoproto" + _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "google.golang.org/protobuf/types/known/durationpb" diff --git a/x/gov/types/v1/msgs.go b/x/gov/types/v1/msgs.go index e2a424cd3095..dd83bf5dfa47 100644 --- a/x/gov/types/v1/msgs.go +++ b/x/gov/types/v1/msgs.go @@ -61,9 +61,9 @@ func (m MsgSubmitProposal) ValidateBasic() error { return sdkerrors.Wrap(sdkerrors.ErrInvalidCoins, deposit.String()) } - // Check if no Messages are proposed - if len(m.Messages) == 0 { - return sdkerrors.Wrap(types.ErrNoProposalMsgs, "Msgs length must be non-zero") + // Check that either metadata or Msgs length is non nil. + if len(m.Messages) == 0 && len(m.Metadata) == 0 { + return sdkerrors.Wrap(types.ErrNoProposalMsgs, "either metadata or Msgs length must be non-nil") } msgs, err := m.GetMsgs() diff --git a/x/gov/types/v1/msgs_test.go b/x/gov/types/v1/msgs_test.go index e134c003d7f4..ad53ac5bf43e 100644 --- a/x/gov/types/v1/msgs_test.go +++ b/x/gov/types/v1/msgs_test.go @@ -6,7 +6,7 @@ import ( "github.com/stretchr/testify/require" sdk "github.com/cosmos/cosmos-sdk/types" - v1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + "github.com/cosmos/cosmos-sdk/x/gov/types/v1" "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" ) @@ -151,7 +151,7 @@ func TestMsgSubmitProposal_ValidateBasic(t *testing.T) { {"invalid addr", "", coinsPos, []sdk.Msg{msg1}, metadata, true}, {"empty msgs and metadata", addrs[0].String(), coinsPos, nil, "", true}, {"invalid msg", addrs[0].String(), coinsPos, []sdk.Msg{msg1, msg2}, metadata, true}, - {"invalid with no Msg", addrs[0].String(), coinsPos, nil, metadata, true}, + {"valid with no Msg", addrs[0].String(), coinsPos, nil, metadata, false}, {"valid with no metadata", addrs[0].String(), coinsPos, []sdk.Msg{msg1}, "", false}, {"valid with everything", addrs[0].String(), coinsPos, []sdk.Msg{msg1}, metadata, false}, } diff --git a/x/gov/types/v1/tx.pb.go b/x/gov/types/v1/tx.pb.go index c27e02f763e5..25696059d988 100644 --- a/x/gov/types/v1/tx.pb.go +++ b/x/gov/types/v1/tx.pb.go @@ -10,7 +10,7 @@ import ( types "github.com/cosmos/cosmos-sdk/codec/types" types1 "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/cosmos-sdk/types/msgservice" - _ "github.com/cosmos/gogoproto/gogoproto" + _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" proto "github.com/gogo/protobuf/proto" grpc "google.golang.org/grpc" diff --git a/x/gov/types/v1beta1/genesis.pb.go b/x/gov/types/v1beta1/genesis.pb.go index e46a8b037c18..0efefab9c4cf 100644 --- a/x/gov/types/v1beta1/genesis.pb.go +++ b/x/gov/types/v1beta1/genesis.pb.go @@ -5,7 +5,7 @@ package v1beta1 import ( fmt "fmt" - _ "github.com/cosmos/gogoproto/gogoproto" + _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" io "io" math "math" diff --git a/x/gov/types/v1beta1/gov.pb.go b/x/gov/types/v1beta1/gov.pb.go index c8a54b519ad7..3fc60128b151 100644 --- a/x/gov/types/v1beta1/gov.pb.go +++ b/x/gov/types/v1beta1/gov.pb.go @@ -9,7 +9,7 @@ import ( types1 "github.com/cosmos/cosmos-sdk/codec/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/cosmos/gogoproto/gogoproto" + _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "google.golang.org/protobuf/types/known/durationpb" diff --git a/x/gov/types/v1beta1/query.pb.go b/x/gov/types/v1beta1/query.pb.go index 34298c8620e1..d50d02d22af8 100644 --- a/x/gov/types/v1beta1/query.pb.go +++ b/x/gov/types/v1beta1/query.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-proto" query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/cosmos/gogoproto/gogoproto" + _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" proto "github.com/gogo/protobuf/proto" _ "google.golang.org/genproto/googleapis/api/annotations" diff --git a/x/gov/types/v1beta1/tx.pb.go b/x/gov/types/v1beta1/tx.pb.go index a7a6c51d9b7b..c77485922895 100644 --- a/x/gov/types/v1beta1/tx.pb.go +++ b/x/gov/types/v1beta1/tx.pb.go @@ -11,7 +11,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types1 "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/cosmos-sdk/types/msgservice" - _ "github.com/cosmos/gogoproto/gogoproto" + _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" proto "github.com/gogo/protobuf/proto" grpc "google.golang.org/grpc" diff --git a/x/slashing/abci_test.go b/x/slashing/abci_test.go index 644c49ecd777..f2958d4d3b62 100644 --- a/x/slashing/abci_test.go +++ b/x/slashing/abci_test.go @@ -27,9 +27,7 @@ func TestBeginBlocker(t *testing.T) { // bond the validator power := int64(100) - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - amt := tstaking.CreateValidatorWithValPower(addr, pk, power, *randomEVMAddress, true) + amt := tstaking.CreateValidatorWithValPower(addr, pk, power, true) staking.EndBlocker(ctx, app.StakingKeeper) require.Equal( t, app.BankKeeper.GetAllBalances(ctx, sdk.AccAddress(addr)), diff --git a/x/slashing/app_test.go b/x/slashing/app_test.go index f18706fe0c53..e9ece2c690a1 100644 --- a/x/slashing/app_test.go +++ b/x/slashing/app_test.go @@ -4,8 +4,6 @@ import ( "errors" "testing" - "github.com/cosmos/cosmos-sdk/x/staking/teststaking" - "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" @@ -65,11 +63,8 @@ func TestSlashingMsgs(t *testing.T) { description := stakingtypes.NewDescription("foo_moniker", "", "", "", "") commission := stakingtypes.NewCommissionRates(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()) - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) createValidatorMsg, err := stakingtypes.NewMsgCreateValidator( sdk.ValAddress(addr1), valKey.PubKey(), bondCoin, description, commission, sdk.OneInt(), - *randomEVMAddress, ) require.NoError(t, err) diff --git a/x/slashing/keeper/keeper_test.go b/x/slashing/keeper/keeper_test.go index acef0b2847f0..03869e3a74c9 100644 --- a/x/slashing/keeper/keeper_test.go +++ b/x/slashing/keeper/keeper_test.go @@ -31,9 +31,7 @@ func TestUnJailNotBonded(t *testing.T) { // create max (5) validators all with the same power for i := uint32(0); i < p.MaxValidators; i++ { addr, val := valAddrs[i], pks[i] - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - tstaking.CreateValidatorWithValPower(addr, val, 100, *randomEVMAddress, true) + tstaking.CreateValidatorWithValPower(addr, val, 100, true) } staking.EndBlocker(ctx, app.StakingKeeper) @@ -42,9 +40,7 @@ func TestUnJailNotBonded(t *testing.T) { // create a 6th validator with less power than the cliff validator (won't be bonded) addr, val := valAddrs[5], pks[5] amt := app.StakingKeeper.TokensFromConsensusPower(ctx, 50) - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - msg := tstaking.CreateValidatorMsg(addr, val, amt, *randomEVMAddress) + msg := tstaking.CreateValidatorMsg(addr, val, amt) msg.MinSelfDelegation = amt res, err := tstaking.CreateValidatorWithMsg(sdk.WrapSDKContext(ctx), msg) require.NoError(t, err) @@ -95,11 +91,9 @@ func TestHandleNewValidator(t *testing.T) { addr, val := valAddrs[0], pks[0] tstaking := teststaking.NewHelper(t, ctx, app.StakingKeeper) ctx = ctx.WithBlockHeight(app.SlashingKeeper.SignedBlocksWindow(ctx) + 1) - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) // Validator created - amt := tstaking.CreateValidatorWithValPower(addr, val, 100, *randomEVMAddress, true) + amt := tstaking.CreateValidatorWithValPower(addr, val, 100, true) staking.EndBlocker(ctx, app.StakingKeeper) require.Equal( @@ -142,11 +136,9 @@ func TestHandleAlreadyJailed(t *testing.T) { pks := simapp.CreateTestPubKeys(1) addr, val := valAddrs[0], pks[0] power := int64(100) - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) tstaking := teststaking.NewHelper(t, ctx, app.StakingKeeper) - amt := tstaking.CreateValidatorWithValPower(addr, val, power, *randomEVMAddress, true) + amt := tstaking.CreateValidatorWithValPower(addr, val, power, true) staking.EndBlocker(ctx, app.StakingKeeper) @@ -205,10 +197,8 @@ func TestValidatorDippingInAndOut(t *testing.T) { consAddr := sdk.ConsAddress(addr) tstaking := teststaking.NewHelper(t, ctx, app.StakingKeeper) valAddr := sdk.ValAddress(addr) - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - tstaking.CreateValidatorWithValPower(valAddr, val, power, *randomEVMAddress, true) + tstaking.CreateValidatorWithValPower(valAddr, val, power, true) validatorUpdates := staking.EndBlocker(ctx, app.StakingKeeper) require.Equal(t, 2, len(validatorUpdates)) tstaking.CheckValidator(valAddr, stakingtypes.Bonded, false) @@ -221,9 +211,7 @@ func TestValidatorDippingInAndOut(t *testing.T) { } // kick first validator out of validator set - randomEVMAddress2, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - tstaking.CreateValidatorWithValPower(sdk.ValAddress(pks[1].Address()), pks[1], power+1, *randomEVMAddress2, true) + tstaking.CreateValidatorWithValPower(sdk.ValAddress(pks[1].Address()), pks[1], power+1, true) validatorUpdates = staking.EndBlocker(ctx, app.StakingKeeper) require.Equal(t, 2, len(validatorUpdates)) tstaking.CheckValidator(sdk.ValAddress(pks[1].Address()), stakingtypes.Bonded, false) diff --git a/x/slashing/simulation/operations_test.go b/x/slashing/simulation/operations_test.go index f8561ae5cd53..a0dbffb1f360 100644 --- a/x/slashing/simulation/operations_test.go +++ b/x/slashing/simulation/operations_test.go @@ -5,8 +5,6 @@ import ( "testing" "time" - "github.com/cosmos/cosmos-sdk/x/staking/teststaking" - "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" @@ -159,9 +157,7 @@ func getTestingValidator(t *testing.T, app *simapp.SimApp, ctx sdk.Context, acco account := accounts[n] valPubKey := account.ConsKey.PubKey() valAddr := sdk.ValAddress(account.PubKey.Address().Bytes()) - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator, err := stakingtypes.NewValidator(valAddr, valPubKey, stakingtypes.Description{}, *randomEVMAddress) + validator, err := stakingtypes.NewValidator(valAddr, valPubKey, stakingtypes.Description{}) require.NoError(t, err) validator, err = validator.SetInitialCommission(commission) require.NoError(t, err) diff --git a/x/slashing/types/genesis.pb.go b/x/slashing/types/genesis.pb.go index 12e534334f16..43240e134db5 100644 --- a/x/slashing/types/genesis.pb.go +++ b/x/slashing/types/genesis.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/cosmos/cosmos-proto" - _ "github.com/cosmos/gogoproto/gogoproto" + _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" io "io" math "math" diff --git a/x/slashing/types/query.pb.go b/x/slashing/types/query.pb.go index da4d77173152..76b0dbf79bd3 100644 --- a/x/slashing/types/query.pb.go +++ b/x/slashing/types/query.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-proto" query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/cosmos/gogoproto/gogoproto" + _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" proto "github.com/gogo/protobuf/proto" _ "google.golang.org/genproto/googleapis/api/annotations" diff --git a/x/slashing/types/slashing.pb.go b/x/slashing/types/slashing.pb.go index 056cc94b51d0..3a0e9448e37e 100644 --- a/x/slashing/types/slashing.pb.go +++ b/x/slashing/types/slashing.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-proto" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/cosmos/gogoproto/gogoproto" + _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "google.golang.org/protobuf/types/known/durationpb" diff --git a/x/slashing/types/tx.pb.go b/x/slashing/types/tx.pb.go index d207dd6dd87d..0ecb663dc21f 100644 --- a/x/slashing/types/tx.pb.go +++ b/x/slashing/types/tx.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-proto" _ "github.com/cosmos/cosmos-sdk/types/msgservice" - _ "github.com/cosmos/gogoproto/gogoproto" + _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" proto "github.com/gogo/protobuf/proto" grpc "google.golang.org/grpc" diff --git a/x/staking/app_test.go b/x/staking/app_test.go index 2d05f1682d01..5a3bd723cb9c 100644 --- a/x/staking/app_test.go +++ b/x/staking/app_test.go @@ -1,12 +1,8 @@ package staking_test import ( - "crypto/ecdsa" "testing" - "github.com/cosmos/cosmos-sdk/x/staking/types" - "github.com/ethereum/go-ethereum/crypto" - "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" @@ -15,6 +11,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + "github.com/cosmos/cosmos-sdk/x/staking/types" ) func checkValidator(t *testing.T, app *simapp.SimApp, addr sdk.ValAddress, expFound bool) types.Validator { @@ -65,15 +62,10 @@ func TestStakingMsgs(t *testing.T) { simapp.CheckBalance(t, app, addr1, sdk.Coins{genCoin}) simapp.CheckBalance(t, app, addr2, sdk.Coins{genCoin}) - evmPrivateKey, err := crypto.GenerateKey() - require.NoError(t, err) - orchEVMPublicKey := evmPrivateKey.Public().(*ecdsa.PublicKey) - evmAddr := crypto.PubkeyToAddress(*orchEVMPublicKey) - // create validator description := types.NewDescription("foo_moniker", "", "", "", "") createValidatorMsg, err := types.NewMsgCreateValidator( - sdk.ValAddress(addr1), valKey.PubKey(), bondCoin, description, commissionRates, sdk.OneInt(), evmAddr, + sdk.ValAddress(addr1), valKey.PubKey(), bondCoin, description, commissionRates, sdk.OneInt(), ) require.NoError(t, err) @@ -96,7 +88,7 @@ func TestStakingMsgs(t *testing.T) { // edit the validator description = types.NewDescription("bar_moniker", "", "", "", "") - editValidatorMsg := types.NewMsgEditValidator(sdk.ValAddress(addr1), description, nil, nil, nil) + editValidatorMsg := types.NewMsgEditValidator(sdk.ValAddress(addr1), description, nil, nil) header = tmproto.Header{Height: app.LastBlockHeight() + 1} _, _, err = simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{editValidatorMsg}, "", []uint64{0}, []uint64{1}, true, true, priv1) diff --git a/x/staking/bench_test.go b/x/staking/bench_test.go index 0121e1b09288..7705b6d3114f 100644 --- a/x/staking/bench_test.go +++ b/x/staking/bench_test.go @@ -29,10 +29,7 @@ func benchmarkValidateGenesis(b *testing.B, n int) { addressL, pubKeyL := makeRandomAddressesAndPublicKeys(n) for i := 0; i < n; i++ { addr, pubKey := addressL[i], pubKeyL[i] - randomEVMAddr, err := teststaking.RandomEVMAddress() - b.Error(err) - - validator := teststaking.NewValidator(b, addr, pubKey, *randomEVMAddr) + validator := teststaking.NewValidator(b, addr, pubKey) ni := int64(i + 1) validator.Tokens = sdk.NewInt(ni) validator.DelegatorShares = sdk.NewDec(ni) diff --git a/x/staking/client/cli/flags.go b/x/staking/client/cli/flags.go index c419112c4666..85879567a6af 100644 --- a/x/staking/client/cli/flags.go +++ b/x/staking/client/cli/flags.go @@ -1,7 +1,6 @@ package cli import ( - "github.com/cosmos/cosmos-sdk/client/flags" flag "github.com/spf13/pflag" "github.com/cosmos/cosmos-sdk/x/staking/types" @@ -81,13 +80,6 @@ func FlagSetPublicKey() *flag.FlagSet { return fs } -// FlagSetEVMAddress Returns the flagset for EVM address related operations. -func FlagSetEVMAddress() *flag.FlagSet { - fs := flag.NewFlagSet("", flag.ContinueOnError) - fs.String(flags.FlagEVMAddress, "", "The 0x EVM address of the orchestrator") - return fs -} - func flagSetDescriptionEdit() *flag.FlagSet { fs := flag.NewFlagSet("", flag.ContinueOnError) diff --git a/x/staking/client/cli/tx.go b/x/staking/client/cli/tx.go index fe6fc9c9f9aa..4f0c3e59bbde 100644 --- a/x/staking/client/cli/tx.go +++ b/x/staking/client/cli/tx.go @@ -18,7 +18,6 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/version" "github.com/cosmos/cosmos-sdk/x/staking/types" - "github.com/ethereum/go-ethereum/common" ) // default values @@ -80,7 +79,6 @@ func NewCreateValidatorCmd() *cobra.Command { cmd.Flags().AddFlagSet(flagSetDescriptionCreate()) cmd.Flags().AddFlagSet(FlagSetCommissionCreate()) cmd.Flags().AddFlagSet(FlagSetMinSelfDelegation()) - cmd.Flags().AddFlagSet(FlagSetEVMAddress()) cmd.Flags().String(FlagIP, "", fmt.Sprintf("The node's public IP. It takes effect only when used in combination with --%s", flags.FlagGenerateOnly)) cmd.Flags().String(FlagNodeID, "", "The node's ID") @@ -90,7 +88,6 @@ func NewCreateValidatorCmd() *cobra.Command { _ = cmd.MarkFlagRequired(FlagAmount) _ = cmd.MarkFlagRequired(FlagPubKey) _ = cmd.MarkFlagRequired(FlagMoniker) - _ = cmd.MarkFlagRequired(flags.FlagEVMAddress) return cmd } @@ -137,22 +134,7 @@ func NewEditValidatorCmd() *cobra.Command { newMinSelfDelegation = &msb } - evmAddrString, _ := cmd.Flags().GetString(flags.FlagEVMAddress) - - var evmAddr *common.Address - if evmAddrString != "" { - if !common.IsHexAddress(evmAddrString) { - return types.ErrEVMAddressNotHex - } - addr := common.HexToAddress(evmAddrString) - evmAddr = &addr - } - - msg := types.NewMsgEditValidator( - sdk.ValAddress(valAddr), description, - newRate, newMinSelfDelegation, - evmAddr, - ) + msg := types.NewMsgEditValidator(sdk.ValAddress(valAddr), description, newRate, newMinSelfDelegation) return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) }, @@ -161,7 +143,6 @@ func NewEditValidatorCmd() *cobra.Command { cmd.Flags().AddFlagSet(flagSetDescriptionEdit()) cmd.Flags().AddFlagSet(flagSetCommissionUpdate()) cmd.Flags().AddFlagSet(FlagSetMinSelfDelegation()) - cmd.Flags().AddFlagSet(FlagSetEVMAddress()) flags.AddTxFlagsToCmd(cmd) return cmd @@ -404,18 +385,8 @@ func newBuildCreateValidatorMsg(clientCtx client.Context, txf tx.Factory, fs *fl return txf, nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "minimum self delegation must be a positive integer") } - evmAddrString, _ := fs.GetString(flags.FlagEVMAddress) - - if !common.IsHexAddress(evmAddrString) { - return txf, nil, types.ErrEVMAddressNotHex - } - evmAddr := common.HexToAddress(evmAddrString) - msg, err := types.NewMsgCreateValidator( - sdk.ValAddress(valAddr), pk, - amount, description, - commissionRates, minSelfDelegation, - evmAddr, + sdk.ValAddress(valAddr), pk, amount, description, commissionRates, minSelfDelegation, ) if err != nil { return txf, nil, err @@ -452,7 +423,6 @@ func CreateValidatorMsgFlagSet(ipDefault string) (fs *flag.FlagSet, defaultsDesc fsCreateValidator.AddFlagSet(FlagSetMinSelfDelegation()) fsCreateValidator.AddFlagSet(FlagSetAmount()) fsCreateValidator.AddFlagSet(FlagSetPublicKey()) - fsCreateValidator.AddFlagSet(FlagSetEVMAddress()) defaultsDesc = fmt.Sprintf(` delegation amount: %s @@ -486,11 +456,9 @@ type TxCreateValidatorConfig struct { SecurityContact string Details string Identity string - - EVMAddress string } -func PrepareConfigForTxCreateValidator(flagSet *flag.FlagSet, moniker, nodeID, chainID string, valPubKey cryptotypes.PubKey, evmAddr string) (TxCreateValidatorConfig, error) { +func PrepareConfigForTxCreateValidator(flagSet *flag.FlagSet, moniker, nodeID, chainID string, valPubKey cryptotypes.PubKey) (TxCreateValidatorConfig, error) { c := TxCreateValidatorConfig{} ip, err := flagSet.GetString(FlagIP) @@ -581,11 +549,6 @@ func PrepareConfigForTxCreateValidator(flagSet *flag.FlagSet, moniker, nodeID, c c.MinSelfDelegation = defaultMinSelfDelegation } - c.EVMAddress, err = flagSet.GetString(flags.FlagEVMAddress) - if err != nil { - return c, err - } - return c, nil } @@ -623,16 +586,8 @@ func BuildCreateValidatorMsg(clientCtx client.Context, config TxCreateValidatorC return txBldr, nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "minimum self delegation must be a positive integer") } - if !common.IsHexAddress(config.EVMAddress) { - return txBldr, nil, types.ErrEVMAddressNotHex - } - evmAddr := common.HexToAddress(config.EVMAddress) - msg, err := types.NewMsgCreateValidator( - sdk.ValAddress(valAddr), config.PubKey, - amount, description, - commissionRates, minSelfDelegation, - evmAddr, + sdk.ValAddress(valAddr), config.PubKey, amount, description, commissionRates, minSelfDelegation, ) if err != nil { return txBldr, msg, err diff --git a/x/staking/client/cli/tx_test.go b/x/staking/client/cli/tx_test.go index 395417310b8b..243780bc6e03 100644 --- a/x/staking/client/cli/tx_test.go +++ b/x/staking/client/cli/tx_test.go @@ -17,8 +17,7 @@ func TestPrepareConfigForTxCreateValidator(t *testing.T) { privKey := ed25519.GenPrivKey() valPubKey := privKey.PubKey() moniker := "DefaultMoniker" - testEVMAddr := "0x91DEd26b5f38B065FC0204c7929Da6b2A21277Cd" - mkTxValCfg := func(amount, commission, commissionMax, commissionMaxChange, minSelfDelegation string, evmAddr string) TxCreateValidatorConfig { + mkTxValCfg := func(amount, commission, commissionMax, commissionMaxChange, minSelfDelegation string) TxCreateValidatorConfig { return TxCreateValidatorConfig{ IP: ip, ChainID: chainID, @@ -30,7 +29,6 @@ func TestPrepareConfigForTxCreateValidator(t *testing.T) { CommissionMaxRate: commissionMax, CommissionMaxChangeRate: commissionMaxChange, MinSelfDelegation: minSelfDelegation, - EVMAddress: evmAddr, } } @@ -44,42 +42,42 @@ func TestPrepareConfigForTxCreateValidator(t *testing.T) { fsModify: func(fs *pflag.FlagSet) { return }, - expectedCfg: mkTxValCfg(defaultAmount, "0.1", "0.2", "0.01", "1", ""), + expectedCfg: mkTxValCfg(defaultAmount, "0.1", "0.2", "0.01", "1"), }, { name: "Custom amount", fsModify: func(fs *pflag.FlagSet) { fs.Set(FlagAmount, "2000stake") }, - expectedCfg: mkTxValCfg("2000stake", "0.1", "0.2", "0.01", "1", ""), + expectedCfg: mkTxValCfg("2000stake", "0.1", "0.2", "0.01", "1"), }, { name: "Custom commission rate", fsModify: func(fs *pflag.FlagSet) { fs.Set(FlagCommissionRate, "0.54") }, - expectedCfg: mkTxValCfg(defaultAmount, "0.54", "0.2", "0.01", "1", ""), + expectedCfg: mkTxValCfg(defaultAmount, "0.54", "0.2", "0.01", "1"), }, { name: "Custom commission max rate", fsModify: func(fs *pflag.FlagSet) { fs.Set(FlagCommissionMaxRate, "0.89") }, - expectedCfg: mkTxValCfg(defaultAmount, "0.1", "0.89", "0.01", "1", ""), + expectedCfg: mkTxValCfg(defaultAmount, "0.1", "0.89", "0.01", "1"), }, { name: "Custom commission max change rate", fsModify: func(fs *pflag.FlagSet) { fs.Set(FlagCommissionMaxChangeRate, "0.55") }, - expectedCfg: mkTxValCfg(defaultAmount, "0.1", "0.2", "0.55", "1", ""), + expectedCfg: mkTxValCfg(defaultAmount, "0.1", "0.2", "0.55", "1"), }, { name: "Custom min self delegations", fsModify: func(fs *pflag.FlagSet) { fs.Set(FlagMinSelfDelegation, "0.33") }, - expectedCfg: mkTxValCfg(defaultAmount, "0.1", "0.2", "0.01", "0.33", ""), + expectedCfg: mkTxValCfg(defaultAmount, "0.1", "0.2", "0.01", "0.33"), }, } @@ -91,7 +89,7 @@ func TestPrepareConfigForTxCreateValidator(t *testing.T) { tc.fsModify(fs) - cvCfg, err := PrepareConfigForTxCreateValidator(fs, moniker, nodeID, chainID, valPubKey, testEVMAddr) + cvCfg, err := PrepareConfigForTxCreateValidator(fs, moniker, nodeID, chainID, valPubKey) require.NoError(t, err) require.Equal(t, tc.expectedCfg, cvCfg) diff --git a/x/staking/client/testutil/suite.go b/x/staking/client/testutil/suite.go index abb99548bdee..92323b07e462 100644 --- a/x/staking/client/testutil/suite.go +++ b/x/staking/client/testutil/suite.go @@ -6,8 +6,6 @@ import ( "strings" "testing" - "github.com/cosmos/cosmos-sdk/x/staking/teststaking" - "github.com/gogo/protobuf/proto" "github.com/stretchr/testify/suite" tmcli "github.com/tendermint/tendermint/libs/cli" @@ -67,7 +65,7 @@ func (s *IntegrationTestSuite) SetupSuite() { val.ValAddress, val2.ValAddress, unbond, - fmt.Sprintf("--%s=%d", flags.FlagGas, 306313), // 306313 is the required + fmt.Sprintf("--%s=%d", flags.FlagGas, 300000), ) s.Require().NoError(err) var txRes sdk.TxResponse @@ -124,9 +122,6 @@ func (s *IntegrationTestSuite) TestNewCreateValidatorCmd() { ) require.NoError(err) - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(err) - testCases := []struct { name string args []string @@ -209,7 +204,6 @@ func (s *IntegrationTestSuite) TestNewCreateValidatorCmd() { fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), - fmt.Sprintf("--%s=%s", flags.FlagEVMAddress, randomEVMAddress.Hex()), }, false, 0, &sdk.TxResponse{}, }, diff --git a/x/staking/genesis_test.go b/x/staking/genesis_test.go index 14884ec6372d..6f4a8ad8bda0 100644 --- a/x/staking/genesis_test.go +++ b/x/staking/genesis_test.go @@ -3,8 +3,6 @@ package staking_test import ( "testing" - "github.com/stretchr/testify/require" - "github.com/stretchr/testify/assert" "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" @@ -17,9 +15,7 @@ import ( func TestValidateGenesis(t *testing.T) { genValidators1 := make([]types.Validator, 1, 5) pk := ed25519.GenPrivKey().PubKey() - evmAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - genValidators1[0] = teststaking.NewValidator(t, sdk.ValAddress(pk.Address()), pk, *evmAddress) + genValidators1[0] = teststaking.NewValidator(t, sdk.ValAddress(pk.Address()), pk) genValidators1[0].Tokens = sdk.OneInt() genValidators1[0].DelegatorShares = sdk.OneDec() diff --git a/x/staking/keeper/delegation_test.go b/x/staking/keeper/delegation_test.go index f9a0dd4c048a..6190df425c40 100644 --- a/x/staking/keeper/delegation_test.go +++ b/x/staking/keeper/delegation_test.go @@ -35,9 +35,7 @@ func TestDelegation(t *testing.T) { amts := []sdk.Int{sdk.NewInt(9), sdk.NewInt(8), sdk.NewInt(7)} var validators [3]types.Validator for i, amt := range amts { - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validators[i] = teststaking.NewValidator(t, valAddrs[i], PKs[i], *randomEVMAddress) + validators[i] = teststaking.NewValidator(t, valAddrs[i], PKs[i]) validators[i], _ = validators[i].AddTokensFromDel(amt) } @@ -212,9 +210,7 @@ func TestUnbondDelegation(t *testing.T) { // create a validator and a delegator to that validator // note this validator starts not-bonded - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator := teststaking.NewValidator(t, valAddrs[0], PKs[0], *randomEVMAddress) + validator := teststaking.NewValidator(t, valAddrs[0], PKs[0]) validator, issuedShares := validator.AddTokensFromDel(startTokens) require.Equal(t, startTokens, issuedShares.RoundInt()) @@ -254,9 +250,7 @@ func TestUnbondingDelegationsMaxEntries(t *testing.T) { app.AccountKeeper.SetModuleAccount(ctx, notBondedPool) // create a validator and a delegator to that validator - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator := teststaking.NewValidator(t, addrVals[0], PKs[0], *randomEVMAddress) + validator := teststaking.NewValidator(t, addrVals[0], PKs[0]) validator, issuedShares := validator.AddTokensFromDel(startTokens) require.Equal(t, startTokens, issuedShares.RoundInt()) @@ -290,7 +284,7 @@ func TestUnbondingDelegationsMaxEntries(t *testing.T) { oldNotBonded = app.BankKeeper.GetBalance(ctx, app.StakingKeeper.GetNotBondedPool(ctx).GetAddress(), bondDenom).Amount // an additional unbond should fail due to max entries - _, err = app.StakingKeeper.Undelegate(ctx, addrDels[0], addrVals[0], sdk.NewDec(1)) + _, err := app.StakingKeeper.Undelegate(ctx, addrDels[0], addrVals[0], sdk.NewDec(1)) require.Error(t, err) newBonded = app.BankKeeper.GetBalance(ctx, app.StakingKeeper.GetBondedPool(ctx).GetAddress(), bondDenom).Amount @@ -332,9 +326,7 @@ func TestUndelegateSelfDelegationBelowMinSelfDelegation(t *testing.T) { delCoins := sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), delTokens)) // create a validator with a self-delegation - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator := teststaking.NewValidator(t, addrVals[0], PKs[0], *randomEVMAddress) + validator := teststaking.NewValidator(t, addrVals[0], PKs[0]) validator.MinSelfDelegation = delTokens validator, issuedShares := validator.AddTokensFromDel(delTokens) @@ -372,7 +364,7 @@ func TestUndelegateSelfDelegationBelowMinSelfDelegation(t *testing.T) { app.StakingKeeper.SetDelegation(ctx, delegation) val0AccAddr := sdk.AccAddress(addrVals[0].Bytes()) - _, err = app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], sdk.NewDecFromInt(app.StakingKeeper.TokensFromConsensusPower(ctx, 6))) + _, err := app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], sdk.NewDecFromInt(app.StakingKeeper.TokensFromConsensusPower(ctx, 6))) require.NoError(t, err) // end block @@ -394,9 +386,7 @@ func TestUndelegateFromUnbondingValidator(t *testing.T) { addrVals := simapp.ConvertAddrsToValAddrs(addrDels) // create a validator with a self-delegation - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator := teststaking.NewValidator(t, addrVals[0], PKs[0], *randomEVMAddress) + validator := teststaking.NewValidator(t, addrVals[0], PKs[0]) app.StakingKeeper.SetValidatorByConsAddr(ctx, validator) validator, issuedShares := validator.AddTokensFromDel(delTokens) @@ -443,7 +433,7 @@ func TestUndelegateFromUnbondingValidator(t *testing.T) { // unbond the all self-delegation to put validator in unbonding state val0AccAddr := sdk.AccAddress(addrVals[0]) - _, err = app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], sdk.NewDecFromInt(delTokens)) + _, err := app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], sdk.NewDecFromInt(delTokens)) require.NoError(t, err) // end block @@ -487,9 +477,7 @@ func TestUndelegateFromUnbondedValidator(t *testing.T) { app.AccountKeeper.SetModuleAccount(ctx, notBondedPool) // create a validator with a self-delegation - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator := teststaking.NewValidator(t, addrVals[0], PKs[0], *randomEVMAddress) + validator := teststaking.NewValidator(t, addrVals[0], PKs[0]) app.StakingKeeper.SetValidatorByConsAddr(ctx, validator) valTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 10) @@ -520,7 +508,7 @@ func TestUndelegateFromUnbondedValidator(t *testing.T) { ctx = ctx.WithBlockTime(time.Unix(333, 0)) // unbond the all self-delegation to put validator in unbonding state - _, err = app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], sdk.NewDecFromInt(valTokens)) + _, err := app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], sdk.NewDecFromInt(valTokens)) require.NoError(t, err) // end block @@ -570,9 +558,7 @@ func TestUnbondingAllDelegationFromValidator(t *testing.T) { app.AccountKeeper.SetModuleAccount(ctx, notBondedPool) // create a validator with a self-delegation - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator := teststaking.NewValidator(t, addrVals[0], PKs[0], *randomEVMAddress) + validator := teststaking.NewValidator(t, addrVals[0], PKs[0]) app.StakingKeeper.SetValidatorByConsAddr(ctx, validator) valTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 10) @@ -606,7 +592,7 @@ func TestUnbondingAllDelegationFromValidator(t *testing.T) { ctx = ctx.WithBlockTime(time.Unix(333, 0)) // unbond the all self-delegation to put validator in unbonding state - _, err = app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], sdk.NewDecFromInt(valTokens)) + _, err := app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], sdk.NewDecFromInt(valTokens)) require.NoError(t, err) // end block @@ -736,9 +722,7 @@ func TestRedelegateToSameValidator(t *testing.T) { app.AccountKeeper.SetModuleAccount(ctx, notBondedPool) // create a validator with a self-delegation - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator := teststaking.NewValidator(t, addrVals[0], PKs[0], *randomEVMAddress) + validator := teststaking.NewValidator(t, addrVals[0], PKs[0]) validator, issuedShares := validator.AddTokensFromDel(valTokens) require.Equal(t, valTokens, issuedShares.RoundInt()) validator = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator, true) @@ -748,7 +732,7 @@ func TestRedelegateToSameValidator(t *testing.T) { selfDelegation := types.NewDelegation(val0AccAddr, addrVals[0], issuedShares) app.StakingKeeper.SetDelegation(ctx, selfDelegation) - _, err = app.StakingKeeper.BeginRedelegation(ctx, val0AccAddr, addrVals[0], addrVals[0], sdk.NewDec(5)) + _, err := app.StakingKeeper.BeginRedelegation(ctx, val0AccAddr, addrVals[0], addrVals[0], sdk.NewDec(5)) require.Error(t, err) } @@ -767,9 +751,7 @@ func TestRedelegationMaxEntries(t *testing.T) { app.AccountKeeper.SetModuleAccount(ctx, notBondedPool) // create a validator with a self-delegation - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator := teststaking.NewValidator(t, addrVals[0], PKs[0], *randomEVMAddress) + validator := teststaking.NewValidator(t, addrVals[0], PKs[0]) valTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 10) validator, issuedShares := validator.AddTokensFromDel(valTokens) require.Equal(t, valTokens, issuedShares.RoundInt()) @@ -779,9 +761,7 @@ func TestRedelegationMaxEntries(t *testing.T) { app.StakingKeeper.SetDelegation(ctx, selfDelegation) // create a second validator - randomEVMAddress2, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator2 := teststaking.NewValidator(t, addrVals[1], PKs[1], *randomEVMAddress2) + validator2 := teststaking.NewValidator(t, addrVals[1], PKs[1]) validator2, issuedShares = validator2.AddTokensFromDel(valTokens) require.Equal(t, valTokens, issuedShares.RoundInt()) @@ -799,7 +779,7 @@ func TestRedelegationMaxEntries(t *testing.T) { } // an additional redelegation should fail due to max entries - _, err = app.StakingKeeper.BeginRedelegation(ctx, val0AccAddr, addrVals[0], addrVals[1], sdk.NewDec(1)) + _, err := app.StakingKeeper.BeginRedelegation(ctx, val0AccAddr, addrVals[0], addrVals[1], sdk.NewDec(1)) require.Error(t, err) // mature redelegations @@ -827,9 +807,7 @@ func TestRedelegateSelfDelegation(t *testing.T) { app.AccountKeeper.SetModuleAccount(ctx, notBondedPool) // create a validator with a self-delegation - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator := teststaking.NewValidator(t, addrVals[0], PKs[0], *randomEVMAddress) + validator := teststaking.NewValidator(t, addrVals[0], PKs[0]) app.StakingKeeper.SetValidatorByConsAddr(ctx, validator) valTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 10) @@ -843,9 +821,7 @@ func TestRedelegateSelfDelegation(t *testing.T) { app.StakingKeeper.SetDelegation(ctx, selfDelegation) // create a second validator - randomEVMAddress2, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator2 := teststaking.NewValidator(t, addrVals[1], PKs[1], *randomEVMAddress2) + validator2 := teststaking.NewValidator(t, addrVals[1], PKs[1]) validator2, issuedShares = validator2.AddTokensFromDel(valTokens) require.Equal(t, valTokens, issuedShares.RoundInt()) validator2 = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator2, true) @@ -860,7 +836,7 @@ func TestRedelegateSelfDelegation(t *testing.T) { delegation := types.NewDelegation(addrDels[0], addrVals[0], issuedShares) app.StakingKeeper.SetDelegation(ctx, delegation) - _, err = app.StakingKeeper.BeginRedelegation(ctx, val0AccAddr, addrVals[0], addrVals[1], sdk.NewDecFromInt(delTokens)) + _, err := app.StakingKeeper.BeginRedelegation(ctx, val0AccAddr, addrVals[0], addrVals[1], sdk.NewDecFromInt(delTokens)) require.NoError(t, err) // end block @@ -887,9 +863,7 @@ func TestRedelegateFromUnbondingValidator(t *testing.T) { app.AccountKeeper.SetModuleAccount(ctx, notBondedPool) // create a validator with a self-delegation - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator := teststaking.NewValidator(t, addrVals[0], PKs[0], *randomEVMAddress) + validator := teststaking.NewValidator(t, addrVals[0], PKs[0]) app.StakingKeeper.SetValidatorByConsAddr(ctx, validator) valTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 10) @@ -910,9 +884,7 @@ func TestRedelegateFromUnbondingValidator(t *testing.T) { app.StakingKeeper.SetDelegation(ctx, delegation) // create a second validator - randomEVMAddress2, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator2 := teststaking.NewValidator(t, addrVals[1], PKs[1], *randomEVMAddress2) + validator2 := teststaking.NewValidator(t, addrVals[1], PKs[1]) validator2, issuedShares = validator2.AddTokensFromDel(valTokens) require.Equal(t, valTokens, issuedShares.RoundInt()) validator2 = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator2, true) @@ -925,7 +897,7 @@ func TestRedelegateFromUnbondingValidator(t *testing.T) { ctx = ctx.WithBlockHeader(header) // unbond the all self-delegation to put validator in unbonding state - _, err = app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], sdk.NewDecFromInt(delTokens)) + _, err := app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], sdk.NewDecFromInt(delTokens)) require.NoError(t, err) // end block @@ -973,9 +945,7 @@ func TestRedelegateFromUnbondedValidator(t *testing.T) { app.AccountKeeper.SetModuleAccount(ctx, notBondedPool) // create a validator with a self-delegation - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator := teststaking.NewValidator(t, addrVals[0], PKs[0], *randomEVMAddress) + validator := teststaking.NewValidator(t, addrVals[0], PKs[0]) app.StakingKeeper.SetValidatorByConsAddr(ctx, validator) valTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 10) @@ -996,9 +966,7 @@ func TestRedelegateFromUnbondedValidator(t *testing.T) { app.StakingKeeper.SetDelegation(ctx, delegation) // create a second validator - randomEVMAddress2, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator2 := teststaking.NewValidator(t, addrVals[1], PKs[1], *randomEVMAddress2) + validator2 := teststaking.NewValidator(t, addrVals[1], PKs[1]) validator2, issuedShares = validator2.AddTokensFromDel(valTokens) require.Equal(t, valTokens, issuedShares.RoundInt()) validator2 = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator2, true) @@ -1008,7 +976,7 @@ func TestRedelegateFromUnbondedValidator(t *testing.T) { ctx = ctx.WithBlockTime(time.Unix(333, 0)) // unbond the all self-delegation to put validator in unbonding state - _, err = app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], sdk.NewDecFromInt(delTokens)) + _, err := app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], sdk.NewDecFromInt(delTokens)) require.NoError(t, err) // end block diff --git a/x/staking/keeper/genesis_test.go b/x/staking/keeper/genesis_test.go index 345097e82261..908e301decfa 100644 --- a/x/staking/keeper/genesis_test.go +++ b/x/staking/keeper/genesis_test.go @@ -4,8 +4,6 @@ import ( "fmt" "testing" - "github.com/cosmos/cosmos-sdk/x/staking/teststaking" - "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" @@ -171,15 +169,14 @@ func TestInitGenesisLargeValidatorSet(t *testing.T) { delegations := []types.Delegation{} validators := make([]types.Validator, size) + var err error + bondedPoolAmt := sdk.ZeroInt() for i := range validators { - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) validators[i], err = types.NewValidator( sdk.ValAddress(addrs[i]), PKs[i], types.NewDescription(fmt.Sprintf("#%d", i), "", "", "", ""), - *randomEVMAddress, ) require.NoError(t, err) validators[i].Status = types.Bonded diff --git a/x/staking/keeper/grpc_query_test.go b/x/staking/keeper/grpc_query_test.go index c105c8734e9a..09cdb5e47cea 100644 --- a/x/staking/keeper/grpc_query_test.go +++ b/x/staking/keeper/grpc_query_test.go @@ -798,13 +798,8 @@ func createValidators(t *testing.T, ctx sdk.Context, app *simapp.SimApp, powers app.GetSubspace(types.ModuleName), ) - randomEVMAddress1, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - val1 := teststaking.NewValidator(t, valAddrs[0], pks[0], *randomEVMAddress1) - - randomEVMAddress2, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - val2 := teststaking.NewValidator(t, valAddrs[1], pks[1], *randomEVMAddress2) + val1 := teststaking.NewValidator(t, valAddrs[0], pks[0]) + val2 := teststaking.NewValidator(t, valAddrs[1], pks[1]) vals := []types.Validator{val1, val2} app.StakingKeeper.SetValidator(ctx, val1) @@ -814,7 +809,7 @@ func createValidators(t *testing.T, ctx sdk.Context, app *simapp.SimApp, powers app.StakingKeeper.SetNewValidatorByPowerIndex(ctx, val1) app.StakingKeeper.SetNewValidatorByPowerIndex(ctx, val2) - _, err = app.StakingKeeper.Delegate(ctx, addrs[0], app.StakingKeeper.TokensFromConsensusPower(ctx, powers[0]), types.Unbonded, val1, true) + _, err := app.StakingKeeper.Delegate(ctx, addrs[0], app.StakingKeeper.TokensFromConsensusPower(ctx, powers[0]), types.Unbonded, val1, true) require.NoError(t, err) _, err = app.StakingKeeper.Delegate(ctx, addrs[1], app.StakingKeeper.TokensFromConsensusPower(ctx, powers[1]), types.Unbonded, val2, true) require.NoError(t, err) diff --git a/x/staking/keeper/historical_info_test.go b/x/staking/keeper/historical_info_test.go index 56b02bcc5f55..2a9fbf649ce1 100644 --- a/x/staking/keeper/historical_info_test.go +++ b/x/staking/keeper/historical_info_test.go @@ -33,9 +33,7 @@ func TestHistoricalInfo(t *testing.T) { validators := make([]types.Validator, len(addrVals)) for i, valAddr := range addrVals { - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validators[i] = teststaking.NewValidator(t, valAddr, PKs[i], *randomEVMAddress) + validators[i] = teststaking.NewValidator(t, valAddr, PKs[i]) } hi := types.NewHistoricalInfo(ctx.BlockHeader(), validators, app.StakingKeeper.PowerReduction(ctx)) @@ -74,16 +72,10 @@ func TestTrackHistoricalInfo(t *testing.T) { ChainID: "HelloChain", Height: 5, } - randomEVMAddress1, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - randomEVMAddress2, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - valSet := []types.Validator{ - teststaking.NewValidator(t, addrVals[0], PKs[0], *randomEVMAddress1), - teststaking.NewValidator(t, addrVals[1], PKs[1], *randomEVMAddress2), + teststaking.NewValidator(t, addrVals[0], PKs[0]), + teststaking.NewValidator(t, addrVals[1], PKs[1]), } - hi4 := types.NewHistoricalInfo(h4, valSet, app.StakingKeeper.PowerReduction(ctx)) hi5 := types.NewHistoricalInfo(h5, valSet, app.StakingKeeper.PowerReduction(ctx)) app.StakingKeeper.SetHistoricalInfo(ctx, 4, &hi4) @@ -100,16 +92,12 @@ func TestTrackHistoricalInfo(t *testing.T) { require.Len(t, genesisVals, 1) // Set bonded validators in keeper - randomEVMAddress3, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - val1 := teststaking.NewValidator(t, addrVals[2], PKs[2], *randomEVMAddress3) + val1 := teststaking.NewValidator(t, addrVals[2], PKs[2]) val1.Status = types.Bonded // when not bonded, consensus power is Zero val1.Tokens = app.StakingKeeper.TokensFromConsensusPower(ctx, 10) app.StakingKeeper.SetValidator(ctx, val1) app.StakingKeeper.SetLastValidatorPower(ctx, val1.GetOperator(), 10) - randomEVMAddress4, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - val2 := teststaking.NewValidator(t, addrVals[3], PKs[3], *randomEVMAddress4) + val2 := teststaking.NewValidator(t, addrVals[3], PKs[3]) val1.Status = types.Bonded val2.Tokens = app.StakingKeeper.TokensFromConsensusPower(ctx, 80) app.StakingKeeper.SetValidator(ctx, val2) @@ -155,14 +143,9 @@ func TestGetAllHistoricalInfo(t *testing.T) { addrDels := simapp.AddTestAddrsIncremental(app, ctx, 50, sdk.NewInt(0)) addrVals := simapp.ConvertAddrsToValAddrs(addrDels) - randomEVMAddress1, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - randomEVMAddress2, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - valSet := []types.Validator{ - teststaking.NewValidator(t, addrVals[0], PKs[0], *randomEVMAddress1), - teststaking.NewValidator(t, addrVals[1], PKs[1], *randomEVMAddress2), + teststaking.NewValidator(t, addrVals[0], PKs[0]), + teststaking.NewValidator(t, addrVals[1], PKs[1]), } header1 := tmproto.Header{ChainID: "HelloChain", Height: 10} diff --git a/x/staking/keeper/msg_server.go b/x/staking/keeper/msg_server.go index 070ef2ebda22..cf74b61ea02f 100644 --- a/x/staking/keeper/msg_server.go +++ b/x/staking/keeper/msg_server.go @@ -15,7 +15,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/staking/types" - "github.com/ethereum/go-ethereum/common" ) type msgServer struct { @@ -86,12 +85,7 @@ func (k msgServer) CreateValidator(goCtx context.Context, msg *types.MsgCreateVa } } - evmAddr, err := k.validateEVMAddress(ctx, msg.EvmAddress) - if err != nil { - return nil, err - } - - validator, err := types.NewValidator(valAddr, pk, msg.Description, evmAddr) + validator, err := types.NewValidator(valAddr, pk, msg.Description) if err != nil { return nil, err } @@ -193,14 +187,6 @@ func (k msgServer) EditValidator(goCtx context.Context, msg *types.MsgEditValida validator.MinSelfDelegation = *msg.MinSelfDelegation } - if msg.EvmAddress != "" { - _, err := k.validateEVMAddress(ctx, msg.EvmAddress) - if err != nil { - return nil, err - } - validator.EvmAddress = msg.EvmAddress - } - k.SetValidator(ctx, validator) ctx.EventManager().EmitEvents(sdk.Events{ @@ -407,17 +393,6 @@ func (k msgServer) Undelegate(goCtx context.Context, msg *types.MsgUndelegate) ( }, nil } -func (k msgServer) validateEVMAddress(ctx sdk.Context, evmAddrHex string) (common.Address, error) { - if !common.IsHexAddress(evmAddrHex) { - return common.Address{}, types.ErrEVMAddressNotHex - } - evmAddr := common.HexToAddress(evmAddrHex) - if _, found := k.GetValidatorByEVMAddress(ctx, evmAddr); found { - return common.Address{}, types.ErrValidatorEVMAddressExists - } - return evmAddr, nil -} - // CancelUnbondingDelegation defines a method for canceling the unbonding delegation // and delegate back to the validator. func (k msgServer) CancelUnbondingDelegation(goCtx context.Context, msg *types.MsgCancelUnbondingDelegation) (*types.MsgCancelUnbondingDelegationResponse, error) { diff --git a/x/staking/keeper/querier.go b/x/staking/keeper/querier.go index 1291492ef9f3..b3ec7e18d92f 100644 --- a/x/staking/keeper/querier.go +++ b/x/staking/keeper/querier.go @@ -2,11 +2,8 @@ package keeper import ( "errors" - "fmt" "strings" - "github.com/ethereum/go-ethereum/common" - abci "github.com/tendermint/tendermint/abci/types" "github.com/cosmos/cosmos-sdk/client" @@ -32,9 +29,6 @@ func NewQuerier(k Keeper, legacyQuerierCdc *codec.LegacyAmino) sdk.Querier { case types.QueryValidatorUnbondingDelegations: return queryValidatorUnbondingDelegations(ctx, req, k, legacyQuerierCdc) - case types.QueryValidatorByEVMAddress: - return queryValidatorByEVMAddress(ctx, req, k, legacyQuerierCdc) - case types.QueryDelegation: return queryDelegation(ctx, req, k, legacyQuerierCdc) @@ -124,31 +118,6 @@ func queryValidator(ctx sdk.Context, req abci.RequestQuery, k Keeper, legacyQuer return res, nil } -func queryValidatorByEVMAddress(ctx sdk.Context, req abci.RequestQuery, k Keeper, legacyQuerierCdc *codec.LegacyAmino) ([]byte, error) { - var params types.QueryValidatorByEVMAddressParams - - err := legacyQuerierCdc.UnmarshalJSON(req.Data, ¶ms) - if err != nil { - return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error()) - } - - if !common.IsHexAddress(params.EVMAddress) { - return nil, fmt.Errorf("provided address is not an EVM address: %s", params.EVMAddress) - } - - validator, found := k.GetValidatorByEVMAddress(ctx, common.HexToAddress(params.EVMAddress)) - if !found { - return nil, types.ErrNoValidatorFound - } - - res, err := codec.MarshalJSONIndent(legacyQuerierCdc, validator) - if err != nil { - return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error()) - } - - return res, nil -} - func queryValidatorDelegations(ctx sdk.Context, req abci.RequestQuery, k Keeper, legacyQuerierCdc *codec.LegacyAmino) ([]byte, error) { var params types.QueryValidatorParams diff --git a/x/staking/keeper/querier_test.go b/x/staking/keeper/querier_test.go index 5930cdb8741d..ac5b1eed5a56 100644 --- a/x/staking/keeper/querier_test.go +++ b/x/staking/keeper/querier_test.go @@ -4,8 +4,6 @@ import ( "fmt" "testing" - "github.com/ethereum/go-ethereum/common" - "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" @@ -29,9 +27,7 @@ func TestNewQuerier(t *testing.T) { amts := []sdk.Int{sdk.NewInt(9), sdk.NewInt(8)} var validators [2]types.Validator for i, amt := range amts { - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validators[i] = teststaking.NewValidator(t, sdk.ValAddress(addrs[i]), PKs[i], *randomEVMAddress) + validators[i] = teststaking.NewValidator(t, sdk.ValAddress(addrs[i]), PKs[i]) validators[i], _ = validators[i].AddTokensFromDel(amt) app.StakingKeeper.SetValidator(ctx, validators[i]) app.StakingKeeper.SetValidatorByPowerIndex(ctx, validators[i]) @@ -151,9 +147,7 @@ func TestQueryValidators(t *testing.T) { status := []types.BondStatus{types.Unbonded, types.Unbonding} var validators [2]types.Validator for i, amt := range amts { - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validators[i] = teststaking.NewValidator(t, sdk.ValAddress(addrs[i]), PKs[i], *randomEVMAddress) + validators[i] = teststaking.NewValidator(t, sdk.ValAddress(addrs[i]), PKs[i]) validators[i], _ = validators[i].AddTokensFromDel(amt) validators[i] = validators[i].UpdateStatus(status[i]) } @@ -207,51 +201,6 @@ func TestQueryValidators(t *testing.T) { } } -func TestQueryValidatorByEVMAddres(t *testing.T) { - cdc, app, ctx := createTestInput(t) - legacyQuerierCdc := codec.NewAminoCodec(app.LegacyAmino()) - querier := keeper.NewQuerier(app.StakingKeeper, legacyQuerierCdc.LegacyAmino) - - addrs := simapp.AddTestAddrs(app, ctx, 500, app.StakingKeeper.TokensFromConsensusPower(ctx, 10000)) - - // Create Validators - amts := []sdk.Int{sdk.NewInt(8), sdk.NewInt(7)} - status := []types.BondStatus{types.Unbonded, types.Unbonding} - var validators [2]types.Validator - var evmAddresses [2]*common.Address - for i, amt := range amts { - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - evmAddresses[i] = randomEVMAddress - validators[i] = teststaking.NewValidator(t, sdk.ValAddress(addrs[i]), PKs[i], *randomEVMAddress) - validators[i], _ = validators[i].AddTokensFromDel(amt) - validators[i] = validators[i].UpdateStatus(status[i]) - } - - app.StakingKeeper.SetValidator(ctx, validators[0]) - app.StakingKeeper.SetValidator(ctx, validators[1]) - - // Query each validator - for i, validator := range validators { - queryParams := types.NewQueryValidatorByEVMAddressParams(*evmAddresses[i]) - bz, err := cdc.MarshalJSON(queryParams) - require.NoError(t, err) - - query := abci.RequestQuery{ - Path: "/custom/staking/validatorByEVMAddress", - Data: bz, - } - res, err := querier(ctx, []string{types.QueryValidatorByEVMAddress}, query) - require.NoError(t, err) - - var queriedValidator types.Validator - err = cdc.UnmarshalJSON(res, &queriedValidator) - require.NoError(t, err) - - require.True(t, validator.Equal(&queriedValidator)) - } -} - func TestQueryDelegation(t *testing.T) { cdc, app, ctx := createTestInput(t) params := app.StakingKeeper.GetParams(ctx) @@ -266,20 +215,16 @@ func TestQueryDelegation(t *testing.T) { pk1, pk2 := pubKeys[0], pubKeys[1] // Create Validators and Delegation - randomEVMAddress1, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - val1 := teststaking.NewValidator(t, addrVal1, pk1, *randomEVMAddress1) + val1 := teststaking.NewValidator(t, addrVal1, pk1) app.StakingKeeper.SetValidator(ctx, val1) app.StakingKeeper.SetValidatorByPowerIndex(ctx, val1) - randomEVMAddress2, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - val2 := teststaking.NewValidator(t, addrVal2, pk2, *randomEVMAddress2) + val2 := teststaking.NewValidator(t, addrVal2, pk2) app.StakingKeeper.SetValidator(ctx, val2) app.StakingKeeper.SetValidatorByPowerIndex(ctx, val2) delTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 20) - _, err = app.StakingKeeper.Delegate(ctx, addrAcc2, delTokens, types.Unbonded, val1, true) + _, err := app.StakingKeeper.Delegate(ctx, addrAcc2, delTokens, types.Unbonded, val1, true) require.NoError(t, err) // apply TM updates @@ -517,9 +462,7 @@ func TestQueryValidatorDelegations_Pagination(t *testing.T) { valAddress := sdk.ValAddress(addrs[0]) - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - val1 := teststaking.NewValidator(t, valAddress, pubKeys[0], *randomEVMAddress) + val1 := teststaking.NewValidator(t, valAddress, pubKeys[0]) app.StakingKeeper.SetValidator(ctx, val1) app.StakingKeeper.SetValidatorByPowerIndex(ctx, val1) @@ -604,17 +547,13 @@ func TestQueryRedelegations(t *testing.T) { addrVal1, addrVal2 := sdk.ValAddress(addrAcc1), sdk.ValAddress(addrAcc2) // Create Validators and Delegation - randomEVMAddress1, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - val1 := teststaking.NewValidator(t, addrVal1, PKs[0], *randomEVMAddress1) - randomEVMAddress2, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - val2 := teststaking.NewValidator(t, addrVal2, PKs[1], *randomEVMAddress2) + val1 := teststaking.NewValidator(t, addrVal1, PKs[0]) + val2 := teststaking.NewValidator(t, addrVal2, PKs[1]) app.StakingKeeper.SetValidator(ctx, val1) app.StakingKeeper.SetValidator(ctx, val2) delAmount := app.StakingKeeper.TokensFromConsensusPower(ctx, 100) - _, err = app.StakingKeeper.Delegate(ctx, addrAcc2, delAmount, types.Unbonded, val1, true) + _, err := app.StakingKeeper.Delegate(ctx, addrAcc2, delAmount, types.Unbonded, val1, true) require.NoError(t, err) applyValidatorSetUpdates(t, ctx, app.StakingKeeper, -1) @@ -680,14 +619,12 @@ func TestQueryUnbondingDelegation(t *testing.T) { addrVal1 := sdk.ValAddress(addrAcc1) // Create Validators and Delegation - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - val1 := teststaking.NewValidator(t, addrVal1, PKs[0], *randomEVMAddress) + val1 := teststaking.NewValidator(t, addrVal1, PKs[0]) app.StakingKeeper.SetValidator(ctx, val1) // delegate delAmount := app.StakingKeeper.TokensFromConsensusPower(ctx, 100) - _, err = app.StakingKeeper.Delegate(ctx, addrAcc1, delAmount, types.Unbonded, val1, true) + _, err := app.StakingKeeper.Delegate(ctx, addrAcc1, delAmount, types.Unbonded, val1, true) require.NoError(t, err) applyValidatorSetUpdates(t, ctx, app.StakingKeeper, -1) @@ -778,12 +715,8 @@ func TestQueryHistoricalInfo(t *testing.T) { addrVal1, addrVal2 := sdk.ValAddress(addrAcc1), sdk.ValAddress(addrAcc2) // Create Validators and Delegation - randomEVMAddress1, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - val1 := teststaking.NewValidator(t, addrVal1, PKs[0], *randomEVMAddress1) - randomEVMAddress2, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - val2 := teststaking.NewValidator(t, addrVal2, PKs[1], *randomEVMAddress2) + val1 := teststaking.NewValidator(t, addrVal1, PKs[0]) + val2 := teststaking.NewValidator(t, addrVal2, PKs[1]) vals := []types.Validator{val1, val2} app.StakingKeeper.SetValidator(ctx, val1) app.StakingKeeper.SetValidator(ctx, val2) diff --git a/x/staking/keeper/slash_test.go b/x/staking/keeper/slash_test.go index fe65e6339306..ea83aab9dce2 100644 --- a/x/staking/keeper/slash_test.go +++ b/x/staking/keeper/slash_test.go @@ -39,9 +39,7 @@ func bootstrapSlashTest(t *testing.T, power int64) (*simapp.SimApp, sdk.Context, require.NoError(t, testutil.FundModuleAccount(app.BankKeeper, ctx, bondedPool.GetName(), bondedCoins)) for i := int64(0); i < numVals; i++ { - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator := teststaking.NewValidator(t, addrVals[i], PKs[i], *randomEVMAddress) + validator := teststaking.NewValidator(t, addrVals[i], PKs[i]) validator, _ = validator.AddTokensFromDel(amt) validator = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator, true) app.StakingKeeper.SetValidatorByConsAddr(ctx, validator) diff --git a/x/staking/keeper/validator.go b/x/staking/keeper/validator.go index 6e61f56cc3b4..f58c1620dc3c 100644 --- a/x/staking/keeper/validator.go +++ b/x/staking/keeper/validator.go @@ -9,7 +9,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/staking/types" - "github.com/ethereum/go-ethereum/common" ) // get a single validator @@ -55,19 +54,6 @@ func (k Keeper) mustGetValidatorByConsAddr(ctx sdk.Context, consAddr sdk.ConsAdd return validator } -func (k Keeper) GetValidatorByEVMAddress(ctx sdk.Context, evm common.Address) (types.Validator, bool) { - // TODO optimise these queries and even add grpc queries for them. - // Issue: https://github.com/celestiaorg/cosmos-sdk/issues/129 - validators := k.GetAllValidators(ctx) - for _, val := range validators { - if val.EvmAddress == evm.Hex() { - return val, true - } - } - - return types.Validator{}, false -} - // set the main record holding validator details func (k Keeper) SetValidator(ctx sdk.Context, validator types.Validator) { store := ctx.KVStore(k.storeKey) diff --git a/x/staking/keeper/validator_test.go b/x/staking/keeper/validator_test.go index f892bae849f4..ffa6d595854f 100644 --- a/x/staking/keeper/validator_test.go +++ b/x/staking/keeper/validator_test.go @@ -5,7 +5,6 @@ import ( "testing" "time" - "github.com/ethereum/go-ethereum/common" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" @@ -21,8 +20,8 @@ import ( "github.com/cosmos/cosmos-sdk/x/staking/types" ) -func newMonikerValidator(t testing.TB, operator sdk.ValAddress, pubKey cryptotypes.PubKey, moniker string, evmAddr common.Address) types.Validator { - v, err := types.NewValidator(operator, pubKey, types.Description{Moniker: moniker}, evmAddr) +func newMonikerValidator(t testing.TB, operator sdk.ValAddress, pubKey cryptotypes.PubKey, moniker string) types.Validator { + v, err := types.NewValidator(operator, pubKey, types.Description{Moniker: moniker}) require.NoError(t, err) return v } @@ -61,9 +60,7 @@ func initValidators(t testing.TB, power int64, numAddrs int, powers []int64) (*s vs := make([]types.Validator, len(powers)) for i, power := range powers { - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - vs[i] = teststaking.NewValidator(t, sdk.ValAddress(addrs[i]), pks[i], *randomEVMAddress) + vs[i] = teststaking.NewValidator(t, sdk.ValAddress(addrs[i]), pks[i]) tokens := app.StakingKeeper.TokensFromConsensusPower(ctx, power) vs[i], _ = vs[i].AddTokensFromDel(tokens) } @@ -78,9 +75,7 @@ func TestSetValidator(t *testing.T) { valTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 10) // test how the validator is set from a purely unbonbed pool - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator := teststaking.NewValidator(t, valAddr, valPubKey, *randomEVMAddress) + validator := teststaking.NewValidator(t, valAddr, valPubKey) validator, _ = validator.AddTokensFromDel(valTokens) require.Equal(t, types.Unbonded, validator.Status) assert.Equal(t, valTokens, validator.Tokens) @@ -136,9 +131,7 @@ func TestUpdateValidatorByPowerIndex(t *testing.T) { app.AccountKeeper.SetModuleAccount(ctx, notBondedPool) // add a validator - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator := teststaking.NewValidator(t, addrVals[0], PKs[0], *randomEVMAddress) + validator := teststaking.NewValidator(t, addrVals[0], PKs[0]) validator, delSharesCreated := validator.AddTokensFromDel(app.StakingKeeper.TokensFromConsensusPower(ctx, 100)) require.Equal(t, types.Unbonded, validator.Status) require.Equal(t, app.StakingKeeper.TokensFromConsensusPower(ctx, 100), validator.Tokens) @@ -189,9 +182,7 @@ func TestUpdateBondedValidatorsDecreaseCliff(t *testing.T) { validators := make([]types.Validator, numVals) for i := 0; i < len(validators); i++ { moniker := fmt.Sprintf("val#%d", int64(i)) - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - val := newMonikerValidator(t, valAddrs[i], PKs[i], moniker, *randomEVMAddress) + val := newMonikerValidator(t, valAddrs[i], PKs[i], moniker) delTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, int64((i+1)*10)) val, _ = val.AddTokensFromDel(delTokens) @@ -232,9 +223,7 @@ func TestSlashToZeroPowerRemoved(t *testing.T) { app, ctx, _, addrVals := bootstrapValidatorTest(t, 100, 20) // add a validator - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator := teststaking.NewValidator(t, addrVals[0], PKs[0], *randomEVMAddress) + validator := teststaking.NewValidator(t, addrVals[0], PKs[0]) valTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 100) bondedPool := app.StakingKeeper.GetBondedPool(ctx) @@ -267,9 +256,7 @@ func TestValidatorBasics(t *testing.T) { var validators [3]types.Validator powers := []int64{9, 8, 7} for i, power := range powers { - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validators[i] = teststaking.NewValidator(t, addrVals[i], PKs[i], *randomEVMAddress) + validators[i] = teststaking.NewValidator(t, addrVals[i], PKs[i]) validators[i].Status = types.Unbonded validators[i].Tokens = sdk.ZeroInt() tokens := app.StakingKeeper.TokensFromConsensusPower(ctx, power) @@ -375,9 +362,7 @@ func TestGetValidatorSortingUnmixed(t *testing.T) { n := len(amts) var validators [5]types.Validator for i, amt := range amts { - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validators[i] = teststaking.NewValidator(t, sdk.ValAddress(addrs[i]), PKs[i], *randomEVMAddress) + validators[i] = teststaking.NewValidator(t, sdk.ValAddress(addrs[i]), PKs[i]) validators[i].Status = types.Bonded validators[i].Tokens = amt validators[i].DelegatorShares = sdk.NewDecFromInt(amt) @@ -471,9 +456,7 @@ func TestGetValidatorSortingMixed(t *testing.T) { var validators [5]types.Validator for i, amt := range amts { - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validators[i] = teststaking.NewValidator(t, sdk.ValAddress(addrs[i]), PKs[i], *randomEVMAddress) + validators[i] = teststaking.NewValidator(t, sdk.ValAddress(addrs[i]), PKs[i]) validators[i].DelegatorShares = sdk.NewDecFromInt(amt) validators[i].Status = types.Bonded validators[i].Tokens = amt @@ -520,10 +503,8 @@ func TestGetValidatorsEdgeCases(t *testing.T) { powers := []int64{0, 100, 400, 400} var validators [4]types.Validator for i, power := range powers { - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) moniker := fmt.Sprintf("val#%d", int64(i)) - validators[i] = newMonikerValidator(t, sdk.ValAddress(addrs[i]), PKs[i], moniker, *randomEVMAddress) + validators[i] = newMonikerValidator(t, sdk.ValAddress(addrs[i]), PKs[i], moniker) tokens := app.StakingKeeper.TokensFromConsensusPower(ctx, power) validators[i], _ = validators[i].AddTokensFromDel(tokens) @@ -629,18 +610,11 @@ func TestValidatorBondHeight(t *testing.T) { params.MaxValidators = 2 app.StakingKeeper.SetParams(ctx, params) - randomEVMAddress1, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - randomEVMAddress2, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - randomEVMAddress3, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - // initialize some validators into the state var validators [3]types.Validator - validators[0] = teststaking.NewValidator(t, sdk.ValAddress(PKs[0].Address().Bytes()), PKs[0], *randomEVMAddress1) - validators[1] = teststaking.NewValidator(t, sdk.ValAddress(addrs[1]), PKs[1], *randomEVMAddress2) - validators[2] = teststaking.NewValidator(t, sdk.ValAddress(addrs[2]), PKs[2], *randomEVMAddress3) + validators[0] = teststaking.NewValidator(t, sdk.ValAddress(PKs[0].Address().Bytes()), PKs[0]) + validators[1] = teststaking.NewValidator(t, sdk.ValAddress(addrs[1]), PKs[1]) + validators[2] = teststaking.NewValidator(t, sdk.ValAddress(addrs[2]), PKs[2]) tokens0 := app.StakingKeeper.TokensFromConsensusPower(ctx, 200) tokens1 := app.StakingKeeper.TokensFromConsensusPower(ctx, 100) @@ -686,9 +660,7 @@ func TestFullValidatorSetPowerChange(t *testing.T) { powers := []int64{0, 100, 400, 400, 200} var validators [5]types.Validator for i, power := range powers { - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validators[i] = teststaking.NewValidator(t, sdk.ValAddress(addrs[i]), PKs[i], *randomEVMAddress) + validators[i] = teststaking.NewValidator(t, sdk.ValAddress(addrs[i]), PKs[i]) tokens := app.StakingKeeper.TokensFromConsensusPower(ctx, power) validators[i], _ = validators[i].AddTokensFromDel(tokens) keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validators[i], true) @@ -728,10 +700,7 @@ func TestApplyAndReturnValidatorSetUpdatesAllNone(t *testing.T) { valPubKey := PKs[i+1] valAddr := sdk.ValAddress(valPubKey.Address().Bytes()) - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - - validators[i] = teststaking.NewValidator(t, valAddr, valPubKey, *randomEVMAddress) + validators[i] = teststaking.NewValidator(t, valAddr, valPubKey) tokens := app.StakingKeeper.TokensFromConsensusPower(ctx, power) validators[i], _ = validators[i].AddTokensFromDel(tokens) } @@ -757,9 +726,7 @@ func TestApplyAndReturnValidatorSetUpdatesIdentical(t *testing.T) { powers := []int64{10, 20} var validators [2]types.Validator for i, power := range powers { - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validators[i] = teststaking.NewValidator(t, sdk.ValAddress(addrs[i]), PKs[i], *randomEVMAddress) + validators[i] = teststaking.NewValidator(t, sdk.ValAddress(addrs[i]), PKs[i]) tokens := app.StakingKeeper.TokensFromConsensusPower(ctx, power) validators[i], _ = validators[i].AddTokensFromDel(tokens) @@ -782,9 +749,7 @@ func TestApplyAndReturnValidatorSetUpdatesSingleValueChange(t *testing.T) { powers := []int64{10, 20} var validators [2]types.Validator for i, power := range powers { - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validators[i] = teststaking.NewValidator(t, sdk.ValAddress(addrs[i]), PKs[i], *randomEVMAddress) + validators[i] = teststaking.NewValidator(t, sdk.ValAddress(addrs[i]), PKs[i]) tokens := app.StakingKeeper.TokensFromConsensusPower(ctx, power) validators[i], _ = validators[i].AddTokensFromDel(tokens) @@ -869,9 +834,7 @@ func TestApplyAndReturnValidatorSetUpdatesWithCliffValidator(t *testing.T) { powers := []int64{10, 20, 5} var validators [5]types.Validator for i, power := range powers { - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validators[i] = teststaking.NewValidator(t, sdk.ValAddress(addrs[i]), PKs[i], *randomEVMAddress) + validators[i] = teststaking.NewValidator(t, sdk.ValAddress(addrs[i]), PKs[i]) tokens := app.StakingKeeper.TokensFromConsensusPower(ctx, power) validators[i], _ = validators[i].AddTokensFromDel(tokens) } @@ -904,9 +867,7 @@ func TestApplyAndReturnValidatorSetUpdatesPowerDecrease(t *testing.T) { powers := []int64{100, 100} var validators [2]types.Validator for i, power := range powers { - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validators[i] = teststaking.NewValidator(t, sdk.ValAddress(addrs[i]), PKs[i], *randomEVMAddress) + validators[i] = teststaking.NewValidator(t, sdk.ValAddress(addrs[i]), PKs[i]) tokens := app.StakingKeeper.TokensFromConsensusPower(ctx, power) validators[i], _ = validators[i].AddTokensFromDel(tokens) } @@ -952,9 +913,7 @@ func TestApplyAndReturnValidatorSetUpdatesNewValidator(t *testing.T) { valPubKey := PKs[i+1] valAddr := sdk.ValAddress(valPubKey.Address().Bytes()) - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validators[i] = teststaking.NewValidator(t, valAddr, valPubKey, *randomEVMAddress) + validators[i] = teststaking.NewValidator(t, valAddr, valPubKey) tokens := app.StakingKeeper.TokensFromConsensusPower(ctx, power) validators[i], _ = validators[i].AddTokensFromDel(tokens) @@ -988,9 +947,7 @@ func TestApplyAndReturnValidatorSetUpdatesNewValidator(t *testing.T) { valAddr := sdk.ValAddress(valPubKey.Address().Bytes()) amt := sdk.NewInt(100) - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator := teststaking.NewValidator(t, valAddr, valPubKey, *randomEVMAddress) + validator := teststaking.NewValidator(t, valAddr, valPubKey) validator, _ = validator.AddTokensFromDel(amt) app.StakingKeeper.SetValidator(ctx, validator) @@ -1003,9 +960,7 @@ func TestApplyAndReturnValidatorSetUpdatesNewValidator(t *testing.T) { valPubKey = PKs[len(validators)+2] valAddr = sdk.ValAddress(valPubKey.Address().Bytes()) - randomEVMAddress2, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator = teststaking.NewValidator(t, valAddr, valPubKey, *randomEVMAddress2) + validator = teststaking.NewValidator(t, valAddr, valPubKey) tokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 500) validator, _ = validator.AddTokensFromDel(tokens) app.StakingKeeper.SetValidator(ctx, validator) @@ -1037,9 +992,7 @@ func TestApplyAndReturnValidatorSetUpdatesBondTransition(t *testing.T) { valPubKey := PKs[i+1] valAddr := sdk.ValAddress(valPubKey.Address().Bytes()) - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validators[i] = newMonikerValidator(t, valAddr, valPubKey, moniker, *randomEVMAddress) + validators[i] = newMonikerValidator(t, valAddr, valPubKey, moniker) tokens := app.StakingKeeper.TokensFromConsensusPower(ctx, power) validators[i], _ = validators[i].AddTokensFromDel(tokens) app.StakingKeeper.SetValidator(ctx, validators[i]) @@ -1112,13 +1065,8 @@ func TestUpdateValidatorCommission(t *testing.T) { ) commission2 := types.NewCommission(sdk.NewDecWithPrec(1, 1), sdk.NewDecWithPrec(3, 1), sdk.NewDecWithPrec(1, 1)) - randomEVMAddress1, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - randomEVMAddress2, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - - val1 := teststaking.NewValidator(t, addrVals[0], PKs[0], *randomEVMAddress1) - val2 := teststaking.NewValidator(t, addrVals[1], PKs[1], *randomEVMAddress2) + val1 := teststaking.NewValidator(t, addrVals[0], PKs[0]) + val2 := teststaking.NewValidator(t, addrVals[1], PKs[1]) val1, _ = val1.SetInitialCommission(commission1) val2, _ = val2.SetInitialCommission(commission2) diff --git a/x/staking/migrations/v043/store_test.go b/x/staking/migrations/v043/store_test.go index ce4649be0092..920ff55067de 100644 --- a/x/staking/migrations/v043/store_test.go +++ b/x/staking/migrations/v043/store_test.go @@ -24,9 +24,7 @@ func TestStoreMigration(t *testing.T) { _, pk1, addr1 := testdata.KeyTestPubAddr() valAddr1 := sdk.ValAddress(addr1) - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - val := teststaking.NewValidator(t, valAddr1, pk1, *randomEVMAddress) + val := teststaking.NewValidator(t, valAddr1, pk1) _, pk1, addr2 := testdata.KeyTestPubAddr() valAddr2 := sdk.ValAddress(addr2) _, _, addr3 := testdata.KeyTestPubAddr() @@ -124,7 +122,7 @@ func TestStoreMigration(t *testing.T) { } // Run migrations. - err = v043staking.MigrateStore(ctx, stakingKey) + err := v043staking.MigrateStore(ctx, stakingKey) require.NoError(t, err) // Make sure the new keys are set and old keys are deleted. diff --git a/x/staking/simulation/decoder_test.go b/x/staking/simulation/decoder_test.go index a9f3400e88b7..3d7546369d6b 100644 --- a/x/staking/simulation/decoder_test.go +++ b/x/staking/simulation/decoder_test.go @@ -5,8 +5,6 @@ import ( "testing" "time" - "github.com/cosmos/cosmos-sdk/x/staking/teststaking" - "github.com/stretchr/testify/require" "github.com/cosmos/cosmos-sdk/codec" @@ -38,9 +36,7 @@ func TestDecodeStore(t *testing.T) { dec := simulation.NewDecodeStore(cdc) bondTime := time.Now().UTC() - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - val, err := types.NewValidator(valAddr1, delPk1, types.NewDescription("test", "test", "test", "test", "test"), *randomEVMAddress) + val, err := types.NewValidator(valAddr1, delPk1, types.NewDescription("test", "test", "test", "test", "test")) require.NoError(t, err) del := types.NewDelegation(delAddr1, valAddr1, sdk.OneDec()) ubd := types.NewUnbondingDelegation(delAddr1, valAddr1, 15, bondTime, sdk.OneInt()) diff --git a/x/staking/simulation/genesis.go b/x/staking/simulation/genesis.go index 7f2be24cfb33..afd393c1c778 100644 --- a/x/staking/simulation/genesis.go +++ b/x/staking/simulation/genesis.go @@ -12,7 +12,6 @@ import ( "github.com/cosmos/cosmos-sdk/types/module" "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/staking/types" - "github.com/ethereum/go-ethereum/common" ) // Simulation parameter constants @@ -86,9 +85,7 @@ func RandomizedGenState(simState *module.SimulationState) { simulation.RandomDecAmount(simState.Rand, maxCommission), ) - evmAddr := common.HexToAddress("0x91DEd26b5f38B065FC0204c7929Da6b2A21277Cd") - - validator, err := types.NewValidator(valAddr, simState.Accounts[i].ConsKey.PubKey(), types.Description{}, evmAddr) + validator, err := types.NewValidator(valAddr, simState.Accounts[i].ConsKey.PubKey(), types.Description{}) if err != nil { panic(err) } diff --git a/x/staking/simulation/operations.go b/x/staking/simulation/operations.go index 986f4a3568fb..1e54e2db3c5a 100644 --- a/x/staking/simulation/operations.go +++ b/x/staking/simulation/operations.go @@ -12,7 +12,6 @@ import ( "github.com/cosmos/cosmos-sdk/x/simulation" "github.com/cosmos/cosmos-sdk/x/staking/keeper" "github.com/cosmos/cosmos-sdk/x/staking/types" - "github.com/ethereum/go-ethereum/common" ) // Simulation operation weights constants @@ -159,12 +158,7 @@ func SimulateMsgCreateValidator(ak types.AccountKeeper, bk types.BankKeeper, k k simtypes.RandomDecAmount(r, maxCommission), ) - // create an EVM address from the account address - // this is mainly to have a deterministic way of generating an EVM address on every run - // to have a long enough bytes array - evmAddr := common.HexToAddress("0x" + fmt.Sprintf("%X", simAccount.Address.Bytes())) - - msg, err := types.NewMsgCreateValidator(address, simAccount.ConsKey.PubKey(), selfDelegation, description, commission, sdk.OneInt(), evmAddr) + msg, err := types.NewMsgCreateValidator(address, simAccount.ConsKey.PubKey(), selfDelegation, description, commission, sdk.OneInt()) if err != nil { return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to create CreateValidator message"), nil, err } @@ -225,8 +219,7 @@ func SimulateMsgEditValidator(ak types.AccountKeeper, bk types.BankKeeper, k kee simtypes.RandStringOfLength(r, 10), ) - // TODO make the eth addresses also random - msg := types.NewMsgEditValidator(address, description, &newCommissionRate, nil, nil) + msg := types.NewMsgEditValidator(address, description, &newCommissionRate, nil) txCtx := simulation.OperationInput{ R: r, diff --git a/x/staking/simulation/operations_test.go b/x/staking/simulation/operations_test.go index a610bb241b04..aa07bafe0649 100644 --- a/x/staking/simulation/operations_test.go +++ b/x/staking/simulation/operations_test.go @@ -362,10 +362,8 @@ func getTestingValidator(t *testing.T, app *simapp.SimApp, ctx sdk.Context, acco account := accounts[n] valPubKey := account.PubKey valAddr := sdk.ValAddress(account.PubKey.Address().Bytes()) - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator := teststaking.NewValidator(t, valAddr, valPubKey, *randomEVMAddress) - validator, err = validator.SetInitialCommission(commission) + validator := teststaking.NewValidator(t, valAddr, valPubKey) + validator, err := validator.SetInitialCommission(commission) require.NoError(t, err) validator.DelegatorShares = sdk.NewDec(100) diff --git a/x/staking/teststaking/helper.go b/x/staking/teststaking/helper.go index 1084f87f4b10..92ebb5454fd1 100644 --- a/x/staking/teststaking/helper.go +++ b/x/staking/teststaking/helper.go @@ -13,7 +13,6 @@ import ( "github.com/cosmos/cosmos-sdk/x/staking" "github.com/cosmos/cosmos-sdk/x/staking/keeper" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - "github.com/ethereum/go-ethereum/common" ) // Helper is a structure which wraps the staking message server @@ -35,24 +34,24 @@ func NewHelper(t *testing.T, ctx sdk.Context, k keeper.Keeper) *Helper { } // CreateValidator calls staking module `MsgServer/CreateValidator` to create a new validator -func (sh *Helper) CreateValidator(addr sdk.ValAddress, pk cryptotypes.PubKey, stakeAmount math.Int, evmAddress common.Address, ok bool) { +func (sh *Helper) CreateValidator(addr sdk.ValAddress, pk cryptotypes.PubKey, stakeAmount math.Int, ok bool) { coin := sdk.NewCoin(sh.Denom, stakeAmount) - sh.createValidator(addr, pk, coin, evmAddress, ok) + sh.createValidator(addr, pk, coin, ok) } // CreateValidatorWithValPower calls staking module `MsgServer/CreateValidator` to create a new validator with zero // commission -func (sh *Helper) CreateValidatorWithValPower(addr sdk.ValAddress, pk cryptotypes.PubKey, valPower int64, evmAddress common.Address, ok bool) math.Int { +func (sh *Helper) CreateValidatorWithValPower(addr sdk.ValAddress, pk cryptotypes.PubKey, valPower int64, ok bool) math.Int { amount := sh.k.TokensFromConsensusPower(sh.Ctx, valPower) coin := sdk.NewCoin(sh.Denom, amount) - sh.createValidator(addr, pk, coin, evmAddress, ok) + sh.createValidator(addr, pk, coin, ok) return amount } // CreateValidatorMsg returns a message used to create validator in this service. -func (sh *Helper) CreateValidatorMsg(addr sdk.ValAddress, pk cryptotypes.PubKey, stakeAmount math.Int, evmAddress common.Address) *stakingtypes.MsgCreateValidator { +func (sh *Helper) CreateValidatorMsg(addr sdk.ValAddress, pk cryptotypes.PubKey, stakeAmount math.Int) *stakingtypes.MsgCreateValidator { coin := sdk.NewCoin(sh.Denom, stakeAmount) - msg, err := stakingtypes.NewMsgCreateValidator(addr, pk, coin, stakingtypes.Description{}, sh.Commission, sdk.OneInt(), evmAddress) + msg, err := stakingtypes.NewMsgCreateValidator(addr, pk, coin, stakingtypes.Description{}, sh.Commission, sdk.OneInt()) require.NoError(sh.t, err) return msg } @@ -62,8 +61,8 @@ func (sh *Helper) CreateValidatorWithMsg(ctx context.Context, msg *stakingtypes. return sh.msgSrvr.CreateValidator(ctx, msg) } -func (sh *Helper) createValidator(addr sdk.ValAddress, pk cryptotypes.PubKey, coin sdk.Coin, evmAddress common.Address, ok bool) { - msg, err := stakingtypes.NewMsgCreateValidator(addr, pk, coin, stakingtypes.Description{}, sh.Commission, sdk.OneInt(), evmAddress) +func (sh *Helper) createValidator(addr sdk.ValAddress, pk cryptotypes.PubKey, coin sdk.Coin, ok bool) { + msg, err := stakingtypes.NewMsgCreateValidator(addr, pk, coin, stakingtypes.Description{}, sh.Commission, sdk.OneInt()) require.NoError(sh.t, err) res, err := sh.msgSrvr.CreateValidator(sdk.WrapSDKContext(sh.Ctx), msg) if ok { diff --git a/x/staking/teststaking/validator.go b/x/staking/teststaking/validator.go index 6f86f3405ec0..71459581f0e6 100644 --- a/x/staking/teststaking/validator.go +++ b/x/staking/teststaking/validator.go @@ -1,34 +1,18 @@ package teststaking import ( - "crypto/ecdsa" "testing" - "github.com/ethereum/go-ethereum/crypto" - "github.com/stretchr/testify/require" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/staking/types" - "github.com/ethereum/go-ethereum/common" ) // NewValidator is a testing helper method to create validators in tests -func NewValidator(t testing.TB, operator sdk.ValAddress, pubKey cryptotypes.PubKey, evmAddr common.Address) types.Validator { - v, err := types.NewValidator(operator, pubKey, types.Description{}, evmAddr) +func NewValidator(t testing.TB, operator sdk.ValAddress, pubKey cryptotypes.PubKey) types.Validator { + v, err := types.NewValidator(operator, pubKey, types.Description{}) require.NoError(t, err) return v } - -func RandomEVMAddress() (*common.Address, error) { - ethPrivateKey, err := crypto.GenerateKey() - if err != nil { - return nil, err - } - - orchEthPublicKey := ethPrivateKey.Public().(*ecdsa.PublicKey) - evmAddr := crypto.PubkeyToAddress(*orchEthPublicKey) - - return &evmAddr, nil -} diff --git a/x/staking/types/authz.pb.go b/x/staking/types/authz.pb.go index 473d6400b00a..ac9c88271f25 100644 --- a/x/staking/types/authz.pb.go +++ b/x/staking/types/authz.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-proto" types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/cosmos/gogoproto/gogoproto" + _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" io "io" math "math" diff --git a/x/staking/types/errors.go b/x/staking/types/errors.go index fbaae7c65f70..a9a6e43e35b6 100644 --- a/x/staking/types/errors.go +++ b/x/staking/types/errors.go @@ -50,7 +50,4 @@ var ( ErrNoHistoricalInfo = sdkerrors.Register(ModuleName, 38, "no historical info found") ErrEmptyValidatorPubKey = sdkerrors.Register(ModuleName, 39, "empty validator public key") ErrCommissionLTMinRate = sdkerrors.Register(ModuleName, 40, "commission cannot be less than min rate") - ErrValidatorEVMAddressExists = sdkerrors.Register(ModuleName, 41, "validator already exist for this EVM address; must use new validator EVM address") - ErrValidatorEVMZeroAddress = sdkerrors.Register(ModuleName, 42, "cannot use zero address for EVM address; must use a non zero validator EVM address") - ErrEVMAddressNotHex = sdkerrors.Register(ModuleName, 43, "the provided eth address is not a valid hex address") ) diff --git a/x/staking/types/genesis.pb.go b/x/staking/types/genesis.pb.go index c9ae0e266b5d..51a94e79d85b 100644 --- a/x/staking/types/genesis.pb.go +++ b/x/staking/types/genesis.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-proto" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/cosmos/gogoproto/gogoproto" + _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" io "io" math "math" diff --git a/x/staking/types/historical_info_test.go b/x/staking/types/historical_info_test.go index edef4caaa31e..da47623ac0c2 100644 --- a/x/staking/types/historical_info_test.go +++ b/x/staking/types/historical_info_test.go @@ -5,8 +5,6 @@ import ( "sort" "testing" - "github.com/cosmos/cosmos-sdk/x/staking/teststaking" - "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/codec/legacy" @@ -23,16 +21,10 @@ var header = tmproto.Header{ } func createValidators(t *testing.T) []types.Validator { - randomEVMAddress1, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - randomEVMAddress2, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - randomEVMAddress3, err := teststaking.RandomEVMAddress() - require.NoError(t, err) return []types.Validator{ - newValidator(t, valAddr1, pk1, *randomEVMAddress1), - newValidator(t, valAddr2, pk2, *randomEVMAddress2), - newValidator(t, valAddr3, pk3, *randomEVMAddress3), + newValidator(t, valAddr1, pk1), + newValidator(t, valAddr2, pk2), + newValidator(t, valAddr3, pk3), } } diff --git a/x/staking/types/keys_test.go b/x/staking/types/keys_test.go index a7b3e5c472bc..20269e671baf 100644 --- a/x/staking/types/keys_test.go +++ b/x/staking/types/keys_test.go @@ -7,8 +7,6 @@ import ( "testing" "time" - "github.com/cosmos/cosmos-sdk/x/staking/teststaking" - "github.com/stretchr/testify/require" "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" @@ -27,11 +25,7 @@ var ( func TestGetValidatorPowerRank(t *testing.T) { valAddr1 := sdk.ValAddress(keysAddr1) - - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - - val1 := newValidator(t, valAddr1, keysPK1, *randomEVMAddress) + val1 := newValidator(t, valAddr1, keysPK1) val1.Tokens = sdk.ZeroInt() val2, val3, val4 := val1, val1, val1 val2.Tokens = sdk.TokensFromConsensusPower(1, sdk.DefaultPowerReduction) diff --git a/x/staking/types/msg.go b/x/staking/types/msg.go index 0a2136761675..acf7f5469f20 100644 --- a/x/staking/types/msg.go +++ b/x/staking/types/msg.go @@ -6,7 +6,6 @@ import ( cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/ethereum/go-ethereum/common" ) // staking message types @@ -34,9 +33,7 @@ var ( // Delegator address and validator address are the same. func NewMsgCreateValidator( valAddr sdk.ValAddress, pubKey cryptotypes.PubKey, //nolint:interfacer - selfDelegation sdk.Coin, description Description, - commission CommissionRates, minSelfDelegation math.Int, - eth common.Address, + selfDelegation sdk.Coin, description Description, commission CommissionRates, minSelfDelegation math.Int, ) (*MsgCreateValidator, error) { var pkAny *codectypes.Any if pubKey != nil { @@ -53,7 +50,6 @@ func NewMsgCreateValidator( Value: selfDelegation, Commission: commission, MinSelfDelegation: minSelfDelegation, - EvmAddress: eth.Hex(), }, nil } @@ -145,25 +141,12 @@ func (msg MsgCreateValidator) UnpackInterfaces(unpacker codectypes.AnyUnpacker) // NewMsgEditValidator creates a new MsgEditValidator instance // //nolint:interfacer -func NewMsgEditValidator( - valAddr sdk.ValAddress, description Description, - newRate *sdk.Dec, newMinSelfDelegation *math.Int, - newEVMAddress *common.Address, -) *MsgEditValidator { - // TODO add test for EVM addresses edit - var evmStringAddress string - if newEVMAddress != nil { - evmStringAddress = newEVMAddress.Hex() - } else { - evmStringAddress = "" - } - +func NewMsgEditValidator(valAddr sdk.ValAddress, description Description, newRate *sdk.Dec, newMinSelfDelegation *math.Int) *MsgEditValidator { return &MsgEditValidator{ Description: description, CommissionRate: newRate, ValidatorAddress: valAddr.String(), MinSelfDelegation: newMinSelfDelegation, - EvmAddress: evmStringAddress, } } diff --git a/x/staking/types/msg_test.go b/x/staking/types/msg_test.go index c1cba7441c84..f1ba552d9115 100644 --- a/x/staking/types/msg_test.go +++ b/x/staking/types/msg_test.go @@ -3,8 +3,6 @@ package types_test import ( "testing" - "github.com/cosmos/cosmos-sdk/x/staking/teststaking" - "github.com/stretchr/testify/require" "github.com/cosmos/cosmos-sdk/codec" @@ -36,13 +34,10 @@ func TestMsgDecode(t *testing.T) { require.NoError(t, err) require.True(t, pk1.Equals(pkUnmarshaled.(*ed25519.PubKey))) - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - // now let's try to serialize the whole message commission1 := types.NewCommissionRates(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()) - msg, err := types.NewMsgCreateValidator(valAddr1, pk1, coinPos, types.Description{}, commission1, sdk.OneInt(), *randomEVMAddress) + msg, err := types.NewMsgCreateValidator(valAddr1, pk1, coinPos, types.Description{}, commission1, sdk.OneInt()) require.NoError(t, err) msgSerialized, err := cdc.MarshalInterface(msg) require.NoError(t, err) @@ -84,9 +79,7 @@ func TestMsgCreateValidator(t *testing.T) { for _, tc := range tests { description := types.NewDescription(tc.moniker, tc.identity, tc.website, tc.securityContact, tc.details) - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - msg, err := types.NewMsgCreateValidator(tc.validatorAddr, tc.pubkey, tc.bond, description, tc.CommissionRates, tc.minSelfDelegation, *randomEVMAddress) + msg, err := types.NewMsgCreateValidator(tc.validatorAddr, tc.pubkey, tc.bond, description, tc.CommissionRates, tc.minSelfDelegation) require.NoError(t, err) if tc.expectPass { require.Nil(t, msg.ValidateBasic(), "test: %v", tc.name) @@ -114,7 +107,8 @@ func TestMsgEditValidator(t *testing.T) { for _, tc := range tests { description := types.NewDescription(tc.moniker, tc.identity, tc.website, tc.securityContact, tc.details) newRate := sdk.ZeroDec() - msg := types.NewMsgEditValidator(tc.validatorAddr, description, &newRate, &tc.minSelfDelegation, nil) + + msg := types.NewMsgEditValidator(tc.validatorAddr, description, &newRate, &tc.minSelfDelegation) if tc.expectPass { require.Nil(t, msg.ValidateBasic(), "test: %v", tc.name) } else { diff --git a/x/staking/types/querier.go b/x/staking/types/querier.go index ac58688bad76..08fefae0736a 100644 --- a/x/staking/types/querier.go +++ b/x/staking/types/querier.go @@ -2,7 +2,6 @@ package types import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/ethereum/go-ethereum/common" ) // query endpoints supported by the staking Querier @@ -15,7 +14,6 @@ const ( QueryValidatorDelegations = "validatorDelegations" QueryValidatorRedelegations = "validatorRedelegations" QueryValidatorUnbondingDelegations = "validatorUnbondingDelegations" - QueryValidatorByEVMAddress = "validatorByEVMAddress" QueryDelegation = "delegation" QueryUnbondingDelegation = "unbondingDelegation" QueryDelegatorValidators = "delegatorValidators" @@ -39,18 +37,6 @@ func NewQueryDelegatorParams(delegatorAddr sdk.AccAddress) QueryDelegatorParams } } -// defines the params for the following query: -// - 'custom/staking/validatorByEVMAddress' -type QueryValidatorByEVMAddressParams struct { - EVMAddress string -} - -func NewQueryValidatorByEVMAddressParams(evmAddress common.Address) QueryValidatorByEVMAddressParams { - return QueryValidatorByEVMAddressParams{ - EVMAddress: evmAddress.Hex(), - } -} - // defines the params for the following queries: // - 'custom/staking/validator' // - 'custom/staking/validatorDelegations' diff --git a/x/staking/types/query.pb.go b/x/staking/types/query.pb.go index 24b43a281dcb..2e40de8c6f20 100644 --- a/x/staking/types/query.pb.go +++ b/x/staking/types/query.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-proto" query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/cosmos/gogoproto/gogoproto" + _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" proto "github.com/gogo/protobuf/proto" _ "google.golang.org/genproto/googleapis/api/annotations" diff --git a/x/staking/types/staking.pb.go b/x/staking/types/staking.pb.go index 95dd7de3ed11..65ce8b308086 100644 --- a/x/staking/types/staking.pb.go +++ b/x/staking/types/staking.pb.go @@ -11,7 +11,7 @@ import ( types1 "github.com/cosmos/cosmos-sdk/codec/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types2 "github.com/cosmos/cosmos-sdk/types" - _ "github.com/cosmos/gogoproto/gogoproto" + _ "github.com/gogo/protobuf/gogoproto" github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_protoc_gen_gogo_descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" @@ -336,9 +336,6 @@ type Validator struct { // // Since: cosmos-sdk 0.46 MinSelfDelegation github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,11,opt,name=min_self_delegation,json=minSelfDelegation,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"min_self_delegation"` - // This is a hex encoded 0x EVM public key that will be used by this - // validator on the target EVM chain. - EvmAddress string `protobuf:"bytes,12,opt,name=evm_address,json=evmAddress,proto3" json:"evm_address,omitempty"` } func (m *Validator) Reset() { *m = Validator{} } @@ -1145,113 +1142,112 @@ func init() { } var fileDescriptor_64c30c6cf92913c9 = []byte{ - // 1684 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0x4d, 0x6c, 0x63, 0x57, - 0x15, 0xf6, 0x73, 0x5c, 0xc7, 0x39, 0x4e, 0xe2, 0xe4, 0x4e, 0x5a, 0x3c, 0x16, 0xd8, 0xc6, 0x94, - 0x76, 0x8a, 0x3a, 0x0e, 0x13, 0xa4, 0x4a, 0x44, 0x48, 0x68, 0x1c, 0xbb, 0x4c, 0x98, 0x76, 0x70, - 0xed, 0x4c, 0x10, 0x3f, 0xe2, 0xe9, 0xfa, 0xbd, 0x1b, 0xe7, 0x92, 0xf7, 0xee, 0xb3, 0xde, 0xbd, - 0x0e, 0xb1, 0x04, 0x12, 0x12, 0x9b, 0x32, 0xab, 0x2e, 0xbb, 0x19, 0x69, 0xa4, 0xb2, 0xec, 0xb2, - 0x62, 0xc3, 0x82, 0x6d, 0xd5, 0xd5, 0xa8, 0x2b, 0x0a, 0x28, 0xa0, 0x99, 0x0d, 0xea, 0x0a, 0x75, - 0x0f, 0x42, 0xf7, 0xe7, 0xfd, 0xc4, 0x4e, 0xd2, 0xa4, 0x0a, 0x52, 0xa5, 0xd9, 0x24, 0xef, 0xde, - 0x7b, 0xce, 0xf7, 0xce, 0xf9, 0xce, 0xcf, 0x3b, 0xd7, 0xf0, 0xa2, 0x13, 0x70, 0x3f, 0xe0, 0xeb, - 0x5c, 0xe0, 0x03, 0xca, 0x86, 0xeb, 0x87, 0xb7, 0x06, 0x44, 0xe0, 0x5b, 0xd1, 0xba, 0x39, 0x0a, - 0x03, 0x11, 0xa0, 0x17, 0xb4, 0x54, 0x33, 0xda, 0x35, 0x52, 0x95, 0xb5, 0x61, 0x30, 0x0c, 0x94, - 0xc8, 0xba, 0x7c, 0xd2, 0xd2, 0x95, 0xeb, 0xc3, 0x20, 0x18, 0x7a, 0x64, 0x5d, 0xad, 0x06, 0xe3, - 0xbd, 0x75, 0xcc, 0x26, 0xe6, 0xa8, 0x3a, 0x7d, 0xe4, 0x8e, 0x43, 0x2c, 0x68, 0xc0, 0xcc, 0x79, - 0x6d, 0xfa, 0x5c, 0x50, 0x9f, 0x70, 0x81, 0xfd, 0x51, 0x84, 0xad, 0x2d, 0xb1, 0xf5, 0x4b, 0x8d, - 0x59, 0x06, 0xdb, 0xb8, 0x32, 0xc0, 0x9c, 0xc4, 0x7e, 0x38, 0x01, 0x8d, 0xb0, 0xbf, 0x2a, 0x08, - 0x73, 0x49, 0xe8, 0x53, 0x26, 0xd6, 0xc5, 0x64, 0x44, 0xb8, 0xfe, 0xab, 0x4f, 0x1b, 0xbf, 0xb7, - 0x60, 0xf9, 0x0e, 0xe5, 0x22, 0x08, 0xa9, 0x83, 0xbd, 0x6d, 0xb6, 0x17, 0xa0, 0xd7, 0x20, 0xbf, - 0x4f, 0xb0, 0x4b, 0xc2, 0xb2, 0x55, 0xb7, 0x6e, 0x14, 0x37, 0xca, 0xcd, 0x04, 0xa1, 0xa9, 0x75, - 0xef, 0xa8, 0xf3, 0x56, 0xee, 0xc3, 0xe3, 0x5a, 0xa6, 0x67, 0xa4, 0xd1, 0xf7, 0x21, 0x7f, 0x88, - 0x3d, 0x4e, 0x44, 0x39, 0x5b, 0x9f, 0xbb, 0x51, 0xdc, 0xf8, 0x7a, 0xf3, 0x74, 0xfa, 0x9a, 0xbb, - 0xd8, 0xa3, 0x2e, 0x16, 0x41, 0x0c, 0xa0, 0xd5, 0x1a, 0xef, 0x67, 0xa1, 0xb4, 0x15, 0xf8, 0x3e, - 0xe5, 0x9c, 0x06, 0xac, 0x87, 0x05, 0xe1, 0xa8, 0x0b, 0xb9, 0x10, 0x0b, 0xa2, 0x4c, 0x59, 0x68, - 0x7d, 0x4f, 0xca, 0xff, 0xf5, 0xb8, 0xf6, 0xd2, 0x90, 0x8a, 0xfd, 0xf1, 0xa0, 0xe9, 0x04, 0xbe, - 0x21, 0xc3, 0xfc, 0xbb, 0xc9, 0xdd, 0x03, 0xe3, 0x5f, 0x9b, 0x38, 0x1f, 0x7f, 0x70, 0x13, 0x8c, - 0x0d, 0x6d, 0xe2, 0xf4, 0x14, 0x12, 0xfa, 0x31, 0x14, 0x7c, 0x7c, 0x64, 0x2b, 0xd4, 0xec, 0x15, - 0xa0, 0xce, 0xfb, 0xf8, 0x48, 0xda, 0x8a, 0x5c, 0x28, 0x49, 0x60, 0x67, 0x1f, 0xb3, 0x21, 0xd1, - 0xf8, 0x73, 0x57, 0x80, 0xbf, 0xe4, 0xe3, 0xa3, 0x2d, 0x85, 0x29, 0xdf, 0xb2, 0x59, 0x78, 0xf7, - 0x51, 0x2d, 0xf3, 0xaf, 0x47, 0x35, 0xab, 0xf1, 0x27, 0x0b, 0x20, 0xa1, 0x0b, 0xfd, 0x1c, 0x56, - 0x9c, 0x78, 0xa5, 0x5e, 0xcf, 0x4d, 0x00, 0x5f, 0x3e, 0x2b, 0x10, 0x53, 0x64, 0xb7, 0x0a, 0xd2, - 0xd0, 0xc7, 0xc7, 0x35, 0xab, 0x57, 0x72, 0xa6, 0xe2, 0xd0, 0x81, 0xe2, 0x78, 0xe4, 0x62, 0x41, - 0x6c, 0x99, 0x9a, 0x8a, 0xb8, 0xe2, 0x46, 0xa5, 0xa9, 0xf3, 0xb6, 0x19, 0xe5, 0x6d, 0x73, 0x27, - 0xca, 0x5b, 0x8d, 0xf5, 0xce, 0x3f, 0x6a, 0x56, 0x0f, 0xb4, 0xa2, 0x3c, 0x4a, 0x59, 0xff, 0xbe, - 0x05, 0xc5, 0x36, 0xe1, 0x4e, 0x48, 0x47, 0xb2, 0x10, 0x50, 0x19, 0xe6, 0xfd, 0x80, 0xd1, 0x03, - 0x93, 0x76, 0x0b, 0xbd, 0x68, 0x89, 0x2a, 0x50, 0xa0, 0x2e, 0x61, 0x82, 0x8a, 0x89, 0x0e, 0x58, - 0x2f, 0x5e, 0x4b, 0xad, 0x5f, 0x91, 0x01, 0xa7, 0x11, 0xd7, 0xbd, 0x68, 0x89, 0x5e, 0x81, 0x15, - 0x4e, 0x9c, 0x71, 0x48, 0xc5, 0xc4, 0x76, 0x02, 0x26, 0xb0, 0x23, 0xca, 0x39, 0x25, 0x52, 0x8a, - 0xf6, 0xb7, 0xf4, 0xb6, 0x04, 0x71, 0x89, 0xc0, 0xd4, 0xe3, 0xe5, 0xe7, 0x34, 0x88, 0x59, 0xa6, - 0xcc, 0xfd, 0x34, 0x0f, 0x0b, 0x71, 0xde, 0xa2, 0x2d, 0x58, 0x09, 0x46, 0x24, 0x94, 0xcf, 0x36, - 0x76, 0xdd, 0x90, 0x70, 0x6e, 0x32, 0xb4, 0xfc, 0xf1, 0x07, 0x37, 0xd7, 0x0c, 0xdd, 0xb7, 0xf5, - 0x49, 0x5f, 0x84, 0x94, 0x0d, 0x7b, 0xa5, 0x48, 0xc3, 0x6c, 0xa3, 0x9f, 0xc8, 0x80, 0x31, 0x4e, - 0x18, 0x1f, 0x73, 0x7b, 0x34, 0x1e, 0x1c, 0x90, 0x89, 0xe1, 0x75, 0x6d, 0x86, 0xd7, 0xdb, 0x6c, - 0xd2, 0x2a, 0x7f, 0x94, 0x40, 0x3b, 0xe1, 0x64, 0x24, 0x82, 0x66, 0x77, 0x3c, 0xb8, 0x4b, 0x26, - 0x32, 0x5a, 0x06, 0xa7, 0xab, 0x60, 0xd0, 0x0b, 0x90, 0xff, 0x25, 0xa6, 0x1e, 0x71, 0x15, 0x2b, - 0x85, 0x9e, 0x59, 0xa1, 0x4d, 0xc8, 0x73, 0x81, 0xc5, 0x98, 0x2b, 0x2a, 0x96, 0x37, 0x1a, 0x67, - 0x65, 0x46, 0x2b, 0x60, 0x6e, 0x5f, 0x49, 0xf6, 0x8c, 0x06, 0xda, 0x81, 0xbc, 0x08, 0x0e, 0x08, - 0x33, 0x24, 0x5d, 0x2a, 0xab, 0xb7, 0x99, 0x48, 0x65, 0xf5, 0x36, 0x13, 0x3d, 0x83, 0x85, 0x86, - 0xb0, 0xe2, 0x12, 0x8f, 0x0c, 0x15, 0x95, 0x7c, 0x1f, 0x87, 0x84, 0x97, 0xf3, 0x57, 0x50, 0x35, - 0xa5, 0x18, 0xb5, 0xaf, 0x40, 0xd1, 0x5d, 0x28, 0xba, 0x49, 0xba, 0x95, 0xe7, 0x15, 0xd1, 0xdf, - 0x38, 0xcb, 0xff, 0x54, 0x66, 0x9a, 0x26, 0x95, 0xd6, 0x96, 0xc9, 0x35, 0x66, 0x83, 0x80, 0xb9, - 0x94, 0x0d, 0xed, 0x7d, 0x42, 0x87, 0xfb, 0xa2, 0x5c, 0xa8, 0x5b, 0x37, 0xe6, 0x7a, 0xa5, 0x78, - 0xff, 0x8e, 0xda, 0x46, 0x77, 0x61, 0x39, 0x11, 0x55, 0xb5, 0xb3, 0x70, 0x89, 0xda, 0x59, 0x8a, - 0x75, 0xe5, 0x29, 0xba, 0x03, 0x90, 0x14, 0x66, 0x19, 0x14, 0x50, 0xe3, 0xf3, 0xab, 0xdb, 0xb8, - 0x90, 0xd2, 0x45, 0x1e, 0x5c, 0xf3, 0x29, 0xb3, 0x39, 0xf1, 0xf6, 0x6c, 0x43, 0x95, 0x84, 0x2c, - 0x5e, 0x41, 0x68, 0x57, 0x7d, 0xca, 0xfa, 0xc4, 0xdb, 0x6b, 0xc7, 0xb0, 0xa8, 0x06, 0x45, 0x72, - 0xe8, 0xc7, 0xa5, 0xb2, 0xa8, 0xaa, 0x0c, 0xc8, 0xa1, 0x6f, 0x6a, 0x61, 0x73, 0xf1, 0xed, 0x47, - 0xb5, 0x8c, 0x29, 0xb6, 0x4c, 0xa3, 0x0b, 0x8b, 0xbb, 0xd8, 0x33, 0x67, 0x84, 0xa3, 0xd7, 0x60, - 0x01, 0x47, 0x8b, 0xb2, 0x55, 0x9f, 0x3b, 0xb7, 0xce, 0x12, 0x51, 0x5d, 0xbe, 0xbf, 0xfd, 0x7b, - 0xdd, 0x6a, 0xfc, 0xc1, 0x82, 0x7c, 0x7b, 0xb7, 0x8b, 0x69, 0x88, 0x3a, 0xb0, 0x9a, 0x64, 0xdc, - 0x45, 0x8b, 0x37, 0x49, 0xd2, 0xa8, 0x7a, 0x3b, 0xb0, 0x7a, 0x18, 0xf5, 0x83, 0x18, 0x26, 0xfb, - 0x79, 0x30, 0xb1, 0xca, 0xe9, 0x8e, 0x77, 0x60, 0x5e, 0x5b, 0xc9, 0xd1, 0x26, 0x3c, 0x37, 0x92, - 0x0f, 0xca, 0xdf, 0xe2, 0x46, 0xf5, 0xcc, 0x4c, 0x55, 0xf2, 0x26, 0xc2, 0x5a, 0xa5, 0xf1, 0x1f, - 0x0b, 0xa0, 0xbd, 0xbb, 0xbb, 0x13, 0xd2, 0x91, 0x47, 0xc4, 0x55, 0x79, 0xfc, 0x06, 0x3c, 0x9f, - 0x78, 0xcc, 0x43, 0xe7, 0xc2, 0x5e, 0x5f, 0x8b, 0xd5, 0xfa, 0xa1, 0x73, 0x2a, 0x9a, 0xcb, 0x45, - 0x8c, 0x36, 0x77, 0x61, 0xb4, 0x36, 0x17, 0xa7, 0xd3, 0xd8, 0x87, 0x62, 0xe2, 0x3e, 0x47, 0x6d, - 0x28, 0x08, 0xf3, 0x6c, 0xd8, 0x6c, 0x9c, 0xcd, 0x66, 0xa4, 0x66, 0x18, 0x8d, 0x35, 0x1b, 0xff, - 0x95, 0xa4, 0x26, 0x29, 0xfd, 0xa5, 0x4a, 0x23, 0xd9, 0x9c, 0x4d, 0xf3, 0xbc, 0x8a, 0x91, 0xc3, - 0x60, 0x4d, 0xb1, 0xfa, 0xbb, 0x2c, 0x5c, 0xbb, 0x1f, 0xb5, 0xa3, 0x2f, 0x2d, 0x13, 0x5d, 0x98, - 0x27, 0x4c, 0x84, 0x54, 0x51, 0x21, 0x63, 0xfd, 0xed, 0xb3, 0x62, 0x7d, 0x8a, 0x2f, 0x1d, 0x26, - 0xc2, 0x89, 0x89, 0x7c, 0x04, 0x33, 0xc5, 0xc2, 0xdf, 0xb2, 0x50, 0x3e, 0x4b, 0x13, 0xbd, 0x0c, - 0x25, 0x27, 0x24, 0x6a, 0x23, 0xfa, 0x2c, 0x58, 0xea, 0xb3, 0xb0, 0x1c, 0x6d, 0x9b, 0xaf, 0xc2, - 0x9b, 0x20, 0x27, 0x2c, 0x99, 0x58, 0x52, 0xf4, 0xd2, 0x23, 0xd5, 0x72, 0xa2, 0xac, 0xbe, 0x0b, - 0x04, 0x4a, 0x94, 0x51, 0x41, 0xb1, 0x67, 0x0f, 0xb0, 0x87, 0x99, 0xf3, 0x45, 0x46, 0xcf, 0xd9, - 0x4e, 0xbe, 0x6c, 0x40, 0x5b, 0x1a, 0x13, 0xed, 0xc2, 0x7c, 0x04, 0x9f, 0xbb, 0x02, 0xf8, 0x08, - 0x2c, 0x35, 0x66, 0x7d, 0x92, 0x85, 0xd5, 0x1e, 0x71, 0x9f, 0x2d, 0x5a, 0x7f, 0x06, 0xa0, 0x0b, - 0x4e, 0xf6, 0xc1, 0x2f, 0xc0, 0xec, 0x6c, 0x01, 0x2f, 0x68, 0xbc, 0x36, 0x17, 0x29, 0x6e, 0x3f, - 0xca, 0xc2, 0x62, 0x9a, 0xdb, 0x67, 0xe0, 0xbb, 0x80, 0xb6, 0x93, 0x6e, 0x90, 0x53, 0xdd, 0xe0, - 0x95, 0xb3, 0xba, 0xc1, 0x4c, 0xd6, 0x9d, 0xdf, 0x06, 0x3e, 0xcb, 0x42, 0xbe, 0x8b, 0x43, 0xec, - 0x73, 0xf4, 0xc3, 0x99, 0x09, 0x4f, 0x5f, 0xbb, 0xae, 0xcf, 0xe4, 0x5c, 0xdb, 0xdc, 0xfa, 0x75, - 0xca, 0xbd, 0x7b, 0xca, 0x80, 0xf7, 0x4d, 0x58, 0x96, 0x77, 0xc8, 0xd8, 0x15, 0x4d, 0xe2, 0x92, - 0xba, 0x04, 0xc6, 0xd7, 0x0f, 0x2e, 0xe7, 0x29, 0x29, 0x96, 0x34, 0x3a, 0x29, 0x03, 0x3e, 0x3e, - 0xea, 0xe8, 0x1d, 0x74, 0x13, 0xd0, 0x7e, 0x7c, 0xab, 0xb7, 0x13, 0x0a, 0xa4, 0xdc, 0x6a, 0x72, - 0x12, 0x89, 0x7f, 0x0d, 0x40, 0x5a, 0x61, 0xbb, 0x84, 0x05, 0xbe, 0xb9, 0x04, 0x2d, 0xc8, 0x9d, - 0xb6, 0xdc, 0x40, 0xbf, 0xd6, 0xc3, 0xe2, 0xd4, 0xf5, 0xd2, 0xcc, 0xe9, 0x6f, 0x5c, 0x2e, 0x53, - 0x3f, 0x3b, 0xae, 0x55, 0x26, 0xd8, 0xf7, 0x36, 0x1b, 0xa7, 0x40, 0x36, 0xd4, 0xf0, 0x78, 0xf2, - 0x5a, 0x9a, 0xca, 0xe0, 0xf7, 0x2c, 0x40, 0x49, 0xcb, 0xed, 0x11, 0x3e, 0x92, 0xf7, 0x1e, 0x39, - 0x15, 0xa7, 0x46, 0x58, 0xeb, 0xfc, 0xa9, 0x38, 0xd1, 0x8f, 0xa6, 0xe2, 0x54, 0x45, 0x7c, 0x37, - 0x69, 0x70, 0x59, 0x13, 0x43, 0x03, 0x33, 0xc0, 0x9c, 0xa4, 0x26, 0x6b, 0x1a, 0x69, 0xcf, 0xf4, - 0xb0, 0x4c, 0xe3, 0x13, 0x0b, 0xae, 0xcf, 0x64, 0x53, 0x6c, 0xec, 0x2f, 0x00, 0x85, 0xa9, 0x43, - 0x15, 0x9b, 0x89, 0x31, 0xfa, 0xd2, 0xc9, 0xb9, 0x1a, 0xce, 0xf4, 0xca, 0xff, 0x57, 0x8f, 0xce, - 0xa9, 0x08, 0xfc, 0xd9, 0x82, 0xb5, 0xb4, 0x31, 0xb1, 0x5b, 0xf7, 0x60, 0x31, 0x6d, 0x8b, 0x71, - 0xe8, 0xc5, 0x8b, 0x38, 0x64, 0x7c, 0x39, 0xa1, 0x8f, 0xde, 0x4a, 0x0a, 0x57, 0xff, 0x9a, 0x74, - 0xeb, 0xc2, 0xdc, 0x44, 0x36, 0x4d, 0x17, 0x70, 0x2e, 0x9a, 0x62, 0x72, 0xdd, 0x20, 0xf0, 0xd0, - 0x6f, 0x60, 0x95, 0x05, 0xc2, 0x96, 0x59, 0x4e, 0x5c, 0xdb, 0x5c, 0x6d, 0x75, 0xf7, 0x7b, 0xeb, - 0x72, 0x94, 0x7d, 0x7a, 0x5c, 0x9b, 0x85, 0x9a, 0xe2, 0xb1, 0xc4, 0x02, 0xd1, 0x52, 0xe7, 0x3b, - 0xfa, 0xe2, 0x1b, 0xc2, 0xd2, 0xc9, 0x57, 0xeb, 0x6e, 0xf9, 0xe6, 0xa5, 0x5f, 0xbd, 0x74, 0xde, - 0x6b, 0x17, 0x07, 0xa9, 0x77, 0x6e, 0x16, 0x64, 0x0c, 0xff, 0xfd, 0xa8, 0x66, 0x7d, 0xeb, 0x8f, - 0x16, 0x40, 0x72, 0xc7, 0x47, 0xaf, 0xc2, 0x57, 0x5a, 0x3f, 0xba, 0xd7, 0xb6, 0xfb, 0x3b, 0xb7, - 0x77, 0xee, 0xf7, 0xed, 0xfb, 0xf7, 0xfa, 0xdd, 0xce, 0xd6, 0xf6, 0xeb, 0xdb, 0x9d, 0xf6, 0x4a, - 0xa6, 0x52, 0x7a, 0xf0, 0xb0, 0x5e, 0xbc, 0xcf, 0xf8, 0x88, 0x38, 0x74, 0x8f, 0x12, 0x17, 0xbd, - 0x04, 0x6b, 0x27, 0xa5, 0xe5, 0xaa, 0xd3, 0x5e, 0xb1, 0x2a, 0x8b, 0x0f, 0x1e, 0xd6, 0x0b, 0x7a, - 0x3a, 0x22, 0x2e, 0xba, 0x01, 0xcf, 0xcf, 0xca, 0x6d, 0xdf, 0xfb, 0xc1, 0x4a, 0xb6, 0xb2, 0xf4, - 0xe0, 0x61, 0x7d, 0x21, 0x1e, 0xa3, 0x50, 0x03, 0x50, 0x5a, 0xd2, 0xe0, 0xcd, 0x55, 0xe0, 0xc1, - 0xc3, 0x7a, 0x5e, 0xd3, 0x56, 0xc9, 0xbd, 0xfd, 0x5e, 0x35, 0xd3, 0x7a, 0xfd, 0xc3, 0x27, 0x55, - 0xeb, 0xf1, 0x93, 0xaa, 0xf5, 0xcf, 0x27, 0x55, 0xeb, 0x9d, 0xa7, 0xd5, 0xcc, 0xe3, 0xa7, 0xd5, - 0xcc, 0x5f, 0x9e, 0x56, 0x33, 0x3f, 0x7d, 0xf5, 0x5c, 0xc6, 0x8e, 0xe2, 0x9f, 0x7a, 0x15, 0x77, - 0x83, 0xbc, 0x6a, 0xca, 0xdf, 0xf9, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xad, 0x58, 0x00, 0x45, - 0x09, 0x16, 0x00, 0x00, + // 1669 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0x4d, 0x6c, 0x1b, 0xc7, + 0x15, 0xe6, 0x52, 0x0c, 0x45, 0x3d, 0x4a, 0xa2, 0x34, 0x56, 0x52, 0x9a, 0x68, 0x49, 0x96, 0x4d, + 0x13, 0xa7, 0x88, 0xa9, 0x5a, 0x05, 0x02, 0x54, 0x28, 0x50, 0x98, 0x22, 0x53, 0xab, 0x4e, 0x5c, + 0x86, 0x94, 0x55, 0xf4, 0x07, 0x5d, 0x0c, 0x77, 0x47, 0xd4, 0x54, 0xbb, 0xb3, 0xc4, 0xce, 0xd0, + 0x15, 0x81, 0x16, 0x28, 0xd0, 0x4b, 0xea, 0x53, 0x8e, 0xb9, 0x18, 0x30, 0x90, 0x1e, 0x73, 0x0c, + 0x7a, 0xe9, 0xa1, 0xd7, 0x34, 0x27, 0x23, 0xa7, 0xa6, 0x2d, 0xd4, 0xc2, 0xbe, 0x14, 0x3d, 0x15, + 0xb9, 0xb7, 0x28, 0xe6, 0x67, 0x7f, 0x4c, 0x8a, 0x8a, 0x14, 0xa8, 0x40, 0x00, 0x5f, 0xec, 0x9d, + 0x99, 0xf7, 0xbe, 0x79, 0xef, 0x7b, 0x3f, 0x7a, 0x43, 0x78, 0xd1, 0x09, 0xb8, 0x1f, 0xf0, 0x4d, + 0x2e, 0xf0, 0x11, 0x65, 0xc3, 0xcd, 0x7b, 0x37, 0x06, 0x44, 0xe0, 0x1b, 0xd1, 0xba, 0x39, 0x0a, + 0x03, 0x11, 0xa0, 0x17, 0xb4, 0x54, 0x33, 0xda, 0x35, 0x52, 0x95, 0x8d, 0x61, 0x30, 0x0c, 0x94, + 0xc8, 0xa6, 0xfc, 0xd2, 0xd2, 0x95, 0xab, 0xc3, 0x20, 0x18, 0x7a, 0x64, 0x53, 0xad, 0x06, 0xe3, + 0x83, 0x4d, 0xcc, 0x26, 0xe6, 0xa8, 0x3a, 0x7d, 0xe4, 0x8e, 0x43, 0x2c, 0x68, 0xc0, 0xcc, 0x79, + 0x6d, 0xfa, 0x5c, 0x50, 0x9f, 0x70, 0x81, 0xfd, 0x51, 0x84, 0xad, 0x2d, 0xb1, 0xf5, 0xa5, 0xc6, + 0x2c, 0x83, 0x6d, 0x5c, 0x19, 0x60, 0x4e, 0x62, 0x3f, 0x9c, 0x80, 0x46, 0xd8, 0x5f, 0x16, 0x84, + 0xb9, 0x24, 0xf4, 0x29, 0x13, 0x9b, 0x62, 0x32, 0x22, 0x5c, 0xff, 0xab, 0x4f, 0x1b, 0xbf, 0xb5, + 0x60, 0xf5, 0x16, 0xe5, 0x22, 0x08, 0xa9, 0x83, 0xbd, 0x5d, 0x76, 0x10, 0xa0, 0xd7, 0x20, 0x7f, + 0x48, 0xb0, 0x4b, 0xc2, 0xb2, 0x55, 0xb7, 0xae, 0x15, 0xb7, 0xca, 0xcd, 0x04, 0xa1, 0xa9, 0x75, + 0x6f, 0xa9, 0xf3, 0x56, 0xee, 0xc3, 0x93, 0x5a, 0xa6, 0x67, 0xa4, 0xd1, 0x77, 0x21, 0x7f, 0x0f, + 0x7b, 0x9c, 0x88, 0x72, 0xb6, 0xbe, 0x70, 0xad, 0xb8, 0xf5, 0xd5, 0xe6, 0xe9, 0xf4, 0x35, 0xf7, + 0xb1, 0x47, 0x5d, 0x2c, 0x82, 0x18, 0x40, 0xab, 0x35, 0xde, 0xcf, 0x42, 0x69, 0x27, 0xf0, 0x7d, + 0xca, 0x39, 0x0d, 0x58, 0x0f, 0x0b, 0xc2, 0x51, 0x17, 0x72, 0x21, 0x16, 0x44, 0x99, 0xb2, 0xd4, + 0xfa, 0x8e, 0x94, 0xff, 0xcb, 0x49, 0xed, 0xa5, 0x21, 0x15, 0x87, 0xe3, 0x41, 0xd3, 0x09, 0x7c, + 0x43, 0x86, 0xf9, 0xef, 0x3a, 0x77, 0x8f, 0x8c, 0x7f, 0x6d, 0xe2, 0x7c, 0xfc, 0xc1, 0x75, 0x30, + 0x36, 0xb4, 0x89, 0xd3, 0x53, 0x48, 0xe8, 0x87, 0x50, 0xf0, 0xf1, 0xb1, 0xad, 0x50, 0xb3, 0x97, + 0x80, 0xba, 0xe8, 0xe3, 0x63, 0x69, 0x2b, 0x72, 0xa1, 0x24, 0x81, 0x9d, 0x43, 0xcc, 0x86, 0x44, + 0xe3, 0x2f, 0x5c, 0x02, 0xfe, 0x8a, 0x8f, 0x8f, 0x77, 0x14, 0xa6, 0xbc, 0x65, 0xbb, 0xf0, 0xee, + 0xc3, 0x5a, 0xe6, 0x9f, 0x0f, 0x6b, 0x56, 0xe3, 0x0f, 0x16, 0x40, 0x42, 0x17, 0xfa, 0x29, 0xac, + 0x39, 0xf1, 0x4a, 0x5d, 0xcf, 0x4d, 0x00, 0x5f, 0x9e, 0x17, 0x88, 0x29, 0xb2, 0x5b, 0x05, 0x69, + 0xe8, 0xa3, 0x93, 0x9a, 0xd5, 0x2b, 0x39, 0x53, 0x71, 0xe8, 0x40, 0x71, 0x3c, 0x72, 0xb1, 0x20, + 0xb6, 0x4c, 0x4d, 0x45, 0x5c, 0x71, 0xab, 0xd2, 0xd4, 0x79, 0xdb, 0x8c, 0xf2, 0xb6, 0xb9, 0x17, + 0xe5, 0xad, 0xc6, 0x7a, 0xe7, 0xef, 0x35, 0xab, 0x07, 0x5a, 0x51, 0x1e, 0xa5, 0xac, 0x7f, 0xdf, + 0x82, 0x62, 0x9b, 0x70, 0x27, 0xa4, 0x23, 0x59, 0x08, 0xa8, 0x0c, 0x8b, 0x7e, 0xc0, 0xe8, 0x91, + 0x49, 0xbb, 0xa5, 0x5e, 0xb4, 0x44, 0x15, 0x28, 0x50, 0x97, 0x30, 0x41, 0xc5, 0x44, 0x07, 0xac, + 0x17, 0xaf, 0xa5, 0xd6, 0x2f, 0xc8, 0x80, 0xd3, 0x88, 0xeb, 0x5e, 0xb4, 0x44, 0xaf, 0xc0, 0x1a, + 0x27, 0xce, 0x38, 0xa4, 0x62, 0x62, 0x3b, 0x01, 0x13, 0xd8, 0x11, 0xe5, 0x9c, 0x12, 0x29, 0x45, + 0xfb, 0x3b, 0x7a, 0x5b, 0x82, 0xb8, 0x44, 0x60, 0xea, 0xf1, 0xf2, 0x73, 0x1a, 0xc4, 0x2c, 0x53, + 0xe6, 0xfe, 0x29, 0x0f, 0x4b, 0x71, 0xde, 0xa2, 0x1d, 0x58, 0x0b, 0x46, 0x24, 0x94, 0xdf, 0x36, + 0x76, 0xdd, 0x90, 0x70, 0x6e, 0x32, 0xb4, 0xfc, 0xf1, 0x07, 0xd7, 0x37, 0x0c, 0xdd, 0x37, 0xf5, + 0x49, 0x5f, 0x84, 0x94, 0x0d, 0x7b, 0xa5, 0x48, 0xc3, 0x6c, 0xa3, 0x1f, 0xc9, 0x80, 0x31, 0x4e, + 0x18, 0x1f, 0x73, 0x7b, 0x34, 0x1e, 0x1c, 0x91, 0x89, 0xe1, 0x75, 0x63, 0x86, 0xd7, 0x9b, 0x6c, + 0xd2, 0x2a, 0x7f, 0x94, 0x40, 0x3b, 0xe1, 0x64, 0x24, 0x82, 0x66, 0x77, 0x3c, 0xb8, 0x4d, 0x26, + 0x32, 0x5a, 0x06, 0xa7, 0xab, 0x60, 0xd0, 0x0b, 0x90, 0xff, 0x39, 0xa6, 0x1e, 0x71, 0x15, 0x2b, + 0x85, 0x9e, 0x59, 0xa1, 0x6d, 0xc8, 0x73, 0x81, 0xc5, 0x98, 0x2b, 0x2a, 0x56, 0xb7, 0x1a, 0xf3, + 0x32, 0xa3, 0x15, 0x30, 0xb7, 0xaf, 0x24, 0x7b, 0x46, 0x03, 0xed, 0x41, 0x5e, 0x04, 0x47, 0x84, + 0x19, 0x92, 0x2e, 0x94, 0xd5, 0xbb, 0x4c, 0xa4, 0xb2, 0x7a, 0x97, 0x89, 0x9e, 0xc1, 0x42, 0x43, + 0x58, 0x73, 0x89, 0x47, 0x86, 0x8a, 0x4a, 0x7e, 0x88, 0x43, 0xc2, 0xcb, 0xf9, 0x4b, 0xa8, 0x9a, + 0x52, 0x8c, 0xda, 0x57, 0xa0, 0xe8, 0x36, 0x14, 0xdd, 0x24, 0xdd, 0xca, 0x8b, 0x8a, 0xe8, 0xaf, + 0xcd, 0xf3, 0x3f, 0x95, 0x99, 0xa6, 0x49, 0xa5, 0xb5, 0x65, 0x72, 0x8d, 0xd9, 0x20, 0x60, 0x2e, + 0x65, 0x43, 0xfb, 0x90, 0xd0, 0xe1, 0xa1, 0x28, 0x17, 0xea, 0xd6, 0xb5, 0x85, 0x5e, 0x29, 0xde, + 0xbf, 0xa5, 0xb6, 0xd1, 0x6d, 0x58, 0x4d, 0x44, 0x55, 0xed, 0x2c, 0x5d, 0xa0, 0x76, 0x56, 0x62, + 0x5d, 0x79, 0x8a, 0x6e, 0x01, 0x24, 0x85, 0x59, 0x06, 0x05, 0xd4, 0xf8, 0xec, 0xea, 0x36, 0x2e, + 0xa4, 0x74, 0x91, 0x07, 0x57, 0x7c, 0xca, 0x6c, 0x4e, 0xbc, 0x03, 0xdb, 0x50, 0x25, 0x21, 0x8b, + 0x97, 0x10, 0xda, 0x75, 0x9f, 0xb2, 0x3e, 0xf1, 0x0e, 0xda, 0x31, 0xec, 0xf6, 0xf2, 0xdb, 0x0f, + 0x6b, 0x19, 0x53, 0x4b, 0x99, 0x46, 0x17, 0x96, 0xf7, 0xb1, 0x67, 0xca, 0x80, 0x70, 0xf4, 0x1a, + 0x2c, 0xe1, 0x68, 0x51, 0xb6, 0xea, 0x0b, 0x67, 0x96, 0x51, 0x22, 0xaa, 0xab, 0xf3, 0xd7, 0x7f, + 0xab, 0x5b, 0x8d, 0xdf, 0x59, 0x90, 0x6f, 0xef, 0x77, 0x31, 0x0d, 0x51, 0x07, 0xd6, 0x93, 0x84, + 0x3a, 0x6f, 0x6d, 0x26, 0x39, 0x18, 0x15, 0x67, 0x07, 0xd6, 0xef, 0x45, 0xe5, 0x1e, 0xc3, 0x64, + 0x3f, 0x0b, 0x26, 0x56, 0x31, 0xfb, 0x53, 0x8e, 0x77, 0x60, 0x51, 0x5b, 0xc9, 0xd1, 0x36, 0x3c, + 0x37, 0x92, 0x1f, 0xca, 0xdf, 0xe2, 0x56, 0x75, 0x6e, 0x22, 0x2a, 0x79, 0x13, 0x40, 0xad, 0xd2, + 0xf8, 0x8f, 0x05, 0xd0, 0xde, 0xdf, 0xdf, 0x0b, 0xe9, 0xc8, 0x23, 0xe2, 0xb2, 0x3c, 0x7e, 0x03, + 0x9e, 0x4f, 0x3c, 0xe6, 0xa1, 0x73, 0x6e, 0xaf, 0xaf, 0xc4, 0x6a, 0xfd, 0xd0, 0x39, 0x15, 0xcd, + 0xe5, 0x22, 0x46, 0x5b, 0x38, 0x37, 0x5a, 0x9b, 0x8b, 0xd3, 0x69, 0xec, 0x43, 0x31, 0x71, 0x9f, + 0xa3, 0x36, 0x14, 0x84, 0xf9, 0x36, 0x6c, 0x36, 0xe6, 0xb3, 0x19, 0xa9, 0x19, 0x46, 0x63, 0xcd, + 0xc6, 0x7f, 0x25, 0xa9, 0x71, 0xc6, 0x7e, 0xb1, 0xd2, 0x48, 0xf6, 0x5e, 0xd3, 0x1b, 0x2f, 0x63, + 0xa2, 0x30, 0x58, 0x53, 0xac, 0xfe, 0x26, 0x0b, 0x57, 0xee, 0x46, 0xdd, 0xe6, 0x0b, 0xcb, 0x44, + 0x17, 0x16, 0x09, 0x13, 0x21, 0x55, 0x54, 0xc8, 0x58, 0x7f, 0x73, 0x5e, 0xac, 0x4f, 0xf1, 0xa5, + 0xc3, 0x44, 0x38, 0x31, 0x91, 0x8f, 0x60, 0xa6, 0x58, 0xf8, 0x6b, 0x16, 0xca, 0xf3, 0x34, 0xd1, + 0xcb, 0x50, 0x72, 0x42, 0xa2, 0x36, 0xa2, 0xae, 0x6f, 0xa9, 0xae, 0xbf, 0x1a, 0x6d, 0x9b, 0xa6, + 0xff, 0x26, 0xc8, 0x01, 0x4a, 0x26, 0x96, 0x14, 0xbd, 0xf0, 0xc4, 0xb4, 0x9a, 0x28, 0xab, 0xb6, + 0x4f, 0xa0, 0x44, 0x19, 0x15, 0x14, 0x7b, 0xf6, 0x00, 0x7b, 0x98, 0x39, 0x9f, 0x67, 0xb2, 0x9c, + 0x6d, 0xd4, 0xab, 0x06, 0xb4, 0xa5, 0x31, 0xd1, 0x3e, 0x2c, 0x46, 0xf0, 0xb9, 0x4b, 0x80, 0x8f, + 0xc0, 0x52, 0x53, 0xd4, 0x27, 0x59, 0x58, 0xef, 0x11, 0xf7, 0xd9, 0xa2, 0xf5, 0x27, 0x00, 0xba, + 0xe0, 0x64, 0x1f, 0xfc, 0x1c, 0xcc, 0xce, 0x16, 0xf0, 0x92, 0xc6, 0x6b, 0x73, 0x91, 0xe2, 0xf6, + 0xa3, 0x2c, 0x2c, 0xa7, 0xb9, 0x7d, 0x06, 0xfe, 0x2e, 0xa0, 0xdd, 0xa4, 0x1b, 0xe4, 0x54, 0x37, + 0x78, 0x65, 0x5e, 0x37, 0x98, 0xc9, 0xba, 0xb3, 0xdb, 0xc0, 0xa7, 0x59, 0xc8, 0x77, 0x71, 0x88, + 0x7d, 0x8e, 0xbe, 0x3f, 0x33, 0xc0, 0xe9, 0x57, 0xd5, 0xd5, 0x99, 0x9c, 0x6b, 0x9b, 0x47, 0xbd, + 0x4e, 0xb9, 0x77, 0x4f, 0x99, 0xdf, 0xbe, 0x0e, 0xab, 0xf2, 0x89, 0x18, 0xbb, 0xa2, 0x49, 0x5c, + 0x51, 0x6f, 0xbc, 0xf8, 0x75, 0xc1, 0x51, 0x0d, 0x8a, 0x52, 0x2c, 0x69, 0x74, 0x52, 0x06, 0x7c, + 0x7c, 0xdc, 0xd1, 0x3b, 0xe8, 0x3a, 0xa0, 0xc3, 0xf8, 0xd1, 0x6e, 0x27, 0x14, 0x48, 0xb9, 0xf5, + 0xe4, 0x24, 0x12, 0xff, 0x0a, 0x80, 0xb4, 0xc2, 0x76, 0x09, 0x0b, 0x7c, 0xf3, 0xc6, 0x59, 0x92, + 0x3b, 0x6d, 0xb9, 0x81, 0x7e, 0xa9, 0x67, 0xc1, 0xa9, 0xd7, 0xa3, 0x19, 0xc3, 0xdf, 0xb8, 0x58, + 0xa6, 0x7e, 0x7a, 0x52, 0xab, 0x4c, 0xb0, 0xef, 0x6d, 0x37, 0x4e, 0x81, 0x6c, 0xa8, 0xd9, 0xf0, + 0xe9, 0x57, 0x67, 0x2a, 0x83, 0xdf, 0xb3, 0x00, 0x25, 0x2d, 0xb7, 0x47, 0xf8, 0x48, 0x3e, 0x6b, + 0xe4, 0xd0, 0x9b, 0x9a, 0x50, 0xad, 0xb3, 0x87, 0xde, 0x44, 0x3f, 0x1a, 0x7a, 0x53, 0x15, 0xf1, + 0xed, 0xa4, 0xc1, 0x65, 0x4d, 0x0c, 0x0d, 0xcc, 0x00, 0x73, 0x92, 0x1a, 0x9c, 0x69, 0xa4, 0x3d, + 0xd3, 0xc3, 0x32, 0x8d, 0x4f, 0x2c, 0xb8, 0x3a, 0x93, 0x4d, 0xb1, 0xb1, 0x3f, 0x03, 0x14, 0xa6, + 0x0e, 0x55, 0x6c, 0x26, 0xc6, 0xe8, 0x0b, 0x27, 0xe7, 0x7a, 0x38, 0xd3, 0x2b, 0xff, 0x5f, 0x3d, + 0x3a, 0xa7, 0x22, 0xf0, 0x47, 0x0b, 0x36, 0xd2, 0xc6, 0xc4, 0x6e, 0xdd, 0x81, 0xe5, 0xb4, 0x2d, + 0xc6, 0xa1, 0x17, 0xcf, 0xe3, 0x90, 0xf1, 0xe5, 0x29, 0x7d, 0xf4, 0x56, 0x52, 0xb8, 0xfa, 0xc7, + 0xa2, 0x1b, 0xe7, 0xe6, 0x26, 0xb2, 0x69, 0xba, 0x80, 0x73, 0xd1, 0x14, 0x93, 0xeb, 0x06, 0x81, + 0x87, 0x7e, 0x05, 0xeb, 0x2c, 0x10, 0xb6, 0xcc, 0x72, 0xe2, 0xda, 0xe6, 0xe5, 0xaa, 0xbb, 0xdf, + 0x5b, 0x17, 0xa3, 0xec, 0x5f, 0x27, 0xb5, 0x59, 0xa8, 0x29, 0x1e, 0x4b, 0x2c, 0x10, 0x2d, 0x75, + 0xbe, 0xa7, 0xdf, 0xb5, 0x21, 0xac, 0x3c, 0x7d, 0xb5, 0xee, 0x96, 0x6f, 0x5e, 0xf8, 0xea, 0x95, + 0xb3, 0xae, 0x5d, 0x1e, 0xa4, 0xee, 0xdc, 0x2e, 0xc8, 0x18, 0xfe, 0xfb, 0x61, 0xcd, 0xfa, 0xc6, + 0xef, 0x2d, 0x80, 0xe4, 0x09, 0x8f, 0x5e, 0x85, 0x2f, 0xb5, 0x7e, 0x70, 0xa7, 0x6d, 0xf7, 0xf7, + 0x6e, 0xee, 0xdd, 0xed, 0xdb, 0x77, 0xef, 0xf4, 0xbb, 0x9d, 0x9d, 0xdd, 0xd7, 0x77, 0x3b, 0xed, + 0xb5, 0x4c, 0xa5, 0x74, 0xff, 0x41, 0xbd, 0x78, 0x97, 0xf1, 0x11, 0x71, 0xe8, 0x01, 0x25, 0x2e, + 0x7a, 0x09, 0x36, 0x9e, 0x96, 0x96, 0xab, 0x4e, 0x7b, 0xcd, 0xaa, 0x2c, 0xdf, 0x7f, 0x50, 0x2f, + 0xe8, 0xe9, 0x88, 0xb8, 0xe8, 0x1a, 0x3c, 0x3f, 0x2b, 0xb7, 0x7b, 0xe7, 0x7b, 0x6b, 0xd9, 0xca, + 0xca, 0xfd, 0x07, 0xf5, 0xa5, 0x78, 0x8c, 0x42, 0x0d, 0x40, 0x69, 0x49, 0x83, 0xb7, 0x50, 0x81, + 0xfb, 0x0f, 0xea, 0x79, 0x4d, 0x5b, 0x25, 0xf7, 0xf6, 0x7b, 0xd5, 0x4c, 0xeb, 0xf5, 0x0f, 0x1f, + 0x57, 0xad, 0x47, 0x8f, 0xab, 0xd6, 0x3f, 0x1e, 0x57, 0xad, 0x77, 0x9e, 0x54, 0x33, 0x8f, 0x9e, + 0x54, 0x33, 0x7f, 0x7e, 0x52, 0xcd, 0xfc, 0xf8, 0xd5, 0x33, 0x19, 0x3b, 0x8e, 0x7f, 0xc9, 0x55, + 0xdc, 0x0d, 0xf2, 0xaa, 0x29, 0x7f, 0xeb, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x49, 0x0e, 0x8f, + 0x94, 0xe8, 0x15, 0x00, 0x00, } func (this *Pool) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { @@ -1260,478 +1256,477 @@ func (this *Pool) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_ func StakingDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 7537 bytes of a gzipped FileDescriptorSet + // 7521 bytes of a gzipped FileDescriptorSet 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7c, 0x6b, 0x90, 0x24, 0xd9, - 0x75, 0x56, 0xd7, 0xa3, 0xab, 0xab, 0x4e, 0x55, 0x77, 0x67, 0xdf, 0xee, 0x99, 0xa9, 0xe9, 0xdd, + 0x75, 0x56, 0xd7, 0xa3, 0xab, 0xab, 0x4e, 0x55, 0x57, 0x67, 0xdf, 0xee, 0x99, 0xa9, 0xe9, 0xdd, 0xed, 0xee, 0xad, 0x7d, 0xcc, 0xec, 0xab, 0x67, 0x77, 0x76, 0x67, 0x66, 0xa7, 0xc6, 0xd2, 0x52, - 0xaf, 0xe9, 0xe9, 0x99, 0x7e, 0xd4, 0x66, 0x75, 0xcf, 0x3e, 0x0c, 0x24, 0xd9, 0x59, 0xb7, 0xab, - 0x73, 0x3b, 0x2b, 0x33, 0x9d, 0x99, 0xd5, 0x33, 0xbd, 0x61, 0x88, 0x55, 0x88, 0x87, 0x34, 0x04, - 0x20, 0x63, 0x02, 0xcb, 0xb2, 0x46, 0xec, 0x5a, 0x06, 0x19, 0x21, 0xc0, 0xb6, 0x84, 0xc0, 0x38, - 0x00, 0x01, 0x01, 0x08, 0xfd, 0x20, 0x64, 0xff, 0xc0, 0x36, 0x98, 0xc5, 0xac, 0x14, 0x20, 0x84, - 0x8c, 0x85, 0x58, 0x22, 0x20, 0x14, 0x26, 0x88, 0xfb, 0xca, 0x47, 0x3d, 0xba, 0xaa, 0x87, 0xd9, - 0xb5, 0x23, 0xfc, 0xab, 0x2b, 0xcf, 0x3d, 0xdf, 0x97, 0xe7, 0x9e, 0x7b, 0xee, 0xb9, 0xe7, 0xde, - 0xcc, 0x6c, 0xf8, 0xe7, 0x57, 0x60, 0xa9, 0x65, 0x59, 0x2d, 0x03, 0x9f, 0xb3, 0x1d, 0xcb, 0xb3, - 0x76, 0x3a, 0xbb, 0xe7, 0x9a, 0xd8, 0xd5, 0x1c, 0xdd, 0xf6, 0x2c, 0x67, 0x99, 0xca, 0xd0, 0x34, - 0xd3, 0x58, 0x16, 0x1a, 0x85, 0x75, 0x98, 0xb9, 0xaa, 0x1b, 0xb8, 0xea, 0x2b, 0x36, 0xb0, 0x87, - 0x5e, 0x84, 0xe4, 0xae, 0x6e, 0xe0, 0x7c, 0x6c, 0x29, 0x71, 0x36, 0x7b, 0xfe, 0xd1, 0xe5, 0x2e, - 0xd0, 0x72, 0x14, 0x51, 0x27, 0x62, 0x99, 0x22, 0x0a, 0xdf, 0x4e, 0xc2, 0x6c, 0x9f, 0x56, 0x84, - 0x20, 0x69, 0xaa, 0x6d, 0xc2, 0x18, 0x3b, 0x9b, 0x91, 0xe9, 0x6f, 0x94, 0x87, 0x09, 0x5b, 0xd5, - 0xf6, 0xd5, 0x16, 0xce, 0xc7, 0xa9, 0x58, 0x5c, 0xa2, 0x05, 0x80, 0x26, 0xb6, 0xb1, 0xd9, 0xc4, - 0xa6, 0x76, 0x98, 0x4f, 0x2c, 0x25, 0xce, 0x66, 0xe4, 0x90, 0x04, 0x3d, 0x05, 0x33, 0x76, 0x67, - 0xc7, 0xd0, 0x35, 0x25, 0xa4, 0x06, 0x4b, 0x89, 0xb3, 0xe3, 0xb2, 0xc4, 0x1a, 0xaa, 0x81, 0xf2, - 0x19, 0x98, 0xbe, 0x85, 0xd5, 0xfd, 0xb0, 0x6a, 0x96, 0xaa, 0x4e, 0x11, 0x71, 0x48, 0xb1, 0x02, - 0xb9, 0x36, 0x76, 0x5d, 0xb5, 0x85, 0x15, 0xef, 0xd0, 0xc6, 0xf9, 0x24, 0xed, 0xfd, 0x52, 0x4f, - 0xef, 0xbb, 0x7b, 0x9e, 0xe5, 0xa8, 0xad, 0x43, 0x1b, 0xa3, 0x12, 0x64, 0xb0, 0xd9, 0x69, 0x33, - 0x86, 0xf1, 0x01, 0xfe, 0xab, 0x99, 0x9d, 0x76, 0x37, 0x4b, 0x9a, 0xc0, 0x38, 0xc5, 0x84, 0x8b, - 0x9d, 0x03, 0x5d, 0xc3, 0xf9, 0x14, 0x25, 0x38, 0xd3, 0x43, 0xd0, 0x60, 0xed, 0xdd, 0x1c, 0x02, - 0x87, 0x2a, 0x90, 0xc1, 0xb7, 0x3d, 0x6c, 0xba, 0xba, 0x65, 0xe6, 0x27, 0x28, 0xc9, 0x63, 0x7d, - 0x46, 0x11, 0x1b, 0xcd, 0x6e, 0x8a, 0x00, 0x87, 0x2e, 0xc2, 0x84, 0x65, 0x7b, 0xba, 0x65, 0xba, - 0xf9, 0xf4, 0x52, 0xec, 0x6c, 0xf6, 0xfc, 0x83, 0x7d, 0x03, 0x61, 0x93, 0xe9, 0xc8, 0x42, 0x19, - 0xad, 0x82, 0xe4, 0x5a, 0x1d, 0x47, 0xc3, 0x8a, 0x66, 0x35, 0xb1, 0xa2, 0x9b, 0xbb, 0x56, 0x3e, - 0x43, 0x09, 0x16, 0x7b, 0x3b, 0x42, 0x15, 0x2b, 0x56, 0x13, 0xaf, 0x9a, 0xbb, 0x96, 0x3c, 0xe5, - 0x46, 0xae, 0xd1, 0x49, 0x48, 0xb9, 0x87, 0xa6, 0xa7, 0xde, 0xce, 0xe7, 0x68, 0x84, 0xf0, 0xab, - 0xc2, 0x2f, 0xa7, 0x60, 0x7a, 0x94, 0x10, 0xbb, 0x02, 0xe3, 0xbb, 0xa4, 0x97, 0xf9, 0xf8, 0x71, - 0x7c, 0xc0, 0x30, 0x51, 0x27, 0xa6, 0xee, 0xd1, 0x89, 0x25, 0xc8, 0x9a, 0xd8, 0xf5, 0x70, 0x93, - 0x45, 0x44, 0x62, 0xc4, 0x98, 0x02, 0x06, 0xea, 0x0d, 0xa9, 0xe4, 0x3d, 0x85, 0xd4, 0xab, 0x30, - 0xed, 0x9b, 0xa4, 0x38, 0xaa, 0xd9, 0x12, 0xb1, 0x79, 0x6e, 0x98, 0x25, 0xcb, 0x35, 0x81, 0x93, - 0x09, 0x4c, 0x9e, 0xc2, 0x91, 0x6b, 0x54, 0x05, 0xb0, 0x4c, 0x6c, 0xed, 0x2a, 0x4d, 0xac, 0x19, - 0xf9, 0xf4, 0x00, 0x2f, 0x6d, 0x12, 0x95, 0x1e, 0x2f, 0x59, 0x4c, 0xaa, 0x19, 0xe8, 0x72, 0x10, - 0x6a, 0x13, 0x03, 0x22, 0x65, 0x9d, 0x4d, 0xb2, 0x9e, 0x68, 0xdb, 0x86, 0x29, 0x07, 0x93, 0xb8, - 0xc7, 0x4d, 0xde, 0xb3, 0x0c, 0x35, 0x62, 0x79, 0x68, 0xcf, 0x64, 0x0e, 0x63, 0x1d, 0x9b, 0x74, + 0xaf, 0x99, 0xe9, 0x99, 0x7e, 0xd4, 0x66, 0x75, 0xcf, 0x3e, 0x8c, 0xc9, 0xc8, 0xce, 0xba, 0x5d, + 0x9d, 0xdb, 0x59, 0x99, 0xe9, 0xcc, 0xac, 0x99, 0xe9, 0x0d, 0x43, 0xac, 0x42, 0x3c, 0xa4, 0x21, + 0x00, 0x19, 0x13, 0x58, 0x96, 0x35, 0x62, 0xd7, 0x32, 0xc8, 0x08, 0x01, 0xb6, 0x25, 0x04, 0xc6, + 0x01, 0x08, 0x08, 0x40, 0xd6, 0x0f, 0x42, 0xf6, 0x0f, 0x6c, 0x83, 0x59, 0xcc, 0x4a, 0x01, 0x8b, + 0x10, 0x58, 0x88, 0x25, 0x02, 0x42, 0x61, 0x82, 0xb8, 0xaf, 0x7c, 0xd4, 0xa3, 0xab, 0x7a, 0x98, + 0x95, 0x1d, 0xe1, 0x5f, 0x5d, 0x79, 0xee, 0xf9, 0xbe, 0x3c, 0xf7, 0xdc, 0x73, 0xcf, 0x3d, 0xf7, + 0x66, 0x66, 0xc3, 0x3f, 0xbf, 0x04, 0xcb, 0x6d, 0xcb, 0x6a, 0x1b, 0xf8, 0x8c, 0xed, 0x58, 0x9e, + 0xb5, 0xd3, 0xdd, 0x3d, 0xd3, 0xc2, 0xae, 0xe6, 0xe8, 0xb6, 0x67, 0x39, 0x2b, 0x54, 0x86, 0x66, + 0x98, 0xc6, 0x8a, 0xd0, 0x28, 0xae, 0xc3, 0xec, 0x65, 0xdd, 0xc0, 0x35, 0x5f, 0xb1, 0x89, 0x3d, + 0xf4, 0x22, 0x24, 0x77, 0x75, 0x03, 0x17, 0x62, 0xcb, 0x89, 0xd3, 0xd9, 0xb3, 0x8f, 0xae, 0xf4, + 0x80, 0x56, 0xa2, 0x88, 0x06, 0x11, 0xcb, 0x14, 0x51, 0xfc, 0x76, 0x12, 0xe6, 0x06, 0xb4, 0x22, + 0x04, 0x49, 0x53, 0xed, 0x10, 0xc6, 0xd8, 0xe9, 0x8c, 0x4c, 0x7f, 0xa3, 0x02, 0x4c, 0xd9, 0xaa, + 0xb6, 0xaf, 0xb6, 0x71, 0x21, 0x4e, 0xc5, 0xe2, 0x12, 0x2d, 0x02, 0xb4, 0xb0, 0x8d, 0xcd, 0x16, + 0x36, 0xb5, 0x83, 0x42, 0x62, 0x39, 0x71, 0x3a, 0x23, 0x87, 0x24, 0xe8, 0x29, 0x98, 0xb5, 0xbb, + 0x3b, 0x86, 0xae, 0x29, 0x21, 0x35, 0x58, 0x4e, 0x9c, 0x9e, 0x94, 0x25, 0xd6, 0x50, 0x0b, 0x94, + 0x4f, 0xc1, 0xcc, 0x2d, 0xac, 0xee, 0x87, 0x55, 0xb3, 0x54, 0x35, 0x4f, 0xc4, 0x21, 0xc5, 0x2a, + 0xe4, 0x3a, 0xd8, 0x75, 0xd5, 0x36, 0x56, 0xbc, 0x03, 0x1b, 0x17, 0x92, 0xb4, 0xf7, 0xcb, 0x7d, + 0xbd, 0xef, 0xed, 0x79, 0x96, 0xa3, 0xb6, 0x0e, 0x6c, 0x8c, 0xca, 0x90, 0xc1, 0x66, 0xb7, 0xc3, + 0x18, 0x26, 0x87, 0xf8, 0xaf, 0x6e, 0x76, 0x3b, 0xbd, 0x2c, 0x69, 0x02, 0xe3, 0x14, 0x53, 0x2e, + 0x76, 0x6e, 0xea, 0x1a, 0x2e, 0xa4, 0x28, 0xc1, 0xa9, 0x3e, 0x82, 0x26, 0x6b, 0xef, 0xe5, 0x10, + 0x38, 0x54, 0x85, 0x0c, 0xbe, 0xed, 0x61, 0xd3, 0xd5, 0x2d, 0xb3, 0x30, 0x45, 0x49, 0x1e, 0x1b, + 0x30, 0x8a, 0xd8, 0x68, 0xf5, 0x52, 0x04, 0x38, 0x74, 0x1e, 0xa6, 0x2c, 0xdb, 0xd3, 0x2d, 0xd3, + 0x2d, 0xa4, 0x97, 0x63, 0xa7, 0xb3, 0x67, 0x1f, 0x1c, 0x18, 0x08, 0x9b, 0x4c, 0x47, 0x16, 0xca, + 0x68, 0x15, 0x24, 0xd7, 0xea, 0x3a, 0x1a, 0x56, 0x34, 0xab, 0x85, 0x15, 0xdd, 0xdc, 0xb5, 0x0a, + 0x19, 0x4a, 0xb0, 0xd4, 0xdf, 0x11, 0xaa, 0x58, 0xb5, 0x5a, 0x78, 0xd5, 0xdc, 0xb5, 0xe4, 0xbc, + 0x1b, 0xb9, 0x46, 0xc7, 0x21, 0xe5, 0x1e, 0x98, 0x9e, 0x7a, 0xbb, 0x90, 0xa3, 0x11, 0xc2, 0xaf, + 0x8a, 0xbf, 0x92, 0x82, 0x99, 0x71, 0x42, 0xec, 0x12, 0x4c, 0xee, 0x92, 0x5e, 0x16, 0xe2, 0x47, + 0xf1, 0x01, 0xc3, 0x44, 0x9d, 0x98, 0xba, 0x47, 0x27, 0x96, 0x21, 0x6b, 0x62, 0xd7, 0xc3, 0x2d, + 0x16, 0x11, 0x89, 0x31, 0x63, 0x0a, 0x18, 0xa8, 0x3f, 0xa4, 0x92, 0xf7, 0x14, 0x52, 0xaf, 0xc2, + 0x8c, 0x6f, 0x92, 0xe2, 0xa8, 0x66, 0x5b, 0xc4, 0xe6, 0x99, 0x51, 0x96, 0xac, 0xd4, 0x05, 0x4e, + 0x26, 0x30, 0x39, 0x8f, 0x23, 0xd7, 0xa8, 0x06, 0x60, 0x99, 0xd8, 0xda, 0x55, 0x5a, 0x58, 0x33, + 0x0a, 0xe9, 0x21, 0x5e, 0xda, 0x24, 0x2a, 0x7d, 0x5e, 0xb2, 0x98, 0x54, 0x33, 0xd0, 0xc5, 0x20, + 0xd4, 0xa6, 0x86, 0x44, 0xca, 0x3a, 0x9b, 0x64, 0x7d, 0xd1, 0xb6, 0x0d, 0x79, 0x07, 0x93, 0xb8, + 0xc7, 0x2d, 0xde, 0xb3, 0x0c, 0x35, 0x62, 0x65, 0x64, 0xcf, 0x64, 0x0e, 0x63, 0x1d, 0x9b, 0x76, 0xc2, 0x97, 0xe8, 0x11, 0xf0, 0x05, 0x0a, 0x0d, 0x2b, 0xa0, 0x59, 0x28, 0x27, 0x84, 0x1b, 0x6a, - 0x1b, 0xcf, 0xbf, 0x09, 0x53, 0x51, 0xf7, 0xa0, 0x39, 0x18, 0x77, 0x3d, 0xd5, 0xf1, 0x68, 0x14, - 0x8e, 0xcb, 0xec, 0x02, 0x49, 0x90, 0xc0, 0x66, 0x93, 0x66, 0xb9, 0x71, 0x99, 0xfc, 0x44, 0x7f, - 0x24, 0xe8, 0x70, 0x82, 0x76, 0xf8, 0xf1, 0xde, 0x11, 0x8d, 0x30, 0x77, 0xf7, 0x7b, 0xfe, 0x12, - 0x4c, 0x46, 0x3a, 0x30, 0xea, 0xad, 0x0b, 0x3f, 0x0e, 0x27, 0xfa, 0x52, 0xa3, 0x57, 0x61, 0xae, - 0x63, 0xea, 0xa6, 0x87, 0x1d, 0xdb, 0xc1, 0x24, 0x62, 0xd9, 0xad, 0xf2, 0xff, 0x65, 0x62, 0x40, - 0xcc, 0x6d, 0x87, 0xb5, 0x19, 0x8b, 0x3c, 0xdb, 0xe9, 0x15, 0x3e, 0x99, 0x49, 0x7f, 0x67, 0x42, - 0x7a, 0xeb, 0xad, 0xb7, 0xde, 0x8a, 0x17, 0xfe, 0x69, 0x0a, 0xe6, 0xfa, 0xcd, 0x99, 0xbe, 0xd3, - 0xf7, 0x24, 0xa4, 0xcc, 0x4e, 0x7b, 0x07, 0x3b, 0xd4, 0x49, 0xe3, 0x32, 0xbf, 0x42, 0x25, 0x18, - 0x37, 0xd4, 0x1d, 0x6c, 0xe4, 0x93, 0x4b, 0xb1, 0xb3, 0x53, 0xe7, 0x9f, 0x1a, 0x69, 0x56, 0x2e, - 0xaf, 0x11, 0x88, 0xcc, 0x90, 0xe8, 0xa3, 0x90, 0xe4, 0x29, 0x9a, 0x30, 0x3c, 0x39, 0x1a, 0x03, - 0x99, 0x4b, 0x32, 0xc5, 0xa1, 0x07, 0x20, 0x43, 0xfe, 0xb2, 0xd8, 0x48, 0x51, 0x9b, 0xd3, 0x44, - 0x40, 0xe2, 0x02, 0xcd, 0x43, 0x9a, 0x4e, 0x93, 0x26, 0x16, 0x4b, 0x9b, 0x7f, 0x4d, 0x02, 0xab, - 0x89, 0x77, 0xd5, 0x8e, 0xe1, 0x29, 0x07, 0xaa, 0xd1, 0xc1, 0x34, 0xe0, 0x33, 0x72, 0x8e, 0x0b, - 0x6f, 0x12, 0x19, 0x5a, 0x84, 0x2c, 0x9b, 0x55, 0xba, 0xd9, 0xc4, 0xb7, 0x69, 0xf6, 0x1c, 0x97, - 0xd9, 0x44, 0x5b, 0x25, 0x12, 0x72, 0xfb, 0x37, 0x5c, 0xcb, 0x14, 0xa1, 0x49, 0x6f, 0x41, 0x04, - 0xf4, 0xf6, 0x97, 0xba, 0x13, 0xf7, 0x43, 0xfd, 0xbb, 0xd7, 0x33, 0x97, 0xce, 0xc0, 0x34, 0xd5, - 0x78, 0x9e, 0x0f, 0xbd, 0x6a, 0xe4, 0x67, 0x96, 0x62, 0x67, 0xd3, 0xf2, 0x14, 0x13, 0x6f, 0x72, - 0x69, 0xe1, 0xab, 0x71, 0x48, 0xd2, 0xc4, 0x32, 0x0d, 0xd9, 0xad, 0xd7, 0xea, 0x35, 0xa5, 0xba, - 0xb9, 0x5d, 0x5e, 0xab, 0x49, 0x31, 0x34, 0x05, 0x40, 0x05, 0x57, 0xd7, 0x36, 0x4b, 0x5b, 0x52, - 0xdc, 0xbf, 0x5e, 0xdd, 0xd8, 0xba, 0xf8, 0x82, 0x94, 0xf0, 0x01, 0xdb, 0x4c, 0x90, 0x0c, 0x2b, - 0x3c, 0x7f, 0x5e, 0x1a, 0x47, 0x12, 0xe4, 0x18, 0xc1, 0xea, 0xab, 0xb5, 0xea, 0xc5, 0x17, 0xa4, - 0x54, 0x54, 0xf2, 0xfc, 0x79, 0x69, 0x02, 0x4d, 0x42, 0x86, 0x4a, 0xca, 0x9b, 0x9b, 0x6b, 0x52, - 0xda, 0xe7, 0x6c, 0x6c, 0xc9, 0xab, 0x1b, 0x2b, 0x52, 0xc6, 0xe7, 0x5c, 0x91, 0x37, 0xb7, 0xeb, - 0x12, 0xf8, 0x0c, 0xeb, 0xb5, 0x46, 0xa3, 0xb4, 0x52, 0x93, 0xb2, 0xbe, 0x46, 0xf9, 0xb5, 0xad, - 0x5a, 0x43, 0xca, 0x45, 0xcc, 0x7a, 0xfe, 0xbc, 0x34, 0xe9, 0xdf, 0xa2, 0xb6, 0xb1, 0xbd, 0x2e, - 0x4d, 0xa1, 0x19, 0x98, 0x64, 0xb7, 0x10, 0x46, 0x4c, 0x77, 0x89, 0x2e, 0xbe, 0x20, 0x49, 0x81, - 0x21, 0x8c, 0x65, 0x26, 0x22, 0xb8, 0xf8, 0x82, 0x84, 0x0a, 0x15, 0x18, 0xa7, 0x61, 0x88, 0x10, - 0x4c, 0xad, 0x95, 0xca, 0xb5, 0x35, 0x65, 0xb3, 0xbe, 0xb5, 0xba, 0xb9, 0x51, 0x5a, 0x93, 0x62, - 0x81, 0x4c, 0xae, 0xbd, 0xbc, 0xbd, 0x2a, 0xd7, 0xaa, 0x52, 0x3c, 0x2c, 0xab, 0xd7, 0x4a, 0x5b, - 0xb5, 0xaa, 0x94, 0x28, 0x68, 0x30, 0xd7, 0x2f, 0xa1, 0xf6, 0x9d, 0x42, 0xa1, 0x58, 0x88, 0x0f, - 0x88, 0x05, 0xca, 0xd5, 0x1d, 0x0b, 0x85, 0x6f, 0xc5, 0x61, 0xb6, 0xcf, 0xa2, 0xd2, 0xf7, 0x26, - 0x2f, 0xc1, 0x38, 0x8b, 0x65, 0xb6, 0xcc, 0x3e, 0xd1, 0x77, 0x75, 0xa2, 0x91, 0xdd, 0xb3, 0xd4, - 0x52, 0x5c, 0xb8, 0xd4, 0x48, 0x0c, 0x28, 0x35, 0x08, 0x45, 0x4f, 0xc0, 0xfe, 0xb1, 0x9e, 0xe4, - 0xcf, 0xd6, 0xc7, 0x8b, 0xa3, 0xac, 0x8f, 0x54, 0x76, 0xbc, 0x45, 0x60, 0xbc, 0xcf, 0x22, 0x70, - 0x05, 0x66, 0x7a, 0x88, 0x46, 0x4e, 0xc6, 0x1f, 0x8f, 0x41, 0x7e, 0x90, 0x73, 0x86, 0xa4, 0xc4, - 0x78, 0x24, 0x25, 0x5e, 0xe9, 0xf6, 0xe0, 0xc3, 0x83, 0x07, 0xa1, 0x67, 0xac, 0xbf, 0x10, 0x83, - 0x93, 0xfd, 0x4b, 0xca, 0xbe, 0x36, 0x7c, 0x14, 0x52, 0x6d, 0xec, 0xed, 0x59, 0xa2, 0xac, 0x7a, - 0xbc, 0xcf, 0x62, 0x4d, 0x9a, 0xbb, 0x07, 0x9b, 0xa3, 0xc2, 0xab, 0x7d, 0x62, 0x50, 0x5d, 0xc8, - 0xac, 0xe9, 0xb1, 0xf4, 0x93, 0x71, 0x38, 0xd1, 0x97, 0xbc, 0xaf, 0xa1, 0x0f, 0x01, 0xe8, 0xa6, - 0xdd, 0xf1, 0x58, 0xe9, 0xc4, 0x32, 0x71, 0x86, 0x4a, 0x68, 0xf2, 0x22, 0x59, 0xb6, 0xe3, 0xf9, - 0xed, 0x09, 0xda, 0x0e, 0x4c, 0x44, 0x15, 0x5e, 0x0c, 0x0c, 0x4d, 0x52, 0x43, 0x17, 0x06, 0xf4, - 0xb4, 0x27, 0x30, 0x9f, 0x05, 0x49, 0x33, 0x74, 0x6c, 0x7a, 0x8a, 0xeb, 0x39, 0x58, 0x6d, 0xeb, - 0x66, 0x8b, 0x2e, 0x35, 0xe9, 0xe2, 0xf8, 0xae, 0x6a, 0xb8, 0x58, 0x9e, 0x66, 0xcd, 0x0d, 0xd1, - 0x4a, 0x10, 0x34, 0x80, 0x9c, 0x10, 0x22, 0x15, 0x41, 0xb0, 0x66, 0x1f, 0x51, 0xf8, 0x89, 0x0c, - 0x64, 0x43, 0x05, 0x38, 0x7a, 0x18, 0x72, 0x6f, 0xa8, 0x07, 0xaa, 0x22, 0x36, 0x55, 0xcc, 0x13, - 0x59, 0x22, 0xab, 0xf3, 0x8d, 0xd5, 0xb3, 0x30, 0x47, 0x55, 0xac, 0x8e, 0x87, 0x1d, 0x45, 0x33, - 0x54, 0xd7, 0xa5, 0x4e, 0x4b, 0x53, 0x55, 0x44, 0xda, 0x36, 0x49, 0x53, 0x45, 0xb4, 0xa0, 0x0b, - 0x30, 0x4b, 0x11, 0xed, 0x8e, 0xe1, 0xe9, 0xb6, 0x81, 0x15, 0xb2, 0xcd, 0x73, 0xe9, 0x92, 0xe3, - 0x5b, 0x36, 0x43, 0x34, 0xd6, 0xb9, 0x02, 0xb1, 0xc8, 0x45, 0x55, 0x78, 0x88, 0xc2, 0x5a, 0xd8, - 0xc4, 0x8e, 0xea, 0x61, 0x05, 0xff, 0x58, 0x47, 0x35, 0x5c, 0x45, 0x35, 0x9b, 0xca, 0x9e, 0xea, - 0xee, 0xe5, 0xe7, 0x08, 0x41, 0x39, 0x9e, 0x8f, 0xc9, 0xa7, 0x89, 0xe2, 0x0a, 0xd7, 0xab, 0x51, - 0xb5, 0x92, 0xd9, 0xbc, 0xa6, 0xba, 0x7b, 0xa8, 0x08, 0x27, 0x29, 0x8b, 0xeb, 0x39, 0xba, 0xd9, - 0x52, 0xb4, 0x3d, 0xac, 0xed, 0x2b, 0x1d, 0x6f, 0xf7, 0xc5, 0xfc, 0x03, 0xe1, 0xfb, 0x53, 0x0b, - 0x1b, 0x54, 0xa7, 0x42, 0x54, 0xb6, 0xbd, 0xdd, 0x17, 0x51, 0x03, 0x72, 0x64, 0x30, 0xda, 0xfa, - 0x9b, 0x58, 0xd9, 0xb5, 0x1c, 0xba, 0x86, 0x4e, 0xf5, 0x49, 0x4d, 0x21, 0x0f, 0x2e, 0x6f, 0x72, - 0xc0, 0xba, 0xd5, 0xc4, 0xc5, 0xf1, 0x46, 0xbd, 0x56, 0xab, 0xca, 0x59, 0xc1, 0x72, 0xd5, 0x72, - 0x48, 0x40, 0xb5, 0x2c, 0xdf, 0xc1, 0x59, 0x16, 0x50, 0x2d, 0x4b, 0xb8, 0xf7, 0x02, 0xcc, 0x6a, - 0x1a, 0xeb, 0xb3, 0xae, 0x29, 0x7c, 0x33, 0xe6, 0xe6, 0xa5, 0x88, 0xb3, 0x34, 0x6d, 0x85, 0x29, - 0xf0, 0x18, 0x77, 0xd1, 0x65, 0x38, 0x11, 0x38, 0x2b, 0x0c, 0x9c, 0xe9, 0xe9, 0x65, 0x37, 0xf4, - 0x02, 0xcc, 0xda, 0x87, 0xbd, 0x40, 0x14, 0xb9, 0xa3, 0x7d, 0xd8, 0x0d, 0xbb, 0x04, 0x73, 0xf6, - 0x9e, 0xdd, 0x8b, 0x7b, 0x32, 0x8c, 0x43, 0xf6, 0x9e, 0xdd, 0x0d, 0x7c, 0x8c, 0xee, 0xcc, 0x1d, - 0xac, 0xa9, 0x1e, 0x6e, 0xe6, 0x4f, 0x85, 0xd5, 0x43, 0x0d, 0x68, 0x19, 0x24, 0x4d, 0x53, 0xb0, - 0xa9, 0xee, 0x18, 0x58, 0x51, 0x1d, 0x6c, 0xaa, 0x6e, 0x7e, 0x91, 0x2a, 0x27, 0x3d, 0xa7, 0x83, - 0xe5, 0x29, 0x4d, 0xab, 0xd1, 0xc6, 0x12, 0x6d, 0x43, 0x4f, 0xc2, 0x8c, 0xb5, 0xf3, 0x86, 0xc6, - 0x22, 0x52, 0xb1, 0x1d, 0xbc, 0xab, 0xdf, 0xce, 0x3f, 0x4a, 0xdd, 0x3b, 0x4d, 0x1a, 0x68, 0x3c, - 0xd6, 0xa9, 0x18, 0x3d, 0x01, 0x92, 0xe6, 0xee, 0xa9, 0x8e, 0x4d, 0x53, 0xb2, 0x6b, 0xab, 0x1a, - 0xce, 0x3f, 0xc6, 0x54, 0x99, 0x7c, 0x43, 0x88, 0xc9, 0x8c, 0x70, 0x6f, 0xe9, 0xbb, 0x9e, 0x60, - 0x3c, 0xc3, 0x66, 0x04, 0x95, 0x71, 0xb6, 0xb3, 0x20, 0x11, 0x4f, 0x44, 0x6e, 0x7c, 0x96, 0xaa, - 0x4d, 0xd9, 0x7b, 0x76, 0xf8, 0xbe, 0x8f, 0xc0, 0x24, 0xd1, 0x0c, 0x6e, 0xfa, 0x04, 0x2b, 0xdc, - 0xec, 0xbd, 0xd0, 0x1d, 0x5f, 0x80, 0x93, 0x44, 0xa9, 0x8d, 0x3d, 0xb5, 0xa9, 0x7a, 0x6a, 0x48, - 0xfb, 0x69, 0xaa, 0x4d, 0xdc, 0xbe, 0xce, 0x1b, 0x23, 0x76, 0x3a, 0x9d, 0x9d, 0x43, 0x3f, 0xb0, - 0x9e, 0x61, 0x76, 0x12, 0x99, 0x08, 0xad, 0x0f, 0xac, 0x38, 0x2f, 0x14, 0x21, 0x17, 0x8e, 0x7b, - 0x94, 0x01, 0x16, 0xf9, 0x52, 0x8c, 0x14, 0x41, 0x95, 0xcd, 0x2a, 0x29, 0x5f, 0x5e, 0xaf, 0x49, - 0x71, 0x52, 0x46, 0xad, 0xad, 0x6e, 0xd5, 0x14, 0x79, 0x7b, 0x63, 0x6b, 0x75, 0xbd, 0x26, 0x25, - 0x42, 0x85, 0xfd, 0xf5, 0x64, 0xfa, 0x71, 0xe9, 0x0c, 0xa9, 0x1a, 0xa6, 0xa2, 0x3b, 0x35, 0xf4, - 0x23, 0x70, 0x4a, 0x1c, 0xab, 0xb8, 0xd8, 0x53, 0x6e, 0xe9, 0x0e, 0x9d, 0x90, 0x6d, 0x95, 0x2d, - 0x8e, 0x7e, 0xfc, 0xcc, 0x71, 0xad, 0x06, 0xf6, 0x5e, 0xd1, 0x1d, 0x32, 0xdd, 0xda, 0xaa, 0x87, - 0xd6, 0x60, 0xd1, 0xb4, 0x14, 0xd7, 0x53, 0xcd, 0xa6, 0xea, 0x34, 0x95, 0xe0, 0x40, 0x4b, 0x51, - 0x35, 0x0d, 0xbb, 0xae, 0xc5, 0x16, 0x42, 0x9f, 0xe5, 0x41, 0xd3, 0x6a, 0x70, 0xe5, 0x60, 0x85, - 0x28, 0x71, 0xd5, 0xae, 0xf0, 0x4d, 0x0c, 0x0a, 0xdf, 0x07, 0x20, 0xd3, 0x56, 0x6d, 0x05, 0x9b, - 0x9e, 0x73, 0x48, 0xeb, 0xf3, 0xb4, 0x9c, 0x6e, 0xab, 0x76, 0x8d, 0x5c, 0x7f, 0x28, 0xdb, 0xa4, - 0xeb, 0xc9, 0x74, 0x52, 0x1a, 0xbf, 0x9e, 0x4c, 0x8f, 0x4b, 0xa9, 0xeb, 0xc9, 0x74, 0x4a, 0x9a, - 0xb8, 0x9e, 0x4c, 0xa7, 0xa5, 0xcc, 0xf5, 0x64, 0x3a, 0x23, 0x41, 0xe1, 0xbd, 0x04, 0xe4, 0xc2, - 0x15, 0x3c, 0xd9, 0x10, 0x69, 0x74, 0x0d, 0x8b, 0xd1, 0x2c, 0xf7, 0xc8, 0x91, 0xf5, 0xfe, 0x72, - 0x85, 0x2c, 0x6e, 0xc5, 0x14, 0x2b, 0x97, 0x65, 0x86, 0x24, 0x85, 0x05, 0x09, 0x3f, 0xcc, 0xca, - 0x93, 0xb4, 0xcc, 0xaf, 0xd0, 0x0a, 0xa4, 0xde, 0x70, 0x29, 0x77, 0x8a, 0x72, 0x3f, 0x7a, 0x34, - 0xf7, 0xf5, 0x06, 0x25, 0xcf, 0x5c, 0x6f, 0x28, 0x1b, 0x9b, 0xf2, 0x7a, 0x69, 0x4d, 0xe6, 0x70, - 0x74, 0x1a, 0x92, 0x86, 0xfa, 0xe6, 0x61, 0x74, 0x19, 0xa4, 0xa2, 0x51, 0x87, 0xe5, 0x34, 0x24, - 0x6f, 0x61, 0x75, 0x3f, 0xba, 0xf8, 0x50, 0xd1, 0x07, 0x38, 0x3d, 0xce, 0xc1, 0x38, 0xf5, 0x17, - 0x02, 0xe0, 0x1e, 0x93, 0xc6, 0x50, 0x1a, 0x92, 0x95, 0x4d, 0x99, 0x4c, 0x11, 0x09, 0x72, 0x4c, - 0xaa, 0xd4, 0x57, 0x6b, 0x95, 0x9a, 0x14, 0x2f, 0x5c, 0x80, 0x14, 0x73, 0x02, 0x99, 0x3e, 0xbe, - 0x1b, 0xa4, 0x31, 0x7e, 0xc9, 0x39, 0x62, 0xa2, 0x75, 0x7b, 0xbd, 0x5c, 0x93, 0xa5, 0x78, 0xcf, - 0xe0, 0x17, 0x5c, 0xc8, 0x85, 0x2b, 0xf3, 0x0f, 0x67, 0x7b, 0xfe, 0xb5, 0x18, 0x64, 0x43, 0x95, - 0x36, 0x29, 0x91, 0x54, 0xc3, 0xb0, 0x6e, 0x29, 0xaa, 0xa1, 0xab, 0x2e, 0x0f, 0x0d, 0xa0, 0xa2, - 0x12, 0x91, 0x8c, 0x3a, 0x74, 0x1f, 0xd2, 0xa4, 0x19, 0x97, 0x52, 0x85, 0xcf, 0xc5, 0x40, 0xea, - 0x2e, 0x75, 0xbb, 0xcc, 0x8c, 0xfd, 0x7e, 0x9a, 0x59, 0xf8, 0x6c, 0x0c, 0xa6, 0xa2, 0xf5, 0x6d, - 0x97, 0x79, 0x0f, 0xff, 0xbe, 0x9a, 0xf7, 0xdb, 0x71, 0x98, 0x8c, 0x54, 0xb5, 0xa3, 0x5a, 0xf7, - 0x63, 0x30, 0xa3, 0x37, 0x71, 0xdb, 0xb6, 0x3c, 0x6c, 0x6a, 0x87, 0x8a, 0x81, 0x0f, 0xb0, 0x91, - 0x2f, 0xd0, 0xa4, 0x71, 0xee, 0xe8, 0xba, 0x79, 0x79, 0x35, 0xc0, 0xad, 0x11, 0x58, 0x71, 0x76, - 0xb5, 0x5a, 0x5b, 0xaf, 0x6f, 0x6e, 0xd5, 0x36, 0x2a, 0xaf, 0x29, 0xdb, 0x1b, 0x37, 0x36, 0x36, - 0x5f, 0xd9, 0x90, 0x25, 0xbd, 0x4b, 0xed, 0x03, 0x9c, 0xf6, 0x75, 0x90, 0xba, 0x8d, 0x42, 0xa7, - 0xa0, 0x9f, 0x59, 0xd2, 0x18, 0x9a, 0x85, 0xe9, 0x8d, 0x4d, 0xa5, 0xb1, 0x5a, 0xad, 0x29, 0xb5, - 0xab, 0x57, 0x6b, 0x95, 0xad, 0x06, 0x3b, 0x09, 0xf1, 0xb5, 0xb7, 0x22, 0x13, 0xbc, 0xf0, 0x99, - 0x04, 0xcc, 0xf6, 0xb1, 0x04, 0x95, 0xf8, 0x1e, 0x86, 0x6d, 0xab, 0x9e, 0x19, 0xc5, 0xfa, 0x65, - 0x52, 0x45, 0xd4, 0x55, 0xc7, 0xe3, 0x5b, 0x9e, 0x27, 0x80, 0x78, 0xc9, 0xf4, 0xf4, 0x5d, 0x1d, - 0x3b, 0xfc, 0x84, 0x89, 0x6d, 0x6c, 0xa6, 0x03, 0x39, 0x3b, 0x64, 0x7a, 0x1a, 0x90, 0x6d, 0xb9, - 0xba, 0xa7, 0x1f, 0x60, 0x45, 0x37, 0xc5, 0x71, 0x14, 0xd9, 0xe8, 0x24, 0x65, 0x49, 0xb4, 0xac, - 0x9a, 0x9e, 0xaf, 0x6d, 0xe2, 0x96, 0xda, 0xa5, 0x4d, 0x92, 0x79, 0x42, 0x96, 0x44, 0x8b, 0xaf, - 0xfd, 0x30, 0xe4, 0x9a, 0x56, 0x87, 0x54, 0x7f, 0x4c, 0x8f, 0xac, 0x1d, 0x31, 0x39, 0xcb, 0x64, - 0xbe, 0x0a, 0xaf, 0xeb, 0x83, 0x73, 0xb0, 0x9c, 0x9c, 0x65, 0x32, 0xa6, 0x72, 0x06, 0xa6, 0xd5, - 0x56, 0xcb, 0x21, 0xe4, 0x82, 0x88, 0xed, 0x54, 0xa6, 0x7c, 0x31, 0x55, 0x9c, 0xbf, 0x0e, 0x69, - 0xe1, 0x07, 0xb2, 0x78, 0x13, 0x4f, 0x28, 0x36, 0xdb, 0x7e, 0xc7, 0xcf, 0x66, 0xe4, 0xb4, 0x29, - 0x1a, 0x1f, 0x86, 0x9c, 0xee, 0x2a, 0xc1, 0xb1, 0x7e, 0x7c, 0x29, 0x7e, 0x36, 0x2d, 0x67, 0x75, - 0xd7, 0x3f, 0x12, 0x2d, 0x7c, 0x21, 0x0e, 0x53, 0xd1, 0xc7, 0x12, 0xa8, 0x0a, 0x69, 0xc3, 0xd2, - 0x54, 0x1a, 0x5a, 0xec, 0x99, 0xd8, 0xd9, 0x21, 0x4f, 0x32, 0x96, 0xd7, 0xb8, 0xbe, 0xec, 0x23, - 0xe7, 0xff, 0x4d, 0x0c, 0xd2, 0x42, 0x8c, 0x4e, 0x42, 0xd2, 0x56, 0xbd, 0x3d, 0x4a, 0x37, 0x5e, - 0x8e, 0x4b, 0x31, 0x99, 0x5e, 0x13, 0xb9, 0x6b, 0xab, 0x26, 0x0d, 0x01, 0x2e, 0x27, 0xd7, 0x64, - 0x5c, 0x0d, 0xac, 0x36, 0xe9, 0x36, 0xc8, 0x6a, 0xb7, 0xb1, 0xe9, 0xb9, 0x62, 0x5c, 0xb9, 0xbc, - 0xc2, 0xc5, 0xe8, 0x29, 0x98, 0xf1, 0x1c, 0x55, 0x37, 0x22, 0xba, 0x49, 0xaa, 0x2b, 0x89, 0x06, - 0x5f, 0xb9, 0x08, 0xa7, 0x05, 0x6f, 0x13, 0x7b, 0xaa, 0xb6, 0x87, 0x9b, 0x01, 0x28, 0x45, 0x8f, - 0x3b, 0x4e, 0x71, 0x85, 0x2a, 0x6f, 0x17, 0xd8, 0xc2, 0xaf, 0xc6, 0x60, 0x46, 0x6c, 0xdc, 0x9a, - 0xbe, 0xb3, 0xd6, 0x01, 0x54, 0xd3, 0xb4, 0xbc, 0xb0, 0xbb, 0x7a, 0x43, 0xb9, 0x07, 0xb7, 0x5c, - 0xf2, 0x41, 0x72, 0x88, 0x60, 0xbe, 0x0d, 0x10, 0xb4, 0x0c, 0x74, 0xdb, 0x22, 0x64, 0xf9, 0x33, - 0x27, 0xfa, 0xe0, 0x92, 0x6d, 0xf5, 0x81, 0x89, 0xc8, 0x0e, 0x0f, 0xcd, 0xc1, 0xf8, 0x0e, 0x6e, - 0xe9, 0x26, 0x3f, 0x49, 0x66, 0x17, 0xe2, 0x40, 0x26, 0xe9, 0x1f, 0xc8, 0x94, 0xff, 0x14, 0xcc, - 0x6a, 0x56, 0xbb, 0xdb, 0xdc, 0xb2, 0xd4, 0x75, 0xdc, 0xe0, 0x5e, 0x8b, 0xbd, 0xfe, 0x0c, 0x57, - 0x6a, 0x59, 0x86, 0x6a, 0xb6, 0x96, 0x2d, 0xa7, 0x15, 0x3c, 0x78, 0x25, 0x15, 0x8f, 0x1b, 0x7a, - 0xfc, 0x6a, 0xef, 0xfc, 0xef, 0x58, 0xec, 0x67, 0xe3, 0x89, 0x95, 0x7a, 0xf9, 0x8b, 0xf1, 0xf9, - 0x15, 0x06, 0xac, 0x0b, 0x67, 0xc8, 0x78, 0xd7, 0xc0, 0x1a, 0xe9, 0x20, 0xfc, 0xce, 0x53, 0x30, - 0xd7, 0xb2, 0x5a, 0x16, 0x65, 0x3a, 0x47, 0x7e, 0xf1, 0x27, 0xb7, 0x19, 0x5f, 0x3a, 0x3f, 0xf4, - 0x31, 0x6f, 0x71, 0x03, 0x66, 0xb9, 0xb2, 0x42, 0x1f, 0x1d, 0xb1, 0x8d, 0x0d, 0x3a, 0xf2, 0x54, - 0x2d, 0xff, 0x8b, 0xdf, 0xa6, 0xcb, 0xb7, 0x3c, 0xc3, 0xa1, 0xa4, 0x8d, 0xed, 0x7d, 0x8a, 0x32, - 0x9c, 0x88, 0xf0, 0xb1, 0x49, 0x8a, 0x9d, 0x21, 0x8c, 0xff, 0x82, 0x33, 0xce, 0x86, 0x18, 0x1b, - 0x1c, 0x5a, 0xac, 0xc0, 0xe4, 0x71, 0xb8, 0xfe, 0x25, 0xe7, 0xca, 0xe1, 0x30, 0xc9, 0x0a, 0x4c, - 0x53, 0x12, 0xad, 0xe3, 0x7a, 0x56, 0x9b, 0x66, 0xc0, 0xa3, 0x69, 0xfe, 0xd5, 0xb7, 0xd9, 0xac, - 0x99, 0x22, 0xb0, 0x8a, 0x8f, 0x2a, 0x16, 0x81, 0x3e, 0x2d, 0x6b, 0x62, 0xcd, 0x18, 0xc2, 0xf0, - 0x75, 0x6e, 0x88, 0xaf, 0x5f, 0xbc, 0x09, 0x73, 0xe4, 0x37, 0x4d, 0x50, 0x61, 0x4b, 0x86, 0x1f, - 0xc1, 0xe5, 0x7f, 0xf5, 0xe3, 0x6c, 0x62, 0xce, 0xfa, 0x04, 0x21, 0x9b, 0x42, 0xa3, 0xd8, 0xc2, - 0x9e, 0x87, 0x1d, 0x57, 0x51, 0x8d, 0x7e, 0xe6, 0x85, 0xce, 0x30, 0xf2, 0x3f, 0xfd, 0xbd, 0xe8, - 0x28, 0xae, 0x30, 0x64, 0xc9, 0x30, 0x8a, 0xdb, 0x70, 0xaa, 0x4f, 0x54, 0x8c, 0xc0, 0xf9, 0x19, - 0xce, 0x39, 0xd7, 0x13, 0x19, 0x84, 0xb6, 0x0e, 0x42, 0xee, 0x8f, 0xe5, 0x08, 0x9c, 0x3f, 0xc3, - 0x39, 0x11, 0xc7, 0x8a, 0x21, 0x25, 0x8c, 0xd7, 0x61, 0xe6, 0x00, 0x3b, 0x3b, 0x96, 0xcb, 0xcf, - 0x8d, 0x46, 0xa0, 0xfb, 0x2c, 0xa7, 0x9b, 0xe6, 0x40, 0x7a, 0x90, 0x44, 0xb8, 0x2e, 0x43, 0x7a, - 0x57, 0xd5, 0xf0, 0x08, 0x14, 0x77, 0x39, 0xc5, 0x04, 0xd1, 0x27, 0xd0, 0x12, 0xe4, 0x5a, 0x16, - 0x5f, 0xa3, 0x86, 0xc3, 0x3f, 0xc7, 0xe1, 0x59, 0x81, 0xe1, 0x14, 0xb6, 0x65, 0x77, 0x0c, 0xb2, - 0x80, 0x0d, 0xa7, 0xf8, 0x6b, 0x82, 0x42, 0x60, 0x38, 0xc5, 0x31, 0xdc, 0xfa, 0xb6, 0xa0, 0x70, - 0x43, 0xfe, 0x7c, 0x09, 0xb2, 0x96, 0x69, 0x1c, 0x5a, 0xe6, 0x28, 0x46, 0xbc, 0xc3, 0x19, 0x80, - 0x43, 0x08, 0xc1, 0x15, 0xc8, 0x8c, 0x3a, 0x10, 0x7f, 0xfd, 0x7b, 0x62, 0x7a, 0x88, 0x11, 0x58, - 0x81, 0x69, 0x91, 0xa0, 0x74, 0xcb, 0x1c, 0x81, 0xe2, 0x6f, 0x70, 0x8a, 0xa9, 0x10, 0x8c, 0x77, - 0xc3, 0xc3, 0xae, 0xd7, 0xc2, 0xa3, 0x90, 0x7c, 0x41, 0x74, 0x83, 0x43, 0xb8, 0x2b, 0x77, 0xb0, - 0xa9, 0xed, 0x8d, 0xc6, 0xf0, 0xf3, 0xc2, 0x95, 0x02, 0x43, 0x28, 0x2a, 0x30, 0xd9, 0x56, 0x1d, - 0x77, 0x4f, 0x35, 0x46, 0x1a, 0x8e, 0xbf, 0xc9, 0x39, 0x72, 0x3e, 0x88, 0x7b, 0xa4, 0x63, 0x1e, - 0x87, 0xe6, 0x8b, 0xc2, 0x23, 0x21, 0x18, 0x9f, 0x7a, 0xae, 0x47, 0x0f, 0xd9, 0x8e, 0xc3, 0xf6, - 0xb7, 0xc4, 0xd4, 0x63, 0xd8, 0xf5, 0x30, 0xe3, 0x15, 0xc8, 0xb8, 0xfa, 0x9b, 0x23, 0xd1, 0x7c, - 0x49, 0x8c, 0x34, 0x05, 0x10, 0xf0, 0x6b, 0x70, 0xba, 0xef, 0x32, 0x31, 0x02, 0xd9, 0xdf, 0xe6, - 0x64, 0x27, 0xfb, 0x2c, 0x15, 0x3c, 0x25, 0x1c, 0x97, 0xf2, 0xef, 0x88, 0x94, 0x80, 0xbb, 0xb8, - 0xea, 0x64, 0xd7, 0xe0, 0xaa, 0xbb, 0xc7, 0xf3, 0xda, 0xdf, 0x15, 0x5e, 0x63, 0xd8, 0x88, 0xd7, - 0xb6, 0xe0, 0x24, 0x67, 0x3c, 0xde, 0xb8, 0xfe, 0x82, 0x48, 0xac, 0x0c, 0xbd, 0x1d, 0x1d, 0xdd, - 0x1f, 0x85, 0x79, 0xdf, 0x9d, 0xa2, 0x3c, 0x75, 0x95, 0xb6, 0x6a, 0x8f, 0xc0, 0xfc, 0x8b, 0x9c, - 0x59, 0x64, 0x7c, 0xbf, 0xbe, 0x75, 0xd7, 0x55, 0x9b, 0x90, 0xbf, 0x0a, 0x79, 0x41, 0xde, 0x31, - 0x1d, 0xac, 0x59, 0x2d, 0x53, 0x7f, 0x13, 0x37, 0x47, 0xa0, 0xfe, 0xa5, 0xae, 0xa1, 0xda, 0x0e, - 0xc1, 0x09, 0xf3, 0x2a, 0x48, 0x7e, 0xad, 0xa2, 0xe8, 0x6d, 0xdb, 0x72, 0xbc, 0x21, 0x8c, 0x5f, - 0x16, 0x23, 0xe5, 0xe3, 0x56, 0x29, 0xac, 0x58, 0x03, 0xf6, 0xe4, 0x79, 0xd4, 0x90, 0xfc, 0x0a, - 0x27, 0x9a, 0x0c, 0x50, 0x3c, 0x71, 0x68, 0x56, 0xdb, 0x56, 0x9d, 0x51, 0xf2, 0xdf, 0xdf, 0x13, - 0x89, 0x83, 0x43, 0x78, 0xe2, 0x20, 0x15, 0x1d, 0x59, 0xed, 0x47, 0x60, 0xf8, 0xaa, 0x48, 0x1c, - 0x02, 0xc3, 0x29, 0x44, 0xc1, 0x30, 0x02, 0xc5, 0xdf, 0x17, 0x14, 0x02, 0x43, 0x28, 0x5e, 0x0e, - 0x16, 0x5a, 0x07, 0xb7, 0x74, 0xd7, 0x73, 0x58, 0x51, 0x7c, 0x34, 0xd5, 0x3f, 0xf8, 0x5e, 0xb4, - 0x08, 0x93, 0x43, 0x50, 0x92, 0x89, 0xf8, 0xb1, 0x2b, 0xdd, 0x33, 0x0d, 0x37, 0xec, 0x97, 0x45, - 0x26, 0x0a, 0xc1, 0x88, 0x6d, 0xa1, 0x0a, 0x91, 0xb8, 0x5d, 0x23, 0x3b, 0x85, 0x11, 0xe8, 0xfe, - 0x61, 0x97, 0x71, 0x0d, 0x81, 0x25, 0x9c, 0xa1, 0xfa, 0xa7, 0x63, 0xee, 0xe3, 0xc3, 0x91, 0xa2, - 0xf3, 0x57, 0xba, 0xea, 0x9f, 0x6d, 0x86, 0x64, 0x39, 0x64, 0xba, 0xab, 0x9e, 0x42, 0xc3, 0xde, - 0x33, 0xca, 0x7f, 0xec, 0x7d, 0xde, 0xdf, 0x68, 0x39, 0x55, 0x5c, 0x23, 0x41, 0x1e, 0x2d, 0x7a, - 0x86, 0x93, 0x7d, 0xfc, 0x7d, 0x3f, 0xce, 0x23, 0x35, 0x4f, 0xf1, 0x2a, 0x4c, 0x46, 0x0a, 0x9e, - 0xe1, 0x54, 0x7f, 0x9a, 0x53, 0xe5, 0xc2, 0xf5, 0x4e, 0xf1, 0x02, 0x24, 0x49, 0xf1, 0x32, 0x1c, - 0xfe, 0x67, 0x38, 0x9c, 0xaa, 0x17, 0x3f, 0x02, 0x69, 0x51, 0xb4, 0x0c, 0x87, 0xfe, 0x59, 0x0e, - 0xf5, 0x21, 0x04, 0x2e, 0x0a, 0x96, 0xe1, 0xf0, 0x3f, 0x27, 0xe0, 0x02, 0x42, 0xe0, 0xa3, 0xbb, - 0xf0, 0x6b, 0x7f, 0x3e, 0xc9, 0x17, 0x1d, 0xe1, 0xbb, 0x2b, 0x30, 0xc1, 0x2b, 0x95, 0xe1, 0xe8, - 0x4f, 0xf2, 0x9b, 0x0b, 0x44, 0xf1, 0x12, 0x8c, 0x8f, 0xe8, 0xf0, 0xbf, 0xc0, 0xa1, 0x4c, 0xbf, - 0x58, 0x81, 0x6c, 0xa8, 0x3a, 0x19, 0x0e, 0xff, 0x8b, 0x1c, 0x1e, 0x46, 0x11, 0xd3, 0x79, 0x75, - 0x32, 0x9c, 0xe0, 0x2f, 0x09, 0xd3, 0x39, 0x82, 0xb8, 0x4d, 0x14, 0x26, 0xc3, 0xd1, 0x9f, 0x12, - 0x5e, 0x17, 0x90, 0xe2, 0x4b, 0x90, 0xf1, 0x17, 0x9b, 0xe1, 0xf8, 0x9f, 0xe0, 0xf8, 0x00, 0x43, - 0x3c, 0x10, 0x5a, 0xec, 0x86, 0x53, 0xfc, 0x65, 0xe1, 0x81, 0x10, 0x8a, 0x4c, 0xa3, 0xee, 0x02, - 0x66, 0x38, 0xd3, 0x4f, 0x8a, 0x69, 0xd4, 0x55, 0xbf, 0x90, 0xd1, 0xa4, 0x39, 0x7f, 0x38, 0xc5, - 0x5f, 0x11, 0xa3, 0x49, 0xf5, 0x89, 0x19, 0xdd, 0x15, 0xc1, 0x70, 0x8e, 0x9f, 0x12, 0x66, 0x74, - 0x15, 0x04, 0xc5, 0x3a, 0xa0, 0xde, 0x6a, 0x60, 0x38, 0xdf, 0xa7, 0x39, 0xdf, 0x4c, 0x4f, 0x31, - 0x50, 0x7c, 0x05, 0x4e, 0xf6, 0xaf, 0x04, 0x86, 0xb3, 0xfe, 0xf4, 0xfb, 0x5d, 0x7b, 0xb7, 0x70, - 0x21, 0x50, 0xdc, 0x0a, 0x96, 0x94, 0x70, 0x15, 0x30, 0x9c, 0xf6, 0x33, 0xef, 0x47, 0x13, 0x77, - 0xb8, 0x08, 0x28, 0x96, 0x00, 0x82, 0x05, 0x78, 0x38, 0xd7, 0x67, 0x39, 0x57, 0x08, 0x44, 0xa6, - 0x06, 0x5f, 0x7f, 0x87, 0xe3, 0xef, 0x8a, 0xa9, 0xc1, 0x11, 0x64, 0x6a, 0x88, 0xa5, 0x77, 0x38, - 0xfa, 0x73, 0x62, 0x6a, 0x08, 0x08, 0x89, 0xec, 0xd0, 0xea, 0x36, 0x9c, 0xe1, 0x1d, 0x11, 0xd9, - 0x21, 0x54, 0x71, 0x03, 0x66, 0x7a, 0x16, 0xc4, 0xe1, 0x54, 0x3f, 0xcb, 0xa9, 0xa4, 0xee, 0xf5, - 0x30, 0xbc, 0x78, 0xf1, 0xc5, 0x70, 0x38, 0xdb, 0xe7, 0xbb, 0x16, 0x2f, 0xbe, 0x16, 0x16, 0xaf, - 0x40, 0xda, 0xec, 0x18, 0x06, 0x99, 0x3c, 0xe8, 0xe8, 0x77, 0x03, 0xf3, 0xff, 0xf5, 0x87, 0xdc, - 0x3b, 0x02, 0x50, 0xbc, 0x00, 0xe3, 0xb8, 0xbd, 0x83, 0x9b, 0xc3, 0x90, 0xdf, 0xfd, 0xa1, 0x48, - 0x98, 0x44, 0xbb, 0xf8, 0x12, 0x00, 0x3b, 0x1a, 0xa1, 0x0f, 0x03, 0x87, 0x60, 0xff, 0xdb, 0x0f, - 0xf9, 0xcb, 0x38, 0x01, 0x24, 0x20, 0x60, 0xaf, 0xf6, 0x1c, 0x4d, 0xf0, 0xbd, 0x28, 0x01, 0x1d, - 0x91, 0xcb, 0x30, 0xf1, 0x86, 0x6b, 0x99, 0x9e, 0xda, 0x1a, 0x86, 0xfe, 0x1d, 0x8e, 0x16, 0xfa, - 0xc4, 0x61, 0x6d, 0xcb, 0xc1, 0x9e, 0xda, 0x72, 0x87, 0x61, 0xff, 0x3b, 0xc7, 0xfa, 0x00, 0x02, - 0xd6, 0x54, 0xd7, 0x1b, 0xa5, 0xdf, 0xbf, 0x2b, 0xc0, 0x02, 0x40, 0x8c, 0x26, 0xbf, 0xf7, 0xf1, - 0xe1, 0x30, 0xec, 0xf7, 0x85, 0xd1, 0x5c, 0xbf, 0xf8, 0x11, 0xc8, 0x90, 0x9f, 0xec, 0x0d, 0xbb, - 0x21, 0xe0, 0xff, 0xc1, 0xc1, 0x01, 0x82, 0xdc, 0xd9, 0xf5, 0x9a, 0x9e, 0x3e, 0xdc, 0xd9, 0x3f, - 0xe0, 0x23, 0x2d, 0xf4, 0x8b, 0x25, 0xc8, 0xba, 0x5e, 0xb3, 0xd9, 0xe1, 0xf5, 0xe9, 0x10, 0xf8, - 0xff, 0xfc, 0xa1, 0x7f, 0x64, 0xe1, 0x63, 0xc8, 0x68, 0xdf, 0xda, 0xf7, 0x6c, 0x8b, 0x3e, 0xf0, - 0x18, 0xc6, 0xf0, 0x3e, 0x67, 0x08, 0x41, 0x8a, 0x15, 0xc8, 0x91, 0xbe, 0x38, 0xd8, 0xc6, 0xf4, - 0xe9, 0xd4, 0x10, 0x8a, 0xff, 0xc5, 0x1d, 0x10, 0x01, 0x95, 0xff, 0xc4, 0xd7, 0xdf, 0x5b, 0x88, - 0x7d, 0xf3, 0xbd, 0x85, 0xd8, 0x6f, 0xbf, 0xb7, 0x10, 0xfb, 0xd4, 0xb7, 0x16, 0xc6, 0xbe, 0xf9, - 0xad, 0x85, 0xb1, 0xdf, 0xf8, 0xd6, 0xc2, 0x58, 0xff, 0x53, 0x62, 0x58, 0xb1, 0x56, 0x2c, 0x76, - 0x3e, 0xfc, 0xfa, 0x63, 0x2d, 0xdd, 0xdb, 0xeb, 0xec, 0x2c, 0x6b, 0x56, 0xfb, 0x9c, 0x66, 0xb9, - 0x6d, 0xcb, 0x3d, 0x17, 0x3d, 0xd7, 0xa5, 0xbf, 0xe0, 0x63, 0x71, 0xb2, 0x67, 0x8e, 0x1e, 0xe7, - 0xaa, 0xe6, 0xe1, 0x80, 0xcf, 0x75, 0xe6, 0xfb, 0x9e, 0x0d, 0x17, 0xae, 0x41, 0xa2, 0x64, 0x1e, - 0xa2, 0xd3, 0x2c, 0xed, 0x29, 0x1d, 0xc7, 0xe0, 0x2f, 0x7f, 0x4d, 0x90, 0xeb, 0x6d, 0xc7, 0x40, - 0x73, 0xc1, 0x1b, 0x9a, 0xb1, 0xb3, 0x39, 0xfe, 0xda, 0x65, 0x51, 0xfa, 0xf4, 0xdb, 0x8b, 0x63, - 0xbf, 0xf0, 0xf6, 0xe2, 0xd8, 0xf7, 0xdf, 0x59, 0x1c, 0x7b, 0xeb, 0xb7, 0x96, 0xc6, 0xca, 0xfb, - 0xdd, 0x1d, 0xfe, 0xda, 0xd0, 0x4e, 0xa7, 0x4b, 0xe6, 0x21, 0xed, 0x73, 0x3d, 0xf6, 0xfa, 0x38, - 0x3d, 0xf7, 0x16, 0xe7, 0xdc, 0x0b, 0xdd, 0xe7, 0xdc, 0xaf, 0x60, 0xc3, 0xb8, 0x61, 0x5a, 0xb7, - 0xcc, 0x2d, 0xa2, 0xb6, 0x93, 0x62, 0x6f, 0x15, 0xc3, 0x4f, 0xc6, 0x61, 0xa1, 0xe7, 0x48, 0x9b, - 0x07, 0xc2, 0xa0, 0xef, 0x96, 0x8a, 0x90, 0xae, 0x8a, 0xf8, 0xca, 0xc3, 0x84, 0x8b, 0x35, 0xcb, - 0x6c, 0xba, 0xb4, 0xdb, 0x09, 0x59, 0x5c, 0x92, 0x6e, 0x9b, 0xaa, 0x69, 0xb9, 0xfc, 0x65, 0x49, - 0x76, 0x51, 0xfe, 0x99, 0xd8, 0xf1, 0x86, 0x75, 0x52, 0xdc, 0x49, 0x74, 0xf3, 0xb9, 0xa1, 0x27, - 0xff, 0xfb, 0xa4, 0x97, 0x7e, 0x27, 0x22, 0xa7, 0xff, 0xa3, 0x7a, 0xe5, 0xa7, 0xe2, 0xb0, 0xd8, - 0xed, 0x15, 0x32, 0xbb, 0x5c, 0x4f, 0x6d, 0xdb, 0x83, 0xdc, 0x72, 0x05, 0x32, 0x5b, 0x42, 0xe7, - 0xd8, 0x7e, 0xb9, 0x7b, 0x4c, 0xbf, 0x4c, 0xf9, 0xb7, 0x12, 0x8e, 0x39, 0x3f, 0xa2, 0x63, 0xfc, - 0x7e, 0xdc, 0x93, 0x67, 0xfe, 0x4f, 0x0a, 0x4e, 0xb3, 0x29, 0xa5, 0xb0, 0xa9, 0xc0, 0x2e, 0xb8, - 0x4f, 0x72, 0xe1, 0xa6, 0xe1, 0xcf, 0x4a, 0x0a, 0x37, 0x60, 0x76, 0x95, 0x64, 0x0c, 0xb2, 0x13, - 0x0a, 0x9e, 0xf2, 0xf4, 0x7d, 0x9f, 0x74, 0x29, 0x52, 0xf4, 0xf3, 0xa7, 0x4c, 0x61, 0x51, 0xe1, - 0x63, 0x31, 0x90, 0x1a, 0x9a, 0x6a, 0xa8, 0xce, 0xff, 0x2f, 0x15, 0xba, 0x04, 0x40, 0xbf, 0x43, - 0x0a, 0x3e, 0x1c, 0x9a, 0x3a, 0x9f, 0x5f, 0x0e, 0x77, 0x6e, 0x99, 0xdd, 0x89, 0x7e, 0x95, 0x90, - 0xa1, 0xba, 0xe4, 0xe7, 0x93, 0xaf, 0x02, 0x04, 0x0d, 0xe8, 0x01, 0x38, 0xd5, 0xa8, 0x94, 0xd6, - 0x4a, 0xb2, 0xc2, 0x5e, 0x70, 0xdf, 0x68, 0xd4, 0x6b, 0x95, 0xd5, 0xab, 0xab, 0xb5, 0xaa, 0x34, - 0x86, 0x4e, 0x02, 0x0a, 0x37, 0xfa, 0xef, 0xa6, 0x9c, 0x80, 0x99, 0xb0, 0x9c, 0xbd, 0x25, 0x1f, - 0x27, 0xd5, 0xa2, 0xde, 0xb6, 0x0d, 0x4c, 0x1f, 0xff, 0x29, 0xba, 0xf0, 0xda, 0xf0, 0x42, 0xe4, - 0x5f, 0xff, 0x5b, 0xf6, 0xe6, 0xf4, 0x6c, 0x00, 0xf7, 0x7d, 0x5e, 0x5c, 0x83, 0x19, 0x55, 0xd3, - 0xb0, 0x1d, 0xa1, 0x1c, 0x92, 0xae, 0x09, 0x21, 0x7d, 0xa0, 0xc9, 0x91, 0x01, 0xdb, 0x25, 0x48, - 0xb9, 0xb4, 0xf7, 0xc3, 0x28, 0xbe, 0xc1, 0x29, 0xb8, 0x7a, 0xd1, 0x84, 0x19, 0x52, 0xfd, 0xa9, - 0x0e, 0x0e, 0x99, 0x71, 0xf4, 0x59, 0xc3, 0x3f, 0xfa, 0xf2, 0xb3, 0xf4, 0xf1, 0xe6, 0xc3, 0xd1, - 0x61, 0xe9, 0x13, 0x4e, 0xb2, 0xc4, 0xb9, 0x03, 0x43, 0x31, 0x4c, 0x89, 0xfb, 0x71, 0x83, 0x8f, - 0xbe, 0xd9, 0x3f, 0xe6, 0x37, 0x5b, 0xe8, 0x17, 0x03, 0xa1, 0x3b, 0x4d, 0x72, 0x56, 0xd6, 0x50, - 0xae, 0x0d, 0x9a, 0xd3, 0xaf, 0x3f, 0xd5, 0xbb, 0x42, 0xb1, 0x3f, 0xcf, 0x50, 0xe6, 0x2b, 0xe1, - 0xdb, 0xf8, 0x73, 0xef, 0xd7, 0x13, 0xb0, 0xc0, 0x95, 0x77, 0x54, 0x17, 0x9f, 0x3b, 0x78, 0x6e, - 0x07, 0x7b, 0xea, 0x73, 0xe7, 0x34, 0x4b, 0x17, 0xb9, 0x7a, 0x96, 0x4f, 0x47, 0xd2, 0xbe, 0xcc, - 0xdb, 0xfb, 0x2f, 0x5c, 0xf3, 0x83, 0xa7, 0x71, 0x61, 0x1b, 0x92, 0x15, 0x4b, 0x37, 0x49, 0xaa, - 0x6a, 0x62, 0xd3, 0x6a, 0xf3, 0xd9, 0xc3, 0x2e, 0xd0, 0x73, 0x90, 0x52, 0xdb, 0x56, 0xc7, 0xf4, - 0xd8, 0xcc, 0x29, 0x9f, 0xfe, 0xfa, 0xbb, 0x8b, 0x63, 0xff, 0xee, 0xdd, 0xc5, 0xc4, 0xaa, 0xe9, - 0xfd, 0xda, 0x57, 0x9e, 0x01, 0x4e, 0xb5, 0x6a, 0x7a, 0x32, 0x57, 0x2c, 0x26, 0xbf, 0xf3, 0xf6, - 0x62, 0xac, 0xf0, 0x2a, 0x4c, 0x54, 0xb1, 0x76, 0x2f, 0xcc, 0x55, 0xac, 0x85, 0x98, 0xab, 0x58, - 0xeb, 0x62, 0xbe, 0x04, 0xe9, 0x55, 0xd3, 0x63, 0x2f, 0xa3, 0x3f, 0x05, 0x09, 0xdd, 0x64, 0xef, - 0x37, 0x1e, 0x69, 0x1b, 0xd1, 0x22, 0xc0, 0x2a, 0xd6, 0x7c, 0x60, 0x13, 0x6b, 0xdd, 0xc0, 0xde, - 0x5b, 0x13, 0xad, 0x72, 0xf5, 0x37, 0xfe, 0xd3, 0xc2, 0xd8, 0x5b, 0xef, 0x2d, 0x8c, 0x0d, 0x1c, - 0xe2, 0xc2, 0xc0, 0x21, 0x76, 0x9b, 0xfb, 0x2c, 0x23, 0xfb, 0x23, 0xfb, 0xc5, 0x24, 0x3c, 0x44, - 0xbf, 0x51, 0x72, 0xda, 0xba, 0xe9, 0x9d, 0xd3, 0x9c, 0x43, 0xdb, 0xb3, 0x48, 0xde, 0xb4, 0x76, - 0xf9, 0xc0, 0xce, 0x04, 0xcd, 0xcb, 0xac, 0x79, 0x40, 0x3d, 0xb2, 0x0b, 0xe3, 0x75, 0x82, 0x23, - 0x2e, 0xf6, 0x2c, 0x4f, 0x35, 0xf8, 0xfa, 0xc3, 0x2e, 0x88, 0x94, 0x7d, 0xd7, 0x14, 0x67, 0x52, - 0x5d, 0x7c, 0xd2, 0x64, 0x60, 0x75, 0x97, 0xbd, 0x1e, 0x9e, 0xa0, 0x65, 0x4a, 0x9a, 0x08, 0xe8, - 0x9b, 0xe0, 0x73, 0x30, 0xae, 0x76, 0xd8, 0x7b, 0x0c, 0x09, 0x52, 0xbf, 0xd0, 0x8b, 0xc2, 0x0d, - 0x98, 0xe0, 0x4f, 0x53, 0x91, 0x04, 0x89, 0x7d, 0x7c, 0x48, 0xef, 0x93, 0x93, 0xc9, 0x4f, 0xb4, - 0x0c, 0xe3, 0xd4, 0x78, 0xfe, 0xdd, 0x4b, 0x7e, 0xb9, 0xc7, 0xfa, 0x65, 0x6a, 0xa4, 0xcc, 0xd4, - 0x0a, 0xd7, 0x21, 0x5d, 0xb5, 0xda, 0xba, 0x69, 0x45, 0xd9, 0x32, 0x8c, 0x8d, 0xda, 0x6c, 0x77, - 0x78, 0x54, 0xc8, 0xec, 0x02, 0x9d, 0x84, 0x14, 0xfb, 0x5c, 0x80, 0xbf, 0x8b, 0xc1, 0xaf, 0x0a, - 0x15, 0x98, 0xa0, 0xdc, 0x9b, 0x36, 0x49, 0xfe, 0xfe, 0x9b, 0x99, 0x19, 0xfe, 0xf1, 0x18, 0xa7, - 0x8f, 0x07, 0xc6, 0x22, 0x48, 0x36, 0x55, 0x4f, 0xe5, 0xfd, 0xa6, 0xbf, 0x0b, 0x1f, 0x85, 0x34, - 0x27, 0x71, 0xd1, 0x79, 0x48, 0x58, 0xb6, 0xcb, 0xdf, 0xa6, 0x98, 0x1f, 0xd4, 0x95, 0x4d, 0xbb, - 0x9c, 0x24, 0x31, 0x23, 0x13, 0xe5, 0xb2, 0x3c, 0x30, 0x2c, 0x5e, 0x0c, 0x85, 0x45, 0x68, 0xc8, - 0x43, 0x3f, 0xd9, 0x90, 0xf6, 0x84, 0x83, 0x1f, 0x2c, 0xef, 0xc4, 0x61, 0x21, 0xd4, 0x7a, 0x80, - 0x1d, 0x57, 0xb7, 0x4c, 0x16, 0x51, 0x3c, 0x5a, 0x50, 0xc8, 0x48, 0xde, 0x3e, 0x20, 0x5c, 0x3e, - 0x02, 0x89, 0x92, 0x6d, 0xa3, 0x79, 0x48, 0xd3, 0x6b, 0xcd, 0x62, 0xf1, 0x92, 0x94, 0xfd, 0x6b, - 0xd2, 0xe6, 0x5a, 0xbb, 0xde, 0x2d, 0xd5, 0xf1, 0xbf, 0xa8, 0x13, 0xd7, 0x85, 0xcb, 0x90, 0xa9, - 0x58, 0xa6, 0x8b, 0x4d, 0xb7, 0x43, 0x2b, 0x9b, 0x1d, 0xc3, 0xd2, 0xf6, 0x39, 0x03, 0xbb, 0x20, - 0x0e, 0x57, 0x6d, 0x9b, 0x22, 0x93, 0x32, 0xf9, 0xc9, 0xe6, 0x6c, 0xb9, 0x31, 0xd0, 0x45, 0x97, - 0x8f, 0xef, 0x22, 0xde, 0x49, 0xdf, 0x47, 0xbf, 0x17, 0x83, 0x07, 0x7b, 0x27, 0xd4, 0x3e, 0x3e, - 0x74, 0x8f, 0x3b, 0x9f, 0x5e, 0x85, 0x4c, 0x9d, 0x7e, 0xd6, 0x7e, 0x03, 0x1f, 0xa2, 0x79, 0x98, - 0xc0, 0xcd, 0xf3, 0x17, 0x2e, 0x3c, 0x77, 0x99, 0x45, 0xfb, 0xb5, 0x31, 0x59, 0x08, 0xd0, 0x02, - 0x64, 0x5c, 0xac, 0xd9, 0xe7, 0x2f, 0x5c, 0xdc, 0x7f, 0x8e, 0x85, 0xd7, 0xb5, 0x31, 0x39, 0x10, - 0x15, 0xd3, 0xa4, 0xd7, 0xdf, 0x79, 0x67, 0x31, 0x56, 0x1e, 0x87, 0x84, 0xdb, 0x69, 0x7f, 0xa0, - 0x31, 0xf2, 0x99, 0x71, 0x58, 0x0a, 0x23, 0x69, 0xfd, 0x77, 0xa0, 0x1a, 0x7a, 0x53, 0x0d, 0xfe, - 0x21, 0x81, 0x14, 0xf2, 0x01, 0xd5, 0x18, 0xb0, 0x52, 0x1c, 0xe9, 0xc9, 0xc2, 0x2f, 0xc5, 0x20, - 0x77, 0x53, 0x30, 0x37, 0xb0, 0x87, 0xae, 0x00, 0xf8, 0x77, 0x12, 0xd3, 0xe6, 0x81, 0xe5, 0xee, - 0x7b, 0x2d, 0xfb, 0x18, 0x39, 0xa4, 0x8e, 0x2e, 0xd1, 0x40, 0xb4, 0x2d, 0x97, 0x7f, 0x65, 0x35, - 0x04, 0xea, 0x2b, 0xa3, 0xa7, 0x01, 0xd1, 0x0c, 0xa7, 0x1c, 0x58, 0x9e, 0x6e, 0xb6, 0x14, 0xdb, - 0xba, 0xc5, 0xbf, 0x5d, 0x4d, 0xc8, 0x12, 0x6d, 0xb9, 0x49, 0x1b, 0xea, 0x44, 0x4e, 0x8c, 0xce, - 0xf8, 0x2c, 0xa4, 0x58, 0x57, 0x9b, 0x4d, 0x07, 0xbb, 0x2e, 0x4f, 0x62, 0xe2, 0x12, 0x5d, 0x81, - 0x09, 0xbb, 0xb3, 0xa3, 0x88, 0x8c, 0x91, 0x3d, 0xff, 0x60, 0xbf, 0xf9, 0x2f, 0xe2, 0x83, 0x67, - 0x80, 0x94, 0xdd, 0xd9, 0x21, 0xd1, 0xf2, 0x30, 0xe4, 0xfa, 0x18, 0x93, 0x3d, 0x08, 0xec, 0xa0, - 0xff, 0x4d, 0x81, 0xf7, 0x40, 0xb1, 0x1d, 0xdd, 0x72, 0x74, 0xef, 0x90, 0xbe, 0x12, 0x95, 0x90, - 0x25, 0xd1, 0x50, 0xe7, 0xf2, 0xc2, 0x3e, 0x4c, 0x37, 0x68, 0x11, 0x17, 0x58, 0x7e, 0x21, 0xb0, - 0x2f, 0x36, 0xdc, 0xbe, 0x81, 0x96, 0xc5, 0x7b, 0x2c, 0x2b, 0xbf, 0x3c, 0x30, 0x3a, 0x2f, 0x1d, - 0x3f, 0x3a, 0xa3, 0xab, 0xdd, 0xef, 0x9e, 0x8e, 0x4c, 0x4e, 0x16, 0x9c, 0xe1, 0xf4, 0x35, 0x6a, - 0x60, 0x0e, 0xdb, 0xa3, 0xcd, 0x1f, 0xbd, 0xa8, 0xce, 0x0f, 0x49, 0xa3, 0xf3, 0x43, 0xa7, 0x50, - 0xe1, 0x32, 0x4c, 0xd6, 0x55, 0xc7, 0x6b, 0x60, 0xef, 0x1a, 0x56, 0x9b, 0xd8, 0x89, 0xae, 0xba, - 0x93, 0x62, 0xd5, 0x45, 0x90, 0xa4, 0x4b, 0x2b, 0x5b, 0x75, 0xe8, 0xef, 0xc2, 0x1e, 0x24, 0xe9, - 0x6b, 0x91, 0xfe, 0x8a, 0xcc, 0x11, 0x6c, 0x45, 0x26, 0xb9, 0xf4, 0xd0, 0xc3, 0xae, 0x38, 0x34, - 0xa0, 0x17, 0xe8, 0x05, 0xb1, 0xae, 0x26, 0x8e, 0x5e, 0x57, 0x79, 0x20, 0xf2, 0xd5, 0xd5, 0x80, - 0x89, 0x32, 0x49, 0xc5, 0xab, 0x55, 0xdf, 0x90, 0x58, 0x60, 0x08, 0x5a, 0x87, 0x69, 0x5b, 0x75, - 0x3c, 0xfa, 0x85, 0xc8, 0x1e, 0xed, 0x05, 0x8f, 0xf5, 0xc5, 0xde, 0x99, 0x17, 0xe9, 0x2c, 0xbf, - 0xcb, 0xa4, 0x1d, 0x16, 0x16, 0xfe, 0x73, 0x12, 0x52, 0xdc, 0x19, 0x1f, 0x81, 0x09, 0xee, 0x56, - 0x1e, 0x9d, 0x0f, 0x2d, 0xf7, 0x2e, 0x4c, 0xcb, 0xfe, 0x02, 0xc2, 0xf9, 0x04, 0x06, 0x3d, 0x0e, - 0x69, 0x6d, 0x4f, 0xd5, 0x4d, 0x45, 0x6f, 0xf2, 0x82, 0x30, 0xfb, 0xde, 0xbb, 0x8b, 0x13, 0x15, - 0x22, 0x5b, 0xad, 0xca, 0x13, 0xb4, 0x71, 0xb5, 0x49, 0x2a, 0x81, 0x3d, 0xac, 0xb7, 0xf6, 0x3c, - 0x3e, 0xc3, 0xf8, 0x15, 0x7a, 0x11, 0x92, 0x24, 0x20, 0xf8, 0xf7, 0x83, 0xf3, 0x3d, 0x15, 0xbe, - 0xbf, 0x85, 0x2e, 0xa7, 0xc9, 0x8d, 0x3f, 0xf5, 0x1f, 0x17, 0x63, 0x32, 0x45, 0xa0, 0x0a, 0x4c, - 0x1a, 0xaa, 0xeb, 0x29, 0x74, 0x05, 0x23, 0xb7, 0x1f, 0xa7, 0x14, 0xa7, 0x7b, 0x1d, 0xc2, 0x1d, - 0xcb, 0x4d, 0xcf, 0x12, 0x14, 0x13, 0x35, 0xd1, 0x59, 0x90, 0x28, 0x89, 0x66, 0xb5, 0xdb, 0xba, - 0xc7, 0x6a, 0xab, 0x14, 0xf5, 0xfb, 0x14, 0x91, 0x57, 0xa8, 0x98, 0x56, 0x58, 0x0f, 0x40, 0x86, - 0x7e, 0xb1, 0x44, 0x55, 0xd8, 0xbb, 0xb8, 0x69, 0x22, 0xa0, 0x8d, 0x67, 0x60, 0x3a, 0xc8, 0x8f, - 0x4c, 0x25, 0xcd, 0x58, 0x02, 0x31, 0x55, 0x7c, 0x16, 0xe6, 0x4c, 0x7c, 0x9b, 0xbe, 0x1d, 0x1c, - 0xd1, 0xce, 0x50, 0x6d, 0x44, 0xda, 0x6e, 0x46, 0x11, 0x8f, 0xc1, 0x94, 0x26, 0x9c, 0xcf, 0x74, - 0x81, 0xea, 0x4e, 0xfa, 0x52, 0xaa, 0x76, 0x1a, 0xd2, 0xaa, 0x6d, 0x33, 0x85, 0x2c, 0xcf, 0x8f, - 0xb6, 0x4d, 0x9b, 0x9e, 0x84, 0x19, 0xda, 0x47, 0x07, 0xbb, 0x1d, 0xc3, 0xe3, 0x24, 0x39, 0xaa, - 0x33, 0x4d, 0x1a, 0x64, 0x26, 0xa7, 0xba, 0x8f, 0xc0, 0x24, 0x3e, 0xd0, 0x9b, 0xd8, 0xd4, 0x30, - 0xd3, 0x9b, 0xa4, 0x7a, 0x39, 0x21, 0xa4, 0x4a, 0x4f, 0x80, 0x9f, 0xf7, 0x14, 0x91, 0x93, 0xa7, - 0x18, 0x9f, 0x90, 0x97, 0x98, 0xb8, 0x90, 0x87, 0x64, 0x55, 0xf5, 0x54, 0x52, 0x60, 0x78, 0xb7, - 0xd9, 0x42, 0x93, 0x93, 0xc9, 0xcf, 0xc2, 0x77, 0xe2, 0x90, 0xbc, 0x69, 0x79, 0x18, 0x3d, 0x1f, - 0x2a, 0x00, 0xa7, 0xfa, 0xc5, 0x73, 0x43, 0x6f, 0x99, 0xb8, 0xb9, 0xee, 0xb6, 0x42, 0xff, 0x5e, - 0x20, 0x08, 0xa7, 0x78, 0x24, 0x9c, 0xe6, 0x60, 0xdc, 0xb1, 0x3a, 0x66, 0x53, 0xbc, 0xc6, 0x4a, - 0x2f, 0x50, 0x0d, 0xd2, 0x7e, 0x94, 0x24, 0x87, 0x45, 0xc9, 0x34, 0x89, 0x12, 0x12, 0xc3, 0x5c, - 0x20, 0x4f, 0xec, 0xf0, 0x60, 0x29, 0x43, 0xc6, 0x4f, 0x5e, 0x3c, 0xda, 0x46, 0x0b, 0xd8, 0x00, - 0x46, 0x16, 0x13, 0x7f, 0xec, 0x7d, 0xe7, 0xb1, 0x88, 0x93, 0xfc, 0x06, 0xee, 0xbd, 0x48, 0x58, - 0xf1, 0x7f, 0x75, 0x30, 0x41, 0xfb, 0x15, 0x84, 0x15, 0xfb, 0x77, 0x07, 0x0f, 0x42, 0xc6, 0xd5, - 0x5b, 0xa6, 0xea, 0x75, 0x1c, 0xcc, 0x23, 0x2f, 0x10, 0x14, 0xbe, 0x16, 0x83, 0x14, 0x8b, 0xe4, - 0x90, 0xdf, 0x62, 0xfd, 0xfd, 0x16, 0x1f, 0xe4, 0xb7, 0xc4, 0xbd, 0xfb, 0xad, 0x04, 0xe0, 0x1b, - 0xe3, 0xf2, 0x2f, 0xd0, 0xfb, 0x54, 0x0c, 0xcc, 0xc4, 0x86, 0xde, 0xe2, 0x13, 0x35, 0x04, 0x2a, - 0xfc, 0x87, 0x18, 0x29, 0x62, 0x79, 0x3b, 0x2a, 0xc1, 0xa4, 0xb0, 0x4b, 0xd9, 0x35, 0xd4, 0x16, - 0x8f, 0x9d, 0x87, 0x06, 0x1a, 0x77, 0xd5, 0x50, 0x5b, 0x72, 0x96, 0xdb, 0x43, 0x2e, 0xfa, 0x8f, - 0x43, 0x7c, 0xc0, 0x38, 0x44, 0x06, 0x3e, 0x71, 0x6f, 0x03, 0x1f, 0x19, 0xa2, 0x64, 0xf7, 0x10, - 0x7d, 0x39, 0x4e, 0x37, 0x33, 0xb6, 0xe5, 0xaa, 0xc6, 0x87, 0x31, 0x23, 0x1e, 0x80, 0x8c, 0x6d, - 0x19, 0x0a, 0x6b, 0x61, 0xaf, 0x77, 0xa7, 0x6d, 0xcb, 0x90, 0x7b, 0x86, 0x7d, 0xfc, 0x3e, 0x4d, - 0x97, 0xd4, 0x7d, 0xf0, 0xda, 0x44, 0xb7, 0xd7, 0x1c, 0xc8, 0x31, 0x57, 0xf0, 0xb5, 0xec, 0x59, - 0xe2, 0x03, 0xba, 0x38, 0xc6, 0x7a, 0xd7, 0x5e, 0x66, 0x36, 0xd3, 0x94, 0xb9, 0x1e, 0x41, 0xb0, - 0xd4, 0xdf, 0x6f, 0x17, 0x1c, 0x0e, 0x4b, 0x99, 0xeb, 0x15, 0xfe, 0x6a, 0x0c, 0x60, 0x8d, 0x78, - 0x96, 0xf6, 0x97, 0xac, 0x42, 0x2e, 0x35, 0x41, 0x89, 0xdc, 0x79, 0x61, 0xd0, 0xa0, 0xf1, 0xfb, - 0xe7, 0xdc, 0xb0, 0xdd, 0x15, 0x98, 0x0c, 0x82, 0xd1, 0xc5, 0xc2, 0x98, 0x85, 0x23, 0xaa, 0xea, - 0x06, 0xf6, 0xe4, 0xdc, 0x41, 0xe8, 0xaa, 0xf0, 0xcf, 0x62, 0x90, 0xa1, 0x36, 0xad, 0x63, 0x4f, - 0x8d, 0x8c, 0x61, 0xec, 0xde, 0xc7, 0xf0, 0x21, 0x00, 0x46, 0xe3, 0xea, 0x6f, 0x62, 0x1e, 0x59, - 0x19, 0x2a, 0x69, 0xe8, 0x6f, 0x62, 0x74, 0xd1, 0x77, 0x78, 0xe2, 0x68, 0x87, 0x8b, 0xaa, 0x9b, - 0xbb, 0xfd, 0x14, 0x4c, 0xd0, 0xff, 0xd8, 0x74, 0xdb, 0xe5, 0x85, 0x74, 0xca, 0xec, 0xb4, 0xb7, - 0x6e, 0xbb, 0x85, 0x37, 0x60, 0x62, 0xeb, 0x36, 0x3b, 0x1b, 0x79, 0x00, 0x32, 0x8e, 0x65, 0xf1, - 0x35, 0x99, 0xd5, 0x42, 0x69, 0x22, 0xa0, 0x4b, 0x90, 0x38, 0x0f, 0x88, 0x07, 0xe7, 0x01, 0xc1, - 0x81, 0x46, 0x62, 0xa4, 0x03, 0x8d, 0x27, 0x7f, 0x3d, 0x06, 0xd9, 0x50, 0x7e, 0x40, 0xcf, 0xc1, - 0x89, 0xf2, 0xda, 0x66, 0xe5, 0x86, 0xb2, 0x5a, 0x55, 0xae, 0xae, 0x95, 0x56, 0x82, 0x0f, 0x98, - 0xe6, 0x4f, 0xde, 0xb9, 0xbb, 0x84, 0x42, 0xba, 0xdb, 0x26, 0x3d, 0xa7, 0x47, 0xe7, 0x60, 0x2e, - 0x0a, 0x29, 0x95, 0x1b, 0xb5, 0x8d, 0x2d, 0x29, 0x36, 0x7f, 0xe2, 0xce, 0xdd, 0xa5, 0x99, 0x10, - 0xa2, 0xb4, 0xe3, 0x62, 0xd3, 0xeb, 0x05, 0x54, 0x36, 0xd7, 0xd7, 0x57, 0xb7, 0xa4, 0x78, 0x0f, - 0x80, 0x27, 0xec, 0x27, 0x60, 0x26, 0x0a, 0xd8, 0x58, 0x5d, 0x93, 0x12, 0xf3, 0xe8, 0xce, 0xdd, - 0xa5, 0xa9, 0x90, 0xf6, 0x86, 0x6e, 0xcc, 0xa7, 0x3f, 0xf1, 0xf9, 0x85, 0xb1, 0x9f, 0xff, 0xb9, - 0x85, 0x18, 0xe9, 0xd9, 0x64, 0x24, 0x47, 0xa0, 0xa7, 0xe1, 0x54, 0x63, 0x75, 0x65, 0xa3, 0x56, - 0x55, 0xd6, 0x1b, 0x2b, 0xe2, 0xa4, 0x5b, 0xf4, 0x6e, 0xfa, 0xce, 0xdd, 0xa5, 0x2c, 0xef, 0xd2, - 0x20, 0xed, 0xba, 0x5c, 0xbb, 0xb9, 0xb9, 0x55, 0x93, 0x62, 0x4c, 0xbb, 0xee, 0xe0, 0x03, 0xcb, - 0x63, 0xff, 0xd2, 0xed, 0x59, 0x38, 0xdd, 0x47, 0xdb, 0xef, 0xd8, 0xcc, 0x9d, 0xbb, 0x4b, 0x93, - 0x75, 0x07, 0xb3, 0xf9, 0x43, 0x11, 0xcb, 0x90, 0xef, 0x45, 0x6c, 0xd6, 0x37, 0x1b, 0xa5, 0x35, - 0x69, 0x69, 0x5e, 0xba, 0x73, 0x77, 0x29, 0x27, 0x92, 0x21, 0xd1, 0x0f, 0x7a, 0xf6, 0x41, 0xee, - 0x78, 0x3e, 0xf9, 0x34, 0x3c, 0xca, 0xcf, 0x00, 0x5d, 0x4f, 0xdd, 0xd7, 0xcd, 0x96, 0x7f, 0x78, - 0xcb, 0xaf, 0xf9, 0xce, 0xe7, 0x24, 0x3f, 0x67, 0x14, 0xd2, 0x21, 0x47, 0xb8, 0x03, 0x9f, 0x5e, - 0xce, 0x0f, 0x79, 0xa8, 0x37, 0x7c, 0xeb, 0x34, 0xf8, 0x78, 0x78, 0x7e, 0xc8, 0x21, 0xf4, 0xfc, - 0x91, 0x9b, 0xbb, 0xc2, 0x27, 0x63, 0x30, 0x75, 0x4d, 0x77, 0x3d, 0xcb, 0xd1, 0x35, 0xd5, 0xa0, - 0x9f, 0x2d, 0x5d, 0x1c, 0x35, 0xb7, 0x76, 0x4d, 0xf5, 0x97, 0x20, 0x75, 0xa0, 0x1a, 0x2c, 0xa9, - 0x85, 0x9f, 0x05, 0x74, 0xbb, 0x2f, 0x48, 0x6d, 0x82, 0x80, 0xc1, 0x0a, 0x5f, 0x8a, 0xc3, 0x34, - 0x9d, 0x0c, 0x2e, 0xfb, 0x8f, 0x5c, 0x64, 0x8f, 0x55, 0x87, 0xa4, 0xa3, 0x7a, 0xfc, 0xd0, 0xb0, - 0xfc, 0x23, 0xfc, 0x1c, 0xf8, 0xf1, 0xe1, 0xa7, 0xb9, 0xcb, 0xbd, 0x47, 0xc5, 0x94, 0x09, 0xbd, - 0x02, 0xe9, 0xb6, 0x7a, 0x5b, 0xa1, 0xac, 0xf1, 0xfb, 0xc0, 0x3a, 0xd1, 0x56, 0x6f, 0x13, 0x5b, - 0x51, 0x13, 0xa6, 0x09, 0xb1, 0xb6, 0xa7, 0x9a, 0x2d, 0xcc, 0xf8, 0x13, 0xf7, 0x81, 0x7f, 0xb2, - 0xad, 0xde, 0xae, 0x50, 0x4e, 0x72, 0x97, 0x62, 0xfa, 0xd3, 0x6f, 0x2f, 0x8e, 0xd1, 0x63, 0xf6, - 0x5f, 0x89, 0x01, 0x04, 0xee, 0x42, 0x7f, 0x14, 0x24, 0xcd, 0xbf, 0xa2, 0xb7, 0x77, 0xf9, 0x00, - 0x9e, 0x19, 0x34, 0x10, 0x5d, 0xce, 0x66, 0x0b, 0xf3, 0x37, 0xdf, 0x5d, 0x8c, 0xc9, 0xd3, 0x5a, - 0xd7, 0x38, 0xd4, 0x20, 0xdb, 0xb1, 0x9b, 0xaa, 0x87, 0x15, 0xba, 0x89, 0x8b, 0x1f, 0x63, 0x91, - 0x07, 0x06, 0x24, 0x4d, 0x21, 0xeb, 0xbf, 0x14, 0x83, 0x6c, 0x35, 0xf4, 0x90, 0x2f, 0x0f, 0x13, - 0x6d, 0xcb, 0xd4, 0xf7, 0x79, 0xd8, 0x65, 0x64, 0x71, 0x89, 0xe6, 0x21, 0xcd, 0x3e, 0xd8, 0xf4, - 0x0e, 0xc5, 0x89, 0xa7, 0xb8, 0x26, 0xa8, 0x5b, 0x78, 0xc7, 0xd5, 0x85, 0xaf, 0x65, 0x71, 0x49, - 0xb6, 0x2e, 0x2e, 0xd6, 0x3a, 0x8e, 0xee, 0x1d, 0x2a, 0x9a, 0x65, 0x7a, 0xaa, 0xe6, 0xf1, 0x4f, - 0xff, 0xa6, 0x85, 0xbc, 0xc2, 0xc4, 0x84, 0xa4, 0x89, 0x3d, 0x55, 0x37, 0xdc, 0x3c, 0x7b, 0x10, - 0x26, 0x2e, 0x43, 0xe6, 0x7e, 0x37, 0x15, 0x3e, 0xa2, 0xaa, 0x80, 0x64, 0xd9, 0xd8, 0x89, 0x94, - 0x94, 0x2c, 0x42, 0xf3, 0xbf, 0xf6, 0x95, 0x67, 0xe6, 0xb8, 0xbb, 0x79, 0x51, 0xc9, 0xde, 0x6d, - 0x95, 0xa7, 0x05, 0x42, 0xd4, 0x9a, 0xaf, 0x91, 0x01, 0x13, 0xfb, 0x3d, 0xbb, 0xb3, 0x13, 0x1c, - 0x6b, 0xcd, 0xf5, 0xf8, 0xb5, 0x64, 0x1e, 0x96, 0xf3, 0xdf, 0x08, 0xa8, 0x83, 0xb3, 0xa4, 0x1b, - 0xf8, 0x90, 0x8c, 0x16, 0xe7, 0xa9, 0x53, 0x1a, 0x52, 0x22, 0xbe, 0xa1, 0xea, 0x86, 0xf8, 0x0e, - 0x5d, 0xe6, 0x57, 0xa8, 0x08, 0x29, 0xd7, 0x53, 0xbd, 0x8e, 0xcb, 0xff, 0x5f, 0x5c, 0x61, 0x50, - 0x64, 0x94, 0x2d, 0xb3, 0xd9, 0xa0, 0x9a, 0x32, 0x47, 0xa0, 0x2d, 0x48, 0x79, 0xd6, 0x3e, 0x36, - 0xb9, 0x93, 0x8e, 0x15, 0xd5, 0x7d, 0x9e, 0x45, 0x31, 0x2e, 0xd4, 0x02, 0xa9, 0x89, 0x0d, 0xdc, - 0x62, 0x05, 0xd1, 0x9e, 0x4a, 0xf6, 0x0d, 0xa9, 0xfb, 0x30, 0x6b, 0xa6, 0x7d, 0xd6, 0x06, 0x25, - 0x45, 0x37, 0xa2, 0x8f, 0x99, 0xd9, 0x3f, 0x57, 0x7c, 0x64, 0x50, 0xff, 0x43, 0x91, 0x29, 0x0e, - 0x13, 0xc2, 0x4f, 0xa4, 0x9f, 0x00, 0xa9, 0x63, 0xee, 0x58, 0x26, 0xfd, 0x5a, 0x94, 0x17, 0xe3, - 0x69, 0x5a, 0xde, 0x4c, 0xfb, 0xf2, 0x6b, 0xac, 0x2a, 0xbf, 0x01, 0x53, 0x81, 0x2a, 0x9d, 0x3b, - 0x99, 0x63, 0xcc, 0x9d, 0x49, 0x1f, 0x4b, 0x5a, 0xd1, 0x35, 0x80, 0x60, 0x62, 0xd2, 0xe3, 0x81, - 0xec, 0xe0, 0x31, 0x0c, 0x66, 0xb7, 0xd8, 0x66, 0x05, 0x58, 0x64, 0xc0, 0x6c, 0x5b, 0x37, 0x15, - 0x17, 0x1b, 0xbb, 0x0a, 0x77, 0x15, 0xa1, 0xcc, 0xde, 0x87, 0xa1, 0x9d, 0x69, 0xeb, 0x66, 0x03, - 0x1b, 0xbb, 0x55, 0x9f, 0x16, 0x2d, 0x42, 0x16, 0x1f, 0xb4, 0xfd, 0xa9, 0xc2, 0xfe, 0x85, 0x29, - 0xe0, 0x83, 0x36, 0x9f, 0x0b, 0xc5, 0xdc, 0x27, 0xde, 0x5e, 0x1c, 0xe3, 0x93, 0x6d, 0xac, 0x50, - 0xa7, 0x67, 0xd8, 0xbc, 0x0d, 0xbb, 0xe8, 0x22, 0x64, 0x54, 0x71, 0x41, 0x4f, 0x16, 0x8e, 0x9a, - 0x67, 0x81, 0x2a, 0x9b, 0xbe, 0x6f, 0xfd, 0xd6, 0x52, 0xac, 0xf0, 0x73, 0x31, 0x48, 0x55, 0x6f, - 0xd6, 0x55, 0xdd, 0x41, 0x35, 0x98, 0x09, 0x22, 0x6e, 0xd4, 0xc9, 0x1b, 0x04, 0xa9, 0x98, 0xbd, - 0xb5, 0x41, 0xdb, 0xca, 0x23, 0x69, 0xba, 0x37, 0x9c, 0x5d, 0x1d, 0xaf, 0xc1, 0x04, 0xb3, 0xd2, - 0x45, 0x45, 0x18, 0xb7, 0xc9, 0x0f, 0x7e, 0x64, 0xbf, 0x30, 0x30, 0x52, 0xa9, 0xbe, 0x7f, 0xc4, - 0x48, 0x20, 0x85, 0xdf, 0x8b, 0x01, 0x54, 0x6f, 0xde, 0xdc, 0x72, 0x74, 0xdb, 0xc0, 0xde, 0xfd, - 0xea, 0xf1, 0x1a, 0x9c, 0x08, 0xed, 0x5d, 0x1c, 0x6d, 0xe4, 0x5e, 0xcf, 0x06, 0xbb, 0x17, 0x47, - 0xeb, 0xcb, 0xd6, 0x74, 0x3d, 0x9f, 0x2d, 0x31, 0x32, 0x5b, 0xd5, 0xf5, 0xfa, 0xbb, 0xb1, 0x01, - 0xd9, 0xa0, 0xfb, 0x2e, 0xaa, 0x42, 0xda, 0xe3, 0xbf, 0xb9, 0x37, 0x0b, 0x83, 0xbd, 0x29, 0x60, - 0xdc, 0xa3, 0x3e, 0xb2, 0xf0, 0x7f, 0x89, 0x53, 0x83, 0x90, 0xfe, 0x03, 0x15, 0x46, 0x24, 0x39, - 0xf3, 0xe4, 0x79, 0x3f, 0x4a, 0x0e, 0xce, 0xd5, 0xe5, 0xd5, 0x8f, 0xc7, 0x61, 0x76, 0x5b, 0xa4, - 0xa3, 0x3f, 0xb0, 0x9e, 0xa8, 0xc3, 0x04, 0x36, 0x3d, 0x47, 0xa7, 0xae, 0x20, 0x63, 0xfd, 0xec, - 0xa0, 0xb1, 0xee, 0xd3, 0x17, 0xfa, 0x7f, 0x8d, 0xc4, 0xc1, 0x37, 0xa7, 0xe9, 0xf2, 0xc2, 0xbf, - 0x8f, 0x43, 0x7e, 0x10, 0x12, 0x9d, 0x81, 0x69, 0xcd, 0xc1, 0x54, 0xa0, 0x44, 0x4e, 0xdf, 0xa6, - 0x84, 0x98, 0xaf, 0x0a, 0xeb, 0x40, 0x2a, 0x2c, 0x12, 0x58, 0x44, 0xf5, 0xd8, 0x25, 0xd5, 0x54, - 0x00, 0xa6, 0xeb, 0x02, 0x86, 0x69, 0xdd, 0xd4, 0x3d, 0x5d, 0x35, 0x94, 0x1d, 0xd5, 0x50, 0x4d, - 0xed, 0x5e, 0x4a, 0xcf, 0xde, 0x4c, 0x3e, 0xc5, 0x49, 0xcb, 0x8c, 0x13, 0xdd, 0x84, 0x09, 0x41, - 0x9f, 0xbc, 0x0f, 0xf4, 0x82, 0x2c, 0x54, 0x66, 0xfd, 0x66, 0x1c, 0x66, 0x64, 0xdc, 0xfc, 0xc3, - 0xe5, 0xd6, 0x1f, 0x05, 0x60, 0x13, 0x8e, 0xe4, 0xc1, 0x7b, 0xf0, 0x6c, 0xef, 0x04, 0xce, 0x30, - 0xbe, 0xaa, 0xeb, 0x85, 0x7c, 0xfb, 0x8d, 0x38, 0xe4, 0xc2, 0xbe, 0xfd, 0x43, 0xb0, 0x2e, 0xa0, - 0xd5, 0x20, 0x1b, 0x24, 0xf9, 0x7f, 0x64, 0x1d, 0x90, 0x0d, 0x7a, 0xa2, 0xee, 0xe8, 0x34, 0xf0, - 0x83, 0x38, 0xa4, 0xea, 0xaa, 0xa3, 0xb6, 0x5d, 0x74, 0xbd, 0xa7, 0xc2, 0x13, 0xc7, 0x70, 0x3d, - 0xff, 0x77, 0x9b, 0xef, 0xfa, 0x59, 0xc8, 0x7d, 0xba, 0x4f, 0x81, 0xf7, 0x18, 0x4c, 0x91, 0x3d, - 0x64, 0xe8, 0x89, 0x7d, 0x9c, 0x3e, 0x87, 0x24, 0x9b, 0xc0, 0xe0, 0x71, 0x11, 0xa9, 0xa7, 0x88, - 0x5a, 0x90, 0xe8, 0x88, 0x0e, 0xb4, 0xd5, 0xdb, 0x35, 0x26, 0x41, 0xcf, 0x00, 0xda, 0xf3, 0x77, - 0xf5, 0x4a, 0xe0, 0x02, 0xa2, 0x37, 0x13, 0xb4, 0x08, 0xf5, 0x87, 0x00, 0x88, 0x15, 0x0a, 0x7b, - 0x0b, 0x8c, 0x6d, 0x82, 0x32, 0x44, 0x52, 0xa5, 0x6f, 0x82, 0xfd, 0x38, 0x2b, 0x16, 0xbb, 0xb6, - 0x97, 0xbc, 0x4e, 0x5f, 0x3b, 0x5e, 0xa4, 0xfe, 0xe0, 0xdd, 0xc5, 0xf9, 0x43, 0xb5, 0x6d, 0x14, - 0x0b, 0x7d, 0x28, 0x0b, 0xb4, 0x78, 0x8c, 0x6e, 0x4b, 0x43, 0x11, 0xfc, 0xf9, 0x18, 0xa0, 0x20, - 0xe5, 0xca, 0xd8, 0xb5, 0xc9, 0xbe, 0x87, 0x54, 0xc5, 0xa1, 0x12, 0x36, 0x76, 0x74, 0x55, 0x1c, - 0xe0, 0x45, 0x55, 0x1c, 0x9a, 0x11, 0x97, 0x83, 0x04, 0x17, 0xe7, 0x63, 0xd8, 0xe7, 0x15, 0xbe, - 0xe5, 0x8a, 0xa5, 0x0b, 0x74, 0x4f, 0x0e, 0x1b, 0x2b, 0xfc, 0x66, 0x0c, 0x4e, 0xf7, 0x44, 0x93, - 0x6f, 0xec, 0x1f, 0x07, 0xe4, 0x84, 0x1a, 0xf9, 0xbf, 0xd6, 0x63, 0x46, 0x1f, 0x3b, 0x38, 0x67, - 0x9c, 0x9e, 0x5c, 0xf9, 0x41, 0xe5, 0x68, 0xf6, 0x6a, 0xdf, 0x3f, 0x89, 0xc1, 0x5c, 0xd8, 0x18, - 0xbf, 0x5b, 0x1b, 0x90, 0x0b, 0xdb, 0xc2, 0x3b, 0xf4, 0xe8, 0x28, 0x1d, 0xe2, 0x7d, 0x89, 0xe0, - 0xd1, 0xcb, 0xc1, 0xc4, 0x65, 0xa7, 0x49, 0xcf, 0x8d, 0xec, 0x1b, 0x61, 0x53, 0xf7, 0x04, 0x4e, - 0x8a, 0x2a, 0x26, 0x59, 0xb7, 0x2c, 0x03, 0xfd, 0x49, 0x98, 0x31, 0x2d, 0x4f, 0x21, 0x51, 0x8e, - 0x9b, 0x0a, 0xdf, 0xda, 0xb2, 0xec, 0xf7, 0xf2, 0xf1, 0x5c, 0xf6, 0xdd, 0x77, 0x17, 0x7b, 0xa9, - 0xba, 0xfc, 0x38, 0x6d, 0x5a, 0x5e, 0x99, 0xb6, 0x6f, 0xb1, 0x8d, 0xaf, 0x03, 0x93, 0xd1, 0x5b, - 0xb3, 0x6c, 0xb9, 0x7e, 0xec, 0x5b, 0x4f, 0x1e, 0x75, 0xdb, 0xdc, 0x4e, 0xe8, 0x9e, 0xec, 0xa5, - 0xa7, 0xef, 0xbf, 0xbd, 0x18, 0x7b, 0xf2, 0xab, 0x31, 0x80, 0x60, 0x8f, 0x8f, 0x9e, 0x86, 0x53, - 0xe5, 0xcd, 0x8d, 0xaa, 0xd2, 0xd8, 0x2a, 0x6d, 0x6d, 0x37, 0xa2, 0xaf, 0x46, 0x8b, 0x43, 0x63, - 0xd7, 0xc6, 0x9a, 0xbe, 0xab, 0xe3, 0x26, 0x7a, 0x1c, 0xe6, 0xa2, 0xda, 0xe4, 0xaa, 0x56, 0x95, - 0x62, 0xf3, 0xb9, 0x3b, 0x77, 0x97, 0xd2, 0xac, 0x3a, 0xc2, 0x4d, 0x74, 0x16, 0x4e, 0xf4, 0xea, - 0xad, 0x6e, 0xac, 0x48, 0xf1, 0xf9, 0xc9, 0x3b, 0x77, 0x97, 0x32, 0x7e, 0x19, 0x85, 0x0a, 0x80, - 0xc2, 0x9a, 0x9c, 0x2f, 0x31, 0x0f, 0x77, 0xee, 0x2e, 0xa5, 0x98, 0xdb, 0xe6, 0x93, 0x9f, 0xf8, - 0xfc, 0xc2, 0x58, 0xf9, 0xea, 0xc0, 0x63, 0xe1, 0xa7, 0x8f, 0xf4, 0xd8, 0x6d, 0xff, 0xa8, 0x37, - 0x72, 0x16, 0xfc, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x30, 0x2f, 0x36, 0x46, 0x2c, 0x66, 0x00, + 0x07, 0x2f, 0xbc, 0x09, 0xf9, 0xa8, 0x7b, 0xd0, 0x3c, 0x4c, 0xba, 0x9e, 0xea, 0x78, 0x34, 0x0a, + 0x27, 0x65, 0x76, 0x81, 0x24, 0x48, 0x60, 0xb3, 0x45, 0xb3, 0xdc, 0xa4, 0x4c, 0x7e, 0xa2, 0x3f, + 0x16, 0x74, 0x38, 0x41, 0x3b, 0xfc, 0x78, 0xff, 0x88, 0x46, 0x98, 0x7b, 0xfb, 0xbd, 0x70, 0x01, + 0xa6, 0x23, 0x1d, 0x18, 0xf7, 0xd6, 0xc5, 0x9f, 0x80, 0x63, 0x03, 0xa9, 0xd1, 0xab, 0x30, 0xdf, + 0x35, 0x75, 0xd3, 0xc3, 0x8e, 0xed, 0x60, 0x12, 0xb1, 0xec, 0x56, 0x85, 0xff, 0x3c, 0x35, 0x24, + 0xe6, 0xb6, 0xc3, 0xda, 0x8c, 0x45, 0x9e, 0xeb, 0xf6, 0x0b, 0x9f, 0xcc, 0xa4, 0xdf, 0x9f, 0x92, + 0xde, 0x7a, 0xeb, 0xad, 0xb7, 0xe2, 0xc5, 0x7f, 0x9a, 0x82, 0xf9, 0x41, 0x73, 0x66, 0xe0, 0xf4, + 0x3d, 0x0e, 0x29, 0xb3, 0xdb, 0xd9, 0xc1, 0x0e, 0x75, 0xd2, 0xa4, 0xcc, 0xaf, 0x50, 0x19, 0x26, + 0x0d, 0x75, 0x07, 0x1b, 0x85, 0xe4, 0x72, 0xec, 0x74, 0xfe, 0xec, 0x53, 0x63, 0xcd, 0xca, 0x95, + 0x35, 0x02, 0x91, 0x19, 0x12, 0x7d, 0x14, 0x92, 0x3c, 0x45, 0x13, 0x86, 0x27, 0xc7, 0x63, 0x20, + 0x73, 0x49, 0xa6, 0x38, 0xf4, 0x00, 0x64, 0xc8, 0x5f, 0x16, 0x1b, 0x29, 0x6a, 0x73, 0x9a, 0x08, + 0x48, 0x5c, 0xa0, 0x05, 0x48, 0xd3, 0x69, 0xd2, 0xc2, 0x62, 0x69, 0xf3, 0xaf, 0x49, 0x60, 0xb5, + 0xf0, 0xae, 0xda, 0x35, 0x3c, 0xe5, 0xa6, 0x6a, 0x74, 0x31, 0x0d, 0xf8, 0x8c, 0x9c, 0xe3, 0xc2, + 0x1b, 0x44, 0x86, 0x96, 0x20, 0xcb, 0x66, 0x95, 0x6e, 0xb6, 0xf0, 0x6d, 0x9a, 0x3d, 0x27, 0x65, + 0x36, 0xd1, 0x56, 0x89, 0x84, 0xdc, 0xfe, 0x0d, 0xd7, 0x32, 0x45, 0x68, 0xd2, 0x5b, 0x10, 0x01, + 0xbd, 0xfd, 0x85, 0xde, 0xc4, 0xfd, 0xd0, 0xe0, 0xee, 0xf5, 0xcd, 0xa5, 0x53, 0x30, 0x43, 0x35, + 0x9e, 0xe7, 0x43, 0xaf, 0x1a, 0x85, 0xd9, 0xe5, 0xd8, 0xe9, 0xb4, 0x9c, 0x67, 0xe2, 0x4d, 0x2e, + 0x2d, 0x7e, 0x35, 0x0e, 0x49, 0x9a, 0x58, 0x66, 0x20, 0xbb, 0xf5, 0x5a, 0xa3, 0xae, 0xd4, 0x36, + 0xb7, 0x2b, 0x6b, 0x75, 0x29, 0x86, 0xf2, 0x00, 0x54, 0x70, 0x79, 0x6d, 0xb3, 0xbc, 0x25, 0xc5, + 0xfd, 0xeb, 0xd5, 0x8d, 0xad, 0xf3, 0x2f, 0x48, 0x09, 0x1f, 0xb0, 0xcd, 0x04, 0xc9, 0xb0, 0xc2, + 0xf3, 0x67, 0xa5, 0x49, 0x24, 0x41, 0x8e, 0x11, 0xac, 0xbe, 0x5a, 0xaf, 0x9d, 0x7f, 0x41, 0x4a, + 0x45, 0x25, 0xcf, 0x9f, 0x95, 0xa6, 0xd0, 0x34, 0x64, 0xa8, 0xa4, 0xb2, 0xb9, 0xb9, 0x26, 0xa5, + 0x7d, 0xce, 0xe6, 0x96, 0xbc, 0xba, 0x71, 0x45, 0xca, 0xf8, 0x9c, 0x57, 0xe4, 0xcd, 0xed, 0x86, + 0x04, 0x3e, 0xc3, 0x7a, 0xbd, 0xd9, 0x2c, 0x5f, 0xa9, 0x4b, 0x59, 0x5f, 0xa3, 0xf2, 0xda, 0x56, + 0xbd, 0x29, 0xe5, 0x22, 0x66, 0x3d, 0x7f, 0x56, 0x9a, 0xf6, 0x6f, 0x51, 0xdf, 0xd8, 0x5e, 0x97, + 0xf2, 0x68, 0x16, 0xa6, 0xd9, 0x2d, 0x84, 0x11, 0x33, 0x3d, 0xa2, 0xf3, 0x2f, 0x48, 0x52, 0x60, + 0x08, 0x63, 0x99, 0x8d, 0x08, 0xce, 0xbf, 0x20, 0xa1, 0x62, 0x15, 0x26, 0x69, 0x18, 0x22, 0x04, + 0xf9, 0xb5, 0x72, 0xa5, 0xbe, 0xa6, 0x6c, 0x36, 0xb6, 0x56, 0x37, 0x37, 0xca, 0x6b, 0x52, 0x2c, + 0x90, 0xc9, 0xf5, 0x97, 0xb7, 0x57, 0xe5, 0x7a, 0x4d, 0x8a, 0x87, 0x65, 0x8d, 0x7a, 0x79, 0xab, + 0x5e, 0x93, 0x12, 0x45, 0x0d, 0xe6, 0x07, 0x25, 0xd4, 0x81, 0x53, 0x28, 0x14, 0x0b, 0xf1, 0x21, + 0xb1, 0x40, 0xb9, 0x7a, 0x63, 0xa1, 0xf8, 0xad, 0x38, 0xcc, 0x0d, 0x58, 0x54, 0x06, 0xde, 0xe4, + 0x25, 0x98, 0x64, 0xb1, 0xcc, 0x96, 0xd9, 0x27, 0x06, 0xae, 0x4e, 0x34, 0xb2, 0xfb, 0x96, 0x5a, + 0x8a, 0x0b, 0x97, 0x1a, 0x89, 0x21, 0xa5, 0x06, 0xa1, 0xe8, 0x0b, 0xd8, 0x1f, 0xeb, 0x4b, 0xfe, + 0x6c, 0x7d, 0x3c, 0x3f, 0xce, 0xfa, 0x48, 0x65, 0x47, 0x5b, 0x04, 0x26, 0x07, 0x2c, 0x02, 0x97, + 0x60, 0xb6, 0x8f, 0x68, 0xec, 0x64, 0xfc, 0xf1, 0x18, 0x14, 0x86, 0x39, 0x67, 0x44, 0x4a, 0x8c, + 0x47, 0x52, 0xe2, 0xa5, 0x5e, 0x0f, 0x3e, 0x3c, 0x7c, 0x10, 0xfa, 0xc6, 0xfa, 0x0b, 0x31, 0x38, + 0x3e, 0xb8, 0xa4, 0x1c, 0x68, 0xc3, 0x47, 0x21, 0xd5, 0xc1, 0xde, 0x9e, 0x25, 0xca, 0xaa, 0xc7, + 0x07, 0x2c, 0xd6, 0xa4, 0xb9, 0x77, 0xb0, 0x39, 0x2a, 0xbc, 0xda, 0x27, 0x86, 0xd5, 0x85, 0xcc, + 0x9a, 0x3e, 0x4b, 0x3f, 0x19, 0x87, 0x63, 0x03, 0xc9, 0x07, 0x1a, 0xfa, 0x10, 0x80, 0x6e, 0xda, + 0x5d, 0x8f, 0x95, 0x4e, 0x2c, 0x13, 0x67, 0xa8, 0x84, 0x26, 0x2f, 0x92, 0x65, 0xbb, 0x9e, 0xdf, + 0x9e, 0xa0, 0xed, 0xc0, 0x44, 0x54, 0xe1, 0xc5, 0xc0, 0xd0, 0x24, 0x35, 0x74, 0x71, 0x48, 0x4f, + 0xfb, 0x02, 0xf3, 0x59, 0x90, 0x34, 0x43, 0xc7, 0xa6, 0xa7, 0xb8, 0x9e, 0x83, 0xd5, 0x8e, 0x6e, + 0xb6, 0xe9, 0x52, 0x93, 0x2e, 0x4d, 0xee, 0xaa, 0x86, 0x8b, 0xe5, 0x19, 0xd6, 0xdc, 0x14, 0xad, + 0x04, 0x41, 0x03, 0xc8, 0x09, 0x21, 0x52, 0x11, 0x04, 0x6b, 0xf6, 0x11, 0xc5, 0x9f, 0xcc, 0x40, + 0x36, 0x54, 0x80, 0xa3, 0x87, 0x21, 0xf7, 0x86, 0x7a, 0x53, 0x55, 0xc4, 0xa6, 0x8a, 0x79, 0x22, + 0x4b, 0x64, 0x0d, 0xbe, 0xb1, 0x7a, 0x16, 0xe6, 0xa9, 0x8a, 0xd5, 0xf5, 0xb0, 0xa3, 0x68, 0x86, + 0xea, 0xba, 0xd4, 0x69, 0x69, 0xaa, 0x8a, 0x48, 0xdb, 0x26, 0x69, 0xaa, 0x8a, 0x16, 0x74, 0x0e, + 0xe6, 0x28, 0xa2, 0xd3, 0x35, 0x3c, 0xdd, 0x36, 0xb0, 0x42, 0xb6, 0x79, 0x2e, 0x5d, 0x72, 0x7c, + 0xcb, 0x66, 0x89, 0xc6, 0x3a, 0x57, 0x20, 0x16, 0xb9, 0xa8, 0x06, 0x0f, 0x51, 0x58, 0x1b, 0x9b, + 0xd8, 0x51, 0x3d, 0xac, 0xe0, 0x1f, 0xef, 0xaa, 0x86, 0xab, 0xa8, 0x66, 0x4b, 0xd9, 0x53, 0xdd, + 0xbd, 0xc2, 0x3c, 0x21, 0xa8, 0xc4, 0x0b, 0x31, 0xf9, 0x24, 0x51, 0xbc, 0xc2, 0xf5, 0xea, 0x54, + 0xad, 0x6c, 0xb6, 0xae, 0xaa, 0xee, 0x1e, 0x2a, 0xc1, 0x71, 0xca, 0xe2, 0x7a, 0x8e, 0x6e, 0xb6, + 0x15, 0x6d, 0x0f, 0x6b, 0xfb, 0x4a, 0xd7, 0xdb, 0x7d, 0xb1, 0xf0, 0x40, 0xf8, 0xfe, 0xd4, 0xc2, + 0x26, 0xd5, 0xa9, 0x12, 0x95, 0x6d, 0x6f, 0xf7, 0x45, 0xd4, 0x84, 0x1c, 0x19, 0x8c, 0x8e, 0xfe, + 0x26, 0x56, 0x76, 0x2d, 0x87, 0xae, 0xa1, 0xf9, 0x01, 0xa9, 0x29, 0xe4, 0xc1, 0x95, 0x4d, 0x0e, + 0x58, 0xb7, 0x5a, 0xb8, 0x34, 0xd9, 0x6c, 0xd4, 0xeb, 0x35, 0x39, 0x2b, 0x58, 0x2e, 0x5b, 0x0e, + 0x09, 0xa8, 0xb6, 0xe5, 0x3b, 0x38, 0xcb, 0x02, 0xaa, 0x6d, 0x09, 0xf7, 0x9e, 0x83, 0x39, 0x4d, + 0x63, 0x7d, 0xd6, 0x35, 0x85, 0x6f, 0xc6, 0xdc, 0x82, 0x14, 0x71, 0x96, 0xa6, 0x5d, 0x61, 0x0a, + 0x3c, 0xc6, 0x5d, 0x74, 0x11, 0x8e, 0x05, 0xce, 0x0a, 0x03, 0x67, 0xfb, 0x7a, 0xd9, 0x0b, 0x3d, + 0x07, 0x73, 0xf6, 0x41, 0x3f, 0x10, 0x45, 0xee, 0x68, 0x1f, 0xf4, 0xc2, 0x2e, 0xc0, 0xbc, 0xbd, + 0x67, 0xf7, 0xe3, 0x9e, 0x0c, 0xe3, 0x90, 0xbd, 0x67, 0xf7, 0x02, 0x1f, 0xa3, 0x3b, 0x73, 0x07, + 0x6b, 0xaa, 0x87, 0x5b, 0x85, 0x13, 0x61, 0xf5, 0x50, 0x03, 0x5a, 0x01, 0x49, 0xd3, 0x14, 0x6c, + 0xaa, 0x3b, 0x06, 0x56, 0x54, 0x07, 0x9b, 0xaa, 0x5b, 0x58, 0xa2, 0xca, 0x49, 0xcf, 0xe9, 0x62, + 0x39, 0xaf, 0x69, 0x75, 0xda, 0x58, 0xa6, 0x6d, 0xe8, 0x49, 0x98, 0xb5, 0x76, 0xde, 0xd0, 0x58, + 0x44, 0x2a, 0xb6, 0x83, 0x77, 0xf5, 0xdb, 0x85, 0x47, 0xa9, 0x7b, 0x67, 0x48, 0x03, 0x8d, 0xc7, + 0x06, 0x15, 0xa3, 0x27, 0x40, 0xd2, 0xdc, 0x3d, 0xd5, 0xb1, 0x69, 0x4a, 0x76, 0x6d, 0x55, 0xc3, + 0x85, 0xc7, 0x98, 0x2a, 0x93, 0x6f, 0x08, 0x31, 0x99, 0x11, 0xee, 0x2d, 0x7d, 0xd7, 0x13, 0x8c, + 0xa7, 0xd8, 0x8c, 0xa0, 0x32, 0xce, 0x76, 0x1a, 0x24, 0xe2, 0x89, 0xc8, 0x8d, 0x4f, 0x53, 0xb5, + 0xbc, 0xbd, 0x67, 0x87, 0xef, 0xfb, 0x08, 0x4c, 0x13, 0xcd, 0xe0, 0xa6, 0x4f, 0xb0, 0xc2, 0xcd, + 0xde, 0x0b, 0xdd, 0xf1, 0x05, 0x38, 0x4e, 0x94, 0x3a, 0xd8, 0x53, 0x5b, 0xaa, 0xa7, 0x86, 0xb4, + 0x9f, 0xa6, 0xda, 0xc4, 0xed, 0xeb, 0xbc, 0x31, 0x62, 0xa7, 0xd3, 0xdd, 0x39, 0xf0, 0x03, 0xeb, + 0x19, 0x66, 0x27, 0x91, 0x89, 0xd0, 0xfa, 0xd0, 0x8a, 0xf3, 0x62, 0x09, 0x72, 0xe1, 0xb8, 0x47, + 0x19, 0x60, 0x91, 0x2f, 0xc5, 0x48, 0x11, 0x54, 0xdd, 0xac, 0x91, 0xf2, 0xe5, 0xf5, 0xba, 0x14, + 0x27, 0x65, 0xd4, 0xda, 0xea, 0x56, 0x5d, 0x91, 0xb7, 0x37, 0xb6, 0x56, 0xd7, 0xeb, 0x52, 0x22, + 0x54, 0xd8, 0x5f, 0x4b, 0xa6, 0x1f, 0x97, 0x4e, 0x91, 0xaa, 0x21, 0x1f, 0xdd, 0xa9, 0xa1, 0x1f, + 0x81, 0x13, 0xe2, 0x58, 0xc5, 0xc5, 0x9e, 0x72, 0x4b, 0x77, 0xe8, 0x84, 0xec, 0xa8, 0x6c, 0x71, + 0xf4, 0xe3, 0x67, 0x9e, 0x6b, 0x35, 0xb1, 0xf7, 0x8a, 0xee, 0x90, 0xe9, 0xd6, 0x51, 0x3d, 0xb4, + 0x06, 0x4b, 0xa6, 0xa5, 0xb8, 0x9e, 0x6a, 0xb6, 0x54, 0xa7, 0xa5, 0x04, 0x07, 0x5a, 0x8a, 0xaa, + 0x69, 0xd8, 0x75, 0x2d, 0xb6, 0x10, 0xfa, 0x2c, 0x0f, 0x9a, 0x56, 0x93, 0x2b, 0x07, 0x2b, 0x44, + 0x99, 0xab, 0xf6, 0x84, 0x6f, 0x62, 0x58, 0xf8, 0x3e, 0x00, 0x99, 0x8e, 0x6a, 0x2b, 0xd8, 0xf4, + 0x9c, 0x03, 0x5a, 0x9f, 0xa7, 0xe5, 0x74, 0x47, 0xb5, 0xeb, 0xe4, 0xfa, 0x87, 0xb2, 0x4d, 0xba, + 0x96, 0x4c, 0x27, 0xa5, 0xc9, 0x6b, 0xc9, 0xf4, 0xa4, 0x94, 0xba, 0x96, 0x4c, 0xa7, 0xa4, 0xa9, + 0x6b, 0xc9, 0x74, 0x5a, 0xca, 0x5c, 0x4b, 0xa6, 0x33, 0x12, 0x14, 0xdf, 0x4b, 0x40, 0x2e, 0x5c, + 0xc1, 0x93, 0x0d, 0x91, 0x46, 0xd7, 0xb0, 0x18, 0xcd, 0x72, 0x8f, 0x1c, 0x5a, 0xef, 0xaf, 0x54, + 0xc9, 0xe2, 0x56, 0x4a, 0xb1, 0x72, 0x59, 0x66, 0x48, 0x52, 0x58, 0x90, 0xf0, 0xc3, 0xac, 0x3c, + 0x49, 0xcb, 0xfc, 0x0a, 0x5d, 0x81, 0xd4, 0x1b, 0x2e, 0xe5, 0x4e, 0x51, 0xee, 0x47, 0x0f, 0xe7, + 0xbe, 0xd6, 0xa4, 0xe4, 0x99, 0x6b, 0x4d, 0x65, 0x63, 0x53, 0x5e, 0x2f, 0xaf, 0xc9, 0x1c, 0x8e, + 0x4e, 0x42, 0xd2, 0x50, 0xdf, 0x3c, 0x88, 0x2e, 0x83, 0x54, 0x34, 0xee, 0xb0, 0x9c, 0x84, 0xe4, + 0x2d, 0xac, 0xee, 0x47, 0x17, 0x1f, 0x2a, 0xfa, 0x10, 0xa7, 0xc7, 0x19, 0x98, 0xa4, 0xfe, 0x42, + 0x00, 0xdc, 0x63, 0xd2, 0x04, 0x4a, 0x43, 0xb2, 0xba, 0x29, 0x93, 0x29, 0x22, 0x41, 0x8e, 0x49, + 0x95, 0xc6, 0x6a, 0xbd, 0x5a, 0x97, 0xe2, 0xc5, 0x73, 0x90, 0x62, 0x4e, 0x20, 0xd3, 0xc7, 0x77, + 0x83, 0x34, 0xc1, 0x2f, 0x39, 0x47, 0x4c, 0xb4, 0x6e, 0xaf, 0x57, 0xea, 0xb2, 0x14, 0xef, 0x1b, + 0xfc, 0xa2, 0x0b, 0xb9, 0x70, 0x65, 0xfe, 0xc3, 0xd9, 0x9e, 0x7f, 0x2d, 0x06, 0xd9, 0x50, 0xa5, + 0x4d, 0x4a, 0x24, 0xd5, 0x30, 0xac, 0x5b, 0x8a, 0x6a, 0xe8, 0xaa, 0xcb, 0x43, 0x03, 0xa8, 0xa8, + 0x4c, 0x24, 0xe3, 0x0e, 0xdd, 0x0f, 0x69, 0xd2, 0x4c, 0x4a, 0xa9, 0xe2, 0xe7, 0x62, 0x20, 0xf5, + 0x96, 0xba, 0x3d, 0x66, 0xc6, 0xfe, 0x20, 0xcd, 0x2c, 0x7e, 0x36, 0x06, 0xf9, 0x68, 0x7d, 0xdb, + 0x63, 0xde, 0xc3, 0x7f, 0xa0, 0xe6, 0xfd, 0x6e, 0x1c, 0xa6, 0x23, 0x55, 0xed, 0xb8, 0xd6, 0xfd, + 0x38, 0xcc, 0xea, 0x2d, 0xdc, 0xb1, 0x2d, 0x0f, 0x9b, 0xda, 0x81, 0x62, 0xe0, 0x9b, 0xd8, 0x28, + 0x14, 0x69, 0xd2, 0x38, 0x73, 0x78, 0xdd, 0xbc, 0xb2, 0x1a, 0xe0, 0xd6, 0x08, 0xac, 0x34, 0xb7, + 0x5a, 0xab, 0xaf, 0x37, 0x36, 0xb7, 0xea, 0x1b, 0xd5, 0xd7, 0x94, 0xed, 0x8d, 0xeb, 0x1b, 0x9b, + 0xaf, 0x6c, 0xc8, 0x92, 0xde, 0xa3, 0xf6, 0x21, 0x4e, 0xfb, 0x06, 0x48, 0xbd, 0x46, 0xa1, 0x13, + 0x30, 0xc8, 0x2c, 0x69, 0x02, 0xcd, 0xc1, 0xcc, 0xc6, 0xa6, 0xd2, 0x5c, 0xad, 0xd5, 0x95, 0xfa, + 0xe5, 0xcb, 0xf5, 0xea, 0x56, 0x93, 0x9d, 0x84, 0xf8, 0xda, 0x5b, 0x91, 0x09, 0x5e, 0xfc, 0x4c, + 0x02, 0xe6, 0x06, 0x58, 0x82, 0xca, 0x7c, 0x0f, 0xc3, 0xb6, 0x55, 0xcf, 0x8c, 0x63, 0xfd, 0x0a, + 0xa9, 0x22, 0x1a, 0xaa, 0xe3, 0xf1, 0x2d, 0xcf, 0x13, 0x40, 0xbc, 0x64, 0x7a, 0xfa, 0xae, 0x8e, + 0x1d, 0x7e, 0xc2, 0xc4, 0x36, 0x36, 0x33, 0x81, 0x9c, 0x1d, 0x32, 0x3d, 0x0d, 0xc8, 0xb6, 0x5c, + 0xdd, 0xd3, 0x6f, 0x62, 0x45, 0x37, 0xc5, 0x71, 0x14, 0xd9, 0xe8, 0x24, 0x65, 0x49, 0xb4, 0xac, + 0x9a, 0x9e, 0xaf, 0x6d, 0xe2, 0xb6, 0xda, 0xa3, 0x4d, 0x92, 0x79, 0x42, 0x96, 0x44, 0x8b, 0xaf, + 0xfd, 0x30, 0xe4, 0x5a, 0x56, 0x97, 0x54, 0x7f, 0x4c, 0x8f, 0xac, 0x1d, 0x31, 0x39, 0xcb, 0x64, + 0xbe, 0x0a, 0xaf, 0xeb, 0x83, 0x73, 0xb0, 0x9c, 0x9c, 0x65, 0x32, 0xa6, 0x72, 0x0a, 0x66, 0xd4, + 0x76, 0xdb, 0x21, 0xe4, 0x82, 0x88, 0xed, 0x54, 0xf2, 0xbe, 0x98, 0x2a, 0x2e, 0x5c, 0x83, 0xb4, + 0xf0, 0x03, 0x59, 0xbc, 0x89, 0x27, 0x14, 0x9b, 0x6d, 0xbf, 0xe3, 0xa7, 0x33, 0x72, 0xda, 0x14, + 0x8d, 0x0f, 0x43, 0x4e, 0x77, 0x95, 0xe0, 0x58, 0x3f, 0xbe, 0x1c, 0x3f, 0x9d, 0x96, 0xb3, 0xba, + 0xeb, 0x1f, 0x89, 0x16, 0xbf, 0x10, 0x87, 0x7c, 0xf4, 0xb1, 0x04, 0xaa, 0x41, 0xda, 0xb0, 0x34, + 0x95, 0x86, 0x16, 0x7b, 0x26, 0x76, 0x7a, 0xc4, 0x93, 0x8c, 0x95, 0x35, 0xae, 0x2f, 0xfb, 0xc8, + 0x85, 0x7f, 0x1d, 0x83, 0xb4, 0x10, 0xa3, 0xe3, 0x90, 0xb4, 0x55, 0x6f, 0x8f, 0xd2, 0x4d, 0x56, + 0xe2, 0x52, 0x4c, 0xa6, 0xd7, 0x44, 0xee, 0xda, 0xaa, 0x49, 0x43, 0x80, 0xcb, 0xc9, 0x35, 0x19, + 0x57, 0x03, 0xab, 0x2d, 0xba, 0x0d, 0xb2, 0x3a, 0x1d, 0x6c, 0x7a, 0xae, 0x18, 0x57, 0x2e, 0xaf, + 0x72, 0x31, 0x7a, 0x0a, 0x66, 0x3d, 0x47, 0xd5, 0x8d, 0x88, 0x6e, 0x92, 0xea, 0x4a, 0xa2, 0xc1, + 0x57, 0x2e, 0xc1, 0x49, 0xc1, 0xdb, 0xc2, 0x9e, 0xaa, 0xed, 0xe1, 0x56, 0x00, 0x4a, 0xd1, 0xe3, + 0x8e, 0x13, 0x5c, 0xa1, 0xc6, 0xdb, 0x05, 0xb6, 0xf8, 0xeb, 0x31, 0x98, 0x15, 0x1b, 0xb7, 0x96, + 0xef, 0xac, 0x75, 0x00, 0xd5, 0x34, 0x2d, 0x2f, 0xec, 0xae, 0xfe, 0x50, 0xee, 0xc3, 0xad, 0x94, + 0x7d, 0x90, 0x1c, 0x22, 0x58, 0xe8, 0x00, 0x04, 0x2d, 0x43, 0xdd, 0xb6, 0x04, 0x59, 0xfe, 0xcc, + 0x89, 0x3e, 0xb8, 0x64, 0x5b, 0x7d, 0x60, 0x22, 0xb2, 0xc3, 0x43, 0xf3, 0x30, 0xb9, 0x83, 0xdb, + 0xba, 0xc9, 0x4f, 0x92, 0xd9, 0x85, 0x38, 0x90, 0x49, 0xfa, 0x07, 0x32, 0x95, 0x3f, 0x05, 0x73, + 0x9a, 0xd5, 0xe9, 0x35, 0xb7, 0x22, 0xf5, 0x1c, 0x37, 0xb8, 0x57, 0x63, 0xaf, 0x3f, 0xc3, 0x95, + 0xda, 0x96, 0xa1, 0x9a, 0xed, 0x15, 0xcb, 0x69, 0x07, 0x0f, 0x5e, 0x49, 0xc5, 0xe3, 0x86, 0x1e, + 0xbf, 0xda, 0x3b, 0xff, 0x3b, 0x16, 0xfb, 0xb9, 0x78, 0xe2, 0x4a, 0xa3, 0xf2, 0xc5, 0xf8, 0xc2, + 0x15, 0x06, 0x6c, 0x08, 0x67, 0xc8, 0x78, 0xd7, 0xc0, 0x1a, 0xe9, 0x20, 0x7c, 0xe7, 0x29, 0x98, + 0x6f, 0x5b, 0x6d, 0x8b, 0x32, 0x9d, 0x21, 0xbf, 0xf8, 0x93, 0xdb, 0x8c, 0x2f, 0x5d, 0x18, 0xf9, + 0x98, 0xb7, 0xb4, 0x01, 0x73, 0x5c, 0x59, 0xa1, 0x8f, 0x8e, 0xd8, 0xc6, 0x06, 0x1d, 0x7a, 0xaa, + 0x56, 0xf8, 0xa5, 0x6f, 0xd3, 0xe5, 0x5b, 0x9e, 0xe5, 0x50, 0xd2, 0xc6, 0xf6, 0x3e, 0x25, 0x19, + 0x8e, 0x45, 0xf8, 0xd8, 0x24, 0xc5, 0xce, 0x08, 0xc6, 0x7f, 0xc1, 0x19, 0xe7, 0x42, 0x8c, 0x4d, + 0x0e, 0x2d, 0x55, 0x61, 0xfa, 0x28, 0x5c, 0xff, 0x92, 0x73, 0xe5, 0x70, 0x98, 0xe4, 0x0a, 0xcc, + 0x50, 0x12, 0xad, 0xeb, 0x7a, 0x56, 0x87, 0x66, 0xc0, 0xc3, 0x69, 0xfe, 0xd5, 0xb7, 0xd9, 0xac, + 0xc9, 0x13, 0x58, 0xd5, 0x47, 0x95, 0x4a, 0x40, 0x9f, 0x96, 0xb5, 0xb0, 0x66, 0x8c, 0x60, 0xf8, + 0x3a, 0x37, 0xc4, 0xd7, 0x2f, 0xdd, 0x80, 0x79, 0xf2, 0x9b, 0x26, 0xa8, 0xb0, 0x25, 0xa3, 0x8f, + 0xe0, 0x0a, 0xbf, 0xfe, 0x71, 0x36, 0x31, 0xe7, 0x7c, 0x82, 0x90, 0x4d, 0xa1, 0x51, 0x6c, 0x63, + 0xcf, 0xc3, 0x8e, 0xab, 0xa8, 0xc6, 0x20, 0xf3, 0x42, 0x67, 0x18, 0x85, 0x9f, 0xf9, 0x6e, 0x74, + 0x14, 0xaf, 0x30, 0x64, 0xd9, 0x30, 0x4a, 0xdb, 0x70, 0x62, 0x40, 0x54, 0x8c, 0xc1, 0xf9, 0x19, + 0xce, 0x39, 0xdf, 0x17, 0x19, 0x84, 0xb6, 0x01, 0x42, 0xee, 0x8f, 0xe5, 0x18, 0x9c, 0x3f, 0xcb, + 0x39, 0x11, 0xc7, 0x8a, 0x21, 0x25, 0x8c, 0xd7, 0x60, 0xf6, 0x26, 0x76, 0x76, 0x2c, 0x97, 0x9f, + 0x1b, 0x8d, 0x41, 0xf7, 0x59, 0x4e, 0x37, 0xc3, 0x81, 0xf4, 0x20, 0x89, 0x70, 0x5d, 0x84, 0xf4, + 0xae, 0xaa, 0xe1, 0x31, 0x28, 0xee, 0x72, 0x8a, 0x29, 0xa2, 0x4f, 0xa0, 0x65, 0xc8, 0xb5, 0x2d, + 0xbe, 0x46, 0x8d, 0x86, 0x7f, 0x8e, 0xc3, 0xb3, 0x02, 0xc3, 0x29, 0x6c, 0xcb, 0xee, 0x1a, 0x64, + 0x01, 0x1b, 0x4d, 0xf1, 0xd7, 0x04, 0x85, 0xc0, 0x70, 0x8a, 0x23, 0xb8, 0xf5, 0x6d, 0x41, 0xe1, + 0x86, 0xfc, 0xf9, 0x12, 0x64, 0x2d, 0xd3, 0x38, 0xb0, 0xcc, 0x71, 0x8c, 0x78, 0x87, 0x33, 0x00, + 0x87, 0x10, 0x82, 0x4b, 0x90, 0x19, 0x77, 0x20, 0xfe, 0xfa, 0x77, 0xc5, 0xf4, 0x10, 0x23, 0x70, + 0x05, 0x66, 0x44, 0x82, 0xd2, 0x2d, 0x73, 0x0c, 0x8a, 0xbf, 0xc1, 0x29, 0xf2, 0x21, 0x18, 0xef, + 0x86, 0x87, 0x5d, 0xaf, 0x8d, 0xc7, 0x21, 0xf9, 0x82, 0xe8, 0x06, 0x87, 0x70, 0x57, 0xee, 0x60, + 0x53, 0xdb, 0x1b, 0x8f, 0xe1, 0x17, 0x84, 0x2b, 0x05, 0x86, 0x50, 0x54, 0x61, 0xba, 0xa3, 0x3a, + 0xee, 0x9e, 0x6a, 0x8c, 0x35, 0x1c, 0x7f, 0x93, 0x73, 0xe4, 0x7c, 0x10, 0xf7, 0x48, 0xd7, 0x3c, + 0x0a, 0xcd, 0x17, 0x85, 0x47, 0x42, 0x30, 0x3e, 0xf5, 0x5c, 0x8f, 0x1e, 0xb2, 0x1d, 0x85, 0xed, + 0x6f, 0x89, 0xa9, 0xc7, 0xb0, 0xeb, 0x61, 0xc6, 0x4b, 0x90, 0x71, 0xf5, 0x37, 0xc7, 0xa2, 0xf9, + 0x92, 0x18, 0x69, 0x0a, 0x20, 0xe0, 0xd7, 0xe0, 0xe4, 0xc0, 0x65, 0x62, 0x0c, 0xb2, 0xbf, 0xcd, + 0xc9, 0x8e, 0x0f, 0x58, 0x2a, 0x78, 0x4a, 0x38, 0x2a, 0xe5, 0xdf, 0x11, 0x29, 0x01, 0xf7, 0x70, + 0x35, 0xc8, 0xae, 0xc1, 0x55, 0x77, 0x8f, 0xe6, 0xb5, 0xbf, 0x2b, 0xbc, 0xc6, 0xb0, 0x11, 0xaf, + 0x6d, 0xc1, 0x71, 0xce, 0x78, 0xb4, 0x71, 0xfd, 0x45, 0x91, 0x58, 0x19, 0x7a, 0x3b, 0x3a, 0xba, + 0x3f, 0x0a, 0x0b, 0xbe, 0x3b, 0x45, 0x79, 0xea, 0x2a, 0x1d, 0xd5, 0x1e, 0x83, 0xf9, 0x97, 0x38, + 0xb3, 0xc8, 0xf8, 0x7e, 0x7d, 0xeb, 0xae, 0xab, 0x36, 0x21, 0x7f, 0x15, 0x0a, 0x82, 0xbc, 0x6b, + 0x3a, 0x58, 0xb3, 0xda, 0xa6, 0xfe, 0x26, 0x6e, 0x8d, 0x41, 0xfd, 0xcb, 0x3d, 0x43, 0xb5, 0x1d, + 0x82, 0x13, 0xe6, 0x55, 0x90, 0xfc, 0x5a, 0x45, 0xd1, 0x3b, 0xb6, 0xe5, 0x78, 0x23, 0x18, 0xbf, + 0x2c, 0x46, 0xca, 0xc7, 0xad, 0x52, 0x58, 0xa9, 0x0e, 0xec, 0xc9, 0xf3, 0xb8, 0x21, 0xf9, 0x15, + 0x4e, 0x34, 0x1d, 0xa0, 0x78, 0xe2, 0xd0, 0xac, 0x8e, 0xad, 0x3a, 0xe3, 0xe4, 0xbf, 0xbf, 0x27, + 0x12, 0x07, 0x87, 0xf0, 0xc4, 0x41, 0x2a, 0x3a, 0xb2, 0xda, 0x8f, 0xc1, 0xf0, 0x55, 0x91, 0x38, + 0x04, 0x86, 0x53, 0x88, 0x82, 0x61, 0x0c, 0x8a, 0xbf, 0x2f, 0x28, 0x04, 0x86, 0x50, 0xbc, 0x1c, + 0x2c, 0xb4, 0x0e, 0x6e, 0xeb, 0xae, 0xe7, 0xb0, 0xa2, 0xf8, 0x70, 0xaa, 0x7f, 0xf0, 0xdd, 0x68, + 0x11, 0x26, 0x87, 0xa0, 0x24, 0x13, 0xf1, 0x63, 0x57, 0xba, 0x67, 0x1a, 0x6d, 0xd8, 0xaf, 0x88, + 0x4c, 0x14, 0x82, 0x11, 0xdb, 0x42, 0x15, 0x22, 0x71, 0xbb, 0x46, 0x76, 0x0a, 0x63, 0xd0, 0xfd, + 0xc3, 0x1e, 0xe3, 0x9a, 0x02, 0x4b, 0x38, 0x43, 0xf5, 0x4f, 0xd7, 0xdc, 0xc7, 0x07, 0x63, 0x45, + 0xe7, 0xaf, 0xf6, 0xd4, 0x3f, 0xdb, 0x0c, 0xc9, 0x72, 0xc8, 0x4c, 0x4f, 0x3d, 0x85, 0x46, 0xbd, + 0x67, 0x54, 0xf8, 0xd8, 0x07, 0xbc, 0xbf, 0xd1, 0x72, 0xaa, 0xb4, 0x46, 0x82, 0x3c, 0x5a, 0xf4, + 0x8c, 0x26, 0xfb, 0xf8, 0x07, 0x7e, 0x9c, 0x47, 0x6a, 0x9e, 0xd2, 0x65, 0x98, 0x8e, 0x14, 0x3c, + 0xa3, 0xa9, 0xfe, 0x34, 0xa7, 0xca, 0x85, 0xeb, 0x9d, 0xd2, 0x39, 0x48, 0x92, 0xe2, 0x65, 0x34, + 0xfc, 0xcf, 0x70, 0x38, 0x55, 0x2f, 0x7d, 0x04, 0xd2, 0xa2, 0x68, 0x19, 0x0d, 0xfd, 0xb3, 0x1c, + 0xea, 0x43, 0x08, 0x5c, 0x14, 0x2c, 0xa3, 0xe1, 0x7f, 0x4e, 0xc0, 0x05, 0x84, 0xc0, 0xc7, 0x77, + 0xe1, 0xd7, 0xfe, 0x7c, 0x92, 0x2f, 0x3a, 0xc2, 0x77, 0x97, 0x60, 0x8a, 0x57, 0x2a, 0xa3, 0xd1, + 0x9f, 0xe4, 0x37, 0x17, 0x88, 0xd2, 0x05, 0x98, 0x1c, 0xd3, 0xe1, 0x7f, 0x81, 0x43, 0x99, 0x7e, + 0xa9, 0x0a, 0xd9, 0x50, 0x75, 0x32, 0x1a, 0xfe, 0x17, 0x39, 0x3c, 0x8c, 0x22, 0xa6, 0xf3, 0xea, + 0x64, 0x34, 0xc1, 0x5f, 0x12, 0xa6, 0x73, 0x04, 0x71, 0x9b, 0x28, 0x4c, 0x46, 0xa3, 0x3f, 0x25, + 0xbc, 0x2e, 0x20, 0xa5, 0x97, 0x20, 0xe3, 0x2f, 0x36, 0xa3, 0xf1, 0x3f, 0xc9, 0xf1, 0x01, 0x86, + 0x78, 0x20, 0xb4, 0xd8, 0x8d, 0xa6, 0xf8, 0xcb, 0xc2, 0x03, 0x21, 0x14, 0x99, 0x46, 0xbd, 0x05, + 0xcc, 0x68, 0xa6, 0x9f, 0x12, 0xd3, 0xa8, 0xa7, 0x7e, 0x21, 0xa3, 0x49, 0x73, 0xfe, 0x68, 0x8a, + 0xbf, 0x22, 0x46, 0x93, 0xea, 0x13, 0x33, 0x7a, 0x2b, 0x82, 0xd1, 0x1c, 0x3f, 0x2d, 0xcc, 0xe8, + 0x29, 0x08, 0x4a, 0x0d, 0x40, 0xfd, 0xd5, 0xc0, 0x68, 0xbe, 0x4f, 0x73, 0xbe, 0xd9, 0xbe, 0x62, + 0xa0, 0xf4, 0x0a, 0x1c, 0x1f, 0x5c, 0x09, 0x8c, 0x66, 0xfd, 0x99, 0x0f, 0x7a, 0xf6, 0x6e, 0xe1, + 0x42, 0xa0, 0xb4, 0x15, 0x2c, 0x29, 0xe1, 0x2a, 0x60, 0x34, 0xed, 0x67, 0x3e, 0x88, 0x26, 0xee, + 0x70, 0x11, 0x50, 0x2a, 0x03, 0x04, 0x0b, 0xf0, 0x68, 0xae, 0xcf, 0x72, 0xae, 0x10, 0x88, 0x4c, + 0x0d, 0xbe, 0xfe, 0x8e, 0xc6, 0xdf, 0x15, 0x53, 0x83, 0x23, 0xc8, 0xd4, 0x10, 0x4b, 0xef, 0x68, + 0xf4, 0xe7, 0xc4, 0xd4, 0x10, 0x10, 0x12, 0xd9, 0xa1, 0xd5, 0x6d, 0x34, 0xc3, 0x3b, 0x22, 0xb2, + 0x43, 0xa8, 0xd2, 0x06, 0xcc, 0xf6, 0x2d, 0x88, 0xa3, 0xa9, 0x7e, 0x8e, 0x53, 0x49, 0xbd, 0xeb, + 0x61, 0x78, 0xf1, 0xe2, 0x8b, 0xe1, 0x68, 0xb6, 0xcf, 0xf7, 0x2c, 0x5e, 0x7c, 0x2d, 0x2c, 0x5d, + 0x82, 0xb4, 0xd9, 0x35, 0x0c, 0x32, 0x79, 0xd0, 0xe1, 0xef, 0x06, 0x16, 0xfe, 0xcb, 0x0f, 0xb8, + 0x77, 0x04, 0xa0, 0x74, 0x0e, 0x26, 0x71, 0x67, 0x07, 0xb7, 0x46, 0x21, 0xbf, 0xf3, 0x03, 0x91, + 0x30, 0x89, 0x76, 0xe9, 0x25, 0x00, 0x76, 0x34, 0x42, 0x1f, 0x06, 0x8e, 0xc0, 0xfe, 0xd7, 0x1f, + 0xf0, 0x97, 0x71, 0x02, 0x48, 0x40, 0xc0, 0x5e, 0xed, 0x39, 0x9c, 0xe0, 0xbb, 0x51, 0x02, 0x3a, + 0x22, 0x17, 0x61, 0xea, 0x0d, 0xd7, 0x32, 0x3d, 0xb5, 0x3d, 0x0a, 0xfd, 0xdf, 0x38, 0x5a, 0xe8, + 0x13, 0x87, 0x75, 0x2c, 0x07, 0x7b, 0x6a, 0xdb, 0x1d, 0x85, 0xfd, 0xef, 0x1c, 0xeb, 0x03, 0x08, + 0x58, 0x53, 0x5d, 0x6f, 0x9c, 0x7e, 0xff, 0x9e, 0x00, 0x0b, 0x00, 0x31, 0x9a, 0xfc, 0xde, 0xc7, + 0x07, 0xa3, 0xb0, 0xdf, 0x13, 0x46, 0x73, 0xfd, 0xd2, 0x47, 0x20, 0x43, 0x7e, 0xb2, 0x37, 0xec, + 0x46, 0x80, 0xff, 0x07, 0x07, 0x07, 0x08, 0x72, 0x67, 0xd7, 0x6b, 0x79, 0xfa, 0x68, 0x67, 0x7f, + 0x9f, 0x8f, 0xb4, 0xd0, 0x2f, 0x95, 0x21, 0xeb, 0x7a, 0xad, 0x56, 0x97, 0xd7, 0xa7, 0x23, 0xe0, + 0xff, 0xf3, 0x07, 0xfe, 0x91, 0x85, 0x8f, 0x21, 0xa3, 0x7d, 0x6b, 0xdf, 0xb3, 0x2d, 0xfa, 0xc0, + 0x63, 0x14, 0xc3, 0x07, 0x9c, 0x21, 0x04, 0x29, 0x55, 0x21, 0x47, 0xfa, 0xe2, 0x60, 0x1b, 0xd3, + 0xa7, 0x53, 0x23, 0x28, 0xfe, 0x17, 0x77, 0x40, 0x04, 0x54, 0xf9, 0xb1, 0xaf, 0xbf, 0xb7, 0x18, + 0xfb, 0xe6, 0x7b, 0x8b, 0xb1, 0xdf, 0x7d, 0x6f, 0x31, 0xf6, 0xa9, 0x6f, 0x2d, 0x4e, 0x7c, 0xf3, + 0x5b, 0x8b, 0x13, 0xbf, 0xf5, 0xad, 0xc5, 0x89, 0xc1, 0xa7, 0xc4, 0x70, 0xc5, 0xba, 0x62, 0xb1, + 0xf3, 0xe1, 0xd7, 0x8b, 0x6d, 0xdd, 0xdb, 0xeb, 0xee, 0xac, 0x68, 0x56, 0x87, 0x1e, 0xe3, 0x06, + 0xa7, 0xb5, 0xfe, 0x26, 0x07, 0x3e, 0x16, 0x27, 0x1b, 0xe6, 0xe8, 0x59, 0xae, 0x6a, 0x1e, 0x0c, + 0xf9, 0x56, 0x67, 0x61, 0xe0, 0xc1, 0x70, 0xf1, 0x2a, 0x24, 0xca, 0xe6, 0x01, 0x3a, 0xc9, 0x72, + 0x9e, 0xd2, 0x75, 0x0c, 0xfe, 0xe6, 0xd7, 0x14, 0xb9, 0xde, 0x76, 0x0c, 0x34, 0x1f, 0xbc, 0x9e, + 0x19, 0x3b, 0x9d, 0xe3, 0xef, 0x5c, 0x96, 0xa4, 0x4f, 0xbf, 0xbd, 0x34, 0xf1, 0x8b, 0x6f, 0x2f, + 0x4d, 0x7c, 0xef, 0x9d, 0xa5, 0x89, 0xb7, 0x7e, 0x67, 0x79, 0xa2, 0xb2, 0xdf, 0xdb, 0xdb, 0xaf, + 0x8d, 0xec, 0x71, 0xba, 0x6c, 0x1e, 0xd0, 0x0e, 0x37, 0x62, 0xaf, 0x4f, 0xd2, 0x43, 0x6f, 0x71, + 0xc8, 0xbd, 0xd8, 0x7b, 0xc8, 0xfd, 0x0a, 0x36, 0x8c, 0xeb, 0xa6, 0x75, 0xcb, 0xdc, 0x22, 0x6a, + 0x3b, 0x29, 0xf6, 0x4a, 0x31, 0xfc, 0x54, 0x1c, 0x16, 0xfb, 0xce, 0xb3, 0x79, 0x14, 0x0c, 0xfb, + 0x68, 0xa9, 0x04, 0xe9, 0x9a, 0x08, 0xae, 0x02, 0x4c, 0xb9, 0x58, 0xb3, 0xcc, 0x96, 0x4b, 0xbb, + 0x9d, 0x90, 0xc5, 0x25, 0xe9, 0xb6, 0xa9, 0x9a, 0x96, 0xcb, 0xdf, 0x94, 0x64, 0x17, 0x95, 0x9f, + 0x8d, 0x1d, 0x6d, 0x4c, 0xa7, 0xc5, 0x9d, 0x44, 0x37, 0x9f, 0x1b, 0x79, 0xec, 0xbf, 0x4f, 0x7a, + 0xe9, 0x77, 0x22, 0x72, 0xf4, 0x3f, 0xae, 0x57, 0x7e, 0x3a, 0x0e, 0x4b, 0xbd, 0x5e, 0x21, 0x53, + 0xcb, 0xf5, 0xd4, 0x8e, 0x3d, 0xcc, 0x2d, 0x97, 0x20, 0xb3, 0x25, 0x74, 0x8e, 0xec, 0x97, 0xbb, + 0x47, 0xf4, 0x4b, 0xde, 0xbf, 0x95, 0x70, 0xcc, 0xd9, 0x31, 0x1d, 0xe3, 0xf7, 0xe3, 0x9e, 0x3c, + 0xf3, 0x7f, 0x52, 0x70, 0x52, 0xb3, 0xdc, 0x8e, 0xe5, 0x2a, 0x6c, 0x2a, 0xb0, 0x0b, 0xee, 0x93, + 0x5c, 0xb8, 0x69, 0xf4, 0x83, 0x92, 0xe2, 0x75, 0x98, 0x5b, 0x25, 0xe9, 0x82, 0x6c, 0x83, 0x82, + 0x47, 0x3c, 0x03, 0x5f, 0x26, 0x5d, 0x8e, 0x54, 0xfc, 0xfc, 0x11, 0x53, 0x58, 0x54, 0xfc, 0x58, + 0x0c, 0xa4, 0xa6, 0xa6, 0x1a, 0xaa, 0xf3, 0xff, 0x4b, 0x85, 0x2e, 0x00, 0xd0, 0x8f, 0x90, 0x82, + 0xaf, 0x86, 0xf2, 0x67, 0x0b, 0x2b, 0xe1, 0xce, 0xad, 0xb0, 0x3b, 0xd1, 0x4f, 0x12, 0x32, 0x54, + 0x97, 0xfc, 0x7c, 0xf2, 0x55, 0x80, 0xa0, 0x01, 0x3d, 0x00, 0x27, 0x9a, 0xd5, 0xf2, 0x5a, 0x59, + 0x56, 0xd8, 0xdb, 0xed, 0x1b, 0xcd, 0x46, 0xbd, 0xba, 0x7a, 0x79, 0xb5, 0x5e, 0x93, 0x26, 0xd0, + 0x71, 0x40, 0xe1, 0x46, 0xff, 0xc5, 0x94, 0x63, 0x30, 0x1b, 0x96, 0xb3, 0x57, 0xe4, 0xe3, 0xa4, + 0x54, 0xd4, 0x3b, 0xb6, 0x81, 0xe9, 0xb3, 0x3f, 0x45, 0x17, 0x5e, 0x1b, 0x5d, 0x85, 0xfc, 0xda, + 0xbf, 0x61, 0xaf, 0x4d, 0xcf, 0x05, 0x70, 0xdf, 0xe7, 0xa5, 0x35, 0x98, 0x55, 0x35, 0x0d, 0xdb, + 0x11, 0xca, 0x11, 0xb9, 0x9a, 0x10, 0xd2, 0xa7, 0x99, 0x1c, 0x19, 0xb0, 0x5d, 0x80, 0x94, 0x4b, + 0x7b, 0x3f, 0x8a, 0xe2, 0x1b, 0x9c, 0x82, 0xab, 0x97, 0x4c, 0x98, 0x25, 0xa5, 0x9f, 0xea, 0xe0, + 0x90, 0x19, 0x87, 0x1f, 0x34, 0xfc, 0xa3, 0x2f, 0x3f, 0x4b, 0x9f, 0x6d, 0x3e, 0x1c, 0x1d, 0x96, + 0x01, 0xe1, 0x24, 0x4b, 0x9c, 0x3b, 0x30, 0x14, 0x43, 0x5e, 0xdc, 0x8f, 0x1b, 0x7c, 0xf8, 0xcd, + 0xfe, 0x31, 0xbf, 0xd9, 0xe2, 0xa0, 0x18, 0x08, 0xdd, 0x69, 0x9a, 0xb3, 0xb2, 0x86, 0x4a, 0x7d, + 0xd8, 0x9c, 0x7e, 0xfd, 0xa9, 0xd0, 0xf2, 0xc4, 0x28, 0xf9, 0x9f, 0x67, 0x28, 0xf3, 0xa5, 0xf0, + 0x6d, 0xfc, 0xb9, 0xf7, 0x9b, 0x09, 0x58, 0xe4, 0xca, 0x3b, 0xaa, 0x8b, 0xcf, 0xdc, 0x7c, 0x6e, + 0x07, 0x7b, 0xea, 0x73, 0x67, 0x34, 0x4b, 0x17, 0xb9, 0x7a, 0x8e, 0x4f, 0x47, 0xd2, 0xbe, 0xc2, + 0xdb, 0x07, 0x2f, 0x5c, 0x0b, 0xc3, 0xa7, 0x71, 0x71, 0x1b, 0x92, 0x55, 0x4b, 0x37, 0x49, 0xaa, + 0x6a, 0x61, 0xd3, 0xea, 0xf0, 0xd9, 0xc3, 0x2e, 0xd0, 0x73, 0x90, 0x52, 0x3b, 0x56, 0xd7, 0xf4, + 0xd8, 0xcc, 0xa9, 0x9c, 0xfc, 0xfa, 0xbb, 0x4b, 0x13, 0xff, 0xf6, 0xdd, 0xa5, 0xc4, 0xaa, 0xe9, + 0xfd, 0xc6, 0x57, 0x9e, 0x01, 0x4e, 0xb5, 0x6a, 0x7a, 0x32, 0x57, 0x2c, 0x25, 0xdf, 0x7f, 0x7b, + 0x29, 0x56, 0x7c, 0x15, 0xa6, 0x6a, 0x58, 0xbb, 0x17, 0xe6, 0x1a, 0xd6, 0x42, 0xcc, 0x35, 0xac, + 0xf5, 0x30, 0x5f, 0x80, 0xf4, 0xaa, 0xe9, 0xb1, 0x37, 0xd1, 0x9f, 0x82, 0x84, 0x6e, 0xb2, 0x97, + 0x1b, 0x0f, 0xb5, 0x8d, 0x68, 0x11, 0x60, 0x0d, 0x6b, 0x3e, 0xb0, 0x85, 0xb5, 0x5e, 0x60, 0xff, + 0xad, 0x89, 0x56, 0xa5, 0xf6, 0x5b, 0xff, 0x71, 0x71, 0xe2, 0xad, 0xf7, 0x16, 0x27, 0x86, 0x0e, + 0x71, 0x71, 0xe8, 0x10, 0xbb, 0xad, 0x7d, 0x96, 0x91, 0xfd, 0x91, 0xfd, 0x62, 0x12, 0x1e, 0xa2, + 0x1f, 0x28, 0x39, 0x1d, 0xdd, 0xf4, 0xce, 0x68, 0xce, 0x81, 0xed, 0xd1, 0x92, 0xc5, 0xda, 0xe5, + 0x03, 0x3b, 0x1b, 0x34, 0xaf, 0xb0, 0xe6, 0x21, 0xf5, 0xc8, 0x2e, 0x4c, 0x36, 0x08, 0x8e, 0xb8, + 0xd8, 0xb3, 0x3c, 0xd5, 0xe0, 0xeb, 0x0f, 0xbb, 0x20, 0x52, 0xf6, 0x51, 0x53, 0x9c, 0x49, 0x75, + 0xf1, 0x3d, 0x93, 0x81, 0xd5, 0x5d, 0xf6, 0x6e, 0x78, 0x82, 0x96, 0x29, 0x69, 0x22, 0xa0, 0xaf, + 0x81, 0xcf, 0xc3, 0xa4, 0xda, 0x65, 0x2f, 0x31, 0x24, 0x48, 0xfd, 0x42, 0x2f, 0x8a, 0xd7, 0x61, + 0x8a, 0x3f, 0x4a, 0x45, 0x12, 0x24, 0xf6, 0xf1, 0x01, 0xbd, 0x4f, 0x4e, 0x26, 0x3f, 0xd1, 0x0a, + 0x4c, 0x52, 0xe3, 0xf9, 0x47, 0x2f, 0x85, 0x95, 0x3e, 0xeb, 0x57, 0xa8, 0x91, 0x32, 0x53, 0x2b, + 0x5e, 0x83, 0x74, 0xcd, 0xea, 0xe8, 0xa6, 0x15, 0x65, 0xcb, 0x30, 0x36, 0x6a, 0xb3, 0xdd, 0xe5, + 0x51, 0x21, 0xb3, 0x0b, 0x74, 0x1c, 0x52, 0xec, 0x5b, 0x01, 0xfe, 0x22, 0x06, 0xbf, 0x2a, 0x56, + 0x61, 0x8a, 0x72, 0x6f, 0xda, 0x24, 0xf9, 0xfb, 0xaf, 0x65, 0x66, 0xf8, 0x97, 0x63, 0x9c, 0x3e, + 0x1e, 0x18, 0x8b, 0x20, 0xd9, 0x52, 0x3d, 0x95, 0xf7, 0x9b, 0xfe, 0x2e, 0x7e, 0x14, 0xd2, 0x9c, + 0xc4, 0x45, 0x67, 0x21, 0x61, 0xd9, 0x2e, 0x7f, 0x95, 0x62, 0x61, 0x58, 0x57, 0x36, 0xed, 0x4a, + 0x92, 0xc4, 0x8c, 0x4c, 0x94, 0x2b, 0xf2, 0xd0, 0xb0, 0x78, 0x31, 0x14, 0x16, 0xa1, 0x21, 0x0f, + 0xfd, 0x64, 0x43, 0xda, 0x17, 0x0e, 0x7e, 0xb0, 0xbc, 0x13, 0x87, 0xc5, 0x50, 0xeb, 0x4d, 0xec, + 0xb8, 0xba, 0x65, 0xb2, 0x88, 0xe2, 0xd1, 0x82, 0x42, 0x46, 0xf2, 0xf6, 0x21, 0xe1, 0xf2, 0x11, + 0x48, 0x94, 0x6d, 0x1b, 0x2d, 0x40, 0x9a, 0x5e, 0x6b, 0x16, 0x8b, 0x97, 0xa4, 0xec, 0x5f, 0x93, + 0x36, 0xd7, 0xda, 0xf5, 0x6e, 0xa9, 0x8e, 0xff, 0x39, 0x9d, 0xb8, 0x2e, 0x5e, 0x84, 0x4c, 0xd5, + 0x32, 0x5d, 0x6c, 0xba, 0x5d, 0x5a, 0xd9, 0xec, 0x18, 0x96, 0xb6, 0xcf, 0x19, 0xd8, 0x05, 0x71, + 0xb8, 0x6a, 0xdb, 0x14, 0x99, 0x94, 0xc9, 0x4f, 0x36, 0x67, 0x2b, 0xcd, 0xa1, 0x2e, 0xba, 0x78, + 0x74, 0x17, 0xf1, 0x4e, 0xfa, 0x3e, 0xfa, 0xfd, 0x18, 0x3c, 0xd8, 0x3f, 0xa1, 0xf6, 0xf1, 0x81, + 0x7b, 0xd4, 0xf9, 0xf4, 0x2a, 0x64, 0x1a, 0xf4, 0x9b, 0xf6, 0xeb, 0xf8, 0x00, 0x2d, 0xc0, 0x14, + 0x6e, 0x9d, 0x3d, 0x77, 0xee, 0xb9, 0x8b, 0x2c, 0xda, 0xaf, 0x4e, 0xc8, 0x42, 0x80, 0x16, 0x21, + 0xe3, 0x62, 0xcd, 0x3e, 0x7b, 0xee, 0xfc, 0xfe, 0x73, 0x2c, 0xbc, 0xae, 0x4e, 0xc8, 0x81, 0xa8, + 0x94, 0x26, 0xbd, 0x7e, 0xff, 0x9d, 0xa5, 0x58, 0x65, 0x12, 0x12, 0x6e, 0xb7, 0xf3, 0xa1, 0xc6, + 0xc8, 0x67, 0x26, 0x61, 0x39, 0x8c, 0xa4, 0xf5, 0xdf, 0x4d, 0xd5, 0xd0, 0x5b, 0x6a, 0xf0, 0xdf, + 0x08, 0xa4, 0x90, 0x0f, 0xa8, 0xc6, 0x90, 0x95, 0xe2, 0x50, 0x4f, 0x16, 0x7f, 0x39, 0x06, 0xb9, + 0x1b, 0x82, 0xb9, 0x89, 0x3d, 0x74, 0x09, 0xc0, 0xbf, 0x93, 0x98, 0x36, 0x0f, 0xac, 0xf4, 0xde, + 0x6b, 0xc5, 0xc7, 0xc8, 0x21, 0x75, 0x74, 0x81, 0x06, 0xa2, 0x6d, 0xb9, 0xfc, 0x13, 0xab, 0x11, + 0x50, 0x5f, 0x19, 0x3d, 0x0d, 0x88, 0x66, 0x38, 0xe5, 0xa6, 0xe5, 0xe9, 0x66, 0x5b, 0xb1, 0xad, + 0x5b, 0xfc, 0xc3, 0xd5, 0x84, 0x2c, 0xd1, 0x96, 0x1b, 0xb4, 0xa1, 0x41, 0xe4, 0xc4, 0xe8, 0x8c, + 0xcf, 0x42, 0x8a, 0x75, 0xb5, 0xd5, 0x72, 0xb0, 0xeb, 0xf2, 0x24, 0x26, 0x2e, 0xd1, 0x25, 0x98, + 0xb2, 0xbb, 0x3b, 0x8a, 0xc8, 0x18, 0xd9, 0xb3, 0x0f, 0x0e, 0x9a, 0xff, 0x22, 0x3e, 0x78, 0x06, + 0x48, 0xd9, 0xdd, 0x1d, 0x12, 0x2d, 0x0f, 0x43, 0x6e, 0x80, 0x31, 0xd9, 0x9b, 0x81, 0x1d, 0xf4, + 0x5f, 0x29, 0xf0, 0x1e, 0x28, 0xb6, 0xa3, 0x5b, 0x8e, 0xee, 0x1d, 0xd0, 0xf7, 0xa1, 0x12, 0xb2, + 0x24, 0x1a, 0x1a, 0x5c, 0x5e, 0xdc, 0x87, 0x99, 0x26, 0x2d, 0xe2, 0x02, 0xcb, 0xcf, 0x05, 0xf6, + 0xc5, 0x46, 0xdb, 0x37, 0xd4, 0xb2, 0x78, 0x9f, 0x65, 0x95, 0x97, 0x87, 0x46, 0xe7, 0x85, 0xa3, + 0x47, 0x67, 0x74, 0xb5, 0xfb, 0xbd, 0x93, 0x91, 0xc9, 0xc9, 0x82, 0x33, 0x9c, 0xbe, 0xc6, 0x0d, + 0xcc, 0x51, 0x7b, 0xb4, 0x85, 0xc3, 0x17, 0xd5, 0x85, 0x11, 0x69, 0x74, 0x61, 0xe4, 0x14, 0x2a, + 0x5e, 0x84, 0xe9, 0x86, 0xea, 0x78, 0x4d, 0xec, 0x5d, 0xc5, 0x6a, 0x0b, 0x3b, 0xd1, 0x55, 0x77, + 0x5a, 0xac, 0xba, 0x08, 0x92, 0x74, 0x69, 0x65, 0xab, 0x0e, 0xfd, 0x5d, 0xdc, 0x83, 0x24, 0x7d, + 0x27, 0xd2, 0x5f, 0x91, 0x39, 0x82, 0xad, 0xc8, 0x24, 0x97, 0x1e, 0x78, 0xd8, 0x15, 0x87, 0x06, + 0xf4, 0x02, 0xbd, 0x20, 0xd6, 0xd5, 0xc4, 0xe1, 0xeb, 0x2a, 0x0f, 0x44, 0xbe, 0xba, 0x1a, 0x30, + 0x55, 0x21, 0xa9, 0x78, 0xb5, 0xe6, 0x1b, 0x12, 0x0b, 0x0c, 0x41, 0xeb, 0x30, 0x63, 0xab, 0x8e, + 0x47, 0x3f, 0x0f, 0xd9, 0xa3, 0xbd, 0xe0, 0xb1, 0xbe, 0xd4, 0x3f, 0xf3, 0x22, 0x9d, 0xe5, 0x77, + 0x99, 0xb6, 0xc3, 0xc2, 0xe2, 0x7f, 0x4a, 0x42, 0x8a, 0x3b, 0xe3, 0x23, 0x30, 0xc5, 0xdd, 0xca, + 0xa3, 0xf3, 0xa1, 0x95, 0xfe, 0x85, 0x69, 0xc5, 0x5f, 0x40, 0x38, 0x9f, 0xc0, 0xa0, 0xc7, 0x21, + 0xad, 0xed, 0xa9, 0xba, 0xa9, 0xe8, 0x2d, 0x5e, 0x10, 0x66, 0xdf, 0x7b, 0x77, 0x69, 0xaa, 0x4a, + 0x64, 0xab, 0x35, 0x79, 0x8a, 0x36, 0xae, 0xb6, 0x48, 0x25, 0xb0, 0x87, 0xf5, 0xf6, 0x9e, 0xc7, + 0x67, 0x18, 0xbf, 0x42, 0x2f, 0x42, 0x92, 0x04, 0x04, 0xff, 0x78, 0x70, 0xa1, 0xaf, 0xc2, 0xf7, + 0xb7, 0xd0, 0x95, 0x34, 0xb9, 0xf1, 0xa7, 0xfe, 0xc3, 0x52, 0x4c, 0xa6, 0x08, 0x54, 0x85, 0x69, + 0x43, 0x75, 0x3d, 0x85, 0xae, 0x60, 0xe4, 0xf6, 0x93, 0x94, 0xe2, 0x64, 0xbf, 0x43, 0xb8, 0x63, + 0xb9, 0xe9, 0x59, 0x82, 0x62, 0xa2, 0x16, 0x3a, 0x0d, 0x12, 0x25, 0xd1, 0xac, 0x4e, 0x47, 0xf7, + 0x58, 0x6d, 0x95, 0xa2, 0x7e, 0xcf, 0x13, 0x79, 0x95, 0x8a, 0x69, 0x85, 0xf5, 0x00, 0x64, 0xe8, + 0xe7, 0x4a, 0x54, 0x85, 0xbd, 0x88, 0x9b, 0x26, 0x02, 0xda, 0x78, 0x0a, 0x66, 0x82, 0xfc, 0xc8, + 0x54, 0xd2, 0x8c, 0x25, 0x10, 0x53, 0xc5, 0x67, 0x61, 0xde, 0xc4, 0xb7, 0xe9, 0xab, 0xc1, 0x11, + 0xed, 0x0c, 0xd5, 0x46, 0xa4, 0xed, 0x46, 0x14, 0xf1, 0x18, 0xe4, 0x35, 0xe1, 0x7c, 0xa6, 0x0b, + 0x54, 0x77, 0xda, 0x97, 0x52, 0xb5, 0x93, 0x90, 0x56, 0x6d, 0x9b, 0x29, 0x64, 0x79, 0x7e, 0xb4, + 0x6d, 0xda, 0xf4, 0x24, 0xcc, 0xd2, 0x3e, 0x3a, 0xd8, 0xed, 0x1a, 0x1e, 0x27, 0xc9, 0x51, 0x9d, + 0x19, 0xd2, 0x20, 0x33, 0x39, 0xd5, 0x7d, 0x04, 0xa6, 0xf1, 0x4d, 0xbd, 0x85, 0x4d, 0x0d, 0x33, + 0xbd, 0x69, 0xaa, 0x97, 0x13, 0x42, 0xaa, 0xf4, 0x04, 0xf8, 0x79, 0x4f, 0x11, 0x39, 0x39, 0xcf, + 0xf8, 0x84, 0xbc, 0xcc, 0xc4, 0xc5, 0x02, 0x24, 0x6b, 0xaa, 0xa7, 0x92, 0x02, 0xc3, 0xbb, 0xcd, + 0x16, 0x9a, 0x9c, 0x4c, 0x7e, 0x16, 0xdf, 0x8f, 0x43, 0xf2, 0x86, 0xe5, 0x61, 0xf4, 0x7c, 0xa8, + 0x00, 0xcc, 0x0f, 0x8a, 0xe7, 0xa6, 0xde, 0x36, 0x71, 0x6b, 0xdd, 0x6d, 0x87, 0xfe, 0xb7, 0x40, + 0x10, 0x4e, 0xf1, 0x48, 0x38, 0xcd, 0xc3, 0xa4, 0x63, 0x75, 0xcd, 0x96, 0x78, 0x87, 0x95, 0x5e, + 0xa0, 0x3a, 0xa4, 0xfd, 0x28, 0x49, 0x8e, 0x8a, 0x92, 0x19, 0x12, 0x25, 0x24, 0x86, 0xb9, 0x40, + 0x9e, 0xda, 0xe1, 0xc1, 0x52, 0x81, 0x8c, 0x9f, 0xbc, 0x78, 0xb4, 0x8d, 0x17, 0xb0, 0x01, 0x8c, + 0x2c, 0x26, 0xfe, 0xd8, 0xfb, 0xce, 0x63, 0x11, 0x27, 0xf9, 0x0d, 0xdc, 0x7b, 0x91, 0xb0, 0xe2, + 0xff, 0xe7, 0x60, 0x8a, 0xf6, 0x2b, 0x08, 0x2b, 0xf6, 0xbf, 0x0e, 0x1e, 0x84, 0x8c, 0xab, 0xb7, + 0x4d, 0xd5, 0xeb, 0x3a, 0x98, 0x47, 0x5e, 0x20, 0x28, 0x7e, 0x2d, 0x06, 0x29, 0x16, 0xc9, 0x21, + 0xbf, 0xc5, 0x06, 0xfb, 0x2d, 0x3e, 0xcc, 0x6f, 0x89, 0x7b, 0xf7, 0x5b, 0x19, 0xc0, 0x37, 0xc6, + 0xe5, 0x9f, 0x9f, 0x0f, 0xa8, 0x18, 0x98, 0x89, 0x4d, 0xbd, 0xcd, 0x27, 0x6a, 0x08, 0x54, 0xfc, + 0xf7, 0x31, 0x52, 0xc4, 0xf2, 0x76, 0x54, 0x86, 0x69, 0x61, 0x97, 0xb2, 0x6b, 0xa8, 0x6d, 0x1e, + 0x3b, 0x0f, 0x0d, 0x35, 0xee, 0xb2, 0xa1, 0xb6, 0xe5, 0x2c, 0xb7, 0x87, 0x5c, 0x0c, 0x1e, 0x87, + 0xf8, 0x90, 0x71, 0x88, 0x0c, 0x7c, 0xe2, 0xde, 0x06, 0x3e, 0x32, 0x44, 0xc9, 0xde, 0x21, 0xfa, + 0x72, 0x9c, 0x6e, 0x66, 0x6c, 0xcb, 0x55, 0x8d, 0x1f, 0xc6, 0x8c, 0x78, 0x00, 0x32, 0xb6, 0x65, + 0x28, 0xac, 0x85, 0xbd, 0xdb, 0x9d, 0xb6, 0x2d, 0x43, 0xee, 0x1b, 0xf6, 0xc9, 0xfb, 0x34, 0x5d, + 0x52, 0xf7, 0xc1, 0x6b, 0x53, 0xbd, 0x5e, 0x73, 0x20, 0xc7, 0x5c, 0xc1, 0xd7, 0xb2, 0x67, 0x89, + 0x0f, 0xe8, 0xe2, 0x18, 0xeb, 0x5f, 0x7b, 0x99, 0xd9, 0x4c, 0x53, 0xe6, 0x7a, 0x04, 0xc1, 0x52, + 0xff, 0xa0, 0x5d, 0x70, 0x38, 0x2c, 0x65, 0xae, 0x57, 0xfc, 0xab, 0x31, 0x80, 0x35, 0xe2, 0x59, + 0xda, 0x5f, 0xb2, 0x0a, 0xb9, 0xd4, 0x04, 0x25, 0x72, 0xe7, 0xc5, 0x61, 0x83, 0xc6, 0xef, 0x9f, + 0x73, 0xc3, 0x76, 0x57, 0x61, 0x3a, 0x08, 0x46, 0x17, 0x0b, 0x63, 0x16, 0x0f, 0xa9, 0xaa, 0x9b, + 0xd8, 0x93, 0x73, 0x37, 0x43, 0x57, 0xc5, 0x7f, 0x16, 0x83, 0x0c, 0xb5, 0x69, 0x1d, 0x7b, 0x6a, + 0x64, 0x0c, 0x63, 0xf7, 0x3e, 0x86, 0x0f, 0x01, 0x30, 0x1a, 0x57, 0x7f, 0x13, 0xf3, 0xc8, 0xca, + 0x50, 0x49, 0x53, 0x7f, 0x13, 0xa3, 0xf3, 0xbe, 0xc3, 0x13, 0x87, 0x3b, 0x5c, 0x54, 0xdd, 0xdc, + 0xed, 0x27, 0x60, 0x8a, 0xfe, 0xbb, 0xa6, 0xdb, 0x2e, 0x2f, 0xa4, 0x53, 0x66, 0xb7, 0xb3, 0x75, + 0xdb, 0x2d, 0xbe, 0x01, 0x53, 0x5b, 0xb7, 0xd9, 0xd9, 0xc8, 0x03, 0x90, 0x71, 0x2c, 0x8b, 0xaf, + 0xc9, 0xac, 0x16, 0x4a, 0x13, 0x01, 0x5d, 0x82, 0xc4, 0x79, 0x40, 0x3c, 0x38, 0x0f, 0x08, 0x0e, + 0x34, 0x12, 0x63, 0x1d, 0x68, 0x3c, 0xf9, 0x9b, 0x31, 0xc8, 0x86, 0xf2, 0x03, 0x7a, 0x0e, 0x8e, + 0x55, 0xd6, 0x36, 0xab, 0xd7, 0x95, 0xd5, 0x9a, 0x72, 0x79, 0xad, 0x7c, 0x25, 0xf8, 0x7a, 0x69, + 0xe1, 0xf8, 0x9d, 0xbb, 0xcb, 0x28, 0xa4, 0xbb, 0x6d, 0xd2, 0x73, 0x7a, 0x74, 0x06, 0xe6, 0xa3, + 0x90, 0x72, 0xa5, 0x59, 0xdf, 0xd8, 0x92, 0x62, 0x0b, 0xc7, 0xee, 0xdc, 0x5d, 0x9e, 0x0d, 0x21, + 0xca, 0x3b, 0x2e, 0x36, 0xbd, 0x7e, 0x40, 0x75, 0x73, 0x7d, 0x7d, 0x75, 0x4b, 0x8a, 0xf7, 0x01, + 0x78, 0xc2, 0x7e, 0x02, 0x66, 0xa3, 0x80, 0x8d, 0xd5, 0x35, 0x29, 0xb1, 0x80, 0xee, 0xdc, 0x5d, + 0xce, 0x87, 0xb4, 0x37, 0x74, 0x63, 0x21, 0xfd, 0x89, 0xcf, 0x2f, 0x4e, 0xfc, 0xc2, 0xcf, 0x2f, + 0xc6, 0x48, 0xcf, 0xa6, 0x23, 0x39, 0x02, 0x3d, 0x0d, 0x27, 0x9a, 0xab, 0x57, 0x36, 0xea, 0x35, + 0x65, 0xbd, 0x79, 0x45, 0x9c, 0x74, 0x8b, 0xde, 0xcd, 0xdc, 0xb9, 0xbb, 0x9c, 0xe5, 0x5d, 0x1a, + 0xa6, 0xdd, 0x90, 0xeb, 0x37, 0x36, 0xb7, 0xea, 0x52, 0x8c, 0x69, 0x37, 0x1c, 0x7c, 0xd3, 0xf2, + 0xd8, 0xff, 0x73, 0x7b, 0x16, 0x4e, 0x0e, 0xd0, 0xf6, 0x3b, 0x36, 0x7b, 0xe7, 0xee, 0xf2, 0x74, + 0xc3, 0xc1, 0x6c, 0xfe, 0x50, 0xc4, 0x0a, 0x14, 0xfa, 0x11, 0x9b, 0x8d, 0xcd, 0x66, 0x79, 0x4d, + 0x5a, 0x5e, 0x90, 0xee, 0xdc, 0x5d, 0xce, 0x89, 0x64, 0x48, 0xf4, 0x83, 0x9e, 0x7d, 0x98, 0x3b, + 0x9e, 0xf7, 0x9f, 0x82, 0x47, 0xf9, 0x19, 0xa0, 0xeb, 0xa9, 0xfb, 0xba, 0xd9, 0xf6, 0x0f, 0x6f, + 0xf9, 0x35, 0xdf, 0xf9, 0x1c, 0xe7, 0xe7, 0x8c, 0x42, 0x3a, 0xe2, 0x08, 0x77, 0xe8, 0xd3, 0xcb, + 0x85, 0x11, 0x0f, 0xf5, 0x46, 0x6f, 0x9d, 0x86, 0x1f, 0x0f, 0x2f, 0x8c, 0x38, 0x84, 0x5e, 0x38, + 0x74, 0x73, 0x57, 0xfc, 0x64, 0x0c, 0xf2, 0x57, 0x75, 0xd7, 0xb3, 0x1c, 0x5d, 0x53, 0x0d, 0xfa, + 0xcd, 0xd2, 0xf9, 0x71, 0x73, 0x6b, 0xcf, 0x54, 0x7f, 0x09, 0x52, 0x37, 0x55, 0x83, 0x25, 0xb5, + 0xf0, 0xb3, 0x80, 0x5e, 0xf7, 0x05, 0xa9, 0x4d, 0x10, 0x30, 0x58, 0xf1, 0x4b, 0x71, 0x98, 0xa1, + 0x93, 0xc1, 0x65, 0xff, 0x8e, 0x8b, 0xec, 0xb1, 0x1a, 0x90, 0x74, 0x54, 0x8f, 0x1f, 0x1a, 0x56, + 0x7e, 0x84, 0x9f, 0x03, 0x3f, 0x3e, 0xfa, 0x34, 0x77, 0xa5, 0xff, 0xa8, 0x98, 0x32, 0xa1, 0x57, + 0x20, 0xdd, 0x51, 0x6f, 0x2b, 0x94, 0x35, 0x7e, 0x1f, 0x58, 0xa7, 0x3a, 0xea, 0x6d, 0x62, 0x2b, + 0x6a, 0xc1, 0x0c, 0x21, 0xd6, 0xf6, 0x54, 0xb3, 0x8d, 0x19, 0x7f, 0xe2, 0x3e, 0xf0, 0x4f, 0x77, + 0xd4, 0xdb, 0x55, 0xca, 0x49, 0xee, 0x52, 0x4a, 0x7f, 0xfa, 0xed, 0xa5, 0x09, 0x7a, 0xcc, 0xfe, + 0xab, 0x31, 0x80, 0xc0, 0x5d, 0xe8, 0x8f, 0x83, 0xa4, 0xf9, 0x57, 0xf4, 0xf6, 0x2e, 0x1f, 0xc0, + 0x53, 0xc3, 0x06, 0xa2, 0xc7, 0xd9, 0x6c, 0x61, 0xfe, 0xe6, 0xbb, 0x4b, 0x31, 0x79, 0x46, 0xeb, + 0x19, 0x87, 0x3a, 0x64, 0xbb, 0x76, 0x4b, 0xf5, 0xb0, 0x42, 0x37, 0x71, 0xf1, 0x23, 0x2c, 0xf2, + 0xc0, 0x80, 0xa4, 0x29, 0x64, 0xfd, 0x97, 0x62, 0x90, 0xad, 0x85, 0x1e, 0xf2, 0x15, 0x60, 0xaa, + 0x63, 0x99, 0xfa, 0x3e, 0x0f, 0xbb, 0x8c, 0x2c, 0x2e, 0xd1, 0x02, 0xa4, 0xd9, 0xd7, 0x9a, 0xde, + 0x81, 0x38, 0xf1, 0x14, 0xd7, 0x04, 0x75, 0x0b, 0xef, 0xb8, 0xba, 0xf0, 0xb5, 0x2c, 0x2e, 0xc9, + 0xd6, 0xc5, 0xc5, 0x5a, 0xd7, 0xd1, 0xbd, 0x03, 0x45, 0xb3, 0x4c, 0x4f, 0xd5, 0x3c, 0xfe, 0xdd, + 0xdf, 0x8c, 0x90, 0x57, 0x99, 0x98, 0x90, 0xb4, 0xb0, 0xa7, 0xea, 0x86, 0x5b, 0x60, 0x0f, 0xc2, + 0xc4, 0x65, 0xc8, 0xdc, 0x5f, 0x4b, 0x85, 0x8f, 0xa8, 0xaa, 0x20, 0x59, 0x36, 0x76, 0x22, 0x25, + 0x25, 0x8b, 0xd0, 0xc2, 0x6f, 0x7c, 0xe5, 0x99, 0x79, 0xee, 0x6e, 0x5e, 0x54, 0xb2, 0x17, 0x5b, + 0xe5, 0x19, 0x81, 0x10, 0xb5, 0xe6, 0x6b, 0x64, 0xc0, 0xc4, 0x7e, 0xcf, 0xee, 0xee, 0x04, 0xc7, + 0x5a, 0xf3, 0x7d, 0x7e, 0x2d, 0x9b, 0x07, 0x95, 0xc2, 0x37, 0x02, 0xea, 0xe0, 0x2c, 0xe9, 0x3a, + 0x3e, 0x20, 0xa3, 0xc5, 0x79, 0x1a, 0x94, 0x86, 0x94, 0x88, 0x6f, 0xa8, 0xba, 0x21, 0x3e, 0x42, + 0x97, 0xf9, 0x15, 0x2a, 0x41, 0xca, 0xf5, 0x54, 0xaf, 0xeb, 0xf2, 0x7f, 0x16, 0x57, 0x1c, 0x16, + 0x19, 0x15, 0xcb, 0x6c, 0x35, 0xa9, 0xa6, 0xcc, 0x11, 0x68, 0x0b, 0x52, 0x9e, 0xb5, 0x8f, 0x4d, + 0xee, 0xa4, 0x23, 0x45, 0xf5, 0x80, 0x67, 0x51, 0x8c, 0x0b, 0xb5, 0x41, 0x6a, 0x61, 0x03, 0xb7, + 0x59, 0x41, 0xb4, 0xa7, 0x92, 0x7d, 0x43, 0xea, 0x3e, 0xcc, 0x9a, 0x19, 0x9f, 0xb5, 0x49, 0x49, + 0xd1, 0xf5, 0xe8, 0x63, 0x66, 0xf6, 0x9f, 0x15, 0x1f, 0x19, 0xd6, 0xff, 0x50, 0x64, 0x8a, 0xc3, + 0x84, 0xf0, 0x13, 0xe9, 0x27, 0x40, 0xea, 0x9a, 0x3b, 0x96, 0x49, 0x3f, 0x15, 0xe5, 0xc5, 0x78, + 0x9a, 0x96, 0x37, 0x33, 0xbe, 0xfc, 0x2a, 0xab, 0xca, 0xaf, 0x43, 0x3e, 0x50, 0xa5, 0x73, 0x27, + 0x73, 0x84, 0xb9, 0x33, 0xed, 0x63, 0x49, 0x2b, 0xba, 0x0a, 0x10, 0x4c, 0x4c, 0x7a, 0x3c, 0x90, + 0x1d, 0x3e, 0x86, 0xc1, 0xec, 0x16, 0xdb, 0xac, 0x00, 0x8b, 0x0c, 0x98, 0xeb, 0xe8, 0xa6, 0xe2, + 0x62, 0x63, 0x57, 0xe1, 0xae, 0x22, 0x94, 0xd9, 0xfb, 0x30, 0xb4, 0xb3, 0x1d, 0xdd, 0x6c, 0x62, + 0x63, 0xb7, 0xe6, 0xd3, 0x96, 0x72, 0x9f, 0x78, 0x7b, 0x69, 0x82, 0xcf, 0xa5, 0x89, 0x62, 0x83, + 0x1e, 0x51, 0xf3, 0x69, 0x80, 0x5d, 0x74, 0x1e, 0x32, 0xaa, 0xb8, 0xa0, 0x07, 0x07, 0x87, 0x4d, + 0xa3, 0x40, 0x95, 0xcd, 0xce, 0xb7, 0x7e, 0x67, 0x39, 0x56, 0xfc, 0xf9, 0x18, 0xa4, 0x6a, 0x37, + 0x1a, 0xaa, 0xee, 0xa0, 0x3a, 0xcc, 0x06, 0x01, 0x35, 0xee, 0xdc, 0x0c, 0x62, 0x50, 0x4c, 0xce, + 0xfa, 0xb0, 0x5d, 0xe3, 0xa1, 0x34, 0xbd, 0xfb, 0xc9, 0x9e, 0x8e, 0xd7, 0x61, 0x8a, 0x59, 0xe9, + 0xa2, 0x12, 0x4c, 0xda, 0xe4, 0x07, 0x3f, 0x91, 0x5f, 0x1c, 0x1a, 0x88, 0x54, 0xdf, 0x3f, 0x41, + 0x24, 0x90, 0xe2, 0xef, 0xc7, 0x00, 0x6a, 0x37, 0x6e, 0x6c, 0x39, 0xba, 0x6d, 0x60, 0xef, 0x7e, + 0xf5, 0x78, 0x0d, 0x8e, 0x85, 0xb6, 0x26, 0x8e, 0x36, 0x76, 0xaf, 0xe7, 0x82, 0xcd, 0x89, 0xa3, + 0x0d, 0x64, 0x6b, 0xb9, 0x9e, 0xcf, 0x96, 0x18, 0x9b, 0xad, 0xe6, 0x7a, 0x83, 0xdd, 0xd8, 0x84, + 0x6c, 0xd0, 0x7d, 0x17, 0xd5, 0x20, 0xed, 0xf1, 0xdf, 0xdc, 0x9b, 0xc5, 0xe1, 0xde, 0x14, 0x30, + 0xee, 0x51, 0x1f, 0x59, 0xfc, 0xbf, 0xc4, 0xa9, 0x7e, 0xc4, 0xfe, 0xe1, 0x0a, 0x23, 0x92, 0x7b, + 0x79, 0x6e, 0xbc, 0x1f, 0x15, 0x05, 0xe7, 0xea, 0xf1, 0xea, 0xc7, 0xe3, 0x30, 0xb7, 0x2d, 0xb2, + 0xcd, 0x1f, 0x5a, 0x4f, 0x34, 0x60, 0x0a, 0x9b, 0x9e, 0xa3, 0x53, 0x57, 0x90, 0xb1, 0x7e, 0x76, + 0xd8, 0x58, 0x0f, 0xe8, 0x0b, 0xfd, 0x9f, 0x45, 0xe2, 0x5c, 0x9b, 0xd3, 0xf4, 0x78, 0xe1, 0xdf, + 0xc5, 0xa1, 0x30, 0x0c, 0x89, 0x4e, 0xc1, 0x8c, 0xe6, 0x60, 0x2a, 0x50, 0x22, 0x87, 0x6b, 0x79, + 0x21, 0xe6, 0x49, 0x7f, 0x1d, 0x48, 0x01, 0x45, 0x02, 0x8b, 0xa8, 0x1e, 0xb9, 0x62, 0xca, 0x07, + 0x60, 0x9a, 0xf6, 0x31, 0xcc, 0xe8, 0xa6, 0xee, 0xe9, 0xaa, 0xa1, 0xec, 0xa8, 0x86, 0x6a, 0x6a, + 0xf7, 0x52, 0x59, 0xf6, 0x27, 0xea, 0x3c, 0x27, 0xad, 0x30, 0x4e, 0x74, 0x03, 0xa6, 0x04, 0x7d, + 0xf2, 0x3e, 0xd0, 0x0b, 0xb2, 0x50, 0x15, 0xf5, 0xdb, 0x71, 0x98, 0x95, 0x71, 0xeb, 0x8f, 0x96, + 0x5b, 0x7f, 0x14, 0x80, 0x4d, 0x38, 0x92, 0x07, 0xef, 0xc1, 0xb3, 0xfd, 0x13, 0x38, 0xc3, 0xf8, + 0x6a, 0xae, 0x17, 0xf2, 0xed, 0x37, 0xe2, 0x90, 0x0b, 0xfb, 0xf6, 0x8f, 0xc0, 0xba, 0x80, 0x56, + 0x83, 0x6c, 0x90, 0xe4, 0xff, 0x6d, 0x75, 0x48, 0x36, 0xe8, 0x8b, 0xba, 0xc3, 0xd3, 0xc0, 0xf7, + 0xe3, 0x90, 0x6a, 0xa8, 0x8e, 0xda, 0x71, 0xd1, 0xb5, 0xbe, 0x02, 0x4e, 0x9c, 0xb2, 0xf5, 0xfd, + 0x4f, 0x6d, 0xbe, 0xa9, 0x67, 0x21, 0xf7, 0xe9, 0x01, 0xf5, 0xdb, 0x63, 0x90, 0x27, 0x5b, 0xc4, + 0xd0, 0x03, 0xf9, 0x38, 0x7d, 0xcc, 0x48, 0xf6, 0x78, 0xc1, 0xd3, 0x20, 0xb4, 0x04, 0x59, 0xa2, + 0x16, 0x24, 0x3a, 0xa2, 0x03, 0x1d, 0xf5, 0x76, 0x9d, 0x49, 0xd0, 0x33, 0x80, 0xf6, 0xfc, 0x4d, + 0xbb, 0x12, 0xb8, 0x80, 0xe8, 0xcd, 0x06, 0x2d, 0x42, 0xfd, 0x21, 0x00, 0x62, 0x85, 0xc2, 0x5e, + 0xf2, 0x62, 0x7b, 0x9c, 0x0c, 0x91, 0xd4, 0xe8, 0x8b, 0x5e, 0x3f, 0xc1, 0x6a, 0xc1, 0x9e, 0xdd, + 0x23, 0x2f, 0xc3, 0xd7, 0x8e, 0x16, 0xa9, 0xdf, 0x7f, 0x77, 0x69, 0xe1, 0x40, 0xed, 0x18, 0xa5, + 0xe2, 0x00, 0xca, 0x22, 0xad, 0x0d, 0xa3, 0xbb, 0xce, 0x50, 0x04, 0x7f, 0x3e, 0x06, 0x28, 0x48, + 0xb9, 0x32, 0x76, 0x6d, 0xb2, 0xad, 0x21, 0x45, 0x6f, 0xa8, 0x42, 0x8d, 0x1d, 0x5e, 0xf4, 0x06, + 0x78, 0x51, 0xf4, 0x86, 0x66, 0xc4, 0xc5, 0x20, 0xc1, 0xc5, 0xf9, 0x18, 0x0e, 0x78, 0x43, 0x6f, + 0xa5, 0x6a, 0xe9, 0x02, 0xdd, 0x97, 0xc3, 0x26, 0x8a, 0xbf, 0x1d, 0x83, 0x93, 0x7d, 0xd1, 0xe4, + 0x1b, 0xfb, 0x27, 0x00, 0x39, 0xa1, 0x46, 0xfe, 0x6f, 0xf3, 0x98, 0xd1, 0x47, 0x0e, 0xce, 0x59, + 0xa7, 0x2f, 0x57, 0x7e, 0x58, 0x39, 0x9a, 0xbd, 0xb9, 0xf7, 0x4f, 0x62, 0x30, 0x1f, 0x36, 0xc6, + 0xef, 0xd6, 0x06, 0xe4, 0xc2, 0xb6, 0xf0, 0x0e, 0x3d, 0x3a, 0x4e, 0x87, 0x78, 0x5f, 0x22, 0x78, + 0xf4, 0x72, 0x30, 0x71, 0xd9, 0x61, 0xd1, 0x73, 0x63, 0xfb, 0x46, 0xd8, 0xd4, 0x3b, 0x81, 0x93, + 0xa2, 0x8a, 0x49, 0x36, 0x2c, 0xcb, 0x40, 0x7f, 0x12, 0x66, 0x4d, 0xcb, 0x53, 0x48, 0x94, 0xe3, + 0x96, 0xc2, 0x77, 0xae, 0x2c, 0xfb, 0xbd, 0x7c, 0x34, 0x97, 0x7d, 0xe7, 0xdd, 0xa5, 0x7e, 0xaa, + 0x1e, 0x3f, 0xce, 0x98, 0x96, 0x57, 0xa1, 0xed, 0x5b, 0x6c, 0x5f, 0xeb, 0xc0, 0x74, 0xf4, 0xd6, + 0x2c, 0x5b, 0xae, 0x1f, 0xf9, 0xd6, 0xd3, 0x87, 0xdd, 0x36, 0xb7, 0x13, 0xba, 0x27, 0x7b, 0xa7, + 0xe9, 0x7b, 0x6f, 0x2f, 0xc5, 0x9e, 0xfc, 0x6a, 0x0c, 0x20, 0xd8, 0xc2, 0xa3, 0xa7, 0xe1, 0x44, + 0x65, 0x73, 0xa3, 0xa6, 0x34, 0xb7, 0xca, 0x5b, 0xdb, 0xcd, 0xe8, 0x9b, 0xcf, 0xe2, 0x4c, 0xd8, + 0xb5, 0xb1, 0xa6, 0xef, 0xea, 0xb8, 0x85, 0x1e, 0x87, 0xf9, 0xa8, 0x36, 0xb9, 0xaa, 0xd7, 0xa4, + 0xd8, 0x42, 0xee, 0xce, 0xdd, 0xe5, 0x34, 0xab, 0x8e, 0x70, 0x0b, 0x9d, 0x86, 0x63, 0xfd, 0x7a, + 0xab, 0x1b, 0x57, 0xa4, 0xf8, 0xc2, 0xf4, 0x9d, 0xbb, 0xcb, 0x19, 0xbf, 0x8c, 0x42, 0x45, 0x40, + 0x61, 0x4d, 0xce, 0x97, 0x58, 0x80, 0x3b, 0x77, 0x97, 0x53, 0xcc, 0x6d, 0x0b, 0xc9, 0x4f, 0x7c, + 0x7e, 0x71, 0xa2, 0x72, 0x79, 0xe8, 0xa9, 0xef, 0xd3, 0x87, 0x7a, 0xec, 0xb6, 0x7f, 0x92, 0x1b, + 0x39, 0xea, 0xfd, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x8c, 0xb0, 0x45, 0xd1, 0x08, 0x66, 0x00, 0x00, } r := bytes.NewReader(gzipped) @@ -2219,13 +2214,6 @@ func (m *Validator) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.EvmAddress) > 0 { - i -= len(m.EvmAddress) - copy(dAtA[i:], m.EvmAddress) - i = encodeVarintStaking(dAtA, i, uint64(len(m.EvmAddress))) - i-- - dAtA[i] = 0x62 - } { size := m.MinSelfDelegation.Size() i -= size @@ -3140,10 +3128,6 @@ func (m *Validator) Size() (n int) { n += 1 + l + sovStaking(uint64(l)) l = m.MinSelfDelegation.Size() n += 1 + l + sovStaking(uint64(l)) - l = len(m.EvmAddress) - if l > 0 { - n += 1 + l + sovStaking(uint64(l)) - } return n } @@ -4392,38 +4376,6 @@ func (m *Validator) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 12: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EvmAddress", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowStaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthStaking - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthStaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.EvmAddress = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipStaking(dAtA[iNdEx:]) diff --git a/x/staking/types/tx.pb.go b/x/staking/types/tx.pb.go index e73d467092a7..de558ee1a458 100644 --- a/x/staking/types/tx.pb.go +++ b/x/staking/types/tx.pb.go @@ -11,7 +11,7 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types1 "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/cosmos-sdk/types/msgservice" - _ "github.com/cosmos/gogoproto/gogoproto" + _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" @@ -46,9 +46,6 @@ type MsgCreateValidator struct { ValidatorAddress string `protobuf:"bytes,5,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` Pubkey *types.Any `protobuf:"bytes,6,opt,name=pubkey,proto3" json:"pubkey,omitempty"` Value types1.Coin `protobuf:"bytes,7,opt,name=value,proto3" json:"value"` - // This is a hex encoded 0x EVM public key that will be used by this - // validator on the target EVM chain. - EvmAddress string `protobuf:"bytes,8,opt,name=evm_address,json=evmAddress,proto3" json:"evm_address,omitempty"` } func (m *MsgCreateValidator) Reset() { *m = MsgCreateValidator{} } @@ -131,7 +128,6 @@ type MsgEditValidator struct { // REF: #2373 CommissionRate *github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,3,opt,name=commission_rate,json=commissionRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"commission_rate,omitempty"` MinSelfDelegation *github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,4,opt,name=min_self_delegation,json=minSelfDelegation,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"min_self_delegation,omitempty"` - EvmAddress string `protobuf:"bytes,5,opt,name=evm_address,json=evmAddress,proto3" json:"evm_address,omitempty"` } func (m *MsgEditValidator) Reset() { *m = MsgEditValidator{} } @@ -655,67 +651,66 @@ func init() { func init() { proto.RegisterFile("cosmos/staking/v1beta1/tx.proto", fileDescriptor_0926ef28816b35ab) } var fileDescriptor_0926ef28816b35ab = []byte{ - // 955 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x57, 0xcf, 0x6f, 0x1b, 0x45, - 0x14, 0xf6, 0xc6, 0x71, 0x08, 0x2f, 0x6a, 0xd3, 0x6e, 0x12, 0x70, 0x56, 0x95, 0x5d, 0xb9, 0xa5, - 0x8d, 0x0a, 0x59, 0xd3, 0x50, 0x04, 0xaa, 0x7a, 0xa9, 0xeb, 0x56, 0x54, 0xc5, 0x12, 0xda, 0x50, - 0x0e, 0x08, 0xc9, 0xda, 0x1f, 0x93, 0xf5, 0xc8, 0xbb, 0x33, 0xee, 0xce, 0xd8, 0xaa, 0xaf, 0x3d, - 0x71, 0xa3, 0x7f, 0x42, 0xcf, 0x88, 0x03, 0x87, 0xfc, 0x11, 0x15, 0xe2, 0x50, 0xf5, 0x84, 0x38, - 0x14, 0x94, 0x1c, 0xe0, 0x88, 0xf8, 0x0b, 0xd0, 0xce, 0xce, 0x8e, 0x7f, 0x6f, 0x37, 0x28, 0x3d, - 0x20, 0x4e, 0x5e, 0xcd, 0x7c, 0xef, 0x7b, 0x6f, 0xbf, 0xef, 0xcd, 0xbc, 0x35, 0x54, 0x5d, 0xca, - 0x42, 0xca, 0xea, 0x8c, 0xdb, 0x5d, 0x4c, 0xfc, 0xfa, 0xe0, 0xba, 0x83, 0xb8, 0x7d, 0xbd, 0xce, - 0x1f, 0x9b, 0xbd, 0x88, 0x72, 0xaa, 0xbf, 0x93, 0x00, 0x4c, 0x09, 0x30, 0x25, 0xc0, 0xd8, 0xf6, - 0x29, 0xf5, 0x03, 0x54, 0x17, 0x28, 0xa7, 0x7f, 0x50, 0xb7, 0xc9, 0x30, 0x09, 0x31, 0xaa, 0xd3, - 0x5b, 0x1c, 0x87, 0x88, 0x71, 0x3b, 0xec, 0x49, 0xc0, 0xa6, 0x4f, 0x7d, 0x2a, 0x1e, 0xeb, 0xf1, - 0x93, 0x5c, 0xdd, 0x4e, 0x32, 0xb5, 0x93, 0x0d, 0x99, 0x36, 0xd9, 0xaa, 0xc8, 0x2a, 0x1d, 0x9b, - 0x21, 0x55, 0xa2, 0x4b, 0x31, 0x91, 0xfb, 0x97, 0x17, 0xbc, 0x45, 0x5a, 0x74, 0x82, 0x7a, 0x57, - 0xa2, 0x42, 0x16, 0x23, 0xe2, 0x9f, 0x64, 0xa3, 0xf6, 0xa4, 0x04, 0x7a, 0x8b, 0xf9, 0x77, 0x22, - 0x64, 0x73, 0xf4, 0x95, 0x1d, 0x60, 0xcf, 0xe6, 0x34, 0xd2, 0x1f, 0xc0, 0x9a, 0x87, 0x98, 0x1b, - 0xe1, 0x1e, 0xc7, 0x94, 0x94, 0xb5, 0x8b, 0xda, 0xce, 0xda, 0xde, 0x25, 0x73, 0xbe, 0x20, 0x66, - 0x73, 0x04, 0x6d, 0x2c, 0x3f, 0x7f, 0x55, 0x2d, 0x58, 0xe3, 0xd1, 0x7a, 0x0b, 0xc0, 0xa5, 0x61, - 0x88, 0x19, 0x8b, 0xb9, 0x96, 0x04, 0xd7, 0xd5, 0x45, 0x5c, 0x77, 0x14, 0xd2, 0xb2, 0x39, 0x62, - 0x92, 0x6f, 0x8c, 0x40, 0x0f, 0x60, 0x23, 0xc4, 0xa4, 0xcd, 0x50, 0x70, 0xd0, 0xf6, 0x50, 0x80, - 0x7c, 0x5b, 0xd4, 0x58, 0xbc, 0xa8, 0xed, 0xbc, 0xdd, 0xb8, 0x15, 0xc3, 0x7f, 0x7d, 0x55, 0xbd, - 0xe2, 0x63, 0xde, 0xe9, 0x3b, 0xa6, 0x4b, 0x43, 0xa9, 0xa7, 0xfc, 0xd9, 0x65, 0x5e, 0xb7, 0xce, - 0x87, 0x3d, 0xc4, 0xcc, 0xfb, 0x84, 0xbf, 0x3c, 0xdc, 0x05, 0x59, 0xc8, 0x7d, 0xc2, 0xad, 0xf3, - 0x21, 0x26, 0xfb, 0x28, 0x38, 0x68, 0x2a, 0x5a, 0xfd, 0x2e, 0x9c, 0x97, 0x49, 0x68, 0xd4, 0xb6, - 0x3d, 0x2f, 0x42, 0x8c, 0x95, 0x97, 0x45, 0xae, 0xf2, 0xcb, 0xc3, 0xdd, 0x4d, 0x19, 0x7d, 0x3b, - 0xd9, 0xd9, 0xe7, 0x11, 0x26, 0xbe, 0x75, 0x4e, 0x85, 0xc8, 0xf5, 0x98, 0x66, 0x90, 0xaa, 0xab, - 0x68, 0x4a, 0xaf, 0xa3, 0x51, 0x21, 0x29, 0xcd, 0x3d, 0x58, 0xe9, 0xf5, 0x9d, 0x2e, 0x1a, 0x96, - 0x57, 0x84, 0x8c, 0x9b, 0x66, 0xd2, 0x70, 0x66, 0xda, 0x70, 0xe6, 0x6d, 0x32, 0x6c, 0x94, 0x7f, - 0x1a, 0x31, 0xba, 0xd1, 0xb0, 0xc7, 0xa9, 0xf9, 0x45, 0xdf, 0x79, 0x80, 0x86, 0x96, 0x8c, 0xd6, - 0x3f, 0x86, 0xd2, 0xc0, 0x0e, 0xfa, 0xa8, 0xfc, 0x96, 0xa0, 0xd9, 0x4e, 0xdd, 0x88, 0xbb, 0x6c, - 0xcc, 0x0a, 0x9c, 0xfa, 0x99, 0xa0, 0xf5, 0x2a, 0xac, 0xa1, 0x41, 0xa8, 0xea, 0x5f, 0x8d, 0xeb, - 0xb7, 0x00, 0x0d, 0x42, 0x59, 0xdf, 0xcd, 0x1b, 0xdf, 0x3e, 0xab, 0x16, 0xfe, 0x7c, 0x56, 0x2d, - 0x3c, 0xf9, 0xe3, 0xc7, 0x6b, 0xb3, 0xc2, 0x89, 0xd5, 0x19, 0x1d, 0x6a, 0x17, 0xc0, 0x98, 0xed, - 0x41, 0x0b, 0xb1, 0x1e, 0x25, 0x0c, 0xd5, 0x0e, 0x8b, 0x70, 0xae, 0xc5, 0xfc, 0xbb, 0x1e, 0xe6, - 0x6f, 0xa8, 0x41, 0xe7, 0x9a, 0xb3, 0x74, 0x62, 0x73, 0x6c, 0x58, 0x1f, 0xb5, 0x69, 0x3b, 0xb2, - 0x39, 0x92, 0x4d, 0xf9, 0x69, 0xce, 0x86, 0x6c, 0x22, 0x77, 0xac, 0x21, 0x9b, 0xc8, 0xb5, 0xce, - 0xba, 0x13, 0xc7, 0x41, 0xef, 0xcc, 0xef, 0xfd, 0xe5, 0x13, 0xa5, 0xc9, 0xd5, 0xf7, 0x53, 0x56, - 0x97, 0x66, 0xac, 0xae, 0x4c, 0x58, 0x3d, 0x6b, 0xaa, 0x01, 0xe5, 0x69, 0xd7, 0x94, 0xa5, 0x7f, - 0x69, 0xb0, 0xd6, 0x62, 0xbe, 0x4c, 0x87, 0xe6, 0x1f, 0x32, 0xed, 0x74, 0x0e, 0xd9, 0xc9, 0x7d, - 0xfc, 0x04, 0x56, 0xec, 0x90, 0xf6, 0x09, 0x17, 0xf6, 0xe5, 0x38, 0x1d, 0x12, 0x7e, 0xd3, 0x58, - 0xdc, 0xf9, 0xb5, 0x2d, 0xd8, 0x18, 0x7b, 0x63, 0xa5, 0xc4, 0xcf, 0x4b, 0xe2, 0xfe, 0x6d, 0x20, - 0x1f, 0x13, 0x0b, 0x79, 0xa7, 0x2c, 0xc8, 0xe7, 0xb0, 0x35, 0x12, 0x84, 0x45, 0x6e, 0x6e, 0x51, - 0x36, 0x54, 0xd8, 0x7e, 0xe4, 0xce, 0x65, 0xf3, 0x18, 0x57, 0x6c, 0xc5, 0xdc, 0x6c, 0x4d, 0xc6, - 0x67, 0x55, 0x5e, 0x3e, 0x3d, 0x95, 0xbb, 0xe2, 0x26, 0x99, 0x52, 0x33, 0x15, 0x5b, 0x6f, 0x89, - 0x03, 0xda, 0x0b, 0x50, 0xdc, 0xe1, 0xed, 0x78, 0x34, 0xcb, 0x8b, 0xc3, 0x98, 0xb9, 0x46, 0xbf, - 0x4c, 0xe7, 0x76, 0x63, 0x35, 0x4e, 0xfe, 0xf4, 0xb7, 0xaa, 0x26, 0x0e, 0xa3, 0x0c, 0x8e, 0xb7, - 0x6b, 0x7f, 0x6b, 0x70, 0xa6, 0xc5, 0xfc, 0x87, 0xc4, 0xfb, 0x1f, 0xf5, 0xf1, 0x01, 0x6c, 0x4d, - 0xbc, 0xf3, 0x9b, 0x12, 0xf7, 0xfb, 0x25, 0xb8, 0x10, 0x0f, 0x05, 0x9b, 0xb8, 0x28, 0x78, 0x48, - 0x1c, 0x4a, 0x3c, 0x4c, 0xfc, 0xd7, 0x0d, 0xe6, 0xff, 0x9c, 0xd6, 0xfa, 0x55, 0x58, 0x77, 0xe3, - 0xc1, 0x17, 0x8b, 0xd6, 0x41, 0xd8, 0xef, 0x24, 0xe7, 0xa1, 0x68, 0x9d, 0x4d, 0x97, 0x3f, 0x13, - 0xab, 0x99, 0xa6, 0x5c, 0x81, 0xcb, 0x59, 0x5a, 0xa5, 0x1e, 0xed, 0xfd, 0x50, 0x82, 0x62, 0x8b, - 0xf9, 0xfa, 0x23, 0x58, 0x9f, 0xfe, 0xe2, 0xbb, 0xb6, 0x68, 0x76, 0xce, 0x4e, 0x66, 0x63, 0x2f, - 0x3f, 0x56, 0xb5, 0x47, 0x17, 0xce, 0x4c, 0x4e, 0xf0, 0x9d, 0x0c, 0x92, 0x09, 0xa4, 0xf1, 0x61, - 0x5e, 0xa4, 0x4a, 0xf6, 0x0d, 0xac, 0xaa, 0xd9, 0x72, 0x29, 0x23, 0x3a, 0x05, 0x19, 0xef, 0xe7, - 0x00, 0x29, 0xf6, 0x47, 0xb0, 0x3e, 0x7d, 0x5f, 0x67, 0xa9, 0x37, 0x85, 0xcd, 0x54, 0x6f, 0xd1, - 0xcd, 0xe5, 0x00, 0x8c, 0x5d, 0x33, 0xef, 0x65, 0x30, 0x8c, 0x60, 0xc6, 0x6e, 0x2e, 0x98, 0xca, - 0xf1, 0x9d, 0x06, 0xdb, 0x8b, 0x8f, 0xdb, 0x8d, 0x2c, 0xcf, 0x17, 0x45, 0x19, 0xb7, 0xfe, 0x4d, - 0x54, 0x5a, 0x51, 0xe3, 0xde, 0xf3, 0xa3, 0x8a, 0xf6, 0xe2, 0xa8, 0xa2, 0xfd, 0x7e, 0x54, 0xd1, - 0x9e, 0x1e, 0x57, 0x0a, 0x2f, 0x8e, 0x2b, 0x85, 0x5f, 0x8e, 0x2b, 0x85, 0xaf, 0x3f, 0xc8, 0xfc, - 0xcc, 0x79, 0xac, 0xfe, 0x0d, 0x89, 0x0f, 0x1e, 0x67, 0x45, 0xdc, 0x3c, 0x1f, 0xfd, 0x13, 0x00, - 0x00, 0xff, 0xff, 0x9e, 0x10, 0xd4, 0xf8, 0xf2, 0x0d, 0x00, 0x00, + // 936 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x57, 0xcf, 0x6f, 0xdc, 0x44, + 0x14, 0x5e, 0x67, 0x37, 0xa1, 0x4c, 0xd4, 0xa6, 0x75, 0x12, 0xd8, 0x58, 0xd5, 0x6e, 0xb5, 0x2d, + 0x6d, 0x54, 0x88, 0x97, 0x86, 0x22, 0x50, 0xd4, 0x4b, 0xb7, 0xdb, 0x8a, 0xaa, 0xac, 0x84, 0x1c, + 0xca, 0x01, 0x21, 0xad, 0xc6, 0xf6, 0x64, 0x32, 0x5a, 0x7b, 0xc6, 0xf5, 0xcc, 0x46, 0xdd, 0x2b, + 0x27, 0x6e, 0x54, 0xe2, 0x1f, 0xe8, 0x19, 0x71, 0xe0, 0xd0, 0x3f, 0xa2, 0x42, 0x1c, 0xaa, 0x9e, + 0x10, 0x87, 0x02, 0xc9, 0x01, 0x8e, 0x88, 0xbf, 0x00, 0x79, 0x3c, 0x9e, 0xfd, 0xed, 0x3a, 0x28, + 0x3d, 0xa0, 0x9e, 0xd6, 0x9a, 0xf9, 0xde, 0xf7, 0xc6, 0xdf, 0xfb, 0xe6, 0x3d, 0x2f, 0xa8, 0x7b, + 0x8c, 0x87, 0x8c, 0x37, 0xb9, 0x80, 0x3d, 0x42, 0x71, 0xf3, 0xe0, 0x9a, 0x8b, 0x04, 0xbc, 0xd6, + 0x14, 0x0f, 0xed, 0x28, 0x66, 0x82, 0x99, 0x6f, 0xa5, 0x00, 0x5b, 0x01, 0x6c, 0x05, 0xb0, 0x36, + 0x30, 0x63, 0x38, 0x40, 0x4d, 0x89, 0x72, 0xfb, 0x7b, 0x4d, 0x48, 0x07, 0x69, 0x88, 0x55, 0x9f, + 0xdc, 0x12, 0x24, 0x44, 0x5c, 0xc0, 0x30, 0x52, 0x80, 0x35, 0xcc, 0x30, 0x93, 0x8f, 0xcd, 0xe4, + 0x49, 0xad, 0x6e, 0xa4, 0x99, 0xba, 0xe9, 0x86, 0x4a, 0x9b, 0x6e, 0xd5, 0xd4, 0x29, 0x5d, 0xc8, + 0x91, 0x3e, 0xa2, 0xc7, 0x08, 0x55, 0xfb, 0x97, 0xe6, 0xbc, 0x45, 0x76, 0xe8, 0x14, 0xf5, 0xb6, + 0x42, 0x85, 0x3c, 0x41, 0x24, 0x3f, 0xe9, 0x46, 0xe3, 0x8f, 0x0a, 0x30, 0x3b, 0x1c, 0xdf, 0x8a, + 0x11, 0x14, 0xe8, 0x0b, 0x18, 0x10, 0x1f, 0x0a, 0x16, 0x9b, 0xf7, 0xc0, 0xb2, 0x8f, 0xb8, 0x17, + 0x93, 0x48, 0x10, 0x46, 0xab, 0xc6, 0x05, 0x63, 0x73, 0x79, 0xfb, 0xa2, 0x3d, 0x5b, 0x10, 0xbb, + 0x3d, 0x84, 0xb6, 0x2a, 0x4f, 0x5f, 0xd4, 0x4b, 0xce, 0x68, 0xb4, 0xd9, 0x01, 0xc0, 0x63, 0x61, + 0x48, 0x38, 0x4f, 0xb8, 0x16, 0x24, 0xd7, 0x95, 0x79, 0x5c, 0xb7, 0x34, 0xd2, 0x81, 0x02, 0x71, + 0xc5, 0x37, 0x42, 0x60, 0x06, 0x60, 0x35, 0x24, 0xb4, 0xcb, 0x51, 0xb0, 0xd7, 0xf5, 0x51, 0x80, + 0x30, 0x94, 0x67, 0x2c, 0x5f, 0x30, 0x36, 0xdf, 0x6c, 0xdd, 0x48, 0xe0, 0xbf, 0xbe, 0xa8, 0x5f, + 0xc6, 0x44, 0xec, 0xf7, 0x5d, 0xdb, 0x63, 0xa1, 0xd2, 0x53, 0xfd, 0x6c, 0x71, 0xbf, 0xd7, 0x14, + 0x83, 0x08, 0x71, 0xfb, 0x2e, 0x15, 0xcf, 0x9f, 0x6c, 0x01, 0x75, 0x90, 0xbb, 0x54, 0x38, 0xe7, + 0x42, 0x42, 0x77, 0x51, 0xb0, 0xd7, 0xd6, 0xb4, 0xe6, 0x6d, 0x70, 0x4e, 0x25, 0x61, 0x71, 0x17, + 0xfa, 0x7e, 0x8c, 0x38, 0xaf, 0x56, 0x64, 0xae, 0xea, 0xf3, 0x27, 0x5b, 0x6b, 0x2a, 0xfa, 0x66, + 0xba, 0xb3, 0x2b, 0x62, 0x42, 0xb1, 0x73, 0x56, 0x87, 0xa8, 0xf5, 0x84, 0xe6, 0x20, 0x53, 0x57, + 0xd3, 0x2c, 0xbe, 0x8c, 0x46, 0x87, 0x64, 0x34, 0x77, 0xc0, 0x52, 0xd4, 0x77, 0x7b, 0x68, 0x50, + 0x5d, 0x92, 0x32, 0xae, 0xd9, 0xa9, 0xe1, 0xec, 0xcc, 0x70, 0xf6, 0x4d, 0x3a, 0x68, 0x55, 0x7f, + 0x1a, 0x32, 0x7a, 0xf1, 0x20, 0x12, 0xcc, 0xfe, 0xac, 0xef, 0xde, 0x43, 0x03, 0x47, 0x45, 0x9b, + 0x1f, 0x82, 0xc5, 0x03, 0x18, 0xf4, 0x51, 0xf5, 0x0d, 0x49, 0xb3, 0x91, 0x55, 0x23, 0x71, 0xd9, + 0x48, 0x29, 0x48, 0x56, 0xcf, 0x14, 0xbd, 0x73, 0xfd, 0x9b, 0xc7, 0xf5, 0xd2, 0x5f, 0x8f, 0xeb, + 0xa5, 0xaf, 0xff, 0xfc, 0xf1, 0xea, 0xb4, 0x2e, 0x72, 0x75, 0xea, 0x35, 0x1b, 0xe7, 0x81, 0x35, + 0x6d, 0x31, 0x07, 0xf1, 0x88, 0x51, 0x8e, 0x1a, 0xdf, 0x95, 0xc1, 0xd9, 0x0e, 0xc7, 0xb7, 0x7d, + 0x22, 0x5e, 0x91, 0xff, 0x66, 0x6a, 0xbf, 0x70, 0x6c, 0xed, 0x21, 0x58, 0x19, 0xba, 0xb0, 0x1b, + 0x43, 0x81, 0x94, 0xe7, 0x3e, 0x2e, 0xe8, 0xb7, 0x36, 0xf2, 0x46, 0xfc, 0xd6, 0x46, 0x9e, 0x73, + 0xc6, 0x1b, 0x73, 0xbb, 0xb9, 0x3f, 0xdb, 0xda, 0x95, 0x63, 0xa5, 0x29, 0x62, 0xeb, 0x9d, 0xda, + 0x58, 0x25, 0xa7, 0x6b, 0x66, 0x81, 0xea, 0x64, 0x51, 0x74, 0xc5, 0xfe, 0x36, 0xc0, 0x72, 0x87, + 0x63, 0xc5, 0x86, 0x66, 0x5f, 0x11, 0xe3, 0x64, 0xae, 0xc8, 0xf1, 0xcb, 0xf4, 0x11, 0x58, 0x82, + 0x21, 0xeb, 0x53, 0x21, 0xab, 0x53, 0xc0, 0xdb, 0x0a, 0xbe, 0x63, 0xcd, 0x37, 0x76, 0x63, 0x1d, + 0xac, 0x8e, 0xbc, 0xb1, 0x56, 0xe2, 0xe7, 0x05, 0xd9, 0x3d, 0x5b, 0x08, 0x13, 0xea, 0x20, 0xff, + 0x84, 0x05, 0xf9, 0x14, 0xac, 0x0f, 0x05, 0xe1, 0xb1, 0x57, 0x58, 0x94, 0x55, 0x1d, 0xb6, 0x1b, + 0x7b, 0x33, 0xd9, 0x7c, 0x2e, 0x34, 0x5b, 0xb9, 0x30, 0x5b, 0x9b, 0x8b, 0x69, 0x95, 0x2b, 0x27, + 0xa7, 0x72, 0x4f, 0x36, 0x8a, 0x09, 0x35, 0x33, 0xb1, 0xcd, 0x8e, 0xbc, 0x7f, 0x51, 0x80, 0x12, + 0x03, 0x77, 0x93, 0xc1, 0xaa, 0xfa, 0x82, 0x35, 0xd5, 0x04, 0x3f, 0xcf, 0xa6, 0x6e, 0xeb, 0x54, + 0x92, 0xfc, 0xd1, 0x6f, 0x75, 0x43, 0xde, 0x35, 0x15, 0x9c, 0x6c, 0x37, 0xfe, 0x31, 0xc0, 0xe9, + 0x0e, 0xc7, 0xf7, 0xa9, 0xff, 0x1a, 0xf9, 0x78, 0x0f, 0xac, 0x8f, 0xbd, 0xf3, 0xab, 0x12, 0xf7, + 0xfb, 0x05, 0x70, 0x3e, 0xe9, 0xf9, 0x90, 0x7a, 0x28, 0xb8, 0x4f, 0x5d, 0x46, 0x7d, 0x42, 0xf1, + 0xcb, 0xc6, 0xea, 0xff, 0x4e, 0x6b, 0xf3, 0x0a, 0x58, 0xf1, 0x92, 0xb9, 0x96, 0x88, 0xb6, 0x8f, + 0x08, 0xde, 0x4f, 0xef, 0x43, 0xd9, 0x39, 0x93, 0x2d, 0x7f, 0x22, 0x57, 0x73, 0x8b, 0x72, 0x19, + 0x5c, 0xca, 0xd3, 0x2a, 0xab, 0xd1, 0xf6, 0x0f, 0x8b, 0xa0, 0xdc, 0xe1, 0xd8, 0x7c, 0x00, 0x56, + 0x26, 0xbf, 0xd7, 0xae, 0xce, 0x1b, 0x8d, 0xd3, 0x83, 0xd7, 0xda, 0x2e, 0x8e, 0xd5, 0xf6, 0xe8, + 0x81, 0xd3, 0xe3, 0x03, 0x7a, 0x33, 0x87, 0x64, 0x0c, 0x69, 0xbd, 0x5f, 0x14, 0xa9, 0x93, 0x7d, + 0x05, 0x4e, 0xe9, 0xd9, 0x72, 0x31, 0x27, 0x3a, 0x03, 0x59, 0xef, 0x16, 0x00, 0x69, 0xf6, 0x07, + 0x60, 0x65, 0xb2, 0x5f, 0xe7, 0xa9, 0x37, 0x81, 0xcd, 0x55, 0x6f, 0x5e, 0xe7, 0x72, 0x01, 0x18, + 0x69, 0x33, 0xef, 0xe4, 0x30, 0x0c, 0x61, 0xd6, 0x56, 0x21, 0x98, 0xce, 0xf1, 0xad, 0x01, 0x36, + 0xe6, 0x5f, 0xb7, 0xeb, 0x79, 0x35, 0x9f, 0x17, 0x65, 0xdd, 0xf8, 0x2f, 0x51, 0xd9, 0x89, 0x5a, + 0x77, 0x9e, 0x1e, 0xd6, 0x8c, 0x67, 0x87, 0x35, 0xe3, 0xf7, 0xc3, 0x9a, 0xf1, 0xe8, 0xa8, 0x56, + 0x7a, 0x76, 0x54, 0x2b, 0xfd, 0x72, 0x54, 0x2b, 0x7d, 0xf9, 0x5e, 0xee, 0x57, 0xcc, 0x43, 0xfd, + 0x5f, 0x46, 0x7e, 0xcf, 0xb8, 0x4b, 0xb2, 0xf3, 0x7c, 0xf0, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x2b, 0xfb, 0x94, 0x91, 0xb0, 0x0d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1022,13 +1017,6 @@ func (m *MsgCreateValidator) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.EvmAddress) > 0 { - i -= len(m.EvmAddress) - copy(dAtA[i:], m.EvmAddress) - i = encodeVarintTx(dAtA, i, uint64(len(m.EvmAddress))) - i-- - dAtA[i] = 0x42 - } { size, err := m.Value.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -1141,13 +1129,6 @@ func (m *MsgEditValidator) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.EvmAddress) > 0 { - i -= len(m.EvmAddress) - copy(dAtA[i:], m.EvmAddress) - i = encodeVarintTx(dAtA, i, uint64(len(m.EvmAddress))) - i-- - dAtA[i] = 0x2a - } if m.MinSelfDelegation != nil { { size := m.MinSelfDelegation.Size() @@ -1560,10 +1541,6 @@ func (m *MsgCreateValidator) Size() (n int) { } l = m.Value.Size() n += 1 + l + sovTx(uint64(l)) - l = len(m.EvmAddress) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } return n } @@ -1596,10 +1573,6 @@ func (m *MsgEditValidator) Size() (n int) { l = m.MinSelfDelegation.Size() n += 1 + l + sovTx(uint64(l)) } - l = len(m.EvmAddress) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } return n } @@ -2003,38 +1976,6 @@ func (m *MsgCreateValidator) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EvmAddress", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.EvmAddress = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -2272,38 +2213,6 @@ func (m *MsgEditValidator) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EvmAddress", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.EvmAddress = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) diff --git a/x/staking/types/validator.go b/x/staking/types/validator.go index c209fc5c62e8..421be9f95356 100644 --- a/x/staking/types/validator.go +++ b/x/staking/types/validator.go @@ -8,7 +8,6 @@ import ( "time" "cosmossdk.io/math" - "github.com/ethereum/go-ethereum/common" abci "github.com/tendermint/tendermint/abci/types" tmprotocrypto "github.com/tendermint/tendermint/proto/tendermint/crypto" "sigs.k8s.io/yaml" @@ -42,7 +41,7 @@ var _ ValidatorI = Validator{} // NewValidator constructs a new Validator // //nolint:interfacer -func NewValidator(operator sdk.ValAddress, pubKey cryptotypes.PubKey, description Description, evmAddress common.Address) (Validator, error) { +func NewValidator(operator sdk.ValAddress, pubKey cryptotypes.PubKey, description Description) (Validator, error) { pkAny, err := codectypes.NewAnyWithValue(pubKey) if err != nil { return Validator{}, err @@ -60,7 +59,6 @@ func NewValidator(operator sdk.ValAddress, pubKey cryptotypes.PubKey, descriptio UnbondingTime: time.Unix(0, 0).UTC(), Commission: NewCommission(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()), MinSelfDelegation: sdk.OneInt(), - EvmAddress: evmAddress.Hex(), }, nil } diff --git a/x/staking/types/validator_test.go b/x/staking/types/validator_test.go index d9a172cc3b46..6e3172e51db2 100644 --- a/x/staking/types/validator_test.go +++ b/x/staking/types/validator_test.go @@ -5,7 +5,6 @@ import ( "sort" "testing" - "github.com/ethereum/go-ethereum/common" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" tmtypes "github.com/tendermint/tendermint/types" @@ -20,15 +19,11 @@ import ( ) func TestValidatorTestEquivalent(t *testing.T) { - randomEVMAddress1, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - val1 := newValidator(t, valAddr1, pk1, *randomEVMAddress1) - val2 := newValidator(t, valAddr1, pk1, *randomEVMAddress1) + val1 := newValidator(t, valAddr1, pk1) + val2 := newValidator(t, valAddr1, pk1) require.Equal(t, val1.String(), val2.String()) - randomEVMAddress2, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - val2 = newValidator(t, valAddr2, pk2, *randomEVMAddress2) + val2 = newValidator(t, valAddr2, pk2) require.NotEqual(t, val1.String(), val2.String()) } @@ -62,9 +57,7 @@ func TestUpdateDescription(t *testing.T) { } func TestABCIValidatorUpdate(t *testing.T) { - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator := newValidator(t, valAddr1, pk1, *randomEVMAddress) + validator := newValidator(t, valAddr1, pk1) abciVal := validator.ABCIValidatorUpdate(sdk.DefaultPowerReduction) pk, err := validator.TmConsPublicKey() require.NoError(t, err) @@ -73,9 +66,7 @@ func TestABCIValidatorUpdate(t *testing.T) { } func TestABCIValidatorUpdateZero(t *testing.T) { - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator := newValidator(t, valAddr1, pk1, *randomEVMAddress) + validator := newValidator(t, valAddr1, pk1) abciVal := validator.ABCIValidatorUpdateZero() pk, err := validator.TmConsPublicKey() require.NoError(t, err) @@ -109,9 +100,7 @@ func TestRemoveTokens(t *testing.T) { } func TestAddTokensValidatorBonded(t *testing.T) { - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator := newValidator(t, valAddr1, pk1, *randomEVMAddress) + validator := newValidator(t, valAddr1, pk1) validator = validator.UpdateStatus(types.Bonded) validator, delShares := validator.AddTokensFromDel(sdk.NewInt(10)) @@ -121,9 +110,7 @@ func TestAddTokensValidatorBonded(t *testing.T) { } func TestAddTokensValidatorUnbonding(t *testing.T) { - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator := newValidator(t, valAddr1, pk1, *randomEVMAddress) + validator := newValidator(t, valAddr1, pk1) validator = validator.UpdateStatus(types.Unbonding) validator, delShares := validator.AddTokensFromDel(sdk.NewInt(10)) @@ -134,9 +121,7 @@ func TestAddTokensValidatorUnbonding(t *testing.T) { } func TestAddTokensValidatorUnbonded(t *testing.T) { - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator := newValidator(t, valAddr1, pk1, *randomEVMAddress) + validator := newValidator(t, valAddr1, pk1) validator = validator.UpdateStatus(types.Unbonded) validator, delShares := validator.AddTokensFromDel(sdk.NewInt(10)) @@ -170,9 +155,7 @@ func TestRemoveDelShares(t *testing.T) { } func TestAddTokensFromDel(t *testing.T) { - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator := newValidator(t, valAddr1, pk1, *randomEVMAddress) + validator := newValidator(t, valAddr1, pk1) validator, shares := validator.AddTokensFromDel(sdk.NewInt(6)) require.True(sdk.DecEq(t, sdk.NewDec(6), shares)) @@ -186,9 +169,7 @@ func TestAddTokensFromDel(t *testing.T) { } func TestUpdateStatus(t *testing.T) { - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator := newValidator(t, valAddr1, pk1, *randomEVMAddress) + validator := newValidator(t, valAddr1, pk1) validator, _ = validator.AddTokensFromDel(sdk.NewInt(100)) require.Equal(t, types.Unbonded, validator.Status) require.Equal(t, int64(100), validator.Tokens.Int64()) @@ -216,9 +197,7 @@ func TestPossibleOverflow(t *testing.T) { } func TestValidatorMarshalUnmarshalJSON(t *testing.T) { - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - validator := newValidator(t, valAddr1, pk1, *randomEVMAddress) + validator := newValidator(t, valAddr1, pk1) js, err := legacy.Cdc.MarshalJSON(validator) require.NoError(t, err) require.NotEmpty(t, js) @@ -230,9 +209,7 @@ func TestValidatorMarshalUnmarshalJSON(t *testing.T) { } func TestValidatorSetInitialCommission(t *testing.T) { - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - val := newValidator(t, valAddr1, pk1, *randomEVMAddress) + val := newValidator(t, valAddr1, pk1) testCases := []struct { validator types.Validator commission types.Commission @@ -273,9 +250,7 @@ func TestValidatorsSortDeterminism(t *testing.T) { // Create random validator slice for i := range vals { pk := ed25519.GenPrivKey().PubKey() - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - vals[i] = newValidator(t, sdk.ValAddress(pk.Address()), pk, *randomEVMAddress) + vals[i] = newValidator(t, sdk.ValAddress(pk.Address()), pk) } // Save sorted copy @@ -302,9 +277,7 @@ func TestValidatorsSortTendermint(t *testing.T) { for i := range vals { pk := ed25519.GenPrivKey().PubKey() pk2 := ed25519.GenPrivKey().PubKey() - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - vals[i] = newValidator(t, sdk.ValAddress(pk2.Address()), pk, *randomEVMAddress) + vals[i] = newValidator(t, sdk.ValAddress(pk2.Address()), pk) vals[i].Status = types.Bonded vals[i].Tokens = sdk.NewInt(rand.Int63()) } @@ -336,9 +309,7 @@ func TestValidatorToTm(t *testing.T) { for i := range vals { pk := ed25519.GenPrivKey().PubKey() - randomEVMAddress, err := teststaking.RandomEVMAddress() - require.NoError(t, err) - val := newValidator(t, sdk.ValAddress(pk.Address()), pk, *randomEVMAddress) + val := newValidator(t, sdk.ValAddress(pk.Address()), pk) val.Status = types.Bonded val.Tokens = sdk.NewInt(rand.Int63()) vals[i] = val @@ -373,8 +344,8 @@ func mkValidator(tokens int64, shares sdk.Dec) types.Validator { } // Creates a new validators and asserts the error check. -func newValidator(t *testing.T, operator sdk.ValAddress, pubKey cryptotypes.PubKey, evmAddr common.Address) types.Validator { - v, err := types.NewValidator(operator, pubKey, types.Description{}, evmAddr) +func newValidator(t *testing.T, operator sdk.ValAddress, pubKey cryptotypes.PubKey) types.Validator { + v, err := types.NewValidator(operator, pubKey, types.Description{}) require.NoError(t, err) return v }