From d16d7bd61c87f8546795544749d587bdf993ad2a Mon Sep 17 00:00:00 2001 From: Colin Axner Date: Wed, 11 Nov 2020 11:59:02 +0100 Subject: [PATCH 1/3] remove consensus params --- .../tendermint/v1/tendermint.proto | 12 +- x/ibc/core/02-client/keeper/client_test.go | 38 +- .../core/02-client/keeper/grpc_query_test.go | 4 +- x/ibc/core/02-client/keeper/keeper.go | 7 - x/ibc/core/02-client/keeper/keeper_test.go | 50 +- x/ibc/core/02-client/types/codec_test.go | 2 +- x/ibc/core/02-client/types/genesis_test.go | 10 +- x/ibc/core/02-client/types/msgs_test.go | 10 +- .../03-connection/keeper/handshake_test.go | 63 +- x/ibc/core/03-connection/types/msgs_test.go | 8 +- .../core/23-commitment/types/commitment.pb.go | 2 + x/ibc/core/genesis_test.go | 6 +- x/ibc/core/keeper/msg_server_test.go | 4 +- .../07-tendermint/client/cli/tx.go | 26 +- .../07-tendermint/types/client_state.go | 21 +- .../07-tendermint/types/client_state_test.go | 30 +- .../07-tendermint/types/errors.go | 1 - .../types/misbehaviour_handle.go | 29 - .../types/misbehaviour_handle_test.go | 70 +- .../07-tendermint/types/tendermint.pb.go | 274 ++-- .../07-tendermint/types/update_test.go | 34 +- .../07-tendermint/types/upgrade.go | 2 +- .../07-tendermint/types/upgrade_test.go | 34 +- x/ibc/testing/chain.go | 18 +- x/staking/types/staking.pb.go | 1198 ++++++++--------- 25 files changed, 851 insertions(+), 1102 deletions(-) diff --git a/proto/ibc/lightclients/tendermint/v1/tendermint.proto b/proto/ibc/lightclients/tendermint/v1/tendermint.proto index c592a9b5daea..7cefa32b6774 100644 --- a/proto/ibc/lightclients/tendermint/v1/tendermint.proto +++ b/proto/ibc/lightclients/tendermint/v1/tendermint.proto @@ -5,7 +5,6 @@ option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/light-clients/07-tenderm import "tendermint/types/validator.proto"; import "tendermint/types/types.proto"; -import "tendermint/abci/types.proto"; import "confio/proofs.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; @@ -40,21 +39,18 @@ message ClientState { ibc.core.client.v1.Height latest_height = 7 [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"latest_height\""]; - // Consensus params of the chain - .tendermint.abci.ConsensusParams consensus_params = 8 [(gogoproto.moretags) = "yaml:\"consensus_params\""]; - // Proof specifications used in verifying counterparty state - repeated ics23.ProofSpec proof_specs = 9 [(gogoproto.moretags) = "yaml:\"proof_specs\""]; + repeated ics23.ProofSpec proof_specs = 8 [(gogoproto.moretags) = "yaml:\"proof_specs\""]; // Path at which next upgraded client will be committed - string upgrade_path = 10 [(gogoproto.moretags) = "yaml:\"upgrade_path\""]; + string upgrade_path = 9 [(gogoproto.moretags) = "yaml:\"upgrade_path\""]; // This flag, when set to true, will allow governance to recover a client // which has expired - bool allow_update_after_expiry = 11 [(gogoproto.moretags) = "yaml:\"allow_update_after_expiry\""]; + bool allow_update_after_expiry = 10 [(gogoproto.moretags) = "yaml:\"allow_update_after_expiry\""]; // This flag, when set to true, will allow governance to unfreeze a client // whose chain has experienced a misbehaviour event - bool allow_update_after_misbehaviour = 12 [(gogoproto.moretags) = "yaml:\"allow_update_after_misbehaviour\""]; + bool allow_update_after_misbehaviour = 11 [(gogoproto.moretags) = "yaml:\"allow_update_after_misbehaviour\""]; } // ConsensusState defines the consensus state from Tendermint. diff --git a/x/ibc/core/02-client/keeper/client_test.go b/x/ibc/core/02-client/keeper/client_test.go index 30528b88ca7a..7710c3aa541f 100644 --- a/x/ibc/core/02-client/keeper/client_test.go +++ b/x/ibc/core/02-client/keeper/client_test.go @@ -33,11 +33,11 @@ func (suite *KeeperTestSuite) TestCreateClient() { i := i if tc.expPanic { suite.Require().Panics(func() { - clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) suite.keeper.CreateClient(suite.ctx, tc.clientID, clientState, suite.consensusState) }, "Msg %d didn't panic: %s", i, tc.msg) } else { - clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) if tc.expPass { suite.Require().NotNil(clientState, "valid test case %d failed: %s", i, tc.msg) } @@ -80,7 +80,7 @@ func (suite *KeeperTestSuite) TestUpdateClientTendermint() { expPass bool }{ {"valid update", func() error { - clientState = ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + clientState = ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) err := suite.keeper.CreateClient(suite.ctx, testClientID, clientState, suite.consensusState) // store intermediate consensus state to check that trustedHeight does not need to be highest consensus state before header height @@ -98,7 +98,7 @@ func (suite *KeeperTestSuite) TestUpdateClientTendermint() { return err }, true}, {"valid past update", func() error { - clientState = ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + clientState = ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) err := suite.keeper.CreateClient(suite.ctx, testClientID, clientState, suite.consensusState) suite.Require().NoError(err) @@ -131,7 +131,7 @@ func (suite *KeeperTestSuite) TestUpdateClientTendermint() { return nil }, false}, {"consensus state not found", func() error { - clientState = ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + clientState = ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) suite.keeper.SetClientState(suite.ctx, testClientID, clientState) updateHeader = createFutureUpdateFn(suite) @@ -145,7 +145,7 @@ func (suite *KeeperTestSuite) TestUpdateClientTendermint() { return nil }, false}, {"valid past update before client was frozen", func() error { - clientState = ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + clientState = ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) clientState.FrozenHeight = types.NewHeight(0, testClientHeight.VersionHeight-1) err := suite.keeper.CreateClient(suite.ctx, testClientID, clientState, suite.consensusState) suite.Require().NoError(err) @@ -165,7 +165,7 @@ func (suite *KeeperTestSuite) TestUpdateClientTendermint() { return nil }, true}, {"invalid header", func() error { - clientState = ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + clientState = ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) err := suite.keeper.CreateClient(suite.ctx, testClientID, clientState, suite.consensusState) suite.Require().NoError(err) updateHeader = createPastUpdateFn(suite) @@ -250,7 +250,7 @@ func (suite *KeeperTestSuite) TestUpgradeClient() { name: "successful upgrade", setup: func() { - upgradedClient = ibctmtypes.NewClientState("newChainId", ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + upgradedClient = ibctmtypes.NewClientState("newChainId", ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) // upgrade Height is at next block upgradeHeight = clienttypes.NewHeight(0, uint64(suite.chainB.GetContext().BlockHeight()+1)) @@ -275,7 +275,7 @@ func (suite *KeeperTestSuite) TestUpgradeClient() { name: "client state not found", setup: func() { - upgradedClient = ibctmtypes.NewClientState("newChainId", ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + upgradedClient = ibctmtypes.NewClientState("newChainId", ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) // upgrade Height is at next block upgradeHeight = clienttypes.NewHeight(0, uint64(suite.chainB.GetContext().BlockHeight()+1)) @@ -302,7 +302,7 @@ func (suite *KeeperTestSuite) TestUpgradeClient() { name: "client state frozen", setup: func() { - upgradedClient = ibctmtypes.NewClientState("newChainId", ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + upgradedClient = ibctmtypes.NewClientState("newChainId", ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) // upgrade Height is at next block upgradeHeight = clienttypes.NewHeight(0, uint64(suite.chainB.GetContext().BlockHeight()+1)) @@ -333,7 +333,7 @@ func (suite *KeeperTestSuite) TestUpgradeClient() { name: "tendermint client VerifyUpgrade fails", setup: func() { - upgradedClient = ibctmtypes.NewClientState("newChainId", ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + upgradedClient = ibctmtypes.NewClientState("newChainId", ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) // upgrade Height is at next block upgradeHeight = clienttypes.NewHeight(0, uint64(suite.chainB.GetContext().BlockHeight()+1)) @@ -342,7 +342,7 @@ func (suite *KeeperTestSuite) TestUpgradeClient() { suite.chainB.App.UpgradeKeeper.SetUpgradedClient(suite.chainB.GetContext(), int64(upgradeHeight.GetVersionHeight()), upgradedClient) // change upgradedClient client-specified parameters - upgradedClient = ibctmtypes.NewClientState("wrongchainID", ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, newClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, true, true) + upgradedClient = ibctmtypes.NewClientState("wrongchainID", ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, true, true) suite.coordinator.CommitBlock(suite.chainB) err := suite.coordinator.UpdateClient(suite.chainA, suite.chainB, clientA, ibctesting.Tendermint) @@ -418,7 +418,7 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() { }, func() error { suite.consensusState.NextValidatorsHash = bothValsHash - clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) err := suite.keeper.CreateClient(suite.ctx, testClientID, clientState, suite.consensusState) return err @@ -435,7 +435,7 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() { }, func() error { suite.consensusState.NextValidatorsHash = valsHash - clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) err := suite.keeper.CreateClient(suite.ctx, testClientID, clientState, suite.consensusState) // store intermediate consensus state to check that trustedHeight does not need to be highest consensus state before header height @@ -462,7 +462,7 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() { }, func() error { suite.consensusState.NextValidatorsHash = valsHash - clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) err := suite.keeper.CreateClient(suite.ctx, testClientID, clientState, suite.consensusState) // store trusted consensus state for Header2 @@ -489,7 +489,7 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() { }, func() error { suite.consensusState.NextValidatorsHash = valsHash - clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) err := suite.keeper.CreateClient(suite.ctx, testClientID, clientState, suite.consensusState) // intermediate consensus state at height + 3 is not created return err @@ -506,7 +506,7 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() { }, func() error { suite.consensusState.NextValidatorsHash = valsHash - clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) err := suite.keeper.CreateClient(suite.ctx, testClientID, clientState, suite.consensusState) // intermediate consensus state at height + 3 is not created return err @@ -529,7 +529,7 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() { }, func() error { suite.consensusState.NextValidatorsHash = bothValsHash - clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) err := suite.keeper.CreateClient(suite.ctx, testClientID, clientState, suite.consensusState) clientState.FrozenHeight = types.NewHeight(0, 1) @@ -548,7 +548,7 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() { ClientId: testClientID, }, func() error { - clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) if err != nil { return err } diff --git a/x/ibc/core/02-client/keeper/grpc_query_test.go b/x/ibc/core/02-client/keeper/grpc_query_test.go index b99d290f849d..6cfcdc551b84 100644 --- a/x/ibc/core/02-client/keeper/grpc_query_test.go +++ b/x/ibc/core/02-client/keeper/grpc_query_test.go @@ -43,7 +43,7 @@ func (suite *KeeperTestSuite) TestQueryClientState() { { "success", func() { - clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, types.ZeroHeight(), ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, types.ZeroHeight(), commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) suite.keeper.SetClientState(suite.ctx, testClientID, clientState) var err error @@ -209,7 +209,7 @@ func (suite *KeeperTestSuite) TestQueryConsensusState() { { "success latest height", func() { - clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) cs := ibctmtypes.NewConsensusState( suite.consensusState.Timestamp, commitmenttypes.NewMerkleRoot([]byte("hash1")), nil, ) diff --git a/x/ibc/core/02-client/keeper/keeper.go b/x/ibc/core/02-client/keeper/keeper.go index 8af73dd75a13..dc1ef9072a05 100644 --- a/x/ibc/core/02-client/keeper/keeper.go +++ b/x/ibc/core/02-client/keeper/keeper.go @@ -215,13 +215,6 @@ func (k Keeper) ValidateSelfClient(ctx sdk.Context, clientState exported.ClientS tmClient.LatestHeight, ctx.BlockHeight()) } - // consensus params must match consensus params on executing chain - expectedConsensusParams := ctx.ConsensusParams() - if !reflect.DeepEqual(expectedConsensusParams, tmClient.ConsensusParams) { - return sdkerrors.Wrapf(types.ErrInvalidClient, "client has invalid consensus params, expected: %v got: %v", - expectedConsensusParams, tmClient.ConsensusParams) - } - expectedProofSpecs := commitmenttypes.GetSDKSpecs() if !reflect.DeepEqual(expectedProofSpecs, tmClient.ProofSpecs) { return sdkerrors.Wrapf(types.ErrInvalidClient, "client has invalid proof specs. expected: %v got: %v", diff --git a/x/ibc/core/02-client/keeper/keeper_test.go b/x/ibc/core/02-client/keeper/keeper_test.go index d5e162b09ec9..899eec05084d 100644 --- a/x/ibc/core/02-client/keeper/keeper_test.go +++ b/x/ibc/core/02-client/keeper/keeper_test.go @@ -132,7 +132,7 @@ func TestKeeperTestSuite(t *testing.T) { } func (suite *KeeperTestSuite) TestSetClientState() { - clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, types.ZeroHeight(), ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, types.ZeroHeight(), commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) suite.keeper.SetClientState(suite.ctx, testClientID, clientState) retrievedState, found := suite.keeper.GetClientState(suite.ctx, testClientID) @@ -152,8 +152,6 @@ func (suite *KeeperTestSuite) TestSetClientConsensusState() { } func (suite *KeeperTestSuite) TestValidateSelfClient() { - invalidConsensusParams := suite.chainA.GetContext().ConsensusParams() - invalidConsensusParams.Evidence.MaxAgeDuration++ testClientHeight := types.NewHeight(0, uint64(suite.chainA.GetContext().BlockHeight())) testCases := []struct { @@ -163,12 +161,12 @@ func (suite *KeeperTestSuite) TestValidateSelfClient() { }{ { "success", - ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), true, }, { "success with nil UpgradePath", - ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), "", false, false), + ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), "", false, false), true, }, { @@ -178,57 +176,47 @@ func (suite *KeeperTestSuite) TestValidateSelfClient() { }, { "frozen client", - &ibctmtypes.ClientState{suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, testClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false}, + &ibctmtypes.ClientState{suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false}, false, }, { "incorrect chainID", - ibctmtypes.NewClientState("gaiatestnet", ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + ibctmtypes.NewClientState("gaiatestnet", ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), false, }, { "invalid client height", - ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, types.NewHeight(0, testClientHeight.VersionHeight+10), ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, types.NewHeight(0, testClientHeight.VersionHeight+10), commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), false, }, { "invalid client version", - ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeightVersion1, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeightVersion1, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), false, }, { "invalid proof specs", - ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, ibctesting.DefaultConsensusParams, nil, ibctesting.UpgradePath, false, false), + ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, nil, ibctesting.UpgradePath, false, false), false, }, { "invalid trust level", - ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.Fraction{0, 1}, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.Fraction{0, 1}, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), false, }, { "invalid unbonding period", - ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod+10, maxClockDrift, testClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod+10, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), false, }, { "invalid trusting period", - ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, ubdPeriod+10, ubdPeriod, maxClockDrift, testClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, ubdPeriod+10, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), false, }, { "invalid upgrade path", - ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), "bad/upgrade/path", false, false), - false, - }, - { - "invalid consensus params", - ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, invalidConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), - false, - }, - { - "nil consensus params", - ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, nil, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), "bad/upgrade/path", false, false), false, }, } @@ -248,9 +236,9 @@ func (suite KeeperTestSuite) TestGetAllClients() { testClientID2, testClientID3, testClientID, } expClients := []exported.ClientState{ - ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, types.ZeroHeight(), ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), - ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, types.ZeroHeight(), ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), - ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, types.ZeroHeight(), ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, types.ZeroHeight(), commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, types.ZeroHeight(), commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, types.ZeroHeight(), commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), } for i := range expClients { @@ -272,9 +260,9 @@ func (suite KeeperTestSuite) TestGetAllGenesisClients() { testClientID2, testClientID3, testClientID, } expClients := []exported.ClientState{ - ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, types.ZeroHeight(), ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), - ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, types.ZeroHeight(), ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), - ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, types.ZeroHeight(), ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, types.ZeroHeight(), commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, types.ZeroHeight(), commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, types.ZeroHeight(), commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), } expGenClients := make([]types.IdentifiedClientState, len(expClients)) @@ -322,7 +310,7 @@ func (suite KeeperTestSuite) TestGetConsensusState() { func (suite KeeperTestSuite) TestConsensusStateHelpers() { // initial setup - clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + clientState := ibctmtypes.NewClientState(testChainID, ibctmtypes.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) suite.keeper.SetClientState(suite.ctx, testClientID, clientState) suite.keeper.SetClientConsensusState(suite.ctx, testClientID, testClientHeight, suite.consensusState) diff --git a/x/ibc/core/02-client/types/codec_test.go b/x/ibc/core/02-client/types/codec_test.go index 9ea6642629db..603fe6934731 100644 --- a/x/ibc/core/02-client/types/codec_test.go +++ b/x/ibc/core/02-client/types/codec_test.go @@ -30,7 +30,7 @@ func (suite *TypesTestSuite) TestPackClientState() { }, { "tendermint client", - ibctmtypes.NewClientState(chainID, ibctesting.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + ibctmtypes.NewClientState(chainID, ibctesting.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), true, }, { diff --git a/x/ibc/core/02-client/types/genesis_test.go b/x/ibc/core/02-client/types/genesis_test.go index 41d88edae897..f79ba4b88af0 100644 --- a/x/ibc/core/02-client/types/genesis_test.go +++ b/x/ibc/core/02-client/types/genesis_test.go @@ -69,7 +69,7 @@ func (suite *TypesTestSuite) TestValidateGenesis() { genState: types.NewGenesisState( []types.IdentifiedClientState{ types.NewIdentifiedClientState( - clientID, ibctmtypes.NewClientState(chainID, ibctesting.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + clientID, ibctmtypes.NewClientState(chainID, ibctesting.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), ), types.NewIdentifiedClientState( exported.Localhost, localhosttypes.NewClientState("chainID", clientHeight), @@ -97,7 +97,7 @@ func (suite *TypesTestSuite) TestValidateGenesis() { genState: types.NewGenesisState( []types.IdentifiedClientState{ types.NewIdentifiedClientState( - "/~@$*", ibctmtypes.NewClientState(chainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + "/~@$*", ibctmtypes.NewClientState(chainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), ), types.NewIdentifiedClientState( exported.Localhost, localhosttypes.NewClientState("chainID", clientHeight), @@ -125,7 +125,7 @@ func (suite *TypesTestSuite) TestValidateGenesis() { genState: types.NewGenesisState( []types.IdentifiedClientState{ types.NewIdentifiedClientState( - clientID, ibctmtypes.NewClientState(chainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + clientID, ibctmtypes.NewClientState(chainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), ), types.NewIdentifiedClientState(exported.Localhost, localhosttypes.NewClientState("chaindID", types.ZeroHeight())), }, @@ -139,7 +139,7 @@ func (suite *TypesTestSuite) TestValidateGenesis() { genState: types.NewGenesisState( []types.IdentifiedClientState{ types.NewIdentifiedClientState( - clientID, ibctmtypes.NewClientState(chainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + clientID, ibctmtypes.NewClientState(chainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), ), types.NewIdentifiedClientState( exported.Localhost, localhosttypes.NewClientState("chaindID", clientHeight), @@ -167,7 +167,7 @@ func (suite *TypesTestSuite) TestValidateGenesis() { genState: types.NewGenesisState( []types.IdentifiedClientState{ types.NewIdentifiedClientState( - clientID, ibctmtypes.NewClientState(chainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + clientID, ibctmtypes.NewClientState(chainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), ), types.NewIdentifiedClientState( exported.Localhost, localhosttypes.NewClientState("chaindID", clientHeight), diff --git a/x/ibc/core/02-client/types/msgs_test.go b/x/ibc/core/02-client/types/msgs_test.go index adaf95cde8d6..fbbbb4aa7556 100644 --- a/x/ibc/core/02-client/types/msgs_test.go +++ b/x/ibc/core/02-client/types/msgs_test.go @@ -56,7 +56,7 @@ func (suite *TypesTestSuite) TestMarshalMsgCreateClient() { }, { "tendermint client", func() { - tendermintClient := ibctmtypes.NewClientState(suite.chainA.ChainID, ibctesting.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + tendermintClient := ibctmtypes.NewClientState(suite.chainA.ChainID, ibctesting.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) msg, err = types.NewMsgCreateClient("tendermint", tendermintClient, suite.chainA.CurrentTMClientHeader().ConsensusState(), suite.chainA.SenderAccount.GetAddress()) suite.Require().NoError(err) }, @@ -108,7 +108,7 @@ func (suite *TypesTestSuite) TestMsgCreateClient_ValidateBasic() { { "valid - tendermint client", func() { - tendermintClient := ibctmtypes.NewClientState(suite.chainA.ChainID, ibctesting.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + tendermintClient := ibctmtypes.NewClientState(suite.chainA.ChainID, ibctesting.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) msg, err = types.NewMsgCreateClient("tendermint", tendermintClient, suite.chainA.CurrentTMClientHeader().ConsensusState(), suite.chainA.SenderAccount.GetAddress()) suite.Require().NoError(err) }, @@ -132,7 +132,7 @@ func (suite *TypesTestSuite) TestMsgCreateClient_ValidateBasic() { { "failed to unpack consensus state", func() { - tendermintClient := ibctmtypes.NewClientState(suite.chainA.ChainID, ibctesting.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + tendermintClient := ibctmtypes.NewClientState(suite.chainA.ChainID, ibctesting.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) msg, err = types.NewMsgCreateClient("tendermint", tendermintClient, suite.chainA.CurrentTMClientHeader().ConsensusState(), suite.chainA.SenderAccount.GetAddress()) suite.Require().NoError(err) msg.ConsensusState = nil @@ -348,7 +348,7 @@ func (suite *TypesTestSuite) TestMarshalMsgUpgradeClient() { { "client upgrades to new tendermint client", func() { - tendermintClient := ibctmtypes.NewClientState(suite.chainA.ChainID, ibctesting.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + tendermintClient := ibctmtypes.NewClientState(suite.chainA.ChainID, ibctesting.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) msg, err = types.NewMsgUpgradeClient("clientid", tendermintClient, newClientHeight, []byte("proofUpgrade"), suite.chainA.SenderAccount.GetAddress()) suite.Require().NoError(err) }, @@ -462,7 +462,7 @@ func (suite *TypesTestSuite) TestMsgUpgradeClient_ValidateBasic() { for _, tc := range cases { tc := tc - clientState := ibctmtypes.NewClientState(suite.chainA.ChainID, ibctesting.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + clientState := ibctmtypes.NewClientState(suite.chainA.ChainID, ibctesting.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) newClientHeight := types.NewHeight(1, 1) msg, _ := types.NewMsgUpgradeClient("testclientid", clientState, newClientHeight, []byte("proofUpgrade"), suite.chainA.SenderAccount.GetAddress()) diff --git a/x/ibc/core/03-connection/keeper/handshake_test.go b/x/ibc/core/03-connection/keeper/handshake_test.go index b677b23520ef..afd09b186694 100644 --- a/x/ibc/core/03-connection/keeper/handshake_test.go +++ b/x/ibc/core/03-connection/keeper/handshake_test.go @@ -661,10 +661,10 @@ func (suite *KeeperTestSuite) TestConnOpenAck() { for _, tc := range testCases { tc := tc suite.Run(tc.msg, func() { - suite.SetupTest() // reset + suite.SetupTest() // reset version = types.ExportedVersionsToProto(types.GetCompatibleVersions())[0] // must be explicitly changed in malleate - consensusHeight = clienttypes.ZeroHeight() // must be explicitly changed in malleate - counterpartyConnectionID = "" // must be explicitly changed in malleate + consensusHeight = clienttypes.ZeroHeight() // must be explicitly changed in malleate + counterpartyConnectionID = "" // must be explicitly changed in malleate tc.malleate() @@ -772,60 +772,3 @@ func (suite *KeeperTestSuite) TestConnOpenConfirm() { }) } } - -// Ensure consensus params are correctly validated by executing messages. Consensus params are -// set in context by baseapp so test should deliver messages and not call the functions directly. -// Only invalid cases are tested since successful instances are by default tested by the testing -// package. -func (suite *KeeperTestSuite) TestConsensusParamsValidation() { - // invalid client state in ConnOpenTry - clientA, clientB := suite.coordinator.SetupClients(suite.chainA, suite.chainB, ibctesting.Tendermint) - connA, connB, err := suite.coordinator.ConnOpenInit(suite.chainA, suite.chainB, clientA, clientB) - suite.Require().NoError(err) - - // set incorrect consensus params on counterparty client on chainA - clientState := suite.chainA.GetClientState(clientA) - tmClient, ok := clientState.(*ibctmtypes.ClientState) - suite.Require().True(ok) - tmClient.ConsensusParams.Evidence.MaxAgeDuration++ - - suite.chainA.App.IBCKeeper.ClientKeeper.SetClientState(suite.chainA.GetContext(), clientA, tmClient) - - // should fail on validate self client - ibctesting.ExpSimPassSend = false - ibctesting.ExpPassSend = false - err = suite.coordinator.ConnOpenTry(suite.chainB, suite.chainA, connB, connA) - suite.Require().Error(err) - - // reset values - ibctesting.ExpSimPassSend = true - ibctesting.ExpPassSend = true - - suite.SetupTest() // reset - - // invalid client state in ConnOpenAck - clientA, clientB = suite.coordinator.SetupClients(suite.chainA, suite.chainB, ibctesting.Tendermint) - connA, connB, err = suite.coordinator.ConnOpenInit(suite.chainA, suite.chainB, clientA, clientB) - suite.Require().NoError(err) - - err = suite.coordinator.ConnOpenTry(suite.chainB, suite.chainA, connB, connA) - suite.Require().NoError(err) - - // set incorrect consensus params on counterparty client on chainB - clientState = suite.chainB.GetClientState(clientB) - tmClient, ok = clientState.(*ibctmtypes.ClientState) - suite.Require().True(ok) - tmClient.ConsensusParams.Evidence.MaxAgeDuration++ - - suite.chainB.App.IBCKeeper.ClientKeeper.SetClientState(suite.chainB.GetContext(), clientB, tmClient) - - // should fail on validate self client - ibctesting.ExpSimPassSend = false - ibctesting.ExpPassSend = false - err = suite.coordinator.ConnOpenAck(suite.chainA, suite.chainB, connA, connB) - suite.Require().Error(err) - - // reset values - ibctesting.ExpSimPassSend = true - ibctesting.ExpPassSend = true -} diff --git a/x/ibc/core/03-connection/types/msgs_test.go b/x/ibc/core/03-connection/types/msgs_test.go index f839637906ea..798c8b0f7182 100644 --- a/x/ibc/core/03-connection/types/msgs_test.go +++ b/x/ibc/core/03-connection/types/msgs_test.go @@ -112,7 +112,7 @@ func (suite *MsgTestSuite) TestNewMsgConnectionOpenTry() { signer, _ := sdk.AccAddressFromBech32("cosmos1ckgw5d7jfj7wwxjzs9fdrdev9vc8dzcw3n2lht") clientState := ibctmtypes.NewClientState( - chainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false, + chainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false, ) // Pack consensus state into any to test unpacking error @@ -124,7 +124,7 @@ func (suite *MsgTestSuite) TestNewMsgConnectionOpenTry() { // invalidClientState fails validateBasic invalidClient := ibctmtypes.NewClientState( - chainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clienttypes.ZeroHeight(), ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false, + chainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clienttypes.ZeroHeight(), commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false, ) provedID := "" @@ -166,7 +166,7 @@ func (suite *MsgTestSuite) TestNewMsgConnectionOpenTry() { func (suite *MsgTestSuite) TestNewMsgConnectionOpenAck() { signer, _ := sdk.AccAddressFromBech32("cosmos1ckgw5d7jfj7wwxjzs9fdrdev9vc8dzcw3n2lht") clientState := ibctmtypes.NewClientState( - chainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false, + chainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false, ) // Pack consensus state into any to test unpacking error @@ -177,7 +177,7 @@ func (suite *MsgTestSuite) TestNewMsgConnectionOpenAck() { // invalidClientState fails validateBasic invalidClient := ibctmtypes.NewClientState( - chainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clienttypes.ZeroHeight(), ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false, + chainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clienttypes.ZeroHeight(), commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false, ) connectionID := "ibcconntest" diff --git a/x/ibc/core/23-commitment/types/commitment.pb.go b/x/ibc/core/23-commitment/types/commitment.pb.go index bb28053e7f73..9634e25735c9 100644 --- a/x/ibc/core/23-commitment/types/commitment.pb.go +++ b/x/ibc/core/23-commitment/types/commitment.pb.go @@ -112,6 +112,7 @@ func (m *MerklePrefix) GetKeyPrefix() []byte { // MerklePath is the path used to verify commitment proofs, which can be an // arbitrary structured object (defined by a commitment type). +// MerklePath is represented from root-to-leaf type MerklePath struct { KeyPath []string `protobuf:"bytes,1,rep,name=key_path,json=keyPath,proto3" json:"key_path,omitempty" yaml:"key_path"` } @@ -159,6 +160,7 @@ func (m *MerklePath) GetKeyPath() []string { // It demonstrates membership or non-membership for an element or set of // elements, verifiable in conjunction with a known commitment root. Proofs // should be succinct. +// MerkleProofs are ordered from leaf-to-root type MerkleProof struct { Proofs []*_go.CommitmentProof `protobuf:"bytes,1,rep,name=proofs,proto3" json:"proofs,omitempty"` } diff --git a/x/ibc/core/genesis_test.go b/x/ibc/core/genesis_test.go index d4cf1ec3aab6..6b07d4ddb642 100644 --- a/x/ibc/core/genesis_test.go +++ b/x/ibc/core/genesis_test.go @@ -77,7 +77,7 @@ func (suite *IBCTestSuite) TestValidateGenesis() { ClientGenesis: clienttypes.NewGenesisState( []clienttypes.IdentifiedClientState{ clienttypes.NewIdentifiedClientState( - clientID, ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + clientID, ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), ), clienttypes.NewIdentifiedClientState( exported.Localhost, localhosttypes.NewClientState("chaindID", clientHeight), @@ -143,7 +143,7 @@ func (suite *IBCTestSuite) TestValidateGenesis() { ClientGenesis: clienttypes.NewGenesisState( []clienttypes.IdentifiedClientState{ clienttypes.NewIdentifiedClientState( - clientID, ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + clientID, ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), ), clienttypes.NewIdentifiedClientState( exported.Localhost, localhosttypes.NewClientState("(chaindID)", clienttypes.ZeroHeight()), @@ -214,7 +214,7 @@ func (suite *IBCTestSuite) TestInitGenesis() { ClientGenesis: clienttypes.NewGenesisState( []clienttypes.IdentifiedClientState{ clienttypes.NewIdentifiedClientState( - clientID, ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + clientID, ibctmtypes.NewClientState(suite.chainA.ChainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), ), clienttypes.NewIdentifiedClientState( exported.Localhost, localhosttypes.NewClientState("chaindID", clientHeight), diff --git a/x/ibc/core/keeper/msg_server_test.go b/x/ibc/core/keeper/msg_server_test.go index a80426724f96..0cac083f5e86 100644 --- a/x/ibc/core/keeper/msg_server_test.go +++ b/x/ibc/core/keeper/msg_server_test.go @@ -628,7 +628,7 @@ func (suite *KeeperTestSuite) TestUpgradeClient() { name: "successful upgrade", setup: func() { - upgradedClient = ibctmtypes.NewClientState("newChainId", ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod+ibctesting.TrustingPeriod, ibctesting.MaxClockDrift, newClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + upgradedClient = ibctmtypes.NewClientState("newChainId", ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod+ibctesting.TrustingPeriod, ibctesting.MaxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) // upgrade Height is at next block upgradeHeight = clienttypes.NewHeight(0, uint64(suite.chainB.GetContext().BlockHeight()+1)) @@ -678,7 +678,7 @@ func (suite *KeeperTestSuite) TestUpgradeClient() { name: "VerifyUpgrade fails", setup: func() { - upgradedClient = ibctmtypes.NewClientState("newChainId", ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod+ibctesting.TrustingPeriod, ibctesting.MaxClockDrift, newClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) + upgradedClient = ibctmtypes.NewClientState("newChainId", ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod+ibctesting.TrustingPeriod, ibctesting.MaxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) // upgrade Height is at next block upgradeHeight = clienttypes.NewHeight(0, uint64(suite.chainB.GetContext().BlockHeight()+1)) diff --git a/x/ibc/light-clients/07-tendermint/client/cli/tx.go b/x/ibc/light-clients/07-tendermint/client/cli/tx.go index 54c0ac01b03c..8868b214e7e0 100644 --- a/x/ibc/light-clients/07-tendermint/client/cli/tx.go +++ b/x/ibc/light-clients/07-tendermint/client/cli/tx.go @@ -10,7 +10,6 @@ import ( ics23 "github.com/confio/ics23/go" "github.com/pkg/errors" "github.com/spf13/cobra" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/light" "github.com/cosmos/cosmos-sdk/client" @@ -25,7 +24,6 @@ import ( const ( flagTrustLevel = "trust-level" - flagConsensusParams = "consensus-params" flagProofSpecs = "proof-specs" flagUpgradePath = "upgrade-path" flagAllowUpdateAfterExpiry = "allow_update_after_expiry" @@ -40,7 +38,6 @@ func NewCreateClientCmd() *cobra.Command { Short: "create new tendermint client", Long: `Create a new tendermint IBC client. - 'trust-level' flag can be a fraction (eg: '1/3') or 'default' - - 'consensus-params' flag can be a JSON input, a path to a .json file. The params must match the consensus parameters of the chain this light client represents. - 'proof-specs' flag can be JSON input, a path to a .json file or 'default' - 'upgrade-path' flag is a string specifying the upgrade path for this chain where a future upgraded client will be stored. The path represents a keypath for the store with each key separated by a '/'. Any slash within a key must be escaped. e.g. 'upgrade/upgradedClient'`, @@ -71,9 +68,8 @@ func NewCreateClientCmd() *cobra.Command { } var ( - trustLevel types.Fraction - consensusParams *abci.ConsensusParams - specs []*ics23.ProofSpec + trustLevel types.Fraction + specs []*ics23.ProofSpec ) lvl, _ := cmd.Flags().GetString(flagTrustLevel) @@ -102,22 +98,6 @@ func NewCreateClientCmd() *cobra.Command { return err } - cp, _ := cmd.Flags().GetString(flagConsensusParams) - if cp != "" { - if err := legacyAmino.UnmarshalJSON([]byte(cp), &consensusParams); err != nil { - // check for file path if JSON input not provided - contents, err := ioutil.ReadFile(cp) - if err != nil { - return errors.New("neither JSON input nor path to .json file was provided for consensus params flag") - } - // TODO migrate to use JSONMarshaler (implement MarshalJSONArray - // or wrap lists of proto.Message in some other message) - if err := legacyAmino.UnmarshalJSON(contents, &consensusParams); err != nil { - return errors.Wrap(err, "error unmarshalling consensus params file") - } - } - } - spc, _ := cmd.Flags().GetString(flagProofSpecs) if spc == "default" { specs = commitmenttypes.GetSDKSpecs() @@ -150,7 +130,7 @@ func NewCreateClientCmd() *cobra.Command { clientState := types.NewClientState( header.GetHeader().GetChainID(), trustLevel, trustingPeriod, ubdPeriod, maxClockDrift, - height, consensusParams, specs, upgradePath, allowUpdateAfterExpiry, allowUpdateAfterMisbehaviour, + height, specs, upgradePath, allowUpdateAfterExpiry, allowUpdateAfterMisbehaviour, ) consensusState := header.ConsensusState() diff --git a/x/ibc/light-clients/07-tendermint/types/client_state.go b/x/ibc/light-clients/07-tendermint/types/client_state.go index 65d431245255..350bc99a24c9 100644 --- a/x/ibc/light-clients/07-tendermint/types/client_state.go +++ b/x/ibc/light-clients/07-tendermint/types/client_state.go @@ -5,10 +5,8 @@ import ( "time" ics23 "github.com/confio/ics23/go" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/light" - "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -29,7 +27,7 @@ const Tendermint string = "Tendermint" func NewClientState( chainID string, trustLevel Fraction, trustingPeriod, ubdPeriod, maxClockDrift time.Duration, - latestHeight clienttypes.Height, consensusParams *abci.ConsensusParams, specs []*ics23.ProofSpec, + latestHeight clienttypes.Height, specs []*ics23.ProofSpec, upgradePath string, allowUpdateAfterExpiry, allowUpdateAfterMisbehaviour bool, ) *ClientState { return &ClientState{ @@ -40,7 +38,6 @@ func NewClientState( MaxClockDrift: maxClockDrift, LatestHeight: latestHeight, FrozenHeight: clienttypes.ZeroHeight(), - ConsensusParams: consensusParams, ProofSpecs: specs, UpgradePath: upgradePath, AllowUpdateAfterExpiry: allowUpdateAfterExpiry, @@ -108,21 +105,6 @@ func (cs ClientState) Validate() error { ) } - // validate consensus params - if cs.ConsensusParams == nil || cs.ConsensusParams.Evidence == nil || - cs.ConsensusParams.Block == nil || cs.ConsensusParams.Validator == nil { - return sdkerrors.Wrap(ErrInvalidConsensusParams, "consensus params including block, evidence, and validator params cannot be empty") - } - if err := baseapp.ValidateBlockParams(*cs.ConsensusParams.Block); err != nil { - return sdkerrors.Wrap(err, "invalid block params") - } - if err := baseapp.ValidateEvidenceParams(*cs.ConsensusParams.Evidence); err != nil { - return sdkerrors.Wrap(err, "invalid evidence params") - } - if err := baseapp.ValidateValidatorParams(*cs.ConsensusParams.Validator); err != nil { - return sdkerrors.Wrap(err, "invalid validator params") - } - if cs.ProofSpecs == nil { return sdkerrors.Wrap(ErrInvalidProofSpecs, "proof specs cannot be nil for tm client") } @@ -158,7 +140,6 @@ func (cs ClientState) ZeroCustomFields() exported.ClientState { ChainId: cs.ChainId, UnbondingPeriod: cs.UnbondingPeriod, LatestHeight: cs.LatestHeight, - ConsensusParams: cs.ConsensusParams, ProofSpecs: cs.ProofSpecs, UpgradePath: cs.UpgradePath, } diff --git a/x/ibc/light-clients/07-tendermint/types/client_state_test.go b/x/ibc/light-clients/07-tendermint/types/client_state_test.go index 4f820446641a..da3f6e43d19a 100644 --- a/x/ibc/light-clients/07-tendermint/types/client_state_test.go +++ b/x/ibc/light-clients/07-tendermint/types/client_state_test.go @@ -33,57 +33,57 @@ func (suite *TendermintTestSuite) TestValidate() { }{ { name: "valid client", - clientState: types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + clientState: types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), expPass: true, }, { name: "valid client with nil upgrade path", - clientState: types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), "", false, false), + clientState: types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), "", false, false), expPass: true, }, { name: "invalid chainID", - clientState: types.NewClientState(" ", types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + clientState: types.NewClientState(" ", types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), expPass: false, }, { name: "invalid trust level", - clientState: types.NewClientState(chainID, types.Fraction{Numerator: 0, Denominator: 1}, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + clientState: types.NewClientState(chainID, types.Fraction{Numerator: 0, Denominator: 1}, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), expPass: false, }, { name: "invalid trusting period", - clientState: types.NewClientState(chainID, types.DefaultTrustLevel, 0, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + clientState: types.NewClientState(chainID, types.DefaultTrustLevel, 0, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), expPass: false, }, { name: "invalid unbonding period", - clientState: types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, 0, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + clientState: types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, 0, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), expPass: false, }, { name: "invalid max clock drift", - clientState: types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, 0, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + clientState: types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, 0, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), expPass: false, }, { name: "invalid height", - clientState: types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, clienttypes.ZeroHeight(), ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + clientState: types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, clienttypes.ZeroHeight(), commitmenttypes.GetSDKSpecs(), upgradePath, false, false), expPass: false, }, { name: "trusting period not less than unbonding period", - clientState: types.NewClientState(chainID, types.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + clientState: types.NewClientState(chainID, types.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), expPass: false, }, { name: "proof specs is nil", - clientState: types.NewClientState(chainID, types.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, nil, upgradePath, false, false), + clientState: types.NewClientState(chainID, types.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, height, nil, upgradePath, false, false), expPass: false, }, { name: "proof specs contains nil", - clientState: types.NewClientState(chainID, types.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, []*ics23.ProofSpec{ics23.TendermintSpec, nil}, upgradePath, false, false), + clientState: types.NewClientState(chainID, types.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, height, []*ics23.ProofSpec{ics23.TendermintSpec, nil}, upgradePath, false, false), expPass: false, }, } @@ -110,7 +110,7 @@ func (suite *TendermintTestSuite) TestVerifyClientConsensusState() { // FIXME: uncomment // { // name: "successful verification", - // clientState: types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs()), + // clientState: types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()), // consensusState: types.ConsensusState{ // Root: commitmenttypes.NewMerkleRoot(suite.header.Header.GetAppHash()), // }, @@ -119,7 +119,7 @@ func (suite *TendermintTestSuite) TestVerifyClientConsensusState() { // }, { name: "ApplyPrefix failed", - clientState: types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + clientState: types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), consensusState: types.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.Header.GetAppHash()), }, @@ -128,7 +128,7 @@ func (suite *TendermintTestSuite) TestVerifyClientConsensusState() { }, { name: "latest client height < height", - clientState: types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + clientState: types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), consensusState: types.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.Header.GetAppHash()), }, @@ -146,7 +146,7 @@ func (suite *TendermintTestSuite) TestVerifyClientConsensusState() { }, { name: "proof verification failed", - clientState: types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + clientState: types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), consensusState: types.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.Header.GetAppHash()), NextValidatorsHash: suite.valsHash, diff --git a/x/ibc/light-clients/07-tendermint/types/errors.go b/x/ibc/light-clients/07-tendermint/types/errors.go index 6037c4c232f8..9683dbf3cfb7 100644 --- a/x/ibc/light-clients/07-tendermint/types/errors.go +++ b/x/ibc/light-clients/07-tendermint/types/errors.go @@ -20,5 +20,4 @@ var ( ErrUnbondingPeriodExpired = sdkerrors.Register(SubModuleName, 9, "time since latest trusted state has passed the unbonding period") ErrInvalidProofSpecs = sdkerrors.Register(SubModuleName, 10, "invalid proof specs") ErrInvalidValidatorSet = sdkerrors.Register(SubModuleName, 11, "invalid validator set") - ErrInvalidConsensusParams = sdkerrors.Register(SubModuleName, 12, "invalid consensus params") ) diff --git a/x/ibc/light-clients/07-tendermint/types/misbehaviour_handle.go b/x/ibc/light-clients/07-tendermint/types/misbehaviour_handle.go index d37a21402aa9..e3793ee86383 100644 --- a/x/ibc/light-clients/07-tendermint/types/misbehaviour_handle.go +++ b/x/ibc/light-clients/07-tendermint/types/misbehaviour_handle.go @@ -51,35 +51,6 @@ func (cs ClientState) CheckMisbehaviourAndUpdateState( return nil, sdkerrors.Wrapf(err, "could not get trusted consensus state from clientStore for Header2 at TrustedHeight: %s", tmMisbehaviour.Header2) } - // calculate the age of the misbehaviour - infractionTime := tmMisbehaviour.GetTime() - ageDuration := ctx.BlockTime().Sub(infractionTime) - - var ageBlocks int64 - if tmMisbehaviour.GetHeight().GetVersionNumber() == cs.LatestHeight.VersionNumber { - // if the misbehaviour is in the same version as the client then - // perform expiry check using block height in addition to time - infractionHeight := tmMisbehaviour.GetHeight().GetVersionHeight() - ageBlocks = int64(cs.LatestHeight.VersionHeight - infractionHeight) - } else { - // if the misbehaviour is from a different version, then the version-height - // of misbehaviour has no correlation with the current version-height - // so we disable the block check by setting ageBlocks to 0 and only - // rely on the time expiry check with ageDuration - ageBlocks = 0 - } - - // Reject misbehaviour if the age is too old. Misbehaviour is considered stale - // if the difference in time and number of blocks is greater than the allowed - // parameters defined. - if ageDuration > cs.ConsensusParams.Evidence.MaxAgeDuration || - ageBlocks > cs.ConsensusParams.Evidence.MaxAgeNumBlocks { - return nil, sdkerrors.Wrapf(clienttypes.ErrInvalidMisbehaviour, - "age duration (%s) and age blocks (%d) are greater than max consensus params for duration (%s) and block (%d)", - ageDuration, ageBlocks, cs.ConsensusParams.Evidence.MaxAgeDuration, cs.ConsensusParams.Evidence.MaxAgeNumBlocks, - ) - } - // Check the validity of the two conflicting headers against their respective // trusted consensus states // NOTE: header height and commitment root assertions are checked in diff --git a/x/ibc/light-clients/07-tendermint/types/misbehaviour_handle_test.go b/x/ibc/light-clients/07-tendermint/types/misbehaviour_handle_test.go index e0fc26389c54..556bfeb524fb 100644 --- a/x/ibc/light-clients/07-tendermint/types/misbehaviour_handle_test.go +++ b/x/ibc/light-clients/07-tendermint/types/misbehaviour_handle_test.go @@ -7,7 +7,6 @@ import ( "github.com/tendermint/tendermint/crypto/tmhash" tmtypes "github.com/tendermint/tendermint/types" - "github.com/cosmos/cosmos-sdk/simapp" clienttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" commitmenttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/23-commitment/types" "github.com/cosmos/cosmos-sdk/x/ibc/core/exported" @@ -36,7 +35,6 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() { altSigners := []tmtypes.PrivValidator{altPrivVal} - versionHeight := int64(height.VersionHeight) heightMinus1 := clienttypes.NewHeight(height.VersionNumber, height.VersionHeight-1) heightMinus3 := clienttypes.NewHeight(height.VersionNumber, height.VersionHeight-3) @@ -53,7 +51,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() { }{ { "valid misbehavior misbehaviour", - types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), height, types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), @@ -69,7 +67,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() { }, { "valid misbehavior at height greater than last consensusState", - types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), heightMinus1, types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), @@ -85,7 +83,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() { }, { "valid misbehaviour with different trusted heights", - types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), heightMinus1, types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), suite.valsHash), @@ -101,7 +99,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() { }, { "valid misbehaviour at a previous version", - types.NewClientState(chainIDVersion1, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, clienttypes.NewHeight(1, 1), ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + types.NewClientState(chainIDVersion1, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, clienttypes.NewHeight(1, 1), commitmenttypes.GetSDKSpecs(), upgradePath, false, false), types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), heightMinus1, types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), suite.valsHash), @@ -117,7 +115,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() { }, { "valid misbehaviour at a future version", - types.NewClientState(chainIDVersion0, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + types.NewClientState(chainIDVersion0, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), heightMinus1, types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), suite.valsHash), @@ -133,7 +131,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() { }, { "valid misbehaviour with trusted heights at a previous version", - types.NewClientState(chainIDVersion1, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, clienttypes.NewHeight(1, 1), ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + types.NewClientState(chainIDVersion1, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, clienttypes.NewHeight(1, 1), commitmenttypes.GetSDKSpecs(), upgradePath, false, false), types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), heightMinus1, types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), suite.valsHash), @@ -149,7 +147,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() { }, { "consensus state's valset hash different from misbehaviour should still pass", - types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), suite.valsHash), height, types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), suite.valsHash), @@ -165,7 +163,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() { }, { "invalid misbehavior misbehaviour from different chain", - types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), height, types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), @@ -181,7 +179,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() { }, { "invalid misbehavior misbehaviour with trusted height different from trusted consensus state", - types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), heightMinus1, types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), suite.valsHash), @@ -197,7 +195,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() { }, { "invalid misbehavior misbehaviour with trusted validators different from trusted consensus state", - types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), heightMinus1, types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), suite.valsHash), @@ -229,7 +227,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() { }, { "trusted consensus state does not exist", - types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), nil, // consensus state for trusted height - 1 does not exist in store clienttypes.Height{}, types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), @@ -245,7 +243,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() { }, { "invalid tendermint misbehaviour", - types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), height, types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), @@ -254,41 +252,9 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() { suite.now, false, }, - { - "rejected misbehaviour due to expired age duration", - types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), - types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), - height, - types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), - height, - &types.Misbehaviour{ - Header1: suite.chainA.CreateTMClientHeader(chainID, int64(height.VersionHeight), height, suite.now, bothValSet, bothValSet, bothSigners), - Header2: suite.chainA.CreateTMClientHeader(chainID, int64(height.VersionHeight), height, suite.now.Add(time.Minute), bothValSet, bothValSet, bothSigners), - ChainId: chainID, - ClientId: chainID, - }, - suite.now.Add(2 * time.Minute).Add(simapp.DefaultConsensusParams.Evidence.MaxAgeDuration), - false, - }, - { - "rejected misbehaviour due to expired block duration", - types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, clienttypes.NewHeight(0, uint64(versionHeight+simapp.DefaultConsensusParams.Evidence.MaxAgeNumBlocks+1)), ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), - types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), - height, - types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), - height, - &types.Misbehaviour{ - Header1: suite.chainA.CreateTMClientHeader(chainID, int64(height.VersionHeight), height, suite.now, bothValSet, bothValSet, bothSigners), - Header2: suite.chainA.CreateTMClientHeader(chainID, int64(height.VersionHeight), height, suite.now.Add(time.Minute), bothValSet, bothValSet, bothSigners), - ChainId: chainID, - ClientId: chainID, - }, - suite.now.Add(time.Hour), - false, - }, { "provided height > header height", - types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), height, types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), @@ -304,7 +270,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() { }, { "unbonding period expired", - types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), types.NewConsensusState(time.Time{}, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), heightMinus1, types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), @@ -320,7 +286,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() { }, { "trusted validators is incorrect for given consensus state", - types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), height, types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), @@ -336,7 +302,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() { }, { "first valset has too much change", - types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), height, types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), @@ -352,7 +318,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() { }, { "second valset has too much change", - types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), height, types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), @@ -368,7 +334,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() { }, { "both valsets have too much change", - types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), + types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false), types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), height, types.NewConsensusState(suite.now, commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), bothValsHash), diff --git a/x/ibc/light-clients/07-tendermint/types/tendermint.pb.go b/x/ibc/light-clients/07-tendermint/types/tendermint.pb.go index f4b26ae3c03b..c8515dd9158b 100644 --- a/x/ibc/light-clients/07-tendermint/types/tendermint.pb.go +++ b/x/ibc/light-clients/07-tendermint/types/tendermint.pb.go @@ -7,15 +7,14 @@ import ( fmt "fmt" _go "github.com/confio/ics23/go" types "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" - types2 "github.com/cosmos/cosmos-sdk/x/ibc/core/23-commitment/types" + types1 "github.com/cosmos/cosmos-sdk/x/ibc/core/23-commitment/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "github.com/golang/protobuf/ptypes/duration" _ "github.com/golang/protobuf/ptypes/timestamp" - types1 "github.com/tendermint/tendermint/abci/types" github_com_tendermint_tendermint_libs_bytes "github.com/tendermint/tendermint/libs/bytes" - types3 "github.com/tendermint/tendermint/proto/tendermint/types" + types2 "github.com/tendermint/tendermint/proto/tendermint/types" io "io" math "math" math_bits "math/bits" @@ -50,18 +49,16 @@ type ClientState struct { FrozenHeight types.Height `protobuf:"bytes,6,opt,name=frozen_height,json=frozenHeight,proto3" json:"frozen_height" yaml:"frozen_height"` // Latest height the client was updated to LatestHeight types.Height `protobuf:"bytes,7,opt,name=latest_height,json=latestHeight,proto3" json:"latest_height" yaml:"latest_height"` - // Consensus params of the chain - ConsensusParams *types1.ConsensusParams `protobuf:"bytes,8,opt,name=consensus_params,json=consensusParams,proto3" json:"consensus_params,omitempty" yaml:"consensus_params"` // Proof specifications used in verifying counterparty state - ProofSpecs []*_go.ProofSpec `protobuf:"bytes,9,rep,name=proof_specs,json=proofSpecs,proto3" json:"proof_specs,omitempty" yaml:"proof_specs"` + ProofSpecs []*_go.ProofSpec `protobuf:"bytes,8,rep,name=proof_specs,json=proofSpecs,proto3" json:"proof_specs,omitempty" yaml:"proof_specs"` // Path at which next upgraded client will be committed - UpgradePath string `protobuf:"bytes,10,opt,name=upgrade_path,json=upgradePath,proto3" json:"upgrade_path,omitempty" yaml:"upgrade_path"` + UpgradePath string `protobuf:"bytes,9,opt,name=upgrade_path,json=upgradePath,proto3" json:"upgrade_path,omitempty" yaml:"upgrade_path"` // This flag, when set to true, will allow governance to recover a client // which has expired - AllowUpdateAfterExpiry bool `protobuf:"varint,11,opt,name=allow_update_after_expiry,json=allowUpdateAfterExpiry,proto3" json:"allow_update_after_expiry,omitempty" yaml:"allow_update_after_expiry"` + AllowUpdateAfterExpiry bool `protobuf:"varint,10,opt,name=allow_update_after_expiry,json=allowUpdateAfterExpiry,proto3" json:"allow_update_after_expiry,omitempty" yaml:"allow_update_after_expiry"` // This flag, when set to true, will allow governance to unfreeze a client // whose chain has experienced a misbehaviour event - AllowUpdateAfterMisbehaviour bool `protobuf:"varint,12,opt,name=allow_update_after_misbehaviour,json=allowUpdateAfterMisbehaviour,proto3" json:"allow_update_after_misbehaviour,omitempty" yaml:"allow_update_after_misbehaviour"` + AllowUpdateAfterMisbehaviour bool `protobuf:"varint,11,opt,name=allow_update_after_misbehaviour,json=allowUpdateAfterMisbehaviour,proto3" json:"allow_update_after_misbehaviour,omitempty" yaml:"allow_update_after_misbehaviour"` } func (m *ClientState) Reset() { *m = ClientState{} } @@ -103,7 +100,7 @@ type ConsensusState struct { // was stored. Timestamp time.Time `protobuf:"bytes,1,opt,name=timestamp,proto3,stdtime" json:"timestamp"` // commitment root (i.e app hash) - Root types2.MerkleRoot `protobuf:"bytes,2,opt,name=root,proto3" json:"root"` + Root types1.MerkleRoot `protobuf:"bytes,2,opt,name=root,proto3" json:"root"` NextValidatorsHash github_com_tendermint_tendermint_libs_bytes.HexBytes `protobuf:"bytes,3,opt,name=next_validators_hash,json=nextValidatorsHash,proto3,casttype=github.com/tendermint/tendermint/libs/bytes.HexBytes" json:"next_validators_hash,omitempty" yaml:"next_validators_hash"` } @@ -194,10 +191,10 @@ var xxx_messageInfo_Misbehaviour proto.InternalMessageInfo // hash to TrustedConsensusState.NextValidatorsHash since that is the last // trusted validator set at the TrustedHeight. type Header struct { - *types3.SignedHeader `protobuf:"bytes,1,opt,name=signed_header,json=signedHeader,proto3,embedded=signed_header" json:"signed_header,omitempty" yaml:"signed_header"` - ValidatorSet *types3.ValidatorSet `protobuf:"bytes,2,opt,name=validator_set,json=validatorSet,proto3" json:"validator_set,omitempty" yaml:"validator_set"` + *types2.SignedHeader `protobuf:"bytes,1,opt,name=signed_header,json=signedHeader,proto3,embedded=signed_header" json:"signed_header,omitempty" yaml:"signed_header"` + ValidatorSet *types2.ValidatorSet `protobuf:"bytes,2,opt,name=validator_set,json=validatorSet,proto3" json:"validator_set,omitempty" yaml:"validator_set"` TrustedHeight types.Height `protobuf:"bytes,3,opt,name=trusted_height,json=trustedHeight,proto3" json:"trusted_height" yaml:"trusted_height"` - TrustedValidators *types3.ValidatorSet `protobuf:"bytes,4,opt,name=trusted_validators,json=trustedValidators,proto3" json:"trusted_validators,omitempty" yaml:"trusted_validators"` + TrustedValidators *types2.ValidatorSet `protobuf:"bytes,4,opt,name=trusted_validators,json=trustedValidators,proto3" json:"trusted_validators,omitempty" yaml:"trusted_validators"` } func (m *Header) Reset() { *m = Header{} } @@ -233,7 +230,7 @@ func (m *Header) XXX_DiscardUnknown() { var xxx_messageInfo_Header proto.InternalMessageInfo -func (m *Header) GetValidatorSet() *types3.ValidatorSet { +func (m *Header) GetValidatorSet() *types2.ValidatorSet { if m != nil { return m.ValidatorSet } @@ -247,7 +244,7 @@ func (m *Header) GetTrustedHeight() types.Height { return types.Height{} } -func (m *Header) GetTrustedValidators() *types3.ValidatorSet { +func (m *Header) GetTrustedValidators() *types2.ValidatorSet { if m != nil { return m.TrustedValidators } @@ -320,79 +317,76 @@ func init() { } var fileDescriptor_c6d6cf2b288949be = []byte{ - // 1142 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0xcf, 0x6f, 0xe3, 0xc4, - 0x17, 0x6f, 0xda, 0x7e, 0xb7, 0xe9, 0x24, 0xdd, 0xf6, 0xeb, 0x2d, 0xbb, 0x69, 0xb7, 0x1b, 0x47, - 0x06, 0x2d, 0x15, 0xd2, 0xda, 0x24, 0x8b, 0x84, 0x54, 0x71, 0xc1, 0x5b, 0x50, 0x8b, 0x58, 0xa9, - 0x72, 0xf9, 0x21, 0x21, 0x81, 0x99, 0xd8, 0x93, 0x78, 0x54, 0xdb, 0x63, 0x3c, 0x93, 0x90, 0xf2, - 0x17, 0xc0, 0x6d, 0x8f, 0x2b, 0x4e, 0x1c, 0xf8, 0x47, 0xb8, 0xed, 0xb1, 0xe2, 0xc4, 0xc9, 0xa0, - 0xf6, 0x3f, 0xc8, 0x91, 0x13, 0x9a, 0x1f, 0x8e, 0x27, 0xd9, 0x2e, 0xd5, 0x72, 0x49, 0xe6, 0xbd, - 0xf7, 0x79, 0xef, 0xa3, 0x79, 0xf3, 0xe6, 0x33, 0x06, 0x0e, 0xee, 0x07, 0x4e, 0x8c, 0x87, 0x11, - 0x0b, 0x62, 0x8c, 0x52, 0x46, 0x1d, 0x86, 0xd2, 0x10, 0xe5, 0x09, 0x4e, 0x99, 0x33, 0xee, 0x6a, - 0x96, 0x9d, 0xe5, 0x84, 0x11, 0xa3, 0x8d, 0xfb, 0x81, 0xad, 0x27, 0xd8, 0x1a, 0x64, 0xdc, 0xdd, - 0xed, 0x68, 0xf9, 0xec, 0x3c, 0x43, 0xd4, 0x19, 0xc3, 0x18, 0x87, 0x90, 0x91, 0x5c, 0x56, 0xd8, - 0xdd, 0x7b, 0x09, 0x21, 0x7e, 0x55, 0xf4, 0xbe, 0x16, 0x85, 0xfd, 0x00, 0xcf, 0x05, 0xef, 0x04, - 0x24, 0x1d, 0x60, 0xe2, 0x64, 0x39, 0x21, 0x83, 0xd2, 0xd9, 0x1e, 0x12, 0x32, 0x8c, 0x91, 0x23, - 0xac, 0xfe, 0x68, 0xe0, 0x84, 0xa3, 0x1c, 0x32, 0x4c, 0x52, 0x15, 0x37, 0x17, 0xe3, 0x0c, 0x27, - 0x88, 0x32, 0x98, 0x64, 0x25, 0x80, 0xf7, 0x20, 0x20, 0x39, 0x72, 0xe4, 0x96, 0xf8, 0xbe, 0xe5, - 0x4a, 0x01, 0xde, 0xae, 0x00, 0x24, 0x49, 0x30, 0x4b, 0x4a, 0xd0, 0xcc, 0x52, 0xc0, 0xed, 0x21, - 0x19, 0x12, 0xb1, 0x74, 0xf8, 0x4a, 0x7a, 0xad, 0xdf, 0xeb, 0xa0, 0xf1, 0x44, 0xd4, 0x3b, 0x65, - 0x90, 0x21, 0x63, 0x07, 0xd4, 0x83, 0x08, 0xe2, 0xd4, 0xc7, 0x61, 0xab, 0xd6, 0xa9, 0xed, 0xaf, - 0x7b, 0x6b, 0xc2, 0x3e, 0x0e, 0x0d, 0x04, 0x1a, 0x2c, 0x1f, 0x51, 0xe6, 0xc7, 0x68, 0x8c, 0xe2, - 0xd6, 0x72, 0xa7, 0xb6, 0xdf, 0xe8, 0xed, 0xdb, 0xff, 0xde, 0x73, 0xfb, 0xe3, 0x1c, 0x06, 0x7c, - 0xc3, 0xee, 0xee, 0x8b, 0xc2, 0x5c, 0x9a, 0x16, 0xa6, 0x71, 0x0e, 0x93, 0xf8, 0xc0, 0xd2, 0x4a, - 0x59, 0x1e, 0x10, 0xd6, 0xa7, 0xdc, 0x30, 0x06, 0x60, 0x53, 0x58, 0x38, 0x1d, 0xfa, 0x19, 0xca, - 0x31, 0x09, 0x5b, 0x2b, 0x82, 0x6a, 0xc7, 0x96, 0xcd, 0xb2, 0xcb, 0x66, 0xd9, 0x87, 0xaa, 0x99, - 0xae, 0xa5, 0x6a, 0xdf, 0xd5, 0x6a, 0x57, 0xf9, 0xd6, 0xf3, 0x3f, 0xcd, 0x9a, 0x77, 0xbb, 0xf4, - 0x9e, 0x08, 0xa7, 0x81, 0xc1, 0xd6, 0x28, 0xed, 0x93, 0x34, 0xd4, 0x88, 0x56, 0x6f, 0x22, 0x7a, - 0x53, 0x11, 0xdd, 0x93, 0x44, 0x8b, 0x05, 0x24, 0xd3, 0xe6, 0xcc, 0xad, 0xa8, 0x10, 0xd8, 0x4c, - 0xe0, 0xc4, 0x0f, 0x62, 0x12, 0x9c, 0xf9, 0x61, 0x8e, 0x07, 0xac, 0xf5, 0xbf, 0xd7, 0xdc, 0xd2, - 0x42, 0xbe, 0x24, 0xda, 0x48, 0xe0, 0xe4, 0x09, 0x77, 0x1e, 0x72, 0x9f, 0xf1, 0x35, 0xd8, 0x18, - 0xe4, 0xe4, 0x07, 0x94, 0xfa, 0x11, 0xe2, 0x07, 0xd2, 0xba, 0x25, 0x48, 0x76, 0xc5, 0x11, 0xf1, - 0x11, 0xb1, 0xd5, 0xe4, 0x8c, 0xbb, 0xf6, 0x91, 0x40, 0xb8, 0x7b, 0x8a, 0x65, 0x5b, 0xb2, 0xcc, - 0xa5, 0x5b, 0x5e, 0x53, 0xda, 0x12, 0xcb, 0xcb, 0xc7, 0x90, 0x21, 0xca, 0xca, 0xf2, 0x6b, 0xaf, - 0x5b, 0x7e, 0x2e, 0xdd, 0xf2, 0x9a, 0xd2, 0x56, 0xe5, 0x23, 0xb0, 0x15, 0x90, 0x94, 0xa2, 0x94, - 0x8e, 0xa8, 0x9f, 0xc1, 0x1c, 0x26, 0xb4, 0x55, 0x17, 0x0c, 0x1d, 0x7d, 0xa4, 0xf8, 0xbd, 0xb3, - 0x9f, 0x94, 0xc0, 0x13, 0x81, 0x73, 0xef, 0x57, 0x47, 0xb2, 0x58, 0xc3, 0xf2, 0x36, 0x83, 0x79, - 0xb4, 0x71, 0x0c, 0x1a, 0xe2, 0x92, 0xfa, 0x34, 0x43, 0x01, 0x6d, 0xad, 0x77, 0x56, 0xf6, 0x1b, - 0xbd, 0x2d, 0x1b, 0x07, 0xb4, 0xf7, 0xd8, 0x3e, 0xe1, 0x91, 0xd3, 0x0c, 0x05, 0xee, 0xdd, 0x6a, - 0x58, 0x35, 0xb8, 0xe5, 0x81, 0xac, 0x84, 0x50, 0xe3, 0x00, 0x34, 0x47, 0xd9, 0x30, 0x87, 0x21, - 0xf2, 0x33, 0xc8, 0xa2, 0x16, 0xe0, 0x57, 0xc6, 0xbd, 0x37, 0x2d, 0xcc, 0x3b, 0x6a, 0x42, 0xb4, - 0xa8, 0xe5, 0x35, 0x94, 0x79, 0x02, 0x59, 0x64, 0xf8, 0x60, 0x07, 0xc6, 0x31, 0xf9, 0xde, 0x1f, - 0x65, 0x21, 0x64, 0xc8, 0x87, 0x03, 0x86, 0x72, 0x1f, 0x4d, 0x32, 0x9c, 0x9f, 0xb7, 0x1a, 0x9d, - 0xda, 0x7e, 0xdd, 0x7d, 0x6b, 0x5a, 0x98, 0x1d, 0x59, 0xe8, 0x95, 0x50, 0xcb, 0xbb, 0x2b, 0x62, - 0x9f, 0x8b, 0xd0, 0x87, 0x3c, 0xf2, 0x91, 0x08, 0x18, 0xdf, 0x01, 0xf3, 0x9a, 0xac, 0x04, 0xd3, - 0x3e, 0x8a, 0xe0, 0x18, 0x93, 0x51, 0xde, 0x6a, 0x0a, 0x9a, 0x77, 0xa6, 0x85, 0xf9, 0xf0, 0x95, - 0x34, 0x7a, 0x82, 0xe5, 0xed, 0x2d, 0x92, 0x3d, 0xd5, 0xc2, 0x07, 0xab, 0x3f, 0xfe, 0x62, 0x2e, - 0x59, 0xbf, 0x2e, 0x83, 0xdb, 0xb3, 0x23, 0x92, 0xba, 0xe2, 0x82, 0xf5, 0x99, 0xb4, 0x09, 0x61, - 0xe1, 0x83, 0xb3, 0x38, 0xfc, 0x9f, 0x95, 0x08, 0xb7, 0xce, 0x07, 0xe7, 0x19, 0x9f, 0xf1, 0x2a, - 0xcd, 0xf8, 0x00, 0xac, 0xe6, 0x84, 0x30, 0xa5, 0x3c, 0x96, 0x36, 0x77, 0x95, 0xd6, 0x8d, 0xbb, - 0xf6, 0x53, 0x94, 0x9f, 0xc5, 0xc8, 0x23, 0x84, 0xb9, 0xab, 0xbc, 0x8c, 0x27, 0xb2, 0x8c, 0x9f, - 0x6a, 0x60, 0x3b, 0x45, 0x13, 0xe6, 0xcf, 0x34, 0x9f, 0xfa, 0x11, 0xa4, 0x91, 0x50, 0x97, 0xa6, - 0xfb, 0xe5, 0xb4, 0x30, 0xef, 0xcb, 0x1e, 0x5c, 0x87, 0xb2, 0xfe, 0x2e, 0xcc, 0xf7, 0x86, 0x98, - 0x45, 0xa3, 0x3e, 0xa7, 0xd3, 0x5f, 0x22, 0x6d, 0x19, 0xe3, 0x3e, 0x75, 0xfa, 0xe7, 0x0c, 0x51, - 0xfb, 0x08, 0x4d, 0x5c, 0xbe, 0xf0, 0x0c, 0x5e, 0xee, 0x8b, 0x59, 0xb5, 0x23, 0x48, 0x23, 0xd5, - 0xa6, 0xdf, 0x96, 0x41, 0x53, 0xef, 0x9e, 0xd1, 0x05, 0xeb, 0xf2, 0x0a, 0xcd, 0xd4, 0xd7, 0xdd, - 0x9e, 0x16, 0xe6, 0x96, 0x9a, 0xec, 0x32, 0x64, 0x79, 0x75, 0xb9, 0x3e, 0x0e, 0x0d, 0x5b, 0xd3, - 0xeb, 0x65, 0x91, 0x71, 0x67, 0x5a, 0x98, 0x9b, 0x2a, 0x43, 0x45, 0xac, 0x4a, 0xc4, 0x21, 0xa8, - 0x47, 0x08, 0x86, 0x28, 0xf7, 0xbb, 0x4a, 0x56, 0x1f, 0xde, 0xa4, 0xe0, 0x47, 0x02, 0xef, 0xb6, - 0x2f, 0x0b, 0x73, 0x4d, 0xae, 0xbb, 0x15, 0x45, 0x59, 0xcc, 0xf2, 0xd6, 0xe4, 0xb2, 0xab, 0x51, - 0xf4, 0x94, 0xa0, 0xfe, 0x07, 0x8a, 0xde, 0x4b, 0x14, 0xbd, 0x19, 0x45, 0xef, 0xa0, 0xce, 0xfb, - 0xf7, 0x9c, 0xf7, 0xf0, 0xe7, 0x15, 0x70, 0x4b, 0x66, 0x18, 0x10, 0x6c, 0x50, 0x3c, 0x4c, 0x51, - 0xe8, 0x4b, 0x98, 0x1a, 0xb3, 0xb6, 0xce, 0x25, 0x1f, 0xec, 0x53, 0x01, 0x53, 0xa4, 0x7b, 0x17, - 0x85, 0x59, 0xab, 0x34, 0x6a, 0xae, 0x84, 0xe5, 0x35, 0xa9, 0x86, 0xe5, 0x12, 0x38, 0x9b, 0x0b, - 0x9f, 0xa2, 0x72, 0x14, 0xaf, 0xa1, 0x98, 0x1d, 0xf8, 0x29, 0x62, 0x6e, 0xab, 0x2a, 0x3f, 0x97, - 0x6e, 0x79, 0xcd, 0xb1, 0x86, 0x33, 0xbe, 0x05, 0xf2, 0x91, 0x12, 0xfc, 0x42, 0x62, 0x57, 0x6e, - 0x94, 0xd8, 0x07, 0x4a, 0x62, 0xdf, 0xd0, 0x9e, 0xbe, 0x59, 0xbe, 0xe5, 0x6d, 0x28, 0x87, 0x12, - 0xd9, 0x18, 0x18, 0x25, 0xa2, 0x1a, 0x70, 0x75, 0x4a, 0x37, 0xed, 0xe2, 0xc1, 0xb4, 0x30, 0x77, - 0xe6, 0x59, 0xaa, 0x1a, 0x96, 0xf7, 0x7f, 0xe5, 0xac, 0x46, 0xdd, 0xfa, 0x04, 0xd4, 0xcb, 0xe7, - 0xdf, 0xd8, 0x03, 0xeb, 0xe9, 0x28, 0x41, 0x39, 0x8f, 0x88, 0x93, 0x59, 0xf1, 0x2a, 0x87, 0xd1, - 0x01, 0x8d, 0x10, 0xa5, 0x24, 0xc1, 0xa9, 0x88, 0x2f, 0x8b, 0xb8, 0xee, 0x72, 0xbf, 0x79, 0x71, - 0xd9, 0xae, 0x5d, 0x5c, 0xb6, 0x6b, 0x7f, 0x5d, 0xb6, 0x6b, 0xcf, 0xae, 0xda, 0x4b, 0x17, 0x57, - 0xed, 0xa5, 0x3f, 0xae, 0xda, 0x4b, 0x5f, 0x1d, 0x6a, 0xd7, 0x32, 0x20, 0x34, 0x21, 0x54, 0xfd, - 0x3d, 0xa2, 0xe1, 0x99, 0x33, 0xa9, 0xbe, 0x22, 0x1f, 0x95, 0x9f, 0x91, 0xef, 0xbe, 0xff, 0x68, - 0xf1, 0x3b, 0xaf, 0x7f, 0x4b, 0xa8, 0xd0, 0xe3, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x0e, 0x76, - 0x2d, 0x4a, 0x75, 0x0a, 0x00, 0x00, + // 1096 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0xcf, 0x6f, 0xe3, 0x44, + 0x14, 0x6e, 0xda, 0xb2, 0x4d, 0x27, 0xe9, 0x76, 0xf1, 0x96, 0x6e, 0x5a, 0xba, 0x71, 0x64, 0xd0, + 0x52, 0x21, 0xd5, 0x26, 0x59, 0x24, 0xa4, 0x8a, 0x0b, 0x6e, 0x41, 0x2d, 0x62, 0xa5, 0xca, 0xe5, + 0x87, 0x84, 0x04, 0x66, 0x62, 0x4f, 0x92, 0x51, 0x6d, 0x8f, 0xf1, 0x4c, 0x42, 0xca, 0x5f, 0x00, + 0xb7, 0x3d, 0xae, 0x38, 0x71, 0xe0, 0x1f, 0xe1, 0xb6, 0xc7, 0x1e, 0x39, 0x19, 0xd4, 0x5e, 0x38, + 0xe7, 0xc8, 0x09, 0xcd, 0x0f, 0xdb, 0xd3, 0x6c, 0x97, 0x6a, 0xb9, 0xb4, 0xf3, 0xde, 0xfb, 0xde, + 0xf7, 0x65, 0xde, 0xbc, 0x79, 0x63, 0xe0, 0xe0, 0x7e, 0xe0, 0x44, 0x78, 0x38, 0x62, 0x41, 0x84, + 0x51, 0xc2, 0xa8, 0xc3, 0x50, 0x12, 0xa2, 0x2c, 0xc6, 0x09, 0x73, 0x26, 0x5d, 0xcd, 0xb2, 0xd3, + 0x8c, 0x30, 0x62, 0xb4, 0x71, 0x3f, 0xb0, 0xf5, 0x04, 0x5b, 0x83, 0x4c, 0xba, 0xdb, 0x1d, 0x2d, + 0x9f, 0x9d, 0xa7, 0x88, 0x3a, 0x13, 0x18, 0xe1, 0x10, 0x32, 0x92, 0x49, 0x86, 0xed, 0x9d, 0x17, + 0x10, 0xe2, 0xaf, 0x8a, 0xde, 0x0f, 0x48, 0x32, 0xc0, 0xc4, 0x49, 0x33, 0x42, 0x06, 0x85, 0xb3, + 0x3d, 0x24, 0x64, 0x18, 0x21, 0x47, 0x58, 0xfd, 0xf1, 0xc0, 0x09, 0xc7, 0x19, 0x64, 0x98, 0x24, + 0x2a, 0x6e, 0xce, 0xc7, 0x19, 0x8e, 0x11, 0x65, 0x30, 0x4e, 0x0b, 0x00, 0xdf, 0x66, 0x40, 0x32, + 0xe4, 0xc8, 0x5f, 0xcd, 0xb7, 0x26, 0x57, 0x0a, 0xf0, 0x4e, 0x05, 0x20, 0x71, 0x8c, 0x59, 0x5c, + 0x80, 0x4a, 0x4b, 0x01, 0x37, 0x86, 0x64, 0x48, 0xc4, 0xd2, 0xe1, 0x2b, 0xe9, 0xb5, 0xfe, 0x5e, + 0x01, 0x8d, 0x03, 0xc1, 0x77, 0xca, 0x20, 0x43, 0xc6, 0x16, 0xa8, 0x07, 0x23, 0x88, 0x13, 0x1f, + 0x87, 0xad, 0x5a, 0xa7, 0xb6, 0xbb, 0xea, 0xad, 0x08, 0xfb, 0x38, 0x34, 0x10, 0x68, 0xb0, 0x6c, + 0x4c, 0x99, 0x1f, 0xa1, 0x09, 0x8a, 0x5a, 0x8b, 0x9d, 0xda, 0x6e, 0xa3, 0xb7, 0x6b, 0xff, 0x77, + 0x59, 0xed, 0x4f, 0x32, 0x18, 0xf0, 0x0d, 0xbb, 0xdb, 0xcf, 0x73, 0x73, 0x61, 0x96, 0x9b, 0xc6, + 0x39, 0x8c, 0xa3, 0x7d, 0x4b, 0xa3, 0xb2, 0x3c, 0x20, 0xac, 0xcf, 0xb8, 0x61, 0x0c, 0xc0, 0xba, + 0xb0, 0x70, 0x32, 0xf4, 0x53, 0x94, 0x61, 0x12, 0xb6, 0x96, 0x84, 0xd4, 0x96, 0x2d, 0x8b, 0x65, + 0x17, 0xc5, 0xb2, 0x0f, 0x55, 0x31, 0x5d, 0x4b, 0x71, 0x6f, 0x6a, 0xdc, 0x55, 0xbe, 0xf5, 0xec, + 0x4f, 0xb3, 0xe6, 0xdd, 0x2d, 0xbc, 0x27, 0xc2, 0x69, 0x60, 0x70, 0x6f, 0x9c, 0xf4, 0x49, 0x12, + 0x6a, 0x42, 0xcb, 0xb7, 0x09, 0xbd, 0xa5, 0x84, 0x1e, 0x48, 0xa1, 0x79, 0x02, 0xa9, 0xb4, 0x5e, + 0xba, 0x95, 0x14, 0x02, 0xeb, 0x31, 0x9c, 0xfa, 0x41, 0x44, 0x82, 0x33, 0x3f, 0xcc, 0xf0, 0x80, + 0xb5, 0x5e, 0x7b, 0xc5, 0x2d, 0xcd, 0xe5, 0x4b, 0xa1, 0xb5, 0x18, 0x4e, 0x0f, 0xb8, 0xf3, 0x90, + 0xfb, 0x8c, 0x6f, 0xc0, 0xda, 0x20, 0x23, 0x3f, 0xa2, 0xc4, 0x1f, 0x21, 0x7e, 0x20, 0xad, 0x3b, + 0x42, 0x64, 0x5b, 0x1c, 0x11, 0x6f, 0x11, 0x5b, 0x75, 0xce, 0xa4, 0x6b, 0x1f, 0x09, 0x84, 0xbb, + 0xa3, 0x54, 0x36, 0xa4, 0xca, 0xb5, 0x74, 0xcb, 0x6b, 0x4a, 0x5b, 0x62, 0x39, 0x7d, 0x04, 0x19, + 0xa2, 0xac, 0xa0, 0x5f, 0x79, 0x55, 0xfa, 0x6b, 0xe9, 0x96, 0xd7, 0x94, 0xb6, 0xa2, 0x3f, 0x06, + 0x0d, 0x71, 0x75, 0x7c, 0x9a, 0xa2, 0x80, 0xb6, 0xea, 0x9d, 0xa5, 0xdd, 0x46, 0xef, 0x9e, 0x8d, + 0x03, 0xda, 0x7b, 0x6c, 0x9f, 0xf0, 0xc8, 0x69, 0x8a, 0x02, 0x77, 0xb3, 0x6a, 0x21, 0x0d, 0x6e, + 0x79, 0x20, 0x2d, 0x20, 0xd4, 0xd8, 0x07, 0xcd, 0x71, 0x3a, 0xcc, 0x60, 0x88, 0xfc, 0x14, 0xb2, + 0x51, 0x6b, 0x95, 0x37, 0xb2, 0xfb, 0x60, 0x96, 0x9b, 0xf7, 0xd5, 0xb9, 0x69, 0x51, 0xcb, 0x6b, + 0x28, 0xf3, 0x04, 0xb2, 0x91, 0xe1, 0x83, 0x2d, 0x18, 0x45, 0xe4, 0x07, 0x7f, 0x9c, 0x86, 0x90, + 0x21, 0x1f, 0x0e, 0x18, 0xca, 0x7c, 0x34, 0x4d, 0x71, 0x76, 0xde, 0x02, 0x9d, 0xda, 0x6e, 0xdd, + 0x7d, 0x7b, 0x96, 0x9b, 0x1d, 0x49, 0xf4, 0x52, 0xa8, 0xe5, 0x6d, 0x8a, 0xd8, 0x17, 0x22, 0xf4, + 0x11, 0x8f, 0x7c, 0x2c, 0x02, 0xc6, 0xf7, 0xc0, 0xbc, 0x21, 0x2b, 0xc6, 0xb4, 0x8f, 0x46, 0x70, + 0x82, 0xc9, 0x38, 0x6b, 0x35, 0x84, 0xcc, 0xbb, 0xb3, 0xdc, 0x7c, 0xf4, 0x52, 0x19, 0x3d, 0xc1, + 0xf2, 0x76, 0xe6, 0xc5, 0x9e, 0x68, 0xe1, 0xfd, 0xe5, 0x9f, 0x7e, 0x35, 0x17, 0xac, 0xdf, 0x16, + 0xc1, 0xdd, 0x03, 0x92, 0x50, 0x94, 0xd0, 0x31, 0x95, 0xb7, 0xdd, 0x05, 0xab, 0xe5, 0xc0, 0x11, + 0xd7, 0x9d, 0x1f, 0xe7, 0x7c, 0x4b, 0x7e, 0x5e, 0x20, 0xdc, 0x3a, 0x3f, 0xce, 0xa7, 0xbc, 0xf3, + 0xaa, 0x34, 0xe3, 0x43, 0xb0, 0x9c, 0x11, 0xc2, 0xd4, 0x3c, 0xb0, 0xb4, 0x6e, 0xa8, 0x26, 0xd0, + 0xa4, 0x6b, 0x3f, 0x41, 0xd9, 0x59, 0x84, 0x3c, 0x42, 0x98, 0xbb, 0xcc, 0x69, 0x3c, 0x91, 0x65, + 0xfc, 0x5c, 0x03, 0x1b, 0x09, 0x9a, 0x32, 0xbf, 0x1c, 0xb6, 0xd4, 0x1f, 0x41, 0x3a, 0x12, 0x77, + 0xbe, 0xe9, 0x7e, 0x35, 0xcb, 0xcd, 0x37, 0x65, 0x0d, 0x6e, 0x42, 0x59, 0xff, 0xe4, 0xe6, 0xfb, + 0x43, 0xcc, 0x46, 0xe3, 0x3e, 0x97, 0xd3, 0x9f, 0x00, 0x6d, 0x19, 0xe1, 0x3e, 0x75, 0xfa, 0xe7, + 0x0c, 0x51, 0xfb, 0x08, 0x4d, 0x5d, 0xbe, 0xf0, 0x0c, 0x4e, 0xf7, 0x65, 0xc9, 0x76, 0x04, 0xe9, + 0x48, 0x95, 0xe9, 0xf7, 0x45, 0xd0, 0xd4, 0xab, 0x67, 0x74, 0xc1, 0xaa, 0x6c, 0xec, 0x72, 0x26, + 0xba, 0x1b, 0xb3, 0xdc, 0xbc, 0x27, 0x7f, 0x56, 0x19, 0xb2, 0xbc, 0xba, 0x5c, 0x1f, 0x87, 0x86, + 0xad, 0x4d, 0xd1, 0x45, 0x91, 0x71, 0x7f, 0x96, 0x9b, 0xeb, 0x2a, 0x43, 0x45, 0xac, 0x6a, 0xb4, + 0x42, 0x50, 0x1f, 0x21, 0x18, 0xa2, 0xcc, 0xef, 0xaa, 0x61, 0xf7, 0xe8, 0xb6, 0xb9, 0x7a, 0x24, + 0xf0, 0x6e, 0xfb, 0x32, 0x37, 0x57, 0xe4, 0xba, 0x5b, 0x49, 0x14, 0x64, 0x96, 0xb7, 0x22, 0x97, + 0x5d, 0x4d, 0xa2, 0xa7, 0xc6, 0xdc, 0xff, 0x90, 0xe8, 0xbd, 0x20, 0xd1, 0x2b, 0x25, 0x7a, 0xfb, + 0x75, 0x5e, 0xbf, 0x67, 0xbc, 0x86, 0xbf, 0x2c, 0x81, 0x3b, 0x32, 0xc3, 0x80, 0x60, 0x8d, 0xe2, + 0x61, 0x82, 0x42, 0x5f, 0xc2, 0x54, 0x9b, 0xb5, 0x75, 0x2d, 0xf9, 0x8c, 0x9e, 0x0a, 0x98, 0x12, + 0xdd, 0xb9, 0xc8, 0xcd, 0x5a, 0x35, 0x39, 0xae, 0x51, 0x58, 0x5e, 0x93, 0x6a, 0x58, 0x3e, 0x98, + 0xca, 0xbe, 0xf0, 0x29, 0x2a, 0x5a, 0xf1, 0x06, 0x89, 0xf2, 0xc0, 0x4f, 0x11, 0x73, 0x5b, 0x15, + 0xfd, 0xb5, 0x74, 0xcb, 0x6b, 0x4e, 0x34, 0x9c, 0xf1, 0x1d, 0x90, 0x4f, 0x87, 0xd0, 0x17, 0x83, + 0x6f, 0xe9, 0xd6, 0xc1, 0xf7, 0x50, 0x0d, 0xbe, 0x37, 0xb4, 0x07, 0xa9, 0xcc, 0xb7, 0xbc, 0x35, + 0xe5, 0x50, 0xa3, 0x2f, 0x02, 0x46, 0x81, 0xa8, 0x1a, 0x5c, 0x9d, 0xd2, 0x6d, 0xbb, 0x78, 0x38, + 0xcb, 0xcd, 0xad, 0xeb, 0x2a, 0x15, 0x87, 0xe5, 0xbd, 0xae, 0x9c, 0x55, 0xab, 0x5b, 0x9f, 0x82, + 0x7a, 0xf1, 0x28, 0x1b, 0x3b, 0x60, 0x35, 0x19, 0xc7, 0x28, 0xe3, 0x11, 0x71, 0x32, 0x4b, 0x5e, + 0xe5, 0x30, 0x3a, 0xa0, 0x11, 0xa2, 0x84, 0xc4, 0x38, 0x11, 0xf1, 0x45, 0x11, 0xd7, 0x5d, 0xee, + 0xb7, 0xcf, 0x2f, 0xdb, 0xb5, 0x8b, 0xcb, 0x76, 0xed, 0xaf, 0xcb, 0x76, 0xed, 0xe9, 0x55, 0x7b, + 0xe1, 0xe2, 0xaa, 0xbd, 0xf0, 0xc7, 0x55, 0x7b, 0xe1, 0xeb, 0x43, 0xed, 0x5a, 0x06, 0x84, 0xc6, + 0x84, 0xaa, 0x7f, 0x7b, 0x34, 0x3c, 0x73, 0xa6, 0xd5, 0xe7, 0xdb, 0x5e, 0xf1, 0xfd, 0xf6, 0xde, + 0x07, 0x7b, 0xf3, 0x1f, 0x58, 0xfd, 0x3b, 0x62, 0x0a, 0x3d, 0xfe, 0x37, 0x00, 0x00, 0xff, 0xff, + 0x6c, 0xfc, 0x74, 0x25, 0xee, 0x09, 0x00, 0x00, } func (m *ClientState) Marshal() (dAtA []byte, err error) { @@ -423,7 +417,7 @@ func (m *ClientState) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0 } i-- - dAtA[i] = 0x60 + dAtA[i] = 0x58 } if m.AllowUpdateAfterExpiry { i-- @@ -433,14 +427,14 @@ func (m *ClientState) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0 } i-- - dAtA[i] = 0x58 + dAtA[i] = 0x50 } if len(m.UpgradePath) > 0 { i -= len(m.UpgradePath) copy(dAtA[i:], m.UpgradePath) i = encodeVarintTendermint(dAtA, i, uint64(len(m.UpgradePath))) i-- - dAtA[i] = 0x52 + dAtA[i] = 0x4a } if len(m.ProofSpecs) > 0 { for iNdEx := len(m.ProofSpecs) - 1; iNdEx >= 0; iNdEx-- { @@ -453,21 +447,9 @@ func (m *ClientState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintTendermint(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x4a + dAtA[i] = 0x42 } } - if m.ConsensusParams != nil { - { - size, err := m.ConsensusParams.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTendermint(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x42 - } { size, err := m.LatestHeight.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -488,29 +470,29 @@ func (m *ClientState) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x32 - n4, err4 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.MaxClockDrift, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.MaxClockDrift):]) + n3, err3 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.MaxClockDrift, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.MaxClockDrift):]) + if err3 != nil { + return 0, err3 + } + i -= n3 + i = encodeVarintTendermint(dAtA, i, uint64(n3)) + i-- + dAtA[i] = 0x2a + n4, err4 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.UnbondingPeriod, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.UnbondingPeriod):]) if err4 != nil { return 0, err4 } i -= n4 i = encodeVarintTendermint(dAtA, i, uint64(n4)) i-- - dAtA[i] = 0x2a - n5, err5 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.UnbondingPeriod, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.UnbondingPeriod):]) + dAtA[i] = 0x22 + n5, err5 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.TrustingPeriod, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.TrustingPeriod):]) if err5 != nil { return 0, err5 } i -= n5 i = encodeVarintTendermint(dAtA, i, uint64(n5)) i-- - dAtA[i] = 0x22 - n6, err6 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.TrustingPeriod, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.TrustingPeriod):]) - if err6 != nil { - return 0, err6 - } - i -= n6 - i = encodeVarintTendermint(dAtA, i, uint64(n6)) - i-- dAtA[i] = 0x1a { size, err := m.TrustLevel.MarshalToSizedBuffer(dAtA[:i]) @@ -569,12 +551,12 @@ func (m *ConsensusState) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x12 - n9, err9 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Timestamp, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Timestamp):]) - if err9 != nil { - return 0, err9 + n8, err8 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Timestamp, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Timestamp):]) + if err8 != nil { + return 0, err8 } - i -= n9 - i = encodeVarintTendermint(dAtA, i, uint64(n9)) + i -= n8 + i = encodeVarintTendermint(dAtA, i, uint64(n8)) i-- dAtA[i] = 0xa return len(dAtA) - i, nil @@ -776,10 +758,6 @@ func (m *ClientState) Size() (n int) { n += 1 + l + sovTendermint(uint64(l)) l = m.LatestHeight.Size() n += 1 + l + sovTendermint(uint64(l)) - if m.ConsensusParams != nil { - l = m.ConsensusParams.Size() - n += 1 + l + sovTendermint(uint64(l)) - } if len(m.ProofSpecs) > 0 { for _, e := range m.ProofSpecs { l = e.Size() @@ -1145,42 +1123,6 @@ func (m *ClientState) Unmarshal(dAtA []byte) error { } iNdEx = postIndex case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConsensusParams", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTendermint - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTendermint - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTendermint - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ConsensusParams == nil { - m.ConsensusParams = &types1.ConsensusParams{} - } - if err := m.ConsensusParams.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 9: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ProofSpecs", wireType) } @@ -1214,7 +1156,7 @@ func (m *ClientState) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 10: + case 9: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field UpgradePath", wireType) } @@ -1246,7 +1188,7 @@ func (m *ClientState) Unmarshal(dAtA []byte) error { } m.UpgradePath = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 11: + case 10: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field AllowUpdateAfterExpiry", wireType) } @@ -1266,7 +1208,7 @@ func (m *ClientState) Unmarshal(dAtA []byte) error { } } m.AllowUpdateAfterExpiry = bool(v != 0) - case 12: + case 11: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field AllowUpdateAfterMisbehaviour", wireType) } @@ -1711,7 +1653,7 @@ func (m *Header) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.SignedHeader == nil { - m.SignedHeader = &types3.SignedHeader{} + m.SignedHeader = &types2.SignedHeader{} } if err := m.SignedHeader.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -1747,7 +1689,7 @@ func (m *Header) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.ValidatorSet == nil { - m.ValidatorSet = &types3.ValidatorSet{} + m.ValidatorSet = &types2.ValidatorSet{} } if err := m.ValidatorSet.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -1816,7 +1758,7 @@ func (m *Header) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.TrustedValidators == nil { - m.TrustedValidators = &types3.ValidatorSet{} + m.TrustedValidators = &types2.ValidatorSet{} } if err := m.TrustedValidators.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err diff --git a/x/ibc/light-clients/07-tendermint/types/update_test.go b/x/ibc/light-clients/07-tendermint/types/update_test.go index 0941e632124b..b75d71b827b3 100644 --- a/x/ibc/light-clients/07-tendermint/types/update_test.go +++ b/x/ibc/light-clients/07-tendermint/types/update_test.go @@ -57,7 +57,7 @@ func (suite *TendermintTestSuite) TestCheckHeaderAndUpdateState() { { name: "successful update with next height and same validator set", setup: func() { - clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.Header.GetAppHash()), suite.valsHash) newHeader = suite.chainA.CreateTMClientHeader(chainID, int64(heightPlus1.VersionHeight), height, suite.headerTime, suite.valSet, suite.valSet, signers) currentTime = suite.now @@ -67,7 +67,7 @@ func (suite *TendermintTestSuite) TestCheckHeaderAndUpdateState() { { name: "successful update with future height and different validator set", setup: func() { - clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.Header.GetAppHash()), suite.valsHash) newHeader = suite.chainA.CreateTMClientHeader(chainID, int64(heightPlus5.VersionHeight), height, suite.headerTime, bothValSet, suite.valSet, bothSigners) currentTime = suite.now @@ -77,7 +77,7 @@ func (suite *TendermintTestSuite) TestCheckHeaderAndUpdateState() { { name: "successful update with next height and different validator set", setup: func() { - clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.Header.GetAppHash()), bothValSet.Hash()) newHeader = suite.chainA.CreateTMClientHeader(chainID, int64(heightPlus1.VersionHeight), height, suite.headerTime, bothValSet, bothValSet, bothSigners) currentTime = suite.now @@ -87,7 +87,7 @@ func (suite *TendermintTestSuite) TestCheckHeaderAndUpdateState() { { name: "successful update for a previous height", setup: func() { - clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.Header.GetAppHash()), suite.valsHash) consStateHeight = heightMinus3 newHeader = suite.chainA.CreateTMClientHeader(chainID, int64(heightMinus1.VersionHeight), heightMinus3, suite.headerTime, bothValSet, suite.valSet, bothSigners) @@ -98,7 +98,7 @@ func (suite *TendermintTestSuite) TestCheckHeaderAndUpdateState() { { name: "successful update for a previous version", setup: func() { - clientState = types.NewClientState(chainIDVersion1, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + clientState = types.NewClientState(chainIDVersion1, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.Header.GetAppHash()), suite.valsHash) newHeader = suite.chainA.CreateTMClientHeader(chainIDVersion0, int64(height.VersionHeight), heightMinus3, suite.headerTime, bothValSet, suite.valSet, bothSigners) currentTime = suite.now @@ -108,7 +108,7 @@ func (suite *TendermintTestSuite) TestCheckHeaderAndUpdateState() { { name: "unsuccessful update with incorrect header chain-id", setup: func() { - clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.Header.GetAppHash()), suite.valsHash) newHeader = suite.chainA.CreateTMClientHeader("ethermint", int64(heightPlus1.VersionHeight), height, suite.headerTime, suite.valSet, suite.valSet, signers) currentTime = suite.now @@ -118,7 +118,7 @@ func (suite *TendermintTestSuite) TestCheckHeaderAndUpdateState() { { name: "unsuccessful update to a future version", setup: func() { - clientState = types.NewClientState(chainIDVersion0, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + clientState = types.NewClientState(chainIDVersion0, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.Header.GetAppHash()), suite.valsHash) newHeader = suite.chainA.CreateTMClientHeader(chainIDVersion1, 1, height, suite.headerTime, suite.valSet, suite.valSet, signers) currentTime = suite.now @@ -128,7 +128,7 @@ func (suite *TendermintTestSuite) TestCheckHeaderAndUpdateState() { { name: "unsuccessful update: header height version and trusted height version mismatch", setup: func() { - clientState = types.NewClientState(chainIDVersion1, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, clienttypes.NewHeight(1, 1), ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + clientState = types.NewClientState(chainIDVersion1, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, clienttypes.NewHeight(1, 1), commitmenttypes.GetSDKSpecs(), upgradePath, false, false) consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.Header.GetAppHash()), suite.valsHash) newHeader = suite.chainA.CreateTMClientHeader(chainIDVersion1, 3, height, suite.headerTime, suite.valSet, suite.valSet, signers) currentTime = suite.now @@ -138,7 +138,7 @@ func (suite *TendermintTestSuite) TestCheckHeaderAndUpdateState() { { name: "unsuccessful update with next height: update header mismatches nextValSetHash", setup: func() { - clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.Header.GetAppHash()), suite.valsHash) newHeader = suite.chainA.CreateTMClientHeader(chainID, int64(heightPlus1.VersionHeight), height, suite.headerTime, bothValSet, suite.valSet, bothSigners) currentTime = suite.now @@ -148,7 +148,7 @@ func (suite *TendermintTestSuite) TestCheckHeaderAndUpdateState() { { name: "unsuccessful update with next height: update header mismatches different nextValSetHash", setup: func() { - clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.Header.GetAppHash()), bothValSet.Hash()) newHeader = suite.chainA.CreateTMClientHeader(chainID, int64(heightPlus1.VersionHeight), height, suite.headerTime, suite.valSet, bothValSet, signers) currentTime = suite.now @@ -158,7 +158,7 @@ func (suite *TendermintTestSuite) TestCheckHeaderAndUpdateState() { { name: "unsuccessful update with future height: too much change in validator set", setup: func() { - clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.Header.GetAppHash()), suite.valsHash) newHeader = suite.chainA.CreateTMClientHeader(chainID, int64(heightPlus5.VersionHeight), height, suite.headerTime, altValSet, suite.valSet, altSigners) currentTime = suite.now @@ -168,7 +168,7 @@ func (suite *TendermintTestSuite) TestCheckHeaderAndUpdateState() { { name: "unsuccessful updates, passed in incorrect trusted validators for given consensus state", setup: func() { - clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.Header.GetAppHash()), suite.valsHash) newHeader = suite.chainA.CreateTMClientHeader(chainID, int64(heightPlus5.VersionHeight), height, suite.headerTime, bothValSet, bothValSet, bothSigners) currentTime = suite.now @@ -178,7 +178,7 @@ func (suite *TendermintTestSuite) TestCheckHeaderAndUpdateState() { { name: "unsuccessful update: trusting period has passed since last client timestamp", setup: func() { - clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.Header.GetAppHash()), suite.valsHash) newHeader = suite.chainA.CreateTMClientHeader(chainID, int64(heightPlus1.VersionHeight), height, suite.headerTime, suite.valSet, suite.valSet, signers) // make current time pass trusting period from last timestamp on clientstate @@ -189,7 +189,7 @@ func (suite *TendermintTestSuite) TestCheckHeaderAndUpdateState() { { name: "unsuccessful update: header timestamp is past current timestamp", setup: func() { - clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.Header.GetAppHash()), suite.valsHash) newHeader = suite.chainA.CreateTMClientHeader(chainID, int64(heightPlus1.VersionHeight), height, suite.now.Add(time.Minute), suite.valSet, suite.valSet, signers) currentTime = suite.now @@ -199,7 +199,7 @@ func (suite *TendermintTestSuite) TestCheckHeaderAndUpdateState() { { name: "unsuccessful update: header timestamp is not past last client timestamp", setup: func() { - clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.Header.GetAppHash()), suite.valsHash) newHeader = suite.chainA.CreateTMClientHeader(chainID, int64(heightPlus1.VersionHeight), height, suite.clientTime, suite.valSet, suite.valSet, signers) currentTime = suite.now @@ -209,7 +209,7 @@ func (suite *TendermintTestSuite) TestCheckHeaderAndUpdateState() { { name: "header basic validation failed", setup: func() { - clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.Header.GetAppHash()), suite.valsHash) newHeader = suite.chainA.CreateTMClientHeader(chainID, int64(heightPlus1.VersionHeight), height, suite.headerTime, suite.valSet, suite.valSet, signers) // cause new header to fail validatebasic by changing commit height to mismatch header height @@ -221,7 +221,7 @@ func (suite *TendermintTestSuite) TestCheckHeaderAndUpdateState() { { name: "header height < consensus height", setup: func() { - clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, clienttypes.NewHeight(height.VersionNumber, heightPlus5.VersionHeight), ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + clientState = types.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, clienttypes.NewHeight(height.VersionNumber, heightPlus5.VersionHeight), commitmenttypes.GetSDKSpecs(), upgradePath, false, false) consensusState = types.NewConsensusState(suite.clientTime, commitmenttypes.NewMerkleRoot(suite.header.Header.GetAppHash()), suite.valsHash) // Make new header at height less than latest client state newHeader = suite.chainA.CreateTMClientHeader(chainID, int64(heightMinus1.VersionHeight), height, suite.headerTime, suite.valSet, suite.valSet, signers) diff --git a/x/ibc/light-clients/07-tendermint/types/upgrade.go b/x/ibc/light-clients/07-tendermint/types/upgrade.go index 28f02950d1f6..f6bbef7de4b1 100644 --- a/x/ibc/light-clients/07-tendermint/types/upgrade.go +++ b/x/ibc/light-clients/07-tendermint/types/upgrade.go @@ -93,7 +93,7 @@ func (cs ClientState) VerifyUpgrade( // come from current client expectedClient := NewClientState( tmCommittedClient.ChainId, cs.TrustLevel, cs.TrustingPeriod, tmCommittedClient.UnbondingPeriod, - cs.MaxClockDrift, tmCommittedClient.LatestHeight, tmCommittedClient.ConsensusParams, tmCommittedClient.ProofSpecs, tmCommittedClient.UpgradePath, + cs.MaxClockDrift, tmCommittedClient.LatestHeight, tmCommittedClient.ProofSpecs, tmCommittedClient.UpgradePath, cs.AllowUpdateAfterExpiry, cs.AllowUpdateAfterMisbehaviour, ) if !reflect.DeepEqual(expectedClient, tmClient) { diff --git a/x/ibc/light-clients/07-tendermint/types/upgrade_test.go b/x/ibc/light-clients/07-tendermint/types/upgrade_test.go index f5debb01a6ef..314ce2a98907 100644 --- a/x/ibc/light-clients/07-tendermint/types/upgrade_test.go +++ b/x/ibc/light-clients/07-tendermint/types/upgrade_test.go @@ -26,7 +26,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { name: "successful upgrade", setup: func() { - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) // upgrade Height is at next block upgradeHeight = clienttypes.NewHeight(0, uint64(suite.chainB.GetContext().BlockHeight()+1)) @@ -51,7 +51,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { name: "successful upgrade with different client chosen parameters set in upgraded client", setup: func() { - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) // upgrade Height is at next block upgradeHeight = clienttypes.NewHeight(0, uint64(suite.chainB.GetContext().BlockHeight()+1)) @@ -60,7 +60,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { suite.chainB.App.UpgradeKeeper.SetUpgradedClient(suite.chainB.GetContext(), int64(upgradeHeight.GetVersionHeight()), upgradedClient) // change upgradedClient client-specified parameters - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, ubdPeriod, ubdPeriod+trustingPeriod, maxClockDrift+5, newClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, true, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, ubdPeriod, ubdPeriod+trustingPeriod, maxClockDrift+5, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, true, false) suite.coordinator.CommitBlock(suite.chainB) err := suite.coordinator.UpdateClient(suite.chainA, suite.chainB, clientA, ibctesting.Tendermint) @@ -71,7 +71,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { // Previous client-chosen parameters must be the same as upgraded client chosen parameters tmClient, _ := cs.(*types.ClientState) - oldClient := types.NewClientState(tmClient.ChainId, types.DefaultTrustLevel, ubdPeriod, ubdPeriod+trustingPeriod, maxClockDrift+5, tmClient.LatestHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, true, false) + oldClient := types.NewClientState(tmClient.ChainId, types.DefaultTrustLevel, ubdPeriod, ubdPeriod+trustingPeriod, maxClockDrift+5, tmClient.LatestHeight, commitmenttypes.GetSDKSpecs(), upgradePath, true, false) suite.chainA.App.IBCKeeper.ClientKeeper.SetClientState(suite.chainA.GetContext(), clientA, oldClient) proofUpgrade, _ = suite.chainB.QueryUpgradeProof(upgradetypes.UpgradedClientKey(int64(upgradeHeight.GetVersionHeight())), cs.GetLatestHeight().GetVersionHeight()) @@ -82,7 +82,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { name: "unsuccessful upgrade: upgrade height version does not match current client version", setup: func() { - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) // upgrade Height is at next block upgradeHeight = clienttypes.NewHeight(10, uint64(suite.chainB.GetContext().BlockHeight()+1)) @@ -107,7 +107,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { name: "unsuccessful upgrade: chain-specified parameters do not match committed client", setup: func() { - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) // upgrade Height is at next block upgradeHeight = clienttypes.NewHeight(0, uint64(suite.chainB.GetContext().BlockHeight()+1)) @@ -116,7 +116,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { suite.chainB.App.UpgradeKeeper.SetUpgradedClient(suite.chainB.GetContext(), int64(upgradeHeight.GetVersionHeight()), upgradedClient) // change upgradedClient client-specified parameters - upgradedClient = types.NewClientState("wrongchainID", types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, newClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, true, true) + upgradedClient = types.NewClientState("wrongchainID", types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, true, true) suite.coordinator.CommitBlock(suite.chainB) err := suite.coordinator.UpdateClient(suite.chainA, suite.chainB, clientA, ibctesting.Tendermint) @@ -133,12 +133,12 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { name: "unsuccessful upgrade: client-specified parameters do not match previous client", setup: func() { - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, upgradeHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, upgradeHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) // zero custom fields and store in upgrade store suite.chainB.App.UpgradeKeeper.SetUpgradedClient(suite.chainB.GetContext(), int64(upgradeHeight.GetVersionHeight()), upgradedClient) // change upgradedClient client-specified parameters - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, ubdPeriod, ubdPeriod+trustingPeriod, maxClockDrift+5, upgradeHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, true, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, ubdPeriod, ubdPeriod+trustingPeriod, maxClockDrift+5, upgradeHeight, commitmenttypes.GetSDKSpecs(), upgradePath, true, false) suite.coordinator.CommitBlock(suite.chainB) err := suite.coordinator.UpdateClient(suite.chainA, suite.chainB, clientA, ibctesting.Tendermint) @@ -154,7 +154,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { { name: "unsuccessful upgrade: proof is empty", setup: func() { - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) proofUpgrade = []byte{} }, expPass: false, @@ -162,7 +162,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { { name: "unsuccessful upgrade: proof unmarshal failed", setup: func() { - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) proofUpgrade = []byte("proof") }, expPass: false, @@ -171,7 +171,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { name: "unsuccessful upgrade: proof verification failed", setup: func() { // create but do not store upgraded client - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) // upgrade Height is at next block upgradeHeight = clienttypes.NewHeight(0, uint64(suite.chainB.GetContext().BlockHeight()+1)) @@ -187,7 +187,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { name: "unsuccessful upgrade: upgrade path is empty", setup: func() { - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) // upgrade Height is at next block upgradeHeight = clienttypes.NewHeight(0, uint64(suite.chainB.GetContext().BlockHeight()+1)) @@ -217,7 +217,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { name: "unsuccessful upgrade: upgrade path is malformed and cannot be correctly unescaped", setup: func() { - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) // upgrade Height is at next block upgradeHeight = clienttypes.NewHeight(0, uint64(suite.chainB.GetContext().BlockHeight()+1)) @@ -247,7 +247,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { name: "unsuccessful upgrade: upgraded height is not greater than current height", setup: func() { - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, height, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) // upgrade Height is at next block upgradeHeight = clienttypes.NewHeight(0, uint64(suite.chainB.GetContext().BlockHeight()+1)) @@ -272,7 +272,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { name: "unsuccessful upgrade: consensus state for upgrade height cannot be found", setup: func() { - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) // upgrade Height is at next block upgradeHeight = clienttypes.NewHeight(0, uint64(suite.chainB.GetContext().BlockHeight()+100)) @@ -297,7 +297,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { name: "unsuccessful upgrade: client is expired", setup: func() { - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, upgradeHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, upgradeHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) // zero custom fields and store in upgrade store suite.chainB.App.UpgradeKeeper.SetUpgradedClient(suite.chainB.GetContext(), int64(upgradeHeight.GetVersionHeight()), upgradedClient) diff --git a/x/ibc/testing/chain.go b/x/ibc/testing/chain.go index f43c4d267612..532824700dbe 100644 --- a/x/ibc/testing/chain.go +++ b/x/ibc/testing/chain.go @@ -65,8 +65,6 @@ const ( ) var ( - DefaultConsensusParams = simapp.DefaultConsensusParams - DefaultOpenInitVersion *connectiontypes.Version // Default params variables used to create a TM client @@ -80,14 +78,6 @@ var ( MockAcknowledgement = mock.MockAcknowledgement MockCommitment = mock.MockCommitment - - // Conditionals for expected output of executing messages. - // Change values to false to test messages expected to fail. - // Reset to true otherwise successful messages will error. - // Use in rare cases, will be deprecated in favor of better - // dev ux. - ExpSimPassSend = true - ExpPassSend = true ) // TestChain is a testing struct that wraps a simapp with the last TM Header, the current ABCI @@ -183,8 +173,7 @@ func NewTestChain(t *testing.T, chainID string) *TestChain { // GetContext returns the current context for the application. func (chain *TestChain) GetContext() sdk.Context { - ctx := chain.App.BaseApp.NewContext(false, chain.CurrentHeader) - return ctx.WithConsensusParams(DefaultConsensusParams) + return chain.App.BaseApp.NewContext(false, chain.CurrentHeader) } // QueryProof performs an abci query with the given key and returns the proto encoded merkle proof @@ -304,7 +293,7 @@ func (chain *TestChain) SendMsgs(msgs ...sdk.Msg) (*sdk.Result, error) { chain.ChainID, []uint64{chain.SenderAccount.GetAccountNumber()}, []uint64{chain.SenderAccount.GetSequence()}, - ExpSimPassSend, ExpPassSend, chain.senderPrivKey, + true, true, chain.senderPrivKey, ) if err != nil { return nil, err @@ -436,8 +425,7 @@ func (chain *TestChain) ConstructMsgCreateClient(counterparty *TestChain, client height := counterparty.LastHeader.GetHeight().(clienttypes.Height) clientState = ibctmtypes.NewClientState( counterparty.ChainID, DefaultTrustLevel, TrustingPeriod, UnbondingPeriod, MaxClockDrift, - height, counterparty.App.GetConsensusParams(counterparty.GetContext()), commitmenttypes.GetSDKSpecs(), - UpgradePath, false, false, + height, commitmenttypes.GetSDKSpecs(), UpgradePath, false, false, ) consensusState = counterparty.LastHeader.ConsensusState() case SoloMachine: diff --git a/x/staking/types/staking.pb.go b/x/staking/types/staking.pb.go index 102fcea42251..4dbe0e3e300d 100644 --- a/x/staking/types/staking.pb.go +++ b/x/staking/types/staking.pb.go @@ -1218,605 +1218,605 @@ func StakingDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descri var gzipped = []byte{ // 9603 bytes of a gzipped FileDescriptorSet 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x70, 0x24, 0xd7, - 0x71, 0xd8, 0xcd, 0x7e, 0x00, 0xbb, 0x8d, 0x05, 0xb0, 0x78, 0xc0, 0xdd, 0xed, 0x2d, 0x8f, 0x00, - 0x38, 0xfc, 0x3a, 0x1e, 0x49, 0x80, 0x3c, 0xf2, 0x8e, 0xe4, 0x9e, 0x44, 0x1a, 0x0b, 0xec, 0xe1, - 0xc0, 0xc3, 0x17, 0x07, 0xc0, 0x91, 0xfa, 0x70, 0xb6, 0x06, 0xb3, 0x0f, 0x8b, 0x21, 0x76, 0x67, - 0x86, 0x33, 0xb3, 0x77, 0x07, 0x4a, 0xaa, 0xa2, 0x25, 0x45, 0x91, 0xe8, 0x38, 0x92, 0x22, 0x97, - 0x23, 0xd1, 0x3a, 0x45, 0xb2, 0x9c, 0xc8, 0x91, 0x95, 0xf8, 0x43, 0x8a, 0x12, 0x27, 0xa9, 0x8a, - 0x94, 0xc4, 0xb1, 0xa4, 0x54, 0x5c, 0x52, 0xc5, 0x95, 0x38, 0xae, 0xe4, 0xec, 0x50, 0x2a, 0x87, - 0x51, 0x94, 0x58, 0x3e, 0xcb, 0x89, 0x53, 0xaa, 0x54, 0x52, 0xef, 0x6b, 0xbe, 0xf6, 0x63, 0x16, - 0xd0, 0x9d, 0x24, 0xc7, 0xf9, 0x85, 0x9d, 0x7e, 0xdd, 0xfd, 0xba, 0xfb, 0xf5, 0xeb, 0xd7, 0xaf, - 0xe7, 0xbd, 0x01, 0xfc, 0xf3, 0xf3, 0x30, 0x5d, 0x37, 0xcd, 0x7a, 0x03, 0xcf, 0x5a, 0xb6, 0xe9, - 0x9a, 0xdb, 0xad, 0x9d, 0xd9, 0x1a, 0x76, 0x34, 0x5b, 0xb7, 0x5c, 0xd3, 0x9e, 0xa1, 0x30, 0x34, - 0xca, 0x30, 0x66, 0x04, 0x86, 0xbc, 0x02, 0x63, 0x17, 0xf4, 0x06, 0x5e, 0xf0, 0x10, 0x37, 0xb0, - 0x8b, 0x9e, 0x84, 0xd4, 0x8e, 0xde, 0xc0, 0x05, 0x69, 0x3a, 0x79, 0x6a, 0xe8, 0xcc, 0x3d, 0x33, - 0x11, 0xa2, 0x99, 0x30, 0xc5, 0x3a, 0x01, 0x2b, 0x94, 0x42, 0xfe, 0x56, 0x0a, 0xc6, 0x3b, 0xb4, - 0x22, 0x04, 0x29, 0x43, 0x6d, 0x12, 0x8e, 0xd2, 0xa9, 0xac, 0x42, 0x7f, 0xa3, 0x02, 0x0c, 0x5a, - 0xaa, 0xb6, 0xa7, 0xd6, 0x71, 0x21, 0x41, 0xc1, 0xe2, 0x11, 0x4d, 0x02, 0xd4, 0xb0, 0x85, 0x8d, - 0x1a, 0x36, 0xb4, 0xfd, 0x42, 0x72, 0x3a, 0x79, 0x2a, 0xab, 0x04, 0x20, 0xe8, 0x41, 0x18, 0xb3, - 0x5a, 0xdb, 0x0d, 0x5d, 0xab, 0x06, 0xd0, 0x60, 0x3a, 0x79, 0x2a, 0xad, 0xe4, 0x59, 0xc3, 0x82, - 0x8f, 0x7c, 0x3f, 0x8c, 0x5e, 0xc5, 0xea, 0x5e, 0x10, 0x75, 0x88, 0xa2, 0x8e, 0x10, 0x70, 0x00, - 0x71, 0x1e, 0x72, 0x4d, 0xec, 0x38, 0x6a, 0x1d, 0x57, 0xdd, 0x7d, 0x0b, 0x17, 0x52, 0x54, 0xfb, - 0xe9, 0x36, 0xed, 0xa3, 0x9a, 0x0f, 0x71, 0xaa, 0xcd, 0x7d, 0x0b, 0xa3, 0x39, 0xc8, 0x62, 0xa3, - 0xd5, 0x64, 0x1c, 0xd2, 0x5d, 0xec, 0x57, 0x31, 0x5a, 0xcd, 0x28, 0x97, 0x0c, 0x21, 0xe3, 0x2c, - 0x06, 0x1d, 0x6c, 0x5f, 0xd1, 0x35, 0x5c, 0x18, 0xa0, 0x0c, 0xee, 0x6f, 0x63, 0xb0, 0xc1, 0xda, - 0xa3, 0x3c, 0x04, 0x1d, 0x9a, 0x87, 0x2c, 0xbe, 0xe6, 0x62, 0xc3, 0xd1, 0x4d, 0xa3, 0x30, 0x48, - 0x99, 0xdc, 0xdb, 0x61, 0x14, 0x71, 0xa3, 0x16, 0x65, 0xe1, 0xd3, 0xa1, 0x73, 0x30, 0x68, 0x5a, - 0xae, 0x6e, 0x1a, 0x4e, 0x21, 0x33, 0x2d, 0x9d, 0x1a, 0x3a, 0x73, 0xb2, 0xa3, 0x23, 0xac, 0x31, - 0x1c, 0x45, 0x20, 0xa3, 0x25, 0xc8, 0x3b, 0x66, 0xcb, 0xd6, 0x70, 0x55, 0x33, 0x6b, 0xb8, 0xaa, - 0x1b, 0x3b, 0x66, 0x21, 0x4b, 0x19, 0x4c, 0xb5, 0x2b, 0x42, 0x11, 0xe7, 0xcd, 0x1a, 0x5e, 0x32, - 0x76, 0x4c, 0x65, 0xc4, 0x09, 0x3d, 0xa3, 0x63, 0x30, 0xe0, 0xec, 0x1b, 0xae, 0x7a, 0xad, 0x90, - 0xa3, 0x1e, 0xc2, 0x9f, 0xe4, 0xdf, 0x18, 0x80, 0xd1, 0x7e, 0x5c, 0xec, 0x3c, 0xa4, 0x77, 0x88, - 0x96, 0x85, 0xc4, 0x41, 0x6c, 0xc0, 0x68, 0xc2, 0x46, 0x1c, 0x38, 0xa4, 0x11, 0xe7, 0x60, 0xc8, - 0xc0, 0x8e, 0x8b, 0x6b, 0xcc, 0x23, 0x92, 0x7d, 0xfa, 0x14, 0x30, 0xa2, 0x76, 0x97, 0x4a, 0x1d, - 0xca, 0xa5, 0x5e, 0x80, 0x51, 0x4f, 0xa4, 0xaa, 0xad, 0x1a, 0x75, 0xe1, 0x9b, 0xb3, 0x71, 0x92, - 0xcc, 0x54, 0x04, 0x9d, 0x42, 0xc8, 0x94, 0x11, 0x1c, 0x7a, 0x46, 0x0b, 0x00, 0xa6, 0x81, 0xcd, - 0x9d, 0x6a, 0x0d, 0x6b, 0x8d, 0x42, 0xa6, 0x8b, 0x95, 0xd6, 0x08, 0x4a, 0x9b, 0x95, 0x4c, 0x06, - 0xd5, 0x1a, 0xe8, 0x29, 0xdf, 0xd5, 0x06, 0xbb, 0x78, 0xca, 0x0a, 0x9b, 0x64, 0x6d, 0xde, 0xb6, - 0x05, 0x23, 0x36, 0x26, 0x7e, 0x8f, 0x6b, 0x5c, 0xb3, 0x2c, 0x15, 0x62, 0x26, 0x56, 0x33, 0x85, - 0x93, 0x31, 0xc5, 0x86, 0xed, 0xe0, 0x23, 0xba, 0x1b, 0x3c, 0x40, 0x95, 0xba, 0x15, 0xd0, 0x28, - 0x94, 0x13, 0xc0, 0x55, 0xb5, 0x89, 0x8b, 0x2f, 0xc3, 0x48, 0xd8, 0x3c, 0x68, 0x02, 0xd2, 0x8e, - 0xab, 0xda, 0x2e, 0xf5, 0xc2, 0xb4, 0xc2, 0x1e, 0x50, 0x1e, 0x92, 0xd8, 0xa8, 0xd1, 0x28, 0x97, - 0x56, 0xc8, 0x4f, 0xf4, 0x13, 0xbe, 0xc2, 0x49, 0xaa, 0xf0, 0x7d, 0xed, 0x23, 0x1a, 0xe2, 0x1c, - 0xd5, 0xbb, 0xf8, 0x04, 0x0c, 0x87, 0x14, 0xe8, 0xb7, 0x6b, 0xf9, 0x9d, 0x70, 0xb4, 0x23, 0x6b, - 0xf4, 0x02, 0x4c, 0xb4, 0x0c, 0xdd, 0x70, 0xb1, 0x6d, 0xd9, 0x98, 0x78, 0x2c, 0xeb, 0xaa, 0xf0, - 0x9f, 0x07, 0xbb, 0xf8, 0xdc, 0x56, 0x10, 0x9b, 0x71, 0x51, 0xc6, 0x5b, 0xed, 0xc0, 0xd3, 0xd9, - 0xcc, 0x1b, 0x83, 0xf9, 0x57, 0x5e, 0x79, 0xe5, 0x95, 0x84, 0xfc, 0xe5, 0x01, 0x98, 0xe8, 0x34, - 0x67, 0x3a, 0x4e, 0xdf, 0x63, 0x30, 0x60, 0xb4, 0x9a, 0xdb, 0xd8, 0xa6, 0x46, 0x4a, 0x2b, 0xfc, - 0x09, 0xcd, 0x41, 0xba, 0xa1, 0x6e, 0xe3, 0x46, 0x21, 0x35, 0x2d, 0x9d, 0x1a, 0x39, 0xf3, 0x60, - 0x5f, 0xb3, 0x72, 0x66, 0x99, 0x90, 0x28, 0x8c, 0x12, 0x3d, 0x0d, 0x29, 0x1e, 0xa2, 0x09, 0x87, - 0xd3, 0xfd, 0x71, 0x20, 0x73, 0x49, 0xa1, 0x74, 0xe8, 0x0e, 0xc8, 0x92, 0xbf, 0xcc, 0x37, 0x06, - 0xa8, 0xcc, 0x19, 0x02, 0x20, 0x7e, 0x81, 0x8a, 0x90, 0xa1, 0xd3, 0xa4, 0x86, 0xc5, 0xd2, 0xe6, - 0x3d, 0x13, 0xc7, 0xaa, 0xe1, 0x1d, 0xb5, 0xd5, 0x70, 0xab, 0x57, 0xd4, 0x46, 0x0b, 0x53, 0x87, - 0xcf, 0x2a, 0x39, 0x0e, 0xbc, 0x4c, 0x60, 0x68, 0x0a, 0x86, 0xd8, 0xac, 0xd2, 0x8d, 0x1a, 0xbe, - 0x46, 0xa3, 0x67, 0x5a, 0x61, 0x13, 0x6d, 0x89, 0x40, 0x48, 0xf7, 0x2f, 0x3a, 0xa6, 0x21, 0x5c, - 0x93, 0x76, 0x41, 0x00, 0xb4, 0xfb, 0x27, 0xa2, 0x81, 0xfb, 0xce, 0xce, 0xea, 0xb5, 0xcd, 0xa5, - 0xfb, 0x61, 0x94, 0x62, 0x3c, 0xc6, 0x87, 0x5e, 0x6d, 0x14, 0xc6, 0xa6, 0xa5, 0x53, 0x19, 0x65, - 0x84, 0x81, 0xd7, 0x38, 0x54, 0xfe, 0x62, 0x02, 0x52, 0x34, 0xb0, 0x8c, 0xc2, 0xd0, 0xe6, 0x5b, - 0xd6, 0x2b, 0xd5, 0x85, 0xb5, 0xad, 0xf2, 0x72, 0x25, 0x2f, 0xa1, 0x11, 0x00, 0x0a, 0xb8, 0xb0, - 0xbc, 0x36, 0xb7, 0x99, 0x4f, 0x78, 0xcf, 0x4b, 0xab, 0x9b, 0xe7, 0x1e, 0xcf, 0x27, 0x3d, 0x82, - 0x2d, 0x06, 0x48, 0x05, 0x11, 0x1e, 0x3b, 0x93, 0x4f, 0xa3, 0x3c, 0xe4, 0x18, 0x83, 0xa5, 0x17, - 0x2a, 0x0b, 0xe7, 0x1e, 0xcf, 0x0f, 0x84, 0x21, 0x8f, 0x9d, 0xc9, 0x0f, 0xa2, 0x61, 0xc8, 0x52, - 0x48, 0x79, 0x6d, 0x6d, 0x39, 0x9f, 0xf1, 0x78, 0x6e, 0x6c, 0x2a, 0x4b, 0xab, 0x8b, 0xf9, 0xac, - 0xc7, 0x73, 0x51, 0x59, 0xdb, 0x5a, 0xcf, 0x83, 0xc7, 0x61, 0xa5, 0xb2, 0xb1, 0x31, 0xb7, 0x58, - 0xc9, 0x0f, 0x79, 0x18, 0xe5, 0xb7, 0x6c, 0x56, 0x36, 0xf2, 0xb9, 0x90, 0x58, 0x8f, 0x9d, 0xc9, - 0x0f, 0x7b, 0x5d, 0x54, 0x56, 0xb7, 0x56, 0xf2, 0x23, 0x68, 0x0c, 0x86, 0x59, 0x17, 0x42, 0x88, - 0xd1, 0x08, 0xe8, 0xdc, 0xe3, 0xf9, 0xbc, 0x2f, 0x08, 0xe3, 0x32, 0x16, 0x02, 0x9c, 0x7b, 0x3c, - 0x8f, 0xe4, 0x79, 0x48, 0x53, 0x37, 0x44, 0x08, 0x46, 0x96, 0xe7, 0xca, 0x95, 0xe5, 0xea, 0xda, - 0xfa, 0xe6, 0xd2, 0xda, 0xea, 0xdc, 0x72, 0x5e, 0xf2, 0x61, 0x4a, 0xe5, 0xb9, 0xad, 0x25, 0xa5, - 0xb2, 0x90, 0x4f, 0x04, 0x61, 0xeb, 0x95, 0xb9, 0xcd, 0xca, 0x42, 0x3e, 0x29, 0x6b, 0x30, 0xd1, - 0x29, 0xa0, 0x76, 0x9c, 0x42, 0x01, 0x5f, 0x48, 0x74, 0xf1, 0x05, 0xca, 0x2b, 0xea, 0x0b, 0xf2, - 0x37, 0x13, 0x30, 0xde, 0x61, 0x51, 0xe9, 0xd8, 0xc9, 0x33, 0x90, 0x66, 0xbe, 0xcc, 0x96, 0xd9, - 0x07, 0x3a, 0xae, 0x4e, 0xd4, 0xb3, 0xdb, 0x96, 0x5a, 0x4a, 0x17, 0x4c, 0x35, 0x92, 0x5d, 0x52, - 0x0d, 0xc2, 0xa2, 0xcd, 0x61, 0x7f, 0xb2, 0x2d, 0xf8, 0xb3, 0xf5, 0xf1, 0x5c, 0x3f, 0xeb, 0x23, - 0x85, 0x1d, 0x6c, 0x11, 0x48, 0x77, 0x58, 0x04, 0xce, 0xc3, 0x58, 0x1b, 0xa3, 0xbe, 0x83, 0xf1, - 0x7b, 0x24, 0x28, 0x74, 0x33, 0x4e, 0x4c, 0x48, 0x4c, 0x84, 0x42, 0xe2, 0xf9, 0xa8, 0x05, 0xef, - 0xea, 0x3e, 0x08, 0x6d, 0x63, 0xfd, 0x19, 0x09, 0x8e, 0x75, 0x4e, 0x29, 0x3b, 0xca, 0xf0, 0x34, - 0x0c, 0x34, 0xb1, 0xbb, 0x6b, 0x8a, 0xb4, 0xea, 0xbe, 0x0e, 0x8b, 0x35, 0x69, 0x8e, 0x0e, 0x36, - 0xa7, 0x0a, 0xae, 0xf6, 0xc9, 0x6e, 0x79, 0x21, 0x93, 0xa6, 0x4d, 0xd2, 0x0f, 0x24, 0xe0, 0x68, - 0x47, 0xe6, 0x1d, 0x05, 0xbd, 0x13, 0x40, 0x37, 0xac, 0x96, 0xcb, 0x52, 0x27, 0x16, 0x89, 0xb3, - 0x14, 0x42, 0x83, 0x17, 0x89, 0xb2, 0x2d, 0xd7, 0x6b, 0x4f, 0xd2, 0x76, 0x60, 0x20, 0x8a, 0xf0, - 0xa4, 0x2f, 0x68, 0x8a, 0x0a, 0x3a, 0xd9, 0x45, 0xd3, 0x36, 0xc7, 0x7c, 0x04, 0xf2, 0x5a, 0x43, - 0xc7, 0x86, 0x5b, 0x75, 0x5c, 0x1b, 0xab, 0x4d, 0xdd, 0xa8, 0xd3, 0xa5, 0x26, 0x53, 0x4a, 0xef, - 0xa8, 0x0d, 0x07, 0x2b, 0xa3, 0xac, 0x79, 0x43, 0xb4, 0x12, 0x0a, 0xea, 0x40, 0x76, 0x80, 0x62, - 0x20, 0x44, 0xc1, 0x9a, 0x3d, 0x0a, 0xf9, 0xc3, 0x59, 0x18, 0x0a, 0x24, 0xe0, 0xe8, 0x2e, 0xc8, - 0xbd, 0xa8, 0x5e, 0x51, 0xab, 0x62, 0x53, 0xc5, 0x2c, 0x31, 0x44, 0x60, 0xeb, 0x7c, 0x63, 0xf5, - 0x08, 0x4c, 0x50, 0x14, 0xb3, 0xe5, 0x62, 0xbb, 0xaa, 0x35, 0x54, 0xc7, 0xa1, 0x46, 0xcb, 0x50, - 0x54, 0x44, 0xda, 0xd6, 0x48, 0xd3, 0xbc, 0x68, 0x41, 0x67, 0x61, 0x9c, 0x52, 0x34, 0x5b, 0x0d, - 0x57, 0xb7, 0x1a, 0xb8, 0x4a, 0xb6, 0x79, 0x0e, 0x5d, 0x72, 0x3c, 0xc9, 0xc6, 0x08, 0xc6, 0x0a, - 0x47, 0x20, 0x12, 0x39, 0x68, 0x01, 0xee, 0xa4, 0x64, 0x75, 0x6c, 0x60, 0x5b, 0x75, 0x71, 0x15, - 0xbf, 0xd4, 0x52, 0x1b, 0x4e, 0x55, 0x35, 0x6a, 0xd5, 0x5d, 0xd5, 0xd9, 0x2d, 0x4c, 0x10, 0x06, - 0xe5, 0x44, 0x41, 0x52, 0x4e, 0x10, 0xc4, 0x45, 0x8e, 0x57, 0xa1, 0x68, 0x73, 0x46, 0xed, 0xa2, - 0xea, 0xec, 0xa2, 0x12, 0x1c, 0xa3, 0x5c, 0x1c, 0xd7, 0xd6, 0x8d, 0x7a, 0x55, 0xdb, 0xc5, 0xda, - 0x5e, 0xb5, 0xe5, 0xee, 0x3c, 0x59, 0xb8, 0x23, 0xd8, 0x3f, 0x95, 0x70, 0x83, 0xe2, 0xcc, 0x13, - 0x94, 0x2d, 0x77, 0xe7, 0x49, 0xb4, 0x01, 0x39, 0x32, 0x18, 0x4d, 0xfd, 0x65, 0x5c, 0xdd, 0x31, - 0x6d, 0xba, 0x86, 0x8e, 0x74, 0x08, 0x4d, 0x01, 0x0b, 0xce, 0xac, 0x71, 0x82, 0x15, 0xb3, 0x86, - 0x4b, 0xe9, 0x8d, 0xf5, 0x4a, 0x65, 0x41, 0x19, 0x12, 0x5c, 0x2e, 0x98, 0x36, 0x71, 0xa8, 0xba, - 0xe9, 0x19, 0x78, 0x88, 0x39, 0x54, 0xdd, 0x14, 0xe6, 0x3d, 0x0b, 0xe3, 0x9a, 0xc6, 0x74, 0xd6, - 0xb5, 0x2a, 0xdf, 0x8c, 0x39, 0x85, 0x7c, 0xc8, 0x58, 0x9a, 0xb6, 0xc8, 0x10, 0xb8, 0x8f, 0x3b, - 0xe8, 0x29, 0x38, 0xea, 0x1b, 0x2b, 0x48, 0x38, 0xd6, 0xa6, 0x65, 0x94, 0xf4, 0x2c, 0x8c, 0x5b, - 0xfb, 0xed, 0x84, 0x28, 0xd4, 0xa3, 0xb5, 0x1f, 0x25, 0x7b, 0x02, 0x26, 0xac, 0x5d, 0xab, 0x9d, - 0xee, 0x74, 0x90, 0x0e, 0x59, 0xbb, 0x56, 0x94, 0xf0, 0x5e, 0xba, 0x33, 0xb7, 0xb1, 0xa6, 0xba, - 0xb8, 0x56, 0x38, 0x1e, 0x44, 0x0f, 0x34, 0xa0, 0x19, 0xc8, 0x6b, 0x5a, 0x15, 0x1b, 0xea, 0x76, - 0x03, 0x57, 0x55, 0x1b, 0x1b, 0xaa, 0x53, 0x98, 0xa2, 0xc8, 0x29, 0xd7, 0x6e, 0x61, 0x65, 0x44, - 0xd3, 0x2a, 0xb4, 0x71, 0x8e, 0xb6, 0xa1, 0xd3, 0x30, 0x66, 0x6e, 0xbf, 0xa8, 0x31, 0x8f, 0xac, - 0x5a, 0x36, 0xde, 0xd1, 0xaf, 0x15, 0xee, 0xa1, 0xe6, 0x1d, 0x25, 0x0d, 0xd4, 0x1f, 0xd7, 0x29, - 0x18, 0x3d, 0x00, 0x79, 0xcd, 0xd9, 0x55, 0x6d, 0x8b, 0x86, 0x64, 0xc7, 0x52, 0x35, 0x5c, 0xb8, - 0x97, 0xa1, 0x32, 0xf8, 0xaa, 0x00, 0x93, 0x19, 0xe1, 0x5c, 0xd5, 0x77, 0x5c, 0xc1, 0xf1, 0x7e, - 0x36, 0x23, 0x28, 0x8c, 0x73, 0x3b, 0x05, 0x79, 0x62, 0x89, 0x50, 0xc7, 0xa7, 0x28, 0xda, 0x88, - 0xb5, 0x6b, 0x05, 0xfb, 0xbd, 0x1b, 0x86, 0x09, 0xa6, 0xdf, 0xe9, 0x03, 0x2c, 0x71, 0xb3, 0x76, - 0x03, 0x3d, 0x3e, 0x0e, 0xc7, 0x08, 0x52, 0x13, 0xbb, 0x6a, 0x4d, 0x75, 0xd5, 0x00, 0xf6, 0x43, - 0x14, 0x9b, 0x98, 0x7d, 0x85, 0x37, 0x86, 0xe4, 0xb4, 0x5b, 0xdb, 0xfb, 0x9e, 0x63, 0x3d, 0xcc, - 0xe4, 0x24, 0x30, 0xe1, 0x5a, 0xb7, 0x2d, 0x39, 0x97, 0x4b, 0x90, 0x0b, 0xfa, 0x3d, 0xca, 0x02, - 0xf3, 0xfc, 0xbc, 0x44, 0x92, 0xa0, 0xf9, 0xb5, 0x05, 0x92, 0xbe, 0xbc, 0xb5, 0x92, 0x4f, 0x90, - 0x34, 0x6a, 0x79, 0x69, 0xb3, 0x52, 0x55, 0xb6, 0x56, 0x37, 0x97, 0x56, 0x2a, 0xf9, 0x64, 0x20, - 0xb1, 0x7f, 0x36, 0x95, 0xb9, 0x2f, 0x7f, 0xbf, 0xfc, 0x8d, 0x04, 0x8c, 0x84, 0x77, 0x6a, 0xe8, - 0x4d, 0x70, 0x5c, 0x94, 0x55, 0x1c, 0xec, 0x56, 0xaf, 0xea, 0x36, 0x9d, 0x90, 0x4d, 0x95, 0x2d, - 0x8e, 0x9e, 0xff, 0x4c, 0x70, 0xac, 0x0d, 0xec, 0x3e, 0xaf, 0xdb, 0x64, 0xba, 0x35, 0x55, 0x17, - 0x2d, 0xc3, 0x94, 0x61, 0x56, 0x1d, 0x57, 0x35, 0x6a, 0xaa, 0x5d, 0xab, 0xfa, 0x05, 0xad, 0xaa, - 0xaa, 0x69, 0xd8, 0x71, 0x4c, 0xb6, 0x10, 0x7a, 0x5c, 0x4e, 0x1a, 0xe6, 0x06, 0x47, 0xf6, 0x57, - 0x88, 0x39, 0x8e, 0x1a, 0x71, 0xdf, 0x64, 0x37, 0xf7, 0xbd, 0x03, 0xb2, 0x4d, 0xd5, 0xaa, 0x62, - 0xc3, 0xb5, 0xf7, 0x69, 0x7e, 0x9e, 0x51, 0x32, 0x4d, 0xd5, 0xaa, 0x90, 0xe7, 0x1f, 0xca, 0x36, - 0xe9, 0xd9, 0x54, 0x26, 0x93, 0xcf, 0x3e, 0x9b, 0xca, 0x64, 0xf3, 0x20, 0xbf, 0x9e, 0x84, 0x5c, - 0x30, 0x5f, 0x27, 0xdb, 0x1f, 0x8d, 0xae, 0x58, 0x12, 0x8d, 0x69, 0x77, 0xf7, 0xcc, 0xee, 0x67, - 0xe6, 0xc9, 0x52, 0x56, 0x1a, 0x60, 0xc9, 0xb1, 0xc2, 0x28, 0x49, 0x1a, 0x41, 0x9c, 0x0d, 0xb3, - 0x64, 0x24, 0xa3, 0xf0, 0x27, 0xb4, 0x08, 0x03, 0x2f, 0x3a, 0x94, 0xf7, 0x00, 0xe5, 0x7d, 0x4f, - 0x6f, 0xde, 0xcf, 0x6e, 0x50, 0xe6, 0xd9, 0x67, 0x37, 0xaa, 0xab, 0x6b, 0xca, 0xca, 0xdc, 0xb2, - 0xc2, 0xc9, 0xd1, 0x09, 0x48, 0x35, 0xd4, 0x97, 0xf7, 0xc3, 0x8b, 0x1e, 0x05, 0xf5, 0x3b, 0x08, - 0x27, 0x20, 0x75, 0x15, 0xab, 0x7b, 0xe1, 0xa5, 0x86, 0x82, 0x6e, 0xe3, 0x64, 0x98, 0x85, 0x34, - 0xb5, 0x17, 0x02, 0xe0, 0x16, 0xcb, 0x1f, 0x41, 0x19, 0x48, 0xcd, 0xaf, 0x29, 0x64, 0x42, 0xe4, - 0x21, 0xc7, 0xa0, 0xd5, 0xf5, 0xa5, 0xca, 0x7c, 0x25, 0x9f, 0x90, 0xcf, 0xc2, 0x00, 0x33, 0x02, - 0x99, 0x2c, 0x9e, 0x19, 0xf2, 0x47, 0xf8, 0x23, 0xe7, 0x21, 0x89, 0xd6, 0xad, 0x95, 0x72, 0x45, - 0xc9, 0x27, 0xc2, 0x43, 0x9d, 0xca, 0xa7, 0x65, 0x07, 0x72, 0xc1, 0x3c, 0xfc, 0x87, 0xb3, 0x19, - 0xff, 0x92, 0x04, 0x43, 0x81, 0xbc, 0x9a, 0x24, 0x44, 0x6a, 0xa3, 0x61, 0x5e, 0xad, 0xaa, 0x0d, - 0x5d, 0x75, 0xb8, 0x6b, 0x00, 0x05, 0xcd, 0x11, 0x48, 0xbf, 0x43, 0xf7, 0x43, 0x9a, 0x22, 0xe9, - 0xfc, 0x80, 0xfc, 0x09, 0x09, 0xf2, 0xd1, 0xc4, 0x36, 0x22, 0xa6, 0xf4, 0xa3, 0x14, 0x53, 0xfe, - 0xb8, 0x04, 0x23, 0xe1, 0x6c, 0x36, 0x22, 0xde, 0x5d, 0x3f, 0x52, 0xf1, 0xfe, 0x20, 0x01, 0xc3, - 0xa1, 0x1c, 0xb6, 0x5f, 0xe9, 0x5e, 0x82, 0x31, 0xbd, 0x86, 0x9b, 0x96, 0xe9, 0x62, 0x43, 0xdb, - 0xaf, 0x36, 0xf0, 0x15, 0xdc, 0x28, 0xc8, 0x34, 0x68, 0xcc, 0xf6, 0xce, 0x92, 0x67, 0x96, 0x7c, - 0xba, 0x65, 0x42, 0x56, 0x1a, 0x5f, 0x5a, 0xa8, 0xac, 0xac, 0xaf, 0x6d, 0x56, 0x56, 0xe7, 0xdf, - 0x52, 0xdd, 0x5a, 0xbd, 0xb4, 0xba, 0xf6, 0xfc, 0xaa, 0x92, 0xd7, 0x23, 0x68, 0xb7, 0x71, 0xda, - 0xaf, 0x43, 0x3e, 0x2a, 0x14, 0x3a, 0x0e, 0x9d, 0xc4, 0xca, 0x1f, 0x41, 0xe3, 0x30, 0xba, 0xba, - 0x56, 0xdd, 0x58, 0x5a, 0xa8, 0x54, 0x2b, 0x17, 0x2e, 0x54, 0xe6, 0x37, 0x37, 0x58, 0xdd, 0xc3, - 0xc3, 0xde, 0x0c, 0x4d, 0x70, 0xf9, 0xb5, 0x24, 0x8c, 0x77, 0x90, 0x04, 0xcd, 0xf1, 0x1d, 0x0b, - 0xdb, 0x44, 0x3d, 0xdc, 0x8f, 0xf4, 0x33, 0x24, 0x67, 0x58, 0x57, 0x6d, 0x97, 0x6f, 0x70, 0x1e, - 0x00, 0x62, 0x25, 0xc3, 0xd5, 0x77, 0x74, 0x6c, 0xf3, 0x7a, 0x12, 0xdb, 0xc6, 0x8c, 0xfa, 0x70, - 0x56, 0x52, 0x7a, 0x08, 0x90, 0x65, 0x3a, 0xba, 0xab, 0x5f, 0xc1, 0x55, 0xdd, 0x10, 0xc5, 0x27, - 0xb2, 0xad, 0x49, 0x29, 0x79, 0xd1, 0xb2, 0x64, 0xb8, 0x1e, 0xb6, 0x81, 0xeb, 0x6a, 0x04, 0x9b, - 0x04, 0xf3, 0xa4, 0x92, 0x17, 0x2d, 0x1e, 0xf6, 0x5d, 0x90, 0xab, 0x99, 0x2d, 0x92, 0xeb, 0x31, - 0x3c, 0xb2, 0x76, 0x48, 0xca, 0x10, 0x83, 0x79, 0x28, 0x3c, 0x8b, 0xf7, 0xab, 0x5e, 0x39, 0x65, - 0x88, 0xc1, 0x18, 0xca, 0xfd, 0x30, 0xaa, 0xd6, 0xeb, 0x36, 0x61, 0x2e, 0x18, 0xb1, 0x7d, 0xc9, - 0x88, 0x07, 0xa6, 0x88, 0xc5, 0x67, 0x21, 0x23, 0xec, 0x40, 0x96, 0x6a, 0x62, 0x89, 0xaa, 0xc5, - 0x36, 0xdb, 0x89, 0x53, 0x59, 0x25, 0x63, 0x88, 0xc6, 0xbb, 0x20, 0xa7, 0x3b, 0x55, 0xbf, 0x88, - 0x9f, 0x98, 0x4e, 0x9c, 0xca, 0x28, 0x43, 0xba, 0xe3, 0x15, 0x40, 0xe5, 0xcf, 0x24, 0x60, 0x24, - 0xfc, 0x12, 0x02, 0x2d, 0x40, 0xa6, 0x61, 0x6a, 0x2a, 0x75, 0x2d, 0xf6, 0x06, 0xec, 0x54, 0xcc, - 0x7b, 0x8b, 0x99, 0x65, 0x8e, 0xaf, 0x78, 0x94, 0xc5, 0xdf, 0x96, 0x20, 0x23, 0xc0, 0xe8, 0x18, - 0xa4, 0x2c, 0xd5, 0xdd, 0xa5, 0xec, 0xd2, 0xe5, 0x44, 0x5e, 0x52, 0xe8, 0x33, 0x81, 0x3b, 0x96, - 0x6a, 0x50, 0x17, 0xe0, 0x70, 0xf2, 0x4c, 0xc6, 0xb5, 0x81, 0xd5, 0x1a, 0xdd, 0xf4, 0x98, 0xcd, - 0x26, 0x36, 0x5c, 0x47, 0x8c, 0x2b, 0x87, 0xcf, 0x73, 0x30, 0x7a, 0x10, 0xc6, 0x5c, 0x5b, 0xd5, - 0x1b, 0x21, 0xdc, 0x14, 0xc5, 0xcd, 0x8b, 0x06, 0x0f, 0xb9, 0x04, 0x27, 0x04, 0xdf, 0x1a, 0x76, - 0x55, 0x6d, 0x17, 0xd7, 0x7c, 0xa2, 0x01, 0x5a, 0xdc, 0x38, 0xce, 0x11, 0x16, 0x78, 0xbb, 0xa0, - 0x95, 0xbf, 0x21, 0xc1, 0x98, 0xd8, 0xa6, 0xd5, 0x3c, 0x63, 0xad, 0x00, 0xa8, 0x86, 0x61, 0xba, - 0x41, 0x73, 0xb5, 0xbb, 0x72, 0x1b, 0xdd, 0xcc, 0x9c, 0x47, 0xa4, 0x04, 0x18, 0x14, 0x9b, 0x00, - 0x7e, 0x4b, 0x57, 0xb3, 0x4d, 0xc1, 0x10, 0x7f, 0xc3, 0x44, 0x5f, 0x53, 0xb2, 0x8d, 0x3d, 0x30, - 0x10, 0xd9, 0xcf, 0xa1, 0x09, 0x48, 0x6f, 0xe3, 0xba, 0x6e, 0xf0, 0xba, 0x31, 0x7b, 0x10, 0xe5, - 0x97, 0x94, 0x57, 0x7e, 0x29, 0x7f, 0x50, 0x82, 0x71, 0xcd, 0x6c, 0x46, 0xe5, 0x2d, 0xe7, 0x23, - 0xd5, 0x05, 0xe7, 0xa2, 0xf4, 0xd6, 0xa7, 0xeb, 0xba, 0xbb, 0xdb, 0xda, 0x9e, 0xd1, 0xcc, 0xe6, - 0x6c, 0xdd, 0x6c, 0xa8, 0x46, 0xdd, 0x7f, 0xcf, 0x4a, 0x7f, 0x68, 0x0f, 0xd7, 0xb1, 0xf1, 0x70, - 0xdd, 0x0c, 0xbc, 0x75, 0x3d, 0xef, 0xff, 0xfc, 0x33, 0x49, 0xfa, 0x85, 0x44, 0x72, 0x71, 0xbd, - 0xfc, 0xd9, 0x44, 0x71, 0x91, 0x75, 0xb7, 0x2e, 0xcc, 0xa3, 0xe0, 0x9d, 0x06, 0xd6, 0x88, 0xca, - 0xf0, 0xed, 0x07, 0x61, 0xa2, 0x6e, 0xd6, 0x4d, 0xca, 0x71, 0x96, 0xfc, 0xe2, 0x6f, 0x6e, 0xb3, - 0x1e, 0xb4, 0x18, 0xfb, 0x9a, 0xb7, 0xb4, 0x0a, 0xe3, 0x1c, 0xb9, 0x4a, 0x5f, 0x1d, 0xb1, 0x8d, - 0x0d, 0xea, 0x59, 0x55, 0x2b, 0xfc, 0xda, 0xb7, 0xe8, 0x82, 0xae, 0x8c, 0x71, 0x52, 0xd2, 0xc6, - 0xf6, 0x3e, 0x25, 0x05, 0x8e, 0x86, 0xf8, 0xb1, 0x69, 0x8b, 0xed, 0x18, 0x8e, 0xbf, 0xc9, 0x39, - 0x8e, 0x07, 0x38, 0x6e, 0x70, 0xd2, 0xd2, 0x3c, 0x0c, 0x1f, 0x84, 0xd7, 0xbf, 0xe4, 0xbc, 0x72, - 0x38, 0xc8, 0x64, 0x11, 0x46, 0x29, 0x13, 0xad, 0xe5, 0xb8, 0x66, 0x93, 0xc6, 0xc4, 0xde, 0x6c, - 0x7e, 0xeb, 0x5b, 0x6c, 0x1e, 0x8d, 0x10, 0xb2, 0x79, 0x8f, 0xaa, 0x54, 0x02, 0xfa, 0xb6, 0xac, - 0x86, 0xb5, 0x46, 0x0c, 0x87, 0xaf, 0x70, 0x41, 0x3c, 0xfc, 0xd2, 0x65, 0x98, 0x20, 0xbf, 0x69, - 0xc8, 0x0a, 0x4a, 0x12, 0x5f, 0x82, 0x2b, 0x7c, 0xe3, 0x3d, 0x6c, 0xaa, 0x8e, 0x7b, 0x0c, 0x02, - 0x32, 0x05, 0x46, 0xb1, 0x8e, 0x5d, 0x17, 0xdb, 0x4e, 0x55, 0x6d, 0x74, 0x12, 0x2f, 0x50, 0xc3, - 0x28, 0x7c, 0xec, 0x3b, 0xe1, 0x51, 0x5c, 0x64, 0x94, 0x73, 0x8d, 0x46, 0x69, 0x0b, 0x8e, 0x77, - 0xf0, 0x8a, 0x3e, 0x78, 0xbe, 0xc6, 0x79, 0x4e, 0xb4, 0x79, 0x06, 0x61, 0xbb, 0x0e, 0x02, 0xee, - 0x8d, 0x65, 0x1f, 0x3c, 0x7f, 0x9e, 0xf3, 0x44, 0x9c, 0x56, 0x0c, 0x29, 0xe1, 0xf8, 0x2c, 0x8c, - 0x5d, 0xc1, 0xf6, 0xb6, 0xe9, 0xf0, 0xba, 0x51, 0x1f, 0xec, 0x3e, 0xce, 0xd9, 0x8d, 0x72, 0x42, - 0x5a, 0x48, 0x22, 0xbc, 0x9e, 0x82, 0xcc, 0x8e, 0xaa, 0xe1, 0x3e, 0x58, 0x5c, 0xe7, 0x2c, 0x06, - 0x09, 0x3e, 0x21, 0x9d, 0x83, 0x5c, 0xdd, 0xe4, 0xab, 0x56, 0x3c, 0xf9, 0x27, 0x38, 0xf9, 0x90, - 0xa0, 0xe1, 0x2c, 0x2c, 0xd3, 0x6a, 0x35, 0xc8, 0x92, 0x16, 0xcf, 0xe2, 0x6f, 0x0a, 0x16, 0x82, - 0x86, 0xb3, 0x38, 0x80, 0x59, 0x3f, 0x29, 0x58, 0x38, 0x01, 0x7b, 0x3e, 0x03, 0x43, 0xa6, 0xd1, - 0xd8, 0x37, 0x8d, 0x7e, 0x84, 0xf8, 0x14, 0xe7, 0x00, 0x9c, 0x84, 0x30, 0x38, 0x0f, 0xd9, 0x7e, - 0x07, 0xe2, 0x6f, 0x7d, 0x47, 0x4c, 0x0f, 0x31, 0x02, 0x8b, 0x30, 0x2a, 0x02, 0x94, 0x6e, 0x1a, - 0x7d, 0xb0, 0xf8, 0xdb, 0x9c, 0xc5, 0x48, 0x80, 0x8c, 0xab, 0xe1, 0x62, 0xc7, 0xad, 0xe3, 0x7e, - 0x98, 0x7c, 0x46, 0xa8, 0xc1, 0x49, 0xb8, 0x29, 0xb7, 0xb1, 0xa1, 0xed, 0xf6, 0xc7, 0xe1, 0x97, - 0x84, 0x29, 0x05, 0x0d, 0x61, 0x31, 0x0f, 0xc3, 0x4d, 0xd5, 0x76, 0x76, 0xd5, 0x46, 0x5f, 0xc3, - 0xf1, 0x77, 0x38, 0x8f, 0x9c, 0x47, 0xc4, 0x2d, 0xd2, 0x32, 0x0e, 0xc2, 0xe6, 0xb3, 0xc2, 0x22, - 0x01, 0x32, 0x3e, 0xf5, 0x1c, 0x97, 0x16, 0xd9, 0x0e, 0xc2, 0xed, 0x97, 0xc5, 0xd4, 0x63, 0xb4, - 0x2b, 0x41, 0x8e, 0xe7, 0x21, 0xeb, 0xe8, 0x2f, 0xf7, 0xc5, 0xe6, 0x73, 0x62, 0xa4, 0x29, 0x01, - 0x21, 0x7e, 0x0b, 0x9c, 0xe8, 0xb8, 0x4c, 0xf4, 0xc1, 0xec, 0xef, 0x72, 0x66, 0xc7, 0x3a, 0x2c, - 0x15, 0x3c, 0x24, 0x1c, 0x94, 0xe5, 0xdf, 0x13, 0x21, 0x01, 0x47, 0x78, 0xad, 0x93, 0x7d, 0x84, - 0xa3, 0xee, 0x1c, 0xcc, 0x6a, 0xbf, 0x22, 0xac, 0xc6, 0x68, 0x43, 0x56, 0xdb, 0x84, 0x63, 0x9c, - 0xe3, 0xc1, 0xc6, 0xf5, 0x57, 0x45, 0x60, 0x65, 0xd4, 0x5b, 0xe1, 0xd1, 0x7d, 0x1b, 0x14, 0x3d, - 0x73, 0x8a, 0x84, 0xd5, 0xa9, 0x36, 0x55, 0xab, 0x0f, 0xce, 0xbf, 0xc6, 0x39, 0x8b, 0x88, 0xef, - 0x65, 0xbc, 0xce, 0x8a, 0x6a, 0x11, 0xe6, 0x2f, 0x40, 0x41, 0x30, 0x6f, 0x19, 0x36, 0xd6, 0xcc, - 0xba, 0xa1, 0xbf, 0x8c, 0x6b, 0x7d, 0xb0, 0xfe, 0xf5, 0xc8, 0x50, 0x6d, 0x05, 0xc8, 0x09, 0xe7, - 0x25, 0xc8, 0x7b, 0xb9, 0x4a, 0x55, 0x6f, 0x5a, 0xa6, 0xed, 0xc6, 0x70, 0xfc, 0xbc, 0x18, 0x29, - 0x8f, 0x6e, 0x89, 0x92, 0x95, 0x2a, 0xc0, 0xde, 0x3c, 0xf7, 0xeb, 0x92, 0x5f, 0xe0, 0x8c, 0x86, - 0x7d, 0x2a, 0x1e, 0x38, 0x34, 0xb3, 0x69, 0xa9, 0x76, 0x3f, 0xf1, 0xef, 0xef, 0x8b, 0xc0, 0xc1, - 0x49, 0x78, 0xe0, 0x70, 0xf7, 0x2d, 0x4c, 0x56, 0xfb, 0x3e, 0x38, 0x7c, 0x51, 0x04, 0x0e, 0x41, - 0xc3, 0x59, 0x88, 0x84, 0xa1, 0x0f, 0x16, 0xff, 0x40, 0xb0, 0x10, 0x34, 0x84, 0xc5, 0x73, 0xfe, - 0x42, 0x6b, 0xe3, 0xba, 0xee, 0xb8, 0x36, 0x4b, 0x93, 0x7b, 0xb3, 0xfa, 0x87, 0xdf, 0x09, 0x27, - 0x61, 0x4a, 0x80, 0x94, 0x44, 0x22, 0x5e, 0x76, 0xa5, 0xbb, 0xa8, 0x78, 0xc1, 0x7e, 0x43, 0x44, - 0xa2, 0x00, 0x19, 0x91, 0x2d, 0x90, 0x21, 0x12, 0xb3, 0x6b, 0x64, 0xef, 0xd0, 0x07, 0xbb, 0x7f, - 0x14, 0x11, 0x6e, 0x43, 0xd0, 0x12, 0x9e, 0x81, 0xfc, 0xa7, 0x65, 0xec, 0xe1, 0xfd, 0xbe, 0xbc, - 0xf3, 0x1f, 0x47, 0xf2, 0x9f, 0x2d, 0x46, 0xc9, 0x62, 0xc8, 0x68, 0x24, 0x9f, 0x42, 0x71, 0xe7, - 0x8c, 0x0a, 0x3f, 0xf5, 0x3d, 0xae, 0x6f, 0x38, 0x9d, 0x2a, 0x2d, 0x13, 0x27, 0x0f, 0x27, 0x3d, - 0xf1, 0xcc, 0xde, 0xf3, 0x3d, 0xcf, 0xcf, 0x43, 0x39, 0x4f, 0xe9, 0x02, 0x0c, 0x87, 0x12, 0x9e, - 0x78, 0x56, 0xef, 0xe5, 0xac, 0x72, 0xc1, 0x7c, 0xa7, 0x74, 0x16, 0x52, 0x24, 0x79, 0x89, 0x27, - 0xff, 0xcb, 0x9c, 0x9c, 0xa2, 0x97, 0xde, 0x0c, 0x19, 0x91, 0xb4, 0xc4, 0x93, 0xbe, 0x8f, 0x93, - 0x7a, 0x24, 0x84, 0x5c, 0x24, 0x2c, 0xf1, 0xe4, 0x7f, 0x45, 0x90, 0x0b, 0x12, 0x42, 0xde, 0xbf, - 0x09, 0xbf, 0xf4, 0xd3, 0x29, 0xbe, 0xe8, 0x08, 0xdb, 0x9d, 0x87, 0x41, 0x9e, 0xa9, 0xc4, 0x53, - 0x7f, 0x80, 0x77, 0x2e, 0x28, 0x4a, 0x4f, 0x40, 0xba, 0x4f, 0x83, 0xff, 0x0c, 0x27, 0x65, 0xf8, - 0xa5, 0x79, 0x18, 0x0a, 0x64, 0x27, 0xf1, 0xe4, 0x7f, 0x8d, 0x93, 0x07, 0xa9, 0x88, 0xe8, 0x3c, - 0x3b, 0x89, 0x67, 0xf0, 0x41, 0x21, 0x3a, 0xa7, 0x20, 0x66, 0x13, 0x89, 0x49, 0x3c, 0xf5, 0x87, - 0x84, 0xd5, 0x05, 0x49, 0xe9, 0x19, 0xc8, 0x7a, 0x8b, 0x4d, 0x3c, 0xfd, 0x87, 0x39, 0xbd, 0x4f, - 0x43, 0x2c, 0x10, 0x58, 0xec, 0xe2, 0x59, 0xfc, 0x75, 0x61, 0x81, 0x00, 0x15, 0x99, 0x46, 0xd1, - 0x04, 0x26, 0x9e, 0xd3, 0x47, 0xc4, 0x34, 0x8a, 0xe4, 0x2f, 0x64, 0x34, 0x69, 0xcc, 0x8f, 0x67, - 0xf1, 0xb3, 0x62, 0x34, 0x29, 0x3e, 0x11, 0x23, 0x9a, 0x11, 0xc4, 0xf3, 0xf8, 0x1b, 0x42, 0x8c, - 0x48, 0x42, 0x50, 0x5a, 0x07, 0xd4, 0x9e, 0x0d, 0xc4, 0xf3, 0xfb, 0x28, 0xe7, 0x37, 0xd6, 0x96, - 0x0c, 0x94, 0x9e, 0x87, 0x63, 0x9d, 0x33, 0x81, 0x78, 0xae, 0x1f, 0xfb, 0x5e, 0x64, 0xef, 0x16, - 0x4c, 0x04, 0x4a, 0x9b, 0xfe, 0x92, 0x12, 0xcc, 0x02, 0xe2, 0xd9, 0xbe, 0xf6, 0xbd, 0x70, 0xe0, - 0x0e, 0x26, 0x01, 0xa5, 0x39, 0x00, 0x7f, 0x01, 0x8e, 0xe7, 0xf5, 0x71, 0xce, 0x2b, 0x40, 0x44, - 0xa6, 0x06, 0x5f, 0x7f, 0xe3, 0xe9, 0xaf, 0x8b, 0xa9, 0xc1, 0x29, 0xc8, 0xd4, 0x10, 0x4b, 0x6f, - 0x3c, 0xf5, 0x27, 0xc4, 0xd4, 0x10, 0x24, 0xc4, 0xb3, 0x03, 0xab, 0x5b, 0x3c, 0x87, 0x4f, 0x09, - 0xcf, 0x0e, 0x50, 0x95, 0x56, 0x61, 0xac, 0x6d, 0x41, 0x8c, 0x67, 0xf5, 0x0b, 0x9c, 0x55, 0x3e, - 0xba, 0x1e, 0x06, 0x17, 0x2f, 0xbe, 0x18, 0xc6, 0x73, 0xfb, 0x74, 0x64, 0xf1, 0xe2, 0x6b, 0x61, - 0xe9, 0x3c, 0x64, 0x8c, 0x56, 0xa3, 0x41, 0x26, 0x0f, 0xea, 0x7d, 0x36, 0xb0, 0xf0, 0x5f, 0xbe, - 0xcf, 0xad, 0x23, 0x08, 0x4a, 0x67, 0x21, 0x8d, 0x9b, 0xdb, 0xb8, 0x16, 0x47, 0xf9, 0xed, 0xef, - 0x8b, 0x80, 0x49, 0xb0, 0x4b, 0xcf, 0x00, 0xb0, 0xd2, 0x08, 0x7d, 0x3d, 0x18, 0x43, 0xfb, 0x5f, - 0xbf, 0xcf, 0x0f, 0xe3, 0xf8, 0x24, 0x3e, 0x03, 0x76, 0xb4, 0xa7, 0x37, 0x83, 0xef, 0x84, 0x19, - 0xd0, 0x11, 0x79, 0x0a, 0x06, 0x5f, 0x74, 0x4c, 0xc3, 0x55, 0xeb, 0x71, 0xd4, 0xff, 0x8d, 0x53, - 0x0b, 0x7c, 0x62, 0xb0, 0xa6, 0x69, 0x63, 0x57, 0xad, 0x3b, 0x71, 0xb4, 0xff, 0x9d, 0xd3, 0x7a, - 0x04, 0x84, 0x58, 0x53, 0x1d, 0xb7, 0x1f, 0xbd, 0xff, 0x48, 0x10, 0x0b, 0x02, 0x22, 0x34, 0xf9, - 0xbd, 0x87, 0xf7, 0xe3, 0x68, 0xbf, 0x2b, 0x84, 0xe6, 0xf8, 0xa5, 0x37, 0x43, 0x96, 0xfc, 0x64, - 0x27, 0xec, 0x62, 0x88, 0xff, 0x98, 0x13, 0xfb, 0x14, 0xa4, 0x67, 0xc7, 0xad, 0xb9, 0x7a, 0xbc, - 0xb1, 0x6f, 0xf2, 0x91, 0x16, 0xf8, 0xa5, 0x39, 0x18, 0x72, 0xdc, 0x5a, 0xad, 0xc5, 0xf3, 0xd3, - 0x18, 0xf2, 0x3f, 0xf9, 0xbe, 0x57, 0xb2, 0xf0, 0x68, 0xc8, 0x68, 0x5f, 0xdd, 0x73, 0x2d, 0x93, - 0xbe, 0x02, 0x89, 0xe3, 0xf0, 0x3d, 0xce, 0x21, 0x40, 0x52, 0x9a, 0x87, 0x1c, 0xd1, 0xc5, 0xc6, - 0x16, 0xa6, 0xef, 0xab, 0x62, 0x58, 0xfc, 0x29, 0x37, 0x40, 0x88, 0xa8, 0xfc, 0x93, 0x5f, 0x79, - 0x7d, 0x52, 0xfa, 0xfa, 0xeb, 0x93, 0xd2, 0x1f, 0xbc, 0x3e, 0x29, 0x7d, 0xe8, 0x9b, 0x93, 0x47, - 0xbe, 0xfe, 0xcd, 0xc9, 0x23, 0xbf, 0xfb, 0xcd, 0xc9, 0x23, 0x9d, 0xcb, 0xc6, 0xb0, 0x68, 0x2e, - 0x9a, 0xac, 0x60, 0xfc, 0x56, 0x39, 0x54, 0x2e, 0xae, 0x9b, 0x7e, 0xb5, 0xd6, 0xdb, 0xe4, 0xc0, - 0x9f, 0x4a, 0x64, 0xc3, 0x1c, 0xae, 0xe5, 0xaa, 0xc6, 0x7e, 0x97, 0xbb, 0x3a, 0xc5, 0x8e, 0x85, - 0x61, 0xf9, 0x4d, 0x90, 0x9c, 0x33, 0xf6, 0xd1, 0x09, 0x16, 0xf3, 0xaa, 0x2d, 0xbb, 0xc1, 0x4f, - 0x7e, 0x0d, 0x92, 0xe7, 0x2d, 0xbb, 0x81, 0x26, 0xfc, 0xe3, 0x99, 0xd2, 0xa9, 0x1c, 0x3f, 0x73, - 0x59, 0x4a, 0x7d, 0xf7, 0x53, 0x53, 0x47, 0xca, 0x7b, 0x51, 0x0d, 0xbf, 0x14, 0xab, 0x65, 0x66, - 0xce, 0xd8, 0xa7, 0x4a, 0xae, 0x4b, 0x6f, 0x4d, 0x93, 0x3e, 0x1c, 0x51, 0xd8, 0x9e, 0x8c, 0x16, - 0xb6, 0x9f, 0xc7, 0x8d, 0xc6, 0x25, 0xc3, 0xbc, 0x6a, 0x6c, 0x12, 0xb4, 0xed, 0x01, 0x76, 0x8c, - 0x18, 0x3e, 0x94, 0x80, 0xa9, 0xa8, 0xde, 0xc4, 0x71, 0x1c, 0x57, 0x6d, 0x5a, 0xdd, 0x6e, 0x2a, - 0x9d, 0x87, 0xec, 0xa6, 0xc0, 0x41, 0x05, 0x18, 0x74, 0xb0, 0x66, 0x1a, 0x35, 0x87, 0x2a, 0x9b, - 0x54, 0xc4, 0x23, 0x51, 0xd6, 0x50, 0x0d, 0xd3, 0xe1, 0xe7, 0x23, 0xd9, 0x43, 0xf9, 0xe7, 0xa4, - 0x83, 0x8d, 0xe4, 0x88, 0xd7, 0x95, 0xd0, 0xf4, 0xc1, 0x5e, 0xe5, 0x7f, 0x6a, 0x05, 0x5f, 0x85, - 0x40, 0xad, 0xbf, 0x5f, 0x93, 0xbc, 0x3b, 0x09, 0x27, 0x34, 0xd3, 0x69, 0x9a, 0x4e, 0x95, 0x8d, - 0x30, 0x7b, 0xe0, 0xc6, 0xc8, 0x05, 0x9b, 0xfa, 0xa8, 0xff, 0x5f, 0x84, 0x11, 0x3a, 0x0b, 0x68, - 0xe5, 0x93, 0x06, 0x9e, 0xd8, 0xb5, 0xe2, 0xab, 0xff, 0x36, 0x4d, 0xbd, 0x66, 0xd8, 0x23, 0xa4, - 0x47, 0x3b, 0x36, 0x61, 0x42, 0x6f, 0x5a, 0x0d, 0x4c, 0xdf, 0x01, 0x55, 0xbd, 0xb6, 0x78, 0x7e, - 0x5f, 0xe3, 0xfc, 0xc6, 0x7d, 0xf2, 0x25, 0x41, 0x5d, 0x5a, 0x86, 0x31, 0x55, 0xd3, 0xb0, 0x15, - 0x62, 0x19, 0x33, 0x43, 0x85, 0x80, 0x79, 0x4e, 0xe9, 0x71, 0x2b, 0x3f, 0xd3, 0x6d, 0x6c, 0xdf, - 0x7a, 0x6f, 0x60, 0xd0, 0x6c, 0x5c, 0xc7, 0xc6, 0xc3, 0x06, 0x76, 0xaf, 0x9a, 0xf6, 0x1e, 0x37, - 0xef, 0xc3, 0xac, 0x2b, 0x31, 0x08, 0xef, 0x4d, 0xc2, 0x24, 0x6b, 0x98, 0xdd, 0x56, 0x1d, 0x3c, - 0x7b, 0xe5, 0xd1, 0x6d, 0xec, 0xaa, 0x8f, 0xce, 0x6a, 0xa6, 0x6e, 0xf0, 0x91, 0x18, 0xe7, 0xe3, - 0x42, 0xda, 0x67, 0x78, 0x7b, 0x97, 0x89, 0xb9, 0x08, 0xa9, 0x79, 0x53, 0x37, 0x88, 0x47, 0xd6, - 0xb0, 0x61, 0x36, 0xf9, 0xb4, 0x64, 0x0f, 0xe8, 0x6e, 0x18, 0x50, 0x9b, 0x66, 0xcb, 0x70, 0xd9, - 0xeb, 0xab, 0xf2, 0xd0, 0x57, 0x6e, 0x4c, 0x1d, 0xf9, 0xbd, 0x1b, 0x53, 0xc9, 0x25, 0xc3, 0x55, - 0x78, 0x53, 0x29, 0xf5, 0xc6, 0x27, 0xa7, 0x24, 0xf9, 0x59, 0x18, 0x5c, 0xc0, 0xda, 0x61, 0x78, - 0x2d, 0x60, 0x2d, 0xc2, 0xeb, 0x01, 0xc8, 0x2c, 0x19, 0x2e, 0x3b, 0x32, 0x7b, 0x27, 0x24, 0x75, - 0x83, 0x9d, 0xc2, 0x8a, 0xf4, 0x4f, 0xe0, 0x04, 0x75, 0x01, 0x6b, 0x1e, 0x6a, 0x0d, 0x6b, 0x51, - 0x54, 0xc2, 0x9e, 0xc0, 0xcb, 0x0b, 0xbf, 0xfb, 0x9f, 0x26, 0x8f, 0xbc, 0xf2, 0xfa, 0xe4, 0x91, - 0xae, 0x23, 0x11, 0x0c, 0x87, 0xdc, 0xc4, 0x7c, 0x08, 0x9c, 0xda, 0xde, 0xac, 0x1b, 0x9a, 0x0b, - 0x7f, 0x35, 0x01, 0x93, 0x6d, 0x2e, 0xce, 0x17, 0x86, 0x6e, 0xd1, 0xa1, 0x04, 0x99, 0x05, 0xb1, - 0xde, 0x1c, 0x34, 0x38, 0xfc, 0xec, 0x01, 0x83, 0xc3, 0xb0, 0xe8, 0x49, 0xc4, 0x86, 0xd3, 0xf1, - 0xb1, 0x41, 0xc8, 0x7f, 0x88, 0xd0, 0xf0, 0xd9, 0x14, 0xdc, 0x49, 0x2f, 0x8f, 0xd8, 0x4d, 0xdd, - 0x70, 0x67, 0x35, 0x7b, 0xdf, 0x72, 0xe9, 0x72, 0x62, 0xee, 0x70, 0x6b, 0x8c, 0xf9, 0xcd, 0x33, - 0xac, 0xb9, 0x8b, 0x4b, 0xee, 0x40, 0x7a, 0x9d, 0xd0, 0x11, 0x43, 0xb8, 0xa6, 0xab, 0x36, 0xb8, - 0x81, 0xd8, 0x03, 0x81, 0xb2, 0x0b, 0x27, 0x09, 0x06, 0xd5, 0xc5, 0x5d, 0x93, 0x06, 0x56, 0x77, - 0xd8, 0xb9, 0xdd, 0x24, 0x5d, 0x42, 0x32, 0x04, 0x40, 0x8f, 0xe8, 0x4e, 0x40, 0x5a, 0x6d, 0xb1, - 0x57, 0xce, 0x49, 0xb2, 0xb6, 0xd0, 0x07, 0xf9, 0x12, 0x0c, 0xf2, 0xd7, 0x5c, 0x28, 0x0f, 0xc9, - 0x3d, 0xbc, 0x4f, 0xfb, 0xc9, 0x29, 0xe4, 0x27, 0x9a, 0x81, 0x34, 0x15, 0x9e, 0x5f, 0x48, 0x28, - 0xcc, 0xb4, 0x49, 0x3f, 0x43, 0x85, 0x54, 0x18, 0x9a, 0xfc, 0x2c, 0x64, 0x16, 0xcc, 0xa6, 0x6e, - 0x98, 0x61, 0x6e, 0x59, 0xc6, 0x8d, 0xca, 0x6c, 0xb5, 0xb8, 0xeb, 0x2b, 0xec, 0x01, 0x1d, 0x83, - 0x01, 0x76, 0x8e, 0x9b, 0xbf, 0x36, 0xe7, 0x4f, 0xf2, 0x3c, 0x0c, 0x52, 0xde, 0x6b, 0x16, 0x42, - 0xfc, 0x06, 0x10, 0x3f, 0x30, 0x4e, 0xa3, 0x24, 0x67, 0x9f, 0xf0, 0x85, 0x45, 0x90, 0xaa, 0xa9, - 0xae, 0xca, 0xf5, 0xa6, 0xbf, 0xe5, 0xa7, 0x21, 0xc3, 0x99, 0x38, 0xe8, 0x0c, 0x24, 0x4d, 0xcb, - 0xe1, 0x2f, 0xbe, 0x8b, 0xdd, 0x54, 0x59, 0xb3, 0xca, 0x29, 0x32, 0x69, 0x14, 0x82, 0x5c, 0x56, - 0xba, 0xce, 0x92, 0x27, 0x03, 0x8e, 0x14, 0x18, 0xf2, 0xc0, 0x4f, 0x36, 0xa4, 0x6d, 0xee, 0xe0, - 0x39, 0xcb, 0xa7, 0x12, 0x30, 0x19, 0x68, 0xbd, 0x82, 0x6d, 0xb2, 0xd7, 0x63, 0x13, 0x8c, 0x7b, - 0x0b, 0x0a, 0x08, 0xc9, 0xdb, 0xbb, 0xb8, 0xcb, 0x9b, 0x21, 0x39, 0x67, 0x59, 0xa8, 0x08, 0x19, - 0xf6, 0x82, 0xdb, 0x64, 0xfe, 0x92, 0x52, 0xbc, 0x67, 0xd2, 0xe6, 0x98, 0x3b, 0xee, 0x55, 0xd5, - 0xf6, 0xae, 0x3a, 0x89, 0x67, 0xf9, 0x29, 0xc8, 0xce, 0x9b, 0x86, 0x83, 0x0d, 0xa7, 0x45, 0xa7, - 0xde, 0x76, 0xc3, 0xd4, 0xf6, 0x38, 0x07, 0xf6, 0x40, 0x0c, 0xae, 0x5a, 0x16, 0xa5, 0x4c, 0x29, - 0xe4, 0x27, 0x0b, 0x53, 0xe5, 0x8d, 0xae, 0x26, 0x7a, 0xea, 0xe0, 0x26, 0xe2, 0x4a, 0x7a, 0x36, - 0xfa, 0xdf, 0x12, 0x9c, 0x6c, 0x9f, 0x50, 0x7b, 0x78, 0xdf, 0x39, 0xe8, 0x7c, 0x7a, 0x01, 0xb2, - 0xeb, 0xf4, 0xbe, 0xf1, 0x25, 0xbc, 0x8f, 0x8a, 0x30, 0x88, 0x6b, 0x67, 0xce, 0x9e, 0x7d, 0xf4, - 0x29, 0xe6, 0xed, 0x17, 0x8f, 0x28, 0x02, 0x80, 0x26, 0x21, 0xeb, 0x60, 0xcd, 0x3a, 0x73, 0xf6, - 0xdc, 0xde, 0xa3, 0xcc, 0xbd, 0x2e, 0x1e, 0x51, 0x7c, 0x50, 0x29, 0x43, 0xb4, 0x7e, 0xe3, 0x53, - 0x53, 0x52, 0x39, 0x0d, 0x49, 0xa7, 0xd5, 0xbc, 0xad, 0x3e, 0xf2, 0x5a, 0x1a, 0xa6, 0x83, 0x94, - 0x34, 0x40, 0x5d, 0x51, 0x1b, 0x7a, 0x4d, 0xf5, 0x6f, 0x8a, 0xe7, 0x03, 0x36, 0xa0, 0x18, 0x9d, - 0x4d, 0x50, 0xec, 0x69, 0x49, 0xf9, 0xd7, 0x25, 0xc8, 0x5d, 0x16, 0x9c, 0x37, 0xb0, 0x8b, 0xce, - 0x03, 0x78, 0x3d, 0x89, 0x69, 0x73, 0xc7, 0x4c, 0xb4, 0xaf, 0x19, 0x8f, 0x46, 0x09, 0xa0, 0xa3, - 0x27, 0xa8, 0x23, 0x5a, 0xa6, 0xc3, 0xaf, 0xbf, 0xc4, 0x90, 0x7a, 0xc8, 0xe8, 0x21, 0x40, 0x34, - 0xc2, 0x55, 0xaf, 0x98, 0xae, 0x6e, 0xd4, 0xab, 0x96, 0x79, 0x95, 0x5f, 0x2a, 0x4c, 0x2a, 0x79, - 0xda, 0x72, 0x99, 0x36, 0xac, 0x13, 0x38, 0x11, 0x3a, 0xeb, 0x71, 0x21, 0xab, 0x89, 0x5a, 0xab, - 0xd9, 0xd8, 0x71, 0x78, 0x10, 0x13, 0x8f, 0xe8, 0x3c, 0x0c, 0x5a, 0xad, 0xed, 0xaa, 0x88, 0x18, - 0x43, 0x67, 0x4e, 0x76, 0x9a, 0xff, 0xc2, 0x3f, 0x78, 0x04, 0x18, 0xb0, 0x5a, 0xdb, 0xc4, 0x5b, - 0xee, 0x82, 0x5c, 0x07, 0x61, 0x86, 0xae, 0xf8, 0x72, 0xd0, 0x6b, 0xee, 0x5c, 0x83, 0xaa, 0x65, - 0xeb, 0xa6, 0xad, 0xbb, 0xfb, 0xf4, 0xf4, 0x4a, 0x52, 0xc9, 0x8b, 0x86, 0x75, 0x0e, 0x97, 0xf7, - 0x60, 0x74, 0x83, 0xa6, 0x5a, 0xbe, 0xe4, 0x67, 0x7d, 0xf9, 0xa4, 0x78, 0xf9, 0xba, 0x4a, 0x96, - 0x68, 0x93, 0xac, 0xfc, 0x5c, 0x57, 0xef, 0x7c, 0xe2, 0xe0, 0xde, 0x19, 0x5e, 0xfc, 0xff, 0xe8, - 0x44, 0x68, 0x72, 0xf2, 0xcc, 0x3a, 0x10, 0xbe, 0xfa, 0x75, 0xcc, 0xb8, 0x1d, 0x46, 0xb1, 0xf7, - 0xa2, 0x5a, 0x8c, 0x09, 0xa3, 0xc5, 0xd8, 0x29, 0x24, 0x3f, 0x05, 0xc3, 0xeb, 0xaa, 0xed, 0x6e, - 0x60, 0xf7, 0x22, 0x56, 0x6b, 0xd8, 0x0e, 0xaf, 0xba, 0xc3, 0x62, 0xd5, 0x45, 0x90, 0xa2, 0x4b, - 0x2b, 0x5b, 0x75, 0xe8, 0x6f, 0x79, 0x17, 0x52, 0xf4, 0x04, 0x9b, 0xb7, 0x22, 0x73, 0x0a, 0xb6, - 0x22, 0x93, 0x58, 0xba, 0xef, 0x62, 0x47, 0x6c, 0xe8, 0xe8, 0x03, 0x7a, 0x5c, 0xac, 0xab, 0xc9, - 0xde, 0xeb, 0x2a, 0x77, 0x44, 0xbe, 0xba, 0x36, 0x60, 0xb0, 0x4c, 0x42, 0xf1, 0xd2, 0x82, 0x27, - 0x88, 0xe4, 0x0b, 0x82, 0x56, 0x60, 0xd4, 0x52, 0x6d, 0x97, 0x1e, 0xdd, 0xdf, 0xa5, 0x5a, 0x70, - 0x5f, 0x9f, 0x6a, 0x9f, 0x79, 0x21, 0x65, 0x79, 0x2f, 0xc3, 0x56, 0x10, 0x28, 0xff, 0x61, 0x0a, - 0x06, 0xb8, 0x31, 0xde, 0x0c, 0x83, 0xdc, 0xac, 0xdc, 0x3b, 0xef, 0x9c, 0x69, 0x5f, 0x98, 0x66, - 0xbc, 0x05, 0x84, 0xf3, 0x13, 0x34, 0xe8, 0x3e, 0xc8, 0x68, 0xbb, 0xaa, 0x6e, 0x54, 0xf5, 0x9a, - 0xc8, 0x7a, 0x5f, 0xbf, 0x31, 0x35, 0x38, 0x4f, 0x60, 0x4b, 0x0b, 0xca, 0x20, 0x6d, 0x5c, 0xaa, - 0x91, 0x4c, 0x60, 0x17, 0xeb, 0xf5, 0x5d, 0x97, 0xcf, 0x30, 0xfe, 0x84, 0x9e, 0x84, 0x14, 0x71, - 0x08, 0x7e, 0xb1, 0xab, 0xd8, 0xb6, 0xf7, 0xf0, 0x36, 0x80, 0xe5, 0x0c, 0xe9, 0xf8, 0x43, 0xbf, - 0x3f, 0x25, 0x29, 0x94, 0x02, 0xcd, 0xc3, 0x70, 0x43, 0x75, 0xdc, 0x2a, 0x5d, 0xc1, 0x48, 0xf7, - 0x69, 0xca, 0xe2, 0x44, 0xbb, 0x41, 0xb8, 0x61, 0xb9, 0xe8, 0x43, 0x84, 0x8a, 0x81, 0x6a, 0xe8, - 0x14, 0xe4, 0x29, 0x13, 0xcd, 0x6c, 0x36, 0x75, 0x97, 0xe5, 0x56, 0x03, 0xd4, 0xee, 0x23, 0x04, - 0x3e, 0x4f, 0xc1, 0x34, 0xc3, 0xba, 0x03, 0xb2, 0xf4, 0x2a, 0x09, 0x45, 0x61, 0xc7, 0x26, 0x33, - 0x04, 0x40, 0x1b, 0xef, 0x87, 0x51, 0x3f, 0x3e, 0x32, 0x94, 0x0c, 0xe3, 0xe2, 0x83, 0x29, 0xe2, - 0x23, 0x30, 0x61, 0xe0, 0x6b, 0xf4, 0x20, 0x67, 0x08, 0x3b, 0x4b, 0xb1, 0x11, 0x69, 0xbb, 0x1c, - 0xa6, 0xb8, 0x17, 0x46, 0x34, 0x61, 0x7c, 0x86, 0x0b, 0x14, 0x77, 0xd8, 0x83, 0x52, 0xb4, 0x13, - 0x90, 0x51, 0x2d, 0x8b, 0x21, 0x0c, 0xf1, 0xf8, 0x68, 0x59, 0xb4, 0xe9, 0x34, 0x8c, 0x51, 0x1d, - 0x6d, 0xec, 0xb4, 0x1a, 0x2e, 0x67, 0x92, 0xa3, 0x38, 0xa3, 0xa4, 0x41, 0x61, 0x70, 0x8a, 0x7b, - 0x37, 0x0c, 0xe3, 0x2b, 0x7a, 0x0d, 0x1b, 0x1a, 0x66, 0x78, 0xc3, 0x14, 0x2f, 0x27, 0x80, 0x14, - 0xe9, 0x01, 0xf0, 0xe2, 0x5e, 0x55, 0xc4, 0xe4, 0x11, 0xc6, 0x4f, 0xc0, 0xe7, 0x18, 0x58, 0x2e, - 0x40, 0x6a, 0x41, 0x75, 0x55, 0x92, 0x60, 0xb8, 0xd7, 0xd8, 0x42, 0x93, 0x53, 0xc8, 0x4f, 0xf9, - 0x8d, 0x04, 0xa4, 0x2e, 0x9b, 0x2e, 0x46, 0x8f, 0x05, 0x12, 0xc0, 0x91, 0x4e, 0xfe, 0xbc, 0xa1, - 0xd7, 0x0d, 0x5c, 0x5b, 0x71, 0xea, 0x81, 0x7b, 0xdf, 0xbe, 0x3b, 0x25, 0x42, 0xee, 0x34, 0x01, - 0x69, 0xdb, 0x6c, 0x19, 0x35, 0x71, 0xe2, 0x90, 0x3e, 0xa0, 0x0a, 0x64, 0x3c, 0x2f, 0x49, 0xc5, - 0x79, 0xc9, 0x28, 0xf1, 0x12, 0xe2, 0xc3, 0x1c, 0xa0, 0x0c, 0x6e, 0x73, 0x67, 0x29, 0x43, 0xd6, - 0x0b, 0x5e, 0xdc, 0xdb, 0xfa, 0x73, 0x58, 0x9f, 0x8c, 0x2c, 0x26, 0xde, 0xd8, 0x7b, 0xc6, 0x63, - 0x1e, 0x97, 0xf7, 0x1a, 0xb8, 0xf5, 0x42, 0x6e, 0xc5, 0xef, 0xa0, 0x0f, 0x52, 0xbd, 0x7c, 0xb7, - 0x62, 0xf7, 0xd0, 0x4f, 0x42, 0xd6, 0xd1, 0xeb, 0x86, 0xea, 0xb6, 0x6c, 0xcc, 0x3d, 0xcf, 0x07, - 0xc8, 0x5f, 0x92, 0x60, 0x80, 0x79, 0x72, 0xc0, 0x6e, 0x52, 0x67, 0xbb, 0x25, 0xba, 0xd9, 0x2d, - 0x79, 0x78, 0xbb, 0xcd, 0x01, 0x78, 0xc2, 0x38, 0xfc, 0x6a, 0x70, 0x87, 0x8c, 0x81, 0x89, 0xb8, - 0xa1, 0xd7, 0xf9, 0x44, 0x0d, 0x10, 0xc9, 0xff, 0x51, 0x22, 0x49, 0x2c, 0x6f, 0x47, 0x73, 0x30, - 0x2c, 0xe4, 0xaa, 0xee, 0x34, 0xd4, 0x3a, 0xf7, 0x9d, 0x3b, 0xbb, 0x0a, 0x77, 0xa1, 0xa1, 0xd6, - 0x95, 0x21, 0x2e, 0x0f, 0x79, 0xe8, 0x3c, 0x0e, 0x89, 0x2e, 0xe3, 0x10, 0x1a, 0xf8, 0xe4, 0xe1, - 0x06, 0x3e, 0x34, 0x44, 0xa9, 0xe8, 0x10, 0x7d, 0x3e, 0x41, 0x37, 0x33, 0x96, 0xe9, 0xa8, 0x8d, - 0x1f, 0xc6, 0x8c, 0xb8, 0x03, 0xb2, 0x96, 0xd9, 0xa8, 0xb2, 0x16, 0x76, 0x12, 0x37, 0x63, 0x99, - 0x0d, 0xa5, 0x6d, 0xd8, 0xd3, 0xb7, 0x68, 0xba, 0x0c, 0xdc, 0x02, 0xab, 0x0d, 0x46, 0xad, 0x66, - 0x43, 0x8e, 0x99, 0x82, 0xaf, 0x65, 0x8f, 0x10, 0x1b, 0xd0, 0xc5, 0x51, 0x6a, 0x5f, 0x7b, 0x99, - 0xd8, 0x0c, 0x53, 0xe1, 0x78, 0x84, 0x82, 0x85, 0xfe, 0x4e, 0xbb, 0xe0, 0xa0, 0x5b, 0x2a, 0x1c, - 0x4f, 0xfe, 0x39, 0x09, 0x60, 0x99, 0x58, 0x96, 0xea, 0x4b, 0x56, 0x21, 0x87, 0x8a, 0x50, 0x0d, - 0xf5, 0x3c, 0xd9, 0x6d, 0xd0, 0x78, 0xff, 0x39, 0x27, 0x28, 0xf7, 0x3c, 0x0c, 0xfb, 0xce, 0xe8, - 0x60, 0x21, 0xcc, 0x64, 0x8f, 0xac, 0x7a, 0x03, 0xbb, 0x4a, 0xee, 0x4a, 0xe0, 0x49, 0xfe, 0x67, - 0x12, 0x64, 0xa9, 0x4c, 0x2b, 0xd8, 0x55, 0x43, 0x63, 0x28, 0x1d, 0x7e, 0x0c, 0xef, 0x04, 0x60, - 0x6c, 0x1c, 0xfd, 0x65, 0xcc, 0x3d, 0x2b, 0x4b, 0x21, 0x1b, 0xfa, 0xcb, 0x18, 0x9d, 0xf3, 0x0c, - 0x9e, 0xec, 0x6d, 0x70, 0x91, 0x75, 0x73, 0xb3, 0x1f, 0x87, 0x41, 0xfa, 0x29, 0x9d, 0x6b, 0x0e, - 0x4f, 0xa4, 0x07, 0x8c, 0x56, 0x73, 0xf3, 0x9a, 0x23, 0xbf, 0x08, 0x83, 0x9b, 0xd7, 0x58, 0x6d, - 0xe4, 0x0e, 0xc8, 0xda, 0xa6, 0xc9, 0xd7, 0x64, 0x96, 0x0b, 0x65, 0x08, 0x80, 0x2e, 0x41, 0xa2, - 0x1e, 0x90, 0xf0, 0xeb, 0x01, 0x7e, 0x41, 0x23, 0xd9, 0x57, 0x41, 0xe3, 0xf4, 0xbf, 0x93, 0x60, - 0x28, 0x10, 0x1f, 0xd0, 0xa3, 0x70, 0xb4, 0xbc, 0xbc, 0x36, 0x7f, 0xa9, 0xba, 0xb4, 0x50, 0xbd, - 0xb0, 0x3c, 0xb7, 0xe8, 0xdf, 0x35, 0x29, 0x1e, 0x7b, 0xf5, 0xfa, 0x34, 0x0a, 0xe0, 0x6e, 0x19, - 0x7b, 0x86, 0x79, 0xd5, 0x40, 0xb3, 0x30, 0x11, 0x26, 0x99, 0x2b, 0x6f, 0x54, 0x56, 0x37, 0xf3, - 0x52, 0xf1, 0xe8, 0xab, 0xd7, 0xa7, 0xc7, 0x02, 0x14, 0x73, 0xdb, 0x0e, 0x36, 0xdc, 0x76, 0x82, - 0xf9, 0xb5, 0x95, 0x95, 0xa5, 0xcd, 0x7c, 0xa2, 0x8d, 0x80, 0x07, 0xec, 0x07, 0x60, 0x2c, 0x4c, - 0xb0, 0xba, 0xb4, 0x9c, 0x4f, 0x16, 0xd1, 0xab, 0xd7, 0xa7, 0x47, 0x02, 0xd8, 0xab, 0x7a, 0xa3, - 0x98, 0x79, 0xff, 0xa7, 0x27, 0x8f, 0xfc, 0xd2, 0x2f, 0x4e, 0x4a, 0x44, 0xb3, 0xe1, 0x50, 0x8c, - 0x40, 0x0f, 0xc1, 0xf1, 0x8d, 0xa5, 0xc5, 0xd5, 0xca, 0x42, 0x75, 0x65, 0x63, 0xb1, 0xca, 0xbe, - 0xb1, 0xe1, 0x69, 0x37, 0xfa, 0xea, 0xf5, 0xe9, 0x21, 0xae, 0x52, 0x37, 0xec, 0x75, 0xa5, 0x72, - 0x79, 0x6d, 0xb3, 0x92, 0x97, 0x18, 0xf6, 0xba, 0x8d, 0xaf, 0x98, 0x2e, 0xfb, 0xd6, 0xd6, 0x23, - 0x70, 0xa2, 0x03, 0xb6, 0xa7, 0xd8, 0xd8, 0xab, 0xd7, 0xa7, 0x87, 0xd7, 0x6d, 0xcc, 0xe6, 0x0f, - 0xa5, 0x98, 0x81, 0x42, 0x3b, 0xc5, 0xda, 0xfa, 0xda, 0xc6, 0xdc, 0x72, 0x7e, 0xba, 0x98, 0x7f, - 0xf5, 0xfa, 0x74, 0x4e, 0x04, 0x43, 0x82, 0xef, 0x6b, 0x76, 0x3b, 0x77, 0x3c, 0x7f, 0xf2, 0x30, - 0xdc, 0xc3, 0x4b, 0xa2, 0x8e, 0xab, 0xee, 0xe9, 0x46, 0xdd, 0x2b, 0x3c, 0xf3, 0x67, 0xbe, 0xf3, - 0x39, 0xc6, 0x6b, 0xcf, 0x02, 0xda, 0xb3, 0xfc, 0x5c, 0xec, 0xfe, 0x66, 0xa9, 0x18, 0x53, 0x5d, - 0x8d, 0xdf, 0x3a, 0x75, 0x7f, 0x55, 0x51, 0x8c, 0x29, 0xa0, 0x17, 0x7b, 0x6e, 0xee, 0xe4, 0x0f, - 0x48, 0x30, 0x72, 0x51, 0x77, 0x5c, 0xd3, 0xd6, 0x35, 0xb5, 0x41, 0x6f, 0x98, 0x9c, 0xeb, 0x37, - 0xb6, 0x46, 0xa6, 0xfa, 0x33, 0x30, 0x70, 0x45, 0x6d, 0xb0, 0xa0, 0x96, 0xa4, 0x1f, 0xc4, 0xe8, - 0x6c, 0x3e, 0x3f, 0xb4, 0x09, 0x06, 0x8c, 0x4c, 0xfe, 0x95, 0x04, 0x8c, 0xd2, 0xc9, 0xe0, 0xb0, - 0x4f, 0x25, 0x91, 0x3d, 0x56, 0x19, 0x52, 0xb6, 0xea, 0xf2, 0xa2, 0x61, 0x79, 0x86, 0x17, 0xc2, - 0xef, 0x8b, 0x2f, 0x6e, 0xcf, 0x2c, 0x60, 0x4d, 0xa1, 0xb4, 0xe8, 0xed, 0x90, 0x69, 0xaa, 0xd7, - 0xaa, 0x94, 0x0f, 0xdb, 0xb9, 0xcc, 0x1d, 0x8c, 0xcf, 0xcd, 0x1b, 0x53, 0xa3, 0xfb, 0x6a, 0xb3, - 0x51, 0x92, 0x05, 0x1f, 0x59, 0x19, 0x6c, 0xaa, 0xd7, 0x88, 0x88, 0xc8, 0x82, 0x51, 0x02, 0xd5, - 0x76, 0x55, 0xa3, 0x8e, 0x59, 0x27, 0xb4, 0x04, 0x5a, 0xbe, 0x78, 0xe0, 0x4e, 0x8e, 0xf9, 0x9d, - 0x04, 0xd8, 0xc9, 0xca, 0x70, 0x53, 0xbd, 0x36, 0x4f, 0x01, 0xa4, 0xc7, 0x52, 0xe6, 0xa3, 0x9f, - 0x9c, 0x3a, 0x42, 0x5f, 0x2e, 0x7c, 0x43, 0x02, 0xf0, 0x2d, 0x86, 0xde, 0x0e, 0x79, 0xcd, 0x7b, - 0xa2, 0xb4, 0x0e, 0x1f, 0xc3, 0xfb, 0xbb, 0x8d, 0x45, 0xc4, 0xde, 0x6c, 0x6d, 0xfe, 0xfa, 0x8d, - 0x29, 0x49, 0x19, 0xd5, 0x22, 0x43, 0xf1, 0x36, 0x18, 0x6a, 0x59, 0x35, 0xd5, 0xc5, 0x55, 0xba, - 0x8f, 0x4b, 0xc4, 0xae, 0xf3, 0x93, 0x84, 0xd7, 0xcd, 0x1b, 0x53, 0x88, 0xa9, 0x15, 0x20, 0x96, - 0xe9, 0xea, 0x0f, 0x0c, 0x42, 0x08, 0x02, 0x3a, 0x7d, 0x55, 0x82, 0xa1, 0x85, 0xc0, 0x49, 0xaf, - 0x02, 0x0c, 0x36, 0x4d, 0x43, 0xdf, 0xe3, 0xfe, 0x98, 0x55, 0xc4, 0x23, 0x2a, 0x42, 0x86, 0x5d, - 0xba, 0x73, 0xf7, 0x45, 0x29, 0x54, 0x3c, 0x13, 0xaa, 0xab, 0x78, 0xdb, 0xd1, 0xc5, 0x68, 0x28, - 0xe2, 0x11, 0x5d, 0x80, 0xbc, 0x83, 0xb5, 0x96, 0xad, 0xbb, 0xfb, 0x55, 0xcd, 0x34, 0x5c, 0x55, - 0x73, 0xd9, 0xf5, 0xad, 0xf2, 0x1d, 0x37, 0x6f, 0x4c, 0x1d, 0x67, 0xb2, 0x46, 0x31, 0x64, 0x65, - 0x54, 0x80, 0xe6, 0x19, 0x84, 0xf4, 0x50, 0xc3, 0xae, 0xaa, 0x37, 0x9c, 0x02, 0x7b, 0x4f, 0x26, - 0x1e, 0x03, 0xba, 0x7c, 0x6e, 0x30, 0x58, 0xd8, 0xba, 0x00, 0x79, 0xd3, 0xc2, 0x76, 0x28, 0x11, - 0x95, 0xa2, 0x3d, 0x47, 0x31, 0x64, 0x65, 0x54, 0x80, 0x44, 0x92, 0xea, 0x92, 0x61, 0x16, 0x1b, - 0x45, 0xab, 0xb5, 0xed, 0xd7, 0xc3, 0x26, 0xda, 0x46, 0x63, 0xce, 0xd8, 0x2f, 0x3f, 0xe6, 0x73, - 0x8f, 0xd2, 0xc9, 0x5f, 0xfb, 0xc2, 0xc3, 0x13, 0xdc, 0x35, 0xfc, 0xfa, 0xd4, 0x25, 0xbc, 0x4f, - 0x86, 0x9f, 0xa3, 0xae, 0x53, 0x4c, 0x92, 0x76, 0xbe, 0xa8, 0xea, 0x0d, 0x71, 0x0d, 0x59, 0xe1, - 0x4f, 0xa8, 0x04, 0x03, 0x8e, 0xab, 0xba, 0x2d, 0x87, 0x7f, 0x1c, 0x4c, 0xee, 0xe6, 0x6a, 0x65, - 0xd3, 0xa8, 0x6d, 0x50, 0x4c, 0x85, 0x53, 0xa0, 0x0b, 0x30, 0xe0, 0x9a, 0x7b, 0xd8, 0xe0, 0x26, - 0x3c, 0xd0, 0xfc, 0xa6, 0xaf, 0xed, 0x18, 0x35, 0xb1, 0x48, 0x0d, 0x37, 0x70, 0x9d, 0xa5, 0x55, - 0xbb, 0x2a, 0xd9, 0x7d, 0xd0, 0x6f, 0x84, 0x95, 0x97, 0x0e, 0x3c, 0x09, 0xb9, 0xa5, 0xa2, 0xfc, - 0x64, 0x65, 0xd4, 0x03, 0x6d, 0x50, 0x08, 0xba, 0x14, 0x3a, 0x92, 0xc8, 0x3f, 0xa4, 0x77, 0x77, - 0x37, 0xf5, 0x03, 0x3e, 0x2d, 0xea, 0x13, 0xc1, 0x03, 0x8d, 0x17, 0x20, 0xdf, 0x32, 0xb6, 0x4d, - 0x83, 0xde, 0x15, 0xe4, 0xf9, 0x3d, 0xd9, 0xdf, 0x25, 0x83, 0xce, 0x11, 0xc5, 0x90, 0x95, 0x51, - 0x0f, 0x74, 0x91, 0xed, 0x02, 0x6a, 0x30, 0xe2, 0x63, 0xd1, 0x89, 0x9a, 0x8d, 0x9d, 0xa8, 0x77, - 0xf1, 0x89, 0x7a, 0x34, 0xda, 0x8b, 0x3f, 0x57, 0x87, 0x3d, 0x20, 0x21, 0x43, 0x17, 0x01, 0xfc, - 0xf0, 0x40, 0xeb, 0x14, 0x43, 0xdd, 0x07, 0xde, 0x8f, 0x31, 0x62, 0xbf, 0xe7, 0xd3, 0xa2, 0x77, - 0xc2, 0x78, 0x53, 0x37, 0xaa, 0x0e, 0x6e, 0xec, 0x54, 0xb9, 0x81, 0x09, 0x4b, 0xfa, 0xa9, 0x97, - 0xf2, 0xf2, 0xc1, 0xfc, 0xe1, 0xe6, 0x8d, 0xa9, 0x22, 0x0f, 0xa1, 0xed, 0x2c, 0x65, 0x65, 0xac, - 0xa9, 0x1b, 0x1b, 0xb8, 0xb1, 0xb3, 0xe0, 0xc1, 0x4a, 0xb9, 0xf7, 0x7f, 0x72, 0xea, 0x08, 0x9f, - 0xae, 0x47, 0xe4, 0x73, 0xb4, 0x76, 0xce, 0xa7, 0x19, 0x76, 0xc8, 0x9e, 0x44, 0x15, 0x0f, 0xb4, - 0xa2, 0x91, 0x55, 0x7c, 0x00, 0x9b, 0xe6, 0xaf, 0xfc, 0x87, 0x69, 0x49, 0xfe, 0x9c, 0x04, 0x03, - 0x0b, 0x97, 0xd7, 0x55, 0xdd, 0x46, 0x4b, 0x30, 0xe6, 0x7b, 0x4e, 0x78, 0x92, 0x9f, 0xbc, 0x79, - 0x63, 0xaa, 0x10, 0x75, 0x2e, 0x6f, 0x96, 0xfb, 0x0e, 0x2c, 0xa6, 0xf9, 0x52, 0xb7, 0x8d, 0x6b, - 0x88, 0x55, 0x1b, 0x8a, 0xdc, 0xbe, 0xad, 0x8d, 0xa8, 0x59, 0x81, 0x41, 0x26, 0xad, 0x83, 0x4a, - 0x90, 0xb6, 0xc8, 0x0f, 0xfe, 0x62, 0x60, 0xb2, 0xab, 0xf3, 0x52, 0x7c, 0xaf, 0x90, 0x49, 0x48, - 0xe4, 0x0f, 0x27, 0x00, 0x16, 0x2e, 0x5f, 0xde, 0xb4, 0x75, 0xab, 0x81, 0xdd, 0x5b, 0xa9, 0xf9, - 0x26, 0x1c, 0x0d, 0xec, 0x92, 0x6c, 0x2d, 0xa2, 0xfd, 0xf4, 0xcd, 0x1b, 0x53, 0x27, 0xa3, 0xda, - 0x07, 0xd0, 0x64, 0x65, 0xdc, 0xdf, 0x2f, 0xd9, 0x5a, 0x47, 0xae, 0x35, 0xc7, 0xf5, 0xb8, 0x26, - 0xbb, 0x73, 0x0d, 0xa0, 0x05, 0xb9, 0x2e, 0x38, 0x6e, 0x67, 0xd3, 0x6e, 0xc0, 0x90, 0x6f, 0x12, - 0x07, 0x2d, 0x40, 0xc6, 0xe5, 0xbf, 0xb9, 0x85, 0xe5, 0xee, 0x16, 0x16, 0x64, 0xdc, 0xca, 0x1e, - 0xa5, 0xfc, 0x67, 0x12, 0x80, 0xef, 0xb3, 0x3f, 0x9e, 0x2e, 0x46, 0x42, 0x39, 0x0f, 0xbc, 0xc9, - 0x43, 0xa5, 0x6a, 0x9c, 0x3a, 0x62, 0xcf, 0x9f, 0x4e, 0xc0, 0xf8, 0x96, 0x88, 0x3c, 0x3f, 0xf6, - 0x36, 0x58, 0x87, 0x41, 0x6c, 0xb8, 0xb6, 0x4e, 0x8d, 0x40, 0x46, 0xfb, 0x91, 0x6e, 0xa3, 0xdd, - 0x41, 0x27, 0xfa, 0xb1, 0x1b, 0x51, 0x74, 0xe7, 0x6c, 0x22, 0xd6, 0xf8, 0x60, 0x12, 0x0a, 0xdd, - 0x28, 0xd1, 0x3c, 0x8c, 0x6a, 0x36, 0xa6, 0x80, 0x6a, 0xb0, 0xf2, 0x57, 0x2e, 0xfa, 0x99, 0x65, - 0x04, 0x41, 0x56, 0x46, 0x04, 0x84, 0xaf, 0x1e, 0x75, 0x20, 0x69, 0x1f, 0x71, 0x3b, 0x82, 0xd5, - 0x67, 0x9e, 0x27, 0xf3, 0xe5, 0x43, 0x74, 0x12, 0x66, 0xc0, 0xd6, 0x8f, 0x11, 0x1f, 0x4a, 0x17, - 0x90, 0x97, 0x60, 0x54, 0x37, 0x74, 0x57, 0x57, 0x1b, 0xd5, 0x6d, 0xb5, 0xa1, 0x1a, 0xda, 0x61, - 0xb2, 0x66, 0x16, 0xf2, 0x79, 0xb7, 0x11, 0x76, 0xb2, 0x32, 0xc2, 0x21, 0x65, 0x06, 0x40, 0x17, - 0x61, 0x50, 0x74, 0x95, 0x3a, 0x54, 0xb6, 0x21, 0xc8, 0x03, 0x09, 0xde, 0xcf, 0x24, 0x61, 0x4c, - 0xc1, 0xb5, 0xff, 0x3f, 0x14, 0x07, 0x1b, 0x8a, 0x15, 0x00, 0x36, 0xdd, 0x49, 0x80, 0x3d, 0xc4, - 0x68, 0x90, 0x80, 0x91, 0x65, 0x1c, 0x16, 0x1c, 0x37, 0x30, 0x1e, 0x37, 0x12, 0x90, 0x0b, 0x8e, - 0xc7, 0x5f, 0xd0, 0x55, 0x09, 0x2d, 0xf9, 0x91, 0x28, 0xc5, 0x3f, 0x11, 0xda, 0x25, 0x12, 0xb5, - 0x79, 0x6f, 0xef, 0x10, 0xf4, 0x3f, 0x12, 0x30, 0xb0, 0xae, 0xda, 0x6a, 0xd3, 0x41, 0x5a, 0x5b, - 0xa6, 0x29, 0xca, 0x8f, 0x6d, 0x1f, 0x82, 0xe6, 0xd5, 0x8e, 0x98, 0x44, 0xf3, 0xa3, 0x1d, 0x12, - 0xcd, 0x9f, 0x80, 0x11, 0xb2, 0x1d, 0x0e, 0x1c, 0x61, 0x20, 0xd6, 0x1e, 0x2e, 0x9f, 0xf0, 0xb9, - 0x84, 0xdb, 0xd9, 0x6e, 0xf9, 0x72, 0xf0, 0x0c, 0xc3, 0x10, 0xc1, 0xf0, 0x03, 0x33, 0x21, 0x3f, - 0xe6, 0x6f, 0x4b, 0x03, 0x8d, 0xb2, 0x02, 0x4d, 0xf5, 0x5a, 0x85, 0x3d, 0xa0, 0x65, 0x40, 0xbb, - 0x5e, 0x65, 0xa4, 0xea, 0x9b, 0x93, 0xd0, 0xdf, 0x79, 0xf3, 0xc6, 0xd4, 0x09, 0x46, 0xdf, 0x8e, - 0x23, 0x2b, 0x63, 0x3e, 0x50, 0x70, 0x7b, 0x1c, 0x80, 0xe8, 0x55, 0x65, 0xa7, 0x09, 0xd9, 0x76, - 0xe7, 0xe8, 0xcd, 0x1b, 0x53, 0x63, 0x8c, 0x8b, 0xdf, 0x26, 0x2b, 0x59, 0xf2, 0xb0, 0x40, 0x7e, - 0x07, 0x3c, 0xfb, 0xd3, 0x12, 0x20, 0x3f, 0xe4, 0x2b, 0xd8, 0xb1, 0xc8, 0xfe, 0x8c, 0x24, 0xe2, - 0x81, 0xac, 0x59, 0xea, 0x9d, 0x88, 0xfb, 0xf4, 0x22, 0x11, 0x0f, 0xcc, 0x94, 0xa7, 0xfc, 0xf0, - 0x98, 0xe0, 0xe3, 0xd8, 0xe1, 0xe8, 0xe5, 0xcc, 0xbc, 0xa9, 0x0b, 0xea, 0xb6, 0x78, 0x78, 0x44, - 0xfe, 0x57, 0x12, 0x9c, 0x68, 0xf3, 0x28, 0x4f, 0xd8, 0xbf, 0x04, 0xc8, 0x0e, 0x34, 0xf2, 0xef, - 0xbd, 0x31, 0xa1, 0x0f, 0xec, 0xa0, 0x63, 0x76, 0x5b, 0xdc, 0xbd, 0x75, 0x11, 0x9e, 0x9d, 0xdd, - 0xfc, 0xa7, 0x12, 0x4c, 0x04, 0xbb, 0xf7, 0x14, 0x59, 0x85, 0x5c, 0xb0, 0x77, 0xae, 0xc2, 0x3d, - 0xfd, 0xa8, 0xc0, 0xa5, 0x0f, 0xd1, 0xa3, 0xe7, 0xfc, 0xe9, 0xca, 0x6a, 0x67, 0x8f, 0xf6, 0x6d, - 0x0d, 0x21, 0x53, 0x74, 0xda, 0xa6, 0xe8, 0x78, 0xfc, 0x1f, 0x09, 0x52, 0xeb, 0xa6, 0xd9, 0x40, - 0x26, 0x8c, 0x19, 0xa6, 0x5b, 0x25, 0x9e, 0x85, 0x6b, 0x55, 0xbe, 0xe9, 0x66, 0x71, 0x70, 0xfe, - 0x60, 0x46, 0xfa, 0xf6, 0x8d, 0xa9, 0x76, 0x56, 0xca, 0xa8, 0x61, 0xba, 0x65, 0x0a, 0xd9, 0x64, - 0x5b, 0xf2, 0x77, 0xc2, 0x70, 0xb8, 0x33, 0x16, 0x25, 0x9f, 0x3f, 0x70, 0x67, 0x61, 0x36, 0x37, - 0x6f, 0x4c, 0x4d, 0xf8, 0x33, 0xc6, 0x03, 0xcb, 0x4a, 0x6e, 0x3b, 0xd0, 0x3b, 0x3b, 0xde, 0xf5, - 0xdd, 0x4f, 0x4e, 0x49, 0xa7, 0xbf, 0x28, 0x01, 0xf8, 0x95, 0x07, 0xf4, 0x10, 0x1c, 0x2f, 0xaf, - 0xad, 0x2e, 0x54, 0x37, 0x36, 0xe7, 0x36, 0xb7, 0x36, 0xaa, 0x5b, 0xab, 0x1b, 0xeb, 0x95, 0xf9, - 0xa5, 0x0b, 0x4b, 0x95, 0x05, 0xbf, 0x3c, 0xee, 0x58, 0x58, 0xd3, 0x77, 0x74, 0x5c, 0x43, 0xf7, - 0xc1, 0x44, 0x18, 0x9b, 0x3c, 0x55, 0x16, 0xf2, 0x52, 0x31, 0xf7, 0xea, 0xf5, 0xe9, 0x0c, 0xcb, - 0xc5, 0x70, 0x0d, 0x9d, 0x82, 0xa3, 0xed, 0x78, 0x4b, 0xab, 0x8b, 0xf9, 0x44, 0x71, 0xf8, 0xd5, - 0xeb, 0xd3, 0x59, 0x2f, 0x69, 0x43, 0x32, 0xa0, 0x20, 0x26, 0xe7, 0x97, 0x2c, 0xc2, 0xab, 0xd7, - 0xa7, 0x07, 0x98, 0x01, 0x8b, 0xa9, 0xf7, 0x7f, 0x7a, 0xf2, 0x48, 0xf9, 0x42, 0xd7, 0x02, 0xf8, - 0x43, 0x3d, 0x6d, 0x77, 0xcd, 0x2b, 0x6a, 0x87, 0xab, 0xde, 0xaf, 0x1e, 0x87, 0xa9, 0x2e, 0x55, - 0x6f, 0xf7, 0x5a, 0x4c, 0xc1, 0xbb, 0x47, 0x69, 0x3b, 0xb6, 0x74, 0xdd, 0xa5, 0x58, 0x7e, 0xf8, - 0x82, 0x76, 0x5f, 0xb5, 0x7b, 0xf9, 0x5f, 0xa7, 0x00, 0xad, 0x38, 0xf5, 0x79, 0x92, 0x54, 0x05, - 0x8e, 0x68, 0x45, 0x6a, 0x36, 0xd2, 0x0f, 0x54, 0xb3, 0x59, 0x09, 0x55, 0x41, 0x12, 0x07, 0xab, - 0xb4, 0xf6, 0x5d, 0x0a, 0x49, 0xfe, 0x50, 0x4a, 0x21, 0x9d, 0x33, 0xa5, 0xd4, 0xad, 0xdb, 0x52, - 0xa5, 0x0f, 0xbb, 0xad, 0xe4, 0x15, 0xce, 0x81, 0x1e, 0x15, 0xce, 0x42, 0xd7, 0x32, 0x26, 0xa7, - 0x46, 0x67, 0xc5, 0x95, 0x9c, 0xc1, 0xfe, 0xd6, 0x36, 0x7e, 0x67, 0x27, 0xf3, 0x7e, 0xb1, 0xb2, - 0x9d, 0x84, 0x62, 0xbb, 0x3b, 0x89, 0xe0, 0x2b, 0x7f, 0x24, 0x09, 0xf9, 0x15, 0xa7, 0x5e, 0xa9, - 0xe9, 0xee, 0x6d, 0xf2, 0xb5, 0x67, 0xba, 0x6f, 0x53, 0xd1, 0xcd, 0x1b, 0x53, 0x23, 0xcc, 0xa6, - 0x3d, 0x2c, 0xd9, 0x84, 0xd1, 0xc8, 0xcb, 0x01, 0xee, 0x59, 0x0b, 0x87, 0x79, 0x47, 0x11, 0x61, - 0x25, 0xd3, 0x5d, 0x45, 0xc0, 0xbf, 0xd1, 0xb5, 0xce, 0xce, 0xcc, 0x1c, 0xea, 0xe2, 0xed, 0xac, - 0xe9, 0xf9, 0x63, 0x56, 0x84, 0x42, 0x74, 0x50, 0xbc, 0x11, 0xfb, 0x43, 0x09, 0x86, 0x56, 0x1c, - 0xb1, 0x8b, 0xc6, 0x3f, 0xa6, 0x15, 0x85, 0x27, 0xbc, 0x8b, 0x26, 0xc9, 0xfe, 0xfc, 0x56, 0x5c, - 0x3e, 0xf1, 0x8d, 0x70, 0x14, 0xc6, 0x03, 0x7a, 0x7a, 0xfa, 0xff, 0x76, 0x82, 0xc6, 0xc7, 0x32, - 0xae, 0xeb, 0x86, 0x97, 0x54, 0xe0, 0xbf, 0xa8, 0xfb, 0x25, 0xdf, 0xce, 0xa9, 0xc3, 0xda, 0x79, - 0x8f, 0x06, 0x88, 0x88, 0x3d, 0xbd, 0x8c, 0x71, 0xa5, 0x7d, 0x37, 0x2f, 0x1d, 0xe0, 0xa0, 0x4c, - 0x64, 0xcf, 0x2e, 0xbf, 0x21, 0xc1, 0xf0, 0x8a, 0x53, 0xdf, 0x32, 0x6a, 0xff, 0xcf, 0xfb, 0xef, - 0x0e, 0x1c, 0x0d, 0x69, 0x7a, 0x9b, 0x4c, 0x7a, 0xe6, 0xb5, 0x14, 0x24, 0x57, 0x9c, 0x3a, 0x7a, - 0x09, 0x46, 0xa3, 0x49, 0xc3, 0xe9, 0x6e, 0x31, 0xbb, 0x7d, 0x45, 0x28, 0x9e, 0xe9, 0x1f, 0xd7, - 0xd3, 0x64, 0x0f, 0x86, 0xc3, 0x2b, 0xc7, 0xa9, 0x1e, 0x4c, 0x42, 0x98, 0xc5, 0x47, 0xfa, 0xc5, - 0xf4, 0x3a, 0x7b, 0x3b, 0x64, 0xbc, 0xa0, 0x77, 0x77, 0x0f, 0x6a, 0x81, 0x54, 0x7c, 0xb0, 0x0f, - 0x24, 0x8f, 0xfb, 0x4b, 0x30, 0x1a, 0x0d, 0x29, 0xbd, 0xac, 0x17, 0xc1, 0xed, 0x69, 0xbd, 0x6e, - 0x53, 0x6b, 0x1b, 0x20, 0x30, 0x0f, 0xee, 0xed, 0xc1, 0xc1, 0x47, 0x2b, 0x3e, 0xdc, 0x17, 0x9a, - 0xb7, 0xb9, 0xba, 0xd5, 0xc9, 0xf8, 0xbf, 0x48, 0xc0, 0xe9, 0x60, 0x9a, 0xfb, 0x52, 0x0b, 0xdb, - 0xfb, 0x5e, 0x26, 0x6b, 0xa9, 0x75, 0xdd, 0x08, 0xde, 0xbe, 0x3b, 0x11, 0x9c, 0x35, 0x14, 0x57, - 0xc8, 0x2b, 0x1b, 0x30, 0xb4, 0xae, 0xd6, 0xb1, 0x82, 0x5f, 0x6a, 0x61, 0xc7, 0xed, 0x70, 0xfb, - 0xeb, 0x18, 0x0c, 0x98, 0x3b, 0x3b, 0xe2, 0xac, 0x59, 0x4a, 0xe1, 0x4f, 0x68, 0x02, 0xd2, 0x0d, - 0xbd, 0xa9, 0xb3, 0x99, 0x99, 0x52, 0xd8, 0x03, 0x9a, 0x82, 0x21, 0x8d, 0x4c, 0xc0, 0x2a, 0x3b, - 0x37, 0x9f, 0x12, 0x5f, 0x66, 0x6a, 0x19, 0xee, 0x26, 0x81, 0xc8, 0xcf, 0x40, 0x8e, 0xf5, 0xc7, - 0xad, 0x7f, 0x02, 0x32, 0xf4, 0x9c, 0xb3, 0xdf, 0xeb, 0x20, 0x79, 0xbe, 0xc4, 0x6e, 0x8a, 0x31, - 0x2e, 0xac, 0x63, 0xf6, 0x50, 0x2e, 0x77, 0x35, 0xe5, 0xa9, 0xf8, 0x8c, 0x80, 0x19, 0xca, 0x33, - 0xe3, 0x6f, 0xa6, 0xe1, 0x28, 0xdf, 0x7f, 0xa8, 0x96, 0x3e, 0xbb, 0xeb, 0xba, 0xe2, 0x36, 0x33, - 0xf0, 0x10, 0xa0, 0x5a, 0xba, 0xbc, 0x0f, 0xa9, 0x8b, 0xae, 0x6b, 0xa1, 0xd3, 0x90, 0xb6, 0x5b, - 0x0d, 0x2c, 0x5e, 0xc5, 0x78, 0xa9, 0xa4, 0x6a, 0xe9, 0x33, 0x04, 0x41, 0x69, 0x35, 0xb0, 0xc2, - 0x50, 0x50, 0x05, 0xa6, 0x76, 0x5a, 0x8d, 0xc6, 0x7e, 0xb5, 0x86, 0xe9, 0x3f, 0xd5, 0xf3, 0xfe, - 0x2d, 0x0d, 0xbe, 0x66, 0xa9, 0x86, 0x97, 0xef, 0x67, 0x94, 0x93, 0x14, 0x6d, 0x81, 0x62, 0x89, - 0x7f, 0x49, 0x53, 0x11, 0x38, 0xf2, 0xef, 0x25, 0x20, 0x23, 0x58, 0xd3, 0xab, 0x5b, 0xb8, 0x81, - 0x35, 0xd7, 0x14, 0x47, 0x19, 0xbc, 0x67, 0x84, 0x20, 0x59, 0xe7, 0x43, 0x94, 0xbd, 0x78, 0x44, - 0x21, 0x0f, 0x04, 0xe6, 0x5d, 0xa8, 0x23, 0x30, 0xab, 0x45, 0x46, 0x2d, 0x65, 0x99, 0xa2, 0x66, - 0x7a, 0xf1, 0x88, 0x42, 0x9f, 0x50, 0x01, 0x06, 0x88, 0xcb, 0xba, 0xec, 0x8b, 0xc1, 0x04, 0xce, - 0x9f, 0xd1, 0x31, 0x48, 0x5b, 0xaa, 0xab, 0xb1, 0xb3, 0xee, 0xa4, 0x81, 0x3d, 0x92, 0xc0, 0xcc, - 0xbe, 0xd4, 0x10, 0xfd, 0x8f, 0x55, 0xc4, 0x18, 0xec, 0x93, 0x98, 0x44, 0xee, 0x75, 0xd5, 0x75, - 0xb1, 0x6d, 0x10, 0x86, 0x0c, 0x1d, 0x21, 0x48, 0x6d, 0x9b, 0xb5, 0x7d, 0xfe, 0x5f, 0xb4, 0xe8, - 0x6f, 0xfe, 0x6f, 0x7b, 0xa8, 0x3f, 0x54, 0x69, 0x23, 0xfb, 0xe7, 0x81, 0x39, 0x01, 0x2c, 0x13, - 0xa4, 0x0a, 0x8c, 0xab, 0xb5, 0x9a, 0xce, 0xfe, 0xa1, 0x55, 0x75, 0x5b, 0xa7, 0xfb, 0x61, 0x87, - 0xfe, 0x6b, 0xc8, 0x6e, 0x63, 0x81, 0x7c, 0x82, 0x32, 0xc7, 0x2f, 0x67, 0x61, 0xd0, 0x62, 0x42, - 0xc9, 0xe7, 0x61, 0xac, 0x4d, 0x52, 0x22, 0xdf, 0x9e, 0x6e, 0xd4, 0xc4, 0x2d, 0x43, 0xf2, 0x9b, - 0xc0, 0xe8, 0x67, 0x6d, 0xd9, 0x21, 0x11, 0xfa, 0xbb, 0xfc, 0xee, 0xee, 0x77, 0x50, 0x47, 0x02, - 0x77, 0x50, 0x55, 0x4b, 0x2f, 0x67, 0x29, 0x7f, 0x7e, 0xf5, 0x74, 0x8e, 0x37, 0xb0, 0x6b, 0xa7, - 0x33, 0xa6, 0x5d, 0x9f, 0xad, 0x63, 0x43, 0xec, 0x6f, 0x49, 0x93, 0x6a, 0xe9, 0x0e, 0x75, 0x47, - 0xff, 0x33, 0xbb, 0xce, 0xf9, 0xc0, 0x6f, 0x7a, 0x23, 0x35, 0xb5, 0x38, 0xb7, 0xbe, 0xe4, 0xf9, - 0xf1, 0x97, 0x13, 0x70, 0x32, 0xe0, 0xc7, 0x01, 0xe4, 0x76, 0x77, 0x2e, 0x76, 0xf6, 0xf8, 0x3e, - 0x2e, 0xa9, 0x5f, 0x82, 0x14, 0xc1, 0x47, 0x31, 0xff, 0x54, 0xa7, 0xf0, 0xab, 0x5f, 0xfb, 0x27, - 0x72, 0x78, 0xb3, 0x15, 0x1a, 0x15, 0xca, 0xa4, 0xfc, 0xbe, 0xfe, 0xed, 0x97, 0xf7, 0xbf, 0x30, - 0xec, 0xdc, 0x3a, 0x33, 0x46, 0x6d, 0xf8, 0xad, 0xb3, 0x20, 0x77, 0xa9, 0x0c, 0xb0, 0x88, 0xd9, - 0xbb, 0xc4, 0x71, 0x80, 0x70, 0xdc, 0xed, 0x62, 0x5e, 0xaf, 0x11, 0xec, 0xb3, 0x6a, 0x71, 0x0d, - 0x8e, 0x3d, 0x47, 0xfa, 0xf6, 0xeb, 0xd7, 0x22, 0xb0, 0x1f, 0xf3, 0x8e, 0xd9, 0x48, 0xfc, 0x3f, - 0x73, 0x8a, 0x23, 0x34, 0xe0, 0xcb, 0xc7, 0x6b, 0x10, 0xf7, 0xcd, 0x74, 0x5d, 0x2f, 0x66, 0x02, - 0x8b, 0x85, 0x12, 0xa0, 0x94, 0x7f, 0x59, 0x82, 0xe3, 0x6d, 0x5d, 0xf3, 0x18, 0xbf, 0xd8, 0xe1, - 0x0e, 0x61, 0xdf, 0xa7, 0xfb, 0x82, 0xf7, 0x09, 0x17, 0x3b, 0x08, 0x7b, 0x7f, 0xac, 0xb0, 0x4c, - 0x8a, 0x90, 0xb4, 0x4f, 0xc3, 0xd1, 0xb0, 0xb0, 0xc2, 0x4c, 0xf7, 0xc2, 0x48, 0x38, 0x31, 0xe5, - 0xe6, 0x1a, 0x0e, 0xa5, 0xa6, 0x72, 0x35, 0x6a, 0x67, 0x4f, 0xd7, 0x0a, 0x64, 0x3d, 0x54, 0x9e, - 0x4f, 0xf6, 0xad, 0xaa, 0x4f, 0x29, 0x7f, 0x58, 0x82, 0xe9, 0x70, 0x0f, 0xfe, 0x0e, 0xd5, 0x39, - 0x98, 0xb0, 0xb7, 0x6c, 0x88, 0xdf, 0x90, 0xe0, 0xae, 0x1e, 0x32, 0x71, 0x03, 0xbc, 0x0c, 0x13, - 0x81, 0x12, 0xbd, 0x08, 0xe1, 0x62, 0xd8, 0x4f, 0xc7, 0xbf, 0x5b, 0xf0, 0x92, 0xa6, 0x3b, 0x88, - 0x51, 0x3e, 0xfb, 0xfb, 0x53, 0xe3, 0xed, 0x6d, 0x8e, 0x32, 0xde, 0x5e, 0x56, 0xbf, 0x85, 0xfe, - 0xf1, 0x9a, 0x04, 0x0f, 0x84, 0x55, 0xed, 0xf0, 0xde, 0xfc, 0x47, 0x35, 0x0e, 0xff, 0x5e, 0x82, - 0xd3, 0xfd, 0x08, 0xe7, 0xe5, 0xb7, 0xe3, 0xfe, 0x8b, 0xb2, 0xe8, 0x78, 0x3c, 0x78, 0x80, 0x13, - 0x06, 0xdc, 0x4b, 0x91, 0xc7, 0xed, 0x36, 0x18, 0xde, 0xe2, 0x13, 0x2b, 0x38, 0xe4, 0x9e, 0x91, - 0xc3, 0xbb, 0x4f, 0x61, 0xe4, 0xd0, 0xfe, 0xb3, 0xc3, 0x58, 0x24, 0x3a, 0x8c, 0x45, 0x60, 0x7f, - 0x78, 0x85, 0xc7, 0xad, 0x0e, 0x2f, 0xc7, 0xde, 0x06, 0xe3, 0x1d, 0x5c, 0x99, 0xcf, 0xea, 0x03, - 0x78, 0xb2, 0x82, 0xda, 0x9d, 0x55, 0xde, 0x87, 0x29, 0xda, 0x6f, 0x07, 0x43, 0xdf, 0x6e, 0x95, - 0x9b, 0x3c, 0xb6, 0x74, 0xec, 0x9a, 0xeb, 0xbe, 0x04, 0x03, 0x6c, 0x9c, 0xb9, 0xba, 0x87, 0x70, - 0x14, 0xce, 0x40, 0xfe, 0x79, 0x11, 0xcb, 0x16, 0x84, 0xd8, 0x9d, 0xe7, 0x50, 0x3f, 0xba, 0xde, - 0xa2, 0x39, 0x14, 0x30, 0xc6, 0x37, 0x44, 0x54, 0xeb, 0x2c, 0x1d, 0x37, 0x87, 0x76, 0xcb, 0xa2, - 0x1a, 0xb3, 0xcd, 0xed, 0x0d, 0x5f, 0xbf, 0x28, 0xc2, 0x97, 0xa7, 0x53, 0x4c, 0xf8, 0xfa, 0xd1, - 0x98, 0xde, 0x0b, 0x64, 0x31, 0x62, 0xfe, 0x79, 0x0c, 0x64, 0xdf, 0x95, 0xe0, 0x04, 0xd5, 0x2d, - 0xf8, 0xc6, 0xf5, 0xa0, 0x26, 0x7f, 0x08, 0x90, 0x63, 0x6b, 0xd5, 0x8e, 0xb3, 0x3b, 0xef, 0xd8, - 0xda, 0xe5, 0xd0, 0xfa, 0xf2, 0x10, 0xa0, 0x9a, 0xe3, 0x46, 0xb1, 0xd9, 0xf1, 0xf5, 0x7c, 0xcd, - 0x71, 0x2f, 0xf7, 0x58, 0x8d, 0x52, 0xb7, 0x60, 0x38, 0xbf, 0x2e, 0x41, 0xb1, 0x93, 0xca, 0x7c, - 0xf8, 0x74, 0x38, 0x16, 0x7a, 0x7b, 0x1f, 0x1d, 0xc1, 0x87, 0xfa, 0x79, 0x67, 0x1d, 0x99, 0x46, - 0x47, 0x6d, 0x7c, 0xbb, 0xf3, 0x80, 0xa9, 0xb0, 0x87, 0xb6, 0x67, 0xd6, 0x3f, 0xb2, 0xe9, 0xf3, - 0x85, 0xb6, 0xb8, 0xfa, 0xe7, 0x22, 0xf7, 0xbe, 0x06, 0x93, 0x5d, 0xa4, 0xbe, 0xdd, 0xeb, 0xde, - 0x6e, 0xd7, 0xc1, 0xbc, 0xd5, 0xe9, 0xfb, 0xe3, 0x7c, 0x26, 0x84, 0xaf, 0x46, 0x05, 0xf6, 0x62, - 0x9d, 0xee, 0x56, 0xcb, 0x6f, 0x81, 0x3b, 0x3a, 0x52, 0x71, 0xd9, 0x4a, 0x90, 0xda, 0xd5, 0x1d, - 0x97, 0x8b, 0x75, 0x5f, 0x37, 0xb1, 0x22, 0xd4, 0x94, 0x46, 0x46, 0x90, 0xa7, 0xac, 0xd7, 0x4d, - 0xb3, 0xc1, 0xc5, 0x90, 0x2f, 0xc1, 0x58, 0x00, 0xc6, 0x3b, 0x39, 0x07, 0x29, 0xcb, 0xe4, 0xdf, - 0x0d, 0x1a, 0x3a, 0x73, 0xb2, 0x5b, 0x27, 0x84, 0x86, 0xab, 0x4d, 0xf1, 0xe5, 0x09, 0x40, 0x8c, - 0x19, 0x3d, 0xdc, 0x25, 0xba, 0xd8, 0x80, 0xf1, 0x10, 0x94, 0x77, 0xf2, 0x26, 0x18, 0xb0, 0x28, - 0xc4, 0xbb, 0x04, 0xdb, 0xad, 0x1b, 0x8a, 0xe5, 0x7d, 0x89, 0x85, 0x3e, 0x9d, 0xf9, 0xf6, 0x51, - 0x48, 0x53, 0xae, 0xe8, 0x63, 0x12, 0x40, 0xe0, 0xa8, 0xd6, 0x4c, 0x37, 0x36, 0x9d, 0xf7, 0xc4, - 0xc5, 0xd9, 0xbe, 0xf1, 0x79, 0xce, 0x76, 0xfa, 0xdd, 0xff, 0xe6, 0x5b, 0x1f, 0x49, 0xdc, 0x83, - 0xe4, 0xd9, 0x2e, 0xbb, 0xf1, 0xc0, 0x7c, 0xf9, 0x4c, 0xe8, 0xa3, 0x34, 0x0f, 0xf7, 0xd7, 0x95, - 0x90, 0x6c, 0xa6, 0x5f, 0x74, 0x2e, 0xd8, 0x79, 0x2a, 0xd8, 0x59, 0xf4, 0x58, 0xbc, 0x60, 0xb3, - 0xef, 0x08, 0x4f, 0x9a, 0x77, 0xa1, 0xdf, 0x91, 0x60, 0xa2, 0xd3, 0x96, 0x0e, 0x3d, 0xd9, 0x9f, - 0x14, 0xed, 0x29, 0x45, 0xf1, 0xa9, 0x43, 0x50, 0x72, 0x55, 0x16, 0xa9, 0x2a, 0x73, 0xe8, 0x99, - 0x43, 0xa8, 0x32, 0x1b, 0x58, 0x77, 0xd0, 0xff, 0x92, 0xe0, 0xce, 0x9e, 0x3b, 0x24, 0x34, 0xd7, - 0x9f, 0x94, 0x3d, 0x72, 0xa7, 0x62, 0xf9, 0x07, 0x61, 0xc1, 0x35, 0x7e, 0x8e, 0x6a, 0x7c, 0x09, - 0x2d, 0x1d, 0x46, 0x63, 0x3f, 0x23, 0x0a, 0xea, 0xfe, 0x5b, 0xe1, 0x23, 0xff, 0xbd, 0xdd, 0xa9, - 0x6d, 0xe3, 0x11, 0x33, 0x31, 0xda, 0x93, 0x5a, 0xf9, 0x05, 0xaa, 0x82, 0x82, 0xd6, 0x7f, 0xc0, - 0x41, 0x9b, 0x7d, 0x47, 0x38, 0xf0, 0xbf, 0x0b, 0xfd, 0x4f, 0xa9, 0xf3, 0x09, 0xfe, 0x27, 0x7a, - 0x8a, 0xd8, 0x7d, 0x53, 0x55, 0x7c, 0xf2, 0xe0, 0x84, 0x5c, 0xc9, 0x26, 0x55, 0xb2, 0x8e, 0xf0, - 0xad, 0x56, 0xb2, 0xe3, 0x20, 0xa2, 0xaf, 0x4a, 0x30, 0xd1, 0x69, 0x4f, 0x12, 0x33, 0x2d, 0x7b, - 0x6c, 0xb2, 0x62, 0xa6, 0x65, 0xaf, 0x0d, 0x90, 0xfc, 0x26, 0xaa, 0xfc, 0x39, 0xf4, 0x78, 0x37, - 0xe5, 0x7b, 0x8e, 0x22, 0x99, 0x8b, 0x3d, 0x93, 0xfc, 0x98, 0xb9, 0xd8, 0xcf, 0x3e, 0x26, 0x66, - 0x2e, 0xf6, 0xb5, 0xc7, 0x88, 0x9f, 0x8b, 0x9e, 0x66, 0x7d, 0x0e, 0xa3, 0x83, 0xbe, 0x2c, 0xc1, - 0x70, 0x28, 0x23, 0x46, 0x8f, 0xf6, 0x14, 0xb4, 0xd3, 0x86, 0xa1, 0xfb, 0x8b, 0xcd, 0xee, 0x09, - 0xb7, 0xbc, 0x44, 0x75, 0x99, 0x47, 0x73, 0x87, 0xd1, 0xc5, 0x0e, 0x49, 0xfc, 0x75, 0x09, 0xc6, - 0x3b, 0x64, 0x99, 0x31, 0xb3, 0xb0, 0x7b, 0xd2, 0x5c, 0x7c, 0xf2, 0xe0, 0x84, 0x5c, 0xab, 0x0b, - 0x54, 0xab, 0x9f, 0x40, 0x4f, 0x1f, 0x46, 0xab, 0xc0, 0xfa, 0x7c, 0xc3, 0x3f, 0x10, 0x1d, 0xe8, - 0x07, 0x9d, 0x3b, 0xa0, 0x60, 0x42, 0xa1, 0x27, 0x0e, 0x4c, 0xc7, 0xf5, 0x79, 0x9e, 0xea, 0xf3, - 0x1c, 0x5a, 0xfb, 0xc1, 0xf4, 0x69, 0x5f, 0xd6, 0x3f, 0xdf, 0x7e, 0x35, 0xbf, 0xb7, 0x17, 0x75, - 0x4c, 0x56, 0x8b, 0x8f, 0x1d, 0x88, 0x86, 0x2b, 0xf5, 0x24, 0x55, 0xea, 0x0c, 0x7a, 0xa4, 0x9b, - 0x52, 0x81, 0x53, 0xef, 0xba, 0xb1, 0x63, 0xce, 0xbe, 0x83, 0xa5, 0xc0, 0xef, 0x42, 0x3f, 0x25, - 0x4e, 0x1c, 0x9f, 0xea, 0xd9, 0x6f, 0x20, 0x8f, 0x2d, 0x3e, 0xd0, 0x07, 0x26, 0x97, 0xeb, 0x1e, - 0x2a, 0xd7, 0x24, 0x3a, 0xd9, 0x4d, 0x2e, 0x92, 0xcb, 0xa2, 0x0f, 0x48, 0xde, 0x25, 0x85, 0xd3, - 0xbd, 0x79, 0x07, 0x93, 0xdd, 0xee, 0x07, 0x1d, 0x3a, 0xa4, 0xc0, 0xf2, 0x7d, 0x54, 0x92, 0x69, - 0x34, 0xd9, 0x55, 0x12, 0x96, 0xfa, 0xde, 0xea, 0x93, 0x03, 0x7f, 0x3c, 0xd8, 0xf5, 0xe3, 0x15, - 0x75, 0x6c, 0x60, 0x47, 0x77, 0x0e, 0xf5, 0xf1, 0x8a, 0xfe, 0x5e, 0x4f, 0xfd, 0x4e, 0x1a, 0x72, - 0x8b, 0xac, 0x97, 0x0d, 0x57, 0x75, 0x7f, 0xc0, 0x8d, 0x00, 0x72, 0xf8, 0x37, 0xd9, 0xd8, 0xa7, - 0x22, 0xfd, 0x8f, 0x1f, 0xe6, 0x0e, 0x74, 0x6d, 0x9b, 0x1d, 0x12, 0xe4, 0x37, 0xa4, 0xa3, 0xfc, - 0x64, 0xf6, 0x79, 0x37, 0x7a, 0x76, 0x81, 0x7d, 0xe4, 0xf1, 0xbd, 0x12, 0x1c, 0xa5, 0x58, 0xfe, - 0x7c, 0xa3, 0x98, 0xe2, 0xce, 0x5e, 0x57, 0x8f, 0x59, 0x56, 0x03, 0x25, 0x18, 0xf6, 0x59, 0xc6, - 0x7b, 0xf8, 0x7d, 0x96, 0x93, 0x81, 0xce, 0xa3, 0x6c, 0x65, 0x65, 0xbc, 0xd1, 0x46, 0xe9, 0x44, - 0xf6, 0xf5, 0xa9, 0xc3, 0xef, 0xeb, 0x9f, 0x85, 0xa1, 0x40, 0xa4, 0x2f, 0xa4, 0x63, 0xae, 0x99, - 0x46, 0x8b, 0x68, 0x41, 0x62, 0xf4, 0x3e, 0x09, 0x8e, 0x76, 0x5c, 0x04, 0xe9, 0xff, 0xaa, 0x3d, - 0x60, 0x91, 0x2e, 0x62, 0x9c, 0x8e, 0x7c, 0x65, 0x65, 0xa2, 0xd5, 0x29, 0x9b, 0x58, 0x87, 0xe1, - 0xd0, 0x02, 0x56, 0x10, 0xff, 0x71, 0xba, 0xff, 0x1b, 0x16, 0x61, 0x06, 0xa8, 0x08, 0x19, 0x7c, - 0xcd, 0x32, 0x6d, 0x17, 0xd7, 0xe8, 0x91, 0x87, 0x8c, 0xe2, 0x3d, 0xcb, 0xab, 0x80, 0xda, 0x07, - 0x37, 0xfa, 0x1d, 0xd2, 0xac, 0xff, 0x1d, 0xd2, 0x09, 0x48, 0x07, 0xbf, 0xd4, 0xc9, 0x1e, 0xfc, - 0x3a, 0xc5, 0xad, 0x9e, 0xf3, 0xff, 0x37, 0x00, 0x00, 0xff, 0xff, 0x4f, 0xa1, 0x5b, 0x6b, 0x6a, + 0x71, 0xd8, 0xcd, 0xee, 0x02, 0xd8, 0x6d, 0x2c, 0x80, 0xc5, 0x03, 0xee, 0x6e, 0x6f, 0x79, 0x04, + 0xc0, 0xe1, 0xd7, 0xf1, 0x48, 0x02, 0xe4, 0x91, 0x77, 0x24, 0xf7, 0x24, 0xd2, 0x58, 0x60, 0x0f, + 0x07, 0x1e, 0xbe, 0x38, 0x00, 0x8e, 0xd4, 0x87, 0xb3, 0x35, 0x98, 0x7d, 0x58, 0x0c, 0xb1, 0x3b, + 0x33, 0x9c, 0x99, 0xbd, 0x3b, 0x50, 0x52, 0x15, 0x2d, 0x29, 0x8a, 0x44, 0xc7, 0x91, 0x14, 0xb9, + 0x1c, 0x89, 0xd6, 0x29, 0x92, 0xe5, 0x44, 0x8e, 0xac, 0xc4, 0x1f, 0x52, 0x94, 0x38, 0x49, 0x55, + 0xa4, 0x24, 0x8e, 0x25, 0xa5, 0xe2, 0x92, 0x2a, 0xae, 0xc4, 0x71, 0x25, 0x67, 0x87, 0x52, 0x39, + 0x8c, 0xa2, 0xc4, 0xf2, 0x59, 0x4e, 0x9c, 0x52, 0xa5, 0x92, 0x7a, 0x5f, 0xf3, 0xb5, 0x1f, 0xb3, + 0x0b, 0xdd, 0x49, 0x72, 0x9c, 0x5f, 0xd8, 0xd7, 0xaf, 0xbb, 0x5f, 0xbf, 0x7e, 0xfd, 0xba, 0xfb, + 0x7d, 0x0d, 0xe0, 0x9f, 0x9f, 0x87, 0x99, 0x9a, 0x69, 0xd6, 0xea, 0x78, 0xce, 0xb2, 0x4d, 0xd7, + 0xdc, 0x69, 0xee, 0xce, 0x55, 0xb1, 0xa3, 0xd9, 0xba, 0xe5, 0x9a, 0xf6, 0x2c, 0x85, 0xa1, 0x31, + 0x86, 0x31, 0x2b, 0x30, 0xe4, 0x55, 0x18, 0xbf, 0xa0, 0xd7, 0xf1, 0xa2, 0x87, 0xb8, 0x89, 0x5d, + 0xf4, 0x24, 0xa4, 0x76, 0xf5, 0x3a, 0xce, 0x4b, 0x33, 0xc9, 0x53, 0xc3, 0x67, 0xee, 0x99, 0x8d, + 0x10, 0xcd, 0x86, 0x29, 0x36, 0x08, 0x58, 0xa1, 0x14, 0xf2, 0xb7, 0x52, 0x30, 0xd1, 0xa6, 0x16, + 0x21, 0x48, 0x19, 0x6a, 0x83, 0x70, 0x94, 0x4e, 0x65, 0x14, 0xfa, 0x1b, 0xe5, 0x61, 0xc8, 0x52, + 0xb5, 0x7d, 0xb5, 0x86, 0xf3, 0x09, 0x0a, 0x16, 0x45, 0x34, 0x05, 0x50, 0xc5, 0x16, 0x36, 0xaa, + 0xd8, 0xd0, 0x0e, 0xf2, 0xc9, 0x99, 0xe4, 0xa9, 0x8c, 0x12, 0x80, 0xa0, 0x07, 0x61, 0xdc, 0x6a, + 0xee, 0xd4, 0x75, 0xad, 0x12, 0x40, 0x83, 0x99, 0xe4, 0xa9, 0x01, 0x25, 0xc7, 0x2a, 0x16, 0x7d, + 0xe4, 0xfb, 0x61, 0xec, 0x2a, 0x56, 0xf7, 0x83, 0xa8, 0xc3, 0x14, 0x75, 0x94, 0x80, 0x03, 0x88, + 0x0b, 0x90, 0x6d, 0x60, 0xc7, 0x51, 0x6b, 0xb8, 0xe2, 0x1e, 0x58, 0x38, 0x9f, 0xa2, 0xbd, 0x9f, + 0x69, 0xe9, 0x7d, 0xb4, 0xe7, 0xc3, 0x9c, 0x6a, 0xeb, 0xc0, 0xc2, 0x68, 0x1e, 0x32, 0xd8, 0x68, + 0x36, 0x18, 0x87, 0x81, 0x0e, 0xfa, 0x2b, 0x1b, 0xcd, 0x46, 0x94, 0x4b, 0x9a, 0x90, 0x71, 0x16, + 0x43, 0x0e, 0xb6, 0xaf, 0xe8, 0x1a, 0xce, 0x0f, 0x52, 0x06, 0xf7, 0xb7, 0x30, 0xd8, 0x64, 0xf5, + 0x51, 0x1e, 0x82, 0x0e, 0x2d, 0x40, 0x06, 0x5f, 0x73, 0xb1, 0xe1, 0xe8, 0xa6, 0x91, 0x1f, 0xa2, + 0x4c, 0xee, 0x6d, 0x33, 0x8a, 0xb8, 0x5e, 0x8d, 0xb2, 0xf0, 0xe9, 0xd0, 0x39, 0x18, 0x32, 0x2d, + 0x57, 0x37, 0x0d, 0x27, 0x9f, 0x9e, 0x91, 0x4e, 0x0d, 0x9f, 0x39, 0xd9, 0xd6, 0x10, 0xd6, 0x19, + 0x8e, 0x22, 0x90, 0xd1, 0x32, 0xe4, 0x1c, 0xb3, 0x69, 0x6b, 0xb8, 0xa2, 0x99, 0x55, 0x5c, 0xd1, + 0x8d, 0x5d, 0x33, 0x9f, 0xa1, 0x0c, 0xa6, 0x5b, 0x3b, 0x42, 0x11, 0x17, 0xcc, 0x2a, 0x5e, 0x36, + 0x76, 0x4d, 0x65, 0xd4, 0x09, 0x95, 0xd1, 0x31, 0x18, 0x74, 0x0e, 0x0c, 0x57, 0xbd, 0x96, 0xcf, + 0x52, 0x0b, 0xe1, 0x25, 0xf9, 0x37, 0x06, 0x61, 0xac, 0x17, 0x13, 0x3b, 0x0f, 0x03, 0xbb, 0xa4, + 0x97, 0xf9, 0x44, 0x3f, 0x3a, 0x60, 0x34, 0x61, 0x25, 0x0e, 0x1e, 0x52, 0x89, 0xf3, 0x30, 0x6c, + 0x60, 0xc7, 0xc5, 0x55, 0x66, 0x11, 0xc9, 0x1e, 0x6d, 0x0a, 0x18, 0x51, 0xab, 0x49, 0xa5, 0x0e, + 0x65, 0x52, 0x2f, 0xc0, 0x98, 0x27, 0x52, 0xc5, 0x56, 0x8d, 0x9a, 0xb0, 0xcd, 0xb9, 0x38, 0x49, + 0x66, 0xcb, 0x82, 0x4e, 0x21, 0x64, 0xca, 0x28, 0x0e, 0x95, 0xd1, 0x22, 0x80, 0x69, 0x60, 0x73, + 0xb7, 0x52, 0xc5, 0x5a, 0x3d, 0x9f, 0xee, 0xa0, 0xa5, 0x75, 0x82, 0xd2, 0xa2, 0x25, 0x93, 0x41, + 0xb5, 0x3a, 0x7a, 0xca, 0x37, 0xb5, 0xa1, 0x0e, 0x96, 0xb2, 0xca, 0x26, 0x59, 0x8b, 0xb5, 0x6d, + 0xc3, 0xa8, 0x8d, 0x89, 0xdd, 0xe3, 0x2a, 0xef, 0x59, 0x86, 0x0a, 0x31, 0x1b, 0xdb, 0x33, 0x85, + 0x93, 0xb1, 0x8e, 0x8d, 0xd8, 0xc1, 0x22, 0xba, 0x1b, 0x3c, 0x40, 0x85, 0x9a, 0x15, 0x50, 0x2f, + 0x94, 0x15, 0xc0, 0x35, 0xb5, 0x81, 0x0b, 0x2f, 0xc3, 0x68, 0x58, 0x3d, 0x68, 0x12, 0x06, 0x1c, + 0x57, 0xb5, 0x5d, 0x6a, 0x85, 0x03, 0x0a, 0x2b, 0xa0, 0x1c, 0x24, 0xb1, 0x51, 0xa5, 0x5e, 0x6e, + 0x40, 0x21, 0x3f, 0xd1, 0x4f, 0xf8, 0x1d, 0x4e, 0xd2, 0x0e, 0xdf, 0xd7, 0x3a, 0xa2, 0x21, 0xce, + 0xd1, 0x7e, 0x17, 0x9e, 0x80, 0x91, 0x50, 0x07, 0x7a, 0x6d, 0x5a, 0x7e, 0x27, 0x1c, 0x6d, 0xcb, + 0x1a, 0xbd, 0x00, 0x93, 0x4d, 0x43, 0x37, 0x5c, 0x6c, 0x5b, 0x36, 0x26, 0x16, 0xcb, 0x9a, 0xca, + 0xff, 0xe7, 0xa1, 0x0e, 0x36, 0xb7, 0x1d, 0xc4, 0x66, 0x5c, 0x94, 0x89, 0x66, 0x2b, 0xf0, 0x74, + 0x26, 0xfd, 0xc6, 0x50, 0xee, 0x95, 0x57, 0x5e, 0x79, 0x25, 0x21, 0x7f, 0x79, 0x10, 0x26, 0xdb, + 0xcd, 0x99, 0xb6, 0xd3, 0xf7, 0x18, 0x0c, 0x1a, 0xcd, 0xc6, 0x0e, 0xb6, 0xa9, 0x92, 0x06, 0x14, + 0x5e, 0x42, 0xf3, 0x30, 0x50, 0x57, 0x77, 0x70, 0x3d, 0x9f, 0x9a, 0x91, 0x4e, 0x8d, 0x9e, 0x79, + 0xb0, 0xa7, 0x59, 0x39, 0xbb, 0x42, 0x48, 0x14, 0x46, 0x89, 0x9e, 0x86, 0x14, 0x77, 0xd1, 0x84, + 0xc3, 0xe9, 0xde, 0x38, 0x90, 0xb9, 0xa4, 0x50, 0x3a, 0x74, 0x07, 0x64, 0xc8, 0x5f, 0x66, 0x1b, + 0x83, 0x54, 0xe6, 0x34, 0x01, 0x10, 0xbb, 0x40, 0x05, 0x48, 0xd3, 0x69, 0x52, 0xc5, 0x22, 0xb4, + 0x79, 0x65, 0x62, 0x58, 0x55, 0xbc, 0xab, 0x36, 0xeb, 0x6e, 0xe5, 0x8a, 0x5a, 0x6f, 0x62, 0x6a, + 0xf0, 0x19, 0x25, 0xcb, 0x81, 0x97, 0x09, 0x0c, 0x4d, 0xc3, 0x30, 0x9b, 0x55, 0xba, 0x51, 0xc5, + 0xd7, 0xa8, 0xf7, 0x1c, 0x50, 0xd8, 0x44, 0x5b, 0x26, 0x10, 0xd2, 0xfc, 0x8b, 0x8e, 0x69, 0x08, + 0xd3, 0xa4, 0x4d, 0x10, 0x00, 0x6d, 0xfe, 0x89, 0xa8, 0xe3, 0xbe, 0xb3, 0x7d, 0xf7, 0x5a, 0xe6, + 0xd2, 0xfd, 0x30, 0x46, 0x31, 0x1e, 0xe3, 0x43, 0xaf, 0xd6, 0xf3, 0xe3, 0x33, 0xd2, 0xa9, 0xb4, + 0x32, 0xca, 0xc0, 0xeb, 0x1c, 0x2a, 0x7f, 0x31, 0x01, 0x29, 0xea, 0x58, 0xc6, 0x60, 0x78, 0xeb, + 0x2d, 0x1b, 0xe5, 0xca, 0xe2, 0xfa, 0x76, 0x69, 0xa5, 0x9c, 0x93, 0xd0, 0x28, 0x00, 0x05, 0x5c, + 0x58, 0x59, 0x9f, 0xdf, 0xca, 0x25, 0xbc, 0xf2, 0xf2, 0xda, 0xd6, 0xb9, 0xc7, 0x73, 0x49, 0x8f, + 0x60, 0x9b, 0x01, 0x52, 0x41, 0x84, 0xc7, 0xce, 0xe4, 0x06, 0x50, 0x0e, 0xb2, 0x8c, 0xc1, 0xf2, + 0x0b, 0xe5, 0xc5, 0x73, 0x8f, 0xe7, 0x06, 0xc3, 0x90, 0xc7, 0xce, 0xe4, 0x86, 0xd0, 0x08, 0x64, + 0x28, 0xa4, 0xb4, 0xbe, 0xbe, 0x92, 0x4b, 0x7b, 0x3c, 0x37, 0xb7, 0x94, 0xe5, 0xb5, 0xa5, 0x5c, + 0xc6, 0xe3, 0xb9, 0xa4, 0xac, 0x6f, 0x6f, 0xe4, 0xc0, 0xe3, 0xb0, 0x5a, 0xde, 0xdc, 0x9c, 0x5f, + 0x2a, 0xe7, 0x86, 0x3d, 0x8c, 0xd2, 0x5b, 0xb6, 0xca, 0x9b, 0xb9, 0x6c, 0x48, 0xac, 0xc7, 0xce, + 0xe4, 0x46, 0xbc, 0x26, 0xca, 0x6b, 0xdb, 0xab, 0xb9, 0x51, 0x34, 0x0e, 0x23, 0xac, 0x09, 0x21, + 0xc4, 0x58, 0x04, 0x74, 0xee, 0xf1, 0x5c, 0xce, 0x17, 0x84, 0x71, 0x19, 0x0f, 0x01, 0xce, 0x3d, + 0x9e, 0x43, 0xf2, 0x02, 0x0c, 0x50, 0x33, 0x44, 0x08, 0x46, 0x57, 0xe6, 0x4b, 0xe5, 0x95, 0xca, + 0xfa, 0xc6, 0xd6, 0xf2, 0xfa, 0xda, 0xfc, 0x4a, 0x4e, 0xf2, 0x61, 0x4a, 0xf9, 0xb9, 0xed, 0x65, + 0xa5, 0xbc, 0x98, 0x4b, 0x04, 0x61, 0x1b, 0xe5, 0xf9, 0xad, 0xf2, 0x62, 0x2e, 0x29, 0x6b, 0x30, + 0xd9, 0xce, 0xa1, 0xb6, 0x9d, 0x42, 0x01, 0x5b, 0x48, 0x74, 0xb0, 0x05, 0xca, 0x2b, 0x6a, 0x0b, + 0xf2, 0x37, 0x13, 0x30, 0xd1, 0x26, 0xa8, 0xb4, 0x6d, 0xe4, 0x19, 0x18, 0x60, 0xb6, 0xcc, 0xc2, + 0xec, 0x03, 0x6d, 0xa3, 0x13, 0xb5, 0xec, 0x96, 0x50, 0x4b, 0xe9, 0x82, 0xa9, 0x46, 0xb2, 0x43, + 0xaa, 0x41, 0x58, 0xb4, 0x18, 0xec, 0x4f, 0xb6, 0x38, 0x7f, 0x16, 0x1f, 0xcf, 0xf5, 0x12, 0x1f, + 0x29, 0xac, 0xbf, 0x20, 0x30, 0xd0, 0x26, 0x08, 0x9c, 0x87, 0xf1, 0x16, 0x46, 0x3d, 0x3b, 0xe3, + 0xf7, 0x48, 0x90, 0xef, 0xa4, 0x9c, 0x18, 0x97, 0x98, 0x08, 0xb9, 0xc4, 0xf3, 0x51, 0x0d, 0xde, + 0xd5, 0x79, 0x10, 0x5a, 0xc6, 0xfa, 0x33, 0x12, 0x1c, 0x6b, 0x9f, 0x52, 0xb6, 0x95, 0xe1, 0x69, + 0x18, 0x6c, 0x60, 0x77, 0xcf, 0x14, 0x69, 0xd5, 0x7d, 0x6d, 0x82, 0x35, 0xa9, 0x8e, 0x0e, 0x36, + 0xa7, 0x0a, 0x46, 0xfb, 0x64, 0xa7, 0xbc, 0x90, 0x49, 0xd3, 0x22, 0xe9, 0x07, 0x12, 0x70, 0xb4, + 0x2d, 0xf3, 0xb6, 0x82, 0xde, 0x09, 0xa0, 0x1b, 0x56, 0xd3, 0x65, 0xa9, 0x13, 0xf3, 0xc4, 0x19, + 0x0a, 0xa1, 0xce, 0x8b, 0x78, 0xd9, 0xa6, 0xeb, 0xd5, 0x27, 0x69, 0x3d, 0x30, 0x10, 0x45, 0x78, + 0xd2, 0x17, 0x34, 0x45, 0x05, 0x9d, 0xea, 0xd0, 0xd3, 0x16, 0xc3, 0x7c, 0x04, 0x72, 0x5a, 0x5d, + 0xc7, 0x86, 0x5b, 0x71, 0x5c, 0x1b, 0xab, 0x0d, 0xdd, 0xa8, 0xd1, 0x50, 0x93, 0x2e, 0x0e, 0xec, + 0xaa, 0x75, 0x07, 0x2b, 0x63, 0xac, 0x7a, 0x53, 0xd4, 0x12, 0x0a, 0x6a, 0x40, 0x76, 0x80, 0x62, + 0x30, 0x44, 0xc1, 0xaa, 0x3d, 0x0a, 0xf9, 0xc3, 0x19, 0x18, 0x0e, 0x24, 0xe0, 0xe8, 0x2e, 0xc8, + 0xbe, 0xa8, 0x5e, 0x51, 0x2b, 0x62, 0x51, 0xc5, 0x34, 0x31, 0x4c, 0x60, 0x1b, 0x7c, 0x61, 0xf5, + 0x08, 0x4c, 0x52, 0x14, 0xb3, 0xe9, 0x62, 0xbb, 0xa2, 0xd5, 0x55, 0xc7, 0xa1, 0x4a, 0x4b, 0x53, + 0x54, 0x44, 0xea, 0xd6, 0x49, 0xd5, 0x82, 0xa8, 0x41, 0x67, 0x61, 0x82, 0x52, 0x34, 0x9a, 0x75, + 0x57, 0xb7, 0xea, 0xb8, 0x42, 0x96, 0x79, 0x0e, 0x0d, 0x39, 0x9e, 0x64, 0xe3, 0x04, 0x63, 0x95, + 0x23, 0x10, 0x89, 0x1c, 0xb4, 0x08, 0x77, 0x52, 0xb2, 0x1a, 0x36, 0xb0, 0xad, 0xba, 0xb8, 0x82, + 0x5f, 0x6a, 0xaa, 0x75, 0xa7, 0xa2, 0x1a, 0xd5, 0xca, 0x9e, 0xea, 0xec, 0xe5, 0x27, 0x09, 0x83, + 0x52, 0x22, 0x2f, 0x29, 0x27, 0x08, 0xe2, 0x12, 0xc7, 0x2b, 0x53, 0xb4, 0x79, 0xa3, 0x7a, 0x51, + 0x75, 0xf6, 0x50, 0x11, 0x8e, 0x51, 0x2e, 0x8e, 0x6b, 0xeb, 0x46, 0xad, 0xa2, 0xed, 0x61, 0x6d, + 0xbf, 0xd2, 0x74, 0x77, 0x9f, 0xcc, 0xdf, 0x11, 0x6c, 0x9f, 0x4a, 0xb8, 0x49, 0x71, 0x16, 0x08, + 0xca, 0xb6, 0xbb, 0xfb, 0x24, 0xda, 0x84, 0x2c, 0x19, 0x8c, 0x86, 0xfe, 0x32, 0xae, 0xec, 0x9a, + 0x36, 0x8d, 0xa1, 0xa3, 0x6d, 0x5c, 0x53, 0x40, 0x83, 0xb3, 0xeb, 0x9c, 0x60, 0xd5, 0xac, 0xe2, + 0xe2, 0xc0, 0xe6, 0x46, 0xb9, 0xbc, 0xa8, 0x0c, 0x0b, 0x2e, 0x17, 0x4c, 0x9b, 0x18, 0x54, 0xcd, + 0xf4, 0x14, 0x3c, 0xcc, 0x0c, 0xaa, 0x66, 0x0a, 0xf5, 0x9e, 0x85, 0x09, 0x4d, 0x63, 0x7d, 0xd6, + 0xb5, 0x0a, 0x5f, 0x8c, 0x39, 0xf9, 0x5c, 0x48, 0x59, 0x9a, 0xb6, 0xc4, 0x10, 0xb8, 0x8d, 0x3b, + 0xe8, 0x29, 0x38, 0xea, 0x2b, 0x2b, 0x48, 0x38, 0xde, 0xd2, 0xcb, 0x28, 0xe9, 0x59, 0x98, 0xb0, + 0x0e, 0x5a, 0x09, 0x51, 0xa8, 0x45, 0xeb, 0x20, 0x4a, 0xf6, 0x04, 0x4c, 0x5a, 0x7b, 0x56, 0x2b, + 0xdd, 0xe9, 0x20, 0x1d, 0xb2, 0xf6, 0xac, 0x28, 0xe1, 0xbd, 0x74, 0x65, 0x6e, 0x63, 0x4d, 0x75, + 0x71, 0x35, 0x7f, 0x3c, 0x88, 0x1e, 0xa8, 0x40, 0xb3, 0x90, 0xd3, 0xb4, 0x0a, 0x36, 0xd4, 0x9d, + 0x3a, 0xae, 0xa8, 0x36, 0x36, 0x54, 0x27, 0x3f, 0x4d, 0x91, 0x53, 0xae, 0xdd, 0xc4, 0xca, 0xa8, + 0xa6, 0x95, 0x69, 0xe5, 0x3c, 0xad, 0x43, 0xa7, 0x61, 0xdc, 0xdc, 0x79, 0x51, 0x63, 0x16, 0x59, + 0xb1, 0x6c, 0xbc, 0xab, 0x5f, 0xcb, 0xdf, 0x43, 0xd5, 0x3b, 0x46, 0x2a, 0xa8, 0x3d, 0x6e, 0x50, + 0x30, 0x7a, 0x00, 0x72, 0x9a, 0xb3, 0xa7, 0xda, 0x16, 0x75, 0xc9, 0x8e, 0xa5, 0x6a, 0x38, 0x7f, + 0x2f, 0x43, 0x65, 0xf0, 0x35, 0x01, 0x26, 0x33, 0xc2, 0xb9, 0xaa, 0xef, 0xba, 0x82, 0xe3, 0xfd, + 0x6c, 0x46, 0x50, 0x18, 0xe7, 0x76, 0x0a, 0x72, 0x44, 0x13, 0xa1, 0x86, 0x4f, 0x51, 0xb4, 0x51, + 0x6b, 0xcf, 0x0a, 0xb6, 0x7b, 0x37, 0x8c, 0x10, 0x4c, 0xbf, 0xd1, 0x07, 0x58, 0xe2, 0x66, 0xed, + 0x05, 0x5a, 0x7c, 0x1c, 0x8e, 0x11, 0xa4, 0x06, 0x76, 0xd5, 0xaa, 0xea, 0xaa, 0x01, 0xec, 0x87, + 0x28, 0x36, 0x51, 0xfb, 0x2a, 0xaf, 0x0c, 0xc9, 0x69, 0x37, 0x77, 0x0e, 0x3c, 0xc3, 0x7a, 0x98, + 0xc9, 0x49, 0x60, 0xc2, 0xb4, 0x6e, 0x5b, 0x72, 0x2e, 0x17, 0x21, 0x1b, 0xb4, 0x7b, 0x94, 0x01, + 0x66, 0xf9, 0x39, 0x89, 0x24, 0x41, 0x0b, 0xeb, 0x8b, 0x24, 0x7d, 0x79, 0x6b, 0x39, 0x97, 0x20, + 0x69, 0xd4, 0xca, 0xf2, 0x56, 0xb9, 0xa2, 0x6c, 0xaf, 0x6d, 0x2d, 0xaf, 0x96, 0x73, 0xc9, 0x40, + 0x62, 0xff, 0x6c, 0x2a, 0x7d, 0x5f, 0xee, 0x7e, 0xf9, 0x1b, 0x09, 0x18, 0x0d, 0xaf, 0xd4, 0xd0, + 0x9b, 0xe0, 0xb8, 0xd8, 0x56, 0x71, 0xb0, 0x5b, 0xb9, 0xaa, 0xdb, 0x74, 0x42, 0x36, 0x54, 0x16, + 0x1c, 0x3d, 0xfb, 0x99, 0xe4, 0x58, 0x9b, 0xd8, 0x7d, 0x5e, 0xb7, 0xc9, 0x74, 0x6b, 0xa8, 0x2e, + 0x5a, 0x81, 0x69, 0xc3, 0xac, 0x38, 0xae, 0x6a, 0x54, 0x55, 0xbb, 0x5a, 0xf1, 0x37, 0xb4, 0x2a, + 0xaa, 0xa6, 0x61, 0xc7, 0x31, 0x59, 0x20, 0xf4, 0xb8, 0x9c, 0x34, 0xcc, 0x4d, 0x8e, 0xec, 0x47, + 0x88, 0x79, 0x8e, 0x1a, 0x31, 0xdf, 0x64, 0x27, 0xf3, 0xbd, 0x03, 0x32, 0x0d, 0xd5, 0xaa, 0x60, + 0xc3, 0xb5, 0x0f, 0x68, 0x7e, 0x9e, 0x56, 0xd2, 0x0d, 0xd5, 0x2a, 0x93, 0xf2, 0x0f, 0x65, 0x99, + 0xf4, 0x6c, 0x2a, 0x9d, 0xce, 0x65, 0x9e, 0x4d, 0xa5, 0x33, 0x39, 0x90, 0x5f, 0x4f, 0x42, 0x36, + 0x98, 0xaf, 0x93, 0xe5, 0x8f, 0x46, 0x23, 0x96, 0x44, 0x7d, 0xda, 0xdd, 0x5d, 0xb3, 0xfb, 0xd9, + 0x05, 0x12, 0xca, 0x8a, 0x83, 0x2c, 0x39, 0x56, 0x18, 0x25, 0x49, 0x23, 0x88, 0xb1, 0x61, 0x96, + 0x8c, 0xa4, 0x15, 0x5e, 0x42, 0x4b, 0x30, 0xf8, 0xa2, 0x43, 0x79, 0x0f, 0x52, 0xde, 0xf7, 0x74, + 0xe7, 0xfd, 0xec, 0x26, 0x65, 0x9e, 0x79, 0x76, 0xb3, 0xb2, 0xb6, 0xae, 0xac, 0xce, 0xaf, 0x28, + 0x9c, 0x1c, 0x9d, 0x80, 0x54, 0x5d, 0x7d, 0xf9, 0x20, 0x1c, 0xf4, 0x28, 0xa8, 0xd7, 0x41, 0x38, + 0x01, 0xa9, 0xab, 0x58, 0xdd, 0x0f, 0x87, 0x1a, 0x0a, 0xba, 0x8d, 0x93, 0x61, 0x0e, 0x06, 0xa8, + 0xbe, 0x10, 0x00, 0xd7, 0x58, 0xee, 0x08, 0x4a, 0x43, 0x6a, 0x61, 0x5d, 0x21, 0x13, 0x22, 0x07, + 0x59, 0x06, 0xad, 0x6c, 0x2c, 0x97, 0x17, 0xca, 0xb9, 0x84, 0x7c, 0x16, 0x06, 0x99, 0x12, 0xc8, + 0x64, 0xf1, 0xd4, 0x90, 0x3b, 0xc2, 0x8b, 0x9c, 0x87, 0x24, 0x6a, 0xb7, 0x57, 0x4b, 0x65, 0x25, + 0x97, 0x08, 0x0f, 0x75, 0x2a, 0x37, 0x20, 0x3b, 0x90, 0x0d, 0xe6, 0xe1, 0x3f, 0x9c, 0xc5, 0xf8, + 0x97, 0x24, 0x18, 0x0e, 0xe4, 0xd5, 0x24, 0x21, 0x52, 0xeb, 0x75, 0xf3, 0x6a, 0x45, 0xad, 0xeb, + 0xaa, 0xc3, 0x4d, 0x03, 0x28, 0x68, 0x9e, 0x40, 0x7a, 0x1d, 0xba, 0x1f, 0xd2, 0x14, 0x19, 0xc8, + 0x0d, 0xca, 0x9f, 0x90, 0x20, 0x17, 0x4d, 0x6c, 0x23, 0x62, 0x4a, 0x3f, 0x4a, 0x31, 0xe5, 0x8f, + 0x4b, 0x30, 0x1a, 0xce, 0x66, 0x23, 0xe2, 0xdd, 0xf5, 0x23, 0x15, 0xef, 0x0f, 0x12, 0x30, 0x12, + 0xca, 0x61, 0x7b, 0x95, 0xee, 0x25, 0x18, 0xd7, 0xab, 0xb8, 0x61, 0x99, 0x2e, 0x36, 0xb4, 0x83, + 0x4a, 0x1d, 0x5f, 0xc1, 0xf5, 0xbc, 0x4c, 0x9d, 0xc6, 0x5c, 0xf7, 0x2c, 0x79, 0x76, 0xd9, 0xa7, + 0x5b, 0x21, 0x64, 0xc5, 0x89, 0xe5, 0xc5, 0xf2, 0xea, 0xc6, 0xfa, 0x56, 0x79, 0x6d, 0xe1, 0x2d, + 0x95, 0xed, 0xb5, 0x4b, 0x6b, 0xeb, 0xcf, 0xaf, 0x29, 0x39, 0x3d, 0x82, 0x76, 0x1b, 0xa7, 0xfd, + 0x06, 0xe4, 0xa2, 0x42, 0xa1, 0xe3, 0xd0, 0x4e, 0xac, 0xdc, 0x11, 0x34, 0x01, 0x63, 0x6b, 0xeb, + 0x95, 0xcd, 0xe5, 0xc5, 0x72, 0xa5, 0x7c, 0xe1, 0x42, 0x79, 0x61, 0x6b, 0x93, 0xed, 0x7b, 0x78, + 0xd8, 0x5b, 0xa1, 0x09, 0x2e, 0xbf, 0x96, 0x84, 0x89, 0x36, 0x92, 0xa0, 0x79, 0xbe, 0x62, 0x61, + 0x8b, 0xa8, 0x87, 0x7b, 0x91, 0x7e, 0x96, 0xe4, 0x0c, 0x1b, 0xaa, 0xed, 0xf2, 0x05, 0xce, 0x03, + 0x40, 0xb4, 0x64, 0xb8, 0xfa, 0xae, 0x8e, 0x6d, 0xbe, 0x9f, 0xc4, 0x96, 0x31, 0x63, 0x3e, 0x9c, + 0x6d, 0x29, 0x3d, 0x04, 0xc8, 0x32, 0x1d, 0xdd, 0xd5, 0xaf, 0xe0, 0x8a, 0x6e, 0x88, 0xcd, 0x27, + 0xb2, 0xac, 0x49, 0x29, 0x39, 0x51, 0xb3, 0x6c, 0xb8, 0x1e, 0xb6, 0x81, 0x6b, 0x6a, 0x04, 0x9b, + 0x38, 0xf3, 0xa4, 0x92, 0x13, 0x35, 0x1e, 0xf6, 0x5d, 0x90, 0xad, 0x9a, 0x4d, 0x92, 0xeb, 0x31, + 0x3c, 0x12, 0x3b, 0x24, 0x65, 0x98, 0xc1, 0x3c, 0x14, 0x9e, 0xc5, 0xfb, 0xbb, 0x5e, 0x59, 0x65, + 0x98, 0xc1, 0x18, 0xca, 0xfd, 0x30, 0xa6, 0xd6, 0x6a, 0x36, 0x61, 0x2e, 0x18, 0xb1, 0x75, 0xc9, + 0xa8, 0x07, 0xa6, 0x88, 0x85, 0x67, 0x21, 0x2d, 0xf4, 0x40, 0x42, 0x35, 0xd1, 0x44, 0xc5, 0x62, + 0x8b, 0xed, 0xc4, 0xa9, 0x8c, 0x92, 0x36, 0x44, 0xe5, 0x5d, 0x90, 0xd5, 0x9d, 0x8a, 0xbf, 0x89, + 0x9f, 0x98, 0x49, 0x9c, 0x4a, 0x2b, 0xc3, 0xba, 0xe3, 0x6d, 0x80, 0xca, 0x9f, 0x49, 0xc0, 0x68, + 0xf8, 0x10, 0x02, 0x2d, 0x42, 0xba, 0x6e, 0x6a, 0x2a, 0x35, 0x2d, 0x76, 0x02, 0x76, 0x2a, 0xe6, + 0xdc, 0x62, 0x76, 0x85, 0xe3, 0x2b, 0x1e, 0x65, 0xe1, 0xb7, 0x25, 0x48, 0x0b, 0x30, 0x3a, 0x06, + 0x29, 0x4b, 0x75, 0xf7, 0x28, 0xbb, 0x81, 0x52, 0x22, 0x27, 0x29, 0xb4, 0x4c, 0xe0, 0x8e, 0xa5, + 0x1a, 0xd4, 0x04, 0x38, 0x9c, 0x94, 0xc9, 0xb8, 0xd6, 0xb1, 0x5a, 0xa5, 0x8b, 0x1e, 0xb3, 0xd1, + 0xc0, 0x86, 0xeb, 0x88, 0x71, 0xe5, 0xf0, 0x05, 0x0e, 0x46, 0x0f, 0xc2, 0xb8, 0x6b, 0xab, 0x7a, + 0x3d, 0x84, 0x9b, 0xa2, 0xb8, 0x39, 0x51, 0xe1, 0x21, 0x17, 0xe1, 0x84, 0xe0, 0x5b, 0xc5, 0xae, + 0xaa, 0xed, 0xe1, 0xaa, 0x4f, 0x34, 0x48, 0x37, 0x37, 0x8e, 0x73, 0x84, 0x45, 0x5e, 0x2f, 0x68, + 0xe5, 0x6f, 0x48, 0x30, 0x2e, 0x96, 0x69, 0x55, 0x4f, 0x59, 0xab, 0x00, 0xaa, 0x61, 0x98, 0x6e, + 0x50, 0x5d, 0xad, 0xa6, 0xdc, 0x42, 0x37, 0x3b, 0xef, 0x11, 0x29, 0x01, 0x06, 0x85, 0x06, 0x80, + 0x5f, 0xd3, 0x51, 0x6d, 0xd3, 0x30, 0xcc, 0x4f, 0x98, 0xe8, 0x31, 0x25, 0x5b, 0xd8, 0x03, 0x03, + 0x91, 0xf5, 0x1c, 0x9a, 0x84, 0x81, 0x1d, 0x5c, 0xd3, 0x0d, 0xbe, 0x6f, 0xcc, 0x0a, 0x62, 0xfb, + 0x25, 0xe5, 0x6d, 0xbf, 0x94, 0x3e, 0x28, 0xc1, 0x84, 0x66, 0x36, 0xa2, 0xf2, 0x96, 0x72, 0x91, + 0xdd, 0x05, 0xe7, 0xa2, 0xf4, 0xd6, 0xa7, 0x6b, 0xba, 0xbb, 0xd7, 0xdc, 0x99, 0xd5, 0xcc, 0xc6, + 0x5c, 0xcd, 0xac, 0xab, 0x46, 0xcd, 0x3f, 0x67, 0xa5, 0x3f, 0xb4, 0x87, 0x6b, 0xd8, 0x78, 0xb8, + 0x66, 0x06, 0x4e, 0x5d, 0xcf, 0xfb, 0x3f, 0xff, 0x4c, 0x92, 0x7e, 0x21, 0x91, 0x5c, 0xda, 0x28, + 0x7d, 0x36, 0x51, 0x58, 0x62, 0xcd, 0x6d, 0x08, 0xf5, 0x28, 0x78, 0xb7, 0x8e, 0x35, 0xd2, 0x65, + 0xf8, 0xf6, 0x83, 0x30, 0x59, 0x33, 0x6b, 0x26, 0xe5, 0x38, 0x47, 0x7e, 0xf1, 0x93, 0xdb, 0x8c, + 0x07, 0x2d, 0xc4, 0x1e, 0xf3, 0x16, 0xd7, 0x60, 0x82, 0x23, 0x57, 0xe8, 0xd1, 0x11, 0x5b, 0xd8, + 0xa0, 0xae, 0xbb, 0x6a, 0xf9, 0x5f, 0xfb, 0x16, 0x0d, 0xe8, 0xca, 0x38, 0x27, 0x25, 0x75, 0x6c, + 0xed, 0x53, 0x54, 0xe0, 0x68, 0x88, 0x1f, 0x9b, 0xb6, 0xd8, 0x8e, 0xe1, 0xf8, 0x9b, 0x9c, 0xe3, + 0x44, 0x80, 0xe3, 0x26, 0x27, 0x2d, 0x2e, 0xc0, 0x48, 0x3f, 0xbc, 0xfe, 0x25, 0xe7, 0x95, 0xc5, + 0x41, 0x26, 0x4b, 0x30, 0x46, 0x99, 0x68, 0x4d, 0xc7, 0x35, 0x1b, 0xd4, 0x27, 0x76, 0x67, 0xf3, + 0x5b, 0xdf, 0x62, 0xf3, 0x68, 0x94, 0x90, 0x2d, 0x78, 0x54, 0xc5, 0x22, 0xd0, 0xd3, 0xb2, 0x2a, + 0xd6, 0xea, 0x31, 0x1c, 0xbe, 0xc2, 0x05, 0xf1, 0xf0, 0x8b, 0x97, 0x61, 0x92, 0xfc, 0xa6, 0x2e, + 0x2b, 0x28, 0x49, 0xfc, 0x16, 0x5c, 0xfe, 0x1b, 0xef, 0x61, 0x53, 0x75, 0xc2, 0x63, 0x10, 0x90, + 0x29, 0x30, 0x8a, 0x35, 0xec, 0xba, 0xd8, 0x76, 0x2a, 0x6a, 0xbd, 0x9d, 0x78, 0x81, 0x3d, 0x8c, + 0xfc, 0xc7, 0xbe, 0x13, 0x1e, 0xc5, 0x25, 0x46, 0x39, 0x5f, 0xaf, 0x17, 0xb7, 0xe1, 0x78, 0x1b, + 0xab, 0xe8, 0x81, 0xe7, 0x6b, 0x9c, 0xe7, 0x64, 0x8b, 0x65, 0x10, 0xb6, 0x1b, 0x20, 0xe0, 0xde, + 0x58, 0xf6, 0xc0, 0xf3, 0xe7, 0x39, 0x4f, 0xc4, 0x69, 0xc5, 0x90, 0x12, 0x8e, 0xcf, 0xc2, 0xf8, + 0x15, 0x6c, 0xef, 0x98, 0x0e, 0xdf, 0x37, 0xea, 0x81, 0xdd, 0xc7, 0x39, 0xbb, 0x31, 0x4e, 0x48, + 0x37, 0x92, 0x08, 0xaf, 0xa7, 0x20, 0xbd, 0xab, 0x6a, 0xb8, 0x07, 0x16, 0xd7, 0x39, 0x8b, 0x21, + 0x82, 0x4f, 0x48, 0xe7, 0x21, 0x5b, 0x33, 0x79, 0xd4, 0x8a, 0x27, 0xff, 0x04, 0x27, 0x1f, 0x16, + 0x34, 0x9c, 0x85, 0x65, 0x5a, 0xcd, 0x3a, 0x09, 0x69, 0xf1, 0x2c, 0xfe, 0xa6, 0x60, 0x21, 0x68, + 0x38, 0x8b, 0x3e, 0xd4, 0xfa, 0x49, 0xc1, 0xc2, 0x09, 0xe8, 0xf3, 0x19, 0x18, 0x36, 0x8d, 0xfa, + 0x81, 0x69, 0xf4, 0x22, 0xc4, 0xa7, 0x38, 0x07, 0xe0, 0x24, 0x84, 0xc1, 0x79, 0xc8, 0xf4, 0x3a, + 0x10, 0x7f, 0xeb, 0x3b, 0x62, 0x7a, 0x88, 0x11, 0x58, 0x82, 0x31, 0xe1, 0xa0, 0x74, 0xd3, 0xe8, + 0x81, 0xc5, 0xdf, 0xe6, 0x2c, 0x46, 0x03, 0x64, 0xbc, 0x1b, 0x2e, 0x76, 0xdc, 0x1a, 0xee, 0x85, + 0xc9, 0x67, 0x44, 0x37, 0x38, 0x09, 0x57, 0xe5, 0x0e, 0x36, 0xb4, 0xbd, 0xde, 0x38, 0xfc, 0x92, + 0x50, 0xa5, 0xa0, 0x21, 0x2c, 0x16, 0x60, 0xa4, 0xa1, 0xda, 0xce, 0x9e, 0x5a, 0xef, 0x69, 0x38, + 0xfe, 0x0e, 0xe7, 0x91, 0xf5, 0x88, 0xb8, 0x46, 0x9a, 0x46, 0x3f, 0x6c, 0x3e, 0x2b, 0x34, 0x12, + 0x20, 0xe3, 0x53, 0xcf, 0x71, 0xe9, 0x26, 0x5b, 0x3f, 0xdc, 0x7e, 0x59, 0x4c, 0x3d, 0x46, 0xbb, + 0x1a, 0xe4, 0x78, 0x1e, 0x32, 0x8e, 0xfe, 0x72, 0x4f, 0x6c, 0x3e, 0x27, 0x46, 0x9a, 0x12, 0x10, + 0xe2, 0xb7, 0xc0, 0x89, 0xb6, 0x61, 0xa2, 0x07, 0x66, 0x7f, 0x97, 0x33, 0x3b, 0xd6, 0x26, 0x54, + 0x70, 0x97, 0xd0, 0x2f, 0xcb, 0xbf, 0x27, 0x5c, 0x02, 0x8e, 0xf0, 0xda, 0x20, 0xeb, 0x08, 0x47, + 0xdd, 0xed, 0x4f, 0x6b, 0xbf, 0x22, 0xb4, 0xc6, 0x68, 0x43, 0x5a, 0xdb, 0x82, 0x63, 0x9c, 0x63, + 0x7f, 0xe3, 0xfa, 0xab, 0xc2, 0xb1, 0x32, 0xea, 0xed, 0xf0, 0xe8, 0xbe, 0x0d, 0x0a, 0x9e, 0x3a, + 0x45, 0xc2, 0xea, 0x54, 0x1a, 0xaa, 0xd5, 0x03, 0xe7, 0x5f, 0xe3, 0x9c, 0x85, 0xc7, 0xf7, 0x32, + 0x5e, 0x67, 0x55, 0xb5, 0x08, 0xf3, 0x17, 0x20, 0x2f, 0x98, 0x37, 0x0d, 0x1b, 0x6b, 0x66, 0xcd, + 0xd0, 0x5f, 0xc6, 0xd5, 0x1e, 0x58, 0xff, 0x7a, 0x64, 0xa8, 0xb6, 0x03, 0xe4, 0x84, 0xf3, 0x32, + 0xe4, 0xbc, 0x5c, 0xa5, 0xa2, 0x37, 0x2c, 0xd3, 0x76, 0x63, 0x38, 0x7e, 0x5e, 0x8c, 0x94, 0x47, + 0xb7, 0x4c, 0xc9, 0x8a, 0x65, 0x60, 0x27, 0xcf, 0xbd, 0x9a, 0xe4, 0x17, 0x38, 0xa3, 0x11, 0x9f, + 0x8a, 0x3b, 0x0e, 0xcd, 0x6c, 0x58, 0xaa, 0xdd, 0x8b, 0xff, 0xfb, 0xfb, 0xc2, 0x71, 0x70, 0x12, + 0xee, 0x38, 0xdc, 0x03, 0x0b, 0x93, 0x68, 0xdf, 0x03, 0x87, 0x2f, 0x0a, 0xc7, 0x21, 0x68, 0x38, + 0x0b, 0x91, 0x30, 0xf4, 0xc0, 0xe2, 0x1f, 0x08, 0x16, 0x82, 0x86, 0xb0, 0x78, 0xce, 0x0f, 0xb4, + 0x36, 0xae, 0xe9, 0x8e, 0x6b, 0xb3, 0x34, 0xb9, 0x3b, 0xab, 0x7f, 0xf8, 0x9d, 0x70, 0x12, 0xa6, + 0x04, 0x48, 0x89, 0x27, 0xe2, 0xdb, 0xae, 0x74, 0x15, 0x15, 0x2f, 0xd8, 0x6f, 0x08, 0x4f, 0x14, + 0x20, 0x23, 0xb2, 0x05, 0x32, 0x44, 0xa2, 0x76, 0x8d, 0xac, 0x1d, 0x7a, 0x60, 0xf7, 0x8f, 0x22, + 0xc2, 0x6d, 0x0a, 0x5a, 0xc2, 0x33, 0x90, 0xff, 0x34, 0x8d, 0x7d, 0x7c, 0xd0, 0x93, 0x75, 0xfe, + 0xe3, 0x48, 0xfe, 0xb3, 0xcd, 0x28, 0x99, 0x0f, 0x19, 0x8b, 0xe4, 0x53, 0x28, 0xee, 0x9e, 0x51, + 0xfe, 0xa7, 0xbe, 0xc7, 0xfb, 0x1b, 0x4e, 0xa7, 0x8a, 0x2b, 0xc4, 0xc8, 0xc3, 0x49, 0x4f, 0x3c, + 0xb3, 0xf7, 0x7c, 0xcf, 0xb3, 0xf3, 0x50, 0xce, 0x53, 0xbc, 0x00, 0x23, 0xa1, 0x84, 0x27, 0x9e, + 0xd5, 0x7b, 0x39, 0xab, 0x6c, 0x30, 0xdf, 0x29, 0x9e, 0x85, 0x14, 0x49, 0x5e, 0xe2, 0xc9, 0xff, + 0x32, 0x27, 0xa7, 0xe8, 0xc5, 0x37, 0x43, 0x5a, 0x24, 0x2d, 0xf1, 0xa4, 0xef, 0xe3, 0xa4, 0x1e, + 0x09, 0x21, 0x17, 0x09, 0x4b, 0x3c, 0xf9, 0x5f, 0x11, 0xe4, 0x82, 0x84, 0x90, 0xf7, 0xae, 0xc2, + 0x2f, 0xfd, 0x74, 0x8a, 0x07, 0x1d, 0xa1, 0xbb, 0xf3, 0x30, 0xc4, 0x33, 0x95, 0x78, 0xea, 0x0f, + 0xf0, 0xc6, 0x05, 0x45, 0xf1, 0x09, 0x18, 0xe8, 0x51, 0xe1, 0x3f, 0xc3, 0x49, 0x19, 0x7e, 0x71, + 0x01, 0x86, 0x03, 0xd9, 0x49, 0x3c, 0xf9, 0x5f, 0xe3, 0xe4, 0x41, 0x2a, 0x22, 0x3a, 0xcf, 0x4e, + 0xe2, 0x19, 0x7c, 0x50, 0x88, 0xce, 0x29, 0x88, 0xda, 0x44, 0x62, 0x12, 0x4f, 0xfd, 0x21, 0xa1, + 0x75, 0x41, 0x52, 0x7c, 0x06, 0x32, 0x5e, 0xb0, 0x89, 0xa7, 0xff, 0x30, 0xa7, 0xf7, 0x69, 0x88, + 0x06, 0x02, 0xc1, 0x2e, 0x9e, 0xc5, 0x5f, 0x17, 0x1a, 0x08, 0x50, 0x91, 0x69, 0x14, 0x4d, 0x60, + 0xe2, 0x39, 0x7d, 0x44, 0x4c, 0xa3, 0x48, 0xfe, 0x42, 0x46, 0x93, 0xfa, 0xfc, 0x78, 0x16, 0x3f, + 0x2b, 0x46, 0x93, 0xe2, 0x13, 0x31, 0xa2, 0x19, 0x41, 0x3c, 0x8f, 0xbf, 0x21, 0xc4, 0x88, 0x24, + 0x04, 0xc5, 0x0d, 0x40, 0xad, 0xd9, 0x40, 0x3c, 0xbf, 0x8f, 0x72, 0x7e, 0xe3, 0x2d, 0xc9, 0x40, + 0xf1, 0x79, 0x38, 0xd6, 0x3e, 0x13, 0x88, 0xe7, 0xfa, 0xb1, 0xef, 0x45, 0xd6, 0x6e, 0xc1, 0x44, + 0xa0, 0xb8, 0xe5, 0x87, 0x94, 0x60, 0x16, 0x10, 0xcf, 0xf6, 0xb5, 0xef, 0x85, 0x1d, 0x77, 0x30, + 0x09, 0x28, 0xce, 0x03, 0xf8, 0x01, 0x38, 0x9e, 0xd7, 0xc7, 0x39, 0xaf, 0x00, 0x11, 0x99, 0x1a, + 0x3c, 0xfe, 0xc6, 0xd3, 0x5f, 0x17, 0x53, 0x83, 0x53, 0x90, 0xa9, 0x21, 0x42, 0x6f, 0x3c, 0xf5, + 0x27, 0xc4, 0xd4, 0x10, 0x24, 0xc4, 0xb2, 0x03, 0xd1, 0x2d, 0x9e, 0xc3, 0xa7, 0x84, 0x65, 0x07, + 0xa8, 0x8a, 0x6b, 0x30, 0xde, 0x12, 0x10, 0xe3, 0x59, 0xfd, 0x02, 0x67, 0x95, 0x8b, 0xc6, 0xc3, + 0x60, 0xf0, 0xe2, 0xc1, 0x30, 0x9e, 0xdb, 0xa7, 0x23, 0xc1, 0x8b, 0xc7, 0xc2, 0xe2, 0x79, 0x48, + 0x1b, 0xcd, 0x7a, 0x9d, 0x4c, 0x1e, 0xd4, 0xfd, 0x6e, 0x60, 0xfe, 0xbf, 0x7c, 0x9f, 0x6b, 0x47, + 0x10, 0x14, 0xcf, 0xc2, 0x00, 0x6e, 0xec, 0xe0, 0x6a, 0x1c, 0xe5, 0xb7, 0xbf, 0x2f, 0x1c, 0x26, + 0xc1, 0x2e, 0x3e, 0x03, 0xc0, 0xb6, 0x46, 0xe8, 0xf1, 0x60, 0x0c, 0xed, 0x7f, 0xfd, 0x3e, 0xbf, + 0x8c, 0xe3, 0x93, 0xf8, 0x0c, 0xd8, 0xd5, 0x9e, 0xee, 0x0c, 0xbe, 0x13, 0x66, 0x40, 0x47, 0xe4, + 0x29, 0x18, 0x7a, 0xd1, 0x31, 0x0d, 0x57, 0xad, 0xc5, 0x51, 0xff, 0x37, 0x4e, 0x2d, 0xf0, 0x89, + 0xc2, 0x1a, 0xa6, 0x8d, 0x5d, 0xb5, 0xe6, 0xc4, 0xd1, 0xfe, 0x77, 0x4e, 0xeb, 0x11, 0x10, 0x62, + 0x4d, 0x75, 0xdc, 0x5e, 0xfa, 0xfd, 0x47, 0x82, 0x58, 0x10, 0x10, 0xa1, 0xc9, 0xef, 0x7d, 0x7c, + 0x10, 0x47, 0xfb, 0x5d, 0x21, 0x34, 0xc7, 0x2f, 0xbe, 0x19, 0x32, 0xe4, 0x27, 0xbb, 0x61, 0x17, + 0x43, 0xfc, 0xc7, 0x9c, 0xd8, 0xa7, 0x20, 0x2d, 0x3b, 0x6e, 0xd5, 0xd5, 0xe3, 0x95, 0x7d, 0x93, + 0x8f, 0xb4, 0xc0, 0x2f, 0xce, 0xc3, 0xb0, 0xe3, 0x56, 0xab, 0x4d, 0x9e, 0x9f, 0xc6, 0x90, 0xff, + 0xc9, 0xf7, 0xbd, 0x2d, 0x0b, 0x8f, 0x86, 0x8c, 0xf6, 0xd5, 0x7d, 0xd7, 0x32, 0xe9, 0x11, 0x48, + 0x1c, 0x87, 0xef, 0x71, 0x0e, 0x01, 0x92, 0xe2, 0x02, 0x64, 0x49, 0x5f, 0x6c, 0x6c, 0x61, 0x7a, + 0x5e, 0x15, 0xc3, 0xe2, 0x4f, 0xb9, 0x02, 0x42, 0x44, 0xa5, 0x9f, 0xfc, 0xca, 0xeb, 0x53, 0xd2, + 0xd7, 0x5f, 0x9f, 0x92, 0xfe, 0xe0, 0xf5, 0x29, 0xe9, 0x43, 0xdf, 0x9c, 0x3a, 0xf2, 0xf5, 0x6f, + 0x4e, 0x1d, 0xf9, 0xdd, 0x6f, 0x4e, 0x1d, 0x69, 0xbf, 0x6d, 0x0c, 0x4b, 0xe6, 0x92, 0xc9, 0x36, + 0x8c, 0xdf, 0x2a, 0x87, 0xb6, 0x8b, 0x6b, 0xa6, 0xbf, 0x5b, 0xeb, 0x2d, 0x72, 0xe0, 0x4f, 0x25, + 0xb2, 0x60, 0x0e, 0xef, 0xe5, 0xaa, 0xc6, 0x41, 0x87, 0xb7, 0x3a, 0x85, 0xb6, 0x1b, 0xc3, 0xf2, + 0x9b, 0x20, 0x39, 0x6f, 0x1c, 0xa0, 0x13, 0xcc, 0xe7, 0x55, 0x9a, 0x76, 0x9d, 0xdf, 0xfc, 0x1a, + 0x22, 0xe5, 0x6d, 0xbb, 0x8e, 0x26, 0xfd, 0xeb, 0x99, 0xd2, 0xa9, 0x2c, 0xbf, 0x73, 0x59, 0x4c, + 0x7d, 0xf7, 0x53, 0xd3, 0x47, 0x4a, 0xfb, 0xd1, 0x1e, 0x7e, 0x29, 0xb6, 0x97, 0xe9, 0x79, 0xe3, + 0x80, 0x76, 0x72, 0x43, 0x7a, 0xeb, 0x00, 0x69, 0xc3, 0x11, 0x1b, 0xdb, 0x53, 0xd1, 0x8d, 0xed, + 0xe7, 0x71, 0xbd, 0x7e, 0xc9, 0x30, 0xaf, 0x1a, 0x5b, 0x04, 0x6d, 0x67, 0x90, 0x5d, 0x23, 0x86, + 0xbf, 0x9a, 0x80, 0xa9, 0x96, 0x3d, 0x6c, 0x3e, 0xf2, 0x9d, 0x1e, 0x2a, 0x15, 0x21, 0xbd, 0x28, + 0x0c, 0x2a, 0x0f, 0x43, 0x0e, 0xd6, 0x4c, 0xa3, 0xea, 0xd0, 0xae, 0x26, 0x15, 0x51, 0x24, 0x5d, + 0x35, 0x54, 0xc3, 0x74, 0xf8, 0xed, 0x48, 0x56, 0x28, 0xfd, 0xac, 0xd4, 0xdf, 0x38, 0x8e, 0x88, + 0x96, 0x44, 0x37, 0x4f, 0x77, 0xdb, 0xfb, 0xa7, 0x2a, 0xf0, 0xe4, 0x0f, 0xec, 0xf3, 0xf7, 0xaa, + 0x8e, 0x0f, 0x25, 0x60, 0x3a, 0xaa, 0x0e, 0x32, 0x8f, 0x1c, 0x57, 0x6d, 0x58, 0x9d, 0xf4, 0x71, + 0x1e, 0x32, 0x5b, 0x02, 0xa7, 0x6f, 0x85, 0xfc, 0x5c, 0x9f, 0x0a, 0x19, 0xf5, 0x9a, 0x12, 0x1a, + 0x79, 0x30, 0x5e, 0x23, 0x5e, 0x17, 0x0e, 0xa1, 0x92, 0x77, 0x27, 0xe1, 0x84, 0x66, 0x3a, 0x0d, + 0xd3, 0xa9, 0x30, 0x83, 0x67, 0x05, 0xae, 0x8c, 0x6c, 0xb0, 0xaa, 0x87, 0xe3, 0x90, 0x8b, 0x30, + 0x4a, 0x9d, 0x02, 0xdd, 0x08, 0xa6, 0x7e, 0x38, 0x36, 0x74, 0x7e, 0xf5, 0xdf, 0x0e, 0xd0, 0x49, + 0x34, 0xe2, 0x11, 0xd2, 0x9b, 0x2e, 0x5b, 0x30, 0xa9, 0x37, 0xac, 0x3a, 0xa6, 0x47, 0x62, 0x15, + 0xaf, 0x2e, 0x9e, 0xdf, 0xd7, 0x38, 0xbf, 0x09, 0x9f, 0x7c, 0x59, 0x50, 0x17, 0x57, 0x60, 0x5c, + 0xd5, 0x34, 0x6c, 0x85, 0x58, 0xc6, 0x38, 0x2c, 0x21, 0x60, 0x8e, 0x53, 0x7a, 0xdc, 0x4a, 0xcf, + 0x74, 0x1a, 0xdb, 0xb7, 0xde, 0x1b, 0x18, 0x34, 0x1b, 0xd7, 0xb0, 0xf1, 0xb0, 0x81, 0xdd, 0xab, + 0xa6, 0xbd, 0xcf, 0xd5, 0xfb, 0x30, 0x6b, 0x4a, 0x0c, 0xc2, 0x7b, 0x93, 0x30, 0xc5, 0x2a, 0xe6, + 0x76, 0x54, 0x07, 0xcf, 0x5d, 0x79, 0x74, 0x07, 0xbb, 0xea, 0xa3, 0x73, 0x9a, 0xa9, 0x8b, 0x69, + 0x3a, 0xc1, 0xc7, 0x85, 0xd4, 0xcf, 0xf2, 0xfa, 0x0e, 0x7e, 0x6a, 0x09, 0x52, 0x0b, 0xa6, 0x6e, + 0x10, 0x8b, 0xac, 0x62, 0xc3, 0x6c, 0x70, 0x2f, 0xc5, 0x0a, 0xe8, 0x6e, 0x18, 0x54, 0x1b, 0x66, + 0xd3, 0x70, 0xd9, 0x69, 0x5e, 0x69, 0xf8, 0x2b, 0x37, 0xa6, 0x8f, 0xfc, 0xde, 0x8d, 0xe9, 0xe4, + 0xb2, 0xe1, 0x2a, 0xbc, 0xaa, 0x98, 0x7a, 0xe3, 0x93, 0xd3, 0x92, 0xfc, 0x2c, 0x0c, 0x2d, 0x62, + 0xed, 0x30, 0xbc, 0x16, 0xb1, 0x16, 0xe1, 0xf5, 0x00, 0xa4, 0x97, 0x0d, 0x97, 0xdd, 0x20, 0xbe, + 0x13, 0x92, 0xba, 0xc1, 0x2e, 0xa5, 0x45, 0xda, 0x27, 0x70, 0x82, 0xba, 0x88, 0x35, 0x0f, 0xb5, + 0x8a, 0xb5, 0x28, 0x2a, 0x61, 0x4f, 0xe0, 0xa5, 0xc5, 0xdf, 0xfd, 0x4f, 0x53, 0x47, 0x5e, 0x79, + 0x7d, 0xea, 0x48, 0xc7, 0x91, 0x08, 0x46, 0x07, 0xae, 0x62, 0x3e, 0x04, 0x4e, 0x75, 0x7f, 0xce, + 0x0d, 0xcd, 0x85, 0xcf, 0xa6, 0xe0, 0x4e, 0xfa, 0x78, 0xc4, 0x6e, 0xe8, 0x86, 0x3b, 0xa7, 0xd9, + 0x07, 0x96, 0x4b, 0xc3, 0x89, 0xb9, 0xcb, 0x47, 0x61, 0xdc, 0xaf, 0x9e, 0x65, 0xd5, 0x1d, 0xc6, + 0x60, 0x17, 0x06, 0x36, 0x08, 0x1d, 0x51, 0x9c, 0x6b, 0xba, 0x6a, 0x9d, 0xbb, 0x0b, 0x56, 0x20, + 0x50, 0xf6, 0xe0, 0x24, 0xc1, 0xa0, 0xba, 0x78, 0x6b, 0x52, 0xc7, 0xea, 0x2e, 0xbb, 0xb7, 0x9b, + 0xa4, 0x21, 0x24, 0x4d, 0x00, 0xf4, 0x8a, 0xee, 0x24, 0x0c, 0xa8, 0x4d, 0x76, 0xe4, 0x9c, 0x24, + 0xb1, 0x85, 0x16, 0xe4, 0x4b, 0x30, 0xc4, 0x8f, 0xb9, 0x50, 0x0e, 0x92, 0xfb, 0xf8, 0x80, 0xb6, + 0x93, 0x55, 0xc8, 0x4f, 0x34, 0x0b, 0x03, 0x54, 0x78, 0xfe, 0x20, 0x21, 0x3f, 0xdb, 0x22, 0xfd, + 0x2c, 0x15, 0x52, 0x61, 0x68, 0xf2, 0xb3, 0x90, 0x5e, 0x34, 0x1b, 0xba, 0x61, 0x86, 0xb9, 0x65, + 0x18, 0x37, 0x2a, 0xb3, 0xd5, 0xe4, 0x63, 0xad, 0xb0, 0x02, 0x3a, 0x06, 0x83, 0xec, 0x1e, 0x37, + 0x3f, 0x36, 0xe7, 0x25, 0x79, 0x01, 0x86, 0x28, 0xef, 0x75, 0x0b, 0x21, 0xfe, 0x02, 0x88, 0x5f, + 0x18, 0xa7, 0x6e, 0x81, 0xb3, 0x4f, 0xf8, 0xc2, 0x22, 0x48, 0x55, 0x55, 0x57, 0xe5, 0xfd, 0xa6, + 0xbf, 0xe5, 0xa7, 0x21, 0xcd, 0x99, 0x38, 0xe8, 0x0c, 0x24, 0x4d, 0xcb, 0xe1, 0x07, 0xdf, 0x85, + 0x4e, 0x5d, 0x59, 0xb7, 0x4a, 0x29, 0x62, 0x25, 0x0a, 0x41, 0x2e, 0x29, 0x1d, 0xcd, 0xe2, 0xc9, + 0x80, 0x59, 0x04, 0x86, 0x3c, 0xf0, 0x93, 0x0d, 0x69, 0x8b, 0x39, 0x78, 0xc6, 0xf2, 0xa9, 0x04, + 0x4c, 0x05, 0x6a, 0xaf, 0x60, 0x9b, 0xac, 0xf5, 0x98, 0x45, 0x71, 0x6b, 0x41, 0x01, 0x21, 0x79, + 0x7d, 0x07, 0x73, 0x79, 0x33, 0x24, 0xe7, 0x2d, 0x0b, 0x15, 0x20, 0xcd, 0x0e, 0xb8, 0x4d, 0x66, + 0x2f, 0x29, 0xc5, 0x2b, 0x93, 0x3a, 0xc7, 0xdc, 0x75, 0xaf, 0xaa, 0xb6, 0xf7, 0xd4, 0x49, 0x94, + 0xe5, 0xa7, 0x20, 0xb3, 0x60, 0x1a, 0x0e, 0x36, 0x9c, 0x26, 0x0d, 0x44, 0x3b, 0x75, 0x53, 0xdb, + 0xe7, 0x1c, 0x58, 0x81, 0x28, 0x5c, 0xb5, 0x2c, 0x4a, 0x99, 0x52, 0xc8, 0x4f, 0x36, 0x2f, 0x4b, + 0x9b, 0x1d, 0x55, 0xf4, 0x54, 0xff, 0x2a, 0xe2, 0x9d, 0xf4, 0x74, 0xf4, 0xbf, 0x25, 0x38, 0xd9, + 0x3a, 0xa1, 0xf6, 0xf1, 0x81, 0xd3, 0xef, 0x7c, 0x7a, 0x01, 0x32, 0x1b, 0xf4, 0xbd, 0xf1, 0x25, + 0x7c, 0x80, 0x0a, 0x30, 0x84, 0xab, 0x67, 0xce, 0x9e, 0x7d, 0xf4, 0x29, 0x66, 0xed, 0x17, 0x8f, + 0x28, 0x02, 0x80, 0xa6, 0x20, 0xe3, 0x60, 0xcd, 0x3a, 0x73, 0xf6, 0xdc, 0xfe, 0xa3, 0xcc, 0xbc, + 0x2e, 0x1e, 0x51, 0x7c, 0x50, 0x31, 0x4d, 0x7a, 0xfd, 0xc6, 0xa7, 0xa6, 0xa5, 0xd2, 0x00, 0x24, + 0x9d, 0x66, 0xe3, 0xb6, 0xda, 0xc8, 0x6b, 0x03, 0x30, 0x13, 0xa4, 0xa4, 0xd1, 0xfa, 0x8a, 0x5a, + 0xd7, 0xab, 0xaa, 0xff, 0x52, 0x3c, 0x17, 0xd0, 0x01, 0xc5, 0x68, 0xaf, 0x82, 0x42, 0x57, 0x4d, + 0xca, 0xbf, 0x2e, 0x41, 0xf6, 0xb2, 0xe0, 0xbc, 0x89, 0x5d, 0x74, 0x1e, 0xc0, 0x6b, 0x49, 0x4c, + 0x9b, 0x3b, 0x66, 0xa3, 0x6d, 0xcd, 0x7a, 0x34, 0x4a, 0x00, 0x1d, 0x3d, 0x41, 0x0d, 0xd1, 0x32, + 0x1d, 0xfe, 0xfc, 0x25, 0x86, 0xd4, 0x43, 0x46, 0x0f, 0x01, 0xa2, 0x1e, 0xae, 0x72, 0xc5, 0x74, + 0x75, 0xa3, 0x56, 0xb1, 0xcc, 0xab, 0xfc, 0x51, 0x61, 0x52, 0xc9, 0xd1, 0x9a, 0xcb, 0xb4, 0x62, + 0x83, 0xc0, 0x89, 0xd0, 0x19, 0x8f, 0x0b, 0xc9, 0xad, 0xd4, 0x6a, 0xd5, 0xc6, 0x8e, 0xc3, 0x9d, + 0x98, 0x28, 0xa2, 0xf3, 0x30, 0x64, 0x35, 0x77, 0x2a, 0xc2, 0x63, 0x0c, 0x9f, 0x39, 0xd9, 0x6e, + 0xfe, 0x0b, 0xfb, 0xe0, 0x1e, 0x60, 0xd0, 0x6a, 0xee, 0x10, 0x6b, 0xb9, 0x0b, 0xb2, 0x6d, 0x84, + 0x19, 0xbe, 0xe2, 0xcb, 0x41, 0x9f, 0xb9, 0xf3, 0x1e, 0x54, 0x2c, 0x5b, 0x37, 0x6d, 0xdd, 0x3d, + 0xa0, 0xb7, 0x57, 0x92, 0x4a, 0x4e, 0x54, 0x6c, 0x70, 0xb8, 0xbc, 0x0f, 0x63, 0x9b, 0x34, 0xb7, + 0xf0, 0x25, 0x3f, 0xeb, 0xcb, 0x27, 0xc5, 0xcb, 0xd7, 0x51, 0xb2, 0x44, 0x8b, 0x64, 0xa5, 0xe7, + 0x3a, 0x5a, 0xe7, 0x13, 0xfd, 0x5b, 0x67, 0x38, 0xda, 0xfd, 0xd1, 0x89, 0xd0, 0xe4, 0xe4, 0xa9, + 0x64, 0xc0, 0x7d, 0xf5, 0x6a, 0x98, 0x71, 0x29, 0x75, 0xa1, 0x7b, 0x50, 0x2d, 0xc4, 0xb8, 0xd1, + 0x42, 0xec, 0x14, 0x92, 0x9f, 0x82, 0x91, 0x0d, 0xd5, 0x76, 0x37, 0xb1, 0x7b, 0x11, 0xab, 0x55, + 0x6c, 0x87, 0xa3, 0xee, 0x88, 0x88, 0xba, 0x08, 0x52, 0x34, 0xb4, 0xb2, 0xa8, 0x43, 0x7f, 0xcb, + 0x7b, 0x90, 0xa2, 0x37, 0xd8, 0xbc, 0x88, 0xcc, 0x29, 0x58, 0x44, 0x26, 0xbe, 0xf4, 0xc0, 0xc5, + 0x8e, 0x58, 0xd0, 0xd1, 0x02, 0x7a, 0x5c, 0xc4, 0xd5, 0x64, 0xf7, 0xb8, 0xca, 0x0d, 0x91, 0x47, + 0xd7, 0x3a, 0x0c, 0x95, 0x88, 0x2b, 0x5e, 0x5e, 0xf4, 0x04, 0x91, 0x7c, 0x41, 0xd0, 0x2a, 0x8c, + 0x59, 0xaa, 0xed, 0xd2, 0xab, 0xfb, 0x7b, 0xb4, 0x17, 0xdc, 0xd6, 0xa7, 0x5b, 0x67, 0x5e, 0xa8, + 0xb3, 0xbc, 0x95, 0x11, 0x2b, 0x08, 0x94, 0xff, 0x30, 0x05, 0x83, 0x5c, 0x19, 0x6f, 0x86, 0x21, + 0xae, 0x56, 0x6e, 0x9d, 0x77, 0xce, 0xb6, 0x06, 0xa6, 0x59, 0x2f, 0x80, 0x70, 0x7e, 0x82, 0x06, + 0xdd, 0x07, 0x69, 0x6d, 0x4f, 0xd5, 0x8d, 0x8a, 0x5e, 0x15, 0x69, 0xde, 0xeb, 0x37, 0xa6, 0x87, + 0x16, 0x08, 0x6c, 0x79, 0x51, 0x19, 0xa2, 0x95, 0xcb, 0x55, 0x92, 0x09, 0xec, 0x61, 0xbd, 0xb6, + 0xe7, 0xf2, 0x19, 0xc6, 0x4b, 0xe8, 0x49, 0x48, 0x11, 0x83, 0xe0, 0x0f, 0xbb, 0x0a, 0x2d, 0xc9, + 0xb6, 0xb7, 0xe2, 0x29, 0xa5, 0x49, 0xc3, 0x1f, 0xfa, 0xfd, 0x69, 0x49, 0xa1, 0x14, 0x68, 0x01, + 0x46, 0xea, 0xaa, 0xe3, 0x56, 0x68, 0x04, 0x23, 0xcd, 0x0f, 0x50, 0x16, 0x27, 0x5a, 0x15, 0xc2, + 0x15, 0xcb, 0x45, 0x1f, 0x26, 0x54, 0x0c, 0x54, 0x45, 0xa7, 0x20, 0x47, 0x99, 0x68, 0x66, 0xa3, + 0xa1, 0xbb, 0x2c, 0xb7, 0x1a, 0xa4, 0x7a, 0x1f, 0x25, 0xf0, 0x05, 0x0a, 0xa6, 0x19, 0xd6, 0x1d, + 0x90, 0xa1, 0x4f, 0x49, 0x28, 0x0a, 0xbb, 0x36, 0x99, 0x26, 0x00, 0x5a, 0x79, 0x3f, 0x8c, 0xf9, + 0xfe, 0x91, 0xa1, 0xa4, 0x19, 0x17, 0x1f, 0x4c, 0x11, 0x1f, 0x81, 0x49, 0x03, 0x5f, 0xa3, 0x17, + 0x39, 0x43, 0xd8, 0x19, 0x8a, 0x8d, 0x48, 0xdd, 0xe5, 0x30, 0xc5, 0xbd, 0x30, 0xaa, 0x09, 0xe5, + 0x33, 0x5c, 0xa0, 0xb8, 0x23, 0x1e, 0x94, 0xa2, 0x9d, 0x80, 0xb4, 0x6a, 0x59, 0x0c, 0x61, 0x98, + 0xfb, 0x47, 0xcb, 0xa2, 0x55, 0xa7, 0x61, 0x9c, 0xf6, 0xd1, 0xc6, 0x4e, 0xb3, 0xee, 0x72, 0x26, + 0x59, 0x8a, 0x33, 0x46, 0x2a, 0x14, 0x06, 0xa7, 0xb8, 0x77, 0xc3, 0x08, 0xbe, 0xa2, 0x57, 0xb1, + 0xa1, 0x61, 0x86, 0x37, 0x42, 0xf1, 0xb2, 0x02, 0x48, 0x91, 0x1e, 0x00, 0xcf, 0xef, 0x55, 0x84, + 0x4f, 0x1e, 0x65, 0xfc, 0x04, 0x7c, 0x9e, 0x81, 0xe5, 0x3c, 0xa4, 0x16, 0x55, 0x57, 0x25, 0x09, + 0x86, 0x7b, 0x8d, 0x05, 0x9a, 0xac, 0x42, 0x7e, 0xca, 0x6f, 0x24, 0x20, 0x75, 0xd9, 0x74, 0x31, + 0x7a, 0x2c, 0x90, 0x00, 0x8e, 0xb6, 0xb3, 0xe7, 0x4d, 0xbd, 0x66, 0xe0, 0xea, 0xaa, 0x53, 0x0b, + 0xbc, 0xfb, 0xf6, 0xcd, 0x29, 0x11, 0x32, 0xa7, 0x49, 0x18, 0xb0, 0xcd, 0xa6, 0x51, 0x15, 0x37, + 0x0e, 0x69, 0x01, 0x95, 0x21, 0xed, 0x59, 0x49, 0x2a, 0xce, 0x4a, 0xc6, 0x88, 0x95, 0x10, 0x1b, + 0xe6, 0x00, 0x65, 0x68, 0x87, 0x1b, 0x4b, 0x09, 0x32, 0x9e, 0xf3, 0xe2, 0xd6, 0xd6, 0x9b, 0xc1, + 0xfa, 0x64, 0x24, 0x98, 0x78, 0x63, 0xef, 0x29, 0x8f, 0x59, 0x5c, 0xce, 0xab, 0xe0, 0xda, 0x0b, + 0x99, 0x15, 0x7f, 0x83, 0x3e, 0x44, 0xfb, 0xe5, 0x9b, 0x15, 0x7b, 0x87, 0x7e, 0x12, 0x32, 0x8e, + 0x5e, 0x33, 0x54, 0xb7, 0x69, 0x63, 0x6e, 0x79, 0x3e, 0x40, 0xfe, 0x92, 0x04, 0x83, 0xcc, 0x92, + 0x03, 0x7a, 0x93, 0xda, 0xeb, 0x2d, 0xd1, 0x49, 0x6f, 0xc9, 0xc3, 0xeb, 0x6d, 0x1e, 0xc0, 0x13, + 0xc6, 0xe1, 0x4f, 0x83, 0xdb, 0x64, 0x0c, 0x4c, 0xc4, 0x4d, 0xbd, 0xc6, 0x27, 0x6a, 0x80, 0x48, + 0xfe, 0x8f, 0x12, 0x49, 0x62, 0x79, 0x3d, 0x9a, 0x87, 0x11, 0x21, 0x57, 0x65, 0xb7, 0xae, 0xd6, + 0xb8, 0xed, 0xdc, 0xd9, 0x51, 0xb8, 0x0b, 0x75, 0xb5, 0xa6, 0x0c, 0x73, 0x79, 0x48, 0xa1, 0xfd, + 0x38, 0x24, 0x3a, 0x8c, 0x43, 0x68, 0xe0, 0x93, 0x87, 0x1b, 0xf8, 0xd0, 0x10, 0xa5, 0xa2, 0x43, + 0xf4, 0xf9, 0x04, 0x5d, 0xcc, 0x58, 0xa6, 0xa3, 0xd6, 0x7f, 0x18, 0x33, 0xe2, 0x0e, 0xc8, 0x58, + 0x66, 0xbd, 0xc2, 0x6a, 0xd8, 0x4d, 0xdc, 0xb4, 0x65, 0xd6, 0x95, 0x96, 0x61, 0x1f, 0xb8, 0x45, + 0xd3, 0x65, 0xf0, 0x16, 0x68, 0x6d, 0x28, 0xaa, 0x35, 0x1b, 0xb2, 0x4c, 0x15, 0x3c, 0x96, 0x3d, + 0x42, 0x74, 0x40, 0x83, 0xa3, 0xd4, 0x1a, 0x7b, 0x99, 0xd8, 0x0c, 0x53, 0xe1, 0x78, 0x84, 0x82, + 0xb9, 0xfe, 0x76, 0xab, 0xe0, 0xa0, 0x59, 0x2a, 0x1c, 0x4f, 0xfe, 0x39, 0x09, 0x60, 0x85, 0x68, + 0x96, 0xf6, 0x97, 0x44, 0x21, 0x87, 0x8a, 0x50, 0x09, 0xb5, 0x3c, 0xd5, 0x69, 0xd0, 0x78, 0xfb, + 0x59, 0x27, 0x28, 0xf7, 0x02, 0x8c, 0xf8, 0xc6, 0xe8, 0x60, 0x21, 0xcc, 0x54, 0x97, 0xac, 0x7a, + 0x13, 0xbb, 0x4a, 0xf6, 0x4a, 0xa0, 0x24, 0xff, 0x33, 0x09, 0x32, 0x54, 0xa6, 0x55, 0xec, 0xaa, + 0xa1, 0x31, 0x94, 0x0e, 0x3f, 0x86, 0x77, 0x02, 0x30, 0x36, 0x8e, 0xfe, 0x32, 0xe6, 0x96, 0x95, + 0xa1, 0x90, 0x4d, 0xfd, 0x65, 0x8c, 0xce, 0x79, 0x0a, 0x4f, 0x76, 0x57, 0xb8, 0xc8, 0xba, 0xb9, + 0xda, 0x8f, 0xc3, 0x10, 0xfd, 0x94, 0xce, 0x35, 0x87, 0x27, 0xd2, 0x83, 0x46, 0xb3, 0xb1, 0x75, + 0xcd, 0x91, 0x5f, 0x84, 0xa1, 0xad, 0x6b, 0x6c, 0x6f, 0xe4, 0x0e, 0xc8, 0xd8, 0xa6, 0xc9, 0x63, + 0x32, 0xcb, 0x85, 0xd2, 0x04, 0x40, 0x43, 0x90, 0xd8, 0x0f, 0x48, 0xf8, 0xfb, 0x01, 0xfe, 0x86, + 0x46, 0xb2, 0xa7, 0x0d, 0x8d, 0xd3, 0xff, 0x4e, 0x82, 0xe1, 0x80, 0x7f, 0x40, 0x8f, 0xc2, 0xd1, + 0xd2, 0xca, 0xfa, 0xc2, 0xa5, 0xca, 0xf2, 0x62, 0xe5, 0xc2, 0xca, 0xfc, 0x92, 0xff, 0xd6, 0xa4, + 0x70, 0xec, 0xd5, 0xeb, 0x33, 0x28, 0x80, 0xbb, 0x6d, 0xec, 0x1b, 0xe6, 0x55, 0x03, 0xcd, 0xc1, + 0x64, 0x98, 0x64, 0xbe, 0xb4, 0x59, 0x5e, 0xdb, 0xca, 0x49, 0x85, 0xa3, 0xaf, 0x5e, 0x9f, 0x19, + 0x0f, 0x50, 0xcc, 0xef, 0x38, 0xd8, 0x70, 0x5b, 0x09, 0x16, 0xd6, 0x57, 0x57, 0x97, 0xb7, 0x72, + 0x89, 0x16, 0x02, 0xee, 0xb0, 0x1f, 0x80, 0xf1, 0x30, 0xc1, 0xda, 0xf2, 0x4a, 0x2e, 0x59, 0x40, + 0xaf, 0x5e, 0x9f, 0x19, 0x0d, 0x60, 0xaf, 0xe9, 0xf5, 0x42, 0xfa, 0xfd, 0x9f, 0x9e, 0x3a, 0xf2, + 0x4b, 0xbf, 0x38, 0x25, 0x91, 0x9e, 0x8d, 0x84, 0x7c, 0x04, 0x7a, 0x08, 0x8e, 0x6f, 0x2e, 0x2f, + 0xad, 0x95, 0x17, 0x2b, 0xab, 0x9b, 0x4b, 0x15, 0xf6, 0x8d, 0x0d, 0xaf, 0x77, 0x63, 0xaf, 0x5e, + 0x9f, 0x19, 0xe6, 0x5d, 0xea, 0x84, 0xbd, 0xa1, 0x94, 0x2f, 0xaf, 0x6f, 0x95, 0x73, 0x12, 0xc3, + 0xde, 0xb0, 0xf1, 0x15, 0xd3, 0x65, 0xdf, 0xda, 0x7a, 0x04, 0x4e, 0xb4, 0xc1, 0xf6, 0x3a, 0x36, + 0xfe, 0xea, 0xf5, 0x99, 0x91, 0x0d, 0x1b, 0xb3, 0xf9, 0x43, 0x29, 0x66, 0x21, 0xdf, 0x4a, 0xb1, + 0xbe, 0xb1, 0xbe, 0x39, 0xbf, 0x92, 0x9b, 0x29, 0xe4, 0x5e, 0xbd, 0x3e, 0x93, 0x15, 0xce, 0x90, + 0xe0, 0xfb, 0x3d, 0xbb, 0x9d, 0x2b, 0x9e, 0x3f, 0x79, 0x18, 0xee, 0xe1, 0x7b, 0x80, 0x8e, 0xab, + 0xee, 0xeb, 0x46, 0xcd, 0xdb, 0x69, 0xe5, 0x65, 0xbe, 0xf2, 0x39, 0xc6, 0x37, 0x5b, 0x05, 0xb4, + 0xeb, 0x7e, 0x6b, 0xa1, 0xf3, 0xc9, 0x52, 0x21, 0xe6, 0xf0, 0x25, 0x7e, 0xe9, 0xd4, 0x79, 0x6f, + 0xbe, 0x10, 0xb3, 0x63, 0x5c, 0xe8, 0xba, 0xb8, 0x93, 0x3f, 0x20, 0xc1, 0xe8, 0x45, 0xdd, 0x71, + 0x4d, 0x5b, 0xd7, 0xd4, 0x3a, 0x7d, 0x61, 0x72, 0xae, 0x57, 0xdf, 0x1a, 0x99, 0xea, 0xcf, 0xc0, + 0xe0, 0x15, 0xb5, 0xce, 0x9c, 0x5a, 0x92, 0x7e, 0x10, 0xa3, 0xbd, 0xfa, 0x7c, 0xd7, 0x26, 0x18, + 0x30, 0x32, 0xf9, 0x57, 0x12, 0x30, 0x46, 0x27, 0x83, 0xc3, 0x3e, 0x95, 0x44, 0xd6, 0x58, 0x25, + 0x48, 0xd9, 0xaa, 0xcb, 0x37, 0x0d, 0x4b, 0xb3, 0x7c, 0xe7, 0xf7, 0xbe, 0xf8, 0xdd, 0xdc, 0xd9, + 0x45, 0xac, 0x29, 0x94, 0x16, 0xbd, 0x1d, 0xd2, 0x0d, 0xf5, 0x5a, 0x85, 0xf2, 0x61, 0x2b, 0x97, + 0xf9, 0xfe, 0xf8, 0xdc, 0xbc, 0x31, 0x3d, 0x76, 0xa0, 0x36, 0xea, 0x45, 0x59, 0xf0, 0x91, 0x95, + 0xa1, 0x86, 0x7a, 0x8d, 0x88, 0x88, 0x2c, 0x18, 0x23, 0x50, 0x6d, 0x4f, 0x35, 0x6a, 0x98, 0x35, + 0x42, 0xb7, 0x40, 0x4b, 0x17, 0xfb, 0x6e, 0xe4, 0x98, 0xdf, 0x48, 0x80, 0x9d, 0xac, 0x8c, 0x34, + 0xd4, 0x6b, 0x0b, 0x14, 0x40, 0x5a, 0x2c, 0xa6, 0x3f, 0xfa, 0xc9, 0xe9, 0x23, 0x74, 0x37, 0xfd, + 0x1b, 0x12, 0x80, 0xaf, 0x31, 0xf4, 0x76, 0xc8, 0x69, 0x5e, 0x89, 0xd2, 0x3a, 0x7c, 0x0c, 0xef, + 0xef, 0x34, 0x16, 0x11, 0x7d, 0xb3, 0xd8, 0xfc, 0xf5, 0x1b, 0xd3, 0x92, 0x32, 0xa6, 0x45, 0x86, + 0xe2, 0x6d, 0x30, 0xdc, 0xb4, 0xaa, 0xaa, 0x8b, 0x2b, 0x74, 0x1d, 0x97, 0x88, 0x8d, 0xf3, 0x53, + 0x84, 0xd7, 0xcd, 0x1b, 0xd3, 0x88, 0x75, 0x2b, 0x40, 0x2c, 0xd3, 0xe8, 0x0f, 0x0c, 0x42, 0x08, + 0x02, 0x7d, 0xfa, 0xaa, 0x04, 0xc3, 0x8b, 0x81, 0x9b, 0x5e, 0x79, 0x18, 0x6a, 0x98, 0x86, 0xbe, + 0xcf, 0xed, 0x31, 0xa3, 0x88, 0x22, 0x2a, 0x40, 0x9a, 0x3d, 0xba, 0x73, 0x0f, 0xc4, 0x56, 0xa8, + 0x28, 0x13, 0xaa, 0xab, 0x78, 0xc7, 0xd1, 0xc5, 0x68, 0x28, 0xa2, 0x88, 0x2e, 0x40, 0xce, 0xc1, + 0x5a, 0xd3, 0xd6, 0xdd, 0x83, 0x8a, 0x66, 0x1a, 0xae, 0xaa, 0xb9, 0xec, 0xf9, 0x56, 0xe9, 0x8e, + 0x9b, 0x37, 0xa6, 0x8f, 0x33, 0x59, 0xa3, 0x18, 0xb2, 0x32, 0x26, 0x40, 0x0b, 0x0c, 0x42, 0x5a, + 0xa8, 0x62, 0x57, 0xd5, 0xeb, 0x4e, 0x9e, 0x1d, 0x0c, 0x89, 0x62, 0xa0, 0x2f, 0x9f, 0x1b, 0x0a, + 0x6e, 0x6c, 0x5d, 0x80, 0x9c, 0x69, 0x61, 0x3b, 0x94, 0x88, 0x4a, 0xd1, 0x96, 0xa3, 0x18, 0xb2, + 0x32, 0x26, 0x40, 0x22, 0x49, 0x75, 0xc9, 0x30, 0x8b, 0x85, 0xa2, 0xd5, 0xdc, 0xf1, 0xf7, 0xc3, + 0x26, 0x5b, 0x46, 0x63, 0xde, 0x38, 0x28, 0x3d, 0xe6, 0x73, 0x8f, 0xd2, 0xc9, 0x5f, 0xfb, 0xc2, + 0xc3, 0x93, 0xdc, 0x34, 0xfc, 0xfd, 0xa9, 0x4b, 0xf8, 0x80, 0x0c, 0x3f, 0x47, 0xdd, 0xa0, 0x98, + 0x24, 0xed, 0x7c, 0x51, 0xd5, 0xeb, 0xe2, 0x19, 0xb2, 0xc2, 0x4b, 0xa8, 0x08, 0x83, 0x8e, 0xab, + 0xba, 0x4d, 0x87, 0x7f, 0x1c, 0x4c, 0xee, 0x64, 0x6a, 0x25, 0xd3, 0xa8, 0x6e, 0x52, 0x4c, 0x85, + 0x53, 0xa0, 0x0b, 0x30, 0xe8, 0x9a, 0xfb, 0xd8, 0xe0, 0x2a, 0xec, 0x6b, 0x7e, 0xd3, 0x73, 0x2a, + 0x46, 0x4d, 0x34, 0x52, 0xc5, 0x75, 0x5c, 0x63, 0x69, 0xd5, 0x9e, 0x4a, 0x56, 0x1f, 0xf4, 0x1b, + 0x61, 0xa5, 0xe5, 0xbe, 0x27, 0x21, 0xd7, 0x54, 0x94, 0x9f, 0xac, 0x8c, 0x79, 0xa0, 0x4d, 0x0a, + 0x41, 0x97, 0x42, 0x57, 0x12, 0xf9, 0x87, 0xf4, 0xee, 0xee, 0xd4, 0xfd, 0x80, 0x4d, 0x8b, 0xfd, + 0x89, 0xe0, 0x85, 0xc6, 0x0b, 0x90, 0x6b, 0x1a, 0x3b, 0xa6, 0x41, 0xdf, 0x0a, 0xf2, 0xfc, 0x9e, + 0xac, 0xef, 0x92, 0x41, 0xe3, 0x88, 0x62, 0xc8, 0xca, 0x98, 0x07, 0xba, 0xc8, 0x56, 0x01, 0x55, + 0x18, 0xf5, 0xb1, 0xe8, 0x44, 0xcd, 0xc4, 0x4e, 0xd4, 0xbb, 0xf8, 0x44, 0x3d, 0x1a, 0x6d, 0xc5, + 0x9f, 0xab, 0x23, 0x1e, 0x90, 0x90, 0xa1, 0x8b, 0x00, 0xbe, 0x7b, 0xa0, 0xfb, 0x14, 0xc3, 0x9d, + 0x07, 0xde, 0xf7, 0x31, 0x62, 0xbd, 0xe7, 0xd3, 0xa2, 0x77, 0xc2, 0x44, 0x43, 0x37, 0x2a, 0x0e, + 0xae, 0xef, 0x56, 0xb8, 0x82, 0x09, 0x4b, 0xfa, 0xa9, 0x97, 0xd2, 0x4a, 0x7f, 0xf6, 0x70, 0xf3, + 0xc6, 0x74, 0x81, 0xbb, 0xd0, 0x56, 0x96, 0xb2, 0x32, 0xde, 0xd0, 0x8d, 0x4d, 0x5c, 0xdf, 0x5d, + 0xf4, 0x60, 0xc5, 0xec, 0xfb, 0x3f, 0x39, 0x7d, 0x84, 0x4f, 0xd7, 0x23, 0xf2, 0x39, 0xba, 0x77, + 0xce, 0xa7, 0x19, 0x76, 0xc8, 0x9a, 0x44, 0x15, 0x05, 0xba, 0xa3, 0x91, 0x51, 0x7c, 0x00, 0x9b, + 0xe6, 0xaf, 0xfc, 0x87, 0x19, 0x49, 0xfe, 0x9c, 0x04, 0x83, 0x8b, 0x97, 0x37, 0x54, 0xdd, 0x46, + 0xcb, 0x30, 0xee, 0x5b, 0x4e, 0x78, 0x92, 0x9f, 0xbc, 0x79, 0x63, 0x3a, 0x1f, 0x35, 0x2e, 0x6f, + 0x96, 0xfb, 0x06, 0x2c, 0xa6, 0xf9, 0x72, 0xa7, 0x85, 0x6b, 0x88, 0x55, 0x0b, 0x8a, 0xdc, 0xba, + 0xac, 0x8d, 0x74, 0xb3, 0x0c, 0x43, 0x4c, 0x5a, 0x07, 0x15, 0x61, 0xc0, 0x22, 0x3f, 0xf8, 0xc1, + 0xc0, 0x54, 0x47, 0xe3, 0xa5, 0xf8, 0xde, 0x46, 0x26, 0x21, 0x91, 0x3f, 0x9c, 0x00, 0x58, 0xbc, + 0x7c, 0x79, 0xcb, 0xd6, 0xad, 0x3a, 0x76, 0x6f, 0x65, 0xcf, 0xb7, 0xe0, 0x68, 0x60, 0x95, 0x64, + 0x6b, 0x91, 0xde, 0xcf, 0xdc, 0xbc, 0x31, 0x7d, 0x32, 0xda, 0xfb, 0x00, 0x9a, 0xac, 0x4c, 0xf8, + 0xeb, 0x25, 0x5b, 0x6b, 0xcb, 0xb5, 0xea, 0xb8, 0x1e, 0xd7, 0x64, 0x67, 0xae, 0x01, 0xb4, 0x20, + 0xd7, 0x45, 0xc7, 0x6d, 0xaf, 0xda, 0x4d, 0x18, 0xf6, 0x55, 0xe2, 0xa0, 0x45, 0x48, 0xbb, 0xfc, + 0x37, 0xd7, 0xb0, 0xdc, 0x59, 0xc3, 0x82, 0x8c, 0x6b, 0xd9, 0xa3, 0x94, 0xff, 0x4c, 0x02, 0xf0, + 0x6d, 0xf6, 0xc7, 0xd3, 0xc4, 0x88, 0x2b, 0xe7, 0x8e, 0x37, 0x79, 0xa8, 0x54, 0x8d, 0x53, 0x47, + 0xf4, 0xf9, 0xd3, 0x09, 0x98, 0xd8, 0x16, 0x9e, 0xe7, 0xc7, 0x5e, 0x07, 0x1b, 0x30, 0x84, 0x0d, + 0xd7, 0xd6, 0xa9, 0x12, 0xc8, 0x68, 0x3f, 0xd2, 0x69, 0xb4, 0xdb, 0xf4, 0x89, 0x7e, 0xec, 0x46, + 0x6c, 0xba, 0x73, 0x36, 0x11, 0x6d, 0x7c, 0x30, 0x09, 0xf9, 0x4e, 0x94, 0x68, 0x01, 0xc6, 0x34, + 0x1b, 0x53, 0x40, 0x25, 0xb8, 0xf3, 0x57, 0x2a, 0xf8, 0x99, 0x65, 0x04, 0x41, 0x56, 0x46, 0x05, + 0x84, 0x47, 0x8f, 0x1a, 0x90, 0xb4, 0x8f, 0x98, 0x1d, 0xc1, 0xea, 0x31, 0xcf, 0x93, 0x79, 0xf8, + 0x10, 0x8d, 0x84, 0x19, 0xb0, 0xf8, 0x31, 0xea, 0x43, 0x69, 0x00, 0x79, 0x09, 0xc6, 0x74, 0x43, + 0x77, 0x75, 0xb5, 0x5e, 0xd9, 0x51, 0xeb, 0xaa, 0xa1, 0x1d, 0x26, 0x6b, 0x66, 0x2e, 0x9f, 0x37, + 0x1b, 0x61, 0x27, 0x2b, 0xa3, 0x1c, 0x52, 0x62, 0x00, 0x74, 0x11, 0x86, 0x44, 0x53, 0xa9, 0x43, + 0x65, 0x1b, 0x82, 0x3c, 0x90, 0xe0, 0xfd, 0x4c, 0x12, 0xc6, 0x15, 0x5c, 0xfd, 0xff, 0x43, 0xd1, + 0xdf, 0x50, 0xac, 0x02, 0xb0, 0xe9, 0x4e, 0x1c, 0xec, 0x21, 0x46, 0x83, 0x38, 0x8c, 0x0c, 0xe3, + 0xb0, 0xe8, 0xb8, 0x81, 0xf1, 0xb8, 0x91, 0x80, 0x6c, 0x70, 0x3c, 0xfe, 0x82, 0x46, 0x25, 0xb4, + 0xec, 0x7b, 0xa2, 0x14, 0xff, 0x44, 0x68, 0x07, 0x4f, 0xd4, 0x62, 0xbd, 0xdd, 0x5d, 0xd0, 0xff, + 0x48, 0xc0, 0xe0, 0x86, 0x6a, 0xab, 0x0d, 0x07, 0x69, 0x2d, 0x99, 0xa6, 0xd8, 0x7e, 0x6c, 0xf9, + 0x10, 0x34, 0xdf, 0xed, 0x88, 0x49, 0x34, 0x3f, 0xda, 0x26, 0xd1, 0xfc, 0x09, 0x18, 0x25, 0xcb, + 0xe1, 0xc0, 0x15, 0x06, 0xa2, 0xed, 0x91, 0xd2, 0x09, 0x9f, 0x4b, 0xb8, 0x9e, 0xad, 0x96, 0x2f, + 0x07, 0xef, 0x30, 0x0c, 0x13, 0x0c, 0xdf, 0x31, 0x13, 0xf2, 0x63, 0xfe, 0xb2, 0x34, 0x50, 0x29, + 0x2b, 0xd0, 0x50, 0xaf, 0x95, 0x59, 0x01, 0xad, 0x00, 0xda, 0xf3, 0x76, 0x46, 0x2a, 0xbe, 0x3a, + 0x09, 0xfd, 0x9d, 0x37, 0x6f, 0x4c, 0x9f, 0x60, 0xf4, 0xad, 0x38, 0xb2, 0x32, 0xee, 0x03, 0x05, + 0xb7, 0xc7, 0x01, 0x48, 0xbf, 0x2a, 0xec, 0xfa, 0x1c, 0x5b, 0xee, 0x1c, 0xbd, 0x79, 0x63, 0x7a, + 0x9c, 0x71, 0xf1, 0xeb, 0x64, 0x25, 0x43, 0x0a, 0x8b, 0xe4, 0x77, 0xc0, 0xb2, 0x3f, 0x2d, 0x01, + 0xf2, 0x5d, 0xbe, 0x82, 0x1d, 0x8b, 0xac, 0xcf, 0x48, 0x22, 0x1e, 0xc8, 0x9a, 0xa5, 0xee, 0x89, + 0xb8, 0x4f, 0x2f, 0x12, 0xf1, 0xc0, 0x4c, 0x79, 0xca, 0x77, 0x8f, 0x09, 0x3e, 0x8e, 0x6d, 0xee, + 0x1a, 0xce, 0x2e, 0x98, 0xba, 0xa0, 0x6e, 0xf1, 0x87, 0x47, 0xe4, 0x7f, 0x25, 0xc1, 0x89, 0x16, + 0x8b, 0xf2, 0x84, 0xfd, 0x4b, 0x80, 0xec, 0x40, 0x25, 0xff, 0xde, 0x1b, 0x13, 0xba, 0x6f, 0x03, + 0x1d, 0xb7, 0x5b, 0xfc, 0xee, 0xad, 0xf3, 0xf0, 0xec, 0xb2, 0xe2, 0x3f, 0x95, 0x60, 0x32, 0xd8, + 0xbc, 0xd7, 0x91, 0x35, 0xc8, 0x06, 0x5b, 0xe7, 0x5d, 0xb8, 0xa7, 0x97, 0x2e, 0x70, 0xe9, 0x43, + 0xf4, 0xe8, 0x39, 0x7f, 0xba, 0xb2, 0xbd, 0xb3, 0x47, 0x7b, 0xd6, 0x86, 0x90, 0x29, 0x3a, 0x6d, + 0x53, 0x74, 0x3c, 0xfe, 0x8f, 0x04, 0xa9, 0x0d, 0xd3, 0xac, 0x23, 0x13, 0xc6, 0x0d, 0xd3, 0xad, + 0x10, 0xcb, 0xc2, 0xd5, 0x0a, 0x5f, 0x74, 0x33, 0x3f, 0xb8, 0xd0, 0x9f, 0x92, 0xbe, 0x7d, 0x63, + 0xba, 0x95, 0x95, 0x32, 0x66, 0x98, 0x6e, 0x89, 0x42, 0xb6, 0xd8, 0x92, 0xfc, 0x9d, 0x30, 0x12, + 0x6e, 0x8c, 0x79, 0xc9, 0xe7, 0xfb, 0x6e, 0x2c, 0xcc, 0xe6, 0xe6, 0x8d, 0xe9, 0x49, 0x7f, 0xc6, + 0x78, 0x60, 0x59, 0xc9, 0xee, 0x04, 0x5a, 0x67, 0xd7, 0xbb, 0xbe, 0xfb, 0xc9, 0x69, 0xe9, 0xf4, + 0x17, 0x25, 0x00, 0x7f, 0xe7, 0x01, 0x3d, 0x04, 0xc7, 0x4b, 0xeb, 0x6b, 0x8b, 0x95, 0xcd, 0xad, + 0xf9, 0xad, 0xed, 0xcd, 0xca, 0xf6, 0xda, 0xe6, 0x46, 0x79, 0x61, 0xf9, 0xc2, 0x72, 0x79, 0xd1, + 0xdf, 0x1e, 0x77, 0x2c, 0xac, 0xe9, 0xbb, 0x3a, 0xae, 0xa2, 0xfb, 0x60, 0x32, 0x8c, 0x4d, 0x4a, + 0xe5, 0xc5, 0x9c, 0x54, 0xc8, 0xbe, 0x7a, 0x7d, 0x26, 0xcd, 0x72, 0x31, 0x5c, 0x45, 0xa7, 0xe0, + 0x68, 0x2b, 0xde, 0xf2, 0xda, 0x52, 0x2e, 0x51, 0x18, 0x79, 0xf5, 0xfa, 0x4c, 0xc6, 0x4b, 0xda, + 0x90, 0x0c, 0x28, 0x88, 0xc9, 0xf9, 0x25, 0x0b, 0xf0, 0xea, 0xf5, 0x99, 0x41, 0xa6, 0xc0, 0x42, + 0xea, 0xfd, 0x9f, 0x9e, 0x3a, 0x52, 0xba, 0xd0, 0x71, 0x03, 0xfc, 0xa1, 0xae, 0xba, 0xbb, 0xe6, + 0x6d, 0x6a, 0x87, 0x77, 0xbd, 0xff, 0x78, 0xa8, 0xe3, 0xae, 0x77, 0x0d, 0x1b, 0xd8, 0xd1, 0x9d, + 0x43, 0xed, 0x7a, 0xf7, 0xb4, 0x93, 0x2e, 0xff, 0xce, 0x00, 0x64, 0x97, 0x58, 0x2b, 0x64, 0x20, + 0x30, 0x7a, 0x13, 0x0c, 0x5a, 0x34, 0x8c, 0x78, 0xc7, 0x68, 0x1d, 0x0c, 0x9e, 0x05, 0x1b, 0xef, + 0x2e, 0x17, 0x0b, 0x3d, 0x0e, 0xbf, 0xcc, 0xc1, 0xee, 0x98, 0xf9, 0xb7, 0xa6, 0xb2, 0x7d, 0xed, + 0xf7, 0xb0, 0x9c, 0x85, 0x6f, 0xad, 0x44, 0xf9, 0xc9, 0xec, 0x5e, 0xc8, 0x16, 0x81, 0xb0, 0xdb, + 0x61, 0xef, 0x95, 0xe0, 0x28, 0xc5, 0xf2, 0x03, 0x31, 0xc5, 0x14, 0xc9, 0xfe, 0xe9, 0x4e, 0x5d, + 0x58, 0x51, 0x1d, 0xff, 0xae, 0x07, 0xbb, 0xcf, 0x75, 0x0f, 0x0f, 0x84, 0x27, 0x03, 0x8d, 0x47, + 0xd9, 0xca, 0xca, 0x44, 0xbd, 0x85, 0xd2, 0x41, 0x4b, 0xa1, 0x0b, 0x7d, 0xa9, 0xfe, 0xb6, 0xda, + 0x83, 0x97, 0xfb, 0x9e, 0x85, 0x61, 0xdf, 0x97, 0x38, 0xfc, 0xff, 0x53, 0xf4, 0x1e, 0x3b, 0x82, + 0xc4, 0xe8, 0x7d, 0x12, 0x1c, 0xf5, 0xa3, 0x79, 0x90, 0x2d, 0xfb, 0x3f, 0x1e, 0x0f, 0xf6, 0xb1, + 0x10, 0x8a, 0x2a, 0xa7, 0x2d, 0x5f, 0x59, 0x99, 0x6c, 0xb6, 0x92, 0x92, 0x25, 0xd8, 0x48, 0xd0, + 0xb3, 0x3a, 0x79, 0xf1, 0xa9, 0xba, 0xde, 0x5d, 0x73, 0x98, 0x01, 0xfb, 0xdf, 0x02, 0x96, 0x69, + 0xbb, 0xb8, 0x4a, 0x37, 0xe4, 0xd2, 0x8a, 0x57, 0x96, 0xd7, 0x00, 0xb5, 0x0e, 0x6e, 0xf4, 0x02, + 0x63, 0xc6, 0xbf, 0xc0, 0x38, 0x09, 0x03, 0xc1, 0x2b, 0x7e, 0xac, 0x50, 0x4c, 0xbf, 0x9f, 0x87, + 0xcf, 0x5b, 0x3e, 0xe7, 0xff, 0x45, 0x02, 0x4e, 0x07, 0x8f, 0x87, 0x5e, 0x6a, 0x62, 0xfb, 0xc0, + 0x9b, 0xa2, 0x96, 0x5a, 0xd3, 0x8d, 0xe0, 0x1b, 0xa0, 0x13, 0xc1, 0x80, 0x4f, 0x71, 0x85, 0x9e, + 0x64, 0x03, 0x86, 0x37, 0xd4, 0x1a, 0x56, 0xf0, 0x4b, 0x4d, 0xec, 0xb8, 0x6d, 0x2e, 0x99, 0x1f, + 0x83, 0x41, 0x73, 0x77, 0x57, 0x1c, 0x69, 0xa7, 0x14, 0x5e, 0x22, 0x5d, 0xae, 0xeb, 0x0d, 0x9d, + 0xdd, 0x06, 0x4b, 0x29, 0xac, 0x80, 0xa6, 0x61, 0x58, 0x33, 0x9b, 0x06, 0x9f, 0x71, 0xf9, 0x94, + 0xf8, 0x00, 0x44, 0xd3, 0x60, 0x33, 0x4e, 0x7e, 0x06, 0xb2, 0xac, 0x3d, 0x1e, 0x71, 0x4f, 0x40, + 0x9a, 0x5e, 0xa7, 0xf2, 0x5b, 0x1d, 0x22, 0xe5, 0x4b, 0xec, 0x42, 0x3a, 0xe3, 0xc2, 0x1a, 0x66, + 0x85, 0x52, 0xa9, 0xa3, 0x2a, 0x4f, 0xc5, 0xbb, 0x06, 0xa6, 0x28, 0x4f, 0x8d, 0xbf, 0x39, 0x00, + 0x47, 0xf9, 0x09, 0x9d, 0x6a, 0xe9, 0x73, 0x7b, 0xae, 0x2b, 0x5e, 0x09, 0x01, 0x4f, 0x75, 0x55, + 0x4b, 0x97, 0x0f, 0x20, 0x75, 0xd1, 0x75, 0x2d, 0x74, 0x1a, 0x06, 0xec, 0x66, 0x1d, 0x8b, 0x1d, + 0x1f, 0x6f, 0x4f, 0x5e, 0xb5, 0xf4, 0x59, 0x82, 0xa0, 0x34, 0xeb, 0x58, 0x61, 0x28, 0xa8, 0x0c, + 0xd3, 0xbb, 0xcd, 0x7a, 0xfd, 0xa0, 0x52, 0xc5, 0xf4, 0x7f, 0xf7, 0x78, 0x5f, 0xbf, 0xc7, 0xd7, + 0x2c, 0x55, 0x7c, 0x43, 0x8f, 0xe8, 0xe6, 0x24, 0x45, 0x5b, 0xa4, 0x58, 0xe2, 0xcb, 0xf7, 0x65, + 0x81, 0x23, 0xff, 0x5e, 0x02, 0xd2, 0x82, 0x35, 0xbd, 0x21, 0x8e, 0xeb, 0x58, 0x73, 0x4d, 0x71, + 0x62, 0xe2, 0x95, 0x11, 0x82, 0x64, 0x8d, 0x0f, 0x51, 0xe6, 0xe2, 0x11, 0x85, 0x14, 0x08, 0xcc, + 0xbb, 0xb7, 0x4f, 0x60, 0x56, 0x93, 0x8c, 0x5a, 0xca, 0x32, 0xc5, 0xd2, 0xec, 0xe2, 0x11, 0x85, + 0x96, 0x50, 0x1e, 0x06, 0xc9, 0xcc, 0x70, 0xd9, 0x87, 0x09, 0x09, 0x9c, 0x97, 0xd1, 0x31, 0x18, + 0xb0, 0x54, 0x57, 0x63, 0x57, 0xea, 0x48, 0x05, 0x2b, 0xa2, 0x27, 0x60, 0x90, 0x3d, 0x08, 0x8d, + 0xfe, 0x63, 0x0c, 0xa2, 0x0c, 0xf6, 0xe5, 0x2d, 0x22, 0xf7, 0x86, 0xea, 0xba, 0xd8, 0x36, 0x08, + 0x43, 0x86, 0x8e, 0x10, 0xa4, 0x76, 0xcc, 0xea, 0x01, 0xff, 0x67, 0x1d, 0xf4, 0x37, 0xff, 0xef, + 0x00, 0xd4, 0x1e, 0x2a, 0xb4, 0x92, 0xfd, 0x8f, 0xa2, 0xac, 0x00, 0x96, 0x08, 0x52, 0x19, 0x26, + 0xd4, 0x6a, 0x55, 0x67, 0xff, 0x37, 0xa3, 0xb2, 0xa3, 0x53, 0x0f, 0xe1, 0xd0, 0xff, 0x40, 0xd5, + 0x69, 0x2c, 0x90, 0x4f, 0x50, 0xe2, 0xf8, 0xa5, 0x0c, 0x0c, 0x59, 0x4c, 0x28, 0xf9, 0x3c, 0x8c, + 0xb7, 0x48, 0x4a, 0xe4, 0xdb, 0xd7, 0x8d, 0xaa, 0x78, 0xcc, 0x40, 0x7e, 0x13, 0x18, 0xfd, 0x7a, + 0x1e, 0x3b, 0x8b, 0xa2, 0xbf, 0x4b, 0xef, 0xee, 0xfc, 0xf0, 0x6b, 0x34, 0xf0, 0xf0, 0x4b, 0xb5, + 0xf4, 0x52, 0x86, 0xf2, 0xe7, 0xcf, 0xbd, 0xe6, 0x79, 0x05, 0x7b, 0xea, 0x35, 0x6b, 0xda, 0x35, + 0x12, 0xa5, 0x45, 0xf4, 0x25, 0x55, 0xaa, 0xa5, 0x3b, 0xd4, 0x1c, 0xfd, 0xaf, 0xf9, 0x39, 0xe7, + 0x03, 0xbf, 0xe9, 0x23, 0xb0, 0xd4, 0xd2, 0xfc, 0xc6, 0xb2, 0x67, 0xc7, 0x5f, 0x4e, 0xc0, 0xc9, + 0x80, 0x1d, 0x07, 0x90, 0x5b, 0xcd, 0xb9, 0xd0, 0xde, 0xe2, 0x7b, 0x78, 0xfc, 0x75, 0x09, 0x52, + 0x04, 0x1f, 0xc5, 0x7c, 0xbb, 0x3f, 0xff, 0xab, 0x5f, 0xfb, 0x27, 0x72, 0xf8, 0xd4, 0x2a, 0x34, + 0x2a, 0x94, 0x49, 0xe9, 0x7d, 0xbd, 0xeb, 0x2f, 0xe7, 0x7f, 0xc8, 0xd0, 0xb9, 0x75, 0x6a, 0x8c, + 0xea, 0xf0, 0x5b, 0x67, 0x41, 0xee, 0x90, 0xf2, 0x30, 0x8f, 0xd9, 0x3d, 0x89, 0xea, 0xc3, 0x1d, + 0x77, 0xba, 0xff, 0xdf, 0x6d, 0x04, 0x7b, 0x4c, 0xc7, 0xae, 0xc1, 0xb1, 0xe7, 0x48, 0xdb, 0xfe, + 0x32, 0x59, 0x38, 0xf6, 0x63, 0xde, 0x69, 0x9e, 0xc4, 0xff, 0x01, 0x98, 0x38, 0xa9, 0x03, 0x5f, + 0x3e, 0xbe, 0x40, 0xbc, 0x6f, 0xb6, 0x63, 0xbc, 0x98, 0x0d, 0x04, 0x0b, 0x25, 0x40, 0x29, 0xff, + 0xb2, 0x04, 0xc7, 0x5b, 0x9a, 0xe6, 0x3e, 0x7e, 0xa9, 0xcd, 0x53, 0x85, 0x43, 0x65, 0x36, 0x4b, + 0x6d, 0x84, 0xbd, 0x3f, 0x56, 0x58, 0x26, 0x45, 0x48, 0xda, 0xa7, 0xe1, 0x68, 0x58, 0x58, 0xa1, + 0xa6, 0x7b, 0x61, 0x34, 0xbc, 0x23, 0xcc, 0xd5, 0x35, 0x12, 0xda, 0x13, 0x96, 0x2b, 0x51, 0x3d, + 0x7b, 0x7d, 0x2d, 0x43, 0xc6, 0x43, 0xe5, 0x29, 0x70, 0xcf, 0x5d, 0xf5, 0x29, 0xe5, 0x0f, 0x4b, + 0x30, 0x13, 0x6e, 0x21, 0x90, 0x0c, 0xf5, 0x27, 0xec, 0x2d, 0x1b, 0xe2, 0x37, 0x24, 0xb8, 0xab, + 0x8b, 0x4c, 0x5c, 0x01, 0x2f, 0xc3, 0x64, 0x60, 0x27, 0x40, 0xb8, 0x70, 0x31, 0xec, 0xa7, 0xe3, + 0xd3, 0x50, 0x6f, 0xe1, 0x7b, 0x07, 0x51, 0xca, 0x67, 0x7f, 0x7f, 0x7a, 0xa2, 0xb5, 0xce, 0x51, + 0x26, 0x5a, 0x57, 0xef, 0xb7, 0xd0, 0x3e, 0x5e, 0x93, 0xe0, 0x81, 0x70, 0x57, 0xdb, 0xe4, 0xb3, + 0x3f, 0xaa, 0x71, 0xf8, 0xf7, 0x12, 0x9c, 0xee, 0x45, 0x38, 0x3e, 0x20, 0x3b, 0x30, 0xe1, 0x67, + 0xda, 0xd1, 0xf1, 0xe8, 0x2b, 0x7f, 0x67, 0x56, 0x8a, 0x3c, 0x6e, 0xb7, 0x41, 0xf1, 0x16, 0x9f, + 0x58, 0xc1, 0x21, 0xf7, 0x94, 0x1c, 0xde, 0xcd, 0x15, 0x4a, 0x0e, 0xed, 0xe7, 0xb6, 0x19, 0x8b, + 0x44, 0x9b, 0xb1, 0xf0, 0x53, 0x73, 0xf9, 0x0a, 0xf7, 0x5b, 0x6d, 0xf6, 0xe0, 0xde, 0x06, 0x13, + 0x6d, 0x4c, 0x99, 0xcf, 0xea, 0x3e, 0x2c, 0x59, 0x41, 0xad, 0xc6, 0x2a, 0x1f, 0xc0, 0x34, 0x6d, + 0xb7, 0x8d, 0xa2, 0x6f, 0x77, 0x97, 0x1b, 0xdc, 0xb7, 0xb4, 0x6d, 0x9a, 0xf7, 0x7d, 0x19, 0x06, + 0xd9, 0x38, 0xf3, 0xee, 0x1e, 0xc2, 0x50, 0x38, 0x03, 0xf9, 0xe7, 0x85, 0x2f, 0x5b, 0x14, 0x62, + 0xb7, 0x9f, 0x43, 0xbd, 0xf4, 0xf5, 0x16, 0xcd, 0xa1, 0x80, 0x32, 0xbe, 0x21, 0xbc, 0x5a, 0x7b, + 0xe9, 0xb8, 0x3a, 0xb4, 0x5b, 0xe6, 0xd5, 0x98, 0x6e, 0x6e, 0xaf, 0xfb, 0xfa, 0x45, 0xe1, 0xbe, + 0xbc, 0x3e, 0xc5, 0xb8, 0xaf, 0x1f, 0x8d, 0xea, 0x3d, 0x47, 0x16, 0x23, 0xe6, 0x9f, 0x47, 0x47, + 0xf6, 0x5d, 0x09, 0x4e, 0xd0, 0xbe, 0x05, 0x37, 0x22, 0xfa, 0x55, 0xf9, 0x43, 0x80, 0x1c, 0x5b, + 0xab, 0xb4, 0x9d, 0xdd, 0x39, 0xc7, 0xd6, 0x2e, 0x87, 0xe2, 0xcb, 0x43, 0x80, 0xaa, 0xa1, 0xed, + 0x26, 0x8a, 0xcd, 0x6e, 0xc9, 0xe5, 0xaa, 0x81, 0xdd, 0x8c, 0x36, 0xc3, 0x99, 0xba, 0x05, 0xc3, + 0xf9, 0x75, 0x09, 0x0a, 0xed, 0xba, 0xcc, 0x87, 0x4f, 0x87, 0x63, 0xa1, 0x43, 0x82, 0xe8, 0x08, + 0x3e, 0xd4, 0xcb, 0x56, 0x4e, 0x64, 0x1a, 0x1d, 0xb5, 0xf1, 0xed, 0xce, 0x03, 0xa6, 0xc3, 0x16, + 0xda, 0x9a, 0x59, 0xff, 0xc8, 0xa6, 0xcf, 0x17, 0x5a, 0xfc, 0xea, 0x9f, 0x8b, 0xdc, 0xfb, 0x1a, + 0x4c, 0x75, 0x90, 0xfa, 0x76, 0xc7, 0xbd, 0xbd, 0x8e, 0x83, 0x79, 0xab, 0xd3, 0xf7, 0xc7, 0xf9, + 0x4c, 0x08, 0xdf, 0xc0, 0x0e, 0xac, 0xc5, 0xda, 0x3d, 0xe1, 0x92, 0xdf, 0x02, 0x77, 0xb4, 0xa5, + 0xe2, 0xb2, 0x15, 0x21, 0xb5, 0xa7, 0x3b, 0x2e, 0x17, 0xeb, 0xbe, 0x4e, 0x62, 0x45, 0xa8, 0x29, + 0x8d, 0x8c, 0x20, 0x47, 0x59, 0x6f, 0x98, 0x66, 0x9d, 0x8b, 0x21, 0x5f, 0x82, 0xf1, 0x00, 0x8c, + 0x37, 0x72, 0x0e, 0x52, 0x96, 0xc9, 0x3f, 0x4f, 0x30, 0x7c, 0xe6, 0x64, 0xc7, 0xdd, 0x7b, 0xd3, + 0xac, 0xf3, 0x6e, 0x53, 0x7c, 0x79, 0x12, 0x10, 0x63, 0x46, 0x37, 0xf2, 0x45, 0x13, 0x9b, 0x30, + 0x11, 0x82, 0xf2, 0x46, 0x7e, 0xa0, 0x43, 0x82, 0x33, 0xdf, 0x3e, 0x0a, 0x03, 0x94, 0x2b, 0xfa, + 0x98, 0x04, 0x10, 0x38, 0x11, 0x9e, 0xed, 0xc4, 0xa6, 0xfd, 0x9a, 0xb8, 0x30, 0xd7, 0x33, 0x3e, + 0xcf, 0xd9, 0x4e, 0xbf, 0xfb, 0xdf, 0x7c, 0xeb, 0x23, 0x89, 0x7b, 0x90, 0x3c, 0xd7, 0x61, 0x35, + 0x1e, 0x98, 0x2f, 0x9f, 0x09, 0xbd, 0x7d, 0x7f, 0xb8, 0xb7, 0xa6, 0x84, 0x64, 0xb3, 0xbd, 0xa2, + 0x73, 0xc1, 0xce, 0x53, 0xc1, 0xce, 0xa2, 0xc7, 0xe2, 0x05, 0x9b, 0x7b, 0x47, 0x78, 0xd2, 0xbc, + 0x0b, 0xfd, 0x8e, 0x04, 0x93, 0xed, 0x96, 0x74, 0xe8, 0xc9, 0xde, 0xa4, 0x68, 0x4d, 0x29, 0x0a, + 0x4f, 0x1d, 0x82, 0x92, 0x77, 0x65, 0x89, 0x76, 0x65, 0x1e, 0x3d, 0x73, 0x88, 0xae, 0xcc, 0x05, + 0xf7, 0xf7, 0xff, 0x97, 0x04, 0x77, 0x76, 0x5d, 0x21, 0xa1, 0xf9, 0xde, 0xa4, 0xec, 0x92, 0x3b, + 0x15, 0x4a, 0x3f, 0x08, 0x0b, 0xde, 0xe3, 0xe7, 0x68, 0x8f, 0x2f, 0xa1, 0xe5, 0xc3, 0xf4, 0xb8, + 0xed, 0x21, 0x0a, 0xfa, 0xad, 0xf0, 0xcd, 0xc2, 0xee, 0xe6, 0xd4, 0xb2, 0xf0, 0x88, 0x99, 0x18, + 0xad, 0x49, 0xad, 0xfc, 0x02, 0xed, 0x82, 0x82, 0x36, 0x7e, 0xc0, 0x41, 0x9b, 0x7b, 0x47, 0xd8, + 0xf1, 0xbf, 0x0b, 0xfd, 0x4f, 0xa9, 0xfd, 0x45, 0xc1, 0x27, 0xba, 0x8a, 0xd8, 0x79, 0x51, 0x55, + 0x78, 0xb2, 0x7f, 0x42, 0xde, 0xc9, 0x06, 0xed, 0x64, 0x0d, 0xe1, 0x5b, 0xdd, 0xc9, 0xb6, 0x83, + 0x88, 0xbe, 0x2a, 0xc1, 0x64, 0xbb, 0x35, 0x49, 0xcc, 0xb4, 0xec, 0xb2, 0xc8, 0x8a, 0x99, 0x96, + 0xdd, 0x16, 0x40, 0xf2, 0x9b, 0x68, 0xe7, 0xcf, 0xa1, 0xc7, 0x3b, 0x75, 0xbe, 0xeb, 0x28, 0x92, + 0xb9, 0xd8, 0x35, 0xc9, 0x8f, 0x99, 0x8b, 0xbd, 0xac, 0x63, 0x62, 0xe6, 0x62, 0x4f, 0x6b, 0x8c, + 0xf8, 0xb9, 0xe8, 0xf5, 0xac, 0xc7, 0x61, 0x74, 0xd0, 0x97, 0x25, 0x18, 0x09, 0x65, 0xc4, 0xe8, + 0xd1, 0xae, 0x82, 0xb6, 0x5b, 0x30, 0x14, 0xce, 0xf4, 0x43, 0xc2, 0xfb, 0xb2, 0x4c, 0xfb, 0xb2, + 0x80, 0xe6, 0x0f, 0xd3, 0x97, 0xf0, 0x59, 0xe9, 0xd7, 0x25, 0x98, 0x68, 0x93, 0x65, 0xc6, 0xcc, + 0xc2, 0xce, 0x49, 0x73, 0xe1, 0xc9, 0xfe, 0x09, 0x79, 0xaf, 0x2e, 0xd0, 0x5e, 0xfd, 0x04, 0x7a, + 0xfa, 0x30, 0xbd, 0x0a, 0xc4, 0xe7, 0x1b, 0xfe, 0xbd, 0xab, 0x40, 0x3b, 0xe8, 0x5c, 0x9f, 0x82, + 0x89, 0x0e, 0x3d, 0xd1, 0x37, 0x1d, 0xef, 0xcf, 0xf3, 0xb4, 0x3f, 0xcf, 0xa1, 0xf5, 0x1f, 0xac, + 0x3f, 0xad, 0x61, 0xfd, 0xf3, 0xad, 0x2f, 0x00, 0xbb, 0x5b, 0x51, 0xdb, 0x64, 0xb5, 0xf0, 0x58, + 0x5f, 0x34, 0xbc, 0x53, 0x4f, 0xd2, 0x4e, 0x9d, 0x41, 0x8f, 0x74, 0xea, 0x54, 0xe0, 0x72, 0x9d, + 0x6e, 0xec, 0x9a, 0x73, 0xef, 0x60, 0x29, 0xf0, 0xbb, 0xd0, 0x4f, 0x89, 0x8b, 0x4d, 0xa7, 0xba, + 0xb6, 0x1b, 0xc8, 0x63, 0x0b, 0x0f, 0xf4, 0x80, 0xc9, 0xe5, 0xba, 0x87, 0xca, 0x35, 0x85, 0x4e, + 0x76, 0x92, 0x8b, 0xe4, 0xb2, 0xe8, 0x03, 0x92, 0x77, 0x17, 0xf2, 0x74, 0x77, 0xde, 0xc1, 0x64, + 0xb7, 0xf0, 0x60, 0x4f, 0xb8, 0x5c, 0x92, 0xfb, 0xa8, 0x24, 0x33, 0x68, 0xaa, 0xa3, 0x24, 0x2c, + 0xf5, 0xbd, 0xd5, 0x37, 0x07, 0x5e, 0x3d, 0x0e, 0xd3, 0x1d, 0x5a, 0x74, 0xaf, 0xc5, 0x9c, 0x71, + 0x75, 0x79, 0x08, 0x1b, 0xfb, 0xd0, 0xb5, 0xc3, 0xd3, 0xda, 0xc3, 0x3f, 0x7f, 0xed, 0xed, 0x40, + 0xec, 0x5f, 0xa7, 0x00, 0xad, 0x3a, 0xb5, 0x05, 0x1b, 0xb3, 0x7f, 0x7a, 0xc7, 0x67, 0x79, 0xe4, + 0x85, 0x97, 0xf4, 0x03, 0xbd, 0xf0, 0x5a, 0x0d, 0xbd, 0x99, 0x4a, 0xf4, 0xf7, 0x2e, 0xb3, 0xe7, + 0x87, 0x53, 0xc9, 0x1f, 0xca, 0xc3, 0xa9, 0xf6, 0xf7, 0xaa, 0x53, 0xb7, 0xee, 0x01, 0xc6, 0xc0, + 0x61, 0x1f, 0xa1, 0xf0, 0xf7, 0x90, 0x83, 0x5d, 0xde, 0x43, 0xe6, 0x3b, 0x3e, 0x7a, 0xe4, 0xd4, + 0xe8, 0xac, 0xf8, 0x80, 0xef, 0x50, 0x6f, 0x37, 0x61, 0xf9, 0x17, 0x7e, 0xfd, 0x2d, 0x84, 0x93, + 0x50, 0x68, 0x35, 0x27, 0x6f, 0x52, 0x7f, 0x24, 0x09, 0xb9, 0x55, 0xa7, 0x56, 0xae, 0xea, 0xee, + 0x6d, 0xb2, 0xb5, 0x67, 0x3a, 0x3f, 0x6a, 0x41, 0x37, 0x6f, 0x4c, 0x8f, 0x32, 0x9d, 0x76, 0xd1, + 0x64, 0x03, 0xc6, 0x22, 0x4f, 0x89, 0xb9, 0x65, 0x2d, 0x1e, 0xe6, 0x45, 0x73, 0x84, 0x95, 0x4c, + 0xdf, 0x20, 0x04, 0xec, 0x1b, 0x5d, 0x6b, 0x6f, 0xcc, 0xcc, 0xa0, 0x2e, 0xde, 0xce, 0x17, 0x80, + 0xfe, 0x98, 0x15, 0x20, 0x1f, 0x1d, 0x14, 0x6f, 0xc4, 0xfe, 0x50, 0x82, 0xe1, 0x55, 0x47, 0xa4, + 0x82, 0xf8, 0xc7, 0xf4, 0xfd, 0xd1, 0x13, 0xde, 0x77, 0x58, 0x93, 0xbd, 0xd9, 0xad, 0xf8, 0x36, + 0xab, 0xaf, 0x84, 0xa3, 0x30, 0x11, 0xe8, 0xa7, 0xd7, 0xff, 0xdf, 0x4e, 0x50, 0xff, 0x58, 0xc2, + 0x35, 0xdd, 0xf0, 0xb2, 0x48, 0xfc, 0x17, 0xf5, 0x75, 0x85, 0xaf, 0xe7, 0xd4, 0x61, 0xf5, 0xbc, + 0x4f, 0x1d, 0x44, 0x44, 0x9f, 0xde, 0xc6, 0xd7, 0x6a, 0xeb, 0xdb, 0x1f, 0xa9, 0x8f, 0xcf, 0xea, + 0x44, 0x5e, 0xf8, 0xc8, 0x6f, 0x48, 0x30, 0xb2, 0xea, 0xd4, 0xb6, 0x8d, 0xea, 0xff, 0xf3, 0xf6, + 0xbb, 0x0b, 0x47, 0x43, 0x3d, 0xbd, 0x4d, 0x2a, 0x3d, 0xf3, 0x5a, 0x0a, 0x92, 0xab, 0x4e, 0x0d, + 0xbd, 0x04, 0x63, 0xd1, 0xa4, 0xa1, 0x63, 0x2e, 0xd8, 0x1a, 0x11, 0x3a, 0xaf, 0xd7, 0x3a, 0x47, + 0x0f, 0xb4, 0x0f, 0x23, 0xe1, 0xc8, 0x71, 0xaa, 0x0b, 0x93, 0x10, 0x66, 0xe1, 0x91, 0x5e, 0x31, + 0xbd, 0xc6, 0xde, 0x0e, 0x69, 0xcf, 0xe9, 0xdd, 0xdd, 0x85, 0x5a, 0x20, 0x75, 0xce, 0x6e, 0xdb, + 0xb8, 0x15, 0xa2, 0xbd, 0xa8, 0x4b, 0xe9, 0xa6, 0xbd, 0x08, 0x6e, 0x57, 0xed, 0x75, 0x9a, 0x5a, + 0x3b, 0x00, 0x81, 0x79, 0x70, 0x6f, 0x17, 0x0e, 0x3e, 0x5a, 0xe1, 0xe1, 0x9e, 0xd0, 0xbc, 0x43, + 0xa7, 0x5b, 0x9c, 0x8c, 0xff, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd5, 0xca, 0x34, 0x9e, 0x6a, 0x94, 0x00, 0x00, } r := bytes.NewReader(gzipped) From 210f6ddf57ca578240c4d8313950e8c6bcfa9b24 Mon Sep 17 00:00:00 2001 From: Colin Axner Date: Wed, 11 Nov 2020 18:56:56 +0100 Subject: [PATCH 2/3] fix build --- x/ibc/core/02-client/types/genesis_test.go | 18 +++++----- .../03-connection/keeper/handshake_test.go | 1 - .../07-tendermint/types/upgrade_test.go | 35 +++++++++---------- 3 files changed, 26 insertions(+), 28 deletions(-) diff --git a/x/ibc/core/02-client/types/genesis_test.go b/x/ibc/core/02-client/types/genesis_test.go index 54a5587b469f..d6caca0e68a0 100644 --- a/x/ibc/core/02-client/types/genesis_test.go +++ b/x/ibc/core/02-client/types/genesis_test.go @@ -69,7 +69,7 @@ func (suite *TypesTestSuite) TestValidateGenesis() { genState: types.NewGenesisState( []types.IdentifiedClientState{ types.NewIdentifiedClientState( - clientID, ibctmtypes.NewClientState(chainID, ibctesting.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + clientID, ibctmtypes.NewClientState(chainID, ibctesting.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), ), types.NewIdentifiedClientState( exported.Localhost, localhosttypes.NewClientState("chainID", clientHeight), @@ -98,7 +98,7 @@ func (suite *TypesTestSuite) TestValidateGenesis() { genState: types.NewGenesisState( []types.IdentifiedClientState{ types.NewIdentifiedClientState( - "/~@$*", ibctmtypes.NewClientState(chainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + "/~@$*", ibctmtypes.NewClientState(chainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), ), types.NewIdentifiedClientState( exported.Localhost, localhosttypes.NewClientState("chainID", clientHeight), @@ -127,7 +127,7 @@ func (suite *TypesTestSuite) TestValidateGenesis() { genState: types.NewGenesisState( []types.IdentifiedClientState{ types.NewIdentifiedClientState( - clientID, ibctmtypes.NewClientState(chainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + clientID, ibctmtypes.NewClientState(chainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), ), types.NewIdentifiedClientState(exported.Localhost, localhosttypes.NewClientState("chaindID", types.ZeroHeight())), }, @@ -142,7 +142,7 @@ func (suite *TypesTestSuite) TestValidateGenesis() { genState: types.NewGenesisState( []types.IdentifiedClientState{ types.NewIdentifiedClientState( - clientID, ibctmtypes.NewClientState(chainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + clientID, ibctmtypes.NewClientState(chainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), ), types.NewIdentifiedClientState( exported.Localhost, localhosttypes.NewClientState("chaindID", clientHeight), @@ -171,7 +171,7 @@ func (suite *TypesTestSuite) TestValidateGenesis() { genState: types.NewGenesisState( []types.IdentifiedClientState{ types.NewIdentifiedClientState( - clientID, ibctmtypes.NewClientState(chainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + clientID, ibctmtypes.NewClientState(chainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), ), types.NewIdentifiedClientState( exported.Localhost, localhosttypes.NewClientState("chaindID", clientHeight), @@ -200,7 +200,7 @@ func (suite *TypesTestSuite) TestValidateGenesis() { genState: types.NewGenesisState( []types.IdentifiedClientState{ types.NewIdentifiedClientState( - clientID, ibctmtypes.NewClientState(chainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + clientID, ibctmtypes.NewClientState(chainID, ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), ), types.NewIdentifiedClientState( exported.Localhost, localhosttypes.NewClientState("chaindID", clientHeight), @@ -229,7 +229,7 @@ func (suite *TypesTestSuite) TestValidateGenesis() { genState: types.NewGenesisState( []types.IdentifiedClientState{ types.NewIdentifiedClientState( - clientID, ibctmtypes.NewClientState(chainID, ibctesting.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + clientID, ibctmtypes.NewClientState(chainID, ibctesting.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), ), types.NewIdentifiedClientState( exported.Localhost, localhosttypes.NewClientState("chainID", clientHeight), @@ -258,7 +258,7 @@ func (suite *TypesTestSuite) TestValidateGenesis() { genState: types.NewGenesisState( []types.IdentifiedClientState{ types.NewIdentifiedClientState( - clientID, ibctmtypes.NewClientState(chainID, ibctesting.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + clientID, ibctmtypes.NewClientState(chainID, ibctesting.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), ), types.NewIdentifiedClientState( exported.Localhost, localhosttypes.NewClientState("chainID", clientHeight), @@ -287,7 +287,7 @@ func (suite *TypesTestSuite) TestValidateGenesis() { genState: types.NewGenesisState( []types.IdentifiedClientState{ types.NewIdentifiedClientState( - clientID, ibctmtypes.NewClientState(chainID, ibctesting.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), + clientID, ibctmtypes.NewClientState(chainID, ibctesting.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false), ), types.NewIdentifiedClientState( exported.Localhost, localhosttypes.NewClientState("chainID", clientHeight), diff --git a/x/ibc/core/03-connection/keeper/handshake_test.go b/x/ibc/core/03-connection/keeper/handshake_test.go index cc5d69ed5426..2ecdae5952b8 100644 --- a/x/ibc/core/03-connection/keeper/handshake_test.go +++ b/x/ibc/core/03-connection/keeper/handshake_test.go @@ -8,7 +8,6 @@ import ( host "github.com/cosmos/cosmos-sdk/x/ibc/core/24-host" "github.com/cosmos/cosmos-sdk/x/ibc/core/exported" ibctmtypes "github.com/cosmos/cosmos-sdk/x/ibc/light-clients/07-tendermint/types" - ibctesting "github.com/cosmos/cosmos-sdk/x/ibc/testing" ) // TestConnOpenInit - chainA initializes (INIT state) a connection with diff --git a/x/ibc/light-clients/07-tendermint/types/upgrade_test.go b/x/ibc/light-clients/07-tendermint/types/upgrade_test.go index 5f22771f5af8..d01a15fa9b40 100644 --- a/x/ibc/light-clients/07-tendermint/types/upgrade_test.go +++ b/x/ibc/light-clients/07-tendermint/types/upgrade_test.go @@ -5,7 +5,6 @@ import ( commitmenttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/23-commitment/types" "github.com/cosmos/cosmos-sdk/x/ibc/core/exported" "github.com/cosmos/cosmos-sdk/x/ibc/light-clients/07-tendermint/types" - ibctesting "github.com/cosmos/cosmos-sdk/x/ibc/testing" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" ) @@ -26,7 +25,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { name: "successful upgrade", setup: func() { - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) // upgrade Height is at next block upgradeHeight = clienttypes.NewHeight(0, uint64(suite.chainB.GetContext().BlockHeight()+1)) @@ -51,7 +50,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { name: "successful upgrade with different client chosen parameters set in upgraded client", setup: func() { - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) // upgrade Height is at next block upgradeHeight = clienttypes.NewHeight(0, uint64(suite.chainB.GetContext().BlockHeight()+1)) @@ -60,7 +59,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { suite.chainB.App.UpgradeKeeper.SetUpgradedClient(suite.chainB.GetContext(), int64(upgradeHeight.GetVersionHeight()), upgradedClient) // change upgradedClient client-specified parameters - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, ubdPeriod, ubdPeriod+trustingPeriod, maxClockDrift+5, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, true, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, ubdPeriod, ubdPeriod+trustingPeriod, maxClockDrift+5, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, true, false) suite.coordinator.CommitBlock(suite.chainB) err := suite.coordinator.UpdateClient(suite.chainA, suite.chainB, clientA, exported.Tendermint) @@ -71,7 +70,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { // Previous client-chosen parameters must be the same as upgraded client chosen parameters tmClient, _ := cs.(*types.ClientState) - oldClient := types.NewClientState(tmClient.ChainId, types.DefaultTrustLevel, ubdPeriod, ubdPeriod+trustingPeriod, maxClockDrift+5, tmClient.LatestHeight, commitmenttypes.GetSDKSpecs(), upgradePath, true, false) + oldClient := types.NewClientState(tmClient.ChainId, types.DefaultTrustLevel, ubdPeriod, ubdPeriod+trustingPeriod, maxClockDrift+5, tmClient.LatestHeight, commitmenttypes.GetSDKSpecs(), upgradePath, true, false) suite.chainA.App.IBCKeeper.ClientKeeper.SetClientState(suite.chainA.GetContext(), clientA, oldClient) proofUpgrade, _ = suite.chainB.QueryUpgradeProof(upgradetypes.UpgradedClientKey(int64(upgradeHeight.GetVersionHeight())), cs.GetLatestHeight().GetVersionHeight()) @@ -82,7 +81,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { name: "unsuccessful upgrade: upgrade height version does not match current client version", setup: func() { - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) // upgrade Height is at next block upgradeHeight = clienttypes.NewHeight(10, uint64(suite.chainB.GetContext().BlockHeight()+1)) @@ -107,7 +106,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { name: "unsuccessful upgrade: chain-specified parameters do not match committed client", setup: func() { - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) // upgrade Height is at next block upgradeHeight = clienttypes.NewHeight(0, uint64(suite.chainB.GetContext().BlockHeight()+1)) @@ -116,7 +115,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { suite.chainB.App.UpgradeKeeper.SetUpgradedClient(suite.chainB.GetContext(), int64(upgradeHeight.GetVersionHeight()), upgradedClient) // change upgradedClient client-specified parameters - upgradedClient = types.NewClientState("wrongchainID", types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, true, true) + upgradedClient = types.NewClientState("wrongchainID", types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, true, true) suite.coordinator.CommitBlock(suite.chainB) err := suite.coordinator.UpdateClient(suite.chainA, suite.chainB, clientA, exported.Tendermint) @@ -133,12 +132,12 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { name: "unsuccessful upgrade: client-specified parameters do not match previous client", setup: func() { - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, upgradeHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, upgradeHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) // zero custom fields and store in upgrade store suite.chainB.App.UpgradeKeeper.SetUpgradedClient(suite.chainB.GetContext(), int64(upgradeHeight.GetVersionHeight()), upgradedClient) // change upgradedClient client-specified parameters - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, ubdPeriod, ubdPeriod+trustingPeriod, maxClockDrift+5, upgradeHeight, commitmenttypes.GetSDKSpecs(), upgradePath, true, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, ubdPeriod, ubdPeriod+trustingPeriod, maxClockDrift+5, upgradeHeight, commitmenttypes.GetSDKSpecs(), upgradePath, true, false) suite.coordinator.CommitBlock(suite.chainB) err := suite.coordinator.UpdateClient(suite.chainA, suite.chainB, clientA, exported.Tendermint) @@ -154,7 +153,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { { name: "unsuccessful upgrade: proof is empty", setup: func() { - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) proofUpgrade = []byte{} }, expPass: false, @@ -162,7 +161,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { { name: "unsuccessful upgrade: proof unmarshal failed", setup: func() { - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) proofUpgrade = []byte("proof") }, expPass: false, @@ -171,7 +170,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { name: "unsuccessful upgrade: proof verification failed", setup: func() { // create but do not store upgraded client - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) // upgrade Height is at next block upgradeHeight = clienttypes.NewHeight(0, uint64(suite.chainB.GetContext().BlockHeight()+1)) @@ -187,7 +186,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { name: "unsuccessful upgrade: upgrade path is empty", setup: func() { - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) // upgrade Height is at next block upgradeHeight = clienttypes.NewHeight(0, uint64(suite.chainB.GetContext().BlockHeight()+1)) @@ -217,7 +216,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { name: "unsuccessful upgrade: upgrade path is malformed and cannot be correctly unescaped", setup: func() { - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) // upgrade Height is at next block upgradeHeight = clienttypes.NewHeight(0, uint64(suite.chainB.GetContext().BlockHeight()+1)) @@ -247,7 +246,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { name: "unsuccessful upgrade: upgraded height is not greater than current height", setup: func() { - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) // upgrade Height is at next block upgradeHeight = clienttypes.NewHeight(0, uint64(suite.chainB.GetContext().BlockHeight()+1)) @@ -272,7 +271,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { name: "unsuccessful upgrade: consensus state for upgrade height cannot be found", setup: func() { - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) // upgrade Height is at next block upgradeHeight = clienttypes.NewHeight(0, uint64(suite.chainB.GetContext().BlockHeight()+100)) @@ -297,7 +296,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { name: "unsuccessful upgrade: client is expired", setup: func() { - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, upgradeHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, ubdPeriod+trustingPeriod, maxClockDrift, upgradeHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) // zero custom fields and store in upgrade store suite.chainB.App.UpgradeKeeper.SetUpgradedClient(suite.chainB.GetContext(), int64(upgradeHeight.GetVersionHeight()), upgradedClient) From 98ca1bec3d13b046bc57da2687b44d254e36841e Mon Sep 17 00:00:00 2001 From: Colin Axner Date: Thu, 12 Nov 2020 10:40:05 +0100 Subject: [PATCH 3/3] fix build --- x/ibc/light-clients/07-tendermint/types/upgrade_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/ibc/light-clients/07-tendermint/types/upgrade_test.go b/x/ibc/light-clients/07-tendermint/types/upgrade_test.go index 6a7a7817f457..06b5032732d0 100644 --- a/x/ibc/light-clients/07-tendermint/types/upgrade_test.go +++ b/x/ibc/light-clients/07-tendermint/types/upgrade_test.go @@ -320,7 +320,7 @@ func (suite *TendermintTestSuite) TestVerifyUpgrade() { name: "unsuccessful upgrade: updated unbonding period is equal to trusting period", setup: func() { - upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, trustingPeriod, maxClockDrift, newClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) + upgradedClient = types.NewClientState("newChainId", types.DefaultTrustLevel, trustingPeriod, trustingPeriod, maxClockDrift, newClientHeight, commitmenttypes.GetSDKSpecs(), upgradePath, false, false) // upgrade Height is at next block upgradeHeight = clienttypes.NewHeight(0, uint64(suite.chainB.GetContext().BlockHeight()+1))