From d48d0001951f265d90b1d3c1502db3d28c7d3477 Mon Sep 17 00:00:00 2001 From: Denis Fadeev Date: Sat, 24 Oct 2020 10:17:07 +0500 Subject: [PATCH 01/27] Remove duplicate print message on keys add command (#7654) Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- client/keys/add.go | 1 - 1 file changed, 1 deletion(-) diff --git a/client/keys/add.go b/client/keys/add.go index 57b37a5001..b2e267e83e 100644 --- a/client/keys/add.go +++ b/client/keys/add.go @@ -306,7 +306,6 @@ func printCreate(cmd *cobra.Command, info keyring.Info, showMnemonic bool, mnemo // print mnemonic unless requested not to. if showMnemonic { - fmt.Fprintln(cmd.ErrOrStderr(), "\n**Important** write this mnemonic phrase in a safe place.") fmt.Fprintln(cmd.ErrOrStderr(), "\n**Important** write this mnemonic phrase in a safe place.") fmt.Fprintln(cmd.ErrOrStderr(), "It is the only way to recover your account if you ever forget your password.") fmt.Fprintln(cmd.ErrOrStderr(), "") From fc46423fccff16439e9051d4e61be6e1363b122b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Oct 2020 07:44:22 -0300 Subject: [PATCH 02/27] build(deps): bump gaurav-nelson/github-action-markdown-link-check (#7612) Bumps [gaurav-nelson/github-action-markdown-link-check](https://github.com/gaurav-nelson/github-action-markdown-link-check) from 1.0.7 to 1.0.8. - [Release notes](https://github.com/gaurav-nelson/github-action-markdown-link-check/releases) - [Commits](https://github.com/gaurav-nelson/github-action-markdown-link-check/compare/1.0.7...e3c371c731b2f494f856dc5de7f61cea4d519907) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Marko Co-authored-by: Federico Kunze <31522760+fedekunze@users.noreply.github.com> Co-authored-by: Amaury Martiny --- .github/workflows/linkchecker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/linkchecker.yml b/.github/workflows/linkchecker.yml index dfbee1085d..2fdf1ab9fe 100644 --- a/.github/workflows/linkchecker.yml +++ b/.github/workflows/linkchecker.yml @@ -7,6 +7,6 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@master - - uses: gaurav-nelson/github-action-markdown-link-check@1.0.7 + - uses: gaurav-nelson/github-action-markdown-link-check@1.0.8 with: folder-path: "docs" From bd3a29bdc1b5aef2c051ee04d97c36bff1b9e5dc Mon Sep 17 00:00:00 2001 From: Alessio Treglia Date: Mon, 26 Oct 2020 15:08:13 +0000 Subject: [PATCH 03/27] fix check-test-* targets (#7675) Closes: #7673 --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index ab45bf98c2..b9f0beebca 100644 --- a/Makefile +++ b/Makefile @@ -222,9 +222,9 @@ $(TEST_TARGETS): run-tests # check-* compiles and collects tests without running them # note: go test -c doesn't support multiple packages yet (https://github.com/golang/go/issues/15513) -CHECK_TEST_TARGETS := test-unit test-unit-amino -check-test-unit: test-unit -check-test-unit-amino: test-unit-amino +CHECK_TEST_TARGETS := check-test-unit check-test-unit-amino +check-test-unit: ARGS=-tags='cgo ledger test_ledger_mock norace' +check-test-unit-amino: ARGS=-tags='ledger test_ledger_mock test_amino norace' $(CHECK_TEST_TARGETS): EXTRA_ARGS=-run=none $(CHECK_TEST_TARGETS): run-tests From 6688382f2ea70f5029887caa50e530a89e181d6e Mon Sep 17 00:00:00 2001 From: Marko Date: Tue, 27 Oct 2020 11:00:01 +0100 Subject: [PATCH 04/27] ci: add pushing of tags and master (#7617) --- .github/workflows/docker.yml | 39 +++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 34f41a11de..e519490d78 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -1,9 +1,13 @@ -name: Nightly Builds -# Nightly Builds rebuilds the simapp docker image Monday - Friday at midnight +name: Build & Push +# Build & Push builds the simapp docker image on every push to master and # and pushes the image to https://hub.docker.com/r/interchainio/simapp/tags on: - schedule: - - cron: "0 0 * * 1-5" # deploy at midnight Monday - Friday + push: + branches: + - master + tags: + - "v[0-9]+.[0-9]+.[0-9]+" # Push events to matching v*, i.e. v1.0, v20.15.10 + - "v[0-9]+.[0-9]+.[0-9]+-rc*" # Push events to matching v*, i.e. v1.0-rc1, v20.15.10-rc5 jobs: build: @@ -12,9 +16,26 @@ jobs: - uses: actions/checkout@master with: fetch-depth: 0 - - name: Get current date - id: date - run: echo "::set-output name=date::$(date +'%Y-%m-%d')" + + - name: Prepare + id: prep + run: | + DOCKER_IMAGE=interchainio/simapp + VERSION=noop + if [[ $GITHUB_REF == refs/tags/* ]]; then + VERSION=${GITHUB_REF#refs/tags/} + elif [[ $GITHUB_REF == refs/heads/* ]]; then + VERSION=$(echo ${GITHUB_REF#refs/heads/} | sed -r 's#/+#-#g') + if [ "${{ github.event.repository.default_branch }}" = "$VERSION" ]; then + VERSION=latest + fi + fi + TAGS="${DOCKER_IMAGE}:${VERSION}" + if [[ $VERSION =~ ^v[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then + TAGS="$TAGS,${DOCKER_IMAGE}:${VERSION}" + echo ::set-output name=version::${VERSION} + echo ::set-output name=tags::${TAGS} + echo ::set-output name=created::$(date -u +'%Y-%m-%dT%H:%M:%SZ') - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 @@ -28,5 +49,5 @@ jobs: - name: Publish to Docker Hub uses: docker/build-push-action@v2 with: - push: true - tags: interchainio/simapp:nightly-${{ steps.date.outputs.date }} + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.prep.outputs.tags }} From 8014fc688e40ad82ff5d6b1898c50d5ee7a8a592 Mon Sep 17 00:00:00 2001 From: Akhil Kumar P <36399231+akhilkumarpilli@users.noreply.github.com> Date: Tue, 27 Oct 2020 15:34:34 +0530 Subject: [PATCH 05/27] Fix clang-format to specific version (#7350) * Update clang-format install script * Address PR comments * Update clang-format install command * Format makefile * Use docker for formatting proto * Comment out delimiter config * Update contributing.md and .clang-format Co-authored-by: Alessio Treglia Co-authored-by: Marko --- .clang-format | 3 ++- CONTRIBUTING.md | 2 ++ Makefile | 4 ++++ contrib/devtools/proto-tools-installer.sh | 27 ----------------------- 4 files changed, 8 insertions(+), 28 deletions(-) diff --git a/.clang-format b/.clang-format index dec78f0f78..7f662a4fd9 100644 --- a/.clang-format +++ b/.clang-format @@ -91,7 +91,8 @@ PenaltyExcessCharacter: 1000000 PenaltyReturnTypeOnItsOwnLine: 60 PointerAlignment: Right RawStringFormats: - - Delimiter: pb + - Delimiters: + - pb Language: TextProto BasedOnStyle: google ReflowComments: true diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 35e4705c04..e13dba1b85 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -142,6 +142,8 @@ build, in which case we can fall back on `go mod tidy -v`. We use [Protocol Buffers](https://developers.google.com/protocol-buffers) along with [gogoproto](https://github.com/gogo/protobuf) to generate code for use in Cosmos-SDK. +For formatting code in `.proto` files, you can run `make proto-format` command. + For linting and checking breaking changes, we use [buf](https://buf.build/). There are two options for linting and to check if your changes will cause a break. The first is that you can install [buf](https://buf.build/docs/installation) locally, the commands for running buf after installing are `make proto-lint` and the breaking changes check will be `make proto-check-breaking`. If you do not want to install buf and have docker installed already then you can use these commands `make proto-lint-docker` and `make proto-check-breaking-docker`. To generate the protobuf stubs you must have `protoc` and `protoc-gen-gocosmos` installed. To install these tools run `make proto-tools`. After this step you will be able to run `make proto-gen` to generate the protobuf stubs. diff --git a/Makefile b/Makefile index b9f0beebca..dd21bbf2da 100644 --- a/Makefile +++ b/Makefile @@ -362,7 +362,11 @@ proto-gen: @./scripts/protocgen.sh proto-format: + @echo "Formatting Protobuf files" + docker run -v $(shell pwd):/workspace \ + --workdir /workspace tendermintdev/docker-build-proto \ find ./ -not -path "./third_party/*" -name *.proto -exec clang-format -i {} \; +.PHONY: proto-format # This generates the SDK's custom wrapper for google.protobuf.Any. It should only be run manually when needed proto-gen-any: diff --git a/contrib/devtools/proto-tools-installer.sh b/contrib/devtools/proto-tools-installer.sh index fd287ddd8d..f8bd2f621b 100755 --- a/contrib/devtools/proto-tools-installer.sh +++ b/contrib/devtools/proto-tools-installer.sh @@ -119,32 +119,6 @@ f_install_protoc_gen_swagger() { f_print_done } -f_install_clang_format() { - f_print_installing_with_padding clang-format - - if which clang-format &>/dev/null ; then - echo -e "\talready installed. Skipping." - return 0 - fi - - case "${UNAME_S}" in - Linux) - if [ -e /etc/debian_version ]; then - echo -e "\tRun: sudo apt-get install clang-format" >&2 - elif [ -e /etc/fedora-release ]; then - echo -e "\tRun: sudo dnf install clang" >&2 - else - echo -e "\tRun (as root): subscription-manager repos --enable rhel-7-server-devtools-rpms ; yum install llvm-toolset-7" >&2 - fi - ;; - Darwin) - echo "\tRun: brew install clang-format" >&2 - ;; - *) - echo "\tunknown operating system. Skipping." >&2 - esac -} - f_ensure_tools f_ensure_dirs f_install_protoc @@ -152,4 +126,3 @@ f_install_buf f_install_protoc_gen_gocosmos f_install_protoc_gen_grpc_gateway f_install_protoc_gen_swagger -f_install_clang_format From 9bd42ace6b84c5214c98c261e5b794d1f7cba8d0 Mon Sep 17 00:00:00 2001 From: Robert Zaremba Date: Tue, 27 Oct 2020 12:33:48 +0100 Subject: [PATCH 06/27] simapp: rename MakeEncodingConfig to MakeTestEncodingConfig (#7681) * simapp: rename MakeEncodingConfig to MakeTestEncodingConfig * Updating the Changelog + Adding DEPRECATED attribute. Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- CHANGELOG.md | 1 + baseapp/msg_service_router_test.go | 2 +- client/grpc/simulate/simulate_test.go | 2 +- client/tx/legacy_test.go | 2 +- client/tx/tx_test.go | 2 +- server/README.md | 2 +- server/export_test.go | 4 ++-- simapp/app.go | 2 +- simapp/app_test.go | 6 +++--- simapp/encoding.go | 9 ++++++--- simapp/genesis.go | 2 +- simapp/params/amino.go | 7 +++++-- simapp/params/proto.go | 7 +++++-- simapp/sim_bench_test.go | 4 ++-- simapp/sim_test.go | 12 ++++++------ simapp/simd/cmd/root.go | 6 +++--- simapp/test_helpers.go | 6 +++--- testutil/network/network.go | 2 +- types/rest/rest_test.go | 2 +- x/auth/ante/testutil_test.go | 2 +- x/auth/client/cli/cli_test.go | 4 ++-- x/auth/client/cli/encode_test.go | 4 ++-- x/auth/client/tx_test.go | 4 ++-- x/auth/legacy/v040/migrate_test.go | 2 +- x/bank/app_test.go | 12 ++++++------ x/bank/bench_test.go | 4 ++-- x/bank/client/rest/tx_test.go | 2 +- x/bank/legacy/v040/migrate_test.go | 2 +- x/bank/simulation/operations.go | 4 ++-- x/crisis/handler_test.go | 2 +- x/distribution/client/cli/tx_test.go | 2 +- x/distribution/simulation/operations.go | 8 ++++---- x/evidence/legacy/v040/migrate_test.go | 2 +- x/genutil/gentx_test.go | 2 +- x/genutil/types/genesis_state_test.go | 8 ++++---- x/gov/client/utils/query_test.go | 2 +- x/gov/genesis_test.go | 2 +- x/gov/legacy/v040/migrate_test.go | 2 +- x/gov/simulation/operations.go | 6 +++--- x/ibc/testing/chain.go | 2 +- x/params/keeper/common_test.go | 2 +- x/params/proposal_handler_test.go | 2 +- x/params/types/subspace_test.go | 2 +- x/slashing/app_test.go | 2 +- x/slashing/legacy/v040/migrate_test.go | 2 +- x/slashing/simulation/operations.go | 2 +- x/staking/app_test.go | 2 +- x/staking/legacy/v040/migrate_test.go | 2 +- x/staking/simulation/operations.go | 10 +++++----- x/upgrade/abci_test.go | 2 +- 50 files changed, 98 insertions(+), 88 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c60d7ed2b..2c4e7d1f83 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,6 +49,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * `Validator` update. Methods changed in `ValidatorI` (as described above) and `ToTmValidator` return error. * `Validator.ConsensusPubkey` type changed from `string` to `codectypes.Any`. * `MsgCreateValidator.Pubkey` type changed from `string` to `codectypes.Any`. +* Deprecating and renaming `MakeEncodingConfig` to `MakeTestEncodingConfig` (both in `simapp` and `simapp/params` packages). ### Features diff --git a/baseapp/msg_service_router_test.go b/baseapp/msg_service_router_test.go index f0f9be57b4..d5e01acd17 100644 --- a/baseapp/msg_service_router_test.go +++ b/baseapp/msg_service_router_test.go @@ -22,7 +22,7 @@ import ( func TestMsgService(t *testing.T) { priv, _, _ := testdata.KeyTestPubAddr() - encCfg := simapp.MakeEncodingConfig() + encCfg := simapp.MakeTestEncodingConfig() db := dbm.NewMemDB() app := baseapp.NewBaseApp("test", log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, encCfg.TxConfig.TxDecoder()) app.SetInterfaceRegistry(encCfg.InterfaceRegistry) diff --git a/client/grpc/simulate/simulate_test.go b/client/grpc/simulate/simulate_test.go index 7e25c11232..11b58168a9 100644 --- a/client/grpc/simulate/simulate_test.go +++ b/client/grpc/simulate/simulate_test.go @@ -39,7 +39,7 @@ func (s *IntegrationTestSuite) SetupSuite() { app.BankKeeper.SetParams(sdkCtx, banktypes.DefaultParams()) // Set up TxConfig. - encodingConfig := simapp.MakeEncodingConfig() + encodingConfig := simapp.MakeTestEncodingConfig() clientCtx := client.Context{}.WithTxConfig(encodingConfig.TxConfig) // Create new simulation server. diff --git a/client/tx/legacy_test.go b/client/tx/legacy_test.go index 704b3ac029..59a7b95d7f 100644 --- a/client/tx/legacy_test.go +++ b/client/tx/legacy_test.go @@ -57,7 +57,7 @@ type TestSuite struct { } func (s *TestSuite) SetupSuite() { - encCfg := simapp.MakeEncodingConfig() + encCfg := simapp.MakeTestEncodingConfig() s.encCfg = encCfg s.protoCfg = tx.NewTxConfig(codec.NewProtoCodec(encCfg.InterfaceRegistry), tx.DefaultSignModes) s.aminoCfg = legacytx.StdTxConfig{Cdc: encCfg.Amino} diff --git a/client/tx/tx_test.go b/client/tx/tx_test.go index 41a021fef1..da4db5fc8b 100644 --- a/client/tx/tx_test.go +++ b/client/tx/tx_test.go @@ -18,7 +18,7 @@ import ( ) func NewTestTxConfig() client.TxConfig { - cfg := simapp.MakeEncodingConfig() + cfg := simapp.MakeTestEncodingConfig() return cfg.TxConfig } diff --git a/server/README.md b/server/README.md index 99ded0713b..3ee67d5c0c 100644 --- a/server/README.md +++ b/server/README.md @@ -34,7 +34,7 @@ var ( }, } - encodingConfig = simapp.MakeEncodingConfig() + encodingConfig = simapp.MakeTestEncodingConfig() initClientCtx = client.Context{}. WithJSONMarshaler(encodingConfig.Marshaler). WithTxConfig(encodingConfig.TxConfig). diff --git a/server/export_test.go b/server/export_test.go index ac0cf6b659..d804b7a151 100644 --- a/server/export_test.go +++ b/server/export_test.go @@ -128,7 +128,7 @@ func setupApp(t *testing.T, tempDir string) (*simapp.SimApp, context.Context, *t logger := log.NewTMLogger(log.NewSyncWriter(os.Stdout)) db := dbm.NewMemDB() - encCfg := simapp.MakeEncodingConfig() + encCfg := simapp.MakeTestEncodingConfig() app := simapp.NewSimApp(logger, db, nil, true, map[int64]bool{}, tempDir, 0, encCfg) serverCtx := server.NewDefaultContext() @@ -149,7 +149,7 @@ func setupApp(t *testing.T, tempDir string) (*simapp.SimApp, context.Context, *t cmd := server.ExportCmd( func(_ log.Logger, _ dbm.DB, _ io.Writer, height int64, forZeroHeight bool, jailAllowedAddrs []string) (types.ExportedApp, error) { - encCfg := simapp.MakeEncodingConfig() + encCfg := simapp.MakeTestEncodingConfig() var simApp *simapp.SimApp if height != -1 { diff --git a/simapp/app.go b/simapp/app.go index 5c3412f360..41683dff82 100644 --- a/simapp/app.go +++ b/simapp/app.go @@ -432,7 +432,7 @@ func NewSimApp( // simapp. It is useful for tests and clients who do not want to construct the // full simapp func MakeCodecs() (codec.Marshaler, *codec.LegacyAmino) { - config := MakeEncodingConfig() + config := MakeTestEncodingConfig() return config.Marshaler, config.Amino } diff --git a/simapp/app_test.go b/simapp/app_test.go index 4a87975622..fdc609677a 100644 --- a/simapp/app_test.go +++ b/simapp/app_test.go @@ -14,7 +14,7 @@ import ( func TestSimAppExport(t *testing.T) { db := dbm.NewMemDB() - app := NewSimApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, MakeEncodingConfig()) + app := NewSimApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, MakeTestEncodingConfig()) genesisState := NewDefaultGenesisState() stateBytes, err := json.MarshalIndent(genesisState, "", " ") @@ -30,7 +30,7 @@ func TestSimAppExport(t *testing.T) { app.Commit() // Making a new app object with the db, so that initchain hasn't been called - app2 := NewSimApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, MakeEncodingConfig()) + app2 := NewSimApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, MakeTestEncodingConfig()) _, err = app2.ExportAppStateAndValidators(false, []string{}) require.NoError(t, err, "ExportAppStateAndValidators should not have an error") } @@ -38,7 +38,7 @@ func TestSimAppExport(t *testing.T) { // ensure that blocked addresses are properly set in bank keeper func TestBlockedAddrs(t *testing.T) { db := dbm.NewMemDB() - app := NewSimApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, MakeEncodingConfig()) + app := NewSimApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, MakeTestEncodingConfig()) for acc := range maccPerms { require.Equal(t, !allowedReceivingModAcc[acc], app.BankKeeper.BlockedAddr(app.AccountKeeper.GetModuleAddress(acc))) diff --git a/simapp/encoding.go b/simapp/encoding.go index 2621d3e86d..954f4a1175 100644 --- a/simapp/encoding.go +++ b/simapp/encoding.go @@ -5,9 +5,12 @@ import ( "github.com/cosmos/cosmos-sdk/std" ) -// MakeEncodingConfig creates an EncodingConfig for testing -func MakeEncodingConfig() simappparams.EncodingConfig { - encodingConfig := simappparams.MakeEncodingConfig() +// MakeTestEncodingConfig creates an EncodingConfig for testing. +// This function should be used only internally (in the SDK). +// App user should'nt create new codecs - use the app.AppCodec instead. +// [DEPRECATED] +func MakeTestEncodingConfig() simappparams.EncodingConfig { + encodingConfig := simappparams.MakeTestEncodingConfig() std.RegisterLegacyAminoCodec(encodingConfig.Amino) std.RegisterInterfaces(encodingConfig.InterfaceRegistry) ModuleBasics.RegisterLegacyAminoCodec(encodingConfig.Amino) diff --git a/simapp/genesis.go b/simapp/genesis.go index 5a8f18b1aa..8fd7e83fd8 100644 --- a/simapp/genesis.go +++ b/simapp/genesis.go @@ -15,6 +15,6 @@ type GenesisState map[string]json.RawMessage // NewDefaultGenesisState generates the default state for the application. func NewDefaultGenesisState() GenesisState { - encCfg := MakeEncodingConfig() + encCfg := MakeTestEncodingConfig() return ModuleBasics.DefaultGenesis(encCfg.Marshaler) } diff --git a/simapp/params/amino.go b/simapp/params/amino.go index ff9b05a9fb..440c29f817 100644 --- a/simapp/params/amino.go +++ b/simapp/params/amino.go @@ -8,8 +8,11 @@ import ( "github.com/cosmos/cosmos-sdk/x/auth/legacy/legacytx" ) -// MakeEncodingConfig creates an EncodingConfig for an amino based test configuration. -func MakeEncodingConfig() EncodingConfig { +// MakeTestEncodingConfig creates an EncodingConfig for an amino based test configuration. +// This function should be used only internally (in the SDK). +// App user should'nt create new codecs - use the app.AppCodec instead. +// [DEPRECATED] +func MakeTestEncodingConfig() EncodingConfig { cdc := codec.NewLegacyAmino() interfaceRegistry := types.NewInterfaceRegistry() marshaler := codec.NewAminoCodec(cdc) diff --git a/simapp/params/proto.go b/simapp/params/proto.go index 63ae791a4f..04aa524b90 100644 --- a/simapp/params/proto.go +++ b/simapp/params/proto.go @@ -8,8 +8,11 @@ import ( "github.com/cosmos/cosmos-sdk/x/auth/tx" ) -// MakeEncodingConfig creates an EncodingConfig for a non-amino based test configuration. -func MakeEncodingConfig() EncodingConfig { +// MakeTestEncodingConfig creates an EncodingConfig for a non-amino based test configuration. +// This function should be used only internally (in the SDK). +// App user should'nt create new codecs - use the app.AppCodec instead. +// [DEPRECATED] +func MakeTestEncodingConfig() EncodingConfig { cdc := codec.NewLegacyAmino() interfaceRegistry := types.NewInterfaceRegistry() marshaler := codec.NewProtoCodec(interfaceRegistry) diff --git a/simapp/sim_bench_test.go b/simapp/sim_bench_test.go index 660e0fb8f0..505150c450 100644 --- a/simapp/sim_bench_test.go +++ b/simapp/sim_bench_test.go @@ -27,7 +27,7 @@ func BenchmarkFullAppSimulation(b *testing.B) { } }() - app := NewSimApp(logger, db, nil, true, map[int64]bool{}, DefaultNodeHome, FlagPeriodValue, MakeEncodingConfig(), interBlockCacheOpt()) + app := NewSimApp(logger, db, nil, true, map[int64]bool{}, DefaultNodeHome, FlagPeriodValue, MakeTestEncodingConfig(), interBlockCacheOpt()) // run randomized simulation _, simParams, simErr := simulation.SimulateFromSeed( @@ -72,7 +72,7 @@ func BenchmarkInvariants(b *testing.B) { } }() - app := NewSimApp(logger, db, nil, true, map[int64]bool{}, DefaultNodeHome, FlagPeriodValue, MakeEncodingConfig(), interBlockCacheOpt()) + app := NewSimApp(logger, db, nil, true, map[int64]bool{}, DefaultNodeHome, FlagPeriodValue, MakeTestEncodingConfig(), interBlockCacheOpt()) // run randomized simulation _, simParams, simErr := simulation.SimulateFromSeed( diff --git a/simapp/sim_test.go b/simapp/sim_test.go index ad3633132d..d20a8267c1 100644 --- a/simapp/sim_test.go +++ b/simapp/sim_test.go @@ -68,7 +68,7 @@ func TestFullAppSimulation(t *testing.T) { require.NoError(t, os.RemoveAll(dir)) }() - app := NewSimApp(logger, db, nil, true, map[int64]bool{}, DefaultNodeHome, FlagPeriodValue, MakeEncodingConfig(), fauxMerkleModeOpt) + app := NewSimApp(logger, db, nil, true, map[int64]bool{}, DefaultNodeHome, FlagPeriodValue, MakeTestEncodingConfig(), fauxMerkleModeOpt) require.Equal(t, "SimApp", app.Name()) // run randomized simulation @@ -106,7 +106,7 @@ func TestAppImportExport(t *testing.T) { require.NoError(t, os.RemoveAll(dir)) }() - app := NewSimApp(logger, db, nil, true, map[int64]bool{}, DefaultNodeHome, FlagPeriodValue, MakeEncodingConfig(), fauxMerkleModeOpt) + app := NewSimApp(logger, db, nil, true, map[int64]bool{}, DefaultNodeHome, FlagPeriodValue, MakeTestEncodingConfig(), fauxMerkleModeOpt) require.Equal(t, "SimApp", app.Name()) // Run randomized simulation @@ -146,7 +146,7 @@ func TestAppImportExport(t *testing.T) { require.NoError(t, os.RemoveAll(newDir)) }() - newApp := NewSimApp(log.NewNopLogger(), newDB, nil, true, map[int64]bool{}, DefaultNodeHome, FlagPeriodValue, MakeEncodingConfig(), fauxMerkleModeOpt) + newApp := NewSimApp(log.NewNopLogger(), newDB, nil, true, map[int64]bool{}, DefaultNodeHome, FlagPeriodValue, MakeTestEncodingConfig(), fauxMerkleModeOpt) require.Equal(t, "SimApp", newApp.Name()) var genesisState GenesisState @@ -203,7 +203,7 @@ func TestAppSimulationAfterImport(t *testing.T) { require.NoError(t, os.RemoveAll(dir)) }() - app := NewSimApp(logger, db, nil, true, map[int64]bool{}, DefaultNodeHome, FlagPeriodValue, MakeEncodingConfig(), fauxMerkleModeOpt) + app := NewSimApp(logger, db, nil, true, map[int64]bool{}, DefaultNodeHome, FlagPeriodValue, MakeTestEncodingConfig(), fauxMerkleModeOpt) require.Equal(t, "SimApp", app.Name()) // Run randomized simulation @@ -248,7 +248,7 @@ func TestAppSimulationAfterImport(t *testing.T) { require.NoError(t, os.RemoveAll(newDir)) }() - newApp := NewSimApp(log.NewNopLogger(), newDB, nil, true, map[int64]bool{}, DefaultNodeHome, FlagPeriodValue, MakeEncodingConfig(), fauxMerkleModeOpt) + newApp := NewSimApp(log.NewNopLogger(), newDB, nil, true, map[int64]bool{}, DefaultNodeHome, FlagPeriodValue, MakeTestEncodingConfig(), fauxMerkleModeOpt) require.Equal(t, "SimApp", newApp.Name()) newApp.InitChain(abci.RequestInitChain{ @@ -299,7 +299,7 @@ func TestAppStateDeterminism(t *testing.T) { } db := dbm.NewMemDB() - app := NewSimApp(logger, db, nil, true, map[int64]bool{}, DefaultNodeHome, FlagPeriodValue, MakeEncodingConfig(), interBlockCacheOpt()) + app := NewSimApp(logger, db, nil, true, map[int64]bool{}, DefaultNodeHome, FlagPeriodValue, MakeTestEncodingConfig(), interBlockCacheOpt()) fmt.Printf( "running non-determinism simulation; seed %d: %d/%d, attempt: %d/%d\n", diff --git a/simapp/simd/cmd/root.go b/simapp/simd/cmd/root.go index b01b170456..f4f6ca5897 100644 --- a/simapp/simd/cmd/root.go +++ b/simapp/simd/cmd/root.go @@ -38,7 +38,7 @@ import ( // NewRootCmd creates a new root command for simd. It is called once in the // main function. func NewRootCmd() (*cobra.Command, params.EncodingConfig) { - encodingConfig := simapp.MakeEncodingConfig() + encodingConfig := simapp.MakeTestEncodingConfig() initClientCtx := client.Context{}. WithJSONMarshaler(encodingConfig.Marshaler). WithInterfaceRegistry(encodingConfig.InterfaceRegistry). @@ -191,7 +191,7 @@ func newApp(logger log.Logger, db dbm.DB, traceStore io.Writer, appOpts serverty logger, db, traceStore, true, skipUpgradeHeights, cast.ToString(appOpts.Get(flags.FlagHome)), cast.ToUint(appOpts.Get(server.FlagInvCheckPeriod)), - simapp.MakeEncodingConfig(), // Ideally, we would reuse the one created by NewRootCmd. + simapp.MakeTestEncodingConfig(), // Ideally, we would reuse the one created by NewRootCmd. baseapp.SetPruning(pruningOpts), baseapp.SetMinGasPrices(cast.ToString(appOpts.Get(server.FlagMinGasPrices))), baseapp.SetHaltHeight(cast.ToUint64(appOpts.Get(server.FlagHaltHeight))), @@ -211,7 +211,7 @@ func newApp(logger log.Logger, db dbm.DB, traceStore io.Writer, appOpts serverty func createSimappAndExport( logger log.Logger, db dbm.DB, traceStore io.Writer, height int64, forZeroHeight bool, jailAllowedAddrs []string, ) (servertypes.ExportedApp, error) { - encCfg := simapp.MakeEncodingConfig() // Ideally, we would reuse the one created by NewRootCmd. + encCfg := simapp.MakeTestEncodingConfig() // Ideally, we would reuse the one created by NewRootCmd. encCfg.Marshaler = codec.NewProtoCodec(encCfg.InterfaceRegistry) var simApp *simapp.SimApp if height != -1 { diff --git a/simapp/test_helpers.go b/simapp/test_helpers.go index 8da319b216..de871b7c5e 100644 --- a/simapp/test_helpers.go +++ b/simapp/test_helpers.go @@ -51,7 +51,7 @@ var DefaultConsensusParams = &abci.ConsensusParams{ // Setup initializes a new SimApp. A Nop logger is set in SimApp. func Setup(isCheckTx bool) *SimApp { db := dbm.NewMemDB() - app := NewSimApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, DefaultNodeHome, 5, MakeEncodingConfig()) + app := NewSimApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, DefaultNodeHome, 5, MakeTestEncodingConfig()) if !isCheckTx { // init chain must be called to stop deliverState from being nil genesisState := NewDefaultGenesisState() @@ -79,7 +79,7 @@ func Setup(isCheckTx bool) *SimApp { // account. A Nop logger is set in SimApp. func SetupWithGenesisValSet(t *testing.T, valSet *tmtypes.ValidatorSet, genAccs []authtypes.GenesisAccount, balances ...banktypes.Balance) *SimApp { db := dbm.NewMemDB() - app := NewSimApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, DefaultNodeHome, 5, MakeEncodingConfig()) + app := NewSimApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, DefaultNodeHome, 5, MakeTestEncodingConfig()) genesisState := NewDefaultGenesisState() @@ -160,7 +160,7 @@ func SetupWithGenesisValSet(t *testing.T, valSet *tmtypes.ValidatorSet, genAccs // accounts and possible balances. func SetupWithGenesisAccounts(genAccs []authtypes.GenesisAccount, balances ...banktypes.Balance) *SimApp { db := dbm.NewMemDB() - app := NewSimApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, MakeEncodingConfig()) + app := NewSimApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, MakeTestEncodingConfig()) // initialize the chain with the passed in genesis accounts genesisState := NewDefaultGenesisState() diff --git a/testutil/network/network.go b/testutil/network/network.go index 1ab9006f8e..fc50c9aa0c 100644 --- a/testutil/network/network.go +++ b/testutil/network/network.go @@ -94,7 +94,7 @@ type Config struct { // DefaultConfig returns a sane default configuration suitable for nearly all // testing requirements. func DefaultConfig() Config { - encCfg := simapp.MakeEncodingConfig() + encCfg := simapp.MakeTestEncodingConfig() return Config{ Codec: encCfg.Marshaler, diff --git a/types/rest/rest_test.go b/types/rest/rest_test.go index 9060bab09a..b4bf386117 100644 --- a/types/rest/rest_test.go +++ b/types/rest/rest_test.go @@ -307,7 +307,7 @@ func TestParseQueryParamBool(t *testing.T) { func TestPostProcessResponseBare(t *testing.T) { t.Parallel() - encodingConfig := simappparams.MakeEncodingConfig() + encodingConfig := simappparams.MakeTestEncodingConfig() clientCtx := client.Context{}. WithTxConfig(encodingConfig.TxConfig). WithLegacyAmino(encodingConfig.Amino) // amino used intentionally here diff --git a/x/auth/ante/testutil_test.go b/x/auth/ante/testutil_test.go index a6755d0c35..9d8924eea7 100644 --- a/x/auth/ante/testutil_test.go +++ b/x/auth/ante/testutil_test.go @@ -53,7 +53,7 @@ func (suite *AnteTestSuite) SetupTest(isCheckTx bool) { suite.ctx = suite.ctx.WithBlockHeight(1) // Set up TxConfig. - encodingConfig := simapp.MakeEncodingConfig() + encodingConfig := simapp.MakeTestEncodingConfig() // We're using TestMsg encoding in some tests, so register it here. encodingConfig.Amino.RegisterConcrete(&testdata.TestMsg{}, "testdata.TestMsg", nil) testdata.RegisterInterfaces(encodingConfig.InterfaceRegistry) diff --git a/x/auth/client/cli/cli_test.go b/x/auth/client/cli/cli_test.go index 72e53a97a4..0902501a79 100644 --- a/x/auth/client/cli/cli_test.go +++ b/x/auth/client/cli/cli_test.go @@ -756,7 +756,7 @@ func (s *IntegrationTestSuite) TestGetAccountCmd() { func TestGetBroadcastCommand_OfflineFlag(t *testing.T) { clientCtx := client.Context{}.WithOffline(true) - clientCtx = clientCtx.WithTxConfig(simapp.MakeEncodingConfig().TxConfig) + clientCtx = clientCtx.WithTxConfig(simapp.MakeTestEncodingConfig().TxConfig) cmd := authcli.GetBroadcastCommand() _ = testutil.ApplyMockIODiscardOutErr(cmd) @@ -767,7 +767,7 @@ func TestGetBroadcastCommand_OfflineFlag(t *testing.T) { func TestGetBroadcastCommand_WithoutOfflineFlag(t *testing.T) { clientCtx := client.Context{} - txCfg := simapp.MakeEncodingConfig().TxConfig + txCfg := simapp.MakeTestEncodingConfig().TxConfig clientCtx = clientCtx.WithTxConfig(txCfg) ctx := context.Background() diff --git a/x/auth/client/cli/encode_test.go b/x/auth/client/cli/encode_test.go index 61464bb951..3e5f616f5b 100644 --- a/x/auth/client/cli/encode_test.go +++ b/x/auth/client/cli/encode_test.go @@ -15,7 +15,7 @@ import ( ) func TestGetCommandEncode(t *testing.T) { - encodingConfig := simappparams.MakeEncodingConfig() + encodingConfig := simappparams.MakeTestEncodingConfig() cmd := GetEncodeCommand() _ = testutil.ApplyMockIODiscardOutErr(cmd) @@ -49,7 +49,7 @@ func TestGetCommandEncode(t *testing.T) { } func TestGetCommandDecode(t *testing.T) { - encodingConfig := simappparams.MakeEncodingConfig() + encodingConfig := simappparams.MakeTestEncodingConfig() clientCtx := client.Context{}. WithTxConfig(encodingConfig.TxConfig). diff --git a/x/auth/client/tx_test.go b/x/auth/client/tx_test.go index 7ab1597bc8..3f194d84ae 100644 --- a/x/auth/client/tx_test.go +++ b/x/auth/client/tx_test.go @@ -55,7 +55,7 @@ func TestDefaultTxEncoder(t *testing.T) { func TestReadTxFromFile(t *testing.T) { t.Parallel() - encodingConfig := simapp.MakeEncodingConfig() + encodingConfig := simapp.MakeTestEncodingConfig() txCfg := encodingConfig.TxConfig clientCtx := client.Context{} @@ -90,7 +90,7 @@ func TestReadTxFromFile(t *testing.T) { func TestBatchScanner_Scan(t *testing.T) { t.Parallel() - encodingConfig := simapp.MakeEncodingConfig() + encodingConfig := simapp.MakeTestEncodingConfig() txGen := encodingConfig.TxConfig clientCtx := client.Context{} diff --git a/x/auth/legacy/v040/migrate_test.go b/x/auth/legacy/v040/migrate_test.go index 519b3cb483..e241046095 100644 --- a/x/auth/legacy/v040/migrate_test.go +++ b/x/auth/legacy/v040/migrate_test.go @@ -17,7 +17,7 @@ import ( ) func TestMigrate(t *testing.T) { - encodingConfig := simapp.MakeEncodingConfig() + encodingConfig := simapp.MakeTestEncodingConfig() clientCtx := client.Context{}. WithInterfaceRegistry(encodingConfig.InterfaceRegistry). WithTxConfig(encodingConfig.TxConfig). diff --git a/x/bank/app_test.go b/x/bank/app_test.go index c8a5c88985..713aa0999b 100644 --- a/x/bank/app_test.go +++ b/x/bank/app_test.go @@ -109,7 +109,7 @@ func TestSendNotEnoughBalance(t *testing.T) { sendMsg := types.NewMsgSend(addr1, addr2, sdk.Coins{sdk.NewInt64Coin("foocoin", 100)}) header := tmproto.Header{Height: app.LastBlockHeight() + 1} - txGen := simapp.MakeEncodingConfig().TxConfig + txGen := simapp.MakeTestEncodingConfig().TxConfig _, _, err = simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{sendMsg}, "", []uint64{origAccNum}, []uint64{origSeq}, false, false, priv1) require.Error(t, err) @@ -182,7 +182,7 @@ func TestSendToModuleAcc(t *testing.T) { origSeq := res1.GetSequence() header := tmproto.Header{Height: app.LastBlockHeight() + 1} - txGen := simapp.MakeEncodingConfig().TxConfig + txGen := simapp.MakeTestEncodingConfig().TxConfig _, _, err = simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{test.msg}, "", []uint64{origAccNum}, []uint64{origSeq}, test.expSimPass, test.expPass, priv1) if test.expPass { require.NoError(t, err) @@ -256,7 +256,7 @@ func TestMsgMultiSendWithAccounts(t *testing.T) { for _, tc := range testCases { header := tmproto.Header{Height: app.LastBlockHeight() + 1} - txGen := simapp.MakeEncodingConfig().TxConfig + txGen := simapp.MakeTestEncodingConfig().TxConfig _, _, err := simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, tc.msgs, "", tc.accNums, tc.accSeqs, tc.expSimPass, tc.expPass, tc.privKeys...) if tc.expPass { require.NoError(t, err) @@ -308,7 +308,7 @@ func TestMsgMultiSendMultipleOut(t *testing.T) { for _, tc := range testCases { header := tmproto.Header{Height: app.LastBlockHeight() + 1} - txGen := simapp.MakeEncodingConfig().TxConfig + txGen := simapp.MakeTestEncodingConfig().TxConfig _, _, err := simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, tc.msgs, "", tc.accNums, tc.accSeqs, tc.expSimPass, tc.expPass, tc.privKeys...) require.NoError(t, err) @@ -363,7 +363,7 @@ func TestMsgMultiSendMultipleInOut(t *testing.T) { for _, tc := range testCases { header := tmproto.Header{Height: app.LastBlockHeight() + 1} - txGen := simapp.MakeEncodingConfig().TxConfig + txGen := simapp.MakeTestEncodingConfig().TxConfig _, _, err := simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, tc.msgs, "", tc.accNums, tc.accSeqs, tc.expSimPass, tc.expPass, tc.privKeys...) require.NoError(t, err) @@ -416,7 +416,7 @@ func TestMsgMultiSendDependent(t *testing.T) { for _, tc := range testCases { header := tmproto.Header{Height: app.LastBlockHeight() + 1} - txGen := simapp.MakeEncodingConfig().TxConfig + txGen := simapp.MakeTestEncodingConfig().TxConfig _, _, err := simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, tc.msgs, "", tc.accNums, tc.accSeqs, tc.expSimPass, tc.expPass, tc.privKeys...) require.NoError(t, err) diff --git a/x/bank/bench_test.go b/x/bank/bench_test.go index 58761365b7..f1affb9d99 100644 --- a/x/bank/bench_test.go +++ b/x/bank/bench_test.go @@ -33,7 +33,7 @@ func BenchmarkOneBankSendTxPerBlock(b *testing.B) { require.NoError(b, err) benchmarkApp.Commit() - txGen := simappparams.MakeEncodingConfig().TxConfig + txGen := simappparams.MakeTestEncodingConfig().TxConfig // Precompute all txs txs, err := simapp.GenSequenceOfTxs(txGen, []sdk.Msg{sendMsg1}, []uint64{0}, []uint64{uint64(0)}, b.N, priv1) @@ -75,7 +75,7 @@ func BenchmarkOneBankMultiSendTxPerBlock(b *testing.B) { require.NoError(b, err) benchmarkApp.Commit() - txGen := simappparams.MakeEncodingConfig().TxConfig + txGen := simappparams.MakeTestEncodingConfig().TxConfig // Precompute all txs txs, err := simapp.GenSequenceOfTxs(txGen, []sdk.Msg{multiSendMsg1}, []uint64{0}, []uint64{uint64(0)}, b.N, priv1) diff --git a/x/bank/client/rest/tx_test.go b/x/bank/client/rest/tx_test.go index 0e52408fed..d770ebec3d 100644 --- a/x/bank/client/rest/tx_test.go +++ b/x/bank/client/rest/tx_test.go @@ -18,7 +18,7 @@ import ( ) func (s *IntegrationTestSuite) TestCoinSend() { - encodingConfig := simapp.MakeEncodingConfig() + encodingConfig := simapp.MakeTestEncodingConfig() authclient.Codec = encodingConfig.Marshaler val := s.network.Validators[0] diff --git a/x/bank/legacy/v040/migrate_test.go b/x/bank/legacy/v040/migrate_test.go index 99ea461ff7..9b458e1209 100644 --- a/x/bank/legacy/v040/migrate_test.go +++ b/x/bank/legacy/v040/migrate_test.go @@ -16,7 +16,7 @@ import ( ) func TestMigrate(t *testing.T) { - encodingConfig := simapp.MakeEncodingConfig() + encodingConfig := simapp.MakeTestEncodingConfig() clientCtx := client.Context{}. WithInterfaceRegistry(encodingConfig.InterfaceRegistry). WithTxConfig(encodingConfig.TxConfig). diff --git a/x/bank/simulation/operations.go b/x/bank/simulation/operations.go index 0f7d119498..c1e64d80d5 100644 --- a/x/bank/simulation/operations.go +++ b/x/bank/simulation/operations.go @@ -108,7 +108,7 @@ func sendMsgSend( return err } } - txGen := simappparams.MakeEncodingConfig().TxConfig + txGen := simappparams.MakeTestEncodingConfig().TxConfig tx, err := helpers.GenTx( txGen, []sdk.Msg{msg}, @@ -265,7 +265,7 @@ func sendMsgMultiSend( } } - txGen := simappparams.MakeEncodingConfig().TxConfig + txGen := simappparams.MakeTestEncodingConfig().TxConfig tx, err := helpers.GenTx( txGen, []sdk.Msg{msg}, diff --git a/x/crisis/handler_test.go b/x/crisis/handler_test.go index c533b01af6..6d65b87646 100644 --- a/x/crisis/handler_test.go +++ b/x/crisis/handler_test.go @@ -27,7 +27,7 @@ var ( func createTestApp() (*simapp.SimApp, sdk.Context, []sdk.AccAddress) { db := dbm.NewMemDB() - app := simapp.NewSimApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, simapp.DefaultNodeHome, 1, simapp.MakeEncodingConfig()) + app := simapp.NewSimApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, simapp.DefaultNodeHome, 1, simapp.MakeTestEncodingConfig()) ctx := app.NewContext(true, tmproto.Header{}) constantFee := sdk.NewInt64Coin(sdk.DefaultBondDenom, 10) diff --git a/x/distribution/client/cli/tx_test.go b/x/distribution/client/cli/tx_test.go index 550943e1c4..4a21a534e9 100644 --- a/x/distribution/client/cli/tx_test.go +++ b/x/distribution/client/cli/tx_test.go @@ -65,7 +65,7 @@ func Test_splitAndCall_Splitting(t *testing.T) { } func TestParseProposal(t *testing.T) { - encodingConfig := params.MakeEncodingConfig() + encodingConfig := params.MakeTestEncodingConfig() okJSON, cleanup := testutil.WriteToNewTempFile(t, ` { diff --git a/x/distribution/simulation/operations.go b/x/distribution/simulation/operations.go index ff0d0d4ef5..09090d1f64 100644 --- a/x/distribution/simulation/operations.go +++ b/x/distribution/simulation/operations.go @@ -100,7 +100,7 @@ func SimulateMsgSetWithdrawAddress(ak types.AccountKeeper, bk types.BankKeeper, msg := types.NewMsgSetWithdrawAddress(simAccount.Address, simToAccount.Address) - txGen := simappparams.MakeEncodingConfig().TxConfig + txGen := simappparams.MakeTestEncodingConfig().TxConfig tx, err := helpers.GenTx( txGen, []sdk.Msg{msg}, @@ -152,7 +152,7 @@ func SimulateMsgWithdrawDelegatorReward(ak types.AccountKeeper, bk types.BankKee msg := types.NewMsgWithdrawDelegatorReward(simAccount.Address, validator.GetOperator()) - txGen := simappparams.MakeEncodingConfig().TxConfig + txGen := simappparams.MakeTestEncodingConfig().TxConfig tx, err := helpers.GenTx( txGen, []sdk.Msg{msg}, @@ -207,7 +207,7 @@ func SimulateMsgWithdrawValidatorCommission(ak types.AccountKeeper, bk types.Ban msg := types.NewMsgWithdrawValidatorCommission(validator.GetOperator()) - txGen := simappparams.MakeEncodingConfig().TxConfig + txGen := simappparams.MakeTestEncodingConfig().TxConfig tx, err := helpers.GenTx( txGen, []sdk.Msg{msg}, @@ -262,7 +262,7 @@ func SimulateMsgFundCommunityPool(ak types.AccountKeeper, bk types.BankKeeper, k } msg := types.NewMsgFundCommunityPool(fundAmount, funder.Address) - txGen := simappparams.MakeEncodingConfig().TxConfig + txGen := simappparams.MakeTestEncodingConfig().TxConfig tx, err := helpers.GenTx( txGen, []sdk.Msg{msg}, diff --git a/x/evidence/legacy/v040/migrate_test.go b/x/evidence/legacy/v040/migrate_test.go index a9c23093f4..99260f0268 100644 --- a/x/evidence/legacy/v040/migrate_test.go +++ b/x/evidence/legacy/v040/migrate_test.go @@ -13,7 +13,7 @@ import ( ) func TestMigrate(t *testing.T) { - encodingConfig := simapp.MakeEncodingConfig() + encodingConfig := simapp.MakeTestEncodingConfig() clientCtx := client.Context{}. WithInterfaceRegistry(encodingConfig.InterfaceRegistry). WithTxConfig(encodingConfig.TxConfig). diff --git a/x/genutil/gentx_test.go b/x/genutil/gentx_test.go index 671431ed9e..b4b843bc98 100644 --- a/x/genutil/gentx_test.go +++ b/x/genutil/gentx_test.go @@ -47,7 +47,7 @@ func (suite *GenTxTestSuite) SetupTest() { app := simapp.Setup(checkTx) suite.ctx = app.BaseApp.NewContext(checkTx, tmproto.Header{}) suite.app = app - suite.encodingConfig = simapp.MakeEncodingConfig() + suite.encodingConfig = simapp.MakeTestEncodingConfig() var err error amount := sdk.NewInt64Coin(sdk.DefaultBondDenom, 50) diff --git a/x/genutil/types/genesis_state_test.go b/x/genutil/types/genesis_state_test.go index ce0015420d..01e1db9fd3 100644 --- a/x/genutil/types/genesis_state_test.go +++ b/x/genutil/types/genesis_state_test.go @@ -45,14 +45,14 @@ func TestValidateGenesisMultipleMessages(t *testing.T) { sdk.NewInt64Coin(sdk.DefaultBondDenom, 50), desc, comm, sdk.OneInt()) require.NoError(t, err) - txGen := simapp.MakeEncodingConfig().TxConfig + txGen := simapp.MakeTestEncodingConfig().TxConfig txBuilder := txGen.NewTxBuilder() require.NoError(t, txBuilder.SetMsgs(msg1, msg2)) tx := txBuilder.GetTx() genesisState := types.NewGenesisStateFromTx(txGen.TxJSONEncoder(), []sdk.Tx{tx}) - err = types.ValidateGenesis(genesisState, simapp.MakeEncodingConfig().TxConfig.TxJSONDecoder()) + err = types.ValidateGenesis(genesisState, simapp.MakeTestEncodingConfig().TxConfig.TxJSONDecoder()) require.Error(t, err) } @@ -61,7 +61,7 @@ func TestValidateGenesisBadMessage(t *testing.T) { msg1 := stakingtypes.NewMsgEditValidator(sdk.ValAddress(pk1.Address()), desc, nil, nil) - txGen := simapp.MakeEncodingConfig().TxConfig + txGen := simapp.MakeTestEncodingConfig().TxConfig txBuilder := txGen.NewTxBuilder() err := txBuilder.SetMsgs(msg1) require.NoError(t, err) @@ -69,7 +69,7 @@ func TestValidateGenesisBadMessage(t *testing.T) { tx := txBuilder.GetTx() genesisState := types.NewGenesisStateFromTx(txGen.TxJSONEncoder(), []sdk.Tx{tx}) - err = types.ValidateGenesis(genesisState, simapp.MakeEncodingConfig().TxConfig.TxJSONDecoder()) + err = types.ValidateGenesis(genesisState, simapp.MakeTestEncodingConfig().TxConfig.TxJSONDecoder()) require.Error(t, err) } diff --git a/x/gov/client/utils/query_test.go b/x/gov/client/utils/query_test.go index c6f999e86e..81b15a457f 100644 --- a/x/gov/client/utils/query_test.go +++ b/x/gov/client/utils/query_test.go @@ -147,7 +147,7 @@ func TestGetPaginatedVotes(t *testing.T) { cdc = newTestCodec() ) - encodingConfig := simapp.MakeEncodingConfig() + encodingConfig := simapp.MakeTestEncodingConfig() cli := TxSearchMock{txs: marshalled} clientCtx := client.Context{}. WithLegacyAmino(cdc). diff --git a/x/gov/genesis_test.go b/x/gov/genesis_test.go index ca1655ecba..f4f548c26a 100644 --- a/x/gov/genesis_test.go +++ b/x/gov/genesis_test.go @@ -68,7 +68,7 @@ func TestImportExportQueues(t *testing.T) { } db := dbm.NewMemDB() - app2 := simapp.NewSimApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, simapp.DefaultNodeHome, 0, simapp.MakeEncodingConfig()) + app2 := simapp.NewSimApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, simapp.DefaultNodeHome, 0, simapp.MakeTestEncodingConfig()) app2.InitChain( abci.RequestInitChain{ diff --git a/x/gov/legacy/v040/migrate_test.go b/x/gov/legacy/v040/migrate_test.go index beefa9de57..84c6a554af 100644 --- a/x/gov/legacy/v040/migrate_test.go +++ b/x/gov/legacy/v040/migrate_test.go @@ -15,7 +15,7 @@ import ( ) func TestMigrate(t *testing.T) { - encodingConfig := simapp.MakeEncodingConfig() + encodingConfig := simapp.MakeTestEncodingConfig() clientCtx := client.Context{}. WithInterfaceRegistry(encodingConfig.InterfaceRegistry). WithTxConfig(encodingConfig.TxConfig). diff --git a/x/gov/simulation/operations.go b/x/gov/simulation/operations.go index 0dedf64888..2ea89ca97b 100644 --- a/x/gov/simulation/operations.go +++ b/x/gov/simulation/operations.go @@ -142,7 +142,7 @@ func SimulateMsgSubmitProposal( } } - txGen := simappparams.MakeEncodingConfig().TxConfig + txGen := simappparams.MakeTestEncodingConfig().TxConfig tx, err := helpers.GenTx( txGen, []sdk.Msg{msg}, @@ -229,7 +229,7 @@ func SimulateMsgDeposit(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Ke } } - txGen := simappparams.MakeEncodingConfig().TxConfig + txGen := simappparams.MakeTestEncodingConfig().TxConfig tx, err := helpers.GenTx( txGen, []sdk.Msg{msg}, @@ -291,7 +291,7 @@ func operationSimulateMsgVote(ak types.AccountKeeper, bk types.BankKeeper, k kee return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to generate fees"), nil, err } - txGen := simappparams.MakeEncodingConfig().TxConfig + txGen := simappparams.MakeTestEncodingConfig().TxConfig tx, err := helpers.GenTx( txGen, []sdk.Msg{msg}, diff --git a/x/ibc/testing/chain.go b/x/ibc/testing/chain.go index ef1628d73c..923e6ae4eb 100644 --- a/x/ibc/testing/chain.go +++ b/x/ibc/testing/chain.go @@ -152,7 +152,7 @@ func NewTestChain(t *testing.T, chainID string) *TestChain { Time: globalStartTime, } - txConfig := simapp.MakeEncodingConfig().TxConfig + txConfig := simapp.MakeTestEncodingConfig().TxConfig // create an account to send transactions from chain := &TestChain{ diff --git a/x/params/keeper/common_test.go b/x/params/keeper/common_test.go index eb60d12b8b..f6d567db11 100644 --- a/x/params/keeper/common_test.go +++ b/x/params/keeper/common_test.go @@ -14,7 +14,7 @@ import ( ) func testComponents() (*codec.LegacyAmino, sdk.Context, sdk.StoreKey, sdk.StoreKey, paramskeeper.Keeper) { - marshaler := simapp.MakeEncodingConfig().Marshaler + marshaler := simapp.MakeTestEncodingConfig().Marshaler legacyAmino := createTestCodec() mkey := sdk.NewKVStoreKey("test") tkey := sdk.NewTransientStoreKey("transient_test") diff --git a/x/params/proposal_handler_test.go b/x/params/proposal_handler_test.go index b810a490cf..b4295d2e2d 100644 --- a/x/params/proposal_handler_test.go +++ b/x/params/proposal_handler_test.go @@ -76,7 +76,7 @@ func newTestInput(t *testing.T) testInput { err := cms.LoadLatestVersion() require.Nil(t, err) - encCfg := simapp.MakeEncodingConfig() + encCfg := simapp.MakeTestEncodingConfig() keeper := keeper.NewKeeper(encCfg.Marshaler, encCfg.Amino, keyParams, tKeyParams) ctx := sdk.NewContext(cms, tmproto.Header{}, false, log.NewNopLogger()) diff --git a/x/params/types/subspace_test.go b/x/params/types/subspace_test.go index f9a816641f..ed508d00e9 100644 --- a/x/params/types/subspace_test.go +++ b/x/params/types/subspace_test.go @@ -34,7 +34,7 @@ func (suite *SubspaceTestSuite) SetupTest() { ms.MountStoreWithDB(tkey, sdk.StoreTypeTransient, db) suite.NoError(ms.LoadLatestVersion()) - encCfg := simapp.MakeEncodingConfig() + encCfg := simapp.MakeTestEncodingConfig() ss := types.NewSubspace(encCfg.Marshaler, encCfg.Amino, key, tkey, "testsubspace") suite.cdc = encCfg.Marshaler diff --git a/x/slashing/app_test.go b/x/slashing/app_test.go index f16bfb36f1..5ee23b7cc5 100644 --- a/x/slashing/app_test.go +++ b/x/slashing/app_test.go @@ -69,7 +69,7 @@ func TestSlashingMsgs(t *testing.T) { require.NoError(t, err) header := tmproto.Header{Height: app.LastBlockHeight() + 1} - txGen := simapp.MakeEncodingConfig().TxConfig + txGen := simapp.MakeTestEncodingConfig().TxConfig _, _, err = simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{createValidatorMsg}, "", []uint64{0}, []uint64{0}, true, true, priv1) require.NoError(t, err) simapp.CheckBalance(t, app, addr1, sdk.Coins{genCoin.Sub(bondCoin)}) diff --git a/x/slashing/legacy/v040/migrate_test.go b/x/slashing/legacy/v040/migrate_test.go index 513627659d..016f3f4d44 100644 --- a/x/slashing/legacy/v040/migrate_test.go +++ b/x/slashing/legacy/v040/migrate_test.go @@ -14,7 +14,7 @@ import ( ) func TestMigrate(t *testing.T) { - encodingConfig := simapp.MakeEncodingConfig() + encodingConfig := simapp.MakeTestEncodingConfig() clientCtx := client.Context{}. WithInterfaceRegistry(encodingConfig.InterfaceRegistry). WithTxConfig(encodingConfig.TxConfig). diff --git a/x/slashing/simulation/operations.go b/x/slashing/simulation/operations.go index de95c0136b..d637007277 100644 --- a/x/slashing/simulation/operations.go +++ b/x/slashing/simulation/operations.go @@ -90,7 +90,7 @@ func SimulateMsgUnjail(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Kee msg := types.NewMsgUnjail(validator.GetOperator()) - txGen := simappparams.MakeEncodingConfig().TxConfig + txGen := simappparams.MakeTestEncodingConfig().TxConfig tx, err := helpers.GenTx( txGen, []sdk.Msg{msg}, diff --git a/x/staking/app_test.go b/x/staking/app_test.go index 1c60ec5027..207ac03e0c 100644 --- a/x/staking/app_test.go +++ b/x/staking/app_test.go @@ -71,7 +71,7 @@ func TestStakingMsgs(t *testing.T) { require.NoError(t, err) header := tmproto.Header{Height: app.LastBlockHeight() + 1} - txGen := simapp.MakeEncodingConfig().TxConfig + txGen := simapp.MakeTestEncodingConfig().TxConfig _, _, err = simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{createValidatorMsg}, "", []uint64{0}, []uint64{0}, true, true, priv1) require.NoError(t, err) simapp.CheckBalance(t, app, addr1, sdk.Coins{genCoin.Sub(bondCoin)}) diff --git a/x/staking/legacy/v040/migrate_test.go b/x/staking/legacy/v040/migrate_test.go index f54fec0e94..2be5e80dbc 100644 --- a/x/staking/legacy/v040/migrate_test.go +++ b/x/staking/legacy/v040/migrate_test.go @@ -15,7 +15,7 @@ import ( ) func TestMigrate(t *testing.T) { - encodingConfig := simapp.MakeEncodingConfig() + encodingConfig := simapp.MakeTestEncodingConfig() clientCtx := client.Context{}. WithInterfaceRegistry(encodingConfig.InterfaceRegistry). WithTxConfig(encodingConfig.TxConfig). diff --git a/x/staking/simulation/operations.go b/x/staking/simulation/operations.go index a153b26307..0bcb274ed7 100644 --- a/x/staking/simulation/operations.go +++ b/x/staking/simulation/operations.go @@ -153,7 +153,7 @@ func SimulateMsgCreateValidator(ak types.AccountKeeper, bk types.BankKeeper, k k return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to create CreateValidator message"), nil, err } - txGen := simappparams.MakeEncodingConfig().TxConfig + txGen := simappparams.MakeTestEncodingConfig().TxConfig tx, err := helpers.GenTx( txGen, []sdk.Msg{msg}, @@ -224,7 +224,7 @@ func SimulateMsgEditValidator(ak types.AccountKeeper, bk types.BankKeeper, k kee msg := types.NewMsgEditValidator(address, description, &newCommissionRate, nil) - txGen := simappparams.MakeEncodingConfig().TxConfig + txGen := simappparams.MakeTestEncodingConfig().TxConfig tx, err := helpers.GenTx( txGen, []sdk.Msg{msg}, @@ -297,7 +297,7 @@ func SimulateMsgDelegate(ak types.AccountKeeper, bk types.BankKeeper, k keeper.K msg := types.NewMsgDelegate(simAccount.Address, val.GetOperator(), bondAmt) - txGen := simappparams.MakeEncodingConfig().TxConfig + txGen := simappparams.MakeTestEncodingConfig().TxConfig tx, err := helpers.GenTx( txGen, []sdk.Msg{msg}, @@ -387,7 +387,7 @@ func SimulateMsgUndelegate(ak types.AccountKeeper, bk types.BankKeeper, k keeper return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to generate fees"), nil, err } - txGen := simappparams.MakeEncodingConfig().TxConfig + txGen := simappparams.MakeTestEncodingConfig().TxConfig tx, err := helpers.GenTx( txGen, []sdk.Msg{msg}, @@ -500,7 +500,7 @@ func SimulateMsgBeginRedelegate(ak types.AccountKeeper, bk types.BankKeeper, k k sdk.NewCoin(k.BondDenom(ctx), redAmt), ) - txGen := simappparams.MakeEncodingConfig().TxConfig + txGen := simappparams.MakeTestEncodingConfig().TxConfig tx, err := helpers.GenTx( txGen, []sdk.Msg{msg}, diff --git a/x/upgrade/abci_test.go b/x/upgrade/abci_test.go index 48ad99301e..a133cad5a2 100644 --- a/x/upgrade/abci_test.go +++ b/x/upgrade/abci_test.go @@ -40,7 +40,7 @@ var s TestSuite func setupTest(height int64, skip map[int64]bool) TestSuite { db := dbm.NewMemDB() - app := simapp.NewSimApp(log.NewNopLogger(), db, nil, true, skip, simapp.DefaultNodeHome, 0, simapp.MakeEncodingConfig()) + app := simapp.NewSimApp(log.NewNopLogger(), db, nil, true, skip, simapp.DefaultNodeHome, 0, simapp.MakeTestEncodingConfig()) genesisState := simapp.NewDefaultGenesisState() stateBytes, err := json.MarshalIndent(genesisState, "", " ") if err != nil { From 48c72230f0086f310b1fc5678737e3ade152e311 Mon Sep 17 00:00:00 2001 From: Aditya Date: Tue, 27 Oct 2020 11:48:28 +0000 Subject: [PATCH 07/27] Create separate Write-Ack Event (#7683) * use separate type for write ack * change event-type Co-authored-by: Christopher Goes Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- x/ibc/core/04-channel/keeper/packet.go | 10 +++++++++- x/ibc/core/04-channel/types/events.go | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/x/ibc/core/04-channel/keeper/packet.go b/x/ibc/core/04-channel/keeper/packet.go index 2f662c8021..d1d7b63920 100644 --- a/x/ibc/core/04-channel/keeper/packet.go +++ b/x/ibc/core/04-channel/keeper/packet.go @@ -367,7 +367,15 @@ func (k Keeper) WriteAcknowledgement( // emit an event that the relayer can query for ctx.EventManager().EmitEvents(sdk.Events{ sdk.NewEvent( - types.EventTypeRecvPacket, + types.EventTypeWriteAck, + sdk.NewAttribute(types.AttributeKeyData, string(packet.GetData())), + sdk.NewAttribute(types.AttributeKeyTimeoutHeight, packet.GetTimeoutHeight().String()), + sdk.NewAttribute(types.AttributeKeyTimeoutTimestamp, fmt.Sprintf("%d", packet.GetTimeoutTimestamp())), + sdk.NewAttribute(types.AttributeKeySequence, fmt.Sprintf("%d", packet.GetSequence())), + sdk.NewAttribute(types.AttributeKeySrcPort, packet.GetSourcePort()), + sdk.NewAttribute(types.AttributeKeySrcChannel, packet.GetSourceChannel()), + sdk.NewAttribute(types.AttributeKeyDstPort, packet.GetDestPort()), + sdk.NewAttribute(types.AttributeKeyDstChannel, packet.GetDestChannel()), sdk.NewAttribute(types.AttributeKeyAck, string(acknowledgement)), ), sdk.NewEvent( diff --git a/x/ibc/core/04-channel/types/events.go b/x/ibc/core/04-channel/types/events.go index 66c1d078ee..923587d439 100644 --- a/x/ibc/core/04-channel/types/events.go +++ b/x/ibc/core/04-channel/types/events.go @@ -16,6 +16,7 @@ const ( EventTypeSendPacket = "send_packet" EventTypeRecvPacket = "recv_packet" + EventTypeWriteAck = "write_acknowledgement" EventTypeAcknowledgePacket = "acknowledge_packet" EventTypeTimeoutPacket = "timeout_packet" From 9befc6ced86398204381264901590ba7bf2e924f Mon Sep 17 00:00:00 2001 From: Jack Zampolin Date: Tue, 27 Oct 2020 06:53:54 -0700 Subject: [PATCH 08/27] Wrap ProtoCodec in interface (#7637) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * WIP encoding change * Add test that describes issue * WIP debugging * remove extra code * Update codec/proto_codec.go Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> --- codec/proto_codec.go | 8 ++++++++ x/auth/tx/config.go | 4 ++-- x/auth/tx/decoder.go | 4 ++-- x/auth/tx/encoder.go | 2 +- x/ibc/core/03-connection/types/codec.go | 2 +- 5 files changed, 14 insertions(+), 6 deletions(-) diff --git a/codec/proto_codec.go b/codec/proto_codec.go index c9123f5d75..e77409fe48 100644 --- a/codec/proto_codec.go +++ b/codec/proto_codec.go @@ -11,6 +11,13 @@ import ( "github.com/gogo/protobuf/proto" ) +// ProtoCodecMarshaler defines an interface for codecs that utilize Protobuf for both +// binary and JSON encoding. +type ProtoCodecMarshaler interface { + Marshaler + InterfaceRegistry() types.InterfaceRegistry +} + // ProtoCodec defines a codec that utilizes Protobuf for both binary and JSON // encoding. type ProtoCodec struct { @@ -18,6 +25,7 @@ type ProtoCodec struct { } var _ Marshaler = &ProtoCodec{} +var _ ProtoCodecMarshaler = &ProtoCodec{} // NewProtoCodec returns a reference to a new ProtoCodec func NewProtoCodec(interfaceRegistry types.InterfaceRegistry) *ProtoCodec { diff --git a/x/auth/tx/config.go b/x/auth/tx/config.go index b7ca179a84..8402423dbf 100644 --- a/x/auth/tx/config.go +++ b/x/auth/tx/config.go @@ -18,12 +18,12 @@ type config struct { encoder sdk.TxEncoder jsonDecoder sdk.TxDecoder jsonEncoder sdk.TxEncoder - protoCodec *codec.ProtoCodec + protoCodec codec.ProtoCodecMarshaler } // NewTxConfig returns a new protobuf TxConfig using the provided ProtoCodec and sign modes. The // first enabled sign mode will become the default sign mode. -func NewTxConfig(protoCodec *codec.ProtoCodec, enabledSignModes []signingtypes.SignMode) client.TxConfig { +func NewTxConfig(protoCodec codec.ProtoCodecMarshaler, enabledSignModes []signingtypes.SignMode) client.TxConfig { return &config{ handler: makeSignModeHandler(enabledSignModes), decoder: DefaultTxDecoder(protoCodec), diff --git a/x/auth/tx/decoder.go b/x/auth/tx/decoder.go index 59ba8467eb..5f48ddd3aa 100644 --- a/x/auth/tx/decoder.go +++ b/x/auth/tx/decoder.go @@ -9,7 +9,7 @@ import ( ) // DefaultTxDecoder returns a default protobuf TxDecoder using the provided Marshaler. -func DefaultTxDecoder(cdc *codec.ProtoCodec) sdk.TxDecoder { +func DefaultTxDecoder(cdc codec.ProtoCodecMarshaler) sdk.TxDecoder { return func(txBytes []byte) (sdk.Tx, error) { var raw tx.TxRaw @@ -66,7 +66,7 @@ func DefaultTxDecoder(cdc *codec.ProtoCodec) sdk.TxDecoder { } // DefaultJSONTxDecoder returns a default protobuf JSON TxDecoder using the provided Marshaler. -func DefaultJSONTxDecoder(cdc *codec.ProtoCodec) sdk.TxDecoder { +func DefaultJSONTxDecoder(cdc codec.ProtoCodecMarshaler) sdk.TxDecoder { return func(txBytes []byte) (sdk.Tx, error) { var theTx tx.Tx err := cdc.UnmarshalJSON(txBytes, &theTx) diff --git a/x/auth/tx/encoder.go b/x/auth/tx/encoder.go index 5655df7686..35cecac556 100644 --- a/x/auth/tx/encoder.go +++ b/x/auth/tx/encoder.go @@ -29,7 +29,7 @@ func DefaultTxEncoder() sdk.TxEncoder { } // DefaultJSONTxEncoder returns a default protobuf JSON TxEncoder using the provided Marshaler. -func DefaultJSONTxEncoder(cdc *codec.ProtoCodec) sdk.TxEncoder { +func DefaultJSONTxEncoder(cdc codec.ProtoCodecMarshaler) sdk.TxEncoder { return func(tx sdk.Tx) ([]byte, error) { txWrapper, ok := tx.(*wrapper) if ok { diff --git a/x/ibc/core/03-connection/types/codec.go b/x/ibc/core/03-connection/types/codec.go index dec4826210..9caa35332b 100644 --- a/x/ibc/core/03-connection/types/codec.go +++ b/x/ibc/core/03-connection/types/codec.go @@ -39,7 +39,7 @@ var ( // SubModuleCdc references the global x/ibc/core/03-connection module codec. Note, the codec should // ONLY be used in certain instances of tests and for JSON encoding. // - // The actual codec used for serialization should be provided to x/ibc/core/03-connectionl and + // The actual codec used for serialization should be provided to x/ibc/core/03-connection and // defined at the application level. SubModuleCdc = codec.NewProtoCodec(codectypes.NewInterfaceRegistry()) ) From 7ccd2675d737e1ff88d017018f8fb54d711c6e93 Mon Sep 17 00:00:00 2001 From: Federico Kunze <31522760+fedekunze@users.noreply.github.com> Date: Tue, 27 Oct 2020 15:14:07 +0100 Subject: [PATCH 09/27] ibc: refactor proto files (#7689) Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- .../applications/transfer/v1/transfer.proto | 37 - proto/ibc/applications/transfer/v1/tx.proto | 43 + proto/ibc/core/channel/v1/channel.proto | 199 - proto/ibc/core/channel/v1/tx.proto | 207 + proto/ibc/core/connection/v1/connection.proto | 106 - proto/ibc/core/connection/v1/tx.proto | 113 + .../transfer/types/transfer.pb.go | 713 +-- x/ibc/applications/transfer/types/tx.pb.go | 810 +++ x/ibc/core/02-client/types/client.pb.go | 2 +- .../core/03-connection/types/connection.pb.go | 2747 +-------- x/ibc/core/03-connection/types/tx.pb.go | 2806 +++++++++ x/ibc/core/04-channel/types/channel.pb.go | 5378 +--------------- x/ibc/core/04-channel/types/tx.pb.go | 5405 +++++++++++++++++ x/staking/types/staking.pb.go | 1421 ++--- x/staking/types/tx.pb.go | 110 +- 15 files changed, 10290 insertions(+), 9807 deletions(-) create mode 100644 proto/ibc/applications/transfer/v1/tx.proto create mode 100644 proto/ibc/core/channel/v1/tx.proto create mode 100644 proto/ibc/core/connection/v1/tx.proto create mode 100644 x/ibc/applications/transfer/types/tx.pb.go create mode 100644 x/ibc/core/03-connection/types/tx.pb.go create mode 100644 x/ibc/core/04-channel/types/tx.pb.go diff --git a/proto/ibc/applications/transfer/v1/transfer.proto b/proto/ibc/applications/transfer/v1/transfer.proto index 1ebc884542..b388c3b879 100644 --- a/proto/ibc/applications/transfer/v1/transfer.proto +++ b/proto/ibc/applications/transfer/v1/transfer.proto @@ -4,43 +4,6 @@ package ibc.applications.transfer.v1; option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer/types"; import "gogoproto/gogo.proto"; -import "cosmos/base/v1beta1/coin.proto"; -import "ibc/core/client/v1/client.proto"; - -// Msg defines the ibc/transfer Msg service. -service Msg { - // Transfer defines a rpc handler method for MsgTransfer. - rpc Transfer(MsgTransfer) returns (MsgTransferResponse); -} - -// MsgTransfer defines a msg to transfer fungible tokens (i.e Coins) between -// ICS20 enabled chains. See ICS Spec here: -// https://github.com/cosmos/ics/tree/master/spec/ics-020-fungible-token-transfer#data-structures -message MsgTransfer { - option (gogoproto.equal) = false; - option (gogoproto.goproto_getters) = false; - - // the port on which the packet will be sent - string source_port = 1 [(gogoproto.moretags) = "yaml:\"source_port\""]; - // the channel by which the packet will be sent - string source_channel = 2 [(gogoproto.moretags) = "yaml:\"source_channel\""]; - // the tokens to be transferred - cosmos.base.v1beta1.Coin token = 3 [(gogoproto.nullable) = false]; - // the sender address - string sender = 4; - // the recipient address on the destination chain - string receiver = 5; - // Timeout height relative to the current block height. - // The timeout is disabled when set to 0. - ibc.core.client.v1.Height timeout_height = 6 - [(gogoproto.moretags) = "yaml:\"timeout_height\"", (gogoproto.nullable) = false]; - // Timeout timestamp (in nanoseconds) relative to the current block timestamp. - // The timeout is disabled when set to 0. - uint64 timeout_timestamp = 7 [(gogoproto.moretags) = "yaml:\"timeout_timestamp\""]; -} - -// MsgTransferResponse defines the Msg/Transfer response type. -message MsgTransferResponse { } // FungibleTokenPacketData defines a struct for the packet payload // See FungibleTokenPacketData spec: diff --git a/proto/ibc/applications/transfer/v1/tx.proto b/proto/ibc/applications/transfer/v1/tx.proto new file mode 100644 index 0000000000..eb2e12e5df --- /dev/null +++ b/proto/ibc/applications/transfer/v1/tx.proto @@ -0,0 +1,43 @@ +syntax = "proto3"; +package ibc.applications.transfer.v1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer/types"; + +import "gogoproto/gogo.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "ibc/core/client/v1/client.proto"; + +// Msg defines the ibc/transfer Msg service. +service Msg { + // Transfer defines a rpc handler method for MsgTransfer. + rpc Transfer(MsgTransfer) returns (MsgTransferResponse); +} + +// MsgTransfer defines a msg to transfer fungible tokens (i.e Coins) between +// ICS20 enabled chains. See ICS Spec here: +// https://github.com/cosmos/ics/tree/master/spec/ics-020-fungible-token-transfer#data-structures +message MsgTransfer { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // the port on which the packet will be sent + string source_port = 1 [(gogoproto.moretags) = "yaml:\"source_port\""]; + // the channel by which the packet will be sent + string source_channel = 2 [(gogoproto.moretags) = "yaml:\"source_channel\""]; + // the tokens to be transferred + cosmos.base.v1beta1.Coin token = 3 [(gogoproto.nullable) = false]; + // the sender address + string sender = 4; + // the recipient address on the destination chain + string receiver = 5; + // Timeout height relative to the current block height. + // The timeout is disabled when set to 0. + ibc.core.client.v1.Height timeout_height = 6 + [(gogoproto.moretags) = "yaml:\"timeout_height\"", (gogoproto.nullable) = false]; + // Timeout timestamp (in nanoseconds) relative to the current block timestamp. + // The timeout is disabled when set to 0. + uint64 timeout_timestamp = 7 [(gogoproto.moretags) = "yaml:\"timeout_timestamp\""]; +} + +// MsgTransferResponse defines the Msg/Transfer response type. +message MsgTransferResponse { } diff --git a/proto/ibc/core/channel/v1/channel.proto b/proto/ibc/core/channel/v1/channel.proto index 41414e8c23..376ce9764e 100644 --- a/proto/ibc/core/channel/v1/channel.proto +++ b/proto/ibc/core/channel/v1/channel.proto @@ -6,205 +6,6 @@ option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types"; import "gogoproto/gogo.proto"; import "ibc/core/client/v1/client.proto"; -// Msg defines the ibc/channel Msg service. -service Msg { - // ChannelOpenInit defines a rpc handler method for MsgChannelOpenInit. - rpc ChannelOpenInit(MsgChannelOpenInit) returns (MsgChannelOpenInitResponse); - - // ChannelOpenTry defines a rpc handler method for MsgChannelOpenTry. - rpc ChannelOpenTry(MsgChannelOpenTry) returns (MsgChannelOpenTryResponse); - - // ChannelOpenAck defines a rpc handler method for MsgChannelOpenAck. - rpc ChannelOpenAck(MsgChannelOpenAck) returns (MsgChannelOpenAckResponse); - - // ChannelOpenConfirm defines a rpc handler method for MsgChannelOpenConfirm. - rpc ChannelOpenConfirm(MsgChannelOpenConfirm) returns (MsgChannelOpenConfirmResponse); - - // ChannelCloseInit defines a rpc handler method for MsgChannelCloseInit. - rpc ChannelCloseInit(MsgChannelCloseInit) returns (MsgChannelCloseInitResponse); - - // ChannelCloseConfirm defines a rpc handler method for MsgChannelCloseConfirm. - rpc ChannelCloseConfirm(MsgChannelCloseConfirm) returns (MsgChannelCloseConfirmResponse); - - // RecvPacket defines a rpc handler method for MsgRecvPacket. - rpc RecvPacket(MsgRecvPacket) returns (MsgRecvPacketResponse); - - // Timeout defines a rpc handler method for MsgTimeout. - rpc Timeout(MsgTimeout) returns (MsgTimeoutResponse); - - // TimeoutOnClose defines a rpc handler method for MsgTimeoutOnClose. - rpc TimeoutOnClose(MsgTimeoutOnClose) returns (MsgTimeoutOnCloseResponse); - - // Acknowledgement defines a rpc handler method for MsgAcknowledgement. - rpc Acknowledgement(MsgAcknowledgement) returns (MsgAcknowledgementResponse); -} - -// MsgChannelOpenInit defines an sdk.Msg to initialize a channel handshake. It -// is called by a relayer on Chain A. -message MsgChannelOpenInit { - option (gogoproto.equal) = false; - option (gogoproto.goproto_getters) = false; - - string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; - string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; - Channel channel = 3 [(gogoproto.nullable) = false]; - string signer = 4; -} - -// MsgChannelOpenInitResponse defines the Msg/ChannelOpenInit response type. -message MsgChannelOpenInitResponse {} - -// MsgChannelOpenInit defines a msg sent by a Relayer to try to open a channel -// on Chain B. -message MsgChannelOpenTry { - option (gogoproto.equal) = false; - option (gogoproto.goproto_getters) = false; - - string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; - string desired_channel_id = 2 [(gogoproto.moretags) = "yaml:\"desired_channel_id\""]; - string counterparty_chosen_channel_id = 3 [(gogoproto.moretags) = "yaml:\"counterparty_chosen_channel_id\""]; - Channel channel = 4 [(gogoproto.nullable) = false]; - string counterparty_version = 5 [(gogoproto.moretags) = "yaml:\"counterparty_version\""]; - bytes proof_init = 6 [(gogoproto.moretags) = "yaml:\"proof_init\""]; - ibc.core.client.v1.Height proof_height = 7 - [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; - string signer = 8; -} - -// MsgChannelOpenTryResponse defines the Msg/ChannelOpenTry response type. -message MsgChannelOpenTryResponse {} - -// MsgChannelOpenAck defines a msg sent by a Relayer to Chain A to acknowledge -// the change of channel state to TRYOPEN on Chain B. -message MsgChannelOpenAck { - option (gogoproto.equal) = false; - option (gogoproto.goproto_getters) = false; - - string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; - string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; - string counterparty_channel_id = 3 [(gogoproto.moretags) = "yaml:\"counterparty_channel_id\""]; - string counterparty_version = 4 [(gogoproto.moretags) = "yaml:\"counterparty_version\""]; - bytes proof_try = 5 [(gogoproto.moretags) = "yaml:\"proof_try\""]; - ibc.core.client.v1.Height proof_height = 6 - [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; - string signer = 7; -} - -// MsgChannelOpenAckResponse defines the Msg/ChannelOpenAck response type. -message MsgChannelOpenAckResponse {} - -// MsgChannelOpenConfirm defines a msg sent by a Relayer to Chain B to -// acknowledge the change of channel state to OPEN on Chain A. -message MsgChannelOpenConfirm { - option (gogoproto.equal) = false; - option (gogoproto.goproto_getters) = false; - - string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; - string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; - bytes proof_ack = 3 [(gogoproto.moretags) = "yaml:\"proof_ack\""]; - ibc.core.client.v1.Height proof_height = 4 - [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; - string signer = 5; -} - -// MsgChannelOpenConfirmResponse defines the Msg/ChannelOpenConfirm response type. -message MsgChannelOpenConfirmResponse {} - -// MsgChannelCloseInit defines a msg sent by a Relayer to Chain A -// to close a channel with Chain B. -message MsgChannelCloseInit { - option (gogoproto.equal) = false; - option (gogoproto.goproto_getters) = false; - - string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; - string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; - string signer = 3; -} - -// MsgChannelCloseInitResponse defines the Msg/ChannelCloseInit response type. -message MsgChannelCloseInitResponse {} - -// MsgChannelCloseConfirm defines a msg sent by a Relayer to Chain B -// to acknowledge the change of channel state to CLOSED on Chain A. -message MsgChannelCloseConfirm { - option (gogoproto.equal) = false; - option (gogoproto.goproto_getters) = false; - - string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; - string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; - bytes proof_init = 3 [(gogoproto.moretags) = "yaml:\"proof_init\""]; - ibc.core.client.v1.Height proof_height = 4 - [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; - string signer = 5; -} - -// MsgChannelCloseConfirmResponse defines the Msg/ChannelCloseConfirm response type. -message MsgChannelCloseConfirmResponse {} - -// MsgRecvPacket receives incoming IBC packet -message MsgRecvPacket { - option (gogoproto.equal) = false; - option (gogoproto.goproto_getters) = false; - - Packet packet = 1 [(gogoproto.nullable) = false]; - bytes proof = 2; - ibc.core.client.v1.Height proof_height = 3 - [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; - string signer = 4; -} - -// MsgRecvPacketResponse defines the Msg/RecvPacket response type. -message MsgRecvPacketResponse {} - -// MsgTimeout receives timed-out packet -message MsgTimeout { - option (gogoproto.equal) = false; - option (gogoproto.goproto_getters) = false; - - Packet packet = 1 [(gogoproto.nullable) = false]; - bytes proof = 2; - ibc.core.client.v1.Height proof_height = 3 - [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; - uint64 next_sequence_recv = 4 [(gogoproto.moretags) = "yaml:\"next_sequence_recv\""]; - string signer = 5; -} - -// MsgTimeoutResponse defines the Msg/Timeout response type. -message MsgTimeoutResponse {} - -// MsgTimeoutOnClose timed-out packet upon counterparty channel closure. -message MsgTimeoutOnClose { - option (gogoproto.equal) = false; - option (gogoproto.goproto_getters) = false; - - Packet packet = 1 [(gogoproto.nullable) = false]; - bytes proof = 2; - bytes proof_close = 3 [(gogoproto.moretags) = "yaml:\"proof_close\""]; - ibc.core.client.v1.Height proof_height = 4 - [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; - uint64 next_sequence_recv = 5 [(gogoproto.moretags) = "yaml:\"next_sequence_recv\""]; - string signer = 6; -} - -// MsgTimeoutOnCloseResponse defines the Msg/TimeoutOnClose response type. -message MsgTimeoutOnCloseResponse {} - -// MsgAcknowledgement receives incoming IBC acknowledgement -message MsgAcknowledgement { - option (gogoproto.equal) = false; - option (gogoproto.goproto_getters) = false; - - Packet packet = 1 [(gogoproto.nullable) = false]; - bytes acknowledgement = 2; - bytes proof = 3; - ibc.core.client.v1.Height proof_height = 4 - [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; - string signer = 5; -} - -// MsgAcknowledgementResponse defines the Msg/Acknowledgement response type. -message MsgAcknowledgementResponse {} - // Channel defines pipeline for exactly-once packet delivery between specific // modules on separate blockchains, which has at least one end capable of // sending packets and one end capable of receiving packets. diff --git a/proto/ibc/core/channel/v1/tx.proto b/proto/ibc/core/channel/v1/tx.proto new file mode 100644 index 0000000000..0426c741b9 --- /dev/null +++ b/proto/ibc/core/channel/v1/tx.proto @@ -0,0 +1,207 @@ +syntax = "proto3"; +package ibc.core.channel.v1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types"; + +import "gogoproto/gogo.proto"; +import "ibc/core/client/v1/client.proto"; +import "ibc/core/channel/v1/channel.proto"; + +// Msg defines the ibc/channel Msg service. +service Msg { + // ChannelOpenInit defines a rpc handler method for MsgChannelOpenInit. + rpc ChannelOpenInit(MsgChannelOpenInit) returns (MsgChannelOpenInitResponse); + + // ChannelOpenTry defines a rpc handler method for MsgChannelOpenTry. + rpc ChannelOpenTry(MsgChannelOpenTry) returns (MsgChannelOpenTryResponse); + + // ChannelOpenAck defines a rpc handler method for MsgChannelOpenAck. + rpc ChannelOpenAck(MsgChannelOpenAck) returns (MsgChannelOpenAckResponse); + + // ChannelOpenConfirm defines a rpc handler method for MsgChannelOpenConfirm. + rpc ChannelOpenConfirm(MsgChannelOpenConfirm) returns (MsgChannelOpenConfirmResponse); + + // ChannelCloseInit defines a rpc handler method for MsgChannelCloseInit. + rpc ChannelCloseInit(MsgChannelCloseInit) returns (MsgChannelCloseInitResponse); + + // ChannelCloseConfirm defines a rpc handler method for MsgChannelCloseConfirm. + rpc ChannelCloseConfirm(MsgChannelCloseConfirm) returns (MsgChannelCloseConfirmResponse); + + // RecvPacket defines a rpc handler method for MsgRecvPacket. + rpc RecvPacket(MsgRecvPacket) returns (MsgRecvPacketResponse); + + // Timeout defines a rpc handler method for MsgTimeout. + rpc Timeout(MsgTimeout) returns (MsgTimeoutResponse); + + // TimeoutOnClose defines a rpc handler method for MsgTimeoutOnClose. + rpc TimeoutOnClose(MsgTimeoutOnClose) returns (MsgTimeoutOnCloseResponse); + + // Acknowledgement defines a rpc handler method for MsgAcknowledgement. + rpc Acknowledgement(MsgAcknowledgement) returns (MsgAcknowledgementResponse); +} + +// MsgChannelOpenInit defines an sdk.Msg to initialize a channel handshake. It +// is called by a relayer on Chain A. +message MsgChannelOpenInit { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + Channel channel = 3 [(gogoproto.nullable) = false]; + string signer = 4; +} + +// MsgChannelOpenInitResponse defines the Msg/ChannelOpenInit response type. +message MsgChannelOpenInitResponse {} + +// MsgChannelOpenInit defines a msg sent by a Relayer to try to open a channel +// on Chain B. +message MsgChannelOpenTry { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + string desired_channel_id = 2 [(gogoproto.moretags) = "yaml:\"desired_channel_id\""]; + string counterparty_chosen_channel_id = 3 [(gogoproto.moretags) = "yaml:\"counterparty_chosen_channel_id\""]; + Channel channel = 4 [(gogoproto.nullable) = false]; + string counterparty_version = 5 [(gogoproto.moretags) = "yaml:\"counterparty_version\""]; + bytes proof_init = 6 [(gogoproto.moretags) = "yaml:\"proof_init\""]; + ibc.core.client.v1.Height proof_height = 7 + [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; + string signer = 8; +} + +// MsgChannelOpenTryResponse defines the Msg/ChannelOpenTry response type. +message MsgChannelOpenTryResponse {} + +// MsgChannelOpenAck defines a msg sent by a Relayer to Chain A to acknowledge +// the change of channel state to TRYOPEN on Chain B. +message MsgChannelOpenAck { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + string counterparty_channel_id = 3 [(gogoproto.moretags) = "yaml:\"counterparty_channel_id\""]; + string counterparty_version = 4 [(gogoproto.moretags) = "yaml:\"counterparty_version\""]; + bytes proof_try = 5 [(gogoproto.moretags) = "yaml:\"proof_try\""]; + ibc.core.client.v1.Height proof_height = 6 + [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; + string signer = 7; +} + +// MsgChannelOpenAckResponse defines the Msg/ChannelOpenAck response type. +message MsgChannelOpenAckResponse {} + +// MsgChannelOpenConfirm defines a msg sent by a Relayer to Chain B to +// acknowledge the change of channel state to OPEN on Chain A. +message MsgChannelOpenConfirm { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + bytes proof_ack = 3 [(gogoproto.moretags) = "yaml:\"proof_ack\""]; + ibc.core.client.v1.Height proof_height = 4 + [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; + string signer = 5; +} + +// MsgChannelOpenConfirmResponse defines the Msg/ChannelOpenConfirm response type. +message MsgChannelOpenConfirmResponse {} + +// MsgChannelCloseInit defines a msg sent by a Relayer to Chain A +// to close a channel with Chain B. +message MsgChannelCloseInit { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + string signer = 3; +} + +// MsgChannelCloseInitResponse defines the Msg/ChannelCloseInit response type. +message MsgChannelCloseInitResponse {} + +// MsgChannelCloseConfirm defines a msg sent by a Relayer to Chain B +// to acknowledge the change of channel state to CLOSED on Chain A. +message MsgChannelCloseConfirm { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; + string channel_id = 2 [(gogoproto.moretags) = "yaml:\"channel_id\""]; + bytes proof_init = 3 [(gogoproto.moretags) = "yaml:\"proof_init\""]; + ibc.core.client.v1.Height proof_height = 4 + [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; + string signer = 5; +} + +// MsgChannelCloseConfirmResponse defines the Msg/ChannelCloseConfirm response type. +message MsgChannelCloseConfirmResponse {} + +// MsgRecvPacket receives incoming IBC packet +message MsgRecvPacket { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + Packet packet = 1 [(gogoproto.nullable) = false]; + bytes proof = 2; + ibc.core.client.v1.Height proof_height = 3 + [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; + string signer = 4; +} + +// MsgRecvPacketResponse defines the Msg/RecvPacket response type. +message MsgRecvPacketResponse {} + +// MsgTimeout receives timed-out packet +message MsgTimeout { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + Packet packet = 1 [(gogoproto.nullable) = false]; + bytes proof = 2; + ibc.core.client.v1.Height proof_height = 3 + [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; + uint64 next_sequence_recv = 4 [(gogoproto.moretags) = "yaml:\"next_sequence_recv\""]; + string signer = 5; +} + +// MsgTimeoutResponse defines the Msg/Timeout response type. +message MsgTimeoutResponse {} + +// MsgTimeoutOnClose timed-out packet upon counterparty channel closure. +message MsgTimeoutOnClose { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + Packet packet = 1 [(gogoproto.nullable) = false]; + bytes proof = 2; + bytes proof_close = 3 [(gogoproto.moretags) = "yaml:\"proof_close\""]; + ibc.core.client.v1.Height proof_height = 4 + [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; + uint64 next_sequence_recv = 5 [(gogoproto.moretags) = "yaml:\"next_sequence_recv\""]; + string signer = 6; +} + +// MsgTimeoutOnCloseResponse defines the Msg/TimeoutOnClose response type. +message MsgTimeoutOnCloseResponse {} + +// MsgAcknowledgement receives incoming IBC acknowledgement +message MsgAcknowledgement { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + Packet packet = 1 [(gogoproto.nullable) = false]; + bytes acknowledgement = 2; + bytes proof = 3; + ibc.core.client.v1.Height proof_height = 4 + [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; + string signer = 5; +} + +// MsgAcknowledgementResponse defines the Msg/Acknowledgement response type. +message MsgAcknowledgementResponse {} diff --git a/proto/ibc/core/connection/v1/connection.proto b/proto/ibc/core/connection/v1/connection.proto index 5b0dd2fe5d..37c7609c37 100644 --- a/proto/ibc/core/connection/v1/connection.proto +++ b/proto/ibc/core/connection/v1/connection.proto @@ -4,113 +4,7 @@ package ibc.core.connection.v1; option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/core/03-connection/types"; import "gogoproto/gogo.proto"; -import "google/protobuf/any.proto"; import "ibc/core/commitment/v1/commitment.proto"; -import "ibc/core/client/v1/client.proto"; - -// Msg defines the ibc/connection Msg service. -service Msg { - // ConnectionOpenInit defines a rpc handler method for MsgConnectionOpenInit. - rpc ConnectionOpenInit(MsgConnectionOpenInit) returns (MsgConnectionOpenInitResponse); - - // ConnectionOpenTry defines a rpc handler method for MsgConnectionOpenTry. - rpc ConnectionOpenTry(MsgConnectionOpenTry) returns (MsgConnectionOpenTryResponse); - - // ConnectionOpenAck defines a rpc handler method for MsgConnectionOpenAck. - rpc ConnectionOpenAck(MsgConnectionOpenAck) returns (MsgConnectionOpenAckResponse); - - // ConnectionOpenConfirm defines a rpc handler method for MsgConnectionOpenConfirm. - rpc ConnectionOpenConfirm(MsgConnectionOpenConfirm) returns (MsgConnectionOpenConfirmResponse); -} - -// MsgConnectionOpenInit defines the msg sent by an account on Chain A to -// initialize a connection with Chain B. -message MsgConnectionOpenInit { - option (gogoproto.equal) = false; - option (gogoproto.goproto_getters) = false; - - string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; - string connection_id = 2 [(gogoproto.moretags) = "yaml:\"connection_id\""]; - Counterparty counterparty = 3 [(gogoproto.nullable) = false]; - string version = 4; - string signer = 5; -} - -// MsgConnectionOpenInitResponse defines the Msg/ConnectionOpenInit response type. -message MsgConnectionOpenInitResponse { } - -// MsgConnectionOpenTry defines a msg sent by a Relayer to try to open a -// connection on Chain B. -message MsgConnectionOpenTry { - option (gogoproto.equal) = false; - option (gogoproto.goproto_getters) = false; - - string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; - string desired_connection_id = 2 [(gogoproto.moretags) = "yaml:\"desired_connection_id\""]; - string counterparty_chosen_connection_id = 3 [(gogoproto.moretags) = "yaml:\"counterparty_chosen_connection_id\""]; - google.protobuf.Any client_state = 4 [(gogoproto.moretags) = "yaml:\"client_state\""]; - Counterparty counterparty = 5 [(gogoproto.nullable) = false]; - repeated string counterparty_versions = 6 [(gogoproto.moretags) = "yaml:\"counterparty_versions\""]; - ibc.core.client.v1.Height proof_height = 7 - [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; - // proof of the initialization the connection on Chain A: `UNITIALIZED -> - // INIT` - bytes proof_init = 8 [(gogoproto.moretags) = "yaml:\"proof_init\""]; - // proof of client state included in message - bytes proof_client = 9 [(gogoproto.moretags) = "yaml:\"proof_client\""]; - // proof of client consensus state - bytes proof_consensus = 10 [(gogoproto.moretags) = "yaml:\"proof_consensus\""]; - ibc.core.client.v1.Height consensus_height = 11 - [(gogoproto.moretags) = "yaml:\"consensus_height\"", (gogoproto.nullable) = false]; - string signer = 12; -} - -// MsgConnectionOpenTryResponse defines the Msg/ConnectionOpenTry response type. -message MsgConnectionOpenTryResponse { } - -// MsgConnectionOpenAck defines a msg sent by a Relayer to Chain A to -// acknowledge the change of connection state to TRYOPEN on Chain B. -message MsgConnectionOpenAck { - option (gogoproto.equal) = false; - option (gogoproto.goproto_getters) = false; - - string connection_id = 1 [(gogoproto.moretags) = "yaml:\"connection_id\""]; - string counterparty_connection_id = 2 [(gogoproto.moretags) = "yaml:\"counterparty_connection_id\""]; - string version = 3; - google.protobuf.Any client_state = 4 [(gogoproto.moretags) = "yaml:\"client_state\""]; - ibc.core.client.v1.Height proof_height = 5 - [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; - // proof of the initialization the connection on Chain B: `UNITIALIZED -> - // TRYOPEN` - bytes proof_try = 6 [(gogoproto.moretags) = "yaml:\"proof_try\""]; - // proof of client state included in message - bytes proof_client = 7 [(gogoproto.moretags) = "yaml:\"proof_client\""]; - // proof of client consensus state - bytes proof_consensus = 8 [(gogoproto.moretags) = "yaml:\"proof_consensus\""]; - ibc.core.client.v1.Height consensus_height = 9 - [(gogoproto.moretags) = "yaml:\"consensus_height\"", (gogoproto.nullable) = false]; - string signer = 10; -} - -// MsgConnectionOpenAckResponse defines the Msg/ConnectionOpenAck response type. -message MsgConnectionOpenAckResponse { } - -// MsgConnectionOpenConfirm defines a msg sent by a Relayer to Chain B to -// acknowledge the change of connection state to OPEN on Chain A. -message MsgConnectionOpenConfirm { - option (gogoproto.equal) = false; - option (gogoproto.goproto_getters) = false; - - string connection_id = 1 [(gogoproto.moretags) = "yaml:\"connection_id\""]; - // proof for the change of the connection state on Chain A: `INIT -> OPEN` - bytes proof_ack = 2 [(gogoproto.moretags) = "yaml:\"proof_ack\""]; - ibc.core.client.v1.Height proof_height = 3 - [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; - string signer = 4; -} - -// MsgConnectionOpenConfirmResponse defines the Msg/ConnectionOpenConfirm response type. -message MsgConnectionOpenConfirmResponse { } // ICS03 - Connection Data Structures as defined in // https://github.com/cosmos/ics/tree/master/spec/ics-003-connection-semantics#data-structures diff --git a/proto/ibc/core/connection/v1/tx.proto b/proto/ibc/core/connection/v1/tx.proto new file mode 100644 index 0000000000..86f87b53e7 --- /dev/null +++ b/proto/ibc/core/connection/v1/tx.proto @@ -0,0 +1,113 @@ +syntax = "proto3"; +package ibc.core.connection.v1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/core/03-connection/types"; + +import "gogoproto/gogo.proto"; +import "google/protobuf/any.proto"; +import "ibc/core/client/v1/client.proto"; +import "ibc/core/connection/v1/connection.proto"; + +// Msg defines the ibc/connection Msg service. +service Msg { + // ConnectionOpenInit defines a rpc handler method for MsgConnectionOpenInit. + rpc ConnectionOpenInit(MsgConnectionOpenInit) returns (MsgConnectionOpenInitResponse); + + // ConnectionOpenTry defines a rpc handler method for MsgConnectionOpenTry. + rpc ConnectionOpenTry(MsgConnectionOpenTry) returns (MsgConnectionOpenTryResponse); + + // ConnectionOpenAck defines a rpc handler method for MsgConnectionOpenAck. + rpc ConnectionOpenAck(MsgConnectionOpenAck) returns (MsgConnectionOpenAckResponse); + + // ConnectionOpenConfirm defines a rpc handler method for MsgConnectionOpenConfirm. + rpc ConnectionOpenConfirm(MsgConnectionOpenConfirm) returns (MsgConnectionOpenConfirmResponse); +} + +// MsgConnectionOpenInit defines the msg sent by an account on Chain A to +// initialize a connection with Chain B. +message MsgConnectionOpenInit { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; + string connection_id = 2 [(gogoproto.moretags) = "yaml:\"connection_id\""]; + Counterparty counterparty = 3 [(gogoproto.nullable) = false]; + string version = 4; + string signer = 5; +} + +// MsgConnectionOpenInitResponse defines the Msg/ConnectionOpenInit response type. +message MsgConnectionOpenInitResponse { } + +// MsgConnectionOpenTry defines a msg sent by a Relayer to try to open a +// connection on Chain B. +message MsgConnectionOpenTry { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; + string desired_connection_id = 2 [(gogoproto.moretags) = "yaml:\"desired_connection_id\""]; + string counterparty_chosen_connection_id = 3 [(gogoproto.moretags) = "yaml:\"counterparty_chosen_connection_id\""]; + google.protobuf.Any client_state = 4 [(gogoproto.moretags) = "yaml:\"client_state\""]; + Counterparty counterparty = 5 [(gogoproto.nullable) = false]; + repeated string counterparty_versions = 6 [(gogoproto.moretags) = "yaml:\"counterparty_versions\""]; + ibc.core.client.v1.Height proof_height = 7 + [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; + // proof of the initialization the connection on Chain A: `UNITIALIZED -> + // INIT` + bytes proof_init = 8 [(gogoproto.moretags) = "yaml:\"proof_init\""]; + // proof of client state included in message + bytes proof_client = 9 [(gogoproto.moretags) = "yaml:\"proof_client\""]; + // proof of client consensus state + bytes proof_consensus = 10 [(gogoproto.moretags) = "yaml:\"proof_consensus\""]; + ibc.core.client.v1.Height consensus_height = 11 + [(gogoproto.moretags) = "yaml:\"consensus_height\"", (gogoproto.nullable) = false]; + string signer = 12; +} + +// MsgConnectionOpenTryResponse defines the Msg/ConnectionOpenTry response type. +message MsgConnectionOpenTryResponse { } + +// MsgConnectionOpenAck defines a msg sent by a Relayer to Chain A to +// acknowledge the change of connection state to TRYOPEN on Chain B. +message MsgConnectionOpenAck { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string connection_id = 1 [(gogoproto.moretags) = "yaml:\"connection_id\""]; + string counterparty_connection_id = 2 [(gogoproto.moretags) = "yaml:\"counterparty_connection_id\""]; + string version = 3; + google.protobuf.Any client_state = 4 [(gogoproto.moretags) = "yaml:\"client_state\""]; + ibc.core.client.v1.Height proof_height = 5 + [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; + // proof of the initialization the connection on Chain B: `UNITIALIZED -> + // TRYOPEN` + bytes proof_try = 6 [(gogoproto.moretags) = "yaml:\"proof_try\""]; + // proof of client state included in message + bytes proof_client = 7 [(gogoproto.moretags) = "yaml:\"proof_client\""]; + // proof of client consensus state + bytes proof_consensus = 8 [(gogoproto.moretags) = "yaml:\"proof_consensus\""]; + ibc.core.client.v1.Height consensus_height = 9 + [(gogoproto.moretags) = "yaml:\"consensus_height\"", (gogoproto.nullable) = false]; + string signer = 10; +} + +// MsgConnectionOpenAckResponse defines the Msg/ConnectionOpenAck response type. +message MsgConnectionOpenAckResponse { } + +// MsgConnectionOpenConfirm defines a msg sent by a Relayer to Chain B to +// acknowledge the change of connection state to OPEN on Chain A. +message MsgConnectionOpenConfirm { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string connection_id = 1 [(gogoproto.moretags) = "yaml:\"connection_id\""]; + // proof for the change of the connection state on Chain A: `INIT -> OPEN` + bytes proof_ack = 2 [(gogoproto.moretags) = "yaml:\"proof_ack\""]; + ibc.core.client.v1.Height proof_height = 3 + [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; + string signer = 4; +} + +// MsgConnectionOpenConfirmResponse defines the Msg/ConnectionOpenConfirm response type. +message MsgConnectionOpenConfirmResponse { } diff --git a/x/ibc/applications/transfer/types/transfer.pb.go b/x/ibc/applications/transfer/types/transfer.pb.go index db4e10f45c..c051db12a8 100644 --- a/x/ibc/applications/transfer/types/transfer.pb.go +++ b/x/ibc/applications/transfer/types/transfer.pb.go @@ -4,16 +4,9 @@ package types import ( - context "context" fmt "fmt" - types "github.com/cosmos/cosmos-sdk/types" - grpc1 "github.com/gogo/protobuf/grpc" - types1 "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" io "io" math "math" math_bits "math/bits" @@ -30,98 +23,6 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -// MsgTransfer defines a msg to transfer fungible tokens (i.e Coins) between -// ICS20 enabled chains. See ICS Spec here: -// https://github.com/cosmos/ics/tree/master/spec/ics-020-fungible-token-transfer#data-structures -type MsgTransfer struct { - // the port on which the packet will be sent - SourcePort string `protobuf:"bytes,1,opt,name=source_port,json=sourcePort,proto3" json:"source_port,omitempty" yaml:"source_port"` - // the channel by which the packet will be sent - SourceChannel string `protobuf:"bytes,2,opt,name=source_channel,json=sourceChannel,proto3" json:"source_channel,omitempty" yaml:"source_channel"` - // the tokens to be transferred - Token types.Coin `protobuf:"bytes,3,opt,name=token,proto3" json:"token"` - // the sender address - Sender string `protobuf:"bytes,4,opt,name=sender,proto3" json:"sender,omitempty"` - // the recipient address on the destination chain - Receiver string `protobuf:"bytes,5,opt,name=receiver,proto3" json:"receiver,omitempty"` - // Timeout height relative to the current block height. - // The timeout is disabled when set to 0. - TimeoutHeight types1.Height `protobuf:"bytes,6,opt,name=timeout_height,json=timeoutHeight,proto3" json:"timeout_height" yaml:"timeout_height"` - // Timeout timestamp (in nanoseconds) relative to the current block timestamp. - // The timeout is disabled when set to 0. - TimeoutTimestamp uint64 `protobuf:"varint,7,opt,name=timeout_timestamp,json=timeoutTimestamp,proto3" json:"timeout_timestamp,omitempty" yaml:"timeout_timestamp"` -} - -func (m *MsgTransfer) Reset() { *m = MsgTransfer{} } -func (m *MsgTransfer) String() string { return proto.CompactTextString(m) } -func (*MsgTransfer) ProtoMessage() {} -func (*MsgTransfer) Descriptor() ([]byte, []int) { - return fileDescriptor_5041673e96e97901, []int{0} -} -func (m *MsgTransfer) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgTransfer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgTransfer.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgTransfer) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgTransfer.Merge(m, src) -} -func (m *MsgTransfer) XXX_Size() int { - return m.Size() -} -func (m *MsgTransfer) XXX_DiscardUnknown() { - xxx_messageInfo_MsgTransfer.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgTransfer proto.InternalMessageInfo - -// MsgTransferResponse defines the Msg/Transfer response type. -type MsgTransferResponse struct { -} - -func (m *MsgTransferResponse) Reset() { *m = MsgTransferResponse{} } -func (m *MsgTransferResponse) String() string { return proto.CompactTextString(m) } -func (*MsgTransferResponse) ProtoMessage() {} -func (*MsgTransferResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_5041673e96e97901, []int{1} -} -func (m *MsgTransferResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgTransferResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgTransferResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgTransferResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgTransferResponse.Merge(m, src) -} -func (m *MsgTransferResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgTransferResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgTransferResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgTransferResponse proto.InternalMessageInfo - // FungibleTokenPacketData defines a struct for the packet payload // See FungibleTokenPacketData spec: // https://github.com/cosmos/ics/tree/master/spec/ics-020-fungible-token-transfer#data-structures @@ -140,7 +41,7 @@ func (m *FungibleTokenPacketData) Reset() { *m = FungibleTokenPacketData func (m *FungibleTokenPacketData) String() string { return proto.CompactTextString(m) } func (*FungibleTokenPacketData) ProtoMessage() {} func (*FungibleTokenPacketData) Descriptor() ([]byte, []int) { - return fileDescriptor_5041673e96e97901, []int{2} + return fileDescriptor_5041673e96e97901, []int{0} } func (m *FungibleTokenPacketData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -211,7 +112,7 @@ func (m *DenomTrace) Reset() { *m = DenomTrace{} } func (m *DenomTrace) String() string { return proto.CompactTextString(m) } func (*DenomTrace) ProtoMessage() {} func (*DenomTrace) Descriptor() ([]byte, []int) { - return fileDescriptor_5041673e96e97901, []int{3} + return fileDescriptor_5041673e96e97901, []int{1} } func (m *DenomTrace) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -271,7 +172,7 @@ func (m *Params) Reset() { *m = Params{} } func (m *Params) String() string { return proto.CompactTextString(m) } func (*Params) ProtoMessage() {} func (*Params) Descriptor() ([]byte, []int) { - return fileDescriptor_5041673e96e97901, []int{4} + return fileDescriptor_5041673e96e97901, []int{2} } func (m *Params) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -315,8 +216,6 @@ func (m *Params) GetReceiveEnabled() bool { } func init() { - proto.RegisterType((*MsgTransfer)(nil), "ibc.applications.transfer.v1.MsgTransfer") - proto.RegisterType((*MsgTransferResponse)(nil), "ibc.applications.transfer.v1.MsgTransferResponse") proto.RegisterType((*FungibleTokenPacketData)(nil), "ibc.applications.transfer.v1.FungibleTokenPacketData") proto.RegisterType((*DenomTrace)(nil), "ibc.applications.transfer.v1.DenomTrace") proto.RegisterType((*Params)(nil), "ibc.applications.transfer.v1.Params") @@ -327,228 +226,30 @@ func init() { } var fileDescriptor_5041673e96e97901 = []byte{ - // 638 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xcd, 0x6e, 0xd3, 0x40, - 0x10, 0x8e, 0x9b, 0x34, 0xa4, 0x1b, 0x5a, 0x60, 0xfb, 0xe7, 0x46, 0xad, 0x5d, 0xf9, 0x54, 0x84, - 0x58, 0x2b, 0x45, 0x08, 0xa9, 0x07, 0x40, 0x69, 0x41, 0x70, 0xa8, 0x54, 0x59, 0x39, 0x20, 0x2e, - 0x61, 0xbd, 0x59, 0x1c, 0xab, 0xf1, 0xae, 0xe5, 0xdd, 0x44, 0x54, 0xbc, 0x00, 0xdc, 0x78, 0x84, - 0x9e, 0x79, 0x92, 0x1e, 0x7b, 0xe4, 0x14, 0xa1, 0xf6, 0xc2, 0x39, 0x4f, 0x80, 0xf6, 0xa7, 0xc1, - 0x41, 0x2a, 0xe2, 0xe4, 0xfd, 0x66, 0xbe, 0x6f, 0x66, 0x67, 0x66, 0xc7, 0xe0, 0x51, 0x1a, 0x93, - 0x10, 0xe7, 0xf9, 0x30, 0x25, 0x58, 0xa6, 0x9c, 0x89, 0x50, 0x16, 0x98, 0x89, 0x8f, 0xb4, 0x08, - 0xc7, 0xed, 0xd9, 0x19, 0xe5, 0x05, 0x97, 0x1c, 0x6e, 0xa7, 0x31, 0x41, 0x65, 0x32, 0x9a, 0x11, - 0xc6, 0xed, 0xd6, 0x5a, 0xc2, 0x13, 0xae, 0x89, 0xa1, 0x3a, 0x19, 0x4d, 0xcb, 0x23, 0x5c, 0x64, - 0x5c, 0x84, 0x31, 0x16, 0x34, 0x1c, 0xb7, 0x63, 0x2a, 0x71, 0x3b, 0x24, 0x3c, 0x65, 0xd6, 0xef, - 0xab, 0x0b, 0x10, 0x5e, 0xd0, 0x90, 0x0c, 0x53, 0xca, 0xa4, 0x4a, 0x6b, 0x4e, 0x86, 0x10, 0x7c, - 0xaf, 0x82, 0xe6, 0xb1, 0x48, 0xba, 0x36, 0x13, 0x7c, 0x06, 0x9a, 0x82, 0x8f, 0x0a, 0x42, 0x7b, - 0x39, 0x2f, 0xa4, 0xeb, 0xec, 0x3a, 0x7b, 0x4b, 0x9d, 0x8d, 0xe9, 0xc4, 0x87, 0x67, 0x38, 0x1b, - 0x1e, 0x04, 0x25, 0x67, 0x10, 0x01, 0x83, 0x4e, 0x78, 0x21, 0xe1, 0x4b, 0xb0, 0x62, 0x7d, 0x64, - 0x80, 0x19, 0xa3, 0x43, 0x77, 0x41, 0x6b, 0xb7, 0xa6, 0x13, 0x7f, 0x7d, 0x4e, 0x6b, 0xfd, 0x41, - 0xb4, 0x6c, 0x0c, 0x87, 0x06, 0xc3, 0xa7, 0x60, 0x51, 0xf2, 0x53, 0xca, 0xdc, 0xea, 0xae, 0xb3, - 0xd7, 0xdc, 0xdf, 0x42, 0xa6, 0x36, 0xa4, 0x6a, 0x43, 0xb6, 0x36, 0x74, 0xc8, 0x53, 0xd6, 0xa9, - 0x5d, 0x4c, 0xfc, 0x4a, 0x64, 0xd8, 0x70, 0x03, 0xd4, 0x05, 0x65, 0x7d, 0x5a, 0xb8, 0x35, 0x95, - 0x30, 0xb2, 0x08, 0xb6, 0x40, 0xa3, 0xa0, 0x84, 0xa6, 0x63, 0x5a, 0xb8, 0x8b, 0xda, 0x33, 0xc3, - 0xf0, 0x03, 0x58, 0x91, 0x69, 0x46, 0xf9, 0x48, 0xf6, 0x06, 0x34, 0x4d, 0x06, 0xd2, 0xad, 0xeb, - 0x9c, 0x2d, 0xa4, 0x66, 0xa0, 0xfa, 0x85, 0x6c, 0x97, 0xc6, 0x6d, 0xf4, 0x46, 0x33, 0x3a, 0x3b, - 0x2a, 0xe9, 0x9f, 0x62, 0xe6, 0xf5, 0x41, 0xb4, 0x6c, 0x0d, 0x86, 0x0d, 0xdf, 0x82, 0x07, 0x37, - 0x0c, 0xf5, 0x15, 0x12, 0x67, 0xb9, 0x7b, 0x67, 0xd7, 0xd9, 0xab, 0x75, 0xb6, 0xa7, 0x13, 0xdf, - 0x9d, 0x0f, 0x32, 0xa3, 0x04, 0xd1, 0x7d, 0x6b, 0xeb, 0xde, 0x98, 0x0e, 0x1a, 0x5f, 0xce, 0xfd, - 0xca, 0xaf, 0x73, 0xbf, 0x12, 0xac, 0x83, 0xd5, 0xd2, 0xac, 0x22, 0x2a, 0x72, 0xce, 0x04, 0x0d, - 0x3e, 0x83, 0xcd, 0xd7, 0x23, 0x96, 0xa4, 0xf1, 0x90, 0x76, 0x55, 0x4b, 0x4e, 0x30, 0x39, 0xa5, - 0xf2, 0x08, 0x4b, 0x0c, 0xd7, 0xc0, 0x62, 0x9f, 0x32, 0x9e, 0x99, 0x41, 0x46, 0x06, 0xa8, 0x96, - 0xe1, 0x8c, 0x8f, 0x98, 0xd4, 0x33, 0xaa, 0x45, 0x16, 0x95, 0x5a, 0x59, 0xbd, 0xb5, 0x95, 0xb5, - 0xf9, 0x56, 0x06, 0x2f, 0x00, 0x38, 0x52, 0x41, 0xbb, 0x05, 0x26, 0x14, 0x42, 0x50, 0xcb, 0xb1, - 0x1c, 0xd8, 0x74, 0xfa, 0x0c, 0x77, 0x00, 0x50, 0x23, 0xec, 0x99, 0x8b, 0xe8, 0x57, 0x11, 0x2d, - 0x29, 0x8b, 0xd6, 0x05, 0x5f, 0x1d, 0x50, 0x3f, 0xc1, 0x05, 0xce, 0x04, 0x3c, 0x00, 0x77, 0x55, - 0xc6, 0x1e, 0x65, 0x38, 0x1e, 0xd2, 0xbe, 0x8e, 0xd2, 0xe8, 0x6c, 0x4e, 0x27, 0xfe, 0xaa, 0x7d, - 0x41, 0x25, 0x6f, 0x10, 0x35, 0x15, 0x7c, 0x65, 0x10, 0x3c, 0x04, 0xf7, 0xec, 0x9d, 0x66, 0xf2, - 0x05, 0x2d, 0x6f, 0x4d, 0x27, 0xfe, 0x86, 0x91, 0xff, 0x45, 0x08, 0xa2, 0x15, 0x6b, 0xb1, 0x41, - 0xf6, 0x39, 0xa8, 0x1e, 0x8b, 0x04, 0x0e, 0x40, 0x63, 0xb6, 0x10, 0x0f, 0xd1, 0xbf, 0xd6, 0x12, - 0x95, 0xe6, 0xd1, 0x6a, 0xff, 0x37, 0xf5, 0x66, 0x74, 0x9d, 0x77, 0x17, 0x57, 0x9e, 0x73, 0x79, - 0xe5, 0x39, 0x3f, 0xaf, 0x3c, 0xe7, 0xdb, 0xb5, 0x57, 0xb9, 0xbc, 0xf6, 0x2a, 0x3f, 0xae, 0xbd, - 0xca, 0xfb, 0xe7, 0x49, 0x2a, 0x07, 0xa3, 0x18, 0x11, 0x9e, 0x85, 0x76, 0xc9, 0xcd, 0xe7, 0xb1, - 0xe8, 0x9f, 0x86, 0x9f, 0xc2, 0xdb, 0xff, 0x2c, 0xf2, 0x2c, 0xa7, 0x22, 0xae, 0xeb, 0xfd, 0x7e, - 0xf2, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x34, 0x4e, 0x38, 0x40, 0x83, 0x04, 0x00, 0x00, -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// MsgClient is the client API for Msg service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type MsgClient interface { - // Transfer defines a rpc handler method for MsgTransfer. - Transfer(ctx context.Context, in *MsgTransfer, opts ...grpc.CallOption) (*MsgTransferResponse, error) -} - -type msgClient struct { - cc grpc1.ClientConn -} - -func NewMsgClient(cc grpc1.ClientConn) MsgClient { - return &msgClient{cc} -} - -func (c *msgClient) Transfer(ctx context.Context, in *MsgTransfer, opts ...grpc.CallOption) (*MsgTransferResponse, error) { - out := new(MsgTransferResponse) - err := c.cc.Invoke(ctx, "/ibc.applications.transfer.v1.Msg/Transfer", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// MsgServer is the server API for Msg service. -type MsgServer interface { - // Transfer defines a rpc handler method for MsgTransfer. - Transfer(context.Context, *MsgTransfer) (*MsgTransferResponse, error) -} - -// UnimplementedMsgServer can be embedded to have forward compatible implementations. -type UnimplementedMsgServer struct { -} - -func (*UnimplementedMsgServer) Transfer(ctx context.Context, req *MsgTransfer) (*MsgTransferResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Transfer not implemented") -} - -func RegisterMsgServer(s grpc1.Server, srv MsgServer) { - s.RegisterService(&_Msg_serviceDesc, srv) -} - -func _Msg_Transfer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgTransfer) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).Transfer(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/ibc.applications.transfer.v1.Msg/Transfer", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).Transfer(ctx, req.(*MsgTransfer)) - } - return interceptor(ctx, in, info, handler) -} - -var _Msg_serviceDesc = grpc.ServiceDesc{ - ServiceName: "ibc.applications.transfer.v1.Msg", - HandlerType: (*MsgServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Transfer", - Handler: _Msg_Transfer_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "ibc/applications/transfer/v1/transfer.proto", -} - -func (m *MsgTransfer) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgTransfer) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgTransfer) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.TimeoutTimestamp != 0 { - i = encodeVarintTransfer(dAtA, i, uint64(m.TimeoutTimestamp)) - i-- - dAtA[i] = 0x38 - } - { - size, err := m.TimeoutHeight.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTransfer(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x32 - if len(m.Receiver) > 0 { - i -= len(m.Receiver) - copy(dAtA[i:], m.Receiver) - i = encodeVarintTransfer(dAtA, i, uint64(len(m.Receiver))) - i-- - dAtA[i] = 0x2a - } - if len(m.Sender) > 0 { - i -= len(m.Sender) - copy(dAtA[i:], m.Sender) - i = encodeVarintTransfer(dAtA, i, uint64(len(m.Sender))) - i-- - dAtA[i] = 0x22 - } - { - size, err := m.Token.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTransfer(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if len(m.SourceChannel) > 0 { - i -= len(m.SourceChannel) - copy(dAtA[i:], m.SourceChannel) - i = encodeVarintTransfer(dAtA, i, uint64(len(m.SourceChannel))) - i-- - dAtA[i] = 0x12 - } - if len(m.SourcePort) > 0 { - i -= len(m.SourcePort) - copy(dAtA[i:], m.SourcePort) - i = encodeVarintTransfer(dAtA, i, uint64(len(m.SourcePort))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgTransferResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgTransferResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgTransferResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil + // 362 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x91, 0x41, 0x6b, 0xe2, 0x40, + 0x14, 0xc7, 0x8d, 0xeb, 0x8a, 0xce, 0x2e, 0xbb, 0x30, 0x2b, 0x1a, 0x64, 0x1b, 0x25, 0x27, 0xa1, + 0x34, 0x41, 0x7a, 0xf3, 0xd0, 0x82, 0xb5, 0x3d, 0x4b, 0xf0, 0x50, 0x7a, 0x91, 0xc9, 0xe4, 0x35, + 0x06, 0x93, 0x99, 0x30, 0x33, 0x4a, 0xa5, 0x9f, 0xa0, 0xb7, 0x7e, 0xac, 0x1e, 0x3d, 0xf6, 0x24, + 0x45, 0xbf, 0x81, 0x9f, 0xa0, 0x64, 0x12, 0x82, 0x14, 0x7a, 0x9a, 0xf7, 0x7b, 0xef, 0xff, 0xff, + 0xcf, 0x83, 0x87, 0xce, 0x23, 0x9f, 0xba, 0x24, 0x4d, 0xe3, 0x88, 0x12, 0x15, 0x71, 0x26, 0x5d, + 0x25, 0x08, 0x93, 0x8f, 0x20, 0xdc, 0xf5, 0xb0, 0xac, 0x9d, 0x54, 0x70, 0xc5, 0xf1, 0xff, 0xc8, + 0xa7, 0xce, 0xa9, 0xd8, 0x29, 0x05, 0xeb, 0x61, 0xb7, 0x15, 0xf2, 0x90, 0x6b, 0xa1, 0x9b, 0x55, + 0xb9, 0xc7, 0x7e, 0x46, 0x9d, 0xbb, 0x15, 0x0b, 0x23, 0x3f, 0x86, 0x19, 0x5f, 0x02, 0x9b, 0x12, + 0xba, 0x04, 0x35, 0x21, 0x8a, 0xe0, 0x16, 0xfa, 0x19, 0x00, 0xe3, 0x89, 0x69, 0xf4, 0x8d, 0x41, + 0xd3, 0xcb, 0x01, 0xb7, 0x51, 0x9d, 0x24, 0x7c, 0xc5, 0x94, 0x59, 0xed, 0x1b, 0x83, 0x9a, 0x57, + 0x50, 0xd6, 0x97, 0xc0, 0x02, 0x10, 0xe6, 0x0f, 0x2d, 0x2f, 0x08, 0x77, 0x51, 0x43, 0x00, 0x85, + 0x68, 0x0d, 0xc2, 0xac, 0xe9, 0x49, 0xc9, 0xf6, 0x35, 0x42, 0x93, 0x2c, 0x74, 0x26, 0x08, 0x05, + 0x8c, 0x51, 0x2d, 0x25, 0x6a, 0x51, 0x7c, 0xa7, 0x6b, 0x7c, 0x86, 0x90, 0x4f, 0x24, 0xcc, 0xf3, + 0x45, 0xaa, 0x7a, 0xd2, 0xcc, 0x3a, 0xda, 0x67, 0xbf, 0x18, 0xa8, 0x3e, 0x25, 0x82, 0x24, 0x12, + 0x8f, 0xd0, 0xef, 0xec, 0xc7, 0x39, 0x30, 0xe2, 0xc7, 0x10, 0xe8, 0x94, 0xc6, 0xb8, 0x73, 0xdc, + 0xf5, 0xfe, 0x6d, 0x48, 0x12, 0x8f, 0xec, 0xd3, 0xa9, 0xed, 0xfd, 0xca, 0xf0, 0x36, 0x27, 0x7c, + 0x83, 0xfe, 0x16, 0x3b, 0x95, 0xf6, 0xaa, 0xb6, 0x77, 0x8f, 0xbb, 0x5e, 0x3b, 0xb7, 0x7f, 0x11, + 0xd8, 0xde, 0x9f, 0xa2, 0x53, 0x84, 0x8c, 0xef, 0xdf, 0xf6, 0x96, 0xb1, 0xdd, 0x5b, 0xc6, 0xc7, + 0xde, 0x32, 0x5e, 0x0f, 0x56, 0x65, 0x7b, 0xb0, 0x2a, 0xef, 0x07, 0xab, 0xf2, 0x70, 0x15, 0x46, + 0x6a, 0xb1, 0xf2, 0x1d, 0xca, 0x13, 0x97, 0x72, 0x99, 0x70, 0x59, 0x3c, 0x17, 0x32, 0x58, 0xba, + 0x4f, 0xee, 0xf7, 0x37, 0x56, 0x9b, 0x14, 0xa4, 0x5f, 0xd7, 0xa7, 0xba, 0xfc, 0x0c, 0x00, 0x00, + 0xff, 0xff, 0x46, 0x73, 0x85, 0x0b, 0x0d, 0x02, 0x00, 0x00, } func (m *FungibleTokenPacketData) Marshal() (dAtA []byte, err error) { @@ -691,47 +392,6 @@ func encodeVarintTransfer(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } -func (m *MsgTransfer) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.SourcePort) - if l > 0 { - n += 1 + l + sovTransfer(uint64(l)) - } - l = len(m.SourceChannel) - if l > 0 { - n += 1 + l + sovTransfer(uint64(l)) - } - l = m.Token.Size() - n += 1 + l + sovTransfer(uint64(l)) - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovTransfer(uint64(l)) - } - l = len(m.Receiver) - if l > 0 { - n += 1 + l + sovTransfer(uint64(l)) - } - l = m.TimeoutHeight.Size() - n += 1 + l + sovTransfer(uint64(l)) - if m.TimeoutTimestamp != 0 { - n += 1 + sovTransfer(uint64(m.TimeoutTimestamp)) - } - return n -} - -func (m *MsgTransferResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - func (m *FungibleTokenPacketData) Size() (n int) { if m == nil { return 0 @@ -794,325 +454,6 @@ func sovTransfer(x uint64) (n int) { func sozTransfer(x uint64) (n int) { return sovTransfer(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (m *MsgTransfer) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTransfer - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgTransfer: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgTransfer: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SourcePort", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTransfer - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTransfer - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTransfer - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SourcePort = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SourceChannel", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTransfer - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTransfer - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTransfer - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SourceChannel = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Token", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTransfer - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTransfer - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTransfer - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Token.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Sender", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTransfer - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTransfer - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTransfer - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Sender = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Receiver", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTransfer - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTransfer - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTransfer - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Receiver = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TimeoutHeight", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTransfer - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTransfer - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTransfer - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.TimeoutHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TimeoutTimestamp", wireType) - } - m.TimeoutTimestamp = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTransfer - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.TimeoutTimestamp |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipTransfer(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTransfer - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthTransfer - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgTransferResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTransfer - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgTransferResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgTransferResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipTransfer(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthTransfer - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthTransfer - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func (m *FungibleTokenPacketData) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/ibc/applications/transfer/types/tx.pb.go b/x/ibc/applications/transfer/types/tx.pb.go new file mode 100644 index 0000000000..dd46dbe261 --- /dev/null +++ b/x/ibc/applications/transfer/types/tx.pb.go @@ -0,0 +1,810 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: ibc/applications/transfer/v1/tx.proto + +package types + +import ( + context "context" + fmt "fmt" + types "github.com/cosmos/cosmos-sdk/types" + types1 "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" + _ "github.com/gogo/protobuf/gogoproto" + grpc1 "github.com/gogo/protobuf/grpc" + proto "github.com/gogo/protobuf/proto" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// MsgTransfer defines a msg to transfer fungible tokens (i.e Coins) between +// ICS20 enabled chains. See ICS Spec here: +// https://github.com/cosmos/ics/tree/master/spec/ics-020-fungible-token-transfer#data-structures +type MsgTransfer struct { + // the port on which the packet will be sent + SourcePort string `protobuf:"bytes,1,opt,name=source_port,json=sourcePort,proto3" json:"source_port,omitempty" yaml:"source_port"` + // the channel by which the packet will be sent + SourceChannel string `protobuf:"bytes,2,opt,name=source_channel,json=sourceChannel,proto3" json:"source_channel,omitempty" yaml:"source_channel"` + // the tokens to be transferred + Token types.Coin `protobuf:"bytes,3,opt,name=token,proto3" json:"token"` + // the sender address + Sender string `protobuf:"bytes,4,opt,name=sender,proto3" json:"sender,omitempty"` + // the recipient address on the destination chain + Receiver string `protobuf:"bytes,5,opt,name=receiver,proto3" json:"receiver,omitempty"` + // Timeout height relative to the current block height. + // The timeout is disabled when set to 0. + TimeoutHeight types1.Height `protobuf:"bytes,6,opt,name=timeout_height,json=timeoutHeight,proto3" json:"timeout_height" yaml:"timeout_height"` + // Timeout timestamp (in nanoseconds) relative to the current block timestamp. + // The timeout is disabled when set to 0. + TimeoutTimestamp uint64 `protobuf:"varint,7,opt,name=timeout_timestamp,json=timeoutTimestamp,proto3" json:"timeout_timestamp,omitempty" yaml:"timeout_timestamp"` +} + +func (m *MsgTransfer) Reset() { *m = MsgTransfer{} } +func (m *MsgTransfer) String() string { return proto.CompactTextString(m) } +func (*MsgTransfer) ProtoMessage() {} +func (*MsgTransfer) Descriptor() ([]byte, []int) { + return fileDescriptor_7401ed9bed2f8e09, []int{0} +} +func (m *MsgTransfer) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgTransfer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgTransfer.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgTransfer) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgTransfer.Merge(m, src) +} +func (m *MsgTransfer) XXX_Size() int { + return m.Size() +} +func (m *MsgTransfer) XXX_DiscardUnknown() { + xxx_messageInfo_MsgTransfer.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgTransfer proto.InternalMessageInfo + +// MsgTransferResponse defines the Msg/Transfer response type. +type MsgTransferResponse struct { +} + +func (m *MsgTransferResponse) Reset() { *m = MsgTransferResponse{} } +func (m *MsgTransferResponse) String() string { return proto.CompactTextString(m) } +func (*MsgTransferResponse) ProtoMessage() {} +func (*MsgTransferResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_7401ed9bed2f8e09, []int{1} +} +func (m *MsgTransferResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgTransferResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgTransferResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgTransferResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgTransferResponse.Merge(m, src) +} +func (m *MsgTransferResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgTransferResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgTransferResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgTransferResponse proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MsgTransfer)(nil), "ibc.applications.transfer.v1.MsgTransfer") + proto.RegisterType((*MsgTransferResponse)(nil), "ibc.applications.transfer.v1.MsgTransferResponse") +} + +func init() { + proto.RegisterFile("ibc/applications/transfer/v1/tx.proto", fileDescriptor_7401ed9bed2f8e09) +} + +var fileDescriptor_7401ed9bed2f8e09 = []byte{ + // 488 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0x41, 0x6f, 0xd3, 0x30, + 0x14, 0xc7, 0x13, 0xd6, 0x95, 0xe2, 0x6a, 0x13, 0x18, 0x36, 0x65, 0xd5, 0x48, 0xaa, 0x48, 0x48, + 0xe5, 0x80, 0xad, 0x0c, 0x21, 0xa4, 0x1d, 0x10, 0xca, 0x2e, 0x70, 0x98, 0x84, 0xa2, 0x1d, 0x10, + 0x97, 0x91, 0x78, 0x26, 0xb1, 0xd6, 0xd8, 0x91, 0xed, 0x46, 0xdb, 0x37, 0xe0, 0xc8, 0x47, 0xd8, + 0x99, 0x4f, 0xb2, 0xe3, 0x8e, 0x9c, 0x2a, 0xd4, 0x5e, 0x38, 0xf7, 0x13, 0xa0, 0xc4, 0x6e, 0x69, + 0x0f, 0x20, 0x4e, 0xf1, 0x7b, 0xff, 0xdf, 0xf3, 0x5f, 0xcf, 0xef, 0x05, 0x3c, 0x63, 0x19, 0xc1, + 0x69, 0x55, 0x8d, 0x19, 0x49, 0x35, 0x13, 0x5c, 0x61, 0x2d, 0x53, 0xae, 0xbe, 0x50, 0x89, 0xeb, + 0x08, 0xeb, 0x2b, 0x54, 0x49, 0xa1, 0x05, 0x3c, 0x64, 0x19, 0x41, 0xeb, 0x18, 0x5a, 0x62, 0xa8, + 0x8e, 0x06, 0x4f, 0x72, 0x91, 0x8b, 0x16, 0xc4, 0xcd, 0xc9, 0xd4, 0x0c, 0x7c, 0x22, 0x54, 0x29, + 0x14, 0xce, 0x52, 0x45, 0x71, 0x1d, 0x65, 0x54, 0xa7, 0x11, 0x26, 0x82, 0x71, 0xab, 0x07, 0x8d, + 0x35, 0x11, 0x92, 0x62, 0x32, 0x66, 0x94, 0xeb, 0xc6, 0xd0, 0x9c, 0x0c, 0x10, 0x7e, 0xdf, 0x02, + 0xfd, 0x53, 0x95, 0x9f, 0x59, 0x27, 0xf8, 0x1a, 0xf4, 0x95, 0x98, 0x48, 0x42, 0xcf, 0x2b, 0x21, + 0xb5, 0xe7, 0x0e, 0xdd, 0xd1, 0x83, 0x78, 0x7f, 0x31, 0x0d, 0xe0, 0x75, 0x5a, 0x8e, 0x8f, 0xc3, + 0x35, 0x31, 0x4c, 0x80, 0x89, 0x3e, 0x08, 0xa9, 0xe1, 0x5b, 0xb0, 0x6b, 0x35, 0x52, 0xa4, 0x9c, + 0xd3, 0xb1, 0x77, 0xaf, 0xad, 0x3d, 0x58, 0x4c, 0x83, 0xbd, 0x8d, 0x5a, 0xab, 0x87, 0xc9, 0x8e, + 0x49, 0x9c, 0x98, 0x18, 0xbe, 0x02, 0xdb, 0x5a, 0x5c, 0x52, 0xee, 0x6d, 0x0d, 0xdd, 0x51, 0xff, + 0xe8, 0x00, 0x99, 0xde, 0x50, 0xd3, 0x1b, 0xb2, 0xbd, 0xa1, 0x13, 0xc1, 0x78, 0xdc, 0xb9, 0x9d, + 0x06, 0x4e, 0x62, 0x68, 0xb8, 0x0f, 0xba, 0x8a, 0xf2, 0x0b, 0x2a, 0xbd, 0x4e, 0x63, 0x98, 0xd8, + 0x08, 0x0e, 0x40, 0x4f, 0x52, 0x42, 0x59, 0x4d, 0xa5, 0xb7, 0xdd, 0x2a, 0xab, 0x18, 0x7e, 0x06, + 0xbb, 0x9a, 0x95, 0x54, 0x4c, 0xf4, 0x79, 0x41, 0x59, 0x5e, 0x68, 0xaf, 0xdb, 0x7a, 0x0e, 0x50, + 0x33, 0x83, 0xe6, 0xbd, 0x90, 0x7d, 0xa5, 0x3a, 0x42, 0xef, 0x5a, 0x22, 0x7e, 0xda, 0x98, 0xfe, + 0x69, 0x66, 0xb3, 0x3e, 0x4c, 0x76, 0x6c, 0xc2, 0xd0, 0xf0, 0x3d, 0x78, 0xb4, 0x24, 0x9a, 0xaf, + 0xd2, 0x69, 0x59, 0x79, 0xf7, 0x87, 0xee, 0xa8, 0x13, 0x1f, 0x2e, 0xa6, 0x81, 0xb7, 0x79, 0xc9, + 0x0a, 0x09, 0x93, 0x87, 0x36, 0x77, 0xb6, 0x4c, 0x1d, 0xf7, 0xbe, 0xde, 0x04, 0xce, 0xaf, 0x9b, + 0xc0, 0x09, 0xf7, 0xc0, 0xe3, 0xb5, 0x59, 0x25, 0x54, 0x55, 0x82, 0x2b, 0x7a, 0x24, 0xc0, 0xd6, + 0xa9, 0xca, 0x61, 0x01, 0x7a, 0xab, 0x31, 0x3e, 0x47, 0xff, 0x5a, 0x26, 0xb4, 0x76, 0xcb, 0x20, + 0xfa, 0x6f, 0x74, 0x69, 0x18, 0x7f, 0xbc, 0x9d, 0xf9, 0xee, 0xdd, 0xcc, 0x77, 0x7f, 0xce, 0x7c, + 0xf7, 0xdb, 0xdc, 0x77, 0xee, 0xe6, 0xbe, 0xf3, 0x63, 0xee, 0x3b, 0x9f, 0xde, 0xe4, 0x4c, 0x17, + 0x93, 0x0c, 0x11, 0x51, 0x62, 0xbb, 0x9a, 0xe6, 0xf3, 0x42, 0x5d, 0x5c, 0xe2, 0x2b, 0xfc, 0xf7, + 0x3f, 0x41, 0x5f, 0x57, 0x54, 0x65, 0xdd, 0x76, 0x2b, 0x5f, 0xfe, 0x0e, 0x00, 0x00, 0xff, 0xff, + 0x26, 0x76, 0x5b, 0xfa, 0x33, 0x03, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type MsgClient interface { + // Transfer defines a rpc handler method for MsgTransfer. + Transfer(ctx context.Context, in *MsgTransfer, opts ...grpc.CallOption) (*MsgTransferResponse, error) +} + +type msgClient struct { + cc grpc1.ClientConn +} + +func NewMsgClient(cc grpc1.ClientConn) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) Transfer(ctx context.Context, in *MsgTransfer, opts ...grpc.CallOption) (*MsgTransferResponse, error) { + out := new(MsgTransferResponse) + err := c.cc.Invoke(ctx, "/ibc.applications.transfer.v1.Msg/Transfer", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +type MsgServer interface { + // Transfer defines a rpc handler method for MsgTransfer. + Transfer(context.Context, *MsgTransfer) (*MsgTransferResponse, error) +} + +// UnimplementedMsgServer can be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (*UnimplementedMsgServer) Transfer(ctx context.Context, req *MsgTransfer) (*MsgTransferResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Transfer not implemented") +} + +func RegisterMsgServer(s grpc1.Server, srv MsgServer) { + s.RegisterService(&_Msg_serviceDesc, srv) +} + +func _Msg_Transfer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgTransfer) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).Transfer(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.applications.transfer.v1.Msg/Transfer", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).Transfer(ctx, req.(*MsgTransfer)) + } + return interceptor(ctx, in, info, handler) +} + +var _Msg_serviceDesc = grpc.ServiceDesc{ + ServiceName: "ibc.applications.transfer.v1.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Transfer", + Handler: _Msg_Transfer_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "ibc/applications/transfer/v1/tx.proto", +} + +func (m *MsgTransfer) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgTransfer) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgTransfer) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.TimeoutTimestamp != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.TimeoutTimestamp)) + i-- + dAtA[i] = 0x38 + } + { + size, err := m.TimeoutHeight.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + if len(m.Receiver) > 0 { + i -= len(m.Receiver) + copy(dAtA[i:], m.Receiver) + i = encodeVarintTx(dAtA, i, uint64(len(m.Receiver))) + i-- + dAtA[i] = 0x2a + } + if len(m.Sender) > 0 { + i -= len(m.Sender) + copy(dAtA[i:], m.Sender) + i = encodeVarintTx(dAtA, i, uint64(len(m.Sender))) + i-- + dAtA[i] = 0x22 + } + { + size, err := m.Token.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.SourceChannel) > 0 { + i -= len(m.SourceChannel) + copy(dAtA[i:], m.SourceChannel) + i = encodeVarintTx(dAtA, i, uint64(len(m.SourceChannel))) + i-- + dAtA[i] = 0x12 + } + if len(m.SourcePort) > 0 { + i -= len(m.SourcePort) + copy(dAtA[i:], m.SourcePort) + i = encodeVarintTx(dAtA, i, uint64(len(m.SourcePort))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgTransferResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgTransferResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgTransferResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintTx(dAtA []byte, offset int, v uint64) int { + offset -= sovTx(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MsgTransfer) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SourcePort) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.SourceChannel) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Token.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Receiver) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.TimeoutHeight.Size() + n += 1 + l + sovTx(uint64(l)) + if m.TimeoutTimestamp != 0 { + n += 1 + sovTx(uint64(m.TimeoutTimestamp)) + } + return n +} + +func (m *MsgTransferResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovTx(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozTx(x uint64) (n int) { + return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MsgTransfer) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgTransfer: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgTransfer: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SourcePort", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SourcePort = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SourceChannel", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SourceChannel = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Token", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Token.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Sender", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Sender = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Receiver", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Receiver = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutHeight", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.TimeoutHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutTimestamp", wireType) + } + m.TimeoutTimestamp = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.TimeoutTimestamp |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgTransferResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgTransferResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgTransferResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipTx(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthTx + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupTx + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthTx + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthTx = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTx = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupTx = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/ibc/core/02-client/types/client.pb.go b/x/ibc/core/02-client/types/client.pb.go index 601a1d7686..aa9bd5c3d3 100644 --- a/x/ibc/core/02-client/types/client.pb.go +++ b/x/ibc/core/02-client/types/client.pb.go @@ -7,8 +7,8 @@ import ( context "context" fmt "fmt" types "github.com/cosmos/cosmos-sdk/codec/types" - grpc1 "github.com/gogo/protobuf/grpc" _ "github.com/gogo/protobuf/gogoproto" + grpc1 "github.com/gogo/protobuf/grpc" proto "github.com/gogo/protobuf/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/x/ibc/core/03-connection/types/connection.pb.go b/x/ibc/core/03-connection/types/connection.pb.go index 79efbee5d0..b2b51dd75a 100644 --- a/x/ibc/core/03-connection/types/connection.pb.go +++ b/x/ibc/core/03-connection/types/connection.pb.go @@ -4,17 +4,10 @@ package types import ( - context "context" fmt "fmt" - types "github.com/cosmos/cosmos-sdk/codec/types" - grpc1 "github.com/gogo/protobuf/grpc" - types1 "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" - types2 "github.com/cosmos/cosmos-sdk/x/ibc/core/23-commitment/types" + types "github.com/cosmos/cosmos-sdk/x/ibc/core/23-commitment/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" io "io" math "math" math_bits "math/bits" @@ -69,346 +62,6 @@ func (State) EnumDescriptor() ([]byte, []int) { return fileDescriptor_90572467c054e43a, []int{0} } -// MsgConnectionOpenInit defines the msg sent by an account on Chain A to -// initialize a connection with Chain B. -type MsgConnectionOpenInit struct { - ClientId string `protobuf:"bytes,1,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty" yaml:"client_id"` - ConnectionId string `protobuf:"bytes,2,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty" yaml:"connection_id"` - Counterparty Counterparty `protobuf:"bytes,3,opt,name=counterparty,proto3" json:"counterparty"` - Version string `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"` - Signer string `protobuf:"bytes,5,opt,name=signer,proto3" json:"signer,omitempty"` -} - -func (m *MsgConnectionOpenInit) Reset() { *m = MsgConnectionOpenInit{} } -func (m *MsgConnectionOpenInit) String() string { return proto.CompactTextString(m) } -func (*MsgConnectionOpenInit) ProtoMessage() {} -func (*MsgConnectionOpenInit) Descriptor() ([]byte, []int) { - return fileDescriptor_90572467c054e43a, []int{0} -} -func (m *MsgConnectionOpenInit) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgConnectionOpenInit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgConnectionOpenInit.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgConnectionOpenInit) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgConnectionOpenInit.Merge(m, src) -} -func (m *MsgConnectionOpenInit) XXX_Size() int { - return m.Size() -} -func (m *MsgConnectionOpenInit) XXX_DiscardUnknown() { - xxx_messageInfo_MsgConnectionOpenInit.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgConnectionOpenInit proto.InternalMessageInfo - -// MsgConnectionOpenInitResponse defines the Msg/ConnectionOpenInit response type. -type MsgConnectionOpenInitResponse struct { -} - -func (m *MsgConnectionOpenInitResponse) Reset() { *m = MsgConnectionOpenInitResponse{} } -func (m *MsgConnectionOpenInitResponse) String() string { return proto.CompactTextString(m) } -func (*MsgConnectionOpenInitResponse) ProtoMessage() {} -func (*MsgConnectionOpenInitResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_90572467c054e43a, []int{1} -} -func (m *MsgConnectionOpenInitResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgConnectionOpenInitResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgConnectionOpenInitResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgConnectionOpenInitResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgConnectionOpenInitResponse.Merge(m, src) -} -func (m *MsgConnectionOpenInitResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgConnectionOpenInitResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgConnectionOpenInitResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgConnectionOpenInitResponse proto.InternalMessageInfo - -// MsgConnectionOpenTry defines a msg sent by a Relayer to try to open a -// connection on Chain B. -type MsgConnectionOpenTry struct { - ClientId string `protobuf:"bytes,1,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty" yaml:"client_id"` - DesiredConnectionId string `protobuf:"bytes,2,opt,name=desired_connection_id,json=desiredConnectionId,proto3" json:"desired_connection_id,omitempty" yaml:"desired_connection_id"` - CounterpartyChosenConnectionId string `protobuf:"bytes,3,opt,name=counterparty_chosen_connection_id,json=counterpartyChosenConnectionId,proto3" json:"counterparty_chosen_connection_id,omitempty" yaml:"counterparty_chosen_connection_id"` - ClientState *types.Any `protobuf:"bytes,4,opt,name=client_state,json=clientState,proto3" json:"client_state,omitempty" yaml:"client_state"` - Counterparty Counterparty `protobuf:"bytes,5,opt,name=counterparty,proto3" json:"counterparty"` - CounterpartyVersions []string `protobuf:"bytes,6,rep,name=counterparty_versions,json=counterpartyVersions,proto3" json:"counterparty_versions,omitempty" yaml:"counterparty_versions"` - ProofHeight types1.Height `protobuf:"bytes,7,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"` - // proof of the initialization the connection on Chain A: `UNITIALIZED -> - // INIT` - ProofInit []byte `protobuf:"bytes,8,opt,name=proof_init,json=proofInit,proto3" json:"proof_init,omitempty" yaml:"proof_init"` - // proof of client state included in message - ProofClient []byte `protobuf:"bytes,9,opt,name=proof_client,json=proofClient,proto3" json:"proof_client,omitempty" yaml:"proof_client"` - // proof of client consensus state - ProofConsensus []byte `protobuf:"bytes,10,opt,name=proof_consensus,json=proofConsensus,proto3" json:"proof_consensus,omitempty" yaml:"proof_consensus"` - ConsensusHeight types1.Height `protobuf:"bytes,11,opt,name=consensus_height,json=consensusHeight,proto3" json:"consensus_height" yaml:"consensus_height"` - Signer string `protobuf:"bytes,12,opt,name=signer,proto3" json:"signer,omitempty"` -} - -func (m *MsgConnectionOpenTry) Reset() { *m = MsgConnectionOpenTry{} } -func (m *MsgConnectionOpenTry) String() string { return proto.CompactTextString(m) } -func (*MsgConnectionOpenTry) ProtoMessage() {} -func (*MsgConnectionOpenTry) Descriptor() ([]byte, []int) { - return fileDescriptor_90572467c054e43a, []int{2} -} -func (m *MsgConnectionOpenTry) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgConnectionOpenTry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgConnectionOpenTry.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgConnectionOpenTry) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgConnectionOpenTry.Merge(m, src) -} -func (m *MsgConnectionOpenTry) XXX_Size() int { - return m.Size() -} -func (m *MsgConnectionOpenTry) XXX_DiscardUnknown() { - xxx_messageInfo_MsgConnectionOpenTry.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgConnectionOpenTry proto.InternalMessageInfo - -// MsgConnectionOpenTryResponse defines the Msg/ConnectionOpenTry response type. -type MsgConnectionOpenTryResponse struct { -} - -func (m *MsgConnectionOpenTryResponse) Reset() { *m = MsgConnectionOpenTryResponse{} } -func (m *MsgConnectionOpenTryResponse) String() string { return proto.CompactTextString(m) } -func (*MsgConnectionOpenTryResponse) ProtoMessage() {} -func (*MsgConnectionOpenTryResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_90572467c054e43a, []int{3} -} -func (m *MsgConnectionOpenTryResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgConnectionOpenTryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgConnectionOpenTryResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgConnectionOpenTryResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgConnectionOpenTryResponse.Merge(m, src) -} -func (m *MsgConnectionOpenTryResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgConnectionOpenTryResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgConnectionOpenTryResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgConnectionOpenTryResponse proto.InternalMessageInfo - -// MsgConnectionOpenAck defines a msg sent by a Relayer to Chain A to -// acknowledge the change of connection state to TRYOPEN on Chain B. -type MsgConnectionOpenAck struct { - ConnectionId string `protobuf:"bytes,1,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty" yaml:"connection_id"` - CounterpartyConnectionId string `protobuf:"bytes,2,opt,name=counterparty_connection_id,json=counterpartyConnectionId,proto3" json:"counterparty_connection_id,omitempty" yaml:"counterparty_connection_id"` - Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` - ClientState *types.Any `protobuf:"bytes,4,opt,name=client_state,json=clientState,proto3" json:"client_state,omitempty" yaml:"client_state"` - ProofHeight types1.Height `protobuf:"bytes,5,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"` - // proof of the initialization the connection on Chain B: `UNITIALIZED -> - // TRYOPEN` - ProofTry []byte `protobuf:"bytes,6,opt,name=proof_try,json=proofTry,proto3" json:"proof_try,omitempty" yaml:"proof_try"` - // proof of client state included in message - ProofClient []byte `protobuf:"bytes,7,opt,name=proof_client,json=proofClient,proto3" json:"proof_client,omitempty" yaml:"proof_client"` - // proof of client consensus state - ProofConsensus []byte `protobuf:"bytes,8,opt,name=proof_consensus,json=proofConsensus,proto3" json:"proof_consensus,omitempty" yaml:"proof_consensus"` - ConsensusHeight types1.Height `protobuf:"bytes,9,opt,name=consensus_height,json=consensusHeight,proto3" json:"consensus_height" yaml:"consensus_height"` - Signer string `protobuf:"bytes,10,opt,name=signer,proto3" json:"signer,omitempty"` -} - -func (m *MsgConnectionOpenAck) Reset() { *m = MsgConnectionOpenAck{} } -func (m *MsgConnectionOpenAck) String() string { return proto.CompactTextString(m) } -func (*MsgConnectionOpenAck) ProtoMessage() {} -func (*MsgConnectionOpenAck) Descriptor() ([]byte, []int) { - return fileDescriptor_90572467c054e43a, []int{4} -} -func (m *MsgConnectionOpenAck) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgConnectionOpenAck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgConnectionOpenAck.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgConnectionOpenAck) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgConnectionOpenAck.Merge(m, src) -} -func (m *MsgConnectionOpenAck) XXX_Size() int { - return m.Size() -} -func (m *MsgConnectionOpenAck) XXX_DiscardUnknown() { - xxx_messageInfo_MsgConnectionOpenAck.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgConnectionOpenAck proto.InternalMessageInfo - -// MsgConnectionOpenAckResponse defines the Msg/ConnectionOpenAck response type. -type MsgConnectionOpenAckResponse struct { -} - -func (m *MsgConnectionOpenAckResponse) Reset() { *m = MsgConnectionOpenAckResponse{} } -func (m *MsgConnectionOpenAckResponse) String() string { return proto.CompactTextString(m) } -func (*MsgConnectionOpenAckResponse) ProtoMessage() {} -func (*MsgConnectionOpenAckResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_90572467c054e43a, []int{5} -} -func (m *MsgConnectionOpenAckResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgConnectionOpenAckResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgConnectionOpenAckResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgConnectionOpenAckResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgConnectionOpenAckResponse.Merge(m, src) -} -func (m *MsgConnectionOpenAckResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgConnectionOpenAckResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgConnectionOpenAckResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgConnectionOpenAckResponse proto.InternalMessageInfo - -// MsgConnectionOpenConfirm defines a msg sent by a Relayer to Chain B to -// acknowledge the change of connection state to OPEN on Chain A. -type MsgConnectionOpenConfirm struct { - ConnectionId string `protobuf:"bytes,1,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty" yaml:"connection_id"` - // proof for the change of the connection state on Chain A: `INIT -> OPEN` - ProofAck []byte `protobuf:"bytes,2,opt,name=proof_ack,json=proofAck,proto3" json:"proof_ack,omitempty" yaml:"proof_ack"` - ProofHeight types1.Height `protobuf:"bytes,3,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"` - Signer string `protobuf:"bytes,4,opt,name=signer,proto3" json:"signer,omitempty"` -} - -func (m *MsgConnectionOpenConfirm) Reset() { *m = MsgConnectionOpenConfirm{} } -func (m *MsgConnectionOpenConfirm) String() string { return proto.CompactTextString(m) } -func (*MsgConnectionOpenConfirm) ProtoMessage() {} -func (*MsgConnectionOpenConfirm) Descriptor() ([]byte, []int) { - return fileDescriptor_90572467c054e43a, []int{6} -} -func (m *MsgConnectionOpenConfirm) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgConnectionOpenConfirm) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgConnectionOpenConfirm.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgConnectionOpenConfirm) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgConnectionOpenConfirm.Merge(m, src) -} -func (m *MsgConnectionOpenConfirm) XXX_Size() int { - return m.Size() -} -func (m *MsgConnectionOpenConfirm) XXX_DiscardUnknown() { - xxx_messageInfo_MsgConnectionOpenConfirm.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgConnectionOpenConfirm proto.InternalMessageInfo - -// MsgConnectionOpenConfirmResponse defines the Msg/ConnectionOpenConfirm response type. -type MsgConnectionOpenConfirmResponse struct { -} - -func (m *MsgConnectionOpenConfirmResponse) Reset() { *m = MsgConnectionOpenConfirmResponse{} } -func (m *MsgConnectionOpenConfirmResponse) String() string { return proto.CompactTextString(m) } -func (*MsgConnectionOpenConfirmResponse) ProtoMessage() {} -func (*MsgConnectionOpenConfirmResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_90572467c054e43a, []int{7} -} -func (m *MsgConnectionOpenConfirmResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgConnectionOpenConfirmResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgConnectionOpenConfirmResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgConnectionOpenConfirmResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgConnectionOpenConfirmResponse.Merge(m, src) -} -func (m *MsgConnectionOpenConfirmResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgConnectionOpenConfirmResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgConnectionOpenConfirmResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgConnectionOpenConfirmResponse proto.InternalMessageInfo - // ConnectionEnd defines a stateful object on a chain connected to another // separate one. NOTE: there must only be 2 defined ConnectionEnds to establish // a connection between two chains. @@ -428,7 +81,7 @@ func (m *ConnectionEnd) Reset() { *m = ConnectionEnd{} } func (m *ConnectionEnd) String() string { return proto.CompactTextString(m) } func (*ConnectionEnd) ProtoMessage() {} func (*ConnectionEnd) Descriptor() ([]byte, []int) { - return fileDescriptor_90572467c054e43a, []int{8} + return fileDescriptor_90572467c054e43a, []int{0} } func (m *ConnectionEnd) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -477,7 +130,7 @@ func (m *IdentifiedConnection) Reset() { *m = IdentifiedConnection{} } func (m *IdentifiedConnection) String() string { return proto.CompactTextString(m) } func (*IdentifiedConnection) ProtoMessage() {} func (*IdentifiedConnection) Descriptor() ([]byte, []int) { - return fileDescriptor_90572467c054e43a, []int{9} + return fileDescriptor_90572467c054e43a, []int{1} } func (m *IdentifiedConnection) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -515,14 +168,14 @@ type Counterparty struct { // given connection. ConnectionId string `protobuf:"bytes,2,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty" yaml:"connection_id"` // commitment merkle prefix of the counterparty chain - Prefix types2.MerklePrefix `protobuf:"bytes,3,opt,name=prefix,proto3" json:"prefix"` + Prefix types.MerklePrefix `protobuf:"bytes,3,opt,name=prefix,proto3" json:"prefix"` } func (m *Counterparty) Reset() { *m = Counterparty{} } func (m *Counterparty) String() string { return proto.CompactTextString(m) } func (*Counterparty) ProtoMessage() {} func (*Counterparty) Descriptor() ([]byte, []int) { - return fileDescriptor_90572467c054e43a, []int{10} + return fileDescriptor_90572467c054e43a, []int{2} } func (m *Counterparty) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -561,7 +214,7 @@ func (m *ClientPaths) Reset() { *m = ClientPaths{} } func (m *ClientPaths) String() string { return proto.CompactTextString(m) } func (*ClientPaths) ProtoMessage() {} func (*ClientPaths) Descriptor() ([]byte, []int) { - return fileDescriptor_90572467c054e43a, []int{11} + return fileDescriptor_90572467c054e43a, []int{3} } func (m *ClientPaths) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -609,7 +262,7 @@ func (m *ConnectionPaths) Reset() { *m = ConnectionPaths{} } func (m *ConnectionPaths) String() string { return proto.CompactTextString(m) } func (*ConnectionPaths) ProtoMessage() {} func (*ConnectionPaths) Descriptor() ([]byte, []int) { - return fileDescriptor_90572467c054e43a, []int{12} + return fileDescriptor_90572467c054e43a, []int{4} } func (m *ConnectionPaths) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -665,7 +318,7 @@ func (m *Version) Reset() { *m = Version{} } func (m *Version) String() string { return proto.CompactTextString(m) } func (*Version) ProtoMessage() {} func (*Version) Descriptor() ([]byte, []int) { - return fileDescriptor_90572467c054e43a, []int{13} + return fileDescriptor_90572467c054e43a, []int{5} } func (m *Version) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -696,14 +349,6 @@ var xxx_messageInfo_Version proto.InternalMessageInfo func init() { proto.RegisterEnum("ibc.core.connection.v1.State", State_name, State_value) - proto.RegisterType((*MsgConnectionOpenInit)(nil), "ibc.core.connection.v1.MsgConnectionOpenInit") - proto.RegisterType((*MsgConnectionOpenInitResponse)(nil), "ibc.core.connection.v1.MsgConnectionOpenInitResponse") - proto.RegisterType((*MsgConnectionOpenTry)(nil), "ibc.core.connection.v1.MsgConnectionOpenTry") - proto.RegisterType((*MsgConnectionOpenTryResponse)(nil), "ibc.core.connection.v1.MsgConnectionOpenTryResponse") - proto.RegisterType((*MsgConnectionOpenAck)(nil), "ibc.core.connection.v1.MsgConnectionOpenAck") - proto.RegisterType((*MsgConnectionOpenAckResponse)(nil), "ibc.core.connection.v1.MsgConnectionOpenAckResponse") - proto.RegisterType((*MsgConnectionOpenConfirm)(nil), "ibc.core.connection.v1.MsgConnectionOpenConfirm") - proto.RegisterType((*MsgConnectionOpenConfirmResponse)(nil), "ibc.core.connection.v1.MsgConnectionOpenConfirmResponse") proto.RegisterType((*ConnectionEnd)(nil), "ibc.core.connection.v1.ConnectionEnd") proto.RegisterType((*IdentifiedConnection)(nil), "ibc.core.connection.v1.IdentifiedConnection") proto.RegisterType((*Counterparty)(nil), "ibc.core.connection.v1.Counterparty") @@ -717,714 +362,45 @@ func init() { } var fileDescriptor_90572467c054e43a = []byte{ - // 1219 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0xcf, 0x6f, 0xe3, 0x44, - 0x14, 0x8e, 0xf3, 0xa3, 0x49, 0x5e, 0xd2, 0x6d, 0xeb, 0x4d, 0x5b, 0x63, 0xb6, 0x76, 0xd6, 0x80, - 0xa8, 0xd0, 0x36, 0xd9, 0xb4, 0x0b, 0x42, 0x45, 0x1c, 0x92, 0x6c, 0x10, 0x11, 0xb4, 0x5b, 0xb9, - 0x29, 0x12, 0xbd, 0x44, 0xa9, 0x33, 0x49, 0xad, 0x34, 0x76, 0x64, 0xbb, 0xdd, 0x0d, 0x57, 0x2e, - 0xab, 0x5e, 0xe0, 0xc2, 0x81, 0x43, 0xa5, 0x95, 0xb8, 0xf3, 0x37, 0x70, 0x5c, 0x71, 0xda, 0x23, - 0xa7, 0x08, 0xb5, 0x17, 0xb8, 0xe6, 0xc6, 0x0d, 0x79, 0xc6, 0x76, 0xc6, 0x89, 0xa3, 0x6d, 0xda, - 0x22, 0x4e, 0x9d, 0x37, 0xef, 0x7b, 0xf3, 0xe6, 0x7d, 0xfe, 0xde, 0xcc, 0xa4, 0xf0, 0xa1, 0x7a, - 0xa4, 0xe4, 0x15, 0xdd, 0x40, 0x79, 0x45, 0xd7, 0x34, 0xa4, 0x58, 0xaa, 0xae, 0xe5, 0xcf, 0x0a, - 0x94, 0x95, 0xeb, 0x19, 0xba, 0xa5, 0xb3, 0x2b, 0xea, 0x91, 0x92, 0xb3, 0x81, 0x39, 0xca, 0x75, - 0x56, 0xe0, 0x33, 0x6d, 0xbd, 0xad, 0x63, 0x48, 0xde, 0x1e, 0x11, 0x34, 0xff, 0x4e, 0x5b, 0xd7, - 0xdb, 0x27, 0x28, 0x8f, 0xad, 0xa3, 0xd3, 0x56, 0xbe, 0xa1, 0xf5, 0x1d, 0x17, 0x9d, 0xb1, 0xdb, - 0x55, 0xad, 0x2e, 0xd2, 0x2c, 0x92, 0xd1, 0xb5, 0x1c, 0xa0, 0x38, 0x02, 0x9e, 0xa8, 0x2e, 0x08, - 0x8f, 0x08, 0x40, 0xfa, 0x29, 0x0c, 0xcb, 0x3b, 0x66, 0xbb, 0xec, 0xed, 0xe7, 0x59, 0x0f, 0x69, - 0x55, 0x4d, 0xb5, 0xd8, 0x02, 0x24, 0x09, 0xb2, 0xae, 0x36, 0x39, 0x26, 0xcb, 0xac, 0x27, 0x4b, - 0x99, 0xe1, 0x40, 0x5c, 0xec, 0x37, 0xba, 0x27, 0xdb, 0x92, 0xe7, 0x92, 0xe4, 0x04, 0x19, 0x57, - 0x9b, 0xec, 0xe7, 0x30, 0x3f, 0x2a, 0xcc, 0x0e, 0x0b, 0xe3, 0x30, 0x6e, 0x38, 0x10, 0x33, 0x4e, - 0x18, 0xed, 0x96, 0xe4, 0xf4, 0xc8, 0xae, 0x36, 0xd9, 0x5d, 0x48, 0x2b, 0xfa, 0xa9, 0x66, 0x21, - 0xa3, 0xd7, 0x30, 0xac, 0x3e, 0x17, 0xc9, 0x32, 0xeb, 0xa9, 0xcd, 0xf7, 0x73, 0xc1, 0xac, 0xe5, - 0xca, 0x14, 0xb6, 0x14, 0x7d, 0x3d, 0x10, 0x43, 0xb2, 0x2f, 0x9e, 0xe5, 0x20, 0x7e, 0x86, 0x0c, - 0x53, 0xd5, 0x35, 0x2e, 0x6a, 0x6f, 0x44, 0x76, 0x4d, 0x76, 0x05, 0xe6, 0x4c, 0xb5, 0xad, 0x21, - 0x83, 0x8b, 0x61, 0x87, 0x63, 0x6d, 0x27, 0x5e, 0xbe, 0x12, 0x43, 0x7f, 0xbd, 0x12, 0x43, 0x92, - 0x08, 0x6b, 0x81, 0xb4, 0xc8, 0xc8, 0xec, 0xe9, 0x9a, 0x89, 0xa4, 0x5f, 0xe3, 0x90, 0x99, 0x40, - 0xd4, 0x8c, 0xfe, 0x4d, 0x78, 0xab, 0xc1, 0x72, 0x13, 0x99, 0xaa, 0x81, 0x9a, 0xf5, 0x20, 0xfe, - 0xb2, 0xc3, 0x81, 0xf8, 0x80, 0x84, 0x07, 0xc2, 0x24, 0xf9, 0xbe, 0x33, 0x5f, 0xa6, 0xe9, 0x7c, - 0x0e, 0x0f, 0x69, 0x3a, 0xea, 0xca, 0xb1, 0x6e, 0x22, 0x6d, 0x2c, 0x43, 0x04, 0x67, 0x78, 0x34, - 0x1c, 0x88, 0xeb, 0xee, 0x17, 0x7a, 0x4b, 0x88, 0x24, 0x0b, 0x34, 0xa6, 0x8c, 0x21, 0xbe, 0xc4, - 0x7b, 0x90, 0x76, 0xca, 0x34, 0xad, 0x86, 0x85, 0x30, 0xf9, 0xa9, 0xcd, 0x4c, 0x8e, 0xe8, 0x39, - 0xe7, 0xea, 0x39, 0x57, 0xd4, 0xfa, 0xa5, 0xd5, 0xe1, 0x40, 0xbc, 0xef, 0xa3, 0x06, 0xc7, 0x48, - 0x72, 0x8a, 0x98, 0xfb, 0xb6, 0x35, 0xa1, 0x8c, 0xd8, 0x2d, 0x95, 0x71, 0x00, 0xcb, 0xbe, 0x3a, - 0x1d, 0x5d, 0x98, 0xdc, 0x5c, 0x36, 0xe2, 0x27, 0x3c, 0x10, 0x26, 0xc9, 0x19, 0x7a, 0xfe, 0x1b, - 0x67, 0x9a, 0x3d, 0x84, 0x74, 0xcf, 0xd0, 0xf5, 0x56, 0xfd, 0x18, 0xa9, 0xed, 0x63, 0x8b, 0x8b, - 0xe3, 0x6d, 0xf2, 0xd4, 0x36, 0x49, 0xeb, 0x9d, 0x15, 0x72, 0x5f, 0x62, 0x44, 0xe9, 0x5d, 0x7b, - 0x73, 0x23, 0x0a, 0xe8, 0x68, 0x49, 0x4e, 0x61, 0x93, 0x20, 0xd9, 0x27, 0x00, 0xc4, 0xab, 0x6a, - 0xaa, 0xc5, 0x25, 0xb2, 0xcc, 0x7a, 0xba, 0xb4, 0x3c, 0x1c, 0x88, 0x4b, 0x74, 0xa4, 0xed, 0x93, - 0xe4, 0x24, 0x36, 0x70, 0x13, 0x6f, 0xbb, 0x3b, 0x22, 0x99, 0xb9, 0x24, 0x8e, 0x5b, 0x1d, 0xcf, - 0x48, 0xbc, 0x6e, 0xc6, 0x32, 0xb6, 0xd8, 0x32, 0x2c, 0x38, 0x5e, 0x5b, 0xf0, 0x9a, 0x79, 0x6a, - 0x72, 0x80, 0xc3, 0xf9, 0xe1, 0x40, 0x5c, 0xf1, 0x85, 0xbb, 0x00, 0x49, 0xbe, 0x47, 0x56, 0x70, - 0x27, 0xd8, 0x16, 0x2c, 0x7a, 0x5e, 0x97, 0x96, 0xd4, 0x5b, 0x69, 0x11, 0x1d, 0x5a, 0x56, 0xbd, - 0x53, 0xc3, 0xb7, 0x82, 0x24, 0x2f, 0x78, 0x53, 0x0e, 0x3d, 0xa3, 0x8e, 0x4e, 0x4f, 0xe9, 0x68, - 0x01, 0x1e, 0x04, 0xf5, 0xab, 0xd7, 0xd0, 0xbf, 0xc5, 0x02, 0x1a, 0xba, 0xa8, 0x74, 0x26, 0x4f, - 0x35, 0x66, 0xa6, 0x53, 0x4d, 0x01, 0xde, 0xdf, 0x53, 0x01, 0x1d, 0xfe, 0xc1, 0x70, 0x20, 0x3e, - 0x0c, 0xea, 0x3f, 0xff, 0xc2, 0x9c, 0xaf, 0xf1, 0xe8, 0x24, 0xd4, 0x51, 0x17, 0xf1, 0x1f, 0x75, - 0x77, 0xdf, 0x8c, 0xe3, 0x2a, 0x8f, 0xdd, 0xa1, 0xca, 0x0b, 0x40, 0xc4, 0x5b, 0xb7, 0x8c, 0x3e, - 0x37, 0x87, 0xd5, 0x46, 0x1d, 0x9e, 0x9e, 0x4b, 0x92, 0x13, 0x78, 0x6c, 0x9f, 0xb7, 0xe3, 0x12, - 0x8f, 0xdf, 0x4e, 0xe2, 0x89, 0x3b, 0x91, 0x78, 0xf2, 0x3f, 0x95, 0x38, 0xcc, 0x20, 0xf1, 0xa2, - 0xd2, 0xf1, 0x24, 0x7e, 0x1e, 0x06, 0x6e, 0x02, 0x50, 0xd6, 0xb5, 0x96, 0x6a, 0x74, 0x6f, 0x2b, - 0x73, 0xef, 0xcb, 0x35, 0x94, 0x0e, 0x56, 0x75, 0xc0, 0x97, 0x6b, 0x28, 0x1d, 0xf7, 0xcb, 0xd9, - 0x8d, 0x35, 0x2e, 0xa4, 0xc8, 0x1d, 0x0a, 0x69, 0x44, 0x56, 0x74, 0x0a, 0x59, 0x12, 0x64, 0xa7, - 0x71, 0xe1, 0x11, 0xf6, 0x37, 0x03, 0xf3, 0x23, 0x44, 0x45, 0x6b, 0xde, 0xe4, 0x76, 0xe7, 0x21, - 0xe1, 0xdd, 0x2f, 0x61, 0xfb, 0x7e, 0x91, 0x3d, 0x9b, 0xdd, 0x82, 0x18, 0x69, 0x4b, 0xbb, 0xf6, - 0x7b, 0x9b, 0x6b, 0xd3, 0x6e, 0x34, 0xdc, 0x79, 0x32, 0xc1, 0x4e, 0xdc, 0x86, 0xd1, 0xdb, 0xdd, - 0x86, 0xdb, 0x51, 0x9b, 0x13, 0xe9, 0x87, 0x30, 0x64, 0xaa, 0x4d, 0xa4, 0x59, 0x6a, 0x4b, 0xa5, - 0x5f, 0x12, 0xec, 0x1a, 0x84, 0xbd, 0x5a, 0xe7, 0x87, 0x03, 0x31, 0x49, 0x6a, 0xb5, 0x8b, 0x0c, - 0xab, 0x63, 0x8c, 0x84, 0x67, 0x66, 0x24, 0x32, 0x8d, 0x91, 0xe8, 0x2d, 0x18, 0x89, 0xdd, 0x09, - 0x23, 0xbf, 0x33, 0x90, 0xa6, 0xa1, 0xff, 0xc3, 0x93, 0xb8, 0x04, 0x73, 0x3d, 0x03, 0xb5, 0xd4, - 0x17, 0x41, 0x8f, 0x61, 0xef, 0xad, 0x7f, 0x56, 0xc8, 0xed, 0x20, 0xa3, 0x73, 0x82, 0xf6, 0x30, - 0xd6, 0x29, 0xc9, 0x89, 0x74, 0x8a, 0x79, 0x0f, 0x52, 0xe4, 0xd0, 0xdb, 0x6b, 0x58, 0xc7, 0x26, - 0x9b, 0x81, 0x58, 0xcf, 0x1e, 0x70, 0x0c, 0xe6, 0x9f, 0x18, 0xd2, 0x21, 0x2c, 0x8c, 0x3e, 0x3c, - 0x01, 0xde, 0xa0, 0x66, 0x6f, 0xed, 0x30, 0xbd, 0xf6, 0x57, 0x10, 0x77, 0x1e, 0x4a, 0xac, 0x00, - 0xa0, 0xba, 0x4a, 0x33, 0xc8, 0xa2, 0x32, 0x35, 0x63, 0xeb, 0xa3, 0x85, 0x1a, 0xd6, 0xa9, 0x81, - 0xbc, 0x8e, 0x71, 0x6d, 0x52, 0xcd, 0x47, 0x3f, 0x33, 0x10, 0x23, 0xb7, 0xd1, 0x27, 0x20, 0xee, - 0xd7, 0x8a, 0xb5, 0x4a, 0xfd, 0x60, 0xb7, 0xba, 0x5b, 0xad, 0x55, 0x8b, 0x5f, 0x57, 0x0f, 0x2b, - 0x4f, 0xeb, 0x07, 0xbb, 0xfb, 0x7b, 0x95, 0x72, 0xf5, 0x8b, 0x6a, 0xe5, 0xe9, 0x62, 0x88, 0x5f, - 0x3a, 0xbf, 0xc8, 0xce, 0xfb, 0x00, 0x2c, 0x07, 0x40, 0xe2, 0xec, 0xc9, 0x45, 0x86, 0x4f, 0x9c, - 0x5f, 0x64, 0xa3, 0xf6, 0x98, 0x15, 0x60, 0x9e, 0x78, 0x6a, 0xf2, 0xb7, 0xcf, 0xf6, 0x2a, 0xbb, - 0x8b, 0x61, 0x3e, 0x75, 0x7e, 0x91, 0x8d, 0x3b, 0xe6, 0x28, 0x12, 0x3b, 0x23, 0x24, 0xd2, 0x1e, - 0xf3, 0xd1, 0x97, 0xbf, 0x08, 0xa1, 0xcd, 0x7f, 0x22, 0x10, 0xd9, 0x31, 0xdb, 0xec, 0x77, 0xc0, - 0x06, 0xfc, 0xac, 0xda, 0x98, 0x26, 0xca, 0xc0, 0x9f, 0x1b, 0xfc, 0xc7, 0x33, 0xc1, 0xdd, 0x83, - 0x8b, 0x7d, 0x0e, 0x4b, 0x93, 0xbf, 0x4c, 0x1e, 0x5d, 0x7b, 0xad, 0x9a, 0xd1, 0xe7, 0x9f, 0xcc, - 0x82, 0x9e, 0x9e, 0xd8, 0x3e, 0xe8, 0xaf, 0x9f, 0xb8, 0xa8, 0x74, 0x66, 0x48, 0x4c, 0xdd, 0x6d, - 0xec, 0xf7, 0x0c, 0x2c, 0x07, 0x5f, 0x6c, 0x8f, 0xaf, 0xbd, 0x9e, 0x13, 0xc1, 0x7f, 0x3a, 0x6b, - 0x84, 0xbb, 0x8b, 0xd2, 0xc1, 0xeb, 0x4b, 0x81, 0x79, 0x73, 0x29, 0x30, 0x7f, 0x5e, 0x0a, 0xcc, - 0x8f, 0x57, 0x42, 0xe8, 0xcd, 0x95, 0x10, 0xfa, 0xe3, 0x4a, 0x08, 0x1d, 0x7e, 0xd6, 0x56, 0xad, - 0xe3, 0xd3, 0x23, 0xbb, 0x6d, 0xf3, 0x8a, 0x6e, 0x76, 0x75, 0xd3, 0xf9, 0xb3, 0x61, 0x36, 0x3b, - 0xf9, 0x17, 0x79, 0xef, 0x87, 0xfa, 0xe3, 0xad, 0x0d, 0xea, 0xdf, 0x08, 0x56, 0xbf, 0x87, 0xcc, - 0xa3, 0x39, 0xfc, 0x4c, 0xdb, 0xfa, 0x37, 0x00, 0x00, 0xff, 0xff, 0x85, 0x21, 0x71, 0xfb, 0x6a, - 0x10, 0x00, 0x00, -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// MsgClient is the client API for Msg service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type MsgClient interface { - // ConnectionOpenInit defines a rpc handler method for MsgConnectionOpenInit. - ConnectionOpenInit(ctx context.Context, in *MsgConnectionOpenInit, opts ...grpc.CallOption) (*MsgConnectionOpenInitResponse, error) - // ConnectionOpenTry defines a rpc handler method for MsgConnectionOpenTry. - ConnectionOpenTry(ctx context.Context, in *MsgConnectionOpenTry, opts ...grpc.CallOption) (*MsgConnectionOpenTryResponse, error) - // ConnectionOpenAck defines a rpc handler method for MsgConnectionOpenAck. - ConnectionOpenAck(ctx context.Context, in *MsgConnectionOpenAck, opts ...grpc.CallOption) (*MsgConnectionOpenAckResponse, error) - // ConnectionOpenConfirm defines a rpc handler method for MsgConnectionOpenConfirm. - ConnectionOpenConfirm(ctx context.Context, in *MsgConnectionOpenConfirm, opts ...grpc.CallOption) (*MsgConnectionOpenConfirmResponse, error) -} - -type msgClient struct { - cc grpc1.ClientConn -} - -func NewMsgClient(cc grpc1.ClientConn) MsgClient { - return &msgClient{cc} -} - -func (c *msgClient) ConnectionOpenInit(ctx context.Context, in *MsgConnectionOpenInit, opts ...grpc.CallOption) (*MsgConnectionOpenInitResponse, error) { - out := new(MsgConnectionOpenInitResponse) - err := c.cc.Invoke(ctx, "/ibc.core.connection.v1.Msg/ConnectionOpenInit", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) ConnectionOpenTry(ctx context.Context, in *MsgConnectionOpenTry, opts ...grpc.CallOption) (*MsgConnectionOpenTryResponse, error) { - out := new(MsgConnectionOpenTryResponse) - err := c.cc.Invoke(ctx, "/ibc.core.connection.v1.Msg/ConnectionOpenTry", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) ConnectionOpenAck(ctx context.Context, in *MsgConnectionOpenAck, opts ...grpc.CallOption) (*MsgConnectionOpenAckResponse, error) { - out := new(MsgConnectionOpenAckResponse) - err := c.cc.Invoke(ctx, "/ibc.core.connection.v1.Msg/ConnectionOpenAck", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) ConnectionOpenConfirm(ctx context.Context, in *MsgConnectionOpenConfirm, opts ...grpc.CallOption) (*MsgConnectionOpenConfirmResponse, error) { - out := new(MsgConnectionOpenConfirmResponse) - err := c.cc.Invoke(ctx, "/ibc.core.connection.v1.Msg/ConnectionOpenConfirm", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// MsgServer is the server API for Msg service. -type MsgServer interface { - // ConnectionOpenInit defines a rpc handler method for MsgConnectionOpenInit. - ConnectionOpenInit(context.Context, *MsgConnectionOpenInit) (*MsgConnectionOpenInitResponse, error) - // ConnectionOpenTry defines a rpc handler method for MsgConnectionOpenTry. - ConnectionOpenTry(context.Context, *MsgConnectionOpenTry) (*MsgConnectionOpenTryResponse, error) - // ConnectionOpenAck defines a rpc handler method for MsgConnectionOpenAck. - ConnectionOpenAck(context.Context, *MsgConnectionOpenAck) (*MsgConnectionOpenAckResponse, error) - // ConnectionOpenConfirm defines a rpc handler method for MsgConnectionOpenConfirm. - ConnectionOpenConfirm(context.Context, *MsgConnectionOpenConfirm) (*MsgConnectionOpenConfirmResponse, error) -} - -// UnimplementedMsgServer can be embedded to have forward compatible implementations. -type UnimplementedMsgServer struct { -} - -func (*UnimplementedMsgServer) ConnectionOpenInit(ctx context.Context, req *MsgConnectionOpenInit) (*MsgConnectionOpenInitResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ConnectionOpenInit not implemented") -} -func (*UnimplementedMsgServer) ConnectionOpenTry(ctx context.Context, req *MsgConnectionOpenTry) (*MsgConnectionOpenTryResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ConnectionOpenTry not implemented") -} -func (*UnimplementedMsgServer) ConnectionOpenAck(ctx context.Context, req *MsgConnectionOpenAck) (*MsgConnectionOpenAckResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ConnectionOpenAck not implemented") -} -func (*UnimplementedMsgServer) ConnectionOpenConfirm(ctx context.Context, req *MsgConnectionOpenConfirm) (*MsgConnectionOpenConfirmResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ConnectionOpenConfirm not implemented") -} - -func RegisterMsgServer(s grpc1.Server, srv MsgServer) { - s.RegisterService(&_Msg_serviceDesc, srv) -} - -func _Msg_ConnectionOpenInit_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgConnectionOpenInit) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).ConnectionOpenInit(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/ibc.core.connection.v1.Msg/ConnectionOpenInit", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).ConnectionOpenInit(ctx, req.(*MsgConnectionOpenInit)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_ConnectionOpenTry_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgConnectionOpenTry) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).ConnectionOpenTry(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/ibc.core.connection.v1.Msg/ConnectionOpenTry", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).ConnectionOpenTry(ctx, req.(*MsgConnectionOpenTry)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_ConnectionOpenAck_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgConnectionOpenAck) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).ConnectionOpenAck(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/ibc.core.connection.v1.Msg/ConnectionOpenAck", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).ConnectionOpenAck(ctx, req.(*MsgConnectionOpenAck)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_ConnectionOpenConfirm_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgConnectionOpenConfirm) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).ConnectionOpenConfirm(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/ibc.core.connection.v1.Msg/ConnectionOpenConfirm", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).ConnectionOpenConfirm(ctx, req.(*MsgConnectionOpenConfirm)) - } - return interceptor(ctx, in, info, handler) -} - -var _Msg_serviceDesc = grpc.ServiceDesc{ - ServiceName: "ibc.core.connection.v1.Msg", - HandlerType: (*MsgServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "ConnectionOpenInit", - Handler: _Msg_ConnectionOpenInit_Handler, - }, - { - MethodName: "ConnectionOpenTry", - Handler: _Msg_ConnectionOpenTry_Handler, - }, - { - MethodName: "ConnectionOpenAck", - Handler: _Msg_ConnectionOpenAck_Handler, - }, - { - MethodName: "ConnectionOpenConfirm", - Handler: _Msg_ConnectionOpenConfirm_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "ibc/core/connection/v1/connection.proto", -} - -func (m *MsgConnectionOpenInit) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgConnectionOpenInit) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgConnectionOpenInit) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Signer) > 0 { - i -= len(m.Signer) - copy(dAtA[i:], m.Signer) - i = encodeVarintConnection(dAtA, i, uint64(len(m.Signer))) - i-- - dAtA[i] = 0x2a - } - if len(m.Version) > 0 { - i -= len(m.Version) - copy(dAtA[i:], m.Version) - i = encodeVarintConnection(dAtA, i, uint64(len(m.Version))) - i-- - dAtA[i] = 0x22 - } - { - size, err := m.Counterparty.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintConnection(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if len(m.ConnectionId) > 0 { - i -= len(m.ConnectionId) - copy(dAtA[i:], m.ConnectionId) - i = encodeVarintConnection(dAtA, i, uint64(len(m.ConnectionId))) - i-- - dAtA[i] = 0x12 - } - if len(m.ClientId) > 0 { - i -= len(m.ClientId) - copy(dAtA[i:], m.ClientId) - i = encodeVarintConnection(dAtA, i, uint64(len(m.ClientId))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgConnectionOpenInitResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgConnectionOpenInitResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgConnectionOpenInitResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *MsgConnectionOpenTry) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgConnectionOpenTry) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgConnectionOpenTry) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Signer) > 0 { - i -= len(m.Signer) - copy(dAtA[i:], m.Signer) - i = encodeVarintConnection(dAtA, i, uint64(len(m.Signer))) - i-- - dAtA[i] = 0x62 - } - { - size, err := m.ConsensusHeight.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintConnection(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x5a - if len(m.ProofConsensus) > 0 { - i -= len(m.ProofConsensus) - copy(dAtA[i:], m.ProofConsensus) - i = encodeVarintConnection(dAtA, i, uint64(len(m.ProofConsensus))) - i-- - dAtA[i] = 0x52 - } - if len(m.ProofClient) > 0 { - i -= len(m.ProofClient) - copy(dAtA[i:], m.ProofClient) - i = encodeVarintConnection(dAtA, i, uint64(len(m.ProofClient))) - i-- - dAtA[i] = 0x4a - } - if len(m.ProofInit) > 0 { - i -= len(m.ProofInit) - copy(dAtA[i:], m.ProofInit) - i = encodeVarintConnection(dAtA, i, uint64(len(m.ProofInit))) - i-- - dAtA[i] = 0x42 - } - { - size, err := m.ProofHeight.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintConnection(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x3a - if len(m.CounterpartyVersions) > 0 { - for iNdEx := len(m.CounterpartyVersions) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.CounterpartyVersions[iNdEx]) - copy(dAtA[i:], m.CounterpartyVersions[iNdEx]) - i = encodeVarintConnection(dAtA, i, uint64(len(m.CounterpartyVersions[iNdEx]))) - i-- - dAtA[i] = 0x32 - } - } - { - size, err := m.Counterparty.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintConnection(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - if m.ClientState != nil { - { - size, err := m.ClientState.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintConnection(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - if len(m.CounterpartyChosenConnectionId) > 0 { - i -= len(m.CounterpartyChosenConnectionId) - copy(dAtA[i:], m.CounterpartyChosenConnectionId) - i = encodeVarintConnection(dAtA, i, uint64(len(m.CounterpartyChosenConnectionId))) - i-- - dAtA[i] = 0x1a - } - if len(m.DesiredConnectionId) > 0 { - i -= len(m.DesiredConnectionId) - copy(dAtA[i:], m.DesiredConnectionId) - i = encodeVarintConnection(dAtA, i, uint64(len(m.DesiredConnectionId))) - i-- - dAtA[i] = 0x12 - } - if len(m.ClientId) > 0 { - i -= len(m.ClientId) - copy(dAtA[i:], m.ClientId) - i = encodeVarintConnection(dAtA, i, uint64(len(m.ClientId))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgConnectionOpenTryResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgConnectionOpenTryResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgConnectionOpenTryResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *MsgConnectionOpenAck) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgConnectionOpenAck) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgConnectionOpenAck) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Signer) > 0 { - i -= len(m.Signer) - copy(dAtA[i:], m.Signer) - i = encodeVarintConnection(dAtA, i, uint64(len(m.Signer))) - i-- - dAtA[i] = 0x52 - } - { - size, err := m.ConsensusHeight.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintConnection(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x4a - if len(m.ProofConsensus) > 0 { - i -= len(m.ProofConsensus) - copy(dAtA[i:], m.ProofConsensus) - i = encodeVarintConnection(dAtA, i, uint64(len(m.ProofConsensus))) - i-- - dAtA[i] = 0x42 - } - if len(m.ProofClient) > 0 { - i -= len(m.ProofClient) - copy(dAtA[i:], m.ProofClient) - i = encodeVarintConnection(dAtA, i, uint64(len(m.ProofClient))) - i-- - dAtA[i] = 0x3a - } - if len(m.ProofTry) > 0 { - i -= len(m.ProofTry) - copy(dAtA[i:], m.ProofTry) - i = encodeVarintConnection(dAtA, i, uint64(len(m.ProofTry))) - i-- - dAtA[i] = 0x32 - } - { - size, err := m.ProofHeight.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintConnection(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - if m.ClientState != nil { - { - size, err := m.ClientState.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintConnection(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - if len(m.Version) > 0 { - i -= len(m.Version) - copy(dAtA[i:], m.Version) - i = encodeVarintConnection(dAtA, i, uint64(len(m.Version))) - i-- - dAtA[i] = 0x1a - } - if len(m.CounterpartyConnectionId) > 0 { - i -= len(m.CounterpartyConnectionId) - copy(dAtA[i:], m.CounterpartyConnectionId) - i = encodeVarintConnection(dAtA, i, uint64(len(m.CounterpartyConnectionId))) - i-- - dAtA[i] = 0x12 - } - if len(m.ConnectionId) > 0 { - i -= len(m.ConnectionId) - copy(dAtA[i:], m.ConnectionId) - i = encodeVarintConnection(dAtA, i, uint64(len(m.ConnectionId))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgConnectionOpenAckResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgConnectionOpenAckResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgConnectionOpenAckResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *MsgConnectionOpenConfirm) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgConnectionOpenConfirm) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgConnectionOpenConfirm) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Signer) > 0 { - i -= len(m.Signer) - copy(dAtA[i:], m.Signer) - i = encodeVarintConnection(dAtA, i, uint64(len(m.Signer))) - i-- - dAtA[i] = 0x22 - } - { - size, err := m.ProofHeight.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintConnection(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if len(m.ProofAck) > 0 { - i -= len(m.ProofAck) - copy(dAtA[i:], m.ProofAck) - i = encodeVarintConnection(dAtA, i, uint64(len(m.ProofAck))) - i-- - dAtA[i] = 0x12 - } - if len(m.ConnectionId) > 0 { - i -= len(m.ConnectionId) - copy(dAtA[i:], m.ConnectionId) - i = encodeVarintConnection(dAtA, i, uint64(len(m.ConnectionId))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgConnectionOpenConfirmResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgConnectionOpenConfirmResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgConnectionOpenConfirmResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil + // 608 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0x41, 0x6b, 0xdb, 0x4c, + 0x10, 0xd5, 0xca, 0x72, 0x12, 0x6f, 0xe2, 0xef, 0x73, 0x17, 0x53, 0x84, 0x20, 0x92, 0x50, 0x0b, + 0x35, 0x85, 0x48, 0x75, 0x02, 0x3d, 0xa4, 0xf4, 0x10, 0x3b, 0x2a, 0x88, 0xb6, 0xae, 0x51, 0x9c, + 0x42, 0x73, 0x09, 0xb6, 0xb4, 0x49, 0x96, 0xc4, 0x92, 0x91, 0x36, 0x26, 0xfe, 0x07, 0xc1, 0x97, + 0xf6, 0xda, 0x83, 0xa1, 0xd0, 0x3f, 0x13, 0x7a, 0xca, 0xb1, 0x27, 0x53, 0xec, 0x53, 0xaf, 0xfe, + 0x05, 0x45, 0x5a, 0x59, 0x56, 0x42, 0x73, 0x68, 0xda, 0x93, 0x67, 0x76, 0xde, 0x1b, 0xef, 0x7b, + 0x33, 0x5a, 0xf8, 0x84, 0x74, 0x1c, 0xc3, 0xf1, 0x03, 0x6c, 0x38, 0xbe, 0xe7, 0x61, 0x87, 0x12, + 0xdf, 0x33, 0xfa, 0xd5, 0x4c, 0xa6, 0xf7, 0x02, 0x9f, 0xfa, 0xe8, 0x21, 0xe9, 0x38, 0x7a, 0x04, + 0xd4, 0x33, 0xa5, 0x7e, 0x55, 0x2a, 0x1f, 0xfb, 0xc7, 0x7e, 0x0c, 0x31, 0xa2, 0x88, 0xa1, 0xa5, + 0x6c, 0xdb, 0x6e, 0x97, 0xd0, 0x2e, 0xf6, 0x28, 0x6b, 0x3b, 0xcf, 0x18, 0x50, 0xfb, 0x09, 0x60, + 0xb1, 0x9e, 0x36, 0x34, 0x3d, 0x17, 0x55, 0x61, 0xc1, 0x39, 0x23, 0xd8, 0xa3, 0x87, 0xc4, 0x15, + 0x81, 0x0a, 0x2a, 0x85, 0x5a, 0x79, 0x36, 0x56, 0x4a, 0x83, 0x76, 0xf7, 0x6c, 0x5b, 0x4b, 0x4b, + 0x9a, 0xbd, 0xc2, 0x62, 0xcb, 0x45, 0x12, 0x5c, 0xe9, 0xe3, 0x20, 0x24, 0xbe, 0x17, 0x8a, 0xbc, + 0x9a, 0xab, 0x14, 0xec, 0x34, 0x47, 0x5b, 0x30, 0x1f, 0xd2, 0x36, 0xc5, 0x62, 0x4e, 0x05, 0x95, + 0xff, 0x36, 0xd7, 0xf5, 0xdf, 0xeb, 0xd0, 0xf7, 0x22, 0x90, 0xcd, 0xb0, 0xa8, 0x01, 0xd7, 0x1c, + 0xff, 0xdc, 0xa3, 0x38, 0xe8, 0xb5, 0x03, 0x3a, 0x10, 0x05, 0x15, 0x54, 0x56, 0x37, 0x1f, 0xdf, + 0xc5, 0xad, 0x67, 0xb0, 0x35, 0xe1, 0x6a, 0xac, 0x70, 0xf6, 0x0d, 0xfe, 0xb6, 0x70, 0xf9, 0x45, + 0xe1, 0xb4, 0x8f, 0x3c, 0x2c, 0x5b, 0x2e, 0xf6, 0x28, 0x39, 0x22, 0xd8, 0x5d, 0xa8, 0x46, 0xeb, + 0x90, 0x4f, 0xb5, 0x16, 0x67, 0x63, 0xa5, 0xc0, 0xb4, 0x46, 0x22, 0x79, 0x72, 0xcb, 0x11, 0xfe, + 0x8f, 0x1d, 0xc9, 0xdd, 0xe5, 0x88, 0xf0, 0x17, 0x8e, 0xe4, 0xff, 0x89, 0x23, 0xdf, 0x00, 0x5c, + 0xcb, 0x42, 0xef, 0x33, 0xfc, 0x97, 0xb0, 0xb8, 0xf8, 0xef, 0x85, 0x43, 0xe2, 0x6c, 0xac, 0x94, + 0x13, 0x5a, 0xb6, 0xac, 0x45, 0x17, 0x99, 0xe7, 0x96, 0x8b, 0x6a, 0x70, 0xa9, 0x17, 0xe0, 0x23, + 0x72, 0x11, 0x2f, 0xc8, 0x2d, 0x49, 0xe9, 0xb2, 0xf6, 0xab, 0xfa, 0x5b, 0x1c, 0x9c, 0x9e, 0xe1, + 0x66, 0x8c, 0x4d, 0x24, 0x25, 0xcc, 0x44, 0xcc, 0x23, 0xb8, 0x5a, 0x8f, 0x2f, 0xd5, 0x6c, 0xd3, + 0x93, 0x10, 0x95, 0x61, 0xbe, 0x17, 0x05, 0x22, 0x88, 0xfd, 0x67, 0x89, 0x76, 0x00, 0xff, 0x5f, + 0x0c, 0x9e, 0x01, 0xef, 0xa1, 0x39, 0xed, 0xcd, 0x67, 0x7b, 0xbf, 0x86, 0xcb, 0xef, 0xd9, 0x90, + 0x91, 0x0c, 0x21, 0x99, 0x6f, 0x5a, 0xc0, 0x9a, 0xda, 0x99, 0x93, 0x68, 0x3f, 0x8e, 0x70, 0x9b, + 0x9e, 0x07, 0x38, 0xfd, 0x62, 0xe6, 0x39, 0x53, 0xf3, 0xf4, 0x33, 0x80, 0xf9, 0x78, 0x03, 0xd0, + 0x73, 0xa8, 0xec, 0xb5, 0x76, 0x5a, 0xe6, 0xe1, 0x7e, 0xc3, 0x6a, 0x58, 0x2d, 0x6b, 0xe7, 0x8d, + 0x75, 0x60, 0xee, 0x1e, 0xee, 0x37, 0xf6, 0x9a, 0x66, 0xdd, 0x7a, 0x65, 0x99, 0xbb, 0x25, 0x4e, + 0x7a, 0x30, 0x1c, 0xa9, 0xc5, 0x1b, 0x00, 0x24, 0x42, 0xc8, 0x78, 0xd1, 0x61, 0x09, 0x48, 0x2b, + 0xc3, 0x91, 0x2a, 0x44, 0x31, 0x92, 0x61, 0x91, 0x55, 0x5a, 0xf6, 0x87, 0x77, 0x4d, 0xb3, 0x51, + 0xe2, 0xa5, 0xd5, 0xe1, 0x48, 0x5d, 0x4e, 0xd2, 0x05, 0x33, 0x2e, 0xe6, 0x18, 0x33, 0x8a, 0x25, + 0xe1, 0xf2, 0xab, 0xcc, 0xd5, 0xf6, 0xaf, 0x26, 0x32, 0xb8, 0x9e, 0xc8, 0xe0, 0xc7, 0x44, 0x06, + 0x9f, 0xa6, 0x32, 0x77, 0x3d, 0x95, 0xb9, 0xef, 0x53, 0x99, 0x3b, 0x78, 0x71, 0x4c, 0xe8, 0xc9, + 0x79, 0x27, 0x1a, 0x9d, 0xe1, 0xf8, 0x61, 0xd7, 0x0f, 0x93, 0x9f, 0x8d, 0xd0, 0x3d, 0x35, 0x2e, + 0x8c, 0xf4, 0x59, 0x7a, 0xb6, 0xb5, 0x91, 0x79, 0xf0, 0xe8, 0xa0, 0x87, 0xc3, 0xce, 0x52, 0xfc, + 0x24, 0x6d, 0xfd, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x61, 0x3b, 0x7e, 0x26, 0x14, 0x05, 0x00, 0x00, } func (m *ConnectionEnd) Marshal() (dAtA []byte, err error) { @@ -1710,190 +686,6 @@ func encodeVarintConnection(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } -func (m *MsgConnectionOpenInit) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ClientId) - if l > 0 { - n += 1 + l + sovConnection(uint64(l)) - } - l = len(m.ConnectionId) - if l > 0 { - n += 1 + l + sovConnection(uint64(l)) - } - l = m.Counterparty.Size() - n += 1 + l + sovConnection(uint64(l)) - l = len(m.Version) - if l > 0 { - n += 1 + l + sovConnection(uint64(l)) - } - l = len(m.Signer) - if l > 0 { - n += 1 + l + sovConnection(uint64(l)) - } - return n -} - -func (m *MsgConnectionOpenInitResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *MsgConnectionOpenTry) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ClientId) - if l > 0 { - n += 1 + l + sovConnection(uint64(l)) - } - l = len(m.DesiredConnectionId) - if l > 0 { - n += 1 + l + sovConnection(uint64(l)) - } - l = len(m.CounterpartyChosenConnectionId) - if l > 0 { - n += 1 + l + sovConnection(uint64(l)) - } - if m.ClientState != nil { - l = m.ClientState.Size() - n += 1 + l + sovConnection(uint64(l)) - } - l = m.Counterparty.Size() - n += 1 + l + sovConnection(uint64(l)) - if len(m.CounterpartyVersions) > 0 { - for _, s := range m.CounterpartyVersions { - l = len(s) - n += 1 + l + sovConnection(uint64(l)) - } - } - l = m.ProofHeight.Size() - n += 1 + l + sovConnection(uint64(l)) - l = len(m.ProofInit) - if l > 0 { - n += 1 + l + sovConnection(uint64(l)) - } - l = len(m.ProofClient) - if l > 0 { - n += 1 + l + sovConnection(uint64(l)) - } - l = len(m.ProofConsensus) - if l > 0 { - n += 1 + l + sovConnection(uint64(l)) - } - l = m.ConsensusHeight.Size() - n += 1 + l + sovConnection(uint64(l)) - l = len(m.Signer) - if l > 0 { - n += 1 + l + sovConnection(uint64(l)) - } - return n -} - -func (m *MsgConnectionOpenTryResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *MsgConnectionOpenAck) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ConnectionId) - if l > 0 { - n += 1 + l + sovConnection(uint64(l)) - } - l = len(m.CounterpartyConnectionId) - if l > 0 { - n += 1 + l + sovConnection(uint64(l)) - } - l = len(m.Version) - if l > 0 { - n += 1 + l + sovConnection(uint64(l)) - } - if m.ClientState != nil { - l = m.ClientState.Size() - n += 1 + l + sovConnection(uint64(l)) - } - l = m.ProofHeight.Size() - n += 1 + l + sovConnection(uint64(l)) - l = len(m.ProofTry) - if l > 0 { - n += 1 + l + sovConnection(uint64(l)) - } - l = len(m.ProofClient) - if l > 0 { - n += 1 + l + sovConnection(uint64(l)) - } - l = len(m.ProofConsensus) - if l > 0 { - n += 1 + l + sovConnection(uint64(l)) - } - l = m.ConsensusHeight.Size() - n += 1 + l + sovConnection(uint64(l)) - l = len(m.Signer) - if l > 0 { - n += 1 + l + sovConnection(uint64(l)) - } - return n -} - -func (m *MsgConnectionOpenAckResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *MsgConnectionOpenConfirm) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ConnectionId) - if l > 0 { - n += 1 + l + sovConnection(uint64(l)) - } - l = len(m.ProofAck) - if l > 0 { - n += 1 + l + sovConnection(uint64(l)) - } - l = m.ProofHeight.Size() - n += 1 + l + sovConnection(uint64(l)) - l = len(m.Signer) - if l > 0 { - n += 1 + l + sovConnection(uint64(l)) - } - return n -} - -func (m *MsgConnectionOpenConfirmResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - func (m *ConnectionEnd) Size() (n int) { if m == nil { return 0 @@ -2024,1451 +816,6 @@ func sovConnection(x uint64) (n int) { func sozConnection(x uint64) (n int) { return sovConnection(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (m *MsgConnectionOpenInit) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgConnectionOpenInit: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgConnectionOpenInit: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClientId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ClientId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConnectionId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ConnectionId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Counterparty", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Counterparty.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Version = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Signer = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipConnection(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthConnection - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthConnection - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgConnectionOpenInitResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgConnectionOpenInitResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgConnectionOpenInitResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipConnection(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthConnection - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthConnection - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgConnectionOpenTry) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgConnectionOpenTry: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgConnectionOpenTry: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClientId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ClientId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DesiredConnectionId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.DesiredConnectionId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CounterpartyChosenConnectionId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CounterpartyChosenConnectionId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClientState", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ClientState == nil { - m.ClientState = &types.Any{} - } - if err := m.ClientState.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Counterparty", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Counterparty.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CounterpartyVersions", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CounterpartyVersions = append(m.CounterpartyVersions, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ProofHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofInit", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ProofInit = append(m.ProofInit[:0], dAtA[iNdEx:postIndex]...) - if m.ProofInit == nil { - m.ProofInit = []byte{} - } - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofClient", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ProofClient = append(m.ProofClient[:0], dAtA[iNdEx:postIndex]...) - if m.ProofClient == nil { - m.ProofClient = []byte{} - } - iNdEx = postIndex - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofConsensus", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ProofConsensus = append(m.ProofConsensus[:0], dAtA[iNdEx:postIndex]...) - if m.ProofConsensus == nil { - m.ProofConsensus = []byte{} - } - iNdEx = postIndex - case 11: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConsensusHeight", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ConsensusHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 12: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Signer = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipConnection(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthConnection - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthConnection - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgConnectionOpenTryResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgConnectionOpenTryResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgConnectionOpenTryResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipConnection(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthConnection - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthConnection - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgConnectionOpenAck) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgConnectionOpenAck: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgConnectionOpenAck: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConnectionId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ConnectionId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CounterpartyConnectionId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CounterpartyConnectionId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Version = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClientState", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ClientState == nil { - m.ClientState = &types.Any{} - } - if err := m.ClientState.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ProofHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofTry", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ProofTry = append(m.ProofTry[:0], dAtA[iNdEx:postIndex]...) - if m.ProofTry == nil { - m.ProofTry = []byte{} - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofClient", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ProofClient = append(m.ProofClient[:0], dAtA[iNdEx:postIndex]...) - if m.ProofClient == nil { - m.ProofClient = []byte{} - } - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofConsensus", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ProofConsensus = append(m.ProofConsensus[:0], dAtA[iNdEx:postIndex]...) - if m.ProofConsensus == nil { - m.ProofConsensus = []byte{} - } - iNdEx = postIndex - case 9: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConsensusHeight", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ConsensusHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Signer = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipConnection(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthConnection - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthConnection - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgConnectionOpenAckResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgConnectionOpenAckResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgConnectionOpenAckResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipConnection(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthConnection - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthConnection - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgConnectionOpenConfirm) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgConnectionOpenConfirm: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgConnectionOpenConfirm: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConnectionId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ConnectionId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofAck", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ProofAck = append(m.ProofAck[:0], dAtA[iNdEx:postIndex]...) - if m.ProofAck == nil { - m.ProofAck = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ProofHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthConnection - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthConnection - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Signer = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipConnection(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthConnection - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthConnection - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgConnectionOpenConfirmResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowConnection - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgConnectionOpenConfirmResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgConnectionOpenConfirmResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipConnection(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthConnection - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthConnection - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func (m *ConnectionEnd) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/ibc/core/03-connection/types/tx.pb.go b/x/ibc/core/03-connection/types/tx.pb.go new file mode 100644 index 0000000000..af859b042c --- /dev/null +++ b/x/ibc/core/03-connection/types/tx.pb.go @@ -0,0 +1,2806 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: ibc/core/connection/v1/tx.proto + +package types + +import ( + context "context" + fmt "fmt" + types "github.com/cosmos/cosmos-sdk/codec/types" + types1 "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" + _ "github.com/gogo/protobuf/gogoproto" + grpc1 "github.com/gogo/protobuf/grpc" + proto "github.com/gogo/protobuf/proto" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// MsgConnectionOpenInit defines the msg sent by an account on Chain A to +// initialize a connection with Chain B. +type MsgConnectionOpenInit struct { + ClientId string `protobuf:"bytes,1,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty" yaml:"client_id"` + ConnectionId string `protobuf:"bytes,2,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty" yaml:"connection_id"` + Counterparty Counterparty `protobuf:"bytes,3,opt,name=counterparty,proto3" json:"counterparty"` + Version string `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"` + Signer string `protobuf:"bytes,5,opt,name=signer,proto3" json:"signer,omitempty"` +} + +func (m *MsgConnectionOpenInit) Reset() { *m = MsgConnectionOpenInit{} } +func (m *MsgConnectionOpenInit) String() string { return proto.CompactTextString(m) } +func (*MsgConnectionOpenInit) ProtoMessage() {} +func (*MsgConnectionOpenInit) Descriptor() ([]byte, []int) { + return fileDescriptor_5d00fde5fc97399e, []int{0} +} +func (m *MsgConnectionOpenInit) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgConnectionOpenInit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgConnectionOpenInit.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgConnectionOpenInit) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgConnectionOpenInit.Merge(m, src) +} +func (m *MsgConnectionOpenInit) XXX_Size() int { + return m.Size() +} +func (m *MsgConnectionOpenInit) XXX_DiscardUnknown() { + xxx_messageInfo_MsgConnectionOpenInit.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgConnectionOpenInit proto.InternalMessageInfo + +// MsgConnectionOpenInitResponse defines the Msg/ConnectionOpenInit response type. +type MsgConnectionOpenInitResponse struct { +} + +func (m *MsgConnectionOpenInitResponse) Reset() { *m = MsgConnectionOpenInitResponse{} } +func (m *MsgConnectionOpenInitResponse) String() string { return proto.CompactTextString(m) } +func (*MsgConnectionOpenInitResponse) ProtoMessage() {} +func (*MsgConnectionOpenInitResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_5d00fde5fc97399e, []int{1} +} +func (m *MsgConnectionOpenInitResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgConnectionOpenInitResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgConnectionOpenInitResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgConnectionOpenInitResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgConnectionOpenInitResponse.Merge(m, src) +} +func (m *MsgConnectionOpenInitResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgConnectionOpenInitResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgConnectionOpenInitResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgConnectionOpenInitResponse proto.InternalMessageInfo + +// MsgConnectionOpenTry defines a msg sent by a Relayer to try to open a +// connection on Chain B. +type MsgConnectionOpenTry struct { + ClientId string `protobuf:"bytes,1,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty" yaml:"client_id"` + DesiredConnectionId string `protobuf:"bytes,2,opt,name=desired_connection_id,json=desiredConnectionId,proto3" json:"desired_connection_id,omitempty" yaml:"desired_connection_id"` + CounterpartyChosenConnectionId string `protobuf:"bytes,3,opt,name=counterparty_chosen_connection_id,json=counterpartyChosenConnectionId,proto3" json:"counterparty_chosen_connection_id,omitempty" yaml:"counterparty_chosen_connection_id"` + ClientState *types.Any `protobuf:"bytes,4,opt,name=client_state,json=clientState,proto3" json:"client_state,omitempty" yaml:"client_state"` + Counterparty Counterparty `protobuf:"bytes,5,opt,name=counterparty,proto3" json:"counterparty"` + CounterpartyVersions []string `protobuf:"bytes,6,rep,name=counterparty_versions,json=counterpartyVersions,proto3" json:"counterparty_versions,omitempty" yaml:"counterparty_versions"` + ProofHeight types1.Height `protobuf:"bytes,7,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"` + // proof of the initialization the connection on Chain A: `UNITIALIZED -> + // INIT` + ProofInit []byte `protobuf:"bytes,8,opt,name=proof_init,json=proofInit,proto3" json:"proof_init,omitempty" yaml:"proof_init"` + // proof of client state included in message + ProofClient []byte `protobuf:"bytes,9,opt,name=proof_client,json=proofClient,proto3" json:"proof_client,omitempty" yaml:"proof_client"` + // proof of client consensus state + ProofConsensus []byte `protobuf:"bytes,10,opt,name=proof_consensus,json=proofConsensus,proto3" json:"proof_consensus,omitempty" yaml:"proof_consensus"` + ConsensusHeight types1.Height `protobuf:"bytes,11,opt,name=consensus_height,json=consensusHeight,proto3" json:"consensus_height" yaml:"consensus_height"` + Signer string `protobuf:"bytes,12,opt,name=signer,proto3" json:"signer,omitempty"` +} + +func (m *MsgConnectionOpenTry) Reset() { *m = MsgConnectionOpenTry{} } +func (m *MsgConnectionOpenTry) String() string { return proto.CompactTextString(m) } +func (*MsgConnectionOpenTry) ProtoMessage() {} +func (*MsgConnectionOpenTry) Descriptor() ([]byte, []int) { + return fileDescriptor_5d00fde5fc97399e, []int{2} +} +func (m *MsgConnectionOpenTry) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgConnectionOpenTry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgConnectionOpenTry.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgConnectionOpenTry) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgConnectionOpenTry.Merge(m, src) +} +func (m *MsgConnectionOpenTry) XXX_Size() int { + return m.Size() +} +func (m *MsgConnectionOpenTry) XXX_DiscardUnknown() { + xxx_messageInfo_MsgConnectionOpenTry.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgConnectionOpenTry proto.InternalMessageInfo + +// MsgConnectionOpenTryResponse defines the Msg/ConnectionOpenTry response type. +type MsgConnectionOpenTryResponse struct { +} + +func (m *MsgConnectionOpenTryResponse) Reset() { *m = MsgConnectionOpenTryResponse{} } +func (m *MsgConnectionOpenTryResponse) String() string { return proto.CompactTextString(m) } +func (*MsgConnectionOpenTryResponse) ProtoMessage() {} +func (*MsgConnectionOpenTryResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_5d00fde5fc97399e, []int{3} +} +func (m *MsgConnectionOpenTryResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgConnectionOpenTryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgConnectionOpenTryResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgConnectionOpenTryResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgConnectionOpenTryResponse.Merge(m, src) +} +func (m *MsgConnectionOpenTryResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgConnectionOpenTryResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgConnectionOpenTryResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgConnectionOpenTryResponse proto.InternalMessageInfo + +// MsgConnectionOpenAck defines a msg sent by a Relayer to Chain A to +// acknowledge the change of connection state to TRYOPEN on Chain B. +type MsgConnectionOpenAck struct { + ConnectionId string `protobuf:"bytes,1,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty" yaml:"connection_id"` + CounterpartyConnectionId string `protobuf:"bytes,2,opt,name=counterparty_connection_id,json=counterpartyConnectionId,proto3" json:"counterparty_connection_id,omitempty" yaml:"counterparty_connection_id"` + Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` + ClientState *types.Any `protobuf:"bytes,4,opt,name=client_state,json=clientState,proto3" json:"client_state,omitempty" yaml:"client_state"` + ProofHeight types1.Height `protobuf:"bytes,5,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"` + // proof of the initialization the connection on Chain B: `UNITIALIZED -> + // TRYOPEN` + ProofTry []byte `protobuf:"bytes,6,opt,name=proof_try,json=proofTry,proto3" json:"proof_try,omitempty" yaml:"proof_try"` + // proof of client state included in message + ProofClient []byte `protobuf:"bytes,7,opt,name=proof_client,json=proofClient,proto3" json:"proof_client,omitempty" yaml:"proof_client"` + // proof of client consensus state + ProofConsensus []byte `protobuf:"bytes,8,opt,name=proof_consensus,json=proofConsensus,proto3" json:"proof_consensus,omitempty" yaml:"proof_consensus"` + ConsensusHeight types1.Height `protobuf:"bytes,9,opt,name=consensus_height,json=consensusHeight,proto3" json:"consensus_height" yaml:"consensus_height"` + Signer string `protobuf:"bytes,10,opt,name=signer,proto3" json:"signer,omitempty"` +} + +func (m *MsgConnectionOpenAck) Reset() { *m = MsgConnectionOpenAck{} } +func (m *MsgConnectionOpenAck) String() string { return proto.CompactTextString(m) } +func (*MsgConnectionOpenAck) ProtoMessage() {} +func (*MsgConnectionOpenAck) Descriptor() ([]byte, []int) { + return fileDescriptor_5d00fde5fc97399e, []int{4} +} +func (m *MsgConnectionOpenAck) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgConnectionOpenAck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgConnectionOpenAck.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgConnectionOpenAck) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgConnectionOpenAck.Merge(m, src) +} +func (m *MsgConnectionOpenAck) XXX_Size() int { + return m.Size() +} +func (m *MsgConnectionOpenAck) XXX_DiscardUnknown() { + xxx_messageInfo_MsgConnectionOpenAck.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgConnectionOpenAck proto.InternalMessageInfo + +// MsgConnectionOpenAckResponse defines the Msg/ConnectionOpenAck response type. +type MsgConnectionOpenAckResponse struct { +} + +func (m *MsgConnectionOpenAckResponse) Reset() { *m = MsgConnectionOpenAckResponse{} } +func (m *MsgConnectionOpenAckResponse) String() string { return proto.CompactTextString(m) } +func (*MsgConnectionOpenAckResponse) ProtoMessage() {} +func (*MsgConnectionOpenAckResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_5d00fde5fc97399e, []int{5} +} +func (m *MsgConnectionOpenAckResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgConnectionOpenAckResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgConnectionOpenAckResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgConnectionOpenAckResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgConnectionOpenAckResponse.Merge(m, src) +} +func (m *MsgConnectionOpenAckResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgConnectionOpenAckResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgConnectionOpenAckResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgConnectionOpenAckResponse proto.InternalMessageInfo + +// MsgConnectionOpenConfirm defines a msg sent by a Relayer to Chain B to +// acknowledge the change of connection state to OPEN on Chain A. +type MsgConnectionOpenConfirm struct { + ConnectionId string `protobuf:"bytes,1,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty" yaml:"connection_id"` + // proof for the change of the connection state on Chain A: `INIT -> OPEN` + ProofAck []byte `protobuf:"bytes,2,opt,name=proof_ack,json=proofAck,proto3" json:"proof_ack,omitempty" yaml:"proof_ack"` + ProofHeight types1.Height `protobuf:"bytes,3,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"` + Signer string `protobuf:"bytes,4,opt,name=signer,proto3" json:"signer,omitempty"` +} + +func (m *MsgConnectionOpenConfirm) Reset() { *m = MsgConnectionOpenConfirm{} } +func (m *MsgConnectionOpenConfirm) String() string { return proto.CompactTextString(m) } +func (*MsgConnectionOpenConfirm) ProtoMessage() {} +func (*MsgConnectionOpenConfirm) Descriptor() ([]byte, []int) { + return fileDescriptor_5d00fde5fc97399e, []int{6} +} +func (m *MsgConnectionOpenConfirm) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgConnectionOpenConfirm) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgConnectionOpenConfirm.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgConnectionOpenConfirm) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgConnectionOpenConfirm.Merge(m, src) +} +func (m *MsgConnectionOpenConfirm) XXX_Size() int { + return m.Size() +} +func (m *MsgConnectionOpenConfirm) XXX_DiscardUnknown() { + xxx_messageInfo_MsgConnectionOpenConfirm.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgConnectionOpenConfirm proto.InternalMessageInfo + +// MsgConnectionOpenConfirmResponse defines the Msg/ConnectionOpenConfirm response type. +type MsgConnectionOpenConfirmResponse struct { +} + +func (m *MsgConnectionOpenConfirmResponse) Reset() { *m = MsgConnectionOpenConfirmResponse{} } +func (m *MsgConnectionOpenConfirmResponse) String() string { return proto.CompactTextString(m) } +func (*MsgConnectionOpenConfirmResponse) ProtoMessage() {} +func (*MsgConnectionOpenConfirmResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_5d00fde5fc97399e, []int{7} +} +func (m *MsgConnectionOpenConfirmResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgConnectionOpenConfirmResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgConnectionOpenConfirmResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgConnectionOpenConfirmResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgConnectionOpenConfirmResponse.Merge(m, src) +} +func (m *MsgConnectionOpenConfirmResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgConnectionOpenConfirmResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgConnectionOpenConfirmResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgConnectionOpenConfirmResponse proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MsgConnectionOpenInit)(nil), "ibc.core.connection.v1.MsgConnectionOpenInit") + proto.RegisterType((*MsgConnectionOpenInitResponse)(nil), "ibc.core.connection.v1.MsgConnectionOpenInitResponse") + proto.RegisterType((*MsgConnectionOpenTry)(nil), "ibc.core.connection.v1.MsgConnectionOpenTry") + proto.RegisterType((*MsgConnectionOpenTryResponse)(nil), "ibc.core.connection.v1.MsgConnectionOpenTryResponse") + proto.RegisterType((*MsgConnectionOpenAck)(nil), "ibc.core.connection.v1.MsgConnectionOpenAck") + proto.RegisterType((*MsgConnectionOpenAckResponse)(nil), "ibc.core.connection.v1.MsgConnectionOpenAckResponse") + proto.RegisterType((*MsgConnectionOpenConfirm)(nil), "ibc.core.connection.v1.MsgConnectionOpenConfirm") + proto.RegisterType((*MsgConnectionOpenConfirmResponse)(nil), "ibc.core.connection.v1.MsgConnectionOpenConfirmResponse") +} + +func init() { proto.RegisterFile("ibc/core/connection/v1/tx.proto", fileDescriptor_5d00fde5fc97399e) } + +var fileDescriptor_5d00fde5fc97399e = []byte{ + // 909 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xbf, 0x93, 0xdb, 0x44, + 0x14, 0xb6, 0xce, 0xf7, 0xc3, 0x5e, 0x1b, 0x92, 0x28, 0xf6, 0x9d, 0x10, 0x41, 0x72, 0x76, 0x60, + 0xb8, 0x22, 0x27, 0xc5, 0x97, 0x30, 0xc3, 0x1c, 0x43, 0x61, 0xbb, 0xe1, 0x8a, 0x00, 0x23, 0x2e, + 0x14, 0x69, 0x3c, 0xb6, 0xbc, 0x96, 0x35, 0x3e, 0xef, 0x7a, 0xb4, 0xb2, 0x13, 0xd1, 0xd2, 0x30, + 0x54, 0x34, 0xf4, 0xf9, 0x0b, 0xf8, 0x1b, 0x28, 0x53, 0xa6, 0xa4, 0xd2, 0x30, 0x77, 0x0d, 0xb5, + 0x3a, 0x3a, 0x46, 0xab, 0x1f, 0x5e, 0xd9, 0xf2, 0xe4, 0xcc, 0x39, 0x95, 0xf7, 0xed, 0xfb, 0xde, + 0xbe, 0xa7, 0x6f, 0xbf, 0xf7, 0xbc, 0x40, 0xb5, 0xfb, 0xa6, 0x6e, 0x12, 0x07, 0xe9, 0x26, 0xc1, + 0x18, 0x99, 0xae, 0x4d, 0xb0, 0x3e, 0x6f, 0xea, 0xee, 0x2b, 0x6d, 0xea, 0x10, 0x97, 0x88, 0x87, + 0x76, 0xdf, 0xd4, 0x42, 0x80, 0xb6, 0x00, 0x68, 0xf3, 0xa6, 0x5c, 0xb3, 0x88, 0x45, 0x18, 0x44, + 0x0f, 0x57, 0x11, 0x5a, 0xfe, 0xc8, 0x22, 0xc4, 0xba, 0x44, 0x3a, 0xb3, 0xfa, 0xb3, 0xa1, 0xde, + 0xc3, 0x5e, 0xec, 0xe2, 0x32, 0x5d, 0xda, 0x08, 0xbb, 0x61, 0x96, 0x68, 0x15, 0x03, 0x3e, 0x5f, + 0x53, 0x0a, 0x97, 0x97, 0x01, 0xe1, 0xef, 0x3b, 0xa0, 0xfe, 0x8c, 0x5a, 0x9d, 0x74, 0xff, 0xbb, + 0x29, 0xc2, 0xe7, 0xd8, 0x76, 0xc5, 0x26, 0x28, 0x47, 0x47, 0x76, 0xed, 0x81, 0x24, 0x34, 0x84, + 0xe3, 0x72, 0xbb, 0x16, 0xf8, 0xea, 0x5d, 0xaf, 0x37, 0xb9, 0x3c, 0x83, 0xa9, 0x0b, 0x1a, 0xa5, + 0x68, 0x7d, 0x3e, 0x10, 0xbf, 0x06, 0x1f, 0x2c, 0x12, 0x84, 0x61, 0x3b, 0x2c, 0x4c, 0x0a, 0x7c, + 0xb5, 0x16, 0x87, 0xf1, 0x6e, 0x68, 0x54, 0x17, 0xf6, 0xf9, 0x40, 0xfc, 0x16, 0x54, 0x4d, 0x32, + 0xc3, 0x2e, 0x72, 0xa6, 0x3d, 0xc7, 0xf5, 0xa4, 0x62, 0x43, 0x38, 0xae, 0x9c, 0x7e, 0xaa, 0xe5, + 0xb3, 0xa6, 0x75, 0x38, 0x6c, 0x7b, 0xf7, 0x8d, 0xaf, 0x16, 0x8c, 0x4c, 0xbc, 0x28, 0x81, 0x83, + 0x39, 0x72, 0xa8, 0x4d, 0xb0, 0xb4, 0x1b, 0x16, 0x62, 0x24, 0xa6, 0x78, 0x08, 0xf6, 0xa9, 0x6d, + 0x61, 0xe4, 0x48, 0x7b, 0xcc, 0x11, 0x5b, 0x67, 0xa5, 0x5f, 0x5e, 0xab, 0x85, 0x7f, 0x5e, 0xab, + 0x05, 0xa8, 0x82, 0x4f, 0x72, 0x69, 0x31, 0x10, 0x9d, 0x12, 0x4c, 0x11, 0xfc, 0xe3, 0x00, 0xd4, + 0x56, 0x10, 0x17, 0x8e, 0xf7, 0x7f, 0x78, 0xbb, 0x00, 0xf5, 0x01, 0xa2, 0xb6, 0x83, 0x06, 0xdd, + 0x3c, 0xfe, 0x1a, 0x81, 0xaf, 0x3e, 0x88, 0xc2, 0x73, 0x61, 0xd0, 0xb8, 0x1f, 0xef, 0x77, 0x78, + 0x3a, 0x5f, 0x82, 0x87, 0x3c, 0x1d, 0x5d, 0x73, 0x44, 0x28, 0xc2, 0x4b, 0x19, 0x8a, 0x2c, 0xc3, + 0xa3, 0xc0, 0x57, 0x8f, 0x93, 0x1b, 0x7a, 0x47, 0x08, 0x34, 0x14, 0x1e, 0xd3, 0x61, 0x90, 0x4c, + 0xe2, 0xef, 0x41, 0x35, 0xfe, 0x4c, 0xea, 0xf6, 0x5c, 0xc4, 0xc8, 0xaf, 0x9c, 0xd6, 0xb4, 0x48, + 0xcf, 0x5a, 0xa2, 0x67, 0xad, 0x85, 0xbd, 0xf6, 0x51, 0xe0, 0xab, 0xf7, 0x33, 0xd4, 0xb0, 0x18, + 0x68, 0x54, 0x22, 0xf3, 0x87, 0xd0, 0x5a, 0x51, 0xc6, 0xde, 0x2d, 0x95, 0xf1, 0x1c, 0xd4, 0x33, + 0xdf, 0x19, 0xeb, 0x82, 0x4a, 0xfb, 0x8d, 0x62, 0x96, 0xf0, 0x5c, 0x18, 0x34, 0x6a, 0xfc, 0xfe, + 0x8f, 0xf1, 0xb6, 0xf8, 0x02, 0x54, 0xa7, 0x0e, 0x21, 0xc3, 0xee, 0x08, 0xd9, 0xd6, 0xc8, 0x95, + 0x0e, 0x58, 0x99, 0x32, 0x57, 0x66, 0xd4, 0xa3, 0xf3, 0xa6, 0xf6, 0x0d, 0x43, 0xb4, 0x3f, 0x0e, + 0x8b, 0x5b, 0x50, 0xc0, 0x47, 0x43, 0xa3, 0xc2, 0xcc, 0x08, 0x29, 0x3e, 0x05, 0x20, 0xf2, 0xda, + 0xd8, 0x76, 0xa5, 0x52, 0x43, 0x38, 0xae, 0xb6, 0xeb, 0x81, 0xaf, 0xde, 0xe3, 0x23, 0x43, 0x1f, + 0x34, 0xca, 0xcc, 0x60, 0x4d, 0x7c, 0x96, 0x54, 0x14, 0x65, 0x96, 0xca, 0x2c, 0xee, 0x68, 0x39, + 0x63, 0xe4, 0x4d, 0x32, 0x76, 0x98, 0x25, 0x76, 0xc0, 0x9d, 0xd8, 0x1b, 0x0a, 0x1e, 0xd3, 0x19, + 0x95, 0x00, 0x0b, 0x97, 0x03, 0x5f, 0x3d, 0xcc, 0x84, 0x27, 0x00, 0x68, 0x7c, 0x18, 0x9d, 0x90, + 0x6c, 0x88, 0x43, 0x70, 0x37, 0xf5, 0x26, 0xb4, 0x54, 0xde, 0x49, 0x8b, 0x1a, 0xd3, 0x72, 0x94, + 0x4e, 0x8d, 0xcc, 0x09, 0xd0, 0xb8, 0x93, 0x6e, 0xc5, 0xf4, 0x2c, 0x3a, 0xba, 0xba, 0xa6, 0xa3, + 0x15, 0xf0, 0x20, 0xaf, 0x5f, 0xd3, 0x86, 0xfe, 0x73, 0x2f, 0xa7, 0xa1, 0x5b, 0xe6, 0x78, 0x75, + 0xaa, 0x09, 0x1b, 0x4d, 0x35, 0x13, 0xc8, 0xd9, 0x9e, 0xca, 0xe9, 0xf0, 0xcf, 0x02, 0x5f, 0x7d, + 0x98, 0xd7, 0x7f, 0xd9, 0x83, 0xa5, 0x4c, 0xe3, 0xf1, 0x49, 0xb8, 0x51, 0x57, 0xcc, 0x8e, 0xba, + 0xed, 0x37, 0xe3, 0xb2, 0xca, 0xf7, 0xb6, 0xa8, 0xf2, 0x26, 0x88, 0xc4, 0xdb, 0x75, 0x1d, 0x4f, + 0xda, 0x67, 0x6a, 0xe3, 0x86, 0x67, 0xea, 0x82, 0x46, 0x89, 0xad, 0xc3, 0x79, 0xbb, 0x2c, 0xf1, + 0x83, 0xdb, 0x49, 0xbc, 0xb4, 0x15, 0x89, 0x97, 0xdf, 0xab, 0xc4, 0xc1, 0x06, 0x12, 0x6f, 0x99, + 0xe3, 0x54, 0xe2, 0xbf, 0xee, 0x00, 0x69, 0x05, 0xd0, 0x21, 0x78, 0x68, 0x3b, 0x93, 0xdb, 0xca, + 0x3c, 0xbd, 0xb9, 0x9e, 0x39, 0x66, 0xaa, 0xce, 0xb9, 0xb9, 0x9e, 0x39, 0x4e, 0x6e, 0x2e, 0x6c, + 0xac, 0x65, 0x21, 0x15, 0xb7, 0x28, 0xa4, 0x05, 0x59, 0xbb, 0x6b, 0xc8, 0x82, 0xa0, 0xb1, 0x8e, + 0x8b, 0x84, 0xb0, 0xd3, 0x7f, 0x8b, 0xa0, 0xf8, 0x8c, 0x5a, 0xe2, 0x4f, 0x40, 0xcc, 0x79, 0x21, + 0x9d, 0xac, 0xfb, 0xff, 0xc9, 0x7d, 0x39, 0xc8, 0x5f, 0x6c, 0x04, 0x4f, 0x6a, 0x10, 0x5f, 0x82, + 0x7b, 0xab, 0x8f, 0x8c, 0x47, 0x37, 0x3e, 0xeb, 0xc2, 0xf1, 0xe4, 0xa7, 0x9b, 0xa0, 0xd7, 0x27, + 0x0e, 0xef, 0xec, 0xe6, 0x89, 0x5b, 0xe6, 0x78, 0x83, 0xc4, 0x9c, 0x4c, 0xc5, 0x9f, 0x05, 0x50, + 0xcf, 0xd7, 0xe8, 0xe3, 0x1b, 0x9f, 0x17, 0x47, 0xc8, 0x5f, 0x6e, 0x1a, 0x91, 0x54, 0xd1, 0x7e, + 0xfe, 0xe6, 0x4a, 0x11, 0xde, 0x5e, 0x29, 0xc2, 0xdf, 0x57, 0x8a, 0xf0, 0xdb, 0xb5, 0x52, 0x78, + 0x7b, 0xad, 0x14, 0xfe, 0xba, 0x56, 0x0a, 0x2f, 0xbe, 0xb2, 0x6c, 0x77, 0x34, 0xeb, 0x6b, 0x26, + 0x99, 0xe8, 0x26, 0xa1, 0x13, 0x42, 0xe3, 0x9f, 0x13, 0x3a, 0x18, 0xeb, 0xaf, 0xf4, 0xf4, 0xed, + 0xfd, 0xf8, 0xc9, 0x09, 0xf7, 0xfc, 0x76, 0xbd, 0x29, 0xa2, 0xfd, 0x7d, 0x36, 0x71, 0x9f, 0xfc, + 0x17, 0x00, 0x00, 0xff, 0xff, 0x93, 0xae, 0x01, 0xa9, 0x2d, 0x0c, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type MsgClient interface { + // ConnectionOpenInit defines a rpc handler method for MsgConnectionOpenInit. + ConnectionOpenInit(ctx context.Context, in *MsgConnectionOpenInit, opts ...grpc.CallOption) (*MsgConnectionOpenInitResponse, error) + // ConnectionOpenTry defines a rpc handler method for MsgConnectionOpenTry. + ConnectionOpenTry(ctx context.Context, in *MsgConnectionOpenTry, opts ...grpc.CallOption) (*MsgConnectionOpenTryResponse, error) + // ConnectionOpenAck defines a rpc handler method for MsgConnectionOpenAck. + ConnectionOpenAck(ctx context.Context, in *MsgConnectionOpenAck, opts ...grpc.CallOption) (*MsgConnectionOpenAckResponse, error) + // ConnectionOpenConfirm defines a rpc handler method for MsgConnectionOpenConfirm. + ConnectionOpenConfirm(ctx context.Context, in *MsgConnectionOpenConfirm, opts ...grpc.CallOption) (*MsgConnectionOpenConfirmResponse, error) +} + +type msgClient struct { + cc grpc1.ClientConn +} + +func NewMsgClient(cc grpc1.ClientConn) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) ConnectionOpenInit(ctx context.Context, in *MsgConnectionOpenInit, opts ...grpc.CallOption) (*MsgConnectionOpenInitResponse, error) { + out := new(MsgConnectionOpenInitResponse) + err := c.cc.Invoke(ctx, "/ibc.core.connection.v1.Msg/ConnectionOpenInit", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) ConnectionOpenTry(ctx context.Context, in *MsgConnectionOpenTry, opts ...grpc.CallOption) (*MsgConnectionOpenTryResponse, error) { + out := new(MsgConnectionOpenTryResponse) + err := c.cc.Invoke(ctx, "/ibc.core.connection.v1.Msg/ConnectionOpenTry", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) ConnectionOpenAck(ctx context.Context, in *MsgConnectionOpenAck, opts ...grpc.CallOption) (*MsgConnectionOpenAckResponse, error) { + out := new(MsgConnectionOpenAckResponse) + err := c.cc.Invoke(ctx, "/ibc.core.connection.v1.Msg/ConnectionOpenAck", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) ConnectionOpenConfirm(ctx context.Context, in *MsgConnectionOpenConfirm, opts ...grpc.CallOption) (*MsgConnectionOpenConfirmResponse, error) { + out := new(MsgConnectionOpenConfirmResponse) + err := c.cc.Invoke(ctx, "/ibc.core.connection.v1.Msg/ConnectionOpenConfirm", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +type MsgServer interface { + // ConnectionOpenInit defines a rpc handler method for MsgConnectionOpenInit. + ConnectionOpenInit(context.Context, *MsgConnectionOpenInit) (*MsgConnectionOpenInitResponse, error) + // ConnectionOpenTry defines a rpc handler method for MsgConnectionOpenTry. + ConnectionOpenTry(context.Context, *MsgConnectionOpenTry) (*MsgConnectionOpenTryResponse, error) + // ConnectionOpenAck defines a rpc handler method for MsgConnectionOpenAck. + ConnectionOpenAck(context.Context, *MsgConnectionOpenAck) (*MsgConnectionOpenAckResponse, error) + // ConnectionOpenConfirm defines a rpc handler method for MsgConnectionOpenConfirm. + ConnectionOpenConfirm(context.Context, *MsgConnectionOpenConfirm) (*MsgConnectionOpenConfirmResponse, error) +} + +// UnimplementedMsgServer can be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (*UnimplementedMsgServer) ConnectionOpenInit(ctx context.Context, req *MsgConnectionOpenInit) (*MsgConnectionOpenInitResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ConnectionOpenInit not implemented") +} +func (*UnimplementedMsgServer) ConnectionOpenTry(ctx context.Context, req *MsgConnectionOpenTry) (*MsgConnectionOpenTryResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ConnectionOpenTry not implemented") +} +func (*UnimplementedMsgServer) ConnectionOpenAck(ctx context.Context, req *MsgConnectionOpenAck) (*MsgConnectionOpenAckResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ConnectionOpenAck not implemented") +} +func (*UnimplementedMsgServer) ConnectionOpenConfirm(ctx context.Context, req *MsgConnectionOpenConfirm) (*MsgConnectionOpenConfirmResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ConnectionOpenConfirm not implemented") +} + +func RegisterMsgServer(s grpc1.Server, srv MsgServer) { + s.RegisterService(&_Msg_serviceDesc, srv) +} + +func _Msg_ConnectionOpenInit_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgConnectionOpenInit) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).ConnectionOpenInit(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.core.connection.v1.Msg/ConnectionOpenInit", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).ConnectionOpenInit(ctx, req.(*MsgConnectionOpenInit)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_ConnectionOpenTry_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgConnectionOpenTry) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).ConnectionOpenTry(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.core.connection.v1.Msg/ConnectionOpenTry", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).ConnectionOpenTry(ctx, req.(*MsgConnectionOpenTry)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_ConnectionOpenAck_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgConnectionOpenAck) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).ConnectionOpenAck(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.core.connection.v1.Msg/ConnectionOpenAck", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).ConnectionOpenAck(ctx, req.(*MsgConnectionOpenAck)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_ConnectionOpenConfirm_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgConnectionOpenConfirm) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).ConnectionOpenConfirm(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.core.connection.v1.Msg/ConnectionOpenConfirm", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).ConnectionOpenConfirm(ctx, req.(*MsgConnectionOpenConfirm)) + } + return interceptor(ctx, in, info, handler) +} + +var _Msg_serviceDesc = grpc.ServiceDesc{ + ServiceName: "ibc.core.connection.v1.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ConnectionOpenInit", + Handler: _Msg_ConnectionOpenInit_Handler, + }, + { + MethodName: "ConnectionOpenTry", + Handler: _Msg_ConnectionOpenTry_Handler, + }, + { + MethodName: "ConnectionOpenAck", + Handler: _Msg_ConnectionOpenAck_Handler, + }, + { + MethodName: "ConnectionOpenConfirm", + Handler: _Msg_ConnectionOpenConfirm_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "ibc/core/connection/v1/tx.proto", +} + +func (m *MsgConnectionOpenInit) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgConnectionOpenInit) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgConnectionOpenInit) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Signer) > 0 { + i -= len(m.Signer) + copy(dAtA[i:], m.Signer) + i = encodeVarintTx(dAtA, i, uint64(len(m.Signer))) + i-- + dAtA[i] = 0x2a + } + if len(m.Version) > 0 { + i -= len(m.Version) + copy(dAtA[i:], m.Version) + i = encodeVarintTx(dAtA, i, uint64(len(m.Version))) + i-- + dAtA[i] = 0x22 + } + { + size, err := m.Counterparty.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.ConnectionId) > 0 { + i -= len(m.ConnectionId) + copy(dAtA[i:], m.ConnectionId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ConnectionId))) + i-- + dAtA[i] = 0x12 + } + if len(m.ClientId) > 0 { + i -= len(m.ClientId) + copy(dAtA[i:], m.ClientId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ClientId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgConnectionOpenInitResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgConnectionOpenInitResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgConnectionOpenInitResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgConnectionOpenTry) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgConnectionOpenTry) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgConnectionOpenTry) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Signer) > 0 { + i -= len(m.Signer) + copy(dAtA[i:], m.Signer) + i = encodeVarintTx(dAtA, i, uint64(len(m.Signer))) + i-- + dAtA[i] = 0x62 + } + { + size, err := m.ConsensusHeight.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x5a + if len(m.ProofConsensus) > 0 { + i -= len(m.ProofConsensus) + copy(dAtA[i:], m.ProofConsensus) + i = encodeVarintTx(dAtA, i, uint64(len(m.ProofConsensus))) + i-- + dAtA[i] = 0x52 + } + if len(m.ProofClient) > 0 { + i -= len(m.ProofClient) + copy(dAtA[i:], m.ProofClient) + i = encodeVarintTx(dAtA, i, uint64(len(m.ProofClient))) + i-- + dAtA[i] = 0x4a + } + if len(m.ProofInit) > 0 { + i -= len(m.ProofInit) + copy(dAtA[i:], m.ProofInit) + i = encodeVarintTx(dAtA, i, uint64(len(m.ProofInit))) + i-- + dAtA[i] = 0x42 + } + { + size, err := m.ProofHeight.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + if len(m.CounterpartyVersions) > 0 { + for iNdEx := len(m.CounterpartyVersions) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.CounterpartyVersions[iNdEx]) + copy(dAtA[i:], m.CounterpartyVersions[iNdEx]) + i = encodeVarintTx(dAtA, i, uint64(len(m.CounterpartyVersions[iNdEx]))) + i-- + dAtA[i] = 0x32 + } + } + { + size, err := m.Counterparty.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + if m.ClientState != nil { + { + size, err := m.ClientState.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if len(m.CounterpartyChosenConnectionId) > 0 { + i -= len(m.CounterpartyChosenConnectionId) + copy(dAtA[i:], m.CounterpartyChosenConnectionId) + i = encodeVarintTx(dAtA, i, uint64(len(m.CounterpartyChosenConnectionId))) + i-- + dAtA[i] = 0x1a + } + if len(m.DesiredConnectionId) > 0 { + i -= len(m.DesiredConnectionId) + copy(dAtA[i:], m.DesiredConnectionId) + i = encodeVarintTx(dAtA, i, uint64(len(m.DesiredConnectionId))) + i-- + dAtA[i] = 0x12 + } + if len(m.ClientId) > 0 { + i -= len(m.ClientId) + copy(dAtA[i:], m.ClientId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ClientId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgConnectionOpenTryResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgConnectionOpenTryResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgConnectionOpenTryResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgConnectionOpenAck) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgConnectionOpenAck) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgConnectionOpenAck) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Signer) > 0 { + i -= len(m.Signer) + copy(dAtA[i:], m.Signer) + i = encodeVarintTx(dAtA, i, uint64(len(m.Signer))) + i-- + dAtA[i] = 0x52 + } + { + size, err := m.ConsensusHeight.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + if len(m.ProofConsensus) > 0 { + i -= len(m.ProofConsensus) + copy(dAtA[i:], m.ProofConsensus) + i = encodeVarintTx(dAtA, i, uint64(len(m.ProofConsensus))) + i-- + dAtA[i] = 0x42 + } + if len(m.ProofClient) > 0 { + i -= len(m.ProofClient) + copy(dAtA[i:], m.ProofClient) + i = encodeVarintTx(dAtA, i, uint64(len(m.ProofClient))) + i-- + dAtA[i] = 0x3a + } + if len(m.ProofTry) > 0 { + i -= len(m.ProofTry) + copy(dAtA[i:], m.ProofTry) + i = encodeVarintTx(dAtA, i, uint64(len(m.ProofTry))) + i-- + dAtA[i] = 0x32 + } + { + size, err := m.ProofHeight.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + if m.ClientState != nil { + { + size, err := m.ClientState.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if len(m.Version) > 0 { + i -= len(m.Version) + copy(dAtA[i:], m.Version) + i = encodeVarintTx(dAtA, i, uint64(len(m.Version))) + i-- + dAtA[i] = 0x1a + } + if len(m.CounterpartyConnectionId) > 0 { + i -= len(m.CounterpartyConnectionId) + copy(dAtA[i:], m.CounterpartyConnectionId) + i = encodeVarintTx(dAtA, i, uint64(len(m.CounterpartyConnectionId))) + i-- + dAtA[i] = 0x12 + } + if len(m.ConnectionId) > 0 { + i -= len(m.ConnectionId) + copy(dAtA[i:], m.ConnectionId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ConnectionId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgConnectionOpenAckResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgConnectionOpenAckResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgConnectionOpenAckResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgConnectionOpenConfirm) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgConnectionOpenConfirm) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgConnectionOpenConfirm) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Signer) > 0 { + i -= len(m.Signer) + copy(dAtA[i:], m.Signer) + i = encodeVarintTx(dAtA, i, uint64(len(m.Signer))) + i-- + dAtA[i] = 0x22 + } + { + size, err := m.ProofHeight.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.ProofAck) > 0 { + i -= len(m.ProofAck) + copy(dAtA[i:], m.ProofAck) + i = encodeVarintTx(dAtA, i, uint64(len(m.ProofAck))) + i-- + dAtA[i] = 0x12 + } + if len(m.ConnectionId) > 0 { + i -= len(m.ConnectionId) + copy(dAtA[i:], m.ConnectionId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ConnectionId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgConnectionOpenConfirmResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgConnectionOpenConfirmResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgConnectionOpenConfirmResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintTx(dAtA []byte, offset int, v uint64) int { + offset -= sovTx(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MsgConnectionOpenInit) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ClientId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ConnectionId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Counterparty.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.Version) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Signer) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgConnectionOpenInitResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgConnectionOpenTry) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ClientId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.DesiredConnectionId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.CounterpartyChosenConnectionId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.ClientState != nil { + l = m.ClientState.Size() + n += 1 + l + sovTx(uint64(l)) + } + l = m.Counterparty.Size() + n += 1 + l + sovTx(uint64(l)) + if len(m.CounterpartyVersions) > 0 { + for _, s := range m.CounterpartyVersions { + l = len(s) + n += 1 + l + sovTx(uint64(l)) + } + } + l = m.ProofHeight.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.ProofInit) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ProofClient) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ProofConsensus) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.ConsensusHeight.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.Signer) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgConnectionOpenTryResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgConnectionOpenAck) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ConnectionId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.CounterpartyConnectionId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Version) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.ClientState != nil { + l = m.ClientState.Size() + n += 1 + l + sovTx(uint64(l)) + } + l = m.ProofHeight.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.ProofTry) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ProofClient) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ProofConsensus) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.ConsensusHeight.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.Signer) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgConnectionOpenAckResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgConnectionOpenConfirm) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ConnectionId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ProofAck) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.ProofHeight.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.Signer) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgConnectionOpenConfirmResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovTx(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozTx(x uint64) (n int) { + return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MsgConnectionOpenInit) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgConnectionOpenInit: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgConnectionOpenInit: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConnectionId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ConnectionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Counterparty", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Counterparty.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Version = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Signer = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgConnectionOpenInitResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgConnectionOpenInitResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgConnectionOpenInitResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgConnectionOpenTry) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgConnectionOpenTry: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgConnectionOpenTry: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DesiredConnectionId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DesiredConnectionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CounterpartyChosenConnectionId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CounterpartyChosenConnectionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientState", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ClientState == nil { + m.ClientState = &types.Any{} + } + if err := m.ClientState.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Counterparty", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Counterparty.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CounterpartyVersions", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CounterpartyVersions = append(m.CounterpartyVersions, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ProofHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofInit", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProofInit = append(m.ProofInit[:0], dAtA[iNdEx:postIndex]...) + if m.ProofInit == nil { + m.ProofInit = []byte{} + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofClient", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProofClient = append(m.ProofClient[:0], dAtA[iNdEx:postIndex]...) + if m.ProofClient == nil { + m.ProofClient = []byte{} + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofConsensus", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProofConsensus = append(m.ProofConsensus[:0], dAtA[iNdEx:postIndex]...) + if m.ProofConsensus == nil { + m.ProofConsensus = []byte{} + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConsensusHeight", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ConsensusHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Signer = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgConnectionOpenTryResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgConnectionOpenTryResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgConnectionOpenTryResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgConnectionOpenAck) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgConnectionOpenAck: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgConnectionOpenAck: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConnectionId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ConnectionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CounterpartyConnectionId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CounterpartyConnectionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Version = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientState", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ClientState == nil { + m.ClientState = &types.Any{} + } + if err := m.ClientState.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ProofHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofTry", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProofTry = append(m.ProofTry[:0], dAtA[iNdEx:postIndex]...) + if m.ProofTry == nil { + m.ProofTry = []byte{} + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofClient", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProofClient = append(m.ProofClient[:0], dAtA[iNdEx:postIndex]...) + if m.ProofClient == nil { + m.ProofClient = []byte{} + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofConsensus", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProofConsensus = append(m.ProofConsensus[:0], dAtA[iNdEx:postIndex]...) + if m.ProofConsensus == nil { + m.ProofConsensus = []byte{} + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConsensusHeight", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ConsensusHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Signer = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgConnectionOpenAckResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgConnectionOpenAckResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgConnectionOpenAckResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgConnectionOpenConfirm) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgConnectionOpenConfirm: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgConnectionOpenConfirm: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConnectionId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ConnectionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofAck", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProofAck = append(m.ProofAck[:0], dAtA[iNdEx:postIndex]...) + if m.ProofAck == nil { + m.ProofAck = []byte{} + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ProofHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Signer = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgConnectionOpenConfirmResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgConnectionOpenConfirmResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgConnectionOpenConfirmResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipTx(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthTx + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupTx + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthTx + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthTx = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTx = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupTx = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/ibc/core/04-channel/types/channel.pb.go b/x/ibc/core/04-channel/types/channel.pb.go index e06a7ed7ec..19ca87cdbc 100644 --- a/x/ibc/core/04-channel/types/channel.pb.go +++ b/x/ibc/core/04-channel/types/channel.pb.go @@ -4,15 +4,10 @@ package types import ( - context "context" fmt "fmt" types "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" - grpc1 "github.com/gogo/protobuf/grpc" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" io "io" math "math" math_bits "math/bits" @@ -105,804 +100,6 @@ func (Order) EnumDescriptor() ([]byte, []int) { return fileDescriptor_c3a07336710636a0, []int{1} } -// MsgChannelOpenInit defines an sdk.Msg to initialize a channel handshake. It -// is called by a relayer on Chain A. -type MsgChannelOpenInit struct { - PortId string `protobuf:"bytes,1,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty" yaml:"port_id"` - ChannelId string `protobuf:"bytes,2,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty" yaml:"channel_id"` - Channel Channel `protobuf:"bytes,3,opt,name=channel,proto3" json:"channel"` - Signer string `protobuf:"bytes,4,opt,name=signer,proto3" json:"signer,omitempty"` -} - -func (m *MsgChannelOpenInit) Reset() { *m = MsgChannelOpenInit{} } -func (m *MsgChannelOpenInit) String() string { return proto.CompactTextString(m) } -func (*MsgChannelOpenInit) ProtoMessage() {} -func (*MsgChannelOpenInit) Descriptor() ([]byte, []int) { - return fileDescriptor_c3a07336710636a0, []int{0} -} -func (m *MsgChannelOpenInit) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgChannelOpenInit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgChannelOpenInit.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgChannelOpenInit) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgChannelOpenInit.Merge(m, src) -} -func (m *MsgChannelOpenInit) XXX_Size() int { - return m.Size() -} -func (m *MsgChannelOpenInit) XXX_DiscardUnknown() { - xxx_messageInfo_MsgChannelOpenInit.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgChannelOpenInit proto.InternalMessageInfo - -// MsgChannelOpenInitResponse defines the Msg/ChannelOpenInit response type. -type MsgChannelOpenInitResponse struct { -} - -func (m *MsgChannelOpenInitResponse) Reset() { *m = MsgChannelOpenInitResponse{} } -func (m *MsgChannelOpenInitResponse) String() string { return proto.CompactTextString(m) } -func (*MsgChannelOpenInitResponse) ProtoMessage() {} -func (*MsgChannelOpenInitResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_c3a07336710636a0, []int{1} -} -func (m *MsgChannelOpenInitResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgChannelOpenInitResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgChannelOpenInitResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgChannelOpenInitResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgChannelOpenInitResponse.Merge(m, src) -} -func (m *MsgChannelOpenInitResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgChannelOpenInitResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgChannelOpenInitResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgChannelOpenInitResponse proto.InternalMessageInfo - -// MsgChannelOpenInit defines a msg sent by a Relayer to try to open a channel -// on Chain B. -type MsgChannelOpenTry struct { - PortId string `protobuf:"bytes,1,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty" yaml:"port_id"` - DesiredChannelId string `protobuf:"bytes,2,opt,name=desired_channel_id,json=desiredChannelId,proto3" json:"desired_channel_id,omitempty" yaml:"desired_channel_id"` - CounterpartyChosenChannelId string `protobuf:"bytes,3,opt,name=counterparty_chosen_channel_id,json=counterpartyChosenChannelId,proto3" json:"counterparty_chosen_channel_id,omitempty" yaml:"counterparty_chosen_channel_id"` - Channel Channel `protobuf:"bytes,4,opt,name=channel,proto3" json:"channel"` - CounterpartyVersion string `protobuf:"bytes,5,opt,name=counterparty_version,json=counterpartyVersion,proto3" json:"counterparty_version,omitempty" yaml:"counterparty_version"` - ProofInit []byte `protobuf:"bytes,6,opt,name=proof_init,json=proofInit,proto3" json:"proof_init,omitempty" yaml:"proof_init"` - ProofHeight types.Height `protobuf:"bytes,7,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"` - Signer string `protobuf:"bytes,8,opt,name=signer,proto3" json:"signer,omitempty"` -} - -func (m *MsgChannelOpenTry) Reset() { *m = MsgChannelOpenTry{} } -func (m *MsgChannelOpenTry) String() string { return proto.CompactTextString(m) } -func (*MsgChannelOpenTry) ProtoMessage() {} -func (*MsgChannelOpenTry) Descriptor() ([]byte, []int) { - return fileDescriptor_c3a07336710636a0, []int{2} -} -func (m *MsgChannelOpenTry) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgChannelOpenTry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgChannelOpenTry.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgChannelOpenTry) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgChannelOpenTry.Merge(m, src) -} -func (m *MsgChannelOpenTry) XXX_Size() int { - return m.Size() -} -func (m *MsgChannelOpenTry) XXX_DiscardUnknown() { - xxx_messageInfo_MsgChannelOpenTry.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgChannelOpenTry proto.InternalMessageInfo - -// MsgChannelOpenTryResponse defines the Msg/ChannelOpenTry response type. -type MsgChannelOpenTryResponse struct { -} - -func (m *MsgChannelOpenTryResponse) Reset() { *m = MsgChannelOpenTryResponse{} } -func (m *MsgChannelOpenTryResponse) String() string { return proto.CompactTextString(m) } -func (*MsgChannelOpenTryResponse) ProtoMessage() {} -func (*MsgChannelOpenTryResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_c3a07336710636a0, []int{3} -} -func (m *MsgChannelOpenTryResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgChannelOpenTryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgChannelOpenTryResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgChannelOpenTryResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgChannelOpenTryResponse.Merge(m, src) -} -func (m *MsgChannelOpenTryResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgChannelOpenTryResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgChannelOpenTryResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgChannelOpenTryResponse proto.InternalMessageInfo - -// MsgChannelOpenAck defines a msg sent by a Relayer to Chain A to acknowledge -// the change of channel state to TRYOPEN on Chain B. -type MsgChannelOpenAck struct { - PortId string `protobuf:"bytes,1,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty" yaml:"port_id"` - ChannelId string `protobuf:"bytes,2,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty" yaml:"channel_id"` - CounterpartyChannelId string `protobuf:"bytes,3,opt,name=counterparty_channel_id,json=counterpartyChannelId,proto3" json:"counterparty_channel_id,omitempty" yaml:"counterparty_channel_id"` - CounterpartyVersion string `protobuf:"bytes,4,opt,name=counterparty_version,json=counterpartyVersion,proto3" json:"counterparty_version,omitempty" yaml:"counterparty_version"` - ProofTry []byte `protobuf:"bytes,5,opt,name=proof_try,json=proofTry,proto3" json:"proof_try,omitempty" yaml:"proof_try"` - ProofHeight types.Height `protobuf:"bytes,6,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"` - Signer string `protobuf:"bytes,7,opt,name=signer,proto3" json:"signer,omitempty"` -} - -func (m *MsgChannelOpenAck) Reset() { *m = MsgChannelOpenAck{} } -func (m *MsgChannelOpenAck) String() string { return proto.CompactTextString(m) } -func (*MsgChannelOpenAck) ProtoMessage() {} -func (*MsgChannelOpenAck) Descriptor() ([]byte, []int) { - return fileDescriptor_c3a07336710636a0, []int{4} -} -func (m *MsgChannelOpenAck) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgChannelOpenAck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgChannelOpenAck.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgChannelOpenAck) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgChannelOpenAck.Merge(m, src) -} -func (m *MsgChannelOpenAck) XXX_Size() int { - return m.Size() -} -func (m *MsgChannelOpenAck) XXX_DiscardUnknown() { - xxx_messageInfo_MsgChannelOpenAck.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgChannelOpenAck proto.InternalMessageInfo - -// MsgChannelOpenAckResponse defines the Msg/ChannelOpenAck response type. -type MsgChannelOpenAckResponse struct { -} - -func (m *MsgChannelOpenAckResponse) Reset() { *m = MsgChannelOpenAckResponse{} } -func (m *MsgChannelOpenAckResponse) String() string { return proto.CompactTextString(m) } -func (*MsgChannelOpenAckResponse) ProtoMessage() {} -func (*MsgChannelOpenAckResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_c3a07336710636a0, []int{5} -} -func (m *MsgChannelOpenAckResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgChannelOpenAckResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgChannelOpenAckResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgChannelOpenAckResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgChannelOpenAckResponse.Merge(m, src) -} -func (m *MsgChannelOpenAckResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgChannelOpenAckResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgChannelOpenAckResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgChannelOpenAckResponse proto.InternalMessageInfo - -// MsgChannelOpenConfirm defines a msg sent by a Relayer to Chain B to -// acknowledge the change of channel state to OPEN on Chain A. -type MsgChannelOpenConfirm struct { - PortId string `protobuf:"bytes,1,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty" yaml:"port_id"` - ChannelId string `protobuf:"bytes,2,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty" yaml:"channel_id"` - ProofAck []byte `protobuf:"bytes,3,opt,name=proof_ack,json=proofAck,proto3" json:"proof_ack,omitempty" yaml:"proof_ack"` - ProofHeight types.Height `protobuf:"bytes,4,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"` - Signer string `protobuf:"bytes,5,opt,name=signer,proto3" json:"signer,omitempty"` -} - -func (m *MsgChannelOpenConfirm) Reset() { *m = MsgChannelOpenConfirm{} } -func (m *MsgChannelOpenConfirm) String() string { return proto.CompactTextString(m) } -func (*MsgChannelOpenConfirm) ProtoMessage() {} -func (*MsgChannelOpenConfirm) Descriptor() ([]byte, []int) { - return fileDescriptor_c3a07336710636a0, []int{6} -} -func (m *MsgChannelOpenConfirm) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgChannelOpenConfirm) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgChannelOpenConfirm.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgChannelOpenConfirm) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgChannelOpenConfirm.Merge(m, src) -} -func (m *MsgChannelOpenConfirm) XXX_Size() int { - return m.Size() -} -func (m *MsgChannelOpenConfirm) XXX_DiscardUnknown() { - xxx_messageInfo_MsgChannelOpenConfirm.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgChannelOpenConfirm proto.InternalMessageInfo - -// MsgChannelOpenConfirmResponse defines the Msg/ChannelOpenConfirm response type. -type MsgChannelOpenConfirmResponse struct { -} - -func (m *MsgChannelOpenConfirmResponse) Reset() { *m = MsgChannelOpenConfirmResponse{} } -func (m *MsgChannelOpenConfirmResponse) String() string { return proto.CompactTextString(m) } -func (*MsgChannelOpenConfirmResponse) ProtoMessage() {} -func (*MsgChannelOpenConfirmResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_c3a07336710636a0, []int{7} -} -func (m *MsgChannelOpenConfirmResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgChannelOpenConfirmResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgChannelOpenConfirmResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgChannelOpenConfirmResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgChannelOpenConfirmResponse.Merge(m, src) -} -func (m *MsgChannelOpenConfirmResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgChannelOpenConfirmResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgChannelOpenConfirmResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgChannelOpenConfirmResponse proto.InternalMessageInfo - -// MsgChannelCloseInit defines a msg sent by a Relayer to Chain A -// to close a channel with Chain B. -type MsgChannelCloseInit struct { - PortId string `protobuf:"bytes,1,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty" yaml:"port_id"` - ChannelId string `protobuf:"bytes,2,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty" yaml:"channel_id"` - Signer string `protobuf:"bytes,3,opt,name=signer,proto3" json:"signer,omitempty"` -} - -func (m *MsgChannelCloseInit) Reset() { *m = MsgChannelCloseInit{} } -func (m *MsgChannelCloseInit) String() string { return proto.CompactTextString(m) } -func (*MsgChannelCloseInit) ProtoMessage() {} -func (*MsgChannelCloseInit) Descriptor() ([]byte, []int) { - return fileDescriptor_c3a07336710636a0, []int{8} -} -func (m *MsgChannelCloseInit) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgChannelCloseInit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgChannelCloseInit.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgChannelCloseInit) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgChannelCloseInit.Merge(m, src) -} -func (m *MsgChannelCloseInit) XXX_Size() int { - return m.Size() -} -func (m *MsgChannelCloseInit) XXX_DiscardUnknown() { - xxx_messageInfo_MsgChannelCloseInit.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgChannelCloseInit proto.InternalMessageInfo - -// MsgChannelCloseInitResponse defines the Msg/ChannelCloseInit response type. -type MsgChannelCloseInitResponse struct { -} - -func (m *MsgChannelCloseInitResponse) Reset() { *m = MsgChannelCloseInitResponse{} } -func (m *MsgChannelCloseInitResponse) String() string { return proto.CompactTextString(m) } -func (*MsgChannelCloseInitResponse) ProtoMessage() {} -func (*MsgChannelCloseInitResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_c3a07336710636a0, []int{9} -} -func (m *MsgChannelCloseInitResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgChannelCloseInitResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgChannelCloseInitResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgChannelCloseInitResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgChannelCloseInitResponse.Merge(m, src) -} -func (m *MsgChannelCloseInitResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgChannelCloseInitResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgChannelCloseInitResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgChannelCloseInitResponse proto.InternalMessageInfo - -// MsgChannelCloseConfirm defines a msg sent by a Relayer to Chain B -// to acknowledge the change of channel state to CLOSED on Chain A. -type MsgChannelCloseConfirm struct { - PortId string `protobuf:"bytes,1,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty" yaml:"port_id"` - ChannelId string `protobuf:"bytes,2,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty" yaml:"channel_id"` - ProofInit []byte `protobuf:"bytes,3,opt,name=proof_init,json=proofInit,proto3" json:"proof_init,omitempty" yaml:"proof_init"` - ProofHeight types.Height `protobuf:"bytes,4,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"` - Signer string `protobuf:"bytes,5,opt,name=signer,proto3" json:"signer,omitempty"` -} - -func (m *MsgChannelCloseConfirm) Reset() { *m = MsgChannelCloseConfirm{} } -func (m *MsgChannelCloseConfirm) String() string { return proto.CompactTextString(m) } -func (*MsgChannelCloseConfirm) ProtoMessage() {} -func (*MsgChannelCloseConfirm) Descriptor() ([]byte, []int) { - return fileDescriptor_c3a07336710636a0, []int{10} -} -func (m *MsgChannelCloseConfirm) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgChannelCloseConfirm) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgChannelCloseConfirm.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgChannelCloseConfirm) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgChannelCloseConfirm.Merge(m, src) -} -func (m *MsgChannelCloseConfirm) XXX_Size() int { - return m.Size() -} -func (m *MsgChannelCloseConfirm) XXX_DiscardUnknown() { - xxx_messageInfo_MsgChannelCloseConfirm.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgChannelCloseConfirm proto.InternalMessageInfo - -// MsgChannelCloseConfirmResponse defines the Msg/ChannelCloseConfirm response type. -type MsgChannelCloseConfirmResponse struct { -} - -func (m *MsgChannelCloseConfirmResponse) Reset() { *m = MsgChannelCloseConfirmResponse{} } -func (m *MsgChannelCloseConfirmResponse) String() string { return proto.CompactTextString(m) } -func (*MsgChannelCloseConfirmResponse) ProtoMessage() {} -func (*MsgChannelCloseConfirmResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_c3a07336710636a0, []int{11} -} -func (m *MsgChannelCloseConfirmResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgChannelCloseConfirmResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgChannelCloseConfirmResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgChannelCloseConfirmResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgChannelCloseConfirmResponse.Merge(m, src) -} -func (m *MsgChannelCloseConfirmResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgChannelCloseConfirmResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgChannelCloseConfirmResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgChannelCloseConfirmResponse proto.InternalMessageInfo - -// MsgRecvPacket receives incoming IBC packet -type MsgRecvPacket struct { - Packet Packet `protobuf:"bytes,1,opt,name=packet,proto3" json:"packet"` - Proof []byte `protobuf:"bytes,2,opt,name=proof,proto3" json:"proof,omitempty"` - ProofHeight types.Height `protobuf:"bytes,3,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"` - Signer string `protobuf:"bytes,4,opt,name=signer,proto3" json:"signer,omitempty"` -} - -func (m *MsgRecvPacket) Reset() { *m = MsgRecvPacket{} } -func (m *MsgRecvPacket) String() string { return proto.CompactTextString(m) } -func (*MsgRecvPacket) ProtoMessage() {} -func (*MsgRecvPacket) Descriptor() ([]byte, []int) { - return fileDescriptor_c3a07336710636a0, []int{12} -} -func (m *MsgRecvPacket) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgRecvPacket) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgRecvPacket.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgRecvPacket) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgRecvPacket.Merge(m, src) -} -func (m *MsgRecvPacket) XXX_Size() int { - return m.Size() -} -func (m *MsgRecvPacket) XXX_DiscardUnknown() { - xxx_messageInfo_MsgRecvPacket.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgRecvPacket proto.InternalMessageInfo - -// MsgRecvPacketResponse defines the Msg/RecvPacket response type. -type MsgRecvPacketResponse struct { -} - -func (m *MsgRecvPacketResponse) Reset() { *m = MsgRecvPacketResponse{} } -func (m *MsgRecvPacketResponse) String() string { return proto.CompactTextString(m) } -func (*MsgRecvPacketResponse) ProtoMessage() {} -func (*MsgRecvPacketResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_c3a07336710636a0, []int{13} -} -func (m *MsgRecvPacketResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgRecvPacketResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgRecvPacketResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgRecvPacketResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgRecvPacketResponse.Merge(m, src) -} -func (m *MsgRecvPacketResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgRecvPacketResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgRecvPacketResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgRecvPacketResponse proto.InternalMessageInfo - -// MsgTimeout receives timed-out packet -type MsgTimeout struct { - Packet Packet `protobuf:"bytes,1,opt,name=packet,proto3" json:"packet"` - Proof []byte `protobuf:"bytes,2,opt,name=proof,proto3" json:"proof,omitempty"` - ProofHeight types.Height `protobuf:"bytes,3,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"` - NextSequenceRecv uint64 `protobuf:"varint,4,opt,name=next_sequence_recv,json=nextSequenceRecv,proto3" json:"next_sequence_recv,omitempty" yaml:"next_sequence_recv"` - Signer string `protobuf:"bytes,5,opt,name=signer,proto3" json:"signer,omitempty"` -} - -func (m *MsgTimeout) Reset() { *m = MsgTimeout{} } -func (m *MsgTimeout) String() string { return proto.CompactTextString(m) } -func (*MsgTimeout) ProtoMessage() {} -func (*MsgTimeout) Descriptor() ([]byte, []int) { - return fileDescriptor_c3a07336710636a0, []int{14} -} -func (m *MsgTimeout) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgTimeout) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgTimeout.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgTimeout) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgTimeout.Merge(m, src) -} -func (m *MsgTimeout) XXX_Size() int { - return m.Size() -} -func (m *MsgTimeout) XXX_DiscardUnknown() { - xxx_messageInfo_MsgTimeout.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgTimeout proto.InternalMessageInfo - -// MsgTimeoutResponse defines the Msg/Timeout response type. -type MsgTimeoutResponse struct { -} - -func (m *MsgTimeoutResponse) Reset() { *m = MsgTimeoutResponse{} } -func (m *MsgTimeoutResponse) String() string { return proto.CompactTextString(m) } -func (*MsgTimeoutResponse) ProtoMessage() {} -func (*MsgTimeoutResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_c3a07336710636a0, []int{15} -} -func (m *MsgTimeoutResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgTimeoutResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgTimeoutResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgTimeoutResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgTimeoutResponse.Merge(m, src) -} -func (m *MsgTimeoutResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgTimeoutResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgTimeoutResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgTimeoutResponse proto.InternalMessageInfo - -// MsgTimeoutOnClose timed-out packet upon counterparty channel closure. -type MsgTimeoutOnClose struct { - Packet Packet `protobuf:"bytes,1,opt,name=packet,proto3" json:"packet"` - Proof []byte `protobuf:"bytes,2,opt,name=proof,proto3" json:"proof,omitempty"` - ProofClose []byte `protobuf:"bytes,3,opt,name=proof_close,json=proofClose,proto3" json:"proof_close,omitempty" yaml:"proof_close"` - ProofHeight types.Height `protobuf:"bytes,4,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"` - NextSequenceRecv uint64 `protobuf:"varint,5,opt,name=next_sequence_recv,json=nextSequenceRecv,proto3" json:"next_sequence_recv,omitempty" yaml:"next_sequence_recv"` - Signer string `protobuf:"bytes,6,opt,name=signer,proto3" json:"signer,omitempty"` -} - -func (m *MsgTimeoutOnClose) Reset() { *m = MsgTimeoutOnClose{} } -func (m *MsgTimeoutOnClose) String() string { return proto.CompactTextString(m) } -func (*MsgTimeoutOnClose) ProtoMessage() {} -func (*MsgTimeoutOnClose) Descriptor() ([]byte, []int) { - return fileDescriptor_c3a07336710636a0, []int{16} -} -func (m *MsgTimeoutOnClose) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgTimeoutOnClose) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgTimeoutOnClose.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgTimeoutOnClose) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgTimeoutOnClose.Merge(m, src) -} -func (m *MsgTimeoutOnClose) XXX_Size() int { - return m.Size() -} -func (m *MsgTimeoutOnClose) XXX_DiscardUnknown() { - xxx_messageInfo_MsgTimeoutOnClose.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgTimeoutOnClose proto.InternalMessageInfo - -// MsgTimeoutOnCloseResponse defines the Msg/TimeoutOnClose response type. -type MsgTimeoutOnCloseResponse struct { -} - -func (m *MsgTimeoutOnCloseResponse) Reset() { *m = MsgTimeoutOnCloseResponse{} } -func (m *MsgTimeoutOnCloseResponse) String() string { return proto.CompactTextString(m) } -func (*MsgTimeoutOnCloseResponse) ProtoMessage() {} -func (*MsgTimeoutOnCloseResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_c3a07336710636a0, []int{17} -} -func (m *MsgTimeoutOnCloseResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgTimeoutOnCloseResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgTimeoutOnCloseResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgTimeoutOnCloseResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgTimeoutOnCloseResponse.Merge(m, src) -} -func (m *MsgTimeoutOnCloseResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgTimeoutOnCloseResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgTimeoutOnCloseResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgTimeoutOnCloseResponse proto.InternalMessageInfo - -// MsgAcknowledgement receives incoming IBC acknowledgement -type MsgAcknowledgement struct { - Packet Packet `protobuf:"bytes,1,opt,name=packet,proto3" json:"packet"` - Acknowledgement []byte `protobuf:"bytes,2,opt,name=acknowledgement,proto3" json:"acknowledgement,omitempty"` - Proof []byte `protobuf:"bytes,3,opt,name=proof,proto3" json:"proof,omitempty"` - ProofHeight types.Height `protobuf:"bytes,4,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"` - Signer string `protobuf:"bytes,5,opt,name=signer,proto3" json:"signer,omitempty"` -} - -func (m *MsgAcknowledgement) Reset() { *m = MsgAcknowledgement{} } -func (m *MsgAcknowledgement) String() string { return proto.CompactTextString(m) } -func (*MsgAcknowledgement) ProtoMessage() {} -func (*MsgAcknowledgement) Descriptor() ([]byte, []int) { - return fileDescriptor_c3a07336710636a0, []int{18} -} -func (m *MsgAcknowledgement) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgAcknowledgement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgAcknowledgement.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgAcknowledgement) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgAcknowledgement.Merge(m, src) -} -func (m *MsgAcknowledgement) XXX_Size() int { - return m.Size() -} -func (m *MsgAcknowledgement) XXX_DiscardUnknown() { - xxx_messageInfo_MsgAcknowledgement.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgAcknowledgement proto.InternalMessageInfo - -// MsgAcknowledgementResponse defines the Msg/Acknowledgement response type. -type MsgAcknowledgementResponse struct { -} - -func (m *MsgAcknowledgementResponse) Reset() { *m = MsgAcknowledgementResponse{} } -func (m *MsgAcknowledgementResponse) String() string { return proto.CompactTextString(m) } -func (*MsgAcknowledgementResponse) ProtoMessage() {} -func (*MsgAcknowledgementResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_c3a07336710636a0, []int{19} -} -func (m *MsgAcknowledgementResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgAcknowledgementResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgAcknowledgementResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgAcknowledgementResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgAcknowledgementResponse.Merge(m, src) -} -func (m *MsgAcknowledgementResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgAcknowledgementResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgAcknowledgementResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgAcknowledgementResponse proto.InternalMessageInfo - // Channel defines pipeline for exactly-once packet delivery between specific // modules on separate blockchains, which has at least one end capable of // sending packets and one end capable of receiving packets. @@ -924,7 +121,7 @@ func (m *Channel) Reset() { *m = Channel{} } func (m *Channel) String() string { return proto.CompactTextString(m) } func (*Channel) ProtoMessage() {} func (*Channel) Descriptor() ([]byte, []int) { - return fileDescriptor_c3a07336710636a0, []int{20} + return fileDescriptor_c3a07336710636a0, []int{0} } func (m *Channel) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -977,7 +174,7 @@ func (m *IdentifiedChannel) Reset() { *m = IdentifiedChannel{} } func (m *IdentifiedChannel) String() string { return proto.CompactTextString(m) } func (*IdentifiedChannel) ProtoMessage() {} func (*IdentifiedChannel) Descriptor() ([]byte, []int) { - return fileDescriptor_c3a07336710636a0, []int{21} + return fileDescriptor_c3a07336710636a0, []int{1} } func (m *IdentifiedChannel) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1018,7 +215,7 @@ func (m *Counterparty) Reset() { *m = Counterparty{} } func (m *Counterparty) String() string { return proto.CompactTextString(m) } func (*Counterparty) ProtoMessage() {} func (*Counterparty) Descriptor() ([]byte, []int) { - return fileDescriptor_c3a07336710636a0, []int{22} + return fileDescriptor_c3a07336710636a0, []int{2} } func (m *Counterparty) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1073,7 +270,7 @@ func (m *Packet) Reset() { *m = Packet{} } func (m *Packet) String() string { return proto.CompactTextString(m) } func (*Packet) ProtoMessage() {} func (*Packet) Descriptor() ([]byte, []int) { - return fileDescriptor_c3a07336710636a0, []int{23} + return fileDescriptor_c3a07336710636a0, []int{3} } func (m *Packet) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1119,7 +316,7 @@ func (m *PacketAckCommitment) Reset() { *m = PacketAckCommitment{} } func (m *PacketAckCommitment) String() string { return proto.CompactTextString(m) } func (*PacketAckCommitment) ProtoMessage() {} func (*PacketAckCommitment) Descriptor() ([]byte, []int) { - return fileDescriptor_c3a07336710636a0, []int{24} + return fileDescriptor_c3a07336710636a0, []int{4} } func (m *PacketAckCommitment) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1168,7 +365,7 @@ func (m *Acknowledgement) Reset() { *m = Acknowledgement{} } func (m *Acknowledgement) String() string { return proto.CompactTextString(m) } func (*Acknowledgement) ProtoMessage() {} func (*Acknowledgement) Descriptor() ([]byte, []int) { - return fileDescriptor_c3a07336710636a0, []int{25} + return fileDescriptor_c3a07336710636a0, []int{5} } func (m *Acknowledgement) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1245,26 +442,6 @@ func (*Acknowledgement) XXX_OneofWrappers() []interface{} { func init() { proto.RegisterEnum("ibc.core.channel.v1.State", State_name, State_value) proto.RegisterEnum("ibc.core.channel.v1.Order", Order_name, Order_value) - proto.RegisterType((*MsgChannelOpenInit)(nil), "ibc.core.channel.v1.MsgChannelOpenInit") - proto.RegisterType((*MsgChannelOpenInitResponse)(nil), "ibc.core.channel.v1.MsgChannelOpenInitResponse") - proto.RegisterType((*MsgChannelOpenTry)(nil), "ibc.core.channel.v1.MsgChannelOpenTry") - proto.RegisterType((*MsgChannelOpenTryResponse)(nil), "ibc.core.channel.v1.MsgChannelOpenTryResponse") - proto.RegisterType((*MsgChannelOpenAck)(nil), "ibc.core.channel.v1.MsgChannelOpenAck") - proto.RegisterType((*MsgChannelOpenAckResponse)(nil), "ibc.core.channel.v1.MsgChannelOpenAckResponse") - proto.RegisterType((*MsgChannelOpenConfirm)(nil), "ibc.core.channel.v1.MsgChannelOpenConfirm") - proto.RegisterType((*MsgChannelOpenConfirmResponse)(nil), "ibc.core.channel.v1.MsgChannelOpenConfirmResponse") - proto.RegisterType((*MsgChannelCloseInit)(nil), "ibc.core.channel.v1.MsgChannelCloseInit") - proto.RegisterType((*MsgChannelCloseInitResponse)(nil), "ibc.core.channel.v1.MsgChannelCloseInitResponse") - proto.RegisterType((*MsgChannelCloseConfirm)(nil), "ibc.core.channel.v1.MsgChannelCloseConfirm") - proto.RegisterType((*MsgChannelCloseConfirmResponse)(nil), "ibc.core.channel.v1.MsgChannelCloseConfirmResponse") - proto.RegisterType((*MsgRecvPacket)(nil), "ibc.core.channel.v1.MsgRecvPacket") - proto.RegisterType((*MsgRecvPacketResponse)(nil), "ibc.core.channel.v1.MsgRecvPacketResponse") - proto.RegisterType((*MsgTimeout)(nil), "ibc.core.channel.v1.MsgTimeout") - proto.RegisterType((*MsgTimeoutResponse)(nil), "ibc.core.channel.v1.MsgTimeoutResponse") - proto.RegisterType((*MsgTimeoutOnClose)(nil), "ibc.core.channel.v1.MsgTimeoutOnClose") - proto.RegisterType((*MsgTimeoutOnCloseResponse)(nil), "ibc.core.channel.v1.MsgTimeoutOnCloseResponse") - proto.RegisterType((*MsgAcknowledgement)(nil), "ibc.core.channel.v1.MsgAcknowledgement") - proto.RegisterType((*MsgAcknowledgementResponse)(nil), "ibc.core.channel.v1.MsgAcknowledgementResponse") proto.RegisterType((*Channel)(nil), "ibc.core.channel.v1.Channel") proto.RegisterType((*IdentifiedChannel)(nil), "ibc.core.channel.v1.IdentifiedChannel") proto.RegisterType((*Counterparty)(nil), "ibc.core.channel.v1.Counterparty") @@ -1276,1400 +453,65 @@ func init() { func init() { proto.RegisterFile("ibc/core/channel/v1/channel.proto", fileDescriptor_c3a07336710636a0) } var fileDescriptor_c3a07336710636a0 = []byte{ - // 1708 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0xcd, 0x6f, 0xdb, 0xc8, - 0x15, 0xd7, 0x07, 0xf5, 0xe1, 0x17, 0xd9, 0x96, 0xc7, 0x1f, 0x51, 0xe8, 0x58, 0xd4, 0x12, 0xed, - 0xae, 0x9b, 0x62, 0xa5, 0x24, 0xbb, 0xe8, 0x47, 0xd0, 0x43, 0x2d, 0x59, 0x8b, 0x08, 0xd9, 0x58, - 0xc6, 0x58, 0x29, 0x50, 0xa3, 0x80, 0x2a, 0x53, 0x13, 0x89, 0x90, 0x45, 0xaa, 0x24, 0x6d, 0xaf, - 0xff, 0x83, 0x85, 0x81, 0x02, 0x3d, 0x17, 0x30, 0xb0, 0x40, 0x51, 0xa0, 0x40, 0x81, 0xee, 0xb1, - 0x7f, 0x40, 0x2f, 0x7b, 0xdc, 0xdb, 0xf6, 0x44, 0x14, 0xc9, 0xa1, 0x39, 0xeb, 0x1f, 0x68, 0xc1, - 0x99, 0x21, 0x45, 0x52, 0x54, 0xac, 0x34, 0xb5, 0x80, 0x02, 0x3d, 0x89, 0xf3, 0xde, 0x6f, 0xde, - 0xbc, 0xf9, 0xbd, 0xc7, 0x37, 0xf3, 0x28, 0xf8, 0x40, 0x3d, 0x51, 0x2a, 0x8a, 0x6e, 0x90, 0x8a, - 0xd2, 0xef, 0x68, 0x1a, 0x39, 0xad, 0x9c, 0x3f, 0x72, 0x1f, 0xcb, 0x23, 0x43, 0xb7, 0x74, 0xb4, - 0xae, 0x9e, 0x28, 0x65, 0x07, 0x52, 0x76, 0xe5, 0xe7, 0x8f, 0xc4, 0x8d, 0x9e, 0xde, 0xd3, 0xa9, - 0xbe, 0xe2, 0x3c, 0x31, 0xa8, 0x28, 0x4d, 0xac, 0x9d, 0xaa, 0x44, 0xb3, 0xa8, 0x31, 0xfa, 0xc4, - 0x00, 0xf2, 0x77, 0x71, 0x40, 0xcf, 0xcd, 0x5e, 0x8d, 0x19, 0x6a, 0x8e, 0x88, 0xd6, 0xd0, 0x54, - 0x0b, 0xfd, 0x10, 0x32, 0x23, 0xdd, 0xb0, 0xda, 0x6a, 0xb7, 0x10, 0x2f, 0xc5, 0x77, 0x97, 0xaa, - 0x68, 0x6c, 0x4b, 0x2b, 0x97, 0x9d, 0xe1, 0xe9, 0x13, 0x99, 0x2b, 0x64, 0x9c, 0x76, 0x9e, 0x1a, - 0x5d, 0xf4, 0x29, 0x00, 0x77, 0xc4, 0xc1, 0x27, 0x28, 0x7e, 0x73, 0x6c, 0x4b, 0x6b, 0x0c, 0x3f, - 0xd1, 0xc9, 0x78, 0x89, 0x0f, 0x1a, 0x5d, 0xf4, 0x33, 0xc8, 0xf0, 0x41, 0x21, 0x59, 0x8a, 0xef, - 0xde, 0x79, 0x7c, 0xbf, 0x1c, 0xb1, 0xaf, 0x32, 0xf7, 0xac, 0x2a, 0x7c, 0x63, 0x4b, 0x31, 0xec, - 0x4e, 0x41, 0x5b, 0x90, 0x36, 0xd5, 0x9e, 0x46, 0x8c, 0x82, 0xe0, 0xac, 0x87, 0xf9, 0xe8, 0x49, - 0xf6, 0xcb, 0xaf, 0xa4, 0xd8, 0x9b, 0xaf, 0xa4, 0x98, 0x7c, 0x1f, 0xc4, 0xe9, 0x8d, 0x61, 0x62, - 0x8e, 0x74, 0xcd, 0x24, 0xf2, 0xdf, 0x04, 0x58, 0x0b, 0xaa, 0x5b, 0xc6, 0xe5, 0xbb, 0x6d, 0xfb, - 0x19, 0xa0, 0x2e, 0x31, 0x55, 0x83, 0x74, 0xdb, 0x53, 0xdb, 0xdf, 0x19, 0xdb, 0xd2, 0x3d, 0x36, - 0x6f, 0x1a, 0x23, 0xe3, 0x3c, 0x17, 0xd6, 0x3c, 0x36, 0x34, 0x28, 0x2a, 0xfa, 0x99, 0x66, 0x11, - 0x63, 0xd4, 0x31, 0xac, 0xcb, 0xb6, 0xd2, 0xd7, 0x4d, 0xa2, 0xf9, 0x0d, 0x27, 0xa9, 0xe1, 0x1f, - 0x8c, 0x6d, 0xe9, 0xfb, 0x9c, 0xd7, 0xb7, 0xe2, 0x65, 0xbc, 0xed, 0x07, 0xd4, 0xa8, 0xbe, 0x16, - 0xc5, 0xbe, 0xf0, 0xee, 0xec, 0x63, 0xd8, 0x08, 0xac, 0x7e, 0x4e, 0x0c, 0x53, 0xd5, 0xb5, 0x42, - 0x8a, 0xfa, 0x28, 0x8d, 0x6d, 0x69, 0x3b, 0xc2, 0x47, 0x8e, 0x92, 0xf1, 0xba, 0x5f, 0xfc, 0x0b, - 0x26, 0x75, 0xb2, 0x68, 0x64, 0xe8, 0xfa, 0xcb, 0xb6, 0xaa, 0xa9, 0x56, 0x21, 0x5d, 0x8a, 0xef, - 0xe6, 0xfc, 0x59, 0x34, 0xd1, 0xc9, 0x78, 0x89, 0x0e, 0x68, 0xa2, 0x1e, 0x43, 0x8e, 0x69, 0xfa, - 0x44, 0xed, 0xf5, 0xad, 0x42, 0x86, 0x6e, 0x46, 0xf4, 0x6d, 0x86, 0x65, 0xfb, 0xf9, 0xa3, 0xf2, - 0x53, 0x8a, 0xa8, 0x6e, 0x3b, 0x5b, 0x19, 0xdb, 0xd2, 0xba, 0xdf, 0x2e, 0x9b, 0x2d, 0xe3, 0x3b, - 0x74, 0xc8, 0x90, 0xbe, 0x1c, 0xcb, 0xce, 0xc8, 0xb1, 0x6d, 0xb8, 0x37, 0x95, 0x44, 0x5e, 0x8a, - 0x7d, 0x97, 0x0c, 0xa7, 0xd8, 0x9e, 0x32, 0x58, 0xc4, 0x9b, 0x75, 0x0c, 0x77, 0x43, 0xb9, 0x11, - 0x4a, 0x22, 0x79, 0x6c, 0x4b, 0xc5, 0xc8, 0x24, 0x9a, 0xd8, 0xdb, 0x0c, 0x66, 0x8f, 0x6b, 0x7b, - 0x56, 0xe4, 0x85, 0xf7, 0x88, 0xfc, 0x23, 0x60, 0x01, 0x6d, 0x5b, 0xc6, 0x25, 0x4d, 0xa1, 0x5c, - 0x75, 0x63, 0x6c, 0x4b, 0x79, 0x7f, 0x80, 0x2c, 0xe3, 0x52, 0xc6, 0x59, 0xfa, 0xec, 0xbc, 0xa8, - 0xe1, 0xb0, 0xa7, 0x6f, 0x25, 0xec, 0x99, 0x79, 0xc3, 0xbe, 0xa7, 0x0c, 0xbc, 0xb0, 0xff, 0x39, - 0x01, 0x9b, 0x41, 0x6d, 0x4d, 0xd7, 0x5e, 0xaa, 0xc6, 0x70, 0x11, 0xa1, 0xf7, 0xa8, 0xec, 0x28, - 0x03, 0x1a, 0xec, 0x08, 0x2a, 0x3b, 0xca, 0xc0, 0xa5, 0xd2, 0x49, 0xc8, 0x30, 0x95, 0xc2, 0xad, - 0x50, 0x99, 0x9a, 0x41, 0xa5, 0x04, 0x3b, 0x91, 0x64, 0x79, 0x74, 0xfe, 0x3e, 0x0e, 0xeb, 0x13, - 0x44, 0xed, 0x54, 0x37, 0xc9, 0xa2, 0x4e, 0xa8, 0x89, 0xf7, 0xc9, 0x19, 0xde, 0xef, 0xc0, 0x76, - 0x84, 0x6f, 0x9e, 0xef, 0x5f, 0x27, 0x60, 0x2b, 0xa4, 0x5f, 0x60, 0x2e, 0x04, 0x0b, 0x6a, 0xf2, - 0x3f, 0x2c, 0xa8, 0x8b, 0x4d, 0x87, 0x12, 0x14, 0xa3, 0x09, 0xf3, 0x38, 0xb5, 0xe3, 0xb0, 0xfc, - 0xdc, 0xec, 0x61, 0xa2, 0x9c, 0x1f, 0x76, 0x94, 0x01, 0xb1, 0xd0, 0x4f, 0x21, 0x3d, 0xa2, 0x4f, - 0x94, 0xc9, 0x3b, 0x8f, 0xb7, 0x23, 0x4f, 0x32, 0x06, 0xe6, 0x07, 0x19, 0x9f, 0x80, 0x36, 0x20, - 0x45, 0xfd, 0xa3, 0x9c, 0xe6, 0x30, 0x1b, 0x4c, 0x51, 0x90, 0xbc, 0x15, 0x0a, 0x66, 0xdd, 0x5b, - 0xee, 0xd2, 0xf2, 0x31, 0xd9, 0x9f, 0xb7, 0xf3, 0x3f, 0x25, 0x00, 0x9e, 0x9b, 0xbd, 0x96, 0x3a, - 0x24, 0xfa, 0xd9, 0xff, 0xd8, 0xb6, 0x9f, 0x01, 0xd2, 0xc8, 0x17, 0x56, 0xdb, 0x24, 0xbf, 0x39, - 0x23, 0x9a, 0x42, 0xda, 0x06, 0x51, 0xce, 0x29, 0x05, 0x82, 0xff, 0xae, 0x34, 0x8d, 0x91, 0x71, - 0xde, 0x11, 0x1e, 0x71, 0x99, 0x43, 0xcb, 0x1c, 0x69, 0xb4, 0x41, 0x2f, 0xb5, 0x9c, 0x29, 0x8f, - 0xc0, 0x37, 0x09, 0x7a, 0x20, 0x73, 0x71, 0x53, 0xa3, 0xf9, 0xf5, 0xdf, 0xe7, 0xf1, 0xc7, 0xc0, - 0xb6, 0xde, 0x56, 0x1c, 0xfb, 0xfc, 0xc5, 0xdb, 0x1a, 0xdb, 0x12, 0xf2, 0xd3, 0x44, 0x95, 0x32, - 0x66, 0xaf, 0x28, 0xf3, 0xe4, 0x36, 0x5f, 0xbd, 0xe8, 0x00, 0xa4, 0xde, 0x37, 0x00, 0xe9, 0xb7, - 0x9e, 0x90, 0x41, 0xa6, 0xbd, 0x38, 0xfc, 0x36, 0x41, 0xc3, 0xb3, 0xa7, 0x0c, 0x34, 0xfd, 0xe2, - 0x94, 0x74, 0x7b, 0x64, 0x48, 0xb4, 0xf7, 0x4a, 0xe8, 0x5d, 0x58, 0xed, 0x04, 0xad, 0xf1, 0x90, - 0x84, 0xc5, 0x93, 0x90, 0x25, 0xdf, 0x96, 0xfa, 0x8b, 0x2d, 0x7a, 0xac, 0x53, 0x09, 0xd1, 0xe1, - 0xb1, 0xf5, 0xc7, 0x04, 0x64, 0x78, 0x41, 0x44, 0x0f, 0x21, 0x65, 0x5a, 0x1d, 0x8b, 0x50, 0x86, - 0x56, 0x02, 0x0e, 0x4e, 0x18, 0x3a, 0x72, 0x10, 0x98, 0x01, 0xd1, 0x8f, 0x20, 0xab, 0x1b, 0x5d, - 0x62, 0xa8, 0x5a, 0x8f, 0x52, 0x32, 0x6b, 0x52, 0xd3, 0x01, 0x61, 0x0f, 0x8b, 0x9e, 0x41, 0xce, - 0x7f, 0x55, 0xe3, 0xc5, 0xe0, 0x83, 0xe8, 0x26, 0xc1, 0x07, 0xe4, 0x81, 0x09, 0x4c, 0x46, 0x35, - 0x58, 0x55, 0x74, 0x4d, 0x23, 0x8a, 0xa5, 0xea, 0x5a, 0xbb, 0xaf, 0x8f, 0xcc, 0x82, 0x50, 0x4a, - 0xee, 0x2e, 0x55, 0xc5, 0xb1, 0x2d, 0x6d, 0xb9, 0xf7, 0xc5, 0x00, 0x40, 0xc6, 0x2b, 0x13, 0xc9, - 0x53, 0x7d, 0x64, 0xa2, 0x02, 0x64, 0x02, 0x6d, 0x06, 0x76, 0x87, 0x4f, 0x04, 0x87, 0x49, 0xf9, - 0x9f, 0x09, 0x58, 0x6b, 0x74, 0x89, 0x66, 0xa9, 0x2f, 0x55, 0xaf, 0xb3, 0xfa, 0x3f, 0x63, 0x51, - 0x8c, 0xa1, 0xbb, 0x93, 0xdb, 0x07, 0x7f, 0x83, 0xf9, 0x4d, 0x63, 0x27, 0x70, 0xd3, 0x60, 0xf7, - 0xdf, 0xc9, 0x95, 0x82, 0x33, 0x7d, 0x01, 0x39, 0xff, 0x06, 0x16, 0x70, 0x97, 0xe1, 0x0b, 0xff, - 0x2b, 0x09, 0x69, 0x7e, 0xe8, 0x8b, 0x90, 0x75, 0xcb, 0x14, 0x5d, 0x54, 0xc0, 0xde, 0xd8, 0x29, - 0xc0, 0xa6, 0x7e, 0x66, 0x28, 0xa4, 0xed, 0xac, 0xc9, 0xd7, 0xf0, 0x15, 0x60, 0x9f, 0x52, 0xc6, - 0xc0, 0x46, 0x87, 0xba, 0x61, 0xa1, 0x9f, 0xc3, 0x0a, 0xd7, 0xf9, 0xbf, 0x4c, 0x2c, 0x55, 0xef, - 0x8d, 0x6d, 0x69, 0x33, 0x30, 0x97, 0xeb, 0x65, 0xbc, 0xcc, 0x04, 0x6e, 0xba, 0x7d, 0x06, 0x4e, - 0x6b, 0x6f, 0xa9, 0x5a, 0x87, 0xc6, 0x85, 0xae, 0xcf, 0x5a, 0xa3, 0xed, 0xb1, 0x2d, 0xdd, 0xf5, - 0xbe, 0x08, 0x04, 0x10, 0x32, 0x5e, 0xf5, 0x89, 0xa8, 0x27, 0x4d, 0x58, 0xf7, 0xa3, 0x5c, 0x77, - 0x58, 0x7f, 0x5d, 0x1c, 0xdb, 0x92, 0x38, 0x6d, 0xca, 0xf3, 0x09, 0xf9, 0xa4, 0xae, 0x63, 0x08, - 0x84, 0x6e, 0xc7, 0xea, 0xb0, 0xbe, 0x1a, 0xd3, 0x67, 0xf4, 0x6b, 0x58, 0xb1, 0x58, 0x85, 0x9e, - 0xbf, 0x7b, 0xde, 0xe1, 0x75, 0x8f, 0xd3, 0x11, 0x9c, 0x2f, 0xe3, 0x65, 0x2e, 0xe0, 0xb5, 0xaf, - 0x01, 0x6b, 0x2e, 0xc2, 0xf9, 0x35, 0xad, 0xce, 0x70, 0x44, 0x9b, 0x69, 0xa1, 0x7a, 0x7f, 0x6c, - 0x4b, 0x85, 0xa0, 0x11, 0x0f, 0x22, 0xe3, 0x3c, 0x97, 0xb5, 0x5c, 0x11, 0xcf, 0x80, 0xbf, 0xc4, - 0x61, 0x9d, 0x65, 0xc0, 0x9e, 0x32, 0xa8, 0xe9, 0xc3, 0xa1, 0x6a, 0xd1, 0xb2, 0xbe, 0x80, 0xeb, - 0xb4, 0x3f, 0xe3, 0x92, 0xa1, 0x8c, 0x43, 0x20, 0xf4, 0x3b, 0x66, 0x9f, 0x86, 0x3a, 0x87, 0xe9, - 0x33, 0x77, 0xb8, 0x09, 0xab, 0xe1, 0x73, 0xae, 0x00, 0x69, 0x83, 0x98, 0x67, 0xa7, 0x56, 0x61, - 0xd3, 0x81, 0x3f, 0x8d, 0x61, 0x3e, 0x46, 0x5b, 0x90, 0x22, 0x86, 0xa1, 0x1b, 0x85, 0x2d, 0xc7, - 0xa7, 0xa7, 0x31, 0xcc, 0x86, 0x55, 0x80, 0xac, 0xc1, 0x8f, 0x83, 0x07, 0x7f, 0x8d, 0x43, 0xea, - 0x88, 0x17, 0x2a, 0xe9, 0xa8, 0xb5, 0xd7, 0xaa, 0xb7, 0x5f, 0x1c, 0x34, 0x0e, 0x1a, 0xad, 0xc6, - 0xde, 0xe7, 0x8d, 0xe3, 0xfa, 0x7e, 0xfb, 0xc5, 0xc1, 0xd1, 0x61, 0xbd, 0xd6, 0xf8, 0xac, 0x51, - 0xdf, 0xcf, 0xc7, 0xc4, 0xb5, 0xab, 0xeb, 0xd2, 0x72, 0x00, 0x80, 0x0a, 0x00, 0x6c, 0x9e, 0x23, - 0xcc, 0xc7, 0xc5, 0xec, 0xd5, 0x75, 0x49, 0x70, 0x9e, 0x51, 0x11, 0x96, 0x99, 0xa6, 0x85, 0x7f, - 0xd9, 0x3c, 0xac, 0x1f, 0xe4, 0x13, 0xe2, 0x9d, 0xab, 0xeb, 0x52, 0x86, 0x0f, 0x27, 0x33, 0xa9, - 0x32, 0xc9, 0x66, 0x52, 0xcd, 0x7d, 0xc8, 0x31, 0x4d, 0xed, 0xf3, 0xe6, 0x51, 0x7d, 0x3f, 0x2f, - 0x88, 0x70, 0x75, 0x5d, 0x4a, 0xb3, 0x91, 0x28, 0x7c, 0xf9, 0x87, 0x62, 0xec, 0xc1, 0x05, 0xa4, - 0x68, 0xcd, 0x44, 0xdf, 0x83, 0xad, 0x26, 0xde, 0xaf, 0xe3, 0xf6, 0x41, 0xf3, 0xa0, 0x1e, 0xf2, - 0x97, 0x9a, 0x74, 0xe4, 0x48, 0x86, 0x55, 0x86, 0x7a, 0x71, 0x40, 0x7f, 0xeb, 0xfb, 0xf9, 0xb8, - 0xb8, 0x7c, 0x75, 0x5d, 0x5a, 0xf2, 0x04, 0x8e, 0xc3, 0x0c, 0xe3, 0x22, 0xb8, 0xc3, 0x7c, 0xc8, - 0x16, 0x7e, 0xfc, 0x75, 0x16, 0x92, 0xcf, 0xcd, 0x1e, 0x1a, 0xc0, 0x6a, 0xf8, 0x3b, 0xe7, 0x47, - 0x91, 0xe5, 0x79, 0xfa, 0xbb, 0xa1, 0x58, 0x99, 0x13, 0xe8, 0x1e, 0xdb, 0xa8, 0x0f, 0x2b, 0xa1, - 0x8f, 0x8b, 0x1f, 0xce, 0x61, 0xa2, 0x65, 0x5c, 0x8a, 0xe5, 0xf9, 0x70, 0x33, 0x56, 0x72, 0x5a, - 0xfa, 0x79, 0x56, 0xda, 0x53, 0x06, 0x73, 0xad, 0xe4, 0xfb, 0xb4, 0x81, 0x2c, 0x40, 0x11, 0x9f, - 0x35, 0x1e, 0xcc, 0x61, 0x85, 0x63, 0xc5, 0xc7, 0xf3, 0x63, 0xbd, 0x55, 0x35, 0xc8, 0x4f, 0x75, - 0xff, 0xbb, 0x37, 0xd8, 0xf1, 0x90, 0xe2, 0xc3, 0x79, 0x91, 0xde, 0x7a, 0x17, 0xb0, 0x1e, 0xd9, - 0xb1, 0xcf, 0x63, 0xc8, 0xdd, 0xe7, 0x27, 0xef, 0x00, 0xf6, 0x16, 0xfe, 0x15, 0x80, 0xaf, 0xad, - 0x95, 0x67, 0x99, 0x98, 0x60, 0xc4, 0x07, 0x37, 0x63, 0x3c, 0xeb, 0x47, 0x90, 0x71, 0x5b, 0x47, - 0x69, 0xd6, 0x34, 0x0e, 0x10, 0x3f, 0xba, 0x01, 0xe0, 0xcf, 0xbd, 0x50, 0x3b, 0xf5, 0xe1, 0x0d, - 0x53, 0x39, 0x6e, 0x76, 0xee, 0x45, 0x37, 0x0d, 0xce, 0xcb, 0x1b, 0x2e, 0xa4, 0x33, 0xbd, 0x0c, - 0x01, 0x67, 0xbf, 0xbc, 0x33, 0xee, 0xdc, 0x55, 0xfc, 0xcd, 0xab, 0x62, 0xfc, 0xdb, 0x57, 0xc5, - 0xf8, 0x3f, 0x5e, 0x15, 0xe3, 0xbf, 0x7b, 0x5d, 0x8c, 0x7d, 0xfb, 0xba, 0x18, 0xfb, 0xfb, 0xeb, - 0x62, 0xec, 0xf8, 0x27, 0x3d, 0xd5, 0xea, 0x9f, 0x9d, 0x94, 0x15, 0x7d, 0x58, 0x51, 0x74, 0x73, - 0xa8, 0x9b, 0xfc, 0xe7, 0x63, 0xb3, 0x3b, 0xa8, 0x7c, 0x51, 0xf1, 0xfe, 0x6f, 0x79, 0xf8, 0xe9, - 0xc7, 0xee, 0x1f, 0x38, 0xd6, 0xe5, 0x88, 0x98, 0x27, 0x69, 0xfa, 0x87, 0xcb, 0x27, 0xff, 0x0e, - 0x00, 0x00, 0xff, 0xff, 0xdf, 0x36, 0x4a, 0x13, 0xe1, 0x19, 0x00, 0x00, -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// MsgClient is the client API for Msg service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type MsgClient interface { - // ChannelOpenInit defines a rpc handler method for MsgChannelOpenInit. - ChannelOpenInit(ctx context.Context, in *MsgChannelOpenInit, opts ...grpc.CallOption) (*MsgChannelOpenInitResponse, error) - // ChannelOpenTry defines a rpc handler method for MsgChannelOpenTry. - ChannelOpenTry(ctx context.Context, in *MsgChannelOpenTry, opts ...grpc.CallOption) (*MsgChannelOpenTryResponse, error) - // ChannelOpenAck defines a rpc handler method for MsgChannelOpenAck. - ChannelOpenAck(ctx context.Context, in *MsgChannelOpenAck, opts ...grpc.CallOption) (*MsgChannelOpenAckResponse, error) - // ChannelOpenConfirm defines a rpc handler method for MsgChannelOpenConfirm. - ChannelOpenConfirm(ctx context.Context, in *MsgChannelOpenConfirm, opts ...grpc.CallOption) (*MsgChannelOpenConfirmResponse, error) - // ChannelCloseInit defines a rpc handler method for MsgChannelCloseInit. - ChannelCloseInit(ctx context.Context, in *MsgChannelCloseInit, opts ...grpc.CallOption) (*MsgChannelCloseInitResponse, error) - // ChannelCloseConfirm defines a rpc handler method for MsgChannelCloseConfirm. - ChannelCloseConfirm(ctx context.Context, in *MsgChannelCloseConfirm, opts ...grpc.CallOption) (*MsgChannelCloseConfirmResponse, error) - // RecvPacket defines a rpc handler method for MsgRecvPacket. - RecvPacket(ctx context.Context, in *MsgRecvPacket, opts ...grpc.CallOption) (*MsgRecvPacketResponse, error) - // Timeout defines a rpc handler method for MsgTimeout. - Timeout(ctx context.Context, in *MsgTimeout, opts ...grpc.CallOption) (*MsgTimeoutResponse, error) - // TimeoutOnClose defines a rpc handler method for MsgTimeoutOnClose. - TimeoutOnClose(ctx context.Context, in *MsgTimeoutOnClose, opts ...grpc.CallOption) (*MsgTimeoutOnCloseResponse, error) - // Acknowledgement defines a rpc handler method for MsgAcknowledgement. - Acknowledgement(ctx context.Context, in *MsgAcknowledgement, opts ...grpc.CallOption) (*MsgAcknowledgementResponse, error) -} - -type msgClient struct { - cc grpc1.ClientConn -} - -func NewMsgClient(cc grpc1.ClientConn) MsgClient { - return &msgClient{cc} -} - -func (c *msgClient) ChannelOpenInit(ctx context.Context, in *MsgChannelOpenInit, opts ...grpc.CallOption) (*MsgChannelOpenInitResponse, error) { - out := new(MsgChannelOpenInitResponse) - err := c.cc.Invoke(ctx, "/ibc.core.channel.v1.Msg/ChannelOpenInit", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) ChannelOpenTry(ctx context.Context, in *MsgChannelOpenTry, opts ...grpc.CallOption) (*MsgChannelOpenTryResponse, error) { - out := new(MsgChannelOpenTryResponse) - err := c.cc.Invoke(ctx, "/ibc.core.channel.v1.Msg/ChannelOpenTry", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) ChannelOpenAck(ctx context.Context, in *MsgChannelOpenAck, opts ...grpc.CallOption) (*MsgChannelOpenAckResponse, error) { - out := new(MsgChannelOpenAckResponse) - err := c.cc.Invoke(ctx, "/ibc.core.channel.v1.Msg/ChannelOpenAck", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) ChannelOpenConfirm(ctx context.Context, in *MsgChannelOpenConfirm, opts ...grpc.CallOption) (*MsgChannelOpenConfirmResponse, error) { - out := new(MsgChannelOpenConfirmResponse) - err := c.cc.Invoke(ctx, "/ibc.core.channel.v1.Msg/ChannelOpenConfirm", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) ChannelCloseInit(ctx context.Context, in *MsgChannelCloseInit, opts ...grpc.CallOption) (*MsgChannelCloseInitResponse, error) { - out := new(MsgChannelCloseInitResponse) - err := c.cc.Invoke(ctx, "/ibc.core.channel.v1.Msg/ChannelCloseInit", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) ChannelCloseConfirm(ctx context.Context, in *MsgChannelCloseConfirm, opts ...grpc.CallOption) (*MsgChannelCloseConfirmResponse, error) { - out := new(MsgChannelCloseConfirmResponse) - err := c.cc.Invoke(ctx, "/ibc.core.channel.v1.Msg/ChannelCloseConfirm", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) RecvPacket(ctx context.Context, in *MsgRecvPacket, opts ...grpc.CallOption) (*MsgRecvPacketResponse, error) { - out := new(MsgRecvPacketResponse) - err := c.cc.Invoke(ctx, "/ibc.core.channel.v1.Msg/RecvPacket", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) Timeout(ctx context.Context, in *MsgTimeout, opts ...grpc.CallOption) (*MsgTimeoutResponse, error) { - out := new(MsgTimeoutResponse) - err := c.cc.Invoke(ctx, "/ibc.core.channel.v1.Msg/Timeout", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) TimeoutOnClose(ctx context.Context, in *MsgTimeoutOnClose, opts ...grpc.CallOption) (*MsgTimeoutOnCloseResponse, error) { - out := new(MsgTimeoutOnCloseResponse) - err := c.cc.Invoke(ctx, "/ibc.core.channel.v1.Msg/TimeoutOnClose", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) Acknowledgement(ctx context.Context, in *MsgAcknowledgement, opts ...grpc.CallOption) (*MsgAcknowledgementResponse, error) { - out := new(MsgAcknowledgementResponse) - err := c.cc.Invoke(ctx, "/ibc.core.channel.v1.Msg/Acknowledgement", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// MsgServer is the server API for Msg service. -type MsgServer interface { - // ChannelOpenInit defines a rpc handler method for MsgChannelOpenInit. - ChannelOpenInit(context.Context, *MsgChannelOpenInit) (*MsgChannelOpenInitResponse, error) - // ChannelOpenTry defines a rpc handler method for MsgChannelOpenTry. - ChannelOpenTry(context.Context, *MsgChannelOpenTry) (*MsgChannelOpenTryResponse, error) - // ChannelOpenAck defines a rpc handler method for MsgChannelOpenAck. - ChannelOpenAck(context.Context, *MsgChannelOpenAck) (*MsgChannelOpenAckResponse, error) - // ChannelOpenConfirm defines a rpc handler method for MsgChannelOpenConfirm. - ChannelOpenConfirm(context.Context, *MsgChannelOpenConfirm) (*MsgChannelOpenConfirmResponse, error) - // ChannelCloseInit defines a rpc handler method for MsgChannelCloseInit. - ChannelCloseInit(context.Context, *MsgChannelCloseInit) (*MsgChannelCloseInitResponse, error) - // ChannelCloseConfirm defines a rpc handler method for MsgChannelCloseConfirm. - ChannelCloseConfirm(context.Context, *MsgChannelCloseConfirm) (*MsgChannelCloseConfirmResponse, error) - // RecvPacket defines a rpc handler method for MsgRecvPacket. - RecvPacket(context.Context, *MsgRecvPacket) (*MsgRecvPacketResponse, error) - // Timeout defines a rpc handler method for MsgTimeout. - Timeout(context.Context, *MsgTimeout) (*MsgTimeoutResponse, error) - // TimeoutOnClose defines a rpc handler method for MsgTimeoutOnClose. - TimeoutOnClose(context.Context, *MsgTimeoutOnClose) (*MsgTimeoutOnCloseResponse, error) - // Acknowledgement defines a rpc handler method for MsgAcknowledgement. - Acknowledgement(context.Context, *MsgAcknowledgement) (*MsgAcknowledgementResponse, error) -} - -// UnimplementedMsgServer can be embedded to have forward compatible implementations. -type UnimplementedMsgServer struct { -} - -func (*UnimplementedMsgServer) ChannelOpenInit(ctx context.Context, req *MsgChannelOpenInit) (*MsgChannelOpenInitResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ChannelOpenInit not implemented") -} -func (*UnimplementedMsgServer) ChannelOpenTry(ctx context.Context, req *MsgChannelOpenTry) (*MsgChannelOpenTryResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ChannelOpenTry not implemented") -} -func (*UnimplementedMsgServer) ChannelOpenAck(ctx context.Context, req *MsgChannelOpenAck) (*MsgChannelOpenAckResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ChannelOpenAck not implemented") -} -func (*UnimplementedMsgServer) ChannelOpenConfirm(ctx context.Context, req *MsgChannelOpenConfirm) (*MsgChannelOpenConfirmResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ChannelOpenConfirm not implemented") -} -func (*UnimplementedMsgServer) ChannelCloseInit(ctx context.Context, req *MsgChannelCloseInit) (*MsgChannelCloseInitResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ChannelCloseInit not implemented") -} -func (*UnimplementedMsgServer) ChannelCloseConfirm(ctx context.Context, req *MsgChannelCloseConfirm) (*MsgChannelCloseConfirmResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ChannelCloseConfirm not implemented") -} -func (*UnimplementedMsgServer) RecvPacket(ctx context.Context, req *MsgRecvPacket) (*MsgRecvPacketResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RecvPacket not implemented") -} -func (*UnimplementedMsgServer) Timeout(ctx context.Context, req *MsgTimeout) (*MsgTimeoutResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Timeout not implemented") -} -func (*UnimplementedMsgServer) TimeoutOnClose(ctx context.Context, req *MsgTimeoutOnClose) (*MsgTimeoutOnCloseResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method TimeoutOnClose not implemented") -} -func (*UnimplementedMsgServer) Acknowledgement(ctx context.Context, req *MsgAcknowledgement) (*MsgAcknowledgementResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Acknowledgement not implemented") -} - -func RegisterMsgServer(s grpc1.Server, srv MsgServer) { - s.RegisterService(&_Msg_serviceDesc, srv) -} - -func _Msg_ChannelOpenInit_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgChannelOpenInit) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).ChannelOpenInit(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/ibc.core.channel.v1.Msg/ChannelOpenInit", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).ChannelOpenInit(ctx, req.(*MsgChannelOpenInit)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_ChannelOpenTry_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgChannelOpenTry) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).ChannelOpenTry(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/ibc.core.channel.v1.Msg/ChannelOpenTry", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).ChannelOpenTry(ctx, req.(*MsgChannelOpenTry)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_ChannelOpenAck_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgChannelOpenAck) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).ChannelOpenAck(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/ibc.core.channel.v1.Msg/ChannelOpenAck", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).ChannelOpenAck(ctx, req.(*MsgChannelOpenAck)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_ChannelOpenConfirm_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgChannelOpenConfirm) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).ChannelOpenConfirm(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/ibc.core.channel.v1.Msg/ChannelOpenConfirm", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).ChannelOpenConfirm(ctx, req.(*MsgChannelOpenConfirm)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_ChannelCloseInit_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgChannelCloseInit) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).ChannelCloseInit(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/ibc.core.channel.v1.Msg/ChannelCloseInit", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).ChannelCloseInit(ctx, req.(*MsgChannelCloseInit)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_ChannelCloseConfirm_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgChannelCloseConfirm) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).ChannelCloseConfirm(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/ibc.core.channel.v1.Msg/ChannelCloseConfirm", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).ChannelCloseConfirm(ctx, req.(*MsgChannelCloseConfirm)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_RecvPacket_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgRecvPacket) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).RecvPacket(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/ibc.core.channel.v1.Msg/RecvPacket", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).RecvPacket(ctx, req.(*MsgRecvPacket)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_Timeout_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgTimeout) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).Timeout(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/ibc.core.channel.v1.Msg/Timeout", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).Timeout(ctx, req.(*MsgTimeout)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_TimeoutOnClose_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgTimeoutOnClose) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).TimeoutOnClose(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/ibc.core.channel.v1.Msg/TimeoutOnClose", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).TimeoutOnClose(ctx, req.(*MsgTimeoutOnClose)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_Acknowledgement_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgAcknowledgement) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).Acknowledgement(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/ibc.core.channel.v1.Msg/Acknowledgement", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).Acknowledgement(ctx, req.(*MsgAcknowledgement)) - } - return interceptor(ctx, in, info, handler) -} - -var _Msg_serviceDesc = grpc.ServiceDesc{ - ServiceName: "ibc.core.channel.v1.Msg", - HandlerType: (*MsgServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "ChannelOpenInit", - Handler: _Msg_ChannelOpenInit_Handler, - }, - { - MethodName: "ChannelOpenTry", - Handler: _Msg_ChannelOpenTry_Handler, - }, - { - MethodName: "ChannelOpenAck", - Handler: _Msg_ChannelOpenAck_Handler, - }, - { - MethodName: "ChannelOpenConfirm", - Handler: _Msg_ChannelOpenConfirm_Handler, - }, - { - MethodName: "ChannelCloseInit", - Handler: _Msg_ChannelCloseInit_Handler, - }, - { - MethodName: "ChannelCloseConfirm", - Handler: _Msg_ChannelCloseConfirm_Handler, - }, - { - MethodName: "RecvPacket", - Handler: _Msg_RecvPacket_Handler, - }, - { - MethodName: "Timeout", - Handler: _Msg_Timeout_Handler, - }, - { - MethodName: "TimeoutOnClose", - Handler: _Msg_TimeoutOnClose_Handler, - }, - { - MethodName: "Acknowledgement", - Handler: _Msg_Acknowledgement_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "ibc/core/channel/v1/channel.proto", -} - -func (m *MsgChannelOpenInit) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgChannelOpenInit) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgChannelOpenInit) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Signer) > 0 { - i -= len(m.Signer) - copy(dAtA[i:], m.Signer) - i = encodeVarintChannel(dAtA, i, uint64(len(m.Signer))) - i-- - dAtA[i] = 0x22 - } - { - size, err := m.Channel.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintChannel(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if len(m.ChannelId) > 0 { - i -= len(m.ChannelId) - copy(dAtA[i:], m.ChannelId) - i = encodeVarintChannel(dAtA, i, uint64(len(m.ChannelId))) - i-- - dAtA[i] = 0x12 - } - if len(m.PortId) > 0 { - i -= len(m.PortId) - copy(dAtA[i:], m.PortId) - i = encodeVarintChannel(dAtA, i, uint64(len(m.PortId))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgChannelOpenInitResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgChannelOpenInitResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgChannelOpenInitResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *MsgChannelOpenTry) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgChannelOpenTry) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgChannelOpenTry) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Signer) > 0 { - i -= len(m.Signer) - copy(dAtA[i:], m.Signer) - i = encodeVarintChannel(dAtA, i, uint64(len(m.Signer))) - i-- - dAtA[i] = 0x42 - } - { - size, err := m.ProofHeight.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintChannel(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x3a - if len(m.ProofInit) > 0 { - i -= len(m.ProofInit) - copy(dAtA[i:], m.ProofInit) - i = encodeVarintChannel(dAtA, i, uint64(len(m.ProofInit))) - i-- - dAtA[i] = 0x32 - } - if len(m.CounterpartyVersion) > 0 { - i -= len(m.CounterpartyVersion) - copy(dAtA[i:], m.CounterpartyVersion) - i = encodeVarintChannel(dAtA, i, uint64(len(m.CounterpartyVersion))) - i-- - dAtA[i] = 0x2a - } - { - size, err := m.Channel.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintChannel(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - if len(m.CounterpartyChosenChannelId) > 0 { - i -= len(m.CounterpartyChosenChannelId) - copy(dAtA[i:], m.CounterpartyChosenChannelId) - i = encodeVarintChannel(dAtA, i, uint64(len(m.CounterpartyChosenChannelId))) - i-- - dAtA[i] = 0x1a - } - if len(m.DesiredChannelId) > 0 { - i -= len(m.DesiredChannelId) - copy(dAtA[i:], m.DesiredChannelId) - i = encodeVarintChannel(dAtA, i, uint64(len(m.DesiredChannelId))) - i-- - dAtA[i] = 0x12 - } - if len(m.PortId) > 0 { - i -= len(m.PortId) - copy(dAtA[i:], m.PortId) - i = encodeVarintChannel(dAtA, i, uint64(len(m.PortId))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgChannelOpenTryResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgChannelOpenTryResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgChannelOpenTryResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *MsgChannelOpenAck) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgChannelOpenAck) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgChannelOpenAck) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Signer) > 0 { - i -= len(m.Signer) - copy(dAtA[i:], m.Signer) - i = encodeVarintChannel(dAtA, i, uint64(len(m.Signer))) - i-- - dAtA[i] = 0x3a - } - { - size, err := m.ProofHeight.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintChannel(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x32 - if len(m.ProofTry) > 0 { - i -= len(m.ProofTry) - copy(dAtA[i:], m.ProofTry) - i = encodeVarintChannel(dAtA, i, uint64(len(m.ProofTry))) - i-- - dAtA[i] = 0x2a - } - if len(m.CounterpartyVersion) > 0 { - i -= len(m.CounterpartyVersion) - copy(dAtA[i:], m.CounterpartyVersion) - i = encodeVarintChannel(dAtA, i, uint64(len(m.CounterpartyVersion))) - i-- - dAtA[i] = 0x22 - } - if len(m.CounterpartyChannelId) > 0 { - i -= len(m.CounterpartyChannelId) - copy(dAtA[i:], m.CounterpartyChannelId) - i = encodeVarintChannel(dAtA, i, uint64(len(m.CounterpartyChannelId))) - i-- - dAtA[i] = 0x1a - } - if len(m.ChannelId) > 0 { - i -= len(m.ChannelId) - copy(dAtA[i:], m.ChannelId) - i = encodeVarintChannel(dAtA, i, uint64(len(m.ChannelId))) - i-- - dAtA[i] = 0x12 - } - if len(m.PortId) > 0 { - i -= len(m.PortId) - copy(dAtA[i:], m.PortId) - i = encodeVarintChannel(dAtA, i, uint64(len(m.PortId))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgChannelOpenAckResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgChannelOpenAckResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgChannelOpenAckResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *MsgChannelOpenConfirm) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgChannelOpenConfirm) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgChannelOpenConfirm) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Signer) > 0 { - i -= len(m.Signer) - copy(dAtA[i:], m.Signer) - i = encodeVarintChannel(dAtA, i, uint64(len(m.Signer))) - i-- - dAtA[i] = 0x2a - } - { - size, err := m.ProofHeight.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintChannel(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - if len(m.ProofAck) > 0 { - i -= len(m.ProofAck) - copy(dAtA[i:], m.ProofAck) - i = encodeVarintChannel(dAtA, i, uint64(len(m.ProofAck))) - i-- - dAtA[i] = 0x1a - } - if len(m.ChannelId) > 0 { - i -= len(m.ChannelId) - copy(dAtA[i:], m.ChannelId) - i = encodeVarintChannel(dAtA, i, uint64(len(m.ChannelId))) - i-- - dAtA[i] = 0x12 - } - if len(m.PortId) > 0 { - i -= len(m.PortId) - copy(dAtA[i:], m.PortId) - i = encodeVarintChannel(dAtA, i, uint64(len(m.PortId))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgChannelOpenConfirmResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgChannelOpenConfirmResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgChannelOpenConfirmResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *MsgChannelCloseInit) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgChannelCloseInit) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgChannelCloseInit) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Signer) > 0 { - i -= len(m.Signer) - copy(dAtA[i:], m.Signer) - i = encodeVarintChannel(dAtA, i, uint64(len(m.Signer))) - i-- - dAtA[i] = 0x1a - } - if len(m.ChannelId) > 0 { - i -= len(m.ChannelId) - copy(dAtA[i:], m.ChannelId) - i = encodeVarintChannel(dAtA, i, uint64(len(m.ChannelId))) - i-- - dAtA[i] = 0x12 - } - if len(m.PortId) > 0 { - i -= len(m.PortId) - copy(dAtA[i:], m.PortId) - i = encodeVarintChannel(dAtA, i, uint64(len(m.PortId))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgChannelCloseInitResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgChannelCloseInitResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgChannelCloseInitResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *MsgChannelCloseConfirm) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgChannelCloseConfirm) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgChannelCloseConfirm) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Signer) > 0 { - i -= len(m.Signer) - copy(dAtA[i:], m.Signer) - i = encodeVarintChannel(dAtA, i, uint64(len(m.Signer))) - i-- - dAtA[i] = 0x2a - } - { - size, err := m.ProofHeight.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintChannel(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - if len(m.ProofInit) > 0 { - i -= len(m.ProofInit) - copy(dAtA[i:], m.ProofInit) - i = encodeVarintChannel(dAtA, i, uint64(len(m.ProofInit))) - i-- - dAtA[i] = 0x1a - } - if len(m.ChannelId) > 0 { - i -= len(m.ChannelId) - copy(dAtA[i:], m.ChannelId) - i = encodeVarintChannel(dAtA, i, uint64(len(m.ChannelId))) - i-- - dAtA[i] = 0x12 - } - if len(m.PortId) > 0 { - i -= len(m.PortId) - copy(dAtA[i:], m.PortId) - i = encodeVarintChannel(dAtA, i, uint64(len(m.PortId))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgChannelCloseConfirmResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgChannelCloseConfirmResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgChannelCloseConfirmResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *MsgRecvPacket) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgRecvPacket) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgRecvPacket) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Signer) > 0 { - i -= len(m.Signer) - copy(dAtA[i:], m.Signer) - i = encodeVarintChannel(dAtA, i, uint64(len(m.Signer))) - i-- - dAtA[i] = 0x22 - } - { - size, err := m.ProofHeight.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintChannel(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if len(m.Proof) > 0 { - i -= len(m.Proof) - copy(dAtA[i:], m.Proof) - i = encodeVarintChannel(dAtA, i, uint64(len(m.Proof))) - i-- - dAtA[i] = 0x12 - } - { - size, err := m.Packet.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintChannel(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *MsgRecvPacketResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgRecvPacketResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgRecvPacketResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *MsgTimeout) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgTimeout) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgTimeout) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Signer) > 0 { - i -= len(m.Signer) - copy(dAtA[i:], m.Signer) - i = encodeVarintChannel(dAtA, i, uint64(len(m.Signer))) - i-- - dAtA[i] = 0x2a - } - if m.NextSequenceRecv != 0 { - i = encodeVarintChannel(dAtA, i, uint64(m.NextSequenceRecv)) - i-- - dAtA[i] = 0x20 - } - { - size, err := m.ProofHeight.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintChannel(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if len(m.Proof) > 0 { - i -= len(m.Proof) - copy(dAtA[i:], m.Proof) - i = encodeVarintChannel(dAtA, i, uint64(len(m.Proof))) - i-- - dAtA[i] = 0x12 - } - { - size, err := m.Packet.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintChannel(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *MsgTimeoutResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgTimeoutResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgTimeoutResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *MsgTimeoutOnClose) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgTimeoutOnClose) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgTimeoutOnClose) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Signer) > 0 { - i -= len(m.Signer) - copy(dAtA[i:], m.Signer) - i = encodeVarintChannel(dAtA, i, uint64(len(m.Signer))) - i-- - dAtA[i] = 0x32 - } - if m.NextSequenceRecv != 0 { - i = encodeVarintChannel(dAtA, i, uint64(m.NextSequenceRecv)) - i-- - dAtA[i] = 0x28 - } - { - size, err := m.ProofHeight.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintChannel(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - if len(m.ProofClose) > 0 { - i -= len(m.ProofClose) - copy(dAtA[i:], m.ProofClose) - i = encodeVarintChannel(dAtA, i, uint64(len(m.ProofClose))) - i-- - dAtA[i] = 0x1a - } - if len(m.Proof) > 0 { - i -= len(m.Proof) - copy(dAtA[i:], m.Proof) - i = encodeVarintChannel(dAtA, i, uint64(len(m.Proof))) - i-- - dAtA[i] = 0x12 - } - { - size, err := m.Packet.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintChannel(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *MsgTimeoutOnCloseResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgTimeoutOnCloseResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgTimeoutOnCloseResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *MsgAcknowledgement) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgAcknowledgement) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgAcknowledgement) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Signer) > 0 { - i -= len(m.Signer) - copy(dAtA[i:], m.Signer) - i = encodeVarintChannel(dAtA, i, uint64(len(m.Signer))) - i-- - dAtA[i] = 0x2a - } - { - size, err := m.ProofHeight.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintChannel(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - if len(m.Proof) > 0 { - i -= len(m.Proof) - copy(dAtA[i:], m.Proof) - i = encodeVarintChannel(dAtA, i, uint64(len(m.Proof))) - i-- - dAtA[i] = 0x1a - } - if len(m.Acknowledgement) > 0 { - i -= len(m.Acknowledgement) - copy(dAtA[i:], m.Acknowledgement) - i = encodeVarintChannel(dAtA, i, uint64(len(m.Acknowledgement))) - i-- - dAtA[i] = 0x12 - } - { - size, err := m.Packet.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintChannel(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *MsgAcknowledgementResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgAcknowledgementResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgAcknowledgementResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil + // 916 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x55, 0xcd, 0x6e, 0xdb, 0x46, + 0x10, 0x16, 0x25, 0xea, 0x6f, 0x2c, 0xc9, 0xf2, 0xba, 0x56, 0x58, 0x36, 0x11, 0x15, 0xa2, 0x07, + 0x23, 0x45, 0xa4, 0x38, 0x0d, 0xda, 0x22, 0xa7, 0x5a, 0x3f, 0x81, 0x89, 0x06, 0x92, 0x41, 0xc9, + 0x87, 0xe6, 0xa2, 0xd2, 0xe4, 0x56, 0x22, 0x2c, 0x71, 0x55, 0x72, 0x65, 0xd7, 0x6f, 0x10, 0xe8, + 0xd4, 0x17, 0x10, 0x50, 0xa0, 0xe8, 0xb5, 0xd7, 0xbe, 0x42, 0x8e, 0x39, 0xf6, 0x24, 0x14, 0xf6, + 0xa1, 0x77, 0xbd, 0x40, 0x0b, 0xee, 0x2e, 0xf5, 0xe3, 0x04, 0x39, 0xf6, 0x94, 0x13, 0x77, 0xbe, + 0xef, 0x9b, 0x99, 0x8f, 0x3b, 0x03, 0x12, 0x1e, 0xba, 0xe7, 0x76, 0xcd, 0x26, 0x3e, 0xae, 0xd9, + 0x43, 0xcb, 0xf3, 0xf0, 0xa8, 0x76, 0x79, 0x14, 0x1d, 0xab, 0x13, 0x9f, 0x50, 0x82, 0xf6, 0xdd, + 0x73, 0xbb, 0x1a, 0x4a, 0xaa, 0x11, 0x7e, 0x79, 0xa4, 0x7e, 0x32, 0x20, 0x03, 0xc2, 0xf8, 0x5a, + 0x78, 0xe2, 0x52, 0x55, 0x5b, 0x57, 0x1b, 0xb9, 0xd8, 0xa3, 0xac, 0x18, 0x3b, 0x71, 0x81, 0xfe, + 0x7b, 0x1c, 0xd2, 0x0d, 0x5e, 0x05, 0x3d, 0x81, 0x64, 0x40, 0x2d, 0x8a, 0x15, 0xa9, 0x22, 0x1d, + 0x16, 0x9e, 0xaa, 0xd5, 0xf7, 0xf4, 0xa9, 0x76, 0x43, 0x85, 0xc9, 0x85, 0xe8, 0x2b, 0xc8, 0x10, + 0xdf, 0xc1, 0xbe, 0xeb, 0x0d, 0x94, 0xf8, 0x07, 0x92, 0x3a, 0xa1, 0xc8, 0x5c, 0x69, 0xd1, 0x77, + 0x90, 0xb3, 0xc9, 0xd4, 0xa3, 0xd8, 0x9f, 0x58, 0x3e, 0xbd, 0x56, 0x12, 0x15, 0xe9, 0x70, 0xe7, + 0xe9, 0xc3, 0xf7, 0xe6, 0x36, 0x36, 0x84, 0x75, 0xf9, 0xcd, 0x42, 0x8b, 0x99, 0x5b, 0xc9, 0xa8, + 0x01, 0xbb, 0x36, 0xf1, 0x3c, 0x6c, 0x53, 0x97, 0x78, 0xfd, 0x21, 0x99, 0x04, 0x8a, 0x5c, 0x49, + 0x1c, 0x66, 0xeb, 0xea, 0x72, 0xa1, 0x95, 0xae, 0xad, 0xf1, 0xe8, 0xb9, 0x7e, 0x47, 0xa0, 0x9b, + 0x85, 0x35, 0x72, 0x42, 0x26, 0x01, 0x52, 0x20, 0x7d, 0x89, 0xfd, 0xc0, 0x25, 0x9e, 0x92, 0xac, + 0x48, 0x87, 0x59, 0x33, 0x0a, 0x9f, 0xcb, 0xaf, 0x7f, 0xd5, 0x62, 0xfa, 0x3f, 0x71, 0xd8, 0x33, + 0x1c, 0xec, 0x51, 0xf7, 0x47, 0x17, 0x3b, 0x1f, 0x6f, 0xec, 0x03, 0x37, 0x86, 0xee, 0x41, 0x7a, + 0x42, 0x7c, 0xda, 0x77, 0x1d, 0x25, 0xc5, 0x98, 0x54, 0x18, 0x1a, 0x0e, 0x7a, 0x00, 0x20, 0x6c, + 0x86, 0x5c, 0x9a, 0x71, 0x59, 0x81, 0x18, 0x8e, 0xb8, 0xe9, 0x2b, 0xc8, 0x6d, 0xbe, 0x00, 0xfa, + 0x62, 0x5d, 0x2d, 0xbc, 0xe5, 0x6c, 0x1d, 0x2d, 0x17, 0x5a, 0x81, 0x9b, 0x14, 0x84, 0xbe, 0xea, + 0xf0, 0x6c, 0xab, 0x43, 0x9c, 0xe9, 0x0f, 0x96, 0x0b, 0x6d, 0x4f, 0xbc, 0xd4, 0x8a, 0xd3, 0xdf, + 0x6d, 0xfc, 0x6f, 0x02, 0x52, 0xa7, 0x96, 0x7d, 0x81, 0x29, 0x52, 0x21, 0x13, 0xe0, 0x9f, 0xa6, + 0xd8, 0xb3, 0xf9, 0x68, 0x65, 0x73, 0x15, 0xa3, 0xaf, 0x61, 0x27, 0x20, 0x53, 0xdf, 0xc6, 0xfd, + 0xb0, 0xa7, 0xe8, 0x51, 0x5a, 0x2e, 0x34, 0xc4, 0x7b, 0x6c, 0x90, 0xba, 0x09, 0x3c, 0x3a, 0x25, + 0x3e, 0x45, 0xdf, 0x42, 0x41, 0x70, 0xa2, 0x33, 0x1b, 0x62, 0xb6, 0xfe, 0xe9, 0x72, 0xa1, 0x1d, + 0x6c, 0xe5, 0x0a, 0x5e, 0x37, 0xf3, 0x1c, 0x88, 0xd6, 0xed, 0x05, 0x14, 0x1d, 0x1c, 0x50, 0xd7, + 0xb3, 0xd8, 0x5c, 0x58, 0x7f, 0x99, 0xd5, 0xf8, 0x6c, 0xb9, 0xd0, 0xee, 0xf1, 0x1a, 0x77, 0x15, + 0xba, 0xb9, 0xbb, 0x01, 0x31, 0x27, 0x1d, 0xd8, 0xdf, 0x54, 0x45, 0x76, 0xd8, 0x18, 0xeb, 0xe5, + 0xe5, 0x42, 0x53, 0xdf, 0x2d, 0xb5, 0xf2, 0x84, 0x36, 0xd0, 0xc8, 0x18, 0x02, 0xd9, 0xb1, 0xa8, + 0xc5, 0xc6, 0x9d, 0x33, 0xd9, 0x19, 0xfd, 0x00, 0x05, 0xea, 0x8e, 0x31, 0x99, 0xd2, 0xfe, 0x10, + 0xbb, 0x83, 0x21, 0x65, 0x03, 0xdf, 0xd9, 0xda, 0x77, 0xfe, 0x25, 0xba, 0x3c, 0xaa, 0x9e, 0x30, + 0x45, 0xfd, 0x41, 0xb8, 0xac, 0xeb, 0xeb, 0xd8, 0xce, 0xd7, 0xcd, 0xbc, 0x00, 0xb8, 0x1a, 0x19, + 0xb0, 0x17, 0x29, 0xc2, 0x67, 0x40, 0xad, 0xf1, 0x44, 0xc9, 0x84, 0xe3, 0xaa, 0xdf, 0x5f, 0x2e, + 0x34, 0x65, 0xbb, 0xc8, 0x4a, 0xa2, 0x9b, 0x45, 0x81, 0xf5, 0x22, 0x48, 0x6c, 0xc0, 0x1f, 0x12, + 0xec, 0xf3, 0x0d, 0x38, 0xb6, 0x2f, 0x1a, 0x64, 0x3c, 0x76, 0xe9, 0x18, 0x7b, 0xf4, 0x7f, 0x58, + 0xc1, 0xad, 0x8d, 0x4b, 0xdc, 0xd9, 0x38, 0x04, 0xf2, 0xd0, 0x0a, 0x86, 0x6c, 0xd4, 0x39, 0x93, + 0x9d, 0x85, 0xe1, 0x0e, 0xec, 0x1e, 0xdb, 0x17, 0x1e, 0xb9, 0x1a, 0x61, 0x67, 0x80, 0x99, 0x57, + 0x05, 0x52, 0x3e, 0x0e, 0xa6, 0x23, 0xaa, 0x1c, 0x84, 0xf2, 0x93, 0x98, 0x29, 0x62, 0x54, 0x82, + 0x24, 0xf6, 0x7d, 0xe2, 0x2b, 0xa5, 0xd0, 0xd3, 0x49, 0xcc, 0xe4, 0x61, 0x1d, 0x20, 0xe3, 0xe3, + 0x60, 0x42, 0xbc, 0x00, 0x3f, 0xfa, 0x53, 0x82, 0x64, 0x57, 0x7c, 0xa8, 0xb4, 0x6e, 0xef, 0xb8, + 0xd7, 0xea, 0x9f, 0xb5, 0x8d, 0xb6, 0xd1, 0x33, 0x8e, 0x5f, 0x1a, 0xaf, 0x5a, 0xcd, 0xfe, 0x59, + 0xbb, 0x7b, 0xda, 0x6a, 0x18, 0x2f, 0x8c, 0x56, 0xb3, 0x18, 0x53, 0xf7, 0x66, 0xf3, 0x4a, 0x7e, + 0x4b, 0x80, 0x14, 0x00, 0x9e, 0x17, 0x82, 0x45, 0x49, 0xcd, 0xcc, 0xe6, 0x15, 0x39, 0x3c, 0xa3, + 0x32, 0xe4, 0x39, 0xd3, 0x33, 0xbf, 0xef, 0x9c, 0xb6, 0xda, 0xc5, 0xb8, 0xba, 0x33, 0x9b, 0x57, + 0xd2, 0x22, 0x5c, 0x67, 0x32, 0x32, 0xc1, 0x33, 0x19, 0x73, 0x1f, 0x72, 0x9c, 0x69, 0xbc, 0xec, + 0x74, 0x5b, 0xcd, 0xa2, 0xac, 0xc2, 0x6c, 0x5e, 0x49, 0xf1, 0x48, 0x95, 0x5f, 0xff, 0x56, 0x8e, + 0x3d, 0xba, 0x82, 0x24, 0xfb, 0x66, 0xa2, 0xcf, 0xa1, 0xd4, 0x31, 0x9b, 0x2d, 0xb3, 0xdf, 0xee, + 0xb4, 0x5b, 0x77, 0xfc, 0xb2, 0x92, 0x21, 0x8e, 0x74, 0xd8, 0xe5, 0xaa, 0xb3, 0x36, 0x7b, 0xb6, + 0x9a, 0x45, 0x49, 0xcd, 0xcf, 0xe6, 0x95, 0xec, 0x0a, 0x08, 0x0d, 0x73, 0x4d, 0xa4, 0x10, 0x86, + 0x45, 0xc8, 0x1b, 0xd7, 0xcd, 0x37, 0x37, 0x65, 0xe9, 0xed, 0x4d, 0x59, 0xfa, 0xfb, 0xa6, 0x2c, + 0xfd, 0x72, 0x5b, 0x8e, 0xbd, 0xbd, 0x2d, 0xc7, 0xfe, 0xba, 0x2d, 0xc7, 0x5e, 0x7d, 0x33, 0x70, + 0xe9, 0x70, 0x7a, 0x5e, 0xb5, 0xc9, 0xb8, 0x66, 0x93, 0x60, 0x4c, 0x02, 0xf1, 0x78, 0x1c, 0x38, + 0x17, 0xb5, 0x9f, 0x6b, 0xab, 0x7f, 0xf3, 0x93, 0x67, 0x8f, 0xa3, 0x9f, 0x3d, 0xbd, 0x9e, 0xe0, + 0xe0, 0x3c, 0xc5, 0x7e, 0xce, 0x5f, 0xfe, 0x17, 0x00, 0x00, 0xff, 0xff, 0xfd, 0xef, 0x9f, 0xe3, + 0x0d, 0x08, 0x00, 0x00, } func (m *Channel) Marshal() (dAtA []byte, err error) { @@ -3045,364 +887,6 @@ func encodeVarintChannel(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } -func (m *MsgChannelOpenInit) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.PortId) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - l = len(m.ChannelId) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - l = m.Channel.Size() - n += 1 + l + sovChannel(uint64(l)) - l = len(m.Signer) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - return n -} - -func (m *MsgChannelOpenInitResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *MsgChannelOpenTry) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.PortId) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - l = len(m.DesiredChannelId) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - l = len(m.CounterpartyChosenChannelId) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - l = m.Channel.Size() - n += 1 + l + sovChannel(uint64(l)) - l = len(m.CounterpartyVersion) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - l = len(m.ProofInit) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - l = m.ProofHeight.Size() - n += 1 + l + sovChannel(uint64(l)) - l = len(m.Signer) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - return n -} - -func (m *MsgChannelOpenTryResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *MsgChannelOpenAck) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.PortId) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - l = len(m.ChannelId) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - l = len(m.CounterpartyChannelId) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - l = len(m.CounterpartyVersion) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - l = len(m.ProofTry) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - l = m.ProofHeight.Size() - n += 1 + l + sovChannel(uint64(l)) - l = len(m.Signer) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - return n -} - -func (m *MsgChannelOpenAckResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *MsgChannelOpenConfirm) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.PortId) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - l = len(m.ChannelId) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - l = len(m.ProofAck) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - l = m.ProofHeight.Size() - n += 1 + l + sovChannel(uint64(l)) - l = len(m.Signer) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - return n -} - -func (m *MsgChannelOpenConfirmResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *MsgChannelCloseInit) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.PortId) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - l = len(m.ChannelId) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - l = len(m.Signer) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - return n -} - -func (m *MsgChannelCloseInitResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *MsgChannelCloseConfirm) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.PortId) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - l = len(m.ChannelId) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - l = len(m.ProofInit) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - l = m.ProofHeight.Size() - n += 1 + l + sovChannel(uint64(l)) - l = len(m.Signer) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - return n -} - -func (m *MsgChannelCloseConfirmResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *MsgRecvPacket) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Packet.Size() - n += 1 + l + sovChannel(uint64(l)) - l = len(m.Proof) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - l = m.ProofHeight.Size() - n += 1 + l + sovChannel(uint64(l)) - l = len(m.Signer) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - return n -} - -func (m *MsgRecvPacketResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *MsgTimeout) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Packet.Size() - n += 1 + l + sovChannel(uint64(l)) - l = len(m.Proof) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - l = m.ProofHeight.Size() - n += 1 + l + sovChannel(uint64(l)) - if m.NextSequenceRecv != 0 { - n += 1 + sovChannel(uint64(m.NextSequenceRecv)) - } - l = len(m.Signer) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - return n -} - -func (m *MsgTimeoutResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *MsgTimeoutOnClose) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Packet.Size() - n += 1 + l + sovChannel(uint64(l)) - l = len(m.Proof) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - l = len(m.ProofClose) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - l = m.ProofHeight.Size() - n += 1 + l + sovChannel(uint64(l)) - if m.NextSequenceRecv != 0 { - n += 1 + sovChannel(uint64(m.NextSequenceRecv)) - } - l = len(m.Signer) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - return n -} - -func (m *MsgTimeoutOnCloseResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *MsgAcknowledgement) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Packet.Size() - n += 1 + l + sovChannel(uint64(l)) - l = len(m.Acknowledgement) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - l = len(m.Proof) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - l = m.ProofHeight.Size() - n += 1 + l + sovChannel(uint64(l)) - l = len(m.Signer) - if l > 0 { - n += 1 + l + sovChannel(uint64(l)) - } - return n -} - -func (m *MsgAcknowledgementResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - func (m *Channel) Size() (n int) { if m == nil { return 0 @@ -3584,2738 +1068,6 @@ func sovChannel(x uint64) (n int) { func sozChannel(x uint64) (n int) { return sovChannel(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (m *MsgChannelOpenInit) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgChannelOpenInit: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgChannelOpenInit: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PortId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PortId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ChannelId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ChannelId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Channel", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Channel.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Signer = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipChannel(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgChannelOpenInitResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgChannelOpenInitResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgChannelOpenInitResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipChannel(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgChannelOpenTry) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgChannelOpenTry: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgChannelOpenTry: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PortId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PortId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DesiredChannelId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.DesiredChannelId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CounterpartyChosenChannelId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CounterpartyChosenChannelId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Channel", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Channel.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CounterpartyVersion", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CounterpartyVersion = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofInit", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ProofInit = append(m.ProofInit[:0], dAtA[iNdEx:postIndex]...) - if m.ProofInit == nil { - m.ProofInit = []byte{} - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ProofHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Signer = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipChannel(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgChannelOpenTryResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgChannelOpenTryResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgChannelOpenTryResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipChannel(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgChannelOpenAck) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgChannelOpenAck: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgChannelOpenAck: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PortId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PortId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ChannelId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ChannelId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CounterpartyChannelId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CounterpartyChannelId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CounterpartyVersion", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CounterpartyVersion = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofTry", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ProofTry = append(m.ProofTry[:0], dAtA[iNdEx:postIndex]...) - if m.ProofTry == nil { - m.ProofTry = []byte{} - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ProofHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Signer = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipChannel(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgChannelOpenAckResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgChannelOpenAckResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgChannelOpenAckResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipChannel(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgChannelOpenConfirm) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgChannelOpenConfirm: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgChannelOpenConfirm: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PortId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PortId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ChannelId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ChannelId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofAck", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ProofAck = append(m.ProofAck[:0], dAtA[iNdEx:postIndex]...) - if m.ProofAck == nil { - m.ProofAck = []byte{} - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ProofHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Signer = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipChannel(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgChannelOpenConfirmResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgChannelOpenConfirmResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgChannelOpenConfirmResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipChannel(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgChannelCloseInit) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgChannelCloseInit: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgChannelCloseInit: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PortId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PortId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ChannelId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ChannelId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Signer = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipChannel(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgChannelCloseInitResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgChannelCloseInitResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgChannelCloseInitResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipChannel(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgChannelCloseConfirm) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgChannelCloseConfirm: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgChannelCloseConfirm: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PortId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PortId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ChannelId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ChannelId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofInit", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ProofInit = append(m.ProofInit[:0], dAtA[iNdEx:postIndex]...) - if m.ProofInit == nil { - m.ProofInit = []byte{} - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ProofHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Signer = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipChannel(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgChannelCloseConfirmResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgChannelCloseConfirmResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgChannelCloseConfirmResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipChannel(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgRecvPacket) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgRecvPacket: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgRecvPacket: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Packet", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Packet.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Proof", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Proof = append(m.Proof[:0], dAtA[iNdEx:postIndex]...) - if m.Proof == nil { - m.Proof = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ProofHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Signer = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipChannel(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgRecvPacketResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgRecvPacketResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgRecvPacketResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipChannel(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgTimeout) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgTimeout: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgTimeout: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Packet", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Packet.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Proof", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Proof = append(m.Proof[:0], dAtA[iNdEx:postIndex]...) - if m.Proof == nil { - m.Proof = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ProofHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field NextSequenceRecv", wireType) - } - m.NextSequenceRecv = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.NextSequenceRecv |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Signer = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipChannel(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgTimeoutResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgTimeoutResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgTimeoutResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipChannel(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgTimeoutOnClose) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgTimeoutOnClose: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgTimeoutOnClose: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Packet", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Packet.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Proof", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Proof = append(m.Proof[:0], dAtA[iNdEx:postIndex]...) - if m.Proof == nil { - m.Proof = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofClose", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ProofClose = append(m.ProofClose[:0], dAtA[iNdEx:postIndex]...) - if m.ProofClose == nil { - m.ProofClose = []byte{} - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ProofHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field NextSequenceRecv", wireType) - } - m.NextSequenceRecv = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.NextSequenceRecv |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Signer = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipChannel(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgTimeoutOnCloseResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgTimeoutOnCloseResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgTimeoutOnCloseResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipChannel(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgAcknowledgement) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgAcknowledgement: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgAcknowledgement: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Packet", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Packet.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Acknowledgement", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Acknowledgement = append(m.Acknowledgement[:0], dAtA[iNdEx:postIndex]...) - if m.Acknowledgement == nil { - m.Acknowledgement = []byte{} - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Proof", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Proof = append(m.Proof[:0], dAtA[iNdEx:postIndex]...) - if m.Proof == nil { - m.Proof = []byte{} - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ProofHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthChannel - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthChannel - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Signer = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipChannel(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgAcknowledgementResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowChannel - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgAcknowledgementResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgAcknowledgementResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipChannel(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthChannel - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func (m *Channel) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/ibc/core/04-channel/types/tx.pb.go b/x/ibc/core/04-channel/types/tx.pb.go new file mode 100644 index 0000000000..2ad25780da --- /dev/null +++ b/x/ibc/core/04-channel/types/tx.pb.go @@ -0,0 +1,5405 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: ibc/core/channel/v1/tx.proto + +package types + +import ( + context "context" + fmt "fmt" + types "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" + _ "github.com/gogo/protobuf/gogoproto" + grpc1 "github.com/gogo/protobuf/grpc" + proto "github.com/gogo/protobuf/proto" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// MsgChannelOpenInit defines an sdk.Msg to initialize a channel handshake. It +// is called by a relayer on Chain A. +type MsgChannelOpenInit struct { + PortId string `protobuf:"bytes,1,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty" yaml:"port_id"` + ChannelId string `protobuf:"bytes,2,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty" yaml:"channel_id"` + Channel Channel `protobuf:"bytes,3,opt,name=channel,proto3" json:"channel"` + Signer string `protobuf:"bytes,4,opt,name=signer,proto3" json:"signer,omitempty"` +} + +func (m *MsgChannelOpenInit) Reset() { *m = MsgChannelOpenInit{} } +func (m *MsgChannelOpenInit) String() string { return proto.CompactTextString(m) } +func (*MsgChannelOpenInit) ProtoMessage() {} +func (*MsgChannelOpenInit) Descriptor() ([]byte, []int) { + return fileDescriptor_bc4637e0ac3fc7b7, []int{0} +} +func (m *MsgChannelOpenInit) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgChannelOpenInit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgChannelOpenInit.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgChannelOpenInit) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgChannelOpenInit.Merge(m, src) +} +func (m *MsgChannelOpenInit) XXX_Size() int { + return m.Size() +} +func (m *MsgChannelOpenInit) XXX_DiscardUnknown() { + xxx_messageInfo_MsgChannelOpenInit.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgChannelOpenInit proto.InternalMessageInfo + +// MsgChannelOpenInitResponse defines the Msg/ChannelOpenInit response type. +type MsgChannelOpenInitResponse struct { +} + +func (m *MsgChannelOpenInitResponse) Reset() { *m = MsgChannelOpenInitResponse{} } +func (m *MsgChannelOpenInitResponse) String() string { return proto.CompactTextString(m) } +func (*MsgChannelOpenInitResponse) ProtoMessage() {} +func (*MsgChannelOpenInitResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_bc4637e0ac3fc7b7, []int{1} +} +func (m *MsgChannelOpenInitResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgChannelOpenInitResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgChannelOpenInitResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgChannelOpenInitResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgChannelOpenInitResponse.Merge(m, src) +} +func (m *MsgChannelOpenInitResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgChannelOpenInitResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgChannelOpenInitResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgChannelOpenInitResponse proto.InternalMessageInfo + +// MsgChannelOpenInit defines a msg sent by a Relayer to try to open a channel +// on Chain B. +type MsgChannelOpenTry struct { + PortId string `protobuf:"bytes,1,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty" yaml:"port_id"` + DesiredChannelId string `protobuf:"bytes,2,opt,name=desired_channel_id,json=desiredChannelId,proto3" json:"desired_channel_id,omitempty" yaml:"desired_channel_id"` + CounterpartyChosenChannelId string `protobuf:"bytes,3,opt,name=counterparty_chosen_channel_id,json=counterpartyChosenChannelId,proto3" json:"counterparty_chosen_channel_id,omitempty" yaml:"counterparty_chosen_channel_id"` + Channel Channel `protobuf:"bytes,4,opt,name=channel,proto3" json:"channel"` + CounterpartyVersion string `protobuf:"bytes,5,opt,name=counterparty_version,json=counterpartyVersion,proto3" json:"counterparty_version,omitempty" yaml:"counterparty_version"` + ProofInit []byte `protobuf:"bytes,6,opt,name=proof_init,json=proofInit,proto3" json:"proof_init,omitempty" yaml:"proof_init"` + ProofHeight types.Height `protobuf:"bytes,7,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"` + Signer string `protobuf:"bytes,8,opt,name=signer,proto3" json:"signer,omitempty"` +} + +func (m *MsgChannelOpenTry) Reset() { *m = MsgChannelOpenTry{} } +func (m *MsgChannelOpenTry) String() string { return proto.CompactTextString(m) } +func (*MsgChannelOpenTry) ProtoMessage() {} +func (*MsgChannelOpenTry) Descriptor() ([]byte, []int) { + return fileDescriptor_bc4637e0ac3fc7b7, []int{2} +} +func (m *MsgChannelOpenTry) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgChannelOpenTry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgChannelOpenTry.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgChannelOpenTry) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgChannelOpenTry.Merge(m, src) +} +func (m *MsgChannelOpenTry) XXX_Size() int { + return m.Size() +} +func (m *MsgChannelOpenTry) XXX_DiscardUnknown() { + xxx_messageInfo_MsgChannelOpenTry.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgChannelOpenTry proto.InternalMessageInfo + +// MsgChannelOpenTryResponse defines the Msg/ChannelOpenTry response type. +type MsgChannelOpenTryResponse struct { +} + +func (m *MsgChannelOpenTryResponse) Reset() { *m = MsgChannelOpenTryResponse{} } +func (m *MsgChannelOpenTryResponse) String() string { return proto.CompactTextString(m) } +func (*MsgChannelOpenTryResponse) ProtoMessage() {} +func (*MsgChannelOpenTryResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_bc4637e0ac3fc7b7, []int{3} +} +func (m *MsgChannelOpenTryResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgChannelOpenTryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgChannelOpenTryResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgChannelOpenTryResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgChannelOpenTryResponse.Merge(m, src) +} +func (m *MsgChannelOpenTryResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgChannelOpenTryResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgChannelOpenTryResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgChannelOpenTryResponse proto.InternalMessageInfo + +// MsgChannelOpenAck defines a msg sent by a Relayer to Chain A to acknowledge +// the change of channel state to TRYOPEN on Chain B. +type MsgChannelOpenAck struct { + PortId string `protobuf:"bytes,1,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty" yaml:"port_id"` + ChannelId string `protobuf:"bytes,2,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty" yaml:"channel_id"` + CounterpartyChannelId string `protobuf:"bytes,3,opt,name=counterparty_channel_id,json=counterpartyChannelId,proto3" json:"counterparty_channel_id,omitempty" yaml:"counterparty_channel_id"` + CounterpartyVersion string `protobuf:"bytes,4,opt,name=counterparty_version,json=counterpartyVersion,proto3" json:"counterparty_version,omitempty" yaml:"counterparty_version"` + ProofTry []byte `protobuf:"bytes,5,opt,name=proof_try,json=proofTry,proto3" json:"proof_try,omitempty" yaml:"proof_try"` + ProofHeight types.Height `protobuf:"bytes,6,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"` + Signer string `protobuf:"bytes,7,opt,name=signer,proto3" json:"signer,omitempty"` +} + +func (m *MsgChannelOpenAck) Reset() { *m = MsgChannelOpenAck{} } +func (m *MsgChannelOpenAck) String() string { return proto.CompactTextString(m) } +func (*MsgChannelOpenAck) ProtoMessage() {} +func (*MsgChannelOpenAck) Descriptor() ([]byte, []int) { + return fileDescriptor_bc4637e0ac3fc7b7, []int{4} +} +func (m *MsgChannelOpenAck) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgChannelOpenAck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgChannelOpenAck.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgChannelOpenAck) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgChannelOpenAck.Merge(m, src) +} +func (m *MsgChannelOpenAck) XXX_Size() int { + return m.Size() +} +func (m *MsgChannelOpenAck) XXX_DiscardUnknown() { + xxx_messageInfo_MsgChannelOpenAck.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgChannelOpenAck proto.InternalMessageInfo + +// MsgChannelOpenAckResponse defines the Msg/ChannelOpenAck response type. +type MsgChannelOpenAckResponse struct { +} + +func (m *MsgChannelOpenAckResponse) Reset() { *m = MsgChannelOpenAckResponse{} } +func (m *MsgChannelOpenAckResponse) String() string { return proto.CompactTextString(m) } +func (*MsgChannelOpenAckResponse) ProtoMessage() {} +func (*MsgChannelOpenAckResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_bc4637e0ac3fc7b7, []int{5} +} +func (m *MsgChannelOpenAckResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgChannelOpenAckResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgChannelOpenAckResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgChannelOpenAckResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgChannelOpenAckResponse.Merge(m, src) +} +func (m *MsgChannelOpenAckResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgChannelOpenAckResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgChannelOpenAckResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgChannelOpenAckResponse proto.InternalMessageInfo + +// MsgChannelOpenConfirm defines a msg sent by a Relayer to Chain B to +// acknowledge the change of channel state to OPEN on Chain A. +type MsgChannelOpenConfirm struct { + PortId string `protobuf:"bytes,1,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty" yaml:"port_id"` + ChannelId string `protobuf:"bytes,2,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty" yaml:"channel_id"` + ProofAck []byte `protobuf:"bytes,3,opt,name=proof_ack,json=proofAck,proto3" json:"proof_ack,omitempty" yaml:"proof_ack"` + ProofHeight types.Height `protobuf:"bytes,4,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"` + Signer string `protobuf:"bytes,5,opt,name=signer,proto3" json:"signer,omitempty"` +} + +func (m *MsgChannelOpenConfirm) Reset() { *m = MsgChannelOpenConfirm{} } +func (m *MsgChannelOpenConfirm) String() string { return proto.CompactTextString(m) } +func (*MsgChannelOpenConfirm) ProtoMessage() {} +func (*MsgChannelOpenConfirm) Descriptor() ([]byte, []int) { + return fileDescriptor_bc4637e0ac3fc7b7, []int{6} +} +func (m *MsgChannelOpenConfirm) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgChannelOpenConfirm) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgChannelOpenConfirm.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgChannelOpenConfirm) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgChannelOpenConfirm.Merge(m, src) +} +func (m *MsgChannelOpenConfirm) XXX_Size() int { + return m.Size() +} +func (m *MsgChannelOpenConfirm) XXX_DiscardUnknown() { + xxx_messageInfo_MsgChannelOpenConfirm.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgChannelOpenConfirm proto.InternalMessageInfo + +// MsgChannelOpenConfirmResponse defines the Msg/ChannelOpenConfirm response type. +type MsgChannelOpenConfirmResponse struct { +} + +func (m *MsgChannelOpenConfirmResponse) Reset() { *m = MsgChannelOpenConfirmResponse{} } +func (m *MsgChannelOpenConfirmResponse) String() string { return proto.CompactTextString(m) } +func (*MsgChannelOpenConfirmResponse) ProtoMessage() {} +func (*MsgChannelOpenConfirmResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_bc4637e0ac3fc7b7, []int{7} +} +func (m *MsgChannelOpenConfirmResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgChannelOpenConfirmResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgChannelOpenConfirmResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgChannelOpenConfirmResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgChannelOpenConfirmResponse.Merge(m, src) +} +func (m *MsgChannelOpenConfirmResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgChannelOpenConfirmResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgChannelOpenConfirmResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgChannelOpenConfirmResponse proto.InternalMessageInfo + +// MsgChannelCloseInit defines a msg sent by a Relayer to Chain A +// to close a channel with Chain B. +type MsgChannelCloseInit struct { + PortId string `protobuf:"bytes,1,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty" yaml:"port_id"` + ChannelId string `protobuf:"bytes,2,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty" yaml:"channel_id"` + Signer string `protobuf:"bytes,3,opt,name=signer,proto3" json:"signer,omitempty"` +} + +func (m *MsgChannelCloseInit) Reset() { *m = MsgChannelCloseInit{} } +func (m *MsgChannelCloseInit) String() string { return proto.CompactTextString(m) } +func (*MsgChannelCloseInit) ProtoMessage() {} +func (*MsgChannelCloseInit) Descriptor() ([]byte, []int) { + return fileDescriptor_bc4637e0ac3fc7b7, []int{8} +} +func (m *MsgChannelCloseInit) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgChannelCloseInit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgChannelCloseInit.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgChannelCloseInit) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgChannelCloseInit.Merge(m, src) +} +func (m *MsgChannelCloseInit) XXX_Size() int { + return m.Size() +} +func (m *MsgChannelCloseInit) XXX_DiscardUnknown() { + xxx_messageInfo_MsgChannelCloseInit.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgChannelCloseInit proto.InternalMessageInfo + +// MsgChannelCloseInitResponse defines the Msg/ChannelCloseInit response type. +type MsgChannelCloseInitResponse struct { +} + +func (m *MsgChannelCloseInitResponse) Reset() { *m = MsgChannelCloseInitResponse{} } +func (m *MsgChannelCloseInitResponse) String() string { return proto.CompactTextString(m) } +func (*MsgChannelCloseInitResponse) ProtoMessage() {} +func (*MsgChannelCloseInitResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_bc4637e0ac3fc7b7, []int{9} +} +func (m *MsgChannelCloseInitResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgChannelCloseInitResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgChannelCloseInitResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgChannelCloseInitResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgChannelCloseInitResponse.Merge(m, src) +} +func (m *MsgChannelCloseInitResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgChannelCloseInitResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgChannelCloseInitResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgChannelCloseInitResponse proto.InternalMessageInfo + +// MsgChannelCloseConfirm defines a msg sent by a Relayer to Chain B +// to acknowledge the change of channel state to CLOSED on Chain A. +type MsgChannelCloseConfirm struct { + PortId string `protobuf:"bytes,1,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty" yaml:"port_id"` + ChannelId string `protobuf:"bytes,2,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty" yaml:"channel_id"` + ProofInit []byte `protobuf:"bytes,3,opt,name=proof_init,json=proofInit,proto3" json:"proof_init,omitempty" yaml:"proof_init"` + ProofHeight types.Height `protobuf:"bytes,4,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"` + Signer string `protobuf:"bytes,5,opt,name=signer,proto3" json:"signer,omitempty"` +} + +func (m *MsgChannelCloseConfirm) Reset() { *m = MsgChannelCloseConfirm{} } +func (m *MsgChannelCloseConfirm) String() string { return proto.CompactTextString(m) } +func (*MsgChannelCloseConfirm) ProtoMessage() {} +func (*MsgChannelCloseConfirm) Descriptor() ([]byte, []int) { + return fileDescriptor_bc4637e0ac3fc7b7, []int{10} +} +func (m *MsgChannelCloseConfirm) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgChannelCloseConfirm) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgChannelCloseConfirm.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgChannelCloseConfirm) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgChannelCloseConfirm.Merge(m, src) +} +func (m *MsgChannelCloseConfirm) XXX_Size() int { + return m.Size() +} +func (m *MsgChannelCloseConfirm) XXX_DiscardUnknown() { + xxx_messageInfo_MsgChannelCloseConfirm.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgChannelCloseConfirm proto.InternalMessageInfo + +// MsgChannelCloseConfirmResponse defines the Msg/ChannelCloseConfirm response type. +type MsgChannelCloseConfirmResponse struct { +} + +func (m *MsgChannelCloseConfirmResponse) Reset() { *m = MsgChannelCloseConfirmResponse{} } +func (m *MsgChannelCloseConfirmResponse) String() string { return proto.CompactTextString(m) } +func (*MsgChannelCloseConfirmResponse) ProtoMessage() {} +func (*MsgChannelCloseConfirmResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_bc4637e0ac3fc7b7, []int{11} +} +func (m *MsgChannelCloseConfirmResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgChannelCloseConfirmResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgChannelCloseConfirmResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgChannelCloseConfirmResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgChannelCloseConfirmResponse.Merge(m, src) +} +func (m *MsgChannelCloseConfirmResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgChannelCloseConfirmResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgChannelCloseConfirmResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgChannelCloseConfirmResponse proto.InternalMessageInfo + +// MsgRecvPacket receives incoming IBC packet +type MsgRecvPacket struct { + Packet Packet `protobuf:"bytes,1,opt,name=packet,proto3" json:"packet"` + Proof []byte `protobuf:"bytes,2,opt,name=proof,proto3" json:"proof,omitempty"` + ProofHeight types.Height `protobuf:"bytes,3,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"` + Signer string `protobuf:"bytes,4,opt,name=signer,proto3" json:"signer,omitempty"` +} + +func (m *MsgRecvPacket) Reset() { *m = MsgRecvPacket{} } +func (m *MsgRecvPacket) String() string { return proto.CompactTextString(m) } +func (*MsgRecvPacket) ProtoMessage() {} +func (*MsgRecvPacket) Descriptor() ([]byte, []int) { + return fileDescriptor_bc4637e0ac3fc7b7, []int{12} +} +func (m *MsgRecvPacket) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRecvPacket) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRecvPacket.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRecvPacket) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRecvPacket.Merge(m, src) +} +func (m *MsgRecvPacket) XXX_Size() int { + return m.Size() +} +func (m *MsgRecvPacket) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRecvPacket.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRecvPacket proto.InternalMessageInfo + +// MsgRecvPacketResponse defines the Msg/RecvPacket response type. +type MsgRecvPacketResponse struct { +} + +func (m *MsgRecvPacketResponse) Reset() { *m = MsgRecvPacketResponse{} } +func (m *MsgRecvPacketResponse) String() string { return proto.CompactTextString(m) } +func (*MsgRecvPacketResponse) ProtoMessage() {} +func (*MsgRecvPacketResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_bc4637e0ac3fc7b7, []int{13} +} +func (m *MsgRecvPacketResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRecvPacketResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRecvPacketResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRecvPacketResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRecvPacketResponse.Merge(m, src) +} +func (m *MsgRecvPacketResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgRecvPacketResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRecvPacketResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRecvPacketResponse proto.InternalMessageInfo + +// MsgTimeout receives timed-out packet +type MsgTimeout struct { + Packet Packet `protobuf:"bytes,1,opt,name=packet,proto3" json:"packet"` + Proof []byte `protobuf:"bytes,2,opt,name=proof,proto3" json:"proof,omitempty"` + ProofHeight types.Height `protobuf:"bytes,3,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"` + NextSequenceRecv uint64 `protobuf:"varint,4,opt,name=next_sequence_recv,json=nextSequenceRecv,proto3" json:"next_sequence_recv,omitempty" yaml:"next_sequence_recv"` + Signer string `protobuf:"bytes,5,opt,name=signer,proto3" json:"signer,omitempty"` +} + +func (m *MsgTimeout) Reset() { *m = MsgTimeout{} } +func (m *MsgTimeout) String() string { return proto.CompactTextString(m) } +func (*MsgTimeout) ProtoMessage() {} +func (*MsgTimeout) Descriptor() ([]byte, []int) { + return fileDescriptor_bc4637e0ac3fc7b7, []int{14} +} +func (m *MsgTimeout) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgTimeout) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgTimeout.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgTimeout) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgTimeout.Merge(m, src) +} +func (m *MsgTimeout) XXX_Size() int { + return m.Size() +} +func (m *MsgTimeout) XXX_DiscardUnknown() { + xxx_messageInfo_MsgTimeout.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgTimeout proto.InternalMessageInfo + +// MsgTimeoutResponse defines the Msg/Timeout response type. +type MsgTimeoutResponse struct { +} + +func (m *MsgTimeoutResponse) Reset() { *m = MsgTimeoutResponse{} } +func (m *MsgTimeoutResponse) String() string { return proto.CompactTextString(m) } +func (*MsgTimeoutResponse) ProtoMessage() {} +func (*MsgTimeoutResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_bc4637e0ac3fc7b7, []int{15} +} +func (m *MsgTimeoutResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgTimeoutResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgTimeoutResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgTimeoutResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgTimeoutResponse.Merge(m, src) +} +func (m *MsgTimeoutResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgTimeoutResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgTimeoutResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgTimeoutResponse proto.InternalMessageInfo + +// MsgTimeoutOnClose timed-out packet upon counterparty channel closure. +type MsgTimeoutOnClose struct { + Packet Packet `protobuf:"bytes,1,opt,name=packet,proto3" json:"packet"` + Proof []byte `protobuf:"bytes,2,opt,name=proof,proto3" json:"proof,omitempty"` + ProofClose []byte `protobuf:"bytes,3,opt,name=proof_close,json=proofClose,proto3" json:"proof_close,omitempty" yaml:"proof_close"` + ProofHeight types.Height `protobuf:"bytes,4,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"` + NextSequenceRecv uint64 `protobuf:"varint,5,opt,name=next_sequence_recv,json=nextSequenceRecv,proto3" json:"next_sequence_recv,omitempty" yaml:"next_sequence_recv"` + Signer string `protobuf:"bytes,6,opt,name=signer,proto3" json:"signer,omitempty"` +} + +func (m *MsgTimeoutOnClose) Reset() { *m = MsgTimeoutOnClose{} } +func (m *MsgTimeoutOnClose) String() string { return proto.CompactTextString(m) } +func (*MsgTimeoutOnClose) ProtoMessage() {} +func (*MsgTimeoutOnClose) Descriptor() ([]byte, []int) { + return fileDescriptor_bc4637e0ac3fc7b7, []int{16} +} +func (m *MsgTimeoutOnClose) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgTimeoutOnClose) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgTimeoutOnClose.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgTimeoutOnClose) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgTimeoutOnClose.Merge(m, src) +} +func (m *MsgTimeoutOnClose) XXX_Size() int { + return m.Size() +} +func (m *MsgTimeoutOnClose) XXX_DiscardUnknown() { + xxx_messageInfo_MsgTimeoutOnClose.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgTimeoutOnClose proto.InternalMessageInfo + +// MsgTimeoutOnCloseResponse defines the Msg/TimeoutOnClose response type. +type MsgTimeoutOnCloseResponse struct { +} + +func (m *MsgTimeoutOnCloseResponse) Reset() { *m = MsgTimeoutOnCloseResponse{} } +func (m *MsgTimeoutOnCloseResponse) String() string { return proto.CompactTextString(m) } +func (*MsgTimeoutOnCloseResponse) ProtoMessage() {} +func (*MsgTimeoutOnCloseResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_bc4637e0ac3fc7b7, []int{17} +} +func (m *MsgTimeoutOnCloseResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgTimeoutOnCloseResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgTimeoutOnCloseResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgTimeoutOnCloseResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgTimeoutOnCloseResponse.Merge(m, src) +} +func (m *MsgTimeoutOnCloseResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgTimeoutOnCloseResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgTimeoutOnCloseResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgTimeoutOnCloseResponse proto.InternalMessageInfo + +// MsgAcknowledgement receives incoming IBC acknowledgement +type MsgAcknowledgement struct { + Packet Packet `protobuf:"bytes,1,opt,name=packet,proto3" json:"packet"` + Acknowledgement []byte `protobuf:"bytes,2,opt,name=acknowledgement,proto3" json:"acknowledgement,omitempty"` + Proof []byte `protobuf:"bytes,3,opt,name=proof,proto3" json:"proof,omitempty"` + ProofHeight types.Height `protobuf:"bytes,4,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"` + Signer string `protobuf:"bytes,5,opt,name=signer,proto3" json:"signer,omitempty"` +} + +func (m *MsgAcknowledgement) Reset() { *m = MsgAcknowledgement{} } +func (m *MsgAcknowledgement) String() string { return proto.CompactTextString(m) } +func (*MsgAcknowledgement) ProtoMessage() {} +func (*MsgAcknowledgement) Descriptor() ([]byte, []int) { + return fileDescriptor_bc4637e0ac3fc7b7, []int{18} +} +func (m *MsgAcknowledgement) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgAcknowledgement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgAcknowledgement.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgAcknowledgement) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgAcknowledgement.Merge(m, src) +} +func (m *MsgAcknowledgement) XXX_Size() int { + return m.Size() +} +func (m *MsgAcknowledgement) XXX_DiscardUnknown() { + xxx_messageInfo_MsgAcknowledgement.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgAcknowledgement proto.InternalMessageInfo + +// MsgAcknowledgementResponse defines the Msg/Acknowledgement response type. +type MsgAcknowledgementResponse struct { +} + +func (m *MsgAcknowledgementResponse) Reset() { *m = MsgAcknowledgementResponse{} } +func (m *MsgAcknowledgementResponse) String() string { return proto.CompactTextString(m) } +func (*MsgAcknowledgementResponse) ProtoMessage() {} +func (*MsgAcknowledgementResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_bc4637e0ac3fc7b7, []int{19} +} +func (m *MsgAcknowledgementResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgAcknowledgementResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgAcknowledgementResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgAcknowledgementResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgAcknowledgementResponse.Merge(m, src) +} +func (m *MsgAcknowledgementResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgAcknowledgementResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgAcknowledgementResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgAcknowledgementResponse proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MsgChannelOpenInit)(nil), "ibc.core.channel.v1.MsgChannelOpenInit") + proto.RegisterType((*MsgChannelOpenInitResponse)(nil), "ibc.core.channel.v1.MsgChannelOpenInitResponse") + proto.RegisterType((*MsgChannelOpenTry)(nil), "ibc.core.channel.v1.MsgChannelOpenTry") + proto.RegisterType((*MsgChannelOpenTryResponse)(nil), "ibc.core.channel.v1.MsgChannelOpenTryResponse") + proto.RegisterType((*MsgChannelOpenAck)(nil), "ibc.core.channel.v1.MsgChannelOpenAck") + proto.RegisterType((*MsgChannelOpenAckResponse)(nil), "ibc.core.channel.v1.MsgChannelOpenAckResponse") + proto.RegisterType((*MsgChannelOpenConfirm)(nil), "ibc.core.channel.v1.MsgChannelOpenConfirm") + proto.RegisterType((*MsgChannelOpenConfirmResponse)(nil), "ibc.core.channel.v1.MsgChannelOpenConfirmResponse") + proto.RegisterType((*MsgChannelCloseInit)(nil), "ibc.core.channel.v1.MsgChannelCloseInit") + proto.RegisterType((*MsgChannelCloseInitResponse)(nil), "ibc.core.channel.v1.MsgChannelCloseInitResponse") + proto.RegisterType((*MsgChannelCloseConfirm)(nil), "ibc.core.channel.v1.MsgChannelCloseConfirm") + proto.RegisterType((*MsgChannelCloseConfirmResponse)(nil), "ibc.core.channel.v1.MsgChannelCloseConfirmResponse") + proto.RegisterType((*MsgRecvPacket)(nil), "ibc.core.channel.v1.MsgRecvPacket") + proto.RegisterType((*MsgRecvPacketResponse)(nil), "ibc.core.channel.v1.MsgRecvPacketResponse") + proto.RegisterType((*MsgTimeout)(nil), "ibc.core.channel.v1.MsgTimeout") + proto.RegisterType((*MsgTimeoutResponse)(nil), "ibc.core.channel.v1.MsgTimeoutResponse") + proto.RegisterType((*MsgTimeoutOnClose)(nil), "ibc.core.channel.v1.MsgTimeoutOnClose") + proto.RegisterType((*MsgTimeoutOnCloseResponse)(nil), "ibc.core.channel.v1.MsgTimeoutOnCloseResponse") + proto.RegisterType((*MsgAcknowledgement)(nil), "ibc.core.channel.v1.MsgAcknowledgement") + proto.RegisterType((*MsgAcknowledgementResponse)(nil), "ibc.core.channel.v1.MsgAcknowledgementResponse") +} + +func init() { proto.RegisterFile("ibc/core/channel/v1/tx.proto", fileDescriptor_bc4637e0ac3fc7b7) } + +var fileDescriptor_bc4637e0ac3fc7b7 = []byte{ + // 1110 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x58, 0x3f, 0x6f, 0xdb, 0x46, + 0x14, 0x17, 0x25, 0x59, 0xb6, 0x9f, 0xdd, 0xc4, 0xa1, 0x64, 0x47, 0xa1, 0x6c, 0xd1, 0x25, 0xd0, + 0x44, 0x4d, 0x11, 0x29, 0x76, 0x02, 0xb4, 0x0d, 0xba, 0x58, 0x5a, 0x6a, 0x04, 0x46, 0x0a, 0xc6, + 0xe8, 0x60, 0x14, 0x10, 0xe4, 0xd3, 0x85, 0x22, 0x24, 0xdd, 0xa9, 0x24, 0xad, 0x58, 0xdf, 0xa0, + 0x4b, 0x81, 0xce, 0x9d, 0x32, 0x16, 0xe8, 0x90, 0x0f, 0xd1, 0x25, 0x63, 0xb6, 0x74, 0x22, 0x0a, + 0x7b, 0xc9, 0xac, 0x4f, 0x50, 0xf0, 0x78, 0x22, 0x29, 0x8a, 0xb4, 0xe9, 0xba, 0x16, 0x90, 0x49, + 0x77, 0xf7, 0x7e, 0xf7, 0xee, 0xbd, 0xdf, 0xfb, 0xdd, 0x1f, 0x0a, 0x36, 0xf5, 0x63, 0x54, 0x43, + 0xd4, 0xc0, 0x35, 0xd4, 0x69, 0x11, 0x82, 0x7b, 0xb5, 0xe1, 0x4e, 0xcd, 0x3a, 0xad, 0x0e, 0x0c, + 0x6a, 0x51, 0x31, 0xaf, 0x1f, 0xa3, 0xaa, 0x63, 0xad, 0x72, 0x6b, 0x75, 0xb8, 0x23, 0x15, 0x34, + 0xaa, 0x51, 0x66, 0xaf, 0x39, 0x2d, 0x17, 0x2a, 0xc9, 0xbe, 0xa3, 0x9e, 0x8e, 0x89, 0xe5, 0xf8, + 0x71, 0x5b, 0x1c, 0xf0, 0x79, 0xd4, 0x4a, 0x13, 0xb7, 0x0c, 0xa2, 0x7c, 0x10, 0x40, 0x3c, 0x30, + 0xb5, 0x86, 0x3b, 0xf8, 0x62, 0x80, 0xc9, 0x3e, 0xd1, 0x2d, 0xf1, 0x2b, 0x58, 0x1c, 0x50, 0xc3, + 0x6a, 0xea, 0xed, 0xa2, 0xb0, 0x2d, 0x54, 0x96, 0xeb, 0xe2, 0xd8, 0x96, 0x6f, 0x8d, 0x5a, 0xfd, + 0xde, 0x33, 0x85, 0x1b, 0x14, 0x35, 0xe7, 0xb4, 0xf6, 0xdb, 0xe2, 0x53, 0x00, 0xee, 0xd4, 0xc1, + 0xa7, 0x19, 0x7e, 0x7d, 0x6c, 0xcb, 0x77, 0x5c, 0xbc, 0x6f, 0x53, 0xd4, 0x65, 0xde, 0xd9, 0x6f, + 0x8b, 0xdf, 0xc1, 0x22, 0xef, 0x14, 0x33, 0xdb, 0x42, 0x65, 0x65, 0x77, 0xb3, 0x1a, 0x91, 0x7a, + 0x95, 0x47, 0x56, 0xcf, 0xbe, 0xb3, 0xe5, 0x94, 0x3a, 0x99, 0x22, 0x6e, 0x40, 0xce, 0xd4, 0x35, + 0x82, 0x8d, 0x62, 0xd6, 0x59, 0x4f, 0xe5, 0xbd, 0x67, 0x4b, 0xbf, 0xbc, 0x91, 0x53, 0x1f, 0xdf, + 0xc8, 0x29, 0x65, 0x13, 0xa4, 0xd9, 0xc4, 0x54, 0x6c, 0x0e, 0x28, 0x31, 0xb1, 0xf2, 0x57, 0x16, + 0xee, 0x4c, 0x9b, 0x0f, 0x8d, 0xd1, 0xd5, 0xd2, 0x7e, 0x0e, 0x62, 0x1b, 0x9b, 0xba, 0x81, 0xdb, + 0xcd, 0x99, 0xf4, 0xb7, 0xc6, 0xb6, 0x7c, 0xcf, 0x9d, 0x37, 0x8b, 0x51, 0xd4, 0x35, 0x3e, 0xd8, + 0xf0, 0xd8, 0x20, 0x50, 0x46, 0xf4, 0x84, 0x58, 0xd8, 0x18, 0xb4, 0x0c, 0x6b, 0xd4, 0x44, 0x1d, + 0x6a, 0x62, 0x12, 0x74, 0x9c, 0x61, 0x8e, 0xbf, 0x1c, 0xdb, 0xf2, 0x17, 0x9c, 0xd7, 0x0b, 0xf1, + 0x8a, 0x5a, 0x0a, 0x02, 0x1a, 0xcc, 0xde, 0x88, 0x62, 0x3f, 0x7b, 0x75, 0xf6, 0x55, 0x28, 0x4c, + 0xad, 0x3e, 0xc4, 0x86, 0xa9, 0x53, 0x52, 0x5c, 0x60, 0x31, 0xca, 0x63, 0x5b, 0x2e, 0x45, 0xc4, + 0xc8, 0x51, 0x8a, 0x9a, 0x0f, 0x0e, 0xff, 0xe8, 0x8e, 0x3a, 0x2a, 0x1a, 0x18, 0x94, 0xbe, 0x6a, + 0xea, 0x44, 0xb7, 0x8a, 0xb9, 0x6d, 0xa1, 0xb2, 0x1a, 0x54, 0x91, 0x6f, 0x53, 0xd4, 0x65, 0xd6, + 0x61, 0x42, 0x3d, 0x82, 0x55, 0xd7, 0xd2, 0xc1, 0xba, 0xd6, 0xb1, 0x8a, 0x8b, 0x2c, 0x19, 0x29, + 0x90, 0x8c, 0xbb, 0x21, 0x86, 0x3b, 0xd5, 0xef, 0x19, 0xa2, 0x5e, 0x72, 0x52, 0x19, 0xdb, 0x72, + 0x3e, 0xe8, 0xd7, 0x9d, 0xad, 0xa8, 0x2b, 0xac, 0xeb, 0x22, 0x03, 0x1a, 0x5b, 0x8a, 0xd1, 0x58, + 0x09, 0xee, 0xcd, 0x88, 0xc8, 0x93, 0xd8, 0x87, 0x4c, 0x58, 0x62, 0x7b, 0xa8, 0x3b, 0x8f, 0x9d, + 0x75, 0x04, 0x77, 0x43, 0xda, 0x08, 0x89, 0x48, 0x19, 0xdb, 0x72, 0x39, 0x52, 0x44, 0xbe, 0xbf, + 0xf5, 0x69, 0xf5, 0x4c, 0x7c, 0xc7, 0x55, 0x3e, 0x7b, 0x8d, 0xca, 0xef, 0x80, 0x5b, 0xd0, 0xa6, + 0x65, 0x8c, 0x98, 0x84, 0x56, 0xeb, 0x85, 0xb1, 0x2d, 0xaf, 0x05, 0x0b, 0x64, 0x19, 0x23, 0x45, + 0x5d, 0x62, 0x6d, 0x67, 0xa3, 0x86, 0xcb, 0x9e, 0xbb, 0x91, 0xb2, 0x2f, 0x26, 0x2d, 0xfb, 0x1e, + 0xea, 0x7a, 0x65, 0xff, 0x33, 0x0d, 0xeb, 0xd3, 0xd6, 0x06, 0x25, 0xaf, 0x74, 0xa3, 0x3f, 0x8f, + 0xd2, 0x7b, 0x54, 0xb6, 0x50, 0x97, 0x15, 0x3b, 0x82, 0xca, 0x16, 0xea, 0x4e, 0xa8, 0x74, 0x04, + 0x19, 0xa6, 0x32, 0x7b, 0x23, 0x54, 0x2e, 0xc4, 0x50, 0x29, 0xc3, 0x56, 0x24, 0x59, 0x1e, 0x9d, + 0xbf, 0x0b, 0x90, 0xf7, 0x11, 0x8d, 0x1e, 0x35, 0xf1, 0xbc, 0x6e, 0x28, 0x3f, 0xfa, 0x4c, 0x4c, + 0xf4, 0x5b, 0x50, 0x8a, 0x88, 0xcd, 0x8b, 0xfd, 0x6d, 0x1a, 0x36, 0x42, 0xf6, 0x39, 0x6a, 0x61, + 0xfa, 0x40, 0xcd, 0xfc, 0xc7, 0x03, 0x75, 0xbe, 0x72, 0xd8, 0x86, 0x72, 0x34, 0x61, 0x1e, 0xa7, + 0xb6, 0x00, 0x9f, 0x1d, 0x98, 0x9a, 0x8a, 0xd1, 0xf0, 0x87, 0x16, 0xea, 0x62, 0x4b, 0xfc, 0x16, + 0x72, 0x03, 0xd6, 0x62, 0x4c, 0xae, 0xec, 0x96, 0x22, 0x6f, 0x32, 0x17, 0xcc, 0x2f, 0x32, 0x3e, + 0x41, 0x2c, 0xc0, 0x02, 0x8b, 0x8f, 0x71, 0xba, 0xaa, 0xba, 0x9d, 0x19, 0x0a, 0x32, 0x37, 0x42, + 0x41, 0xdc, 0xbb, 0xe5, 0x2e, 0x3b, 0x3e, 0xfc, 0xfc, 0xbc, 0xcc, 0xff, 0x48, 0x03, 0x1c, 0x98, + 0xda, 0xa1, 0xde, 0xc7, 0xf4, 0xe4, 0x13, 0x4b, 0xfb, 0x39, 0x88, 0x04, 0x9f, 0x5a, 0x4d, 0x13, + 0xff, 0x7c, 0x82, 0x09, 0xc2, 0x4d, 0x03, 0xa3, 0x21, 0xa3, 0x20, 0x1b, 0x7c, 0x2b, 0xcd, 0x62, + 0x14, 0x75, 0xcd, 0x19, 0x7c, 0xc9, 0xc7, 0x1c, 0x5a, 0x12, 0xc8, 0xa8, 0xc0, 0x1e, 0xb5, 0x9c, + 0x29, 0x8f, 0xc0, 0x8f, 0x69, 0x76, 0x21, 0xf3, 0xe1, 0x17, 0x84, 0xe9, 0xeb, 0xff, 0xe7, 0xf1, + 0x6b, 0x70, 0x53, 0x6f, 0x22, 0xc7, 0x3f, 0xdf, 0x78, 0x1b, 0x63, 0x5b, 0x16, 0x83, 0x34, 0x31, + 0xa3, 0xa2, 0xba, 0x5b, 0xd4, 0x8d, 0xe4, 0x26, 0xb7, 0x5e, 0x74, 0x01, 0x16, 0xae, 0x5b, 0x80, + 0xdc, 0x85, 0x37, 0xe4, 0x34, 0xd3, 0x5e, 0x1d, 0x7e, 0x4d, 0xb3, 0xf2, 0xec, 0xa1, 0x2e, 0xa1, + 0xaf, 0x7b, 0xb8, 0xad, 0xe1, 0x3e, 0x26, 0xd7, 0x12, 0x74, 0x05, 0x6e, 0xb7, 0xa6, 0xbd, 0xf1, + 0x92, 0x84, 0x87, 0xfd, 0x92, 0x65, 0x2e, 0x92, 0xfe, 0x7c, 0x0f, 0x3d, 0xf7, 0x4b, 0x25, 0x44, + 0xc7, 0x84, 0xad, 0xdd, 0xb7, 0x4b, 0x90, 0x39, 0x30, 0x35, 0xb1, 0x0b, 0xb7, 0xc3, 0x5f, 0x69, + 0x0f, 0x22, 0x19, 0x9a, 0xfd, 0xea, 0x91, 0x6a, 0x09, 0x81, 0x93, 0x45, 0xc5, 0x0e, 0xdc, 0x0a, + 0x7d, 0x1a, 0xdd, 0x4f, 0xe0, 0xe2, 0xd0, 0x18, 0x49, 0xd5, 0x64, 0xb8, 0x98, 0x95, 0x9c, 0x07, + 0x49, 0x92, 0x95, 0xf6, 0x50, 0x37, 0xd1, 0x4a, 0x81, 0x87, 0x99, 0x68, 0x81, 0x18, 0xf1, 0x28, + 0x7b, 0x98, 0xc0, 0x0b, 0xc7, 0x4a, 0xbb, 0xc9, 0xb1, 0xde, 0xaa, 0x04, 0xd6, 0x66, 0xde, 0x2e, + 0x95, 0x4b, 0xfc, 0x78, 0x48, 0xe9, 0x71, 0x52, 0xa4, 0xb7, 0xde, 0x6b, 0xc8, 0x47, 0xbe, 0x37, + 0x92, 0x38, 0x9a, 0xe4, 0xf9, 0xe4, 0x0a, 0x60, 0x6f, 0xe1, 0x9f, 0x00, 0x02, 0x97, 0xb2, 0x12, + 0xe7, 0xc2, 0xc7, 0x48, 0x0f, 0x2f, 0xc7, 0x78, 0xde, 0x5f, 0xc2, 0xe2, 0xe4, 0xe2, 0x93, 0xe3, + 0xa6, 0x71, 0x80, 0xf4, 0xe0, 0x12, 0x40, 0x50, 0x7b, 0xa1, 0xcb, 0xe0, 0xfe, 0x25, 0x53, 0x39, + 0x2e, 0x5e, 0x7b, 0xd1, 0x47, 0x9e, 0xb3, 0x79, 0xc3, 0xc7, 0x5d, 0x6c, 0x94, 0x21, 0x60, 0xfc, + 0xe6, 0x8d, 0x39, 0x31, 0xea, 0xea, 0xbb, 0xb3, 0xb2, 0xf0, 0xfe, 0xac, 0x2c, 0xfc, 0x73, 0x56, + 0x16, 0x7e, 0x3b, 0x2f, 0xa7, 0xde, 0x9f, 0x97, 0x53, 0x7f, 0x9f, 0x97, 0x53, 0x47, 0xdf, 0x68, + 0xba, 0xd5, 0x39, 0x39, 0xae, 0x22, 0xda, 0xaf, 0x21, 0x6a, 0xf6, 0xa9, 0xc9, 0x7f, 0x1e, 0x99, + 0xed, 0x6e, 0xed, 0xb4, 0xe6, 0xfd, 0x5f, 0xf4, 0xf8, 0xe9, 0xa3, 0xc9, 0x5f, 0x46, 0xd6, 0x68, + 0x80, 0xcd, 0xe3, 0x1c, 0xfb, 0xbb, 0xe8, 0xc9, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xd3, 0x86, + 0x17, 0x79, 0xbd, 0x12, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type MsgClient interface { + // ChannelOpenInit defines a rpc handler method for MsgChannelOpenInit. + ChannelOpenInit(ctx context.Context, in *MsgChannelOpenInit, opts ...grpc.CallOption) (*MsgChannelOpenInitResponse, error) + // ChannelOpenTry defines a rpc handler method for MsgChannelOpenTry. + ChannelOpenTry(ctx context.Context, in *MsgChannelOpenTry, opts ...grpc.CallOption) (*MsgChannelOpenTryResponse, error) + // ChannelOpenAck defines a rpc handler method for MsgChannelOpenAck. + ChannelOpenAck(ctx context.Context, in *MsgChannelOpenAck, opts ...grpc.CallOption) (*MsgChannelOpenAckResponse, error) + // ChannelOpenConfirm defines a rpc handler method for MsgChannelOpenConfirm. + ChannelOpenConfirm(ctx context.Context, in *MsgChannelOpenConfirm, opts ...grpc.CallOption) (*MsgChannelOpenConfirmResponse, error) + // ChannelCloseInit defines a rpc handler method for MsgChannelCloseInit. + ChannelCloseInit(ctx context.Context, in *MsgChannelCloseInit, opts ...grpc.CallOption) (*MsgChannelCloseInitResponse, error) + // ChannelCloseConfirm defines a rpc handler method for MsgChannelCloseConfirm. + ChannelCloseConfirm(ctx context.Context, in *MsgChannelCloseConfirm, opts ...grpc.CallOption) (*MsgChannelCloseConfirmResponse, error) + // RecvPacket defines a rpc handler method for MsgRecvPacket. + RecvPacket(ctx context.Context, in *MsgRecvPacket, opts ...grpc.CallOption) (*MsgRecvPacketResponse, error) + // Timeout defines a rpc handler method for MsgTimeout. + Timeout(ctx context.Context, in *MsgTimeout, opts ...grpc.CallOption) (*MsgTimeoutResponse, error) + // TimeoutOnClose defines a rpc handler method for MsgTimeoutOnClose. + TimeoutOnClose(ctx context.Context, in *MsgTimeoutOnClose, opts ...grpc.CallOption) (*MsgTimeoutOnCloseResponse, error) + // Acknowledgement defines a rpc handler method for MsgAcknowledgement. + Acknowledgement(ctx context.Context, in *MsgAcknowledgement, opts ...grpc.CallOption) (*MsgAcknowledgementResponse, error) +} + +type msgClient struct { + cc grpc1.ClientConn +} + +func NewMsgClient(cc grpc1.ClientConn) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) ChannelOpenInit(ctx context.Context, in *MsgChannelOpenInit, opts ...grpc.CallOption) (*MsgChannelOpenInitResponse, error) { + out := new(MsgChannelOpenInitResponse) + err := c.cc.Invoke(ctx, "/ibc.core.channel.v1.Msg/ChannelOpenInit", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) ChannelOpenTry(ctx context.Context, in *MsgChannelOpenTry, opts ...grpc.CallOption) (*MsgChannelOpenTryResponse, error) { + out := new(MsgChannelOpenTryResponse) + err := c.cc.Invoke(ctx, "/ibc.core.channel.v1.Msg/ChannelOpenTry", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) ChannelOpenAck(ctx context.Context, in *MsgChannelOpenAck, opts ...grpc.CallOption) (*MsgChannelOpenAckResponse, error) { + out := new(MsgChannelOpenAckResponse) + err := c.cc.Invoke(ctx, "/ibc.core.channel.v1.Msg/ChannelOpenAck", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) ChannelOpenConfirm(ctx context.Context, in *MsgChannelOpenConfirm, opts ...grpc.CallOption) (*MsgChannelOpenConfirmResponse, error) { + out := new(MsgChannelOpenConfirmResponse) + err := c.cc.Invoke(ctx, "/ibc.core.channel.v1.Msg/ChannelOpenConfirm", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) ChannelCloseInit(ctx context.Context, in *MsgChannelCloseInit, opts ...grpc.CallOption) (*MsgChannelCloseInitResponse, error) { + out := new(MsgChannelCloseInitResponse) + err := c.cc.Invoke(ctx, "/ibc.core.channel.v1.Msg/ChannelCloseInit", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) ChannelCloseConfirm(ctx context.Context, in *MsgChannelCloseConfirm, opts ...grpc.CallOption) (*MsgChannelCloseConfirmResponse, error) { + out := new(MsgChannelCloseConfirmResponse) + err := c.cc.Invoke(ctx, "/ibc.core.channel.v1.Msg/ChannelCloseConfirm", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) RecvPacket(ctx context.Context, in *MsgRecvPacket, opts ...grpc.CallOption) (*MsgRecvPacketResponse, error) { + out := new(MsgRecvPacketResponse) + err := c.cc.Invoke(ctx, "/ibc.core.channel.v1.Msg/RecvPacket", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) Timeout(ctx context.Context, in *MsgTimeout, opts ...grpc.CallOption) (*MsgTimeoutResponse, error) { + out := new(MsgTimeoutResponse) + err := c.cc.Invoke(ctx, "/ibc.core.channel.v1.Msg/Timeout", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) TimeoutOnClose(ctx context.Context, in *MsgTimeoutOnClose, opts ...grpc.CallOption) (*MsgTimeoutOnCloseResponse, error) { + out := new(MsgTimeoutOnCloseResponse) + err := c.cc.Invoke(ctx, "/ibc.core.channel.v1.Msg/TimeoutOnClose", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) Acknowledgement(ctx context.Context, in *MsgAcknowledgement, opts ...grpc.CallOption) (*MsgAcknowledgementResponse, error) { + out := new(MsgAcknowledgementResponse) + err := c.cc.Invoke(ctx, "/ibc.core.channel.v1.Msg/Acknowledgement", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +type MsgServer interface { + // ChannelOpenInit defines a rpc handler method for MsgChannelOpenInit. + ChannelOpenInit(context.Context, *MsgChannelOpenInit) (*MsgChannelOpenInitResponse, error) + // ChannelOpenTry defines a rpc handler method for MsgChannelOpenTry. + ChannelOpenTry(context.Context, *MsgChannelOpenTry) (*MsgChannelOpenTryResponse, error) + // ChannelOpenAck defines a rpc handler method for MsgChannelOpenAck. + ChannelOpenAck(context.Context, *MsgChannelOpenAck) (*MsgChannelOpenAckResponse, error) + // ChannelOpenConfirm defines a rpc handler method for MsgChannelOpenConfirm. + ChannelOpenConfirm(context.Context, *MsgChannelOpenConfirm) (*MsgChannelOpenConfirmResponse, error) + // ChannelCloseInit defines a rpc handler method for MsgChannelCloseInit. + ChannelCloseInit(context.Context, *MsgChannelCloseInit) (*MsgChannelCloseInitResponse, error) + // ChannelCloseConfirm defines a rpc handler method for MsgChannelCloseConfirm. + ChannelCloseConfirm(context.Context, *MsgChannelCloseConfirm) (*MsgChannelCloseConfirmResponse, error) + // RecvPacket defines a rpc handler method for MsgRecvPacket. + RecvPacket(context.Context, *MsgRecvPacket) (*MsgRecvPacketResponse, error) + // Timeout defines a rpc handler method for MsgTimeout. + Timeout(context.Context, *MsgTimeout) (*MsgTimeoutResponse, error) + // TimeoutOnClose defines a rpc handler method for MsgTimeoutOnClose. + TimeoutOnClose(context.Context, *MsgTimeoutOnClose) (*MsgTimeoutOnCloseResponse, error) + // Acknowledgement defines a rpc handler method for MsgAcknowledgement. + Acknowledgement(context.Context, *MsgAcknowledgement) (*MsgAcknowledgementResponse, error) +} + +// UnimplementedMsgServer can be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (*UnimplementedMsgServer) ChannelOpenInit(ctx context.Context, req *MsgChannelOpenInit) (*MsgChannelOpenInitResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ChannelOpenInit not implemented") +} +func (*UnimplementedMsgServer) ChannelOpenTry(ctx context.Context, req *MsgChannelOpenTry) (*MsgChannelOpenTryResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ChannelOpenTry not implemented") +} +func (*UnimplementedMsgServer) ChannelOpenAck(ctx context.Context, req *MsgChannelOpenAck) (*MsgChannelOpenAckResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ChannelOpenAck not implemented") +} +func (*UnimplementedMsgServer) ChannelOpenConfirm(ctx context.Context, req *MsgChannelOpenConfirm) (*MsgChannelOpenConfirmResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ChannelOpenConfirm not implemented") +} +func (*UnimplementedMsgServer) ChannelCloseInit(ctx context.Context, req *MsgChannelCloseInit) (*MsgChannelCloseInitResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ChannelCloseInit not implemented") +} +func (*UnimplementedMsgServer) ChannelCloseConfirm(ctx context.Context, req *MsgChannelCloseConfirm) (*MsgChannelCloseConfirmResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ChannelCloseConfirm not implemented") +} +func (*UnimplementedMsgServer) RecvPacket(ctx context.Context, req *MsgRecvPacket) (*MsgRecvPacketResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RecvPacket not implemented") +} +func (*UnimplementedMsgServer) Timeout(ctx context.Context, req *MsgTimeout) (*MsgTimeoutResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Timeout not implemented") +} +func (*UnimplementedMsgServer) TimeoutOnClose(ctx context.Context, req *MsgTimeoutOnClose) (*MsgTimeoutOnCloseResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TimeoutOnClose not implemented") +} +func (*UnimplementedMsgServer) Acknowledgement(ctx context.Context, req *MsgAcknowledgement) (*MsgAcknowledgementResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Acknowledgement not implemented") +} + +func RegisterMsgServer(s grpc1.Server, srv MsgServer) { + s.RegisterService(&_Msg_serviceDesc, srv) +} + +func _Msg_ChannelOpenInit_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgChannelOpenInit) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).ChannelOpenInit(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.core.channel.v1.Msg/ChannelOpenInit", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).ChannelOpenInit(ctx, req.(*MsgChannelOpenInit)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_ChannelOpenTry_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgChannelOpenTry) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).ChannelOpenTry(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.core.channel.v1.Msg/ChannelOpenTry", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).ChannelOpenTry(ctx, req.(*MsgChannelOpenTry)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_ChannelOpenAck_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgChannelOpenAck) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).ChannelOpenAck(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.core.channel.v1.Msg/ChannelOpenAck", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).ChannelOpenAck(ctx, req.(*MsgChannelOpenAck)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_ChannelOpenConfirm_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgChannelOpenConfirm) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).ChannelOpenConfirm(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.core.channel.v1.Msg/ChannelOpenConfirm", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).ChannelOpenConfirm(ctx, req.(*MsgChannelOpenConfirm)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_ChannelCloseInit_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgChannelCloseInit) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).ChannelCloseInit(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.core.channel.v1.Msg/ChannelCloseInit", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).ChannelCloseInit(ctx, req.(*MsgChannelCloseInit)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_ChannelCloseConfirm_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgChannelCloseConfirm) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).ChannelCloseConfirm(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.core.channel.v1.Msg/ChannelCloseConfirm", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).ChannelCloseConfirm(ctx, req.(*MsgChannelCloseConfirm)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_RecvPacket_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgRecvPacket) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).RecvPacket(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.core.channel.v1.Msg/RecvPacket", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).RecvPacket(ctx, req.(*MsgRecvPacket)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_Timeout_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgTimeout) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).Timeout(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.core.channel.v1.Msg/Timeout", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).Timeout(ctx, req.(*MsgTimeout)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_TimeoutOnClose_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgTimeoutOnClose) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).TimeoutOnClose(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.core.channel.v1.Msg/TimeoutOnClose", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).TimeoutOnClose(ctx, req.(*MsgTimeoutOnClose)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_Acknowledgement_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgAcknowledgement) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).Acknowledgement(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.core.channel.v1.Msg/Acknowledgement", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).Acknowledgement(ctx, req.(*MsgAcknowledgement)) + } + return interceptor(ctx, in, info, handler) +} + +var _Msg_serviceDesc = grpc.ServiceDesc{ + ServiceName: "ibc.core.channel.v1.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ChannelOpenInit", + Handler: _Msg_ChannelOpenInit_Handler, + }, + { + MethodName: "ChannelOpenTry", + Handler: _Msg_ChannelOpenTry_Handler, + }, + { + MethodName: "ChannelOpenAck", + Handler: _Msg_ChannelOpenAck_Handler, + }, + { + MethodName: "ChannelOpenConfirm", + Handler: _Msg_ChannelOpenConfirm_Handler, + }, + { + MethodName: "ChannelCloseInit", + Handler: _Msg_ChannelCloseInit_Handler, + }, + { + MethodName: "ChannelCloseConfirm", + Handler: _Msg_ChannelCloseConfirm_Handler, + }, + { + MethodName: "RecvPacket", + Handler: _Msg_RecvPacket_Handler, + }, + { + MethodName: "Timeout", + Handler: _Msg_Timeout_Handler, + }, + { + MethodName: "TimeoutOnClose", + Handler: _Msg_TimeoutOnClose_Handler, + }, + { + MethodName: "Acknowledgement", + Handler: _Msg_Acknowledgement_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "ibc/core/channel/v1/tx.proto", +} + +func (m *MsgChannelOpenInit) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgChannelOpenInit) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgChannelOpenInit) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Signer) > 0 { + i -= len(m.Signer) + copy(dAtA[i:], m.Signer) + i = encodeVarintTx(dAtA, i, uint64(len(m.Signer))) + i-- + dAtA[i] = 0x22 + } + { + size, err := m.Channel.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.ChannelId) > 0 { + i -= len(m.ChannelId) + copy(dAtA[i:], m.ChannelId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ChannelId))) + i-- + dAtA[i] = 0x12 + } + if len(m.PortId) > 0 { + i -= len(m.PortId) + copy(dAtA[i:], m.PortId) + i = encodeVarintTx(dAtA, i, uint64(len(m.PortId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgChannelOpenInitResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgChannelOpenInitResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgChannelOpenInitResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgChannelOpenTry) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgChannelOpenTry) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgChannelOpenTry) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Signer) > 0 { + i -= len(m.Signer) + copy(dAtA[i:], m.Signer) + i = encodeVarintTx(dAtA, i, uint64(len(m.Signer))) + i-- + dAtA[i] = 0x42 + } + { + size, err := m.ProofHeight.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + if len(m.ProofInit) > 0 { + i -= len(m.ProofInit) + copy(dAtA[i:], m.ProofInit) + i = encodeVarintTx(dAtA, i, uint64(len(m.ProofInit))) + i-- + dAtA[i] = 0x32 + } + if len(m.CounterpartyVersion) > 0 { + i -= len(m.CounterpartyVersion) + copy(dAtA[i:], m.CounterpartyVersion) + i = encodeVarintTx(dAtA, i, uint64(len(m.CounterpartyVersion))) + i-- + dAtA[i] = 0x2a + } + { + size, err := m.Channel.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + if len(m.CounterpartyChosenChannelId) > 0 { + i -= len(m.CounterpartyChosenChannelId) + copy(dAtA[i:], m.CounterpartyChosenChannelId) + i = encodeVarintTx(dAtA, i, uint64(len(m.CounterpartyChosenChannelId))) + i-- + dAtA[i] = 0x1a + } + if len(m.DesiredChannelId) > 0 { + i -= len(m.DesiredChannelId) + copy(dAtA[i:], m.DesiredChannelId) + i = encodeVarintTx(dAtA, i, uint64(len(m.DesiredChannelId))) + i-- + dAtA[i] = 0x12 + } + if len(m.PortId) > 0 { + i -= len(m.PortId) + copy(dAtA[i:], m.PortId) + i = encodeVarintTx(dAtA, i, uint64(len(m.PortId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgChannelOpenTryResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgChannelOpenTryResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgChannelOpenTryResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgChannelOpenAck) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgChannelOpenAck) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgChannelOpenAck) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Signer) > 0 { + i -= len(m.Signer) + copy(dAtA[i:], m.Signer) + i = encodeVarintTx(dAtA, i, uint64(len(m.Signer))) + i-- + dAtA[i] = 0x3a + } + { + size, err := m.ProofHeight.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + if len(m.ProofTry) > 0 { + i -= len(m.ProofTry) + copy(dAtA[i:], m.ProofTry) + i = encodeVarintTx(dAtA, i, uint64(len(m.ProofTry))) + i-- + dAtA[i] = 0x2a + } + if len(m.CounterpartyVersion) > 0 { + i -= len(m.CounterpartyVersion) + copy(dAtA[i:], m.CounterpartyVersion) + i = encodeVarintTx(dAtA, i, uint64(len(m.CounterpartyVersion))) + i-- + dAtA[i] = 0x22 + } + if len(m.CounterpartyChannelId) > 0 { + i -= len(m.CounterpartyChannelId) + copy(dAtA[i:], m.CounterpartyChannelId) + i = encodeVarintTx(dAtA, i, uint64(len(m.CounterpartyChannelId))) + i-- + dAtA[i] = 0x1a + } + if len(m.ChannelId) > 0 { + i -= len(m.ChannelId) + copy(dAtA[i:], m.ChannelId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ChannelId))) + i-- + dAtA[i] = 0x12 + } + if len(m.PortId) > 0 { + i -= len(m.PortId) + copy(dAtA[i:], m.PortId) + i = encodeVarintTx(dAtA, i, uint64(len(m.PortId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgChannelOpenAckResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgChannelOpenAckResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgChannelOpenAckResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgChannelOpenConfirm) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgChannelOpenConfirm) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgChannelOpenConfirm) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Signer) > 0 { + i -= len(m.Signer) + copy(dAtA[i:], m.Signer) + i = encodeVarintTx(dAtA, i, uint64(len(m.Signer))) + i-- + dAtA[i] = 0x2a + } + { + size, err := m.ProofHeight.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + if len(m.ProofAck) > 0 { + i -= len(m.ProofAck) + copy(dAtA[i:], m.ProofAck) + i = encodeVarintTx(dAtA, i, uint64(len(m.ProofAck))) + i-- + dAtA[i] = 0x1a + } + if len(m.ChannelId) > 0 { + i -= len(m.ChannelId) + copy(dAtA[i:], m.ChannelId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ChannelId))) + i-- + dAtA[i] = 0x12 + } + if len(m.PortId) > 0 { + i -= len(m.PortId) + copy(dAtA[i:], m.PortId) + i = encodeVarintTx(dAtA, i, uint64(len(m.PortId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgChannelOpenConfirmResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgChannelOpenConfirmResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgChannelOpenConfirmResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgChannelCloseInit) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgChannelCloseInit) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgChannelCloseInit) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Signer) > 0 { + i -= len(m.Signer) + copy(dAtA[i:], m.Signer) + i = encodeVarintTx(dAtA, i, uint64(len(m.Signer))) + i-- + dAtA[i] = 0x1a + } + if len(m.ChannelId) > 0 { + i -= len(m.ChannelId) + copy(dAtA[i:], m.ChannelId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ChannelId))) + i-- + dAtA[i] = 0x12 + } + if len(m.PortId) > 0 { + i -= len(m.PortId) + copy(dAtA[i:], m.PortId) + i = encodeVarintTx(dAtA, i, uint64(len(m.PortId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgChannelCloseInitResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgChannelCloseInitResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgChannelCloseInitResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgChannelCloseConfirm) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgChannelCloseConfirm) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgChannelCloseConfirm) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Signer) > 0 { + i -= len(m.Signer) + copy(dAtA[i:], m.Signer) + i = encodeVarintTx(dAtA, i, uint64(len(m.Signer))) + i-- + dAtA[i] = 0x2a + } + { + size, err := m.ProofHeight.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + if len(m.ProofInit) > 0 { + i -= len(m.ProofInit) + copy(dAtA[i:], m.ProofInit) + i = encodeVarintTx(dAtA, i, uint64(len(m.ProofInit))) + i-- + dAtA[i] = 0x1a + } + if len(m.ChannelId) > 0 { + i -= len(m.ChannelId) + copy(dAtA[i:], m.ChannelId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ChannelId))) + i-- + dAtA[i] = 0x12 + } + if len(m.PortId) > 0 { + i -= len(m.PortId) + copy(dAtA[i:], m.PortId) + i = encodeVarintTx(dAtA, i, uint64(len(m.PortId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgChannelCloseConfirmResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgChannelCloseConfirmResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgChannelCloseConfirmResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgRecvPacket) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRecvPacket) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRecvPacket) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Signer) > 0 { + i -= len(m.Signer) + copy(dAtA[i:], m.Signer) + i = encodeVarintTx(dAtA, i, uint64(len(m.Signer))) + i-- + dAtA[i] = 0x22 + } + { + size, err := m.ProofHeight.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.Proof) > 0 { + i -= len(m.Proof) + copy(dAtA[i:], m.Proof) + i = encodeVarintTx(dAtA, i, uint64(len(m.Proof))) + i-- + dAtA[i] = 0x12 + } + { + size, err := m.Packet.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *MsgRecvPacketResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRecvPacketResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRecvPacketResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgTimeout) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgTimeout) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgTimeout) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Signer) > 0 { + i -= len(m.Signer) + copy(dAtA[i:], m.Signer) + i = encodeVarintTx(dAtA, i, uint64(len(m.Signer))) + i-- + dAtA[i] = 0x2a + } + if m.NextSequenceRecv != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.NextSequenceRecv)) + i-- + dAtA[i] = 0x20 + } + { + size, err := m.ProofHeight.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.Proof) > 0 { + i -= len(m.Proof) + copy(dAtA[i:], m.Proof) + i = encodeVarintTx(dAtA, i, uint64(len(m.Proof))) + i-- + dAtA[i] = 0x12 + } + { + size, err := m.Packet.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *MsgTimeoutResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgTimeoutResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgTimeoutResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgTimeoutOnClose) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgTimeoutOnClose) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgTimeoutOnClose) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Signer) > 0 { + i -= len(m.Signer) + copy(dAtA[i:], m.Signer) + i = encodeVarintTx(dAtA, i, uint64(len(m.Signer))) + i-- + dAtA[i] = 0x32 + } + if m.NextSequenceRecv != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.NextSequenceRecv)) + i-- + dAtA[i] = 0x28 + } + { + size, err := m.ProofHeight.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + if len(m.ProofClose) > 0 { + i -= len(m.ProofClose) + copy(dAtA[i:], m.ProofClose) + i = encodeVarintTx(dAtA, i, uint64(len(m.ProofClose))) + i-- + dAtA[i] = 0x1a + } + if len(m.Proof) > 0 { + i -= len(m.Proof) + copy(dAtA[i:], m.Proof) + i = encodeVarintTx(dAtA, i, uint64(len(m.Proof))) + i-- + dAtA[i] = 0x12 + } + { + size, err := m.Packet.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *MsgTimeoutOnCloseResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgTimeoutOnCloseResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgTimeoutOnCloseResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgAcknowledgement) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgAcknowledgement) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgAcknowledgement) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Signer) > 0 { + i -= len(m.Signer) + copy(dAtA[i:], m.Signer) + i = encodeVarintTx(dAtA, i, uint64(len(m.Signer))) + i-- + dAtA[i] = 0x2a + } + { + size, err := m.ProofHeight.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + if len(m.Proof) > 0 { + i -= len(m.Proof) + copy(dAtA[i:], m.Proof) + i = encodeVarintTx(dAtA, i, uint64(len(m.Proof))) + i-- + dAtA[i] = 0x1a + } + if len(m.Acknowledgement) > 0 { + i -= len(m.Acknowledgement) + copy(dAtA[i:], m.Acknowledgement) + i = encodeVarintTx(dAtA, i, uint64(len(m.Acknowledgement))) + i-- + dAtA[i] = 0x12 + } + { + size, err := m.Packet.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *MsgAcknowledgementResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgAcknowledgementResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgAcknowledgementResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintTx(dAtA []byte, offset int, v uint64) int { + offset -= sovTx(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MsgChannelOpenInit) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.PortId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ChannelId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Channel.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.Signer) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgChannelOpenInitResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgChannelOpenTry) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.PortId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.DesiredChannelId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.CounterpartyChosenChannelId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Channel.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.CounterpartyVersion) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ProofInit) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.ProofHeight.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.Signer) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgChannelOpenTryResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgChannelOpenAck) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.PortId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ChannelId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.CounterpartyChannelId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.CounterpartyVersion) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ProofTry) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.ProofHeight.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.Signer) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgChannelOpenAckResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgChannelOpenConfirm) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.PortId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ChannelId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ProofAck) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.ProofHeight.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.Signer) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgChannelOpenConfirmResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgChannelCloseInit) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.PortId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ChannelId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Signer) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgChannelCloseInitResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgChannelCloseConfirm) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.PortId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ChannelId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ProofInit) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.ProofHeight.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.Signer) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgChannelCloseConfirmResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgRecvPacket) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Packet.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.Proof) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.ProofHeight.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.Signer) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgRecvPacketResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgTimeout) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Packet.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.Proof) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.ProofHeight.Size() + n += 1 + l + sovTx(uint64(l)) + if m.NextSequenceRecv != 0 { + n += 1 + sovTx(uint64(m.NextSequenceRecv)) + } + l = len(m.Signer) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgTimeoutResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgTimeoutOnClose) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Packet.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.Proof) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ProofClose) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.ProofHeight.Size() + n += 1 + l + sovTx(uint64(l)) + if m.NextSequenceRecv != 0 { + n += 1 + sovTx(uint64(m.NextSequenceRecv)) + } + l = len(m.Signer) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgTimeoutOnCloseResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgAcknowledgement) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Packet.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.Acknowledgement) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Proof) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.ProofHeight.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.Signer) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgAcknowledgementResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovTx(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozTx(x uint64) (n int) { + return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MsgChannelOpenInit) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgChannelOpenInit: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgChannelOpenInit: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PortId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PortId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Channel", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Channel.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Signer = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgChannelOpenInitResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgChannelOpenInitResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgChannelOpenInitResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgChannelOpenTry) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgChannelOpenTry: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgChannelOpenTry: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PortId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PortId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DesiredChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DesiredChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CounterpartyChosenChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CounterpartyChosenChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Channel", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Channel.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CounterpartyVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CounterpartyVersion = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofInit", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProofInit = append(m.ProofInit[:0], dAtA[iNdEx:postIndex]...) + if m.ProofInit == nil { + m.ProofInit = []byte{} + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ProofHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Signer = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgChannelOpenTryResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgChannelOpenTryResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgChannelOpenTryResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgChannelOpenAck) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgChannelOpenAck: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgChannelOpenAck: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PortId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PortId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CounterpartyChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CounterpartyChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CounterpartyVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CounterpartyVersion = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofTry", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProofTry = append(m.ProofTry[:0], dAtA[iNdEx:postIndex]...) + if m.ProofTry == nil { + m.ProofTry = []byte{} + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ProofHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Signer = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgChannelOpenAckResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgChannelOpenAckResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgChannelOpenAckResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgChannelOpenConfirm) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgChannelOpenConfirm: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgChannelOpenConfirm: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PortId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PortId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofAck", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProofAck = append(m.ProofAck[:0], dAtA[iNdEx:postIndex]...) + if m.ProofAck == nil { + m.ProofAck = []byte{} + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ProofHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Signer = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgChannelOpenConfirmResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgChannelOpenConfirmResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgChannelOpenConfirmResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgChannelCloseInit) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgChannelCloseInit: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgChannelCloseInit: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PortId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PortId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Signer = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgChannelCloseInitResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgChannelCloseInitResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgChannelCloseInitResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgChannelCloseConfirm) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgChannelCloseConfirm: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgChannelCloseConfirm: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PortId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PortId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofInit", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProofInit = append(m.ProofInit[:0], dAtA[iNdEx:postIndex]...) + if m.ProofInit == nil { + m.ProofInit = []byte{} + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ProofHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Signer = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgChannelCloseConfirmResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgChannelCloseConfirmResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgChannelCloseConfirmResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRecvPacket) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRecvPacket: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRecvPacket: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Packet", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Packet.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Proof", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Proof = append(m.Proof[:0], dAtA[iNdEx:postIndex]...) + if m.Proof == nil { + m.Proof = []byte{} + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ProofHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Signer = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRecvPacketResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRecvPacketResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRecvPacketResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgTimeout) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgTimeout: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgTimeout: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Packet", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Packet.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Proof", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Proof = append(m.Proof[:0], dAtA[iNdEx:postIndex]...) + if m.Proof == nil { + m.Proof = []byte{} + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ProofHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NextSequenceRecv", wireType) + } + m.NextSequenceRecv = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NextSequenceRecv |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Signer = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgTimeoutResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgTimeoutResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgTimeoutResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgTimeoutOnClose) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgTimeoutOnClose: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgTimeoutOnClose: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Packet", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Packet.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Proof", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Proof = append(m.Proof[:0], dAtA[iNdEx:postIndex]...) + if m.Proof == nil { + m.Proof = []byte{} + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofClose", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProofClose = append(m.ProofClose[:0], dAtA[iNdEx:postIndex]...) + if m.ProofClose == nil { + m.ProofClose = []byte{} + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ProofHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NextSequenceRecv", wireType) + } + m.NextSequenceRecv = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NextSequenceRecv |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Signer = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgTimeoutOnCloseResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgTimeoutOnCloseResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgTimeoutOnCloseResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgAcknowledgement) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgAcknowledgement: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgAcknowledgement: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Packet", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Packet.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Acknowledgement", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Acknowledgement = append(m.Acknowledgement[:0], dAtA[iNdEx:postIndex]...) + if m.Acknowledgement == nil { + m.Acknowledgement = []byte{} + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Proof", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Proof = append(m.Proof[:0], dAtA[iNdEx:postIndex]...) + if m.Proof == nil { + m.Proof = []byte{} + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ProofHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Signer = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgAcknowledgementResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgAcknowledgementResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgAcknowledgementResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipTx(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthTx + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupTx + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthTx + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthTx = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTx = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupTx = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/staking/types/staking.pb.go b/x/staking/types/staking.pb.go index a5e7693f5d..554851aa3a 100644 --- a/x/staking/types/staking.pb.go +++ b/x/staking/types/staking.pb.go @@ -1094,119 +1094,120 @@ func init() { } var fileDescriptor_64c30c6cf92913c9 = []byte{ - // 1790 bytes of a gzipped FileDescriptorProto + // 1796 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x58, 0x4d, 0x6c, 0x23, 0x49, 0x15, 0x76, 0x3b, 0x5e, 0xc7, 0x7e, 0x4e, 0xe2, 0xa4, 0x26, 0x33, 0xeb, 0x98, 0xc1, 0xed, 0x6d, - 0x96, 0x25, 0xa0, 0x5d, 0x87, 0x09, 0x68, 0x11, 0xb9, 0xc0, 0x38, 0xce, 0x10, 0x6b, 0x97, 0x21, - 0x74, 0x32, 0x41, 0x82, 0x15, 0x56, 0xb9, 0xbb, 0xe2, 0x34, 0x71, 0x77, 0x9b, 0xae, 0xf2, 0x10, - 0x4b, 0x7b, 0xe0, 0xb8, 0x0c, 0x42, 0x2c, 0xb7, 0xbd, 0x0c, 0x1a, 0x69, 0xaf, 0x48, 0x5c, 0x10, - 0x57, 0xae, 0x0b, 0x5c, 0x86, 0x1b, 0x42, 0xc8, 0xa0, 0x99, 0x0b, 0xe2, 0x84, 0x7c, 0x40, 0xdc, - 0x40, 0xf5, 0xd3, 0x3f, 0x69, 0xc7, 0x33, 0xe3, 0xd1, 0x1e, 0x46, 0x62, 0x2f, 0x89, 0xeb, 0xd5, - 0xfb, 0xa9, 0xf7, 0xbd, 0x9f, 0x7a, 0xd5, 0xf0, 0xaa, 0xe5, 0x53, 0xd7, 0xa7, 0x5b, 0x94, 0xe1, - 0x33, 0xc7, 0xeb, 0x6d, 0xdd, 0xbd, 0xd1, 0x25, 0x0c, 0xdf, 0x08, 0xd7, 0x8d, 0x41, 0xe0, 0x33, - 0x1f, 0x5d, 0x93, 0x5c, 0x8d, 0x90, 0xaa, 0xb8, 0xaa, 0xeb, 0x3d, 0xbf, 0xe7, 0x0b, 0x96, 0x2d, - 0xfe, 0x4b, 0x72, 0x57, 0x37, 0x24, 0x77, 0x47, 0x6e, 0x28, 0x51, 0xb9, 0x75, 0x9d, 0x11, 0xcf, - 0x26, 0x81, 0xeb, 0x78, 0x6c, 0x8b, 0x8d, 0x06, 0x84, 0xca, 0xbf, 0x6a, 0x57, 0xef, 0xf9, 0x7e, - 0xaf, 0x4f, 0xb6, 0xc4, 0xaa, 0x3b, 0x3c, 0xd9, 0x62, 0x8e, 0x4b, 0x28, 0xc3, 0xee, 0x40, 0x31, - 0xd4, 0xd2, 0x0c, 0xf6, 0x30, 0xc0, 0xcc, 0xf1, 0xbd, 0x70, 0x5f, 0x79, 0xd3, 0xc5, 0x94, 0x44, - 0xae, 0x58, 0xbe, 0x13, 0xee, 0x6f, 0xa4, 0xe5, 0xb1, 0x37, 0x92, 0x5b, 0xc6, 0x4f, 0x34, 0x58, - 0xd9, 0x77, 0x28, 0xf3, 0x03, 0xc7, 0xc2, 0xfd, 0xb6, 0x77, 0xe2, 0xa3, 0x37, 0x21, 0x7f, 0x4a, - 0xb0, 0x4d, 0x82, 0x8a, 0x56, 0xd7, 0x36, 0x4b, 0xdb, 0x95, 0x46, 0x7c, 0xfa, 0x86, 0x3c, 0xf7, - 0xbe, 0xd8, 0x6f, 0xe6, 0x3e, 0x1a, 0xeb, 0x19, 0x53, 0x71, 0xa3, 0xaf, 0x41, 0xfe, 0x2e, 0xee, - 0x53, 0xc2, 0x2a, 0xd9, 0xfa, 0xc2, 0x66, 0x69, 0xfb, 0x95, 0xc6, 0xe5, 0xf0, 0x35, 0x8e, 0x71, - 0xdf, 0xb1, 0x31, 0xf3, 0x23, 0x05, 0x52, 0xcc, 0xf8, 0x75, 0x16, 0xca, 0xbb, 0xbe, 0xeb, 0x3a, - 0x94, 0x3a, 0xbe, 0x67, 0x62, 0x46, 0x28, 0x6a, 0x42, 0x2e, 0xc0, 0x8c, 0x88, 0xa3, 0x14, 0x9b, - 0x0d, 0xce, 0xff, 0x97, 0xb1, 0xfe, 0x5a, 0xcf, 0x61, 0xa7, 0xc3, 0x6e, 0xc3, 0xf2, 0x5d, 0x05, - 0xb4, 0xfa, 0xf7, 0x06, 0xb5, 0xcf, 0x14, 0xb6, 0x2d, 0x62, 0x99, 0x42, 0x16, 0xbd, 0x03, 0x05, - 0x17, 0x9f, 0x77, 0x84, 0x9e, 0xac, 0xd0, 0x73, 0x73, 0x3e, 0x3d, 0x93, 0xb1, 0x5e, 0x1e, 0x61, - 0xb7, 0xbf, 0x63, 0x84, 0x7a, 0x0c, 0x73, 0xd1, 0xc5, 0xe7, 0xfc, 0x88, 0x68, 0x00, 0x65, 0x4e, - 0xb5, 0x4e, 0xb1, 0xd7, 0x23, 0xd2, 0xc8, 0x82, 0x30, 0xb2, 0x3f, 0xb7, 0x91, 0x6b, 0xb1, 0x91, - 0x84, 0x3a, 0xc3, 0x5c, 0x76, 0xf1, 0xf9, 0xae, 0x20, 0x70, 0x8b, 0x3b, 0x85, 0x0f, 0x1e, 0xe8, - 0x99, 0x7f, 0x3c, 0xd0, 0x35, 0xe3, 0x4f, 0x1a, 0x40, 0x8c, 0x18, 0x7a, 0x07, 0x56, 0xad, 0x68, - 0x25, 0x64, 0xa9, 0x8a, 0xe1, 0xe7, 0x66, 0xc5, 0x22, 0x85, 0x77, 0xb3, 0xc0, 0x0f, 0xfd, 0x70, - 0xac, 0x6b, 0x66, 0xd9, 0x4a, 0x85, 0xe2, 0x7b, 0x50, 0x1a, 0x0e, 0x6c, 0xcc, 0x48, 0x87, 0xe7, - 0xa7, 0x40, 0xb2, 0xb4, 0x5d, 0x6d, 0xc8, 0xdc, 0x6a, 0x84, 0xb9, 0xd5, 0x38, 0x0a, 0x93, 0xb7, - 0x59, 0xe3, 0xba, 0x26, 0x63, 0x1d, 0x49, 0xb7, 0x12, 0xc2, 0xc6, 0xfb, 0x7f, 0xd3, 0x35, 0x13, - 0x24, 0x85, 0x0b, 0x24, 0x7c, 0xfa, 0xbd, 0x06, 0xa5, 0x16, 0xa1, 0x56, 0xe0, 0x0c, 0x78, 0x8a, - 0xa3, 0x0a, 0x2c, 0xba, 0xbe, 0xe7, 0x9c, 0xa9, 0x7c, 0x2c, 0x9a, 0xe1, 0x12, 0x55, 0xa1, 0xe0, - 0xd8, 0xc4, 0x63, 0x0e, 0x1b, 0xc9, 0xb8, 0x9a, 0xd1, 0x9a, 0x4b, 0xfd, 0x88, 0x74, 0xa9, 0x13, - 0x46, 0xc3, 0x0c, 0x97, 0xe8, 0x16, 0xac, 0x52, 0x62, 0x0d, 0x03, 0x87, 0x8d, 0x3a, 0x96, 0xef, - 0x31, 0x6c, 0xb1, 0x4a, 0x4e, 0x04, 0xec, 0x53, 0x93, 0xb1, 0xfe, 0xb2, 0x3c, 0x6b, 0x9a, 0xc3, - 0x30, 0xcb, 0x21, 0x69, 0x57, 0x52, 0xb8, 0x05, 0x9b, 0x30, 0xec, 0xf4, 0x69, 0xe5, 0x25, 0x69, - 0x41, 0x2d, 0x13, 0xbe, 0xfc, 0x72, 0x11, 0x8a, 0x51, 0xb6, 0x73, 0xcb, 0xfe, 0x80, 0x04, 0xfc, - 0x77, 0x07, 0xdb, 0x76, 0x40, 0x28, 0x55, 0x79, 0x9d, 0xb0, 0x9c, 0xe6, 0x30, 0xcc, 0x72, 0x48, - 0xba, 0x29, 0x29, 0xe8, 0x84, 0x87, 0xd9, 0xa3, 0xc4, 0xa3, 0x43, 0xda, 0x19, 0x0c, 0xbb, 0x67, - 0x64, 0xa4, 0xa2, 0xb1, 0x3e, 0x15, 0x8d, 0x9b, 0xde, 0xa8, 0xf9, 0xd9, 0x58, 0x7b, 0x5a, 0xce, - 0xf8, 0xc3, 0x6f, 0xde, 0xc8, 0x1f, 0x0c, 0xbb, 0x6f, 0x91, 0x11, 0x0f, 0xb8, 0xda, 0x3c, 0x10, - 0x7b, 0xe8, 0x1a, 0xe4, 0x7f, 0x80, 0x9d, 0x3e, 0xb1, 0x05, 0x84, 0x05, 0x53, 0xad, 0xd0, 0x0e, - 0xe4, 0x29, 0xc3, 0x6c, 0x48, 0x05, 0x6e, 0x2b, 0xdb, 0xc6, 0xac, 0xe4, 0x6a, 0xfa, 0x9e, 0x7d, - 0x28, 0x38, 0x4d, 0x25, 0x81, 0x6e, 0x41, 0x9e, 0xf9, 0x67, 0xc4, 0x53, 0xa0, 0xcd, 0x55, 0xd1, - 0x6d, 0x8f, 0x99, 0x4a, 0x1a, 0x31, 0x58, 0xb5, 0x49, 0x9f, 0xf4, 0x04, 0x54, 0xf4, 0x14, 0x07, - 0x84, 0x56, 0xf2, 0x42, 0x63, 0x7b, 0xee, 0xb2, 0x53, 0xd8, 0xa4, 0xf5, 0x19, 0x66, 0x39, 0x22, - 0x1d, 0x0a, 0x0a, 0x7a, 0x0b, 0x4a, 0x76, 0x9c, 0x9a, 0x95, 0x45, 0x01, 0xfa, 0x67, 0x66, 0xb9, - 0x9f, 0xc8, 0x62, 0xd5, 0xe9, 0x92, 0xd2, 0x3c, 0x1d, 0x86, 0x5e, 0xd7, 0xf7, 0x6c, 0xc7, 0xeb, - 0x75, 0x4e, 0x89, 0xd3, 0x3b, 0x65, 0x95, 0x42, 0x5d, 0xdb, 0x5c, 0x48, 0xa6, 0x43, 0x9a, 0xc3, - 0x30, 0xcb, 0x11, 0x69, 0x5f, 0x50, 0x90, 0x0d, 0x2b, 0x31, 0x97, 0x28, 0xcd, 0xe2, 0x53, 0x4b, - 0xf3, 0x15, 0x55, 0x9a, 0x57, 0xd3, 0x56, 0xe2, 0xea, 0x5c, 0x8e, 0x88, 0x5c, 0x0c, 0xed, 0x03, - 0xc4, 0x0d, 0xa1, 0x02, 0xc2, 0x82, 0xf1, 0xf4, 0xae, 0xa2, 0x1c, 0x4f, 0xc8, 0xa2, 0x77, 0xe1, - 0x8a, 0xeb, 0x78, 0x1d, 0x4a, 0xfa, 0x27, 0x1d, 0x05, 0x30, 0x57, 0x59, 0x12, 0xd1, 0x7b, 0x7b, - 0xbe, 0x7c, 0x98, 0x8c, 0xf5, 0xaa, 0x6a, 0x9a, 0xd3, 0x2a, 0x0d, 0x73, 0xcd, 0x75, 0xbc, 0x43, - 0xd2, 0x3f, 0x69, 0x45, 0xb4, 0x9d, 0xa5, 0xf7, 0x1e, 0xe8, 0x19, 0x55, 0xa0, 0x19, 0xe3, 0x4d, - 0x58, 0x3a, 0xc6, 0x7d, 0x55, 0x58, 0x84, 0xa2, 0xeb, 0x50, 0xc4, 0xe1, 0xa2, 0xa2, 0xd5, 0x17, - 0x36, 0x8b, 0x66, 0x4c, 0x90, 0x85, 0xfd, 0xe3, 0xbf, 0xd6, 0x35, 0xe3, 0x57, 0x1a, 0xe4, 0x5b, - 0xc7, 0x07, 0xd8, 0x09, 0x50, 0x1b, 0xd6, 0xe2, 0xcc, 0xb9, 0x58, 0xd6, 0xd7, 0x27, 0x63, 0xbd, - 0x92, 0x4e, 0xae, 0xa8, 0xae, 0xe3, 0x04, 0x0e, 0x0b, 0xbb, 0x0d, 0x6b, 0x77, 0xc3, 0x6e, 0x11, - 0xa9, 0xca, 0xa6, 0x55, 0x4d, 0xb1, 0x18, 0xe6, 0x6a, 0x44, 0x53, 0xaa, 0x52, 0x6e, 0xee, 0xc1, - 0xa2, 0x3c, 0x2d, 0x45, 0x3b, 0xf0, 0xd2, 0x80, 0xff, 0x10, 0xde, 0x95, 0xb6, 0x6b, 0x33, 0x93, - 0x57, 0xf0, 0xab, 0xf0, 0x49, 0x11, 0xe3, 0x17, 0x59, 0x80, 0xd6, 0xf1, 0xf1, 0x51, 0xe0, 0x0c, - 0xfa, 0x84, 0x7d, 0x9c, 0x9e, 0x1f, 0xc1, 0xd5, 0xd8, 0x2d, 0x1a, 0x58, 0x29, 0xef, 0xeb, 0x93, - 0xb1, 0x7e, 0x3d, 0xed, 0x7d, 0x82, 0xcd, 0x30, 0xaf, 0x44, 0xf4, 0xc3, 0xc0, 0xba, 0x54, 0xab, - 0x4d, 0x59, 0xa4, 0x75, 0x61, 0xb6, 0xd6, 0x04, 0x5b, 0x52, 0x6b, 0x8b, 0xb2, 0xcb, 0xa1, 0x3d, - 0x84, 0x52, 0x0c, 0x09, 0x45, 0x2d, 0x28, 0x30, 0xf5, 0x5b, 0x21, 0x6c, 0xcc, 0x46, 0x38, 0x14, - 0x53, 0x28, 0x47, 0x92, 0xc6, 0x7f, 0x34, 0x80, 0x38, 0x67, 0x5f, 0xcc, 0x14, 0xe3, 0xad, 0x5c, - 0x35, 0xde, 0x85, 0xe7, 0x1a, 0xce, 0x94, 0x74, 0x0a, 0xcf, 0x9f, 0x66, 0xe1, 0xca, 0x9d, 0xb0, - 0xf3, 0xbc, 0xf0, 0x18, 0x1c, 0xc0, 0x22, 0xf1, 0x58, 0xe0, 0x08, 0x10, 0x78, 0xb4, 0xbf, 0x38, - 0x2b, 0xda, 0x97, 0xf8, 0xb4, 0xe7, 0xb1, 0x60, 0xa4, 0x62, 0x1f, 0xaa, 0x49, 0xa1, 0xf1, 0xf3, - 0x05, 0xa8, 0xcc, 0x92, 0x44, 0xbb, 0x50, 0xb6, 0x02, 0x22, 0x08, 0xe1, 0xfd, 0xa1, 0x89, 0xfb, - 0xa3, 0x1a, 0xcf, 0x92, 0x29, 0x06, 0xc3, 0x5c, 0x09, 0x29, 0xea, 0xf6, 0xe8, 0x01, 0x1f, 0xf4, - 0x78, 0xda, 0x71, 0xae, 0x67, 0x9c, 0xec, 0x0c, 0x75, 0x7d, 0x84, 0x46, 0x2e, 0x2a, 0x90, 0xf7, - 0xc7, 0x4a, 0x4c, 0x15, 0x17, 0xc8, 0x0f, 0xa1, 0xec, 0x78, 0x0e, 0x73, 0x70, 0xbf, 0xd3, 0xc5, - 0x7d, 0xec, 0x59, 0xcf, 0x33, 0x27, 0xcb, 0x96, 0xaf, 0xcc, 0xa6, 0xd4, 0x19, 0xe6, 0x8a, 0xa2, - 0x34, 0x25, 0x01, 0xed, 0xc3, 0x62, 0x68, 0x2a, 0xf7, 0x5c, 0xd3, 0x46, 0x28, 0x9e, 0x18, 0xe9, - 0x7e, 0xb6, 0x00, 0x6b, 0x26, 0xb1, 0x3f, 0x09, 0xc5, 0x7c, 0xa1, 0xf8, 0x26, 0x80, 0x2c, 0x77, - 0xde, 0x60, 0x9f, 0x23, 0x1a, 0xbc, 0x61, 0x14, 0xa5, 0x86, 0x16, 0x65, 0x89, 0x78, 0x8c, 0xb3, - 0xb0, 0x94, 0x8c, 0xc7, 0xff, 0xe9, 0xad, 0x84, 0xda, 0x71, 0x27, 0xca, 0x89, 0x4e, 0xf4, 0xf9, - 0x59, 0x9d, 0x68, 0x2a, 0x7b, 0x9f, 0xdc, 0x82, 0xfe, 0x9d, 0x85, 0xfc, 0x01, 0x0e, 0xb0, 0x4b, - 0x91, 0x35, 0x35, 0x69, 0xca, 0xd7, 0xe5, 0xc6, 0x54, 0x7e, 0xb6, 0xd4, 0x07, 0x8a, 0xa7, 0x0c, - 0x9a, 0x1f, 0x5c, 0x32, 0x68, 0x7e, 0x1d, 0x56, 0xf8, 0x03, 0x38, 0xf2, 0x51, 0xa2, 0xbd, 0xdc, - 0xdc, 0x88, 0xb5, 0x5c, 0xdc, 0x97, 0xef, 0xe3, 0xe8, 0x99, 0x45, 0xd1, 0x57, 0xa0, 0xc4, 0x39, - 0xe2, 0xc6, 0xcc, 0xc5, 0xaf, 0xc5, 0x0f, 0xd1, 0xc4, 0xa6, 0x61, 0x82, 0x8b, 0xcf, 0xf7, 0xe4, - 0x02, 0xbd, 0x0d, 0xe8, 0x34, 0xfa, 0x16, 0xd2, 0x89, 0xe1, 0xe4, 0xf2, 0x9f, 0x9e, 0x8c, 0xf5, - 0x0d, 0x29, 0x3f, 0xcd, 0x63, 0x98, 0x6b, 0x31, 0x31, 0xd4, 0xf6, 0x65, 0x00, 0xee, 0x57, 0xc7, - 0x26, 0x9e, 0xef, 0xaa, 0xe7, 0xce, 0xd5, 0xc9, 0x58, 0x5f, 0x93, 0x5a, 0xe2, 0x3d, 0xc3, 0x2c, - 0xf2, 0x45, 0x8b, 0xff, 0x4e, 0x64, 0xf6, 0x87, 0x1a, 0xa0, 0xb8, 0xe5, 0x9b, 0x84, 0x0e, 0xf8, - 0xfb, 0x8c, 0x0f, 0xe2, 0x89, 0xa9, 0x59, 0x7b, 0xf2, 0x20, 0x1e, 0xcb, 0x87, 0x83, 0x78, 0xa2, - 0x52, 0xbe, 0x1a, 0xb7, 0xc7, 0xac, 0x8a, 0xa3, 0x52, 0xd3, 0xc5, 0x94, 0x24, 0x86, 0x79, 0x27, - 0x94, 0x9e, 0xea, 0x87, 0x19, 0xe3, 0x8f, 0x1a, 0x6c, 0x4c, 0x65, 0x54, 0x74, 0xd8, 0xef, 0x03, - 0x0a, 0x12, 0x9b, 0x02, 0xaf, 0x91, 0x3a, 0xf4, 0xdc, 0x09, 0xba, 0x16, 0x4c, 0xf5, 0xdd, 0x8f, - 0xaf, 0xc3, 0xe7, 0x04, 0xe6, 0xbf, 0xd3, 0x60, 0x3d, 0x69, 0x3e, 0x72, 0xe4, 0x36, 0x2c, 0x25, - 0xad, 0x2b, 0x17, 0x5e, 0x7d, 0x16, 0x17, 0xd4, 0xe9, 0x2f, 0xc8, 0xa3, 0x6f, 0xc7, 0xe5, 0x2a, - 0xbf, 0x96, 0xdd, 0x78, 0x66, 0x34, 0xc2, 0x33, 0xa5, 0xcb, 0x36, 0x27, 0xe2, 0xf1, 0x5f, 0x0d, - 0x72, 0x07, 0xbe, 0xdf, 0x47, 0x3e, 0xac, 0x79, 0x3e, 0xeb, 0xf0, 0xcc, 0x22, 0x76, 0x47, 0x3d, - 0xba, 0x65, 0x1f, 0xdc, 0x9d, 0x0f, 0xa4, 0x7f, 0x8e, 0xf5, 0x69, 0x55, 0x66, 0xd9, 0xf3, 0x59, - 0x53, 0x50, 0x8e, 0xe4, 0x93, 0xfc, 0x5d, 0x58, 0xbe, 0x68, 0x4c, 0x76, 0xc9, 0xef, 0xcc, 0x6d, - 0xec, 0xa2, 0x9a, 0xc9, 0x58, 0x5f, 0x8f, 0x2b, 0x26, 0x22, 0x1b, 0xe6, 0x52, 0x37, 0x61, 0x7d, - 0xa7, 0xc0, 0xe3, 0xf7, 0xaf, 0x07, 0xba, 0xf6, 0x85, 0xdf, 0x6a, 0x00, 0xf1, 0x97, 0x07, 0xf4, - 0x3a, 0xbc, 0xdc, 0xfc, 0xd6, 0xed, 0x56, 0xe7, 0xf0, 0xe8, 0xe6, 0xd1, 0x9d, 0xc3, 0xce, 0x9d, - 0xdb, 0x87, 0x07, 0x7b, 0xbb, 0xed, 0x5b, 0xed, 0xbd, 0xd6, 0x6a, 0xa6, 0x5a, 0xbe, 0x77, 0xbf, - 0x5e, 0xba, 0xe3, 0xd1, 0x01, 0xb1, 0x9c, 0x13, 0x87, 0xd8, 0xe8, 0x35, 0x58, 0xbf, 0xc8, 0xcd, - 0x57, 0x7b, 0xad, 0x55, 0xad, 0xba, 0x74, 0xef, 0x7e, 0xbd, 0x20, 0x67, 0x31, 0x62, 0xa3, 0x4d, - 0xb8, 0x3a, 0xcd, 0xd7, 0xbe, 0xfd, 0x8d, 0xd5, 0x6c, 0x75, 0xf9, 0xde, 0xfd, 0x7a, 0x31, 0x1a, - 0xda, 0x90, 0x01, 0x28, 0xc9, 0xa9, 0xf4, 0x2d, 0x54, 0xe1, 0xde, 0xfd, 0x7a, 0x5e, 0x02, 0x58, - 0xcd, 0xbd, 0xf7, 0x61, 0x2d, 0xd3, 0xbc, 0xf5, 0xd1, 0xa3, 0x9a, 0xf6, 0xf0, 0x51, 0x4d, 0xfb, - 0xfb, 0xa3, 0x9a, 0xf6, 0xfe, 0xe3, 0x5a, 0xe6, 0xe1, 0xe3, 0x5a, 0xe6, 0xcf, 0x8f, 0x6b, 0x99, - 0xef, 0xbe, 0xfe, 0x44, 0xec, 0xce, 0xa3, 0xcf, 0xd8, 0x02, 0xc5, 0x6e, 0x5e, 0xb4, 0xe1, 0x2f, - 0xfd, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x42, 0xbc, 0xa2, 0xf2, 0xe5, 0x16, 0x00, 0x00, + 0x56, 0x4b, 0x40, 0xbb, 0x0e, 0x93, 0x45, 0x8b, 0xc8, 0x05, 0xc6, 0x71, 0x86, 0x58, 0xbb, 0x0c, + 0xa1, 0x93, 0x09, 0x12, 0xac, 0xb0, 0xca, 0xdd, 0x15, 0xa7, 0x89, 0xbb, 0xdb, 0x74, 0x95, 0x87, + 0x58, 0xda, 0x03, 0xc7, 0x65, 0x10, 0x62, 0xb9, 0xed, 0x65, 0xa4, 0x91, 0xf6, 0xba, 0x12, 0x17, + 0xc4, 0x95, 0xeb, 0x02, 0x97, 0xe1, 0x86, 0x10, 0x32, 0x68, 0xe6, 0x82, 0x38, 0x21, 0x1f, 0x10, + 0x37, 0x50, 0xfd, 0xf4, 0x4f, 0xda, 0xf1, 0xcc, 0x78, 0xb4, 0x87, 0x91, 0xd8, 0x4b, 0xe2, 0x7a, + 0xf5, 0xde, 0xf7, 0xea, 0xfd, 0xd6, 0xab, 0x86, 0x57, 0x2d, 0x9f, 0xba, 0x3e, 0xdd, 0xa2, 0x0c, + 0x9f, 0x39, 0x5e, 0x6f, 0xeb, 0xee, 0x8d, 0x2e, 0x61, 0xf8, 0x46, 0xb8, 0x6e, 0x0c, 0x02, 0x9f, + 0xf9, 0xe8, 0x9a, 0xe4, 0x6a, 0x84, 0x54, 0xc5, 0x55, 0x5d, 0xef, 0xf9, 0x3d, 0x5f, 0xb0, 0x6c, + 0xf1, 0x5f, 0x92, 0xbb, 0xba, 0xd1, 0xf3, 0xfd, 0x5e, 0x9f, 0x6c, 0x89, 0x55, 0x77, 0x78, 0xb2, + 0x85, 0xbd, 0x91, 0xda, 0xaa, 0xa5, 0xb7, 0xec, 0x61, 0x80, 0x99, 0xe3, 0x7b, 0x6a, 0x5f, 0x4f, + 0xef, 0x33, 0xc7, 0x25, 0x94, 0x61, 0x77, 0x10, 0x62, 0xcb, 0x93, 0x74, 0xa4, 0x52, 0x75, 0x2c, + 0x85, 0xad, 0x4c, 0xe9, 0x62, 0x4a, 0x22, 0x3b, 0x2c, 0xdf, 0x09, 0xb1, 0xaf, 0x33, 0xe2, 0xd9, + 0x24, 0x70, 0x1d, 0x8f, 0x6d, 0xb1, 0xd1, 0x80, 0x50, 0xf9, 0x57, 0xee, 0x1a, 0x3f, 0xd3, 0x60, + 0x65, 0xdf, 0xa1, 0xcc, 0x0f, 0x1c, 0x0b, 0xf7, 0xdb, 0xde, 0x89, 0x8f, 0xde, 0x82, 0xfc, 0x29, + 0xc1, 0x36, 0x09, 0x2a, 0x5a, 0x5d, 0xdb, 0x2c, 0x6d, 0x57, 0x1a, 0x31, 0x42, 0x43, 0xca, 0xee, + 0x8b, 0xfd, 0x66, 0xee, 0x93, 0xb1, 0x9e, 0x31, 0x15, 0x37, 0xfa, 0x06, 0xe4, 0xef, 0xe2, 0x3e, + 0x25, 0xac, 0x92, 0xad, 0x2f, 0x6c, 0x96, 0xb6, 0x5f, 0x69, 0x5c, 0xee, 0xbe, 0xc6, 0x31, 0xee, + 0x3b, 0x36, 0x66, 0x7e, 0x04, 0x20, 0xc5, 0x8c, 0x5f, 0x67, 0xa1, 0xbc, 0xeb, 0xbb, 0xae, 0x43, + 0xa9, 0xe3, 0x7b, 0x26, 0x66, 0x84, 0xa2, 0x26, 0xe4, 0x02, 0xcc, 0x88, 0x38, 0x4a, 0xb1, 0xd9, + 0xe0, 0xfc, 0x7f, 0x19, 0xeb, 0xaf, 0xf5, 0x1c, 0x76, 0x3a, 0xec, 0x36, 0x2c, 0xdf, 0x55, 0xce, + 0x50, 0xff, 0xde, 0xa0, 0xf6, 0x99, 0xb2, 0xaf, 0x45, 0x2c, 0x53, 0xc8, 0xa2, 0x77, 0xa1, 0xe0, + 0xe2, 0xf3, 0x8e, 0xc0, 0xc9, 0x0a, 0x9c, 0x9b, 0xf3, 0xe1, 0x4c, 0xc6, 0x7a, 0x79, 0x84, 0xdd, + 0xfe, 0x8e, 0x11, 0xe2, 0x18, 0xe6, 0xa2, 0x8b, 0xcf, 0xf9, 0x11, 0xd1, 0x00, 0xca, 0x9c, 0x6a, + 0x9d, 0x62, 0xaf, 0x47, 0xa4, 0x92, 0x05, 0xa1, 0x64, 0x7f, 0x6e, 0x25, 0xd7, 0x62, 0x25, 0x09, + 0x38, 0xc3, 0x5c, 0x76, 0xf1, 0xf9, 0xae, 0x20, 0x70, 0x8d, 0x3b, 0x85, 0x0f, 0x1f, 0xe8, 0x99, + 0x7f, 0x3c, 0xd0, 0x35, 0xe3, 0x4f, 0x1a, 0x40, 0xec, 0x31, 0xf4, 0x2e, 0xac, 0x5a, 0xd1, 0x4a, + 0xc8, 0x52, 0x15, 0xc3, 0x2f, 0xce, 0x8a, 0x45, 0xca, 0xdf, 0xcd, 0x02, 0x3f, 0xf4, 0xc3, 0xb1, + 0xae, 0x99, 0x65, 0x2b, 0x15, 0x8a, 0x1f, 0x40, 0x69, 0x38, 0xb0, 0x31, 0x23, 0x1d, 0x9e, 0x9d, + 0xc2, 0x93, 0xa5, 0xed, 0x6a, 0x43, 0xa6, 0x6e, 0x23, 0x4c, 0xdd, 0xc6, 0x51, 0x98, 0xba, 0xcd, + 0x1a, 0xc7, 0x9a, 0x8c, 0x75, 0x24, 0xcd, 0x4a, 0x08, 0x1b, 0x1f, 0xfc, 0x4d, 0xd7, 0x4c, 0x90, + 0x14, 0x2e, 0x90, 0xb0, 0xe9, 0xf7, 0x1a, 0x94, 0x5a, 0x84, 0x5a, 0x81, 0x33, 0xe0, 0x15, 0x82, + 0x2a, 0xb0, 0xe8, 0xfa, 0x9e, 0x73, 0xa6, 0xf2, 0xb1, 0x68, 0x86, 0x4b, 0x54, 0x85, 0x82, 0x63, + 0x13, 0x8f, 0x39, 0x6c, 0x24, 0xe3, 0x6a, 0x46, 0x6b, 0x2e, 0xf5, 0x13, 0xd2, 0xa5, 0x4e, 0x18, + 0x0d, 0x33, 0x5c, 0xa2, 0x5b, 0xb0, 0x4a, 0x89, 0x35, 0x0c, 0x1c, 0x36, 0xea, 0x58, 0xbe, 0xc7, + 0xb0, 0xc5, 0x2a, 0x39, 0x11, 0xb0, 0xcf, 0x4d, 0xc6, 0xfa, 0xcb, 0xf2, 0xac, 0x69, 0x0e, 0xc3, + 0x2c, 0x87, 0xa4, 0x5d, 0x49, 0xe1, 0x1a, 0x6c, 0xc2, 0xb0, 0xd3, 0xa7, 0x95, 0x97, 0xa4, 0x06, + 0xb5, 0x4c, 0xd8, 0xf2, 0xf1, 0x22, 0x14, 0xa3, 0x6c, 0xe7, 0x9a, 0xfd, 0x01, 0x09, 0xf8, 0xef, + 0x0e, 0xb6, 0xed, 0x80, 0x50, 0xaa, 0xf2, 0x3a, 0xa1, 0x39, 0xcd, 0x61, 0x98, 0xe5, 0x90, 0x74, + 0x53, 0x52, 0x10, 0xe3, 0x61, 0xf6, 0x28, 0xf1, 0xe8, 0x90, 0x76, 0x06, 0xc3, 0xee, 0x19, 0x19, + 0xa9, 0x68, 0xac, 0x4f, 0x45, 0xe3, 0xa6, 0x37, 0x6a, 0xbe, 0x19, 0xa3, 0xa7, 0xe5, 0x8c, 0x3f, + 0xfc, 0xe6, 0x8d, 0x75, 0x95, 0x1a, 0x56, 0x30, 0x1a, 0x30, 0xbf, 0x71, 0x30, 0xec, 0xbe, 0x4d, + 0x46, 0x3c, 0xfc, 0x8a, 0xf5, 0x40, 0x70, 0xa2, 0x6b, 0x90, 0xff, 0x11, 0x76, 0xfa, 0xc4, 0x16, + 0x0e, 0x2d, 0x98, 0x6a, 0x85, 0x76, 0x20, 0x4f, 0x19, 0x66, 0x43, 0x2a, 0xbc, 0xb8, 0xb2, 0x6d, + 0xcc, 0x4a, 0xb5, 0xa6, 0xef, 0xd9, 0x87, 0x82, 0xd3, 0x54, 0x12, 0xe8, 0x16, 0xe4, 0x99, 0x7f, + 0x46, 0x3c, 0xe5, 0xc2, 0xb9, 0xea, 0xbb, 0xed, 0x31, 0x53, 0x49, 0x73, 0x8f, 0xd8, 0xa4, 0x4f, + 0x7a, 0xc2, 0x71, 0xf4, 0x14, 0x07, 0x84, 0x56, 0xf2, 0x02, 0xb1, 0x3d, 0x77, 0x11, 0x2a, 0x4f, + 0xa5, 0xf1, 0x0c, 0xb3, 0x1c, 0x91, 0x0e, 0x05, 0x05, 0xbd, 0x0d, 0x25, 0x3b, 0x4e, 0xd4, 0xca, + 0xa2, 0x08, 0xc1, 0x17, 0x66, 0x99, 0x9f, 0xc8, 0x69, 0xd5, 0xf7, 0x92, 0xd2, 0x3c, 0x39, 0x86, + 0x5e, 0xd7, 0xf7, 0x6c, 0xc7, 0xeb, 0x75, 0x4e, 0x89, 0xd3, 0x3b, 0x65, 0x95, 0x42, 0x5d, 0xdb, + 0x5c, 0x48, 0x26, 0x47, 0x9a, 0xc3, 0x30, 0xcb, 0x11, 0x69, 0x5f, 0x50, 0x90, 0x0d, 0x2b, 0x31, + 0x97, 0x28, 0xd4, 0xe2, 0x53, 0x0b, 0xf5, 0x15, 0x55, 0xa8, 0x57, 0xd3, 0x5a, 0xe2, 0x5a, 0x5d, + 0x8e, 0x88, 0x5c, 0x0c, 0xed, 0x03, 0xc4, 0xed, 0xa1, 0x02, 0x42, 0x83, 0xf1, 0xf4, 0x1e, 0xa3, + 0x0c, 0x4f, 0xc8, 0xa2, 0xf7, 0xe0, 0x8a, 0xeb, 0x78, 0x1d, 0x4a, 0xfa, 0x27, 0x1d, 0xe5, 0x60, + 0x0e, 0x59, 0x12, 0xd1, 0x7b, 0x67, 0xbe, 0x7c, 0x98, 0x8c, 0xf5, 0xaa, 0x6a, 0xa1, 0xd3, 0x90, + 0x86, 0xb9, 0xe6, 0x3a, 0xde, 0x21, 0xe9, 0x9f, 0xb4, 0x22, 0xda, 0xce, 0xd2, 0xfb, 0x0f, 0xf4, + 0x8c, 0x2a, 0xd7, 0x8c, 0xf1, 0x16, 0x2c, 0x1d, 0xe3, 0xbe, 0x2a, 0x33, 0x42, 0xd1, 0x75, 0x28, + 0xe2, 0x70, 0x51, 0xd1, 0xea, 0x0b, 0x9b, 0x45, 0x33, 0x26, 0xc8, 0x32, 0xff, 0xe9, 0x5f, 0xeb, + 0x9a, 0xf1, 0xb1, 0x06, 0xf9, 0xd6, 0xf1, 0x01, 0x76, 0x02, 0xd4, 0x86, 0xb5, 0x38, 0x73, 0x2e, + 0x16, 0xf9, 0xf5, 0xc9, 0x58, 0xaf, 0xa4, 0x93, 0x2b, 0xaa, 0xf2, 0x38, 0x81, 0xc3, 0x32, 0x6f, + 0xc3, 0xda, 0xdd, 0xb0, 0x77, 0x44, 0x50, 0xd9, 0x34, 0xd4, 0x14, 0x8b, 0x61, 0xae, 0x46, 0x34, + 0x05, 0x95, 0x32, 0x73, 0x0f, 0x16, 0xe5, 0x69, 0x29, 0xda, 0x81, 0x97, 0x06, 0xfc, 0x87, 0xb0, + 0xae, 0xb4, 0x5d, 0x9b, 0x99, 0xbc, 0x82, 0x5f, 0x85, 0x4f, 0x8a, 0x18, 0xbf, 0xca, 0x02, 0xb4, + 0x8e, 0x8f, 0x8f, 0x02, 0x67, 0xd0, 0x27, 0xec, 0xd3, 0xb4, 0xfc, 0x08, 0xae, 0xc6, 0x66, 0xd1, + 0xc0, 0x4a, 0x59, 0x5f, 0x9f, 0x8c, 0xf5, 0xeb, 0x69, 0xeb, 0x13, 0x6c, 0x86, 0x79, 0x25, 0xa2, + 0x1f, 0x06, 0xd6, 0xa5, 0xa8, 0x36, 0x65, 0x11, 0xea, 0xc2, 0x6c, 0xd4, 0x04, 0x5b, 0x12, 0xb5, + 0x45, 0xd9, 0xe5, 0xae, 0x3d, 0x84, 0x52, 0xec, 0x12, 0x8a, 0x5a, 0x50, 0x60, 0xea, 0xb7, 0xf2, + 0xb0, 0x31, 0xdb, 0xc3, 0xa1, 0x98, 0xf2, 0x72, 0x24, 0x69, 0xfc, 0x47, 0x03, 0x88, 0x73, 0xf6, + 0xc5, 0x4c, 0x31, 0xde, 0xca, 0x55, 0xe3, 0x5d, 0x78, 0xae, 0x51, 0x4d, 0x49, 0xa7, 0xfc, 0xf9, + 0xf3, 0x2c, 0x5c, 0xb9, 0x13, 0x76, 0x9e, 0x17, 0xde, 0x07, 0x07, 0xb0, 0x48, 0x3c, 0x16, 0x38, + 0xc2, 0x09, 0x3c, 0xda, 0x5f, 0x99, 0x15, 0xed, 0x4b, 0x6c, 0xda, 0xf3, 0x58, 0x30, 0x52, 0xb1, + 0x0f, 0x61, 0x52, 0xde, 0xf8, 0xe5, 0x02, 0x54, 0x66, 0x49, 0xa2, 0x5d, 0x28, 0x5b, 0x01, 0x11, + 0x84, 0xf0, 0xfe, 0xd0, 0xc4, 0xfd, 0x51, 0x8d, 0x27, 0xcb, 0x14, 0x83, 0x61, 0xae, 0x84, 0x14, + 0x75, 0x7b, 0xf4, 0x80, 0x8f, 0x7d, 0x3c, 0xed, 0x38, 0xd7, 0x33, 0xce, 0x79, 0x86, 0xba, 0x3e, + 0x42, 0x25, 0x17, 0x01, 0xe4, 0xfd, 0xb1, 0x12, 0x53, 0xc5, 0x05, 0xf2, 0x63, 0x28, 0x3b, 0x9e, + 0xc3, 0x1c, 0xdc, 0xef, 0x74, 0x71, 0x1f, 0x7b, 0xd6, 0xf3, 0x4c, 0xcd, 0xb2, 0xe5, 0x2b, 0xb5, + 0x29, 0x38, 0xc3, 0x5c, 0x51, 0x94, 0xa6, 0x24, 0xa0, 0x7d, 0x58, 0x0c, 0x55, 0xe5, 0x9e, 0x6b, + 0xda, 0x08, 0xc5, 0x13, 0x03, 0xde, 0x2f, 0x16, 0x60, 0xcd, 0x24, 0xf6, 0x67, 0xa1, 0x98, 0x2f, + 0x14, 0xdf, 0x06, 0x90, 0xe5, 0xce, 0x1b, 0xec, 0x73, 0x44, 0x83, 0x37, 0x8c, 0xa2, 0x44, 0x68, + 0x51, 0x96, 0x88, 0xc7, 0x38, 0x0b, 0x4b, 0xc9, 0x78, 0xfc, 0x9f, 0xde, 0x4a, 0xa8, 0x1d, 0x77, + 0xa2, 0x9c, 0xe8, 0x44, 0x5f, 0x9a, 0xd5, 0x89, 0xa6, 0xb2, 0xf7, 0xc9, 0x2d, 0xe8, 0xdf, 0x59, + 0xc8, 0x1f, 0xe0, 0x00, 0xbb, 0x14, 0x59, 0x53, 0x93, 0xa6, 0x7c, 0x6b, 0x6e, 0x4c, 0xe5, 0x67, + 0x4b, 0x7d, 0xed, 0x78, 0xca, 0xa0, 0xf9, 0xe1, 0x25, 0x83, 0xe6, 0x37, 0x61, 0x85, 0x3f, 0x87, + 0x23, 0x1b, 0xa5, 0xb7, 0x97, 0x9b, 0x1b, 0x31, 0xca, 0xc5, 0x7d, 0xf9, 0x5a, 0x8e, 0x1e, 0x5d, + 0x14, 0x7d, 0x0d, 0x4a, 0x9c, 0x23, 0x6e, 0xcc, 0x5c, 0xfc, 0x5a, 0xfc, 0x2c, 0x4d, 0x6c, 0x1a, + 0x26, 0xb8, 0xf8, 0x7c, 0x4f, 0x2e, 0xd0, 0x3b, 0x80, 0x4e, 0xa3, 0x2f, 0x23, 0x9d, 0xd8, 0x9d, + 0x5c, 0xfe, 0xf3, 0x93, 0xb1, 0xbe, 0x21, 0xe5, 0xa7, 0x79, 0x0c, 0x73, 0x2d, 0x26, 0x86, 0x68, + 0x5f, 0x05, 0xe0, 0x76, 0x75, 0x6c, 0xe2, 0xf9, 0xae, 0x7a, 0xee, 0x5c, 0x9d, 0x8c, 0xf5, 0x35, + 0x89, 0x12, 0xef, 0x19, 0x66, 0x91, 0x2f, 0x5a, 0xfc, 0x77, 0x22, 0xb3, 0x3f, 0xd2, 0x00, 0xc5, + 0x2d, 0xdf, 0x24, 0x74, 0xc0, 0xdf, 0x67, 0x7c, 0x10, 0x4f, 0x4c, 0xcd, 0xda, 0x93, 0x07, 0xf1, + 0x58, 0x3e, 0x1c, 0xc4, 0x13, 0x95, 0xf2, 0xf5, 0xb8, 0x3d, 0x66, 0x55, 0x1c, 0x15, 0x4c, 0x17, + 0x53, 0x92, 0x18, 0xe6, 0x9d, 0x50, 0x7a, 0xaa, 0x1f, 0x66, 0x8c, 0x3f, 0x6a, 0xb0, 0x31, 0x95, + 0x51, 0xd1, 0x61, 0x7f, 0x08, 0x28, 0x48, 0x6c, 0x0a, 0x7f, 0x8d, 0xd4, 0xa1, 0xe7, 0x4e, 0xd0, + 0xb5, 0x60, 0xaa, 0xef, 0x7e, 0x7a, 0x1d, 0x3e, 0x27, 0x7c, 0xfe, 0x3b, 0x0d, 0xd6, 0x93, 0xea, + 0x23, 0x43, 0x6e, 0xc3, 0x52, 0x52, 0xbb, 0x32, 0xe1, 0xd5, 0x67, 0x31, 0x41, 0x9d, 0xfe, 0x82, + 0x3c, 0xfa, 0x6e, 0x5c, 0xae, 0xf2, 0xdb, 0xd9, 0x8d, 0x67, 0xf6, 0x46, 0x78, 0xa6, 0x74, 0xd9, + 0xe6, 0x44, 0x3c, 0xfe, 0xab, 0x41, 0xee, 0xc0, 0xf7, 0xfb, 0xc8, 0x87, 0x35, 0xcf, 0x67, 0x1d, + 0x9e, 0x59, 0xc4, 0xee, 0xa8, 0x47, 0xb7, 0xec, 0x83, 0xbb, 0xf3, 0x39, 0xe9, 0x9f, 0x63, 0x7d, + 0x1a, 0xca, 0x2c, 0x7b, 0x3e, 0x6b, 0x0a, 0xca, 0x91, 0x7c, 0x92, 0xbf, 0x07, 0xcb, 0x17, 0x95, + 0xc9, 0x2e, 0xf9, 0xbd, 0xb9, 0x95, 0x5d, 0x84, 0x99, 0x8c, 0xf5, 0xf5, 0xb8, 0x62, 0x22, 0xb2, + 0x61, 0x2e, 0x75, 0x13, 0xda, 0x77, 0x0a, 0x3c, 0x7e, 0xff, 0x7a, 0xa0, 0x6b, 0x5f, 0xfe, 0xad, + 0x06, 0x10, 0x7f, 0x79, 0x40, 0xaf, 0xc3, 0xcb, 0xcd, 0xef, 0xdc, 0x6e, 0x75, 0x0e, 0x8f, 0x6e, + 0x1e, 0xdd, 0x39, 0xec, 0xdc, 0xb9, 0x7d, 0x78, 0xb0, 0xb7, 0xdb, 0xbe, 0xd5, 0xde, 0x6b, 0xad, + 0x66, 0xaa, 0xe5, 0x7b, 0xf7, 0xeb, 0xa5, 0x3b, 0x1e, 0x1d, 0x10, 0xcb, 0x39, 0x71, 0x88, 0x8d, + 0x5e, 0x83, 0xf5, 0x8b, 0xdc, 0x7c, 0xb5, 0xd7, 0x5a, 0xd5, 0xaa, 0x4b, 0xf7, 0xee, 0xd7, 0x0b, + 0x72, 0x16, 0x23, 0x36, 0xda, 0x84, 0xab, 0xd3, 0x7c, 0xed, 0xdb, 0xdf, 0x5a, 0xcd, 0x56, 0x97, + 0xef, 0xdd, 0xaf, 0x17, 0xa3, 0xa1, 0x0d, 0x19, 0x80, 0x92, 0x9c, 0x0a, 0x6f, 0xa1, 0x0a, 0xf7, + 0xee, 0xd7, 0xf3, 0xd2, 0x81, 0xd5, 0xdc, 0xfb, 0x1f, 0xd5, 0x32, 0xcd, 0x5b, 0x9f, 0x3c, 0xaa, + 0x69, 0x0f, 0x1f, 0xd5, 0xb4, 0xbf, 0x3f, 0xaa, 0x69, 0x1f, 0x3c, 0xae, 0x65, 0x1e, 0x3e, 0xae, + 0x65, 0xfe, 0xfc, 0xb8, 0x96, 0xf9, 0xfe, 0xeb, 0x4f, 0xf4, 0xdd, 0x79, 0xf4, 0x51, 0x5b, 0x78, + 0xb1, 0x9b, 0x17, 0x6d, 0xf8, 0xcd, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xc2, 0x48, 0x4c, 0x86, + 0xf3, 0x16, 0x00, 0x00, } func (this *Pool) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { @@ -1215,605 +1216,605 @@ func (this *Pool) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_ func StakingDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 9554 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7d, 0x70, 0x24, 0xc7, - 0x75, 0x18, 0x7e, 0xb3, 0x1f, 0xc0, 0xee, 0xc3, 0x02, 0x58, 0x34, 0x70, 0xe0, 0xde, 0xf2, 0x08, - 0x80, 0xc3, 0xaf, 0xe3, 0x91, 0x04, 0xc8, 0x23, 0xef, 0x78, 0xb7, 0x27, 0x91, 0xc2, 0x02, 0x7b, - 0x38, 0xdc, 0xe1, 0x8b, 0x03, 0xe0, 0xa8, 0x2f, 0xff, 0xb6, 0x06, 0xbb, 0x8d, 0xc5, 0x10, 0xbb, - 0x33, 0xc3, 0x99, 0xd9, 0xbb, 0x03, 0x25, 0x55, 0xd1, 0x92, 0x7e, 0x8a, 0x44, 0xc7, 0x91, 0x64, - 0xb9, 0x1c, 0x89, 0xd2, 0x29, 0x92, 0xe5, 0x44, 0x8e, 0xec, 0xc4, 0x1f, 0x52, 0x94, 0x38, 0x49, - 0x95, 0xe5, 0x54, 0x1c, 0x4b, 0x4a, 0x95, 0x4b, 0xaa, 0xb8, 0x12, 0xc7, 0x15, 0x9f, 0x1d, 0x4a, - 0x71, 0x18, 0x45, 0x89, 0xe5, 0x8b, 0x9c, 0x38, 0xa5, 0x54, 0x25, 0xd5, 0x5f, 0xf3, 0xb5, 0x1f, - 0xb3, 0x0b, 0xdd, 0x89, 0x72, 0x9c, 0xbf, 0xb0, 0xfd, 0xfa, 0xbd, 0xd7, 0xaf, 0x5f, 0xbf, 0x7e, - 0xfd, 0xfa, 0x75, 0xf7, 0x00, 0x3e, 0x79, 0x1e, 0x66, 0x6a, 0x86, 0x51, 0xab, 0xe3, 0x39, 0xd3, - 0x32, 0x1c, 0x63, 0xa7, 0xb9, 0x3b, 0x57, 0xc5, 0x76, 0xc5, 0xd2, 0x4c, 0xc7, 0xb0, 0x66, 0x29, - 0x0c, 0x8d, 0x32, 0x8c, 0x59, 0x81, 0x21, 0xaf, 0xc2, 0xd8, 0x05, 0xad, 0x8e, 0x17, 0x5d, 0xc4, - 0x4d, 0xec, 0xa0, 0xb3, 0x90, 0xd8, 0xd5, 0xea, 0x38, 0x27, 0xcd, 0xc4, 0x4f, 0x0c, 0x9d, 0xba, - 0x7f, 0x36, 0x44, 0x34, 0x1b, 0xa4, 0xd8, 0x20, 0x60, 0x85, 0x52, 0xc8, 0xdf, 0x4e, 0xc0, 0x78, - 0x9b, 0x5a, 0x84, 0x20, 0xa1, 0xab, 0x0d, 0xc2, 0x51, 0x3a, 0x91, 0x56, 0xe8, 0x6f, 0x94, 0x83, - 0x41, 0x53, 0xad, 0xec, 0xab, 0x35, 0x9c, 0x8b, 0x51, 0xb0, 0x28, 0xa2, 0x29, 0x80, 0x2a, 0x36, - 0xb1, 0x5e, 0xc5, 0x7a, 0xe5, 0x20, 0x17, 0x9f, 0x89, 0x9f, 0x48, 0x2b, 0x3e, 0x08, 0x7a, 0x04, - 0xc6, 0xcc, 0xe6, 0x4e, 0x5d, 0xab, 0x94, 0x7d, 0x68, 0x30, 0x13, 0x3f, 0x91, 0x54, 0xb2, 0xac, - 0x62, 0xd1, 0x43, 0x7e, 0x08, 0x46, 0xaf, 0x61, 0x75, 0xdf, 0x8f, 0x3a, 0x44, 0x51, 0x47, 0x08, - 0xd8, 0x87, 0xb8, 0x00, 0x99, 0x06, 0xb6, 0x6d, 0xb5, 0x86, 0xcb, 0xce, 0x81, 0x89, 0x73, 0x09, - 0xda, 0xfb, 0x99, 0x96, 0xde, 0x87, 0x7b, 0x3e, 0xc4, 0xa9, 0xb6, 0x0e, 0x4c, 0x8c, 0xe6, 0x21, - 0x8d, 0xf5, 0x66, 0x83, 0x71, 0x48, 0x76, 0xd0, 0x5f, 0x49, 0x6f, 0x36, 0xc2, 0x5c, 0x52, 0x84, - 0x8c, 0xb3, 0x18, 0xb4, 0xb1, 0x75, 0x55, 0xab, 0xe0, 0xdc, 0x00, 0x65, 0xf0, 0x50, 0x0b, 0x83, - 0x4d, 0x56, 0x1f, 0xe6, 0x21, 0xe8, 0xd0, 0x02, 0xa4, 0xf1, 0x75, 0x07, 0xeb, 0xb6, 0x66, 0xe8, - 0xb9, 0x41, 0xca, 0xe4, 0x81, 0x36, 0xa3, 0x88, 0xeb, 0xd5, 0x30, 0x0b, 0x8f, 0x0e, 0x9d, 0x81, - 0x41, 0xc3, 0x74, 0x34, 0x43, 0xb7, 0x73, 0xa9, 0x19, 0xe9, 0xc4, 0xd0, 0xa9, 0xe3, 0x6d, 0x0d, - 0x61, 0x9d, 0xe1, 0x28, 0x02, 0x19, 0x2d, 0x43, 0xd6, 0x36, 0x9a, 0x56, 0x05, 0x97, 0x2b, 0x46, - 0x15, 0x97, 0x35, 0x7d, 0xd7, 0xc8, 0xa5, 0x29, 0x83, 0xe9, 0xd6, 0x8e, 0x50, 0xc4, 0x05, 0xa3, - 0x8a, 0x97, 0xf5, 0x5d, 0x43, 0x19, 0xb1, 0x03, 0x65, 0x34, 0x09, 0x03, 0xf6, 0x81, 0xee, 0xa8, - 0xd7, 0x73, 0x19, 0x6a, 0x21, 0xbc, 0x24, 0xff, 0xc6, 0x00, 0x8c, 0xf6, 0x62, 0x62, 0xe7, 0x21, - 0xb9, 0x4b, 0x7a, 0x99, 0x8b, 0xf5, 0xa3, 0x03, 0x46, 0x13, 0x54, 0xe2, 0xc0, 0x21, 0x95, 0x38, - 0x0f, 0x43, 0x3a, 0xb6, 0x1d, 0x5c, 0x65, 0x16, 0x11, 0xef, 0xd1, 0xa6, 0x80, 0x11, 0xb5, 0x9a, - 0x54, 0xe2, 0x50, 0x26, 0xf5, 0x56, 0x18, 0x75, 0x45, 0x2a, 0x5b, 0xaa, 0x5e, 0x13, 0xb6, 0x39, - 0x17, 0x25, 0xc9, 0x6c, 0x49, 0xd0, 0x29, 0x84, 0x4c, 0x19, 0xc1, 0x81, 0x32, 0x5a, 0x04, 0x30, - 0x74, 0x6c, 0xec, 0x96, 0xab, 0xb8, 0x52, 0xcf, 0xa5, 0x3a, 0x68, 0x69, 0x9d, 0xa0, 0xb4, 0x68, - 0xc9, 0x60, 0xd0, 0x4a, 0x1d, 0x9d, 0xf3, 0x4c, 0x6d, 0xb0, 0x83, 0xa5, 0xac, 0xb2, 0x49, 0xd6, - 0x62, 0x6d, 0xdb, 0x30, 0x62, 0x61, 0x62, 0xf7, 0xb8, 0xca, 0x7b, 0x96, 0xa6, 0x42, 0xcc, 0x46, - 0xf6, 0x4c, 0xe1, 0x64, 0xac, 0x63, 0xc3, 0x96, 0xbf, 0x88, 0xee, 0x03, 0x17, 0x50, 0xa6, 0x66, - 0x05, 0xd4, 0x0b, 0x65, 0x04, 0x70, 0x4d, 0x6d, 0xe0, 0xfc, 0x4b, 0x30, 0x12, 0x54, 0x0f, 0x9a, - 0x80, 0xa4, 0xed, 0xa8, 0x96, 0x43, 0xad, 0x30, 0xa9, 0xb0, 0x02, 0xca, 0x42, 0x1c, 0xeb, 0x55, - 0xea, 0xe5, 0x92, 0x0a, 0xf9, 0x89, 0xde, 0xe2, 0x75, 0x38, 0x4e, 0x3b, 0xfc, 0x60, 0xeb, 0x88, - 0x06, 0x38, 0x87, 0xfb, 0x9d, 0x7f, 0x1a, 0x86, 0x03, 0x1d, 0xe8, 0xb5, 0x69, 0xf9, 0xdd, 0x70, - 0xb4, 0x2d, 0x6b, 0xf4, 0x56, 0x98, 0x68, 0xea, 0x9a, 0xee, 0x60, 0xcb, 0xb4, 0x30, 0xb1, 0x58, - 0xd6, 0x54, 0xee, 0x3f, 0x0e, 0x76, 0xb0, 0xb9, 0x6d, 0x3f, 0x36, 0xe3, 0xa2, 0x8c, 0x37, 0x5b, - 0x81, 0x27, 0xd3, 0xa9, 0xd7, 0x07, 0xb3, 0x2f, 0xbf, 0xfc, 0xf2, 0xcb, 0x31, 0xf9, 0xe3, 0x03, - 0x30, 0xd1, 0x6e, 0xce, 0xb4, 0x9d, 0xbe, 0x93, 0x30, 0xa0, 0x37, 0x1b, 0x3b, 0xd8, 0xa2, 0x4a, - 0x4a, 0x2a, 0xbc, 0x84, 0xe6, 0x21, 0x59, 0x57, 0x77, 0x70, 0x3d, 0x97, 0x98, 0x91, 0x4e, 0x8c, - 0x9c, 0x7a, 0xa4, 0xa7, 0x59, 0x39, 0xbb, 0x42, 0x48, 0x14, 0x46, 0x89, 0x9e, 0x81, 0x04, 0x77, - 0xd1, 0x84, 0xc3, 0xc9, 0xde, 0x38, 0x90, 0xb9, 0xa4, 0x50, 0x3a, 0x74, 0x37, 0xa4, 0xc9, 0x5f, - 0x66, 0x1b, 0x03, 0x54, 0xe6, 0x14, 0x01, 0x10, 0xbb, 0x40, 0x79, 0x48, 0xd1, 0x69, 0x52, 0xc5, - 0x62, 0x69, 0x73, 0xcb, 0xc4, 0xb0, 0xaa, 0x78, 0x57, 0x6d, 0xd6, 0x9d, 0xf2, 0x55, 0xb5, 0xde, - 0xc4, 0xd4, 0xe0, 0xd3, 0x4a, 0x86, 0x03, 0xaf, 0x10, 0x18, 0x9a, 0x86, 0x21, 0x36, 0xab, 0x34, - 0xbd, 0x8a, 0xaf, 0x53, 0xef, 0x99, 0x54, 0xd8, 0x44, 0x5b, 0x26, 0x10, 0xd2, 0xfc, 0x0b, 0xb6, - 0xa1, 0x0b, 0xd3, 0xa4, 0x4d, 0x10, 0x00, 0x6d, 0xfe, 0xe9, 0xb0, 0xe3, 0xbe, 0xa7, 0x7d, 0xf7, - 0xc2, 0x36, 0x25, 0x7f, 0x39, 0x06, 0x09, 0xea, 0x2f, 0x46, 0x61, 0x68, 0xeb, 0x6d, 0x1b, 0xa5, - 0xf2, 0xe2, 0xfa, 0x76, 0x71, 0xa5, 0x94, 0x95, 0xd0, 0x08, 0x00, 0x05, 0x5c, 0x58, 0x59, 0x9f, - 0xdf, 0xca, 0xc6, 0xdc, 0xf2, 0xf2, 0xda, 0xd6, 0x99, 0xa7, 0xb2, 0x71, 0x97, 0x60, 0x9b, 0x01, - 0x12, 0x7e, 0x84, 0x27, 0x4f, 0x65, 0x93, 0x28, 0x0b, 0x19, 0xc6, 0x60, 0xf9, 0xad, 0xa5, 0xc5, - 0x33, 0x4f, 0x65, 0x07, 0x82, 0x90, 0x27, 0x4f, 0x65, 0x07, 0xd1, 0x30, 0xa4, 0x29, 0xa4, 0xb8, - 0xbe, 0xbe, 0x92, 0x4d, 0xb9, 0x3c, 0x37, 0xb7, 0x94, 0xe5, 0xb5, 0xa5, 0x6c, 0xda, 0xe5, 0xb9, - 0xa4, 0xac, 0x6f, 0x6f, 0x64, 0xc1, 0xe5, 0xb0, 0x5a, 0xda, 0xdc, 0x9c, 0x5f, 0x2a, 0x65, 0x87, - 0x5c, 0x8c, 0xe2, 0xdb, 0xb6, 0x4a, 0x9b, 0xd9, 0x4c, 0x40, 0xac, 0x27, 0x4f, 0x65, 0x87, 0xdd, - 0x26, 0x4a, 0x6b, 0xdb, 0xab, 0xd9, 0x11, 0x34, 0x06, 0xc3, 0xac, 0x09, 0x21, 0xc4, 0x68, 0x08, - 0x74, 0xe6, 0xa9, 0x6c, 0xd6, 0x13, 0x84, 0x71, 0x19, 0x0b, 0x00, 0xce, 0x3c, 0x95, 0x45, 0xf2, - 0x02, 0x24, 0xa9, 0x75, 0x21, 0x04, 0x23, 0x2b, 0xf3, 0xc5, 0xd2, 0x4a, 0x79, 0x7d, 0x63, 0x6b, - 0x79, 0x7d, 0x6d, 0x7e, 0x25, 0x2b, 0x79, 0x30, 0xa5, 0xf4, 0xdc, 0xf6, 0xb2, 0x52, 0x5a, 0xcc, - 0xc6, 0xfc, 0xb0, 0x8d, 0xd2, 0xfc, 0x56, 0x69, 0x31, 0x1b, 0x97, 0x2b, 0x30, 0xd1, 0xce, 0x4f, - 0xb6, 0x9d, 0x19, 0xbe, 0x21, 0x8e, 0x75, 0x18, 0x62, 0xca, 0xab, 0x65, 0x88, 0xbf, 0x15, 0x83, - 0xf1, 0x36, 0x6b, 0x45, 0xdb, 0x46, 0x9e, 0x85, 0x24, 0x33, 0x51, 0xb6, 0x7a, 0x3e, 0xdc, 0x76, - 0xd1, 0xa1, 0x06, 0xdb, 0xb2, 0x82, 0x52, 0x3a, 0x7f, 0x04, 0x11, 0xef, 0x10, 0x41, 0x10, 0x16, - 0x2d, 0x3e, 0xfd, 0x27, 0x5a, 0x7c, 0x3a, 0x5b, 0xf6, 0xce, 0xf4, 0xb2, 0xec, 0x51, 0x58, 0x7f, - 0xbe, 0x3d, 0xd9, 0xc6, 0xb7, 0x9f, 0x87, 0xb1, 0x16, 0x46, 0x3d, 0xfb, 0xd8, 0xf7, 0x49, 0x90, - 0xeb, 0xa4, 0x9c, 0x08, 0x4f, 0x17, 0x0b, 0x78, 0xba, 0xf3, 0x61, 0x0d, 0xde, 0xdb, 0x79, 0x10, - 0x5a, 0xc6, 0xfa, 0xf3, 0x12, 0x4c, 0xb6, 0x8f, 0x14, 0xdb, 0xca, 0xf0, 0x0c, 0x0c, 0x34, 0xb0, - 0xb3, 0x67, 0x88, 0x68, 0xe9, 0xc1, 0x36, 0x6b, 0x30, 0xa9, 0x0e, 0x0f, 0x36, 0xa7, 0xf2, 0x2f, - 0xe2, 0xf1, 0x4e, 0xe1, 0x1e, 0x93, 0xa6, 0x45, 0xd2, 0x0f, 0xc5, 0xe0, 0x68, 0x5b, 0xe6, 0x6d, - 0x05, 0xbd, 0x07, 0x40, 0xd3, 0xcd, 0xa6, 0xc3, 0x22, 0x22, 0xe6, 0x60, 0xd3, 0x14, 0x42, 0x9d, - 0x17, 0x71, 0x9e, 0x4d, 0xc7, 0xad, 0x8f, 0xd3, 0x7a, 0x60, 0x20, 0x8a, 0x70, 0xd6, 0x13, 0x34, - 0x41, 0x05, 0x9d, 0xea, 0xd0, 0xd3, 0x16, 0xc3, 0x7c, 0x1c, 0xb2, 0x95, 0xba, 0x86, 0x75, 0xa7, - 0x6c, 0x3b, 0x16, 0x56, 0x1b, 0x9a, 0x5e, 0xa3, 0x2b, 0x48, 0xaa, 0x90, 0xdc, 0x55, 0xeb, 0x36, - 0x56, 0x46, 0x59, 0xf5, 0xa6, 0xa8, 0x25, 0x14, 0xd4, 0x80, 0x2c, 0x1f, 0xc5, 0x40, 0x80, 0x82, - 0x55, 0xbb, 0x14, 0xf2, 0xcf, 0xa4, 0x61, 0xc8, 0x17, 0x57, 0xa3, 0x7b, 0x21, 0xf3, 0x82, 0x7a, - 0x55, 0x2d, 0x8b, 0xbd, 0x12, 0xd3, 0xc4, 0x10, 0x81, 0x6d, 0xf0, 0xfd, 0xd2, 0xe3, 0x30, 0x41, - 0x51, 0x8c, 0xa6, 0x83, 0xad, 0x72, 0xa5, 0xae, 0xda, 0x36, 0x55, 0x5a, 0x8a, 0xa2, 0x22, 0x52, - 0xb7, 0x4e, 0xaa, 0x16, 0x44, 0x0d, 0x3a, 0x0d, 0xe3, 0x94, 0xa2, 0xd1, 0xac, 0x3b, 0x9a, 0x59, - 0xc7, 0x65, 0xb2, 0x7b, 0xb3, 0xe9, 0x4a, 0xe2, 0x4a, 0x36, 0x46, 0x30, 0x56, 0x39, 0x02, 0x91, - 0xc8, 0x46, 0x8b, 0x70, 0x0f, 0x25, 0xab, 0x61, 0x1d, 0x5b, 0xaa, 0x83, 0xcb, 0xf8, 0xc5, 0xa6, - 0x5a, 0xb7, 0xcb, 0xaa, 0x5e, 0x2d, 0xef, 0xa9, 0xf6, 0x5e, 0x6e, 0x82, 0x30, 0x28, 0xc6, 0x72, - 0x92, 0x72, 0x8c, 0x20, 0x2e, 0x71, 0xbc, 0x12, 0x45, 0x9b, 0xd7, 0xab, 0x17, 0x55, 0x7b, 0x0f, - 0x15, 0x60, 0x92, 0x72, 0xb1, 0x1d, 0x4b, 0xd3, 0x6b, 0xe5, 0xca, 0x1e, 0xae, 0xec, 0x97, 0x9b, - 0xce, 0xee, 0xd9, 0xdc, 0xdd, 0xfe, 0xf6, 0xa9, 0x84, 0x9b, 0x14, 0x67, 0x81, 0xa0, 0x6c, 0x3b, - 0xbb, 0x67, 0xd1, 0x26, 0x64, 0xc8, 0x60, 0x34, 0xb4, 0x97, 0x70, 0x79, 0xd7, 0xb0, 0xe8, 0xd2, - 0x38, 0xd2, 0xc6, 0x35, 0xf9, 0x34, 0x38, 0xbb, 0xce, 0x09, 0x56, 0x8d, 0x2a, 0x2e, 0x24, 0x37, - 0x37, 0x4a, 0xa5, 0x45, 0x65, 0x48, 0x70, 0xb9, 0x60, 0x58, 0xc4, 0xa0, 0x6a, 0x86, 0xab, 0xe0, - 0x21, 0x66, 0x50, 0x35, 0x43, 0xa8, 0xf7, 0x34, 0x8c, 0x57, 0x2a, 0xac, 0xcf, 0x5a, 0xa5, 0xcc, - 0xf7, 0x58, 0x76, 0x2e, 0x1b, 0x50, 0x56, 0xa5, 0xb2, 0xc4, 0x10, 0xb8, 0x8d, 0xdb, 0xe8, 0x1c, - 0x1c, 0xf5, 0x94, 0xe5, 0x27, 0x1c, 0x6b, 0xe9, 0x65, 0x98, 0xf4, 0x34, 0x8c, 0x9b, 0x07, 0xad, - 0x84, 0x28, 0xd0, 0xa2, 0x79, 0x10, 0x26, 0x7b, 0x1a, 0x26, 0xcc, 0x3d, 0xb3, 0x95, 0xee, 0xa4, - 0x9f, 0x0e, 0x99, 0x7b, 0x66, 0x98, 0xf0, 0x01, 0xba, 0xe1, 0xb6, 0x70, 0x45, 0x75, 0x70, 0x35, - 0x77, 0x97, 0x1f, 0xdd, 0x57, 0x81, 0xe6, 0x20, 0x5b, 0xa9, 0x94, 0xb1, 0xae, 0xee, 0xd4, 0x71, - 0x59, 0xb5, 0xb0, 0xae, 0xda, 0xb9, 0x69, 0x3f, 0xf2, 0x48, 0xa5, 0x52, 0xa2, 0xb5, 0xf3, 0xb4, - 0x12, 0x9d, 0x84, 0x31, 0x63, 0xe7, 0x85, 0x0a, 0x33, 0xc9, 0xb2, 0x69, 0xe1, 0x5d, 0xed, 0x7a, - 0xee, 0x7e, 0xaa, 0xdf, 0x51, 0x52, 0x41, 0x0d, 0x72, 0x83, 0x82, 0xd1, 0xc3, 0x90, 0xad, 0xd8, - 0x7b, 0xaa, 0x65, 0x52, 0x9f, 0x6c, 0x9b, 0x6a, 0x05, 0xe7, 0x1e, 0x60, 0xa8, 0x0c, 0xbe, 0x26, - 0xc0, 0x64, 0x4a, 0xd8, 0xd7, 0xb4, 0x5d, 0x47, 0x70, 0x7c, 0x88, 0x4d, 0x09, 0x0a, 0xe3, 0xdc, - 0x4e, 0x40, 0x96, 0xa8, 0x22, 0xd0, 0xf0, 0x09, 0x8a, 0x36, 0x62, 0xee, 0x99, 0xfe, 0x76, 0xef, - 0x83, 0x61, 0x82, 0xe9, 0x35, 0xfa, 0x30, 0x0b, 0xc8, 0xcc, 0x3d, 0x5f, 0x8b, 0x4f, 0xc1, 0x24, - 0x41, 0x6a, 0x60, 0x47, 0xad, 0xaa, 0x8e, 0xea, 0xc3, 0x7e, 0x94, 0x62, 0x13, 0xbd, 0xaf, 0xf2, - 0xca, 0x80, 0x9c, 0x56, 0x73, 0xe7, 0xc0, 0xb5, 0xac, 0xc7, 0x98, 0x9c, 0x04, 0x26, 0x6c, 0xeb, - 0x8e, 0x05, 0xdd, 0x72, 0x01, 0x32, 0x7e, 0xc3, 0x47, 0x69, 0x60, 0xa6, 0x9f, 0x95, 0x48, 0x14, - 0xb4, 0xb0, 0xbe, 0x48, 0xe2, 0x97, 0xb7, 0x97, 0xb2, 0x31, 0x12, 0x47, 0xad, 0x2c, 0x6f, 0x95, - 0xca, 0xca, 0xf6, 0xda, 0xd6, 0xf2, 0x6a, 0x29, 0x1b, 0xf7, 0x05, 0xec, 0x97, 0x12, 0xa9, 0x07, - 0xb3, 0x0f, 0xc9, 0xdf, 0x8c, 0xc1, 0x48, 0x70, 0x07, 0x86, 0xde, 0x04, 0x77, 0x89, 0x74, 0x89, - 0x8d, 0x9d, 0xf2, 0x35, 0xcd, 0xa2, 0x33, 0xb2, 0xa1, 0xb2, 0xd5, 0xd1, 0xb5, 0x89, 0x09, 0x8e, - 0xb5, 0x89, 0x9d, 0xe7, 0x35, 0x8b, 0xcc, 0xb7, 0x86, 0xea, 0xa0, 0x15, 0x98, 0xd6, 0x8d, 0xb2, - 0xed, 0xa8, 0x7a, 0x55, 0xb5, 0xaa, 0x65, 0x2f, 0x51, 0x55, 0x56, 0x2b, 0x15, 0x6c, 0xdb, 0x06, - 0x5b, 0x09, 0x5d, 0x2e, 0xc7, 0x75, 0x63, 0x93, 0x23, 0x7b, 0x4b, 0xc4, 0x3c, 0x47, 0x0d, 0xd9, - 0x6f, 0xbc, 0x93, 0xfd, 0xde, 0x0d, 0xe9, 0x86, 0x6a, 0x96, 0xb1, 0xee, 0x58, 0x07, 0x34, 0xee, - 0x4e, 0x29, 0xa9, 0x86, 0x6a, 0x96, 0x48, 0xf9, 0x47, 0xb2, 0xfd, 0xb9, 0x94, 0x48, 0xa5, 0xb2, - 0xe9, 0x4b, 0x89, 0x54, 0x3a, 0x0b, 0xf2, 0x6b, 0x71, 0xc8, 0xf8, 0xe3, 0x70, 0xb2, 0xad, 0xa9, - 0xd0, 0x25, 0x4b, 0xa2, 0x4e, 0xed, 0xbe, 0xae, 0x51, 0xfb, 0xec, 0x02, 0x59, 0xcb, 0x0a, 0x03, - 0x2c, 0x3a, 0x56, 0x18, 0x25, 0x89, 0x23, 0x88, 0xb1, 0x61, 0x16, 0x8d, 0xa4, 0x14, 0x5e, 0x42, - 0x4b, 0x30, 0xf0, 0x82, 0x4d, 0x79, 0x0f, 0x50, 0xde, 0xf7, 0x77, 0xe7, 0x7d, 0x69, 0x93, 0x32, - 0x4f, 0x5f, 0xda, 0x2c, 0xaf, 0xad, 0x2b, 0xab, 0xf3, 0x2b, 0x0a, 0x27, 0x47, 0xc7, 0x20, 0x51, - 0x57, 0x5f, 0x3a, 0x08, 0xae, 0x7a, 0x14, 0xd4, 0xeb, 0x20, 0x1c, 0x83, 0xc4, 0x35, 0xac, 0xee, - 0x07, 0xd7, 0x1a, 0x0a, 0xba, 0x83, 0x93, 0x61, 0x0e, 0x92, 0x54, 0x5f, 0x08, 0x80, 0x6b, 0x2c, - 0x7b, 0x04, 0xa5, 0x20, 0xb1, 0xb0, 0xae, 0x90, 0x09, 0x91, 0x85, 0x0c, 0x83, 0x96, 0x37, 0x96, - 0x4b, 0x0b, 0xa5, 0x6c, 0x4c, 0x3e, 0x0d, 0x03, 0x4c, 0x09, 0x64, 0xb2, 0xb8, 0x6a, 0xc8, 0x1e, - 0xe1, 0x45, 0xce, 0x43, 0x12, 0xb5, 0xdb, 0xab, 0xc5, 0x92, 0x92, 0x8d, 0x05, 0x87, 0x3a, 0x91, - 0x4d, 0xca, 0x36, 0x64, 0xfc, 0x81, 0xf8, 0x8f, 0x66, 0x93, 0xfd, 0x15, 0x09, 0x86, 0x7c, 0x81, - 0x35, 0x89, 0x88, 0xd4, 0x7a, 0xdd, 0xb8, 0x56, 0x56, 0xeb, 0x9a, 0x6a, 0x73, 0xd3, 0x00, 0x0a, - 0x9a, 0x27, 0x90, 0x5e, 0x87, 0xee, 0x47, 0x34, 0x45, 0x92, 0xd9, 0x01, 0xf9, 0xd3, 0x12, 0x64, - 0xc3, 0x91, 0x6d, 0x48, 0x4c, 0xe9, 0x8d, 0x14, 0x53, 0xfe, 0x94, 0x04, 0x23, 0xc1, 0x70, 0x36, - 0x24, 0xde, 0xbd, 0x6f, 0xa8, 0x78, 0x7f, 0x1c, 0x83, 0xe1, 0x40, 0x10, 0xdb, 0xab, 0x74, 0x2f, - 0xc2, 0x98, 0x56, 0xc5, 0x0d, 0xd3, 0x70, 0xb0, 0x5e, 0x39, 0x28, 0xd7, 0xf1, 0x55, 0x5c, 0xcf, - 0xc9, 0xd4, 0x69, 0xcc, 0x75, 0x0f, 0x93, 0x67, 0x97, 0x3d, 0xba, 0x15, 0x42, 0x56, 0x18, 0x5f, - 0x5e, 0x2c, 0xad, 0x6e, 0xac, 0x6f, 0x95, 0xd6, 0x16, 0xde, 0x56, 0xde, 0x5e, 0xbb, 0xbc, 0xb6, - 0xfe, 0xfc, 0x9a, 0x92, 0xd5, 0x42, 0x68, 0x77, 0x70, 0xda, 0x6f, 0x40, 0x36, 0x2c, 0x14, 0xba, - 0x0b, 0xda, 0x89, 0x95, 0x3d, 0x82, 0xc6, 0x61, 0x74, 0x6d, 0xbd, 0xbc, 0xb9, 0xbc, 0x58, 0x2a, - 0x97, 0x2e, 0x5c, 0x28, 0x2d, 0x6c, 0x6d, 0xb2, 0xc4, 0x87, 0x8b, 0xbd, 0x15, 0x98, 0xe0, 0xf2, - 0xab, 0x71, 0x18, 0x6f, 0x23, 0x09, 0x9a, 0xe7, 0x5b, 0x16, 0xb6, 0x8b, 0x7a, 0xac, 0x17, 0xe9, - 0x67, 0x49, 0xcc, 0xb0, 0xa1, 0x5a, 0x0e, 0xdf, 0xe1, 0x3c, 0x0c, 0x44, 0x4b, 0xba, 0xa3, 0xed, - 0x6a, 0xd8, 0xe2, 0x79, 0x22, 0xb6, 0x8f, 0x19, 0xf5, 0xe0, 0x2c, 0x55, 0xf4, 0x28, 0x20, 0xd3, - 0xb0, 0x35, 0x47, 0xbb, 0x8a, 0xcb, 0x9a, 0x2e, 0x92, 0x4a, 0x64, 0x5f, 0x93, 0x50, 0xb2, 0xa2, - 0x66, 0x59, 0x77, 0x5c, 0x6c, 0x1d, 0xd7, 0xd4, 0x10, 0x36, 0x71, 0xe6, 0x71, 0x25, 0x2b, 0x6a, - 0x5c, 0xec, 0x7b, 0x21, 0x53, 0x35, 0x9a, 0x24, 0xd8, 0x63, 0x78, 0x64, 0xed, 0x90, 0x94, 0x21, - 0x06, 0x73, 0x51, 0x78, 0x18, 0xef, 0x65, 0xb3, 0x32, 0xca, 0x10, 0x83, 0x31, 0x94, 0x87, 0x60, - 0x54, 0xad, 0xd5, 0x2c, 0xc2, 0x5c, 0x30, 0x62, 0x1b, 0x93, 0x11, 0x17, 0x4c, 0x11, 0xf3, 0x97, - 0x20, 0x25, 0xf4, 0x40, 0x96, 0x6a, 0xa2, 0x89, 0xb2, 0xc9, 0x76, 0xdb, 0xb1, 0x13, 0x69, 0x25, - 0xa5, 0x8b, 0xca, 0x7b, 0x21, 0xa3, 0xd9, 0x65, 0x2f, 0x39, 0x1f, 0x9b, 0x89, 0x9d, 0x48, 0x29, - 0x43, 0x9a, 0xed, 0x26, 0x36, 0xe5, 0xcf, 0xc7, 0x60, 0x24, 0x78, 0xb8, 0x80, 0x16, 0x21, 0x55, - 0x37, 0x2a, 0x2a, 0x35, 0x2d, 0x76, 0xb2, 0x75, 0x22, 0xe2, 0x3c, 0x62, 0x76, 0x85, 0xe3, 0x2b, - 0x2e, 0x65, 0xfe, 0x77, 0x25, 0x48, 0x09, 0x30, 0x9a, 0x84, 0x84, 0xa9, 0x3a, 0x7b, 0x94, 0x5d, - 0xb2, 0x18, 0xcb, 0x4a, 0x0a, 0x2d, 0x13, 0xb8, 0x6d, 0xaa, 0x3a, 0x35, 0x01, 0x0e, 0x27, 0x65, - 0x32, 0xae, 0x75, 0xac, 0x56, 0xe9, 0xae, 0xc7, 0x68, 0x34, 0xb0, 0xee, 0xd8, 0x62, 0x5c, 0x39, - 0x7c, 0x81, 0x83, 0xd1, 0x23, 0x30, 0xe6, 0x58, 0xaa, 0x56, 0x0f, 0xe0, 0x26, 0x28, 0x6e, 0x56, - 0x54, 0xb8, 0xc8, 0x05, 0x38, 0x26, 0xf8, 0x56, 0xb1, 0xa3, 0x56, 0xf6, 0x70, 0xd5, 0x23, 0x1a, - 0xa0, 0xd9, 0x8d, 0xbb, 0x38, 0xc2, 0x22, 0xaf, 0x17, 0xb4, 0xf2, 0x37, 0x25, 0x18, 0x13, 0xfb, - 0xb4, 0xaa, 0xab, 0xac, 0x55, 0x00, 0x55, 0xd7, 0x0d, 0xc7, 0xaf, 0xae, 0x56, 0x53, 0x6e, 0xa1, - 0x9b, 0x9d, 0x77, 0x89, 0x14, 0x1f, 0x83, 0x7c, 0x03, 0xc0, 0xab, 0xe9, 0xa8, 0xb6, 0x69, 0x18, - 0xe2, 0x27, 0x47, 0xf4, 0xf8, 0x91, 0xed, 0xec, 0x81, 0x81, 0xc8, 0x86, 0x0e, 0x4d, 0x40, 0x72, - 0x07, 0xd7, 0x34, 0x9d, 0xe7, 0x83, 0x59, 0x41, 0xe4, 0x5f, 0x12, 0x6e, 0xfe, 0xa5, 0xf8, 0x61, - 0x09, 0xc6, 0x2b, 0x46, 0x23, 0x2c, 0x6f, 0x31, 0x1b, 0x4a, 0x2f, 0xd8, 0x17, 0xa5, 0xb7, 0x3f, - 0x53, 0xd3, 0x9c, 0xbd, 0xe6, 0xce, 0x6c, 0xc5, 0x68, 0xcc, 0xd5, 0x8c, 0xba, 0xaa, 0xd7, 0xbc, - 0xf3, 0x53, 0xfa, 0xa3, 0xf2, 0x58, 0x0d, 0xeb, 0x8f, 0xd5, 0x0c, 0xdf, 0x69, 0xea, 0x79, 0xef, - 0xe7, 0x5f, 0x48, 0xd2, 0xcf, 0xc7, 0xe2, 0x4b, 0x1b, 0xc5, 0x2f, 0xc4, 0xf2, 0x4b, 0xac, 0xb9, - 0x0d, 0xa1, 0x1e, 0x05, 0xef, 0xd6, 0x71, 0x85, 0x74, 0x19, 0xbe, 0xf3, 0x08, 0x4c, 0xd4, 0x8c, - 0x9a, 0x41, 0x39, 0xce, 0x91, 0x5f, 0xfc, 0x44, 0x36, 0xed, 0x42, 0xf3, 0x91, 0xc7, 0xb7, 0x85, - 0x35, 0x18, 0xe7, 0xc8, 0x65, 0x7a, 0x24, 0xc4, 0x36, 0x36, 0xa8, 0x6b, 0x5a, 0x2d, 0xf7, 0x6b, - 0xdf, 0xa6, 0x0b, 0xba, 0x32, 0xc6, 0x49, 0x49, 0x1d, 0xdb, 0xfb, 0x14, 0x14, 0x38, 0x1a, 0xe0, - 0xc7, 0xa6, 0x2d, 0xb6, 0x22, 0x38, 0xfe, 0x36, 0xe7, 0x38, 0xee, 0xe3, 0xb8, 0xc9, 0x49, 0x0b, - 0x0b, 0x30, 0xdc, 0x0f, 0xaf, 0x7f, 0xc1, 0x79, 0x65, 0xb0, 0x9f, 0xc9, 0x12, 0x8c, 0x52, 0x26, - 0x95, 0xa6, 0xed, 0x18, 0x0d, 0xea, 0x13, 0xbb, 0xb3, 0xf9, 0x9d, 0x6f, 0xb3, 0x79, 0x34, 0x42, - 0xc8, 0x16, 0x5c, 0xaa, 0x42, 0x01, 0xe8, 0x29, 0x58, 0x15, 0x57, 0xea, 0x11, 0x1c, 0xbe, 0xca, - 0x05, 0x71, 0xf1, 0x0b, 0x57, 0x60, 0x82, 0xfc, 0xa6, 0x2e, 0xcb, 0x2f, 0x49, 0x74, 0x0e, 0x2e, - 0xf7, 0xcd, 0xf7, 0xb1, 0xa9, 0x3a, 0xee, 0x32, 0xf0, 0xc9, 0xe4, 0x1b, 0xc5, 0x1a, 0x76, 0x1c, - 0x6c, 0xd9, 0x65, 0xb5, 0xde, 0x4e, 0x3c, 0x5f, 0x12, 0x23, 0xf7, 0x89, 0xef, 0x06, 0x47, 0x71, - 0x89, 0x51, 0xce, 0xd7, 0xeb, 0x85, 0x6d, 0xb8, 0xab, 0x8d, 0x55, 0xf4, 0xc0, 0xf3, 0x55, 0xce, - 0x73, 0xa2, 0xc5, 0x32, 0x08, 0xdb, 0x0d, 0x10, 0x70, 0x77, 0x2c, 0x7b, 0xe0, 0xf9, 0x49, 0xce, - 0x13, 0x71, 0x5a, 0x31, 0xa4, 0x84, 0xe3, 0x25, 0x18, 0xbb, 0x8a, 0xad, 0x1d, 0xc3, 0xe6, 0x89, - 0xa3, 0x1e, 0xd8, 0x7d, 0x8a, 0xb3, 0x1b, 0xe5, 0x84, 0x34, 0x93, 0x44, 0x78, 0x9d, 0x83, 0xd4, - 0xae, 0x5a, 0xc1, 0x3d, 0xb0, 0xb8, 0xc1, 0x59, 0x0c, 0x12, 0x7c, 0x42, 0x3a, 0x0f, 0x99, 0x9a, - 0xc1, 0x57, 0xad, 0x68, 0xf2, 0x4f, 0x73, 0xf2, 0x21, 0x41, 0xc3, 0x59, 0x98, 0x86, 0xd9, 0xac, - 0x93, 0x25, 0x2d, 0x9a, 0xc5, 0xdf, 0x12, 0x2c, 0x04, 0x0d, 0x67, 0xd1, 0x87, 0x5a, 0x3f, 0x23, - 0x58, 0xd8, 0x3e, 0x7d, 0x3e, 0x0b, 0x43, 0x86, 0x5e, 0x3f, 0x30, 0xf4, 0x5e, 0x84, 0xf8, 0x2c, - 0xe7, 0x00, 0x9c, 0x84, 0x30, 0x38, 0x0f, 0xe9, 0x5e, 0x07, 0xe2, 0x6f, 0x7f, 0x57, 0x4c, 0x0f, - 0x31, 0x02, 0x4b, 0x30, 0x2a, 0x1c, 0x94, 0x66, 0xe8, 0x3d, 0xb0, 0xf8, 0x3b, 0x9c, 0xc5, 0x88, - 0x8f, 0x8c, 0x77, 0xc3, 0xc1, 0xb6, 0x53, 0xc3, 0xbd, 0x30, 0xf9, 0xbc, 0xe8, 0x06, 0x27, 0xe1, - 0xaa, 0xdc, 0xc1, 0x7a, 0x65, 0xaf, 0x37, 0x0e, 0xbf, 0x28, 0x54, 0x29, 0x68, 0x08, 0x8b, 0x05, - 0x18, 0x6e, 0xa8, 0x96, 0xbd, 0xa7, 0xd6, 0x7b, 0x1a, 0x8e, 0xbf, 0xcb, 0x79, 0x64, 0x5c, 0x22, - 0xae, 0x91, 0xa6, 0xde, 0x0f, 0x9b, 0x2f, 0x08, 0x8d, 0xf8, 0xc8, 0xf8, 0xd4, 0xb3, 0x1d, 0x9a, - 0x65, 0xeb, 0x87, 0xdb, 0x2f, 0x89, 0xa9, 0xc7, 0x68, 0x57, 0xfd, 0x1c, 0xcf, 0x43, 0xda, 0xd6, - 0x5e, 0xea, 0x89, 0xcd, 0x2f, 0x8b, 0x91, 0xa6, 0x04, 0x84, 0xf8, 0x6d, 0x70, 0xac, 0xed, 0x32, - 0xd1, 0x03, 0xb3, 0xbf, 0xc7, 0x99, 0x4d, 0xb6, 0x59, 0x2a, 0xb8, 0x4b, 0xe8, 0x97, 0xe5, 0xdf, - 0x17, 0x2e, 0x01, 0x87, 0x78, 0x6d, 0x90, 0x7d, 0x84, 0xad, 0xee, 0xf6, 0xa7, 0xb5, 0x5f, 0x11, - 0x5a, 0x63, 0xb4, 0x01, 0xad, 0x6d, 0xc1, 0x24, 0xe7, 0xd8, 0xdf, 0xb8, 0xfe, 0xaa, 0x70, 0xac, - 0x8c, 0x7a, 0x3b, 0x38, 0xba, 0xef, 0x80, 0xbc, 0xab, 0x4e, 0x11, 0xb0, 0xda, 0xe5, 0x86, 0x6a, - 0xf6, 0xc0, 0xf9, 0xd7, 0x38, 0x67, 0xe1, 0xf1, 0xdd, 0x88, 0xd7, 0x5e, 0x55, 0x4d, 0xc2, 0xfc, - 0xad, 0x90, 0x13, 0xcc, 0x9b, 0xba, 0x85, 0x2b, 0x46, 0x4d, 0xd7, 0x5e, 0xc2, 0xd5, 0x1e, 0x58, - 0xff, 0x7a, 0x68, 0xa8, 0xb6, 0x7d, 0xe4, 0x84, 0xf3, 0x32, 0x64, 0xdd, 0x58, 0xa5, 0xac, 0x35, - 0x4c, 0xc3, 0x72, 0x22, 0x38, 0x7e, 0x51, 0x8c, 0x94, 0x4b, 0xb7, 0x4c, 0xc9, 0x0a, 0x25, 0x18, - 0xa1, 0xc5, 0x5e, 0x4d, 0xf2, 0x4b, 0x9c, 0xd1, 0xb0, 0x47, 0xc5, 0x1d, 0x47, 0xc5, 0x68, 0x98, - 0xaa, 0xd5, 0x8b, 0xff, 0xfb, 0x07, 0xc2, 0x71, 0x70, 0x12, 0xee, 0x38, 0x9c, 0x03, 0x13, 0x93, - 0xd5, 0xbe, 0x07, 0x0e, 0x5f, 0x16, 0x8e, 0x43, 0xd0, 0x70, 0x16, 0x22, 0x60, 0xe8, 0x81, 0xc5, - 0x3f, 0x14, 0x2c, 0x04, 0x0d, 0x61, 0xf1, 0x9c, 0xb7, 0xd0, 0x5a, 0xb8, 0xa6, 0xd9, 0x8e, 0xc5, - 0xc2, 0xe4, 0xee, 0xac, 0xfe, 0xd1, 0x77, 0x83, 0x41, 0x98, 0xe2, 0x23, 0x25, 0x9e, 0x88, 0xa7, - 0x5d, 0xe9, 0x2e, 0x2a, 0x5a, 0xb0, 0xdf, 0x10, 0x9e, 0xc8, 0x47, 0x46, 0x64, 0xf3, 0x45, 0x88, - 0x44, 0xed, 0x15, 0xb2, 0x77, 0xe8, 0x81, 0xdd, 0x3f, 0x0e, 0x09, 0xb7, 0x29, 0x68, 0x09, 0x4f, - 0x5f, 0xfc, 0xd3, 0xd4, 0xf7, 0xf1, 0x41, 0x4f, 0xd6, 0xf9, 0x4f, 0x42, 0xf1, 0xcf, 0x36, 0xa3, - 0x64, 0x3e, 0x64, 0x34, 0x14, 0x4f, 0xa1, 0xa8, 0xfb, 0x43, 0xb9, 0x9f, 0xfc, 0x3e, 0xef, 0x6f, - 0x30, 0x9c, 0x2a, 0xac, 0x10, 0x23, 0x0f, 0x06, 0x3d, 0xd1, 0xcc, 0xde, 0xf7, 0x7d, 0xd7, 0xce, - 0x03, 0x31, 0x4f, 0xe1, 0x02, 0x0c, 0x07, 0x02, 0x9e, 0x68, 0x56, 0xef, 0xe7, 0xac, 0x32, 0xfe, - 0x78, 0xa7, 0x70, 0x1a, 0x12, 0x24, 0x78, 0x89, 0x26, 0xff, 0xff, 0x39, 0x39, 0x45, 0x2f, 0xbc, - 0x19, 0x52, 0x22, 0x68, 0x89, 0x26, 0xfd, 0x00, 0x27, 0x75, 0x49, 0x08, 0xb9, 0x08, 0x58, 0xa2, - 0xc9, 0xff, 0x9a, 0x20, 0x17, 0x24, 0x84, 0xbc, 0x77, 0x15, 0x7e, 0xe5, 0xa7, 0x12, 0x7c, 0xd1, - 0x11, 0xba, 0x3b, 0x0f, 0x83, 0x3c, 0x52, 0x89, 0xa6, 0xfe, 0x10, 0x6f, 0x5c, 0x50, 0x14, 0x9e, - 0x86, 0x64, 0x8f, 0x0a, 0xff, 0x69, 0x4e, 0xca, 0xf0, 0x0b, 0x0b, 0x30, 0xe4, 0x8b, 0x4e, 0xa2, - 0xc9, 0xff, 0x06, 0x27, 0xf7, 0x53, 0x11, 0xd1, 0x79, 0x74, 0x12, 0xcd, 0xe0, 0xc3, 0x42, 0x74, - 0x4e, 0x41, 0xd4, 0x26, 0x02, 0x93, 0x68, 0xea, 0x8f, 0x08, 0xad, 0x0b, 0x92, 0xc2, 0xb3, 0x90, - 0x76, 0x17, 0x9b, 0x68, 0xfa, 0x8f, 0x72, 0x7a, 0x8f, 0x86, 0x68, 0xc0, 0xb7, 0xd8, 0x45, 0xb3, - 0xf8, 0x19, 0xa1, 0x01, 0x1f, 0x15, 0x99, 0x46, 0xe1, 0x00, 0x26, 0x9a, 0xd3, 0xc7, 0xc4, 0x34, - 0x0a, 0xc5, 0x2f, 0x64, 0x34, 0xa9, 0xcf, 0x8f, 0x66, 0xf1, 0xb3, 0x62, 0x34, 0x29, 0x3e, 0x11, - 0x23, 0x1c, 0x11, 0x44, 0xf3, 0xf8, 0x9b, 0x42, 0x8c, 0x50, 0x40, 0x50, 0xd8, 0x00, 0xd4, 0x1a, - 0x0d, 0x44, 0xf3, 0xfb, 0x38, 0xe7, 0x37, 0xd6, 0x12, 0x0c, 0x14, 0x9e, 0x87, 0xc9, 0xf6, 0x91, - 0x40, 0x34, 0xd7, 0x4f, 0x7c, 0x3f, 0xb4, 0x77, 0xf3, 0x07, 0x02, 0x85, 0x2d, 0x6f, 0x49, 0xf1, - 0x47, 0x01, 0xd1, 0x6c, 0x5f, 0xfd, 0x7e, 0xd0, 0x71, 0xfb, 0x83, 0x80, 0xc2, 0x3c, 0x80, 0xb7, - 0x00, 0x47, 0xf3, 0xfa, 0x14, 0xe7, 0xe5, 0x23, 0x22, 0x53, 0x83, 0xaf, 0xbf, 0xd1, 0xf4, 0x37, - 0xc4, 0xd4, 0xe0, 0x14, 0x64, 0x6a, 0x88, 0xa5, 0x37, 0x9a, 0xfa, 0xd3, 0x62, 0x6a, 0x08, 0x12, - 0x62, 0xd9, 0xbe, 0xd5, 0x2d, 0x9a, 0xc3, 0x67, 0x85, 0x65, 0xfb, 0xa8, 0x0a, 0x6b, 0x30, 0xd6, - 0xb2, 0x20, 0x46, 0xb3, 0xfa, 0x79, 0xce, 0x2a, 0x1b, 0x5e, 0x0f, 0xfd, 0x8b, 0x17, 0x5f, 0x0c, - 0xa3, 0xb9, 0x7d, 0x2e, 0xb4, 0x78, 0xf1, 0xb5, 0xb0, 0x70, 0x1e, 0x52, 0x7a, 0xb3, 0x5e, 0x27, - 0x93, 0x07, 0x75, 0xbf, 0xf3, 0x97, 0xfb, 0x4f, 0x3f, 0xe0, 0xda, 0x11, 0x04, 0x85, 0xd3, 0x90, - 0xc4, 0x8d, 0x1d, 0x5c, 0x8d, 0xa2, 0xfc, 0xce, 0x0f, 0x84, 0xc3, 0x24, 0xd8, 0x85, 0x67, 0x01, - 0x58, 0x6a, 0x84, 0x1e, 0x0f, 0x46, 0xd0, 0xfe, 0xe7, 0x1f, 0xf0, 0xdb, 0x38, 0x1e, 0x89, 0xc7, - 0x80, 0xdd, 0xed, 0xe9, 0xce, 0xe0, 0xbb, 0x41, 0x06, 0x74, 0x44, 0xce, 0xc1, 0xe0, 0x0b, 0xb6, - 0xa1, 0x3b, 0x6a, 0x2d, 0x8a, 0xfa, 0xbf, 0x70, 0x6a, 0x81, 0x4f, 0x14, 0xd6, 0x30, 0x2c, 0xec, - 0xa8, 0x35, 0x3b, 0x8a, 0xf6, 0xbf, 0x72, 0x5a, 0x97, 0x80, 0x10, 0x57, 0x54, 0xdb, 0xe9, 0xa5, - 0xdf, 0x7f, 0x2a, 0x88, 0x05, 0x01, 0x11, 0x9a, 0xfc, 0xde, 0xc7, 0x07, 0x51, 0xb4, 0xdf, 0x13, - 0x42, 0x73, 0xfc, 0xc2, 0x9b, 0x21, 0x4d, 0x7e, 0xb2, 0x2b, 0x76, 0x11, 0xc4, 0x7f, 0xc6, 0x89, - 0x3d, 0x0a, 0xd2, 0xb2, 0xed, 0x54, 0x1d, 0x2d, 0x5a, 0xd9, 0xb7, 0xf8, 0x48, 0x0b, 0xfc, 0xc2, - 0x3c, 0x0c, 0xd9, 0x4e, 0xb5, 0xda, 0xe4, 0xf1, 0x69, 0x04, 0xf9, 0x7f, 0xfb, 0x81, 0x9b, 0xb2, - 0x70, 0x69, 0xc8, 0x68, 0x5f, 0xdb, 0x77, 0x4c, 0x83, 0x1e, 0x81, 0x44, 0x71, 0xf8, 0x3e, 0xe7, - 0xe0, 0x23, 0x29, 0x2c, 0x40, 0x86, 0xf4, 0xc5, 0xc2, 0x26, 0xa6, 0xe7, 0x55, 0x11, 0x2c, 0xfe, - 0x9c, 0x2b, 0x20, 0x40, 0x54, 0xfc, 0x89, 0xaf, 0xbe, 0x36, 0x25, 0x7d, 0xe3, 0xb5, 0x29, 0xe9, - 0x8f, 0x5f, 0x9b, 0x92, 0x3e, 0xf2, 0xad, 0xa9, 0x23, 0xdf, 0xf8, 0xd6, 0xd4, 0x91, 0xdf, 0xff, - 0xd6, 0xd4, 0x91, 0xf6, 0x69, 0x63, 0x58, 0x32, 0x96, 0x0c, 0x96, 0x30, 0x7e, 0xbb, 0x1c, 0x48, - 0x17, 0xd7, 0x0c, 0x2f, 0x5b, 0xeb, 0x6e, 0x72, 0xe0, 0xbd, 0x71, 0x38, 0x56, 0x31, 0xec, 0x86, - 0x61, 0x97, 0x59, 0xbe, 0x97, 0x15, 0x78, 0xc6, 0x37, 0xe3, 0xaf, 0xea, 0x21, 0xe9, 0x7b, 0x11, - 0x46, 0x68, 0xd7, 0x69, 0xba, 0x8b, 0x5a, 0x5b, 0xa4, 0x83, 0xf8, 0xda, 0xbf, 0x4e, 0xd2, 0x5e, - 0x0f, 0xbb, 0x84, 0xf4, 0x3c, 0x7f, 0x0b, 0x26, 0xb4, 0x86, 0x59, 0xc7, 0x34, 0xf1, 0x5f, 0x76, - 0xeb, 0xa2, 0xf9, 0x7d, 0x9d, 0xf3, 0x1b, 0xf7, 0xc8, 0x97, 0x05, 0x75, 0x61, 0x05, 0xc6, 0xd4, - 0x4a, 0x05, 0x9b, 0x01, 0x96, 0x11, 0xc3, 0x22, 0x04, 0xcc, 0x72, 0x4a, 0x97, 0x5b, 0xf1, 0xd9, - 0x4e, 0x43, 0xf3, 0xf6, 0x07, 0x7c, 0x9a, 0xb7, 0x70, 0x0d, 0xeb, 0x8f, 0xe9, 0xd8, 0xb9, 0x66, - 0x58, 0xfb, 0x5c, 0xbd, 0x8f, 0xb1, 0xa6, 0x06, 0xe8, 0x9f, 0x27, 0xe1, 0x23, 0x31, 0x98, 0x0e, - 0xeb, 0x96, 0x58, 0xb1, 0xed, 0xa8, 0x0d, 0xb3, 0xd3, 0x73, 0xa8, 0xf3, 0x90, 0xde, 0x12, 0x38, - 0x28, 0x07, 0x83, 0x36, 0xae, 0x18, 0x7a, 0xd5, 0xa6, 0x67, 0xcd, 0x71, 0x45, 0x14, 0xd1, 0x04, - 0x24, 0x75, 0x55, 0x37, 0x6c, 0x7e, 0x5b, 0x93, 0x15, 0x8a, 0x3f, 0x27, 0xf5, 0x67, 0x56, 0x23, - 0x6e, 0x53, 0xd4, 0xb6, 0x36, 0xa4, 0xb7, 0x3f, 0xd2, 0xed, 0x2c, 0x82, 0x0c, 0xbd, 0xed, 0x75, - 0xc1, 0x77, 0xf0, 0x30, 0x15, 0x3e, 0x78, 0x78, 0x1e, 0xd7, 0xeb, 0x97, 0x75, 0xe3, 0x9a, 0x4e, - 0x86, 0xdd, 0x76, 0x55, 0xf2, 0x85, 0x04, 0xdc, 0x43, 0xaf, 0xa1, 0x5b, 0x0d, 0x4d, 0x77, 0xe6, - 0x2a, 0xd6, 0x81, 0xe9, 0x50, 0x03, 0x36, 0x76, 0xb9, 0x42, 0xc6, 0xbc, 0xea, 0x59, 0x56, 0x9d, - 0x6f, 0x7b, 0x6c, 0x21, 0xef, 0x42, 0x72, 0x83, 0xd0, 0x11, 0x55, 0x38, 0x86, 0xa3, 0xd6, 0xb9, - 0x8a, 0x58, 0x81, 0x40, 0xd9, 0xd5, 0xf5, 0x18, 0x83, 0x6a, 0xe2, 0xd6, 0x7a, 0x1d, 0xab, 0xbb, - 0xec, 0xaa, 0x60, 0x9c, 0x9e, 0x14, 0xa6, 0x08, 0x80, 0xde, 0x0a, 0x9c, 0x80, 0xa4, 0xda, 0x64, - 0x87, 0x5c, 0xf1, 0x13, 0x19, 0x85, 0x15, 0xe4, 0xcb, 0x30, 0xc8, 0x13, 0xeb, 0x28, 0x0b, 0xf1, - 0x7d, 0x7c, 0x40, 0xdb, 0xc9, 0x28, 0xe4, 0x27, 0x9a, 0x85, 0x24, 0x15, 0x9e, 0xdf, 0x81, 0xce, - 0xcd, 0xb6, 0x48, 0x3f, 0x4b, 0x85, 0x54, 0x18, 0x9a, 0x7c, 0x09, 0x52, 0x8b, 0x46, 0x43, 0xd3, - 0x8d, 0x20, 0xb7, 0x34, 0xe3, 0x46, 0x65, 0x36, 0x9b, 0x0e, 0x3f, 0x77, 0x62, 0x05, 0x34, 0x09, - 0x03, 0xec, 0xea, 0x28, 0x3f, 0xa8, 0xe3, 0x25, 0x79, 0x01, 0x06, 0x29, 0xef, 0x75, 0x13, 0x21, - 0xfe, 0x96, 0x80, 0xdf, 0x51, 0xa5, 0x53, 0x94, 0xb3, 0x8f, 0x79, 0xc2, 0x22, 0x48, 0x54, 0x55, - 0x47, 0xe5, 0xfd, 0xa6, 0xbf, 0xe5, 0x67, 0x20, 0xc5, 0x99, 0xd8, 0xe8, 0x14, 0xc4, 0x0d, 0xd3, - 0xe6, 0x47, 0x6d, 0xf9, 0x4e, 0x5d, 0x59, 0x37, 0x8b, 0x89, 0xaf, 0xde, 0x9c, 0x3e, 0xa2, 0x10, - 0xe4, 0xa2, 0xd2, 0x71, 0xb2, 0x9c, 0xf5, 0x59, 0x92, 0x6f, 0xc8, 0x7d, 0x3f, 0xd9, 0x90, 0xb6, - 0x98, 0x83, 0x6b, 0x2c, 0x9f, 0x8d, 0xc1, 0x94, 0xaf, 0xf6, 0x2a, 0xb6, 0x48, 0x74, 0x39, 0x47, - 0xad, 0x90, 0x5b, 0x0b, 0xf2, 0x09, 0xc9, 0xeb, 0x3b, 0x98, 0xcb, 0x9b, 0x21, 0x3e, 0x6f, 0x9a, - 0x28, 0x0f, 0x29, 0x76, 0xa4, 0x66, 0x30, 0x7b, 0x49, 0x28, 0x6e, 0x99, 0xd4, 0xd9, 0xc6, 0xae, - 0x73, 0x4d, 0xb5, 0xdc, 0x47, 0x13, 0xa2, 0x2c, 0x9f, 0x83, 0xf4, 0x82, 0xa1, 0xdb, 0x58, 0xb7, - 0x9b, 0x74, 0xf2, 0xed, 0xd4, 0x8d, 0xca, 0x3e, 0xe7, 0xc0, 0x0a, 0x44, 0xe1, 0xaa, 0x69, 0x52, - 0xca, 0x84, 0x42, 0x7e, 0x16, 0x12, 0xaf, 0x7f, 0x66, 0x5a, 0x2a, 0x6e, 0x76, 0x54, 0xd1, 0xb9, - 0xfe, 0x55, 0xc4, 0x3b, 0xe9, 0xea, 0xe8, 0x0f, 0x25, 0x38, 0xde, 0x3a, 0xa1, 0xf6, 0xf1, 0x81, - 0xdd, 0xef, 0x7c, 0x3a, 0x0b, 0xe9, 0x0d, 0xfa, 0x72, 0xf1, 0x32, 0x3e, 0x40, 0x79, 0x18, 0xc4, - 0xd5, 0x53, 0xa7, 0x4f, 0x3f, 0x71, 0x8e, 0x59, 0xfb, 0xc5, 0x23, 0x8a, 0x00, 0x14, 0x52, 0xa4, - 0x57, 0xaf, 0x7f, 0x76, 0x5a, 0x2a, 0x26, 0x21, 0x6e, 0x37, 0x1b, 0x77, 0xd4, 0x06, 0x5e, 0x4d, - 0xc2, 0x8c, 0x9f, 0x92, 0x7a, 0xa0, 0xab, 0x6a, 0x5d, 0xab, 0xaa, 0xde, 0x9b, 0xd2, 0xac, 0xaf, - 0x8f, 0x14, 0xa3, 0x7d, 0x17, 0xf3, 0x5d, 0x35, 0x25, 0xff, 0xba, 0x04, 0x99, 0x2b, 0x82, 0xf3, - 0x26, 0x76, 0xd0, 0x79, 0x00, 0xb7, 0x25, 0x31, 0x2d, 0xee, 0x9e, 0x0d, 0xb7, 0x35, 0xeb, 0xd2, - 0x28, 0x3e, 0x74, 0xf4, 0x34, 0x35, 0x34, 0xd3, 0xb0, 0xf9, 0x8d, 0xfa, 0x08, 0x52, 0x17, 0x19, - 0x3d, 0x0a, 0x88, 0x7a, 0xb0, 0xf2, 0x55, 0xc3, 0xd1, 0xf4, 0x5a, 0xd9, 0x34, 0xae, 0xf1, 0xe7, - 0x47, 0x71, 0x25, 0x4b, 0x6b, 0xae, 0xd0, 0x8a, 0x0d, 0x02, 0x27, 0x42, 0xa7, 0x5d, 0x2e, 0x64, - 0xbd, 0x50, 0xab, 0x55, 0x0b, 0xdb, 0x36, 0x77, 0x52, 0xa2, 0x88, 0xce, 0xc3, 0xa0, 0xd9, 0xdc, - 0x29, 0x0b, 0x8f, 0x30, 0x74, 0xea, 0x78, 0xbb, 0xf9, 0x2d, 0xc6, 0x9f, 0xcf, 0xf0, 0x01, 0xb3, - 0xb9, 0x43, 0xac, 0xe1, 0x5e, 0xc8, 0xb4, 0x11, 0x66, 0xe8, 0xaa, 0x27, 0x07, 0x7d, 0x10, 0xcb, - 0x7b, 0x50, 0x36, 0x2d, 0xcd, 0xb0, 0x34, 0xe7, 0x80, 0x9e, 0x87, 0xc7, 0x95, 0xac, 0xa8, 0xd8, - 0xe0, 0x70, 0x79, 0x1f, 0x46, 0x37, 0xe9, 0x3a, 0xee, 0x49, 0x7e, 0xda, 0x93, 0x4f, 0x8a, 0x96, - 0xaf, 0xa3, 0x64, 0xb1, 0x16, 0xc9, 0x8a, 0xcf, 0x75, 0xb4, 0xce, 0xa7, 0xfb, 0xb7, 0x4e, 0x27, - 0xb0, 0x9a, 0xfd, 0xe9, 0xb1, 0xc0, 0xe4, 0xe3, 0xcb, 0xa3, 0xcf, 0x3d, 0xf5, 0x6a, 0x98, 0x51, - 0x61, 0x42, 0xbe, 0xfb, 0xa2, 0x99, 0x8f, 0x70, 0x93, 0xf9, 0xc8, 0x29, 0x24, 0x9f, 0x83, 0xe1, - 0x0d, 0xd5, 0x72, 0x36, 0xb1, 0x73, 0x11, 0xab, 0x55, 0x6c, 0x05, 0x57, 0xd5, 0x61, 0xb1, 0xaa, - 0x22, 0x48, 0xd0, 0xa5, 0x93, 0xad, 0x2a, 0xf4, 0xb7, 0xbc, 0x07, 0x09, 0x7a, 0x27, 0xc6, 0x5d, - 0x71, 0x39, 0x05, 0x5b, 0x71, 0x89, 0xaf, 0x3c, 0x70, 0xb0, 0xcd, 0x49, 0x58, 0x01, 0x3d, 0x25, - 0xd6, 0xcd, 0x78, 0xf7, 0x75, 0x93, 0x1b, 0x22, 0x5f, 0x3d, 0xeb, 0x30, 0x58, 0x24, 0xae, 0x76, - 0x79, 0xd1, 0x15, 0x44, 0xf2, 0x04, 0x41, 0xab, 0x30, 0x6a, 0xaa, 0x96, 0x43, 0x2f, 0x03, 0xef, - 0xd1, 0x5e, 0x70, 0x5b, 0x9f, 0x6e, 0x9d, 0x79, 0x81, 0xce, 0xf2, 0x56, 0x86, 0x4d, 0x3f, 0x50, - 0xfe, 0x93, 0x04, 0x0c, 0x70, 0x65, 0xbc, 0x19, 0x06, 0xb9, 0x5a, 0xb9, 0x75, 0xde, 0x33, 0xdb, - 0xba, 0xf0, 0xcc, 0xba, 0x0b, 0x04, 0xe7, 0x27, 0x68, 0xd0, 0x83, 0x90, 0xaa, 0xec, 0xa9, 0x9a, - 0x5e, 0xd6, 0xd8, 0xad, 0xd8, 0x74, 0x71, 0xe8, 0xb5, 0x9b, 0xd3, 0x83, 0x0b, 0x04, 0xb6, 0xbc, - 0xa8, 0x0c, 0xd2, 0xca, 0xe5, 0x2a, 0x59, 0xe9, 0xf7, 0xb0, 0x56, 0xdb, 0x73, 0xf8, 0x0c, 0xe3, - 0x25, 0x74, 0x16, 0x12, 0xc4, 0x20, 0xf8, 0x5b, 0x91, 0x7c, 0x4b, 0x60, 0xeb, 0x46, 0x71, 0xc5, - 0x14, 0x69, 0xf8, 0x23, 0x7f, 0x34, 0x2d, 0x29, 0x94, 0x02, 0x2d, 0xc0, 0x70, 0x5d, 0xb5, 0x9d, - 0x32, 0x5d, 0xa1, 0x48, 0xf3, 0x49, 0xca, 0xe2, 0x58, 0xab, 0x42, 0xb8, 0x62, 0xb9, 0xe8, 0x43, - 0x84, 0x8a, 0x81, 0xaa, 0xe8, 0x04, 0x64, 0x29, 0x93, 0x8a, 0xd1, 0x68, 0x68, 0x0e, 0x8b, 0x9d, - 0x06, 0xa8, 0xde, 0x47, 0x08, 0x7c, 0x81, 0x82, 0x69, 0x04, 0x75, 0x37, 0xa4, 0xe9, 0xe5, 0x74, - 0x8a, 0xc2, 0x2e, 0x62, 0xa5, 0x08, 0x80, 0x56, 0x3e, 0x04, 0xa3, 0x9e, 0x7f, 0x64, 0x28, 0x29, - 0xc6, 0xc5, 0x03, 0x53, 0xc4, 0xc7, 0x61, 0x42, 0xc7, 0xd7, 0xe9, 0xd5, 0xb0, 0x00, 0x76, 0x9a, - 0x62, 0x23, 0x52, 0x77, 0x25, 0x48, 0xf1, 0x00, 0x8c, 0x54, 0x84, 0xf2, 0x19, 0x2e, 0x50, 0xdc, - 0x61, 0x17, 0x4a, 0xd1, 0x8e, 0x41, 0x4a, 0x35, 0x4d, 0x86, 0x30, 0xc4, 0xfd, 0xa3, 0x69, 0xd2, - 0xaa, 0x93, 0x30, 0x46, 0xfb, 0x68, 0x61, 0xbb, 0x59, 0x77, 0x38, 0x93, 0x0c, 0xc5, 0x19, 0x25, - 0x15, 0x0a, 0x83, 0x53, 0xdc, 0xfb, 0x60, 0x18, 0x5f, 0xd5, 0xaa, 0x58, 0xaf, 0x60, 0x86, 0x37, - 0x4c, 0xf1, 0x32, 0x02, 0x48, 0x91, 0x1e, 0x06, 0xd7, 0xef, 0x95, 0x85, 0x4f, 0x1e, 0x61, 0xfc, - 0x04, 0x7c, 0x9e, 0x81, 0xe5, 0x1c, 0x24, 0x16, 0x55, 0x47, 0x25, 0x01, 0x84, 0x73, 0x9d, 0x2d, - 0x34, 0x19, 0x85, 0xfc, 0x94, 0x5f, 0x8f, 0x41, 0xe2, 0x8a, 0xe1, 0x60, 0xf4, 0xa4, 0x2f, 0xc0, - 0x1b, 0x69, 0x67, 0xcf, 0x9b, 0x5a, 0x4d, 0xc7, 0xd5, 0x55, 0xbb, 0xe6, 0x7b, 0x21, 0xea, 0x99, - 0x53, 0x2c, 0x60, 0x4e, 0x13, 0x90, 0xb4, 0x8c, 0xa6, 0x5e, 0x15, 0x77, 0x98, 0x68, 0x01, 0x95, - 0x20, 0xe5, 0x5a, 0x49, 0x22, 0xca, 0x4a, 0x46, 0x89, 0x95, 0x10, 0x1b, 0xe6, 0x00, 0x65, 0x70, - 0x87, 0x1b, 0x4b, 0x11, 0xd2, 0xae, 0xf3, 0xe2, 0xd6, 0xd6, 0x9b, 0xc1, 0x7a, 0x64, 0x64, 0x31, - 0x71, 0xc7, 0xde, 0x55, 0x1e, 0xb3, 0xb8, 0xac, 0x5b, 0xc1, 0xb5, 0x17, 0x30, 0x2b, 0xfe, 0x5a, - 0x75, 0x90, 0xf6, 0xcb, 0x33, 0x2b, 0xf6, 0x62, 0xf5, 0x38, 0xa4, 0x6d, 0xad, 0xa6, 0xab, 0x4e, - 0xd3, 0xc2, 0xdc, 0xf2, 0x3c, 0x80, 0xfc, 0x15, 0x09, 0x06, 0x98, 0x25, 0xfb, 0xf4, 0x26, 0xb5, - 0xd7, 0x5b, 0xac, 0x93, 0xde, 0xe2, 0x87, 0xd7, 0xdb, 0x3c, 0x80, 0x2b, 0x8c, 0xcd, 0x5f, 0x1b, - 0xb6, 0x89, 0x18, 0x98, 0x88, 0x9b, 0x5a, 0x8d, 0x4f, 0x54, 0x1f, 0x91, 0xfc, 0x87, 0x12, 0x09, - 0x52, 0x79, 0x3d, 0x9a, 0x87, 0x61, 0x21, 0x57, 0x79, 0xb7, 0xae, 0xd6, 0xb8, 0xed, 0xdc, 0xd3, - 0x51, 0xb8, 0x0b, 0x75, 0xb5, 0xa6, 0x0c, 0x71, 0x79, 0x48, 0xa1, 0xfd, 0x38, 0xc4, 0x3a, 0x8c, - 0x43, 0x60, 0xe0, 0xe3, 0x87, 0x1b, 0xf8, 0xc0, 0x10, 0x25, 0xc2, 0x43, 0xf4, 0xc5, 0x18, 0xdd, - 0xac, 0x98, 0x86, 0xad, 0xd6, 0x7f, 0x14, 0x33, 0xe2, 0x6e, 0x48, 0x9b, 0x46, 0xbd, 0xcc, 0x6a, - 0xd8, 0xdd, 0xbe, 0x94, 0x69, 0xd4, 0x95, 0x96, 0x61, 0x4f, 0xde, 0xa6, 0xe9, 0x32, 0x70, 0x1b, - 0xb4, 0x36, 0x18, 0xd6, 0x9a, 0x05, 0x19, 0xa6, 0x0a, 0xbe, 0x96, 0x3d, 0x4e, 0x74, 0x40, 0x17, - 0x47, 0xa9, 0x75, 0xed, 0x65, 0x62, 0x33, 0x4c, 0x85, 0xe3, 0x11, 0x0a, 0xe6, 0xfa, 0xdb, 0xed, - 0x72, 0xfd, 0x66, 0xa9, 0x70, 0x3c, 0xf9, 0xe7, 0x24, 0x80, 0x15, 0xa2, 0x59, 0xda, 0x5f, 0xb2, - 0x0a, 0xd9, 0x54, 0x84, 0x72, 0xa0, 0xe5, 0xa9, 0x4e, 0x83, 0xc6, 0xdb, 0xcf, 0xd8, 0x7e, 0xb9, - 0x17, 0x60, 0xd8, 0x33, 0x46, 0x1b, 0x0b, 0x61, 0xa6, 0xba, 0x44, 0xd5, 0x9b, 0xd8, 0x51, 0x32, - 0x57, 0x7d, 0x25, 0xf9, 0x9f, 0x49, 0x90, 0xa6, 0x32, 0xad, 0x62, 0x47, 0x0d, 0x8c, 0xa1, 0x74, - 0xf8, 0x31, 0xbc, 0x07, 0x80, 0xb1, 0xb1, 0xb5, 0x97, 0x30, 0xb7, 0xac, 0x34, 0x85, 0x6c, 0x6a, - 0x2f, 0x61, 0x74, 0xc6, 0x55, 0x78, 0xbc, 0xbb, 0xc2, 0x45, 0xd4, 0xcd, 0xd5, 0x7e, 0x17, 0x0c, - 0xd2, 0x8f, 0x6e, 0x5c, 0xb7, 0x79, 0x20, 0x3d, 0xa0, 0x37, 0x1b, 0x5b, 0xd7, 0x6d, 0xf9, 0x05, - 0x18, 0xdc, 0xba, 0xce, 0x72, 0x1f, 0x77, 0x43, 0xda, 0x32, 0x0c, 0xbe, 0x26, 0xb3, 0x58, 0x28, - 0x45, 0x00, 0x74, 0x09, 0x12, 0xfb, 0xfd, 0x98, 0xb7, 0xdf, 0xf7, 0x12, 0x16, 0xf1, 0x9e, 0x12, - 0x16, 0x27, 0xff, 0x8d, 0x04, 0x43, 0x3e, 0xff, 0x80, 0x9e, 0x80, 0xa3, 0xc5, 0x95, 0xf5, 0x85, - 0xcb, 0xe5, 0xe5, 0xc5, 0xf2, 0x85, 0x95, 0xf9, 0x25, 0xef, 0xf6, 0x7a, 0x7e, 0xf2, 0x95, 0x1b, - 0x33, 0xc8, 0x87, 0xbb, 0xad, 0xef, 0xeb, 0xc6, 0x35, 0x1d, 0xcd, 0xc1, 0x44, 0x90, 0x64, 0xbe, - 0xb8, 0x59, 0x5a, 0xdb, 0xca, 0x4a, 0xf9, 0xa3, 0xaf, 0xdc, 0x98, 0x19, 0xf3, 0x51, 0xcc, 0xef, - 0xd8, 0x58, 0x77, 0x5a, 0x09, 0x16, 0xd6, 0x57, 0x57, 0x97, 0xb7, 0xb2, 0xb1, 0x16, 0x02, 0xee, - 0xb0, 0x1f, 0x86, 0xb1, 0x20, 0xc1, 0xda, 0xf2, 0x4a, 0x36, 0x9e, 0x47, 0xaf, 0xdc, 0x98, 0x19, - 0xf1, 0x61, 0xaf, 0x69, 0xf5, 0x7c, 0xea, 0x83, 0x9f, 0x9b, 0x3a, 0xf2, 0x8b, 0xbf, 0x30, 0x25, - 0x91, 0x9e, 0x0d, 0x07, 0x7c, 0x04, 0x7a, 0x14, 0xee, 0xda, 0x5c, 0x5e, 0x5a, 0x2b, 0x2d, 0x96, - 0x57, 0x37, 0x97, 0xca, 0xec, 0xd9, 0xbe, 0xdb, 0xbb, 0xd1, 0x57, 0x6e, 0xcc, 0x0c, 0xf1, 0x2e, - 0x75, 0xc2, 0xde, 0x50, 0x4a, 0x57, 0xd6, 0xb7, 0x4a, 0x59, 0x89, 0x61, 0x6f, 0x58, 0xf8, 0xaa, - 0xe1, 0xb0, 0xaf, 0xf2, 0x3c, 0x0e, 0xc7, 0xda, 0x60, 0xbb, 0x1d, 0x1b, 0x7b, 0xe5, 0xc6, 0xcc, - 0xf0, 0x86, 0x85, 0xd9, 0xfc, 0xa1, 0x14, 0xb3, 0x90, 0x6b, 0xa5, 0x58, 0xdf, 0x58, 0xdf, 0x9c, - 0x5f, 0xc9, 0xce, 0xe4, 0xb3, 0xaf, 0xdc, 0x98, 0xc9, 0x08, 0x67, 0x48, 0xf0, 0xbd, 0x9e, 0xdd, - 0xc9, 0x1d, 0xcf, 0x5f, 0x8f, 0xc1, 0x54, 0x4b, 0xba, 0x98, 0x67, 0xd6, 0x3b, 0x65, 0x34, 0x0b, - 0x90, 0x5a, 0x14, 0x09, 0xfb, 0x7e, 0x13, 0x9a, 0x3f, 0xdb, 0x67, 0x42, 0x73, 0x58, 0xb4, 0x24, - 0xf2, 0x99, 0x27, 0xa3, 0xf3, 0x99, 0x42, 0xfe, 0x43, 0xa4, 0x33, 0xdf, 0x1f, 0x87, 0x29, 0x96, - 0xfa, 0x9d, 0xdb, 0x51, 0x6d, 0x3c, 0x77, 0xf5, 0x89, 0x1d, 0xec, 0xa8, 0x4f, 0xcc, 0x55, 0x0c, - 0x4d, 0xa8, 0x63, 0x9c, 0x67, 0xde, 0x49, 0xfd, 0x2c, 0xaf, 0xef, 0x90, 0x81, 0x59, 0x82, 0xc4, - 0x82, 0xa1, 0xe9, 0x44, 0x15, 0x55, 0xac, 0x1b, 0x0d, 0x9e, 0xce, 0x63, 0x05, 0x74, 0x1f, 0x0c, - 0xa8, 0x0d, 0xa3, 0xa9, 0x3b, 0x62, 0x0b, 0x41, 0x9c, 0xc5, 0x1f, 0xdc, 0x9c, 0x8e, 0x2f, 0xeb, - 0x8e, 0xc2, 0xab, 0x58, 0xc6, 0x49, 0xbe, 0x04, 0x83, 0x8b, 0xb8, 0x72, 0x18, 0x5e, 0x8b, 0xb8, - 0x12, 0xe2, 0xf5, 0x30, 0xa4, 0x96, 0x75, 0x87, 0x3d, 0x85, 0xbf, 0x07, 0xe2, 0x9a, 0xce, 0xa2, - 0xa2, 0x50, 0xfb, 0x04, 0x4e, 0x50, 0x17, 0x71, 0xc5, 0x45, 0xad, 0xe2, 0x4a, 0x18, 0x95, 0xb0, - 0x27, 0xf0, 0xe2, 0xe2, 0xef, 0xff, 0xfb, 0xa9, 0x23, 0x2f, 0xbf, 0x36, 0x75, 0xa4, 0xa3, 0xa9, - 0xfa, 0x4f, 0x39, 0xb8, 0x8a, 0x79, 0x92, 0xdd, 0xae, 0xee, 0x87, 0xac, 0xf2, 0xcf, 0x25, 0x38, - 0x16, 0xb6, 0x4a, 0x55, 0x3f, 0xe8, 0x60, 0x90, 0x1d, 0xb4, 0xff, 0x26, 0x88, 0xcf, 0xeb, 0x07, - 0x64, 0x8f, 0x40, 0x3f, 0xab, 0xd2, 0xb4, 0xea, 0x5c, 0x67, 0x83, 0xa4, 0xbc, 0x6d, 0xd1, 0x94, - 0xb2, 0xf8, 0x1a, 0x05, 0xdd, 0xca, 0xb2, 0xd3, 0xac, 0xc4, 0xf7, 0x3e, 0x3b, 0x7d, 0xa4, 0xb8, - 0x1f, 0xee, 0xc8, 0x57, 0x22, 0x6d, 0x35, 0x35, 0xaf, 0x1f, 0x08, 0x33, 0x4d, 0xd2, 0x0e, 0xf5, - 0x6b, 0x7e, 0xff, 0xe1, 0x31, 0xb8, 0x9f, 0xeb, 0xc6, 0x76, 0xd4, 0x7d, 0x4d, 0xaf, 0xb9, 0x16, - 0xc8, 0xcb, 0x5c, 0x05, 0x93, 0xdc, 0x08, 0x05, 0xb4, 0xab, 0x1d, 0xe6, 0x3b, 0x9f, 0x1c, 0xe5, - 0xbb, 0xa6, 0x3b, 0xa2, 0xd3, 0x18, 0x11, 0xbe, 0x23, 0x1f, 0x31, 0x99, 0xf2, 0x9d, 0x47, 0x59, - 0xfe, 0x90, 0x04, 0x23, 0x17, 0x35, 0xdb, 0x31, 0x2c, 0xad, 0xa2, 0xd6, 0xe9, 0x0b, 0x92, 0x33, - 0xbd, 0x46, 0x3a, 0xa1, 0x85, 0xf7, 0x59, 0x18, 0xb8, 0xaa, 0xd6, 0x59, 0x88, 0x11, 0xa7, 0x5f, - 0xbc, 0x68, 0xaf, 0x3e, 0x2f, 0xd0, 0x10, 0x0c, 0x18, 0x99, 0xfc, 0x2b, 0x31, 0x18, 0xa5, 0x4b, - 0x93, 0xcd, 0x3e, 0x71, 0xe4, 0x60, 0x12, 0x1e, 0x27, 0x2c, 0xd5, 0xe1, 0x29, 0xfa, 0xe2, 0x2c, - 0x9f, 0x11, 0x0f, 0x46, 0x5b, 0xf9, 0x2c, 0x99, 0x34, 0x94, 0x16, 0xbd, 0x13, 0x52, 0x0d, 0xf5, - 0x7a, 0x99, 0xf2, 0x61, 0x13, 0x77, 0xbe, 0x3f, 0x3e, 0xb7, 0x6e, 0x4e, 0x8f, 0x1e, 0xa8, 0x8d, - 0x7a, 0x41, 0x16, 0x7c, 0x64, 0x65, 0xb0, 0xa1, 0x5e, 0x27, 0x22, 0x22, 0x13, 0x46, 0x09, 0xb4, - 0xb2, 0xa7, 0xea, 0x35, 0xcc, 0x1a, 0xa1, 0x07, 0x0e, 0xc5, 0x8b, 0x7d, 0x37, 0x32, 0xe9, 0x35, - 0xe2, 0x63, 0x27, 0x2b, 0xc3, 0x0d, 0xf5, 0xfa, 0x02, 0x05, 0x90, 0x16, 0x0b, 0xa9, 0x8f, 0x7f, - 0x66, 0xfa, 0x08, 0xf5, 0x32, 0xdf, 0x94, 0x00, 0x3c, 0x8d, 0xa1, 0x77, 0x42, 0xb6, 0xe2, 0x96, - 0x28, 0xad, 0xcd, 0xc7, 0xf0, 0xa1, 0x4e, 0x63, 0x11, 0xd2, 0x37, 0x8b, 0x94, 0xbf, 0x71, 0x73, - 0x5a, 0x52, 0x46, 0x2b, 0xa1, 0xa1, 0x78, 0x07, 0x0c, 0x35, 0xcd, 0xaa, 0xea, 0xe0, 0x32, 0xcd, - 0xaa, 0xc4, 0x22, 0xa3, 0xee, 0x29, 0xc2, 0xeb, 0xd6, 0xcd, 0x69, 0xc4, 0xba, 0xe5, 0x23, 0x96, - 0x69, 0x2c, 0x0e, 0x0c, 0x42, 0x08, 0x7c, 0x7d, 0xfa, 0x9a, 0x04, 0x43, 0x8b, 0xbe, 0x9b, 0x5c, - 0x39, 0x18, 0x6c, 0x18, 0xba, 0xb6, 0xcf, 0xed, 0x31, 0xad, 0x88, 0x22, 0xca, 0x43, 0x8a, 0x3d, - 0xaa, 0x73, 0x0e, 0xc4, 0xc1, 0x83, 0x28, 0x13, 0xaa, 0x6b, 0x78, 0xc7, 0xd6, 0xc4, 0x68, 0x28, - 0xa2, 0x88, 0x2e, 0x40, 0xd6, 0xc6, 0x95, 0xa6, 0xa5, 0x39, 0x07, 0xe5, 0x8a, 0xa1, 0x3b, 0x6a, - 0xc5, 0x61, 0xcf, 0xb3, 0x8a, 0x77, 0xdf, 0xba, 0x39, 0x7d, 0x17, 0x93, 0x35, 0x8c, 0x21, 0x2b, - 0xa3, 0x02, 0xb4, 0xc0, 0x20, 0xa4, 0x85, 0x2a, 0x76, 0x54, 0xad, 0x6e, 0xe7, 0xd8, 0x91, 0xa8, - 0x28, 0xfa, 0xfa, 0xf2, 0xe9, 0x41, 0x7f, 0x9a, 0xf9, 0x02, 0x64, 0x0d, 0x13, 0x5b, 0x81, 0x6d, - 0xa1, 0x14, 0x6e, 0x39, 0x8c, 0x21, 0x2b, 0xa3, 0x02, 0x24, 0xb6, 0x8c, 0xbb, 0x64, 0x98, 0x45, - 0xda, 0xc6, 0x6c, 0xee, 0x78, 0xd9, 0xe9, 0x89, 0x96, 0xd1, 0x98, 0xd7, 0x0f, 0x8a, 0x0f, 0x78, - 0xdc, 0xc3, 0x74, 0xf2, 0xd7, 0xbf, 0xf4, 0xd8, 0xc0, 0x06, 0x4d, 0x0a, 0x93, 0x01, 0xe7, 0x95, - 0x1b, 0xb4, 0x8e, 0x6c, 0xfb, 0x5e, 0x50, 0xb5, 0xba, 0x78, 0x58, 0xac, 0xf0, 0x12, 0x2a, 0xc0, - 0x80, 0xed, 0xa8, 0x4e, 0xd3, 0xe6, 0x9f, 0xf1, 0x92, 0x3b, 0x19, 0x57, 0xd1, 0xd0, 0xab, 0x9b, - 0x14, 0x53, 0xe1, 0x14, 0xe8, 0x02, 0x0c, 0x38, 0xc6, 0x3e, 0xd6, 0xb9, 0xd2, 0xfa, 0x9a, 0xd1, - 0x74, 0xc5, 0x66, 0xd4, 0xc8, 0x81, 0x6c, 0x15, 0xd7, 0x71, 0x8d, 0x6d, 0x6b, 0xf6, 0x54, 0xb2, - 0xfb, 0xa7, 0x5f, 0xf3, 0x2a, 0x2e, 0xf7, 0x3d, 0xed, 0xb8, 0x6e, 0xc2, 0xfc, 0x64, 0x65, 0xd4, - 0x05, 0x6d, 0x52, 0x08, 0xba, 0x1c, 0xb8, 0x64, 0xc8, 0x3f, 0x79, 0x77, 0x5f, 0xa7, 0xee, 0xfb, - 0xac, 0x58, 0xe4, 0x07, 0xfd, 0x57, 0x14, 0x2f, 0x40, 0xb6, 0xa9, 0xef, 0x18, 0x3a, 0x7d, 0xfd, - 0xc7, 0xf7, 0xd7, 0x29, 0x12, 0xdd, 0xf9, 0xcd, 0x21, 0x8c, 0x21, 0x2b, 0xa3, 0x2e, 0xe8, 0x22, - 0xdb, 0x85, 0x57, 0x61, 0xc4, 0xc3, 0xa2, 0x53, 0x33, 0x1d, 0x39, 0x35, 0xef, 0xe5, 0x53, 0xf3, - 0x68, 0xb8, 0x15, 0x6f, 0x76, 0x0e, 0xbb, 0x40, 0x42, 0x86, 0x2e, 0x02, 0x78, 0x0e, 0x81, 0xe6, - 0x09, 0x87, 0x3a, 0x0f, 0xbc, 0xe7, 0x55, 0x44, 0xbe, 0xc5, 0xa3, 0x45, 0xef, 0x86, 0xf1, 0x86, - 0xa6, 0x97, 0x6d, 0x5c, 0xdf, 0x2d, 0x73, 0x05, 0x13, 0x96, 0xf4, 0xeb, 0x2d, 0xc5, 0x95, 0xfe, - 0xec, 0xe1, 0xd6, 0xcd, 0xe9, 0x3c, 0x77, 0x9a, 0xad, 0x2c, 0x65, 0x65, 0xac, 0xa1, 0xe9, 0x9b, - 0xb8, 0xbe, 0xbb, 0xe8, 0xc2, 0x0a, 0x99, 0x0f, 0x7e, 0x66, 0xfa, 0x08, 0x9f, 0xa0, 0x47, 0xe4, - 0x33, 0xf4, 0xec, 0x8a, 0x4f, 0x2c, 0x6c, 0xa3, 0xe3, 0x90, 0x56, 0x45, 0x81, 0x66, 0x14, 0xd3, - 0x8a, 0x07, 0x60, 0x13, 0xfb, 0xe5, 0x7f, 0x37, 0x23, 0xc9, 0xbf, 0x2c, 0xc1, 0xc0, 0xe2, 0x95, - 0x0d, 0x55, 0xb3, 0xd0, 0x32, 0x8c, 0x79, 0x96, 0x13, 0x9c, 0xd6, 0xc7, 0x6f, 0xdd, 0x9c, 0xce, - 0x85, 0x8d, 0xcb, 0x9d, 0xd7, 0x9e, 0x01, 0x8b, 0x89, 0xbd, 0xdc, 0x29, 0x71, 0x14, 0x60, 0xd5, - 0x82, 0x22, 0xb7, 0xa6, 0x95, 0x42, 0xdd, 0x2c, 0xc1, 0x20, 0x93, 0xd6, 0x46, 0x05, 0x48, 0x9a, - 0xe4, 0x07, 0x3f, 0x98, 0x9b, 0xea, 0x68, 0xbc, 0x14, 0xdf, 0x3d, 0x48, 0x20, 0x24, 0xf2, 0x47, - 0x63, 0x00, 0x8b, 0x57, 0xae, 0x6c, 0x59, 0x9a, 0x59, 0xc7, 0xce, 0xed, 0xec, 0xf9, 0x16, 0x1c, - 0xf5, 0x65, 0x29, 0xac, 0x4a, 0xa8, 0xf7, 0x33, 0xb7, 0x6e, 0x4e, 0x1f, 0x0f, 0xf7, 0xde, 0x87, - 0x26, 0x2b, 0xe3, 0x5e, 0xbe, 0xc2, 0xaa, 0xb4, 0xe5, 0x5a, 0xb5, 0x1d, 0x97, 0x6b, 0xbc, 0x33, - 0x57, 0x1f, 0x9a, 0x9f, 0xeb, 0xa2, 0xed, 0xb4, 0x57, 0xed, 0x26, 0x0c, 0x79, 0x2a, 0xb1, 0xd1, - 0x22, 0xa4, 0x1c, 0xfe, 0x9b, 0x6b, 0x58, 0xee, 0xac, 0x61, 0x41, 0xc6, 0xb5, 0xec, 0x52, 0xca, - 0x7f, 0x21, 0x01, 0x78, 0x36, 0xfb, 0xe3, 0x69, 0x62, 0xc4, 0x95, 0x73, 0xc7, 0x1b, 0x3f, 0x54, - 0x70, 0xc6, 0xa9, 0x43, 0xfa, 0xfc, 0xa9, 0x18, 0x8c, 0x6f, 0x0b, 0xcf, 0xf3, 0x63, 0xaf, 0x83, - 0x0d, 0x18, 0xc4, 0xba, 0x63, 0x69, 0x54, 0x09, 0x64, 0xb4, 0x1f, 0xef, 0x34, 0xda, 0x6d, 0xfa, - 0x44, 0x3f, 0x5f, 0x23, 0x0e, 0xbd, 0x38, 0x9b, 0x90, 0x36, 0x3e, 0x1c, 0x87, 0x5c, 0x27, 0x4a, - 0xb4, 0x00, 0xa3, 0x15, 0x0b, 0x53, 0x40, 0xd9, 0x9f, 0x79, 0x2f, 0xe6, 0xbd, 0x58, 0x32, 0x84, - 0x20, 0x2b, 0x23, 0x02, 0xc2, 0x57, 0x8f, 0x1a, 0x90, 0x40, 0x8f, 0x98, 0x1d, 0xc1, 0xea, 0x31, - 0xb2, 0x93, 0xf9, 0xf2, 0x21, 0x1a, 0x09, 0x32, 0x60, 0xeb, 0xc7, 0x88, 0x07, 0xa5, 0x0b, 0xc8, - 0x8b, 0x30, 0xaa, 0xe9, 0x9a, 0xa3, 0xa9, 0xf5, 0xf2, 0x8e, 0x5a, 0x57, 0xf5, 0xca, 0x61, 0xe2, - 0x64, 0xe6, 0xf2, 0x79, 0xb3, 0x21, 0x76, 0xb2, 0x32, 0xc2, 0x21, 0x45, 0x06, 0x40, 0x17, 0x61, - 0x50, 0x34, 0x95, 0x38, 0x54, 0xb4, 0x21, 0xc8, 0x7d, 0x21, 0xdd, 0x4f, 0xc7, 0x61, 0x4c, 0xc1, - 0xd5, 0xff, 0x37, 0x14, 0xfd, 0x0d, 0xc5, 0x2a, 0x00, 0x9b, 0xee, 0xc4, 0xc1, 0x1e, 0x62, 0x34, - 0x88, 0xc3, 0x48, 0x33, 0x0e, 0x8b, 0xb6, 0xe3, 0x1b, 0x8f, 0x9b, 0x31, 0xc8, 0xf8, 0xc7, 0xe3, - 0xaf, 0xe8, 0xaa, 0x84, 0x96, 0x3d, 0x4f, 0x94, 0xe0, 0x5f, 0xfd, 0xec, 0xe0, 0x89, 0x5a, 0xac, - 0xb7, 0xbb, 0x0b, 0xfa, 0xef, 0x31, 0x18, 0xd8, 0x50, 0x2d, 0xb5, 0x61, 0xa3, 0x4a, 0x4b, 0xa4, - 0x29, 0xd2, 0xff, 0x2d, 0x9f, 0x6c, 0xe6, 0x09, 0x8a, 0x88, 0x40, 0xf3, 0xe3, 0x6d, 0x02, 0xcd, - 0xb7, 0xc0, 0x08, 0xd9, 0x00, 0xfb, 0xae, 0x10, 0x11, 0x6d, 0x0f, 0x17, 0x8f, 0x79, 0x5c, 0x82, - 0xf5, 0x6c, 0x7f, 0x7c, 0xc5, 0x7f, 0x87, 0x68, 0x88, 0x60, 0x78, 0x8e, 0x99, 0x90, 0x4f, 0x7a, - 0x1b, 0x51, 0x5f, 0xa5, 0xac, 0x40, 0x43, 0xbd, 0x5e, 0x62, 0x05, 0xb4, 0x02, 0x68, 0xcf, 0xcd, - 0x85, 0x94, 0x3d, 0x75, 0x12, 0xfa, 0x7b, 0x6e, 0xdd, 0x9c, 0x3e, 0xc6, 0xe8, 0x5b, 0x71, 0x64, - 0x65, 0xcc, 0x03, 0x0a, 0x6e, 0x4f, 0x01, 0x90, 0x7e, 0x95, 0x59, 0x22, 0x91, 0x6d, 0x77, 0x8e, - 0xde, 0xba, 0x39, 0x3d, 0xc6, 0xb8, 0x78, 0x75, 0xb2, 0x92, 0x26, 0x85, 0x45, 0xf2, 0xdb, 0x67, - 0xd9, 0x9f, 0x93, 0x00, 0x79, 0x2e, 0x5f, 0xc1, 0xb6, 0x49, 0xf6, 0x67, 0x24, 0x10, 0xf7, 0x45, - 0xcd, 0x52, 0xf7, 0x40, 0xdc, 0xa3, 0x17, 0x81, 0xb8, 0x6f, 0xa6, 0x9c, 0xf3, 0xdc, 0x63, 0x8c, - 0x8f, 0x63, 0x9b, 0xac, 0xeb, 0xec, 0x82, 0xa1, 0x09, 0xea, 0x16, 0x7f, 0x78, 0x44, 0xfe, 0x97, - 0x12, 0x1c, 0x6b, 0xb1, 0x28, 0x57, 0xd8, 0xff, 0x0f, 0x90, 0xe5, 0xab, 0xe4, 0x5f, 0x70, 0x63, - 0x42, 0xf7, 0x6d, 0xa0, 0x63, 0x56, 0x8b, 0xdf, 0xbd, 0x7d, 0x1e, 0x9e, 0xa5, 0x6d, 0x7f, 0x53, - 0x82, 0x09, 0x7f, 0xf3, 0x6e, 0x47, 0xd6, 0x20, 0xe3, 0x6f, 0x9d, 0x77, 0xe1, 0xfe, 0x5e, 0xba, - 0xc0, 0xa5, 0x0f, 0xd0, 0xa3, 0xe7, 0xbc, 0xe9, 0xca, 0xb2, 0x65, 0x4f, 0xf4, 0xac, 0x0d, 0x21, - 0x53, 0x78, 0xda, 0x26, 0xe8, 0x78, 0xfc, 0x6f, 0x09, 0x12, 0x1b, 0x86, 0x51, 0x47, 0x06, 0x8c, - 0xe9, 0x86, 0x53, 0x26, 0x96, 0x85, 0xab, 0x65, 0xbe, 0xe9, 0x66, 0x7e, 0x70, 0xa1, 0x3f, 0x25, - 0x7d, 0xe7, 0xe6, 0x74, 0x2b, 0x2b, 0x65, 0x54, 0x37, 0x9c, 0x22, 0x85, 0x6c, 0xb1, 0x2d, 0xf9, - 0xbb, 0x61, 0x38, 0xd8, 0x18, 0xf3, 0x92, 0xcf, 0xf7, 0xdd, 0x58, 0x90, 0xcd, 0xad, 0x9b, 0xd3, - 0x13, 0xde, 0x8c, 0x71, 0xc1, 0xb2, 0x92, 0xd9, 0xf1, 0xb5, 0xce, 0xae, 0x57, 0x7e, 0xef, 0x33, - 0xd3, 0xd2, 0xc9, 0x2f, 0x4b, 0x00, 0x5e, 0xe6, 0x01, 0x3d, 0x0a, 0x77, 0x15, 0xd7, 0xd7, 0x16, - 0xcb, 0x9b, 0x5b, 0xf3, 0x5b, 0xdb, 0x9b, 0xe5, 0xed, 0xb5, 0xcd, 0x8d, 0xd2, 0xc2, 0xf2, 0x85, - 0xe5, 0xd2, 0xa2, 0x77, 0x3c, 0x65, 0x9b, 0xb8, 0xa2, 0xed, 0x6a, 0xb8, 0x8a, 0x1e, 0x84, 0x89, - 0x20, 0x36, 0x29, 0x95, 0x16, 0xb3, 0x52, 0x3e, 0xf3, 0xca, 0x8d, 0x99, 0x14, 0x8b, 0xc5, 0x70, - 0x15, 0x9d, 0x80, 0xa3, 0xad, 0x78, 0xcb, 0x6b, 0x4b, 0xd9, 0x58, 0x7e, 0xf8, 0x95, 0x1b, 0x33, - 0x69, 0x37, 0x68, 0x43, 0x32, 0x20, 0x3f, 0x26, 0xe7, 0x17, 0xcf, 0xc3, 0x2b, 0x37, 0x66, 0x06, - 0x98, 0x02, 0xf3, 0x89, 0x0f, 0x7e, 0x6e, 0xea, 0x48, 0xf1, 0x42, 0xc7, 0xac, 0xfe, 0xa3, 0x5d, - 0x75, 0x77, 0xdd, 0x4d, 0x63, 0x07, 0xf3, 0xfb, 0x7f, 0x36, 0xd8, 0x31, 0xcf, 0x5d, 0xc3, 0x3a, - 0xb6, 0x35, 0xfb, 0x50, 0x79, 0xee, 0x9e, 0x72, 0xe7, 0xf2, 0xef, 0x25, 0x21, 0xb3, 0xc4, 0x5a, - 0x21, 0x03, 0x81, 0xd1, 0x9b, 0x60, 0xc0, 0xa4, 0xcb, 0x88, 0x7b, 0x8c, 0xdd, 0xc1, 0xe0, 0xd9, - 0x62, 0xe3, 0xde, 0xa5, 0x64, 0x4b, 0x8f, 0xcd, 0x2f, 0x53, 0xb1, 0x3b, 0x9e, 0xde, 0xad, 0xc5, - 0x4c, 0x5f, 0xf9, 0x1e, 0x16, 0xb3, 0xf0, 0xd4, 0x4a, 0x98, 0x9f, 0xcc, 0xee, 0x65, 0x6d, 0x11, - 0x08, 0xbb, 0x9d, 0xf9, 0x7e, 0x09, 0x8e, 0x52, 0x2c, 0x6f, 0x21, 0xa6, 0x98, 0x22, 0xd8, 0x3f, - 0xd9, 0xa9, 0x0b, 0x2b, 0xaa, 0xed, 0xdd, 0xb5, 0x62, 0xf7, 0x29, 0xef, 0xe7, 0x0b, 0xe1, 0x71, - 0x5f, 0xe3, 0x61, 0xb6, 0xb2, 0x32, 0x5e, 0x6f, 0xa1, 0xb4, 0xd1, 0x52, 0xe0, 0x42, 0x6d, 0xa2, - 0xbf, 0xe4, 0xba, 0xff, 0x72, 0xed, 0x25, 0x18, 0xf2, 0x7c, 0x89, 0xcd, 0xff, 0x93, 0x44, 0xef, - 0x6b, 0x87, 0x9f, 0x18, 0x7d, 0x40, 0x82, 0xa3, 0xde, 0x6a, 0xee, 0x67, 0xcb, 0xfe, 0xe3, 0xc6, - 0x23, 0x7d, 0x6c, 0x84, 0xc2, 0xca, 0x69, 0xcb, 0x57, 0x56, 0x26, 0x9a, 0xad, 0xa4, 0x64, 0x0b, - 0x36, 0xec, 0xf7, 0xac, 0x76, 0x4e, 0x7c, 0x7c, 0xae, 0x77, 0xd7, 0x1c, 0x64, 0xc0, 0xfe, 0x0b, - 0x80, 0x69, 0x58, 0x0e, 0xae, 0xd2, 0x84, 0x5c, 0x4a, 0x71, 0xcb, 0xf2, 0x1a, 0xa0, 0xd6, 0xc1, - 0x0d, 0x5f, 0x20, 0x4e, 0x7b, 0x17, 0x88, 0x27, 0x20, 0xe9, 0xbf, 0x62, 0xcb, 0x0a, 0x85, 0xd4, - 0x07, 0xf9, 0xf2, 0x79, 0xdb, 0xe7, 0xfc, 0x3f, 0x8f, 0xc1, 0x49, 0xff, 0x69, 0xd0, 0x8b, 0x4d, - 0x6c, 0x1d, 0xb8, 0x53, 0xd4, 0x54, 0x6b, 0x9a, 0xee, 0x3f, 0x75, 0x3e, 0xe6, 0x5f, 0xf0, 0x29, - 0xae, 0xd0, 0x93, 0xac, 0xc3, 0xd0, 0x86, 0x5a, 0xc3, 0x0a, 0x7e, 0xb1, 0x89, 0x6d, 0xa7, 0xcd, - 0x23, 0x8e, 0x49, 0x18, 0x30, 0x76, 0x77, 0xc5, 0x95, 0x92, 0x84, 0xc2, 0x4b, 0xa4, 0xcb, 0x75, - 0xad, 0xa1, 0xb1, 0xdb, 0x98, 0x09, 0x85, 0x15, 0xd0, 0x34, 0x0c, 0x55, 0x8c, 0xa6, 0xce, 0x67, - 0x5c, 0x2e, 0x21, 0x3e, 0xe9, 0xd0, 0xd4, 0xd9, 0x8c, 0x93, 0x9f, 0x85, 0x0c, 0x6b, 0x8f, 0xaf, - 0xb8, 0xc7, 0x20, 0x45, 0xaf, 0x33, 0x7a, 0xad, 0x0e, 0x92, 0xf2, 0x65, 0xf6, 0xe0, 0x83, 0x71, - 0x61, 0x0d, 0xb3, 0x42, 0xb1, 0xd8, 0x51, 0x95, 0x27, 0xa2, 0x5d, 0x03, 0x53, 0x94, 0xab, 0xc6, - 0xdf, 0x4e, 0xc2, 0x51, 0x7e, 0x68, 0xa6, 0x9a, 0xda, 0xdc, 0x9e, 0xe3, 0x88, 0x97, 0x47, 0xc0, - 0x43, 0x5d, 0xd5, 0xd4, 0xe4, 0x03, 0x48, 0x5c, 0x74, 0x1c, 0x13, 0x9d, 0x84, 0xa4, 0xd5, 0xac, - 0x63, 0x91, 0xf1, 0x71, 0xb3, 0xf0, 0xaa, 0xa9, 0xcd, 0x12, 0x04, 0xa5, 0x59, 0xc7, 0x0a, 0x43, - 0x41, 0x25, 0x98, 0xde, 0x6d, 0xd6, 0xeb, 0x07, 0xe5, 0x2a, 0xa6, 0xff, 0x65, 0xc7, 0xfd, 0xa0, - 0x3d, 0xbe, 0x6e, 0xaa, 0xe2, 0xab, 0x78, 0x44, 0x37, 0xc7, 0x29, 0xda, 0x22, 0xc5, 0x12, 0x1f, - 0xb3, 0x2f, 0x09, 0x1c, 0xf9, 0x0f, 0x62, 0x90, 0x12, 0xac, 0xe9, 0x0b, 0x0c, 0x5c, 0xc7, 0x15, - 0xc7, 0x10, 0x67, 0x24, 0x6e, 0x19, 0x21, 0x88, 0xd7, 0xf8, 0x10, 0xa5, 0x2f, 0x1e, 0x51, 0x48, - 0x81, 0xc0, 0xdc, 0x77, 0x31, 0x04, 0x66, 0x36, 0xc9, 0xa8, 0x25, 0x4c, 0x43, 0x6c, 0xcd, 0x2e, - 0x1e, 0x51, 0x68, 0x09, 0xe5, 0x60, 0x80, 0xcc, 0x0c, 0x87, 0x7d, 0x6a, 0x90, 0xc0, 0x79, 0x19, - 0x4d, 0x42, 0xd2, 0x54, 0x9d, 0x0a, 0xbb, 0xd2, 0x4a, 0x2a, 0x58, 0x11, 0x3d, 0x0d, 0x03, 0xec, - 0x89, 0x67, 0xf8, 0x5f, 0x58, 0x10, 0x65, 0xb0, 0x6f, 0x69, 0x11, 0xb9, 0x37, 0x54, 0xc7, 0xc1, - 0x96, 0x4e, 0x18, 0x32, 0x74, 0x84, 0x20, 0xb1, 0x63, 0x54, 0x0f, 0xf8, 0xbf, 0xd5, 0xa0, 0xbf, - 0xf9, 0x07, 0xff, 0xa9, 0x3d, 0x94, 0x69, 0x25, 0xfb, 0x6f, 0x42, 0x19, 0x01, 0x2c, 0x12, 0xa4, - 0x12, 0x8c, 0xab, 0xd5, 0xaa, 0x46, 0xac, 0x9a, 0xec, 0x40, 0x35, 0xea, 0x21, 0x6c, 0xfa, 0xbf, - 0xa2, 0x3a, 0x8d, 0x05, 0xf2, 0x08, 0x8a, 0x1c, 0xbf, 0x98, 0x86, 0x41, 0x93, 0x09, 0x25, 0x9f, - 0x87, 0xb1, 0x16, 0x49, 0x89, 0x7c, 0xfb, 0x9a, 0x5e, 0x15, 0x8f, 0x85, 0xc8, 0x6f, 0x02, 0xa3, - 0xdf, 0xc3, 0x63, 0xa7, 0x4f, 0xf4, 0x77, 0xf1, 0xbd, 0x9d, 0xef, 0x5e, 0x8c, 0xf8, 0xce, 0xb3, - 0x55, 0x53, 0x2b, 0xa6, 0x29, 0x7f, 0x7e, 0x96, 0x3d, 0xcf, 0x2b, 0xd8, 0x75, 0x8b, 0x59, 0xc3, - 0xaa, 0x91, 0x55, 0x5a, 0xac, 0xbe, 0xa4, 0x4a, 0x35, 0x35, 0x9b, 0x9a, 0xa3, 0xf7, 0x7d, 0x3e, - 0xfb, 0xbc, 0xef, 0x37, 0xbd, 0x89, 0x91, 0x58, 0x9a, 0xdf, 0x58, 0x76, 0xed, 0xf8, 0xb7, 0x62, - 0x70, 0xdc, 0x67, 0xc7, 0x3e, 0xe4, 0x56, 0x73, 0xce, 0xb7, 0xb7, 0xf8, 0x1e, 0x1e, 0x3a, 0x5e, - 0x86, 0x04, 0xc1, 0x47, 0x11, 0x9f, 0xe3, 0xcf, 0xfd, 0xea, 0xd7, 0xff, 0xa9, 0x1c, 0x3c, 0xa7, - 0x0a, 0x8c, 0x0a, 0x65, 0x52, 0xfc, 0x40, 0xef, 0xfa, 0xcb, 0x7a, 0x9f, 0x26, 0xb4, 0x6f, 0x9f, - 0x1a, 0xc3, 0x3a, 0xfc, 0xf6, 0x69, 0x90, 0x3b, 0x84, 0x3c, 0xcc, 0x63, 0x76, 0x0f, 0xa2, 0xfa, - 0x70, 0xc7, 0x9d, 0xde, 0xdf, 0x74, 0x1b, 0xc1, 0x1e, 0xc3, 0xb1, 0xeb, 0x30, 0xf9, 0x1c, 0x69, - 0xdb, 0xdb, 0x26, 0x0b, 0xc7, 0x3e, 0xe9, 0x9e, 0xe6, 0x49, 0xfc, 0x5f, 0x75, 0x89, 0x93, 0x3a, - 0xf0, 0xe4, 0xe3, 0x1b, 0xc4, 0x07, 0x67, 0x3b, 0xae, 0x17, 0xb3, 0xbe, 0xc5, 0x42, 0xf1, 0x51, - 0xca, 0xbf, 0x24, 0xc1, 0x5d, 0x2d, 0x4d, 0x73, 0x1f, 0xbf, 0xd4, 0xe6, 0xa9, 0xd0, 0xa1, 0x22, - 0x9b, 0xa5, 0x36, 0xc2, 0x3e, 0x14, 0x29, 0x2c, 0x93, 0x22, 0x20, 0xed, 0x33, 0x70, 0x34, 0x28, - 0xac, 0x50, 0xd3, 0x03, 0x30, 0x12, 0xcc, 0x08, 0x73, 0x75, 0x0d, 0x07, 0x72, 0xc2, 0x72, 0x39, - 0xac, 0x67, 0xb7, 0xaf, 0x25, 0x48, 0xbb, 0xa8, 0x3c, 0x04, 0xee, 0xb9, 0xab, 0x1e, 0xa5, 0xfc, - 0x51, 0x09, 0x66, 0x82, 0x2d, 0xf8, 0x82, 0xa1, 0xfe, 0x84, 0xbd, 0x6d, 0x43, 0xfc, 0xba, 0x04, - 0xf7, 0x76, 0x91, 0x89, 0x2b, 0xe0, 0x25, 0x98, 0xf0, 0x65, 0x02, 0x84, 0x0b, 0x17, 0xc3, 0x7e, - 0x32, 0x3a, 0x0c, 0x75, 0x37, 0xbe, 0x77, 0x13, 0xa5, 0x7c, 0xe1, 0x8f, 0xa6, 0xc7, 0x5b, 0xeb, - 0x6c, 0x65, 0xbc, 0x75, 0xf7, 0x7e, 0x1b, 0xed, 0xe3, 0x55, 0x09, 0x1e, 0x0e, 0x76, 0xb5, 0x4d, - 0x3c, 0xfb, 0x46, 0x8d, 0xc3, 0xbf, 0x95, 0xe0, 0x64, 0x2f, 0xc2, 0xf1, 0x01, 0xd9, 0x81, 0x71, - 0x2f, 0xd2, 0x0e, 0x8f, 0x47, 0x5f, 0xf1, 0x3b, 0xb3, 0x52, 0xe4, 0x72, 0xbb, 0x03, 0x8a, 0x37, - 0xf9, 0xc4, 0xf2, 0x0f, 0xb9, 0xab, 0xe4, 0x60, 0x36, 0x57, 0x28, 0x39, 0x90, 0xcf, 0x6d, 0x33, - 0x16, 0xb1, 0x36, 0x63, 0xe1, 0x85, 0xe6, 0xf2, 0x55, 0xee, 0xb7, 0xda, 0xe4, 0xe0, 0xde, 0x01, - 0xe3, 0x6d, 0x4c, 0x99, 0xcf, 0xea, 0x3e, 0x2c, 0x59, 0x41, 0xad, 0xc6, 0x2a, 0x1f, 0xc0, 0x34, - 0x6d, 0xb7, 0x8d, 0xa2, 0xef, 0x74, 0x97, 0x1b, 0xdc, 0xb7, 0xb4, 0x6d, 0x9a, 0xf7, 0x7d, 0x19, - 0x06, 0xd8, 0x38, 0xf3, 0xee, 0x1e, 0xc2, 0x50, 0x38, 0x03, 0xf9, 0x93, 0xc2, 0x97, 0x2d, 0x0a, - 0xb1, 0xdb, 0xcf, 0xa1, 0x5e, 0xfa, 0x7a, 0x9b, 0xe6, 0x90, 0x4f, 0x19, 0xdf, 0x14, 0x5e, 0xad, - 0xbd, 0x74, 0x5c, 0x1d, 0x95, 0xdb, 0xe6, 0xd5, 0x98, 0x6e, 0xee, 0xac, 0xfb, 0xfa, 0x05, 0xe1, - 0xbe, 0xdc, 0x3e, 0x45, 0xb8, 0xaf, 0x37, 0x46, 0xf5, 0xae, 0x23, 0x8b, 0x10, 0xf3, 0x2f, 0xa3, - 0x23, 0xfb, 0x9e, 0x04, 0xc7, 0x68, 0xdf, 0xfc, 0x89, 0x88, 0x7e, 0x55, 0xfe, 0x28, 0x20, 0xdb, - 0xaa, 0x94, 0xdb, 0xce, 0xee, 0xac, 0x6d, 0x55, 0xae, 0x04, 0xd6, 0x97, 0x47, 0x01, 0x55, 0x03, - 0xe9, 0x26, 0x8a, 0xcd, 0xee, 0xc5, 0x65, 0xab, 0xbe, 0x6c, 0x46, 0x9b, 0xe1, 0x4c, 0xdc, 0x86, - 0xe1, 0xfc, 0x86, 0x04, 0xf9, 0x76, 0x5d, 0xe6, 0xc3, 0xa7, 0xc1, 0x64, 0xe0, 0x90, 0x20, 0x3c, - 0x82, 0x8f, 0xf6, 0x92, 0xca, 0x09, 0x4d, 0xa3, 0xa3, 0x16, 0xbe, 0xd3, 0x71, 0xc0, 0x74, 0xd0, - 0x42, 0x5b, 0x23, 0xeb, 0x37, 0x6c, 0xfa, 0x7c, 0xa9, 0xc5, 0xaf, 0xfe, 0xa5, 0x88, 0xbd, 0xaf, - 0xc3, 0x54, 0x07, 0xa9, 0xef, 0xf4, 0xba, 0xb7, 0xd7, 0x71, 0x30, 0x6f, 0x77, 0xf8, 0xfe, 0x14, - 0x9f, 0x09, 0xc1, 0x3b, 0xd7, 0xbe, 0xbd, 0x58, 0xbb, 0x27, 0x94, 0xf2, 0xdb, 0xe0, 0xee, 0xb6, - 0x54, 0x5c, 0xb6, 0x02, 0x24, 0xf6, 0x34, 0xdb, 0xe1, 0x62, 0x3d, 0xd8, 0x49, 0xac, 0x10, 0x35, - 0xa5, 0x91, 0x11, 0x64, 0x29, 0xeb, 0x0d, 0xc3, 0xa8, 0x73, 0x31, 0xe4, 0xcb, 0x30, 0xe6, 0x83, - 0xf1, 0x46, 0xce, 0x40, 0xc2, 0x34, 0xf8, 0xe7, 0x3f, 0x86, 0x4e, 0x1d, 0xef, 0x98, 0xbd, 0x37, - 0x8c, 0x3a, 0xef, 0x36, 0xc5, 0x97, 0x27, 0x00, 0x31, 0x66, 0x34, 0x91, 0x2f, 0x9a, 0xd8, 0x84, - 0xf1, 0x00, 0x94, 0x37, 0xf2, 0x43, 0x1d, 0x12, 0x9c, 0xfa, 0xce, 0x51, 0x48, 0x52, 0xae, 0xe8, - 0x13, 0x12, 0x80, 0xef, 0x44, 0x78, 0xb6, 0x13, 0x9b, 0xf6, 0x7b, 0xe2, 0xfc, 0x5c, 0xcf, 0xf8, - 0x3c, 0x66, 0x3b, 0xf9, 0xde, 0x7f, 0xf5, 0xed, 0x8f, 0xc5, 0xee, 0x47, 0xf2, 0x5c, 0x87, 0xdd, - 0xb8, 0x6f, 0xbe, 0x7c, 0x3e, 0xf0, 0xed, 0x89, 0xc7, 0x7a, 0x6b, 0x4a, 0x48, 0x36, 0xdb, 0x2b, - 0x3a, 0x17, 0xec, 0x3c, 0x15, 0xec, 0x34, 0x7a, 0x32, 0x5a, 0xb0, 0xb9, 0x77, 0x05, 0x27, 0xcd, - 0x7b, 0xd0, 0xef, 0x49, 0x30, 0xd1, 0x6e, 0x4b, 0x87, 0xce, 0xf6, 0x26, 0x45, 0x6b, 0x48, 0x91, - 0x3f, 0x77, 0x08, 0x4a, 0xde, 0x95, 0x25, 0xda, 0x95, 0x79, 0xf4, 0xec, 0x21, 0xba, 0x32, 0xe7, - 0xcf, 0xef, 0xff, 0x4f, 0x09, 0xee, 0xe9, 0xba, 0x43, 0x42, 0xf3, 0xbd, 0x49, 0xd9, 0x25, 0x76, - 0xca, 0x17, 0x7f, 0x18, 0x16, 0xbc, 0xc7, 0xcf, 0xd1, 0x1e, 0x5f, 0x46, 0xcb, 0x87, 0xe9, 0x71, - 0xdb, 0x43, 0x14, 0xf4, 0x3b, 0xc1, 0x9b, 0x85, 0xdd, 0xcd, 0xa9, 0x65, 0xe3, 0x11, 0x31, 0x31, - 0x5a, 0x83, 0x5a, 0xf9, 0xad, 0xb4, 0x0b, 0x0a, 0xda, 0xf8, 0x21, 0x07, 0x6d, 0xee, 0x5d, 0x41, - 0xc7, 0xff, 0x1e, 0xf4, 0x3f, 0xa4, 0xf6, 0x17, 0x05, 0x9f, 0xee, 0x2a, 0x62, 0xe7, 0x4d, 0x55, - 0xfe, 0x6c, 0xff, 0x84, 0xbc, 0x93, 0x0d, 0xda, 0xc9, 0x1a, 0xc2, 0xb7, 0xbb, 0x93, 0x6d, 0x07, - 0x11, 0x7d, 0x4d, 0x82, 0x89, 0x76, 0x7b, 0x92, 0x88, 0x69, 0xd9, 0x65, 0x93, 0x15, 0x31, 0x2d, - 0xbb, 0x6d, 0x80, 0xe4, 0x37, 0xd1, 0xce, 0x9f, 0x41, 0x4f, 0x75, 0xea, 0x7c, 0xd7, 0x51, 0x24, - 0x73, 0xb1, 0x6b, 0x90, 0x1f, 0x31, 0x17, 0x7b, 0xd9, 0xc7, 0x44, 0xcc, 0xc5, 0x9e, 0xf6, 0x18, - 0xd1, 0x73, 0xd1, 0xed, 0x59, 0x8f, 0xc3, 0x68, 0xa3, 0xdf, 0x92, 0x60, 0x38, 0x10, 0x11, 0xa3, - 0x27, 0xba, 0x0a, 0xda, 0x6e, 0xc3, 0x90, 0x3f, 0xd5, 0x0f, 0x09, 0xef, 0xcb, 0x32, 0xed, 0xcb, - 0x02, 0x9a, 0x3f, 0x4c, 0x5f, 0x82, 0x67, 0xa5, 0xdf, 0x90, 0x60, 0xbc, 0x4d, 0x94, 0x19, 0x31, - 0x0b, 0x3b, 0x07, 0xcd, 0xf9, 0xb3, 0xfd, 0x13, 0xf2, 0x5e, 0x5d, 0xa0, 0xbd, 0x7a, 0x0b, 0x7a, - 0xe6, 0x30, 0xbd, 0xf2, 0xad, 0xcf, 0x37, 0xbd, 0x7b, 0x57, 0xbe, 0x76, 0xd0, 0x99, 0x3e, 0x05, - 0x13, 0x1d, 0x7a, 0xba, 0x6f, 0x3a, 0xde, 0x9f, 0xe7, 0x69, 0x7f, 0x9e, 0x43, 0xeb, 0x3f, 0x5c, - 0x7f, 0x5a, 0x97, 0xf5, 0x2f, 0xb6, 0xbe, 0xf9, 0xeb, 0x6e, 0x45, 0x6d, 0x83, 0xd5, 0xfc, 0x93, - 0x7d, 0xd1, 0xf0, 0x4e, 0x9d, 0xa5, 0x9d, 0x3a, 0x85, 0x1e, 0xef, 0xd4, 0x29, 0xdf, 0xe5, 0x3a, - 0x4d, 0xdf, 0x35, 0xe6, 0xde, 0xc5, 0x42, 0xe0, 0xf7, 0xa0, 0x9f, 0x14, 0x17, 0x9b, 0x4e, 0x74, - 0x6d, 0xd7, 0x17, 0xc7, 0xe6, 0x1f, 0xee, 0x01, 0x93, 0xcb, 0x75, 0x3f, 0x95, 0x6b, 0x0a, 0x1d, - 0xef, 0x24, 0x17, 0x89, 0x65, 0xd1, 0x87, 0x24, 0xf7, 0x2e, 0xe4, 0xc9, 0xee, 0xbc, 0xfd, 0xc1, - 0x6e, 0xfe, 0x91, 0x9e, 0x70, 0xb9, 0x24, 0x0f, 0x52, 0x49, 0x66, 0xd0, 0x54, 0x47, 0x49, 0x58, - 0xe8, 0x7b, 0xbb, 0x6f, 0x0e, 0xfc, 0xaf, 0x49, 0x98, 0xee, 0xd0, 0xa2, 0x73, 0xfd, 0x76, 0x3f, - 0x88, 0x8d, 0x7a, 0xb1, 0x1a, 0xf9, 0x24, 0xb6, 0xa7, 0x53, 0xaf, 0x6e, 0x0f, 0x5f, 0x7f, 0x33, - 0x01, 0x68, 0xd5, 0xae, 0x2d, 0x58, 0x98, 0xfd, 0x1b, 0x3b, 0x3e, 0xcb, 0x43, 0x2f, 0xbc, 0xa4, - 0x1f, 0xea, 0x85, 0xd7, 0x6a, 0xe0, 0xcd, 0x54, 0xac, 0xbf, 0x97, 0x98, 0x3d, 0x3f, 0x9c, 0x8a, - 0xff, 0x48, 0x1e, 0x4e, 0xb5, 0xbf, 0x57, 0x9d, 0xb8, 0x7d, 0x0f, 0x30, 0x92, 0x87, 0x7a, 0x80, - 0x71, 0x16, 0x06, 0xf8, 0x0b, 0xc8, 0x81, 0x2e, 0x2f, 0x20, 0xc1, 0xf7, 0xcc, 0x91, 0xe3, 0xa3, - 0xd3, 0xe2, 0x59, 0xfa, 0x60, 0x6f, 0x77, 0x5f, 0xf9, 0xbb, 0x75, 0x2f, 0x69, 0x70, 0x1c, 0xf2, - 0xad, 0x06, 0xe4, 0x4e, 0xe3, 0x8f, 0xc5, 0x21, 0xbb, 0x6a, 0xd7, 0x4a, 0x55, 0xcd, 0xb9, 0x43, - 0xd6, 0xf5, 0x6c, 0xe7, 0x67, 0x2c, 0xe8, 0xd6, 0xcd, 0xe9, 0x11, 0xa6, 0xc5, 0x2e, 0xba, 0x6b, - 0xc0, 0x68, 0xe8, 0xb9, 0x30, 0xb7, 0xa5, 0xc5, 0xc3, 0xbc, 0x5a, 0x0e, 0xb1, 0x92, 0xe9, 0xab, - 0x03, 0x9f, 0x45, 0xa3, 0xeb, 0xed, 0xcd, 0x97, 0x99, 0xd0, 0xc5, 0x3b, 0xf9, 0xe6, 0xcf, 0x1b, - 0xb3, 0x3c, 0xe4, 0xc2, 0x83, 0xe2, 0x8e, 0xd8, 0x9f, 0x48, 0x30, 0xb4, 0x6a, 0x8b, 0xe0, 0x0f, - 0xff, 0x98, 0xbe, 0x38, 0x7a, 0xda, 0xfd, 0x06, 0x45, 0xbc, 0x37, 0xbb, 0x15, 0xdf, 0xa5, 0xf0, - 0x94, 0x70, 0x14, 0xc6, 0x7d, 0xfd, 0x74, 0xfb, 0xff, 0xbb, 0x31, 0xea, 0x11, 0x8b, 0xb8, 0xa6, - 0xe9, 0x6e, 0xdc, 0x88, 0xff, 0xaa, 0xbe, 0xa7, 0xf0, 0xf4, 0x9c, 0x38, 0xac, 0x9e, 0xf7, 0xa9, - 0x83, 0x08, 0xe9, 0xd3, 0x4d, 0x75, 0xad, 0xb6, 0xbe, 0xf6, 0x91, 0xfa, 0xf8, 0x90, 0x55, 0xe8, - 0x4d, 0x8f, 0xfc, 0xba, 0x04, 0xc3, 0xab, 0x76, 0x6d, 0x5b, 0xaf, 0xfe, 0x5f, 0x6f, 0xbf, 0xbb, - 0x70, 0x34, 0xd0, 0xd3, 0x3b, 0xa4, 0xd2, 0x53, 0xaf, 0x26, 0x20, 0xbe, 0x6a, 0xd7, 0xd0, 0x8b, - 0x30, 0x1a, 0x0e, 0x13, 0x3a, 0x46, 0x7f, 0xad, 0x2b, 0x42, 0xe7, 0x1d, 0x5a, 0xe7, 0xd5, 0x03, - 0xed, 0xc3, 0x70, 0x70, 0xe5, 0x38, 0xd1, 0x85, 0x49, 0x00, 0x33, 0xff, 0x78, 0xaf, 0x98, 0x6e, - 0x63, 0xef, 0x84, 0x94, 0xeb, 0xf4, 0xee, 0xeb, 0x42, 0x2d, 0x90, 0x3a, 0xc7, 0xb3, 0x6d, 0xdc, - 0x0a, 0xd1, 0x5e, 0xd8, 0xa5, 0x74, 0xd3, 0x5e, 0x08, 0xb7, 0xab, 0xf6, 0x3a, 0x4d, 0xad, 0x1d, - 0x00, 0xdf, 0x3c, 0x78, 0xa0, 0x0b, 0x07, 0x0f, 0x2d, 0xff, 0x58, 0x4f, 0x68, 0xee, 0x31, 0xd3, - 0x6d, 0x0e, 0xbf, 0xff, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x31, 0xf4, 0xff, 0xb5, 0x06, 0x94, - 0x00, 0x00, + // 9558 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, 0xc7, 0x3d, 0x89, 0x34, 0x16, 0xbb, 0x87, + 0x03, 0x0f, 0x5f, 0x1c, 0x00, 0x47, 0x7d, 0x39, 0x5b, 0x83, 0xdd, 0x87, 0xc5, 0x10, 0xbb, 0x33, + 0xc3, 0x99, 0xd9, 0x3b, 0x80, 0x92, 0xaa, 0x68, 0x49, 0x51, 0xa4, 0x73, 0x1c, 0x49, 0x96, 0xcb, + 0x91, 0x28, 0x9d, 0x22, 0x59, 0x4e, 0xe4, 0xc8, 0x4a, 0xfc, 0x21, 0x45, 0x89, 0x93, 0x54, 0x45, + 0x4e, 0xc5, 0xb1, 0xa4, 0x54, 0x5c, 0x52, 0xc5, 0x95, 0x38, 0xae, 0xf8, 0xec, 0x50, 0x2a, 0x87, + 0x51, 0x94, 0x58, 0x3e, 0xcb, 0x89, 0x53, 0xfa, 0x91, 0xd4, 0xfb, 0x9a, 0xaf, 0xfd, 0x98, 0x05, + 0x74, 0x27, 0xca, 0x71, 0x7e, 0x61, 0x5f, 0x4f, 0x77, 0xbf, 0xee, 0x7e, 0xfd, 0xfa, 0xf5, 0xeb, + 0x79, 0x6f, 0x00, 0x9f, 0xb8, 0x00, 0xd3, 0x75, 0xc3, 0xa8, 0x37, 0xf0, 0xac, 0x69, 0x19, 0x8e, + 0xb1, 0xd5, 0xda, 0x9e, 0xad, 0x61, 0xbb, 0x6a, 0x69, 0xa6, 0x63, 0x58, 0x33, 0x14, 0x86, 0x46, + 0x19, 0xc6, 0x8c, 0xc0, 0x90, 0x97, 0x61, 0xec, 0xa2, 0xd6, 0xc0, 0x25, 0x17, 0x71, 0x1d, 0x3b, + 0xe8, 0x3c, 0x24, 0xb6, 0xb5, 0x06, 0xce, 0x49, 0xd3, 0xf1, 0x53, 0x43, 0x67, 0xee, 0x9b, 0x09, + 0x11, 0xcd, 0x04, 0x29, 0xd6, 0x08, 0x58, 0xa1, 0x14, 0xf2, 0xb7, 0x13, 0x30, 0xde, 0xe1, 0x29, + 0x42, 0x90, 0xd0, 0xd5, 0x26, 0xe1, 0x28, 0x9d, 0x4a, 0x2b, 0xf4, 0x37, 0xca, 0xc1, 0xa0, 0xa9, + 0x56, 0x77, 0xd5, 0x3a, 0xce, 0xc5, 0x28, 0x58, 0x34, 0xd1, 0x24, 0x40, 0x0d, 0x9b, 0x58, 0xaf, + 0x61, 0xbd, 0xba, 0x9f, 0x8b, 0x4f, 0xc7, 0x4f, 0xa5, 0x15, 0x1f, 0x04, 0x3d, 0x0c, 0x63, 0x66, + 0x6b, 0xab, 0xa1, 0x55, 0x2b, 0x3e, 0x34, 0x98, 0x8e, 0x9f, 0x4a, 0x2a, 0x59, 0xf6, 0xa0, 0xe4, + 0x21, 0x3f, 0x08, 0xa3, 0xd7, 0xb0, 0xba, 0xeb, 0x47, 0x1d, 0xa2, 0xa8, 0x23, 0x04, 0xec, 0x43, + 0x9c, 0x87, 0x4c, 0x13, 0xdb, 0xb6, 0x5a, 0xc7, 0x15, 0x67, 0xdf, 0xc4, 0xb9, 0x04, 0xd5, 0x7e, + 0xba, 0x4d, 0xfb, 0xb0, 0xe6, 0x43, 0x9c, 0x6a, 0x63, 0xdf, 0xc4, 0x68, 0x0e, 0xd2, 0x58, 0x6f, + 0x35, 0x19, 0x87, 0x64, 0x17, 0xfb, 0x95, 0xf5, 0x56, 0x33, 0xcc, 0x25, 0x45, 0xc8, 0x38, 0x8b, + 0x41, 0x1b, 0x5b, 0x57, 0xb5, 0x2a, 0xce, 0x0d, 0x50, 0x06, 0x0f, 0xb6, 0x31, 0x58, 0x67, 0xcf, + 0xc3, 0x3c, 0x04, 0x1d, 0x9a, 0x87, 0x34, 0xde, 0x73, 0xb0, 0x6e, 0x6b, 0x86, 0x9e, 0x1b, 0xa4, + 0x4c, 0xee, 0xef, 0x30, 0x8a, 0xb8, 0x51, 0x0b, 0xb3, 0xf0, 0xe8, 0xd0, 0x39, 0x18, 0x34, 0x4c, + 0x47, 0x33, 0x74, 0x3b, 0x97, 0x9a, 0x96, 0x4e, 0x0d, 0x9d, 0x39, 0xd9, 0xd1, 0x11, 0x56, 0x19, + 0x8e, 0x22, 0x90, 0xd1, 0x22, 0x64, 0x6d, 0xa3, 0x65, 0x55, 0x71, 0xa5, 0x6a, 0xd4, 0x70, 0x45, + 0xd3, 0xb7, 0x8d, 0x5c, 0x9a, 0x32, 0x98, 0x6a, 0x57, 0x84, 0x22, 0xce, 0x1b, 0x35, 0xbc, 0xa8, + 0x6f, 0x1b, 0xca, 0x88, 0x1d, 0x68, 0xa3, 0x63, 0x30, 0x60, 0xef, 0xeb, 0x8e, 0xba, 0x97, 0xcb, + 0x50, 0x0f, 0xe1, 0x2d, 0xf9, 0x37, 0x06, 0x60, 0xb4, 0x1f, 0x17, 0xbb, 0x00, 0xc9, 0x6d, 0xa2, + 0x65, 0x2e, 0x76, 0x10, 0x1b, 0x30, 0x9a, 0xa0, 0x11, 0x07, 0x0e, 0x69, 0xc4, 0x39, 0x18, 0xd2, + 0xb1, 0xed, 0xe0, 0x1a, 0xf3, 0x88, 0x78, 0x9f, 0x3e, 0x05, 0x8c, 0xa8, 0xdd, 0xa5, 0x12, 0x87, + 0x72, 0xa9, 0xb7, 0xc0, 0xa8, 0x2b, 0x52, 0xc5, 0x52, 0xf5, 0xba, 0xf0, 0xcd, 0xd9, 0x28, 0x49, + 0x66, 0xca, 0x82, 0x4e, 0x21, 0x64, 0xca, 0x08, 0x0e, 0xb4, 0x51, 0x09, 0xc0, 0xd0, 0xb1, 0xb1, + 0x5d, 0xa9, 0xe1, 0x6a, 0x23, 0x97, 0xea, 0x62, 0xa5, 0x55, 0x82, 0xd2, 0x66, 0x25, 0x83, 0x41, + 0xab, 0x0d, 0xf4, 0xb4, 0xe7, 0x6a, 0x83, 0x5d, 0x3c, 0x65, 0x99, 0x4d, 0xb2, 0x36, 0x6f, 0xdb, + 0x84, 0x11, 0x0b, 0x13, 0xbf, 0xc7, 0x35, 0xae, 0x59, 0x9a, 0x0a, 0x31, 0x13, 0xa9, 0x99, 0xc2, + 0xc9, 0x98, 0x62, 0xc3, 0x96, 0xbf, 0x89, 0xee, 0x05, 0x17, 0x50, 0xa1, 0x6e, 0x05, 0x34, 0x0a, + 0x65, 0x04, 0x70, 0x45, 0x6d, 0xe2, 0xfc, 0xcb, 0x30, 0x12, 0x34, 0x0f, 0x9a, 0x80, 0xa4, 0xed, + 0xa8, 0x96, 0x43, 0xbd, 0x30, 0xa9, 0xb0, 0x06, 0xca, 0x42, 0x1c, 0xeb, 0x35, 0x1a, 0xe5, 0x92, + 0x0a, 0xf9, 0x89, 0x7e, 0xc2, 0x53, 0x38, 0x4e, 0x15, 0x7e, 0xa0, 0x7d, 0x44, 0x03, 0x9c, 0xc3, + 0x7a, 0xe7, 0x9f, 0x82, 0xe1, 0x80, 0x02, 0xfd, 0x76, 0x2d, 0xbf, 0x0b, 0x8e, 0x76, 0x64, 0x8d, + 0xde, 0x02, 0x13, 0x2d, 0x5d, 0xd3, 0x1d, 0x6c, 0x99, 0x16, 0x26, 0x1e, 0xcb, 0xba, 0xca, 0xfd, + 0x97, 0xc1, 0x2e, 0x3e, 0xb7, 0xe9, 0xc7, 0x66, 0x5c, 0x94, 0xf1, 0x56, 0x3b, 0xf0, 0x74, 0x3a, + 0xf5, 0xfa, 0x60, 0xf6, 0x95, 0x57, 0x5e, 0x79, 0x25, 0x26, 0x7f, 0x6c, 0x00, 0x26, 0x3a, 0xcd, + 0x99, 0x8e, 0xd3, 0xf7, 0x18, 0x0c, 0xe8, 0xad, 0xe6, 0x16, 0xb6, 0xa8, 0x91, 0x92, 0x0a, 0x6f, + 0xa1, 0x39, 0x48, 0x36, 0xd4, 0x2d, 0xdc, 0xc8, 0x25, 0xa6, 0xa5, 0x53, 0x23, 0x67, 0x1e, 0xee, + 0x6b, 0x56, 0xce, 0x2c, 0x11, 0x12, 0x85, 0x51, 0xa2, 0x67, 0x20, 0xc1, 0x43, 0x34, 0xe1, 0x70, + 0xba, 0x3f, 0x0e, 0x64, 0x2e, 0x29, 0x94, 0x0e, 0xdd, 0x05, 0x69, 0xf2, 0x97, 0xf9, 0xc6, 0x00, + 0x95, 0x39, 0x45, 0x00, 0xc4, 0x2f, 0x50, 0x1e, 0x52, 0x74, 0x9a, 0xd4, 0xb0, 0x58, 0xda, 0xdc, + 0x36, 0x71, 0xac, 0x1a, 0xde, 0x56, 0x5b, 0x0d, 0xa7, 0x72, 0x55, 0x6d, 0xb4, 0x30, 0x75, 0xf8, + 0xb4, 0x92, 0xe1, 0xc0, 0x2b, 0x04, 0x86, 0xa6, 0x60, 0x88, 0xcd, 0x2a, 0x4d, 0xaf, 0xe1, 0x3d, + 0x1a, 0x3d, 0x93, 0x0a, 0x9b, 0x68, 0x8b, 0x04, 0x42, 0xba, 0x7f, 0xd1, 0x36, 0x74, 0xe1, 0x9a, + 0xb4, 0x0b, 0x02, 0xa0, 0xdd, 0x3f, 0x15, 0x0e, 0xdc, 0x77, 0x77, 0x56, 0x2f, 0xec, 0x53, 0xf2, + 0x97, 0x63, 0x90, 0xa0, 0xf1, 0x62, 0x14, 0x86, 0x36, 0xde, 0xba, 0x56, 0xae, 0x94, 0x56, 0x37, + 0x8b, 0x4b, 0xe5, 0xac, 0x84, 0x46, 0x00, 0x28, 0xe0, 0xe2, 0xd2, 0xea, 0xdc, 0x46, 0x36, 0xe6, + 0xb6, 0x17, 0x57, 0x36, 0xce, 0x3d, 0x99, 0x8d, 0xbb, 0x04, 0x9b, 0x0c, 0x90, 0xf0, 0x23, 0x3c, + 0x71, 0x26, 0x9b, 0x44, 0x59, 0xc8, 0x30, 0x06, 0x8b, 0x6f, 0x29, 0x97, 0xce, 0x3d, 0x99, 0x1d, + 0x08, 0x42, 0x9e, 0x38, 0x93, 0x1d, 0x44, 0xc3, 0x90, 0xa6, 0x90, 0xe2, 0xea, 0xea, 0x52, 0x36, + 0xe5, 0xf2, 0x5c, 0xdf, 0x50, 0x16, 0x57, 0x16, 0xb2, 0x69, 0x97, 0xe7, 0x82, 0xb2, 0xba, 0xb9, + 0x96, 0x05, 0x97, 0xc3, 0x72, 0x79, 0x7d, 0x7d, 0x6e, 0xa1, 0x9c, 0x1d, 0x72, 0x31, 0x8a, 0x6f, + 0xdd, 0x28, 0xaf, 0x67, 0x33, 0x01, 0xb1, 0x9e, 0x38, 0x93, 0x1d, 0x76, 0xbb, 0x28, 0xaf, 0x6c, + 0x2e, 0x67, 0x47, 0xd0, 0x18, 0x0c, 0xb3, 0x2e, 0x84, 0x10, 0xa3, 0x21, 0xd0, 0xb9, 0x27, 0xb3, + 0x59, 0x4f, 0x10, 0xc6, 0x65, 0x2c, 0x00, 0x38, 0xf7, 0x64, 0x16, 0xc9, 0xf3, 0x90, 0xa4, 0xde, + 0x85, 0x10, 0x8c, 0x2c, 0xcd, 0x15, 0xcb, 0x4b, 0x95, 0xd5, 0xb5, 0x8d, 0xc5, 0xd5, 0x95, 0xb9, + 0xa5, 0xac, 0xe4, 0xc1, 0x94, 0xf2, 0xf3, 0x9b, 0x8b, 0x4a, 0xb9, 0x94, 0x8d, 0xf9, 0x61, 0x6b, + 0xe5, 0xb9, 0x8d, 0x72, 0x29, 0x1b, 0x97, 0xab, 0x30, 0xd1, 0x29, 0x4e, 0x76, 0x9c, 0x19, 0xbe, + 0x21, 0x8e, 0x75, 0x19, 0x62, 0xca, 0xab, 0x6d, 0x88, 0xbf, 0x15, 0x83, 0xf1, 0x0e, 0x6b, 0x45, + 0xc7, 0x4e, 0x9e, 0x85, 0x24, 0x73, 0x51, 0xb6, 0x7a, 0x3e, 0xd4, 0x71, 0xd1, 0xa1, 0x0e, 0xdb, + 0xb6, 0x82, 0x52, 0x3a, 0x7f, 0x06, 0x11, 0xef, 0x92, 0x41, 0x10, 0x16, 0x6d, 0x31, 0xfd, 0x27, + 0xdb, 0x62, 0x3a, 0x5b, 0xf6, 0xce, 0xf5, 0xb3, 0xec, 0x51, 0xd8, 0xc1, 0x62, 0x7b, 0xb2, 0x43, + 0x6c, 0xbf, 0x00, 0x63, 0x6d, 0x8c, 0xfa, 0x8e, 0xb1, 0xef, 0x95, 0x20, 0xd7, 0xcd, 0x38, 0x11, + 0x91, 0x2e, 0x16, 0x88, 0x74, 0x17, 0xc2, 0x16, 0xbc, 0xa7, 0xfb, 0x20, 0xb4, 0x8d, 0xf5, 0xe7, + 0x24, 0x38, 0xd6, 0x39, 0x53, 0xec, 0x28, 0xc3, 0x33, 0x30, 0xd0, 0xc4, 0xce, 0x8e, 0x21, 0xb2, + 0xa5, 0x07, 0x3a, 0xac, 0xc1, 0xe4, 0x71, 0x78, 0xb0, 0x39, 0x95, 0x7f, 0x11, 0x8f, 0x77, 0x4b, + 0xf7, 0x98, 0x34, 0x6d, 0x92, 0x7e, 0x30, 0x06, 0x47, 0x3b, 0x32, 0xef, 0x28, 0xe8, 0xdd, 0x00, + 0x9a, 0x6e, 0xb6, 0x1c, 0x96, 0x11, 0xb1, 0x00, 0x9b, 0xa6, 0x10, 0x1a, 0xbc, 0x48, 0xf0, 0x6c, + 0x39, 0xee, 0xf3, 0x38, 0x7d, 0x0e, 0x0c, 0x44, 0x11, 0xce, 0x7b, 0x82, 0x26, 0xa8, 0xa0, 0x93, + 0x5d, 0x34, 0x6d, 0x73, 0xcc, 0xc7, 0x20, 0x5b, 0x6d, 0x68, 0x58, 0x77, 0x2a, 0xb6, 0x63, 0x61, + 0xb5, 0xa9, 0xe9, 0x75, 0xba, 0x82, 0xa4, 0x0a, 0xc9, 0x6d, 0xb5, 0x61, 0x63, 0x65, 0x94, 0x3d, + 0x5e, 0x17, 0x4f, 0x09, 0x05, 0x75, 0x20, 0xcb, 0x47, 0x31, 0x10, 0xa0, 0x60, 0x8f, 0x5d, 0x0a, + 0xf9, 0x67, 0xd3, 0x30, 0xe4, 0xcb, 0xab, 0xd1, 0x3d, 0x90, 0x79, 0x51, 0xbd, 0xaa, 0x56, 0xc4, + 0x5e, 0x89, 0x59, 0x62, 0x88, 0xc0, 0xd6, 0xf8, 0x7e, 0xe9, 0x31, 0x98, 0xa0, 0x28, 0x46, 0xcb, + 0xc1, 0x56, 0xa5, 0xda, 0x50, 0x6d, 0x9b, 0x1a, 0x2d, 0x45, 0x51, 0x11, 0x79, 0xb6, 0x4a, 0x1e, + 0xcd, 0x8b, 0x27, 0xe8, 0x2c, 0x8c, 0x53, 0x8a, 0x66, 0xab, 0xe1, 0x68, 0x66, 0x03, 0x57, 0xc8, + 0xee, 0xcd, 0xa6, 0x2b, 0x89, 0x2b, 0xd9, 0x18, 0xc1, 0x58, 0xe6, 0x08, 0x44, 0x22, 0x1b, 0x95, + 0xe0, 0x6e, 0x4a, 0x56, 0xc7, 0x3a, 0xb6, 0x54, 0x07, 0x57, 0xf0, 0x4b, 0x2d, 0xb5, 0x61, 0x57, + 0x54, 0xbd, 0x56, 0xd9, 0x51, 0xed, 0x9d, 0xdc, 0x04, 0x61, 0x50, 0x8c, 0xe5, 0x24, 0xe5, 0x04, + 0x41, 0x5c, 0xe0, 0x78, 0x65, 0x8a, 0x36, 0xa7, 0xd7, 0x2e, 0xa9, 0xf6, 0x0e, 0x2a, 0xc0, 0x31, + 0xca, 0xc5, 0x76, 0x2c, 0x4d, 0xaf, 0x57, 0xaa, 0x3b, 0xb8, 0xba, 0x5b, 0x69, 0x39, 0xdb, 0xe7, + 0x73, 0x77, 0xf9, 0xfb, 0xa7, 0x12, 0xae, 0x53, 0x9c, 0x79, 0x82, 0xb2, 0xe9, 0x6c, 0x9f, 0x47, + 0xeb, 0x90, 0x21, 0x83, 0xd1, 0xd4, 0x5e, 0xc6, 0x95, 0x6d, 0xc3, 0xa2, 0x4b, 0xe3, 0x48, 0x87, + 0xd0, 0xe4, 0xb3, 0xe0, 0xcc, 0x2a, 0x27, 0x58, 0x36, 0x6a, 0xb8, 0x90, 0x5c, 0x5f, 0x2b, 0x97, + 0x4b, 0xca, 0x90, 0xe0, 0x72, 0xd1, 0xb0, 0x88, 0x43, 0xd5, 0x0d, 0xd7, 0xc0, 0x43, 0xcc, 0xa1, + 0xea, 0x86, 0x30, 0xef, 0x59, 0x18, 0xaf, 0x56, 0x99, 0xce, 0x5a, 0xb5, 0xc2, 0xf7, 0x58, 0x76, + 0x2e, 0x1b, 0x30, 0x56, 0xb5, 0xba, 0xc0, 0x10, 0xb8, 0x8f, 0xdb, 0xe8, 0x69, 0x38, 0xea, 0x19, + 0xcb, 0x4f, 0x38, 0xd6, 0xa6, 0x65, 0x98, 0xf4, 0x2c, 0x8c, 0x9b, 0xfb, 0xed, 0x84, 0x28, 0xd0, + 0xa3, 0xb9, 0x1f, 0x26, 0x7b, 0x0a, 0x26, 0xcc, 0x1d, 0xb3, 0x9d, 0xee, 0xb4, 0x9f, 0x0e, 0x99, + 0x3b, 0x66, 0x98, 0xf0, 0x7e, 0xba, 0xe1, 0xb6, 0x70, 0x55, 0x75, 0x70, 0x2d, 0x77, 0xdc, 0x8f, + 0xee, 0x7b, 0x80, 0x66, 0x21, 0x5b, 0xad, 0x56, 0xb0, 0xae, 0x6e, 0x35, 0x70, 0x45, 0xb5, 0xb0, + 0xae, 0xda, 0xb9, 0x29, 0x3f, 0xf2, 0x48, 0xb5, 0x5a, 0xa6, 0x4f, 0xe7, 0xe8, 0x43, 0x74, 0x1a, + 0xc6, 0x8c, 0xad, 0x17, 0xab, 0xcc, 0x25, 0x2b, 0xa6, 0x85, 0xb7, 0xb5, 0xbd, 0xdc, 0x7d, 0xd4, + 0xbe, 0xa3, 0xe4, 0x01, 0x75, 0xc8, 0x35, 0x0a, 0x46, 0x0f, 0x41, 0xb6, 0x6a, 0xef, 0xa8, 0x96, + 0x49, 0x63, 0xb2, 0x6d, 0xaa, 0x55, 0x9c, 0xbb, 0x9f, 0xa1, 0x32, 0xf8, 0x8a, 0x00, 0x93, 0x29, + 0x61, 0x5f, 0xd3, 0xb6, 0x1d, 0xc1, 0xf1, 0x41, 0x36, 0x25, 0x28, 0x8c, 0x73, 0x3b, 0x05, 0x59, + 0x62, 0x8a, 0x40, 0xc7, 0xa7, 0x28, 0xda, 0x88, 0xb9, 0x63, 0xfa, 0xfb, 0xbd, 0x17, 0x86, 0x09, + 0xa6, 0xd7, 0xe9, 0x43, 0x2c, 0x21, 0x33, 0x77, 0x7c, 0x3d, 0x3e, 0x09, 0xc7, 0x08, 0x52, 0x13, + 0x3b, 0x6a, 0x4d, 0x75, 0x54, 0x1f, 0xf6, 0x23, 0x14, 0x9b, 0xd8, 0x7d, 0x99, 0x3f, 0x0c, 0xc8, + 0x69, 0xb5, 0xb6, 0xf6, 0x5d, 0xcf, 0x7a, 0x94, 0xc9, 0x49, 0x60, 0xc2, 0xb7, 0xee, 0x58, 0xd2, + 0x2d, 0x17, 0x20, 0xe3, 0x77, 0x7c, 0x94, 0x06, 0xe6, 0xfa, 0x59, 0x89, 0x64, 0x41, 0xf3, 0xab, + 0x25, 0x92, 0xbf, 0xbc, 0xad, 0x9c, 0x8d, 0x91, 0x3c, 0x6a, 0x69, 0x71, 0xa3, 0x5c, 0x51, 0x36, + 0x57, 0x36, 0x16, 0x97, 0xcb, 0xd9, 0xb8, 0x2f, 0x61, 0x7f, 0x2e, 0x91, 0x7a, 0x20, 0xfb, 0xa0, + 0xfc, 0xcd, 0x18, 0x8c, 0x04, 0x77, 0x60, 0xe8, 0x4d, 0x70, 0x5c, 0x94, 0x4b, 0x6c, 0xec, 0x54, + 0xae, 0x69, 0x16, 0x9d, 0x91, 0x4d, 0x95, 0xad, 0x8e, 0xae, 0x4f, 0x4c, 0x70, 0xac, 0x75, 0xec, + 0xbc, 0xa0, 0x59, 0x64, 0xbe, 0x35, 0x55, 0x07, 0x2d, 0xc1, 0x94, 0x6e, 0x54, 0x6c, 0x47, 0xd5, + 0x6b, 0xaa, 0x55, 0xab, 0x78, 0x85, 0xaa, 0x8a, 0x5a, 0xad, 0x62, 0xdb, 0x36, 0xd8, 0x4a, 0xe8, + 0x72, 0x39, 0xa9, 0x1b, 0xeb, 0x1c, 0xd9, 0x5b, 0x22, 0xe6, 0x38, 0x6a, 0xc8, 0x7f, 0xe3, 0xdd, + 0xfc, 0xf7, 0x2e, 0x48, 0x37, 0x55, 0xb3, 0x82, 0x75, 0xc7, 0xda, 0xa7, 0x79, 0x77, 0x4a, 0x49, + 0x35, 0x55, 0xb3, 0x4c, 0xda, 0x3f, 0x92, 0xed, 0xcf, 0x73, 0x89, 0x54, 0x2a, 0x9b, 0x7e, 0x2e, + 0x91, 0x4a, 0x67, 0x41, 0x7e, 0x2d, 0x0e, 0x19, 0x7f, 0x1e, 0x4e, 0xb6, 0x35, 0x55, 0xba, 0x64, + 0x49, 0x34, 0xa8, 0xdd, 0xdb, 0x33, 0x6b, 0x9f, 0x99, 0x27, 0x6b, 0x59, 0x61, 0x80, 0x65, 0xc7, + 0x0a, 0xa3, 0x24, 0x79, 0x04, 0x71, 0x36, 0xcc, 0xb2, 0x91, 0x94, 0xc2, 0x5b, 0x68, 0x01, 0x06, + 0x5e, 0xb4, 0x29, 0xef, 0x01, 0xca, 0xfb, 0xbe, 0xde, 0xbc, 0x9f, 0x5b, 0xa7, 0xcc, 0xd3, 0xcf, + 0xad, 0x57, 0x56, 0x56, 0x95, 0xe5, 0xb9, 0x25, 0x85, 0x93, 0xa3, 0x13, 0x90, 0x68, 0xa8, 0x2f, + 0xef, 0x07, 0x57, 0x3d, 0x0a, 0xea, 0x77, 0x10, 0x4e, 0x40, 0xe2, 0x1a, 0x56, 0x77, 0x83, 0x6b, + 0x0d, 0x05, 0xdd, 0xc1, 0xc9, 0x30, 0x0b, 0x49, 0x6a, 0x2f, 0x04, 0xc0, 0x2d, 0x96, 0x3d, 0x82, + 0x52, 0x90, 0x98, 0x5f, 0x55, 0xc8, 0x84, 0xc8, 0x42, 0x86, 0x41, 0x2b, 0x6b, 0x8b, 0xe5, 0xf9, + 0x72, 0x36, 0x26, 0x9f, 0x85, 0x01, 0x66, 0x04, 0x32, 0x59, 0x5c, 0x33, 0x64, 0x8f, 0xf0, 0x26, + 0xe7, 0x21, 0x89, 0xa7, 0x9b, 0xcb, 0xc5, 0xb2, 0x92, 0x8d, 0x05, 0x87, 0x3a, 0x91, 0x4d, 0xca, + 0x36, 0x64, 0xfc, 0x89, 0xf8, 0x8f, 0x66, 0x93, 0xfd, 0x15, 0x09, 0x86, 0x7c, 0x89, 0x35, 0xc9, + 0x88, 0xd4, 0x46, 0xc3, 0xb8, 0x56, 0x51, 0x1b, 0x9a, 0x6a, 0x73, 0xd7, 0x00, 0x0a, 0x9a, 0x23, + 0x90, 0x7e, 0x87, 0xee, 0x47, 0x34, 0x45, 0x92, 0xd9, 0x01, 0xf9, 0x53, 0x12, 0x64, 0xc3, 0x99, + 0x6d, 0x48, 0x4c, 0xe9, 0x8d, 0x14, 0x53, 0xfe, 0xa4, 0x04, 0x23, 0xc1, 0x74, 0x36, 0x24, 0xde, + 0x3d, 0x6f, 0xa8, 0x78, 0x7f, 0x14, 0x83, 0xe1, 0x40, 0x12, 0xdb, 0xaf, 0x74, 0x2f, 0xc1, 0x98, + 0x56, 0xc3, 0x4d, 0xd3, 0x70, 0xb0, 0x5e, 0xdd, 0xaf, 0x34, 0xf0, 0x55, 0xdc, 0xc8, 0xc9, 0x34, + 0x68, 0xcc, 0xf6, 0x4e, 0x93, 0x67, 0x16, 0x3d, 0xba, 0x25, 0x42, 0x56, 0x18, 0x5f, 0x2c, 0x95, + 0x97, 0xd7, 0x56, 0x37, 0xca, 0x2b, 0xf3, 0x6f, 0xad, 0x6c, 0xae, 0x5c, 0x5e, 0x59, 0x7d, 0x61, + 0x45, 0xc9, 0x6a, 0x21, 0xb4, 0x3b, 0x38, 0xed, 0xd7, 0x20, 0x1b, 0x16, 0x0a, 0x1d, 0x87, 0x4e, + 0x62, 0x65, 0x8f, 0xa0, 0x71, 0x18, 0x5d, 0x59, 0xad, 0xac, 0x2f, 0x96, 0xca, 0x95, 0xf2, 0xc5, + 0x8b, 0xe5, 0xf9, 0x8d, 0x75, 0x56, 0xf8, 0x70, 0xb1, 0x37, 0x02, 0x13, 0x5c, 0x7e, 0x35, 0x0e, + 0xe3, 0x1d, 0x24, 0x41, 0x73, 0x7c, 0xcb, 0xc2, 0x76, 0x51, 0x8f, 0xf6, 0x23, 0xfd, 0x0c, 0xc9, + 0x19, 0xd6, 0x54, 0xcb, 0xe1, 0x3b, 0x9c, 0x87, 0x80, 0x58, 0x49, 0x77, 0xb4, 0x6d, 0x0d, 0x5b, + 0xbc, 0x4e, 0xc4, 0xf6, 0x31, 0xa3, 0x1e, 0x9c, 0x95, 0x8a, 0x1e, 0x01, 0x64, 0x1a, 0xb6, 0xe6, + 0x68, 0x57, 0x71, 0x45, 0xd3, 0x45, 0x51, 0x89, 0xec, 0x6b, 0x12, 0x4a, 0x56, 0x3c, 0x59, 0xd4, + 0x1d, 0x17, 0x5b, 0xc7, 0x75, 0x35, 0x84, 0x4d, 0x82, 0x79, 0x5c, 0xc9, 0x8a, 0x27, 0x2e, 0xf6, + 0x3d, 0x90, 0xa9, 0x19, 0x2d, 0x92, 0xec, 0x31, 0x3c, 0xb2, 0x76, 0x48, 0xca, 0x10, 0x83, 0xb9, + 0x28, 0x3c, 0x8d, 0xf7, 0xaa, 0x59, 0x19, 0x65, 0x88, 0xc1, 0x18, 0xca, 0x83, 0x30, 0xaa, 0xd6, + 0xeb, 0x16, 0x61, 0x2e, 0x18, 0xb1, 0x8d, 0xc9, 0x88, 0x0b, 0xa6, 0x88, 0xf9, 0xe7, 0x20, 0x25, + 0xec, 0x40, 0x96, 0x6a, 0x62, 0x89, 0x8a, 0xc9, 0x76, 0xdb, 0xb1, 0x53, 0x69, 0x25, 0xa5, 0x8b, + 0x87, 0xf7, 0x40, 0x46, 0xb3, 0x2b, 0x5e, 0x71, 0x3e, 0x36, 0x1d, 0x3b, 0x95, 0x52, 0x86, 0x34, + 0xdb, 0x2d, 0x6c, 0xca, 0x9f, 0x8b, 0xc1, 0x48, 0xf0, 0xe5, 0x02, 0x2a, 0x41, 0xaa, 0x61, 0x54, + 0x55, 0xea, 0x5a, 0xec, 0xcd, 0xd6, 0xa9, 0x88, 0xf7, 0x11, 0x33, 0x4b, 0x1c, 0x5f, 0x71, 0x29, + 0xf3, 0xbf, 0x23, 0x41, 0x4a, 0x80, 0xd1, 0x31, 0x48, 0x98, 0xaa, 0xb3, 0x43, 0xd9, 0x25, 0x8b, + 0xb1, 0xac, 0xa4, 0xd0, 0x36, 0x81, 0xdb, 0xa6, 0xaa, 0x53, 0x17, 0xe0, 0x70, 0xd2, 0x26, 0xe3, + 0xda, 0xc0, 0x6a, 0x8d, 0xee, 0x7a, 0x8c, 0x66, 0x13, 0xeb, 0x8e, 0x2d, 0xc6, 0x95, 0xc3, 0xe7, + 0x39, 0x18, 0x3d, 0x0c, 0x63, 0x8e, 0xa5, 0x6a, 0x8d, 0x00, 0x6e, 0x82, 0xe2, 0x66, 0xc5, 0x03, + 0x17, 0xb9, 0x00, 0x27, 0x04, 0xdf, 0x1a, 0x76, 0xd4, 0xea, 0x0e, 0xae, 0x79, 0x44, 0x03, 0xb4, + 0xba, 0x71, 0x9c, 0x23, 0x94, 0xf8, 0x73, 0x41, 0x2b, 0x7f, 0x53, 0x82, 0x31, 0xb1, 0x4f, 0xab, + 0xb9, 0xc6, 0x5a, 0x06, 0x50, 0x75, 0xdd, 0x70, 0xfc, 0xe6, 0x6a, 0x77, 0xe5, 0x36, 0xba, 0x99, + 0x39, 0x97, 0x48, 0xf1, 0x31, 0xc8, 0x37, 0x01, 0xbc, 0x27, 0x5d, 0xcd, 0x36, 0x05, 0x43, 0xfc, + 0xcd, 0x11, 0x7d, 0xfd, 0xc8, 0x76, 0xf6, 0xc0, 0x40, 0x64, 0x43, 0x87, 0x26, 0x20, 0xb9, 0x85, + 0xeb, 0x9a, 0xce, 0xeb, 0xc1, 0xac, 0x21, 0xea, 0x2f, 0x09, 0xb7, 0xfe, 0x52, 0xfc, 0x90, 0x04, + 0xe3, 0x55, 0xa3, 0x19, 0x96, 0xb7, 0x98, 0x0d, 0x95, 0x17, 0xec, 0x4b, 0xd2, 0xdb, 0x9e, 0xa9, + 0x6b, 0xce, 0x4e, 0x6b, 0x6b, 0xa6, 0x6a, 0x34, 0x67, 0xeb, 0x46, 0x43, 0xd5, 0xeb, 0xde, 0xfb, + 0x53, 0xfa, 0xa3, 0xfa, 0x68, 0x1d, 0xeb, 0x8f, 0xd6, 0x0d, 0xdf, 0xdb, 0xd4, 0x0b, 0xde, 0xcf, + 0xbf, 0x90, 0xa4, 0x5f, 0x88, 0xc5, 0x17, 0xd6, 0x8a, 0x9f, 0x8f, 0xe5, 0x17, 0x58, 0x77, 0x6b, + 0xc2, 0x3c, 0x0a, 0xde, 0x6e, 0xe0, 0x2a, 0x51, 0x19, 0xbe, 0xf3, 0x30, 0x4c, 0xd4, 0x8d, 0xba, + 0x41, 0x39, 0xce, 0x92, 0x5f, 0xfc, 0x8d, 0x6c, 0xda, 0x85, 0xe6, 0x23, 0x5f, 0xdf, 0x16, 0x56, + 0x60, 0x9c, 0x23, 0x57, 0xe8, 0x2b, 0x21, 0xb6, 0xb1, 0x41, 0x3d, 0xcb, 0x6a, 0xb9, 0x5f, 0xfb, + 0x36, 0x5d, 0xd0, 0x95, 0x31, 0x4e, 0x4a, 0x9e, 0xb1, 0xbd, 0x4f, 0x41, 0x81, 0xa3, 0x01, 0x7e, + 0x6c, 0xda, 0x62, 0x2b, 0x82, 0xe3, 0x6f, 0x71, 0x8e, 0xe3, 0x3e, 0x8e, 0xeb, 0x9c, 0xb4, 0x30, + 0x0f, 0xc3, 0x07, 0xe1, 0xf5, 0xaf, 0x39, 0xaf, 0x0c, 0xf6, 0x33, 0x59, 0x80, 0x51, 0xca, 0xa4, + 0xda, 0xb2, 0x1d, 0xa3, 0x49, 0x63, 0x62, 0x6f, 0x36, 0xbf, 0xfd, 0x6d, 0x36, 0x8f, 0x46, 0x08, + 0xd9, 0xbc, 0x4b, 0x55, 0x28, 0x00, 0x7d, 0x0b, 0x56, 0xc3, 0xd5, 0x46, 0x04, 0x87, 0xaf, 0x72, + 0x41, 0x5c, 0xfc, 0xc2, 0x15, 0x98, 0x20, 0xbf, 0x69, 0xc8, 0xf2, 0x4b, 0x12, 0x5d, 0x83, 0xcb, + 0x7d, 0xf3, 0xbd, 0x6c, 0xaa, 0x8e, 0xbb, 0x0c, 0x7c, 0x32, 0xf9, 0x46, 0xb1, 0x8e, 0x1d, 0x07, + 0x5b, 0x76, 0x45, 0x6d, 0x74, 0x12, 0xcf, 0x57, 0xc4, 0xc8, 0x7d, 0xfc, 0xbb, 0xc1, 0x51, 0x5c, + 0x60, 0x94, 0x73, 0x8d, 0x46, 0x61, 0x13, 0x8e, 0x77, 0xf0, 0x8a, 0x3e, 0x78, 0xbe, 0xca, 0x79, + 0x4e, 0xb4, 0x79, 0x06, 0x61, 0xbb, 0x06, 0x02, 0xee, 0x8e, 0x65, 0x1f, 0x3c, 0x3f, 0xc1, 0x79, + 0x22, 0x4e, 0x2b, 0x86, 0x94, 0x70, 0x7c, 0x0e, 0xc6, 0xae, 0x62, 0x6b, 0xcb, 0xb0, 0x79, 0xe1, + 0xa8, 0x0f, 0x76, 0x9f, 0xe4, 0xec, 0x46, 0x39, 0x21, 0xad, 0x24, 0x11, 0x5e, 0x4f, 0x43, 0x6a, + 0x5b, 0xad, 0xe2, 0x3e, 0x58, 0xdc, 0xe0, 0x2c, 0x06, 0x09, 0x3e, 0x21, 0x9d, 0x83, 0x4c, 0xdd, + 0xe0, 0xab, 0x56, 0x34, 0xf9, 0xa7, 0x38, 0xf9, 0x90, 0xa0, 0xe1, 0x2c, 0x4c, 0xc3, 0x6c, 0x35, + 0xc8, 0x92, 0x16, 0xcd, 0xe2, 0xef, 0x08, 0x16, 0x82, 0x86, 0xb3, 0x38, 0x80, 0x59, 0x3f, 0x2d, + 0x58, 0xd8, 0x3e, 0x7b, 0x3e, 0x0b, 0x43, 0x86, 0xde, 0xd8, 0x37, 0xf4, 0x7e, 0x84, 0xf8, 0x0c, + 0xe7, 0x00, 0x9c, 0x84, 0x30, 0xb8, 0x00, 0xe9, 0x7e, 0x07, 0xe2, 0xef, 0x7e, 0x57, 0x4c, 0x0f, + 0x31, 0x02, 0x0b, 0x30, 0x2a, 0x02, 0x94, 0x66, 0xe8, 0x7d, 0xb0, 0xf8, 0x7b, 0x9c, 0xc5, 0x88, + 0x8f, 0x8c, 0xab, 0xe1, 0x60, 0xdb, 0xa9, 0xe3, 0x7e, 0x98, 0x7c, 0x4e, 0xa8, 0xc1, 0x49, 0xb8, + 0x29, 0xb7, 0xb0, 0x5e, 0xdd, 0xe9, 0x8f, 0xc3, 0x2f, 0x09, 0x53, 0x0a, 0x1a, 0xc2, 0x62, 0x1e, + 0x86, 0x9b, 0xaa, 0x65, 0xef, 0xa8, 0x8d, 0xbe, 0x86, 0xe3, 0xef, 0x73, 0x1e, 0x19, 0x97, 0x88, + 0x5b, 0xa4, 0xa5, 0x1f, 0x84, 0xcd, 0xe7, 0x85, 0x45, 0x7c, 0x64, 0x7c, 0xea, 0xd9, 0x0e, 0xad, + 0xb2, 0x1d, 0x84, 0xdb, 0x2f, 0x8b, 0xa9, 0xc7, 0x68, 0x97, 0xfd, 0x1c, 0x2f, 0x40, 0xda, 0xd6, + 0x5e, 0xee, 0x8b, 0xcd, 0x17, 0xc4, 0x48, 0x53, 0x02, 0x42, 0xfc, 0x56, 0x38, 0xd1, 0x71, 0x99, + 0xe8, 0x83, 0xd9, 0x3f, 0xe0, 0xcc, 0x8e, 0x75, 0x58, 0x2a, 0x78, 0x48, 0x38, 0x28, 0xcb, 0x7f, + 0x28, 0x42, 0x02, 0x0e, 0xf1, 0x5a, 0x23, 0xfb, 0x08, 0x5b, 0xdd, 0x3e, 0x98, 0xd5, 0x7e, 0x45, + 0x58, 0x8d, 0xd1, 0x06, 0xac, 0xb6, 0x01, 0xc7, 0x38, 0xc7, 0x83, 0x8d, 0xeb, 0xaf, 0x8a, 0xc0, + 0xca, 0xa8, 0x37, 0x83, 0xa3, 0xfb, 0x76, 0xc8, 0xbb, 0xe6, 0x14, 0x09, 0xab, 0x5d, 0x69, 0xaa, + 0x66, 0x1f, 0x9c, 0x7f, 0x8d, 0x73, 0x16, 0x11, 0xdf, 0xcd, 0x78, 0xed, 0x65, 0xd5, 0x24, 0xcc, + 0xdf, 0x02, 0x39, 0xc1, 0xbc, 0xa5, 0x5b, 0xb8, 0x6a, 0xd4, 0x75, 0xed, 0x65, 0x5c, 0xeb, 0x83, + 0xf5, 0xaf, 0x87, 0x86, 0x6a, 0xd3, 0x47, 0x4e, 0x38, 0x2f, 0x42, 0xd6, 0xcd, 0x55, 0x2a, 0x5a, + 0xd3, 0x34, 0x2c, 0x27, 0x82, 0xe3, 0x17, 0xc5, 0x48, 0xb9, 0x74, 0x8b, 0x94, 0xac, 0x50, 0x86, + 0x11, 0xda, 0xec, 0xd7, 0x25, 0xbf, 0xc4, 0x19, 0x0d, 0x7b, 0x54, 0x3c, 0x70, 0x54, 0x8d, 0xa6, + 0xa9, 0x5a, 0xfd, 0xc4, 0xbf, 0x7f, 0x24, 0x02, 0x07, 0x27, 0xe1, 0x81, 0xc3, 0xd9, 0x37, 0x31, + 0x59, 0xed, 0xfb, 0xe0, 0xf0, 0x65, 0x11, 0x38, 0x04, 0x0d, 0x67, 0x21, 0x12, 0x86, 0x3e, 0x58, + 0xfc, 0x63, 0xc1, 0x42, 0xd0, 0x10, 0x16, 0xcf, 0x7b, 0x0b, 0xad, 0x85, 0xeb, 0x9a, 0xed, 0x58, + 0x2c, 0x4d, 0xee, 0xcd, 0xea, 0x9f, 0x7c, 0x37, 0x98, 0x84, 0x29, 0x3e, 0x52, 0x12, 0x89, 0x78, + 0xd9, 0x95, 0xee, 0xa2, 0xa2, 0x05, 0xfb, 0x0d, 0x11, 0x89, 0x7c, 0x64, 0x44, 0x36, 0x5f, 0x86, + 0x48, 0xcc, 0x5e, 0x25, 0x7b, 0x87, 0x3e, 0xd8, 0xfd, 0xd3, 0x90, 0x70, 0xeb, 0x82, 0x96, 0xf0, + 0xf4, 0xe5, 0x3f, 0x2d, 0x7d, 0x17, 0xef, 0xf7, 0xe5, 0x9d, 0xff, 0x2c, 0x94, 0xff, 0x6c, 0x32, + 0x4a, 0x16, 0x43, 0x46, 0x43, 0xf9, 0x14, 0x8a, 0x3a, 0x3f, 0x94, 0xfb, 0xa9, 0xef, 0x73, 0x7d, + 0x83, 0xe9, 0x54, 0x61, 0x89, 0x38, 0x79, 0x30, 0xe9, 0x89, 0x66, 0xf6, 0xde, 0xef, 0xbb, 0x7e, + 0x1e, 0xc8, 0x79, 0x0a, 0x17, 0x61, 0x38, 0x90, 0xf0, 0x44, 0xb3, 0x7a, 0x1f, 0x67, 0x95, 0xf1, + 0xe7, 0x3b, 0x85, 0xb3, 0x90, 0x20, 0xc9, 0x4b, 0x34, 0xf9, 0x5f, 0xe7, 0xe4, 0x14, 0xbd, 0xf0, + 0x66, 0x48, 0x89, 0xa4, 0x25, 0x9a, 0xf4, 0xfd, 0x9c, 0xd4, 0x25, 0x21, 0xe4, 0x22, 0x61, 0x89, + 0x26, 0xff, 0x1b, 0x82, 0x5c, 0x90, 0x10, 0xf2, 0xfe, 0x4d, 0xf8, 0x95, 0x9f, 0x4e, 0xf0, 0x45, + 0x47, 0xd8, 0xee, 0x02, 0x0c, 0xf2, 0x4c, 0x25, 0x9a, 0xfa, 0x83, 0xbc, 0x73, 0x41, 0x51, 0x78, + 0x0a, 0x92, 0x7d, 0x1a, 0xfc, 0x67, 0x38, 0x29, 0xc3, 0x2f, 0xcc, 0xc3, 0x90, 0x2f, 0x3b, 0x89, + 0x26, 0xff, 0x5b, 0x9c, 0xdc, 0x4f, 0x45, 0x44, 0xe7, 0xd9, 0x49, 0x34, 0x83, 0x0f, 0x09, 0xd1, + 0x39, 0x05, 0x31, 0x9b, 0x48, 0x4c, 0xa2, 0xa9, 0x3f, 0x2c, 0xac, 0x2e, 0x48, 0x0a, 0xcf, 0x42, + 0xda, 0x5d, 0x6c, 0xa2, 0xe9, 0x3f, 0xc2, 0xe9, 0x3d, 0x1a, 0x62, 0x01, 0xdf, 0x62, 0x17, 0xcd, + 0xe2, 0x67, 0x85, 0x05, 0x7c, 0x54, 0x64, 0x1a, 0x85, 0x13, 0x98, 0x68, 0x4e, 0x1f, 0x15, 0xd3, + 0x28, 0x94, 0xbf, 0x90, 0xd1, 0xa4, 0x31, 0x3f, 0x9a, 0xc5, 0xcf, 0x89, 0xd1, 0xa4, 0xf8, 0x44, + 0x8c, 0x70, 0x46, 0x10, 0xcd, 0xe3, 0x6f, 0x0b, 0x31, 0x42, 0x09, 0x41, 0x61, 0x0d, 0x50, 0x7b, + 0x36, 0x10, 0xcd, 0xef, 0x63, 0x9c, 0xdf, 0x58, 0x5b, 0x32, 0x50, 0x78, 0x01, 0x8e, 0x75, 0xce, + 0x04, 0xa2, 0xb9, 0x7e, 0xfc, 0xfb, 0xa1, 0xbd, 0x9b, 0x3f, 0x11, 0x28, 0x6c, 0x78, 0x4b, 0x8a, + 0x3f, 0x0b, 0x88, 0x66, 0xfb, 0xea, 0xf7, 0x83, 0x81, 0xdb, 0x9f, 0x04, 0x14, 0xe6, 0x00, 0xbc, + 0x05, 0x38, 0x9a, 0xd7, 0x27, 0x39, 0x2f, 0x1f, 0x11, 0x99, 0x1a, 0x7c, 0xfd, 0x8d, 0xa6, 0xbf, + 0x21, 0xa6, 0x06, 0xa7, 0x20, 0x53, 0x43, 0x2c, 0xbd, 0xd1, 0xd4, 0x9f, 0x12, 0x53, 0x43, 0x90, + 0x10, 0xcf, 0xf6, 0xad, 0x6e, 0xd1, 0x1c, 0x3e, 0x23, 0x3c, 0xdb, 0x47, 0x55, 0x58, 0x81, 0xb1, + 0xb6, 0x05, 0x31, 0x9a, 0xd5, 0x2f, 0x70, 0x56, 0xd9, 0xf0, 0x7a, 0xe8, 0x5f, 0xbc, 0xf8, 0x62, + 0x18, 0xcd, 0xed, 0xb3, 0xa1, 0xc5, 0x8b, 0xaf, 0x85, 0x85, 0x0b, 0x90, 0xd2, 0x5b, 0x8d, 0x06, + 0x99, 0x3c, 0xa8, 0xf7, 0x99, 0xbf, 0xdc, 0x7f, 0xfd, 0x01, 0xb7, 0x8e, 0x20, 0x28, 0x9c, 0x85, + 0x24, 0x6e, 0x6e, 0xe1, 0x5a, 0x14, 0xe5, 0x77, 0x7e, 0x20, 0x02, 0x26, 0xc1, 0x2e, 0x3c, 0x0b, + 0xc0, 0x4a, 0x23, 0xf4, 0xf5, 0x60, 0x04, 0xed, 0x7f, 0xfb, 0x01, 0x3f, 0x8d, 0xe3, 0x91, 0x78, + 0x0c, 0xd8, 0xd9, 0x9e, 0xde, 0x0c, 0xbe, 0x1b, 0x64, 0x40, 0x47, 0xe4, 0x69, 0x18, 0x7c, 0xd1, + 0x36, 0x74, 0x47, 0xad, 0x47, 0x51, 0xff, 0x77, 0x4e, 0x2d, 0xf0, 0x89, 0xc1, 0x9a, 0x86, 0x85, + 0x1d, 0xb5, 0x6e, 0x47, 0xd1, 0xfe, 0x0f, 0x4e, 0xeb, 0x12, 0x10, 0xe2, 0xaa, 0x6a, 0x3b, 0xfd, + 0xe8, 0xfd, 0x27, 0x82, 0x58, 0x10, 0x10, 0xa1, 0xc9, 0xef, 0x5d, 0xbc, 0x1f, 0x45, 0xfb, 0x3d, + 0x21, 0x34, 0xc7, 0x2f, 0xbc, 0x19, 0xd2, 0xe4, 0x27, 0x3b, 0x62, 0x17, 0x41, 0xfc, 0xa7, 0x9c, + 0xd8, 0xa3, 0x20, 0x3d, 0xdb, 0x4e, 0xcd, 0xd1, 0xa2, 0x8d, 0x7d, 0x8b, 0x8f, 0xb4, 0xc0, 0x2f, + 0xcc, 0xc1, 0x90, 0xed, 0xd4, 0x6a, 0x2d, 0x9e, 0x9f, 0x46, 0x90, 0xff, 0xd9, 0x0f, 0xdc, 0x92, + 0x85, 0x4b, 0x43, 0x46, 0xfb, 0xda, 0xae, 0x63, 0x1a, 0xf4, 0x15, 0x48, 0x14, 0x87, 0xef, 0x73, + 0x0e, 0x3e, 0x92, 0xc2, 0x3c, 0x64, 0x88, 0x2e, 0x16, 0x36, 0x31, 0x7d, 0x5f, 0x15, 0xc1, 0xe2, + 0xcf, 0xb9, 0x01, 0x02, 0x44, 0xc5, 0x9f, 0xfc, 0xea, 0x6b, 0x93, 0xd2, 0x37, 0x5e, 0x9b, 0x94, + 0xfe, 0xe8, 0xb5, 0x49, 0xe9, 0xc3, 0xdf, 0x9a, 0x3c, 0xf2, 0x8d, 0x6f, 0x4d, 0x1e, 0xf9, 0xbd, + 0x6f, 0x4d, 0x1e, 0xe9, 0x5c, 0x36, 0x86, 0x05, 0x63, 0xc1, 0x60, 0x05, 0xe3, 0xb7, 0xc9, 0x81, + 0x72, 0x71, 0xdd, 0xf0, 0xaa, 0xb5, 0xee, 0x26, 0x07, 0xfe, 0x5c, 0x22, 0x1b, 0xe6, 0x60, 0x2d, + 0x57, 0xd5, 0xf7, 0xbb, 0xdc, 0xc1, 0xc9, 0x77, 0x2c, 0x0c, 0xcb, 0x6f, 0x82, 0xf8, 0x9c, 0xbe, + 0x8f, 0x4e, 0xb0, 0x98, 0x57, 0x69, 0x59, 0x0d, 0x7e, 0xf4, 0x6b, 0x90, 0xb4, 0x37, 0xad, 0x06, + 0x9a, 0xf0, 0xce, 0x67, 0x4a, 0xa7, 0x32, 0xfc, 0xd0, 0x65, 0x21, 0xf1, 0xbd, 0xcf, 0x4c, 0x1d, + 0x29, 0xee, 0x86, 0x35, 0xfc, 0x4a, 0xa4, 0x96, 0xa9, 0x39, 0x7d, 0x9f, 0x2a, 0xb9, 0x26, 0xbd, + 0x2d, 0x49, 0xfa, 0xb0, 0x45, 0x61, 0x7b, 0x32, 0x5c, 0xd8, 0x7e, 0x01, 0x37, 0x1a, 0x97, 0x75, + 0xe3, 0x9a, 0xbe, 0x41, 0xd0, 0xb6, 0x06, 0x28, 0x8f, 0x27, 0xe0, 0xc3, 0x31, 0x98, 0x0a, 0xeb, + 0x4d, 0x1c, 0xc7, 0x76, 0xd4, 0xa6, 0xd9, 0xed, 0x06, 0xd2, 0x05, 0x48, 0x6f, 0x08, 0x1c, 0x94, + 0x83, 0x41, 0x1b, 0x57, 0x0d, 0xbd, 0x66, 0x53, 0x65, 0xe3, 0x8a, 0x68, 0x12, 0x65, 0x75, 0x55, + 0x37, 0x6c, 0x7e, 0x40, 0x92, 0x35, 0x8a, 0x3f, 0x2f, 0x1d, 0x6c, 0x24, 0x47, 0xdc, 0xae, 0x84, + 0xa6, 0x0f, 0xf7, 0x2a, 0xff, 0x53, 0x2b, 0x78, 0x2a, 0xf8, 0x6a, 0xfd, 0xfd, 0x9a, 0xe4, 0x3d, + 0x71, 0x38, 0x51, 0x35, 0xec, 0xa6, 0x61, 0x57, 0xd8, 0x08, 0xb3, 0x06, 0x37, 0x46, 0xc6, 0xff, + 0xa8, 0x8f, 0xfa, 0xff, 0x25, 0x18, 0xa1, 0xb3, 0x80, 0x56, 0x3e, 0x69, 0xe0, 0x89, 0x5c, 0x2b, + 0xbe, 0xf6, 0xef, 0x93, 0xd4, 0x6b, 0x86, 0x5d, 0x42, 0x7a, 0xb4, 0x63, 0x03, 0x26, 0xb4, 0xa6, + 0xd9, 0xc0, 0xf4, 0x1d, 0x50, 0xc5, 0x7d, 0x16, 0xcd, 0xef, 0xeb, 0x9c, 0xdf, 0xb8, 0x47, 0xbe, + 0x28, 0xa8, 0x0b, 0x4b, 0x30, 0xa6, 0x56, 0xab, 0xd8, 0x0c, 0xb0, 0x8c, 0x98, 0xa1, 0x42, 0xc0, + 0x2c, 0xa7, 0x74, 0xb9, 0x15, 0x9f, 0xed, 0x36, 0xb6, 0x6f, 0xbb, 0xdf, 0x37, 0x68, 0x16, 0xae, + 0x63, 0xfd, 0x51, 0x1d, 0x3b, 0xd7, 0x0c, 0x6b, 0x97, 0x9b, 0xf7, 0x51, 0xd6, 0x95, 0x18, 0x84, + 0xf7, 0xc5, 0x61, 0x92, 0x3d, 0x98, 0xdd, 0x52, 0x6d, 0x3c, 0x7b, 0xf5, 0xf1, 0x2d, 0xec, 0xa8, + 0x8f, 0xcf, 0x56, 0x0d, 0x4d, 0xe7, 0x23, 0x31, 0xce, 0xc7, 0x85, 0x3c, 0x9f, 0xe1, 0xcf, 0xbb, + 0x4c, 0xcc, 0x05, 0x48, 0xcc, 0x1b, 0x9a, 0x4e, 0x3c, 0xb2, 0x86, 0x75, 0xa3, 0xc9, 0xa7, 0x25, + 0x6b, 0xa0, 0x7b, 0x61, 0x40, 0x6d, 0x1a, 0x2d, 0xdd, 0x61, 0xaf, 0xaf, 0x8a, 0x43, 0x5f, 0xbd, + 0x39, 0x75, 0xe4, 0xf7, 0x6f, 0x4e, 0xc5, 0x17, 0x75, 0x47, 0xe1, 0x8f, 0x0a, 0x89, 0xd7, 0x3f, + 0x3d, 0x25, 0xc9, 0xcf, 0xc1, 0x60, 0x09, 0x57, 0x0f, 0xc3, 0xab, 0x84, 0xab, 0x21, 0x5e, 0x0f, + 0x41, 0x6a, 0x51, 0x77, 0xd8, 0x99, 0xd9, 0xbb, 0x21, 0xae, 0xe9, 0xec, 0x14, 0x56, 0xa8, 0x7f, + 0x02, 0x27, 0xa8, 0x25, 0x5c, 0x75, 0x51, 0x6b, 0xb8, 0x1a, 0x46, 0x25, 0xec, 0x09, 0xbc, 0x58, + 0xfa, 0xbd, 0xff, 0x3c, 0x79, 0xe4, 0x95, 0xd7, 0x26, 0x8f, 0x74, 0x1d, 0x09, 0x7f, 0x38, 0xe4, + 0x26, 0xe6, 0x43, 0x60, 0xd7, 0x76, 0x67, 0x9d, 0xc0, 0x5c, 0xf8, 0x9b, 0x31, 0x98, 0x6c, 0x73, + 0x71, 0xbe, 0x30, 0x74, 0x8b, 0x0e, 0x05, 0x48, 0x95, 0xc4, 0x7a, 0x73, 0xd0, 0xe0, 0xf0, 0x73, + 0x07, 0x0c, 0x0e, 0xc3, 0xa2, 0x27, 0x11, 0x1b, 0x4e, 0x47, 0xc7, 0x06, 0x21, 0xff, 0x21, 0x42, + 0xc3, 0xe7, 0x13, 0x70, 0x37, 0xbd, 0x14, 0x62, 0x35, 0x35, 0xdd, 0x99, 0xad, 0x5a, 0xfb, 0xa6, + 0x43, 0x97, 0x13, 0x63, 0x9b, 0x5b, 0x63, 0xcc, 0x7b, 0x3c, 0xc3, 0x1e, 0x77, 0x71, 0xc9, 0x6d, + 0x48, 0xae, 0x11, 0x3a, 0x62, 0x08, 0xc7, 0x70, 0xd4, 0x06, 0x37, 0x10, 0x6b, 0x10, 0x28, 0xbb, + 0x48, 0x12, 0x63, 0x50, 0x4d, 0xdc, 0x21, 0x69, 0x60, 0x75, 0x9b, 0x1d, 0xdc, 0x8d, 0xd3, 0x25, + 0x24, 0x45, 0x00, 0xf4, 0x8c, 0xee, 0x04, 0x24, 0xd5, 0x16, 0x7b, 0xe5, 0x1c, 0x27, 0x6b, 0x0b, + 0x6d, 0xc8, 0x97, 0x61, 0x90, 0xbf, 0xe6, 0x42, 0x59, 0x88, 0xef, 0xe2, 0x7d, 0xda, 0x4f, 0x46, + 0x21, 0x3f, 0xd1, 0x0c, 0x24, 0xa9, 0xf0, 0xfc, 0x46, 0x42, 0x6e, 0xa6, 0x4d, 0xfa, 0x19, 0x2a, + 0xa4, 0xc2, 0xd0, 0xe4, 0xe7, 0x20, 0x55, 0x32, 0x9a, 0x9a, 0x6e, 0x04, 0xb9, 0xa5, 0x19, 0x37, + 0x2a, 0xb3, 0xd9, 0xe2, 0xae, 0xaf, 0xb0, 0x06, 0x3a, 0x06, 0x03, 0xec, 0x20, 0x37, 0x7f, 0x6d, + 0xce, 0x5b, 0xf2, 0x3c, 0x0c, 0x52, 0xde, 0xab, 0x26, 0x42, 0xfc, 0x66, 0x0f, 0x3f, 0x31, 0x4e, + 0xa3, 0x24, 0x67, 0x1f, 0xf3, 0x84, 0x45, 0x90, 0xa8, 0xa9, 0x8e, 0xca, 0xf5, 0xa6, 0xbf, 0xe5, + 0x67, 0x20, 0xc5, 0x99, 0xd8, 0xe8, 0x0c, 0xc4, 0x0d, 0xd3, 0xe6, 0x2f, 0xbe, 0xf3, 0xdd, 0x54, + 0x59, 0x35, 0x8b, 0x09, 0x32, 0x69, 0x14, 0x82, 0x5c, 0x54, 0xba, 0xce, 0x92, 0xf3, 0x3e, 0x47, + 0xf2, 0x0d, 0xb9, 0xef, 0x27, 0x1b, 0xd2, 0x36, 0x77, 0x70, 0x9d, 0xe5, 0x33, 0x31, 0x98, 0xf4, + 0x3d, 0xbd, 0x8a, 0x2d, 0xb2, 0xd7, 0x63, 0x13, 0x8c, 0x7b, 0x0b, 0xf2, 0x09, 0xc9, 0x9f, 0x77, + 0x71, 0x97, 0x37, 0x43, 0x7c, 0xce, 0x34, 0x51, 0x1e, 0x52, 0xec, 0x05, 0xb7, 0xc1, 0xfc, 0x25, + 0xa1, 0xb8, 0x6d, 0xf2, 0xcc, 0x36, 0xb6, 0x9d, 0x6b, 0xaa, 0xe5, 0x5e, 0x61, 0x12, 0x6d, 0xf9, + 0x69, 0x48, 0xcf, 0x1b, 0xba, 0x8d, 0x75, 0xbb, 0x45, 0xa7, 0xde, 0x56, 0xc3, 0xa8, 0xee, 0x72, + 0x0e, 0xac, 0x41, 0x0c, 0xae, 0x9a, 0x26, 0xa5, 0x4c, 0x28, 0xe4, 0x27, 0x0b, 0x53, 0xc5, 0xf5, + 0xae, 0x26, 0x7a, 0xfa, 0xe0, 0x26, 0xe2, 0x4a, 0xba, 0x36, 0xfa, 0x03, 0x09, 0x4e, 0xb6, 0x4f, + 0xa8, 0x5d, 0xbc, 0x6f, 0x1f, 0x74, 0x3e, 0x9d, 0x87, 0xf4, 0x1a, 0xbd, 0x47, 0x7c, 0x19, 0xef, + 0xa3, 0x3c, 0x0c, 0xe2, 0xda, 0x99, 0xb3, 0x67, 0x1f, 0x7f, 0x9a, 0x79, 0xfb, 0xa5, 0x23, 0x8a, + 0x00, 0x14, 0x52, 0x44, 0xab, 0xd7, 0x3f, 0x33, 0x25, 0x15, 0x93, 0x10, 0xb7, 0x5b, 0xcd, 0x3b, + 0xea, 0x03, 0xaf, 0x26, 0x61, 0xda, 0x4f, 0x49, 0x03, 0xd0, 0x55, 0xb5, 0xa1, 0xd5, 0x54, 0xef, + 0x86, 0x77, 0xd6, 0xa7, 0x23, 0xc5, 0xe8, 0xac, 0x62, 0xbe, 0xa7, 0xa5, 0xe4, 0x5f, 0x97, 0x20, + 0x73, 0x45, 0x70, 0x5e, 0xc7, 0x0e, 0xba, 0x00, 0xe0, 0xf6, 0x24, 0xa6, 0xc5, 0x5d, 0x33, 0xe1, + 0xbe, 0x66, 0x5c, 0x1a, 0xc5, 0x87, 0x8e, 0x9e, 0xa2, 0x8e, 0x66, 0x1a, 0x36, 0xbf, 0xdf, 0x12, + 0x41, 0xea, 0x22, 0xa3, 0x47, 0x00, 0xd1, 0x08, 0x56, 0xb9, 0x6a, 0x38, 0x9a, 0x5e, 0xaf, 0x98, + 0xc6, 0x35, 0x7e, 0x19, 0x30, 0xae, 0x64, 0xe9, 0x93, 0x2b, 0xf4, 0xc1, 0x1a, 0x81, 0x13, 0xa1, + 0xd3, 0x2e, 0x17, 0xb2, 0x5a, 0xa8, 0xb5, 0x9a, 0x85, 0x6d, 0x9b, 0x07, 0x29, 0xd1, 0x44, 0x17, + 0x60, 0xd0, 0x6c, 0x6d, 0x55, 0x44, 0x44, 0x18, 0x3a, 0x73, 0xb2, 0xd3, 0xfc, 0x16, 0xe3, 0xcf, + 0x67, 0xf8, 0x80, 0xd9, 0xda, 0x22, 0xde, 0x70, 0x0f, 0x64, 0x3a, 0x08, 0x33, 0x74, 0xd5, 0x93, + 0x83, 0x5e, 0x4f, 0xe7, 0x1a, 0x54, 0x4c, 0x4b, 0x33, 0x2c, 0xcd, 0xd9, 0xa7, 0xa7, 0x53, 0xe2, + 0x4a, 0x56, 0x3c, 0x58, 0xe3, 0x70, 0x79, 0x17, 0x46, 0xd7, 0x69, 0x2a, 0xe5, 0x49, 0x7e, 0xd6, + 0x93, 0x4f, 0x8a, 0x96, 0xaf, 0xab, 0x64, 0xb1, 0x36, 0xc9, 0x8a, 0xcf, 0x77, 0xf5, 0xce, 0xa7, + 0x0e, 0xee, 0x9d, 0xc1, 0xc5, 0xfd, 0x4f, 0x4e, 0x04, 0x26, 0x1f, 0xcf, 0x9c, 0x7d, 0xe1, 0xa9, + 0x5f, 0xc7, 0x8c, 0xda, 0x41, 0xe4, 0x7b, 0x2f, 0x9a, 0xf9, 0x88, 0x30, 0x99, 0x8f, 0x9c, 0x42, + 0xf2, 0xd3, 0x30, 0xbc, 0xa6, 0x5a, 0xce, 0x3a, 0x76, 0x2e, 0x61, 0xb5, 0x86, 0xad, 0xe0, 0xaa, + 0x3a, 0x2c, 0x56, 0x55, 0x04, 0x09, 0xba, 0x74, 0xb2, 0x55, 0x85, 0xfe, 0x96, 0x77, 0x20, 0x41, + 0x4f, 0xa8, 0xb9, 0x2b, 0x2e, 0xa7, 0x60, 0x2b, 0x2e, 0x89, 0x95, 0xfb, 0x0e, 0xb6, 0xc5, 0x86, + 0x8d, 0x36, 0xd0, 0x93, 0x62, 0xdd, 0x8c, 0xf7, 0x5e, 0x37, 0xb9, 0x23, 0xf2, 0xd5, 0xb3, 0x01, + 0x83, 0x45, 0x12, 0x6a, 0x17, 0x4b, 0xae, 0x20, 0x92, 0x27, 0x08, 0x5a, 0x86, 0x51, 0x53, 0xb5, + 0x1c, 0x7a, 0x34, 0x7f, 0x87, 0x6a, 0xc1, 0x7d, 0x7d, 0xaa, 0x7d, 0xe6, 0x05, 0x94, 0xe5, 0xbd, + 0x0c, 0x9b, 0x7e, 0xa0, 0xfc, 0xc7, 0x09, 0x18, 0xe0, 0xc6, 0x78, 0x33, 0x0c, 0x72, 0xb3, 0x72, + 0xef, 0xbc, 0x7b, 0xa6, 0x7d, 0xe1, 0x99, 0x71, 0x17, 0x08, 0xce, 0x4f, 0xd0, 0xa0, 0x07, 0x20, + 0x55, 0xdd, 0x51, 0x35, 0xbd, 0xa2, 0xd5, 0x44, 0x56, 0xfb, 0xda, 0xcd, 0xa9, 0xc1, 0x79, 0x02, + 0x5b, 0x2c, 0x29, 0x83, 0xf4, 0xe1, 0x62, 0x8d, 0xac, 0xf4, 0x3b, 0x58, 0xab, 0xef, 0x38, 0x7c, + 0x86, 0xf1, 0x16, 0x3a, 0x0f, 0x09, 0xe2, 0x10, 0xfc, 0xe6, 0x56, 0xbe, 0x6d, 0x6f, 0xe1, 0x6e, + 0xf0, 0x8a, 0x29, 0xd2, 0xf1, 0x87, 0xff, 0x70, 0x4a, 0x52, 0x28, 0x05, 0x9a, 0x87, 0xe1, 0x86, + 0x6a, 0x3b, 0x15, 0xba, 0x42, 0x91, 0xee, 0x93, 0x94, 0xc5, 0x89, 0x76, 0x83, 0x70, 0xc3, 0x72, + 0xd1, 0x87, 0x08, 0x15, 0x03, 0xd5, 0xd0, 0x29, 0xc8, 0x52, 0x26, 0x55, 0xa3, 0xd9, 0xd4, 0x1c, + 0x96, 0x3b, 0x0d, 0x50, 0xbb, 0x8f, 0x10, 0xf8, 0x3c, 0x05, 0xd3, 0x0c, 0xea, 0x2e, 0x48, 0xd3, + 0xab, 0x22, 0x14, 0x85, 0x1d, 0x8b, 0x4c, 0x11, 0x00, 0x7d, 0xf8, 0x20, 0x8c, 0x7a, 0xf1, 0x91, + 0xa1, 0xa4, 0x18, 0x17, 0x0f, 0x4c, 0x11, 0x1f, 0x83, 0x09, 0x1d, 0xef, 0xd1, 0x83, 0x9a, 0x01, + 0xec, 0x34, 0xc5, 0x46, 0xe4, 0xd9, 0x95, 0x20, 0xc5, 0xfd, 0x30, 0x52, 0x15, 0xc6, 0x67, 0xb8, + 0x40, 0x71, 0x87, 0x5d, 0x28, 0x45, 0x3b, 0x01, 0x29, 0xd5, 0x34, 0x19, 0xc2, 0x10, 0x8f, 0x8f, + 0xa6, 0x49, 0x1f, 0x9d, 0x86, 0x31, 0xaa, 0xa3, 0x85, 0xed, 0x56, 0xc3, 0xe1, 0x4c, 0x32, 0x14, + 0x67, 0x94, 0x3c, 0x50, 0x18, 0x9c, 0xe2, 0xde, 0x0b, 0xc3, 0xf8, 0xaa, 0x56, 0xc3, 0x7a, 0x15, + 0x33, 0xbc, 0x61, 0x8a, 0x97, 0x11, 0x40, 0x8a, 0xf4, 0x10, 0xb8, 0x71, 0xaf, 0x22, 0x62, 0xf2, + 0x08, 0xe3, 0x27, 0xe0, 0x73, 0x0c, 0x2c, 0xe7, 0x20, 0x51, 0x52, 0x1d, 0x95, 0x24, 0x10, 0xce, + 0x1e, 0x5b, 0x68, 0x32, 0x0a, 0xf9, 0x29, 0xbf, 0x1e, 0x83, 0xc4, 0x15, 0xc3, 0xc1, 0xe8, 0x09, + 0x5f, 0x82, 0x37, 0xd2, 0xc9, 0x9f, 0xd7, 0xb5, 0xba, 0x8e, 0x6b, 0xcb, 0x76, 0xdd, 0x77, 0x5f, + 0xdb, 0x73, 0xa7, 0x58, 0xc0, 0x9d, 0x26, 0x20, 0x69, 0x19, 0x2d, 0xbd, 0x26, 0x4e, 0x14, 0xd2, + 0x06, 0x2a, 0x43, 0xca, 0xf5, 0x92, 0x44, 0x94, 0x97, 0x8c, 0x12, 0x2f, 0x21, 0x3e, 0xcc, 0x01, + 0xca, 0xe0, 0x16, 0x77, 0x96, 0x22, 0xa4, 0xdd, 0xe0, 0xc5, 0xbd, 0xad, 0x3f, 0x87, 0xf5, 0xc8, + 0xc8, 0x62, 0xe2, 0x8e, 0xbd, 0x6b, 0x3c, 0xe6, 0x71, 0x59, 0xf7, 0x01, 0xb7, 0x5e, 0xc0, 0xad, + 0xf8, 0xdd, 0xf1, 0x41, 0xaa, 0x97, 0xe7, 0x56, 0xec, 0xfe, 0xf8, 0x49, 0x48, 0xdb, 0x5a, 0x5d, + 0x57, 0x9d, 0x96, 0x85, 0xb9, 0xe7, 0x79, 0x00, 0xf9, 0x2b, 0x12, 0x0c, 0x30, 0x4f, 0xf6, 0xd9, + 0x4d, 0xea, 0x6c, 0xb7, 0x58, 0x37, 0xbb, 0xc5, 0x0f, 0x6f, 0xb7, 0x39, 0x00, 0x57, 0x18, 0x9b, + 0xdf, 0xfd, 0xed, 0x90, 0x31, 0x30, 0x11, 0xd7, 0xb5, 0x3a, 0x9f, 0xa8, 0x3e, 0x22, 0xf9, 0x0f, + 0x24, 0x92, 0xa4, 0xf2, 0xe7, 0x68, 0x0e, 0x86, 0x85, 0x5c, 0x95, 0xed, 0x86, 0x5a, 0xe7, 0xbe, + 0x73, 0x77, 0x57, 0xe1, 0x2e, 0x36, 0xd4, 0xba, 0x32, 0xc4, 0xe5, 0x21, 0x8d, 0xce, 0xe3, 0x10, + 0xeb, 0x32, 0x0e, 0x81, 0x81, 0x8f, 0x1f, 0x6e, 0xe0, 0x03, 0x43, 0x94, 0x08, 0x0f, 0xd1, 0x17, + 0x63, 0x74, 0xb3, 0x62, 0x1a, 0xb6, 0xda, 0xf8, 0x51, 0xcc, 0x88, 0xbb, 0x20, 0x6d, 0x1a, 0x8d, + 0x0a, 0x7b, 0xc2, 0x4e, 0xda, 0xa6, 0x4c, 0xa3, 0xa1, 0xb4, 0x0d, 0x7b, 0xf2, 0x36, 0x4d, 0x97, + 0x81, 0xdb, 0x60, 0xb5, 0xc1, 0xb0, 0xd5, 0x2c, 0xc8, 0x30, 0x53, 0xf0, 0xb5, 0xec, 0x31, 0x62, + 0x03, 0xba, 0x38, 0x4a, 0xed, 0x6b, 0x2f, 0x13, 0x9b, 0x61, 0x2a, 0x1c, 0x8f, 0x50, 0xb0, 0xd0, + 0xdf, 0x69, 0x97, 0xeb, 0x77, 0x4b, 0x85, 0xe3, 0xc9, 0x3f, 0x2f, 0x01, 0x2c, 0x11, 0xcb, 0x52, + 0x7d, 0xc9, 0x2a, 0x64, 0x53, 0x11, 0x2a, 0x81, 0x9e, 0x27, 0xbb, 0x0d, 0x1a, 0xef, 0x3f, 0x63, + 0xfb, 0xe5, 0x9e, 0x87, 0x61, 0xcf, 0x19, 0x6d, 0x2c, 0x84, 0x99, 0xec, 0x91, 0x55, 0xaf, 0x63, + 0x47, 0xc9, 0x5c, 0xf5, 0xb5, 0xe4, 0x7f, 0x29, 0x41, 0x9a, 0xca, 0xb4, 0x8c, 0x1d, 0x35, 0x30, + 0x86, 0xd2, 0xe1, 0xc7, 0xf0, 0x6e, 0x00, 0xc6, 0xc6, 0xd6, 0x5e, 0xc6, 0xdc, 0xb3, 0xd2, 0x14, + 0xb2, 0xae, 0xbd, 0x8c, 0xd1, 0x39, 0xd7, 0xe0, 0xf1, 0xde, 0x06, 0x17, 0x59, 0x37, 0x37, 0xfb, + 0x71, 0x18, 0xa4, 0x9f, 0xc0, 0xd9, 0xb3, 0x79, 0x22, 0x3d, 0xa0, 0xb7, 0x9a, 0x1b, 0x7b, 0xb6, + 0xfc, 0x22, 0x0c, 0x6e, 0xec, 0xb1, 0xda, 0xc7, 0x5d, 0x90, 0xb6, 0x0c, 0x83, 0xaf, 0xc9, 0x2c, + 0x17, 0x4a, 0x11, 0x00, 0x5d, 0x82, 0xc4, 0x7e, 0x3f, 0xe6, 0xed, 0xf7, 0xbd, 0x82, 0x45, 0xbc, + 0xaf, 0x82, 0xc5, 0xe9, 0xff, 0x20, 0xc1, 0x90, 0x2f, 0x3e, 0xa0, 0xc7, 0xe1, 0x68, 0x71, 0x69, + 0x75, 0xfe, 0x72, 0x65, 0xb1, 0x54, 0xb9, 0xb8, 0x34, 0xb7, 0xe0, 0xdd, 0x25, 0xc9, 0x1f, 0xbb, + 0x7e, 0x63, 0x1a, 0xf9, 0x70, 0x37, 0xf5, 0x5d, 0xdd, 0xb8, 0xa6, 0xa3, 0x59, 0x98, 0x08, 0x92, + 0xcc, 0x15, 0xd7, 0xcb, 0x2b, 0x1b, 0x59, 0x29, 0x7f, 0xf4, 0xfa, 0x8d, 0xe9, 0x31, 0x1f, 0xc5, + 0xdc, 0x96, 0x8d, 0x75, 0xa7, 0x9d, 0x60, 0x7e, 0x75, 0x79, 0x79, 0x71, 0x23, 0x1b, 0x6b, 0x23, + 0xe0, 0x01, 0xfb, 0x21, 0x18, 0x0b, 0x12, 0xac, 0x2c, 0x2e, 0x65, 0xe3, 0x79, 0x74, 0xfd, 0xc6, + 0xf4, 0x88, 0x0f, 0x7b, 0x45, 0x6b, 0xe4, 0x53, 0x1f, 0xf8, 0xec, 0xe4, 0x91, 0x5f, 0xfa, 0xc5, + 0x49, 0x89, 0x68, 0x36, 0x1c, 0x88, 0x11, 0xe8, 0x11, 0x38, 0xbe, 0xbe, 0xb8, 0xb0, 0x52, 0x2e, + 0x55, 0x96, 0xd7, 0x17, 0x2a, 0xec, 0x23, 0x1a, 0xae, 0x76, 0xa3, 0xd7, 0x6f, 0x4c, 0x0f, 0x71, + 0x95, 0xba, 0x61, 0xaf, 0x29, 0xe5, 0x2b, 0xab, 0x1b, 0xe5, 0xac, 0xc4, 0xb0, 0xd7, 0x2c, 0x7c, + 0xd5, 0x70, 0xd8, 0x37, 0xb2, 0x1e, 0x83, 0x13, 0x1d, 0xb0, 0x5d, 0xc5, 0xc6, 0xae, 0xdf, 0x98, + 0x1e, 0x5e, 0xb3, 0x30, 0x9b, 0x3f, 0x94, 0x62, 0x06, 0x72, 0xed, 0x14, 0xab, 0x6b, 0xab, 0xeb, + 0x73, 0x4b, 0xd9, 0xe9, 0x7c, 0xf6, 0xfa, 0x8d, 0xe9, 0x8c, 0x08, 0x86, 0x04, 0xdf, 0xd3, 0xec, + 0x4e, 0xee, 0x78, 0xfe, 0xec, 0x51, 0xb8, 0x8f, 0x97, 0x3c, 0x6d, 0x47, 0xdd, 0xd5, 0xf4, 0xba, + 0x5b, 0x58, 0xe6, 0x6d, 0xbe, 0xf3, 0x39, 0xc6, 0x6b, 0xcb, 0x02, 0xda, 0xb3, 0xbc, 0x9c, 0xef, + 0xfe, 0xe6, 0x28, 0x1f, 0x51, 0x3d, 0x8d, 0xde, 0x3a, 0x75, 0x7f, 0x15, 0x91, 0x8f, 0x28, 0x90, + 0xe7, 0x7b, 0x6e, 0xee, 0xe4, 0x0f, 0x4a, 0x30, 0x72, 0x49, 0xb3, 0x1d, 0xc3, 0xd2, 0xaa, 0x6a, + 0x83, 0xde, 0x20, 0x39, 0xd7, 0x6f, 0x6c, 0x0d, 0x4d, 0xf5, 0x67, 0x61, 0xe0, 0xaa, 0xda, 0x60, + 0x41, 0x2d, 0x4e, 0xbf, 0x78, 0xd1, 0xd9, 0x7c, 0x5e, 0x68, 0x13, 0x0c, 0x18, 0x99, 0xfc, 0x2b, + 0x31, 0x18, 0xa5, 0x93, 0xc1, 0x66, 0x9f, 0x38, 0x22, 0x7b, 0xac, 0x22, 0x24, 0x2c, 0xd5, 0xe1, + 0x45, 0xc1, 0xe2, 0x0c, 0x2f, 0x74, 0x3f, 0x10, 0x5d, 0xbc, 0x9e, 0x29, 0xe1, 0xaa, 0x42, 0x69, + 0xd1, 0x3b, 0x20, 0xd5, 0x54, 0xf7, 0x2a, 0x94, 0x0f, 0xdb, 0xb9, 0xcc, 0x1d, 0x8c, 0xcf, 0xad, + 0x9b, 0x53, 0xa3, 0xfb, 0x6a, 0xb3, 0x51, 0x90, 0x05, 0x1f, 0x59, 0x19, 0x6c, 0xaa, 0x7b, 0x44, + 0x44, 0x64, 0xc2, 0x28, 0x81, 0x56, 0x77, 0x54, 0xbd, 0x8e, 0x59, 0x27, 0xb4, 0xc4, 0x59, 0xbc, + 0x74, 0xe0, 0x4e, 0x8e, 0x79, 0x9d, 0xf8, 0xd8, 0xc9, 0xca, 0x70, 0x53, 0xdd, 0x9b, 0xa7, 0x00, + 0xd2, 0x63, 0x21, 0xf5, 0xb1, 0x4f, 0x4f, 0x1d, 0xa1, 0x2f, 0x0f, 0xbe, 0x29, 0x01, 0x78, 0x16, + 0x43, 0xef, 0x80, 0x6c, 0xd5, 0x6d, 0x51, 0x5a, 0x9b, 0x8f, 0xe1, 0x83, 0xdd, 0xc6, 0x22, 0x64, + 0x6f, 0xb6, 0x36, 0x7f, 0xe3, 0xe6, 0x94, 0xa4, 0x8c, 0x56, 0x43, 0x43, 0xf1, 0x76, 0x18, 0x6a, + 0x99, 0x35, 0xd5, 0xc1, 0x15, 0xba, 0x8f, 0x8b, 0x45, 0xae, 0xf3, 0x93, 0x84, 0xd7, 0xad, 0x9b, + 0x53, 0x88, 0xa9, 0xe5, 0x23, 0x96, 0xe9, 0xea, 0x0f, 0x0c, 0x42, 0x08, 0x7c, 0x3a, 0x7d, 0x4d, + 0x82, 0xa1, 0x92, 0xef, 0x24, 0x57, 0x0e, 0x06, 0x9b, 0x86, 0xae, 0xed, 0x72, 0x7f, 0x4c, 0x2b, + 0xa2, 0x89, 0xf2, 0x90, 0x62, 0x97, 0xea, 0x9c, 0x7d, 0x51, 0xea, 0x14, 0x6d, 0x42, 0x75, 0x0d, + 0x6f, 0xd9, 0x9a, 0x18, 0x0d, 0x45, 0x34, 0xd1, 0x45, 0xc8, 0xda, 0xb8, 0xda, 0xb2, 0x34, 0x67, + 0xbf, 0x52, 0x35, 0x74, 0x47, 0xad, 0x3a, 0xec, 0x7a, 0x56, 0xf1, 0xae, 0x5b, 0x37, 0xa7, 0x8e, + 0x33, 0x59, 0xc3, 0x18, 0xb2, 0x32, 0x2a, 0x40, 0xf3, 0x0c, 0x42, 0x7a, 0xa8, 0x61, 0x47, 0xd5, + 0x1a, 0x76, 0x8e, 0xbd, 0x07, 0x13, 0x4d, 0x9f, 0x2e, 0x5f, 0x18, 0xf4, 0x17, 0xb6, 0x2e, 0x42, + 0xd6, 0x30, 0xb1, 0x15, 0x48, 0x44, 0xa5, 0x70, 0xcf, 0x61, 0x0c, 0x59, 0x19, 0x15, 0x20, 0x91, + 0xa4, 0x3a, 0x64, 0x98, 0xc5, 0x46, 0xd1, 0x6c, 0x6d, 0x79, 0xf5, 0xb0, 0x89, 0xb6, 0xd1, 0x98, + 0xd3, 0xf7, 0x8b, 0x4f, 0x78, 0xdc, 0xc3, 0x74, 0xf2, 0xd7, 0xbf, 0xf4, 0xe8, 0x04, 0x77, 0x0d, + 0xaf, 0x3e, 0x75, 0x19, 0xef, 0x93, 0xe1, 0xe7, 0xa8, 0x6b, 0x14, 0x93, 0xa4, 0x9d, 0x2f, 0xaa, + 0x5a, 0x43, 0x5c, 0x33, 0x56, 0x78, 0x0b, 0x15, 0x60, 0xc0, 0x76, 0x54, 0xa7, 0x65, 0xf3, 0x8f, + 0x7a, 0xc9, 0xdd, 0x5c, 0xad, 0x68, 0xe8, 0xb5, 0x75, 0x8a, 0xa9, 0x70, 0x0a, 0x74, 0x11, 0x06, + 0x1c, 0x63, 0x17, 0xeb, 0xdc, 0x84, 0x07, 0x9a, 0xdf, 0xf4, 0xb5, 0x1c, 0xa3, 0x26, 0x16, 0xa9, + 0xe1, 0x06, 0xae, 0xb3, 0xb4, 0x6a, 0x47, 0x25, 0xbb, 0x0f, 0xfa, 0x6d, 0xaf, 0xe2, 0xe2, 0x81, + 0x27, 0x21, 0xb7, 0x54, 0x98, 0x9f, 0xac, 0x8c, 0xba, 0xa0, 0x75, 0x0a, 0x41, 0x97, 0x03, 0x47, + 0x0e, 0xf9, 0x07, 0xf0, 0xee, 0xed, 0xa6, 0xbe, 0xcf, 0xa7, 0x45, 0x7d, 0xc2, 0x7f, 0x60, 0xf1, + 0x22, 0x64, 0x5b, 0xfa, 0x96, 0xa1, 0xd3, 0xbb, 0x80, 0x3c, 0xbf, 0x27, 0xfb, 0xbb, 0xb8, 0xdf, + 0x39, 0xc2, 0x18, 0xb2, 0x32, 0xea, 0x82, 0x2e, 0xb1, 0x5d, 0x40, 0x0d, 0x46, 0x3c, 0x2c, 0x3a, + 0x51, 0xd3, 0x91, 0x13, 0xf5, 0x1e, 0x3e, 0x51, 0x8f, 0x86, 0x7b, 0xf1, 0xe6, 0xea, 0xb0, 0x0b, + 0x24, 0x64, 0xe8, 0x12, 0x80, 0x17, 0x1e, 0x68, 0x9d, 0x62, 0xa8, 0xfb, 0xc0, 0x7b, 0x31, 0x46, + 0xec, 0xf7, 0x3c, 0x5a, 0xf4, 0x2e, 0x18, 0x6f, 0x6a, 0x7a, 0xc5, 0xc6, 0x8d, 0xed, 0x0a, 0x37, + 0x30, 0x61, 0x49, 0xbf, 0xe5, 0x52, 0x5c, 0x3a, 0x98, 0x3f, 0xdc, 0xba, 0x39, 0x95, 0xe7, 0x21, + 0xb4, 0x9d, 0xa5, 0xac, 0x8c, 0x35, 0x35, 0x7d, 0x1d, 0x37, 0xb6, 0x4b, 0x2e, 0xac, 0x90, 0xf9, + 0xc0, 0xa7, 0xa7, 0x8e, 0xf0, 0xe9, 0x7a, 0x44, 0x3e, 0x47, 0x6b, 0xe7, 0x7c, 0x9a, 0x61, 0x9b, + 0xec, 0x49, 0x54, 0xd1, 0xa0, 0x15, 0x8d, 0xb4, 0xe2, 0x01, 0xd8, 0x34, 0x7f, 0xe5, 0x3f, 0x4d, + 0x4b, 0xf2, 0x17, 0x24, 0x18, 0x28, 0x5d, 0x59, 0x53, 0x35, 0x0b, 0x2d, 0xc2, 0x98, 0xe7, 0x39, + 0xc1, 0x49, 0x7e, 0xf2, 0xd6, 0xcd, 0xa9, 0x5c, 0xd8, 0xb9, 0xdc, 0x59, 0xee, 0x39, 0xb0, 0x98, + 0xe6, 0x8b, 0xdd, 0x36, 0xae, 0x01, 0x56, 0x6d, 0x28, 0x72, 0xfb, 0xb6, 0x36, 0xa4, 0x66, 0x19, + 0x06, 0x99, 0xb4, 0x36, 0x2a, 0x40, 0xd2, 0x24, 0x3f, 0xf8, 0x8b, 0x81, 0xc9, 0xae, 0xce, 0x4b, + 0xf1, 0xdd, 0x42, 0x26, 0x21, 0x91, 0x3f, 0x12, 0x03, 0x28, 0x5d, 0xb9, 0xb2, 0x61, 0x69, 0x66, + 0x03, 0x3b, 0xb7, 0x53, 0xf3, 0x0d, 0x38, 0xea, 0xdb, 0x25, 0x59, 0xd5, 0x90, 0xf6, 0xd3, 0xb7, + 0x6e, 0x4e, 0x9d, 0x0c, 0x6b, 0xef, 0x43, 0x93, 0x95, 0x71, 0x6f, 0xbf, 0x64, 0x55, 0x3b, 0x72, + 0xad, 0xd9, 0x8e, 0xcb, 0x35, 0xde, 0x9d, 0xab, 0x0f, 0xcd, 0xcf, 0xb5, 0x64, 0x3b, 0x9d, 0x4d, + 0xbb, 0x0e, 0x43, 0x9e, 0x49, 0x6c, 0x54, 0x82, 0x94, 0xc3, 0x7f, 0x73, 0x0b, 0xcb, 0xdd, 0x2d, + 0x2c, 0xc8, 0xb8, 0x95, 0x5d, 0x4a, 0xf9, 0x2f, 0x24, 0x00, 0xcf, 0x67, 0x7f, 0x3c, 0x5d, 0x8c, + 0x84, 0x72, 0x1e, 0x78, 0xe3, 0x87, 0x4a, 0xd5, 0x38, 0x75, 0xc8, 0x9e, 0x3f, 0x1d, 0x83, 0xf1, + 0x4d, 0x11, 0x79, 0x7e, 0xec, 0x6d, 0xb0, 0x06, 0x83, 0x58, 0x77, 0x2c, 0x8d, 0x1a, 0x81, 0x8c, + 0xf6, 0x63, 0xdd, 0x46, 0xbb, 0x83, 0x4e, 0xf4, 0x63, 0x36, 0xa2, 0xe8, 0xce, 0xd9, 0x84, 0xac, + 0xf1, 0xa1, 0x38, 0xe4, 0xba, 0x51, 0xa2, 0x79, 0x18, 0xad, 0x5a, 0x98, 0x02, 0x2a, 0xfe, 0xca, + 0x5f, 0x31, 0xef, 0x65, 0x96, 0x21, 0x04, 0x59, 0x19, 0x11, 0x10, 0xbe, 0x7a, 0xd4, 0x81, 0xa4, + 0x7d, 0xc4, 0xed, 0x08, 0x56, 0x9f, 0x79, 0x9e, 0xcc, 0x97, 0x0f, 0xd1, 0x49, 0x90, 0x01, 0x5b, + 0x3f, 0x46, 0x3c, 0x28, 0x5d, 0x40, 0x5e, 0x82, 0x51, 0x4d, 0xd7, 0x1c, 0x4d, 0x6d, 0x54, 0xb6, + 0xd4, 0x86, 0xaa, 0x57, 0x0f, 0x93, 0x35, 0xb3, 0x90, 0xcf, 0xbb, 0x0d, 0xb1, 0x93, 0x95, 0x11, + 0x0e, 0x29, 0x32, 0x00, 0xba, 0x04, 0x83, 0xa2, 0xab, 0xc4, 0xa1, 0xb2, 0x0d, 0x41, 0xee, 0x4b, + 0xf0, 0x7e, 0x26, 0x0e, 0x63, 0x0a, 0xae, 0xfd, 0xff, 0xa1, 0x38, 0xd8, 0x50, 0x2c, 0x03, 0xb0, + 0xe9, 0x4e, 0x02, 0xec, 0x21, 0x46, 0x83, 0x04, 0x8c, 0x34, 0xe3, 0x50, 0xb2, 0x1d, 0xdf, 0x78, + 0xdc, 0x8c, 0x41, 0xc6, 0x3f, 0x1e, 0x7f, 0x45, 0x57, 0x25, 0xb4, 0xe8, 0x45, 0xa2, 0x04, 0xff, + 0x06, 0x68, 0x97, 0x48, 0xd4, 0xe6, 0xbd, 0xbd, 0x43, 0xd0, 0xff, 0x8c, 0xc1, 0xc0, 0x9a, 0x6a, + 0xa9, 0x4d, 0x1b, 0x55, 0xdb, 0x32, 0x4d, 0x51, 0x7e, 0x6c, 0xfb, 0x80, 0x33, 0xaf, 0x76, 0x44, + 0x24, 0x9a, 0x1f, 0xeb, 0x90, 0x68, 0xfe, 0x04, 0x8c, 0x90, 0xed, 0xb0, 0xef, 0x08, 0x03, 0xb1, + 0xf6, 0x70, 0xf1, 0x84, 0xc7, 0x25, 0xf8, 0x9c, 0xed, 0x96, 0xaf, 0xf8, 0xcf, 0x30, 0x0c, 0x11, + 0x0c, 0x2f, 0x30, 0x13, 0xf2, 0x63, 0xde, 0xb6, 0xd4, 0xf7, 0x50, 0x56, 0xa0, 0xa9, 0xee, 0x95, + 0x59, 0x03, 0x2d, 0x01, 0xda, 0x71, 0x2b, 0x23, 0x15, 0xcf, 0x9c, 0x84, 0xfe, 0xee, 0x5b, 0x37, + 0xa7, 0x4e, 0x30, 0xfa, 0x76, 0x1c, 0x59, 0x19, 0xf3, 0x80, 0x82, 0xdb, 0x93, 0x00, 0x44, 0xaf, + 0x0a, 0x3b, 0x2d, 0xc8, 0xb6, 0x3b, 0x47, 0x6f, 0xdd, 0x9c, 0x1a, 0x63, 0x5c, 0xbc, 0x67, 0xb2, + 0x92, 0x26, 0x8d, 0x12, 0xf9, 0xed, 0xf3, 0xec, 0xcf, 0x4a, 0x80, 0xbc, 0x90, 0xaf, 0x60, 0xdb, + 0x24, 0xfb, 0x33, 0x92, 0x88, 0xfb, 0xb2, 0x66, 0xa9, 0x77, 0x22, 0xee, 0xd1, 0x8b, 0x44, 0xdc, + 0x37, 0x53, 0x9e, 0xf6, 0xc2, 0x63, 0x8c, 0x8f, 0x63, 0x87, 0xa3, 0x95, 0x33, 0xf3, 0x86, 0x26, + 0xa8, 0xdb, 0xe2, 0xe1, 0x11, 0xf9, 0xdf, 0x48, 0x70, 0xa2, 0xcd, 0xa3, 0x5c, 0x61, 0xff, 0x1a, + 0x20, 0xcb, 0xf7, 0x90, 0x7f, 0xcf, 0x8d, 0x09, 0x7d, 0x60, 0x07, 0x1d, 0xb3, 0xda, 0xe2, 0xee, + 0xed, 0x8b, 0xf0, 0xec, 0x6c, 0xe6, 0xbf, 0x90, 0x60, 0xc2, 0xdf, 0xbd, 0xab, 0xc8, 0x0a, 0x64, + 0xfc, 0xbd, 0x73, 0x15, 0xee, 0xeb, 0x47, 0x05, 0x2e, 0x7d, 0x80, 0x1e, 0x3d, 0xef, 0x4d, 0x57, + 0x56, 0x3b, 0x7b, 0xbc, 0x6f, 0x6b, 0x08, 0x99, 0xc2, 0xd3, 0x36, 0x41, 0xc7, 0xe3, 0xff, 0x48, + 0x90, 0x58, 0x33, 0x8c, 0x06, 0x32, 0x60, 0x4c, 0x37, 0x9c, 0x0a, 0xf1, 0x2c, 0x5c, 0xab, 0xf0, + 0x4d, 0x37, 0x8b, 0x83, 0xf3, 0x07, 0x33, 0xd2, 0x77, 0x6e, 0x4e, 0xb5, 0xb3, 0x52, 0x46, 0x75, + 0xc3, 0x29, 0x52, 0xc8, 0x06, 0xdb, 0x92, 0xbf, 0x0b, 0x86, 0x83, 0x9d, 0xb1, 0x28, 0xf9, 0xc2, + 0x81, 0x3b, 0x0b, 0xb2, 0xb9, 0x75, 0x73, 0x6a, 0xc2, 0x9b, 0x31, 0x2e, 0x58, 0x56, 0x32, 0x5b, + 0xbe, 0xde, 0xd9, 0xf1, 0xae, 0xef, 0x7d, 0x7a, 0x4a, 0x3a, 0xfd, 0x65, 0x09, 0xc0, 0xab, 0x3c, + 0xa0, 0x47, 0xe0, 0x78, 0x71, 0x75, 0xa5, 0x54, 0x59, 0xdf, 0x98, 0xdb, 0xd8, 0x5c, 0xaf, 0x6c, + 0xae, 0xac, 0xaf, 0x95, 0xe7, 0x17, 0x2f, 0x2e, 0x96, 0x4b, 0x5e, 0x79, 0xdc, 0x36, 0x71, 0x55, + 0xdb, 0xd6, 0x70, 0x0d, 0x3d, 0x00, 0x13, 0x41, 0x6c, 0xd2, 0x2a, 0x97, 0xb2, 0x52, 0x3e, 0x73, + 0xfd, 0xc6, 0x74, 0x8a, 0xe5, 0x62, 0xb8, 0x86, 0x4e, 0xc1, 0xd1, 0x76, 0xbc, 0xc5, 0x95, 0x85, + 0x6c, 0x2c, 0x3f, 0x7c, 0xfd, 0xc6, 0x74, 0xda, 0x4d, 0xda, 0x90, 0x0c, 0xc8, 0x8f, 0xc9, 0xf9, + 0xc5, 0xf3, 0x70, 0xfd, 0xc6, 0xf4, 0x00, 0x33, 0x60, 0x3e, 0xf1, 0x81, 0xcf, 0x4e, 0x1e, 0x29, + 0x5e, 0xec, 0x5a, 0x00, 0x7f, 0xa4, 0xa7, 0xed, 0xf6, 0xdc, 0xa2, 0x76, 0xb0, 0xea, 0x7d, 0xfd, + 0x38, 0x4c, 0x75, 0xa9, 0x7a, 0x3b, 0x7b, 0x11, 0x05, 0xef, 0x1e, 0xa5, 0xed, 0xc8, 0xd2, 0x75, + 0x97, 0x62, 0xf9, 0xe1, 0x0b, 0xda, 0x7d, 0xd5, 0xee, 0xe5, 0x7f, 0x9b, 0x00, 0xb4, 0x6c, 0xd7, + 0xe7, 0x49, 0x52, 0xe5, 0x3b, 0xa2, 0x15, 0xaa, 0xd9, 0x48, 0x3f, 0x54, 0xcd, 0x66, 0x39, 0x50, + 0x05, 0x89, 0x1d, 0xac, 0xd2, 0xda, 0x77, 0x29, 0x24, 0xfe, 0x23, 0x29, 0x85, 0x74, 0xce, 0x94, + 0x12, 0xb7, 0x6f, 0x4b, 0x95, 0x3c, 0xec, 0xb6, 0x92, 0x57, 0x38, 0x07, 0x7a, 0x54, 0x38, 0x73, + 0x5d, 0xcb, 0x98, 0x9c, 0x1a, 0x9d, 0x15, 0x57, 0x6e, 0x06, 0xfb, 0x5b, 0xdb, 0xf8, 0x9d, 0x9c, + 0xd4, 0x07, 0xc4, 0xca, 0x76, 0x12, 0xf2, 0xed, 0xee, 0x24, 0x82, 0xaf, 0xfc, 0xd1, 0x38, 0x64, + 0x97, 0xed, 0x7a, 0xb9, 0xa6, 0x39, 0x77, 0xc8, 0xd7, 0x9e, 0xed, 0xbe, 0x4d, 0x45, 0xb7, 0x6e, + 0x4e, 0x8d, 0x30, 0x9b, 0xf6, 0xb0, 0x64, 0x13, 0x46, 0x43, 0x2f, 0x07, 0xb8, 0x67, 0x95, 0x0e, + 0xf3, 0x8e, 0x22, 0xc4, 0x4a, 0xa6, 0xbb, 0x0a, 0x9f, 0x7f, 0xa3, 0xbd, 0xce, 0xce, 0xcc, 0x1c, + 0xea, 0xd2, 0x9d, 0xac, 0xe9, 0x79, 0x63, 0x96, 0x87, 0x5c, 0x78, 0x50, 0xdc, 0x11, 0xfb, 0x63, + 0x09, 0x86, 0x96, 0x6d, 0xb1, 0x8b, 0xc6, 0x3f, 0xa6, 0x15, 0x85, 0xa7, 0xdc, 0x8b, 0x24, 0xf1, + 0xfe, 0xfc, 0x56, 0x5c, 0x2e, 0xf1, 0x8c, 0x70, 0x14, 0xc6, 0x7d, 0x7a, 0xba, 0xfa, 0xff, 0x4e, + 0x8c, 0xc6, 0xc7, 0x22, 0xae, 0x6b, 0xba, 0x9b, 0x54, 0xe0, 0xbf, 0xaa, 0xfb, 0x25, 0xcf, 0xce, + 0x89, 0xc3, 0xda, 0x79, 0x97, 0x06, 0x88, 0x90, 0x3d, 0xdd, 0x8c, 0x71, 0xb9, 0x7d, 0x37, 0x2f, + 0x1d, 0xe0, 0xa0, 0x4c, 0x68, 0xcf, 0x2e, 0xbf, 0x2e, 0xc1, 0xf0, 0xb2, 0x5d, 0xdf, 0xd4, 0x6b, + 0xff, 0xcf, 0xfb, 0xef, 0x36, 0x1c, 0x0d, 0x68, 0x7a, 0x87, 0x4c, 0x7a, 0xe6, 0xd5, 0x04, 0xc4, + 0x97, 0xed, 0x3a, 0x7a, 0x09, 0x46, 0xc3, 0x49, 0xc3, 0xe9, 0x6e, 0x31, 0xbb, 0x7d, 0x45, 0xc8, + 0x9f, 0xe9, 0x1f, 0xd7, 0xd5, 0x64, 0x17, 0x86, 0x83, 0x2b, 0xc7, 0xa9, 0x1e, 0x4c, 0x02, 0x98, + 0xf9, 0xc7, 0xfa, 0xc5, 0x74, 0x3b, 0x7b, 0x07, 0xa4, 0xdc, 0xa0, 0x77, 0x6f, 0x0f, 0x6a, 0x81, + 0x94, 0x7f, 0xb8, 0x0f, 0x24, 0x97, 0xfb, 0x4b, 0x30, 0x1a, 0x0e, 0x29, 0xbd, 0xac, 0x17, 0xc2, + 0xed, 0x69, 0xbd, 0x6e, 0x53, 0x6b, 0x0b, 0xc0, 0x37, 0x0f, 0xee, 0xef, 0xc1, 0xc1, 0x43, 0xcb, + 0x3f, 0xda, 0x17, 0x9a, 0xbb, 0xb9, 0xba, 0xdd, 0xc9, 0xf8, 0xbf, 0x8a, 0xc1, 0x69, 0x7f, 0x9a, + 0xfb, 0x52, 0x0b, 0x5b, 0xfb, 0x6e, 0x26, 0x6b, 0xaa, 0x75, 0x4d, 0xf7, 0xdf, 0xae, 0x3b, 0xe1, + 0x9f, 0x35, 0x14, 0x57, 0xc8, 0x2b, 0xeb, 0x30, 0xb4, 0xa6, 0xd6, 0xb1, 0x82, 0x5f, 0x6a, 0x61, + 0xdb, 0xe9, 0x70, 0xbb, 0xeb, 0x18, 0x0c, 0x18, 0xdb, 0xdb, 0xe2, 0xac, 0x59, 0x42, 0xe1, 0x2d, + 0x34, 0x01, 0xc9, 0x86, 0xd6, 0xd4, 0xd8, 0xcc, 0x4c, 0x28, 0xac, 0x81, 0xa6, 0x60, 0xa8, 0x4a, + 0x26, 0x60, 0x85, 0x9d, 0x9b, 0x4f, 0x88, 0x2f, 0x2f, 0xb5, 0x74, 0x67, 0x83, 0x40, 0xe4, 0x67, + 0x21, 0xc3, 0xfa, 0xe3, 0xd6, 0x3f, 0x01, 0x29, 0x7a, 0xce, 0xd9, 0xeb, 0x75, 0x90, 0xb4, 0x2f, + 0xb3, 0x9b, 0x60, 0x8c, 0x0b, 0xeb, 0x98, 0x35, 0x8a, 0xc5, 0xae, 0xa6, 0x3c, 0x15, 0x9d, 0x11, + 0x30, 0x43, 0xb9, 0x66, 0xfc, 0xad, 0x24, 0x1c, 0xe5, 0xfb, 0x0f, 0xd5, 0xd4, 0x66, 0x77, 0x1c, + 0x47, 0xdc, 0x56, 0x06, 0x1e, 0x02, 0x54, 0x53, 0x93, 0xf7, 0x21, 0x71, 0xc9, 0x71, 0x4c, 0x74, + 0x1a, 0x92, 0x56, 0xab, 0x81, 0xc5, 0xab, 0x18, 0x37, 0x95, 0x54, 0x4d, 0x6d, 0x86, 0x20, 0x28, + 0xad, 0x06, 0x56, 0x18, 0x0a, 0x2a, 0xc3, 0xd4, 0x76, 0xab, 0xd1, 0xd8, 0xaf, 0xd4, 0x30, 0xfd, + 0x67, 0x78, 0xee, 0xff, 0x9d, 0xc1, 0x7b, 0xa6, 0xaa, 0xbb, 0xf9, 0x7e, 0x4a, 0x39, 0x49, 0xd1, + 0x4a, 0x14, 0x4b, 0xfc, 0xcf, 0x99, 0xb2, 0xc0, 0x91, 0x7f, 0x3f, 0x06, 0x29, 0xc1, 0x9a, 0x5e, + 0xcd, 0xc2, 0x0d, 0x5c, 0x75, 0x0c, 0x71, 0x94, 0xc1, 0x6d, 0x23, 0x04, 0xf1, 0x3a, 0x1f, 0xa2, + 0xf4, 0xa5, 0x23, 0x0a, 0x69, 0x10, 0x98, 0x7b, 0x61, 0x8e, 0xc0, 0xcc, 0x16, 0x19, 0xb5, 0x84, + 0x69, 0x88, 0x9a, 0xe9, 0xa5, 0x23, 0x0a, 0x6d, 0xa1, 0x1c, 0x0c, 0x10, 0x97, 0x75, 0xd8, 0x17, + 0x81, 0x09, 0x9c, 0xb7, 0xd1, 0x31, 0x48, 0x9a, 0xaa, 0x53, 0x65, 0x67, 0xdd, 0xc9, 0x03, 0xd6, + 0x24, 0x81, 0x99, 0x7d, 0x89, 0x21, 0xfc, 0x9f, 0xa6, 0x88, 0x31, 0xd8, 0x27, 0x2f, 0x89, 0xdc, + 0x6b, 0xaa, 0xe3, 0x60, 0x4b, 0x27, 0x0c, 0x19, 0x3a, 0x42, 0x90, 0xd8, 0x32, 0x6a, 0xfb, 0xfc, + 0xbf, 0x5f, 0xd1, 0xdf, 0xfc, 0xff, 0xf2, 0x50, 0x7f, 0xa8, 0xd0, 0x87, 0xec, 0x9f, 0xfe, 0x65, + 0x04, 0xb0, 0x48, 0x90, 0xca, 0x30, 0xae, 0xd6, 0x6a, 0x1a, 0xf1, 0x6a, 0xb5, 0x51, 0xd9, 0xd2, + 0xe8, 0x7e, 0xd8, 0xa6, 0xff, 0xd2, 0xb1, 0xdb, 0x58, 0x20, 0x8f, 0xa0, 0xc8, 0xf1, 0x8b, 0x69, + 0x18, 0x34, 0x99, 0x50, 0xf2, 0x05, 0x18, 0x6b, 0x93, 0x94, 0xc8, 0xb7, 0xab, 0xe9, 0x35, 0x71, + 0x8b, 0x90, 0xfc, 0x26, 0x30, 0xfa, 0xd9, 0x5a, 0x76, 0x48, 0x84, 0xfe, 0x2e, 0xbe, 0xa7, 0xfb, + 0x1d, 0xd3, 0x11, 0xdf, 0x1d, 0x53, 0xd5, 0xd4, 0x8a, 0x69, 0xca, 0x9f, 0x5f, 0x2d, 0x9d, 0xe3, + 0x0f, 0xd8, 0xb5, 0xd2, 0x19, 0xc3, 0xaa, 0xcf, 0xd6, 0xb1, 0x2e, 0xf6, 0xb7, 0xe4, 0x91, 0x6a, + 0x6a, 0x36, 0x75, 0x47, 0xef, 0x33, 0xba, 0xf6, 0x05, 0xdf, 0x6f, 0x7a, 0xe3, 0x34, 0xb1, 0x30, + 0xb7, 0xb6, 0xe8, 0xfa, 0xf1, 0x6f, 0xc6, 0xe0, 0xa4, 0xcf, 0x8f, 0x7d, 0xc8, 0xed, 0xee, 0x9c, + 0xef, 0xec, 0xf1, 0x7d, 0x5c, 0x42, 0xbf, 0x0c, 0x09, 0x82, 0x8f, 0x22, 0xfe, 0x6b, 0x4e, 0xee, + 0x57, 0xbf, 0xfe, 0xcf, 0xe5, 0xe0, 0x66, 0x2b, 0x30, 0x2a, 0x94, 0x49, 0xf1, 0xfd, 0xfd, 0xdb, + 0x2f, 0xeb, 0x7d, 0x41, 0xd8, 0xbe, 0x7d, 0x66, 0x0c, 0xdb, 0xf0, 0xdb, 0x67, 0x41, 0xee, 0x52, + 0x19, 0x60, 0x11, 0xb3, 0x77, 0x89, 0xe3, 0x00, 0xe1, 0xb8, 0xdb, 0xc5, 0xbc, 0x5e, 0x23, 0xd8, + 0x67, 0xd5, 0x62, 0x0f, 0x8e, 0x3d, 0x4f, 0xfa, 0xf6, 0xea, 0xd7, 0x22, 0xb0, 0x1f, 0x73, 0x8f, + 0xd9, 0x48, 0xfc, 0x3f, 0x6a, 0x8a, 0x23, 0x34, 0xe0, 0xc9, 0xc7, 0x6b, 0x10, 0x0f, 0xcc, 0x74, + 0x5d, 0x2f, 0x66, 0x7c, 0x8b, 0x85, 0xe2, 0xa3, 0x94, 0x7f, 0x59, 0x82, 0xe3, 0x6d, 0x5d, 0xf3, + 0x18, 0xbf, 0xd0, 0xe1, 0x0e, 0x61, 0xdf, 0xa7, 0xfb, 0xfc, 0xf7, 0x09, 0x17, 0x3a, 0x08, 0xfb, + 0x60, 0xa4, 0xb0, 0x4c, 0x8a, 0x80, 0xb4, 0xcf, 0xc0, 0xd1, 0xa0, 0xb0, 0xc2, 0x4c, 0xf7, 0xc3, + 0x48, 0x30, 0x31, 0xe5, 0xe6, 0x1a, 0x0e, 0xa4, 0xa6, 0x72, 0x25, 0x6c, 0x67, 0x57, 0xd7, 0x32, + 0xa4, 0x5d, 0x54, 0x9e, 0x4f, 0xf6, 0xad, 0xaa, 0x47, 0x29, 0x7f, 0x44, 0x82, 0xe9, 0x60, 0x0f, + 0xde, 0x0e, 0xd5, 0x3e, 0x98, 0xb0, 0xb7, 0x6d, 0x88, 0x5f, 0x97, 0xe0, 0x9e, 0x1e, 0x32, 0x71, + 0x03, 0xbc, 0x0c, 0x13, 0xbe, 0x12, 0xbd, 0x08, 0xe1, 0x62, 0xd8, 0x4f, 0x47, 0xbf, 0x5b, 0x70, + 0x93, 0xa6, 0xbb, 0x88, 0x51, 0x3e, 0xff, 0x87, 0x53, 0xe3, 0xed, 0xcf, 0x6c, 0x65, 0xbc, 0xbd, + 0xac, 0x7e, 0x1b, 0xfd, 0xe3, 0x55, 0x09, 0x1e, 0x0a, 0xaa, 0xda, 0xe1, 0xbd, 0xf9, 0x1b, 0x35, + 0x0e, 0xff, 0x51, 0x82, 0xd3, 0xfd, 0x08, 0xe7, 0xe6, 0xb7, 0xe3, 0xde, 0x8b, 0xb2, 0xf0, 0x78, + 0x3c, 0x7c, 0x80, 0x13, 0x06, 0xdc, 0x4b, 0x91, 0xcb, 0xed, 0x0e, 0x18, 0xde, 0xe4, 0x13, 0xcb, + 0x3f, 0xe4, 0xae, 0x91, 0x83, 0xbb, 0x4f, 0x61, 0xe4, 0xc0, 0xfe, 0xb3, 0xc3, 0x58, 0xc4, 0x3a, + 0x8c, 0x85, 0x6f, 0x7f, 0x78, 0x95, 0xc7, 0xad, 0x0e, 0x2f, 0xc7, 0xde, 0x0e, 0xe3, 0x1d, 0x5c, + 0x99, 0xcf, 0xea, 0x03, 0x78, 0xb2, 0x82, 0xda, 0x9d, 0x55, 0xde, 0x87, 0x29, 0xda, 0x6f, 0x07, + 0x43, 0xdf, 0x69, 0x95, 0x9b, 0x3c, 0xb6, 0x74, 0xec, 0x9a, 0xeb, 0xbe, 0x08, 0x03, 0x6c, 0x9c, + 0xb9, 0xba, 0x87, 0x70, 0x14, 0xce, 0x40, 0xfe, 0x84, 0x88, 0x65, 0x25, 0x21, 0x76, 0xe7, 0x39, + 0xd4, 0x8f, 0xae, 0xb7, 0x69, 0x0e, 0xf9, 0x8c, 0xf1, 0x4d, 0x11, 0xd5, 0x3a, 0x4b, 0xc7, 0xcd, + 0x51, 0xbd, 0x6d, 0x51, 0x8d, 0xd9, 0xe6, 0xce, 0x86, 0xaf, 0x5f, 0x14, 0xe1, 0xcb, 0xd5, 0x29, + 0x22, 0x7c, 0xbd, 0x31, 0xa6, 0x77, 0x03, 0x59, 0x84, 0x98, 0x7f, 0x19, 0x03, 0xd9, 0xf7, 0x24, + 0x38, 0x41, 0x75, 0xf3, 0xbf, 0x71, 0x3d, 0xa8, 0xc9, 0x1f, 0x01, 0x64, 0x5b, 0xd5, 0x4a, 0xc7, + 0xd9, 0x9d, 0xb5, 0xad, 0xea, 0x95, 0xc0, 0xfa, 0xf2, 0x08, 0xa0, 0x9a, 0xed, 0x84, 0xb1, 0xd9, + 0xf1, 0xf5, 0x6c, 0xcd, 0x76, 0xae, 0xf4, 0x58, 0x8d, 0x12, 0xb7, 0x61, 0x38, 0xbf, 0x21, 0x41, + 0xbe, 0x93, 0xca, 0x7c, 0xf8, 0x34, 0x38, 0x16, 0x78, 0x7b, 0x1f, 0x1e, 0xc1, 0x47, 0xfa, 0x79, + 0x67, 0x1d, 0x9a, 0x46, 0x47, 0x2d, 0x7c, 0xa7, 0xf3, 0x80, 0xa9, 0xa0, 0x87, 0xb6, 0x67, 0xd6, + 0x6f, 0xd8, 0xf4, 0xf9, 0x52, 0x5b, 0x5c, 0xfd, 0x4b, 0x91, 0x7b, 0xef, 0xc1, 0x64, 0x17, 0xa9, + 0xef, 0xf4, 0xba, 0xb7, 0xd3, 0x75, 0x30, 0x6f, 0x77, 0xfa, 0xfe, 0x24, 0x9f, 0x09, 0xc1, 0xab, + 0x51, 0xbe, 0xbd, 0x58, 0xa7, 0xbb, 0xd5, 0xf2, 0x5b, 0xe1, 0xae, 0x8e, 0x54, 0x5c, 0xb6, 0x02, + 0x24, 0x76, 0x34, 0xdb, 0xe1, 0x62, 0x3d, 0xd0, 0x4d, 0xac, 0x10, 0x35, 0xa5, 0x91, 0x11, 0x64, + 0x29, 0xeb, 0x35, 0xc3, 0x68, 0x70, 0x31, 0xe4, 0xcb, 0x30, 0xe6, 0x83, 0xf1, 0x4e, 0xce, 0x41, + 0xc2, 0x34, 0xf8, 0x77, 0x81, 0x86, 0xce, 0x9c, 0xec, 0xd6, 0x09, 0xa1, 0xe1, 0x6a, 0x53, 0x7c, + 0x79, 0x02, 0x10, 0x63, 0x46, 0x0f, 0x77, 0x89, 0x2e, 0xd6, 0x61, 0x3c, 0x00, 0xe5, 0x9d, 0xbc, + 0x09, 0x06, 0x4c, 0x0a, 0x71, 0x2f, 0xc1, 0x76, 0xeb, 0x86, 0x62, 0xb9, 0x5f, 0x62, 0xa1, 0xad, + 0x33, 0xdf, 0x39, 0x0a, 0x49, 0xca, 0x15, 0x7d, 0x5c, 0x02, 0xf0, 0x1d, 0xd5, 0x9a, 0xe9, 0xc6, + 0xa6, 0xf3, 0x9e, 0x38, 0x3f, 0xdb, 0x37, 0x3e, 0xcf, 0xd9, 0x4e, 0xbf, 0xe7, 0xdf, 0x7d, 0xfb, + 0xa3, 0xb1, 0xfb, 0x90, 0x3c, 0xdb, 0x65, 0x37, 0xee, 0x9b, 0x2f, 0x9f, 0x0b, 0x7c, 0x94, 0xe6, + 0xd1, 0xfe, 0xba, 0x12, 0x92, 0xcd, 0xf4, 0x8b, 0xce, 0x05, 0xbb, 0x40, 0x05, 0x3b, 0x8b, 0x9e, + 0x88, 0x16, 0x6c, 0xf6, 0x9d, 0xc1, 0x49, 0xf3, 0x6e, 0xf4, 0xbb, 0x12, 0x4c, 0x74, 0xda, 0xd2, + 0xa1, 0xf3, 0xfd, 0x49, 0xd1, 0x9e, 0x52, 0xe4, 0x9f, 0x3e, 0x04, 0x25, 0x57, 0x65, 0x81, 0xaa, + 0x32, 0x87, 0x9e, 0x3d, 0x84, 0x2a, 0xb3, 0xbe, 0x75, 0x07, 0xfd, 0x6f, 0x09, 0xee, 0xee, 0xb9, + 0x43, 0x42, 0x73, 0xfd, 0x49, 0xd9, 0x23, 0x77, 0xca, 0x17, 0x7f, 0x18, 0x16, 0x5c, 0xe3, 0xe7, + 0xa9, 0xc6, 0x97, 0xd1, 0xe2, 0x61, 0x34, 0xf6, 0x32, 0x22, 0xbf, 0xee, 0xbf, 0x1d, 0x3c, 0xf2, + 0xdf, 0xdb, 0x9d, 0xda, 0x36, 0x1e, 0x11, 0x13, 0xa3, 0x3d, 0xa9, 0x95, 0xdf, 0x42, 0x55, 0x50, + 0xd0, 0xda, 0x0f, 0x39, 0x68, 0xb3, 0xef, 0x0c, 0x06, 0xfe, 0x77, 0xa3, 0xff, 0x25, 0x75, 0x3e, + 0xc1, 0xff, 0x54, 0x4f, 0x11, 0xbb, 0x6f, 0xaa, 0xf2, 0xe7, 0x0f, 0x4e, 0xc8, 0x95, 0x6c, 0x52, + 0x25, 0xeb, 0x08, 0xdf, 0x6e, 0x25, 0x3b, 0x0e, 0x22, 0xfa, 0x9a, 0x04, 0x13, 0x9d, 0xf6, 0x24, + 0x11, 0xd3, 0xb2, 0xc7, 0x26, 0x2b, 0x62, 0x5a, 0xf6, 0xda, 0x00, 0xc9, 0x6f, 0xa2, 0xca, 0x9f, + 0x43, 0x4f, 0x76, 0x53, 0xbe, 0xe7, 0x28, 0x92, 0xb9, 0xd8, 0x33, 0xc9, 0x8f, 0x98, 0x8b, 0xfd, + 0xec, 0x63, 0x22, 0xe6, 0x62, 0x5f, 0x7b, 0x8c, 0xe8, 0xb9, 0xe8, 0x6a, 0xd6, 0xe7, 0x30, 0xda, + 0xe8, 0x37, 0x25, 0x18, 0x0e, 0x64, 0xc4, 0xe8, 0xf1, 0x9e, 0x82, 0x76, 0xda, 0x30, 0x74, 0x7f, + 0xb1, 0xd9, 0x3d, 0xe1, 0x96, 0x17, 0xa9, 0x2e, 0xf3, 0x68, 0xee, 0x30, 0xba, 0x58, 0x01, 0x89, + 0xbf, 0x21, 0xc1, 0x78, 0x87, 0x2c, 0x33, 0x62, 0x16, 0x76, 0x4f, 0x9a, 0xf3, 0xe7, 0x0f, 0x4e, + 0xc8, 0xb5, 0xba, 0x48, 0xb5, 0xfa, 0x09, 0xf4, 0xcc, 0x61, 0xb4, 0xf2, 0xad, 0xcf, 0x37, 0xbd, + 0x03, 0xd1, 0xbe, 0x7e, 0xd0, 0xb9, 0x03, 0x0a, 0x26, 0x14, 0x7a, 0xea, 0xc0, 0x74, 0x5c, 0x9f, + 0x17, 0xa8, 0x3e, 0xcf, 0xa3, 0xd5, 0x1f, 0x4e, 0x9f, 0xf6, 0x65, 0xfd, 0x8b, 0xed, 0x57, 0xf3, + 0x7b, 0x7b, 0x51, 0xc7, 0x64, 0x35, 0xff, 0xc4, 0x81, 0x68, 0xb8, 0x52, 0xe7, 0xa9, 0x52, 0x67, + 0xd0, 0x63, 0xdd, 0x94, 0xf2, 0x9d, 0x7a, 0xd7, 0xf4, 0x6d, 0x63, 0xf6, 0x9d, 0x2c, 0x05, 0x7e, + 0x37, 0xfa, 0x29, 0x71, 0xe2, 0xf8, 0x54, 0xcf, 0x7e, 0x7d, 0x79, 0x6c, 0xfe, 0xa1, 0x3e, 0x30, + 0xb9, 0x5c, 0xf7, 0x51, 0xb9, 0x26, 0xd1, 0xc9, 0x6e, 0x72, 0x91, 0x5c, 0x16, 0x7d, 0x50, 0x72, + 0x2f, 0x29, 0x9c, 0xee, 0xcd, 0xdb, 0x9f, 0xec, 0x76, 0x3f, 0xe8, 0xd0, 0x21, 0x05, 0x96, 0x1f, + 0xa0, 0x92, 0x4c, 0xa3, 0xc9, 0xae, 0x92, 0xb0, 0xd4, 0xf7, 0x76, 0x9f, 0x1c, 0xf8, 0xd3, 0xc1, + 0xae, 0x1f, 0xaf, 0xa8, 0x63, 0x1d, 0xdb, 0x9a, 0x7d, 0xa8, 0x8f, 0x57, 0xf4, 0xf7, 0x7a, 0xea, + 0x77, 0x93, 0x90, 0x59, 0x60, 0xbd, 0xac, 0x3b, 0xaa, 0xf3, 0x43, 0x6e, 0x04, 0x90, 0xcd, 0xbf, + 0xc9, 0xc6, 0x3e, 0x15, 0xe9, 0x7d, 0xfc, 0x30, 0x73, 0xa0, 0x6b, 0xdb, 0xec, 0x90, 0x20, 0xbf, + 0x21, 0x1d, 0xe6, 0x27, 0xb3, 0xcf, 0xbb, 0xd1, 0xb3, 0x0b, 0xec, 0x23, 0x8f, 0xef, 0x93, 0xe0, + 0x28, 0xc5, 0xf2, 0xe6, 0x1b, 0xc5, 0x14, 0x77, 0xf6, 0xba, 0x7a, 0xcc, 0x92, 0xea, 0x2b, 0xc1, + 0xb0, 0xcf, 0x32, 0xde, 0xc7, 0xef, 0xb3, 0x9c, 0xf4, 0x75, 0x1e, 0x66, 0x2b, 0x2b, 0xe3, 0x8d, + 0x36, 0x4a, 0x3b, 0xb4, 0xaf, 0x4f, 0x1c, 0x7e, 0x5f, 0xff, 0x1c, 0x0c, 0xf9, 0x22, 0x7d, 0x2e, + 0x19, 0x71, 0xcd, 0x34, 0x5c, 0x44, 0xf3, 0x13, 0xa3, 0xf7, 0x4b, 0x70, 0xb4, 0xe3, 0x22, 0x48, + 0xff, 0x17, 0xed, 0x01, 0x8b, 0x74, 0x21, 0xe3, 0x74, 0xe4, 0x2b, 0x2b, 0x13, 0xad, 0x4e, 0xd9, + 0xc4, 0x1a, 0x0c, 0x07, 0x16, 0xb0, 0x9c, 0xf8, 0x8f, 0xd2, 0xfd, 0xdf, 0xb0, 0x08, 0x32, 0x40, + 0x79, 0x48, 0xe1, 0x3d, 0xd3, 0xb0, 0x1c, 0x5c, 0xa3, 0x47, 0x1e, 0x52, 0x8a, 0xdb, 0x96, 0x57, + 0x00, 0xb5, 0x0f, 0x6e, 0xf8, 0x3b, 0xa4, 0x69, 0xef, 0x3b, 0xa4, 0x13, 0x90, 0xf4, 0x7f, 0xa9, + 0x93, 0x35, 0xbc, 0x3a, 0xc5, 0xed, 0x9e, 0xf3, 0xff, 0x37, 0x00, 0x00, 0xff, 0xff, 0x43, 0x89, + 0xb3, 0x44, 0x22, 0x94, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) diff --git a/x/staking/types/tx.pb.go b/x/staking/types/tx.pb.go index 431e43a5b7..31084678dc 100644 --- a/x/staking/types/tx.pb.go +++ b/x/staking/types/tx.pb.go @@ -467,61 +467,61 @@ func init() { func init() { proto.RegisterFile("cosmos/staking/v1beta1/tx.proto", fileDescriptor_0926ef28816b35ab) } var fileDescriptor_0926ef28816b35ab = []byte{ - // 850 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x96, 0xcb, 0x6e, 0xd3, 0x4c, - 0x1c, 0xc5, 0xe3, 0x24, 0xcd, 0xd7, 0x6f, 0xaa, 0xde, 0xdc, 0x8b, 0x52, 0xab, 0x8a, 0x2b, 0x97, - 0x4b, 0x05, 0xd4, 0xa1, 0x45, 0x08, 0xd4, 0x0d, 0x6a, 0x1a, 0x10, 0x55, 0x89, 0x84, 0xdc, 0xc2, - 0x02, 0x21, 0x45, 0xbe, 0x4c, 0x8c, 0x15, 0xdb, 0x93, 0x7a, 0x26, 0x55, 0x23, 0xf1, 0x00, 0x2c, - 0x2b, 0xb1, 0x63, 0xd5, 0x87, 0x60, 0xcf, 0xb6, 0x62, 0x81, 0xba, 0x44, 0x2c, 0x02, 0x6a, 0x25, - 0xd4, 0x75, 0x9e, 0x00, 0xd9, 0x1e, 0x3b, 0x8e, 0x73, 0x51, 0x54, 0x91, 0x0d, 0xab, 0x36, 0x33, - 0xbf, 0x39, 0x33, 0x73, 0xfe, 0x67, 0x66, 0x0c, 0x78, 0x15, 0x61, 0x0b, 0xe1, 0x3c, 0x26, 0x72, - 0xd5, 0xb0, 0xf5, 0xfc, 0xd1, 0x86, 0x02, 0x89, 0xbc, 0x91, 0x27, 0xc7, 0x62, 0xcd, 0x41, 0x04, - 0xb1, 0x8b, 0x3e, 0x20, 0x52, 0x40, 0xa4, 0x00, 0x37, 0xaf, 0x23, 0x1d, 0x79, 0x48, 0xde, 0xfd, - 0xcf, 0xa7, 0xb9, 0x25, 0x9f, 0x2e, 0xfb, 0x1d, 0x74, 0xa8, 0xdf, 0x95, 0xa3, 0x33, 0x29, 0x32, - 0x86, 0xe1, 0x34, 0x2a, 0x32, 0x6c, 0xda, 0xcf, 0xeb, 0x08, 0xe9, 0x26, 0xcc, 0x7b, 0xbf, 0x94, - 0x7a, 0x25, 0x4f, 0x0c, 0x0b, 0x62, 0x22, 0x5b, 0x35, 0x0a, 0xdc, 0xe8, 0xb3, 0xd4, 0x60, 0x65, - 0x74, 0x05, 0x71, 0x19, 0xd9, 0x6e, 0xf8, 0x5d, 0xc2, 0x97, 0x34, 0x60, 0x4b, 0x58, 0xdf, 0x71, - 0xa0, 0x4c, 0xe0, 0x6b, 0xd9, 0x34, 0x34, 0x99, 0x20, 0x87, 0xdd, 0x03, 0x13, 0x1a, 0xc4, 0xaa, - 0x63, 0xd4, 0x88, 0x81, 0xec, 0x2c, 0xb3, 0xc2, 0xac, 0x4d, 0x6c, 0xae, 0x8a, 0xbd, 0xf7, 0x2d, - 0x16, 0xdb, 0x68, 0x21, 0x7d, 0xd6, 0xe4, 0x13, 0x52, 0x74, 0x34, 0x5b, 0x02, 0x40, 0x45, 0x96, - 0x65, 0x60, 0xec, 0x6a, 0x25, 0x3d, 0xad, 0xdb, 0xfd, 0xb4, 0x76, 0x42, 0x52, 0x92, 0x09, 0xc4, - 0x54, 0x2f, 0x22, 0xc0, 0xbe, 0x07, 0x73, 0x96, 0x61, 0x97, 0x31, 0x34, 0x2b, 0x65, 0x0d, 0x9a, - 0x50, 0x97, 0xbd, 0x35, 0xa6, 0x56, 0x98, 0xb5, 0xff, 0x0b, 0x2f, 0x5c, 0xfc, 0x47, 0x93, 0xbf, - 0xa5, 0x1b, 0xe4, 0x5d, 0x5d, 0x11, 0x55, 0x64, 0x51, 0xcb, 0xe9, 0x9f, 0x75, 0xac, 0x55, 0xf3, - 0xa4, 0x51, 0x83, 0x58, 0xdc, 0xb5, 0x49, 0xab, 0xc9, 0x73, 0x0d, 0xd9, 0x32, 0xb7, 0x84, 0x1e, - 0x92, 0x82, 0x34, 0x6b, 0x19, 0xf6, 0x3e, 0x34, 0x2b, 0xc5, 0xb0, 0x8d, 0xdd, 0x05, 0xb3, 0x94, - 0x40, 0x4e, 0x59, 0xd6, 0x34, 0x07, 0x62, 0x9c, 0x4d, 0x7b, 0x73, 0x2f, 0xb7, 0x9a, 0x7c, 0xd6, - 0x57, 0xeb, 0x42, 0x04, 0x69, 0x26, 0x6c, 0xdb, 0xf6, 0x9b, 0x5c, 0xa9, 0xa3, 0xc0, 0xf1, 0x50, - 0x6a, 0x2c, 0x2e, 0xd5, 0x85, 0x08, 0xd2, 0x4c, 0xd8, 0x16, 0x48, 0x3d, 0x06, 0x99, 0x5a, 0x5d, - 0xa9, 0xc2, 0x46, 0x36, 0xe3, 0xd9, 0x3b, 0x2f, 0xfa, 0x25, 0x17, 0x83, 0x92, 0x8b, 0xdb, 0x76, - 0xa3, 0x00, 0xbe, 0x7e, 0x5e, 0xcf, 0xbc, 0xac, 0x2b, 0x7b, 0xb0, 0x21, 0x51, 0x9e, 0x7d, 0x08, - 0xc6, 0x8e, 0x64, 0xb3, 0x0e, 0xb3, 0xff, 0x79, 0x03, 0x97, 0x82, 0xba, 0xb8, 0x91, 0x8c, 0x14, - 0xc5, 0x08, 0x2a, 0xeb, 0xd3, 0x5b, 0xe3, 0x1f, 0x4e, 0xf9, 0xc4, 0xd5, 0x29, 0x9f, 0x10, 0x96, - 0x01, 0xd7, 0x1d, 0x20, 0x09, 0xe2, 0x1a, 0xb2, 0x31, 0x14, 0x3e, 0xa6, 0xc0, 0x4c, 0x09, 0xeb, - 0x4f, 0x35, 0x83, 0x8c, 0x28, 0x5d, 0x4f, 0x7a, 0xb9, 0x98, 0xf4, 0x5c, 0x64, 0x5b, 0x4d, 0x7e, - 0xca, 0x77, 0x71, 0x80, 0x77, 0x16, 0x98, 0x6e, 0xa7, 0xab, 0xec, 0xc8, 0x04, 0xd2, 0x2c, 0x15, - 0x87, 0xcc, 0x51, 0x11, 0xaa, 0xad, 0x26, 0xbf, 0xe8, 0x4f, 0x14, 0x93, 0x12, 0xa4, 0x29, 0xb5, - 0x23, 0xd1, 0xec, 0x71, 0xef, 0xf8, 0xfa, 0x11, 0x7a, 0x3e, 0xc2, 0xe8, 0x46, 0x6a, 0xc6, 0x81, - 0x6c, 0xbc, 0x28, 0x61, 0xc5, 0x7e, 0x33, 0x60, 0xa2, 0x84, 0x75, 0x3a, 0x0e, 0xf6, 0x0e, 0x3c, - 0xf3, 0xf7, 0x02, 0x9f, 0xbc, 0x56, 0xe0, 0x1f, 0x81, 0x8c, 0x6c, 0xa1, 0xba, 0x4d, 0xbc, 0x5a, - 0x0d, 0x91, 0x5b, 0x8a, 0x47, 0x4c, 0x58, 0x00, 0x73, 0x91, 0x7d, 0x86, 0xfb, 0xff, 0x96, 0xf4, - 0x6e, 0xc4, 0x02, 0xd4, 0x0d, 0x5b, 0x82, 0xda, 0x08, 0x6c, 0x38, 0x00, 0x0b, 0xed, 0x3d, 0x62, - 0x47, 0x8d, 0x59, 0xb1, 0xd2, 0x6a, 0xf2, 0xcb, 0x71, 0x2b, 0x22, 0x98, 0x20, 0xcd, 0x85, 0xed, - 0xfb, 0x8e, 0xda, 0x53, 0x55, 0xc3, 0x24, 0x54, 0x4d, 0xf5, 0x57, 0x8d, 0x60, 0x51, 0xd5, 0x22, - 0x26, 0xdd, 0x3e, 0xa7, 0xaf, 0xeb, 0x73, 0xd5, 0xbb, 0x20, 0x62, 0x7e, 0x06, 0x76, 0xb3, 0x25, - 0xef, 0xf4, 0xd5, 0x4c, 0xe8, 0x46, 0xb4, 0xec, 0xbe, 0x6f, 0xf4, 0x3e, 0xe0, 0xba, 0xae, 0xb0, - 0x83, 0xe0, 0xf1, 0x2b, 0x8c, 0xbb, 0x53, 0x9d, 0xfc, 0xe4, 0x19, 0xef, 0x74, 0xd1, 0xc1, 0x6e, - 0xb7, 0x70, 0xc5, 0x80, 0xc9, 0x12, 0xd6, 0x5f, 0xd9, 0xda, 0x3f, 0x9f, 0xdf, 0x0a, 0x58, 0xe8, - 0xd8, 0xe9, 0x88, 0x2c, 0xdd, 0xfc, 0x94, 0x06, 0xa9, 0x12, 0xd6, 0xd9, 0x43, 0x30, 0x1d, 0xff, - 0x4c, 0xb8, 0xd3, 0xef, 0xce, 0xee, 0x7e, 0x11, 0xb8, 0xcd, 0xe1, 0xd9, 0x70, 0x27, 0x55, 0x30, - 0xd9, 0xf9, 0x72, 0xac, 0x0d, 0x10, 0xe9, 0x20, 0xb9, 0xfb, 0xc3, 0x92, 0xe1, 0x64, 0x6f, 0xc1, - 0x78, 0x78, 0xe9, 0xad, 0x0e, 0x18, 0x1d, 0x40, 0xdc, 0xdd, 0x21, 0xa0, 0x50, 0xfd, 0x10, 0x4c, - 0xc7, 0xaf, 0x94, 0x41, 0xee, 0xc5, 0xd8, 0x81, 0xee, 0xf5, 0x3b, 0x5a, 0x0a, 0x00, 0x91, 0x73, - 0x70, 0x73, 0x80, 0x42, 0x1b, 0xe3, 0xd6, 0x87, 0xc2, 0x82, 0x39, 0x0a, 0xcf, 0xce, 0x2e, 0x72, - 0xcc, 0xf9, 0x45, 0x8e, 0xf9, 0x75, 0x91, 0x63, 0x4e, 0x2e, 0x73, 0x89, 0xf3, 0xcb, 0x5c, 0xe2, - 0xfb, 0x65, 0x2e, 0xf1, 0xe6, 0xde, 0xc0, 0x67, 0xec, 0x38, 0xfc, 0x64, 0xf5, 0x1e, 0x34, 0x25, - 0xe3, 0x45, 0xf2, 0xc1, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3e, 0xb3, 0xef, 0xab, 0x7c, 0x0b, - 0x00, 0x00, + // 860 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x56, 0x4d, 0x6b, 0xe3, 0x46, + 0x18, 0xb6, 0x6c, 0xc7, 0x4d, 0x27, 0xe4, 0x4b, 0xf9, 0xc0, 0x11, 0xc1, 0x0a, 0x4a, 0x3f, 0x42, + 0xdb, 0xc8, 0x4d, 0x4a, 0x29, 0xe4, 0x52, 0xe2, 0xb8, 0xa1, 0x21, 0x35, 0x14, 0x25, 0xed, 0xa1, + 0x14, 0x8c, 0x3e, 0xc6, 0xaa, 0xb0, 0xa4, 0x51, 0x34, 0xe3, 0x10, 0x43, 0x7f, 0x40, 0x8f, 0x81, + 0xde, 0xf6, 0x94, 0x1f, 0xb1, 0x3f, 0x22, 0x2c, 0xec, 0x92, 0xe3, 0xb2, 0x07, 0xef, 0x92, 0xc0, + 0x92, 0xb3, 0x7f, 0xc1, 0xa2, 0xd1, 0x48, 0x96, 0xe5, 0x0f, 0x4c, 0x58, 0x5f, 0xf6, 0x64, 0x33, + 0xf3, 0xcc, 0xf3, 0xce, 0xfb, 0xbc, 0xcf, 0xbc, 0xaf, 0x80, 0xa8, 0x23, 0xec, 0x20, 0x5c, 0xc6, + 0x44, 0x6d, 0x5a, 0xae, 0x59, 0xbe, 0xdc, 0xd3, 0x20, 0x51, 0xf7, 0xca, 0xe4, 0x4a, 0xf6, 0x7c, + 0x44, 0x10, 0xbf, 0x1e, 0x02, 0x64, 0x06, 0x90, 0x19, 0x40, 0xd8, 0x30, 0x11, 0x32, 0x6d, 0x58, + 0xa6, 0x28, 0xad, 0xd5, 0x28, 0xab, 0x6e, 0x3b, 0x3c, 0x22, 0x88, 0xe9, 0x2d, 0x62, 0x39, 0x10, + 0x13, 0xd5, 0xf1, 0x18, 0x60, 0xd5, 0x44, 0x26, 0xa2, 0x7f, 0xcb, 0xc1, 0x3f, 0xb6, 0xba, 0x11, + 0x46, 0xaa, 0x87, 0x1b, 0x2c, 0x6c, 0xb8, 0x55, 0x62, 0xb7, 0xd4, 0x54, 0x0c, 0xe3, 0x2b, 0xea, + 0xc8, 0x72, 0xd9, 0xfe, 0x17, 0x23, 0xb2, 0x88, 0x2e, 0x4d, 0x51, 0xd2, 0xcb, 0x3c, 0xe0, 0x6b, + 0xd8, 0x3c, 0xf2, 0xa1, 0x4a, 0xe0, 0x9f, 0xaa, 0x6d, 0x19, 0x2a, 0x41, 0x3e, 0x7f, 0x0a, 0xe6, + 0x0c, 0x88, 0x75, 0xdf, 0xf2, 0x88, 0x85, 0xdc, 0x22, 0xb7, 0xc5, 0xed, 0xcc, 0xed, 0x6f, 0xcb, + 0xc3, 0xf3, 0x96, 0xab, 0x3d, 0x68, 0x25, 0x7f, 0xdb, 0x11, 0x33, 0x4a, 0xf2, 0x34, 0x5f, 0x03, + 0x40, 0x47, 0x8e, 0x63, 0x61, 0x1c, 0x70, 0x65, 0x29, 0xd7, 0xd7, 0xa3, 0xb8, 0x8e, 0x62, 0xa4, + 0xa2, 0x12, 0x88, 0x19, 0x5f, 0x82, 0x80, 0xff, 0x17, 0xac, 0x38, 0x96, 0x5b, 0xc7, 0xd0, 0x6e, + 0xd4, 0x0d, 0x68, 0x43, 0x53, 0xa5, 0x77, 0xcc, 0x6d, 0x71, 0x3b, 0x9f, 0x57, 0x7e, 0x0b, 0xe0, + 0x6f, 0x3a, 0xe2, 0x57, 0xa6, 0x45, 0xfe, 0x69, 0x69, 0xb2, 0x8e, 0x1c, 0x26, 0x1b, 0xfb, 0xd9, + 0xc5, 0x46, 0xb3, 0x4c, 0xda, 0x1e, 0xc4, 0xf2, 0x89, 0x4b, 0xba, 0x1d, 0x51, 0x68, 0xab, 0x8e, + 0x7d, 0x20, 0x0d, 0xa1, 0x94, 0x94, 0x65, 0xc7, 0x72, 0xcf, 0xa0, 0xdd, 0xa8, 0xc6, 0x6b, 0xfc, + 0x09, 0x58, 0x66, 0x08, 0xe4, 0xd7, 0x55, 0xc3, 0xf0, 0x21, 0xc6, 0xc5, 0x3c, 0x8d, 0xbd, 0xd9, + 0xed, 0x88, 0xc5, 0x90, 0x6d, 0x00, 0x22, 0x29, 0x4b, 0xf1, 0xda, 0x61, 0xb8, 0x14, 0x50, 0x5d, + 0x46, 0x8a, 0xc7, 0x54, 0x33, 0x69, 0xaa, 0x01, 0x88, 0xa4, 0x2c, 0xc5, 0x6b, 0x11, 0xd5, 0x31, + 0x28, 0x78, 0x2d, 0xad, 0x09, 0xdb, 0xc5, 0x02, 0x95, 0x77, 0x55, 0x0e, 0xfd, 0x26, 0x47, 0x7e, + 0x93, 0x0f, 0xdd, 0x76, 0xa5, 0xf8, 0xe2, 0xf9, 0xee, 0x2a, 0xd3, 0x5d, 0xf7, 0xdb, 0x1e, 0x41, + 0xf2, 0xef, 0x2d, 0xed, 0x14, 0xb6, 0x15, 0x76, 0x9a, 0xff, 0x11, 0xcc, 0x5c, 0xaa, 0x76, 0x0b, + 0x16, 0x3f, 0xa3, 0x34, 0x1b, 0x51, 0x95, 0x02, 0x93, 0x25, 0x4a, 0x64, 0x45, 0x75, 0x0e, 0xd1, + 0x07, 0xb3, 0xff, 0xdd, 0x88, 0x99, 0xc7, 0x1b, 0x31, 0x23, 0x6d, 0x02, 0x61, 0xd0, 0x4e, 0x0a, + 0xc4, 0x1e, 0x72, 0x31, 0x94, 0xfe, 0xcf, 0x81, 0xa5, 0x1a, 0x36, 0x7f, 0x31, 0x2c, 0x32, 0x25, + 0xaf, 0xfd, 0x3c, 0x4c, 0xd3, 0x2c, 0xd5, 0x94, 0xef, 0x76, 0xc4, 0x85, 0x50, 0xd3, 0x31, 0x4a, + 0x3a, 0x60, 0xb1, 0xe7, 0xb5, 0xba, 0xaf, 0x12, 0xc8, 0x9c, 0x55, 0x9d, 0xd0, 0x55, 0x55, 0xa8, + 0x77, 0x3b, 0xe2, 0x7a, 0x18, 0x28, 0x45, 0x25, 0x29, 0x0b, 0x7a, 0x9f, 0xbf, 0xf9, 0xab, 0xe1, + 0x66, 0x0e, 0x0d, 0xf5, 0xeb, 0x14, 0x8d, 0x9c, 0xa8, 0x99, 0x00, 0x8a, 0xe9, 0xa2, 0xc4, 0x15, + 0x7b, 0xcf, 0x81, 0xb9, 0x1a, 0x36, 0xd9, 0x39, 0x38, 0xdc, 0xfe, 0xdc, 0xc7, 0xb3, 0x7f, 0xf6, + 0x49, 0xf6, 0xff, 0x09, 0x14, 0x54, 0x07, 0xb5, 0x5c, 0x42, 0x6b, 0x35, 0x81, 0x6f, 0x19, 0x3c, + 0x21, 0xc2, 0x1a, 0x58, 0x49, 0xe4, 0x19, 0xe7, 0xff, 0x2a, 0x4b, 0xfb, 0x63, 0x05, 0x9a, 0x96, + 0xab, 0x40, 0x63, 0x0a, 0x32, 0x9c, 0x83, 0xb5, 0x5e, 0x8e, 0xd8, 0xd7, 0x53, 0x52, 0x6c, 0x75, + 0x3b, 0xe2, 0x66, 0x5a, 0x8a, 0x04, 0x4c, 0x52, 0x56, 0xe2, 0xf5, 0x33, 0x5f, 0x1f, 0xca, 0x6a, + 0x60, 0x12, 0xb3, 0xe6, 0x46, 0xb3, 0x26, 0x60, 0x49, 0xd6, 0x2a, 0x26, 0x83, 0x3a, 0xe7, 0x9f, + 0xaa, 0x73, 0x93, 0x36, 0x88, 0x94, 0x9e, 0x91, 0xdc, 0x7c, 0x8d, 0xbe, 0x3e, 0xcf, 0x86, 0x81, + 0x45, 0xeb, 0xc1, 0x8c, 0x64, 0xfd, 0x40, 0x18, 0x68, 0x68, 0xe7, 0xd1, 0x00, 0xad, 0xcc, 0x06, + 0xa1, 0xae, 0xdf, 0x8a, 0x1c, 0x7d, 0x5d, 0xec, 0x70, 0xb0, 0x2d, 0x3d, 0x72, 0x60, 0xbe, 0x86, + 0xcd, 0x3f, 0x5c, 0xe3, 0x93, 0xf7, 0x6f, 0x03, 0xac, 0xf5, 0x65, 0x3a, 0x25, 0x49, 0xf7, 0x9f, + 0xe5, 0x41, 0xae, 0x86, 0x4d, 0xfe, 0x02, 0x2c, 0xa6, 0x3f, 0x1a, 0xbe, 0x19, 0xd5, 0xb3, 0x07, + 0x27, 0x82, 0xb0, 0x3f, 0x39, 0x36, 0xce, 0xa4, 0x09, 0xe6, 0xfb, 0x27, 0xc7, 0xce, 0x18, 0x92, + 0x3e, 0xa4, 0xf0, 0xfd, 0xa4, 0xc8, 0x38, 0xd8, 0xdf, 0x60, 0x36, 0x6e, 0x7a, 0xdb, 0x63, 0x4e, + 0x47, 0x20, 0xe1, 0xdb, 0x09, 0x40, 0x31, 0xfb, 0x05, 0x58, 0x4c, 0xb7, 0x94, 0x71, 0xea, 0xa5, + 0xb0, 0x63, 0xd5, 0x1b, 0xf5, 0xb4, 0x34, 0x00, 0x12, 0xef, 0xe0, 0xcb, 0x31, 0x0c, 0x3d, 0x98, + 0xb0, 0x3b, 0x11, 0x2c, 0x8a, 0x51, 0x39, 0xbe, 0xbd, 0x2f, 0x71, 0x77, 0xf7, 0x25, 0xee, 0xdd, + 0x7d, 0x89, 0xbb, 0x7e, 0x28, 0x65, 0xee, 0x1e, 0x4a, 0x99, 0xd7, 0x0f, 0xa5, 0xcc, 0x5f, 0xdf, + 0x8d, 0x1d, 0x63, 0x57, 0xf1, 0x57, 0x2a, 0x1d, 0x68, 0x5a, 0x81, 0x5a, 0xf2, 0x87, 0x0f, 0x01, + 0x00, 0x00, 0xff, 0xff, 0xa1, 0x2b, 0xfd, 0x07, 0x8a, 0x0b, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. From 3d46c672f6721ef8669ce733da63e2d198234a46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?colin=20axn=C3=A9r?= <25233464+colin-axner@users.noreply.github.com> Date: Tue, 27 Oct 2020 15:34:25 +0100 Subject: [PATCH 10/27] Fix Optimistic Channel Handshake bugs (#7678) * fix optimistic handshake bugs and add crossing hello test * fix tests Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- x/ibc/core/04-channel/keeper/handshake.go | 31 +++++++++--- .../core/04-channel/keeper/handshake_test.go | 6 +++ x/ibc/testing/coordinator.go | 48 +++++++++++++++++++ 3 files changed, 78 insertions(+), 7 deletions(-) diff --git a/x/ibc/core/04-channel/keeper/handshake.go b/x/ibc/core/04-channel/keeper/handshake.go index 900c234bec..a812536b76 100644 --- a/x/ibc/core/04-channel/keeper/handshake.go +++ b/x/ibc/core/04-channel/keeper/handshake.go @@ -187,16 +187,33 @@ func (k Keeper) ChanOpenTry( return nil, err } - k.SetChannel(ctx, portID, desiredChannelID, channel) + var ( + capKey *capabilitytypes.Capability + err error + ) - capKey, err := k.scopedKeeper.NewCapability(ctx, host.ChannelCapabilityPath(portID, desiredChannelID)) - if err != nil { - return nil, sdkerrors.Wrapf(err, "could not create channel capability for port ID %s and channel ID %s", portID, desiredChannelID) + // Only create a capability and set the sequences if the previous channel does not exist + _, found = k.GetChannel(ctx, portID, desiredChannelID) + if !found { + capKey, err = k.scopedKeeper.NewCapability(ctx, host.ChannelCapabilityPath(portID, desiredChannelID)) + if err != nil { + return nil, sdkerrors.Wrapf(err, "could not create channel capability for port ID %s and channel ID %s", portID, desiredChannelID) + } + + k.SetNextSequenceSend(ctx, portID, desiredChannelID, 1) + k.SetNextSequenceRecv(ctx, portID, desiredChannelID, 1) + k.SetNextSequenceAck(ctx, portID, desiredChannelID, 1) + } else { + // capability initialized in ChanOpenInit + capKey, found = k.scopedKeeper.GetCapability(ctx, host.ChannelCapabilityPath(portID, desiredChannelID)) + if !found { + return nil, sdkerrors.Wrapf(types.ErrChannelCapabilityNotFound, + "capability not found for existing channel, portID (%s) channelID (%s)", portID, desiredChannelID, + ) + } } - k.SetNextSequenceSend(ctx, portID, desiredChannelID, 1) - k.SetNextSequenceRecv(ctx, portID, desiredChannelID, 1) - k.SetNextSequenceAck(ctx, portID, desiredChannelID, 1) + k.SetChannel(ctx, portID, desiredChannelID, channel) k.Logger(ctx).Info("channel state updated", "port-id", portID, "channel-id", desiredChannelID, "previous-state", previousChannel.State.String(), "new-state", "TRYOPEN") diff --git a/x/ibc/core/04-channel/keeper/handshake_test.go b/x/ibc/core/04-channel/keeper/handshake_test.go index 77bbb90ee4..927bc3131b 100644 --- a/x/ibc/core/04-channel/keeper/handshake_test.go +++ b/x/ibc/core/04-channel/keeper/handshake_test.go @@ -153,6 +153,12 @@ func (suite *KeeperTestSuite) TestChanOpenTry() { suite.chainB.CreatePortCapability(connB.NextTestChannel(ibctesting.MockPort).PortID) portCap = suite.chainB.GetPortCapability(connB.NextTestChannel(ibctesting.MockPort).PortID) }, true}, + {"success with crossing hello", func() { + _, _, connA, connB = suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, ibctesting.Tendermint) + suite.coordinator.ChanOpenInitOnBothChains(suite.chainA, suite.chainB, connA, connB, ibctesting.MockPort, ibctesting.MockPort, types.ORDERED) + + portCap = suite.chainB.GetPortCapability(connB.NextTestChannel(ibctesting.MockPort).PortID) + }, true}, {"success with empty counterparty chosen channel id", func() { var clientA, clientB string clientA, clientB, connA, connB = suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, ibctesting.Tendermint) diff --git a/x/ibc/testing/coordinator.go b/x/ibc/testing/coordinator.go index 2b7c6a466d..6dbacee50f 100644 --- a/x/ibc/testing/coordinator.go +++ b/x/ibc/testing/coordinator.go @@ -524,6 +524,54 @@ func (coord *Coordinator) ChanOpenInit( return sourceChannel, counterpartyChannel, nil } +// ChanOpenInitOnBothChains initializes a channel on the source chain and counterparty chain +// with the state INIT using the OpenInit handshake call. +func (coord *Coordinator) ChanOpenInitOnBothChains( + source, counterparty *TestChain, + connection, counterpartyConnection *TestConnection, + sourcePortID, counterpartyPortID string, + order channeltypes.Order, +) (TestChannel, TestChannel, error) { + sourceChannel := connection.AddTestChannel(sourcePortID) + counterpartyChannel := counterpartyConnection.AddTestChannel(counterpartyPortID) + + // NOTE: only creation of a capability for a transfer or mock port is supported + // Other applications must bind to the port in InitGenesis or modify this code. + source.CreatePortCapability(sourceChannel.PortID) + counterparty.CreatePortCapability(counterpartyChannel.PortID) + coord.IncrementTime() + + // initialize channel on source + if err := source.ChanOpenInit(sourceChannel, counterpartyChannel, order, connection.ID); err != nil { + return sourceChannel, counterpartyChannel, err + } + coord.IncrementTime() + + // initialize channel on counterparty + if err := counterparty.ChanOpenInit(counterpartyChannel, sourceChannel, order, counterpartyConnection.ID); err != nil { + return sourceChannel, counterpartyChannel, err + } + coord.IncrementTime() + + // update counterparty client on source connection + if err := coord.UpdateClient( + source, counterparty, + connection.ClientID, Tendermint, + ); err != nil { + return sourceChannel, counterpartyChannel, err + } + + // update source client on counterparty connection + if err := coord.UpdateClient( + counterparty, source, + counterpartyConnection.ClientID, Tendermint, + ); err != nil { + return sourceChannel, counterpartyChannel, err + } + + return sourceChannel, counterpartyChannel, nil +} + // ChanOpenTry initializes a channel on the source chain with the state TRYOPEN // using the OpenTry handshake call. func (coord *Coordinator) ChanOpenTry( From e306a852ff9ffb7cae7dfd540b31db56594d49a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?colin=20axn=C3=A9r?= <25233464+colin-axner@users.noreply.github.com> Date: Tue, 27 Oct 2020 15:51:47 +0100 Subject: [PATCH 11/27] update core IBC docs (#7560) * update state * add empty concept fields, update callbacks and messages * update client creation, update and upgrade section * add packet lifecycle concepts * add host and proof section * add connection handshake section * add channel handshakes * state transitions * self review fixes * Apply suggestions from code review Co-authored-by: Federico Kunze <31522760+fedekunze@users.noreply.github.com> * apply @fedekunze review suggestions * packet data section * Apply suggestions from code review Co-authored-by: Christopher Goes * add @cwgoes and @fedekunze review suggestions * fix typos Co-authored-by: Federico Kunze <31522760+fedekunze@users.noreply.github.com> Co-authored-by: Christopher Goes Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- x/ibc/core/04-channel/keeper/handshake.go | 2 +- x/ibc/core/05-port/types/module.go | 1 + x/ibc/core/spec/01_concepts.md | 272 +++++++++++++++++++--- x/ibc/core/spec/02_state.md | 32 +-- x/ibc/core/spec/03_state_transitions.md | 99 ++++++++ x/ibc/core/spec/04_messages.md | 47 +++- x/ibc/core/spec/05_callbacks.md | 4 +- 7 files changed, 395 insertions(+), 62 deletions(-) diff --git a/x/ibc/core/04-channel/keeper/handshake.go b/x/ibc/core/04-channel/keeper/handshake.go index a812536b76..03b100be7a 100644 --- a/x/ibc/core/04-channel/keeper/handshake.go +++ b/x/ibc/core/04-channel/keeper/handshake.go @@ -381,7 +381,7 @@ func (k Keeper) ChanOpenConfirm( // // This section defines the set of functions required to close a channel handshake // as defined in https://github.com/cosmos/ics/tree/master/spec/ics-004-channel-and-packet-semantics#closing-handshake - +// // ChanCloseInit is called by either module to close their end of the channel. Once // closed, channels cannot be reopened. func (k Keeper) ChanCloseInit( diff --git a/x/ibc/core/05-port/types/module.go b/x/ibc/core/05-port/types/module.go index a619cd4b7f..a9a7b50922 100644 --- a/x/ibc/core/05-port/types/module.go +++ b/x/ibc/core/05-port/types/module.go @@ -59,6 +59,7 @@ type IBCModule interface { ) error // OnRecvPacket must return the acknowledgement bytes + // In the case of an asynchronous acknowledgement, nil should be returned. OnRecvPacket( ctx sdk.Context, packet channeltypes.Packet, diff --git a/x/ibc/core/spec/01_concepts.md b/x/ibc/core/spec/01_concepts.md index f51a073c4d..9e7654ddda 100644 --- a/x/ibc/core/spec/01_concepts.md +++ b/x/ibc/core/spec/01_concepts.md @@ -7,6 +7,71 @@ order: 1 > NOTE: if you are not familiar with the IBC terminology and concepts, please read this [document](https://github.com/cosmos/ics/blob/master/ibc/1_IBC_TERMINOLOGY.md) as prerequisite reading. +## Client Creation, Updates, and Upgrades + +IBC clients are on chain light clients. The light client is responsible for verifying +counterparty state. A light client can be created by any user submitting a client +identifier and a valid initial `ClientState` and `ConsensusState`. The client identifier +must not already be used. Clients are given a client identifier prefixed store to +store their associated client state and consensus states. Consensus states are +stored using their associated height. + +Clients can be updated by any user submitting a valid `Header`. The client state callback +to `CheckHeaderAndUpdateState` is responsible for verifying the header against previously +stored state. The function should also return the updated client state and consensus state +if the header is considered a valid update. A light client, such as Tendermint, may have +client specific parameters like `TrustLevel` which must be considered valid in relation +to the `Header`. The update height is not necessarily the lastest height of the light +client. Updates may fill in missing consensus state heights. + +Clients may be upgraded. The upgrade should be verified using `VerifyUpgrade`. It is not +a requirement to allow for light client upgrades. For example, the solo machine client +will simply return an error on `VerifyUpgrade`. Clients which implement upgrades +are expected to account for, but not necessarily support, planned and unplanned upgrades. + +## Client Misbehaviour + +IBC clients must freeze when the counterparty chain becomes byzantine and +takes actions that could fool the light client into accepting invalid state +transitions. Thus, relayers are able to submit Misbehaviour proofs that prove +that a counterparty chain has signed two Headers for the same height. This +constitutes misbehaviour as the IBC client could have accepted either header +as valid. Upon verifying the misbehaviour the IBC client must freeze at that +height so that any proof verifications for the frozen height or later fail. + +Note, there is a difference between the chain-level Misbehaviour that IBC is +concerned with and the validator-level Evidence that Tendermint is concerned +with. Tendermint must be able to detect, submit, and punish any evidence of +individual validators breaking the Tendermint consensus protocol and attempting +to mount an attack. IBC clients must only act when an attack is successful +and the chain has successfully forked. In this case, valid Headers submitted +to the IBC client can no longer be trusted and the client must freeze. + +Governance may then choose to override a frozen client and provide the correct, +canonical Header so that the client can continue operating after the Misbehaviour +submission. + +## ClientUpdateProposal + +A governance proposal may be passed to update a specified client with a provided +header. This is useful in unfreezing clients or updating expired clients. Each +client is expected to implement this functionality. A client may choose to disallow +an update by a governance proposal by returning an error in the client state function +'CheckProposedHeaderAndUpdateState'. + +The localhost client cannot be updated by a governance proposal. + +The solo machine client requires the boolean flag 'AllowUpdateAfterProposal' to be set +to true in order to be updated by a proposal. This is set upon client creation and cannot +be updated later. + +The tendermint client has two flags update flags, 'AllowUpdateAfterExpiry' and +'AllowUpdateAfterMisbehaviour'. The former flag can only be used to unexpire clients. The +latter flag can be used to unfreeze a client and if necessary it will also unexpire the client. +It is advised to let a client expire if it has become frozen before proposing a new header. +This is to avoid the client from becoming refrozen if the misbehaviour evidence has not +expired. These boolean flags are set upon client creation and cannot be updated later. + ## IBC Client Heights IBC Client Heights are represented by the struct: @@ -61,27 +126,37 @@ Other client-types may implement their own logic to verify the IBC Heights that The IBC interfaces expect an `ibcexported.Height` interface, however all clients should use the concrete implementation provided in `02-client/types` and reproduced above. -## Client Misbehaviour +## Connection Handshake -IBC clients must freeze when the counterparty chain becomes malicious and -takes actions that could fool the light client into accepting invalid state -transitions. Thus, relayers are able to submit Misbehaviour proofs that prove -that a counterparty chain has signed two Headers for the same height. This -constitutes misbehaviour as the IBC client could have accepted either header -as valid. Upon verifying the misbehaviour the IBC client must freeze at that -height so that any proof verifications for the frozen height or later fail. +The connection handshake occurs in 4 steps as defined in [ICS 03](https://github.com/cosmos/ics/tree/master/spec/ics-003-connection-semantics). -Note, there is a difference between the chain-level Misbehaviour that IBC is -concerned with and the validator-level Evidence that Tendermint is concerned -with. Tendermint must be able to detect, submit, and punish any evidence of -individual validators breaking the Tendermint consensus protocol and attempting -to mount an attack. IBC clients must only act when an attack is successful -and the chain has successfully forked. In this case, valid Headers submitted -to the IBC client can no longer be trusted and the client must freeze. +`ConnOpenInit` is the first attempt to initialize a connection on the executing chain. +The handshake is expected to succeed if the connection identifier selected is not used and the +version selected is supported. The connection identifier for the counterparty connection may +be left empty indicating that the counterparty may select its own identifier. The connection +is set and stored in the INIT state upon success. -Governance may then choose to override a frozen client and provide the correct, -canonical Header so that the client can continue operating after the Misbehaviour -submission. +`ConnOpenTry` is a response to a chain executing `ConnOpenInit`. The executing chain will validate +the chain level parameters the counterparty has stored such as its chainID and consensus parameters. +The executing chain will also verify that if a previous connection exists for the specified +connection identifier that all the parameters match and its previous state was in INIT. This +may occur when both chains execute `ConnOpenInit` simultaneously. The executing chain will verify +that the counterparty created a connection in INIT state. The executing chain will also verify +The `ClientState` and `ConsensusState` the counterparty stores for the executing chain. The +executing chain will select a version from the intersection of its supported versions and the +versions set by the counterparty. The connection is set and stored in the TRYOPEN state upon +success. + +`ConnOpenAck` may be called on a chain when the counterparty connection has entered TRYOPEN. A +previous connection on the executing chain must exist in either INIT or TRYOPEN. The executing +chain will verify the version the counterparty selected. If the counterparty selected its own +connection identifier, it will be validated in the basic validation of a `MsgConnOpenAck`. +The counterparty connection state is verified along with the `ClientState` and `ConsensusState` +stored for the executing chain. The connection is set and stored in the OPEN state upon success. + +`ConnOpenConfirm` is a response to a chain executing `ConnOpenAck`. The executing chain's connection +must be in TRYOPEN. The counterparty connection state is verified to be in the OPEN state. The +connection is set and stored in the OPEN state upon success. ## Connection Version Negotiation @@ -124,6 +199,39 @@ with regards to version selection in `ConnOpenTry`. Each version in a set of versions should have a unique version identifier. ::: +## Channel Handshake + +The channel handshake occurs in 4 steps as defined in [ICS 04](https://github.com/cosmos/ics/tree/master/spec/ics-004-channel-and-packet-semantics). + +`ChanOpenInit` is the first attempt to initialize a channel on top of an existing connection. +The handshake is expected to succeed if the channel identifier selected is not used and the +version selected for the existing connection is a supported IBC version. The portID must correspond +to a port already binded upon `InitChain`. The channel identifier for the counterparty channel +may be left empty indicating that the counterparty may select its own identifier. The channel is +set and stored in the INIT state upon success. The channel parameters `NextSequenceSend`, +`NextSequenceRecv`, and `NextSequenceAck` are all set to 1 and a channel capability is created +for the given portID and channelID path. + +`ChanOpenTry` is a response to a chain executing `ChanOpenInit`. If the executing chain is calling +`ChanOpenTry` after previously executing `ChanOpenInit` then the provided channel parameters must +match the previously selected parameters. The connection the channel is created on top of must be +an OPEN state and its IBC version must support the desired channel type being created (ORDERED, +UNORDERED, etc). The executing chain will verify that the channel state of the counterparty is +in INIT. The executing chain will set and store the channel state in TRYOPEN. The channel +parameters `NextSequenceSend`, `NextSequenceRecv`, and `NextSequenceAck` are all set to 1 and +a channel capability is created for the given portID and channelID path only if the channel +did not previously exist. + +`ChanOpenAck` may be called on a chain when the counterparty channel has entered TRYOPEN. A +previous channel on the executing chain must exist be in either INIT or TRYOPEN state. If the +counterparty selected its own channel identifier, it will be validated in the basic validation +of `MsgChanOpenAck`. The executing chain verifies that the counterparty channel state is in +TRYOPEN. The channel is set and stored in the OPEN state upon success. + +`ChanOpenConfirm` is a response to a chain executing `ChanOpenAck`. The executing chain's +previous channel state must be in TRYOPEN. The executing chain verifies that the counterparty +channel state is OPEN. The channel is set and stored in the OPEN state upon success. + ## Channel Version Negotiation During the channel handshake procedure a version must be agreed upon between @@ -159,23 +267,119 @@ in the handshake callbacks. Implementations which do not feel they would benefit from versioning can do basic string matching using a single compatible version. -## ClientUpdateProposal +## Sending, Receiving, Acknowledging Packets -A governance proposal may be passed to update a specified client with a provided -header. This is useful in unfreezing clients or updating expired clients. Each -client is expected to implement this functionality. A client may choose to disallow -an update by a governance proposal by returning an error in the client state function -'CheckProposedHeaderAndUpdateState'. +Terminology: +**Packet Commitment** A hash of the packet stored on the sending chain. +**Packet Receipt** A single bit indicating that a packet has been received. +Used for timeouts. +**Acknowledgement** Data written to indicate the result of receiving a packet. +Typically conveying either success or failure of the receive. -The localhost client cannot be updated by a governance proposal. +A packet may be associated with one of the following states: +- the packet does not exist (ie it has not been sent) +- the packet has been sent but not received (the packet commitment exists on the +sending chain, but no receipt exists on the receiving chain) +- the packet has been received but not acknowledged (packet commitment exists +on the sending chain, a receipt exists on the receiving chain, but no acknowledgement +exists on the receiving chain) +- the packet has been acknowledgement but the acknowledgement has not been relayed +(the packet commitment exists on the sending chain, the receipt and acknowledgement +exist on the receiving chain) +- the packet has completed its life cycle (the packet commitment does not exist on +the sending chain, but a receipt and acknowledgement exist on the receiving chain) -The solo machine client requires the boolean flag 'AllowUpdateAfterProposal' to be set -to true in order to be updated by a proposal. This is set upon client creation and cannot -be updated later. +Sending of a packet is initiated by a call to the `ChannelKeeper.SendPacket` +function by an application module. Packets being sent will be verified for +correctness (core logic only). If the packet is valid, a hash of the packet +will be stored as a packet commitment using the packet sequence in the key. +Packet commitments are stored on the sending chain. -The tendermint client has two flags update flags, 'AllowUpdateAfterExpiry' and -'AllowUpdateAfterMisbehaviour'. The former flag can only be used to unexpire clients. The -latter flag can be used to unfreeze a client and if necessary it will also unexpire the client. -It is advised to let a client expire if it has become frozen before proposing a new header. -This is to avoid the client from becoming refrozen if the misbehaviour evidence has not -expired. These boolean flags are set upon client creation and cannot be updated later. +A message should be sent to the receving chain indicating that the packet +has been committed on the sending chain and should be received on the +receiving chain. The light client on the receiving chain, which verifies +the sending chain's state, should be updated to the lastest sending chain +state if possible. The verification will fail if the latest state of the +light client does not include the packet commitment. The receiving chain +is responsible for verifying that the counterparty set the hash of the +packet. If verification of the packet to be received is successful, the +receiving chain should store a receipt of the packet and call application +logic if necessary. An acknowledgement may be processed and stored at this time (synchronously) +or at another point in the future (asynchronously). + +Acknowledgements written on the receiving chain may be verified on the +sending chain. If the sending chain successfully verifies the acknowledgement +then it may delete the packet commitment stored at that sequence. There is +no requirement for acknowledgements to be written. Only the hash of the +acknowledgement is stored on the chain. Application logic may be executed +in conjunction with verifying an acknowledgement. For example, in fungible +cross-chain token transfer, a failed acknowledgement results in locked or +burned funds being refunded. + +Relayers are responsible for reconstructing packets between the sending, +receiving, and acknowledging of packets. + +IBC applications sending and receiving packets are expected to appropriately +handle data contained within a packet. For example, cross-chain token +transfers will unmarshal the data into proto definitions representing +a token transfer. + +Future optimizations may allow for storage cleanup. Stored packet +commitments could be removed from channels which do not write +packet acknowledgements and acknowledgements could be removed +when a packet has completed its life cycle. + +## Timing out Packets + +A packet may be timed out on the receiving chain if the packet timeout height or timestamp has +been surpassed on the receving chain or the channel has closed. A timed out +packet can only occur if the packet has never been received on the receiving +chain. ORDERED channels will verify that the packet sequence is greater than +the `NextSequenceRecv` on the receiving chain. UNORDERED channels will verify +that the packet receipt has not been written on the receiving chain. A timeout +on channel closure will additionally verify that the counterparty channel has +been closed. A successful timeout may execute application logic as appropriate. + +Both the packet's timeout timestamp and the timeout height must have been +surpassed on the receiving chain for a timeout to be valid. A timeout timestamp +or timeout height with a 0 value indicates the timeout field may be ignored. +Each packet is required to have at least one valid timeout field. + +## Closing Channels + +Closing a channel occurs in occurs in 2 handshake steps as defined in [ICS 04](https://github.com/cosmos/ics/tree/master/spec/ics-004-channel-and-packet-semantics). + +`ChanCloseInit` will close a channel on the executing chain if the channel exists, it is not +already closed and the connection it exists upon is OPEN. Channels can only be closed by a +calling module or in the case of a packet timeout on an ORDERED channel. + +`ChanCloseConfirm` is a response to a counterparty channel executing `ChanCloseInit`. The channel +on the executing chain will be closed if the channel exists, the channel is not already closed, +the connection the channel exists upon is OPEN and the executing chain successfully verifies +that the counterparty channel has been closed. + +## Port and Channel Capabilities + +## Hostname Validation + +Hostname validation is implemented as defined in [ICS 24](https://github.com/cosmos/ics/tree/master/spec/ics-024-host-requirements). + +The 24-host sub-module parses and validates identifiers. It also builds +the key paths used to store IBC related information. + +A valid identifier must conatin only alphanumeric characters or the +following list of allowed characters: +".", "\_", "+", "-", "#", "[", "]", "<", ">" + +- Client identifiers must contain between 9 and 64 characters. +- Connection identifiers must contain between 10 and 64 characters. +- Channel identifiers must contain between 10 and 64 characters. +- Port identifiers must contain between 2 and 64 characters. + +## Proofs + +Proofs for counterparty state validation are provided as bytes. These bytes +can be unmarshaled into proto definitions as necessary by light clients. +For example, the Tendermint light client will use the bytes as a merkle +proof where as the solo machine client will unmarshal the proof into +several layers proto definitions used for signature verficiation. diff --git a/x/ibc/core/spec/02_state.md b/x/ibc/core/spec/02_state.md index a5381a735c..5df09a097b 100644 --- a/x/ibc/core/spec/02_state.md +++ b/x/ibc/core/spec/02_state.md @@ -4,18 +4,22 @@ order: 2 # State -The paths for the values stored in state can be found [here](https://github.com/cosmos/ics/blob/master/spec/ics-024-host-requirements/README.md#path-space). Additionally, the SDK adds -a prefix to the path to be able to aggregate the values for querying purposes. +The paths for the values stored in state is defined [here](https://github.com/cosmos/ics/blob/master/spec/ics-024-host-requirements/README.md#path-space). +Additionally, the SDK adds a prefix to the path to be able to aggregate the values for querying purposes. +The client type is not stored since it can be obtained through the client state. -| Prefix | Path | Value type | -|--------|------------------------------------------------------------------------|----------------| -| "0/" | "clients/{identifier}/clientState" | ClientState | -| "0/" | "clients/{identifier}/consensusStates/{height}" | ConsensusState | -| "0/" | "clients/{identifier}/type" | ClientType | -| "0/" | "connections/{identifier}" | ConnectionEnd | -| "0/" | "ports/{identifier}" | CapabilityKey | -| "0/" | "ports/{identifier}/channels/{identifier}" | ChannelEnd | -| "0/" | "ports/{identifier}/channels/{identifier}/key" | CapabilityKey | -| "0/" | "ports/{identifier}/channels/{identifier}/nextSequenceRecv" | uint64 | -| "0/" | "ports/{identifier}/channels/{identifier}/packets/{sequence}" | bytes | -| "0/" | "ports/{identifier}/channels/{identifier}/acknowledgements/{sequence}" | bytes | +| Prefix | Path | Value type | +|--------|-----------------------------------------------------------------------------|----------------| +| "0/" | "clients/{identifier}/clientState" | ClientState | +| "0/" | "clients/{identifier}/consensusStates/{height}" | ConsensusState | +| "0/" | "clients/{identifier}/connections" | []string | +| "0/" | "connections/{identifier}" | ConnectionEnd | +| "0/" | "ports/{identifier}" | CapabilityKey | +| "0/" | "channelEnds/ports/{identifier}/channels/{identifier}" | ChannelEnd | +| "0/" | "capabilities/ports/{identifier}/channels/{identifier}/key" | CapabilityKey | +| "0/" | "seqSends/ports/{identifier}/channels/{identifier}/nextSequenceSend" | uint64 | +| "0/" | "seqRecvs/ports/{identifier}/channels/{identifier}/nextSequenceRecv" | uint64 | +| "0/" | "seqAcks/ports/{identifier}/channels/{identifier}/nextSequenceAck" | uint64 | +| "0/" | "commitments/ports/{identifier}/channels/{identifier}/packets/{sequence}" | bytes | +| "0/" | "receipts/ports/{identifier}/channels/{identifier}/receipts/{sequence}" | bytes | +| "0/" | "acks/ports/{identifier}/channels/{identifier}/acknowledgements/{sequence}" | bytes | diff --git a/x/ibc/core/spec/03_state_transitions.md b/x/ibc/core/spec/03_state_transitions.md index dc70ea002c..de31957d66 100644 --- a/x/ibc/core/spec/03_state_transitions.md +++ b/x/ibc/core/spec/03_state_transitions.md @@ -4,3 +4,102 @@ order: 3 # State Transitions +The described state transitions assume successful message exection. + +## Create Client + +`MsgCreateClient` will initialize and store a `ClientState` and `ConsensusState` in the sub-store +created using the given client identifier. + +## Update Client + +`MsgUpdateClient` will update the `ClientState` and create a new `ConsensusState` for the +update height. + +## Misbehaviour + +`MsgSubmitMisbehaviour` will freeze a client. + +## Upgrade Client + +`MsgUpgradeClient` will upgrade the `ClientState` and `ConsensusState` to the update chain level +parameters and if applicable will update to the new light client implementation. + +## Client Update Proposal + +An Update Client Proposal will unfreeze a client and set an updated `ClientState` and a new +`ConsensusState`. + +## Connection Open Init + +`MsgConnectionOpenInit` will initialize a connection state in INIT. + +## Connection Open Try + +`MsgConnectionOpenTry` will initialize or update a connection state to be in TRYOPEN. + +## Connection Open Ack + +`MsgConnectionOpenAck` will update a connection state from INIT or TRYOPEN to be in OPEN. + +## Connection Open Confirm + +`MsgConnectionOpenAck` will update a connection state from TRYOPEN to OPEN. + +## Channel Open Init + +`MsgChannelOpenInit` will initialize a channel state in INIT. It will create a channel capability +and set all Send, Receive and Ack Sequences to 1 for the channel. + +## Channel Open Try + +`MsgChannelOpenTry` will initialize or update a channel state to be in TRYOPEN. If the channel +is being initialized, It will create a channel capability and set all Send, Receive and Ack +Sequences to 1 for the channel. + +## Channel Open Ack + +`MsgChannelOpenAck` will update the channel state to OPEN. It will set the version and channel +identifier for its counterparty. + +## Channel Open Confirm + +`MsgChannelOpenConfirm` will update the channel state to OPEN. + +## Channel Close Init + +`MsgChannelCloseInit` will update the channel state to CLOSED. + +## Channel Close Confirm + +`MsgChannelCloseConfirm` will update the channel state to CLOSED. + +## Send Packet + +A application calling `ChannelKeeper.SendPacket` will incremenet the next sequence send and set +a hash of the packet as the packet commitment. + +## Receive Packet + +`MsgRecvPacket` will increment the next sequence receive for ORDERED channels and set a packet +receipt for UNORDERED channels. + +## Write Acknowledgement + +`WriteAcknowledgement` may be executed synchronously during the execution of `MsgRecvPacket` or +asynchonously by an application module. It writes an acknowledgement to the store. + +## Acknowledge Packet + +`MsgAcknowledgePacket` deletes the packet commitment and for ORDERED channels increments next +sequences ack. + +## Timeout Packet + +`MsgTimeoutPacket` deletes the packet commitment and for ORDERED channels sets the channel state +to CLOSED. + +## Timeout Packet on Channel Closure + +`MsgTimeoutOnClose` deletes the packet commitment and for ORDERED channels sets the channel state +to CLOSED. diff --git a/x/ibc/core/spec/04_messages.md b/x/ibc/core/spec/04_messages.md index fd46b5b8d1..34d68200b2 100644 --- a/x/ibc/core/spec/04_messages.md +++ b/x/ibc/core/spec/04_messages.md @@ -29,9 +29,8 @@ This message is expected to fail if: - `Signer` is empty - A light client with the provided id and type already exist -The message creates and stores a light client with the given ID and consensus type, -stores the validator set as the `Commiter` of the given consensus state and stores -both the consensus state and its commitment root (i.e app hash). +The message creates and stores a light client with an initial consensus state for the given client +identifier. ### MsgUpdateClient @@ -51,11 +50,36 @@ This message is expected to fail if: - `Header` is empty or invalid - `Signer` is empty - A `ClientState` hasn't been created for the given ID -- the header's client type is different from the registered one -- the client is frozen due to misbehaviour and cannot be updated +- The client is frozen due to misbehaviour and cannot be updated +- The header fails to provide a valid update for the client -The message validates the header and updates the consensus state with the new -height, commitment root and validator sets, which are then stored. +The message validates the header and updates the client state and consensus state for the +header height. + +### MsgUpgradeClient +```go +type MsgUpgradeClient struct { + ClientId string + ClientState *types.Any // proto-packed client state + UpgradeHeight *Height + ProofUpgrade []byte + Signer string +} +``` + +This message is expected to fail if: + +- `ClientId` is invalid (not alphanumeric or not within 10-20 characters) +- `ClientState` is empty or invalid +- `UpgradeHeight` is empty or zero +- `ProofUpgrade` is empty +- `Signer` is empty +- A `ClientState` hasn't been created for the given ID +- The client is frozen due to misbehaviour and cannot be upgraded +- The upgrade proof fails + +The message upgrades the client state and consensus state upon successful validation of a +chain upgrade. ### MsgSubmitMisbehaviour @@ -77,8 +101,7 @@ This message is expected to fail if: - A `ClientState` hasn't been created for the given ID - `Misbehaviour` check failed -The message validates the header and updates the consensus state with the new -height, commitment root and validator sets, which are then stored. +The message verifies the misbehaviour and freezes the client. ## ICS 03 - Connection @@ -432,7 +455,7 @@ This message is expected to fail if: - `Packet` fails basic validation - `Proof` does not prove that the packet has not been received on the counterparty chain. -The message times out a packet on chain B. +The message times out a packet that was sent on chain A and never received on chain B. ### MsgTimeoutOnClose @@ -461,7 +484,7 @@ This message is expected to fail if: - `Proof` does not prove that the packet has not been received on the counterparty chain. - `ProofClose` does not prove that the counterparty channel end has been closed. -The message times out a packet on chain B. +The message times out a packet that was sent on chain A and never received on chain B. ### MsgAcknowledgement @@ -486,4 +509,4 @@ This message is expected to fail if: - `Acknowledgement` is empty - `Proof` does not prove that the counterparty received the `Packet`. -The message receives a packet on chain A. +The message acknowledges that the packet sent from chainA was received on chain B. diff --git a/x/ibc/core/spec/05_callbacks.md b/x/ibc/core/spec/05_callbacks.md index 8d81554c51..c276ae370e 100644 --- a/x/ibc/core/spec/05_callbacks.md +++ b/x/ibc/core/spec/05_callbacks.md @@ -4,7 +4,8 @@ order: 5 # Callbacks -Application modules implementing the IBC module must implement the following callbacks as found in [05-port](../core/05-port/types/module.go). +Application modules implementing the IBC module must implement the following callbacks as found in [05-port](../05-port/types/module.go). +More information on how to implement these callbacks can be found in the [implementation guide](../../../../docs/ibc/custom.md). ```go // IBCModule defines an interface that implements all the callbacks @@ -59,6 +60,7 @@ type IBCModule interface { ) error // OnRecvPacket must return the acknowledgement bytes + // In the case of an asynchronous acknowledgement, nil should be returned. OnRecvPacket( ctx sdk.Context, packet channeltypes.Packet, From db09e516131b1f02181ffade8a2e991f00ec5ac5 Mon Sep 17 00:00:00 2001 From: Marko Date: Tue, 27 Oct 2020 16:46:57 +0100 Subject: [PATCH 12/27] ci: upload coverage once (#7690) --- .codecov.yml | 2 - .github/workflows/test.yml | 319 ++++++++----------------------------- version/command.go | 6 +- 3 files changed, 71 insertions(+), 256 deletions(-) diff --git a/.codecov.yml b/.codecov.yml index bd5979393c..e17633a5d3 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -7,8 +7,6 @@ coverage: precision: 2 round: down range: 70...100 - notify: - after_n_builds: 4 status: # Learn more at https://docs.codecov.io/docs/commit-status diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 33968233fe..1976f21f0c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -57,46 +57,41 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: actions/setup-go@v2.1.3 - with: - go-version: 1.15 - - name: Display go version - run: go version - name: Create a file with all the pkgs run: go list ./... > pkgs.txt - name: Split pkgs into 4 files - run: split -n l/4 --additional-suffix=.txt ./pkgs.txt + run: split -d -n l/4 pkgs.txt pkgs.txt.part. # cache multiple - uses: actions/upload-artifact@v2 with: - name: "${{ github.sha }}-aa" - path: ./xaa.txt + name: "${{ github.sha }}-00" + path: ./pkgs.txt.part.00 - uses: actions/upload-artifact@v2 with: - name: "${{ github.sha }}-ab" - path: ./xab.txt + name: "${{ github.sha }}-01" + path: ./pkgs.txt.part.01 - uses: actions/upload-artifact@v2 with: - name: "${{ github.sha }}-ac" - path: ./xac.txt + name: "${{ github.sha }}-02" + path: ./pkgs.txt.part.02 - uses: actions/upload-artifact@v2 with: - name: "${{ github.sha }}-ad" - path: ./xad.txt + name: "${{ github.sha }}-03" + path: ./pkgs.txt.part.03 - test-coverage-run-1: + tests: runs-on: ubuntu-latest needs: split-test-files - timeout-minutes: 15 + strategy: + fail-fast: false + matrix: + part: ["00", "01", "02", "03"] steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2.1.3 with: go-version: 1.15 - - name: Display go version - run: go version - uses: technote-space/get-diff-action@v4 - id: git_diff with: PATTERNS: | **/**.go @@ -104,11 +99,46 @@ jobs: go.sum - uses: actions/download-artifact@v2 with: - name: "${{ github.sha }}-aa" + name: "${{ github.sha }}-${{ matrix.part }}" if: env.GIT_DIFF - name: test & coverage report creation run: | - cat xaa.txt | xargs go test -mod=readonly -timeout 15m -coverprofile=coverage.txt -covermode=atomic -tags='norace ledger test_ledger_mock' + cat pkgs.txt.part.${{ matrix.part }} | xargs go test -mod=readonly -timeout 30m -coverprofile=${{ matrix.part }}profile.out -covermode=atomic -tags='norace ledger test_ledger_mock' + if: env.GIT_DIFF + - uses: actions/upload-artifact@v2 + with: + name: "${{ github.sha }}-${{ matrix.part }}-coverage" + path: ./${{ matrix.part }}profile.out + + upload-coverage-report: + runs-on: ubuntu-latest + needs: tests + steps: + - uses: actions/checkout@v2 + - uses: technote-space/get-diff-action@v4 + with: + PATTERNS: | + **/**.go + go.mod + go.sum + - uses: actions/download-artifact@v2 + with: + name: "${{ github.sha }}-00-coverage" + if: env.GIT_DIFF + - uses: actions/download-artifact@v2 + with: + name: "${{ github.sha }}-01-coverage" + if: env.GIT_DIFF + - uses: actions/download-artifact@v2 + with: + name: "${{ github.sha }}-02-coverage" + if: env.GIT_DIFF + - uses: actions/download-artifact@v2 + with: + name: "${{ github.sha }}-03-coverage" + if: env.GIT_DIFF + - run: | + cat ./*profile.out | grep -v "mode: atomic" >> coverage.txt if: env.GIT_DIFF - name: filter out DONTCOVER run: | @@ -121,24 +151,24 @@ jobs: sed -i.bak "/$(echo $filename | sed 's/\//\\\//g')/d" coverage.txt done if: env.GIT_DIFF - - uses: codecov/codecov-action@v1.0.14 + - uses: codecov/codecov-action@v1.0.13 with: file: ./coverage.txt if: env.GIT_DIFF - test-coverage-run-2: + test-race: runs-on: ubuntu-latest needs: split-test-files - timeout-minutes: 15 + strategy: + fail-fast: false + matrix: + part: ["00", "01", "02", "03"] steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2.1.3 with: go-version: 1.15 - - name: Display go version - run: go version - uses: technote-space/get-diff-action@v4 - id: git_diff with: PATTERNS: | **/**.go @@ -146,235 +176,20 @@ jobs: go.sum - uses: actions/download-artifact@v2 with: - name: "${{ github.sha }}-ab" + name: "${{ github.sha }}-${{ matrix.part }}" if: env.GIT_DIFF - name: test & coverage report creation run: | - cat xab.txt | xargs go test -mod=readonly -timeout 15m -coverprofile=coverage.txt -covermode=atomic -tags='norace ledger test_ledger_mock' - if: env.GIT_DIFF - - name: filter out DONTCOVER - run: | - excludelist="$(find ./ -type f -name '*.go' | xargs grep -l 'DONTCOVER')" - excludelist+=" $(find ./ -type f -name '*.pb.go')" - excludelist+=" $(find ./ -type f -path './tests/mocks/*.go')" - for filename in ${excludelist}; do - filename=$(echo $filename | sed 's/^./github.com\/cosmos\/cosmos-sdk/g') - echo "Excluding ${filename} from coverage report..." - sed -i.bak "/$(echo $filename | sed 's/\//\\\//g')/d" coverage.txt - done - if: env.GIT_DIFF - - uses: codecov/codecov-action@v1.0.14 - with: - file: ./coverage.txt - if: env.GIT_DIFF - - test-coverage-run-3: - runs-on: ubuntu-latest - needs: split-test-files - timeout-minutes: 15 - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2.1.3 - with: - go-version: 1.15 - - name: Display go version - run: go version - - uses: technote-space/get-diff-action@v4 - id: git_diff - with: - PATTERNS: | - **/**.go - go.mod - go.sum - - uses: actions/download-artifact@v2 - with: - name: "${{ github.sha }}-ac" - if: env.GIT_DIFF - - name: test & coverage report creation - run: | - cat xac.txt | xargs go test -mod=readonly -timeout 15m -coverprofile=coverage.txt -covermode=atomic -tags='norace ledger test_ledger_mock' - if: env.GIT_DIFF - - name: filter out DONTCOVER - run: | - excludelist="$(find ./ -type f -name '*.go' | xargs grep -l 'DONTCOVER')" - excludelist+=" $(find ./ -type f -name '*.pb.go')" - excludelist+=" $(find ./ -type f -path './tests/mocks/*.go')" - for filename in ${excludelist}; do - filename=$(echo $filename | sed 's/^./github.com\/cosmos\/cosmos-sdk/g') - echo "Excluding ${filename} from coverage report..." - sed -i.bak "/$(echo $filename | sed 's/\//\\\//g')/d" coverage.txt - done - if: env.GIT_DIFF - - uses: codecov/codecov-action@v1.0.14 - with: - file: ./coverage.txt - if: env.GIT_DIFF - - test-coverage-run-4: - runs-on: ubuntu-latest - needs: split-test-files - timeout-minutes: 15 - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2.1.3 - with: - go-version: 1.15 - - name: Display go version - run: go version - - uses: technote-space/get-diff-action@v4 - id: git_diff - with: - PATTERNS: | - **/**.go - go.mod - go.sum - - uses: actions/download-artifact@v2 - with: - name: "${{ github.sha }}-ad" - if: env.GIT_DIFF - - name: test & coverage report creation - run: | - cat xad.txt | xargs go test -mod=readonly -timeout 15m -coverprofile=coverage.txt -covermode=atomic -tags='norace ledger test_ledger_mock' - if: env.GIT_DIFF - - name: filter out DONTCOVER - run: | - excludelist="$(find ./ -type f -name '*.go' | xargs grep -l 'DONTCOVER')" - excludelist+=" $(find ./ -type f -name '*.pb.go')" - excludelist+=" $(find ./ -type f -path './tests/mocks/*.go')" - for filename in ${excludelist}; do - filename=$(echo $filename | sed 's/^./github.com\/cosmos\/cosmos-sdk/g') - echo "Excluding ${filename} from coverage report..." - sed -i.bak "/$(echo $filename | sed 's/\//\\\//g')/d" coverage.txt - done - if: env.GIT_DIFF - - uses: codecov/codecov-action@v1.0.14 - with: - file: ./coverage.txt - if: env.GIT_DIFF - - test-race-1: - runs-on: ubuntu-latest - needs: split-test-files - timeout-minutes: 30 - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2.1.3 - with: - go-version: 1.15 - - name: Display go version - run: go version - - uses: technote-space/get-diff-action@v4 - id: git_diff - with: - PATTERNS: | - **/**.go - go.mod - go.sum - - uses: actions/download-artifact@v2 - with: - name: "${{ github.sha }}-aa" - if: env.GIT_DIFF - - name: Run tests with race detector - run: cat xaa.txt | xargs go test -mod=readonly -json -timeout 30m -race -tags='cgo ledger test_ledger_mock' > xaa-race-output.txt + cat pkgs.txt.part.${{ matrix.part }} | xargs go test -mod=readonly -timeout 30m -race -tags='cgo ledger test_ledger_mock' > ${{ matrix.part }}-race-output.txt if: env.GIT_DIFF - uses: actions/upload-artifact@v2 with: - name: "${{ github.sha }}-aa-race-output" - path: ./xaa-race-output.txt - - test-race-2: - runs-on: ubuntu-latest - needs: split-test-files - timeout-minutes: 30 - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2.1.3 - with: - go-version: 1.15 - - name: Display go version - run: go version - - uses: technote-space/get-diff-action@v4 - id: git_diff - with: - PATTERNS: | - **/**.go - go.mod - go.sum - - uses: actions/download-artifact@v2 - with: - name: "${{ github.sha }}-ab" - if: env.GIT_DIFF - - name: Run tests with race detector - run: cat xab.txt | xargs go test -mod=readonly -json -timeout 30m -race -tags='cgo ledger test_ledger_mock' > xab-race-output.txt - if: env.GIT_DIFF - - uses: actions/upload-artifact@v2 - with: - name: "${{ github.sha }}-ab-race-output" - path: ./xab-race-output.txt - - test-race-3: - runs-on: ubuntu-latest - needs: split-test-files - timeout-minutes: 30 - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2.1.3 - with: - go-version: 1.15 - - name: Display go version - run: go version - - uses: technote-space/get-diff-action@v4 - id: git_diff - with: - PATTERNS: | - **/**.go - go.mod - go.sum - - uses: actions/download-artifact@v2 - with: - name: "${{ github.sha }}-ac" - if: env.GIT_DIFF - - name: Run tests with race detector - run: cat xac.txt | xargs go test -mod=readonly -json -timeout 30m -race -tags='cgo ledger test_ledger_mock' > xac-race-output.txt - if: env.GIT_DIFF - - uses: actions/upload-artifact@v2 - with: - name: "${{ github.sha }}-ac-race-output" - path: ./xac-race-output.txt - - test-race-4: - runs-on: ubuntu-latest - needs: split-test-files - timeout-minutes: 30 - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2.1.3 - with: - go-version: 1.15 - - name: Display go version - run: go version - - uses: technote-space/get-diff-action@v4 - id: git_diff - with: - PATTERNS: | - **/**.go - go.mod - go.sum - - uses: actions/download-artifact@v2 - with: - name: "${{ github.sha }}-ad" - if: env.GIT_DIFF - - name: Run tests with race detector - run: cat xad.txt | xargs go test -mod=readonly -json -timeout 30m -race -tags='cgo ledger test_ledger_mock' > xad-race-output.txt - if: env.GIT_DIFF - - uses: actions/upload-artifact@v2 - with: - name: "${{ github.sha }}-ad-race-output" - path: ./xad-race-output.txt + name: "${{ github.sha }}-${{ matrix.part }}-race-output" + path: ./${{ matrix.part }}-race-output.txt race-detector-report: runs-on: ubuntu-latest - needs: [test-race-1, test-race-2, test-race-3, test-race-4, install-tparse] + needs: [test-race, install-tparse] timeout-minutes: 5 steps: - uses: actions/checkout@v2 @@ -387,19 +202,19 @@ jobs: go.sum - uses: actions/download-artifact@v2 with: - name: "${{ github.sha }}-aa-race-output" + name: "${{ github.sha }}-00-race-output" if: env.GIT_DIFF - uses: actions/download-artifact@v2 with: - name: "${{ github.sha }}-ab-race-output" + name: "${{ github.sha }}-01-race-output" if: env.GIT_DIFF - uses: actions/download-artifact@v2 with: - name: "${{ github.sha }}-ac-race-output" + name: "${{ github.sha }}-02-race-output" if: env.GIT_DIFF - uses: actions/download-artifact@v2 with: - name: "${{ github.sha }}-ad-race-output" + name: "${{ github.sha }}-03-race-output" if: env.GIT_DIFF - uses: actions/cache@v2.1.2 with: @@ -407,7 +222,7 @@ jobs: key: ${{ runner.os }}-go-tparse-binary if: env.GIT_DIFF - name: Generate test report (go test -race) - run: cat xa*-race-output.txt | ~/go/bin/tparse + run: cat ./*-race-output.txt | ~/go/bin/tparse if: env.GIT_DIFF liveness-test: diff --git a/version/command.go b/version/command.go index c4c9cf7874..9291c0a824 100644 --- a/version/command.go +++ b/version/command.go @@ -23,8 +23,10 @@ func NewVersionCommand() *cobra.Command { return nil } - var bz []byte - var err error + var ( + bz []byte + err error + ) output, _ := cmd.Flags().GetString(cli.OutputFlag) switch strings.ToLower(output) { From 7792ccf3420aa41a1e54dc9ad679ea5bd7b23625 Mon Sep 17 00:00:00 2001 From: Marko Date: Tue, 27 Oct 2020 18:13:17 +0100 Subject: [PATCH 13/27] docker fix (#7692) --- .github/workflows/docker.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index e519490d78..9456ebf302 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -33,6 +33,7 @@ jobs: TAGS="${DOCKER_IMAGE}:${VERSION}" if [[ $VERSION =~ ^v[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then TAGS="$TAGS,${DOCKER_IMAGE}:${VERSION}" + fi echo ::set-output name=version::${VERSION} echo ::set-output name=tags::${TAGS} echo ::set-output name=created::$(date -u +'%Y-%m-%dT%H:%M:%SZ') From 426d1953871ea34149e67c9a9b054bb8ffd50e99 Mon Sep 17 00:00:00 2001 From: Federico Kunze <31522760+fedekunze@users.noreply.github.com> Date: Wed, 28 Oct 2020 10:41:54 +0100 Subject: [PATCH 14/27] ibc: Connection Version changed from string to proto definition (#7644) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ibc: Version to proto Any * change version string to struct * various version fixes * fix build * reorder code * update spec * rename to ProtoVersionsToExported and ExportedVersionsToProto Co-authored-by: Colin Axner Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- proto/ibc/core/connection/v1/connection.proto | 4 +- proto/ibc/core/connection/v1/tx.proto | 6 +- x/ibc/core/03-connection/client/cli/tx.go | 60 +++- .../03-connection/keeper/grpc_query_test.go | 8 +- x/ibc/core/03-connection/keeper/handshake.go | 38 +-- .../03-connection/keeper/handshake_test.go | 44 ++- .../core/03-connection/keeper/keeper_test.go | 9 +- .../03-connection/simulation/decoder_test.go | 2 +- x/ibc/core/03-connection/types/codec.go | 13 +- x/ibc/core/03-connection/types/connection.go | 6 +- .../core/03-connection/types/connection.pb.go | 141 +++++---- .../03-connection/types/connection_test.go | 12 +- .../core/03-connection/types/genesis_test.go | 8 +- x/ibc/core/03-connection/types/msgs.go | 10 +- x/ibc/core/03-connection/types/msgs_test.go | 42 +-- x/ibc/core/03-connection/types/tx.pb.go | 218 +++++++------ x/ibc/core/03-connection/types/version.go | 288 +++++++----------- .../core/03-connection/types/version_test.go | 111 +++---- .../core/04-channel/keeper/handshake_test.go | 16 +- x/ibc/core/exported/connection.go | 9 +- x/ibc/core/genesis_test.go | 6 +- x/ibc/core/keeper/msg_server.go | 2 +- x/ibc/core/simulation/decoder_test.go | 2 +- x/ibc/core/spec/01_concepts.md | 24 +- .../06-solomachine/types/client_state_test.go | 2 +- .../06-solomachine/types/codec_test.go | 4 +- .../09-localhost/types/client_state_test.go | 4 +- x/ibc/testing/chain.go | 11 +- 28 files changed, 541 insertions(+), 559 deletions(-) diff --git a/proto/ibc/core/connection/v1/connection.proto b/proto/ibc/core/connection/v1/connection.proto index 37c7609c37..0cf4f2092e 100644 --- a/proto/ibc/core/connection/v1/connection.proto +++ b/proto/ibc/core/connection/v1/connection.proto @@ -18,7 +18,7 @@ message ConnectionEnd { string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; // IBC version which can be utilised to determine encodings or protocols for // channels or packets utilising this connection - repeated string versions = 2; + repeated Version versions = 2; // current state of the connection end. State state = 3; // counterparty chain associated with this connection. @@ -35,7 +35,7 @@ message IdentifiedConnection { string client_id = 2 [(gogoproto.moretags) = "yaml:\"client_id\""]; // IBC version which can be utilised to determine encodings or protocols for // channels or packets utilising this connection - repeated string versions = 3; + repeated Version versions = 3; // current state of the connection end. State state = 4; // counterparty chain associated with this connection. diff --git a/proto/ibc/core/connection/v1/tx.proto b/proto/ibc/core/connection/v1/tx.proto index 86f87b53e7..8de521886b 100644 --- a/proto/ibc/core/connection/v1/tx.proto +++ b/proto/ibc/core/connection/v1/tx.proto @@ -32,7 +32,7 @@ message MsgConnectionOpenInit { string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; string connection_id = 2 [(gogoproto.moretags) = "yaml:\"connection_id\""]; Counterparty counterparty = 3 [(gogoproto.nullable) = false]; - string version = 4; + Version version = 4; string signer = 5; } @@ -50,7 +50,7 @@ message MsgConnectionOpenTry { string counterparty_chosen_connection_id = 3 [(gogoproto.moretags) = "yaml:\"counterparty_chosen_connection_id\""]; google.protobuf.Any client_state = 4 [(gogoproto.moretags) = "yaml:\"client_state\""]; Counterparty counterparty = 5 [(gogoproto.nullable) = false]; - repeated string counterparty_versions = 6 [(gogoproto.moretags) = "yaml:\"counterparty_versions\""]; + repeated Version counterparty_versions = 6 [(gogoproto.moretags) = "yaml:\"counterparty_versions\""]; ibc.core.client.v1.Height proof_height = 7 [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; // proof of the initialization the connection on Chain A: `UNITIALIZED -> @@ -76,7 +76,7 @@ message MsgConnectionOpenAck { string connection_id = 1 [(gogoproto.moretags) = "yaml:\"connection_id\""]; string counterparty_connection_id = 2 [(gogoproto.moretags) = "yaml:\"counterparty_connection_id\""]; - string version = 3; + Version version = 3; google.protobuf.Any client_state = 4 [(gogoproto.moretags) = "yaml:\"client_state\""]; ibc.core.client.v1.Height proof_height = 5 [(gogoproto.moretags) = "yaml:\"proof_height\"", (gogoproto.nullable) = false]; diff --git a/x/ibc/core/03-connection/client/cli/tx.go b/x/ibc/core/03-connection/client/cli/tx.go index e67ae94f42..9526c5f8c0 100644 --- a/x/ibc/core/03-connection/client/cli/tx.go +++ b/x/ibc/core/03-connection/client/cli/tx.go @@ -2,13 +2,16 @@ package cli import ( "fmt" + "io/ioutil" "strings" + "github.com/pkg/errors" "github.com/spf13/cobra" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" + "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/version" clienttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" "github.com/cosmos/cosmos-sdk/x/ibc/core/03-connection/client/utils" @@ -53,7 +56,7 @@ func NewConnectionOpenInitCmd() *cobra.Command { return err } - var encodedVersion string + var version *types.Version versionIdentifier, _ := cmd.Flags().GetString(flagVersionIdentifier) if versionIdentifier != "" { @@ -64,16 +67,12 @@ func NewConnectionOpenInitCmd() *cobra.Command { features = strings.Split(versionFeatures, ",") } - version := types.NewVersion(versionIdentifier, features) - encodedVersion, err = version.Encode() - if err != nil { - return err - } + version = types.NewVersion(versionIdentifier, features) } msg := types.NewMsgConnectionOpenInit( connectionID, clientID, counterpartyConnectionID, counterpartyClientID, - counterpartyPrefix, encodedVersion, clientCtx.GetFromAddress(), + counterpartyPrefix, version, clientCtx.GetFromAddress(), ) if err := msg.ValidateBasic(); err != nil { @@ -99,9 +98,9 @@ func NewConnectionOpenTryCmd() *cobra.Command { cmd := &cobra.Command{ Use: strings.TrimSpace(`open-try [connection-id] [client-id] [counterparty-connection-id] [counterparty-client-id] [path/to/counterparty_prefix.json] [path/to/client_state.json] -[counterparty-versions] [consensus-height] [proof-height] [path/to/proof_init.json] [path/to/proof_client.json] [path/to/proof_consensus.json]`), +[path/to/counterparty_version1.json,path/to/counterparty_version2.json...] [consensus-height] [proof-height] [path/to/proof_init.json] [path/to/proof_client.json] [path/to/proof_consensus.json]`), Short: "initiate connection handshake between two chains", - Long: "Initialize a connection on chain A with a given counterparty chain B", + Long: "Initialize a connection on chain A with a given counterparty chain B. Provide counterparty versions separated by commas", Example: fmt.Sprintf( `%s tx %s %s open-try connection-id] [client-id] \ [counterparty-connection-id] [counterparty-client-id] [path/to/counterparty_prefix.json] [path/to/client_state.json]\ @@ -132,8 +131,28 @@ func NewConnectionOpenTryCmd() *cobra.Command { return err } - // TODO: parse strings? - counterpartyVersions := args[6] + cdc := codec.NewProtoCodec(clientCtx.InterfaceRegistry) + + versionsStr := strings.Split(args[6], ",") + counterpartyVersions := make([]*types.Version, len(versionsStr)) + + for _, ver := range versionsStr { + + // attempt to unmarshal version + version := &types.Version{} + if err := cdc.UnmarshalJSON([]byte(ver), version); err != nil { + + // check for file path if JSON input is not provided + contents, err := ioutil.ReadFile(ver) + if err != nil { + return errors.Wrap(err, "neither JSON input nor path to .json file for version were provided") + } + + if err := cdc.UnmarshalJSON(contents, version); err != nil { + return errors.Wrap(err, "error unmarshalling version file") + } + } + } consensusHeight, err := clienttypes.ParseHeight(args[7]) if err != nil { @@ -161,7 +180,7 @@ func NewConnectionOpenTryCmd() *cobra.Command { msg := types.NewMsgConnectionOpenTry( connectionID, provedID, clientID, counterpartyConnectionID, counterpartyClientID, - counterpartyClient, counterpartyPrefix, []string{counterpartyVersions}, + counterpartyClient, counterpartyPrefix, counterpartyVersions, proofInit, proofClient, proofConsensus, proofHeight, consensusHeight, clientCtx.GetFromAddress(), ) @@ -233,7 +252,22 @@ func NewConnectionOpenAckCmd() *cobra.Command { return err } - version := args[8] + cdc := codec.NewProtoCodec(clientCtx.InterfaceRegistry) + + // attempt to unmarshal version + version := &types.Version{} + if err := cdc.UnmarshalJSON([]byte(args[8]), version); err != nil { + + // check for file path if JSON input is not provided + contents, err := ioutil.ReadFile(args[8]) + if err != nil { + return errors.Wrap(err, "neither JSON input nor path to .json file for version were provided") + } + + if err := cdc.UnmarshalJSON(contents, version); err != nil { + return errors.Wrap(err, "error unmarshalling version file") + } + } msg := types.NewMsgConnectionOpenAck( connectionID, counterpartyConnectionID, counterpartyClient, proofTry, proofClient, proofConsensus, proofHeight, diff --git a/x/ibc/core/03-connection/keeper/grpc_query_test.go b/x/ibc/core/03-connection/keeper/grpc_query_test.go index 69443a1c03..5a8122e279 100644 --- a/x/ibc/core/03-connection/keeper/grpc_query_test.go +++ b/x/ibc/core/03-connection/keeper/grpc_query_test.go @@ -52,7 +52,7 @@ func (suite *KeeperTestSuite) TestQueryConnection() { connB := suite.chainB.GetFirstTestConnection(clientB, clientA) counterparty := types.NewCounterparty(clientB, connB.ID, suite.chainB.GetPrefix()) - expConnection = types.NewConnectionEnd(types.INIT, clientA, counterparty, types.GetCompatibleEncodedVersions()) + expConnection = types.NewConnectionEnd(types.INIT, clientA, counterparty, types.ExportedVersionsToProto(types.GetCompatibleVersions())) suite.chainA.App.IBCKeeper.ConnectionKeeper.SetConnection(suite.chainA.GetContext(), connA.ID, expConnection) req = &types.QueryConnectionRequest{ @@ -121,9 +121,9 @@ func (suite *KeeperTestSuite) TestQueryConnections() { counterparty2 := types.NewCounterparty(clientB, connB1.ID, suite.chainB.GetPrefix()) counterparty3 := types.NewCounterparty(clientB1, connB2.ID, suite.chainB.GetPrefix()) - conn1 := types.NewConnectionEnd(types.OPEN, clientA, counterparty1, types.GetCompatibleEncodedVersions()) - conn2 := types.NewConnectionEnd(types.INIT, clientA, counterparty2, types.GetCompatibleEncodedVersions()) - conn3 := types.NewConnectionEnd(types.OPEN, clientA1, counterparty3, types.GetCompatibleEncodedVersions()) + conn1 := types.NewConnectionEnd(types.OPEN, clientA, counterparty1, types.ExportedVersionsToProto(types.GetCompatibleVersions())) + conn2 := types.NewConnectionEnd(types.INIT, clientA, counterparty2, types.ExportedVersionsToProto(types.GetCompatibleVersions())) + conn3 := types.NewConnectionEnd(types.OPEN, clientA1, counterparty3, types.ExportedVersionsToProto(types.GetCompatibleVersions())) iconn1 := types.NewIdentifiedConnection(connA0.ID, conn1) iconn2 := types.NewIdentifiedConnection(connA1.ID, conn2) diff --git a/x/ibc/core/03-connection/keeper/handshake.go b/x/ibc/core/03-connection/keeper/handshake.go index 56cb9bf362..0fce7d9006 100644 --- a/x/ibc/core/03-connection/keeper/handshake.go +++ b/x/ibc/core/03-connection/keeper/handshake.go @@ -3,6 +3,8 @@ package keeper import ( "bytes" + "github.com/gogo/protobuf/proto" + "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -20,24 +22,24 @@ func (k Keeper) ConnOpenInit( connectionID, // identifier clientID string, counterparty types.Counterparty, // desiredCounterpartyConnectionIdentifier, counterpartyPrefix, counterpartyClientIdentifier - version string, + version *types.Version, ) error { _, found := k.GetConnection(ctx, connectionID) if found { return sdkerrors.Wrap(types.ErrConnectionExists, connectionID) } - versions := types.GetCompatibleEncodedVersions() - if version != "" { + versions := types.GetCompatibleVersions() + if version != nil { if !types.IsSupportedVersion(version) { return sdkerrors.Wrap(types.ErrInvalidVersion, "version is not supported") } - versions = []string{version} + versions = []exported.Version{version} } // connection defines chain A's ConnectionEnd - connection := types.NewConnectionEnd(types.INIT, clientID, counterparty, versions) + connection := types.NewConnectionEnd(types.INIT, clientID, counterparty, types.ExportedVersionsToProto(versions)) k.SetConnection(ctx, connectionID, connection) if err := k.addConnectionToClient(ctx, clientID, connectionID); err != nil { @@ -66,7 +68,7 @@ func (k Keeper) ConnOpenTry( counterparty types.Counterparty, // counterpartyConnectionIdentifier, counterpartyPrefix and counterpartyClientIdentifier clientID string, // clientID of chainA clientState exported.ClientState, // clientState that chainA has for chainB - counterpartyVersions []string, // supported versions of chain A + counterpartyVersions []exported.Version, // supported versions of chain A proofInit []byte, // proof that chainA stored connectionEnd in state (on ConnOpenInit) proofClient []byte, // proof that chainA stored a light client of chainB proofConsensus []byte, // proof that chainA stored chainB's consensus state at consensus height @@ -105,7 +107,7 @@ func (k Keeper) ConnOpenTry( // NOTE: chain A's counterparty is chain B (i.e where this code is executed) prefix := k.GetCommitmentPrefix() expectedCounterparty := types.NewCounterparty(clientID, counterpartyChosenConnectionID, commitmenttypes.NewMerklePrefix(prefix.Bytes())) - expectedConnection := types.NewConnectionEnd(types.INIT, counterparty.ClientId, expectedCounterparty, counterpartyVersions) + expectedConnection := types.NewConnectionEnd(types.INIT, counterparty.ClientId, expectedCounterparty, types.ExportedVersionsToProto(counterpartyVersions)) // If connection already exists for desiredConnectionID, ensure that the existing connection's // counterparty is chainA and connection is on INIT stage. @@ -120,9 +122,9 @@ func (k Keeper) ConnOpenTry( return sdkerrors.Wrap(types.ErrInvalidConnection, "cannot relay connection attempt") } - supportedVersions := types.GetCompatibleEncodedVersions() + supportedVersions := types.GetCompatibleVersions() if len(previousConnection.Versions) != 0 { - supportedVersions = previousConnection.Versions + supportedVersions = previousConnection.GetVersions() } // chain B picks a version from Chain A's available versions that is compatible @@ -134,7 +136,7 @@ func (k Keeper) ConnOpenTry( } // connection defines chain B's ConnectionEnd - connection := types.NewConnectionEnd(types.TRYOPEN, clientID, counterparty, []string{version}) + connection := types.NewConnectionEnd(types.TRYOPEN, clientID, counterparty, []*types.Version{version}) // Check that ChainA committed expectedConnectionEnd to its state if err := k.VerifyConnectionState( @@ -179,7 +181,7 @@ func (k Keeper) ConnOpenAck( ctx sdk.Context, connectionID string, clientState exported.ClientState, // client state for chainA on chainB - encodedVersion, // version that ChainB chose in ConnOpenTry + version *types.Version, // version that ChainB chose in ConnOpenTry counterpartyConnectionID string, proofTry []byte, // proof that connectionEnd was added to ChainB state in ConnOpenTry proofClient []byte, // proof of client state on chainB for chainA @@ -222,18 +224,18 @@ func (k Keeper) ConnOpenAck( ) // if the connection is INIT then the provided version must be supproted - case connection.State == types.INIT && !types.IsSupportedVersion(encodedVersion): + case connection.State == types.INIT && !types.IsSupportedVersion(version): return sdkerrors.Wrapf( types.ErrInvalidConnectionState, - "connection state is in INIT but the provided encoded version is not supported %s", encodedVersion, + "connection state is in INIT but the provided version is not supported %s", version, ) - // if the connection is in TRYOPEN then the encoded version must be the only set version in the + // if the connection is in TRYOPEN then the version must be the only set version in the // retreived connection state. - case connection.State == types.TRYOPEN && (len(connection.Versions) != 1 || connection.Versions[0] != encodedVersion): + case connection.State == types.TRYOPEN && (len(connection.Versions) != 1 || !proto.Equal(connection.Versions[0], version)): return sdkerrors.Wrapf( types.ErrInvalidConnectionState, - "connection state is in TRYOPEN but the provided encoded version (%s) is not set in the previous connection %s", encodedVersion, connection, + "connection state is in TRYOPEN but the provided version (%s) is not set in the previous connection versions %s", version, connection.Versions, ) } @@ -250,7 +252,7 @@ func (k Keeper) ConnOpenAck( prefix := k.GetCommitmentPrefix() expectedCounterparty := types.NewCounterparty(connection.ClientId, connectionID, commitmenttypes.NewMerklePrefix(prefix.Bytes())) - expectedConnection := types.NewConnectionEnd(types.TRYOPEN, connection.Counterparty.ClientId, expectedCounterparty, []string{encodedVersion}) + expectedConnection := types.NewConnectionEnd(types.TRYOPEN, connection.Counterparty.ClientId, expectedCounterparty, []*types.Version{version}) // Ensure that ChainB stored expected connectionEnd in its state during ConnOpenTry if err := k.VerifyConnectionState( @@ -280,7 +282,7 @@ func (k Keeper) ConnOpenAck( // Update connection state to Open connection.State = types.OPEN - connection.Versions = []string{encodedVersion} + connection.Versions = []*types.Version{version} connection.Counterparty.ConnectionId = counterpartyConnectionID k.SetConnection(ctx, connectionID, connection) return nil diff --git a/x/ibc/core/03-connection/keeper/handshake_test.go b/x/ibc/core/03-connection/keeper/handshake_test.go index 117965e6da..b677b23520 100644 --- a/x/ibc/core/03-connection/keeper/handshake_test.go +++ b/x/ibc/core/03-connection/keeper/handshake_test.go @@ -17,7 +17,7 @@ func (suite *KeeperTestSuite) TestConnOpenInit() { var ( clientA string clientB string - version string + version *types.Version emptyConnBID bool ) @@ -35,14 +35,14 @@ func (suite *KeeperTestSuite) TestConnOpenInit() { }, true}, {"success with non empty version", func() { clientA, clientB = suite.coordinator.SetupClients(suite.chainA, suite.chainB, ibctesting.Tendermint) - version = types.GetCompatibleEncodedVersions()[0] + version = types.ExportedVersionsToProto(types.GetCompatibleVersions())[0] }, true}, {"connection already exists", func() { clientA, clientB, _, _ = suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, ibctesting.Tendermint) }, false}, {"invalid version", func() { clientA, clientB = suite.coordinator.SetupClients(suite.chainA, suite.chainB, ibctesting.Tendermint) - version = "bad version" + version = &types.Version{} }, false}, {"couldn't add connection to client", func() { // swap client identifiers to result in client that does not exist @@ -55,7 +55,7 @@ func (suite *KeeperTestSuite) TestConnOpenInit() { suite.Run(tc.msg, func() { suite.SetupTest() // reset emptyConnBID = false // must be explicitly changed - version = "" // must be explicitly changed + version = nil // must be explicitly changed tc.malleate() @@ -83,7 +83,7 @@ func (suite *KeeperTestSuite) TestConnOpenTry() { var ( clientA string clientB string - versions []string + versions []exported.Version consensusHeight exported.Height counterpartyClient exported.ClientState ) @@ -198,9 +198,8 @@ func (suite *KeeperTestSuite) TestConnOpenTry() { // retrieve client state of chainA to pass as counterpartyClient counterpartyClient = suite.chainA.GetClientState(clientA) - version, err := types.NewVersion("0.0", nil).Encode() - suite.Require().NoError(err) - versions = []string{version} + version := types.NewVersion("0.0", nil) + versions = []exported.Version{version} }, false}, {"connection state verification failed", func() { clientA, clientB = suite.coordinator.SetupClients(suite.chainA, suite.chainB, ibctesting.Tendermint) @@ -274,7 +273,7 @@ func (suite *KeeperTestSuite) TestConnOpenTry() { suite.Require().True(found) connection.State = types.INIT - connection.Versions = []string{"invalid version"} + connection.Versions = []*types.Version{&types.Version{}} suite.chainB.App.IBCKeeper.ConnectionKeeper.SetConnection(suite.chainB.GetContext(), connB.ID, connection) @@ -290,9 +289,9 @@ func (suite *KeeperTestSuite) TestConnOpenTry() { tc := tc suite.Run(tc.msg, func() { - suite.SetupTest() // reset - consensusHeight = clienttypes.ZeroHeight() // must be explicitly changed in malleate - versions = types.GetCompatibleEncodedVersions() // must be explicitly changed in malleate + suite.SetupTest() // reset + consensusHeight = clienttypes.ZeroHeight() // must be explicitly changed in malleate + versions = types.GetCompatibleVersions() // must be explicitly changed in malleate tc.malleate() @@ -344,7 +343,7 @@ func (suite *KeeperTestSuite) TestConnOpenAck() { clientB string counterpartyConnectionID string consensusHeight exported.Height - version string + version *types.Version counterpartyClient exported.ClientState ) @@ -533,7 +532,7 @@ func (suite *KeeperTestSuite) TestConnOpenAck() { err = suite.coordinator.ConnOpenTry(suite.chainB, suite.chainA, connB, connA) suite.Require().NoError(err) - version = "2.0" + version = types.NewVersion("2.0", nil) }, false}, {"connection is in TRYOPEN but the set version in the connection is invalid", func() { // chainA is in TRYOPEN, chainB is in TRYOPEN @@ -556,7 +555,7 @@ func (suite *KeeperTestSuite) TestConnOpenAck() { // retrieve client state of chainB to pass as counterpartyClient counterpartyClient = suite.chainB.GetClientState(clientB) - version = "2.0" + version = types.NewVersion("2.0", nil) }, false}, {"incompatible IBC versions", func() { clientA, clientB = suite.coordinator.SetupClients(suite.chainA, suite.chainB, ibctesting.Tendermint) @@ -570,7 +569,7 @@ func (suite *KeeperTestSuite) TestConnOpenAck() { suite.Require().NoError(err) // set version to a non-compatible version - version = "(2.0,[])" + version = types.NewVersion("2.0", nil) }, false}, {"empty version", func() { clientA, clientB = suite.coordinator.SetupClients(suite.chainA, suite.chainB, ibctesting.Tendermint) @@ -583,7 +582,7 @@ func (suite *KeeperTestSuite) TestConnOpenAck() { err = suite.coordinator.ConnOpenTry(suite.chainB, suite.chainA, connB, connA) suite.Require().NoError(err) - version = "" + version = &types.Version{} }, false}, {"feature set verification failed - unsupported feature", func() { clientA, clientB = suite.coordinator.SetupClients(suite.chainA, suite.chainB, ibctesting.Tendermint) @@ -596,8 +595,7 @@ func (suite *KeeperTestSuite) TestConnOpenAck() { err = suite.coordinator.ConnOpenTry(suite.chainB, suite.chainA, connB, connA) suite.Require().NoError(err) - version, err = types.NewVersion(types.DefaultIBCVersionIdentifier, []string{"ORDER_ORDERED", "ORDER_UNORDERED", "ORDER_DAG"}).Encode() - suite.Require().NoError(err) + version = types.NewVersion(types.DefaultIBCVersionIdentifier, []string{"ORDER_ORDERED", "ORDER_UNORDERED", "ORDER_DAG"}) }, false}, {"self consensus state not found", func() { clientA, clientB = suite.coordinator.SetupClients(suite.chainA, suite.chainB, ibctesting.Tendermint) @@ -663,10 +661,10 @@ func (suite *KeeperTestSuite) TestConnOpenAck() { for _, tc := range testCases { tc := tc suite.Run(tc.msg, func() { - suite.SetupTest() // reset - version = types.GetCompatibleEncodedVersions()[0] // must be explicitly changed in malleate - consensusHeight = clienttypes.ZeroHeight() // must be explicitly changed in malleate - counterpartyConnectionID = "" // must be explicitly changed in malleate + 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 tc.malleate() diff --git a/x/ibc/core/03-connection/keeper/keeper_test.go b/x/ibc/core/03-connection/keeper/keeper_test.go index 85a22d6946..3ae867a5a0 100644 --- a/x/ibc/core/03-connection/keeper/keeper_test.go +++ b/x/ibc/core/03-connection/keeper/keeper_test.go @@ -46,10 +46,11 @@ func (suite *KeeperTestSuite) TestSetAndGetClientConnectionPaths() { _, existed := suite.chainA.App.IBCKeeper.ConnectionKeeper.GetClientConnectionPaths(suite.chainA.GetContext(), clientA) suite.False(existed) - suite.chainA.App.IBCKeeper.ConnectionKeeper.SetClientConnectionPaths(suite.chainA.GetContext(), clientA, types.GetCompatibleEncodedVersions()) + connections := []string{"connectionA", "connectionB"} + suite.chainA.App.IBCKeeper.ConnectionKeeper.SetClientConnectionPaths(suite.chainA.GetContext(), clientA, connections) paths, existed := suite.chainA.App.IBCKeeper.ConnectionKeeper.GetClientConnectionPaths(suite.chainA.GetContext(), clientA) suite.True(existed) - suite.EqualValues(types.GetCompatibleEncodedVersions(), paths) + suite.EqualValues(connections, paths) } // create 2 connections: A0 - B0, A1 - B1 @@ -60,8 +61,8 @@ func (suite KeeperTestSuite) TestGetAllConnections() { counterpartyB0 := types.NewCounterparty(clientB, connB0.ID, suite.chainB.GetPrefix()) // connection B0 counterpartyB1 := types.NewCounterparty(clientB, connB1.ID, suite.chainB.GetPrefix()) // connection B1 - conn1 := types.NewConnectionEnd(types.OPEN, clientA, counterpartyB0, types.GetCompatibleEncodedVersions()) // A0 - B0 - conn2 := types.NewConnectionEnd(types.OPEN, clientA, counterpartyB1, types.GetCompatibleEncodedVersions()) // A1 - B1 + conn1 := types.NewConnectionEnd(types.OPEN, clientA, counterpartyB0, types.ExportedVersionsToProto(types.GetCompatibleVersions())) // A0 - B0 + conn2 := types.NewConnectionEnd(types.OPEN, clientA, counterpartyB1, types.ExportedVersionsToProto(types.GetCompatibleVersions())) // A1 - B1 iconn1 := types.NewIdentifiedConnection(connA0.ID, conn1) iconn2 := types.NewIdentifiedConnection(connA1.ID, conn2) diff --git a/x/ibc/core/03-connection/simulation/decoder_test.go b/x/ibc/core/03-connection/simulation/decoder_test.go index df13c8b5f0..7e36b05a70 100644 --- a/x/ibc/core/03-connection/simulation/decoder_test.go +++ b/x/ibc/core/03-connection/simulation/decoder_test.go @@ -21,7 +21,7 @@ func TestDecodeStore(t *testing.T) { connection := types.ConnectionEnd{ ClientId: "clientidone", - Versions: []string{"1.0"}, + Versions: types.ExportedVersionsToProto(types.GetCompatibleVersions()), } paths := types.ClientPaths{ diff --git a/x/ibc/core/03-connection/types/codec.go b/x/ibc/core/03-connection/types/codec.go index 9caa35332b..c784590d0c 100644 --- a/x/ibc/core/03-connection/types/codec.go +++ b/x/ibc/core/03-connection/types/codec.go @@ -13,19 +13,18 @@ func RegisterInterfaces(registry codectypes.InterfaceRegistry) { registry.RegisterInterface( "ibc.core.connection.v1.ConnectionI", (*exported.ConnectionI)(nil), + &ConnectionEnd{}, ) registry.RegisterInterface( "ibc.core.connection.v1.CounterpartyConnectionI", (*exported.CounterpartyConnectionI)(nil), - ) - registry.RegisterImplementations( - (*exported.ConnectionI)(nil), - &ConnectionEnd{}, - ) - registry.RegisterImplementations( - (*exported.CounterpartyConnectionI)(nil), &Counterparty{}, ) + registry.RegisterInterface( + "ibc.core.connection.v1.Version", + (*exported.Version)(nil), + &Version{}, + ) registry.RegisterImplementations( (*sdk.Msg)(nil), &MsgConnectionOpenInit{}, diff --git a/x/ibc/core/03-connection/types/connection.go b/x/ibc/core/03-connection/types/connection.go index 26fdcb49dd..224998c6a9 100644 --- a/x/ibc/core/03-connection/types/connection.go +++ b/x/ibc/core/03-connection/types/connection.go @@ -10,7 +10,7 @@ import ( var _ exported.ConnectionI = (*ConnectionEnd)(nil) // NewConnectionEnd creates a new ConnectionEnd instance. -func NewConnectionEnd(state State, clientID string, counterparty Counterparty, versions []string) ConnectionEnd { +func NewConnectionEnd(state State, clientID string, counterparty Counterparty, versions []*Version) ConnectionEnd { return ConnectionEnd{ ClientId: clientID, Versions: versions, @@ -35,8 +35,8 @@ func (c ConnectionEnd) GetCounterparty() exported.CounterpartyConnectionI { } // GetVersions implements the Connection interface -func (c ConnectionEnd) GetVersions() []string { - return c.Versions +func (c ConnectionEnd) GetVersions() []exported.Version { + return ProtoVersionsToExported(c.Versions) } // ValidateBasic implements the Connection interface. diff --git a/x/ibc/core/03-connection/types/connection.pb.go b/x/ibc/core/03-connection/types/connection.pb.go index b2b51dd75a..ff0f6db1fa 100644 --- a/x/ibc/core/03-connection/types/connection.pb.go +++ b/x/ibc/core/03-connection/types/connection.pb.go @@ -70,7 +70,7 @@ type ConnectionEnd struct { ClientId string `protobuf:"bytes,1,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty" yaml:"client_id"` // IBC version which can be utilised to determine encodings or protocols for // channels or packets utilising this connection - Versions []string `protobuf:"bytes,2,rep,name=versions,proto3" json:"versions,omitempty"` + Versions []*Version `protobuf:"bytes,2,rep,name=versions,proto3" json:"versions,omitempty"` // current state of the connection end. State State `protobuf:"varint,3,opt,name=state,proto3,enum=ibc.core.connection.v1.State" json:"state,omitempty"` // counterparty chain associated with this connection. @@ -119,7 +119,7 @@ type IdentifiedConnection struct { ClientId string `protobuf:"bytes,2,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty" yaml:"client_id"` // IBC version which can be utilised to determine encodings or protocols for // channels or packets utilising this connection - Versions []string `protobuf:"bytes,3,rep,name=versions,proto3" json:"versions,omitempty"` + Versions []*Version `protobuf:"bytes,3,rep,name=versions,proto3" json:"versions,omitempty"` // current state of the connection end. State State `protobuf:"varint,4,opt,name=state,proto3,enum=ibc.core.connection.v1.State" json:"state,omitempty"` // counterparty chain associated with this connection. @@ -362,45 +362,46 @@ func init() { } var fileDescriptor_90572467c054e43a = []byte{ - // 608 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0x41, 0x6b, 0xdb, 0x4c, - 0x10, 0xd5, 0xca, 0x72, 0x12, 0x6f, 0xe2, 0xef, 0x73, 0x17, 0x53, 0x84, 0x20, 0x92, 0x50, 0x0b, - 0x35, 0x85, 0x48, 0x75, 0x02, 0x3d, 0xa4, 0xf4, 0x10, 0x3b, 0x2a, 0x88, 0xb6, 0xae, 0x51, 0x9c, - 0x42, 0x73, 0x09, 0xb6, 0xb4, 0x49, 0x96, 0xc4, 0x92, 0x91, 0x36, 0x26, 0xfe, 0x07, 0xc1, 0x97, - 0xf6, 0xda, 0x83, 0xa1, 0xd0, 0x3f, 0x13, 0x7a, 0xca, 0xb1, 0x27, 0x53, 0xec, 0x53, 0xaf, 0xfe, - 0x05, 0x45, 0x5a, 0x59, 0x56, 0x42, 0x73, 0x68, 0xda, 0x93, 0x67, 0x76, 0xde, 0x1b, 0xef, 0x7b, - 0x33, 0x5a, 0xf8, 0x84, 0x74, 0x1c, 0xc3, 0xf1, 0x03, 0x6c, 0x38, 0xbe, 0xe7, 0x61, 0x87, 0x12, - 0xdf, 0x33, 0xfa, 0xd5, 0x4c, 0xa6, 0xf7, 0x02, 0x9f, 0xfa, 0xe8, 0x21, 0xe9, 0x38, 0x7a, 0x04, - 0xd4, 0x33, 0xa5, 0x7e, 0x55, 0x2a, 0x1f, 0xfb, 0xc7, 0x7e, 0x0c, 0x31, 0xa2, 0x88, 0xa1, 0xa5, - 0x6c, 0xdb, 0x6e, 0x97, 0xd0, 0x2e, 0xf6, 0x28, 0x6b, 0x3b, 0xcf, 0x18, 0x50, 0xfb, 0x09, 0x60, - 0xb1, 0x9e, 0x36, 0x34, 0x3d, 0x17, 0x55, 0x61, 0xc1, 0x39, 0x23, 0xd8, 0xa3, 0x87, 0xc4, 0x15, - 0x81, 0x0a, 0x2a, 0x85, 0x5a, 0x79, 0x36, 0x56, 0x4a, 0x83, 0x76, 0xf7, 0x6c, 0x5b, 0x4b, 0x4b, - 0x9a, 0xbd, 0xc2, 0x62, 0xcb, 0x45, 0x12, 0x5c, 0xe9, 0xe3, 0x20, 0x24, 0xbe, 0x17, 0x8a, 0xbc, - 0x9a, 0xab, 0x14, 0xec, 0x34, 0x47, 0x5b, 0x30, 0x1f, 0xd2, 0x36, 0xc5, 0x62, 0x4e, 0x05, 0x95, - 0xff, 0x36, 0xd7, 0xf5, 0xdf, 0xeb, 0xd0, 0xf7, 0x22, 0x90, 0xcd, 0xb0, 0xa8, 0x01, 0xd7, 0x1c, - 0xff, 0xdc, 0xa3, 0x38, 0xe8, 0xb5, 0x03, 0x3a, 0x10, 0x05, 0x15, 0x54, 0x56, 0x37, 0x1f, 0xdf, - 0xc5, 0xad, 0x67, 0xb0, 0x35, 0xe1, 0x6a, 0xac, 0x70, 0xf6, 0x0d, 0xfe, 0xb6, 0x70, 0xf9, 0x45, - 0xe1, 0xb4, 0x8f, 0x3c, 0x2c, 0x5b, 0x2e, 0xf6, 0x28, 0x39, 0x22, 0xd8, 0x5d, 0xa8, 0x46, 0xeb, - 0x90, 0x4f, 0xb5, 0x16, 0x67, 0x63, 0xa5, 0xc0, 0xb4, 0x46, 0x22, 0x79, 0x72, 0xcb, 0x11, 0xfe, - 0x8f, 0x1d, 0xc9, 0xdd, 0xe5, 0x88, 0xf0, 0x17, 0x8e, 0xe4, 0xff, 0x89, 0x23, 0xdf, 0x00, 0x5c, - 0xcb, 0x42, 0xef, 0x33, 0xfc, 0x97, 0xb0, 0xb8, 0xf8, 0xef, 0x85, 0x43, 0xe2, 0x6c, 0xac, 0x94, - 0x13, 0x5a, 0xb6, 0xac, 0x45, 0x17, 0x99, 0xe7, 0x96, 0x8b, 0x6a, 0x70, 0xa9, 0x17, 0xe0, 0x23, - 0x72, 0x11, 0x2f, 0xc8, 0x2d, 0x49, 0xe9, 0xb2, 0xf6, 0xab, 0xfa, 0x5b, 0x1c, 0x9c, 0x9e, 0xe1, - 0x66, 0x8c, 0x4d, 0x24, 0x25, 0xcc, 0x44, 0xcc, 0x23, 0xb8, 0x5a, 0x8f, 0x2f, 0xd5, 0x6c, 0xd3, - 0x93, 0x10, 0x95, 0x61, 0xbe, 0x17, 0x05, 0x22, 0x88, 0xfd, 0x67, 0x89, 0x76, 0x00, 0xff, 0x5f, - 0x0c, 0x9e, 0x01, 0xef, 0xa1, 0x39, 0xed, 0xcd, 0x67, 0x7b, 0xbf, 0x86, 0xcb, 0xef, 0xd9, 0x90, - 0x91, 0x0c, 0x21, 0x99, 0x6f, 0x5a, 0xc0, 0x9a, 0xda, 0x99, 0x93, 0x68, 0x3f, 0x8e, 0x70, 0x9b, - 0x9e, 0x07, 0x38, 0xfd, 0x62, 0xe6, 0x39, 0x53, 0xf3, 0xf4, 0x33, 0x80, 0xf9, 0x78, 0x03, 0xd0, - 0x73, 0xa8, 0xec, 0xb5, 0x76, 0x5a, 0xe6, 0xe1, 0x7e, 0xc3, 0x6a, 0x58, 0x2d, 0x6b, 0xe7, 0x8d, - 0x75, 0x60, 0xee, 0x1e, 0xee, 0x37, 0xf6, 0x9a, 0x66, 0xdd, 0x7a, 0x65, 0x99, 0xbb, 0x25, 0x4e, - 0x7a, 0x30, 0x1c, 0xa9, 0xc5, 0x1b, 0x00, 0x24, 0x42, 0xc8, 0x78, 0xd1, 0x61, 0x09, 0x48, 0x2b, - 0xc3, 0x91, 0x2a, 0x44, 0x31, 0x92, 0x61, 0x91, 0x55, 0x5a, 0xf6, 0x87, 0x77, 0x4d, 0xb3, 0x51, - 0xe2, 0xa5, 0xd5, 0xe1, 0x48, 0x5d, 0x4e, 0xd2, 0x05, 0x33, 0x2e, 0xe6, 0x18, 0x33, 0x8a, 0x25, - 0xe1, 0xf2, 0xab, 0xcc, 0xd5, 0xf6, 0xaf, 0x26, 0x32, 0xb8, 0x9e, 0xc8, 0xe0, 0xc7, 0x44, 0x06, - 0x9f, 0xa6, 0x32, 0x77, 0x3d, 0x95, 0xb9, 0xef, 0x53, 0x99, 0x3b, 0x78, 0x71, 0x4c, 0xe8, 0xc9, - 0x79, 0x27, 0x1a, 0x9d, 0xe1, 0xf8, 0x61, 0xd7, 0x0f, 0x93, 0x9f, 0x8d, 0xd0, 0x3d, 0x35, 0x2e, - 0x8c, 0xf4, 0x59, 0x7a, 0xb6, 0xb5, 0x91, 0x79, 0xf0, 0xe8, 0xa0, 0x87, 0xc3, 0xce, 0x52, 0xfc, - 0x24, 0x6d, 0xfd, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x61, 0x3b, 0x7e, 0x26, 0x14, 0x05, 0x00, 0x00, + // 617 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0xc1, 0x6a, 0xdb, 0x4c, + 0x10, 0x96, 0x64, 0x39, 0xb1, 0xd7, 0xf1, 0xff, 0xbb, 0x8b, 0x29, 0x42, 0x10, 0x49, 0xa8, 0x85, + 0x9a, 0x42, 0xa4, 0x3a, 0x81, 0x1e, 0x12, 0x7a, 0x88, 0x1d, 0x15, 0x44, 0x5b, 0xd7, 0x28, 0x4e, + 0xa1, 0xb9, 0x04, 0x5b, 0xda, 0x24, 0x4b, 0x62, 0xc9, 0x48, 0x6b, 0x13, 0xbf, 0x41, 0xf0, 0xa9, + 0xd7, 0x1e, 0x0c, 0x85, 0xbe, 0x40, 0x1f, 0x23, 0xf4, 0x94, 0x63, 0x4f, 0xa6, 0xd8, 0x6f, 0xe0, + 0x27, 0x28, 0xd2, 0xca, 0xb2, 0x12, 0x9a, 0x43, 0xdd, 0x9e, 0x34, 0xb3, 0xf3, 0x7d, 0x9f, 0x76, + 0xbe, 0x1d, 0x06, 0x3c, 0xc3, 0x1d, 0x5b, 0xb7, 0x3d, 0x1f, 0xe9, 0xb6, 0xe7, 0xba, 0xc8, 0x26, + 0xd8, 0x73, 0xf5, 0x41, 0x35, 0x95, 0x69, 0x3d, 0xdf, 0x23, 0x1e, 0x7c, 0x8c, 0x3b, 0xb6, 0x16, + 0x02, 0xb5, 0x54, 0x69, 0x50, 0x15, 0xcb, 0x67, 0xde, 0x99, 0x17, 0x41, 0xf4, 0x30, 0xa2, 0x68, + 0x31, 0x2d, 0xdb, 0xed, 0x62, 0xd2, 0x45, 0x2e, 0xa1, 0xb2, 0x8b, 0x8c, 0x02, 0xd5, 0x11, 0x07, + 0x8a, 0xf5, 0x44, 0xd0, 0x70, 0x1d, 0x58, 0x05, 0x79, 0xfb, 0x12, 0x23, 0x97, 0x9c, 0x60, 0x47, + 0x60, 0x15, 0xb6, 0x92, 0xaf, 0x95, 0xe7, 0x13, 0xb9, 0x34, 0x6c, 0x77, 0x2f, 0x77, 0xd5, 0xa4, + 0xa4, 0x5a, 0x39, 0x1a, 0x9b, 0x0e, 0xdc, 0x03, 0xb9, 0x01, 0xf2, 0x03, 0xec, 0xb9, 0x81, 0xc0, + 0x29, 0x99, 0x4a, 0x61, 0x5b, 0xd6, 0x7e, 0x7f, 0x5d, 0xed, 0x03, 0xc5, 0x59, 0x09, 0x01, 0xee, + 0x80, 0x6c, 0x40, 0xda, 0x04, 0x09, 0x19, 0x85, 0xad, 0xfc, 0xb7, 0xbd, 0xf9, 0x10, 0xf3, 0x30, + 0x04, 0x59, 0x14, 0x0b, 0x1b, 0x60, 0xc3, 0xf6, 0xfa, 0x2e, 0x41, 0x7e, 0xaf, 0xed, 0x93, 0xa1, + 0xc0, 0x2b, 0x6c, 0xa5, 0xb0, 0xfd, 0xf4, 0x21, 0x6e, 0x3d, 0x85, 0xad, 0xf1, 0x37, 0x13, 0x99, + 0xb1, 0xee, 0xf0, 0x77, 0xf9, 0xeb, 0x2f, 0x32, 0xa3, 0x7e, 0xe3, 0x40, 0xd9, 0x74, 0x90, 0x4b, + 0xf0, 0x29, 0x46, 0xce, 0xd2, 0x16, 0xb8, 0x09, 0xb8, 0xc4, 0x8c, 0xe2, 0x7c, 0x22, 0xe7, 0xa9, + 0x19, 0xa1, 0x0b, 0x1c, 0xbe, 0x67, 0x19, 0xf7, 0xc7, 0x96, 0x65, 0x56, 0xb6, 0x8c, 0xff, 0x0b, + 0xcb, 0xb2, 0xff, 0xc4, 0xb2, 0xef, 0x2c, 0xd8, 0x48, 0x43, 0x57, 0x19, 0x9f, 0x57, 0xa0, 0xb8, + 0xfc, 0xf7, 0xd2, 0x42, 0x61, 0x3e, 0x91, 0xcb, 0x31, 0x2d, 0x5d, 0x56, 0xc3, 0x8b, 0x2c, 0x72, + 0xd3, 0x81, 0x35, 0xb0, 0xd6, 0xf3, 0xd1, 0x29, 0xbe, 0x8a, 0x26, 0xe8, 0x5e, 0x4b, 0xc9, 0xb8, + 0x0f, 0xaa, 0xda, 0x3b, 0xe4, 0x5f, 0x5c, 0xa2, 0x66, 0x84, 0x8d, 0x5b, 0x8a, 0x99, 0x71, 0x33, + 0x4f, 0x40, 0xa1, 0x1e, 0x5d, 0xaa, 0xd9, 0x26, 0xe7, 0x01, 0x2c, 0x83, 0x6c, 0x2f, 0x0c, 0x04, + 0x56, 0xc9, 0x54, 0xf2, 0x16, 0x4d, 0xd4, 0x63, 0xf0, 0xff, 0x72, 0x32, 0x28, 0x70, 0x85, 0x9e, + 0x13, 0x6d, 0x2e, 0xad, 0xfd, 0x06, 0xac, 0xc7, 0xaf, 0x0d, 0x25, 0x00, 0xf0, 0x62, 0x14, 0x7d, + 0x2a, 0x6a, 0xa5, 0x4e, 0xa0, 0x08, 0x72, 0xa7, 0xa8, 0x4d, 0xfa, 0x3e, 0x5a, 0x68, 0x24, 0x39, + 0xed, 0xe6, 0xf9, 0x67, 0x16, 0x64, 0xa3, 0x09, 0x80, 0x2f, 0x81, 0x7c, 0xd8, 0xda, 0x6f, 0x19, + 0x27, 0x47, 0x0d, 0xb3, 0x61, 0xb6, 0xcc, 0xfd, 0xb7, 0xe6, 0xb1, 0x71, 0x70, 0x72, 0xd4, 0x38, + 0x6c, 0x1a, 0x75, 0xf3, 0xb5, 0x69, 0x1c, 0x94, 0x18, 0xf1, 0xd1, 0x68, 0xac, 0x14, 0xef, 0x00, + 0xa0, 0x00, 0x00, 0xe5, 0x85, 0x87, 0x25, 0x56, 0xcc, 0x8d, 0xc6, 0x0a, 0x1f, 0xc6, 0x50, 0x02, + 0x45, 0x5a, 0x69, 0x59, 0x1f, 0xdf, 0x37, 0x8d, 0x46, 0x89, 0x13, 0x0b, 0xa3, 0xb1, 0xb2, 0x1e, + 0xa7, 0x4b, 0x66, 0x54, 0xcc, 0x50, 0x66, 0x18, 0x8b, 0xfc, 0xf5, 0x57, 0x89, 0xa9, 0x1d, 0xdd, + 0x4c, 0x25, 0xf6, 0x76, 0x2a, 0xb1, 0x3f, 0xa7, 0x12, 0xfb, 0x69, 0x26, 0x31, 0xb7, 0x33, 0x89, + 0xf9, 0x31, 0x93, 0x98, 0xe3, 0xbd, 0x33, 0x4c, 0xce, 0xfb, 0x9d, 0xf0, 0xe9, 0x74, 0xdb, 0x0b, + 0xba, 0x5e, 0x10, 0x7f, 0xb6, 0x02, 0xe7, 0x42, 0xbf, 0xd2, 0x93, 0xc5, 0xf6, 0x62, 0x67, 0x2b, + 0xb5, 0x32, 0xc9, 0xb0, 0x87, 0x82, 0xce, 0x5a, 0xb4, 0xd4, 0x76, 0x7e, 0x05, 0x00, 0x00, 0xff, + 0xff, 0x6d, 0xfb, 0xee, 0xb6, 0x56, 0x05, 0x00, 0x00, } func (m *ConnectionEnd) Marshal() (dAtA []byte, err error) { @@ -440,9 +441,14 @@ func (m *ConnectionEnd) MarshalToSizedBuffer(dAtA []byte) (int, error) { } if len(m.Versions) > 0 { for iNdEx := len(m.Versions) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Versions[iNdEx]) - copy(dAtA[i:], m.Versions[iNdEx]) - i = encodeVarintConnection(dAtA, i, uint64(len(m.Versions[iNdEx]))) + { + size, err := m.Versions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintConnection(dAtA, i, uint64(size)) + } i-- dAtA[i] = 0x12 } @@ -494,9 +500,14 @@ func (m *IdentifiedConnection) MarshalToSizedBuffer(dAtA []byte) (int, error) { } if len(m.Versions) > 0 { for iNdEx := len(m.Versions) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Versions[iNdEx]) - copy(dAtA[i:], m.Versions[iNdEx]) - i = encodeVarintConnection(dAtA, i, uint64(len(m.Versions[iNdEx]))) + { + size, err := m.Versions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintConnection(dAtA, i, uint64(size)) + } i-- dAtA[i] = 0x1a } @@ -697,8 +708,8 @@ func (m *ConnectionEnd) Size() (n int) { n += 1 + l + sovConnection(uint64(l)) } if len(m.Versions) > 0 { - for _, s := range m.Versions { - l = len(s) + for _, e := range m.Versions { + l = e.Size() n += 1 + l + sovConnection(uint64(l)) } } @@ -725,8 +736,8 @@ func (m *IdentifiedConnection) Size() (n int) { n += 1 + l + sovConnection(uint64(l)) } if len(m.Versions) > 0 { - for _, s := range m.Versions { - l = len(s) + for _, e := range m.Versions { + l = e.Size() n += 1 + l + sovConnection(uint64(l)) } } @@ -881,7 +892,7 @@ func (m *ConnectionEnd) Unmarshal(dAtA []byte) error { if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Versions", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowConnection @@ -891,23 +902,25 @@ func (m *ConnectionEnd) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthConnection } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthConnection } if postIndex > l { return io.ErrUnexpectedEOF } - m.Versions = append(m.Versions, string(dAtA[iNdEx:postIndex])) + m.Versions = append(m.Versions, &Version{}) + if err := m.Versions[len(m.Versions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 3: if wireType != 0 { @@ -1082,7 +1095,7 @@ func (m *IdentifiedConnection) Unmarshal(dAtA []byte) error { if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Versions", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowConnection @@ -1092,23 +1105,25 @@ func (m *IdentifiedConnection) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthConnection } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthConnection } if postIndex > l { return io.ErrUnexpectedEOF } - m.Versions = append(m.Versions, string(dAtA[iNdEx:postIndex])) + m.Versions = append(m.Versions, &Version{}) + if err := m.Versions[len(m.Versions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 4: if wireType != 0 { diff --git a/x/ibc/core/03-connection/types/connection_test.go b/x/ibc/core/03-connection/types/connection_test.go index 6fe486c352..c735841b0e 100644 --- a/x/ibc/core/03-connection/types/connection_test.go +++ b/x/ibc/core/03-connection/types/connection_test.go @@ -28,12 +28,12 @@ func TestConnectionValidateBasic(t *testing.T) { }{ { "valid connection", - types.ConnectionEnd{clientID, []string{ibctesting.ConnectionVersion}, types.INIT, types.Counterparty{clientID2, connectionID2, commitmenttypes.NewMerklePrefix([]byte("prefix"))}}, + types.ConnectionEnd{clientID, []*types.Version{ibctesting.ConnectionVersion}, types.INIT, types.Counterparty{clientID2, connectionID2, commitmenttypes.NewMerklePrefix([]byte("prefix"))}}, true, }, { "invalid client id", - types.ConnectionEnd{"(clientID1)", []string{ibctesting.ConnectionVersion}, types.INIT, types.Counterparty{clientID2, connectionID2, commitmenttypes.NewMerklePrefix([]byte("prefix"))}}, + types.ConnectionEnd{"(clientID1)", []*types.Version{ibctesting.ConnectionVersion}, types.INIT, types.Counterparty{clientID2, connectionID2, commitmenttypes.NewMerklePrefix([]byte("prefix"))}}, false, }, { @@ -43,12 +43,12 @@ func TestConnectionValidateBasic(t *testing.T) { }, { "invalid version", - types.ConnectionEnd{clientID, []string{"1.0.0"}, types.INIT, types.Counterparty{clientID2, connectionID2, commitmenttypes.NewMerklePrefix([]byte("prefix"))}}, + types.ConnectionEnd{clientID, []*types.Version{&types.Version{}}, types.INIT, types.Counterparty{clientID2, connectionID2, commitmenttypes.NewMerklePrefix([]byte("prefix"))}}, false, }, { "invalid counterparty", - types.ConnectionEnd{clientID, []string{ibctesting.ConnectionVersion}, types.INIT, types.Counterparty{clientID2, connectionID2, emptyPrefix}}, + types.ConnectionEnd{clientID, []*types.Version{ibctesting.ConnectionVersion}, types.INIT, types.Counterparty{clientID2, connectionID2, emptyPrefix}}, false, }, } @@ -97,12 +97,12 @@ func TestIdentifiedConnectionValidateBasic(t *testing.T) { }{ { "valid connection", - types.NewIdentifiedConnection(clientID, types.ConnectionEnd{clientID, []string{ibctesting.ConnectionVersion}, types.INIT, types.Counterparty{clientID2, connectionID2, commitmenttypes.NewMerklePrefix([]byte("prefix"))}}), + types.NewIdentifiedConnection(clientID, types.ConnectionEnd{clientID, []*types.Version{ibctesting.ConnectionVersion}, types.INIT, types.Counterparty{clientID2, connectionID2, commitmenttypes.NewMerklePrefix([]byte("prefix"))}}), true, }, { "invalid connection id", - types.NewIdentifiedConnection("(connectionIDONE)", types.ConnectionEnd{clientID, []string{ibctesting.ConnectionVersion}, types.INIT, types.Counterparty{clientID2, connectionID2, commitmenttypes.NewMerklePrefix([]byte("prefix"))}}), + types.NewIdentifiedConnection("(connectionIDONE)", types.ConnectionEnd{clientID, []*types.Version{ibctesting.ConnectionVersion}, types.INIT, types.Counterparty{clientID2, connectionID2, commitmenttypes.NewMerklePrefix([]byte("prefix"))}}), false, }, } diff --git a/x/ibc/core/03-connection/types/genesis_test.go b/x/ibc/core/03-connection/types/genesis_test.go index 05f8a88988..8080f49d5c 100644 --- a/x/ibc/core/03-connection/types/genesis_test.go +++ b/x/ibc/core/03-connection/types/genesis_test.go @@ -27,7 +27,7 @@ func TestValidateGenesis(t *testing.T) { name: "valid genesis", genState: types.NewGenesisState( []types.IdentifiedConnection{ - types.NewIdentifiedConnection(connectionID, types.NewConnectionEnd(types.INIT, clientID, types.Counterparty{clientID2, connectionID2, commitmenttypes.NewMerklePrefix([]byte("prefix"))}, []string{ibctesting.ConnectionVersion})), + types.NewIdentifiedConnection(connectionID, types.NewConnectionEnd(types.INIT, clientID, types.Counterparty{clientID2, connectionID2, commitmenttypes.NewMerklePrefix([]byte("prefix"))}, []*types.Version{ibctesting.ConnectionVersion})), }, []types.ConnectionPaths{ {clientID, []string{host.ConnectionPath(connectionID)}}, @@ -39,7 +39,7 @@ func TestValidateGenesis(t *testing.T) { name: "invalid connection", genState: types.NewGenesisState( []types.IdentifiedConnection{ - types.NewIdentifiedConnection(connectionID, types.NewConnectionEnd(types.INIT, "(CLIENTIDONE)", types.Counterparty{clientID, connectionID, commitmenttypes.NewMerklePrefix([]byte("prefix"))}, []string{ibctesting.ConnectionVersion})), + types.NewIdentifiedConnection(connectionID, types.NewConnectionEnd(types.INIT, "(CLIENTIDONE)", types.Counterparty{clientID, connectionID, commitmenttypes.NewMerklePrefix([]byte("prefix"))}, []*types.Version{ibctesting.ConnectionVersion})), }, []types.ConnectionPaths{ {clientID, []string{host.ConnectionPath(connectionID)}}, @@ -51,7 +51,7 @@ func TestValidateGenesis(t *testing.T) { name: "invalid client id", genState: types.NewGenesisState( []types.IdentifiedConnection{ - types.NewIdentifiedConnection(connectionID, types.NewConnectionEnd(types.INIT, clientID, types.Counterparty{clientID2, connectionID2, commitmenttypes.NewMerklePrefix([]byte("prefix"))}, []string{ibctesting.ConnectionVersion})), + types.NewIdentifiedConnection(connectionID, types.NewConnectionEnd(types.INIT, clientID, types.Counterparty{clientID2, connectionID2, commitmenttypes.NewMerklePrefix([]byte("prefix"))}, []*types.Version{ibctesting.ConnectionVersion})), }, []types.ConnectionPaths{ {"(CLIENTIDONE)", []string{host.ConnectionPath(connectionID)}}, @@ -63,7 +63,7 @@ func TestValidateGenesis(t *testing.T) { name: "invalid path", genState: types.NewGenesisState( []types.IdentifiedConnection{ - types.NewIdentifiedConnection(connectionID, types.NewConnectionEnd(types.INIT, clientID, types.Counterparty{clientID2, connectionID2, commitmenttypes.NewMerklePrefix([]byte("prefix"))}, []string{ibctesting.ConnectionVersion})), + types.NewIdentifiedConnection(connectionID, types.NewConnectionEnd(types.INIT, clientID, types.Counterparty{clientID2, connectionID2, commitmenttypes.NewMerklePrefix([]byte("prefix"))}, []*types.Version{ibctesting.ConnectionVersion})), }, []types.ConnectionPaths{ {clientID, []string{connectionID}}, diff --git a/x/ibc/core/03-connection/types/msgs.go b/x/ibc/core/03-connection/types/msgs.go index a461dd1cca..6df9512e15 100644 --- a/x/ibc/core/03-connection/types/msgs.go +++ b/x/ibc/core/03-connection/types/msgs.go @@ -17,7 +17,7 @@ var _ sdk.Msg = &MsgConnectionOpenInit{} func NewMsgConnectionOpenInit( connectionID, clientID, counterpartyConnectionID, counterpartyClientID string, counterpartyPrefix commitmenttypes.MerklePrefix, - version string, signer sdk.AccAddress, + version *Version, signer sdk.AccAddress, ) *MsgConnectionOpenInit { counterparty := NewCounterparty(counterpartyClientID, counterpartyConnectionID, counterpartyPrefix) return &MsgConnectionOpenInit{ @@ -47,7 +47,8 @@ func (msg MsgConnectionOpenInit) ValidateBasic() error { if err := host.ClientIdentifierValidator(msg.ClientId); err != nil { return sdkerrors.Wrap(err, "invalid client ID") } - if msg.Version != "" { + // NOTE: Version can be nil on MsgConnectionOpenInit + if msg.Version != nil { if err := ValidateVersion(msg.Version); err != nil { return sdkerrors.Wrap(err, "basic validation of the provided version failed") } @@ -80,7 +81,7 @@ var _ sdk.Msg = &MsgConnectionOpenTry{} func NewMsgConnectionOpenTry( desiredConnectionID, counterpartyChosenConnectionID, clientID, counterpartyConnectionID, counterpartyClientID string, counterpartyClient exported.ClientState, - counterpartyPrefix commitmenttypes.MerklePrefix, counterpartyVersions []string, + counterpartyPrefix commitmenttypes.MerklePrefix, counterpartyVersions []*Version, proofInit, proofClient, proofConsensus []byte, proofHeight, consensusHeight clienttypes.Height, signer sdk.AccAddress, ) *MsgConnectionOpenTry { @@ -195,7 +196,8 @@ var _ sdk.Msg = &MsgConnectionOpenAck{} func NewMsgConnectionOpenAck( connectionID, counterpartyConnectionID string, counterpartyClient exported.ClientState, proofTry, proofClient, proofConsensus []byte, - proofHeight, consensusHeight clienttypes.Height, version string, + proofHeight, consensusHeight clienttypes.Height, + version *Version, signer sdk.AccAddress, ) *MsgConnectionOpenAck { csAny, _ := clienttypes.PackClientState(counterpartyClient) diff --git a/x/ibc/core/03-connection/types/msgs_test.go b/x/ibc/core/03-connection/types/msgs_test.go index 3ccb5114a5..cfb8ce7351 100644 --- a/x/ibc/core/03-connection/types/msgs_test.go +++ b/x/ibc/core/03-connection/types/msgs_test.go @@ -79,7 +79,7 @@ func (suite *MsgTestSuite) TestNewMsgConnectionOpenInit() { signer, _ := sdk.AccAddressFromBech32("cosmos1ckgw5d7jfj7wwxjzs9fdrdev9vc8dzcw3n2lht") // empty versions are considered valid, the default compatible versions // will be used in protocol. - version := "" + var version *types.Version var testCases = []struct { name string @@ -91,7 +91,7 @@ func (suite *MsgTestSuite) TestNewMsgConnectionOpenInit() { {"invalid counterparty client ID", types.NewMsgConnectionOpenInit("ibcconntest", "clienttotest", "test/conn1", "clienttotest", prefix, version, signer), false}, {"invalid counterparty connection ID", types.NewMsgConnectionOpenInit("ibcconntest", "clienttotest", "connectiontotest", "test/conn1", prefix, version, signer), false}, {"empty counterparty prefix", types.NewMsgConnectionOpenInit("ibcconntest", "clienttotest", "connectiontotest", "clienttotest", emptyPrefix, version, signer), false}, - {"supplied version fails basic validation", types.NewMsgConnectionOpenInit("ibcconntest", "clienttotest", "connectiontotest", "clienttotest", prefix, "bad version", signer), false}, + {"supplied version fails basic validation", types.NewMsgConnectionOpenInit("ibcconntest", "clienttotest", "connectiontotest", "clienttotest", prefix, &types.Version{}, signer), false}, {"empty singer", types.NewMsgConnectionOpenInit("ibcconntest", "clienttotest", "connectiontotest", "clienttotest", prefix, version, nil), false}, {"success", types.NewMsgConnectionOpenInit("ibcconntest", "clienttotest", "connectiontotest", "clienttotest", prefix, version, signer), true}, } @@ -132,24 +132,24 @@ func (suite *MsgTestSuite) TestNewMsgConnectionOpenTry() { msg *types.MsgConnectionOpenTry expPass bool }{ - {"invalid connection ID", types.NewMsgConnectionOpenTry("test/conn1", provedID, "clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []string{ibctesting.ConnectionVersion}, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, - {"invalid connection ID", types.NewMsgConnectionOpenTry("ibcconntest", "test/conn1", "clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []string{ibctesting.ConnectionVersion}, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, - {"invalid client ID", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "test/iris", "connectiontotest", "clienttotest", clientState, prefix, []string{ibctesting.ConnectionVersion}, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, - {"invalid counterparty connection ID", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "ibc/test", "clienttotest", clientState, prefix, []string{ibctesting.ConnectionVersion}, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, - {"invalid counterparty client ID", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "connectiontotest", "test/conn1", clientState, prefix, []string{ibctesting.ConnectionVersion}, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, - {"invalid nil counterparty client", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "connectiontotest", "clienttotest", nil, prefix, []string{ibctesting.ConnectionVersion}, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, - {"invalid client unpacking", &types.MsgConnectionOpenTry{"ibcconntest", provedID, "clienttotesta", invalidAny, counterparty, []string{ibctesting.ConnectionVersion}, clientHeight, suite.proof, suite.proof, suite.proof, clientHeight, signer.String()}, false}, - {"counterparty failed Validate", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "connectiontotest", "clienttotest", invalidClient, prefix, []string{ibctesting.ConnectionVersion}, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, - {"empty counterparty prefix", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "connectiontotest", "clienttotest", clientState, emptyPrefix, []string{ibctesting.ConnectionVersion}, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, - {"empty counterpartyVersions", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []string{}, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, - {"empty proofInit", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []string{ibctesting.ConnectionVersion}, emptyProof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, - {"empty proofClient", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []string{ibctesting.ConnectionVersion}, suite.proof, emptyProof, suite.proof, clientHeight, clientHeight, signer), false}, - {"empty proofConsensus", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []string{ibctesting.ConnectionVersion}, suite.proof, suite.proof, emptyProof, clientHeight, clientHeight, signer), false}, - {"invalid proofHeight", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []string{ibctesting.ConnectionVersion}, suite.proof, suite.proof, suite.proof, clienttypes.ZeroHeight(), clientHeight, signer), false}, - {"invalid consensusHeight", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []string{ibctesting.ConnectionVersion}, suite.proof, suite.proof, suite.proof, clientHeight, clienttypes.ZeroHeight(), signer), false}, - {"empty singer", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []string{ibctesting.ConnectionVersion}, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, nil), false}, - {"success", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []string{ibctesting.ConnectionVersion}, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), true}, - {"invalid version", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []string{"(invalid version)"}, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, + {"invalid connection ID", types.NewMsgConnectionOpenTry("test/conn1", provedID, "clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []*types.Version{ibctesting.ConnectionVersion}, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, + {"invalid connection ID", types.NewMsgConnectionOpenTry("ibcconntest", "test/conn1", "clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []*types.Version{ibctesting.ConnectionVersion}, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, + {"invalid client ID", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "test/iris", "connectiontotest", "clienttotest", clientState, prefix, []*types.Version{ibctesting.ConnectionVersion}, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, + {"invalid counterparty connection ID", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "ibc/test", "clienttotest", clientState, prefix, []*types.Version{ibctesting.ConnectionVersion}, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, + {"invalid counterparty client ID", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "connectiontotest", "test/conn1", clientState, prefix, []*types.Version{ibctesting.ConnectionVersion}, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, + {"invalid nil counterparty client", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "connectiontotest", "clienttotest", nil, prefix, []*types.Version{ibctesting.ConnectionVersion}, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, + {"invalid client unpacking", &types.MsgConnectionOpenTry{"ibcconntest", provedID, "clienttotesta", invalidAny, counterparty, []*types.Version{ibctesting.ConnectionVersion}, clientHeight, suite.proof, suite.proof, suite.proof, clientHeight, signer.String()}, false}, + {"counterparty failed Validate", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "connectiontotest", "clienttotest", invalidClient, prefix, []*types.Version{ibctesting.ConnectionVersion}, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, + {"empty counterparty prefix", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "connectiontotest", "clienttotest", clientState, emptyPrefix, []*types.Version{ibctesting.ConnectionVersion}, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, + {"empty counterpartyVersions", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []*types.Version{}, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, + {"empty proofInit", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []*types.Version{ibctesting.ConnectionVersion}, emptyProof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, + {"empty proofClient", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []*types.Version{ibctesting.ConnectionVersion}, suite.proof, emptyProof, suite.proof, clientHeight, clientHeight, signer), false}, + {"empty proofConsensus", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []*types.Version{ibctesting.ConnectionVersion}, suite.proof, suite.proof, emptyProof, clientHeight, clientHeight, signer), false}, + {"invalid proofHeight", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []*types.Version{ibctesting.ConnectionVersion}, suite.proof, suite.proof, suite.proof, clienttypes.ZeroHeight(), clientHeight, signer), false}, + {"invalid consensusHeight", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []*types.Version{ibctesting.ConnectionVersion}, suite.proof, suite.proof, suite.proof, clientHeight, clienttypes.ZeroHeight(), signer), false}, + {"empty singer", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []*types.Version{ibctesting.ConnectionVersion}, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, nil), false}, + {"success", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []*types.Version{ibctesting.ConnectionVersion}, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), true}, + {"invalid version", types.NewMsgConnectionOpenTry("ibcconntest", provedID, "clienttotesta", "connectiontotest", "clienttotest", clientState, prefix, []*types.Version{&types.Version{}}, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, signer), false}, } for _, tc := range testCases { @@ -195,7 +195,7 @@ func (suite *MsgTestSuite) TestNewMsgConnectionOpenAck() { {"empty proofConsensus", types.NewMsgConnectionOpenAck(connectionID, connectionID, clientState, suite.proof, suite.proof, emptyProof, clientHeight, clientHeight, ibctesting.ConnectionVersion, signer), false}, {"invalid proofHeight", types.NewMsgConnectionOpenAck(connectionID, connectionID, clientState, suite.proof, suite.proof, suite.proof, clienttypes.ZeroHeight(), clientHeight, ibctesting.ConnectionVersion, signer), false}, {"invalid consensusHeight", types.NewMsgConnectionOpenAck(connectionID, connectionID, clientState, suite.proof, suite.proof, suite.proof, clientHeight, clienttypes.ZeroHeight(), ibctesting.ConnectionVersion, signer), false}, - {"invalid version", types.NewMsgConnectionOpenAck(connectionID, connectionID, clientState, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, "", signer), false}, + {"invalid version", types.NewMsgConnectionOpenAck(connectionID, connectionID, clientState, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, &types.Version{}, signer), false}, {"empty signer", types.NewMsgConnectionOpenAck(connectionID, connectionID, clientState, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, ibctesting.ConnectionVersion, nil), false}, {"success", types.NewMsgConnectionOpenAck(connectionID, connectionID, clientState, suite.proof, suite.proof, suite.proof, clientHeight, clientHeight, ibctesting.ConnectionVersion, signer), true}, } diff --git a/x/ibc/core/03-connection/types/tx.pb.go b/x/ibc/core/03-connection/types/tx.pb.go index af859b042c..be78639db0 100644 --- a/x/ibc/core/03-connection/types/tx.pb.go +++ b/x/ibc/core/03-connection/types/tx.pb.go @@ -36,7 +36,7 @@ type MsgConnectionOpenInit struct { ClientId string `protobuf:"bytes,1,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty" yaml:"client_id"` ConnectionId string `protobuf:"bytes,2,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty" yaml:"connection_id"` Counterparty Counterparty `protobuf:"bytes,3,opt,name=counterparty,proto3" json:"counterparty"` - Version string `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"` + Version *Version `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"` Signer string `protobuf:"bytes,5,opt,name=signer,proto3" json:"signer,omitempty"` } @@ -118,7 +118,7 @@ type MsgConnectionOpenTry struct { CounterpartyChosenConnectionId string `protobuf:"bytes,3,opt,name=counterparty_chosen_connection_id,json=counterpartyChosenConnectionId,proto3" json:"counterparty_chosen_connection_id,omitempty" yaml:"counterparty_chosen_connection_id"` ClientState *types.Any `protobuf:"bytes,4,opt,name=client_state,json=clientState,proto3" json:"client_state,omitempty" yaml:"client_state"` Counterparty Counterparty `protobuf:"bytes,5,opt,name=counterparty,proto3" json:"counterparty"` - CounterpartyVersions []string `protobuf:"bytes,6,rep,name=counterparty_versions,json=counterpartyVersions,proto3" json:"counterparty_versions,omitempty" yaml:"counterparty_versions"` + CounterpartyVersions []*Version `protobuf:"bytes,6,rep,name=counterparty_versions,json=counterpartyVersions,proto3" json:"counterparty_versions,omitempty" yaml:"counterparty_versions"` ProofHeight types1.Height `protobuf:"bytes,7,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"` // proof of the initialization the connection on Chain A: `UNITIALIZED -> // INIT` @@ -206,7 +206,7 @@ var xxx_messageInfo_MsgConnectionOpenTryResponse proto.InternalMessageInfo type MsgConnectionOpenAck struct { ConnectionId string `protobuf:"bytes,1,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty" yaml:"connection_id"` CounterpartyConnectionId string `protobuf:"bytes,2,opt,name=counterparty_connection_id,json=counterpartyConnectionId,proto3" json:"counterparty_connection_id,omitempty" yaml:"counterparty_connection_id"` - Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` + Version *Version `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` ClientState *types.Any `protobuf:"bytes,4,opt,name=client_state,json=clientState,proto3" json:"client_state,omitempty" yaml:"client_state"` ProofHeight types1.Height `protobuf:"bytes,5,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height" yaml:"proof_height"` // proof of the initialization the connection on Chain B: `UNITIALIZED -> @@ -384,64 +384,65 @@ func init() { func init() { proto.RegisterFile("ibc/core/connection/v1/tx.proto", fileDescriptor_5d00fde5fc97399e) } var fileDescriptor_5d00fde5fc97399e = []byte{ - // 909 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xbf, 0x93, 0xdb, 0x44, - 0x14, 0xb6, 0xce, 0xf7, 0xc3, 0x5e, 0x1b, 0x92, 0x28, 0xf6, 0x9d, 0x10, 0x41, 0x72, 0x76, 0x60, - 0xb8, 0x22, 0x27, 0xc5, 0x97, 0x30, 0xc3, 0x1c, 0x43, 0x61, 0xbb, 0xe1, 0x8a, 0x00, 0x23, 0x2e, - 0x14, 0x69, 0x3c, 0xb6, 0xbc, 0x96, 0x35, 0x3e, 0xef, 0x7a, 0xb4, 0xb2, 0x13, 0xd1, 0xd2, 0x30, - 0x54, 0x34, 0xf4, 0xf9, 0x0b, 0xf8, 0x1b, 0x28, 0x53, 0xa6, 0xa4, 0xd2, 0x30, 0x77, 0x0d, 0xb5, - 0x3a, 0x3a, 0x46, 0xab, 0x1f, 0x5e, 0xd9, 0xf2, 0xe4, 0xcc, 0x39, 0x95, 0xf7, 0xed, 0xfb, 0xde, - 0xbe, 0xa7, 0x6f, 0xbf, 0xf7, 0xbc, 0x40, 0xb5, 0xfb, 0xa6, 0x6e, 0x12, 0x07, 0xe9, 0x26, 0xc1, - 0x18, 0x99, 0xae, 0x4d, 0xb0, 0x3e, 0x6f, 0xea, 0xee, 0x2b, 0x6d, 0xea, 0x10, 0x97, 0x88, 0x87, - 0x76, 0xdf, 0xd4, 0x42, 0x80, 0xb6, 0x00, 0x68, 0xf3, 0xa6, 0x5c, 0xb3, 0x88, 0x45, 0x18, 0x44, - 0x0f, 0x57, 0x11, 0x5a, 0xfe, 0xc8, 0x22, 0xc4, 0xba, 0x44, 0x3a, 0xb3, 0xfa, 0xb3, 0xa1, 0xde, - 0xc3, 0x5e, 0xec, 0xe2, 0x32, 0x5d, 0xda, 0x08, 0xbb, 0x61, 0x96, 0x68, 0x15, 0x03, 0x3e, 0x5f, - 0x53, 0x0a, 0x97, 0x97, 0x01, 0xe1, 0xef, 0x3b, 0xa0, 0xfe, 0x8c, 0x5a, 0x9d, 0x74, 0xff, 0xbb, - 0x29, 0xc2, 0xe7, 0xd8, 0x76, 0xc5, 0x26, 0x28, 0x47, 0x47, 0x76, 0xed, 0x81, 0x24, 0x34, 0x84, - 0xe3, 0x72, 0xbb, 0x16, 0xf8, 0xea, 0x5d, 0xaf, 0x37, 0xb9, 0x3c, 0x83, 0xa9, 0x0b, 0x1a, 0xa5, - 0x68, 0x7d, 0x3e, 0x10, 0xbf, 0x06, 0x1f, 0x2c, 0x12, 0x84, 0x61, 0x3b, 0x2c, 0x4c, 0x0a, 0x7c, - 0xb5, 0x16, 0x87, 0xf1, 0x6e, 0x68, 0x54, 0x17, 0xf6, 0xf9, 0x40, 0xfc, 0x16, 0x54, 0x4d, 0x32, - 0xc3, 0x2e, 0x72, 0xa6, 0x3d, 0xc7, 0xf5, 0xa4, 0x62, 0x43, 0x38, 0xae, 0x9c, 0x7e, 0xaa, 0xe5, - 0xb3, 0xa6, 0x75, 0x38, 0x6c, 0x7b, 0xf7, 0x8d, 0xaf, 0x16, 0x8c, 0x4c, 0xbc, 0x28, 0x81, 0x83, - 0x39, 0x72, 0xa8, 0x4d, 0xb0, 0xb4, 0x1b, 0x16, 0x62, 0x24, 0xa6, 0x78, 0x08, 0xf6, 0xa9, 0x6d, - 0x61, 0xe4, 0x48, 0x7b, 0xcc, 0x11, 0x5b, 0x67, 0xa5, 0x5f, 0x5e, 0xab, 0x85, 0x7f, 0x5e, 0xab, - 0x05, 0xa8, 0x82, 0x4f, 0x72, 0x69, 0x31, 0x10, 0x9d, 0x12, 0x4c, 0x11, 0xfc, 0xe3, 0x00, 0xd4, - 0x56, 0x10, 0x17, 0x8e, 0xf7, 0x7f, 0x78, 0xbb, 0x00, 0xf5, 0x01, 0xa2, 0xb6, 0x83, 0x06, 0xdd, - 0x3c, 0xfe, 0x1a, 0x81, 0xaf, 0x3e, 0x88, 0xc2, 0x73, 0x61, 0xd0, 0xb8, 0x1f, 0xef, 0x77, 0x78, - 0x3a, 0x5f, 0x82, 0x87, 0x3c, 0x1d, 0x5d, 0x73, 0x44, 0x28, 0xc2, 0x4b, 0x19, 0x8a, 0x2c, 0xc3, - 0xa3, 0xc0, 0x57, 0x8f, 0x93, 0x1b, 0x7a, 0x47, 0x08, 0x34, 0x14, 0x1e, 0xd3, 0x61, 0x90, 0x4c, - 0xe2, 0xef, 0x41, 0x35, 0xfe, 0x4c, 0xea, 0xf6, 0x5c, 0xc4, 0xc8, 0xaf, 0x9c, 0xd6, 0xb4, 0x48, - 0xcf, 0x5a, 0xa2, 0x67, 0xad, 0x85, 0xbd, 0xf6, 0x51, 0xe0, 0xab, 0xf7, 0x33, 0xd4, 0xb0, 0x18, - 0x68, 0x54, 0x22, 0xf3, 0x87, 0xd0, 0x5a, 0x51, 0xc6, 0xde, 0x2d, 0x95, 0xf1, 0x1c, 0xd4, 0x33, - 0xdf, 0x19, 0xeb, 0x82, 0x4a, 0xfb, 0x8d, 0x62, 0x96, 0xf0, 0x5c, 0x18, 0x34, 0x6a, 0xfc, 0xfe, - 0x8f, 0xf1, 0xb6, 0xf8, 0x02, 0x54, 0xa7, 0x0e, 0x21, 0xc3, 0xee, 0x08, 0xd9, 0xd6, 0xc8, 0x95, - 0x0e, 0x58, 0x99, 0x32, 0x57, 0x66, 0xd4, 0xa3, 0xf3, 0xa6, 0xf6, 0x0d, 0x43, 0xb4, 0x3f, 0x0e, - 0x8b, 0x5b, 0x50, 0xc0, 0x47, 0x43, 0xa3, 0xc2, 0xcc, 0x08, 0x29, 0x3e, 0x05, 0x20, 0xf2, 0xda, - 0xd8, 0x76, 0xa5, 0x52, 0x43, 0x38, 0xae, 0xb6, 0xeb, 0x81, 0xaf, 0xde, 0xe3, 0x23, 0x43, 0x1f, - 0x34, 0xca, 0xcc, 0x60, 0x4d, 0x7c, 0x96, 0x54, 0x14, 0x65, 0x96, 0xca, 0x2c, 0xee, 0x68, 0x39, - 0x63, 0xe4, 0x4d, 0x32, 0x76, 0x98, 0x25, 0x76, 0xc0, 0x9d, 0xd8, 0x1b, 0x0a, 0x1e, 0xd3, 0x19, - 0x95, 0x00, 0x0b, 0x97, 0x03, 0x5f, 0x3d, 0xcc, 0x84, 0x27, 0x00, 0x68, 0x7c, 0x18, 0x9d, 0x90, - 0x6c, 0x88, 0x43, 0x70, 0x37, 0xf5, 0x26, 0xb4, 0x54, 0xde, 0x49, 0x8b, 0x1a, 0xd3, 0x72, 0x94, - 0x4e, 0x8d, 0xcc, 0x09, 0xd0, 0xb8, 0x93, 0x6e, 0xc5, 0xf4, 0x2c, 0x3a, 0xba, 0xba, 0xa6, 0xa3, - 0x15, 0xf0, 0x20, 0xaf, 0x5f, 0xd3, 0x86, 0xfe, 0x73, 0x2f, 0xa7, 0xa1, 0x5b, 0xe6, 0x78, 0x75, - 0xaa, 0x09, 0x1b, 0x4d, 0x35, 0x13, 0xc8, 0xd9, 0x9e, 0xca, 0xe9, 0xf0, 0xcf, 0x02, 0x5f, 0x7d, - 0x98, 0xd7, 0x7f, 0xd9, 0x83, 0xa5, 0x4c, 0xe3, 0xf1, 0x49, 0xb8, 0x51, 0x57, 0xcc, 0x8e, 0xba, - 0xed, 0x37, 0xe3, 0xb2, 0xca, 0xf7, 0xb6, 0xa8, 0xf2, 0x26, 0x88, 0xc4, 0xdb, 0x75, 0x1d, 0x4f, - 0xda, 0x67, 0x6a, 0xe3, 0x86, 0x67, 0xea, 0x82, 0x46, 0x89, 0xad, 0xc3, 0x79, 0xbb, 0x2c, 0xf1, - 0x83, 0xdb, 0x49, 0xbc, 0xb4, 0x15, 0x89, 0x97, 0xdf, 0xab, 0xc4, 0xc1, 0x06, 0x12, 0x6f, 0x99, - 0xe3, 0x54, 0xe2, 0xbf, 0xee, 0x00, 0x69, 0x05, 0xd0, 0x21, 0x78, 0x68, 0x3b, 0x93, 0xdb, 0xca, - 0x3c, 0xbd, 0xb9, 0x9e, 0x39, 0x66, 0xaa, 0xce, 0xb9, 0xb9, 0x9e, 0x39, 0x4e, 0x6e, 0x2e, 0x6c, - 0xac, 0x65, 0x21, 0x15, 0xb7, 0x28, 0xa4, 0x05, 0x59, 0xbb, 0x6b, 0xc8, 0x82, 0xa0, 0xb1, 0x8e, - 0x8b, 0x84, 0xb0, 0xd3, 0x7f, 0x8b, 0xa0, 0xf8, 0x8c, 0x5a, 0xe2, 0x4f, 0x40, 0xcc, 0x79, 0x21, - 0x9d, 0xac, 0xfb, 0xff, 0xc9, 0x7d, 0x39, 0xc8, 0x5f, 0x6c, 0x04, 0x4f, 0x6a, 0x10, 0x5f, 0x82, - 0x7b, 0xab, 0x8f, 0x8c, 0x47, 0x37, 0x3e, 0xeb, 0xc2, 0xf1, 0xe4, 0xa7, 0x9b, 0xa0, 0xd7, 0x27, - 0x0e, 0xef, 0xec, 0xe6, 0x89, 0x5b, 0xe6, 0x78, 0x83, 0xc4, 0x9c, 0x4c, 0xc5, 0x9f, 0x05, 0x50, - 0xcf, 0xd7, 0xe8, 0xe3, 0x1b, 0x9f, 0x17, 0x47, 0xc8, 0x5f, 0x6e, 0x1a, 0x91, 0x54, 0xd1, 0x7e, - 0xfe, 0xe6, 0x4a, 0x11, 0xde, 0x5e, 0x29, 0xc2, 0xdf, 0x57, 0x8a, 0xf0, 0xdb, 0xb5, 0x52, 0x78, - 0x7b, 0xad, 0x14, 0xfe, 0xba, 0x56, 0x0a, 0x2f, 0xbe, 0xb2, 0x6c, 0x77, 0x34, 0xeb, 0x6b, 0x26, - 0x99, 0xe8, 0x26, 0xa1, 0x13, 0x42, 0xe3, 0x9f, 0x13, 0x3a, 0x18, 0xeb, 0xaf, 0xf4, 0xf4, 0xed, - 0xfd, 0xf8, 0xc9, 0x09, 0xf7, 0xfc, 0x76, 0xbd, 0x29, 0xa2, 0xfd, 0x7d, 0x36, 0x71, 0x9f, 0xfc, - 0x17, 0x00, 0x00, 0xff, 0xff, 0x93, 0xae, 0x01, 0xa9, 0x2d, 0x0c, 0x00, 0x00, + // 917 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0x3f, 0x93, 0xdb, 0x44, + 0x14, 0xb7, 0xce, 0xf7, 0xc7, 0xde, 0x33, 0x24, 0x51, 0xec, 0x3b, 0x21, 0x82, 0xe4, 0xec, 0xc0, + 0x70, 0x45, 0x4e, 0x8a, 0x93, 0x30, 0x03, 0xc7, 0x50, 0xd8, 0x6e, 0xb8, 0x22, 0xc0, 0x88, 0x83, + 0x22, 0x8d, 0xc7, 0x96, 0xd7, 0xb2, 0xc6, 0xe7, 0x5d, 0x8f, 0x56, 0x76, 0x22, 0x5a, 0x1a, 0x86, + 0x8a, 0x8f, 0x90, 0x4f, 0xc1, 0x67, 0x48, 0x47, 0x4a, 0x2a, 0x0d, 0xdc, 0x35, 0xd4, 0xea, 0xe8, + 0x18, 0xad, 0xfe, 0x78, 0x65, 0xcb, 0x73, 0x36, 0xe7, 0x54, 0xd2, 0xdb, 0xf7, 0x7b, 0xef, 0xed, + 0xfe, 0xf6, 0xfd, 0xde, 0x2c, 0x50, 0xed, 0x9e, 0xa9, 0x9b, 0xc4, 0x41, 0xba, 0x49, 0x30, 0x46, + 0xa6, 0x6b, 0x13, 0xac, 0xcf, 0x1a, 0xba, 0xfb, 0x4a, 0x9b, 0x38, 0xc4, 0x25, 0xe2, 0x91, 0xdd, + 0x33, 0xb5, 0x10, 0xa0, 0xcd, 0x01, 0xda, 0xac, 0x21, 0x57, 0x2d, 0x62, 0x11, 0x06, 0xd1, 0xc3, + 0xbf, 0x08, 0x2d, 0x7f, 0x60, 0x11, 0x62, 0x5d, 0x22, 0x9d, 0x59, 0xbd, 0xe9, 0x40, 0xef, 0x62, + 0x2f, 0x76, 0x71, 0x95, 0x2e, 0x6d, 0x84, 0xdd, 0xb0, 0x4a, 0xf4, 0x17, 0x03, 0x3e, 0x5d, 0xb1, + 0x15, 0xae, 0x2e, 0x03, 0xc2, 0xdf, 0x77, 0x40, 0xed, 0x39, 0xb5, 0xda, 0xe9, 0xfa, 0xb7, 0x13, + 0x84, 0xcf, 0xb1, 0xed, 0x8a, 0x0d, 0x50, 0x8e, 0x52, 0x76, 0xec, 0xbe, 0x24, 0xd4, 0x85, 0x93, + 0x72, 0xab, 0x1a, 0xf8, 0xea, 0x5d, 0xaf, 0x3b, 0xbe, 0x3c, 0x83, 0xa9, 0x0b, 0x1a, 0xa5, 0xe8, + 0xff, 0xbc, 0x2f, 0x7e, 0x05, 0xde, 0x9b, 0x17, 0x08, 0xc3, 0x76, 0x58, 0x98, 0x14, 0xf8, 0x6a, + 0x35, 0x0e, 0xe3, 0xdd, 0xd0, 0xa8, 0xcc, 0xed, 0xf3, 0xbe, 0xf8, 0x0d, 0xa8, 0x98, 0x64, 0x8a, + 0x5d, 0xe4, 0x4c, 0xba, 0x8e, 0xeb, 0x49, 0xc5, 0xba, 0x70, 0x72, 0xf8, 0xe4, 0x63, 0x2d, 0x9f, + 0x35, 0xad, 0xcd, 0x61, 0x5b, 0xbb, 0x6f, 0x7c, 0xb5, 0x60, 0x64, 0xe2, 0xc5, 0x2f, 0xc0, 0xc1, + 0x0c, 0x39, 0xd4, 0x26, 0x58, 0xda, 0x65, 0xa9, 0xd4, 0x55, 0xa9, 0x7e, 0x8c, 0x60, 0x46, 0x82, + 0x17, 0x8f, 0xc0, 0x3e, 0xb5, 0x2d, 0x8c, 0x1c, 0x69, 0x2f, 0x3c, 0x82, 0x11, 0x5b, 0x67, 0xa5, + 0x5f, 0x5e, 0xab, 0x85, 0x7f, 0x5e, 0xab, 0x05, 0xa8, 0x82, 0x8f, 0x72, 0x79, 0x33, 0x10, 0x9d, + 0x10, 0x4c, 0x11, 0xfc, 0xe3, 0x00, 0x54, 0x97, 0x10, 0x17, 0x8e, 0xf7, 0x7f, 0x88, 0xbd, 0x00, + 0xb5, 0x3e, 0xa2, 0xb6, 0x83, 0xfa, 0x9d, 0x3c, 0x82, 0xeb, 0x81, 0xaf, 0x3e, 0x88, 0xc2, 0x73, + 0x61, 0xd0, 0xb8, 0x1f, 0xaf, 0xb7, 0x79, 0xbe, 0x5f, 0x82, 0x87, 0x3c, 0x5f, 0x1d, 0x73, 0x48, + 0x28, 0xc2, 0x0b, 0x15, 0x8a, 0xac, 0xc2, 0xa3, 0xc0, 0x57, 0x4f, 0x92, 0x2b, 0xbc, 0x21, 0x04, + 0x1a, 0x0a, 0x8f, 0x69, 0x33, 0x48, 0xa6, 0xf0, 0x77, 0xa0, 0x12, 0x1f, 0x93, 0xba, 0x5d, 0x17, + 0xc5, 0xb7, 0x53, 0xd5, 0xa2, 0x86, 0xd7, 0x92, 0x86, 0xd7, 0x9a, 0xd8, 0x6b, 0x1d, 0x07, 0xbe, + 0x7a, 0x3f, 0x43, 0x0d, 0x8b, 0x81, 0xc6, 0x61, 0x64, 0x7e, 0x1f, 0x5a, 0x4b, 0xad, 0xb3, 0x77, + 0xcb, 0xd6, 0x99, 0x81, 0x5a, 0xe6, 0x9c, 0x71, 0x5f, 0x50, 0x69, 0xbf, 0x5e, 0x5c, 0xa3, 0x91, + 0xf8, 0x1b, 0xc9, 0xcd, 0x03, 0x8d, 0x2a, 0xbf, 0x1e, 0x87, 0x51, 0xf1, 0x05, 0xa8, 0x4c, 0x1c, + 0x42, 0x06, 0x9d, 0x21, 0xb2, 0xad, 0xa1, 0x2b, 0x1d, 0xb0, 0x73, 0xc8, 0x5c, 0xb9, 0x48, 0xe5, + 0xb3, 0x86, 0xf6, 0x35, 0x43, 0xb4, 0x3e, 0x0c, 0x77, 0x3f, 0xe7, 0x88, 0x8f, 0x86, 0xc6, 0x21, + 0x33, 0x23, 0xa4, 0xf8, 0x0c, 0x80, 0xc8, 0x6b, 0x63, 0xdb, 0x95, 0x4a, 0x75, 0xe1, 0xa4, 0xd2, + 0xaa, 0x05, 0xbe, 0x7a, 0x8f, 0x8f, 0x0c, 0x7d, 0xd0, 0x28, 0x33, 0x83, 0x8d, 0x81, 0xb3, 0x64, + 0x47, 0x51, 0x65, 0xa9, 0xcc, 0xe2, 0x8e, 0x17, 0x2b, 0x46, 0xde, 0xa4, 0x62, 0x9b, 0x59, 0x62, + 0x1b, 0xdc, 0x89, 0xbd, 0xa1, 0x22, 0x30, 0x9d, 0x52, 0x09, 0xb0, 0x70, 0x39, 0xf0, 0xd5, 0xa3, + 0x4c, 0x78, 0x02, 0x80, 0xc6, 0xfb, 0x51, 0x86, 0x64, 0x41, 0x1c, 0x80, 0xbb, 0xa9, 0x37, 0xa1, + 0xe5, 0xf0, 0x46, 0x5a, 0xd4, 0x98, 0x96, 0xe3, 0x74, 0xee, 0x64, 0x32, 0x40, 0xe3, 0x4e, 0xba, + 0x14, 0xd3, 0x33, 0x97, 0x7c, 0x65, 0x85, 0xe4, 0x15, 0xf0, 0x20, 0x4f, 0xd0, 0xa9, 0xe2, 0xff, + 0xde, 0xcb, 0x51, 0x7c, 0xd3, 0x1c, 0x2d, 0xcf, 0x45, 0x61, 0xa3, 0xb9, 0x68, 0x02, 0x39, 0x2b, + 0xba, 0x9c, 0x11, 0xf0, 0x49, 0xe0, 0xab, 0x0f, 0xf3, 0x04, 0x9a, 0x4d, 0x2c, 0x65, 0x94, 0xc9, + 0x17, 0xe1, 0x86, 0x65, 0x71, 0xc3, 0x61, 0xb9, 0x7d, 0x39, 0x2f, 0xca, 0x60, 0x6f, 0x8b, 0x32, + 0x68, 0x80, 0xa8, 0xbb, 0x3b, 0xae, 0xe3, 0x49, 0xfb, 0xac, 0x1d, 0xb9, 0xf1, 0x9b, 0xba, 0xa0, + 0x51, 0x62, 0xff, 0xe1, 0xc4, 0x5e, 0xd4, 0xc0, 0xc1, 0xed, 0x34, 0x50, 0xda, 0x8a, 0x06, 0xca, + 0xef, 0x54, 0x03, 0x60, 0x03, 0x0d, 0x34, 0xcd, 0x51, 0xaa, 0x81, 0x5f, 0x77, 0x80, 0xb4, 0x04, + 0x68, 0x13, 0x3c, 0xb0, 0x9d, 0xf1, 0x6d, 0x75, 0x90, 0xde, 0x5c, 0xd7, 0x1c, 0xb1, 0xb6, 0xcf, + 0xb9, 0xb9, 0xae, 0x39, 0x4a, 0x6e, 0x2e, 0x54, 0xde, 0x62, 0x23, 0x15, 0xb7, 0xd8, 0x48, 0x73, + 0xb2, 0x76, 0x57, 0x90, 0x05, 0x41, 0x7d, 0x15, 0x17, 0x09, 0x61, 0x4f, 0xfe, 0x2d, 0x82, 0xe2, + 0x73, 0x6a, 0x89, 0x3f, 0x01, 0x31, 0xe7, 0x11, 0x76, 0xba, 0x4a, 0x84, 0xb9, 0x6f, 0x0f, 0xf9, + 0xb3, 0x8d, 0xe0, 0xc9, 0x1e, 0xc4, 0x97, 0xe0, 0xde, 0xf2, 0x33, 0xe5, 0xd1, 0xda, 0xb9, 0x2e, + 0x1c, 0x4f, 0x7e, 0xb6, 0x09, 0x7a, 0x75, 0xe1, 0xf0, 0xce, 0xd6, 0x2f, 0xdc, 0x34, 0x47, 0x1b, + 0x14, 0xe6, 0xda, 0x54, 0xfc, 0x59, 0x00, 0xb5, 0xfc, 0x1e, 0x7d, 0xbc, 0x76, 0xbe, 0x38, 0x42, + 0xfe, 0x7c, 0xd3, 0x88, 0x64, 0x17, 0xad, 0x1f, 0xde, 0x5c, 0x29, 0xc2, 0xdb, 0x2b, 0x45, 0xf8, + 0xeb, 0x4a, 0x11, 0x7e, 0xbb, 0x56, 0x0a, 0x6f, 0xaf, 0x95, 0xc2, 0x9f, 0xd7, 0x4a, 0xe1, 0xc5, + 0x97, 0x96, 0xed, 0x0e, 0xa7, 0x3d, 0xcd, 0x24, 0x63, 0xdd, 0x24, 0x74, 0x4c, 0x68, 0xfc, 0x39, + 0xa5, 0xfd, 0x91, 0xfe, 0x4a, 0x4f, 0x9f, 0xf7, 0x8f, 0x9f, 0x9e, 0x72, 0x2f, 0x7c, 0xd7, 0x9b, + 0x20, 0xda, 0xdb, 0x67, 0x13, 0xf7, 0xe9, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x86, 0xcf, 0x23, + 0x2c, 0x90, 0x0c, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -667,10 +668,15 @@ func (m *MsgConnectionOpenInit) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x2a } - if len(m.Version) > 0 { - i -= len(m.Version) - copy(dAtA[i:], m.Version) - i = encodeVarintTx(dAtA, i, uint64(len(m.Version))) + if m.Version != nil { + { + size, err := m.Version.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } i-- dAtA[i] = 0x22 } @@ -794,9 +800,14 @@ func (m *MsgConnectionOpenTry) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0x3a if len(m.CounterpartyVersions) > 0 { for iNdEx := len(m.CounterpartyVersions) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.CounterpartyVersions[iNdEx]) - copy(dAtA[i:], m.CounterpartyVersions[iNdEx]) - i = encodeVarintTx(dAtA, i, uint64(len(m.CounterpartyVersions[iNdEx]))) + { + size, err := m.CounterpartyVersions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } i-- dAtA[i] = 0x32 } @@ -950,10 +961,15 @@ func (m *MsgConnectionOpenAck) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x22 } - if len(m.Version) > 0 { - i -= len(m.Version) - copy(dAtA[i:], m.Version) - i = encodeVarintTx(dAtA, i, uint64(len(m.Version))) + if m.Version != nil { + { + size, err := m.Version.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } i-- dAtA[i] = 0x1a } @@ -1101,8 +1117,8 @@ func (m *MsgConnectionOpenInit) Size() (n int) { } l = m.Counterparty.Size() n += 1 + l + sovTx(uint64(l)) - l = len(m.Version) - if l > 0 { + if m.Version != nil { + l = m.Version.Size() n += 1 + l + sovTx(uint64(l)) } l = len(m.Signer) @@ -1146,8 +1162,8 @@ func (m *MsgConnectionOpenTry) Size() (n int) { l = m.Counterparty.Size() n += 1 + l + sovTx(uint64(l)) if len(m.CounterpartyVersions) > 0 { - for _, s := range m.CounterpartyVersions { - l = len(s) + for _, e := range m.CounterpartyVersions { + l = e.Size() n += 1 + l + sovTx(uint64(l)) } } @@ -1197,8 +1213,8 @@ func (m *MsgConnectionOpenAck) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = len(m.Version) - if l > 0 { + if m.Version != nil { + l = m.Version.Size() n += 1 + l + sovTx(uint64(l)) } if m.ClientState != nil { @@ -1405,7 +1421,7 @@ func (m *MsgConnectionOpenInit) Unmarshal(dAtA []byte) error { if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTx @@ -1415,23 +1431,27 @@ func (m *MsgConnectionOpenInit) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthTx } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthTx } if postIndex > l { return io.ErrUnexpectedEOF } - m.Version = string(dAtA[iNdEx:postIndex]) + if m.Version == nil { + m.Version = &Version{} + } + if err := m.Version.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 5: if wireType != 2 { @@ -1740,7 +1760,7 @@ func (m *MsgConnectionOpenTry) Unmarshal(dAtA []byte) error { if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field CounterpartyVersions", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTx @@ -1750,23 +1770,25 @@ func (m *MsgConnectionOpenTry) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthTx } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthTx } if postIndex > l { return io.ErrUnexpectedEOF } - m.CounterpartyVersions = append(m.CounterpartyVersions, string(dAtA[iNdEx:postIndex])) + m.CounterpartyVersions = append(m.CounterpartyVersions, &Version{}) + if err := m.CounterpartyVersions[len(m.CounterpartyVersions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 7: if wireType != 2 { @@ -2142,7 +2164,7 @@ func (m *MsgConnectionOpenAck) Unmarshal(dAtA []byte) error { if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTx @@ -2152,23 +2174,27 @@ func (m *MsgConnectionOpenAck) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthTx } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthTx } if postIndex > l { return io.ErrUnexpectedEOF } - m.Version = string(dAtA[iNdEx:postIndex]) + if m.Version == nil { + m.Version = &Version{} + } + if err := m.Version.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 4: if wireType != 2 { diff --git a/x/ibc/core/03-connection/types/version.go b/x/ibc/core/03-connection/types/version.go index 7134719485..10c5b33d28 100644 --- a/x/ibc/core/03-connection/types/version.go +++ b/x/ibc/core/03-connection/types/version.go @@ -4,6 +4,7 @@ import ( "strings" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/x/ibc/core/exported" ) var ( @@ -24,9 +25,11 @@ var ( } ) +var _ exported.Version = &Version{} + // NewVersion returns a new instance of Version. -func NewVersion(identifier string, features []string) Version { - return Version{ +func NewVersion(identifier string, features []string) *Version { + return &Version{ Identifier: identifier, Features: features, } @@ -44,12 +47,10 @@ func (version Version) GetFeatures() []string { // ValidateVersion does basic validation of the version identifier and // features. It unmarshals the version string into a Version object. -func ValidateVersion(encodedVersion string) error { - var version Version - if err := SubModuleCdc.UnmarshalBinaryBare([]byte(encodedVersion), &version); err != nil { - return sdkerrors.Wrapf(err, "failed to unmarshal version string %s", encodedVersion) +func ValidateVersion(version *Version) error { + if version == nil { + return sdkerrors.Wrap(ErrInvalidVersion, "version cannot be nil") } - if strings.TrimSpace(version.Identifier) == "" { return sdkerrors.Wrap(ErrInvalidVersion, "version identifier cannot be blank") } @@ -62,173 +63,11 @@ func ValidateVersion(encodedVersion string) error { return nil } -// Encode proto encodes the version and returns the bytes as a string. -func (version Version) Encode() (string, error) { - encodedVersion, err := SubModuleCdc.MarshalBinaryBare(&version) - if err != nil { - return "", err - } - - return string(encodedVersion), nil -} - -// EncodeVersions iterates over the provided versions and marshals each -// into proto encoded strings. This represents the stored value of the version -// in the connection end as well as the value passed over the wire. -func EncodeVersions(versions []Version) ([]string, error) { - encodedVersions := make([]string, len(versions)) - - for i, version := range versions { - ver, err := version.Encode() - if err != nil { - return nil, err - } - - encodedVersions[i] = ver - } - - return encodedVersions, nil -} - -// DecodeVersion unmarshals a proto encoded version into a Version struct. -func DecodeVersion(encodedVersion string) (Version, error) { - var version Version - if err := SubModuleCdc.UnmarshalBinaryBare([]byte(encodedVersion), &version); err != nil { - return Version{}, sdkerrors.Wrapf(err, "failed to unmarshal version string %s", encodedVersion) - } - - return version, nil -} - -// DecodeVersions returns the supplied list of proto encoded version strings -// as unmarshalled Version structs. -func DecodeVersions(encodedVersions []string) ([]Version, error) { - versions := make([]Version, len(encodedVersions)) - - for i, encodedVersion := range encodedVersions { - version, err := DecodeVersion(encodedVersion) - if err != nil { - return nil, err - } - - versions[i] = version - } - - return versions, nil -} - -// GetCompatibleVersions returns a descending ordered set of compatible IBC -// versions for the caller chain's connection end. The latest supported -// version should be first element and the set should descend to the oldest -// supported version. -func GetCompatibleVersions() []Version { - return []Version{DefaultIBCVersion} -} - -// GetCompatibleEncodedVersions returns the return value from GetCompatibleVersions -// as a proto encoded string. -func GetCompatibleEncodedVersions() []string { - versions, err := EncodeVersions(GetCompatibleVersions()) - if err != nil { - panic(err) // should not occur with properly set hardcoded versions - } - - return versions -} - -// IsSupportedVersion returns true if the proposed version has a matching version -// identifier and its entire feature set is supported or the version identifier -// supports an empty feature set. -func IsSupportedVersion(encodedProposedVersion string) bool { - proposedVersion, err := DecodeVersion(encodedProposedVersion) - if err != nil { - return false - } - - supportedVersion, found := FindSupportedVersion(proposedVersion, GetCompatibleVersions()) - if !found { - return false - } - - if err := supportedVersion.VerifyProposedVersion(proposedVersion); err != nil { - return false - } - - return true -} - -// FindSupportedVersion returns the version with a matching version identifier -// if it exists. The returned boolean is true if the version is found and -// false otherwise. -func FindSupportedVersion(version Version, supportedVersions []Version) (Version, bool) { - for _, supportedVersion := range supportedVersions { - if version.GetIdentifier() == supportedVersion.GetIdentifier() { - return supportedVersion, true - } - } - return Version{}, false -} - -// PickVersion iterates over the descending ordered set of compatible IBC -// versions and selects the first version with a version identifier that is -// supported by the counterparty. The returned version contains a feature -// set with the intersection of the features supported by the source and -// counterparty chains. If the feature set intersection is nil and this is -// not allowed for the chosen version identifier then the search for a -// compatible version continues. This function is called in the ConnOpenTry -// handshake procedure. -// -// CONTRACT: PickVersion must only provide a version that is in the -// intersection of the supported versions and the counterparty versions. -func PickVersion(encodedSupportedVersions, encodedCounterpartyVersions []string) (string, error) { - supportedVersions, err := DecodeVersions(encodedSupportedVersions) - if err != nil { - return "", sdkerrors.Wrapf(err, "failed to unmarshal supported versions (%s) when attempting to pick compatible version", encodedSupportedVersions) - } - - counterpartyVersions, err := DecodeVersions(encodedCounterpartyVersions) - if err != nil { - return "", sdkerrors.Wrapf(err, "failed to unmarshal counterparty versions (%s) when attempting to pick compatible version", encodedCounterpartyVersions) - } - - for _, supportedVersion := range supportedVersions { - // check if the source version is supported by the counterparty - if counterpartyVersion, found := FindSupportedVersion(supportedVersion, counterpartyVersions); found { - - featureSet := GetFeatureSetIntersection(supportedVersion.GetFeatures(), counterpartyVersion.GetFeatures()) - if len(featureSet) == 0 && !allowNilFeatureSet[supportedVersion.GetIdentifier()] { - continue - } - - return NewVersion(supportedVersion.GetIdentifier(), featureSet).Encode() - } - } - - return "", sdkerrors.Wrapf( - ErrVersionNegotiationFailed, - "failed to find a matching counterparty version (%s) from the supported version list (%s)", counterpartyVersions, supportedVersions, - ) -} - -// GetFeatureSetIntersection returns the intersections of source feature set -// and the counterparty feature set. This is done by iterating over all the -// features in the source version and seeing if they exist in the feature -// set for the counterparty version. -func GetFeatureSetIntersection(sourceFeatureSet, counterpartyFeatureSet []string) (featureSet []string) { - for _, feature := range sourceFeatureSet { - if contains(feature, counterpartyFeatureSet) { - featureSet = append(featureSet, feature) - } - } - - return featureSet -} - // VerifyProposedVersion verifies that the entire feature set in the // proposed version is supported by this chain. If the feature set is // empty it verifies that this is allowed for the specified version // identifier. -func (version Version) VerifyProposedVersion(proposedVersion Version) error { +func (version Version) VerifyProposedVersion(proposedVersion exported.Version) error { if proposedVersion.GetIdentifier() != version.GetIdentifier() { return sdkerrors.Wrapf( ErrVersionNegotiationFailed, @@ -257,12 +96,7 @@ func (version Version) VerifyProposedVersion(proposedVersion Version) error { // VerifySupportedFeature takes in a version and feature string and returns // true if the feature is supported by the version and false otherwise. -func VerifySupportedFeature(encodedVersion, feature string) bool { - version, err := DecodeVersion(encodedVersion) - if err != nil { - return false - } - +func VerifySupportedFeature(version exported.Version, feature string) bool { for _, f := range version.GetFeatures() { if f == feature { return true @@ -271,6 +105,108 @@ func VerifySupportedFeature(encodedVersion, feature string) bool { return false } +// GetCompatibleVersions returns a descending ordered set of compatible IBC +// versions for the caller chain's connection end. The latest supported +// version should be first element and the set should descend to the oldest +// supported version. +func GetCompatibleVersions() []exported.Version { + return []exported.Version{DefaultIBCVersion} +} + +// IsSupportedVersion returns true if the proposed version has a matching version +// identifier and its entire feature set is supported or the version identifier +// supports an empty feature set. +func IsSupportedVersion(proposedVersion *Version) bool { + supportedVersion, found := FindSupportedVersion(proposedVersion, GetCompatibleVersions()) + if !found { + return false + } + + if err := supportedVersion.VerifyProposedVersion(proposedVersion); err != nil { + return false + } + + return true +} + +// FindSupportedVersion returns the version with a matching version identifier +// if it exists. The returned boolean is true if the version is found and +// false otherwise. +func FindSupportedVersion(version exported.Version, supportedVersions []exported.Version) (exported.Version, bool) { + for _, supportedVersion := range supportedVersions { + if version.GetIdentifier() == supportedVersion.GetIdentifier() { + return supportedVersion, true + } + } + return nil, false +} + +// PickVersion iterates over the descending ordered set of compatible IBC +// versions and selects the first version with a version identifier that is +// supported by the counterparty. The returned version contains a feature +// set with the intersection of the features supported by the source and +// counterparty chains. If the feature set intersection is nil and this is +// not allowed for the chosen version identifier then the search for a +// compatible version continues. This function is called in the ConnOpenTry +// handshake procedure. +// +// CONTRACT: PickVersion must only provide a version that is in the +// intersection of the supported versions and the counterparty versions. +func PickVersion(supportedVersions, counterpartyVersions []exported.Version) (*Version, error) { + for _, supportedVersion := range supportedVersions { + // check if the source version is supported by the counterparty + if counterpartyVersion, found := FindSupportedVersion(supportedVersion, counterpartyVersions); found { + featureSet := GetFeatureSetIntersection(supportedVersion.GetFeatures(), counterpartyVersion.GetFeatures()) + if len(featureSet) == 0 && !allowNilFeatureSet[supportedVersion.GetIdentifier()] { + continue + } + + return NewVersion(supportedVersion.GetIdentifier(), featureSet), nil + } + } + + return nil, sdkerrors.Wrapf( + ErrVersionNegotiationFailed, + "failed to find a matching counterparty version (%v) from the supported version list (%v)", counterpartyVersions, supportedVersions, + ) +} + +// GetFeatureSetIntersection returns the intersections of source feature set +// and the counterparty feature set. This is done by iterating over all the +// features in the source version and seeing if they exist in the feature +// set for the counterparty version. +func GetFeatureSetIntersection(sourceFeatureSet, counterpartyFeatureSet []string) (featureSet []string) { + for _, feature := range sourceFeatureSet { + if contains(feature, counterpartyFeatureSet) { + featureSet = append(featureSet, feature) + } + } + + return featureSet +} + +// ExportedVersionsToProto casts a slice of the Version interface to a slice +// of the Version proto definition. +func ExportedVersionsToProto(exportedVersions []exported.Version) []*Version { + versions := make([]*Version, len(exportedVersions)) + for i := range exportedVersions { + versions[i] = exportedVersions[i].(*Version) + } + + return versions +} + +// ProtoVersionsToExported converts a slice of the Version proto definition to +// the Version interface. +func ProtoVersionsToExported(versions []*Version) []exported.Version { + exportedVersions := make([]exported.Version, len(versions)) + for i := range versions { + exportedVersions[i] = versions[i] + } + + return exportedVersions +} + // contains returns true if the provided string element exists within the // string set. func contains(elem string, set []string) bool { diff --git a/x/ibc/core/03-connection/types/version_test.go b/x/ibc/core/03-connection/types/version_test.go index a18c87dde3..8f882dd327 100644 --- a/x/ibc/core/03-connection/types/version_test.go +++ b/x/ibc/core/03-connection/types/version_test.go @@ -6,13 +6,14 @@ import ( "github.com/stretchr/testify/require" "github.com/cosmos/cosmos-sdk/x/ibc/core/03-connection/types" + "github.com/cosmos/cosmos-sdk/x/ibc/core/exported" ibctesting "github.com/cosmos/cosmos-sdk/x/ibc/testing" ) func TestValidateVersion(t *testing.T) { testCases := []struct { name string - version types.Version + version *types.Version expPass bool }{ {"valid version", types.DefaultIBCVersion, true}, @@ -22,10 +23,7 @@ func TestValidateVersion(t *testing.T) { } for i, tc := range testCases { - encodedVersion, err := tc.version.Encode() - require.NoError(t, err, "test case %d failed to marshal version string: %s", i, tc.name) - - err = types.ValidateVersion(encodedVersion) + err := types.ValidateVersion(tc.version) if tc.expPass { require.NoError(t, err, "valid test case %d failed: %s", i, tc.name) @@ -35,44 +33,20 @@ func TestValidateVersion(t *testing.T) { } } -func TestDecodeVersion(t *testing.T) { - testCases := []struct { - name string - version string - expVersion types.Version - expPass bool - }{ - {"valid version", ibctesting.ConnectionVersion, types.DefaultIBCVersion, true}, - {"invalid version", "not a proto encoded version", types.Version{}, false}, - {"empty string", " ", types.Version{}, false}, - } - - for i, tc := range testCases { - version, err := types.DecodeVersion(tc.version) - - if tc.expPass { - require.NoError(t, err, "valid test case %d failed: %s", i, tc.name) - require.Equal(t, tc.expVersion, version) - } else { - require.Error(t, err, "invalid test case %d passed: %s", i, tc.name) - } - } -} - func TestIsSupportedVersion(t *testing.T) { testCases := []struct { name string - version types.Version + version *types.Version expPass bool }{ { "version is supported", - types.GetCompatibleVersions()[0], + types.ExportedVersionsToProto(types.GetCompatibleVersions())[0], true, }, { "version is not supported", - types.Version{}, + &types.Version{}, false, }, { @@ -82,75 +56,64 @@ func TestIsSupportedVersion(t *testing.T) { }, } - // test that a version that cannot be decoded does not pass - require.False(t, types.IsSupportedVersion("1.0")) - for _, tc := range testCases { - encodedVersion, err := tc.version.Encode() - require.NoError(t, err) - - require.Equal(t, tc.expPass, types.IsSupportedVersion(encodedVersion)) + require.Equal(t, tc.expPass, types.IsSupportedVersion(tc.version)) } } func TestFindSupportedVersion(t *testing.T) { testCases := []struct { name string - version types.Version - supportedVersions []types.Version - expVersion types.Version + version *types.Version + supportedVersions []exported.Version + expVersion *types.Version expFound bool }{ {"valid supported version", types.DefaultIBCVersion, types.GetCompatibleVersions(), types.DefaultIBCVersion, true}, - {"empty (invalid) version", types.Version{}, types.GetCompatibleVersions(), types.Version{}, false}, - {"empty supported versions", types.DefaultIBCVersion, []types.Version{}, types.Version{}, false}, - {"desired version is last", types.DefaultIBCVersion, []types.Version{types.NewVersion("1.1", nil), types.NewVersion("2", []string{"ORDER_UNORDERED"}), types.NewVersion("3", nil), types.DefaultIBCVersion}, types.DefaultIBCVersion, true}, + {"empty (invalid) version", &types.Version{}, types.GetCompatibleVersions(), &types.Version{}, false}, + {"empty supported versions", types.DefaultIBCVersion, []exported.Version{}, &types.Version{}, false}, + {"desired version is last", types.DefaultIBCVersion, []exported.Version{types.NewVersion("1.1", nil), types.NewVersion("2", []string{"ORDER_UNORDERED"}), types.NewVersion("3", nil), types.DefaultIBCVersion}, types.DefaultIBCVersion, true}, {"desired version identifier with different feature set", types.NewVersion(types.DefaultIBCVersionIdentifier, []string{"ORDER_DAG"}), types.GetCompatibleVersions(), types.DefaultIBCVersion, true}, - {"version not supported", types.NewVersion("2", []string{"ORDER_DAG"}), types.GetCompatibleVersions(), types.Version{}, false}, + {"version not supported", types.NewVersion("2", []string{"ORDER_DAG"}), types.GetCompatibleVersions(), &types.Version{}, false}, } for i, tc := range testCases { version, found := types.FindSupportedVersion(tc.version, tc.supportedVersions) - - require.Equal(t, tc.expVersion.GetIdentifier(), version.GetIdentifier(), "test case %d: %s", i, tc.name) - require.Equal(t, tc.expFound, found, "test case %d: %s", i, tc.name) + if tc.expFound { + require.Equal(t, tc.expVersion.GetIdentifier(), version.GetIdentifier(), "test case %d: %s", i, tc.name) + require.True(t, found, "test case %d: %s", i, tc.name) + } else { + require.False(t, found, "test case: %s", tc.name) + require.Nil(t, version, "test case: %s", tc.name) + } } } func TestPickVersion(t *testing.T) { testCases := []struct { name string - supportedVersions []types.Version - counterpartyVersions []types.Version - expVer types.Version + supportedVersions []exported.Version + counterpartyVersions []exported.Version + expVer *types.Version expPass bool }{ {"valid default ibc version", types.GetCompatibleVersions(), types.GetCompatibleVersions(), types.DefaultIBCVersion, true}, - {"valid version in counterparty versions", types.GetCompatibleVersions(), []types.Version{types.NewVersion("version1", nil), types.NewVersion("2.0.0", []string{"ORDER_UNORDERED-ZK"}), types.DefaultIBCVersion}, types.DefaultIBCVersion, true}, - {"valid identifier match but empty feature set not allowed", types.GetCompatibleVersions(), []types.Version{types.NewVersion(types.DefaultIBCVersionIdentifier, []string{"DAG", "ORDERED-ZK", "UNORDERED-zk]"})}, types.NewVersion(types.DefaultIBCVersionIdentifier, nil), false}, - {"empty counterparty versions", types.GetCompatibleVersions(), []types.Version{}, types.Version{}, false}, - {"non-matching counterparty versions", types.GetCompatibleVersions(), []types.Version{types.NewVersion("2.0.0", nil)}, types.Version{}, false}, - {"non-matching counterparty versions (uses ordered channels only) contained in supported versions (uses unordered channels only)", []types.Version{types.NewVersion(types.DefaultIBCVersionIdentifier, []string{"ORDER_UNORDERED"})}, []types.Version{types.NewVersion(types.DefaultIBCVersionIdentifier, []string{"ORDER_ORDERED"})}, types.Version{}, false}, + {"valid version in counterparty versions", types.GetCompatibleVersions(), []exported.Version{types.NewVersion("version1", nil), types.NewVersion("2.0.0", []string{"ORDER_UNORDERED-ZK"}), types.DefaultIBCVersion}, types.DefaultIBCVersion, true}, + {"valid identifier match but empty feature set not allowed", types.GetCompatibleVersions(), []exported.Version{types.NewVersion(types.DefaultIBCVersionIdentifier, []string{"DAG", "ORDERED-ZK", "UNORDERED-zk]"})}, types.NewVersion(types.DefaultIBCVersionIdentifier, nil), false}, + {"empty counterparty versions", types.GetCompatibleVersions(), []exported.Version{}, &types.Version{}, false}, + {"non-matching counterparty versions", types.GetCompatibleVersions(), []exported.Version{types.NewVersion("2.0.0", nil)}, &types.Version{}, false}, + {"non-matching counterparty versions (uses ordered channels only) contained in supported versions (uses unordered channels only)", []exported.Version{types.NewVersion(types.DefaultIBCVersionIdentifier, []string{"ORDER_UNORDERED"})}, []exported.Version{types.NewVersion(types.DefaultIBCVersionIdentifier, []string{"ORDER_ORDERED"})}, &types.Version{}, false}, } for i, tc := range testCases { - encodedSupportedVersions, err := types.EncodeVersions(tc.supportedVersions) - require.NoError(t, err) - - encodedCounterpartyVersions, err := types.EncodeVersions(tc.counterpartyVersions) - require.NoError(t, err) - - encodedVersion, err := types.PickVersion(encodedSupportedVersions, encodedCounterpartyVersions) + version, err := types.PickVersion(tc.supportedVersions, tc.counterpartyVersions) if tc.expPass { require.NoError(t, err, "valid test case %d failed: %s", i, tc.name) - - version, err := types.DecodeVersion(encodedVersion) - require.NoError(t, err) - require.Equal(t, tc.expVer, version, "valid test case %d falied: %s", i, tc.name) } else { require.Error(t, err, "invalid test case %d passed: %s", i, tc.name) - require.Equal(t, "", encodedVersion, "invalid test case %d passed: %s", i, tc.name) + var emptyVersion *types.Version + require.Equal(t, emptyVersion, version, "invalid test case %d passed: %s", i, tc.name) } } } @@ -158,8 +121,8 @@ func TestPickVersion(t *testing.T) { func TestVerifyProposedVersion(t *testing.T) { testCases := []struct { name string - proposedVersion types.Version - supportedVersion types.Version + proposedVersion *types.Version + supportedVersion *types.Version expPass bool }{ {"entire feature set supported", types.DefaultIBCVersion, types.NewVersion("1", []string{"ORDER_ORDERED", "ORDER_UNORDERED", "ORDER_DAG"}), true}, @@ -182,12 +145,11 @@ func TestVerifyProposedVersion(t *testing.T) { } func TestVerifySupportedFeature(t *testing.T) { - nilFeatures, err := types.NewVersion(types.DefaultIBCVersionIdentifier, nil).Encode() - require.NoError(t, err) + nilFeatures := types.NewVersion(types.DefaultIBCVersionIdentifier, nil) testCases := []struct { name string - version string + version *types.Version feature string expPass bool }{ @@ -195,7 +157,6 @@ func TestVerifySupportedFeature(t *testing.T) { {"check UNORDERED supported", ibctesting.ConnectionVersion, "ORDER_UNORDERED", true}, {"check DAG unsupported", ibctesting.ConnectionVersion, "ORDER_DAG", false}, {"check empty feature set returns false", nilFeatures, "ORDER_ORDERED", false}, - {"failed to unmarshal version", "not an encoded version", "ORDER_ORDERED", false}, } for i, tc := range testCases { diff --git a/x/ibc/core/04-channel/keeper/handshake_test.go b/x/ibc/core/04-channel/keeper/handshake_test.go index 927bc3131b..fe5dc3593a 100644 --- a/x/ibc/core/04-channel/keeper/handshake_test.go +++ b/x/ibc/core/04-channel/keeper/handshake_test.go @@ -56,8 +56,7 @@ func (suite *KeeperTestSuite) TestChanOpenInit() { // modify connA versions conn := suite.chainA.GetConnection(connA) - version, err := connectiontypes.NewVersion("2", []string{"ORDER_ORDERED", "ORDER_UNORDERED"}).Encode() - suite.Require().NoError(err) + version := connectiontypes.NewVersion("2", []string{"ORDER_ORDERED", "ORDER_UNORDERED"}) conn.Versions = append(conn.Versions, version) suite.chainA.App.IBCKeeper.ConnectionKeeper.SetConnection( @@ -74,9 +73,8 @@ func (suite *KeeperTestSuite) TestChanOpenInit() { // modify connA versions to only support UNORDERED channels conn := suite.chainA.GetConnection(connA) - version, err := connectiontypes.NewVersion("1", []string{"ORDER_UNORDERED"}).Encode() - suite.Require().NoError(err) - conn.Versions = []string{version} + version := connectiontypes.NewVersion("1", []string{"ORDER_UNORDERED"}) + conn.Versions = []*connectiontypes.Version{version} suite.chainA.App.IBCKeeper.ConnectionKeeper.SetConnection( suite.chainA.GetContext(), @@ -244,8 +242,7 @@ func (suite *KeeperTestSuite) TestChanOpenTry() { // modify connB versions conn := suite.chainB.GetConnection(connB) - version, err := connectiontypes.NewVersion("2", []string{"ORDER_ORDERED", "ORDER_UNORDERED"}).Encode() - suite.Require().NoError(err) + version := connectiontypes.NewVersion("2", []string{"ORDER_ORDERED", "ORDER_UNORDERED"}) conn.Versions = append(conn.Versions, version) suite.chainB.App.IBCKeeper.ConnectionKeeper.SetConnection( @@ -262,9 +259,8 @@ func (suite *KeeperTestSuite) TestChanOpenTry() { // modify connA versions to only support UNORDERED channels conn := suite.chainA.GetConnection(connA) - version, err := connectiontypes.NewVersion("1", []string{"ORDER_UNORDERED"}).Encode() - suite.Require().NoError(err) - conn.Versions = []string{version} + version := connectiontypes.NewVersion("1", []string{"ORDER_UNORDERED"}) + conn.Versions = []*connectiontypes.Version{version} suite.chainA.App.IBCKeeper.ConnectionKeeper.SetConnection( suite.chainA.GetContext(), diff --git a/x/ibc/core/exported/connection.go b/x/ibc/core/exported/connection.go index d8eddf9df1..a21c5a5364 100644 --- a/x/ibc/core/exported/connection.go +++ b/x/ibc/core/exported/connection.go @@ -5,7 +5,7 @@ type ConnectionI interface { GetClientID() string GetState() int32 GetCounterparty() CounterpartyConnectionI - GetVersions() []string + GetVersions() []Version ValidateBasic() error } @@ -16,3 +16,10 @@ type CounterpartyConnectionI interface { GetPrefix() Prefix ValidateBasic() error } + +// Version defines an IBC version used in connection handshake negotiation. +type Version interface { + GetIdentifier() string + GetFeatures() []string + VerifyProposedVersion(Version) error +} diff --git a/x/ibc/core/genesis_test.go b/x/ibc/core/genesis_test.go index 6dc06a5de8..482027fb88 100644 --- a/x/ibc/core/genesis_test.go +++ b/x/ibc/core/genesis_test.go @@ -100,7 +100,7 @@ func (suite *IBCTestSuite) TestValidateGenesis() { ), ConnectionGenesis: connectiontypes.NewGenesisState( []connectiontypes.IdentifiedConnection{ - connectiontypes.NewIdentifiedConnection(connectionID, connectiontypes.NewConnectionEnd(connectiontypes.INIT, clientID, connectiontypes.NewCounterparty(clientID2, connectionID2, commitmenttypes.NewMerklePrefix([]byte("prefix"))), []string{ibctesting.ConnectionVersion})), + connectiontypes.NewIdentifiedConnection(connectionID, connectiontypes.NewConnectionEnd(connectiontypes.INIT, clientID, connectiontypes.NewCounterparty(clientID2, connectionID2, commitmenttypes.NewMerklePrefix([]byte("prefix"))), []*connectiontypes.Version{ibctesting.ConnectionVersion})), }, []connectiontypes.ConnectionPaths{ connectiontypes.NewConnectionPaths(clientID, []string{host.ConnectionPath(connectionID)}), @@ -159,7 +159,7 @@ func (suite *IBCTestSuite) TestValidateGenesis() { ClientGenesis: clienttypes.DefaultGenesisState(), ConnectionGenesis: connectiontypes.NewGenesisState( []connectiontypes.IdentifiedConnection{ - connectiontypes.NewIdentifiedConnection(connectionID, connectiontypes.NewConnectionEnd(connectiontypes.INIT, "(CLIENTIDONE)", connectiontypes.NewCounterparty(clientID, connectionID2, commitmenttypes.NewMerklePrefix([]byte("prefix"))), []string{"1.0.0"})), + connectiontypes.NewIdentifiedConnection(connectionID, connectiontypes.NewConnectionEnd(connectiontypes.INIT, "(CLIENTIDONE)", connectiontypes.NewCounterparty(clientID, connectionID2, commitmenttypes.NewMerklePrefix([]byte("prefix"))), []*connectiontypes.Version{connectiontypes.NewVersion("1.1", nil)})), }, []connectiontypes.ConnectionPaths{ connectiontypes.NewConnectionPaths(clientID, []string{host.ConnectionPath(connectionID)}), @@ -234,7 +234,7 @@ func (suite *IBCTestSuite) TestInitGenesis() { ), ConnectionGenesis: connectiontypes.NewGenesisState( []connectiontypes.IdentifiedConnection{ - connectiontypes.NewIdentifiedConnection(connectionID, connectiontypes.NewConnectionEnd(connectiontypes.INIT, clientID, connectiontypes.NewCounterparty(clientID2, connectionID2, commitmenttypes.NewMerklePrefix([]byte("prefix"))), []string{ibctesting.ConnectionVersion})), + connectiontypes.NewIdentifiedConnection(connectionID, connectiontypes.NewConnectionEnd(connectiontypes.INIT, clientID, connectiontypes.NewCounterparty(clientID2, connectionID2, commitmenttypes.NewMerklePrefix([]byte("prefix"))), []*connectiontypes.Version{ibctesting.ConnectionVersion})), }, []connectiontypes.ConnectionPaths{ connectiontypes.NewConnectionPaths(clientID, []string{host.ConnectionPath(connectionID)}), diff --git a/x/ibc/core/keeper/msg_server.go b/x/ibc/core/keeper/msg_server.go index 15af734846..d448aca8b6 100644 --- a/x/ibc/core/keeper/msg_server.go +++ b/x/ibc/core/keeper/msg_server.go @@ -165,7 +165,7 @@ func (k Keeper) ConnectionOpenTry(goCtx context.Context, msg *connectiontypes.Ms if err := k.ConnectionKeeper.ConnOpenTry( ctx, msg.DesiredConnectionId, msg.CounterpartyChosenConnectionId, msg.Counterparty, msg.ClientId, targetClient, - msg.CounterpartyVersions, msg.ProofInit, msg.ProofClient, msg.ProofConsensus, + connectiontypes.ProtoVersionsToExported(msg.CounterpartyVersions), msg.ProofInit, msg.ProofClient, msg.ProofConsensus, msg.ProofHeight, msg.ConsensusHeight, ); err != nil { return nil, sdkerrors.Wrap(err, "connection handshake open try failed") diff --git a/x/ibc/core/simulation/decoder_test.go b/x/ibc/core/simulation/decoder_test.go index 17f584d00a..d14a9f28cc 100644 --- a/x/ibc/core/simulation/decoder_test.go +++ b/x/ibc/core/simulation/decoder_test.go @@ -30,7 +30,7 @@ func TestDecodeStore(t *testing.T) { } connection := connectiontypes.ConnectionEnd{ ClientId: "clientidone", - Versions: []string{"1.0"}, + Versions: []*connectiontypes.Version{connectiontypes.NewVersion("1", nil)}, } channel := channeltypes.Channel{ State: channeltypes.OPEN, diff --git a/x/ibc/core/spec/01_concepts.md b/x/ibc/core/spec/01_concepts.md index 9e7654ddda..079e6fa702 100644 --- a/x/ibc/core/spec/01_concepts.md +++ b/x/ibc/core/spec/01_concepts.md @@ -160,7 +160,7 @@ connection is set and stored in the OPEN state upon success. ## Connection Version Negotiation -During the handshake procedure for connections a version string is agreed +During the handshake procedure for connections a version is agreed upon between the two parties. This occurs during the first 3 steps of the handshake. @@ -181,16 +181,20 @@ During `ConnOpenAck`, party A will verify that they can support the version party B selected. If they do not support the selected version an error is returned. After this step, the connection version is considered agreed upon. -A valid connection version is considered to be in the following format: -`(version-identifier,[feature-0,feature-1])` -- the version tuple must be enclosed in parentheses -- the feature set must be enclosed in brackets -- there should be no space between the comma separating the identifier and the - feature set -- the version identifier must no contain any commas -- each feature must not contain any commas -- each feature must be separated by commas +A `Version` is defined as follows: + +```go +type Version struct { + // unique version identifier + Identifier string + // list of features compatible with the specified identifier + Features []string +} +``` + +A version must contain a non empty identifier. Empty feature sets are allowed, but each +feature must be a non empty string. ::: warning A set of versions should not contain two versions with the same diff --git a/x/ibc/light-clients/06-solomachine/types/client_state_test.go b/x/ibc/light-clients/06-solomachine/types/client_state_test.go index 30da780488..f13eba0576 100644 --- a/x/ibc/light-clients/06-solomachine/types/client_state_test.go +++ b/x/ibc/light-clients/06-solomachine/types/client_state_test.go @@ -336,7 +336,7 @@ func (suite *SoloMachineTestSuite) TestVerifyClientConsensusState() { func (suite *SoloMachineTestSuite) TestVerifyConnectionState() { counterparty := connectiontypes.NewCounterparty("clientB", testConnectionID, prefix) - conn := connectiontypes.NewConnectionEnd(connectiontypes.OPEN, "clientA", counterparty, []string{"1.0.0"}) + conn := connectiontypes.NewConnectionEnd(connectiontypes.OPEN, "clientA", counterparty, connectiontypes.ExportedVersionsToProto(connectiontypes.GetCompatibleVersions())) path := suite.solomachine.GetConnectionStatePath(testConnectionID) diff --git a/x/ibc/light-clients/06-solomachine/types/codec_test.go b/x/ibc/light-clients/06-solomachine/types/codec_test.go index 5f9589466e..eb304bb28d 100644 --- a/x/ibc/light-clients/06-solomachine/types/codec_test.go +++ b/x/ibc/light-clients/06-solomachine/types/codec_test.go @@ -68,7 +68,7 @@ func (suite SoloMachineTestSuite) TestUnmarshalDataByType() { { "connection", types.CONNECTION, func() { counterparty := connectiontypes.NewCounterparty("clientB", testConnectionID, prefix) - conn := connectiontypes.NewConnectionEnd(connectiontypes.OPEN, "clientA", counterparty, []string{"1.0.0"}) + conn := connectiontypes.NewConnectionEnd(connectiontypes.OPEN, "clientA", counterparty, connectiontypes.ExportedVersionsToProto(connectiontypes.GetCompatibleVersions())) path := solomachine.GetConnectionStatePath("connectionID") data, err = types.ConnectionStateDataBytes(cdc, path, conn) @@ -99,7 +99,7 @@ func (suite SoloMachineTestSuite) TestUnmarshalDataByType() { { "bad channel (uses connection data)", types.CHANNEL, func() { counterparty := connectiontypes.NewCounterparty("clientB", testConnectionID, prefix) - conn := connectiontypes.NewConnectionEnd(connectiontypes.OPEN, "clientA", counterparty, []string{"1.0.0"}) + conn := connectiontypes.NewConnectionEnd(connectiontypes.OPEN, "clientA", counterparty, connectiontypes.ExportedVersionsToProto(connectiontypes.GetCompatibleVersions())) path := solomachine.GetConnectionStatePath("connectionID") data, err = types.ConnectionStateDataBytes(cdc, path, conn) diff --git a/x/ibc/light-clients/09-localhost/types/client_state_test.go b/x/ibc/light-clients/09-localhost/types/client_state_test.go index f251d086f6..abe6f20b60 100644 --- a/x/ibc/light-clients/09-localhost/types/client_state_test.go +++ b/x/ibc/light-clients/09-localhost/types/client_state_test.go @@ -145,8 +145,8 @@ func (suite *LocalhostTestSuite) TestProposedHeaderAndUpdateState() { func (suite *LocalhostTestSuite) TestVerifyConnectionState() { counterparty := connectiontypes.NewCounterparty("clientB", testConnectionID, commitmenttypes.NewMerklePrefix([]byte("ibc"))) - conn1 := connectiontypes.NewConnectionEnd(connectiontypes.OPEN, "clientA", counterparty, []string{"1.0.0"}) - conn2 := connectiontypes.NewConnectionEnd(connectiontypes.OPEN, "clientA", counterparty, []string{"2.0.0"}) + conn1 := connectiontypes.NewConnectionEnd(connectiontypes.OPEN, "clientA", counterparty, []*connectiontypes.Version{connectiontypes.NewVersion("1", nil)}) + conn2 := connectiontypes.NewConnectionEnd(connectiontypes.OPEN, "clientA", counterparty, []*connectiontypes.Version{connectiontypes.NewVersion("2", nil)}) testCases := []struct { name string diff --git a/x/ibc/testing/chain.go b/x/ibc/testing/chain.go index 923e6ae4eb..4ef4676eef 100644 --- a/x/ibc/testing/chain.go +++ b/x/ibc/testing/chain.go @@ -50,9 +50,8 @@ const ( UnbondingPeriod time.Duration = time.Hour * 24 * 7 * 3 MaxClockDrift time.Duration = time.Second * 10 - DefaultChannelVersion = ibctransfertypes.Version - DefaultOpenInitVersion = "" - InvalidID = "IDisInvalid" + DefaultChannelVersion = ibctransfertypes.Version + InvalidID = "IDisInvalid" ConnectionIDPrefix = "conn" ChannelIDPrefix = "chan" @@ -68,6 +67,8 @@ const ( var ( DefaultConsensusParams = simapp.DefaultConsensusParams + DefaultOpenInitVersion *connectiontypes.Version + // Default params variables used to create a TM client DefaultTrustLevel ibctmtypes.Fraction = ibctmtypes.DefaultTrustLevel TestHash = tmhash.Sum([]byte("TESTING HASH")) @@ -75,7 +76,7 @@ var ( UpgradePath = fmt.Sprintf("%s/%s", "upgrade", "upgradedClient") - ConnectionVersion = connectiontypes.GetCompatibleEncodedVersions()[0] + ConnectionVersion = connectiontypes.ExportedVersionsToProto(connectiontypes.GetCompatibleVersions())[0] MockAcknowledgement = mock.MockAcknowledgement MockCommitment = mock.MockCommitment @@ -654,7 +655,7 @@ func (chain *TestChain) ConnectionOpenTry( msg := connectiontypes.NewMsgConnectionOpenTry( connection.ID, connection.ID, connection.ClientID, // testing doesn't use flexible selection counterpartyConnection.ID, counterpartyConnection.ClientID, - counterpartyClient, counterparty.GetPrefix(), []string{ConnectionVersion}, + counterpartyClient, counterparty.GetPrefix(), []*connectiontypes.Version{ConnectionVersion}, proofInit, proofClient, proofConsensus, proofHeight, consensusHeight, chain.SenderAccount.GetAddress(), From bd9af94174ad84d2a74ca8637035358a7ab34345 Mon Sep 17 00:00:00 2001 From: Robert Zaremba Date: Wed, 28 Oct 2020 11:24:41 +0100 Subject: [PATCH 15/27] Use embedded lib key type in sdk pub keys instead of bytes. (#7672) * Remove duplicate print message on keys add command (#7654) Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> * ed25519: use stdlib/crypto types * use standard package testing * use crypto/ed25519 instead of golang.org/x/crypto/ed25519 In Go 1.13 the new crypto/ed25519 package implements the Ed25519 signature scheme. This functionality was previously provided by the golang.org/x/crypto/ed25519 package, which becomes a wrapper for crypto/ed25519 when used with Go 1.13+. * use standard package testing for secp256k1 tests * secp256k1: add cross packages signature checks * ed25519: rollback the _test package name * rename underlyingSecp256k1 to btcSecp256k1 * package update Co-authored-by: Denis Fadeev Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- crypto/keys/ed25519/ed25519.go | 6 +- crypto/keys/ed25519/ed25519_test.go | 18 +- crypto/keys/ed25519/keys.pb.go | 29 +- crypto/keys/secp256k1/secp256k1.go | 3 +- crypto/keys/secp256k1/secp256k1_cgo.go | 2 + .../keys/secp256k1/secp256k1_internal_test.go | 7 +- crypto/keys/secp256k1/secp256k1_test.go | 36 +- proto/cosmos/crypto/ed25519/keys.proto | 4 +- x/staking/types/staking.pb.go | 1198 ++++++++--------- 9 files changed, 668 insertions(+), 635 deletions(-) diff --git a/crypto/keys/ed25519/ed25519.go b/crypto/keys/ed25519/ed25519.go index 2a94a2e802..4c935a0760 100644 --- a/crypto/keys/ed25519/ed25519.go +++ b/crypto/keys/ed25519/ed25519.go @@ -1,6 +1,7 @@ package ed25519 import ( + "crypto/ed25519" "crypto/subtle" "fmt" "io" @@ -8,7 +9,6 @@ import ( "github.com/tendermint/tendermint/crypto" tmed25519 "github.com/tendermint/tendermint/crypto/ed25519" "github.com/tendermint/tendermint/crypto/tmhash" - "golang.org/x/crypto/ed25519" "github.com/cosmos/cosmos-sdk/codec" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" @@ -50,7 +50,7 @@ func (privKey *PrivKey) Bytes() []byte { // If these conditions aren't met, Sign will panic or produce an // incorrect signature. func (privKey *PrivKey) Sign(msg []byte) ([]byte, error) { - return ed25519.Sign(ed25519.PrivateKey(privKey.Key), msg), nil + return ed25519.Sign(privKey.Key, msg), nil } // PubKey gets the corresponding public key from the private key. @@ -171,7 +171,7 @@ func (pubKey *PubKey) VerifySignature(msg []byte, sig []byte) bool { return false } - return ed25519.Verify(ed25519.PublicKey(pubKey.Key), msg, sig) + return ed25519.Verify(pubKey.Key, msg, sig) } func (pubKey *PubKey) String() string { diff --git a/crypto/keys/ed25519/ed25519_test.go b/crypto/keys/ed25519/ed25519_test.go index f2c3d7ba38..6b2ad36dc4 100644 --- a/crypto/keys/ed25519/ed25519_test.go +++ b/crypto/keys/ed25519/ed25519_test.go @@ -1,6 +1,7 @@ package ed25519_test import ( + stded25519 "crypto/ed25519" "encoding/base64" "testing" @@ -11,7 +12,7 @@ import ( "github.com/tendermint/tendermint/crypto/sr25519" "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" + ed25519 "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" ) @@ -19,17 +20,28 @@ func TestSignAndValidateEd25519(t *testing.T) { privKey := ed25519.GenPrivKey() pubKey := privKey.PubKey() - msg := crypto.CRandBytes(128) + msg := crypto.CRandBytes(1000) sig, err := privKey.Sign(msg) require.Nil(t, err) // Test the signature assert.True(t, pubKey.VerifySignature(msg, sig)) + // ---- + // Test cross packages verification + stdPrivKey := stded25519.PrivateKey(privKey.Key) + stdPubKey := stdPrivKey.Public().(stded25519.PublicKey) + + assert.Equal(t, stdPubKey, pubKey.(*ed25519.PubKey).Key) + assert.Equal(t, stdPrivKey, privKey.Key) + assert.True(t, stded25519.Verify(stdPubKey, msg, sig)) + sig2 := stded25519.Sign(stdPrivKey, msg) + assert.True(t, pubKey.VerifySignature(msg, sig2)) + + // ---- // Mutate the signature, just one bit. // TODO: Replace this with a much better fuzzer, tendermint/ed25519/issues/10 sig[7] ^= byte(0x01) - assert.False(t, pubKey.VerifySignature(msg, sig)) } diff --git a/crypto/keys/ed25519/keys.pb.go b/crypto/keys/ed25519/keys.pb.go index 2951e0ae28..848dca4f47 100644 --- a/crypto/keys/ed25519/keys.pb.go +++ b/crypto/keys/ed25519/keys.pb.go @@ -4,6 +4,7 @@ package ed25519 import ( + crypto_ed25519 "crypto/ed25519" fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" @@ -29,7 +30,7 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // the x-coordinate. Otherwise the first byte is a 0x03. // This prefix is followed with the x-coordinate. type PubKey struct { - Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Key crypto_ed25519.PublicKey `protobuf:"bytes,1,opt,name=key,proto3,casttype=crypto/ed25519.PublicKey" json:"key,omitempty"` } func (m *PubKey) Reset() { *m = PubKey{} } @@ -64,7 +65,7 @@ func (m *PubKey) XXX_DiscardUnknown() { var xxx_messageInfo_PubKey proto.InternalMessageInfo -func (m *PubKey) GetKey() []byte { +func (m *PubKey) GetKey() crypto_ed25519.PublicKey { if m != nil { return m.Key } @@ -73,7 +74,7 @@ func (m *PubKey) GetKey() []byte { // PrivKey defines a ed25519 private key. type PrivKey struct { - Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Key crypto_ed25519.PrivateKey `protobuf:"bytes,1,opt,name=key,proto3,casttype=crypto/ed25519.PrivateKey" json:"key,omitempty"` } func (m *PrivKey) Reset() { *m = PrivKey{} } @@ -109,7 +110,7 @@ func (m *PrivKey) XXX_DiscardUnknown() { var xxx_messageInfo_PrivKey proto.InternalMessageInfo -func (m *PrivKey) GetKey() []byte { +func (m *PrivKey) GetKey() crypto_ed25519.PrivateKey { if m != nil { return m.Key } @@ -124,19 +125,21 @@ func init() { func init() { proto.RegisterFile("cosmos/crypto/ed25519/keys.proto", fileDescriptor_48fe3336771e732d) } var fileDescriptor_48fe3336771e732d = []byte{ - // 183 bytes of a gzipped FileDescriptorProto + // 221 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x48, 0xce, 0x2f, 0xce, 0xcd, 0x2f, 0xd6, 0x4f, 0x2e, 0xaa, 0x2c, 0x28, 0xc9, 0xd7, 0x4f, 0x4d, 0x31, 0x32, 0x35, 0x35, 0xb4, 0xd4, 0xcf, 0x4e, 0xad, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x85, 0xa8, 0xd0, 0x83, 0xa8, 0xd0, 0x83, 0xaa, 0x90, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0xab, 0xd0, 0x07, - 0xb1, 0x20, 0x8a, 0x95, 0x14, 0xb8, 0xd8, 0x02, 0x4a, 0x93, 0xbc, 0x53, 0x2b, 0x85, 0x04, 0xb8, - 0x98, 0xb3, 0x53, 0x2b, 0x25, 0x18, 0x15, 0x18, 0x35, 0x78, 0x82, 0x40, 0x4c, 0x2b, 0x96, 0x19, - 0x0b, 0xe4, 0x19, 0x94, 0xa4, 0xb9, 0xd8, 0x03, 0x8a, 0x32, 0xcb, 0xb0, 0x2a, 0x71, 0xf2, 0x3a, - 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, - 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0x83, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, - 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0x7d, 0x98, 0x93, 0xc1, 0x94, 0x6e, 0x71, 0x4a, 0x36, 0xcc, 0xf5, - 0x20, 0x57, 0xc3, 0xbc, 0x90, 0xc4, 0x06, 0x76, 0x91, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0xcc, - 0xf3, 0x11, 0x99, 0xe2, 0x00, 0x00, 0x00, + 0xb1, 0x20, 0x8a, 0x95, 0xec, 0xb8, 0xd8, 0x02, 0x4a, 0x93, 0xbc, 0x53, 0x2b, 0x85, 0xf4, 0xb8, + 0x98, 0xb3, 0x53, 0x2b, 0x25, 0x18, 0x15, 0x18, 0x35, 0x78, 0x9c, 0x64, 0x7e, 0xdd, 0x93, 0x97, + 0x40, 0xb5, 0x42, 0x2f, 0xa0, 0x34, 0x29, 0x27, 0x33, 0xd9, 0x3b, 0xb5, 0x32, 0x08, 0xa4, 0xd0, + 0x8a, 0x65, 0xc6, 0x02, 0x79, 0x06, 0x25, 0x2b, 0x2e, 0xf6, 0x80, 0xa2, 0xcc, 0x32, 0x90, 0x01, + 0xfa, 0xc8, 0x06, 0xc8, 0xfe, 0xba, 0x27, 0x2f, 0x89, 0x6e, 0x40, 0x51, 0x66, 0x59, 0x62, 0x49, + 0x2a, 0xcc, 0x04, 0x27, 0xaf, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, + 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, 0x32, + 0x48, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x87, 0xf9, 0x17, 0x4c, 0xe9, + 0x16, 0xa7, 0x64, 0xc3, 0xbc, 0x0e, 0xf2, 0x32, 0xcc, 0xec, 0x24, 0x36, 0xb0, 0x77, 0x8c, 0x01, + 0x01, 0x00, 0x00, 0xff, 0xff, 0xb0, 0xd8, 0x01, 0xc0, 0x1f, 0x01, 0x00, 0x00, } func (m *PubKey) Marshal() (dAtA []byte, err error) { diff --git a/crypto/keys/secp256k1/secp256k1.go b/crypto/keys/secp256k1/secp256k1.go index 32dbc9fbe9..77d546812c 100644 --- a/crypto/keys/secp256k1/secp256k1.go +++ b/crypto/keys/secp256k1/secp256k1.go @@ -9,13 +9,12 @@ import ( "math/big" secp256k1 "github.com/btcsuite/btcd/btcec" + "github.com/tendermint/tendermint/crypto" "golang.org/x/crypto/ripemd160" // nolint: staticcheck // necessary for Bitcoin address format "github.com/cosmos/cosmos-sdk/codec" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/types/errors" - - "github.com/tendermint/tendermint/crypto" ) var _ cryptotypes.PrivKey = &PrivKey{} diff --git a/crypto/keys/secp256k1/secp256k1_cgo.go b/crypto/keys/secp256k1/secp256k1_cgo.go index 0c028c6875..42088483d3 100644 --- a/crypto/keys/secp256k1/secp256k1_cgo.go +++ b/crypto/keys/secp256k1/secp256k1_cgo.go @@ -19,6 +19,8 @@ func (privKey *PrivKey) Sign(msg []byte) ([]byte, error) { return rs, nil } +// VerifySignature validates the signature. +// The msg will be hashed prior to signature verification. func (pubKey *PrivKey) VerifySignature(msg []byte, sig []byte) bool { return secp256k1.VerifySignature(pubKey.Key, crypto.Sha256(msg), sig) } diff --git a/crypto/keys/secp256k1/secp256k1_internal_test.go b/crypto/keys/secp256k1/secp256k1_internal_test.go index 3103413f84..a2c8e73bcb 100644 --- a/crypto/keys/secp256k1/secp256k1_internal_test.go +++ b/crypto/keys/secp256k1/secp256k1_internal_test.go @@ -5,9 +5,8 @@ import ( "math/big" "testing" + btcSecp256k1 "github.com/btcsuite/btcd/btcec" "github.com/stretchr/testify/require" - - underlyingSecp256k1 "github.com/btcsuite/btcd/btcec" ) func Test_genPrivKey(t *testing.T) { @@ -25,7 +24,7 @@ func Test_genPrivKey(t *testing.T) { shouldPanic bool }{ {"empty bytes (panics because 1st 32 bytes are zero and 0 is not a valid field element)", empty, true}, - {"curve order: N", underlyingSecp256k1.S256().N.Bytes(), true}, + {"curve order: N", btcSecp256k1.S256().N.Bytes(), true}, {"valid because 0 < 1 < N", validOne, false}, } for _, tt := range tests { @@ -39,7 +38,7 @@ func Test_genPrivKey(t *testing.T) { } got := genPrivKey(bytes.NewReader(tt.notSoRand)) fe := new(big.Int).SetBytes(got[:]) - require.True(t, fe.Cmp(underlyingSecp256k1.S256().N) < 0) + require.True(t, fe.Cmp(btcSecp256k1.S256().N) < 0) require.True(t, fe.Sign() > 0) }) } diff --git a/crypto/keys/secp256k1/secp256k1_test.go b/crypto/keys/secp256k1/secp256k1_test.go index e4ac581119..0133d68509 100644 --- a/crypto/keys/secp256k1/secp256k1_test.go +++ b/crypto/keys/secp256k1/secp256k1_test.go @@ -1,20 +1,19 @@ package secp256k1_test import ( + "crypto/ecdsa" "encoding/base64" "encoding/hex" "math/big" "testing" + btcSecp256k1 "github.com/btcsuite/btcd/btcec" "github.com/btcsuite/btcutil/base58" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/tendermint/tendermint/crypto" "github.com/tendermint/tendermint/crypto/sr25519" - underlyingSecp256k1 "github.com/btcsuite/btcd/btcec" - "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" @@ -41,7 +40,7 @@ func TestPubKeySecp256k1Address(t *testing.T) { addrBbz, _, _ := base58.CheckDecode(d.addr) addrB := crypto.Address(addrBbz) - var priv secp256k1.PrivKey = secp256k1.PrivKey{Key: privB} + var priv = secp256k1.PrivKey{Key: privB} pubKey := priv.PubKey() pubT, _ := pubKey.(*secp256k1.PubKey) @@ -56,15 +55,34 @@ func TestSignAndValidateSecp256k1(t *testing.T) { privKey := secp256k1.GenPrivKey() pubKey := privKey.PubKey() - msg := crypto.CRandBytes(128) + msg := crypto.CRandBytes(1000) sig, err := privKey.Sign(msg) require.Nil(t, err) - assert.True(t, pubKey.VerifySignature(msg, sig)) + // ---- + // Test cross packages verification + msgHash := crypto.Sha256(msg) + btcPrivKey, btcPubKey := btcSecp256k1.PrivKeyFromBytes(btcSecp256k1.S256(), privKey.Key) + // This fails: malformed signature: no header magic + // btcSig, err := secp256k1.ParseSignature(sig, secp256k1.S256()) + // require.NoError(t, err) + // assert.True(t, btcSig.Verify(msgHash, btcPubKey)) + // So we do a hacky way: + r := new(big.Int) + s := new(big.Int) + r.SetBytes(sig[:32]) + s.SetBytes(sig[32:]) + ok := ecdsa.Verify(btcPubKey.ToECDSA(), msgHash, r, s) + require.True(t, ok) + + sig2, err := btcPrivKey.Sign(msgHash) + require.NoError(t, err) + pubKey.VerifySignature(msg, sig2.Serialize()) + + // ---- // Mutate the signature, just one bit. sig[3] ^= byte(0x01) - assert.False(t, pubKey.VerifySignature(msg, sig)) } @@ -79,7 +97,7 @@ func TestSecp256k1LoadPrivkeyAndSerializeIsIdentity(t *testing.T) { // This function creates a private and public key in the underlying libraries format. // The private key is basically calling new(big.Int).SetBytes(pk), which removes leading zero bytes - priv, _ := underlyingSecp256k1.PrivKeyFromBytes(underlyingSecp256k1.S256(), privKeyBytes[:]) + priv, _ := btcSecp256k1.PrivKeyFromBytes(btcSecp256k1.S256(), privKeyBytes[:]) // this takes the bytes returned by `(big int).Bytes()`, and if the length is less than 32 bytes, // pads the bytes from the left with zero bytes. Therefore these two functions composed // result in the identity function on privKeyBytes, hence the following equality check @@ -91,7 +109,7 @@ func TestSecp256k1LoadPrivkeyAndSerializeIsIdentity(t *testing.T) { func TestGenPrivKeyFromSecret(t *testing.T) { // curve oder N - N := underlyingSecp256k1.S256().N + N := btcSecp256k1.S256().N tests := []struct { name string secret []byte diff --git a/proto/cosmos/crypto/ed25519/keys.proto b/proto/cosmos/crypto/ed25519/keys.proto index abf6f98d8e..3f667a0b21 100644 --- a/proto/cosmos/crypto/ed25519/keys.proto +++ b/proto/cosmos/crypto/ed25519/keys.proto @@ -13,10 +13,10 @@ option go_package = "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"; message PubKey { option (gogoproto.goproto_stringer) = false; - bytes key = 1; + bytes key = 1 [(gogoproto.casttype) = "crypto/ed25519.PublicKey"]; } // PrivKey defines a ed25519 private key. message PrivKey { - bytes key = 1; + bytes key = 1 [(gogoproto.casttype) = "crypto/ed25519.PrivateKey"]; } diff --git a/x/staking/types/staking.pb.go b/x/staking/types/staking.pb.go index 554851aa3a..60d666c682 100644 --- a/x/staking/types/staking.pb.go +++ b/x/staking/types/staking.pb.go @@ -1216,605 +1216,605 @@ func (this *Pool) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_ func StakingDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 9558 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, 0xc7, 0x3d, 0x89, 0x34, 0x16, 0xbb, 0x87, - 0x03, 0x0f, 0x5f, 0x1c, 0x00, 0x47, 0x7d, 0x39, 0x5b, 0x83, 0xdd, 0x87, 0xc5, 0x10, 0xbb, 0x33, - 0xc3, 0x99, 0xd9, 0x3b, 0x80, 0x92, 0xaa, 0x68, 0x49, 0x51, 0xa4, 0x73, 0x1c, 0x49, 0x96, 0xcb, - 0x91, 0x28, 0x9d, 0x22, 0x59, 0x4e, 0xe4, 0xc8, 0x4a, 0xfc, 0x21, 0x45, 0x89, 0x93, 0x54, 0x45, - 0x4e, 0xc5, 0xb1, 0xa4, 0x54, 0x5c, 0x52, 0xc5, 0x95, 0x38, 0xae, 0xf8, 0xec, 0x50, 0x2a, 0x87, - 0x51, 0x94, 0x58, 0x3e, 0xcb, 0x89, 0x53, 0xfa, 0x91, 0xd4, 0xfb, 0x9a, 0xaf, 0xfd, 0x98, 0x05, - 0x74, 0x27, 0xca, 0x71, 0x7e, 0x61, 0x5f, 0x4f, 0x77, 0xbf, 0xee, 0x7e, 0xfd, 0xfa, 0xf5, 0xeb, - 0x79, 0x6f, 0x00, 0x9f, 0xb8, 0x00, 0xd3, 0x75, 0xc3, 0xa8, 0x37, 0xf0, 0xac, 0x69, 0x19, 0x8e, - 0xb1, 0xd5, 0xda, 0x9e, 0xad, 0x61, 0xbb, 0x6a, 0x69, 0xa6, 0x63, 0x58, 0x33, 0x14, 0x86, 0x46, - 0x19, 0xc6, 0x8c, 0xc0, 0x90, 0x97, 0x61, 0xec, 0xa2, 0xd6, 0xc0, 0x25, 0x17, 0x71, 0x1d, 0x3b, - 0xe8, 0x3c, 0x24, 0xb6, 0xb5, 0x06, 0xce, 0x49, 0xd3, 0xf1, 0x53, 0x43, 0x67, 0xee, 0x9b, 0x09, - 0x11, 0xcd, 0x04, 0x29, 0xd6, 0x08, 0x58, 0xa1, 0x14, 0xf2, 0xb7, 0x13, 0x30, 0xde, 0xe1, 0x29, - 0x42, 0x90, 0xd0, 0xd5, 0x26, 0xe1, 0x28, 0x9d, 0x4a, 0x2b, 0xf4, 0x37, 0xca, 0xc1, 0xa0, 0xa9, - 0x56, 0x77, 0xd5, 0x3a, 0xce, 0xc5, 0x28, 0x58, 0x34, 0xd1, 0x24, 0x40, 0x0d, 0x9b, 0x58, 0xaf, - 0x61, 0xbd, 0xba, 0x9f, 0x8b, 0x4f, 0xc7, 0x4f, 0xa5, 0x15, 0x1f, 0x04, 0x3d, 0x0c, 0x63, 0x66, - 0x6b, 0xab, 0xa1, 0x55, 0x2b, 0x3e, 0x34, 0x98, 0x8e, 0x9f, 0x4a, 0x2a, 0x59, 0xf6, 0xa0, 0xe4, - 0x21, 0x3f, 0x08, 0xa3, 0xd7, 0xb0, 0xba, 0xeb, 0x47, 0x1d, 0xa2, 0xa8, 0x23, 0x04, 0xec, 0x43, - 0x9c, 0x87, 0x4c, 0x13, 0xdb, 0xb6, 0x5a, 0xc7, 0x15, 0x67, 0xdf, 0xc4, 0xb9, 0x04, 0xd5, 0x7e, - 0xba, 0x4d, 0xfb, 0xb0, 0xe6, 0x43, 0x9c, 0x6a, 0x63, 0xdf, 0xc4, 0x68, 0x0e, 0xd2, 0x58, 0x6f, - 0x35, 0x19, 0x87, 0x64, 0x17, 0xfb, 0x95, 0xf5, 0x56, 0x33, 0xcc, 0x25, 0x45, 0xc8, 0x38, 0x8b, - 0x41, 0x1b, 0x5b, 0x57, 0xb5, 0x2a, 0xce, 0x0d, 0x50, 0x06, 0x0f, 0xb6, 0x31, 0x58, 0x67, 0xcf, - 0xc3, 0x3c, 0x04, 0x1d, 0x9a, 0x87, 0x34, 0xde, 0x73, 0xb0, 0x6e, 0x6b, 0x86, 0x9e, 0x1b, 0xa4, - 0x4c, 0xee, 0xef, 0x30, 0x8a, 0xb8, 0x51, 0x0b, 0xb3, 0xf0, 0xe8, 0xd0, 0x39, 0x18, 0x34, 0x4c, - 0x47, 0x33, 0x74, 0x3b, 0x97, 0x9a, 0x96, 0x4e, 0x0d, 0x9d, 0x39, 0xd9, 0xd1, 0x11, 0x56, 0x19, - 0x8e, 0x22, 0x90, 0xd1, 0x22, 0x64, 0x6d, 0xa3, 0x65, 0x55, 0x71, 0xa5, 0x6a, 0xd4, 0x70, 0x45, - 0xd3, 0xb7, 0x8d, 0x5c, 0x9a, 0x32, 0x98, 0x6a, 0x57, 0x84, 0x22, 0xce, 0x1b, 0x35, 0xbc, 0xa8, - 0x6f, 0x1b, 0xca, 0x88, 0x1d, 0x68, 0xa3, 0x63, 0x30, 0x60, 0xef, 0xeb, 0x8e, 0xba, 0x97, 0xcb, - 0x50, 0x0f, 0xe1, 0x2d, 0xf9, 0x37, 0x06, 0x60, 0xb4, 0x1f, 0x17, 0xbb, 0x00, 0xc9, 0x6d, 0xa2, - 0x65, 0x2e, 0x76, 0x10, 0x1b, 0x30, 0x9a, 0xa0, 0x11, 0x07, 0x0e, 0x69, 0xc4, 0x39, 0x18, 0xd2, - 0xb1, 0xed, 0xe0, 0x1a, 0xf3, 0x88, 0x78, 0x9f, 0x3e, 0x05, 0x8c, 0xa8, 0xdd, 0xa5, 0x12, 0x87, - 0x72, 0xa9, 0xb7, 0xc0, 0xa8, 0x2b, 0x52, 0xc5, 0x52, 0xf5, 0xba, 0xf0, 0xcd, 0xd9, 0x28, 0x49, - 0x66, 0xca, 0x82, 0x4e, 0x21, 0x64, 0xca, 0x08, 0x0e, 0xb4, 0x51, 0x09, 0xc0, 0xd0, 0xb1, 0xb1, - 0x5d, 0xa9, 0xe1, 0x6a, 0x23, 0x97, 0xea, 0x62, 0xa5, 0x55, 0x82, 0xd2, 0x66, 0x25, 0x83, 0x41, - 0xab, 0x0d, 0xf4, 0xb4, 0xe7, 0x6a, 0x83, 0x5d, 0x3c, 0x65, 0x99, 0x4d, 0xb2, 0x36, 0x6f, 0xdb, - 0x84, 0x11, 0x0b, 0x13, 0xbf, 0xc7, 0x35, 0xae, 0x59, 0x9a, 0x0a, 0x31, 0x13, 0xa9, 0x99, 0xc2, - 0xc9, 0x98, 0x62, 0xc3, 0x96, 0xbf, 0x89, 0xee, 0x05, 0x17, 0x50, 0xa1, 0x6e, 0x05, 0x34, 0x0a, - 0x65, 0x04, 0x70, 0x45, 0x6d, 0xe2, 0xfc, 0xcb, 0x30, 0x12, 0x34, 0x0f, 0x9a, 0x80, 0xa4, 0xed, - 0xa8, 0x96, 0x43, 0xbd, 0x30, 0xa9, 0xb0, 0x06, 0xca, 0x42, 0x1c, 0xeb, 0x35, 0x1a, 0xe5, 0x92, - 0x0a, 0xf9, 0x89, 0x7e, 0xc2, 0x53, 0x38, 0x4e, 0x15, 0x7e, 0xa0, 0x7d, 0x44, 0x03, 0x9c, 0xc3, - 0x7a, 0xe7, 0x9f, 0x82, 0xe1, 0x80, 0x02, 0xfd, 0x76, 0x2d, 0xbf, 0x0b, 0x8e, 0x76, 0x64, 0x8d, - 0xde, 0x02, 0x13, 0x2d, 0x5d, 0xd3, 0x1d, 0x6c, 0x99, 0x16, 0x26, 0x1e, 0xcb, 0xba, 0xca, 0xfd, - 0x97, 0xc1, 0x2e, 0x3e, 0xb7, 0xe9, 0xc7, 0x66, 0x5c, 0x94, 0xf1, 0x56, 0x3b, 0xf0, 0x74, 0x3a, - 0xf5, 0xfa, 0x60, 0xf6, 0x95, 0x57, 0x5e, 0x79, 0x25, 0x26, 0x7f, 0x6c, 0x00, 0x26, 0x3a, 0xcd, - 0x99, 0x8e, 0xd3, 0xf7, 0x18, 0x0c, 0xe8, 0xad, 0xe6, 0x16, 0xb6, 0xa8, 0x91, 0x92, 0x0a, 0x6f, - 0xa1, 0x39, 0x48, 0x36, 0xd4, 0x2d, 0xdc, 0xc8, 0x25, 0xa6, 0xa5, 0x53, 0x23, 0x67, 0x1e, 0xee, - 0x6b, 0x56, 0xce, 0x2c, 0x11, 0x12, 0x85, 0x51, 0xa2, 0x67, 0x20, 0xc1, 0x43, 0x34, 0xe1, 0x70, - 0xba, 0x3f, 0x0e, 0x64, 0x2e, 0x29, 0x94, 0x0e, 0xdd, 0x05, 0x69, 0xf2, 0x97, 0xf9, 0xc6, 0x00, - 0x95, 0x39, 0x45, 0x00, 0xc4, 0x2f, 0x50, 0x1e, 0x52, 0x74, 0x9a, 0xd4, 0xb0, 0x58, 0xda, 0xdc, - 0x36, 0x71, 0xac, 0x1a, 0xde, 0x56, 0x5b, 0x0d, 0xa7, 0x72, 0x55, 0x6d, 0xb4, 0x30, 0x75, 0xf8, - 0xb4, 0x92, 0xe1, 0xc0, 0x2b, 0x04, 0x86, 0xa6, 0x60, 0x88, 0xcd, 0x2a, 0x4d, 0xaf, 0xe1, 0x3d, - 0x1a, 0x3d, 0x93, 0x0a, 0x9b, 0x68, 0x8b, 0x04, 0x42, 0xba, 0x7f, 0xd1, 0x36, 0x74, 0xe1, 0x9a, - 0xb4, 0x0b, 0x02, 0xa0, 0xdd, 0x3f, 0x15, 0x0e, 0xdc, 0x77, 0x77, 0x56, 0x2f, 0xec, 0x53, 0xf2, - 0x97, 0x63, 0x90, 0xa0, 0xf1, 0x62, 0x14, 0x86, 0x36, 0xde, 0xba, 0x56, 0xae, 0x94, 0x56, 0x37, - 0x8b, 0x4b, 0xe5, 0xac, 0x84, 0x46, 0x00, 0x28, 0xe0, 0xe2, 0xd2, 0xea, 0xdc, 0x46, 0x36, 0xe6, - 0xb6, 0x17, 0x57, 0x36, 0xce, 0x3d, 0x99, 0x8d, 0xbb, 0x04, 0x9b, 0x0c, 0x90, 0xf0, 0x23, 0x3c, - 0x71, 0x26, 0x9b, 0x44, 0x59, 0xc8, 0x30, 0x06, 0x8b, 0x6f, 0x29, 0x97, 0xce, 0x3d, 0x99, 0x1d, - 0x08, 0x42, 0x9e, 0x38, 0x93, 0x1d, 0x44, 0xc3, 0x90, 0xa6, 0x90, 0xe2, 0xea, 0xea, 0x52, 0x36, - 0xe5, 0xf2, 0x5c, 0xdf, 0x50, 0x16, 0x57, 0x16, 0xb2, 0x69, 0x97, 0xe7, 0x82, 0xb2, 0xba, 0xb9, - 0x96, 0x05, 0x97, 0xc3, 0x72, 0x79, 0x7d, 0x7d, 0x6e, 0xa1, 0x9c, 0x1d, 0x72, 0x31, 0x8a, 0x6f, - 0xdd, 0x28, 0xaf, 0x67, 0x33, 0x01, 0xb1, 0x9e, 0x38, 0x93, 0x1d, 0x76, 0xbb, 0x28, 0xaf, 0x6c, - 0x2e, 0x67, 0x47, 0xd0, 0x18, 0x0c, 0xb3, 0x2e, 0x84, 0x10, 0xa3, 0x21, 0xd0, 0xb9, 0x27, 0xb3, - 0x59, 0x4f, 0x10, 0xc6, 0x65, 0x2c, 0x00, 0x38, 0xf7, 0x64, 0x16, 0xc9, 0xf3, 0x90, 0xa4, 0xde, - 0x85, 0x10, 0x8c, 0x2c, 0xcd, 0x15, 0xcb, 0x4b, 0x95, 0xd5, 0xb5, 0x8d, 0xc5, 0xd5, 0x95, 0xb9, - 0xa5, 0xac, 0xe4, 0xc1, 0x94, 0xf2, 0xf3, 0x9b, 0x8b, 0x4a, 0xb9, 0x94, 0x8d, 0xf9, 0x61, 0x6b, - 0xe5, 0xb9, 0x8d, 0x72, 0x29, 0x1b, 0x97, 0xab, 0x30, 0xd1, 0x29, 0x4e, 0x76, 0x9c, 0x19, 0xbe, - 0x21, 0x8e, 0x75, 0x19, 0x62, 0xca, 0xab, 0x6d, 0x88, 0xbf, 0x15, 0x83, 0xf1, 0x0e, 0x6b, 0x45, - 0xc7, 0x4e, 0x9e, 0x85, 0x24, 0x73, 0x51, 0xb6, 0x7a, 0x3e, 0xd4, 0x71, 0xd1, 0xa1, 0x0e, 0xdb, - 0xb6, 0x82, 0x52, 0x3a, 0x7f, 0x06, 0x11, 0xef, 0x92, 0x41, 0x10, 0x16, 0x6d, 0x31, 0xfd, 0x27, - 0xdb, 0x62, 0x3a, 0x5b, 0xf6, 0xce, 0xf5, 0xb3, 0xec, 0x51, 0xd8, 0xc1, 0x62, 0x7b, 0xb2, 0x43, - 0x6c, 0xbf, 0x00, 0x63, 0x6d, 0x8c, 0xfa, 0x8e, 0xb1, 0xef, 0x95, 0x20, 0xd7, 0xcd, 0x38, 0x11, - 0x91, 0x2e, 0x16, 0x88, 0x74, 0x17, 0xc2, 0x16, 0xbc, 0xa7, 0xfb, 0x20, 0xb4, 0x8d, 0xf5, 0xe7, - 0x24, 0x38, 0xd6, 0x39, 0x53, 0xec, 0x28, 0xc3, 0x33, 0x30, 0xd0, 0xc4, 0xce, 0x8e, 0x21, 0xb2, - 0xa5, 0x07, 0x3a, 0xac, 0xc1, 0xe4, 0x71, 0x78, 0xb0, 0x39, 0x95, 0x7f, 0x11, 0x8f, 0x77, 0x4b, - 0xf7, 0x98, 0x34, 0x6d, 0x92, 0x7e, 0x30, 0x06, 0x47, 0x3b, 0x32, 0xef, 0x28, 0xe8, 0xdd, 0x00, - 0x9a, 0x6e, 0xb6, 0x1c, 0x96, 0x11, 0xb1, 0x00, 0x9b, 0xa6, 0x10, 0x1a, 0xbc, 0x48, 0xf0, 0x6c, - 0x39, 0xee, 0xf3, 0x38, 0x7d, 0x0e, 0x0c, 0x44, 0x11, 0xce, 0x7b, 0x82, 0x26, 0xa8, 0xa0, 0x93, - 0x5d, 0x34, 0x6d, 0x73, 0xcc, 0xc7, 0x20, 0x5b, 0x6d, 0x68, 0x58, 0x77, 0x2a, 0xb6, 0x63, 0x61, - 0xb5, 0xa9, 0xe9, 0x75, 0xba, 0x82, 0xa4, 0x0a, 0xc9, 0x6d, 0xb5, 0x61, 0x63, 0x65, 0x94, 0x3d, - 0x5e, 0x17, 0x4f, 0x09, 0x05, 0x75, 0x20, 0xcb, 0x47, 0x31, 0x10, 0xa0, 0x60, 0x8f, 0x5d, 0x0a, - 0xf9, 0x67, 0xd3, 0x30, 0xe4, 0xcb, 0xab, 0xd1, 0x3d, 0x90, 0x79, 0x51, 0xbd, 0xaa, 0x56, 0xc4, - 0x5e, 0x89, 0x59, 0x62, 0x88, 0xc0, 0xd6, 0xf8, 0x7e, 0xe9, 0x31, 0x98, 0xa0, 0x28, 0x46, 0xcb, - 0xc1, 0x56, 0xa5, 0xda, 0x50, 0x6d, 0x9b, 0x1a, 0x2d, 0x45, 0x51, 0x11, 0x79, 0xb6, 0x4a, 0x1e, - 0xcd, 0x8b, 0x27, 0xe8, 0x2c, 0x8c, 0x53, 0x8a, 0x66, 0xab, 0xe1, 0x68, 0x66, 0x03, 0x57, 0xc8, - 0xee, 0xcd, 0xa6, 0x2b, 0x89, 0x2b, 0xd9, 0x18, 0xc1, 0x58, 0xe6, 0x08, 0x44, 0x22, 0x1b, 0x95, - 0xe0, 0x6e, 0x4a, 0x56, 0xc7, 0x3a, 0xb6, 0x54, 0x07, 0x57, 0xf0, 0x4b, 0x2d, 0xb5, 0x61, 0x57, - 0x54, 0xbd, 0x56, 0xd9, 0x51, 0xed, 0x9d, 0xdc, 0x04, 0x61, 0x50, 0x8c, 0xe5, 0x24, 0xe5, 0x04, - 0x41, 0x5c, 0xe0, 0x78, 0x65, 0x8a, 0x36, 0xa7, 0xd7, 0x2e, 0xa9, 0xf6, 0x0e, 0x2a, 0xc0, 0x31, - 0xca, 0xc5, 0x76, 0x2c, 0x4d, 0xaf, 0x57, 0xaa, 0x3b, 0xb8, 0xba, 0x5b, 0x69, 0x39, 0xdb, 0xe7, - 0x73, 0x77, 0xf9, 0xfb, 0xa7, 0x12, 0xae, 0x53, 0x9c, 0x79, 0x82, 0xb2, 0xe9, 0x6c, 0x9f, 0x47, - 0xeb, 0x90, 0x21, 0x83, 0xd1, 0xd4, 0x5e, 0xc6, 0x95, 0x6d, 0xc3, 0xa2, 0x4b, 0xe3, 0x48, 0x87, - 0xd0, 0xe4, 0xb3, 0xe0, 0xcc, 0x2a, 0x27, 0x58, 0x36, 0x6a, 0xb8, 0x90, 0x5c, 0x5f, 0x2b, 0x97, - 0x4b, 0xca, 0x90, 0xe0, 0x72, 0xd1, 0xb0, 0x88, 0x43, 0xd5, 0x0d, 0xd7, 0xc0, 0x43, 0xcc, 0xa1, - 0xea, 0x86, 0x30, 0xef, 0x59, 0x18, 0xaf, 0x56, 0x99, 0xce, 0x5a, 0xb5, 0xc2, 0xf7, 0x58, 0x76, - 0x2e, 0x1b, 0x30, 0x56, 0xb5, 0xba, 0xc0, 0x10, 0xb8, 0x8f, 0xdb, 0xe8, 0x69, 0x38, 0xea, 0x19, - 0xcb, 0x4f, 0x38, 0xd6, 0xa6, 0x65, 0x98, 0xf4, 0x2c, 0x8c, 0x9b, 0xfb, 0xed, 0x84, 0x28, 0xd0, - 0xa3, 0xb9, 0x1f, 0x26, 0x7b, 0x0a, 0x26, 0xcc, 0x1d, 0xb3, 0x9d, 0xee, 0xb4, 0x9f, 0x0e, 0x99, - 0x3b, 0x66, 0x98, 0xf0, 0x7e, 0xba, 0xe1, 0xb6, 0x70, 0x55, 0x75, 0x70, 0x2d, 0x77, 0xdc, 0x8f, - 0xee, 0x7b, 0x80, 0x66, 0x21, 0x5b, 0xad, 0x56, 0xb0, 0xae, 0x6e, 0x35, 0x70, 0x45, 0xb5, 0xb0, - 0xae, 0xda, 0xb9, 0x29, 0x3f, 0xf2, 0x48, 0xb5, 0x5a, 0xa6, 0x4f, 0xe7, 0xe8, 0x43, 0x74, 0x1a, - 0xc6, 0x8c, 0xad, 0x17, 0xab, 0xcc, 0x25, 0x2b, 0xa6, 0x85, 0xb7, 0xb5, 0xbd, 0xdc, 0x7d, 0xd4, - 0xbe, 0xa3, 0xe4, 0x01, 0x75, 0xc8, 0x35, 0x0a, 0x46, 0x0f, 0x41, 0xb6, 0x6a, 0xef, 0xa8, 0x96, - 0x49, 0x63, 0xb2, 0x6d, 0xaa, 0x55, 0x9c, 0xbb, 0x9f, 0xa1, 0x32, 0xf8, 0x8a, 0x00, 0x93, 0x29, - 0x61, 0x5f, 0xd3, 0xb6, 0x1d, 0xc1, 0xf1, 0x41, 0x36, 0x25, 0x28, 0x8c, 0x73, 0x3b, 0x05, 0x59, - 0x62, 0x8a, 0x40, 0xc7, 0xa7, 0x28, 0xda, 0x88, 0xb9, 0x63, 0xfa, 0xfb, 0xbd, 0x17, 0x86, 0x09, - 0xa6, 0xd7, 0xe9, 0x43, 0x2c, 0x21, 0x33, 0x77, 0x7c, 0x3d, 0x3e, 0x09, 0xc7, 0x08, 0x52, 0x13, - 0x3b, 0x6a, 0x4d, 0x75, 0x54, 0x1f, 0xf6, 0x23, 0x14, 0x9b, 0xd8, 0x7d, 0x99, 0x3f, 0x0c, 0xc8, - 0x69, 0xb5, 0xb6, 0xf6, 0x5d, 0xcf, 0x7a, 0x94, 0xc9, 0x49, 0x60, 0xc2, 0xb7, 0xee, 0x58, 0xd2, - 0x2d, 0x17, 0x20, 0xe3, 0x77, 0x7c, 0x94, 0x06, 0xe6, 0xfa, 0x59, 0x89, 0x64, 0x41, 0xf3, 0xab, - 0x25, 0x92, 0xbf, 0xbc, 0xad, 0x9c, 0x8d, 0x91, 0x3c, 0x6a, 0x69, 0x71, 0xa3, 0x5c, 0x51, 0x36, - 0x57, 0x36, 0x16, 0x97, 0xcb, 0xd9, 0xb8, 0x2f, 0x61, 0x7f, 0x2e, 0x91, 0x7a, 0x20, 0xfb, 0xa0, - 0xfc, 0xcd, 0x18, 0x8c, 0x04, 0x77, 0x60, 0xe8, 0x4d, 0x70, 0x5c, 0x94, 0x4b, 0x6c, 0xec, 0x54, - 0xae, 0x69, 0x16, 0x9d, 0x91, 0x4d, 0x95, 0xad, 0x8e, 0xae, 0x4f, 0x4c, 0x70, 0xac, 0x75, 0xec, - 0xbc, 0xa0, 0x59, 0x64, 0xbe, 0x35, 0x55, 0x07, 0x2d, 0xc1, 0x94, 0x6e, 0x54, 0x6c, 0x47, 0xd5, - 0x6b, 0xaa, 0x55, 0xab, 0x78, 0x85, 0xaa, 0x8a, 0x5a, 0xad, 0x62, 0xdb, 0x36, 0xd8, 0x4a, 0xe8, - 0x72, 0x39, 0xa9, 0x1b, 0xeb, 0x1c, 0xd9, 0x5b, 0x22, 0xe6, 0x38, 0x6a, 0xc8, 0x7f, 0xe3, 0xdd, - 0xfc, 0xf7, 0x2e, 0x48, 0x37, 0x55, 0xb3, 0x82, 0x75, 0xc7, 0xda, 0xa7, 0x79, 0x77, 0x4a, 0x49, - 0x35, 0x55, 0xb3, 0x4c, 0xda, 0x3f, 0x92, 0xed, 0xcf, 0x73, 0x89, 0x54, 0x2a, 0x9b, 0x7e, 0x2e, - 0x91, 0x4a, 0x67, 0x41, 0x7e, 0x2d, 0x0e, 0x19, 0x7f, 0x1e, 0x4e, 0xb6, 0x35, 0x55, 0xba, 0x64, - 0x49, 0x34, 0xa8, 0xdd, 0xdb, 0x33, 0x6b, 0x9f, 0x99, 0x27, 0x6b, 0x59, 0x61, 0x80, 0x65, 0xc7, - 0x0a, 0xa3, 0x24, 0x79, 0x04, 0x71, 0x36, 0xcc, 0xb2, 0x91, 0x94, 0xc2, 0x5b, 0x68, 0x01, 0x06, - 0x5e, 0xb4, 0x29, 0xef, 0x01, 0xca, 0xfb, 0xbe, 0xde, 0xbc, 0x9f, 0x5b, 0xa7, 0xcc, 0xd3, 0xcf, - 0xad, 0x57, 0x56, 0x56, 0x95, 0xe5, 0xb9, 0x25, 0x85, 0x93, 0xa3, 0x13, 0x90, 0x68, 0xa8, 0x2f, - 0xef, 0x07, 0x57, 0x3d, 0x0a, 0xea, 0x77, 0x10, 0x4e, 0x40, 0xe2, 0x1a, 0x56, 0x77, 0x83, 0x6b, - 0x0d, 0x05, 0xdd, 0xc1, 0xc9, 0x30, 0x0b, 0x49, 0x6a, 0x2f, 0x04, 0xc0, 0x2d, 0x96, 0x3d, 0x82, - 0x52, 0x90, 0x98, 0x5f, 0x55, 0xc8, 0x84, 0xc8, 0x42, 0x86, 0x41, 0x2b, 0x6b, 0x8b, 0xe5, 0xf9, - 0x72, 0x36, 0x26, 0x9f, 0x85, 0x01, 0x66, 0x04, 0x32, 0x59, 0x5c, 0x33, 0x64, 0x8f, 0xf0, 0x26, - 0xe7, 0x21, 0x89, 0xa7, 0x9b, 0xcb, 0xc5, 0xb2, 0x92, 0x8d, 0x05, 0x87, 0x3a, 0x91, 0x4d, 0xca, - 0x36, 0x64, 0xfc, 0x89, 0xf8, 0x8f, 0x66, 0x93, 0xfd, 0x15, 0x09, 0x86, 0x7c, 0x89, 0x35, 0xc9, - 0x88, 0xd4, 0x46, 0xc3, 0xb8, 0x56, 0x51, 0x1b, 0x9a, 0x6a, 0x73, 0xd7, 0x00, 0x0a, 0x9a, 0x23, - 0x90, 0x7e, 0x87, 0xee, 0x47, 0x34, 0x45, 0x92, 0xd9, 0x01, 0xf9, 0x53, 0x12, 0x64, 0xc3, 0x99, - 0x6d, 0x48, 0x4c, 0xe9, 0x8d, 0x14, 0x53, 0xfe, 0xa4, 0x04, 0x23, 0xc1, 0x74, 0x36, 0x24, 0xde, - 0x3d, 0x6f, 0xa8, 0x78, 0x7f, 0x14, 0x83, 0xe1, 0x40, 0x12, 0xdb, 0xaf, 0x74, 0x2f, 0xc1, 0x98, - 0x56, 0xc3, 0x4d, 0xd3, 0x70, 0xb0, 0x5e, 0xdd, 0xaf, 0x34, 0xf0, 0x55, 0xdc, 0xc8, 0xc9, 0x34, - 0x68, 0xcc, 0xf6, 0x4e, 0x93, 0x67, 0x16, 0x3d, 0xba, 0x25, 0x42, 0x56, 0x18, 0x5f, 0x2c, 0x95, - 0x97, 0xd7, 0x56, 0x37, 0xca, 0x2b, 0xf3, 0x6f, 0xad, 0x6c, 0xae, 0x5c, 0x5e, 0x59, 0x7d, 0x61, - 0x45, 0xc9, 0x6a, 0x21, 0xb4, 0x3b, 0x38, 0xed, 0xd7, 0x20, 0x1b, 0x16, 0x0a, 0x1d, 0x87, 0x4e, - 0x62, 0x65, 0x8f, 0xa0, 0x71, 0x18, 0x5d, 0x59, 0xad, 0xac, 0x2f, 0x96, 0xca, 0x95, 0xf2, 0xc5, - 0x8b, 0xe5, 0xf9, 0x8d, 0x75, 0x56, 0xf8, 0x70, 0xb1, 0x37, 0x02, 0x13, 0x5c, 0x7e, 0x35, 0x0e, - 0xe3, 0x1d, 0x24, 0x41, 0x73, 0x7c, 0xcb, 0xc2, 0x76, 0x51, 0x8f, 0xf6, 0x23, 0xfd, 0x0c, 0xc9, - 0x19, 0xd6, 0x54, 0xcb, 0xe1, 0x3b, 0x9c, 0x87, 0x80, 0x58, 0x49, 0x77, 0xb4, 0x6d, 0x0d, 0x5b, - 0xbc, 0x4e, 0xc4, 0xf6, 0x31, 0xa3, 0x1e, 0x9c, 0x95, 0x8a, 0x1e, 0x01, 0x64, 0x1a, 0xb6, 0xe6, - 0x68, 0x57, 0x71, 0x45, 0xd3, 0x45, 0x51, 0x89, 0xec, 0x6b, 0x12, 0x4a, 0x56, 0x3c, 0x59, 0xd4, - 0x1d, 0x17, 0x5b, 0xc7, 0x75, 0x35, 0x84, 0x4d, 0x82, 0x79, 0x5c, 0xc9, 0x8a, 0x27, 0x2e, 0xf6, - 0x3d, 0x90, 0xa9, 0x19, 0x2d, 0x92, 0xec, 0x31, 0x3c, 0xb2, 0x76, 0x48, 0xca, 0x10, 0x83, 0xb9, - 0x28, 0x3c, 0x8d, 0xf7, 0xaa, 0x59, 0x19, 0x65, 0x88, 0xc1, 0x18, 0xca, 0x83, 0x30, 0xaa, 0xd6, - 0xeb, 0x16, 0x61, 0x2e, 0x18, 0xb1, 0x8d, 0xc9, 0x88, 0x0b, 0xa6, 0x88, 0xf9, 0xe7, 0x20, 0x25, - 0xec, 0x40, 0x96, 0x6a, 0x62, 0x89, 0x8a, 0xc9, 0x76, 0xdb, 0xb1, 0x53, 0x69, 0x25, 0xa5, 0x8b, - 0x87, 0xf7, 0x40, 0x46, 0xb3, 0x2b, 0x5e, 0x71, 0x3e, 0x36, 0x1d, 0x3b, 0x95, 0x52, 0x86, 0x34, - 0xdb, 0x2d, 0x6c, 0xca, 0x9f, 0x8b, 0xc1, 0x48, 0xf0, 0xe5, 0x02, 0x2a, 0x41, 0xaa, 0x61, 0x54, - 0x55, 0xea, 0x5a, 0xec, 0xcd, 0xd6, 0xa9, 0x88, 0xf7, 0x11, 0x33, 0x4b, 0x1c, 0x5f, 0x71, 0x29, - 0xf3, 0xbf, 0x23, 0x41, 0x4a, 0x80, 0xd1, 0x31, 0x48, 0x98, 0xaa, 0xb3, 0x43, 0xd9, 0x25, 0x8b, - 0xb1, 0xac, 0xa4, 0xd0, 0x36, 0x81, 0xdb, 0xa6, 0xaa, 0x53, 0x17, 0xe0, 0x70, 0xd2, 0x26, 0xe3, - 0xda, 0xc0, 0x6a, 0x8d, 0xee, 0x7a, 0x8c, 0x66, 0x13, 0xeb, 0x8e, 0x2d, 0xc6, 0x95, 0xc3, 0xe7, - 0x39, 0x18, 0x3d, 0x0c, 0x63, 0x8e, 0xa5, 0x6a, 0x8d, 0x00, 0x6e, 0x82, 0xe2, 0x66, 0xc5, 0x03, - 0x17, 0xb9, 0x00, 0x27, 0x04, 0xdf, 0x1a, 0x76, 0xd4, 0xea, 0x0e, 0xae, 0x79, 0x44, 0x03, 0xb4, - 0xba, 0x71, 0x9c, 0x23, 0x94, 0xf8, 0x73, 0x41, 0x2b, 0x7f, 0x53, 0x82, 0x31, 0xb1, 0x4f, 0xab, - 0xb9, 0xc6, 0x5a, 0x06, 0x50, 0x75, 0xdd, 0x70, 0xfc, 0xe6, 0x6a, 0x77, 0xe5, 0x36, 0xba, 0x99, - 0x39, 0x97, 0x48, 0xf1, 0x31, 0xc8, 0x37, 0x01, 0xbc, 0x27, 0x5d, 0xcd, 0x36, 0x05, 0x43, 0xfc, - 0xcd, 0x11, 0x7d, 0xfd, 0xc8, 0x76, 0xf6, 0xc0, 0x40, 0x64, 0x43, 0x87, 0x26, 0x20, 0xb9, 0x85, - 0xeb, 0x9a, 0xce, 0xeb, 0xc1, 0xac, 0x21, 0xea, 0x2f, 0x09, 0xb7, 0xfe, 0x52, 0xfc, 0x90, 0x04, - 0xe3, 0x55, 0xa3, 0x19, 0x96, 0xb7, 0x98, 0x0d, 0x95, 0x17, 0xec, 0x4b, 0xd2, 0xdb, 0x9e, 0xa9, - 0x6b, 0xce, 0x4e, 0x6b, 0x6b, 0xa6, 0x6a, 0x34, 0x67, 0xeb, 0x46, 0x43, 0xd5, 0xeb, 0xde, 0xfb, - 0x53, 0xfa, 0xa3, 0xfa, 0x68, 0x1d, 0xeb, 0x8f, 0xd6, 0x0d, 0xdf, 0xdb, 0xd4, 0x0b, 0xde, 0xcf, - 0xbf, 0x90, 0xa4, 0x5f, 0x88, 0xc5, 0x17, 0xd6, 0x8a, 0x9f, 0x8f, 0xe5, 0x17, 0x58, 0x77, 0x6b, - 0xc2, 0x3c, 0x0a, 0xde, 0x6e, 0xe0, 0x2a, 0x51, 0x19, 0xbe, 0xf3, 0x30, 0x4c, 0xd4, 0x8d, 0xba, - 0x41, 0x39, 0xce, 0x92, 0x5f, 0xfc, 0x8d, 0x6c, 0xda, 0x85, 0xe6, 0x23, 0x5f, 0xdf, 0x16, 0x56, - 0x60, 0x9c, 0x23, 0x57, 0xe8, 0x2b, 0x21, 0xb6, 0xb1, 0x41, 0x3d, 0xcb, 0x6a, 0xb9, 0x5f, 0xfb, - 0x36, 0x5d, 0xd0, 0x95, 0x31, 0x4e, 0x4a, 0x9e, 0xb1, 0xbd, 0x4f, 0x41, 0x81, 0xa3, 0x01, 0x7e, - 0x6c, 0xda, 0x62, 0x2b, 0x82, 0xe3, 0x6f, 0x71, 0x8e, 0xe3, 0x3e, 0x8e, 0xeb, 0x9c, 0xb4, 0x30, - 0x0f, 0xc3, 0x07, 0xe1, 0xf5, 0xaf, 0x39, 0xaf, 0x0c, 0xf6, 0x33, 0x59, 0x80, 0x51, 0xca, 0xa4, - 0xda, 0xb2, 0x1d, 0xa3, 0x49, 0x63, 0x62, 0x6f, 0x36, 0xbf, 0xfd, 0x6d, 0x36, 0x8f, 0x46, 0x08, - 0xd9, 0xbc, 0x4b, 0x55, 0x28, 0x00, 0x7d, 0x0b, 0x56, 0xc3, 0xd5, 0x46, 0x04, 0x87, 0xaf, 0x72, - 0x41, 0x5c, 0xfc, 0xc2, 0x15, 0x98, 0x20, 0xbf, 0x69, 0xc8, 0xf2, 0x4b, 0x12, 0x5d, 0x83, 0xcb, - 0x7d, 0xf3, 0xbd, 0x6c, 0xaa, 0x8e, 0xbb, 0x0c, 0x7c, 0x32, 0xf9, 0x46, 0xb1, 0x8e, 0x1d, 0x07, - 0x5b, 0x76, 0x45, 0x6d, 0x74, 0x12, 0xcf, 0x57, 0xc4, 0xc8, 0x7d, 0xfc, 0xbb, 0xc1, 0x51, 0x5c, - 0x60, 0x94, 0x73, 0x8d, 0x46, 0x61, 0x13, 0x8e, 0x77, 0xf0, 0x8a, 0x3e, 0x78, 0xbe, 0xca, 0x79, - 0x4e, 0xb4, 0x79, 0x06, 0x61, 0xbb, 0x06, 0x02, 0xee, 0x8e, 0x65, 0x1f, 0x3c, 0x3f, 0xc1, 0x79, - 0x22, 0x4e, 0x2b, 0x86, 0x94, 0x70, 0x7c, 0x0e, 0xc6, 0xae, 0x62, 0x6b, 0xcb, 0xb0, 0x79, 0xe1, - 0xa8, 0x0f, 0x76, 0x9f, 0xe4, 0xec, 0x46, 0x39, 0x21, 0xad, 0x24, 0x11, 0x5e, 0x4f, 0x43, 0x6a, - 0x5b, 0xad, 0xe2, 0x3e, 0x58, 0xdc, 0xe0, 0x2c, 0x06, 0x09, 0x3e, 0x21, 0x9d, 0x83, 0x4c, 0xdd, - 0xe0, 0xab, 0x56, 0x34, 0xf9, 0xa7, 0x38, 0xf9, 0x90, 0xa0, 0xe1, 0x2c, 0x4c, 0xc3, 0x6c, 0x35, - 0xc8, 0x92, 0x16, 0xcd, 0xe2, 0xef, 0x08, 0x16, 0x82, 0x86, 0xb3, 0x38, 0x80, 0x59, 0x3f, 0x2d, - 0x58, 0xd8, 0x3e, 0x7b, 0x3e, 0x0b, 0x43, 0x86, 0xde, 0xd8, 0x37, 0xf4, 0x7e, 0x84, 0xf8, 0x0c, - 0xe7, 0x00, 0x9c, 0x84, 0x30, 0xb8, 0x00, 0xe9, 0x7e, 0x07, 0xe2, 0xef, 0x7e, 0x57, 0x4c, 0x0f, - 0x31, 0x02, 0x0b, 0x30, 0x2a, 0x02, 0x94, 0x66, 0xe8, 0x7d, 0xb0, 0xf8, 0x7b, 0x9c, 0xc5, 0x88, - 0x8f, 0x8c, 0xab, 0xe1, 0x60, 0xdb, 0xa9, 0xe3, 0x7e, 0x98, 0x7c, 0x4e, 0xa8, 0xc1, 0x49, 0xb8, - 0x29, 0xb7, 0xb0, 0x5e, 0xdd, 0xe9, 0x8f, 0xc3, 0x2f, 0x09, 0x53, 0x0a, 0x1a, 0xc2, 0x62, 0x1e, - 0x86, 0x9b, 0xaa, 0x65, 0xef, 0xa8, 0x8d, 0xbe, 0x86, 0xe3, 0xef, 0x73, 0x1e, 0x19, 0x97, 0x88, - 0x5b, 0xa4, 0xa5, 0x1f, 0x84, 0xcd, 0xe7, 0x85, 0x45, 0x7c, 0x64, 0x7c, 0xea, 0xd9, 0x0e, 0xad, - 0xb2, 0x1d, 0x84, 0xdb, 0x2f, 0x8b, 0xa9, 0xc7, 0x68, 0x97, 0xfd, 0x1c, 0x2f, 0x40, 0xda, 0xd6, - 0x5e, 0xee, 0x8b, 0xcd, 0x17, 0xc4, 0x48, 0x53, 0x02, 0x42, 0xfc, 0x56, 0x38, 0xd1, 0x71, 0x99, - 0xe8, 0x83, 0xd9, 0x3f, 0xe0, 0xcc, 0x8e, 0x75, 0x58, 0x2a, 0x78, 0x48, 0x38, 0x28, 0xcb, 0x7f, - 0x28, 0x42, 0x02, 0x0e, 0xf1, 0x5a, 0x23, 0xfb, 0x08, 0x5b, 0xdd, 0x3e, 0x98, 0xd5, 0x7e, 0x45, - 0x58, 0x8d, 0xd1, 0x06, 0xac, 0xb6, 0x01, 0xc7, 0x38, 0xc7, 0x83, 0x8d, 0xeb, 0xaf, 0x8a, 0xc0, - 0xca, 0xa8, 0x37, 0x83, 0xa3, 0xfb, 0x76, 0xc8, 0xbb, 0xe6, 0x14, 0x09, 0xab, 0x5d, 0x69, 0xaa, - 0x66, 0x1f, 0x9c, 0x7f, 0x8d, 0x73, 0x16, 0x11, 0xdf, 0xcd, 0x78, 0xed, 0x65, 0xd5, 0x24, 0xcc, - 0xdf, 0x02, 0x39, 0xc1, 0xbc, 0xa5, 0x5b, 0xb8, 0x6a, 0xd4, 0x75, 0xed, 0x65, 0x5c, 0xeb, 0x83, - 0xf5, 0xaf, 0x87, 0x86, 0x6a, 0xd3, 0x47, 0x4e, 0x38, 0x2f, 0x42, 0xd6, 0xcd, 0x55, 0x2a, 0x5a, - 0xd3, 0x34, 0x2c, 0x27, 0x82, 0xe3, 0x17, 0xc5, 0x48, 0xb9, 0x74, 0x8b, 0x94, 0xac, 0x50, 0x86, - 0x11, 0xda, 0xec, 0xd7, 0x25, 0xbf, 0xc4, 0x19, 0x0d, 0x7b, 0x54, 0x3c, 0x70, 0x54, 0x8d, 0xa6, - 0xa9, 0x5a, 0xfd, 0xc4, 0xbf, 0x7f, 0x24, 0x02, 0x07, 0x27, 0xe1, 0x81, 0xc3, 0xd9, 0x37, 0x31, - 0x59, 0xed, 0xfb, 0xe0, 0xf0, 0x65, 0x11, 0x38, 0x04, 0x0d, 0x67, 0x21, 0x12, 0x86, 0x3e, 0x58, - 0xfc, 0x63, 0xc1, 0x42, 0xd0, 0x10, 0x16, 0xcf, 0x7b, 0x0b, 0xad, 0x85, 0xeb, 0x9a, 0xed, 0x58, - 0x2c, 0x4d, 0xee, 0xcd, 0xea, 0x9f, 0x7c, 0x37, 0x98, 0x84, 0x29, 0x3e, 0x52, 0x12, 0x89, 0x78, - 0xd9, 0x95, 0xee, 0xa2, 0xa2, 0x05, 0xfb, 0x0d, 0x11, 0x89, 0x7c, 0x64, 0x44, 0x36, 0x5f, 0x86, - 0x48, 0xcc, 0x5e, 0x25, 0x7b, 0x87, 0x3e, 0xd8, 0xfd, 0xd3, 0x90, 0x70, 0xeb, 0x82, 0x96, 0xf0, - 0xf4, 0xe5, 0x3f, 0x2d, 0x7d, 0x17, 0xef, 0xf7, 0xe5, 0x9d, 0xff, 0x2c, 0x94, 0xff, 0x6c, 0x32, - 0x4a, 0x16, 0x43, 0x46, 0x43, 0xf9, 0x14, 0x8a, 0x3a, 0x3f, 0x94, 0xfb, 0xa9, 0xef, 0x73, 0x7d, - 0x83, 0xe9, 0x54, 0x61, 0x89, 0x38, 0x79, 0x30, 0xe9, 0x89, 0x66, 0xf6, 0xde, 0xef, 0xbb, 0x7e, - 0x1e, 0xc8, 0x79, 0x0a, 0x17, 0x61, 0x38, 0x90, 0xf0, 0x44, 0xb3, 0x7a, 0x1f, 0x67, 0x95, 0xf1, - 0xe7, 0x3b, 0x85, 0xb3, 0x90, 0x20, 0xc9, 0x4b, 0x34, 0xf9, 0x5f, 0xe7, 0xe4, 0x14, 0xbd, 0xf0, - 0x66, 0x48, 0x89, 0xa4, 0x25, 0x9a, 0xf4, 0xfd, 0x9c, 0xd4, 0x25, 0x21, 0xe4, 0x22, 0x61, 0x89, - 0x26, 0xff, 0x1b, 0x82, 0x5c, 0x90, 0x10, 0xf2, 0xfe, 0x4d, 0xf8, 0x95, 0x9f, 0x4e, 0xf0, 0x45, - 0x47, 0xd8, 0xee, 0x02, 0x0c, 0xf2, 0x4c, 0x25, 0x9a, 0xfa, 0x83, 0xbc, 0x73, 0x41, 0x51, 0x78, - 0x0a, 0x92, 0x7d, 0x1a, 0xfc, 0x67, 0x38, 0x29, 0xc3, 0x2f, 0xcc, 0xc3, 0x90, 0x2f, 0x3b, 0x89, - 0x26, 0xff, 0x5b, 0x9c, 0xdc, 0x4f, 0x45, 0x44, 0xe7, 0xd9, 0x49, 0x34, 0x83, 0x0f, 0x09, 0xd1, - 0x39, 0x05, 0x31, 0x9b, 0x48, 0x4c, 0xa2, 0xa9, 0x3f, 0x2c, 0xac, 0x2e, 0x48, 0x0a, 0xcf, 0x42, - 0xda, 0x5d, 0x6c, 0xa2, 0xe9, 0x3f, 0xc2, 0xe9, 0x3d, 0x1a, 0x62, 0x01, 0xdf, 0x62, 0x17, 0xcd, - 0xe2, 0x67, 0x85, 0x05, 0x7c, 0x54, 0x64, 0x1a, 0x85, 0x13, 0x98, 0x68, 0x4e, 0x1f, 0x15, 0xd3, - 0x28, 0x94, 0xbf, 0x90, 0xd1, 0xa4, 0x31, 0x3f, 0x9a, 0xc5, 0xcf, 0x89, 0xd1, 0xa4, 0xf8, 0x44, - 0x8c, 0x70, 0x46, 0x10, 0xcd, 0xe3, 0x6f, 0x0b, 0x31, 0x42, 0x09, 0x41, 0x61, 0x0d, 0x50, 0x7b, - 0x36, 0x10, 0xcd, 0xef, 0x63, 0x9c, 0xdf, 0x58, 0x5b, 0x32, 0x50, 0x78, 0x01, 0x8e, 0x75, 0xce, - 0x04, 0xa2, 0xb9, 0x7e, 0xfc, 0xfb, 0xa1, 0xbd, 0x9b, 0x3f, 0x11, 0x28, 0x6c, 0x78, 0x4b, 0x8a, - 0x3f, 0x0b, 0x88, 0x66, 0xfb, 0xea, 0xf7, 0x83, 0x81, 0xdb, 0x9f, 0x04, 0x14, 0xe6, 0x00, 0xbc, - 0x05, 0x38, 0x9a, 0xd7, 0x27, 0x39, 0x2f, 0x1f, 0x11, 0x99, 0x1a, 0x7c, 0xfd, 0x8d, 0xa6, 0xbf, - 0x21, 0xa6, 0x06, 0xa7, 0x20, 0x53, 0x43, 0x2c, 0xbd, 0xd1, 0xd4, 0x9f, 0x12, 0x53, 0x43, 0x90, - 0x10, 0xcf, 0xf6, 0xad, 0x6e, 0xd1, 0x1c, 0x3e, 0x23, 0x3c, 0xdb, 0x47, 0x55, 0x58, 0x81, 0xb1, - 0xb6, 0x05, 0x31, 0x9a, 0xd5, 0x2f, 0x70, 0x56, 0xd9, 0xf0, 0x7a, 0xe8, 0x5f, 0xbc, 0xf8, 0x62, - 0x18, 0xcd, 0xed, 0xb3, 0xa1, 0xc5, 0x8b, 0xaf, 0x85, 0x85, 0x0b, 0x90, 0xd2, 0x5b, 0x8d, 0x06, - 0x99, 0x3c, 0xa8, 0xf7, 0x99, 0xbf, 0xdc, 0x7f, 0xfd, 0x01, 0xb7, 0x8e, 0x20, 0x28, 0x9c, 0x85, - 0x24, 0x6e, 0x6e, 0xe1, 0x5a, 0x14, 0xe5, 0x77, 0x7e, 0x20, 0x02, 0x26, 0xc1, 0x2e, 0x3c, 0x0b, - 0xc0, 0x4a, 0x23, 0xf4, 0xf5, 0x60, 0x04, 0xed, 0x7f, 0xfb, 0x01, 0x3f, 0x8d, 0xe3, 0x91, 0x78, - 0x0c, 0xd8, 0xd9, 0x9e, 0xde, 0x0c, 0xbe, 0x1b, 0x64, 0x40, 0x47, 0xe4, 0x69, 0x18, 0x7c, 0xd1, - 0x36, 0x74, 0x47, 0xad, 0x47, 0x51, 0xff, 0x77, 0x4e, 0x2d, 0xf0, 0x89, 0xc1, 0x9a, 0x86, 0x85, - 0x1d, 0xb5, 0x6e, 0x47, 0xd1, 0xfe, 0x0f, 0x4e, 0xeb, 0x12, 0x10, 0xe2, 0xaa, 0x6a, 0x3b, 0xfd, - 0xe8, 0xfd, 0x27, 0x82, 0x58, 0x10, 0x10, 0xa1, 0xc9, 0xef, 0x5d, 0xbc, 0x1f, 0x45, 0xfb, 0x3d, - 0x21, 0x34, 0xc7, 0x2f, 0xbc, 0x19, 0xd2, 0xe4, 0x27, 0x3b, 0x62, 0x17, 0x41, 0xfc, 0xa7, 0x9c, - 0xd8, 0xa3, 0x20, 0x3d, 0xdb, 0x4e, 0xcd, 0xd1, 0xa2, 0x8d, 0x7d, 0x8b, 0x8f, 0xb4, 0xc0, 0x2f, - 0xcc, 0xc1, 0x90, 0xed, 0xd4, 0x6a, 0x2d, 0x9e, 0x9f, 0x46, 0x90, 0xff, 0xd9, 0x0f, 0xdc, 0x92, - 0x85, 0x4b, 0x43, 0x46, 0xfb, 0xda, 0xae, 0x63, 0x1a, 0xf4, 0x15, 0x48, 0x14, 0x87, 0xef, 0x73, - 0x0e, 0x3e, 0x92, 0xc2, 0x3c, 0x64, 0x88, 0x2e, 0x16, 0x36, 0x31, 0x7d, 0x5f, 0x15, 0xc1, 0xe2, - 0xcf, 0xb9, 0x01, 0x02, 0x44, 0xc5, 0x9f, 0xfc, 0xea, 0x6b, 0x93, 0xd2, 0x37, 0x5e, 0x9b, 0x94, - 0xfe, 0xe8, 0xb5, 0x49, 0xe9, 0xc3, 0xdf, 0x9a, 0x3c, 0xf2, 0x8d, 0x6f, 0x4d, 0x1e, 0xf9, 0xbd, - 0x6f, 0x4d, 0x1e, 0xe9, 0x5c, 0x36, 0x86, 0x05, 0x63, 0xc1, 0x60, 0x05, 0xe3, 0xb7, 0xc9, 0x81, - 0x72, 0x71, 0xdd, 0xf0, 0xaa, 0xb5, 0xee, 0x26, 0x07, 0xfe, 0x5c, 0x22, 0x1b, 0xe6, 0x60, 0x2d, - 0x57, 0xd5, 0xf7, 0xbb, 0xdc, 0xc1, 0xc9, 0x77, 0x2c, 0x0c, 0xcb, 0x6f, 0x82, 0xf8, 0x9c, 0xbe, - 0x8f, 0x4e, 0xb0, 0x98, 0x57, 0x69, 0x59, 0x0d, 0x7e, 0xf4, 0x6b, 0x90, 0xb4, 0x37, 0xad, 0x06, - 0x9a, 0xf0, 0xce, 0x67, 0x4a, 0xa7, 0x32, 0xfc, 0xd0, 0x65, 0x21, 0xf1, 0xbd, 0xcf, 0x4c, 0x1d, - 0x29, 0xee, 0x86, 0x35, 0xfc, 0x4a, 0xa4, 0x96, 0xa9, 0x39, 0x7d, 0x9f, 0x2a, 0xb9, 0x26, 0xbd, - 0x2d, 0x49, 0xfa, 0xb0, 0x45, 0x61, 0x7b, 0x32, 0x5c, 0xd8, 0x7e, 0x01, 0x37, 0x1a, 0x97, 0x75, - 0xe3, 0x9a, 0xbe, 0x41, 0xd0, 0xb6, 0x06, 0x28, 0x8f, 0x27, 0xe0, 0xc3, 0x31, 0x98, 0x0a, 0xeb, - 0x4d, 0x1c, 0xc7, 0x76, 0xd4, 0xa6, 0xd9, 0xed, 0x06, 0xd2, 0x05, 0x48, 0x6f, 0x08, 0x1c, 0x94, - 0x83, 0x41, 0x1b, 0x57, 0x0d, 0xbd, 0x66, 0x53, 0x65, 0xe3, 0x8a, 0x68, 0x12, 0x65, 0x75, 0x55, - 0x37, 0x6c, 0x7e, 0x40, 0x92, 0x35, 0x8a, 0x3f, 0x2f, 0x1d, 0x6c, 0x24, 0x47, 0xdc, 0xae, 0x84, - 0xa6, 0x0f, 0xf7, 0x2a, 0xff, 0x53, 0x2b, 0x78, 0x2a, 0xf8, 0x6a, 0xfd, 0xfd, 0x9a, 0xe4, 0x3d, - 0x71, 0x38, 0x51, 0x35, 0xec, 0xa6, 0x61, 0x57, 0xd8, 0x08, 0xb3, 0x06, 0x37, 0x46, 0xc6, 0xff, - 0xa8, 0x8f, 0xfa, 0xff, 0x25, 0x18, 0xa1, 0xb3, 0x80, 0x56, 0x3e, 0x69, 0xe0, 0x89, 0x5c, 0x2b, - 0xbe, 0xf6, 0xef, 0x93, 0xd4, 0x6b, 0x86, 0x5d, 0x42, 0x7a, 0xb4, 0x63, 0x03, 0x26, 0xb4, 0xa6, - 0xd9, 0xc0, 0xf4, 0x1d, 0x50, 0xc5, 0x7d, 0x16, 0xcd, 0xef, 0xeb, 0x9c, 0xdf, 0xb8, 0x47, 0xbe, - 0x28, 0xa8, 0x0b, 0x4b, 0x30, 0xa6, 0x56, 0xab, 0xd8, 0x0c, 0xb0, 0x8c, 0x98, 0xa1, 0x42, 0xc0, - 0x2c, 0xa7, 0x74, 0xb9, 0x15, 0x9f, 0xed, 0x36, 0xb6, 0x6f, 0xbb, 0xdf, 0x37, 0x68, 0x16, 0xae, - 0x63, 0xfd, 0x51, 0x1d, 0x3b, 0xd7, 0x0c, 0x6b, 0x97, 0x9b, 0xf7, 0x51, 0xd6, 0x95, 0x18, 0x84, - 0xf7, 0xc5, 0x61, 0x92, 0x3d, 0x98, 0xdd, 0x52, 0x6d, 0x3c, 0x7b, 0xf5, 0xf1, 0x2d, 0xec, 0xa8, - 0x8f, 0xcf, 0x56, 0x0d, 0x4d, 0xe7, 0x23, 0x31, 0xce, 0xc7, 0x85, 0x3c, 0x9f, 0xe1, 0xcf, 0xbb, - 0x4c, 0xcc, 0x05, 0x48, 0xcc, 0x1b, 0x9a, 0x4e, 0x3c, 0xb2, 0x86, 0x75, 0xa3, 0xc9, 0xa7, 0x25, - 0x6b, 0xa0, 0x7b, 0x61, 0x40, 0x6d, 0x1a, 0x2d, 0xdd, 0x61, 0xaf, 0xaf, 0x8a, 0x43, 0x5f, 0xbd, - 0x39, 0x75, 0xe4, 0xf7, 0x6f, 0x4e, 0xc5, 0x17, 0x75, 0x47, 0xe1, 0x8f, 0x0a, 0x89, 0xd7, 0x3f, - 0x3d, 0x25, 0xc9, 0xcf, 0xc1, 0x60, 0x09, 0x57, 0x0f, 0xc3, 0xab, 0x84, 0xab, 0x21, 0x5e, 0x0f, - 0x41, 0x6a, 0x51, 0x77, 0xd8, 0x99, 0xd9, 0xbb, 0x21, 0xae, 0xe9, 0xec, 0x14, 0x56, 0xa8, 0x7f, - 0x02, 0x27, 0xa8, 0x25, 0x5c, 0x75, 0x51, 0x6b, 0xb8, 0x1a, 0x46, 0x25, 0xec, 0x09, 0xbc, 0x58, - 0xfa, 0xbd, 0xff, 0x3c, 0x79, 0xe4, 0x95, 0xd7, 0x26, 0x8f, 0x74, 0x1d, 0x09, 0x7f, 0x38, 0xe4, - 0x26, 0xe6, 0x43, 0x60, 0xd7, 0x76, 0x67, 0x9d, 0xc0, 0x5c, 0xf8, 0x9b, 0x31, 0x98, 0x6c, 0x73, - 0x71, 0xbe, 0x30, 0x74, 0x8b, 0x0e, 0x05, 0x48, 0x95, 0xc4, 0x7a, 0x73, 0xd0, 0xe0, 0xf0, 0x73, - 0x07, 0x0c, 0x0e, 0xc3, 0xa2, 0x27, 0x11, 0x1b, 0x4e, 0x47, 0xc7, 0x06, 0x21, 0xff, 0x21, 0x42, - 0xc3, 0xe7, 0x13, 0x70, 0x37, 0xbd, 0x14, 0x62, 0x35, 0x35, 0xdd, 0x99, 0xad, 0x5a, 0xfb, 0xa6, - 0x43, 0x97, 0x13, 0x63, 0x9b, 0x5b, 0x63, 0xcc, 0x7b, 0x3c, 0xc3, 0x1e, 0x77, 0x71, 0xc9, 0x6d, - 0x48, 0xae, 0x11, 0x3a, 0x62, 0x08, 0xc7, 0x70, 0xd4, 0x06, 0x37, 0x10, 0x6b, 0x10, 0x28, 0xbb, - 0x48, 0x12, 0x63, 0x50, 0x4d, 0xdc, 0x21, 0x69, 0x60, 0x75, 0x9b, 0x1d, 0xdc, 0x8d, 0xd3, 0x25, - 0x24, 0x45, 0x00, 0xf4, 0x8c, 0xee, 0x04, 0x24, 0xd5, 0x16, 0x7b, 0xe5, 0x1c, 0x27, 0x6b, 0x0b, - 0x6d, 0xc8, 0x97, 0x61, 0x90, 0xbf, 0xe6, 0x42, 0x59, 0x88, 0xef, 0xe2, 0x7d, 0xda, 0x4f, 0x46, - 0x21, 0x3f, 0xd1, 0x0c, 0x24, 0xa9, 0xf0, 0xfc, 0x46, 0x42, 0x6e, 0xa6, 0x4d, 0xfa, 0x19, 0x2a, - 0xa4, 0xc2, 0xd0, 0xe4, 0xe7, 0x20, 0x55, 0x32, 0x9a, 0x9a, 0x6e, 0x04, 0xb9, 0xa5, 0x19, 0x37, - 0x2a, 0xb3, 0xd9, 0xe2, 0xae, 0xaf, 0xb0, 0x06, 0x3a, 0x06, 0x03, 0xec, 0x20, 0x37, 0x7f, 0x6d, - 0xce, 0x5b, 0xf2, 0x3c, 0x0c, 0x52, 0xde, 0xab, 0x26, 0x42, 0xfc, 0x66, 0x0f, 0x3f, 0x31, 0x4e, - 0xa3, 0x24, 0x67, 0x1f, 0xf3, 0x84, 0x45, 0x90, 0xa8, 0xa9, 0x8e, 0xca, 0xf5, 0xa6, 0xbf, 0xe5, - 0x67, 0x20, 0xc5, 0x99, 0xd8, 0xe8, 0x0c, 0xc4, 0x0d, 0xd3, 0xe6, 0x2f, 0xbe, 0xf3, 0xdd, 0x54, - 0x59, 0x35, 0x8b, 0x09, 0x32, 0x69, 0x14, 0x82, 0x5c, 0x54, 0xba, 0xce, 0x92, 0xf3, 0x3e, 0x47, - 0xf2, 0x0d, 0xb9, 0xef, 0x27, 0x1b, 0xd2, 0x36, 0x77, 0x70, 0x9d, 0xe5, 0x33, 0x31, 0x98, 0xf4, - 0x3d, 0xbd, 0x8a, 0x2d, 0xb2, 0xd7, 0x63, 0x13, 0x8c, 0x7b, 0x0b, 0xf2, 0x09, 0xc9, 0x9f, 0x77, - 0x71, 0x97, 0x37, 0x43, 0x7c, 0xce, 0x34, 0x51, 0x1e, 0x52, 0xec, 0x05, 0xb7, 0xc1, 0xfc, 0x25, - 0xa1, 0xb8, 0x6d, 0xf2, 0xcc, 0x36, 0xb6, 0x9d, 0x6b, 0xaa, 0xe5, 0x5e, 0x61, 0x12, 0x6d, 0xf9, - 0x69, 0x48, 0xcf, 0x1b, 0xba, 0x8d, 0x75, 0xbb, 0x45, 0xa7, 0xde, 0x56, 0xc3, 0xa8, 0xee, 0x72, - 0x0e, 0xac, 0x41, 0x0c, 0xae, 0x9a, 0x26, 0xa5, 0x4c, 0x28, 0xe4, 0x27, 0x0b, 0x53, 0xc5, 0xf5, - 0xae, 0x26, 0x7a, 0xfa, 0xe0, 0x26, 0xe2, 0x4a, 0xba, 0x36, 0xfa, 0x03, 0x09, 0x4e, 0xb6, 0x4f, - 0xa8, 0x5d, 0xbc, 0x6f, 0x1f, 0x74, 0x3e, 0x9d, 0x87, 0xf4, 0x1a, 0xbd, 0x47, 0x7c, 0x19, 0xef, - 0xa3, 0x3c, 0x0c, 0xe2, 0xda, 0x99, 0xb3, 0x67, 0x1f, 0x7f, 0x9a, 0x79, 0xfb, 0xa5, 0x23, 0x8a, - 0x00, 0x14, 0x52, 0x44, 0xab, 0xd7, 0x3f, 0x33, 0x25, 0x15, 0x93, 0x10, 0xb7, 0x5b, 0xcd, 0x3b, - 0xea, 0x03, 0xaf, 0x26, 0x61, 0xda, 0x4f, 0x49, 0x03, 0xd0, 0x55, 0xb5, 0xa1, 0xd5, 0x54, 0xef, - 0x86, 0x77, 0xd6, 0xa7, 0x23, 0xc5, 0xe8, 0xac, 0x62, 0xbe, 0xa7, 0xa5, 0xe4, 0x5f, 0x97, 0x20, - 0x73, 0x45, 0x70, 0x5e, 0xc7, 0x0e, 0xba, 0x00, 0xe0, 0xf6, 0x24, 0xa6, 0xc5, 0x5d, 0x33, 0xe1, - 0xbe, 0x66, 0x5c, 0x1a, 0xc5, 0x87, 0x8e, 0x9e, 0xa2, 0x8e, 0x66, 0x1a, 0x36, 0xbf, 0xdf, 0x12, - 0x41, 0xea, 0x22, 0xa3, 0x47, 0x00, 0xd1, 0x08, 0x56, 0xb9, 0x6a, 0x38, 0x9a, 0x5e, 0xaf, 0x98, - 0xc6, 0x35, 0x7e, 0x19, 0x30, 0xae, 0x64, 0xe9, 0x93, 0x2b, 0xf4, 0xc1, 0x1a, 0x81, 0x13, 0xa1, - 0xd3, 0x2e, 0x17, 0xb2, 0x5a, 0xa8, 0xb5, 0x9a, 0x85, 0x6d, 0x9b, 0x07, 0x29, 0xd1, 0x44, 0x17, - 0x60, 0xd0, 0x6c, 0x6d, 0x55, 0x44, 0x44, 0x18, 0x3a, 0x73, 0xb2, 0xd3, 0xfc, 0x16, 0xe3, 0xcf, - 0x67, 0xf8, 0x80, 0xd9, 0xda, 0x22, 0xde, 0x70, 0x0f, 0x64, 0x3a, 0x08, 0x33, 0x74, 0xd5, 0x93, - 0x83, 0x5e, 0x4f, 0xe7, 0x1a, 0x54, 0x4c, 0x4b, 0x33, 0x2c, 0xcd, 0xd9, 0xa7, 0xa7, 0x53, 0xe2, - 0x4a, 0x56, 0x3c, 0x58, 0xe3, 0x70, 0x79, 0x17, 0x46, 0xd7, 0x69, 0x2a, 0xe5, 0x49, 0x7e, 0xd6, - 0x93, 0x4f, 0x8a, 0x96, 0xaf, 0xab, 0x64, 0xb1, 0x36, 0xc9, 0x8a, 0xcf, 0x77, 0xf5, 0xce, 0xa7, - 0x0e, 0xee, 0x9d, 0xc1, 0xc5, 0xfd, 0x4f, 0x4e, 0x04, 0x26, 0x1f, 0xcf, 0x9c, 0x7d, 0xe1, 0xa9, - 0x5f, 0xc7, 0x8c, 0xda, 0x41, 0xe4, 0x7b, 0x2f, 0x9a, 0xf9, 0x88, 0x30, 0x99, 0x8f, 0x9c, 0x42, - 0xf2, 0xd3, 0x30, 0xbc, 0xa6, 0x5a, 0xce, 0x3a, 0x76, 0x2e, 0x61, 0xb5, 0x86, 0xad, 0xe0, 0xaa, - 0x3a, 0x2c, 0x56, 0x55, 0x04, 0x09, 0xba, 0x74, 0xb2, 0x55, 0x85, 0xfe, 0x96, 0x77, 0x20, 0x41, - 0x4f, 0xa8, 0xb9, 0x2b, 0x2e, 0xa7, 0x60, 0x2b, 0x2e, 0x89, 0x95, 0xfb, 0x0e, 0xb6, 0xc5, 0x86, - 0x8d, 0x36, 0xd0, 0x93, 0x62, 0xdd, 0x8c, 0xf7, 0x5e, 0x37, 0xb9, 0x23, 0xf2, 0xd5, 0xb3, 0x01, - 0x83, 0x45, 0x12, 0x6a, 0x17, 0x4b, 0xae, 0x20, 0x92, 0x27, 0x08, 0x5a, 0x86, 0x51, 0x53, 0xb5, - 0x1c, 0x7a, 0x34, 0x7f, 0x87, 0x6a, 0xc1, 0x7d, 0x7d, 0xaa, 0x7d, 0xe6, 0x05, 0x94, 0xe5, 0xbd, - 0x0c, 0x9b, 0x7e, 0xa0, 0xfc, 0xc7, 0x09, 0x18, 0xe0, 0xc6, 0x78, 0x33, 0x0c, 0x72, 0xb3, 0x72, - 0xef, 0xbc, 0x7b, 0xa6, 0x7d, 0xe1, 0x99, 0x71, 0x17, 0x08, 0xce, 0x4f, 0xd0, 0xa0, 0x07, 0x20, - 0x55, 0xdd, 0x51, 0x35, 0xbd, 0xa2, 0xd5, 0x44, 0x56, 0xfb, 0xda, 0xcd, 0xa9, 0xc1, 0x79, 0x02, - 0x5b, 0x2c, 0x29, 0x83, 0xf4, 0xe1, 0x62, 0x8d, 0xac, 0xf4, 0x3b, 0x58, 0xab, 0xef, 0x38, 0x7c, - 0x86, 0xf1, 0x16, 0x3a, 0x0f, 0x09, 0xe2, 0x10, 0xfc, 0xe6, 0x56, 0xbe, 0x6d, 0x6f, 0xe1, 0x6e, - 0xf0, 0x8a, 0x29, 0xd2, 0xf1, 0x87, 0xff, 0x70, 0x4a, 0x52, 0x28, 0x05, 0x9a, 0x87, 0xe1, 0x86, - 0x6a, 0x3b, 0x15, 0xba, 0x42, 0x91, 0xee, 0x93, 0x94, 0xc5, 0x89, 0x76, 0x83, 0x70, 0xc3, 0x72, - 0xd1, 0x87, 0x08, 0x15, 0x03, 0xd5, 0xd0, 0x29, 0xc8, 0x52, 0x26, 0x55, 0xa3, 0xd9, 0xd4, 0x1c, - 0x96, 0x3b, 0x0d, 0x50, 0xbb, 0x8f, 0x10, 0xf8, 0x3c, 0x05, 0xd3, 0x0c, 0xea, 0x2e, 0x48, 0xd3, - 0xab, 0x22, 0x14, 0x85, 0x1d, 0x8b, 0x4c, 0x11, 0x00, 0x7d, 0xf8, 0x20, 0x8c, 0x7a, 0xf1, 0x91, - 0xa1, 0xa4, 0x18, 0x17, 0x0f, 0x4c, 0x11, 0x1f, 0x83, 0x09, 0x1d, 0xef, 0xd1, 0x83, 0x9a, 0x01, - 0xec, 0x34, 0xc5, 0x46, 0xe4, 0xd9, 0x95, 0x20, 0xc5, 0xfd, 0x30, 0x52, 0x15, 0xc6, 0x67, 0xb8, - 0x40, 0x71, 0x87, 0x5d, 0x28, 0x45, 0x3b, 0x01, 0x29, 0xd5, 0x34, 0x19, 0xc2, 0x10, 0x8f, 0x8f, - 0xa6, 0x49, 0x1f, 0x9d, 0x86, 0x31, 0xaa, 0xa3, 0x85, 0xed, 0x56, 0xc3, 0xe1, 0x4c, 0x32, 0x14, - 0x67, 0x94, 0x3c, 0x50, 0x18, 0x9c, 0xe2, 0xde, 0x0b, 0xc3, 0xf8, 0xaa, 0x56, 0xc3, 0x7a, 0x15, - 0x33, 0xbc, 0x61, 0x8a, 0x97, 0x11, 0x40, 0x8a, 0xf4, 0x10, 0xb8, 0x71, 0xaf, 0x22, 0x62, 0xf2, - 0x08, 0xe3, 0x27, 0xe0, 0x73, 0x0c, 0x2c, 0xe7, 0x20, 0x51, 0x52, 0x1d, 0x95, 0x24, 0x10, 0xce, - 0x1e, 0x5b, 0x68, 0x32, 0x0a, 0xf9, 0x29, 0xbf, 0x1e, 0x83, 0xc4, 0x15, 0xc3, 0xc1, 0xe8, 0x09, - 0x5f, 0x82, 0x37, 0xd2, 0xc9, 0x9f, 0xd7, 0xb5, 0xba, 0x8e, 0x6b, 0xcb, 0x76, 0xdd, 0x77, 0x5f, - 0xdb, 0x73, 0xa7, 0x58, 0xc0, 0x9d, 0x26, 0x20, 0x69, 0x19, 0x2d, 0xbd, 0x26, 0x4e, 0x14, 0xd2, - 0x06, 0x2a, 0x43, 0xca, 0xf5, 0x92, 0x44, 0x94, 0x97, 0x8c, 0x12, 0x2f, 0x21, 0x3e, 0xcc, 0x01, - 0xca, 0xe0, 0x16, 0x77, 0x96, 0x22, 0xa4, 0xdd, 0xe0, 0xc5, 0xbd, 0xad, 0x3f, 0x87, 0xf5, 0xc8, - 0xc8, 0x62, 0xe2, 0x8e, 0xbd, 0x6b, 0x3c, 0xe6, 0x71, 0x59, 0xf7, 0x01, 0xb7, 0x5e, 0xc0, 0xad, - 0xf8, 0xdd, 0xf1, 0x41, 0xaa, 0x97, 0xe7, 0x56, 0xec, 0xfe, 0xf8, 0x49, 0x48, 0xdb, 0x5a, 0x5d, - 0x57, 0x9d, 0x96, 0x85, 0xb9, 0xe7, 0x79, 0x00, 0xf9, 0x2b, 0x12, 0x0c, 0x30, 0x4f, 0xf6, 0xd9, - 0x4d, 0xea, 0x6c, 0xb7, 0x58, 0x37, 0xbb, 0xc5, 0x0f, 0x6f, 0xb7, 0x39, 0x00, 0x57, 0x18, 0x9b, - 0xdf, 0xfd, 0xed, 0x90, 0x31, 0x30, 0x11, 0xd7, 0xb5, 0x3a, 0x9f, 0xa8, 0x3e, 0x22, 0xf9, 0x0f, - 0x24, 0x92, 0xa4, 0xf2, 0xe7, 0x68, 0x0e, 0x86, 0x85, 0x5c, 0x95, 0xed, 0x86, 0x5a, 0xe7, 0xbe, - 0x73, 0x77, 0x57, 0xe1, 0x2e, 0x36, 0xd4, 0xba, 0x32, 0xc4, 0xe5, 0x21, 0x8d, 0xce, 0xe3, 0x10, - 0xeb, 0x32, 0x0e, 0x81, 0x81, 0x8f, 0x1f, 0x6e, 0xe0, 0x03, 0x43, 0x94, 0x08, 0x0f, 0xd1, 0x17, - 0x63, 0x74, 0xb3, 0x62, 0x1a, 0xb6, 0xda, 0xf8, 0x51, 0xcc, 0x88, 0xbb, 0x20, 0x6d, 0x1a, 0x8d, - 0x0a, 0x7b, 0xc2, 0x4e, 0xda, 0xa6, 0x4c, 0xa3, 0xa1, 0xb4, 0x0d, 0x7b, 0xf2, 0x36, 0x4d, 0x97, - 0x81, 0xdb, 0x60, 0xb5, 0xc1, 0xb0, 0xd5, 0x2c, 0xc8, 0x30, 0x53, 0xf0, 0xb5, 0xec, 0x31, 0x62, - 0x03, 0xba, 0x38, 0x4a, 0xed, 0x6b, 0x2f, 0x13, 0x9b, 0x61, 0x2a, 0x1c, 0x8f, 0x50, 0xb0, 0xd0, - 0xdf, 0x69, 0x97, 0xeb, 0x77, 0x4b, 0x85, 0xe3, 0xc9, 0x3f, 0x2f, 0x01, 0x2c, 0x11, 0xcb, 0x52, - 0x7d, 0xc9, 0x2a, 0x64, 0x53, 0x11, 0x2a, 0x81, 0x9e, 0x27, 0xbb, 0x0d, 0x1a, 0xef, 0x3f, 0x63, - 0xfb, 0xe5, 0x9e, 0x87, 0x61, 0xcf, 0x19, 0x6d, 0x2c, 0x84, 0x99, 0xec, 0x91, 0x55, 0xaf, 0x63, - 0x47, 0xc9, 0x5c, 0xf5, 0xb5, 0xe4, 0x7f, 0x29, 0x41, 0x9a, 0xca, 0xb4, 0x8c, 0x1d, 0x35, 0x30, - 0x86, 0xd2, 0xe1, 0xc7, 0xf0, 0x6e, 0x00, 0xc6, 0xc6, 0xd6, 0x5e, 0xc6, 0xdc, 0xb3, 0xd2, 0x14, - 0xb2, 0xae, 0xbd, 0x8c, 0xd1, 0x39, 0xd7, 0xe0, 0xf1, 0xde, 0x06, 0x17, 0x59, 0x37, 0x37, 0xfb, - 0x71, 0x18, 0xa4, 0x9f, 0xc0, 0xd9, 0xb3, 0x79, 0x22, 0x3d, 0xa0, 0xb7, 0x9a, 0x1b, 0x7b, 0xb6, - 0xfc, 0x22, 0x0c, 0x6e, 0xec, 0xb1, 0xda, 0xc7, 0x5d, 0x90, 0xb6, 0x0c, 0x83, 0xaf, 0xc9, 0x2c, - 0x17, 0x4a, 0x11, 0x00, 0x5d, 0x82, 0xc4, 0x7e, 0x3f, 0xe6, 0xed, 0xf7, 0xbd, 0x82, 0x45, 0xbc, - 0xaf, 0x82, 0xc5, 0xe9, 0xff, 0x20, 0xc1, 0x90, 0x2f, 0x3e, 0xa0, 0xc7, 0xe1, 0x68, 0x71, 0x69, - 0x75, 0xfe, 0x72, 0x65, 0xb1, 0x54, 0xb9, 0xb8, 0x34, 0xb7, 0xe0, 0xdd, 0x25, 0xc9, 0x1f, 0xbb, - 0x7e, 0x63, 0x1a, 0xf9, 0x70, 0x37, 0xf5, 0x5d, 0xdd, 0xb8, 0xa6, 0xa3, 0x59, 0x98, 0x08, 0x92, - 0xcc, 0x15, 0xd7, 0xcb, 0x2b, 0x1b, 0x59, 0x29, 0x7f, 0xf4, 0xfa, 0x8d, 0xe9, 0x31, 0x1f, 0xc5, - 0xdc, 0x96, 0x8d, 0x75, 0xa7, 0x9d, 0x60, 0x7e, 0x75, 0x79, 0x79, 0x71, 0x23, 0x1b, 0x6b, 0x23, - 0xe0, 0x01, 0xfb, 0x21, 0x18, 0x0b, 0x12, 0xac, 0x2c, 0x2e, 0x65, 0xe3, 0x79, 0x74, 0xfd, 0xc6, - 0xf4, 0x88, 0x0f, 0x7b, 0x45, 0x6b, 0xe4, 0x53, 0x1f, 0xf8, 0xec, 0xe4, 0x91, 0x5f, 0xfa, 0xc5, - 0x49, 0x89, 0x68, 0x36, 0x1c, 0x88, 0x11, 0xe8, 0x11, 0x38, 0xbe, 0xbe, 0xb8, 0xb0, 0x52, 0x2e, - 0x55, 0x96, 0xd7, 0x17, 0x2a, 0xec, 0x23, 0x1a, 0xae, 0x76, 0xa3, 0xd7, 0x6f, 0x4c, 0x0f, 0x71, - 0x95, 0xba, 0x61, 0xaf, 0x29, 0xe5, 0x2b, 0xab, 0x1b, 0xe5, 0xac, 0xc4, 0xb0, 0xd7, 0x2c, 0x7c, - 0xd5, 0x70, 0xd8, 0x37, 0xb2, 0x1e, 0x83, 0x13, 0x1d, 0xb0, 0x5d, 0xc5, 0xc6, 0xae, 0xdf, 0x98, - 0x1e, 0x5e, 0xb3, 0x30, 0x9b, 0x3f, 0x94, 0x62, 0x06, 0x72, 0xed, 0x14, 0xab, 0x6b, 0xab, 0xeb, - 0x73, 0x4b, 0xd9, 0xe9, 0x7c, 0xf6, 0xfa, 0x8d, 0xe9, 0x8c, 0x08, 0x86, 0x04, 0xdf, 0xd3, 0xec, - 0x4e, 0xee, 0x78, 0xfe, 0xec, 0x51, 0xb8, 0x8f, 0x97, 0x3c, 0x6d, 0x47, 0xdd, 0xd5, 0xf4, 0xba, - 0x5b, 0x58, 0xe6, 0x6d, 0xbe, 0xf3, 0x39, 0xc6, 0x6b, 0xcb, 0x02, 0xda, 0xb3, 0xbc, 0x9c, 0xef, - 0xfe, 0xe6, 0x28, 0x1f, 0x51, 0x3d, 0x8d, 0xde, 0x3a, 0x75, 0x7f, 0x15, 0x91, 0x8f, 0x28, 0x90, - 0xe7, 0x7b, 0x6e, 0xee, 0xe4, 0x0f, 0x4a, 0x30, 0x72, 0x49, 0xb3, 0x1d, 0xc3, 0xd2, 0xaa, 0x6a, - 0x83, 0xde, 0x20, 0x39, 0xd7, 0x6f, 0x6c, 0x0d, 0x4d, 0xf5, 0x67, 0x61, 0xe0, 0xaa, 0xda, 0x60, - 0x41, 0x2d, 0x4e, 0xbf, 0x78, 0xd1, 0xd9, 0x7c, 0x5e, 0x68, 0x13, 0x0c, 0x18, 0x99, 0xfc, 0x2b, - 0x31, 0x18, 0xa5, 0x93, 0xc1, 0x66, 0x9f, 0x38, 0x22, 0x7b, 0xac, 0x22, 0x24, 0x2c, 0xd5, 0xe1, - 0x45, 0xc1, 0xe2, 0x0c, 0x2f, 0x74, 0x3f, 0x10, 0x5d, 0xbc, 0x9e, 0x29, 0xe1, 0xaa, 0x42, 0x69, - 0xd1, 0x3b, 0x20, 0xd5, 0x54, 0xf7, 0x2a, 0x94, 0x0f, 0xdb, 0xb9, 0xcc, 0x1d, 0x8c, 0xcf, 0xad, - 0x9b, 0x53, 0xa3, 0xfb, 0x6a, 0xb3, 0x51, 0x90, 0x05, 0x1f, 0x59, 0x19, 0x6c, 0xaa, 0x7b, 0x44, - 0x44, 0x64, 0xc2, 0x28, 0x81, 0x56, 0x77, 0x54, 0xbd, 0x8e, 0x59, 0x27, 0xb4, 0xc4, 0x59, 0xbc, - 0x74, 0xe0, 0x4e, 0x8e, 0x79, 0x9d, 0xf8, 0xd8, 0xc9, 0xca, 0x70, 0x53, 0xdd, 0x9b, 0xa7, 0x00, - 0xd2, 0x63, 0x21, 0xf5, 0xb1, 0x4f, 0x4f, 0x1d, 0xa1, 0x2f, 0x0f, 0xbe, 0x29, 0x01, 0x78, 0x16, - 0x43, 0xef, 0x80, 0x6c, 0xd5, 0x6d, 0x51, 0x5a, 0x9b, 0x8f, 0xe1, 0x83, 0xdd, 0xc6, 0x22, 0x64, - 0x6f, 0xb6, 0x36, 0x7f, 0xe3, 0xe6, 0x94, 0xa4, 0x8c, 0x56, 0x43, 0x43, 0xf1, 0x76, 0x18, 0x6a, - 0x99, 0x35, 0xd5, 0xc1, 0x15, 0xba, 0x8f, 0x8b, 0x45, 0xae, 0xf3, 0x93, 0x84, 0xd7, 0xad, 0x9b, - 0x53, 0x88, 0xa9, 0xe5, 0x23, 0x96, 0xe9, 0xea, 0x0f, 0x0c, 0x42, 0x08, 0x7c, 0x3a, 0x7d, 0x4d, - 0x82, 0xa1, 0x92, 0xef, 0x24, 0x57, 0x0e, 0x06, 0x9b, 0x86, 0xae, 0xed, 0x72, 0x7f, 0x4c, 0x2b, - 0xa2, 0x89, 0xf2, 0x90, 0x62, 0x97, 0xea, 0x9c, 0x7d, 0x51, 0xea, 0x14, 0x6d, 0x42, 0x75, 0x0d, - 0x6f, 0xd9, 0x9a, 0x18, 0x0d, 0x45, 0x34, 0xd1, 0x45, 0xc8, 0xda, 0xb8, 0xda, 0xb2, 0x34, 0x67, - 0xbf, 0x52, 0x35, 0x74, 0x47, 0xad, 0x3a, 0xec, 0x7a, 0x56, 0xf1, 0xae, 0x5b, 0x37, 0xa7, 0x8e, - 0x33, 0x59, 0xc3, 0x18, 0xb2, 0x32, 0x2a, 0x40, 0xf3, 0x0c, 0x42, 0x7a, 0xa8, 0x61, 0x47, 0xd5, - 0x1a, 0x76, 0x8e, 0xbd, 0x07, 0x13, 0x4d, 0x9f, 0x2e, 0x5f, 0x18, 0xf4, 0x17, 0xb6, 0x2e, 0x42, - 0xd6, 0x30, 0xb1, 0x15, 0x48, 0x44, 0xa5, 0x70, 0xcf, 0x61, 0x0c, 0x59, 0x19, 0x15, 0x20, 0x91, - 0xa4, 0x3a, 0x64, 0x98, 0xc5, 0x46, 0xd1, 0x6c, 0x6d, 0x79, 0xf5, 0xb0, 0x89, 0xb6, 0xd1, 0x98, - 0xd3, 0xf7, 0x8b, 0x4f, 0x78, 0xdc, 0xc3, 0x74, 0xf2, 0xd7, 0xbf, 0xf4, 0xe8, 0x04, 0x77, 0x0d, - 0xaf, 0x3e, 0x75, 0x19, 0xef, 0x93, 0xe1, 0xe7, 0xa8, 0x6b, 0x14, 0x93, 0xa4, 0x9d, 0x2f, 0xaa, - 0x5a, 0x43, 0x5c, 0x33, 0x56, 0x78, 0x0b, 0x15, 0x60, 0xc0, 0x76, 0x54, 0xa7, 0x65, 0xf3, 0x8f, - 0x7a, 0xc9, 0xdd, 0x5c, 0xad, 0x68, 0xe8, 0xb5, 0x75, 0x8a, 0xa9, 0x70, 0x0a, 0x74, 0x11, 0x06, - 0x1c, 0x63, 0x17, 0xeb, 0xdc, 0x84, 0x07, 0x9a, 0xdf, 0xf4, 0xb5, 0x1c, 0xa3, 0x26, 0x16, 0xa9, - 0xe1, 0x06, 0xae, 0xb3, 0xb4, 0x6a, 0x47, 0x25, 0xbb, 0x0f, 0xfa, 0x6d, 0xaf, 0xe2, 0xe2, 0x81, - 0x27, 0x21, 0xb7, 0x54, 0x98, 0x9f, 0xac, 0x8c, 0xba, 0xa0, 0x75, 0x0a, 0x41, 0x97, 0x03, 0x47, - 0x0e, 0xf9, 0x07, 0xf0, 0xee, 0xed, 0xa6, 0xbe, 0xcf, 0xa7, 0x45, 0x7d, 0xc2, 0x7f, 0x60, 0xf1, - 0x22, 0x64, 0x5b, 0xfa, 0x96, 0xa1, 0xd3, 0xbb, 0x80, 0x3c, 0xbf, 0x27, 0xfb, 0xbb, 0xb8, 0xdf, - 0x39, 0xc2, 0x18, 0xb2, 0x32, 0xea, 0x82, 0x2e, 0xb1, 0x5d, 0x40, 0x0d, 0x46, 0x3c, 0x2c, 0x3a, - 0x51, 0xd3, 0x91, 0x13, 0xf5, 0x1e, 0x3e, 0x51, 0x8f, 0x86, 0x7b, 0xf1, 0xe6, 0xea, 0xb0, 0x0b, - 0x24, 0x64, 0xe8, 0x12, 0x80, 0x17, 0x1e, 0x68, 0x9d, 0x62, 0xa8, 0xfb, 0xc0, 0x7b, 0x31, 0x46, - 0xec, 0xf7, 0x3c, 0x5a, 0xf4, 0x2e, 0x18, 0x6f, 0x6a, 0x7a, 0xc5, 0xc6, 0x8d, 0xed, 0x0a, 0x37, - 0x30, 0x61, 0x49, 0xbf, 0xe5, 0x52, 0x5c, 0x3a, 0x98, 0x3f, 0xdc, 0xba, 0x39, 0x95, 0xe7, 0x21, - 0xb4, 0x9d, 0xa5, 0xac, 0x8c, 0x35, 0x35, 0x7d, 0x1d, 0x37, 0xb6, 0x4b, 0x2e, 0xac, 0x90, 0xf9, - 0xc0, 0xa7, 0xa7, 0x8e, 0xf0, 0xe9, 0x7a, 0x44, 0x3e, 0x47, 0x6b, 0xe7, 0x7c, 0x9a, 0x61, 0x9b, - 0xec, 0x49, 0x54, 0xd1, 0xa0, 0x15, 0x8d, 0xb4, 0xe2, 0x01, 0xd8, 0x34, 0x7f, 0xe5, 0x3f, 0x4d, - 0x4b, 0xf2, 0x17, 0x24, 0x18, 0x28, 0x5d, 0x59, 0x53, 0x35, 0x0b, 0x2d, 0xc2, 0x98, 0xe7, 0x39, - 0xc1, 0x49, 0x7e, 0xf2, 0xd6, 0xcd, 0xa9, 0x5c, 0xd8, 0xb9, 0xdc, 0x59, 0xee, 0x39, 0xb0, 0x98, - 0xe6, 0x8b, 0xdd, 0x36, 0xae, 0x01, 0x56, 0x6d, 0x28, 0x72, 0xfb, 0xb6, 0x36, 0xa4, 0x66, 0x19, - 0x06, 0x99, 0xb4, 0x36, 0x2a, 0x40, 0xd2, 0x24, 0x3f, 0xf8, 0x8b, 0x81, 0xc9, 0xae, 0xce, 0x4b, - 0xf1, 0xdd, 0x42, 0x26, 0x21, 0x91, 0x3f, 0x12, 0x03, 0x28, 0x5d, 0xb9, 0xb2, 0x61, 0x69, 0x66, - 0x03, 0x3b, 0xb7, 0x53, 0xf3, 0x0d, 0x38, 0xea, 0xdb, 0x25, 0x59, 0xd5, 0x90, 0xf6, 0xd3, 0xb7, - 0x6e, 0x4e, 0x9d, 0x0c, 0x6b, 0xef, 0x43, 0x93, 0x95, 0x71, 0x6f, 0xbf, 0x64, 0x55, 0x3b, 0x72, - 0xad, 0xd9, 0x8e, 0xcb, 0x35, 0xde, 0x9d, 0xab, 0x0f, 0xcd, 0xcf, 0xb5, 0x64, 0x3b, 0x9d, 0x4d, - 0xbb, 0x0e, 0x43, 0x9e, 0x49, 0x6c, 0x54, 0x82, 0x94, 0xc3, 0x7f, 0x73, 0x0b, 0xcb, 0xdd, 0x2d, - 0x2c, 0xc8, 0xb8, 0x95, 0x5d, 0x4a, 0xf9, 0x2f, 0x24, 0x00, 0xcf, 0x67, 0x7f, 0x3c, 0x5d, 0x8c, - 0x84, 0x72, 0x1e, 0x78, 0xe3, 0x87, 0x4a, 0xd5, 0x38, 0x75, 0xc8, 0x9e, 0x3f, 0x1d, 0x83, 0xf1, - 0x4d, 0x11, 0x79, 0x7e, 0xec, 0x6d, 0xb0, 0x06, 0x83, 0x58, 0x77, 0x2c, 0x8d, 0x1a, 0x81, 0x8c, - 0xf6, 0x63, 0xdd, 0x46, 0xbb, 0x83, 0x4e, 0xf4, 0x63, 0x36, 0xa2, 0xe8, 0xce, 0xd9, 0x84, 0xac, - 0xf1, 0xa1, 0x38, 0xe4, 0xba, 0x51, 0xa2, 0x79, 0x18, 0xad, 0x5a, 0x98, 0x02, 0x2a, 0xfe, 0xca, - 0x5f, 0x31, 0xef, 0x65, 0x96, 0x21, 0x04, 0x59, 0x19, 0x11, 0x10, 0xbe, 0x7a, 0xd4, 0x81, 0xa4, - 0x7d, 0xc4, 0xed, 0x08, 0x56, 0x9f, 0x79, 0x9e, 0xcc, 0x97, 0x0f, 0xd1, 0x49, 0x90, 0x01, 0x5b, - 0x3f, 0x46, 0x3c, 0x28, 0x5d, 0x40, 0x5e, 0x82, 0x51, 0x4d, 0xd7, 0x1c, 0x4d, 0x6d, 0x54, 0xb6, - 0xd4, 0x86, 0xaa, 0x57, 0x0f, 0x93, 0x35, 0xb3, 0x90, 0xcf, 0xbb, 0x0d, 0xb1, 0x93, 0x95, 0x11, - 0x0e, 0x29, 0x32, 0x00, 0xba, 0x04, 0x83, 0xa2, 0xab, 0xc4, 0xa1, 0xb2, 0x0d, 0x41, 0xee, 0x4b, - 0xf0, 0x7e, 0x26, 0x0e, 0x63, 0x0a, 0xae, 0xfd, 0xff, 0xa1, 0x38, 0xd8, 0x50, 0x2c, 0x03, 0xb0, - 0xe9, 0x4e, 0x02, 0xec, 0x21, 0x46, 0x83, 0x04, 0x8c, 0x34, 0xe3, 0x50, 0xb2, 0x1d, 0xdf, 0x78, - 0xdc, 0x8c, 0x41, 0xc6, 0x3f, 0x1e, 0x7f, 0x45, 0x57, 0x25, 0xb4, 0xe8, 0x45, 0xa2, 0x04, 0xff, - 0x06, 0x68, 0x97, 0x48, 0xd4, 0xe6, 0xbd, 0xbd, 0x43, 0xd0, 0xff, 0x8c, 0xc1, 0xc0, 0x9a, 0x6a, - 0xa9, 0x4d, 0x1b, 0x55, 0xdb, 0x32, 0x4d, 0x51, 0x7e, 0x6c, 0xfb, 0x80, 0x33, 0xaf, 0x76, 0x44, - 0x24, 0x9a, 0x1f, 0xeb, 0x90, 0x68, 0xfe, 0x04, 0x8c, 0x90, 0xed, 0xb0, 0xef, 0x08, 0x03, 0xb1, - 0xf6, 0x70, 0xf1, 0x84, 0xc7, 0x25, 0xf8, 0x9c, 0xed, 0x96, 0xaf, 0xf8, 0xcf, 0x30, 0x0c, 0x11, - 0x0c, 0x2f, 0x30, 0x13, 0xf2, 0x63, 0xde, 0xb6, 0xd4, 0xf7, 0x50, 0x56, 0xa0, 0xa9, 0xee, 0x95, - 0x59, 0x03, 0x2d, 0x01, 0xda, 0x71, 0x2b, 0x23, 0x15, 0xcf, 0x9c, 0x84, 0xfe, 0xee, 0x5b, 0x37, - 0xa7, 0x4e, 0x30, 0xfa, 0x76, 0x1c, 0x59, 0x19, 0xf3, 0x80, 0x82, 0xdb, 0x93, 0x00, 0x44, 0xaf, - 0x0a, 0x3b, 0x2d, 0xc8, 0xb6, 0x3b, 0x47, 0x6f, 0xdd, 0x9c, 0x1a, 0x63, 0x5c, 0xbc, 0x67, 0xb2, - 0x92, 0x26, 0x8d, 0x12, 0xf9, 0xed, 0xf3, 0xec, 0xcf, 0x4a, 0x80, 0xbc, 0x90, 0xaf, 0x60, 0xdb, - 0x24, 0xfb, 0x33, 0x92, 0x88, 0xfb, 0xb2, 0x66, 0xa9, 0x77, 0x22, 0xee, 0xd1, 0x8b, 0x44, 0xdc, - 0x37, 0x53, 0x9e, 0xf6, 0xc2, 0x63, 0x8c, 0x8f, 0x63, 0x87, 0xa3, 0x95, 0x33, 0xf3, 0x86, 0x26, - 0xa8, 0xdb, 0xe2, 0xe1, 0x11, 0xf9, 0xdf, 0x48, 0x70, 0xa2, 0xcd, 0xa3, 0x5c, 0x61, 0xff, 0x1a, - 0x20, 0xcb, 0xf7, 0x90, 0x7f, 0xcf, 0x8d, 0x09, 0x7d, 0x60, 0x07, 0x1d, 0xb3, 0xda, 0xe2, 0xee, - 0xed, 0x8b, 0xf0, 0xec, 0x6c, 0xe6, 0xbf, 0x90, 0x60, 0xc2, 0xdf, 0xbd, 0xab, 0xc8, 0x0a, 0x64, - 0xfc, 0xbd, 0x73, 0x15, 0xee, 0xeb, 0x47, 0x05, 0x2e, 0x7d, 0x80, 0x1e, 0x3d, 0xef, 0x4d, 0x57, - 0x56, 0x3b, 0x7b, 0xbc, 0x6f, 0x6b, 0x08, 0x99, 0xc2, 0xd3, 0x36, 0x41, 0xc7, 0xe3, 0xff, 0x48, - 0x90, 0x58, 0x33, 0x8c, 0x06, 0x32, 0x60, 0x4c, 0x37, 0x9c, 0x0a, 0xf1, 0x2c, 0x5c, 0xab, 0xf0, - 0x4d, 0x37, 0x8b, 0x83, 0xf3, 0x07, 0x33, 0xd2, 0x77, 0x6e, 0x4e, 0xb5, 0xb3, 0x52, 0x46, 0x75, - 0xc3, 0x29, 0x52, 0xc8, 0x06, 0xdb, 0x92, 0xbf, 0x0b, 0x86, 0x83, 0x9d, 0xb1, 0x28, 0xf9, 0xc2, - 0x81, 0x3b, 0x0b, 0xb2, 0xb9, 0x75, 0x73, 0x6a, 0xc2, 0x9b, 0x31, 0x2e, 0x58, 0x56, 0x32, 0x5b, - 0xbe, 0xde, 0xd9, 0xf1, 0xae, 0xef, 0x7d, 0x7a, 0x4a, 0x3a, 0xfd, 0x65, 0x09, 0xc0, 0xab, 0x3c, - 0xa0, 0x47, 0xe0, 0x78, 0x71, 0x75, 0xa5, 0x54, 0x59, 0xdf, 0x98, 0xdb, 0xd8, 0x5c, 0xaf, 0x6c, - 0xae, 0xac, 0xaf, 0x95, 0xe7, 0x17, 0x2f, 0x2e, 0x96, 0x4b, 0x5e, 0x79, 0xdc, 0x36, 0x71, 0x55, - 0xdb, 0xd6, 0x70, 0x0d, 0x3d, 0x00, 0x13, 0x41, 0x6c, 0xd2, 0x2a, 0x97, 0xb2, 0x52, 0x3e, 0x73, - 0xfd, 0xc6, 0x74, 0x8a, 0xe5, 0x62, 0xb8, 0x86, 0x4e, 0xc1, 0xd1, 0x76, 0xbc, 0xc5, 0x95, 0x85, - 0x6c, 0x2c, 0x3f, 0x7c, 0xfd, 0xc6, 0x74, 0xda, 0x4d, 0xda, 0x90, 0x0c, 0xc8, 0x8f, 0xc9, 0xf9, - 0xc5, 0xf3, 0x70, 0xfd, 0xc6, 0xf4, 0x00, 0x33, 0x60, 0x3e, 0xf1, 0x81, 0xcf, 0x4e, 0x1e, 0x29, - 0x5e, 0xec, 0x5a, 0x00, 0x7f, 0xa4, 0xa7, 0xed, 0xf6, 0xdc, 0xa2, 0x76, 0xb0, 0xea, 0x7d, 0xfd, - 0x38, 0x4c, 0x75, 0xa9, 0x7a, 0x3b, 0x7b, 0x11, 0x05, 0xef, 0x1e, 0xa5, 0xed, 0xc8, 0xd2, 0x75, - 0x97, 0x62, 0xf9, 0xe1, 0x0b, 0xda, 0x7d, 0xd5, 0xee, 0xe5, 0x7f, 0x9b, 0x00, 0xb4, 0x6c, 0xd7, - 0xe7, 0x49, 0x52, 0xe5, 0x3b, 0xa2, 0x15, 0xaa, 0xd9, 0x48, 0x3f, 0x54, 0xcd, 0x66, 0x39, 0x50, - 0x05, 0x89, 0x1d, 0xac, 0xd2, 0xda, 0x77, 0x29, 0x24, 0xfe, 0x23, 0x29, 0x85, 0x74, 0xce, 0x94, - 0x12, 0xb7, 0x6f, 0x4b, 0x95, 0x3c, 0xec, 0xb6, 0x92, 0x57, 0x38, 0x07, 0x7a, 0x54, 0x38, 0x73, - 0x5d, 0xcb, 0x98, 0x9c, 0x1a, 0x9d, 0x15, 0x57, 0x6e, 0x06, 0xfb, 0x5b, 0xdb, 0xf8, 0x9d, 0x9c, - 0xd4, 0x07, 0xc4, 0xca, 0x76, 0x12, 0xf2, 0xed, 0xee, 0x24, 0x82, 0xaf, 0xfc, 0xd1, 0x38, 0x64, - 0x97, 0xed, 0x7a, 0xb9, 0xa6, 0x39, 0x77, 0xc8, 0xd7, 0x9e, 0xed, 0xbe, 0x4d, 0x45, 0xb7, 0x6e, - 0x4e, 0x8d, 0x30, 0x9b, 0xf6, 0xb0, 0x64, 0x13, 0x46, 0x43, 0x2f, 0x07, 0xb8, 0x67, 0x95, 0x0e, - 0xf3, 0x8e, 0x22, 0xc4, 0x4a, 0xa6, 0xbb, 0x0a, 0x9f, 0x7f, 0xa3, 0xbd, 0xce, 0xce, 0xcc, 0x1c, - 0xea, 0xd2, 0x9d, 0xac, 0xe9, 0x79, 0x63, 0x96, 0x87, 0x5c, 0x78, 0x50, 0xdc, 0x11, 0xfb, 0x63, - 0x09, 0x86, 0x96, 0x6d, 0xb1, 0x8b, 0xc6, 0x3f, 0xa6, 0x15, 0x85, 0xa7, 0xdc, 0x8b, 0x24, 0xf1, - 0xfe, 0xfc, 0x56, 0x5c, 0x2e, 0xf1, 0x8c, 0x70, 0x14, 0xc6, 0x7d, 0x7a, 0xba, 0xfa, 0xff, 0x4e, - 0x8c, 0xc6, 0xc7, 0x22, 0xae, 0x6b, 0xba, 0x9b, 0x54, 0xe0, 0xbf, 0xaa, 0xfb, 0x25, 0xcf, 0xce, - 0x89, 0xc3, 0xda, 0x79, 0x97, 0x06, 0x88, 0x90, 0x3d, 0xdd, 0x8c, 0x71, 0xb9, 0x7d, 0x37, 0x2f, - 0x1d, 0xe0, 0xa0, 0x4c, 0x68, 0xcf, 0x2e, 0xbf, 0x2e, 0xc1, 0xf0, 0xb2, 0x5d, 0xdf, 0xd4, 0x6b, - 0xff, 0xcf, 0xfb, 0xef, 0x36, 0x1c, 0x0d, 0x68, 0x7a, 0x87, 0x4c, 0x7a, 0xe6, 0xd5, 0x04, 0xc4, - 0x97, 0xed, 0x3a, 0x7a, 0x09, 0x46, 0xc3, 0x49, 0xc3, 0xe9, 0x6e, 0x31, 0xbb, 0x7d, 0x45, 0xc8, - 0x9f, 0xe9, 0x1f, 0xd7, 0xd5, 0x64, 0x17, 0x86, 0x83, 0x2b, 0xc7, 0xa9, 0x1e, 0x4c, 0x02, 0x98, - 0xf9, 0xc7, 0xfa, 0xc5, 0x74, 0x3b, 0x7b, 0x07, 0xa4, 0xdc, 0xa0, 0x77, 0x6f, 0x0f, 0x6a, 0x81, - 0x94, 0x7f, 0xb8, 0x0f, 0x24, 0x97, 0xfb, 0x4b, 0x30, 0x1a, 0x0e, 0x29, 0xbd, 0xac, 0x17, 0xc2, - 0xed, 0x69, 0xbd, 0x6e, 0x53, 0x6b, 0x0b, 0xc0, 0x37, 0x0f, 0xee, 0xef, 0xc1, 0xc1, 0x43, 0xcb, - 0x3f, 0xda, 0x17, 0x9a, 0xbb, 0xb9, 0xba, 0xdd, 0xc9, 0xf8, 0xbf, 0x8a, 0xc1, 0x69, 0x7f, 0x9a, - 0xfb, 0x52, 0x0b, 0x5b, 0xfb, 0x6e, 0x26, 0x6b, 0xaa, 0x75, 0x4d, 0xf7, 0xdf, 0xae, 0x3b, 0xe1, - 0x9f, 0x35, 0x14, 0x57, 0xc8, 0x2b, 0xeb, 0x30, 0xb4, 0xa6, 0xd6, 0xb1, 0x82, 0x5f, 0x6a, 0x61, - 0xdb, 0xe9, 0x70, 0xbb, 0xeb, 0x18, 0x0c, 0x18, 0xdb, 0xdb, 0xe2, 0xac, 0x59, 0x42, 0xe1, 0x2d, - 0x34, 0x01, 0xc9, 0x86, 0xd6, 0xd4, 0xd8, 0xcc, 0x4c, 0x28, 0xac, 0x81, 0xa6, 0x60, 0xa8, 0x4a, - 0x26, 0x60, 0x85, 0x9d, 0x9b, 0x4f, 0x88, 0x2f, 0x2f, 0xb5, 0x74, 0x67, 0x83, 0x40, 0xe4, 0x67, - 0x21, 0xc3, 0xfa, 0xe3, 0xd6, 0x3f, 0x01, 0x29, 0x7a, 0xce, 0xd9, 0xeb, 0x75, 0x90, 0xb4, 0x2f, - 0xb3, 0x9b, 0x60, 0x8c, 0x0b, 0xeb, 0x98, 0x35, 0x8a, 0xc5, 0xae, 0xa6, 0x3c, 0x15, 0x9d, 0x11, - 0x30, 0x43, 0xb9, 0x66, 0xfc, 0xad, 0x24, 0x1c, 0xe5, 0xfb, 0x0f, 0xd5, 0xd4, 0x66, 0x77, 0x1c, - 0x47, 0xdc, 0x56, 0x06, 0x1e, 0x02, 0x54, 0x53, 0x93, 0xf7, 0x21, 0x71, 0xc9, 0x71, 0x4c, 0x74, - 0x1a, 0x92, 0x56, 0xab, 0x81, 0xc5, 0xab, 0x18, 0x37, 0x95, 0x54, 0x4d, 0x6d, 0x86, 0x20, 0x28, - 0xad, 0x06, 0x56, 0x18, 0x0a, 0x2a, 0xc3, 0xd4, 0x76, 0xab, 0xd1, 0xd8, 0xaf, 0xd4, 0x30, 0xfd, - 0x67, 0x78, 0xee, 0xff, 0x9d, 0xc1, 0x7b, 0xa6, 0xaa, 0xbb, 0xf9, 0x7e, 0x4a, 0x39, 0x49, 0xd1, - 0x4a, 0x14, 0x4b, 0xfc, 0xcf, 0x99, 0xb2, 0xc0, 0x91, 0x7f, 0x3f, 0x06, 0x29, 0xc1, 0x9a, 0x5e, - 0xcd, 0xc2, 0x0d, 0x5c, 0x75, 0x0c, 0x71, 0x94, 0xc1, 0x6d, 0x23, 0x04, 0xf1, 0x3a, 0x1f, 0xa2, - 0xf4, 0xa5, 0x23, 0x0a, 0x69, 0x10, 0x98, 0x7b, 0x61, 0x8e, 0xc0, 0xcc, 0x16, 0x19, 0xb5, 0x84, - 0x69, 0x88, 0x9a, 0xe9, 0xa5, 0x23, 0x0a, 0x6d, 0xa1, 0x1c, 0x0c, 0x10, 0x97, 0x75, 0xd8, 0x17, - 0x81, 0x09, 0x9c, 0xb7, 0xd1, 0x31, 0x48, 0x9a, 0xaa, 0x53, 0x65, 0x67, 0xdd, 0xc9, 0x03, 0xd6, - 0x24, 0x81, 0x99, 0x7d, 0x89, 0x21, 0xfc, 0x9f, 0xa6, 0x88, 0x31, 0xd8, 0x27, 0x2f, 0x89, 0xdc, - 0x6b, 0xaa, 0xe3, 0x60, 0x4b, 0x27, 0x0c, 0x19, 0x3a, 0x42, 0x90, 0xd8, 0x32, 0x6a, 0xfb, 0xfc, - 0xbf, 0x5f, 0xd1, 0xdf, 0xfc, 0xff, 0xf2, 0x50, 0x7f, 0xa8, 0xd0, 0x87, 0xec, 0x9f, 0xfe, 0x65, - 0x04, 0xb0, 0x48, 0x90, 0xca, 0x30, 0xae, 0xd6, 0x6a, 0x1a, 0xf1, 0x6a, 0xb5, 0x51, 0xd9, 0xd2, - 0xe8, 0x7e, 0xd8, 0xa6, 0xff, 0xd2, 0xb1, 0xdb, 0x58, 0x20, 0x8f, 0xa0, 0xc8, 0xf1, 0x8b, 0x69, - 0x18, 0x34, 0x99, 0x50, 0xf2, 0x05, 0x18, 0x6b, 0x93, 0x94, 0xc8, 0xb7, 0xab, 0xe9, 0x35, 0x71, - 0x8b, 0x90, 0xfc, 0x26, 0x30, 0xfa, 0xd9, 0x5a, 0x76, 0x48, 0x84, 0xfe, 0x2e, 0xbe, 0xa7, 0xfb, - 0x1d, 0xd3, 0x11, 0xdf, 0x1d, 0x53, 0xd5, 0xd4, 0x8a, 0x69, 0xca, 0x9f, 0x5f, 0x2d, 0x9d, 0xe3, - 0x0f, 0xd8, 0xb5, 0xd2, 0x19, 0xc3, 0xaa, 0xcf, 0xd6, 0xb1, 0x2e, 0xf6, 0xb7, 0xe4, 0x91, 0x6a, - 0x6a, 0x36, 0x75, 0x47, 0xef, 0x33, 0xba, 0xf6, 0x05, 0xdf, 0x6f, 0x7a, 0xe3, 0x34, 0xb1, 0x30, - 0xb7, 0xb6, 0xe8, 0xfa, 0xf1, 0x6f, 0xc6, 0xe0, 0xa4, 0xcf, 0x8f, 0x7d, 0xc8, 0xed, 0xee, 0x9c, - 0xef, 0xec, 0xf1, 0x7d, 0x5c, 0x42, 0xbf, 0x0c, 0x09, 0x82, 0x8f, 0x22, 0xfe, 0x6b, 0x4e, 0xee, - 0x57, 0xbf, 0xfe, 0xcf, 0xe5, 0xe0, 0x66, 0x2b, 0x30, 0x2a, 0x94, 0x49, 0xf1, 0xfd, 0xfd, 0xdb, - 0x2f, 0xeb, 0x7d, 0x41, 0xd8, 0xbe, 0x7d, 0x66, 0x0c, 0xdb, 0xf0, 0xdb, 0x67, 0x41, 0xee, 0x52, - 0x19, 0x60, 0x11, 0xb3, 0x77, 0x89, 0xe3, 0x00, 0xe1, 0xb8, 0xdb, 0xc5, 0xbc, 0x5e, 0x23, 0xd8, - 0x67, 0xd5, 0x62, 0x0f, 0x8e, 0x3d, 0x4f, 0xfa, 0xf6, 0xea, 0xd7, 0x22, 0xb0, 0x1f, 0x73, 0x8f, - 0xd9, 0x48, 0xfc, 0x3f, 0x6a, 0x8a, 0x23, 0x34, 0xe0, 0xc9, 0xc7, 0x6b, 0x10, 0x0f, 0xcc, 0x74, - 0x5d, 0x2f, 0x66, 0x7c, 0x8b, 0x85, 0xe2, 0xa3, 0x94, 0x7f, 0x59, 0x82, 0xe3, 0x6d, 0x5d, 0xf3, - 0x18, 0xbf, 0xd0, 0xe1, 0x0e, 0x61, 0xdf, 0xa7, 0xfb, 0xfc, 0xf7, 0x09, 0x17, 0x3a, 0x08, 0xfb, - 0x60, 0xa4, 0xb0, 0x4c, 0x8a, 0x80, 0xb4, 0xcf, 0xc0, 0xd1, 0xa0, 0xb0, 0xc2, 0x4c, 0xf7, 0xc3, - 0x48, 0x30, 0x31, 0xe5, 0xe6, 0x1a, 0x0e, 0xa4, 0xa6, 0x72, 0x25, 0x6c, 0x67, 0x57, 0xd7, 0x32, - 0xa4, 0x5d, 0x54, 0x9e, 0x4f, 0xf6, 0xad, 0xaa, 0x47, 0x29, 0x7f, 0x44, 0x82, 0xe9, 0x60, 0x0f, - 0xde, 0x0e, 0xd5, 0x3e, 0x98, 0xb0, 0xb7, 0x6d, 0x88, 0x5f, 0x97, 0xe0, 0x9e, 0x1e, 0x32, 0x71, - 0x03, 0xbc, 0x0c, 0x13, 0xbe, 0x12, 0xbd, 0x08, 0xe1, 0x62, 0xd8, 0x4f, 0x47, 0xbf, 0x5b, 0x70, - 0x93, 0xa6, 0xbb, 0x88, 0x51, 0x3e, 0xff, 0x87, 0x53, 0xe3, 0xed, 0xcf, 0x6c, 0x65, 0xbc, 0xbd, - 0xac, 0x7e, 0x1b, 0xfd, 0xe3, 0x55, 0x09, 0x1e, 0x0a, 0xaa, 0xda, 0xe1, 0xbd, 0xf9, 0x1b, 0x35, - 0x0e, 0xff, 0x51, 0x82, 0xd3, 0xfd, 0x08, 0xe7, 0xe6, 0xb7, 0xe3, 0xde, 0x8b, 0xb2, 0xf0, 0x78, - 0x3c, 0x7c, 0x80, 0x13, 0x06, 0xdc, 0x4b, 0x91, 0xcb, 0xed, 0x0e, 0x18, 0xde, 0xe4, 0x13, 0xcb, - 0x3f, 0xe4, 0xae, 0x91, 0x83, 0xbb, 0x4f, 0x61, 0xe4, 0xc0, 0xfe, 0xb3, 0xc3, 0x58, 0xc4, 0x3a, - 0x8c, 0x85, 0x6f, 0x7f, 0x78, 0x95, 0xc7, 0xad, 0x0e, 0x2f, 0xc7, 0xde, 0x0e, 0xe3, 0x1d, 0x5c, - 0x99, 0xcf, 0xea, 0x03, 0x78, 0xb2, 0x82, 0xda, 0x9d, 0x55, 0xde, 0x87, 0x29, 0xda, 0x6f, 0x07, - 0x43, 0xdf, 0x69, 0x95, 0x9b, 0x3c, 0xb6, 0x74, 0xec, 0x9a, 0xeb, 0xbe, 0x08, 0x03, 0x6c, 0x9c, - 0xb9, 0xba, 0x87, 0x70, 0x14, 0xce, 0x40, 0xfe, 0x84, 0x88, 0x65, 0x25, 0x21, 0x76, 0xe7, 0x39, - 0xd4, 0x8f, 0xae, 0xb7, 0x69, 0x0e, 0xf9, 0x8c, 0xf1, 0x4d, 0x11, 0xd5, 0x3a, 0x4b, 0xc7, 0xcd, - 0x51, 0xbd, 0x6d, 0x51, 0x8d, 0xd9, 0xe6, 0xce, 0x86, 0xaf, 0x5f, 0x14, 0xe1, 0xcb, 0xd5, 0x29, - 0x22, 0x7c, 0xbd, 0x31, 0xa6, 0x77, 0x03, 0x59, 0x84, 0x98, 0x7f, 0x19, 0x03, 0xd9, 0xf7, 0x24, - 0x38, 0x41, 0x75, 0xf3, 0xbf, 0x71, 0x3d, 0xa8, 0xc9, 0x1f, 0x01, 0x64, 0x5b, 0xd5, 0x4a, 0xc7, - 0xd9, 0x9d, 0xb5, 0xad, 0xea, 0x95, 0xc0, 0xfa, 0xf2, 0x08, 0xa0, 0x9a, 0xed, 0x84, 0xb1, 0xd9, - 0xf1, 0xf5, 0x6c, 0xcd, 0x76, 0xae, 0xf4, 0x58, 0x8d, 0x12, 0xb7, 0x61, 0x38, 0xbf, 0x21, 0x41, - 0xbe, 0x93, 0xca, 0x7c, 0xf8, 0x34, 0x38, 0x16, 0x78, 0x7b, 0x1f, 0x1e, 0xc1, 0x47, 0xfa, 0x79, - 0x67, 0x1d, 0x9a, 0x46, 0x47, 0x2d, 0x7c, 0xa7, 0xf3, 0x80, 0xa9, 0xa0, 0x87, 0xb6, 0x67, 0xd6, - 0x6f, 0xd8, 0xf4, 0xf9, 0x52, 0x5b, 0x5c, 0xfd, 0x4b, 0x91, 0x7b, 0xef, 0xc1, 0x64, 0x17, 0xa9, - 0xef, 0xf4, 0xba, 0xb7, 0xd3, 0x75, 0x30, 0x6f, 0x77, 0xfa, 0xfe, 0x24, 0x9f, 0x09, 0xc1, 0xab, - 0x51, 0xbe, 0xbd, 0x58, 0xa7, 0xbb, 0xd5, 0xf2, 0x5b, 0xe1, 0xae, 0x8e, 0x54, 0x5c, 0xb6, 0x02, - 0x24, 0x76, 0x34, 0xdb, 0xe1, 0x62, 0x3d, 0xd0, 0x4d, 0xac, 0x10, 0x35, 0xa5, 0x91, 0x11, 0x64, - 0x29, 0xeb, 0x35, 0xc3, 0x68, 0x70, 0x31, 0xe4, 0xcb, 0x30, 0xe6, 0x83, 0xf1, 0x4e, 0xce, 0x41, - 0xc2, 0x34, 0xf8, 0x77, 0x81, 0x86, 0xce, 0x9c, 0xec, 0xd6, 0x09, 0xa1, 0xe1, 0x6a, 0x53, 0x7c, - 0x79, 0x02, 0x10, 0x63, 0x46, 0x0f, 0x77, 0x89, 0x2e, 0xd6, 0x61, 0x3c, 0x00, 0xe5, 0x9d, 0xbc, - 0x09, 0x06, 0x4c, 0x0a, 0x71, 0x2f, 0xc1, 0x76, 0xeb, 0x86, 0x62, 0xb9, 0x5f, 0x62, 0xa1, 0xad, - 0x33, 0xdf, 0x39, 0x0a, 0x49, 0xca, 0x15, 0x7d, 0x5c, 0x02, 0xf0, 0x1d, 0xd5, 0x9a, 0xe9, 0xc6, - 0xa6, 0xf3, 0x9e, 0x38, 0x3f, 0xdb, 0x37, 0x3e, 0xcf, 0xd9, 0x4e, 0xbf, 0xe7, 0xdf, 0x7d, 0xfb, - 0xa3, 0xb1, 0xfb, 0x90, 0x3c, 0xdb, 0x65, 0x37, 0xee, 0x9b, 0x2f, 0x9f, 0x0b, 0x7c, 0x94, 0xe6, - 0xd1, 0xfe, 0xba, 0x12, 0x92, 0xcd, 0xf4, 0x8b, 0xce, 0x05, 0xbb, 0x40, 0x05, 0x3b, 0x8b, 0x9e, - 0x88, 0x16, 0x6c, 0xf6, 0x9d, 0xc1, 0x49, 0xf3, 0x6e, 0xf4, 0xbb, 0x12, 0x4c, 0x74, 0xda, 0xd2, - 0xa1, 0xf3, 0xfd, 0x49, 0xd1, 0x9e, 0x52, 0xe4, 0x9f, 0x3e, 0x04, 0x25, 0x57, 0x65, 0x81, 0xaa, - 0x32, 0x87, 0x9e, 0x3d, 0x84, 0x2a, 0xb3, 0xbe, 0x75, 0x07, 0xfd, 0x6f, 0x09, 0xee, 0xee, 0xb9, - 0x43, 0x42, 0x73, 0xfd, 0x49, 0xd9, 0x23, 0x77, 0xca, 0x17, 0x7f, 0x18, 0x16, 0x5c, 0xe3, 0xe7, - 0xa9, 0xc6, 0x97, 0xd1, 0xe2, 0x61, 0x34, 0xf6, 0x32, 0x22, 0xbf, 0xee, 0xbf, 0x1d, 0x3c, 0xf2, - 0xdf, 0xdb, 0x9d, 0xda, 0x36, 0x1e, 0x11, 0x13, 0xa3, 0x3d, 0xa9, 0x95, 0xdf, 0x42, 0x55, 0x50, - 0xd0, 0xda, 0x0f, 0x39, 0x68, 0xb3, 0xef, 0x0c, 0x06, 0xfe, 0x77, 0xa3, 0xff, 0x25, 0x75, 0x3e, - 0xc1, 0xff, 0x54, 0x4f, 0x11, 0xbb, 0x6f, 0xaa, 0xf2, 0xe7, 0x0f, 0x4e, 0xc8, 0x95, 0x6c, 0x52, - 0x25, 0xeb, 0x08, 0xdf, 0x6e, 0x25, 0x3b, 0x0e, 0x22, 0xfa, 0x9a, 0x04, 0x13, 0x9d, 0xf6, 0x24, - 0x11, 0xd3, 0xb2, 0xc7, 0x26, 0x2b, 0x62, 0x5a, 0xf6, 0xda, 0x00, 0xc9, 0x6f, 0xa2, 0xca, 0x9f, - 0x43, 0x4f, 0x76, 0x53, 0xbe, 0xe7, 0x28, 0x92, 0xb9, 0xd8, 0x33, 0xc9, 0x8f, 0x98, 0x8b, 0xfd, - 0xec, 0x63, 0x22, 0xe6, 0x62, 0x5f, 0x7b, 0x8c, 0xe8, 0xb9, 0xe8, 0x6a, 0xd6, 0xe7, 0x30, 0xda, - 0xe8, 0x37, 0x25, 0x18, 0x0e, 0x64, 0xc4, 0xe8, 0xf1, 0x9e, 0x82, 0x76, 0xda, 0x30, 0x74, 0x7f, - 0xb1, 0xd9, 0x3d, 0xe1, 0x96, 0x17, 0xa9, 0x2e, 0xf3, 0x68, 0xee, 0x30, 0xba, 0x58, 0x01, 0x89, - 0xbf, 0x21, 0xc1, 0x78, 0x87, 0x2c, 0x33, 0x62, 0x16, 0x76, 0x4f, 0x9a, 0xf3, 0xe7, 0x0f, 0x4e, - 0xc8, 0xb5, 0xba, 0x48, 0xb5, 0xfa, 0x09, 0xf4, 0xcc, 0x61, 0xb4, 0xf2, 0xad, 0xcf, 0x37, 0xbd, - 0x03, 0xd1, 0xbe, 0x7e, 0xd0, 0xb9, 0x03, 0x0a, 0x26, 0x14, 0x7a, 0xea, 0xc0, 0x74, 0x5c, 0x9f, - 0x17, 0xa8, 0x3e, 0xcf, 0xa3, 0xd5, 0x1f, 0x4e, 0x9f, 0xf6, 0x65, 0xfd, 0x8b, 0xed, 0x57, 0xf3, - 0x7b, 0x7b, 0x51, 0xc7, 0x64, 0x35, 0xff, 0xc4, 0x81, 0x68, 0xb8, 0x52, 0xe7, 0xa9, 0x52, 0x67, - 0xd0, 0x63, 0xdd, 0x94, 0xf2, 0x9d, 0x7a, 0xd7, 0xf4, 0x6d, 0x63, 0xf6, 0x9d, 0x2c, 0x05, 0x7e, - 0x37, 0xfa, 0x29, 0x71, 0xe2, 0xf8, 0x54, 0xcf, 0x7e, 0x7d, 0x79, 0x6c, 0xfe, 0xa1, 0x3e, 0x30, - 0xb9, 0x5c, 0xf7, 0x51, 0xb9, 0x26, 0xd1, 0xc9, 0x6e, 0x72, 0x91, 0x5c, 0x16, 0x7d, 0x50, 0x72, - 0x2f, 0x29, 0x9c, 0xee, 0xcd, 0xdb, 0x9f, 0xec, 0x76, 0x3f, 0xe8, 0xd0, 0x21, 0x05, 0x96, 0x1f, - 0xa0, 0x92, 0x4c, 0xa3, 0xc9, 0xae, 0x92, 0xb0, 0xd4, 0xf7, 0x76, 0x9f, 0x1c, 0xf8, 0xd3, 0xc1, - 0xae, 0x1f, 0xaf, 0xa8, 0x63, 0x1d, 0xdb, 0x9a, 0x7d, 0xa8, 0x8f, 0x57, 0xf4, 0xf7, 0x7a, 0xea, - 0x77, 0x93, 0x90, 0x59, 0x60, 0xbd, 0xac, 0x3b, 0xaa, 0xf3, 0x43, 0x6e, 0x04, 0x90, 0xcd, 0xbf, - 0xc9, 0xc6, 0x3e, 0x15, 0xe9, 0x7d, 0xfc, 0x30, 0x73, 0xa0, 0x6b, 0xdb, 0xec, 0x90, 0x20, 0xbf, - 0x21, 0x1d, 0xe6, 0x27, 0xb3, 0xcf, 0xbb, 0xd1, 0xb3, 0x0b, 0xec, 0x23, 0x8f, 0xef, 0x93, 0xe0, - 0x28, 0xc5, 0xf2, 0xe6, 0x1b, 0xc5, 0x14, 0x77, 0xf6, 0xba, 0x7a, 0xcc, 0x92, 0xea, 0x2b, 0xc1, - 0xb0, 0xcf, 0x32, 0xde, 0xc7, 0xef, 0xb3, 0x9c, 0xf4, 0x75, 0x1e, 0x66, 0x2b, 0x2b, 0xe3, 0x8d, - 0x36, 0x4a, 0x3b, 0xb4, 0xaf, 0x4f, 0x1c, 0x7e, 0x5f, 0xff, 0x1c, 0x0c, 0xf9, 0x22, 0x7d, 0x2e, - 0x19, 0x71, 0xcd, 0x34, 0x5c, 0x44, 0xf3, 0x13, 0xa3, 0xf7, 0x4b, 0x70, 0xb4, 0xe3, 0x22, 0x48, - 0xff, 0x17, 0xed, 0x01, 0x8b, 0x74, 0x21, 0xe3, 0x74, 0xe4, 0x2b, 0x2b, 0x13, 0xad, 0x4e, 0xd9, - 0xc4, 0x1a, 0x0c, 0x07, 0x16, 0xb0, 0x9c, 0xf8, 0x8f, 0xd2, 0xfd, 0xdf, 0xb0, 0x08, 0x32, 0x40, - 0x79, 0x48, 0xe1, 0x3d, 0xd3, 0xb0, 0x1c, 0x5c, 0xa3, 0x47, 0x1e, 0x52, 0x8a, 0xdb, 0x96, 0x57, - 0x00, 0xb5, 0x0f, 0x6e, 0xf8, 0x3b, 0xa4, 0x69, 0xef, 0x3b, 0xa4, 0x13, 0x90, 0xf4, 0x7f, 0xa9, - 0x93, 0x35, 0xbc, 0x3a, 0xc5, 0xed, 0x9e, 0xf3, 0xff, 0x37, 0x00, 0x00, 0xff, 0xff, 0x43, 0x89, - 0xb3, 0x44, 0x22, 0x94, 0x00, 0x00, + // 9556 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6b, 0x70, 0x1c, 0xc9, + 0x79, 0x18, 0x67, 0x77, 0x01, 0xec, 0x7e, 0x58, 0x00, 0x8b, 0x06, 0x48, 0x2e, 0xf7, 0x78, 0x00, + 0x6e, 0xee, 0xc5, 0xe3, 0xdd, 0x01, 0x77, 0xbc, 0x23, 0x8f, 0x5c, 0x4a, 0x77, 0xc6, 0x02, 0x4b, + 0x10, 0x24, 0x5e, 0x37, 0x00, 0x78, 0x7a, 0x39, 0x5b, 0x83, 0xd9, 0xc6, 0x62, 0x0e, 0xbb, 0x33, + 0x73, 0x33, 0xb3, 0x24, 0x71, 0x92, 0xaa, 0xce, 0x92, 0xa2, 0x48, 0x74, 0x1c, 0x49, 0x96, 0xcb, + 0x91, 0x4e, 0xa2, 0x22, 0x59, 0x4e, 0xe4, 0xc8, 0x4a, 0xfc, 0x90, 0xa2, 0xc4, 0x49, 0xaa, 0x22, + 0xa7, 0xe2, 0x58, 0x52, 0x2a, 0x2e, 0xa9, 0xe2, 0x4a, 0x1c, 0x57, 0x4c, 0x3b, 0x27, 0x95, 0x73, + 0x51, 0x94, 0x58, 0xa6, 0xe5, 0xc4, 0x29, 0xfd, 0x48, 0xaa, 0x5f, 0xf3, 0xda, 0xc7, 0x2c, 0x20, + 0x52, 0x27, 0xc7, 0xf9, 0x85, 0x9d, 0xee, 0xef, 0xfb, 0xfa, 0x7b, 0xf5, 0xf7, 0x7d, 0xdd, 0xd3, + 0x3d, 0x80, 0x4f, 0x9c, 0x87, 0xa9, 0x9a, 0x69, 0xd6, 0xea, 0x78, 0xc6, 0xb2, 0x4d, 0xd7, 0xdc, + 0x6a, 0x6e, 0xcf, 0x54, 0xb1, 0xa3, 0xd9, 0xba, 0xe5, 0x9a, 0xf6, 0x34, 0x6d, 0x43, 0x23, 0x0c, + 0x62, 0x5a, 0x40, 0xc8, 0xcb, 0x30, 0x7a, 0x41, 0xaf, 0xe3, 0x79, 0x0f, 0x70, 0x1d, 0xbb, 0xe8, + 0x2c, 0xa4, 0xb6, 0xf5, 0x3a, 0xce, 0x4b, 0x53, 0xc9, 0x13, 0x83, 0xa7, 0x1e, 0x98, 0x8e, 0x20, + 0x4d, 0x87, 0x31, 0xd6, 0x48, 0xb3, 0x42, 0x31, 0xe4, 0x6f, 0xa7, 0x60, 0xac, 0x4d, 0x2f, 0x42, + 0x90, 0x32, 0xd4, 0x06, 0xa1, 0x28, 0x9d, 0xc8, 0x28, 0xf4, 0x37, 0xca, 0xc3, 0x80, 0xa5, 0x6a, + 0xbb, 0x6a, 0x0d, 0xe7, 0x13, 0xb4, 0x59, 0x3c, 0xa2, 0x09, 0x80, 0x2a, 0xb6, 0xb0, 0x51, 0xc5, + 0x86, 0xb6, 0x97, 0x4f, 0x4e, 0x25, 0x4f, 0x64, 0x94, 0x40, 0x0b, 0x7a, 0x14, 0x46, 0xad, 0xe6, + 0x56, 0x5d, 0xd7, 0x2a, 0x01, 0x30, 0x98, 0x4a, 0x9e, 0xe8, 0x53, 0x72, 0xac, 0x63, 0xde, 0x07, + 0x7e, 0x18, 0x46, 0xae, 0x61, 0x75, 0x37, 0x08, 0x3a, 0x48, 0x41, 0x87, 0x49, 0x73, 0x00, 0x70, + 0x0e, 0xb2, 0x0d, 0xec, 0x38, 0x6a, 0x0d, 0x57, 0xdc, 0x3d, 0x0b, 0xe7, 0x53, 0x54, 0xfa, 0xa9, + 0x16, 0xe9, 0xa3, 0x92, 0x0f, 0x72, 0xac, 0x8d, 0x3d, 0x0b, 0xa3, 0x59, 0xc8, 0x60, 0xa3, 0xd9, + 0x60, 0x14, 0xfa, 0x3a, 0xe8, 0xaf, 0x6c, 0x34, 0x1b, 0x51, 0x2a, 0x69, 0x82, 0xc6, 0x49, 0x0c, + 0x38, 0xd8, 0xbe, 0xaa, 0x6b, 0x38, 0xdf, 0x4f, 0x09, 0x3c, 0xdc, 0x42, 0x60, 0x9d, 0xf5, 0x47, + 0x69, 0x08, 0x3c, 0x34, 0x07, 0x19, 0x7c, 0xdd, 0xc5, 0x86, 0xa3, 0x9b, 0x46, 0x7e, 0x80, 0x12, + 0x79, 0xb0, 0x8d, 0x15, 0x71, 0xbd, 0x1a, 0x25, 0xe1, 0xe3, 0xa1, 0x33, 0x30, 0x60, 0x5a, 0xae, + 0x6e, 0x1a, 0x4e, 0x3e, 0x3d, 0x25, 0x9d, 0x18, 0x3c, 0x75, 0xbc, 0xad, 0x23, 0xac, 0x32, 0x18, + 0x45, 0x00, 0xa3, 0x45, 0xc8, 0x39, 0x66, 0xd3, 0xd6, 0x70, 0x45, 0x33, 0xab, 0xb8, 0xa2, 0x1b, + 0xdb, 0x66, 0x3e, 0x43, 0x09, 0x4c, 0xb6, 0x0a, 0x42, 0x01, 0xe7, 0xcc, 0x2a, 0x5e, 0x34, 0xb6, + 0x4d, 0x65, 0xd8, 0x09, 0x3d, 0xa3, 0x23, 0xd0, 0xef, 0xec, 0x19, 0xae, 0x7a, 0x3d, 0x9f, 0xa5, + 0x1e, 0xc2, 0x9f, 0xe4, 0xdf, 0xe8, 0x87, 0x91, 0x5e, 0x5c, 0xec, 0x3c, 0xf4, 0x6d, 0x13, 0x29, + 0xf3, 0x89, 0xfd, 0xe8, 0x80, 0xe1, 0x84, 0x95, 0xd8, 0x7f, 0x40, 0x25, 0xce, 0xc2, 0xa0, 0x81, + 0x1d, 0x17, 0x57, 0x99, 0x47, 0x24, 0x7b, 0xf4, 0x29, 0x60, 0x48, 0xad, 0x2e, 0x95, 0x3a, 0x90, + 0x4b, 0xbd, 0x05, 0x46, 0x3c, 0x96, 0x2a, 0xb6, 0x6a, 0xd4, 0x84, 0x6f, 0xce, 0xc4, 0x71, 0x32, + 0x5d, 0x16, 0x78, 0x0a, 0x41, 0x53, 0x86, 0x71, 0xe8, 0x19, 0xcd, 0x03, 0x98, 0x06, 0x36, 0xb7, + 0x2b, 0x55, 0xac, 0xd5, 0xf3, 0xe9, 0x0e, 0x5a, 0x5a, 0x25, 0x20, 0x2d, 0x5a, 0x32, 0x59, 0xab, + 0x56, 0x47, 0xe7, 0x7c, 0x57, 0x1b, 0xe8, 0xe0, 0x29, 0xcb, 0x6c, 0x92, 0xb5, 0x78, 0xdb, 0x26, + 0x0c, 0xdb, 0x98, 0xf8, 0x3d, 0xae, 0x72, 0xc9, 0x32, 0x94, 0x89, 0xe9, 0x58, 0xc9, 0x14, 0x8e, + 0xc6, 0x04, 0x1b, 0xb2, 0x83, 0x8f, 0xe8, 0x7e, 0xf0, 0x1a, 0x2a, 0xd4, 0xad, 0x80, 0x46, 0xa1, + 0xac, 0x68, 0x5c, 0x51, 0x1b, 0xb8, 0xf0, 0x32, 0x0c, 0x87, 0xd5, 0x83, 0xc6, 0xa1, 0xcf, 0x71, + 0x55, 0xdb, 0xa5, 0x5e, 0xd8, 0xa7, 0xb0, 0x07, 0x94, 0x83, 0x24, 0x36, 0xaa, 0x34, 0xca, 0xf5, + 0x29, 0xe4, 0x27, 0xfa, 0x09, 0x5f, 0xe0, 0x24, 0x15, 0xf8, 0xa1, 0x56, 0x8b, 0x86, 0x28, 0x47, + 0xe5, 0x2e, 0x3c, 0x03, 0x43, 0x21, 0x01, 0x7a, 0x1d, 0x5a, 0x7e, 0x17, 0x1c, 0x6e, 0x4b, 0x1a, + 0xbd, 0x05, 0xc6, 0x9b, 0x86, 0x6e, 0xb8, 0xd8, 0xb6, 0x6c, 0x4c, 0x3c, 0x96, 0x0d, 0x95, 0xff, + 0x2f, 0x03, 0x1d, 0x7c, 0x6e, 0x33, 0x08, 0xcd, 0xa8, 0x28, 0x63, 0xcd, 0xd6, 0xc6, 0x93, 0x99, + 0xf4, 0xeb, 0x03, 0xb9, 0x57, 0x5e, 0x79, 0xe5, 0x95, 0x84, 0xfc, 0xb1, 0x7e, 0x18, 0x6f, 0x37, + 0x67, 0xda, 0x4e, 0xdf, 0x23, 0xd0, 0x6f, 0x34, 0x1b, 0x5b, 0xd8, 0xa6, 0x4a, 0xea, 0x53, 0xf8, + 0x13, 0x9a, 0x85, 0xbe, 0xba, 0xba, 0x85, 0xeb, 0xf9, 0xd4, 0x94, 0x74, 0x62, 0xf8, 0xd4, 0xa3, + 0x3d, 0xcd, 0xca, 0xe9, 0x25, 0x82, 0xa2, 0x30, 0x4c, 0xf4, 0x2c, 0xa4, 0x78, 0x88, 0x26, 0x14, + 0x4e, 0xf6, 0x46, 0x81, 0xcc, 0x25, 0x85, 0xe2, 0xa1, 0x7b, 0x20, 0x43, 0xfe, 0x32, 0xdf, 0xe8, + 0xa7, 0x3c, 0xa7, 0x49, 0x03, 0xf1, 0x0b, 0x54, 0x80, 0x34, 0x9d, 0x26, 0x55, 0x2c, 0x52, 0x9b, + 0xf7, 0x4c, 0x1c, 0xab, 0x8a, 0xb7, 0xd5, 0x66, 0xdd, 0xad, 0x5c, 0x55, 0xeb, 0x4d, 0x4c, 0x1d, + 0x3e, 0xa3, 0x64, 0x79, 0xe3, 0x15, 0xd2, 0x86, 0x26, 0x61, 0x90, 0xcd, 0x2a, 0xdd, 0xa8, 0xe2, + 0xeb, 0x34, 0x7a, 0xf6, 0x29, 0x6c, 0xa2, 0x2d, 0x92, 0x16, 0x32, 0xfc, 0x8b, 0x8e, 0x69, 0x08, + 0xd7, 0xa4, 0x43, 0x90, 0x06, 0x3a, 0xfc, 0x33, 0xd1, 0xc0, 0x7d, 0x6f, 0x7b, 0xf1, 0xa2, 0x3e, + 0x25, 0x7f, 0x39, 0x01, 0x29, 0x1a, 0x2f, 0x46, 0x60, 0x70, 0xe3, 0xad, 0x6b, 0xe5, 0xca, 0xfc, + 0xea, 0x66, 0x69, 0xa9, 0x9c, 0x93, 0xd0, 0x30, 0x00, 0x6d, 0xb8, 0xb0, 0xb4, 0x3a, 0xbb, 0x91, + 0x4b, 0x78, 0xcf, 0x8b, 0x2b, 0x1b, 0x67, 0x9e, 0xce, 0x25, 0x3d, 0x84, 0x4d, 0xd6, 0x90, 0x0a, + 0x02, 0x3c, 0x75, 0x2a, 0xd7, 0x87, 0x72, 0x90, 0x65, 0x04, 0x16, 0xdf, 0x52, 0x9e, 0x3f, 0xf3, + 0x74, 0xae, 0x3f, 0xdc, 0xf2, 0xd4, 0xa9, 0xdc, 0x00, 0x1a, 0x82, 0x0c, 0x6d, 0x29, 0xad, 0xae, + 0x2e, 0xe5, 0xd2, 0x1e, 0xcd, 0xf5, 0x0d, 0x65, 0x71, 0x65, 0x21, 0x97, 0xf1, 0x68, 0x2e, 0x28, + 0xab, 0x9b, 0x6b, 0x39, 0xf0, 0x28, 0x2c, 0x97, 0xd7, 0xd7, 0x67, 0x17, 0xca, 0xb9, 0x41, 0x0f, + 0xa2, 0xf4, 0xd6, 0x8d, 0xf2, 0x7a, 0x2e, 0x1b, 0x62, 0xeb, 0xa9, 0x53, 0xb9, 0x21, 0x6f, 0x88, + 0xf2, 0xca, 0xe6, 0x72, 0x6e, 0x18, 0x8d, 0xc2, 0x10, 0x1b, 0x42, 0x30, 0x31, 0x12, 0x69, 0x3a, + 0xf3, 0x74, 0x2e, 0xe7, 0x33, 0xc2, 0xa8, 0x8c, 0x86, 0x1a, 0xce, 0x3c, 0x9d, 0x43, 0xf2, 0x1c, + 0xf4, 0x51, 0xef, 0x42, 0x08, 0x86, 0x97, 0x66, 0x4b, 0xe5, 0xa5, 0xca, 0xea, 0xda, 0xc6, 0xe2, + 0xea, 0xca, 0xec, 0x52, 0x4e, 0xf2, 0xdb, 0x94, 0xf2, 0xf3, 0x9b, 0x8b, 0x4a, 0x79, 0x3e, 0x97, + 0x08, 0xb6, 0xad, 0x95, 0x67, 0x37, 0xca, 0xf3, 0xb9, 0xa4, 0xac, 0xc1, 0x78, 0xbb, 0x38, 0xd9, + 0x76, 0x66, 0x04, 0x4c, 0x9c, 0xe8, 0x60, 0x62, 0x4a, 0xab, 0xc5, 0xc4, 0xdf, 0x4a, 0xc0, 0x58, + 0x9b, 0x5c, 0xd1, 0x76, 0x90, 0xe7, 0xa0, 0x8f, 0xb9, 0x28, 0xcb, 0x9e, 0x8f, 0xb4, 0x4d, 0x3a, + 0xd4, 0x61, 0x5b, 0x32, 0x28, 0xc5, 0x0b, 0x56, 0x10, 0xc9, 0x0e, 0x15, 0x04, 0x21, 0xd1, 0x12, + 0xd3, 0x7f, 0xb2, 0x25, 0xa6, 0xb3, 0xb4, 0x77, 0xa6, 0x97, 0xb4, 0x47, 0xdb, 0xf6, 0x17, 0xdb, + 0xfb, 0xda, 0xc4, 0xf6, 0xf3, 0x30, 0xda, 0x42, 0xa8, 0xe7, 0x18, 0xfb, 0x5e, 0x09, 0xf2, 0x9d, + 0x94, 0x13, 0x13, 0xe9, 0x12, 0xa1, 0x48, 0x77, 0x3e, 0xaa, 0xc1, 0xfb, 0x3a, 0x1b, 0xa1, 0xc5, + 0xd6, 0x9f, 0x93, 0xe0, 0x48, 0xfb, 0x4a, 0xb1, 0x2d, 0x0f, 0xcf, 0x42, 0x7f, 0x03, 0xbb, 0x3b, + 0xa6, 0xa8, 0x96, 0x1e, 0x6a, 0x93, 0x83, 0x49, 0x77, 0xd4, 0xd8, 0x1c, 0x2b, 0x98, 0xc4, 0x93, + 0x9d, 0xca, 0x3d, 0xc6, 0x4d, 0x0b, 0xa7, 0x1f, 0x4c, 0xc0, 0xe1, 0xb6, 0xc4, 0xdb, 0x32, 0x7a, + 0x2f, 0x80, 0x6e, 0x58, 0x4d, 0x97, 0x55, 0x44, 0x2c, 0xc0, 0x66, 0x68, 0x0b, 0x0d, 0x5e, 0x24, + 0x78, 0x36, 0x5d, 0xaf, 0x3f, 0x49, 0xfb, 0x81, 0x35, 0x51, 0x80, 0xb3, 0x3e, 0xa3, 0x29, 0xca, + 0xe8, 0x44, 0x07, 0x49, 0x5b, 0x1c, 0xf3, 0x09, 0xc8, 0x69, 0x75, 0x1d, 0x1b, 0x6e, 0xc5, 0x71, + 0x6d, 0xac, 0x36, 0x74, 0xa3, 0x46, 0x33, 0x48, 0xba, 0xd8, 0xb7, 0xad, 0xd6, 0x1d, 0xac, 0x8c, + 0xb0, 0xee, 0x75, 0xd1, 0x4b, 0x30, 0xa8, 0x03, 0xd9, 0x01, 0x8c, 0xfe, 0x10, 0x06, 0xeb, 0xf6, + 0x30, 0xe4, 0x9f, 0xcd, 0xc0, 0x60, 0xa0, 0xae, 0x46, 0xf7, 0x41, 0xf6, 0x45, 0xf5, 0xaa, 0x5a, + 0x11, 0x6b, 0x25, 0xa6, 0x89, 0x41, 0xd2, 0xb6, 0xc6, 0xd7, 0x4b, 0x4f, 0xc0, 0x38, 0x05, 0x31, + 0x9b, 0x2e, 0xb6, 0x2b, 0x5a, 0x5d, 0x75, 0x1c, 0xaa, 0xb4, 0x34, 0x05, 0x45, 0xa4, 0x6f, 0x95, + 0x74, 0xcd, 0x89, 0x1e, 0x74, 0x1a, 0xc6, 0x28, 0x46, 0xa3, 0x59, 0x77, 0x75, 0xab, 0x8e, 0x2b, + 0x64, 0xf5, 0xe6, 0xd0, 0x4c, 0xe2, 0x71, 0x36, 0x4a, 0x20, 0x96, 0x39, 0x00, 0xe1, 0xc8, 0x41, + 0xf3, 0x70, 0x2f, 0x45, 0xab, 0x61, 0x03, 0xdb, 0xaa, 0x8b, 0x2b, 0xf8, 0xa5, 0xa6, 0x5a, 0x77, + 0x2a, 0xaa, 0x51, 0xad, 0xec, 0xa8, 0xce, 0x4e, 0x7e, 0x9c, 0x10, 0x28, 0x25, 0xf2, 0x92, 0x72, + 0x8c, 0x00, 0x2e, 0x70, 0xb8, 0x32, 0x05, 0x9b, 0x35, 0xaa, 0x17, 0x55, 0x67, 0x07, 0x15, 0xe1, + 0x08, 0xa5, 0xe2, 0xb8, 0xb6, 0x6e, 0xd4, 0x2a, 0xda, 0x0e, 0xd6, 0x76, 0x2b, 0x4d, 0x77, 0xfb, + 0x6c, 0xfe, 0x9e, 0xe0, 0xf8, 0x94, 0xc3, 0x75, 0x0a, 0x33, 0x47, 0x40, 0x36, 0xdd, 0xed, 0xb3, + 0x68, 0x1d, 0xb2, 0xc4, 0x18, 0x0d, 0xfd, 0x65, 0x5c, 0xd9, 0x36, 0x6d, 0x9a, 0x1a, 0x87, 0xdb, + 0x84, 0xa6, 0x80, 0x06, 0xa7, 0x57, 0x39, 0xc2, 0xb2, 0x59, 0xc5, 0xc5, 0xbe, 0xf5, 0xb5, 0x72, + 0x79, 0x5e, 0x19, 0x14, 0x54, 0x2e, 0x98, 0x36, 0x71, 0xa8, 0x9a, 0xe9, 0x29, 0x78, 0x90, 0x39, + 0x54, 0xcd, 0x14, 0xea, 0x3d, 0x0d, 0x63, 0x9a, 0xc6, 0x64, 0xd6, 0xb5, 0x0a, 0x5f, 0x63, 0x39, + 0xf9, 0x5c, 0x48, 0x59, 0x9a, 0xb6, 0xc0, 0x00, 0xb8, 0x8f, 0x3b, 0xe8, 0x1c, 0x1c, 0xf6, 0x95, + 0x15, 0x44, 0x1c, 0x6d, 0x91, 0x32, 0x8a, 0x7a, 0x1a, 0xc6, 0xac, 0xbd, 0x56, 0x44, 0x14, 0x1a, + 0xd1, 0xda, 0x8b, 0xa2, 0x3d, 0x03, 0xe3, 0xd6, 0x8e, 0xd5, 0x8a, 0x77, 0x32, 0x88, 0x87, 0xac, + 0x1d, 0x2b, 0x8a, 0xf8, 0x20, 0x5d, 0x70, 0xdb, 0x58, 0x53, 0x5d, 0x5c, 0xcd, 0x1f, 0x0d, 0x82, + 0x07, 0x3a, 0xd0, 0x0c, 0xe4, 0x34, 0xad, 0x82, 0x0d, 0x75, 0xab, 0x8e, 0x2b, 0xaa, 0x8d, 0x0d, + 0xd5, 0xc9, 0x4f, 0x06, 0x81, 0x87, 0x35, 0xad, 0x4c, 0x7b, 0x67, 0x69, 0x27, 0x3a, 0x09, 0xa3, + 0xe6, 0xd6, 0x8b, 0x1a, 0x73, 0xc9, 0x8a, 0x65, 0xe3, 0x6d, 0xfd, 0x7a, 0xfe, 0x01, 0xaa, 0xdf, + 0x11, 0xd2, 0x41, 0x1d, 0x72, 0x8d, 0x36, 0xa3, 0x47, 0x20, 0xa7, 0x39, 0x3b, 0xaa, 0x6d, 0xd1, + 0x98, 0xec, 0x58, 0xaa, 0x86, 0xf3, 0x0f, 0x32, 0x50, 0xd6, 0xbe, 0x22, 0x9a, 0xc9, 0x94, 0x70, + 0xae, 0xe9, 0xdb, 0xae, 0xa0, 0xf8, 0x30, 0x9b, 0x12, 0xb4, 0x8d, 0x53, 0x3b, 0x01, 0x39, 0xa2, + 0x8a, 0xd0, 0xc0, 0x27, 0x28, 0xd8, 0xb0, 0xb5, 0x63, 0x05, 0xc7, 0xbd, 0x1f, 0x86, 0x08, 0xa4, + 0x3f, 0xe8, 0x23, 0xac, 0x20, 0xb3, 0x76, 0x02, 0x23, 0x3e, 0x0d, 0x47, 0x08, 0x50, 0x03, 0xbb, + 0x6a, 0x55, 0x75, 0xd5, 0x00, 0xf4, 0x63, 0x14, 0x9a, 0xe8, 0x7d, 0x99, 0x77, 0x86, 0xf8, 0xb4, + 0x9b, 0x5b, 0x7b, 0x9e, 0x67, 0x3d, 0xce, 0xf8, 0x24, 0x6d, 0xc2, 0xb7, 0xee, 0x5a, 0xd1, 0x2d, + 0x17, 0x21, 0x1b, 0x74, 0x7c, 0x94, 0x01, 0xe6, 0xfa, 0x39, 0x89, 0x54, 0x41, 0x73, 0xab, 0xf3, + 0xa4, 0x7e, 0x79, 0x5b, 0x39, 0x97, 0x20, 0x75, 0xd4, 0xd2, 0xe2, 0x46, 0xb9, 0xa2, 0x6c, 0xae, + 0x6c, 0x2c, 0x2e, 0x97, 0x73, 0xc9, 0x40, 0xc1, 0x7e, 0x29, 0x95, 0x7e, 0x28, 0xf7, 0xb0, 0xfc, + 0xcd, 0x04, 0x0c, 0x87, 0x57, 0x60, 0xe8, 0x4d, 0x70, 0x54, 0x6c, 0x97, 0x38, 0xd8, 0xad, 0x5c, + 0xd3, 0x6d, 0x3a, 0x23, 0x1b, 0x2a, 0xcb, 0x8e, 0x9e, 0x4f, 0x8c, 0x73, 0xa8, 0x75, 0xec, 0xbe, + 0xa0, 0xdb, 0x64, 0xbe, 0x35, 0x54, 0x17, 0x2d, 0xc1, 0xa4, 0x61, 0x56, 0x1c, 0x57, 0x35, 0xaa, + 0xaa, 0x5d, 0xad, 0xf8, 0x1b, 0x55, 0x15, 0x55, 0xd3, 0xb0, 0xe3, 0x98, 0x2c, 0x13, 0x7a, 0x54, + 0x8e, 0x1b, 0xe6, 0x3a, 0x07, 0xf6, 0x53, 0xc4, 0x2c, 0x07, 0x8d, 0xf8, 0x6f, 0xb2, 0x93, 0xff, + 0xde, 0x03, 0x99, 0x86, 0x6a, 0x55, 0xb0, 0xe1, 0xda, 0x7b, 0xb4, 0xee, 0x4e, 0x2b, 0xe9, 0x86, + 0x6a, 0x95, 0xc9, 0xf3, 0x8f, 0x64, 0xf9, 0x73, 0x29, 0x95, 0x4e, 0xe7, 0x32, 0x97, 0x52, 0xe9, + 0x4c, 0x0e, 0xe4, 0xd7, 0x92, 0x90, 0x0d, 0xd6, 0xe1, 0x64, 0x59, 0xa3, 0xd1, 0x94, 0x25, 0xd1, + 0xa0, 0x76, 0x7f, 0xd7, 0xaa, 0x7d, 0x7a, 0x8e, 0xe4, 0xb2, 0x62, 0x3f, 0xab, 0x8e, 0x15, 0x86, + 0x49, 0xea, 0x08, 0xe2, 0x6c, 0x98, 0x55, 0x23, 0x69, 0x85, 0x3f, 0xa1, 0x05, 0xe8, 0x7f, 0xd1, + 0xa1, 0xb4, 0xfb, 0x29, 0xed, 0x07, 0xba, 0xd3, 0xbe, 0xb4, 0x4e, 0x89, 0x67, 0x2e, 0xad, 0x57, + 0x56, 0x56, 0x95, 0xe5, 0xd9, 0x25, 0x85, 0xa3, 0xa3, 0x63, 0x90, 0xaa, 0xab, 0x2f, 0xef, 0x85, + 0xb3, 0x1e, 0x6d, 0xea, 0xd5, 0x08, 0xc7, 0x20, 0x75, 0x0d, 0xab, 0xbb, 0xe1, 0x5c, 0x43, 0x9b, + 0xee, 0xe2, 0x64, 0x98, 0x81, 0x3e, 0xaa, 0x2f, 0x04, 0xc0, 0x35, 0x96, 0x3b, 0x84, 0xd2, 0x90, + 0x9a, 0x5b, 0x55, 0xc8, 0x84, 0xc8, 0x41, 0x96, 0xb5, 0x56, 0xd6, 0x16, 0xcb, 0x73, 0xe5, 0x5c, + 0x42, 0x3e, 0x0d, 0xfd, 0x4c, 0x09, 0x64, 0xb2, 0x78, 0x6a, 0xc8, 0x1d, 0xe2, 0x8f, 0x9c, 0x86, + 0x24, 0x7a, 0x37, 0x97, 0x4b, 0x65, 0x25, 0x97, 0x08, 0x9b, 0x3a, 0x95, 0xeb, 0x93, 0x1d, 0xc8, + 0x06, 0x0b, 0xf1, 0x1f, 0xcd, 0x22, 0xfb, 0x2b, 0x12, 0x0c, 0x06, 0x0a, 0x6b, 0x52, 0x11, 0xa9, + 0xf5, 0xba, 0x79, 0xad, 0xa2, 0xd6, 0x75, 0xd5, 0xe1, 0xae, 0x01, 0xb4, 0x69, 0x96, 0xb4, 0xf4, + 0x6a, 0xba, 0x1f, 0xd1, 0x14, 0xe9, 0xcb, 0xf5, 0xcb, 0x9f, 0x92, 0x20, 0x17, 0xad, 0x6c, 0x23, + 0x6c, 0x4a, 0x6f, 0x24, 0x9b, 0xf2, 0x27, 0x25, 0x18, 0x0e, 0x97, 0xb3, 0x11, 0xf6, 0xee, 0x7b, + 0x43, 0xd9, 0xfb, 0xa3, 0x04, 0x0c, 0x85, 0x8a, 0xd8, 0x5e, 0xb9, 0x7b, 0x09, 0x46, 0xf5, 0x2a, + 0x6e, 0x58, 0xa6, 0x8b, 0x0d, 0x6d, 0xaf, 0x52, 0xc7, 0x57, 0x71, 0x3d, 0x2f, 0xd3, 0xa0, 0x31, + 0xd3, 0xbd, 0x4c, 0x9e, 0x5e, 0xf4, 0xf1, 0x96, 0x08, 0x5a, 0x71, 0x6c, 0x71, 0xbe, 0xbc, 0xbc, + 0xb6, 0xba, 0x51, 0x5e, 0x99, 0x7b, 0x6b, 0x65, 0x73, 0xe5, 0xf2, 0xca, 0xea, 0x0b, 0x2b, 0x4a, + 0x4e, 0x8f, 0x80, 0xdd, 0xc5, 0x69, 0xbf, 0x06, 0xb9, 0x28, 0x53, 0xe8, 0x28, 0xb4, 0x63, 0x2b, + 0x77, 0x08, 0x8d, 0xc1, 0xc8, 0xca, 0x6a, 0x65, 0x7d, 0x71, 0xbe, 0x5c, 0x29, 0x5f, 0xb8, 0x50, + 0x9e, 0xdb, 0x58, 0x67, 0x1b, 0x1f, 0x1e, 0xf4, 0x46, 0x68, 0x82, 0xcb, 0xaf, 0x26, 0x61, 0xac, + 0x0d, 0x27, 0x68, 0x96, 0x2f, 0x59, 0xd8, 0x2a, 0xea, 0xf1, 0x5e, 0xb8, 0x9f, 0x26, 0x35, 0xc3, + 0x9a, 0x6a, 0xbb, 0x7c, 0x85, 0xf3, 0x08, 0x10, 0x2d, 0x19, 0xae, 0xbe, 0xad, 0x63, 0x9b, 0xef, + 0x13, 0xb1, 0x75, 0xcc, 0x88, 0xdf, 0xce, 0xb6, 0x8a, 0x1e, 0x03, 0x64, 0x99, 0x8e, 0xee, 0xea, + 0x57, 0x71, 0x45, 0x37, 0xc4, 0xa6, 0x12, 0x59, 0xd7, 0xa4, 0x94, 0x9c, 0xe8, 0x59, 0x34, 0x5c, + 0x0f, 0xda, 0xc0, 0x35, 0x35, 0x02, 0x4d, 0x82, 0x79, 0x52, 0xc9, 0x89, 0x1e, 0x0f, 0xfa, 0x3e, + 0xc8, 0x56, 0xcd, 0x26, 0x29, 0xf6, 0x18, 0x1c, 0xc9, 0x1d, 0x92, 0x32, 0xc8, 0xda, 0x3c, 0x10, + 0x5e, 0xc6, 0xfb, 0xbb, 0x59, 0x59, 0x65, 0x90, 0xb5, 0x31, 0x90, 0x87, 0x61, 0x44, 0xad, 0xd5, + 0x6c, 0x42, 0x5c, 0x10, 0x62, 0x0b, 0x93, 0x61, 0xaf, 0x99, 0x02, 0x16, 0x2e, 0x41, 0x5a, 0xe8, + 0x81, 0xa4, 0x6a, 0xa2, 0x89, 0x8a, 0xc5, 0x56, 0xdb, 0x89, 0x13, 0x19, 0x25, 0x6d, 0x88, 0xce, + 0xfb, 0x20, 0xab, 0x3b, 0x15, 0x7f, 0x73, 0x3e, 0x31, 0x95, 0x38, 0x91, 0x56, 0x06, 0x75, 0xc7, + 0xdb, 0xd8, 0x94, 0x3f, 0x97, 0x80, 0xe1, 0xf0, 0xcb, 0x05, 0x34, 0x0f, 0xe9, 0xba, 0xa9, 0xa9, + 0xd4, 0xb5, 0xd8, 0x9b, 0xad, 0x13, 0x31, 0xef, 0x23, 0xa6, 0x97, 0x38, 0xbc, 0xe2, 0x61, 0x16, + 0x7e, 0x47, 0x82, 0xb4, 0x68, 0x46, 0x47, 0x20, 0x65, 0xa9, 0xee, 0x0e, 0x25, 0xd7, 0x57, 0x4a, + 0xe4, 0x24, 0x85, 0x3e, 0x93, 0x76, 0xc7, 0x52, 0x0d, 0xea, 0x02, 0xbc, 0x9d, 0x3c, 0x13, 0xbb, + 0xd6, 0xb1, 0x5a, 0xa5, 0xab, 0x1e, 0xb3, 0xd1, 0xc0, 0x86, 0xeb, 0x08, 0xbb, 0xf2, 0xf6, 0x39, + 0xde, 0x8c, 0x1e, 0x85, 0x51, 0xd7, 0x56, 0xf5, 0x7a, 0x08, 0x36, 0x45, 0x61, 0x73, 0xa2, 0xc3, + 0x03, 0x2e, 0xc2, 0x31, 0x41, 0xb7, 0x8a, 0x5d, 0x55, 0xdb, 0xc1, 0x55, 0x1f, 0xa9, 0x9f, 0xee, + 0x6e, 0x1c, 0xe5, 0x00, 0xf3, 0xbc, 0x5f, 0xe0, 0xca, 0xdf, 0x94, 0x60, 0x54, 0xac, 0xd3, 0xaa, + 0x9e, 0xb2, 0x96, 0x01, 0x54, 0xc3, 0x30, 0xdd, 0xa0, 0xba, 0x5a, 0x5d, 0xb9, 0x05, 0x6f, 0x7a, + 0xd6, 0x43, 0x52, 0x02, 0x04, 0x0a, 0x0d, 0x00, 0xbf, 0xa7, 0xa3, 0xda, 0x26, 0x61, 0x90, 0xbf, + 0x39, 0xa2, 0xaf, 0x1f, 0xd9, 0xca, 0x1e, 0x58, 0x13, 0x59, 0xd0, 0xa1, 0x71, 0xe8, 0xdb, 0xc2, + 0x35, 0xdd, 0xe0, 0xfb, 0xc1, 0xec, 0x41, 0xec, 0xbf, 0xa4, 0xbc, 0xfd, 0x97, 0xd2, 0x87, 0x24, + 0x18, 0xd3, 0xcc, 0x46, 0x94, 0xdf, 0x52, 0x2e, 0xb2, 0xbd, 0xe0, 0x5c, 0x94, 0xde, 0xf6, 0x6c, + 0x4d, 0x77, 0x77, 0x9a, 0x5b, 0xd3, 0x9a, 0xd9, 0x98, 0xa9, 0x99, 0x75, 0xd5, 0xa8, 0xf9, 0xef, + 0x4f, 0xe9, 0x0f, 0xed, 0xf1, 0x1a, 0x36, 0x1e, 0xaf, 0x99, 0x81, 0xb7, 0xa9, 0xe7, 0xfd, 0x9f, + 0x7f, 0x21, 0x49, 0xbf, 0x90, 0x48, 0x2e, 0xac, 0x95, 0x3e, 0x9f, 0x28, 0x2c, 0xb0, 0xe1, 0xd6, + 0x84, 0x7a, 0x14, 0xbc, 0x5d, 0xc7, 0x1a, 0x11, 0x19, 0xbe, 0xf3, 0x28, 0x8c, 0xd7, 0xcc, 0x9a, + 0x49, 0x29, 0xce, 0x90, 0x5f, 0xfc, 0x8d, 0x6c, 0xc6, 0x6b, 0x2d, 0xc4, 0xbe, 0xbe, 0x2d, 0xae, + 0xc0, 0x18, 0x07, 0xae, 0xd0, 0x57, 0x42, 0x6c, 0x61, 0x83, 0xba, 0x6e, 0xab, 0xe5, 0x7f, 0xed, + 0xdb, 0x34, 0xa1, 0x2b, 0xa3, 0x1c, 0x95, 0xf4, 0xb1, 0xb5, 0x4f, 0x51, 0x81, 0xc3, 0x21, 0x7a, + 0x6c, 0xda, 0x62, 0x3b, 0x86, 0xe2, 0x6f, 0x71, 0x8a, 0x63, 0x01, 0x8a, 0xeb, 0x1c, 0xb5, 0x38, + 0x07, 0x43, 0xfb, 0xa1, 0xf5, 0xaf, 0x39, 0xad, 0x2c, 0x0e, 0x12, 0x59, 0x80, 0x11, 0x4a, 0x44, + 0x6b, 0x3a, 0xae, 0xd9, 0xa0, 0x31, 0xb1, 0x3b, 0x99, 0xdf, 0xfe, 0x36, 0x9b, 0x47, 0xc3, 0x04, + 0x6d, 0xce, 0xc3, 0x2a, 0x16, 0x81, 0xbe, 0x05, 0xab, 0x62, 0xad, 0x1e, 0x43, 0xe1, 0xab, 0x9c, + 0x11, 0x0f, 0xbe, 0x78, 0x05, 0xc6, 0xc9, 0x6f, 0x1a, 0xb2, 0x82, 0x9c, 0xc4, 0xef, 0xc1, 0xe5, + 0xbf, 0xf9, 0x5e, 0x36, 0x55, 0xc7, 0x3c, 0x02, 0x01, 0x9e, 0x02, 0x56, 0xac, 0x61, 0xd7, 0xc5, + 0xb6, 0x53, 0x51, 0xeb, 0xed, 0xd8, 0x0b, 0x6c, 0x62, 0xe4, 0x3f, 0xfe, 0xdd, 0xb0, 0x15, 0x17, + 0x18, 0xe6, 0x6c, 0xbd, 0x5e, 0xdc, 0x84, 0xa3, 0x6d, 0xbc, 0xa2, 0x07, 0x9a, 0xaf, 0x72, 0x9a, + 0xe3, 0x2d, 0x9e, 0x41, 0xc8, 0xae, 0x81, 0x68, 0xf7, 0x6c, 0xd9, 0x03, 0xcd, 0x4f, 0x70, 0x9a, + 0x88, 0xe3, 0x0a, 0x93, 0x12, 0x8a, 0x97, 0x60, 0xf4, 0x2a, 0xb6, 0xb7, 0x4c, 0x87, 0x6f, 0x1c, + 0xf5, 0x40, 0xee, 0x93, 0x9c, 0xdc, 0x08, 0x47, 0xa4, 0x3b, 0x49, 0x84, 0xd6, 0x39, 0x48, 0x6f, + 0xab, 0x1a, 0xee, 0x81, 0xc4, 0x4d, 0x4e, 0x62, 0x80, 0xc0, 0x13, 0xd4, 0x59, 0xc8, 0xd6, 0x4c, + 0x9e, 0xb5, 0xe2, 0xd1, 0x3f, 0xc5, 0xd1, 0x07, 0x05, 0x0e, 0x27, 0x61, 0x99, 0x56, 0xb3, 0x4e, + 0x52, 0x5a, 0x3c, 0x89, 0xbf, 0x23, 0x48, 0x08, 0x1c, 0x4e, 0x62, 0x1f, 0x6a, 0xfd, 0xb4, 0x20, + 0xe1, 0x04, 0xf4, 0xf9, 0x1c, 0x0c, 0x9a, 0x46, 0x7d, 0xcf, 0x34, 0x7a, 0x61, 0xe2, 0x33, 0x9c, + 0x02, 0x70, 0x14, 0x42, 0xe0, 0x3c, 0x64, 0x7a, 0x35, 0xc4, 0xdf, 0xfd, 0xae, 0x98, 0x1e, 0xc2, + 0x02, 0x0b, 0x30, 0x22, 0x02, 0x94, 0x6e, 0x1a, 0x3d, 0x90, 0xf8, 0x7b, 0x9c, 0xc4, 0x70, 0x00, + 0x8d, 0x8b, 0xe1, 0x62, 0xc7, 0xad, 0xe1, 0x5e, 0x88, 0x7c, 0x4e, 0x88, 0xc1, 0x51, 0xb8, 0x2a, + 0xb7, 0xb0, 0xa1, 0xed, 0xf4, 0x46, 0xe1, 0x97, 0x84, 0x2a, 0x05, 0x0e, 0x21, 0x31, 0x07, 0x43, + 0x0d, 0xd5, 0x76, 0x76, 0xd4, 0x7a, 0x4f, 0xe6, 0xf8, 0xfb, 0x9c, 0x46, 0xd6, 0x43, 0xe2, 0x1a, + 0x69, 0x1a, 0xfb, 0x21, 0xf3, 0x79, 0xa1, 0x91, 0x00, 0x1a, 0x9f, 0x7a, 0x8e, 0x4b, 0x77, 0xd9, + 0xf6, 0x43, 0xed, 0x97, 0xc5, 0xd4, 0x63, 0xb8, 0xcb, 0x41, 0x8a, 0xe7, 0x21, 0xe3, 0xe8, 0x2f, + 0xf7, 0x44, 0xe6, 0x0b, 0xc2, 0xd2, 0x14, 0x81, 0x20, 0xbf, 0x15, 0x8e, 0xb5, 0x4d, 0x13, 0x3d, + 0x10, 0xfb, 0x07, 0x9c, 0xd8, 0x91, 0x36, 0xa9, 0x82, 0x87, 0x84, 0xfd, 0x92, 0xfc, 0x87, 0x22, + 0x24, 0xe0, 0x08, 0xad, 0x35, 0xb2, 0x8e, 0x70, 0xd4, 0xed, 0xfd, 0x69, 0xed, 0x57, 0x84, 0xd6, + 0x18, 0x6e, 0x48, 0x6b, 0x1b, 0x70, 0x84, 0x53, 0xdc, 0x9f, 0x5d, 0x7f, 0x55, 0x04, 0x56, 0x86, + 0xbd, 0x19, 0xb6, 0xee, 0xdb, 0xa1, 0xe0, 0xa9, 0x53, 0x14, 0xac, 0x4e, 0xa5, 0xa1, 0x5a, 0x3d, + 0x50, 0xfe, 0x35, 0x4e, 0x59, 0x44, 0x7c, 0xaf, 0xe2, 0x75, 0x96, 0x55, 0x8b, 0x10, 0x7f, 0x0b, + 0xe4, 0x05, 0xf1, 0xa6, 0x61, 0x63, 0xcd, 0xac, 0x19, 0xfa, 0xcb, 0xb8, 0xda, 0x03, 0xe9, 0x5f, + 0x8f, 0x98, 0x6a, 0x33, 0x80, 0x4e, 0x28, 0x2f, 0x42, 0xce, 0xab, 0x55, 0x2a, 0x7a, 0xc3, 0x32, + 0x6d, 0x37, 0x86, 0xe2, 0x17, 0x85, 0xa5, 0x3c, 0xbc, 0x45, 0x8a, 0x56, 0x2c, 0xc3, 0x30, 0x7d, + 0xec, 0xd5, 0x25, 0xbf, 0xc4, 0x09, 0x0d, 0xf9, 0x58, 0x3c, 0x70, 0x68, 0x66, 0xc3, 0x52, 0xed, + 0x5e, 0xe2, 0xdf, 0x3f, 0x12, 0x81, 0x83, 0xa3, 0xf0, 0xc0, 0xe1, 0xee, 0x59, 0x98, 0x64, 0xfb, + 0x1e, 0x28, 0x7c, 0x59, 0x04, 0x0e, 0x81, 0xc3, 0x49, 0x88, 0x82, 0xa1, 0x07, 0x12, 0xff, 0x58, + 0x90, 0x10, 0x38, 0x84, 0xc4, 0xf3, 0x7e, 0xa2, 0xb5, 0x71, 0x4d, 0x77, 0x5c, 0x9b, 0x95, 0xc9, + 0xdd, 0x49, 0xfd, 0x93, 0xef, 0x86, 0x8b, 0x30, 0x25, 0x80, 0x4a, 0x22, 0x11, 0xdf, 0x76, 0xa5, + 0xab, 0xa8, 0x78, 0xc6, 0x7e, 0x43, 0x44, 0xa2, 0x00, 0x1a, 0xe1, 0x2d, 0x50, 0x21, 0x12, 0xb5, + 0x6b, 0x64, 0xed, 0xd0, 0x03, 0xb9, 0x7f, 0x1a, 0x61, 0x6e, 0x5d, 0xe0, 0x12, 0x9a, 0x81, 0xfa, + 0xa7, 0x69, 0xec, 0xe2, 0xbd, 0x9e, 0xbc, 0xf3, 0x9f, 0x45, 0xea, 0x9f, 0x4d, 0x86, 0xc9, 0x62, + 0xc8, 0x48, 0xa4, 0x9e, 0x42, 0x71, 0xe7, 0x87, 0xf2, 0x3f, 0xf5, 0x7d, 0x2e, 0x6f, 0xb8, 0x9c, + 0x2a, 0x2e, 0x11, 0x27, 0x0f, 0x17, 0x3d, 0xf1, 0xc4, 0xde, 0xfb, 0x7d, 0xcf, 0xcf, 0x43, 0x35, + 0x4f, 0xf1, 0x02, 0x0c, 0x85, 0x0a, 0x9e, 0x78, 0x52, 0xef, 0xe3, 0xa4, 0xb2, 0xc1, 0x7a, 0xa7, + 0x78, 0x1a, 0x52, 0xa4, 0x78, 0x89, 0x47, 0xff, 0xeb, 0x1c, 0x9d, 0x82, 0x17, 0xdf, 0x0c, 0x69, + 0x51, 0xb4, 0xc4, 0xa3, 0xbe, 0x9f, 0xa3, 0x7a, 0x28, 0x04, 0x5d, 0x14, 0x2c, 0xf1, 0xe8, 0x7f, + 0x43, 0xa0, 0x0b, 0x14, 0x82, 0xde, 0xbb, 0x0a, 0xbf, 0xf2, 0xd3, 0x29, 0x9e, 0x74, 0x84, 0xee, + 0xce, 0xc3, 0x00, 0xaf, 0x54, 0xe2, 0xb1, 0x3f, 0xc8, 0x07, 0x17, 0x18, 0xc5, 0x67, 0xa0, 0xaf, + 0x47, 0x85, 0xff, 0x0c, 0x47, 0x65, 0xf0, 0xc5, 0x39, 0x18, 0x0c, 0x54, 0x27, 0xf1, 0xe8, 0x7f, + 0x8b, 0xa3, 0x07, 0xb1, 0x08, 0xeb, 0xbc, 0x3a, 0x89, 0x27, 0xf0, 0x21, 0xc1, 0x3a, 0xc7, 0x20, + 0x6a, 0x13, 0x85, 0x49, 0x3c, 0xf6, 0x87, 0x85, 0xd6, 0x05, 0x4a, 0xf1, 0x39, 0xc8, 0x78, 0xc9, + 0x26, 0x1e, 0xff, 0x23, 0x1c, 0xdf, 0xc7, 0x21, 0x1a, 0x08, 0x24, 0xbb, 0x78, 0x12, 0x3f, 0x2b, + 0x34, 0x10, 0xc0, 0x22, 0xd3, 0x28, 0x5a, 0xc0, 0xc4, 0x53, 0xfa, 0xa8, 0x98, 0x46, 0x91, 0xfa, + 0x85, 0x58, 0x93, 0xc6, 0xfc, 0x78, 0x12, 0x3f, 0x27, 0xac, 0x49, 0xe1, 0x09, 0x1b, 0xd1, 0x8a, + 0x20, 0x9e, 0xc6, 0xdf, 0x16, 0x6c, 0x44, 0x0a, 0x82, 0xe2, 0x1a, 0xa0, 0xd6, 0x6a, 0x20, 0x9e, + 0xde, 0xc7, 0x38, 0xbd, 0xd1, 0x96, 0x62, 0xa0, 0xf8, 0x02, 0x1c, 0x69, 0x5f, 0x09, 0xc4, 0x53, + 0xfd, 0xf8, 0xf7, 0x23, 0x6b, 0xb7, 0x60, 0x21, 0x50, 0xdc, 0xf0, 0x53, 0x4a, 0xb0, 0x0a, 0x88, + 0x27, 0xfb, 0xea, 0xf7, 0xc3, 0x81, 0x3b, 0x58, 0x04, 0x14, 0x67, 0x01, 0xfc, 0x04, 0x1c, 0x4f, + 0xeb, 0x93, 0x9c, 0x56, 0x00, 0x89, 0x4c, 0x0d, 0x9e, 0x7f, 0xe3, 0xf1, 0x6f, 0x8a, 0xa9, 0xc1, + 0x31, 0xc8, 0xd4, 0x10, 0xa9, 0x37, 0x1e, 0xfb, 0x53, 0x62, 0x6a, 0x08, 0x14, 0xe2, 0xd9, 0x81, + 0xec, 0x16, 0x4f, 0xe1, 0x33, 0xc2, 0xb3, 0x03, 0x58, 0xc5, 0x15, 0x18, 0x6d, 0x49, 0x88, 0xf1, + 0xa4, 0x7e, 0x81, 0x93, 0xca, 0x45, 0xf3, 0x61, 0x30, 0x79, 0xf1, 0x64, 0x18, 0x4f, 0xed, 0xb3, + 0x91, 0xe4, 0xc5, 0x73, 0x61, 0xf1, 0x3c, 0xa4, 0x8d, 0x66, 0xbd, 0x4e, 0x26, 0x0f, 0xea, 0x7e, + 0xe6, 0x2f, 0xff, 0x5f, 0x7f, 0xc0, 0xb5, 0x23, 0x10, 0x8a, 0xa7, 0xa1, 0x0f, 0x37, 0xb6, 0x70, + 0x35, 0x0e, 0xf3, 0x3b, 0x3f, 0x10, 0x01, 0x93, 0x40, 0x17, 0x9f, 0x03, 0x60, 0x5b, 0x23, 0xf4, + 0xf5, 0x60, 0x0c, 0xee, 0x7f, 0xfb, 0x01, 0x3f, 0x8d, 0xe3, 0xa3, 0xf8, 0x04, 0xd8, 0xd9, 0x9e, + 0xee, 0x04, 0xbe, 0x1b, 0x26, 0x40, 0x2d, 0x72, 0x0e, 0x06, 0x5e, 0x74, 0x4c, 0xc3, 0x55, 0x6b, + 0x71, 0xd8, 0xff, 0x9d, 0x63, 0x0b, 0x78, 0xa2, 0xb0, 0x86, 0x69, 0x63, 0x57, 0xad, 0x39, 0x71, + 0xb8, 0xff, 0x83, 0xe3, 0x7a, 0x08, 0x04, 0x59, 0x53, 0x1d, 0xb7, 0x17, 0xb9, 0xff, 0x44, 0x20, + 0x0b, 0x04, 0xc2, 0x34, 0xf9, 0xbd, 0x8b, 0xf7, 0xe2, 0x70, 0xbf, 0x27, 0x98, 0xe6, 0xf0, 0xc5, + 0x37, 0x43, 0x86, 0xfc, 0x64, 0x47, 0xec, 0x62, 0x90, 0xff, 0x94, 0x23, 0xfb, 0x18, 0x64, 0x64, + 0xc7, 0xad, 0xba, 0x7a, 0xbc, 0xb2, 0x6f, 0x73, 0x4b, 0x0b, 0xf8, 0xe2, 0x2c, 0x0c, 0x3a, 0x6e, + 0xb5, 0xda, 0xe4, 0xf5, 0x69, 0x0c, 0xfa, 0x9f, 0xfd, 0xc0, 0xdb, 0xb2, 0xf0, 0x70, 0x88, 0xb5, + 0xaf, 0xed, 0xba, 0x96, 0x49, 0x5f, 0x81, 0xc4, 0x51, 0xf8, 0x3e, 0xa7, 0x10, 0x40, 0x29, 0xce, + 0x41, 0x96, 0xc8, 0x62, 0x63, 0x0b, 0xd3, 0xf7, 0x55, 0x31, 0x24, 0xfe, 0x9c, 0x2b, 0x20, 0x84, + 0x54, 0xfa, 0xc9, 0xaf, 0xbe, 0x36, 0x21, 0x7d, 0xe3, 0xb5, 0x09, 0xe9, 0x8f, 0x5e, 0x9b, 0x90, + 0x3e, 0xfc, 0xad, 0x89, 0x43, 0xdf, 0xf8, 0xd6, 0xc4, 0xa1, 0xdf, 0xfb, 0xd6, 0xc4, 0xa1, 0xf6, + 0xdb, 0xc6, 0xb0, 0x60, 0x2e, 0x98, 0x6c, 0xc3, 0xf8, 0x6d, 0x72, 0x68, 0xbb, 0xb8, 0x66, 0xfa, + 0xbb, 0xb5, 0xde, 0x22, 0x07, 0xfe, 0x5c, 0x22, 0x0b, 0xe6, 0xf0, 0x5e, 0xae, 0x6a, 0xec, 0x75, + 0xb8, 0x83, 0x53, 0x68, 0xbb, 0x31, 0x2c, 0xbf, 0x09, 0x92, 0xb3, 0xc6, 0x1e, 0x3a, 0xc6, 0x62, + 0x5e, 0xa5, 0x69, 0xd7, 0xf9, 0xd1, 0xaf, 0x01, 0xf2, 0xbc, 0x69, 0xd7, 0xd1, 0xb8, 0x7f, 0x3e, + 0x53, 0x3a, 0x91, 0xe5, 0x87, 0x2e, 0x8b, 0xa9, 0xef, 0x7d, 0x66, 0xf2, 0x50, 0x69, 0x37, 0x2a, + 0xe1, 0x57, 0x62, 0xa5, 0x4c, 0xcf, 0x1a, 0x7b, 0x54, 0xc8, 0x35, 0xe9, 0x6d, 0x7d, 0x64, 0x0c, + 0x47, 0x6c, 0x6c, 0x4f, 0x44, 0x37, 0xb6, 0x5f, 0xc0, 0xf5, 0xfa, 0x65, 0xc3, 0xbc, 0x66, 0x6c, + 0x10, 0xb0, 0xad, 0x7e, 0x4a, 0xe3, 0x29, 0xf8, 0x9b, 0x09, 0x98, 0x68, 0xd9, 0xc3, 0xe6, 0x96, + 0xef, 0x74, 0x01, 0xa9, 0x08, 0xe9, 0x79, 0xe1, 0x50, 0x79, 0x18, 0x70, 0xb0, 0x66, 0x1a, 0x55, + 0x87, 0x8a, 0x9a, 0x54, 0xc4, 0x23, 0x11, 0xd5, 0x50, 0x0d, 0xd3, 0xe1, 0xc7, 0x23, 0xd9, 0x43, + 0xe9, 0xe7, 0xa4, 0xfd, 0xd9, 0x71, 0x48, 0x8c, 0x24, 0xc4, 0x3c, 0xd9, 0x6d, 0xef, 0x9f, 0xaa, + 0xc0, 0xe3, 0x3f, 0xb0, 0xcf, 0xdf, 0xab, 0x3a, 0x3e, 0x9c, 0x80, 0xc9, 0xa8, 0x3a, 0xc8, 0x3c, + 0x72, 0x5c, 0xb5, 0x61, 0x75, 0xd2, 0xc7, 0x79, 0xc8, 0x6c, 0x08, 0x98, 0x7d, 0x2b, 0xe4, 0xe7, + 0xf7, 0xa9, 0x90, 0x61, 0x6f, 0x28, 0xa1, 0x91, 0x47, 0xe3, 0x35, 0xe2, 0x89, 0x70, 0x00, 0x95, + 0xbc, 0x27, 0x09, 0xc7, 0x34, 0xd3, 0x69, 0x98, 0x4e, 0x85, 0x39, 0x3c, 0x7b, 0xe0, 0xca, 0xc8, + 0x06, 0xbb, 0x7a, 0x78, 0x1d, 0x72, 0x11, 0x86, 0x69, 0x50, 0xa0, 0x1b, 0xc1, 0x34, 0x0e, 0xc7, + 0xa6, 0xce, 0xaf, 0xfd, 0xfb, 0x3e, 0x3a, 0x89, 0x86, 0x3c, 0x44, 0x7a, 0xd2, 0x65, 0x03, 0xc6, + 0xf5, 0x86, 0x55, 0xc7, 0xf4, 0x95, 0x58, 0xc5, 0xeb, 0x8b, 0xa7, 0xf7, 0x75, 0x4e, 0x6f, 0xcc, + 0x47, 0x5f, 0x14, 0xd8, 0xc5, 0x25, 0x18, 0x55, 0x35, 0x0d, 0x5b, 0x21, 0x92, 0x31, 0x01, 0x4b, + 0x30, 0x98, 0xe3, 0x98, 0x1e, 0xb5, 0xd2, 0x73, 0x9d, 0x6c, 0xfb, 0xb6, 0x07, 0x03, 0x46, 0xb3, + 0x71, 0x0d, 0x1b, 0x8f, 0x1b, 0xd8, 0xbd, 0x66, 0xda, 0xbb, 0x5c, 0xbd, 0x8f, 0xb3, 0xa1, 0x84, + 0x11, 0xde, 0x97, 0x84, 0x09, 0xd6, 0x31, 0xb3, 0xa5, 0x3a, 0x78, 0xe6, 0xea, 0x93, 0x5b, 0xd8, + 0x55, 0x9f, 0x9c, 0xd1, 0x4c, 0x5d, 0x4c, 0xd3, 0x31, 0x6e, 0x17, 0xd2, 0x3f, 0xcd, 0xfb, 0x3b, + 0xc4, 0xa9, 0x05, 0x48, 0xcd, 0x99, 0xba, 0x41, 0x3c, 0xb2, 0x8a, 0x0d, 0xb3, 0xc1, 0xa3, 0x14, + 0x7b, 0x40, 0xf7, 0x43, 0xbf, 0xda, 0x30, 0x9b, 0x86, 0xcb, 0xde, 0xe6, 0x95, 0x06, 0xbf, 0x7a, + 0x6b, 0xf2, 0xd0, 0xef, 0xdf, 0x9a, 0x4c, 0x2e, 0x1a, 0xae, 0xc2, 0xbb, 0x8a, 0xa9, 0xd7, 0x3f, + 0x3d, 0x29, 0xc9, 0x97, 0x60, 0x60, 0x1e, 0x6b, 0x07, 0xa1, 0x35, 0x8f, 0xb5, 0x08, 0xad, 0x47, + 0x20, 0xbd, 0x68, 0xb8, 0xec, 0x08, 0xf1, 0xbd, 0x90, 0xd4, 0x0d, 0x76, 0x28, 0x2d, 0x32, 0x3e, + 0x69, 0x27, 0xa0, 0xf3, 0x58, 0xf3, 0x40, 0xab, 0x58, 0x8b, 0x82, 0x12, 0xf2, 0xa4, 0xbd, 0x34, + 0xff, 0x7b, 0xff, 0x79, 0xe2, 0xd0, 0x2b, 0xaf, 0x4d, 0x1c, 0xea, 0x68, 0x89, 0x60, 0x76, 0xe0, + 0x2a, 0xe6, 0x26, 0x70, 0xaa, 0xbb, 0x33, 0x6e, 0x68, 0x2e, 0x7c, 0x3e, 0x05, 0xf7, 0xd2, 0x4b, + 0x21, 0x76, 0x43, 0x37, 0xdc, 0x19, 0xcd, 0xde, 0xb3, 0x5c, 0x9a, 0x4e, 0xcc, 0x6d, 0x6e, 0x85, + 0x51, 0xbf, 0x7b, 0x9a, 0x75, 0x77, 0xb0, 0xc1, 0x36, 0xf4, 0xad, 0x11, 0x3c, 0xa2, 0x38, 0xd7, + 0x74, 0xd5, 0x3a, 0x0f, 0x17, 0xec, 0x81, 0xb4, 0xb2, 0x8b, 0x24, 0x09, 0xd6, 0xaa, 0x8b, 0x3b, + 0x24, 0x75, 0xac, 0x6e, 0xb3, 0x83, 0xbb, 0x49, 0x9a, 0x42, 0xd2, 0xa4, 0x81, 0x9e, 0xd1, 0x1d, + 0x87, 0x3e, 0xb5, 0xc9, 0x5e, 0x39, 0x27, 0x49, 0x6e, 0xa1, 0x0f, 0xf2, 0x65, 0x18, 0xe0, 0xaf, + 0xb9, 0x50, 0x0e, 0x92, 0xbb, 0x78, 0x8f, 0x8e, 0x93, 0x55, 0xc8, 0x4f, 0x34, 0x0d, 0x7d, 0x94, + 0x79, 0x7e, 0x23, 0x21, 0x3f, 0xdd, 0xc2, 0xfd, 0x34, 0x65, 0x52, 0x61, 0x60, 0xf2, 0x25, 0x48, + 0xcf, 0x9b, 0x0d, 0xdd, 0x30, 0xc3, 0xd4, 0x32, 0x8c, 0x1a, 0xe5, 0xd9, 0x6a, 0x72, 0x5b, 0x2b, + 0xec, 0x01, 0x1d, 0x81, 0x7e, 0x76, 0x90, 0x9b, 0xbf, 0x36, 0xe7, 0x4f, 0xf2, 0x1c, 0x0c, 0x50, + 0xda, 0xab, 0x16, 0x42, 0xfc, 0x66, 0x0f, 0x3f, 0x31, 0x4e, 0xc3, 0x02, 0x27, 0x9f, 0xf0, 0x99, + 0x45, 0x90, 0xaa, 0xaa, 0xae, 0xca, 0xe5, 0xa6, 0xbf, 0xe5, 0x67, 0x21, 0xcd, 0x89, 0x38, 0xe8, + 0x14, 0x24, 0x4d, 0xcb, 0xe1, 0x2f, 0xbe, 0x0b, 0x9d, 0x44, 0x59, 0xb5, 0x4a, 0x29, 0xe2, 0x25, + 0x0a, 0x01, 0x2e, 0x29, 0x1d, 0xdd, 0xe2, 0x6c, 0xc0, 0x2d, 0x02, 0x26, 0x0f, 0xfc, 0x64, 0x26, + 0x6d, 0x71, 0x07, 0xcf, 0x59, 0x3e, 0x93, 0x80, 0x89, 0x40, 0xef, 0x55, 0x6c, 0x93, 0xb5, 0x1e, + 0xf3, 0x28, 0xee, 0x2d, 0x28, 0xc0, 0x24, 0xef, 0xef, 0xe0, 0x2e, 0x6f, 0x86, 0xe4, 0xac, 0x65, + 0xa1, 0x02, 0xa4, 0xd9, 0x0b, 0x6e, 0x93, 0xf9, 0x4b, 0x4a, 0xf1, 0x9e, 0x49, 0x9f, 0x63, 0x6e, + 0xbb, 0xd7, 0x54, 0xdb, 0xbb, 0xc2, 0x24, 0x9e, 0xe5, 0x73, 0x90, 0x99, 0x33, 0x0d, 0x07, 0x1b, + 0x4e, 0x93, 0x26, 0xa2, 0xad, 0xba, 0xa9, 0xed, 0x72, 0x0a, 0xec, 0x81, 0x28, 0x5c, 0xb5, 0x2c, + 0x8a, 0x99, 0x52, 0xc8, 0x4f, 0x36, 0x2f, 0x4b, 0xeb, 0x1d, 0x55, 0x74, 0x6e, 0xff, 0x2a, 0xe2, + 0x42, 0x7a, 0x3a, 0xfa, 0x03, 0x09, 0x8e, 0xb7, 0x4e, 0xa8, 0x5d, 0xbc, 0xe7, 0xec, 0x77, 0x3e, + 0x9d, 0x85, 0xcc, 0x1a, 0xbd, 0x47, 0x7c, 0x19, 0xef, 0xa1, 0x02, 0x0c, 0xe0, 0xea, 0xa9, 0xd3, + 0xa7, 0x9f, 0x3c, 0xc7, 0xbc, 0xfd, 0xe2, 0x21, 0x45, 0x34, 0x14, 0xd3, 0x44, 0xaa, 0xd7, 0x3f, + 0x33, 0x29, 0x95, 0xfa, 0x20, 0xe9, 0x34, 0x1b, 0x77, 0xd5, 0x07, 0x5e, 0xed, 0x83, 0xa9, 0x20, + 0x26, 0xcd, 0xc6, 0x57, 0xd5, 0xba, 0x5e, 0x55, 0xfd, 0x1b, 0xde, 0xb9, 0x80, 0x8c, 0x14, 0xa2, + 0xbd, 0x88, 0x85, 0xae, 0x9a, 0x92, 0x7f, 0x5d, 0x82, 0xec, 0x15, 0x41, 0x79, 0x1d, 0xbb, 0xe8, + 0x3c, 0x80, 0x37, 0x92, 0x98, 0x16, 0xf7, 0x4c, 0x47, 0xc7, 0x9a, 0xf6, 0x70, 0x94, 0x00, 0x38, + 0x7a, 0x86, 0x3a, 0x9a, 0x65, 0x3a, 0xfc, 0x7e, 0x4b, 0x0c, 0xaa, 0x07, 0x8c, 0x1e, 0x03, 0x44, + 0x23, 0x58, 0xe5, 0xaa, 0xe9, 0xea, 0x46, 0xad, 0x62, 0x99, 0xd7, 0xf8, 0x65, 0xc0, 0xa4, 0x92, + 0xa3, 0x3d, 0x57, 0x68, 0xc7, 0x1a, 0x69, 0x27, 0x4c, 0x67, 0x3c, 0x2a, 0xa4, 0x76, 0x52, 0xab, + 0x55, 0x1b, 0x3b, 0x0e, 0x0f, 0x52, 0xe2, 0x11, 0x9d, 0x87, 0x01, 0xab, 0xb9, 0x55, 0x11, 0x11, + 0x61, 0xf0, 0xd4, 0xf1, 0x76, 0xf3, 0x5b, 0xd8, 0x9f, 0xcf, 0xf0, 0x7e, 0xab, 0xb9, 0x45, 0xbc, + 0xe1, 0x3e, 0xc8, 0xb6, 0x61, 0x66, 0xf0, 0xaa, 0xcf, 0x07, 0xbd, 0x9e, 0xce, 0x25, 0xa8, 0x58, + 0xb6, 0x6e, 0xda, 0xba, 0xbb, 0x47, 0x4f, 0xa7, 0x24, 0x95, 0x9c, 0xe8, 0x58, 0xe3, 0xed, 0xf2, + 0x2e, 0x8c, 0xac, 0xd3, 0xda, 0xc1, 0xe7, 0xfc, 0xb4, 0xcf, 0x9f, 0x14, 0xcf, 0x5f, 0x47, 0xce, + 0x12, 0x2d, 0x9c, 0x95, 0x9e, 0xef, 0xe8, 0x9d, 0xcf, 0xec, 0xdf, 0x3b, 0xc3, 0xd9, 0xec, 0x4f, + 0x8e, 0x85, 0x26, 0x1f, 0x2f, 0x15, 0x03, 0xe1, 0xa9, 0x57, 0xc7, 0x8c, 0x2b, 0x99, 0x0b, 0xdd, + 0x93, 0x66, 0x21, 0x26, 0x4c, 0x16, 0x62, 0xa7, 0x90, 0x7c, 0x0e, 0x86, 0xd6, 0x54, 0xdb, 0x5d, + 0xc7, 0xee, 0x45, 0xac, 0x56, 0xb1, 0x1d, 0xce, 0xaa, 0x43, 0x22, 0xab, 0x22, 0x48, 0xd1, 0xd4, + 0xc9, 0xb2, 0x0a, 0xfd, 0x2d, 0xef, 0x40, 0x8a, 0x9e, 0x50, 0xf3, 0x32, 0x2e, 0xc7, 0x60, 0x19, + 0x97, 0xc4, 0xca, 0x3d, 0x17, 0x3b, 0x62, 0xc1, 0x46, 0x1f, 0xd0, 0xd3, 0x22, 0x6f, 0x26, 0xbb, + 0xe7, 0x4d, 0xee, 0x88, 0x3c, 0x7b, 0xd6, 0x61, 0xa0, 0x44, 0x42, 0xed, 0xe2, 0xbc, 0xc7, 0x88, + 0xe4, 0x33, 0x82, 0x96, 0x61, 0xc4, 0x52, 0x6d, 0x97, 0x1e, 0xcd, 0xdf, 0xa1, 0x52, 0x70, 0x5f, + 0x9f, 0x6c, 0x9d, 0x79, 0x21, 0x61, 0xf9, 0x28, 0x43, 0x56, 0xb0, 0x51, 0xfe, 0xe3, 0x14, 0xf4, + 0x73, 0x65, 0xbc, 0x19, 0x06, 0xb8, 0x5a, 0xb9, 0x77, 0xde, 0x3b, 0xdd, 0x9a, 0x78, 0xa6, 0xbd, + 0x04, 0xc1, 0xe9, 0x09, 0x1c, 0xf4, 0x10, 0xa4, 0xb5, 0x1d, 0x55, 0x37, 0x2a, 0x7a, 0x55, 0x94, + 0x71, 0xaf, 0xdd, 0x9a, 0x1c, 0x98, 0x23, 0x6d, 0x8b, 0xf3, 0xca, 0x00, 0xed, 0x5c, 0xac, 0x92, + 0x4c, 0xbf, 0x83, 0xf5, 0xda, 0x8e, 0xcb, 0x67, 0x18, 0x7f, 0x42, 0x67, 0x21, 0x45, 0x1c, 0x82, + 0xdf, 0xdc, 0x2a, 0xb4, 0x14, 0xd3, 0xde, 0x8a, 0xa6, 0x94, 0x26, 0x03, 0x7f, 0xf8, 0x0f, 0x27, + 0x25, 0x85, 0x62, 0xa0, 0x39, 0x18, 0xaa, 0xab, 0x8e, 0x5b, 0xa1, 0x19, 0x8a, 0x0c, 0xdf, 0x47, + 0x49, 0x1c, 0x6b, 0x55, 0x08, 0x57, 0x2c, 0x67, 0x7d, 0x90, 0x60, 0xb1, 0xa6, 0x2a, 0x3a, 0x01, + 0x39, 0x4a, 0x44, 0x33, 0x1b, 0x0d, 0xdd, 0x65, 0xb5, 0x53, 0x3f, 0xd5, 0xfb, 0x30, 0x69, 0x9f, + 0xa3, 0xcd, 0xb4, 0x82, 0xba, 0x07, 0x32, 0xf4, 0xaa, 0x08, 0x05, 0x61, 0xc7, 0x22, 0xd3, 0xa4, + 0x81, 0x76, 0x3e, 0x0c, 0x23, 0x7e, 0x7c, 0x64, 0x20, 0x69, 0x46, 0xc5, 0x6f, 0xa6, 0x80, 0x4f, + 0xc0, 0xb8, 0x81, 0xaf, 0xd3, 0x83, 0x9a, 0x21, 0xe8, 0x0c, 0x85, 0x46, 0xa4, 0xef, 0x4a, 0x18, + 0xe3, 0x41, 0x18, 0xd6, 0x84, 0xf2, 0x19, 0x2c, 0x50, 0xd8, 0x21, 0xaf, 0x95, 0x82, 0x1d, 0x83, + 0xb4, 0x6a, 0x59, 0x0c, 0x60, 0x90, 0xc7, 0x47, 0xcb, 0xa2, 0x5d, 0x27, 0x61, 0x94, 0xca, 0x68, + 0x63, 0xa7, 0x59, 0x77, 0x39, 0x91, 0x2c, 0x85, 0x19, 0x21, 0x1d, 0x0a, 0x6b, 0xa7, 0xb0, 0xf7, + 0xc3, 0x10, 0xbe, 0xaa, 0x57, 0xb1, 0xa1, 0x61, 0x06, 0x37, 0x44, 0xe1, 0xb2, 0xa2, 0x91, 0x02, + 0x3d, 0x02, 0x5e, 0xdc, 0xab, 0x88, 0x98, 0x3c, 0xcc, 0xe8, 0x89, 0xf6, 0x59, 0xd6, 0x2c, 0xe7, + 0x21, 0x35, 0xaf, 0xba, 0x2a, 0x29, 0x20, 0xdc, 0xeb, 0x2c, 0xd1, 0x64, 0x15, 0xf2, 0x53, 0x7e, + 0x3d, 0x01, 0xa9, 0x2b, 0xa6, 0x8b, 0xd1, 0x53, 0x81, 0x02, 0x6f, 0xb8, 0x9d, 0x3f, 0xaf, 0xeb, + 0x35, 0x03, 0x57, 0x97, 0x9d, 0x5a, 0xe0, 0xbe, 0xb6, 0xef, 0x4e, 0x89, 0x90, 0x3b, 0x8d, 0x43, + 0x9f, 0x6d, 0x36, 0x8d, 0xaa, 0x38, 0x51, 0x48, 0x1f, 0x50, 0x19, 0xd2, 0x9e, 0x97, 0xa4, 0xe2, + 0xbc, 0x64, 0x84, 0x78, 0x09, 0xf1, 0x61, 0xde, 0xa0, 0x0c, 0x6c, 0x71, 0x67, 0x29, 0x41, 0xc6, + 0x0b, 0x5e, 0xdc, 0xdb, 0x7a, 0x73, 0x58, 0x1f, 0x8d, 0x24, 0x13, 0xcf, 0xf6, 0x9e, 0xf2, 0x98, + 0xc7, 0xe5, 0xbc, 0x0e, 0xae, 0xbd, 0x90, 0x5b, 0xf1, 0xbb, 0xe3, 0x03, 0x54, 0x2e, 0xdf, 0xad, + 0xd8, 0xfd, 0xf1, 0xe3, 0x90, 0x71, 0xf4, 0x9a, 0xa1, 0xba, 0x4d, 0x1b, 0x73, 0xcf, 0xf3, 0x1b, + 0xe4, 0xaf, 0x48, 0xd0, 0xcf, 0x3c, 0x39, 0xa0, 0x37, 0xa9, 0xbd, 0xde, 0x12, 0x9d, 0xf4, 0x96, + 0x3c, 0xb8, 0xde, 0x66, 0x01, 0x3c, 0x66, 0x1c, 0x7e, 0xf7, 0xb7, 0x4d, 0xc5, 0xc0, 0x58, 0x5c, + 0xd7, 0x6b, 0x7c, 0xa2, 0x06, 0x90, 0xe4, 0x3f, 0x90, 0x48, 0x91, 0xca, 0xfb, 0xd1, 0x2c, 0x0c, + 0x09, 0xbe, 0x2a, 0xdb, 0x75, 0xb5, 0xc6, 0x7d, 0xe7, 0xde, 0x8e, 0xcc, 0x5d, 0xa8, 0xab, 0x35, + 0x65, 0x90, 0xf3, 0x43, 0x1e, 0xda, 0xdb, 0x21, 0xd1, 0xc1, 0x0e, 0x21, 0xc3, 0x27, 0x0f, 0x66, + 0xf8, 0x90, 0x89, 0x52, 0x51, 0x13, 0x7d, 0x31, 0x41, 0x17, 0x2b, 0x96, 0xe9, 0xa8, 0xf5, 0x1f, + 0xc5, 0x8c, 0xb8, 0x07, 0x32, 0x96, 0x59, 0xaf, 0xb0, 0x1e, 0x76, 0xd2, 0x36, 0x6d, 0x99, 0x75, + 0xa5, 0xc5, 0xec, 0x7d, 0x77, 0x68, 0xba, 0xf4, 0xdf, 0x01, 0xad, 0x0d, 0x44, 0xb5, 0x66, 0x43, + 0x96, 0xa9, 0x82, 0xe7, 0xb2, 0x27, 0x88, 0x0e, 0x68, 0x72, 0x94, 0x5a, 0x73, 0x2f, 0x63, 0x9b, + 0x41, 0x2a, 0x1c, 0x8e, 0x60, 0xb0, 0xd0, 0xdf, 0x6e, 0x95, 0x1b, 0x74, 0x4b, 0x85, 0xc3, 0xc9, + 0x3f, 0x2f, 0x01, 0x2c, 0x11, 0xcd, 0x52, 0x79, 0x49, 0x16, 0x72, 0x28, 0x0b, 0x95, 0xd0, 0xc8, + 0x13, 0x9d, 0x8c, 0xc6, 0xc7, 0xcf, 0x3a, 0x41, 0xbe, 0xe7, 0x60, 0xc8, 0x77, 0x46, 0x07, 0x0b, + 0x66, 0x26, 0xba, 0x54, 0xd5, 0xeb, 0xd8, 0x55, 0xb2, 0x57, 0x03, 0x4f, 0xf2, 0xbf, 0x94, 0x20, + 0x43, 0x79, 0x5a, 0xc6, 0xae, 0x1a, 0xb2, 0xa1, 0x74, 0x70, 0x1b, 0xde, 0x0b, 0xc0, 0xc8, 0x38, + 0xfa, 0xcb, 0x98, 0x7b, 0x56, 0x86, 0xb6, 0xac, 0xeb, 0x2f, 0x63, 0x74, 0xc6, 0x53, 0x78, 0xb2, + 0xbb, 0xc2, 0x45, 0xd5, 0xcd, 0xd5, 0x7e, 0x14, 0x06, 0xe8, 0x27, 0x70, 0xae, 0x3b, 0xbc, 0x90, + 0xee, 0x37, 0x9a, 0x8d, 0x8d, 0xeb, 0x8e, 0xfc, 0x22, 0x0c, 0x6c, 0x5c, 0x67, 0x7b, 0x1f, 0xf7, + 0x40, 0xc6, 0x36, 0x4d, 0x9e, 0x93, 0x59, 0x2d, 0x94, 0x26, 0x0d, 0x34, 0x05, 0x89, 0xf5, 0x7e, + 0xc2, 0x5f, 0xef, 0xfb, 0x1b, 0x16, 0xc9, 0x9e, 0x36, 0x2c, 0x4e, 0xfe, 0x07, 0x09, 0x06, 0x03, + 0xf1, 0x01, 0x3d, 0x09, 0x87, 0x4b, 0x4b, 0xab, 0x73, 0x97, 0x2b, 0x8b, 0xf3, 0x95, 0x0b, 0x4b, + 0xb3, 0x0b, 0xfe, 0x5d, 0x92, 0xc2, 0x91, 0x1b, 0x37, 0xa7, 0x50, 0x00, 0x76, 0xd3, 0xd8, 0x35, + 0xcc, 0x6b, 0x06, 0x9a, 0x81, 0xf1, 0x30, 0xca, 0x6c, 0x69, 0xbd, 0xbc, 0xb2, 0x91, 0x93, 0x0a, + 0x87, 0x6f, 0xdc, 0x9c, 0x1a, 0x0d, 0x60, 0xcc, 0x6e, 0x39, 0xd8, 0x70, 0x5b, 0x11, 0xe6, 0x56, + 0x97, 0x97, 0x17, 0x37, 0x72, 0x89, 0x16, 0x04, 0x1e, 0xb0, 0x1f, 0x81, 0xd1, 0x30, 0xc2, 0xca, + 0xe2, 0x52, 0x2e, 0x59, 0x40, 0x37, 0x6e, 0x4e, 0x0d, 0x07, 0xa0, 0x57, 0xf4, 0x7a, 0x21, 0xfd, + 0x81, 0xcf, 0x4e, 0x1c, 0xfa, 0xa5, 0x5f, 0x9c, 0x90, 0x88, 0x64, 0x43, 0xa1, 0x18, 0x81, 0x1e, + 0x83, 0xa3, 0xeb, 0x8b, 0x0b, 0x2b, 0xe5, 0xf9, 0xca, 0xf2, 0xfa, 0x42, 0x85, 0x7d, 0x44, 0xc3, + 0x93, 0x6e, 0xe4, 0xc6, 0xcd, 0xa9, 0x41, 0x2e, 0x52, 0x27, 0xe8, 0x35, 0xa5, 0x7c, 0x65, 0x75, + 0xa3, 0x9c, 0x93, 0x18, 0xf4, 0x9a, 0x8d, 0xaf, 0x9a, 0x2e, 0xfb, 0x46, 0xd6, 0x13, 0x70, 0xac, + 0x0d, 0xb4, 0x27, 0xd8, 0xe8, 0x8d, 0x9b, 0x53, 0x43, 0x6b, 0x36, 0x66, 0xf3, 0x87, 0x62, 0x4c, + 0x43, 0xbe, 0x15, 0x63, 0x75, 0x6d, 0x75, 0x7d, 0x76, 0x29, 0x37, 0x55, 0xc8, 0xdd, 0xb8, 0x39, + 0x95, 0x15, 0xc1, 0x90, 0xc0, 0xfb, 0x92, 0xdd, 0xcd, 0x15, 0xcf, 0x9f, 0x3d, 0x0e, 0x0f, 0xf0, + 0x3d, 0x3e, 0xc7, 0x55, 0x77, 0x75, 0xa3, 0xe6, 0xed, 0xa4, 0xf2, 0x67, 0xbe, 0xf2, 0x39, 0xc2, + 0x37, 0x53, 0x45, 0x6b, 0xd7, 0xfd, 0xd4, 0x42, 0xe7, 0x37, 0x47, 0x85, 0x98, 0x97, 0x2b, 0xf1, + 0x4b, 0xa7, 0xce, 0x7b, 0xef, 0x85, 0x98, 0x1d, 0xe1, 0x42, 0xd7, 0xc5, 0x9d, 0xfc, 0x41, 0x09, + 0x86, 0x2f, 0xea, 0x8e, 0x6b, 0xda, 0xba, 0xa6, 0xd6, 0xe9, 0x0d, 0x92, 0x33, 0xbd, 0xc6, 0xd6, + 0xc8, 0x54, 0x7f, 0x0e, 0xfa, 0xaf, 0xaa, 0x75, 0x16, 0xd4, 0x92, 0xf4, 0x8b, 0x17, 0xed, 0xd5, + 0xe7, 0x87, 0x36, 0x41, 0x80, 0xa1, 0xc9, 0xbf, 0x92, 0x80, 0x11, 0x3a, 0x19, 0x1c, 0xf6, 0x89, + 0x23, 0xb2, 0xc6, 0x2a, 0x41, 0xca, 0x56, 0x5d, 0xbe, 0x29, 0x58, 0x9a, 0xe6, 0x3b, 0xbb, 0x0f, + 0xc5, 0xef, 0xd6, 0x4e, 0xcf, 0x63, 0x4d, 0xa1, 0xb8, 0xe8, 0x1d, 0x90, 0x6e, 0xa8, 0xd7, 0x2b, + 0x94, 0x0e, 0x5b, 0xb9, 0xcc, 0xee, 0x8f, 0xce, 0xed, 0x5b, 0x93, 0x23, 0x7b, 0x6a, 0xa3, 0x5e, + 0x94, 0x05, 0x1d, 0x59, 0x19, 0x68, 0xa8, 0xd7, 0x09, 0x8b, 0xc8, 0x82, 0x11, 0xd2, 0xaa, 0xed, + 0xa8, 0x46, 0x0d, 0xb3, 0x41, 0xe8, 0x16, 0x67, 0xe9, 0xe2, 0xbe, 0x07, 0x39, 0xe2, 0x0f, 0x12, + 0x20, 0x27, 0x2b, 0x43, 0x0d, 0xf5, 0xfa, 0x1c, 0x6d, 0x20, 0x23, 0x16, 0xd3, 0x1f, 0xfb, 0xf4, + 0xe4, 0x21, 0xba, 0x5b, 0xfe, 0x4d, 0x09, 0xc0, 0xd7, 0x18, 0x7a, 0x07, 0xe4, 0x34, 0xef, 0x89, + 0xe2, 0x3a, 0xdc, 0x86, 0x0f, 0x77, 0xb2, 0x45, 0x44, 0xdf, 0x2c, 0x37, 0x7f, 0xe3, 0xd6, 0xa4, + 0xa4, 0x8c, 0x68, 0x11, 0x53, 0xbc, 0x1d, 0x06, 0x9b, 0x56, 0x55, 0x75, 0x71, 0x85, 0xae, 0xe3, + 0x12, 0xb1, 0x79, 0x7e, 0x82, 0xd0, 0xba, 0x7d, 0x6b, 0x12, 0x31, 0xb1, 0x02, 0xc8, 0x32, 0xcd, + 0xfe, 0xc0, 0x5a, 0x08, 0x42, 0x40, 0xa6, 0xaf, 0x49, 0x30, 0x38, 0x1f, 0x38, 0xc9, 0x95, 0x87, + 0x81, 0x86, 0x69, 0xe8, 0xbb, 0xdc, 0x1f, 0x33, 0x8a, 0x78, 0x44, 0x05, 0x48, 0xb3, 0x4b, 0x75, + 0xee, 0x9e, 0xd8, 0xea, 0x14, 0xcf, 0x04, 0xeb, 0x1a, 0xde, 0x72, 0x74, 0x61, 0x0d, 0x45, 0x3c, + 0xa2, 0x0b, 0x90, 0x73, 0xb0, 0xd6, 0xb4, 0x75, 0x77, 0xaf, 0xa2, 0x99, 0x86, 0xab, 0x6a, 0x2e, + 0xbb, 0x9e, 0x55, 0xba, 0xe7, 0xf6, 0xad, 0xc9, 0xa3, 0x8c, 0xd7, 0x28, 0x84, 0xac, 0x8c, 0x88, + 0xa6, 0x39, 0xd6, 0x42, 0x46, 0xa8, 0x62, 0x57, 0xd5, 0xeb, 0x4e, 0x9e, 0xbd, 0xf8, 0x11, 0x8f, + 0x01, 0x59, 0xbe, 0x30, 0x10, 0xdc, 0xd8, 0xba, 0x00, 0x39, 0xd3, 0xc2, 0x76, 0xa8, 0x10, 0x95, + 0xa2, 0x23, 0x47, 0x21, 0x64, 0x65, 0x44, 0x34, 0x89, 0x22, 0xd5, 0x25, 0x66, 0x16, 0x0b, 0x45, + 0xab, 0xb9, 0xe5, 0xef, 0x87, 0x8d, 0xb7, 0x58, 0x63, 0xd6, 0xd8, 0x2b, 0x3d, 0xe5, 0x53, 0x8f, + 0xe2, 0xc9, 0x5f, 0xff, 0xd2, 0xe3, 0xe3, 0xdc, 0x35, 0xfc, 0xfd, 0xa9, 0xcb, 0x78, 0x8f, 0x98, + 0x9f, 0x83, 0xae, 0x51, 0x48, 0x52, 0x76, 0xbe, 0xa8, 0xea, 0x75, 0x71, 0xcd, 0x58, 0xe1, 0x4f, + 0xa8, 0x08, 0xfd, 0x8e, 0xab, 0xba, 0x4d, 0x87, 0x7f, 0xd4, 0x4b, 0xee, 0xe4, 0x6a, 0x25, 0xd3, + 0xa8, 0xae, 0x53, 0x48, 0x85, 0x63, 0xa0, 0x0b, 0xd0, 0xef, 0x9a, 0xbb, 0xd8, 0xe0, 0x2a, 0xdc, + 0xd7, 0xfc, 0xa6, 0xef, 0xa1, 0x18, 0x36, 0xd1, 0x48, 0x15, 0xd7, 0x71, 0x8d, 0x95, 0x55, 0x3b, + 0x2a, 0x59, 0x7d, 0xd0, 0x6f, 0x7b, 0x95, 0x16, 0xf7, 0x3d, 0x09, 0xb9, 0xa6, 0xa2, 0xf4, 0x64, + 0x65, 0xc4, 0x6b, 0x5a, 0xa7, 0x2d, 0xe8, 0x72, 0xe8, 0xc8, 0x21, 0xff, 0x00, 0xde, 0xfd, 0x9d, + 0xc4, 0x0f, 0xf8, 0xb4, 0xd8, 0x9f, 0x08, 0x1e, 0x58, 0xbc, 0x00, 0xb9, 0xa6, 0xb1, 0x65, 0x1a, + 0xf4, 0x2e, 0x20, 0xaf, 0xef, 0xc9, 0xfa, 0x2e, 0x19, 0x74, 0x8e, 0x28, 0x84, 0xac, 0x8c, 0x78, + 0x4d, 0x17, 0xd9, 0x2a, 0xa0, 0x0a, 0xc3, 0x3e, 0x14, 0x9d, 0xa8, 0x99, 0xd8, 0x89, 0x7a, 0x1f, + 0x9f, 0xa8, 0x87, 0xa3, 0xa3, 0xf8, 0x73, 0x75, 0xc8, 0x6b, 0x24, 0x68, 0xe8, 0x22, 0x80, 0x1f, + 0x1e, 0xe8, 0x3e, 0xc5, 0x60, 0x67, 0xc3, 0xfb, 0x31, 0x46, 0xac, 0xf7, 0x7c, 0x5c, 0xf4, 0x2e, + 0x18, 0x6b, 0xe8, 0x46, 0xc5, 0xc1, 0xf5, 0xed, 0x0a, 0x57, 0x30, 0x21, 0x49, 0xbf, 0xe5, 0x52, + 0x5a, 0xda, 0x9f, 0x3f, 0xdc, 0xbe, 0x35, 0x59, 0xe0, 0x21, 0xb4, 0x95, 0xa4, 0xac, 0x8c, 0x36, + 0x74, 0x63, 0x1d, 0xd7, 0xb7, 0xe7, 0xbd, 0xb6, 0x62, 0xf6, 0x03, 0x9f, 0x9e, 0x3c, 0xc4, 0xa7, + 0xeb, 0x21, 0xf9, 0x0c, 0xdd, 0x3b, 0xe7, 0xd3, 0x0c, 0x3b, 0x64, 0x4d, 0xa2, 0x8a, 0x07, 0xba, + 0xa3, 0x91, 0x51, 0xfc, 0x06, 0x36, 0xcd, 0x5f, 0xf9, 0x4f, 0x53, 0x92, 0xfc, 0x05, 0x09, 0xfa, + 0xe7, 0xaf, 0xac, 0xa9, 0xba, 0x8d, 0x16, 0x61, 0xd4, 0xf7, 0x9c, 0xf0, 0x24, 0x3f, 0x7e, 0xfb, + 0xd6, 0x64, 0x3e, 0xea, 0x5c, 0xde, 0x2c, 0xf7, 0x1d, 0x58, 0x4c, 0xf3, 0xc5, 0x4e, 0x0b, 0xd7, + 0x10, 0xa9, 0x16, 0x10, 0xb9, 0x75, 0x59, 0x1b, 0x11, 0xb3, 0x0c, 0x03, 0x8c, 0x5b, 0x07, 0x15, + 0xa1, 0xcf, 0x22, 0x3f, 0xf8, 0x8b, 0x81, 0x89, 0x8e, 0xce, 0x4b, 0xe1, 0xbd, 0x8d, 0x4c, 0x82, + 0x22, 0x7f, 0x24, 0x01, 0x30, 0x7f, 0xe5, 0xca, 0x86, 0xad, 0x5b, 0x75, 0xec, 0xde, 0x49, 0xc9, + 0x37, 0xe0, 0x70, 0x60, 0x95, 0x64, 0x6b, 0x11, 0xe9, 0xa7, 0x6e, 0xdf, 0x9a, 0x3c, 0x1e, 0x95, + 0x3e, 0x00, 0x26, 0x2b, 0x63, 0xfe, 0x7a, 0xc9, 0xd6, 0xda, 0x52, 0xad, 0x3a, 0xae, 0x47, 0x35, + 0xd9, 0x99, 0x6a, 0x00, 0x2c, 0x48, 0x75, 0xde, 0x71, 0xdb, 0xab, 0x76, 0x1d, 0x06, 0x7d, 0x95, + 0x38, 0x68, 0x1e, 0xd2, 0x2e, 0xff, 0xcd, 0x35, 0x2c, 0x77, 0xd6, 0xb0, 0x40, 0xe3, 0x5a, 0xf6, + 0x30, 0xe5, 0xbf, 0x90, 0x00, 0x7c, 0x9f, 0xfd, 0xf1, 0x74, 0x31, 0x12, 0xca, 0x79, 0xe0, 0x4d, + 0x1e, 0xa8, 0x54, 0xe3, 0xd8, 0x11, 0x7d, 0xfe, 0x74, 0x02, 0xc6, 0x36, 0x45, 0xe4, 0xf9, 0xb1, + 0xd7, 0xc1, 0x1a, 0x0c, 0x60, 0xc3, 0xb5, 0x75, 0xaa, 0x04, 0x62, 0xed, 0x27, 0x3a, 0x59, 0xbb, + 0x8d, 0x4c, 0xf4, 0x63, 0x36, 0x62, 0xd3, 0x9d, 0x93, 0x89, 0x68, 0xe3, 0x43, 0x49, 0xc8, 0x77, + 0xc2, 0x44, 0x73, 0x30, 0xa2, 0xd9, 0x98, 0x36, 0x54, 0x82, 0x3b, 0x7f, 0xa5, 0x82, 0x5f, 0x59, + 0x46, 0x00, 0x64, 0x65, 0x58, 0xb4, 0xf0, 0xec, 0x51, 0x03, 0x52, 0xf6, 0x11, 0xb7, 0x23, 0x50, + 0x3d, 0xd6, 0x79, 0x32, 0x4f, 0x1f, 0x62, 0x90, 0x30, 0x01, 0x96, 0x3f, 0x86, 0xfd, 0x56, 0x9a, + 0x40, 0x5e, 0x82, 0x11, 0xdd, 0xd0, 0x5d, 0x5d, 0xad, 0x57, 0xb6, 0xd4, 0xba, 0x6a, 0x68, 0x07, + 0xa9, 0x9a, 0x59, 0xc8, 0xe7, 0xc3, 0x46, 0xc8, 0xc9, 0xca, 0x30, 0x6f, 0x29, 0xb1, 0x06, 0x74, + 0x11, 0x06, 0xc4, 0x50, 0xa9, 0x03, 0x55, 0x1b, 0x02, 0x3d, 0x50, 0xe0, 0xfd, 0x4c, 0x12, 0x46, + 0x15, 0x5c, 0xfd, 0xff, 0xa6, 0xd8, 0x9f, 0x29, 0x96, 0x01, 0xd8, 0x74, 0x27, 0x01, 0xf6, 0x00, + 0xd6, 0x20, 0x01, 0x23, 0xc3, 0x28, 0xcc, 0x3b, 0x6e, 0xc0, 0x1e, 0xb7, 0x12, 0x90, 0x0d, 0xda, + 0xe3, 0xaf, 0x68, 0x56, 0x42, 0x8b, 0x7e, 0x24, 0x4a, 0xf1, 0x6f, 0x80, 0x76, 0x88, 0x44, 0x2d, + 0xde, 0xdb, 0x3d, 0x04, 0xfd, 0xcf, 0x04, 0xf4, 0xaf, 0xa9, 0xb6, 0xda, 0x70, 0x90, 0xd6, 0x52, + 0x69, 0x8a, 0xed, 0xc7, 0x96, 0x0f, 0x38, 0xf3, 0xdd, 0x8e, 0x98, 0x42, 0xf3, 0x63, 0x6d, 0x0a, + 0xcd, 0x9f, 0x80, 0x61, 0xb2, 0x1c, 0x0e, 0x1c, 0x61, 0x20, 0xda, 0x1e, 0x2a, 0x1d, 0xf3, 0xa9, + 0x84, 0xfb, 0xd9, 0x6a, 0xf9, 0x4a, 0xf0, 0x0c, 0xc3, 0x20, 0x81, 0xf0, 0x03, 0x33, 0x41, 0x3f, + 0xe2, 0x2f, 0x4b, 0x03, 0x9d, 0xb2, 0x02, 0x0d, 0xf5, 0x7a, 0x99, 0x3d, 0xa0, 0x25, 0x40, 0x3b, + 0xde, 0xce, 0x48, 0xc5, 0x57, 0x27, 0xc1, 0xbf, 0xf7, 0xf6, 0xad, 0xc9, 0x63, 0x0c, 0xbf, 0x15, + 0x46, 0x56, 0x46, 0xfd, 0x46, 0x41, 0xed, 0x69, 0x00, 0x22, 0x57, 0x85, 0x1d, 0x8f, 0x63, 0xcb, + 0x9d, 0xc3, 0xb7, 0x6f, 0x4d, 0x8e, 0x32, 0x2a, 0x7e, 0x9f, 0xac, 0x64, 0xc8, 0xc3, 0x3c, 0xf9, + 0x1d, 0xf0, 0xec, 0xcf, 0x4a, 0x80, 0xfc, 0x90, 0xaf, 0x60, 0xc7, 0x22, 0xeb, 0x33, 0x52, 0x88, + 0x07, 0xaa, 0x66, 0xa9, 0x7b, 0x21, 0xee, 0xe3, 0x8b, 0x42, 0x3c, 0x30, 0x53, 0xce, 0xf9, 0xe1, + 0x31, 0xc1, 0xed, 0xd8, 0xe6, 0x2c, 0xe1, 0xf4, 0x9c, 0xa9, 0x0b, 0xec, 0x96, 0x78, 0x78, 0x48, + 0xfe, 0x37, 0x12, 0x1c, 0x6b, 0xf1, 0x28, 0x8f, 0xd9, 0xbf, 0x06, 0xc8, 0x0e, 0x74, 0xf2, 0xef, + 0xb9, 0x31, 0xa6, 0xf7, 0xed, 0xa0, 0xa3, 0x76, 0x4b, 0xdc, 0xbd, 0x73, 0x11, 0x9e, 0x1d, 0x46, + 0xfc, 0x17, 0x12, 0x8c, 0x07, 0x87, 0xf7, 0x04, 0x59, 0x81, 0x6c, 0x70, 0x74, 0x2e, 0xc2, 0x03, + 0xbd, 0x88, 0xc0, 0xb9, 0x0f, 0xe1, 0xa3, 0xe7, 0xfd, 0xe9, 0xca, 0xf6, 0xce, 0x9e, 0xec, 0x59, + 0x1b, 0x82, 0xa7, 0xe8, 0xb4, 0x4d, 0x51, 0x7b, 0xfc, 0x1f, 0x09, 0x52, 0x6b, 0xa6, 0x59, 0x47, + 0x26, 0x8c, 0x1a, 0xa6, 0x5b, 0x21, 0x9e, 0x85, 0xab, 0x15, 0xbe, 0xe8, 0x66, 0x71, 0x70, 0x6e, + 0x7f, 0x4a, 0xfa, 0xce, 0xad, 0xc9, 0x56, 0x52, 0xca, 0x88, 0x61, 0xba, 0x25, 0xda, 0xb2, 0xc1, + 0x96, 0xe4, 0xef, 0x82, 0xa1, 0xf0, 0x60, 0x2c, 0x4a, 0xbe, 0xb0, 0xef, 0xc1, 0xc2, 0x64, 0x6e, + 0xdf, 0x9a, 0x1c, 0xf7, 0x67, 0x8c, 0xd7, 0x2c, 0x2b, 0xd9, 0xad, 0xc0, 0xe8, 0xec, 0x78, 0xd7, + 0xf7, 0x3e, 0x3d, 0x29, 0x9d, 0xfc, 0xb2, 0x04, 0xe0, 0xef, 0x3c, 0xa0, 0xc7, 0xe0, 0x68, 0x69, + 0x75, 0x65, 0xbe, 0xb2, 0xbe, 0x31, 0xbb, 0xb1, 0xb9, 0x5e, 0xd9, 0x5c, 0x59, 0x5f, 0x2b, 0xcf, + 0x2d, 0x5e, 0x58, 0x2c, 0xcf, 0xfb, 0xdb, 0xe3, 0x8e, 0x85, 0x35, 0x7d, 0x5b, 0xc7, 0x55, 0xf4, + 0x10, 0x8c, 0x87, 0xa1, 0xc9, 0x53, 0x79, 0x3e, 0x27, 0x15, 0xb2, 0x37, 0x6e, 0x4e, 0xa5, 0x59, + 0x2d, 0x86, 0xab, 0xe8, 0x04, 0x1c, 0x6e, 0x85, 0x5b, 0x5c, 0x59, 0xc8, 0x25, 0x0a, 0x43, 0x37, + 0x6e, 0x4e, 0x65, 0xbc, 0xa2, 0x0d, 0xc9, 0x80, 0x82, 0x90, 0x9c, 0x5e, 0xb2, 0x00, 0x37, 0x6e, + 0x4e, 0xf5, 0x33, 0x05, 0x16, 0x52, 0x1f, 0xf8, 0xec, 0xc4, 0xa1, 0xd2, 0x85, 0x8e, 0x1b, 0xe0, + 0x8f, 0x75, 0xd5, 0xdd, 0x75, 0x6f, 0x53, 0x3b, 0xbc, 0xeb, 0xfd, 0xa7, 0x03, 0x1d, 0x77, 0xbd, + 0x6b, 0xd8, 0xc0, 0x8e, 0xee, 0x1c, 0x68, 0xd7, 0xbb, 0xa7, 0x9d, 0x74, 0xf9, 0x77, 0xfb, 0x20, + 0xbb, 0xc0, 0x46, 0x21, 0x86, 0xc0, 0xe8, 0x4d, 0xd0, 0x6f, 0xd1, 0x34, 0xe2, 0xbd, 0x46, 0xeb, + 0xe0, 0xf0, 0x2c, 0xd9, 0x78, 0x67, 0xb9, 0x58, 0xea, 0x71, 0xf8, 0x61, 0x0e, 0x76, 0xc6, 0xcc, + 0x3f, 0x35, 0x95, 0xdd, 0xd7, 0x7e, 0x0f, 0xab, 0x59, 0xf8, 0xd6, 0x4a, 0x94, 0x9e, 0xcc, 0xce, + 0x85, 0x6c, 0x90, 0x16, 0x76, 0x3a, 0xec, 0x7d, 0x12, 0x1c, 0xa6, 0x50, 0x7e, 0x22, 0xa6, 0x90, + 0xa2, 0xd8, 0x3f, 0xd9, 0x49, 0x84, 0x25, 0xd5, 0xf1, 0xcf, 0x7a, 0xb0, 0xf3, 0x5c, 0x0f, 0xf0, + 0x44, 0x78, 0x3c, 0x30, 0x78, 0x94, 0xac, 0xac, 0x8c, 0xd5, 0x5b, 0x30, 0x1d, 0xb4, 0x10, 0x3a, + 0xd0, 0x97, 0xda, 0xdf, 0x56, 0x7b, 0xf0, 0x70, 0xdf, 0x25, 0x18, 0xf4, 0x63, 0x89, 0xc3, 0xff, + 0xaf, 0x44, 0xef, 0xb9, 0x23, 0x88, 0x8c, 0xde, 0x2f, 0xc1, 0x61, 0x3f, 0x9b, 0x07, 0xc9, 0xb2, + 0xff, 0xbf, 0xf1, 0xe8, 0x3e, 0x16, 0x42, 0x51, 0xe5, 0xb4, 0xa5, 0x2b, 0x2b, 0xe3, 0xcd, 0x56, + 0x54, 0xb2, 0x04, 0x1b, 0x0a, 0x46, 0x56, 0x27, 0x2f, 0x3e, 0x45, 0xd7, 0x7b, 0x68, 0x0e, 0x13, + 0x60, 0xff, 0x13, 0xc0, 0x32, 0x6d, 0x17, 0x57, 0xe9, 0x86, 0x5c, 0x5a, 0xf1, 0x9e, 0xe5, 0x15, + 0x40, 0xad, 0xc6, 0x8d, 0x1e, 0x60, 0xcc, 0xf8, 0x07, 0x18, 0xc7, 0xa1, 0x2f, 0x78, 0xc4, 0x8f, + 0x3d, 0x14, 0xd3, 0x1f, 0xe0, 0xe9, 0xf3, 0x8e, 0xcf, 0xf9, 0x7f, 0x95, 0x80, 0x93, 0xc1, 0xd7, + 0x43, 0x2f, 0x35, 0xb1, 0xbd, 0xe7, 0x4d, 0x51, 0x4b, 0xad, 0xe9, 0x46, 0xf0, 0x8e, 0xcf, 0xb1, + 0x60, 0xc2, 0xa7, 0xb0, 0x42, 0x4f, 0xb2, 0x01, 0x83, 0x6b, 0x6a, 0x0d, 0x2b, 0xf8, 0xa5, 0x26, + 0x76, 0xdc, 0x36, 0x87, 0xc8, 0x8f, 0x40, 0xbf, 0xb9, 0xbd, 0x2d, 0x5e, 0x69, 0xa7, 0x14, 0xfe, + 0x44, 0x44, 0xae, 0xeb, 0x0d, 0x9d, 0x9d, 0x06, 0x4b, 0x29, 0xec, 0x01, 0x4d, 0xc2, 0xa0, 0x66, + 0x36, 0x0d, 0x3e, 0xe3, 0xf2, 0x29, 0xf1, 0x81, 0x87, 0xa6, 0xc1, 0x66, 0x9c, 0xfc, 0x1c, 0x64, + 0xd9, 0x78, 0x3c, 0xe3, 0x1e, 0x83, 0x34, 0x3d, 0x4e, 0xe5, 0x8f, 0x3a, 0x40, 0x9e, 0x2f, 0xb3, + 0x03, 0xe7, 0x8c, 0x0a, 0x1b, 0x98, 0x3d, 0x94, 0x4a, 0x1d, 0x55, 0x79, 0x22, 0x3e, 0x34, 0x30, + 0x45, 0x79, 0x6a, 0xfc, 0xad, 0x3e, 0x38, 0xcc, 0xdf, 0xd0, 0xa9, 0x96, 0x3e, 0xb3, 0xe3, 0xba, + 0xe2, 0x16, 0x10, 0xf0, 0x52, 0x57, 0xb5, 0x74, 0x79, 0x0f, 0x52, 0x17, 0x5d, 0xd7, 0x42, 0x27, + 0xa1, 0xcf, 0x6e, 0xd6, 0xb1, 0xd8, 0xf1, 0xf1, 0xf6, 0xe4, 0x55, 0x4b, 0x9f, 0x26, 0x00, 0x4a, + 0xb3, 0x8e, 0x15, 0x06, 0x82, 0xca, 0x30, 0xb9, 0xdd, 0xac, 0xd7, 0xf7, 0x2a, 0x55, 0x4c, 0xff, + 0xe7, 0x8e, 0xf7, 0x79, 0x7b, 0x7c, 0xdd, 0x52, 0xc5, 0x37, 0xf2, 0x88, 0x6e, 0x8e, 0x53, 0xb0, + 0x79, 0x0a, 0x25, 0x3e, 0x6d, 0x5f, 0x16, 0x30, 0xf2, 0xef, 0x27, 0x20, 0x2d, 0x48, 0xd3, 0x13, + 0xe0, 0xb8, 0x8e, 0x35, 0xd7, 0x14, 0x6f, 0x4c, 0xbc, 0x67, 0x84, 0x20, 0x59, 0xe3, 0x26, 0xca, + 0x5c, 0x3c, 0xa4, 0x90, 0x07, 0xd2, 0xe6, 0x9d, 0xcb, 0x27, 0x6d, 0x56, 0x93, 0x58, 0x2d, 0x65, + 0x99, 0x62, 0x69, 0x76, 0xf1, 0x90, 0x42, 0x9f, 0x50, 0x1e, 0xfa, 0xc9, 0xcc, 0x70, 0xd9, 0x87, + 0x07, 0x49, 0x3b, 0x7f, 0x46, 0x47, 0xa0, 0xcf, 0x52, 0x5d, 0x8d, 0x1d, 0xa9, 0x23, 0x1d, 0xec, + 0x11, 0x3d, 0x03, 0xfd, 0xec, 0xc2, 0x67, 0xf4, 0x1f, 0x5a, 0x10, 0x65, 0xb0, 0x2f, 0x6b, 0x11, + 0xbe, 0xd7, 0x54, 0xd7, 0xc5, 0xb6, 0x41, 0x08, 0x32, 0x70, 0x84, 0x20, 0xb5, 0x65, 0x56, 0xf7, + 0xf8, 0x3f, 0xd9, 0xa0, 0xbf, 0xf9, 0xe7, 0xff, 0xa9, 0x3f, 0x54, 0x68, 0x27, 0xfb, 0xdf, 0x42, + 0x59, 0xd1, 0x58, 0x22, 0x40, 0x65, 0x18, 0x53, 0xab, 0x55, 0x9d, 0x78, 0x35, 0x59, 0x81, 0xea, + 0x34, 0x42, 0x38, 0xf4, 0x3f, 0x47, 0x75, 0xb2, 0x05, 0xf2, 0x11, 0x4a, 0x1c, 0xbe, 0x94, 0x81, + 0x01, 0x8b, 0x31, 0x25, 0x9f, 0x87, 0xd1, 0x16, 0x4e, 0x09, 0x7f, 0xbb, 0xba, 0x51, 0x15, 0x97, + 0x15, 0xc8, 0x6f, 0xd2, 0x46, 0xbf, 0x8e, 0xc7, 0xde, 0x45, 0xd1, 0xdf, 0xa5, 0xf7, 0x74, 0xbe, + 0xd8, 0x35, 0x1c, 0xb8, 0xd8, 0xa5, 0x5a, 0x7a, 0x29, 0x43, 0xe9, 0xf3, 0xeb, 0x5c, 0xb3, 0xbc, + 0x83, 0x5d, 0xe5, 0x9a, 0x36, 0xed, 0x1a, 0xc9, 0xd2, 0x22, 0xfb, 0x92, 0x2e, 0xd5, 0xd2, 0x1d, + 0xea, 0x8e, 0xfe, 0xd7, 0xfa, 0x9c, 0xf3, 0x81, 0xdf, 0xf4, 0x92, 0x57, 0x6a, 0x61, 0x76, 0x6d, + 0xd1, 0xf3, 0xe3, 0xdf, 0x4c, 0xc0, 0xf1, 0x80, 0x1f, 0x07, 0x80, 0x5b, 0xdd, 0xb9, 0xd0, 0xde, + 0xe3, 0x7b, 0xb8, 0xdc, 0x75, 0x19, 0x52, 0x04, 0x1e, 0xc5, 0x7c, 0x9c, 0x3f, 0xff, 0xab, 0x5f, + 0xff, 0xe7, 0x72, 0xf8, 0xad, 0x55, 0xc8, 0x2a, 0x94, 0x48, 0xe9, 0xfd, 0xbd, 0xeb, 0x2f, 0xe7, + 0x7f, 0xa8, 0xd0, 0xb9, 0x73, 0x6a, 0x8c, 0xea, 0xf0, 0xdb, 0xa7, 0x41, 0xee, 0x50, 0xf2, 0xb0, + 0x88, 0xd9, 0xbd, 0x88, 0xda, 0x47, 0x38, 0xee, 0x74, 0xfe, 0xbf, 0x9b, 0x05, 0x7b, 0x2c, 0xc7, + 0xae, 0xc3, 0x91, 0xe7, 0xc9, 0xd8, 0xfe, 0x32, 0x59, 0x04, 0xf6, 0x23, 0xde, 0xdb, 0x3c, 0x89, + 0xff, 0xe3, 0x2e, 0xf1, 0xa6, 0x0e, 0x7c, 0xfe, 0xf8, 0x02, 0xf1, 0xa1, 0xe9, 0x8e, 0xf9, 0x62, + 0x3a, 0x90, 0x2c, 0x94, 0x00, 0xa6, 0xfc, 0xcb, 0x12, 0x1c, 0x6d, 0x19, 0x9a, 0xc7, 0xf8, 0x85, + 0x36, 0x57, 0x15, 0x0e, 0x54, 0xd9, 0x2c, 0xb4, 0x61, 0xf6, 0xe1, 0x58, 0x66, 0x19, 0x17, 0x21, + 0x6e, 0x9f, 0x85, 0xc3, 0x61, 0x66, 0x85, 0x9a, 0x1e, 0x84, 0xe1, 0xf0, 0x8e, 0x30, 0x57, 0xd7, + 0x50, 0x68, 0x4f, 0x58, 0xae, 0x44, 0xf5, 0xec, 0xc9, 0x5a, 0x86, 0x8c, 0x07, 0xca, 0x4b, 0xe0, + 0x9e, 0x45, 0xf5, 0x31, 0xe5, 0x8f, 0x48, 0x30, 0x15, 0x1e, 0x21, 0x50, 0x0c, 0xed, 0x8f, 0xd9, + 0x3b, 0x66, 0xe2, 0xd7, 0x25, 0xb8, 0xaf, 0x0b, 0x4f, 0x5c, 0x01, 0x2f, 0xc3, 0x78, 0x60, 0x27, + 0x40, 0x84, 0x70, 0x61, 0xf6, 0x93, 0xf1, 0x65, 0xa8, 0xb7, 0xf0, 0xbd, 0x87, 0x28, 0xe5, 0xf3, + 0x7f, 0x38, 0x39, 0xd6, 0xda, 0xe7, 0x28, 0x63, 0xad, 0xab, 0xf7, 0x3b, 0xe8, 0x1f, 0xaf, 0x4a, + 0xf0, 0x48, 0x58, 0xd4, 0x36, 0xf5, 0xec, 0x1b, 0x65, 0x87, 0xff, 0x28, 0xc1, 0xc9, 0x5e, 0x98, + 0xe3, 0x06, 0xd9, 0x82, 0x31, 0xbf, 0xd2, 0x8e, 0xda, 0x63, 0x5f, 0xf5, 0x3b, 0xf3, 0x52, 0xe4, + 0x51, 0xbb, 0x0b, 0x8a, 0xb7, 0xf8, 0xc4, 0x0a, 0x9a, 0xdc, 0x53, 0x72, 0x78, 0x37, 0x57, 0x28, + 0x39, 0xb4, 0x9f, 0xdb, 0xc6, 0x16, 0x89, 0x36, 0xb6, 0xf0, 0x4b, 0x73, 0xf9, 0x2a, 0x8f, 0x5b, + 0x6d, 0xf6, 0xe0, 0xde, 0x0e, 0x63, 0x6d, 0x5c, 0x99, 0xcf, 0xea, 0x7d, 0x78, 0xb2, 0x82, 0x5a, + 0x9d, 0x55, 0xde, 0x83, 0x49, 0x3a, 0x6e, 0x1b, 0x45, 0xdf, 0x6d, 0x91, 0x1b, 0x3c, 0xb6, 0xb4, + 0x1d, 0x9a, 0xcb, 0xbe, 0x08, 0xfd, 0xcc, 0xce, 0x5c, 0xdc, 0x03, 0x38, 0x0a, 0x27, 0x20, 0x7f, + 0x42, 0xc4, 0xb2, 0x79, 0xc1, 0x76, 0xfb, 0x39, 0xd4, 0x8b, 0xac, 0x77, 0x68, 0x0e, 0x05, 0x94, + 0xf1, 0x4d, 0x11, 0xd5, 0xda, 0x73, 0xc7, 0xd5, 0xa1, 0xdd, 0xb1, 0xa8, 0xc6, 0x74, 0x73, 0x77, + 0xc3, 0xd7, 0x2f, 0x8a, 0xf0, 0xe5, 0xc9, 0x14, 0x13, 0xbe, 0xde, 0x18, 0xd5, 0x7b, 0x81, 0x2c, + 0x86, 0xcd, 0xbf, 0x8c, 0x81, 0xec, 0x7b, 0x12, 0x1c, 0xa3, 0xb2, 0x05, 0x37, 0x22, 0xf6, 0xab, + 0xf2, 0xc7, 0x00, 0x39, 0xb6, 0x56, 0x69, 0x3b, 0xbb, 0x73, 0x8e, 0xad, 0x5d, 0x09, 0xe5, 0x97, + 0xc7, 0x00, 0x55, 0x43, 0xdb, 0x4d, 0x14, 0x9a, 0x9d, 0x92, 0xcb, 0x55, 0x03, 0xbb, 0x19, 0x6d, + 0xcc, 0x99, 0xba, 0x03, 0xe6, 0xfc, 0x86, 0x04, 0x85, 0x76, 0x22, 0x73, 0xf3, 0xe9, 0x70, 0x24, + 0xf4, 0x92, 0x20, 0x6a, 0xc1, 0xc7, 0x7a, 0xd9, 0xca, 0x89, 0x4c, 0xa3, 0xc3, 0x36, 0xbe, 0xdb, + 0x75, 0xc0, 0x64, 0xd8, 0x43, 0x5b, 0x2b, 0xeb, 0x37, 0x6c, 0xfa, 0x7c, 0xa9, 0x25, 0xae, 0xfe, + 0xa5, 0xa8, 0xbd, 0xaf, 0xc3, 0x44, 0x07, 0xae, 0xef, 0x76, 0xde, 0xdb, 0xe9, 0x68, 0xcc, 0x3b, + 0x5d, 0xbe, 0x3f, 0xcd, 0x67, 0x42, 0xf8, 0x04, 0x76, 0x60, 0x2d, 0xd6, 0xee, 0x0a, 0x97, 0xfc, + 0x56, 0xb8, 0xa7, 0x2d, 0x16, 0xe7, 0xad, 0x08, 0xa9, 0x1d, 0xdd, 0x71, 0x39, 0x5b, 0x0f, 0x75, + 0x62, 0x2b, 0x82, 0x4d, 0x71, 0x64, 0x04, 0x39, 0x4a, 0x7a, 0xcd, 0x34, 0xeb, 0x9c, 0x0d, 0xf9, + 0x32, 0x8c, 0x06, 0xda, 0xf8, 0x20, 0x67, 0x20, 0x65, 0x99, 0xfc, 0xf3, 0x03, 0x83, 0xa7, 0x8e, + 0x77, 0xdc, 0xbd, 0x37, 0xcd, 0x3a, 0x17, 0x9b, 0xc2, 0xcb, 0xe3, 0x80, 0x18, 0x31, 0xba, 0x91, + 0x2f, 0x86, 0x58, 0x87, 0xb1, 0x50, 0x2b, 0x1f, 0xe4, 0x87, 0x7a, 0x49, 0x70, 0xea, 0x3b, 0x87, + 0xa1, 0x8f, 0x52, 0x45, 0x1f, 0x97, 0x00, 0x02, 0x6f, 0x84, 0xa7, 0x3b, 0x91, 0x69, 0xbf, 0x26, + 0x2e, 0xcc, 0xf4, 0x0c, 0xcf, 0x6b, 0xb6, 0x93, 0xef, 0xf9, 0x77, 0xdf, 0xfe, 0x68, 0xe2, 0x01, + 0x24, 0xcf, 0x74, 0x58, 0x8d, 0x07, 0xe6, 0xcb, 0xe7, 0x42, 0x77, 0xdf, 0x1f, 0xef, 0x6d, 0x28, + 0xc1, 0xd9, 0x74, 0xaf, 0xe0, 0x9c, 0xb1, 0xf3, 0x94, 0xb1, 0xd3, 0xe8, 0xa9, 0x78, 0xc6, 0x66, + 0xde, 0x19, 0x9e, 0x34, 0xef, 0x46, 0xbf, 0x2b, 0xc1, 0x78, 0xbb, 0x25, 0x1d, 0x3a, 0xdb, 0x1b, + 0x17, 0xad, 0x25, 0x45, 0xe1, 0xdc, 0x01, 0x30, 0xb9, 0x28, 0x0b, 0x54, 0x94, 0x59, 0xf4, 0xdc, + 0x01, 0x44, 0x99, 0x09, 0xee, 0xef, 0xff, 0x6f, 0x09, 0xee, 0xed, 0xba, 0x42, 0x42, 0xb3, 0xbd, + 0x71, 0xd9, 0xa5, 0x76, 0x2a, 0x94, 0x7e, 0x18, 0x12, 0x5c, 0xe2, 0xe7, 0xa9, 0xc4, 0x97, 0xd1, + 0xe2, 0x41, 0x24, 0x6e, 0xfb, 0x12, 0x05, 0xfd, 0x76, 0xf8, 0x64, 0x61, 0x77, 0x77, 0x6a, 0x59, + 0x78, 0xc4, 0x4c, 0x8c, 0xd6, 0xa2, 0x56, 0x7e, 0x0b, 0x15, 0x41, 0x41, 0x6b, 0x3f, 0xa4, 0xd1, + 0x66, 0xde, 0x19, 0x0e, 0xfc, 0xef, 0x46, 0xff, 0x4b, 0x6a, 0x7f, 0x50, 0xf0, 0x99, 0xae, 0x2c, + 0x76, 0x5e, 0x54, 0x15, 0xce, 0xee, 0x1f, 0x91, 0x0b, 0xd9, 0xa0, 0x42, 0xd6, 0x10, 0xbe, 0xd3, + 0x42, 0xb6, 0x35, 0x22, 0xfa, 0x9a, 0x04, 0xe3, 0xed, 0xd6, 0x24, 0x31, 0xd3, 0xb2, 0xcb, 0x22, + 0x2b, 0x66, 0x5a, 0x76, 0x5b, 0x00, 0xc9, 0x6f, 0xa2, 0xc2, 0x9f, 0x41, 0x4f, 0x77, 0x12, 0xbe, + 0xab, 0x15, 0xc9, 0x5c, 0xec, 0x5a, 0xe4, 0xc7, 0xcc, 0xc5, 0x5e, 0xd6, 0x31, 0x31, 0x73, 0xb1, + 0xa7, 0x35, 0x46, 0xfc, 0x5c, 0xf4, 0x24, 0xeb, 0xd1, 0x8c, 0x0e, 0xfa, 0x4d, 0x09, 0x86, 0x42, + 0x15, 0x31, 0x7a, 0xb2, 0x2b, 0xa3, 0xed, 0x16, 0x0c, 0x85, 0x53, 0xfb, 0x41, 0xe1, 0xb2, 0x2c, + 0x52, 0x59, 0xe6, 0xd0, 0xec, 0x41, 0x64, 0x09, 0xbf, 0x2b, 0xfd, 0x86, 0x04, 0x63, 0x6d, 0xaa, + 0xcc, 0x98, 0x59, 0xd8, 0xb9, 0x68, 0x2e, 0x9c, 0xdd, 0x3f, 0x22, 0x97, 0xea, 0x02, 0x95, 0xea, + 0x27, 0xd0, 0xb3, 0x07, 0x91, 0x2a, 0x90, 0x9f, 0x6f, 0xf9, 0xe7, 0xae, 0x02, 0xe3, 0xa0, 0x33, + 0xfb, 0x64, 0x4c, 0x08, 0xf4, 0xcc, 0xbe, 0xf1, 0xb8, 0x3c, 0x2f, 0x50, 0x79, 0x9e, 0x47, 0xab, + 0x3f, 0x9c, 0x3c, 0xad, 0x69, 0xfd, 0x8b, 0xad, 0x37, 0x00, 0xbb, 0x7b, 0x51, 0xdb, 0x62, 0xb5, + 0xf0, 0xd4, 0xbe, 0x70, 0xb8, 0x50, 0x67, 0xa9, 0x50, 0xa7, 0xd0, 0x13, 0x9d, 0x84, 0x0a, 0x1c, + 0xae, 0xd3, 0x8d, 0x6d, 0x73, 0xe6, 0x9d, 0xac, 0x04, 0x7e, 0x37, 0xfa, 0x29, 0x71, 0xb0, 0xe9, + 0x44, 0xd7, 0x71, 0x03, 0x75, 0x6c, 0xe1, 0x91, 0x1e, 0x20, 0x39, 0x5f, 0x0f, 0x50, 0xbe, 0x26, + 0xd0, 0xf1, 0x4e, 0x7c, 0x91, 0x5a, 0x16, 0x7d, 0x50, 0xf2, 0xce, 0x42, 0x9e, 0xec, 0x4e, 0x3b, + 0x58, 0xec, 0x16, 0x1e, 0xed, 0x09, 0x96, 0x73, 0xf2, 0x10, 0xe5, 0x64, 0x0a, 0x4d, 0x74, 0xe4, + 0x84, 0x95, 0xbe, 0x77, 0xfa, 0xe4, 0xc0, 0x8d, 0xa3, 0x30, 0xd9, 0x61, 0x44, 0xf7, 0x7a, 0xcc, + 0x3b, 0xae, 0x2e, 0x17, 0x61, 0x63, 0x2f, 0xba, 0x76, 0xb8, 0x5a, 0x7b, 0xf0, 0xeb, 0xaf, 0xbd, + 0xbd, 0x10, 0xfb, 0xb7, 0x29, 0x40, 0xcb, 0x4e, 0x6d, 0xce, 0xc6, 0xec, 0x9f, 0xda, 0xf1, 0x59, + 0x1e, 0xb9, 0xe1, 0x25, 0xfd, 0x50, 0x37, 0xbc, 0x96, 0x43, 0x77, 0xa6, 0x12, 0xfb, 0xbb, 0x97, + 0xd9, 0xf3, 0xc5, 0xa9, 0xe4, 0x8f, 0xe4, 0xe2, 0x54, 0xfb, 0x73, 0xd5, 0xa9, 0x3b, 0x77, 0x01, + 0xa3, 0xef, 0xa0, 0x97, 0x50, 0xf8, 0x7d, 0xc8, 0xfe, 0x2e, 0xf7, 0x21, 0xf3, 0x1d, 0x2f, 0x3d, + 0x72, 0x6c, 0x74, 0x5a, 0x7c, 0xa0, 0x77, 0xa0, 0xb7, 0x93, 0xb0, 0xfc, 0x0b, 0xbe, 0xfe, 0x16, + 0xc2, 0x71, 0x28, 0xb4, 0xba, 0x93, 0x37, 0xa9, 0x3f, 0x9a, 0x84, 0xdc, 0xb2, 0x53, 0x2b, 0x57, + 0x75, 0xf7, 0x2e, 0xf9, 0xda, 0x73, 0x9d, 0x2f, 0xb5, 0xa0, 0xdb, 0xb7, 0x26, 0x87, 0x99, 0x4e, + 0xbb, 0x68, 0xb2, 0x01, 0x23, 0x91, 0xab, 0xc4, 0xdc, 0xb3, 0xe6, 0x0f, 0x72, 0xa3, 0x39, 0x42, + 0x4a, 0xa6, 0x77, 0x10, 0x02, 0xfe, 0x8d, 0xae, 0xb7, 0x77, 0x66, 0xe6, 0x50, 0x17, 0xef, 0xe6, + 0x0d, 0x40, 0xdf, 0x66, 0x05, 0xc8, 0x47, 0x8d, 0xe2, 0x59, 0xec, 0x8f, 0x25, 0x18, 0x5c, 0x76, + 0x44, 0x29, 0x88, 0x7f, 0x4c, 0xef, 0x1f, 0x3d, 0xe3, 0x7d, 0x67, 0x35, 0xd9, 0x9b, 0xdf, 0x8a, + 0x6f, 0xaf, 0xfa, 0x4a, 0x38, 0x0c, 0x63, 0x01, 0x39, 0x3d, 0xf9, 0x7f, 0x27, 0x41, 0xe3, 0x63, + 0x09, 0xd7, 0x74, 0xc3, 0xab, 0x22, 0xf1, 0x5f, 0xd5, 0xdb, 0x15, 0xbe, 0x9e, 0x53, 0x07, 0xd5, + 0xf3, 0x2e, 0x0d, 0x10, 0x11, 0x7d, 0x7a, 0x1b, 0x5f, 0xcb, 0xad, 0x77, 0x7f, 0xa4, 0x7d, 0x7c, + 0x56, 0x27, 0x72, 0xc3, 0x47, 0x7e, 0x5d, 0x82, 0xa1, 0x65, 0xa7, 0xb6, 0x69, 0x54, 0xff, 0x9f, + 0xf7, 0xdf, 0x6d, 0x38, 0x1c, 0x92, 0xf4, 0x2e, 0xa9, 0xf4, 0xd4, 0xab, 0x29, 0x48, 0x2e, 0x3b, + 0x35, 0xf4, 0x12, 0x8c, 0x44, 0x8b, 0x86, 0x8e, 0xb5, 0x60, 0x6b, 0x46, 0xe8, 0xbc, 0x5e, 0xeb, + 0x9c, 0x3d, 0xd0, 0x2e, 0x0c, 0x85, 0x33, 0xc7, 0x89, 0x2e, 0x44, 0x42, 0x90, 0x85, 0x27, 0x7a, + 0x85, 0xf4, 0x06, 0x7b, 0x07, 0xa4, 0xbd, 0xa0, 0x77, 0x7f, 0x17, 0x6c, 0x01, 0xd4, 0xb9, 0xba, + 0x6d, 0x13, 0x56, 0x88, 0xf6, 0xa2, 0x21, 0xa5, 0x9b, 0xf6, 0x22, 0xb0, 0x5d, 0xb5, 0xd7, 0x69, + 0x6a, 0x6d, 0x01, 0x04, 0xe6, 0xc1, 0x83, 0x5d, 0x28, 0xf8, 0x60, 0x85, 0xc7, 0x7b, 0x02, 0xf3, + 0x5e, 0x3a, 0xdd, 0xe1, 0x62, 0xfc, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0xa3, 0xcd, 0x83, 0x8b, + 0x22, 0x94, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) From afb6771726ec3702cb7d4915dde6c51a3135c6dd Mon Sep 17 00:00:00 2001 From: yihuang Date: Wed, 28 Oct 2020 18:41:55 +0800 Subject: [PATCH 16/27] fix inconsistent flag names in upgrade proposal command (#7697) Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- CHANGELOG.md | 1 + x/upgrade/client/cli/tx.go | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c4e7d1f83..1003e6bd00 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,6 +40,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (x/staking) [\#7499](https://github.com/cosmos/cosmos-sdk/pull/7499) `BondStatus` is now a protobuf `enum` instead of an `int32`, and JSON serialized using its protobuf name, so expect names like `BOND_STATUS_UNBONDING` as opposed to `Unbonding`. * (x/evidence) [\#7538](https://github.com/cosmos/cosmos-sdk/pull/7538) The ABCI's `Result.Data` field of `MsgSubmitEvidence` does not contain the raw evidence's hash, but the encoded `MsgSubmitEvidenceResponse` struct. +* (x/upgrade) [#7697](https://github.com/cosmos/cosmos-sdk/pull/7697) Rename flag name "--time" to "--upgrade-time", "--info" to "--upgrade-info", to keep it consistent with help message. ### API Breaking diff --git a/x/upgrade/client/cli/tx.go b/x/upgrade/client/cli/tx.go index 9d8609d232..2a44cd5591 100644 --- a/x/upgrade/client/cli/tx.go +++ b/x/upgrade/client/cli/tx.go @@ -19,8 +19,8 @@ const ( TimeFormat = "2006-01-02T15:04:05Z" FlagUpgradeHeight = "upgrade-height" - FlagUpgradeTime = "time" - FlagUpgradeInfo = "info" + FlagUpgradeTime = "upgrade-time" + FlagUpgradeInfo = "upgrade-info" ) // GetTxCmd returns the transaction commands for this module From c3638adddc1a0e43e3b63f7cf79edee6bcd9b8ee Mon Sep 17 00:00:00 2001 From: Akhil Kumar P <36399231+akhilkumarpilli@users.noreply.github.com> Date: Wed, 28 Oct 2020 16:32:39 +0530 Subject: [PATCH 17/27] init: Implement ADR 032 typed events (#7564) * Add EmitTypedEvent in events * Add parseTypedEvent method * Use jsonpb * Modify unmarshal proto in events * Add a test for typed events * Fix reflect issue in parseTypedEvent * Modify event tests and add comments * Add EmitTypedEvents and refactor other methods * Fix golangci-lint issues * Update ProtoMarshalJSON params * Address PR comments Co-authored-by: anilCSE Co-authored-by: Jack Zampolin Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- types/events.go | 98 ++++++++++++++++++++++++++++++++++++++++++++ types/events_test.go | 34 +++++++++++++++ 2 files changed, 132 insertions(+) diff --git a/types/events.go b/types/events.go index d334d3d60b..44d48d9cd5 100644 --- a/types/events.go +++ b/types/events.go @@ -1,10 +1,15 @@ package types import ( + "encoding/json" "fmt" + "reflect" "sort" "strings" + "github.com/cosmos/cosmos-sdk/codec" + "github.com/gogo/protobuf/jsonpb" + proto "github.com/gogo/protobuf/proto" abci "github.com/tendermint/tendermint/abci/types" ) @@ -25,11 +30,13 @@ func NewEventManager() *EventManager { func (em *EventManager) Events() Events { return em.events } // EmitEvent stores a single Event object. +// Deprecated: Use EmitTypedEvent func (em *EventManager) EmitEvent(event Event) { em.events = em.events.AppendEvent(event) } // EmitEvents stores a series of Event objects. +// Deprecated: Use EmitTypedEvents func (em *EventManager) EmitEvents(events Events) { em.events = em.events.AppendEvents(events) } @@ -39,6 +46,97 @@ func (em EventManager) ABCIEvents() []abci.Event { return em.events.ToABCIEvents() } +// EmitTypedEvent takes typed event and emits converting it into Event +func (em *EventManager) EmitTypedEvent(tev proto.Message) error { + event, err := TypedEventToEvent(tev) + if err != nil { + return err + } + + em.EmitEvent(event) + return nil +} + +// EmitTypedEvents takes series of typed events and emit +func (em *EventManager) EmitTypedEvents(tevs ...proto.Message) error { + events := make(Events, len(tevs)) + for i, tev := range tevs { + res, err := TypedEventToEvent(tev) + if err != nil { + return err + } + events[i] = res + } + + em.EmitEvents(events) + return nil +} + +// TypedEventToEvent takes typed event and converts to Event object +func TypedEventToEvent(tev proto.Message) (Event, error) { + evtType := proto.MessageName(tev) + evtJSON, err := codec.ProtoMarshalJSON(tev, nil) + if err != nil { + return Event{}, err + } + + var attrMap map[string]json.RawMessage + err = json.Unmarshal(evtJSON, &attrMap) + if err != nil { + return Event{}, err + } + + attrs := make([]abci.EventAttribute, 0, len(attrMap)) + for k, v := range attrMap { + attrs = append(attrs, abci.EventAttribute{ + Key: []byte(k), + Value: v, + }) + } + + return Event{ + Type: evtType, + Attributes: attrs, + }, nil +} + +// ParseTypedEvent converts abci.Event back to typed event +func ParseTypedEvent(event abci.Event) (proto.Message, error) { + concreteGoType := proto.MessageType(event.Type) + if concreteGoType == nil { + return nil, fmt.Errorf("failed to retrieve the message of type %q", event.Type) + } + + var value reflect.Value + if concreteGoType.Kind() == reflect.Ptr { + value = reflect.New(concreteGoType.Elem()) + } else { + value = reflect.Zero(concreteGoType) + } + + protoMsg, ok := value.Interface().(proto.Message) + if !ok { + return nil, fmt.Errorf("%q does not implement proto.Message", event.Type) + } + + attrMap := make(map[string]json.RawMessage) + for _, attr := range event.Attributes { + attrMap[string(attr.Key)] = attr.Value + } + + attrBytes, err := json.Marshal(attrMap) + if err != nil { + return nil, err + } + + err = jsonpb.Unmarshal(strings.NewReader(string(attrBytes)), protoMsg) + if err != nil { + return nil, err + } + + return protoMsg, nil +} + // ---------------------------------------------------------------------------- // Events // ---------------------------------------------------------------------------- diff --git a/types/events_test.go b/types/events_test.go index d712e24cd8..7363355fb1 100644 --- a/types/events_test.go +++ b/types/events_test.go @@ -2,11 +2,14 @@ package types_test import ( "encoding/json" + "reflect" "testing" "github.com/stretchr/testify/suite" abci "github.com/tendermint/tendermint/abci/types" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + testdata "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -68,6 +71,37 @@ func (s *eventsTestSuite) TestEventManager() { s.Require().Equal(em.Events(), events.AppendEvent(event)) } +func (s *eventsTestSuite) TestEventManagerTypedEvents() { + em := sdk.NewEventManager() + + coin := sdk.NewCoin("fakedenom", sdk.NewInt(1999999)) + cat := testdata.Cat{ + Moniker: "Garfield", + Lives: 6, + } + animal, err := codectypes.NewAnyWithValue(&cat) + s.Require().NoError(err) + hasAnimal := testdata.HasAnimal{ + X: 1000, + Animal: animal, + } + + s.Require().NoError(em.EmitTypedEvents(&coin)) + s.Require().NoError(em.EmitTypedEvent(&hasAnimal)) + s.Require().Len(em.Events(), 2) + + msg1, err := sdk.ParseTypedEvent(em.Events().ToABCIEvents()[0]) + s.Require().NoError(err) + s.Require().Equal(coin.String(), msg1.String()) + s.Require().Equal(reflect.TypeOf(&coin), reflect.TypeOf(msg1)) + + msg2, err := sdk.ParseTypedEvent(em.Events().ToABCIEvents()[1]) + s.Require().NoError(err) + s.Require().Equal(reflect.TypeOf(&hasAnimal), reflect.TypeOf(msg2)) + response := msg2.(*testdata.HasAnimal) + s.Require().Equal(hasAnimal.Animal.String(), response.Animal.String()) +} + func (s *eventsTestSuite) TestStringifyEvents() { e := sdk.Events{ sdk.NewEvent("message", sdk.NewAttribute("sender", "foo")), From 51ac6f876b2a03bafd4e56c3554486a823cb70f7 Mon Sep 17 00:00:00 2001 From: Anil Kumar Kammari Date: Wed, 28 Oct 2020 17:09:49 +0530 Subject: [PATCH 18/27] Rename RegisterGRPCRoutes (#7696) * Rename * Fix missing Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- docs/basics/app-anatomy.md | 2 +- docs/building-modules/module-interfaces.md | 2 +- docs/building-modules/module-manager.md | 4 +-- server/api/server.go | 4 +-- simapp/app.go | 2 +- tests/mocks/types_module_module.go | 36 +++++++++++----------- types/module/module.go | 8 ++--- x/auth/module.go | 4 +-- x/auth/vesting/module.go | 4 +-- x/bank/module.go | 4 +-- x/capability/module.go | 4 +-- x/crisis/module.go | 4 +-- x/distribution/module.go | 4 +-- x/evidence/module.go | 4 +-- x/genutil/module.go | 4 +-- x/gov/module.go | 4 +-- x/ibc/applications/transfer/module.go | 4 +-- x/ibc/core/module.go | 4 +-- x/ibc/testing/mock/mock.go | 4 +-- x/mint/module.go | 4 +-- x/params/module.go | 4 +-- x/slashing/module.go | 4 +-- x/staking/module.go | 4 +-- x/upgrade/module.go | 4 +-- 24 files changed, 63 insertions(+), 63 deletions(-) diff --git a/docs/basics/app-anatomy.md b/docs/basics/app-anatomy.md index 529ec9b275..68d799e366 100644 --- a/docs/basics/app-anatomy.md +++ b/docs/basics/app-anatomy.md @@ -223,7 +223,7 @@ Generally, the [commands related to a module](../building-modules/module-interfa Each module can expose gRPC endpoints, called [service methods](https://grpc.io/docs/what-is-grpc/core-concepts/#service-definition) and are defined in the [module's Protobuf `query.proto` file](#grpc-query-services). A service method is defined by its name, input arguments and output response. The module then needs to: -- define a `RegisterGRPCRoutes` method on `AppModuleBasic` to wire the client gRPC requests to the correct handler inside the module. +- define a `RegisterGRPCGatewayRoutes` method on `AppModuleBasic` to wire the client gRPC requests to the correct handler inside the module. - for each service method, define a corresponding handler. The handler implements the core logic necessary to serve the gRPC request, and is located in the `keeper/grpc_query.go` file. #### gRPC-gateway REST Endpoints diff --git a/docs/building-modules/module-interfaces.md b/docs/building-modules/module-interfaces.md index 1c8dcdbce2..2acb4ac997 100644 --- a/docs/building-modules/module-interfaces.md +++ b/docs/building-modules/module-interfaces.md @@ -97,7 +97,7 @@ Similarly, there is a `AddQueryFlagsToCmd(cmd *cobra.Command)` to add common fla In addition to providing an ABCI query pathway, modules [custom queries](./messages-and-queries.md#grpc-queries) can provide a GRPC proxy server that routes requests in the GRPC protocol to ABCI query requests under the hood. -In order to do that, module should implement `RegisterGRPCRoutes(clientCtx client.Context, mux *runtime.ServeMux)` on `AppModuleBasic` to wire the client gRPC requests to the correct handler inside the module. +In order to do that, module should implement `RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux)` on `AppModuleBasic` to wire the client gRPC requests to the correct handler inside the module. Here's an example from the `auth` module: diff --git a/docs/building-modules/module-manager.md b/docs/building-modules/module-manager.md index 1c034bde71..7c6ead627b 100644 --- a/docs/building-modules/module-manager.md +++ b/docs/building-modules/module-manager.md @@ -39,7 +39,7 @@ Let us go through the methods: - `DefaultGenesis(codec.JSONMarshaler)`: Returns a default [`GenesisState`](./genesis.md#genesisstate) for the module, marshalled to `json.RawMessage`. The default `GenesisState` need to be defined by the module developer and is primarily used for testing. - `ValidateGenesis(codec.JSONMarshaler, client.TxEncodingConfig, json.RawMessage)`: Used to validate the `GenesisState` defined by a module, given in its `json.RawMessage` form. It will usually unmarshall the `json` before running a custom [`ValidateGenesis`](./genesis.md#validategenesis) function defined by the module developer. - `RegisterRESTRoutes(client.Context, *mux.Router)`: Registers the REST routes for the module. These routes will be used to map REST request to the module in order to process them. See [../interfaces/rest.md] for more. -- `RegisterGRPCRoutes(client.Context, *runtime.ServeMux)`: Registers gRPC routes for the module. +- `RegisterGRPCGatewayRoutes(client.Context, *runtime.ServeMux)`: Registers gRPC routes for the module. - `GetTxCmd()`: Returns the root [`Tx` command](./module-interfaces.md#tx) for the module. The subcommands of this root command are used by end-users to generate new transactions containing [`message`s](./messages-and-queries.md#queries) defined in the module. - `GetQueryCmd()`: Return the root [`query` command](./module-interfaces.md#query) for the module. The subcommands of this root command are used by end-users to generate new queries to the subset of the state defined by the module. @@ -116,7 +116,7 @@ It implements the following methods: - `DefaultGenesis(cdc codec.JSONMarshaler)`: Provides default genesis information for modules in the application by calling the [`DefaultGenesis(cdc codec.JSONMarshaler)`](./genesis.md#defaultgenesis) function of each module. It is used to construct a default genesis file for the application. - `ValidateGenesis(cdc codec.JSONMarshaler, txEncCfg client.TxEncodingConfig, genesis map[string]json.RawMessage)`: Validates the genesis information modules by calling the [`ValidateGenesis(codec.JSONMarshaler, client.TxEncodingConfig, json.RawMessage)`](./genesis.md#validategenesis) function of each module. - `RegisterRESTRoutes(ctx client.Context, rtr *mux.Router)`: Registers REST routes for modules by calling the [`RegisterRESTRoutes`](./module-interfaces.md#register-routes) function of each module. This function is usually called function from the `main.go` function of the [application's command-line interface](../interfaces/cli.md). -- `RegisterGRPCRoutes(clientCtx client.Context, rtr *runtime.ServeMux)`: Registers gRPC routes for modules. +- `RegisterGRPCGatewayRoutes(clientCtx client.Context, rtr *runtime.ServeMux)`: Registers gRPC routes for modules. - `AddTxCommands(rootTxCmd *cobra.Command)`: Adds modules' transaction commands to the application's [`rootTxCommand`](../interfaces/cli.md#transaction-commands). This function is usually called function from the `main.go` function of the [application's command-line interface](../interfaces/cli.md). - `AddQueryCommands(rootQueryCmd *cobra.Command)`: Adds modules' query commands to the application's [`rootQueryCommand`](../interfaces/cli.md#query-commands). This function is usually called function from the `main.go` function of the [application's command-line interface](../interfaces/cli.md). diff --git a/server/api/server.go b/server/api/server.go index 5c037101c6..b73b955566 100644 --- a/server/api/server.go +++ b/server/api/server.go @@ -104,7 +104,7 @@ func (s *Server) Start(cfg config.Config) error { return err } - s.registerGRPCRoutes() + s.registerGRPCGatewayRoutes() s.listener = listener var h http.Handler = s.Router @@ -123,7 +123,7 @@ func (s *Server) Close() error { return s.listener.Close() } -func (s *Server) registerGRPCRoutes() { +func (s *Server) registerGRPCGatewayRoutes() { s.Router.PathPrefix("/").Handler(s.GRPCRouter) } diff --git a/simapp/app.go b/simapp/app.go index 41683dff82..0d1d226d85 100644 --- a/simapp/app.go +++ b/simapp/app.go @@ -547,7 +547,7 @@ func (app *SimApp) RegisterAPIRoutes(apiSvr *api.Server, apiConfig config.APICon authrest.RegisterTxRoutes(clientCtx, apiSvr.Router) ModuleBasics.RegisterRESTRoutes(clientCtx, apiSvr.Router) - ModuleBasics.RegisterGRPCRoutes(apiSvr.ClientCtx, apiSvr.GRPCRouter) + ModuleBasics.RegisterGRPCGatewayRoutes(apiSvr.ClientCtx, apiSvr.GRPCRouter) // register swagger API from root so that other applications can override easily if apiConfig.Swagger { diff --git a/tests/mocks/types_module_module.go b/tests/mocks/types_module_module.go index b03b358094..41ded4d7a2 100644 --- a/tests/mocks/types_module_module.go +++ b/tests/mocks/types_module_module.go @@ -120,16 +120,16 @@ func (mr *MockAppModuleBasicMockRecorder) RegisterRESTRoutes(arg0, arg1 interfac return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegisterRESTRoutes", reflect.TypeOf((*MockAppModuleBasic)(nil).RegisterRESTRoutes), arg0, arg1) } -// RegisterGRPCRoutes mocks base method -func (m *MockAppModuleBasic) RegisterGRPCRoutes(arg0 client.Context, arg1 *runtime.ServeMux) { +// RegisterGRPCGatewayRoutes mocks base method +func (m *MockAppModuleBasic) RegisterGRPCGatewayRoutes(arg0 client.Context, arg1 *runtime.ServeMux) { m.ctrl.T.Helper() - m.ctrl.Call(m, "RegisterGRPCRoutes", arg0, arg1) + m.ctrl.Call(m, "RegisterGRPCGatewayRoutes", arg0, arg1) } -// RegisterGRPCRoutes indicates an expected call of RegisterGRPCRoutes -func (mr *MockAppModuleBasicMockRecorder) RegisterGRPCRoutes(arg0, arg1 interface{}) *gomock.Call { +// RegisterGRPCGatewayRoutes indicates an expected call of RegisterGRPCGatewayRoutes +func (mr *MockAppModuleBasicMockRecorder) RegisterGRPCGatewayRoutes(arg0, arg1 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegisterGRPCRoutes", reflect.TypeOf((*MockAppModuleBasic)(nil).RegisterGRPCRoutes), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegisterGRPCGatewayRoutes", reflect.TypeOf((*MockAppModuleBasic)(nil).RegisterGRPCGatewayRoutes), arg0, arg1) } // GetTxCmd mocks base method @@ -261,16 +261,16 @@ func (mr *MockAppModuleGenesisMockRecorder) RegisterRESTRoutes(arg0, arg1 interf return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegisterRESTRoutes", reflect.TypeOf((*MockAppModuleGenesis)(nil).RegisterRESTRoutes), arg0, arg1) } -// RegisterGRPCRoutes mocks base method -func (m *MockAppModuleGenesis) RegisterGRPCRoutes(arg0 client.Context, arg1 *runtime.ServeMux) { +// RegisterGRPCGatewayRoutes mocks base method +func (m *MockAppModuleGenesis) RegisterGRPCGatewayRoutes(arg0 client.Context, arg1 *runtime.ServeMux) { m.ctrl.T.Helper() - m.ctrl.Call(m, "RegisterGRPCRoutes", arg0, arg1) + m.ctrl.Call(m, "RegisterGRPCGatewayRoutes", arg0, arg1) } -// RegisterGRPCRoutes indicates an expected call of RegisterGRPCRoutes -func (mr *MockAppModuleGenesisMockRecorder) RegisterGRPCRoutes(arg0, arg1 interface{}) *gomock.Call { +// RegisterGRPCGatewayRoutes indicates an expected call of RegisterGRPCGatewayRoutes +func (mr *MockAppModuleGenesisMockRecorder) RegisterGRPCGatewayRoutes(arg0, arg1 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegisterGRPCRoutes", reflect.TypeOf((*MockAppModuleGenesis)(nil).RegisterGRPCRoutes), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegisterGRPCGatewayRoutes", reflect.TypeOf((*MockAppModuleGenesis)(nil).RegisterGRPCGatewayRoutes), arg0, arg1) } // GetTxCmd mocks base method @@ -430,16 +430,16 @@ func (mr *MockAppModuleMockRecorder) RegisterRESTRoutes(arg0, arg1 interface{}) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegisterRESTRoutes", reflect.TypeOf((*MockAppModule)(nil).RegisterRESTRoutes), arg0, arg1) } -// RegisterGRPCRoutes mocks base method -func (m *MockAppModule) RegisterGRPCRoutes(arg0 client.Context, arg1 *runtime.ServeMux) { +// RegisterGRPCGatewayRoutes mocks base method +func (m *MockAppModule) RegisterGRPCGatewayRoutes(arg0 client.Context, arg1 *runtime.ServeMux) { m.ctrl.T.Helper() - m.ctrl.Call(m, "RegisterGRPCRoutes", arg0, arg1) + m.ctrl.Call(m, "RegisterGRPCGatewayRoutes", arg0, arg1) } -// RegisterGRPCRoutes indicates an expected call of RegisterGRPCRoutes -func (mr *MockAppModuleMockRecorder) RegisterGRPCRoutes(arg0, arg1 interface{}) *gomock.Call { +// RegisterGRPCGatewayRoutes indicates an expected call of RegisterGRPCGatewayRoutes +func (mr *MockAppModuleMockRecorder) RegisterGRPCGatewayRoutes(arg0, arg1 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegisterGRPCRoutes", reflect.TypeOf((*MockAppModule)(nil).RegisterGRPCRoutes), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegisterGRPCGatewayRoutes", reflect.TypeOf((*MockAppModule)(nil).RegisterGRPCGatewayRoutes), arg0, arg1) } // GetTxCmd mocks base method diff --git a/types/module/module.go b/types/module/module.go index ec9c1c77b5..97319e5d00 100644 --- a/types/module/module.go +++ b/types/module/module.go @@ -56,7 +56,7 @@ type AppModuleBasic interface { // client functionality RegisterRESTRoutes(client.Context, *mux.Router) - RegisterGRPCRoutes(client.Context, *runtime.ServeMux) + RegisterGRPCGatewayRoutes(client.Context, *runtime.ServeMux) GetTxCmd() *cobra.Command GetQueryCmd() *cobra.Command } @@ -115,10 +115,10 @@ func (bm BasicManager) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Rou } } -// RegisterGRPCRoutes registers all module rest routes -func (bm BasicManager) RegisterGRPCRoutes(clientCtx client.Context, rtr *runtime.ServeMux) { +// RegisterGRPCGatewayRoutes registers all module rest routes +func (bm BasicManager) RegisterGRPCGatewayRoutes(clientCtx client.Context, rtr *runtime.ServeMux) { for _, b := range bm { - b.RegisterGRPCRoutes(clientCtx, rtr) + b.RegisterGRPCGatewayRoutes(clientCtx, rtr) } } diff --git a/x/auth/module.go b/x/auth/module.go index 55b5dc7fbb..098dd774ee 100644 --- a/x/auth/module.go +++ b/x/auth/module.go @@ -65,8 +65,8 @@ func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Rout rest.RegisterRoutes(clientCtx, rtr, types.StoreKey) } -// RegisterGRPCRoutes registers the gRPC Gateway routes for the auth module. -func (AppModuleBasic) RegisterGRPCRoutes(clientCtx client.Context, mux *runtime.ServeMux) { +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the auth module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) } diff --git a/x/auth/vesting/module.go b/x/auth/vesting/module.go index 7afab8d34b..3cc579a40e 100644 --- a/x/auth/vesting/module.go +++ b/x/auth/vesting/module.go @@ -57,9 +57,9 @@ func (AppModuleBasic) ValidateGenesis(_ codec.JSONMarshaler, _ client.TxEncoding // RegisterRESTRoutes registers module's REST handlers. Currently, this is a no-op. func (AppModuleBasic) RegisterRESTRoutes(_ client.Context, _ *mux.Router) {} -// RegisterGRPCRoutes registers the module's gRPC Gateway routes. Currently, this +// RegisterGRPCGatewayRoutes registers the module's gRPC Gateway routes. Currently, this // is a no-op. -func (a AppModuleBasic) RegisterGRPCRoutes(_ client.Context, _ *runtime.ServeMux) {} +func (a AppModuleBasic) RegisterGRPCGatewayRoutes(_ client.Context, _ *runtime.ServeMux) {} // GetTxCmd returns the root tx command for the auth module. func (AppModuleBasic) GetTxCmd() *cobra.Command { diff --git a/x/bank/module.go b/x/bank/module.go index 9712636133..958d0db754 100644 --- a/x/bank/module.go +++ b/x/bank/module.go @@ -64,8 +64,8 @@ func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Rout rest.RegisterHandlers(clientCtx, rtr) } -// RegisterGRPCRoutes registers the gRPC Gateway routes for the bank module. -func (AppModuleBasic) RegisterGRPCRoutes(clientCtx client.Context, mux *runtime.ServeMux) { +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the bank module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) } diff --git a/x/capability/module.go b/x/capability/module.go index cc1d6272eb..f27e5cdb5d 100644 --- a/x/capability/module.go +++ b/x/capability/module.go @@ -69,8 +69,8 @@ func (AppModuleBasic) ValidateGenesis(cdc codec.JSONMarshaler, config client.TxE // RegisterRESTRoutes registers the capability module's REST service handlers. func (a AppModuleBasic) RegisterRESTRoutes(_ client.Context, _ *mux.Router) {} -// RegisterGRPCRoutes registers the gRPC Gateway routes for the capability module. -func (a AppModuleBasic) RegisterGRPCRoutes(_ client.Context, _ *runtime.ServeMux) { +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the capability module. +func (a AppModuleBasic) RegisterGRPCGatewayRoutes(_ client.Context, _ *runtime.ServeMux) { } // GetTxCmd returns the capability module's root tx command. diff --git a/x/crisis/module.go b/x/crisis/module.go index 4066cb2ef9..9793dc8bfc 100644 --- a/x/crisis/module.go +++ b/x/crisis/module.go @@ -56,8 +56,8 @@ func (AppModuleBasic) ValidateGenesis(cdc codec.JSONMarshaler, config client.TxE // RegisterRESTRoutes registers no REST routes for the crisis module. func (AppModuleBasic) RegisterRESTRoutes(_ client.Context, _ *mux.Router) {} -// RegisterGRPCRoutes registers the gRPC Gateway routes for the capability module. -func (AppModuleBasic) RegisterGRPCRoutes(_ client.Context, _ *runtime.ServeMux) {} +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the capability module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(_ client.Context, _ *runtime.ServeMux) {} // GetTxCmd returns the root tx command for the crisis module. func (b AppModuleBasic) GetTxCmd() *cobra.Command { diff --git a/x/distribution/module.go b/x/distribution/module.go index c32bcbc1ed..034be6d965 100644 --- a/x/distribution/module.go +++ b/x/distribution/module.go @@ -68,8 +68,8 @@ func (AppModuleBasic) RegisterRESTRoutes(clientCtx sdkclient.Context, rtr *mux.R rest.RegisterHandlers(clientCtx, rtr) } -// RegisterGRPCRoutes registers the gRPC Gateway routes for the distribution module. -func (AppModuleBasic) RegisterGRPCRoutes(clientCtx sdkclient.Context, mux *runtime.ServeMux) { +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the distribution module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx sdkclient.Context, mux *runtime.ServeMux) { types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) } diff --git a/x/evidence/module.go b/x/evidence/module.go index 7ff49aabd5..4367fe8d58 100644 --- a/x/evidence/module.go +++ b/x/evidence/module.go @@ -85,8 +85,8 @@ func (a AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Ro rest.RegisterRoutes(clientCtx, rtr, evidenceRESTHandlers) } -// RegisterGRPCRoutes registers the gRPC Gateway routes for the evidence module. -func (a AppModuleBasic) RegisterGRPCRoutes(clientCtx client.Context, mux *runtime.ServeMux) { +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the evidence module. +func (a AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) } diff --git a/x/genutil/module.go b/x/genutil/module.go index 711e5a6884..bfaeb0c591 100644 --- a/x/genutil/module.go +++ b/x/genutil/module.go @@ -56,8 +56,8 @@ func (b AppModuleBasic) ValidateGenesis(cdc codec.JSONMarshaler, txEncodingConfi // RegisterRESTRoutes registers the REST routes for the genutil module. func (AppModuleBasic) RegisterRESTRoutes(_ client.Context, _ *mux.Router) {} -// RegisterGRPCRoutes registers the gRPC Gateway routes for the genutil module. -func (AppModuleBasic) RegisterGRPCRoutes(_ client.Context, _ *runtime.ServeMux) { +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the genutil module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(_ client.Context, _ *runtime.ServeMux) { } // GetTxCmd returns no root tx command for the genutil module. diff --git a/x/gov/module.go b/x/gov/module.go index 1183f6060e..ad2191660c 100644 --- a/x/gov/module.go +++ b/x/gov/module.go @@ -84,8 +84,8 @@ func (a AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Ro rest.RegisterHandlers(clientCtx, rtr, proposalRESTHandlers) } -// RegisterGRPCRoutes registers the gRPC Gateway routes for the gov module. -func (a AppModuleBasic) RegisterGRPCRoutes(clientCtx client.Context, mux *runtime.ServeMux) { +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the gov module. +func (a AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) } diff --git a/x/ibc/applications/transfer/module.go b/x/ibc/applications/transfer/module.go index 9947828809..0f9b3faee2 100644 --- a/x/ibc/applications/transfer/module.go +++ b/x/ibc/applications/transfer/module.go @@ -72,8 +72,8 @@ func (AppModuleBasic) ValidateGenesis(cdc codec.JSONMarshaler, config client.TxE func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Router) { } -// RegisterGRPCRoutes registers the gRPC Gateway routes for the ibc-transfer module. -func (AppModuleBasic) RegisterGRPCRoutes(clientCtx client.Context, mux *runtime.ServeMux) { +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the ibc-transfer module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) } diff --git a/x/ibc/core/module.go b/x/ibc/core/module.go index 4590556be9..3371dc88a4 100644 --- a/x/ibc/core/module.go +++ b/x/ibc/core/module.go @@ -67,8 +67,8 @@ func (AppModuleBasic) ValidateGenesis(cdc codec.JSONMarshaler, config client.TxE // RegisterRESTRoutes does nothing. IBC does not support legacy REST routes. func (AppModuleBasic) RegisterRESTRoutes(client.Context, *mux.Router) {} -// RegisterGRPCRoutes registers the gRPC Gateway routes for the ibc module. -func (AppModuleBasic) RegisterGRPCRoutes(clientCtx client.Context, mux *runtime.ServeMux) { +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the ibc module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { clienttypes.RegisterQueryHandlerClient(context.Background(), mux, clienttypes.NewQueryClient(clientCtx)) connectiontypes.RegisterQueryHandlerClient(context.Background(), mux, connectiontypes.NewQueryClient(clientCtx)) channeltypes.RegisterQueryHandlerClient(context.Background(), mux, channeltypes.NewQueryClient(clientCtx)) diff --git a/x/ibc/testing/mock/mock.go b/x/ibc/testing/mock/mock.go index 89ed2a4dd4..e338e24d3b 100644 --- a/x/ibc/testing/mock/mock.go +++ b/x/ibc/testing/mock/mock.go @@ -58,8 +58,8 @@ func (AppModuleBasic) ValidateGenesis(codec.JSONMarshaler, client.TxEncodingConf // RegisterRESTRoutes implements AppModuleBasic interface. func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Router) {} -// RegisterGRPCRoutes implements AppModuleBasic interface. -func (a AppModuleBasic) RegisterGRPCRoutes(_ client.Context, _ *runtime.ServeMux) {} +// RegisterGRPCGatewayRoutes implements AppModuleBasic interface. +func (a AppModuleBasic) RegisterGRPCGatewayRoutes(_ client.Context, _ *runtime.ServeMux) {} // GetTxCmd implements AppModuleBasic interface. func (AppModuleBasic) GetTxCmd() *cobra.Command { diff --git a/x/mint/module.go b/x/mint/module.go index 0a29598add..a100139825 100644 --- a/x/mint/module.go +++ b/x/mint/module.go @@ -69,8 +69,8 @@ func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Rout rest.RegisterRoutes(clientCtx, rtr) } -// RegisterGRPCRoutes registers the gRPC Gateway routes for the mint module. -func (AppModuleBasic) RegisterGRPCRoutes(clientCtx client.Context, mux *runtime.ServeMux) { +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the mint module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) } diff --git a/x/params/module.go b/x/params/module.go index b95f76947d..1460460317 100644 --- a/x/params/module.go +++ b/x/params/module.go @@ -55,8 +55,8 @@ func (AppModuleBasic) ValidateGenesis(_ codec.JSONMarshaler, config client.TxEnc // RegisterRESTRoutes registers the REST routes for the params module. func (AppModuleBasic) RegisterRESTRoutes(_ client.Context, _ *mux.Router) {} -// RegisterGRPCRoutes registers the gRPC Gateway routes for the params module. -func (AppModuleBasic) RegisterGRPCRoutes(clientCtx client.Context, mux *runtime.ServeMux) { +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the params module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { proposal.RegisterQueryHandlerClient(context.Background(), mux, proposal.NewQueryClient(clientCtx)) } diff --git a/x/slashing/module.go b/x/slashing/module.go index 3698bb6987..91ad472e90 100644 --- a/x/slashing/module.go +++ b/x/slashing/module.go @@ -76,8 +76,8 @@ func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Rout rest.RegisterHandlers(clientCtx, rtr) } -// RegisterGRPCRoutes registers the gRPC Gateway routes for the slashig module. -func (AppModuleBasic) RegisterGRPCRoutes(clientCtx client.Context, mux *runtime.ServeMux) { +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the slashig module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) } diff --git a/x/staking/module.go b/x/staking/module.go index 4fa17d4d45..f2e4221174 100644 --- a/x/staking/module.go +++ b/x/staking/module.go @@ -74,8 +74,8 @@ func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Rout rest.RegisterHandlers(clientCtx, rtr) } -// RegisterGRPCRoutes registers the gRPC Gateway routes for the staking module. -func (AppModuleBasic) RegisterGRPCRoutes(clientCtx client.Context, mux *runtime.ServeMux) { +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the staking module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) } diff --git a/x/upgrade/module.go b/x/upgrade/module.go index df5e23a2f4..c136d9cf0a 100644 --- a/x/upgrade/module.go +++ b/x/upgrade/module.go @@ -47,8 +47,8 @@ func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, r *mux.Router rest.RegisterRoutes(clientCtx, r) } -// RegisterGRPCRoutes registers the gRPC Gateway routes for the upgrade module. -func (AppModuleBasic) RegisterGRPCRoutes(clientCtx client.Context, mux *runtime.ServeMux) { +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the upgrade module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) } From a15bb7562e1c900f48b38ed67736faf8ae4bd6d7 Mon Sep 17 00:00:00 2001 From: Amaury Martiny Date: Wed, 28 Oct 2020 12:47:22 +0100 Subject: [PATCH 19/27] docs: Basic/App-anatomy explains Msg Service by default (#7670) * Add msg service * Add handlers * Small tweaks * Remove todo Co-authored-by: Federico Kunze <31522760+fedekunze@users.noreply.github.com> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- docs/basics/app-anatomy.md | 75 +++++++++++++++++++++++--------------- 1 file changed, 46 insertions(+), 29 deletions(-) diff --git a/docs/basics/app-anatomy.md b/docs/basics/app-anatomy.md index 68d799e366..e7bfc8cf0c 100644 --- a/docs/basics/app-anatomy.md +++ b/docs/basics/app-anatomy.md @@ -49,17 +49,17 @@ The first thing defined in `app.go` is the `type` of the application. It is gene - **A list of module's `keeper`s.** Each module defines an abstraction called [`keeper`](../building-modules/keeper.md), which handles reads and writes for this module's store(s). The `keeper`'s methods of one module can be called from other modules (if authorized), which is why they are declared in the application's type and exported as interfaces to other modules so that the latter can only access the authorized functions. - **A reference to an [`appCodec`](../core/encoding.md).** The application's `appCodec` is used to serialize and deserialize data structures in order to store them, as stores can only persist `[]bytes`. The default codec is [Protocol Buffers](../core/encoding.md). - **A reference to a [`legacyAmino`](../core/encoding.md) codec.** Some parts of the SDK have not been migrated to use the `appCodec` above, and are still hardcoded to use Amino. Other parts explicity use Amino for backwards compatibility. For these reasons, the application still holds a reference to the legacy Amino codec. Please note that the Amino codec will be removed from the SDK in the upcoming releases. -- **A reference to a [module manager](../building-modules/module-manager.md#manager)** and a [basic module manager](../building-modules/module-manager.md#basicmanager). The module manager is an object that contains a list of the application's module. It facilitates operations related to these modules, like registering [`routes`](../core/baseapp.md#routing), [gRPC query services](../core/baseapp.md#grpc-query-services) and [legacy Tendermint query routes](../core/baseapp.md#legacy-query-routing) or setting the order of execution between modules for various functions like [`InitChainer`](#initchainer), [`BeginBlocker` and `EndBlocker`](#beginblocker-and-endblocker). +- **A reference to a [module manager](../building-modules/module-manager.md#manager)** and a [basic module manager](../building-modules/module-manager.md#basicmanager). The module manager is an object that contains a list of the application's module. It facilitates operations related to these modules, like registering their [`Msg` services](../core/baseapp.md#msg-services) and [gRPC `Query` services](../core/baseapp.md#grpc-query-services), or setting the order of execution between modules for various functions like [`InitChainer`](#initchainer), [`BeginBlocker` and `EndBlocker`](#beginblocker-and-endblocker). For backwards-compatibility reasons, all modules expose [legacy `Msg`s routes](../core/baseapp.md#routing) and [legacy query routes](../core/baseapp.md#legacy-query-routing), which are also registered by the module manager.. See an example of application type definition from `simapp`, the SDK's own app used for demo and testing purposes: -+++ https://github.com/cosmos/cosmos-sdk/blob/d9175200920e96bfa4182b5c8bc46d91b17a28a1/simapp/app.go#L140-L179 ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc1/simapp/app.go#L139-L181 ### Constructor Function This function constructs a new application of the type defined in the section above. It must fulfill the `AppCreator` signature in order to be used in the [`start` command](../core/node.md#start-command) of the application's daemon command. -+++ https://github.com/cosmos/cosmos-sdk/blob/d9175200920e96bfa4182b5c8bc46d91b17a28a1/server/types/app.go#L42-L44 ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc1/server/types/app.go#L42-L44 Here are the main actions performed by this function: @@ -67,7 +67,7 @@ Here are the main actions performed by this function: - Instantiate a new application with a reference to a `baseapp` instance, a codec and all the appropriate store keys. - Instantiate all the [`keeper`s](#keeper) defined in the application's `type` using the `NewKeeper` function of each of the application's modules. Note that `keepers` must be instantiated in the correct order, as the `NewKeeper` of one module might require a reference to another module's `keeper`. - Instantiate the application's [module manager](../building-modules/module-manager.md#manager) with the [`AppModule`](#application-module-interface) object of each of the application's modules. -- With the module manager, initialize the application's [`routes`](../core/baseapp.md#routing), [`gRPC query services`](../core/baseapp.md#grpc-query-services) and [`legacy query routes`](../core/baseapp.md#query-routing). When a transaction is relayed to the application by Tendermint via the ABCI, it is routed to the appropriate module's [`handler`](#handler) using the `routes` defined here. Likewise, when a gRPC request is received by the application, it is routed to the appropriate module's [`gRPC query service`](#grpc-query-services) using the gRPC routes defined here. The SDK still supports legacy Tendermint queries, and these queries are routes using the `legacy query routes`. +- With the module manager, initialize the application's [`Msg` services](../core/baseapp.md#msg-services), [gRPC `Query` services](../core/baseapp.md#grpc-query-services), [legacy `Msg` routes](../core/baseapp.md#routing) and [legacy query routes](../core/baseapp.md#query-routing). When a transaction is relayed to the application by Tendermint via the ABCI, it is routed to the appropriate module's [`Msg` service](#msg-services) using the routes defined here. Likewise, when a gRPC query request is received by the application, it is routed to the appropriate module's [`gRPC query service`](#grpc-query-services) using the gRPC routes defined here. The SDK still supports legacy `Msg`s and legacy Tendermint queries, which are routed using respectively the legacy `Msg` routes and the legacy query routes. - With the module manager, register the [application's modules' invariants](../building-modules/invariants.md). Invariants are variables (e.g. total supply of a token) that are evaluated at the end of each block. The process of checking invariants is done via a special module called the [`InvariantsRegistry`](../building-modules/invariants.md#invariant-registry). The value of the invariant should be equal to a predicted value defined in the module. Should the value be different than the predicted one, special logic defined in the invariant registry will be triggered (usually the chain is halted). This is useful to make sure no critical bug goes unnoticed and produces long-lasting effects that would be hard to fix. - With the module manager, set the order of execution between the `InitGenesis`, `BegingBlocker` and `EndBlocker` functions of each of the [application's modules](#application-module-interface). Note that not all modules implement these functions. - Set the remainer of application's parameters: @@ -81,7 +81,7 @@ Note that this function only creates an instance of the app, while the actual st See an example of application constructor from `simapp`: -+++ https://github.com/cosmos/cosmos-sdk/blob/d9175200920e96bfa4182b5c8bc46d91b17a28a1/simapp/app.go#L190-L427 ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc1/simapp/app.go#L192-L429 ### InitChainer @@ -91,7 +91,7 @@ In general, the `InitChainer` is mostly composed of the [`InitGenesis`](../build See an example of an `InitChainer` from `simapp`: -+++ https://github.com/cosmos/cosmos-sdk/blob/d9175200920e96bfa4182b5c8bc46d91b17a28a1/simapp/app.go#L450-L455 ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc1/simapp/app.go#L452-L459 ### BeginBlocker and EndBlocker @@ -103,13 +103,13 @@ As a sidenote, it is important to remember that application-specific blockchains See an example of `BeginBlocker` and `EndBlocker` functions from `simapp` -+++ https://github.com/cosmos/cosmos-sdk/blob/d9175200920e96bfa4182b5c8bc46d91b17a28a1/simapp/app.go#L440-L448 ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc1/simapp/app.go#L442-L450 ### Register Codec The `EncodingConfig` structure is the last important part of the `app.go` file. The goal of this structure is to define the codecs that will be used throughout the app. -+++ https://github.com/cosmos/cosmos-sdk/blob/d9175200920e96bfa4182b5c8bc46d91b17a28a1/simapp/params/encoding.go#L9-L16 ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc1/simapp/params/encoding.go#L9-L16 Here are descriptions of what each of the four fields means: @@ -123,7 +123,7 @@ The SDK exposes a `MakeCodecs` function used to create a `EncodingConfig`. It us See an example of a `MakeCodecs` from `simapp`: -+++ https://github.com/cosmos/cosmos-sdk/blob/d9175200920e96bfa4182b5c8bc46d91b17a28a1/simapp/app.go#L429-L435 ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc1/simapp/app.go#L429-L435 ## Modules @@ -135,56 +135,73 @@ Modules must implement [interfaces](../building-modules/module-manager.md#applic `AppModule` exposes a collection of useful methods on the module that facilitates the composition of modules into a coherent application. These methods are are called from the `module manager`(../building-modules/module-manager.md#manager), which manages the application's collection of modules. -### Message Types +### `Msg` Services -[`Message`s](../building-modules/messages-and-queries.md#messages) are objects defined by each module that implement the [`message`](../building-modules/messages-and-queries.md#messages) interface. Each [`transaction`](../core/transactions.md) contains one or multiple `messages`. +Each module defines two [Protobuf services](https://developers.google.com/protocol-buffers/docs/proto#services): one `Msg` service to handle messages, and one gRPC `Query` service to handle queries. If we consider the module as a state-machine, then a `Msg` is a state transition. A `Msg` service is a Protobuf service defining all possible `Msg`s a module exposes. Note that `Msg`s are bundled in [`transactions`](../core/transactions.md), and each transaction contains one or multiple `messages`. When a valid block of transactions is received by the full-node, Tendermint relays each one to the application via [`DeliverTx`](https://tendermint.com/docs/app-dev/abci-spec.html#delivertx). Then, the application handles the transaction: 1. Upon receiving the transaction, the application first unmarshalls it from `[]bytes`. -2. Then, it verifies a few things about the transaction like [fee payment and signatures](#gas-fees.md#antehandler) before extracting the message(s) contained in the transaction. -3. With the `Type()` method of the `message`, `baseapp` is able to route it to the appropriate module's [`handler`](#handler) in order for it to be processed. +2. Then, it verifies a few things about the transaction like [fee payment and signatures](#gas-fees.md#antehandler) before extracting the `Msg`(s) contained in the transaction. +3. `Msg`s are encoded as Protobuf [`Any`s](#register-codec) via the `sdk.ServiceMsg` struct. By analyzing each `Any`'s `type_url`, the application routes the `Msg` to the corresponding module's `Msg` service. 4. If the message is successfully processed, the state is updated. For a more detailed look at a transaction lifecycle, click [here](./tx-lifecycle.md). -Module developers create custom message types when they build their own module. The general practice is to prefix the type declaration of the message with `Msg`. For example, the message type `MsgSend` allows users to transfer tokens: +Module developers create custom `Msg`s when they build their own module. The general practice is to define all `Msg`s in a Protobuf service called `service Msg {}`, and define each `Msg` as a Protobuf service method, using the `rpc` keyword. These definitions usually reside in a `tx.proto` file. For example, the `x/bank` module defines two `Msg`s to allows users to transfer tokens: -+++ https://github.com/cosmos/cosmos-sdk/blob/d9175200920e96bfa4182b5c8bc46d91b17a28a1/proto/cosmos/bank/v1beta1/tx.proto#L10-L19 ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc1/proto/cosmos/bank/v1beta1/tx.proto#L10-L17 -It is processed by the `handler` of the `bank` module, which ultimately calls the `keeper` of the `auth` module in order to update the state. +These two `Msg`s are processed by the `Msg` service of the `x/bank` module, which ultimately calls the `keeper` of the `x/auth` module in order to update the state. -### Handler +Each module should also implement the `RegisterServices` method as part of the [`AppModule` interface](#application-module-interface). This method should call the `RegisterMsgServer` function provided by the generated Protobuf code. -The [`handler`](../building-modules/handler.md) refers to the part of the module responsible for processing the `message` after it is routed by `baseapp`. `handler` functions of modules are only executed if the transaction is relayed from Tendermint by the `DeliverTx` ABCI message. If the transaction is relayed by `CheckTx`, only stateless checks and fee-related stateful checks are performed. To better understand the difference between `DeliverTx`and `CheckTx`, as well as the difference between stateful and stateless checks, click [here](./tx-lifecycle.md). +#### Handlers + +The [handler](../building-modules/handler.md) refers to the part of the module responsible for processing the `Msg` after it is routed by `baseapp`. Handler functions of modules are only executed if the transaction is relayed from Tendermint by the `DeliverTx` ABCI message. If the transaction is relayed by `CheckTx`, only stateless checks and fee-related stateful checks are performed. To better understand the difference between `DeliverTx`and `CheckTx`, as well as the difference between stateful and stateless checks, click [here](./tx-lifecycle.md). The `handler` of a module is generally defined in a file called `handler.go` and consists of: -- A **switch function** `NewHandler` to route the message to the appropriate `handler` function. This function returns a `handler` function, and is registered in the [`AppModule`](#application-module-interface) to be used in the application's module manager to initialize the [application's router](../core/baseapp.md#routing). Next is an example of such a switch from the [nameservice tutorial](https://github.com/cosmos/sdk-tutorials/tree/master/nameservice) - +++ https://github.com/cosmos/sdk-tutorials/blob/master/nameservice/x/nameservice/handler.go#L12-L26 +- A **switch function** `NewHandler` to route the message to the appropriate `handler` function. This function returns a `handler` function, and is registered in the [`AppModule`](#application-module-interface) to be used in the application's module manager to initialize the [application's router](../core/baseapp.md#routing). Next is an example from `x/bank`: + +++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc1/x/bank/handler.go#L10-L30 - **One handler function for each message type defined by the module**. Developers write the message processing logic in these functions. This generally involves doing stateful checks to ensure the message is valid and calling [`keeper`](#keeper)'s methods to update the state. Handler functions return a result of type `sdk.Result`, which informs the application on whether the message was successfully processed: -+++ https://github.com/cosmos/cosmos-sdk/blob/d9175200920e96bfa4182b5c8bc46d91b17a28a1/types/result.go#L15-L40 ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc1/types/result.go#L15-L40 -### gRPC Query Services +### gRPC `Query` Services -gRPC query services are introduced in the v0.40 Stargate release. They allow users to query the state using [gRPC](https://grpc.io). They are enabled by default, and can be configued under the `grpc.enable` and `grpc.address` fields inside `app.toml`. +gRPC `Query` services are introduced in the v0.40 Stargate release. They allow users to query the state using [gRPC](https://grpc.io). They are enabled by default, and can be configued under the `grpc.enable` and `grpc.address` fields inside `app.toml`. -gRPC query services are defined in the module's Protobuf definition, specifically inside `query.proto`. The `query.proto` definition file exposes a single `Query` [Protobuf service](https://developers.google.com/protocol-buffers/docs/proto#services). Each gRPC query endpoint corresponds to a service method, starting with the `rpc` keyword, inside the `Query` service. +gRPC `Query` services are defined in the module's Protobuf definition files, specifically inside `query.proto`. The `query.proto` definition file exposes a single `Query` [Protobuf service](https://developers.google.com/protocol-buffers/docs/proto#services). Each gRPC query endpoint corresponds to a service method, starting with the `rpc` keyword, inside the `Query` service. Protobuf generates a `QueryServer` interface for each module, containing all the service methods. A module's [`keeper`](#keeper) then needs to implement this `QueryServer` interface, by providing the concrete implementation of each service method. This concrete implementation is the handler of the corresponding gRPC query endpoint. -Finally, each module should also implement the `RegisterQueryService` method as part of the [`AppModule` interface](#application-module-interface). This method should call the `RegisterQueryServer` function provided by the generated Protobuf code. +Finally, each module should also implement the `RegisterServices` method as part of the [`AppModule` interface](#application-module-interface). This method should call the `RegisterQueryServer` function provided by the generated Protobuf code. -### Legacy Querier +### Legacy `Msg`s -Legacy queriers were queriers used before the introduction of Protobuf and gRPC in the SDK. They are present for existing modules, but will be deprecated in a future release of the SDK. If you are developing new modules, gRPC query services should be preferred, and you only need to implement the `LegacyQuerierHandler` interface if you wish to use legacy queriers. +While the [`Msg` service](#msg-services) introduced in v0.40 is the official way to define `Msg`s, the SDK still handles legacy `Msg`s defined with previous versions of the SDK. + +[Legacy `Msg`s](../building-modules/messages-and-queries.md#messages) are objects defined by each module that implement the [`sdk.Msg`](../building-modules/messages-and-queries.md#messages) interface. Each [`transaction`](../core/transactions.md) contains one or multiple legacy `Msg`s, and can also contain both legacy and non-legacy `Msg`s. + +The application handles the transaction almost like with `Msg` service `Msg`s, only the third step (routing) differs: + +1. Upon receiving the transaction, the application first unmarshalls it from `[]bytes`. +2. Then, it verifies a few things about the transaction like [fee payment and signatures](#gas-fees.md#antehandler) before extracting the message(s) contained in the transaction. +3. With the `Type()` method of the legacy `Msg`, `baseapp` is able to route it to the appropriate module's [legacy `Msg` handler](#handler) in order for it to be processed. +4. If the message is successfully processed, the state is updated. + +New `Msg` services are compatible with legacy `Msg`s in terms of how `Msg`s are handled, please refer to the [handler](#handlers) section for more information. + +### Legacy Query Routes + +Legacy queriers were queriers used before the introduction of Protobuf and gRPC in the SDK. They are present for existing modules, but will be deprecated in a future release of the SDK. If you are developing new modules, gRPC `Query` services should be preferred, and you only need to implement the `LegacyQuerierHandler` interface if you wish to use legacy queriers. [`Legacy queriers`](../building-modules/query-services.md#legacy-queriers) are very similar to `handlers`, except they serve user queries to the state as opposed to processing transactions. A [query](../building-modules/messages-and-queries.md#queries) is initiated from an [interface](#application-interface) by an end-user who provides a `queryRoute` and some `data`. The query is then routed to the correct application's `querier` by `baseapp`'s `handleQueryCustom` method using `queryRoute`: -+++ https://github.com/cosmos/cosmos-sdk/blob/d9175200920e96bfa4182b5c8bc46d91b17a28a1/baseapp/abci.go#L388-L418 ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc1/baseapp/abci.go#L388-L418 The `Querier` of a module is defined in a file called `keeper/querier.go`, and consists of: @@ -240,7 +257,7 @@ The [module's Legacy REST interface](../building-modules/module-interfaces.md#le - A `RegisterRoutes` function, which registers each route defined in the file. This function is called from the [main application's interface](#application-interfaces) for each module used within the application. The router used in the SDK is [Gorilla's mux](https://github.com/gorilla/mux). - Custom request type definitions for each query or transaction creation function that needs to be exposed. These custom request types build on the base `request` type of the Cosmos SDK: - +++ https://github.com/cosmos/cosmos-sdk/blob/d9175200920e96bfa4182b5c8bc46d91b17a28a1/types/rest/rest.go#L62-L76 + +++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc1/types/rest/rest.go#L62-L76 - One handler function for each request that can be routed to the given module. These functions implement the core logic necessary to serve the request. These Legacy API endpoints are present in the SDK for backward compatibility purposes and will be removed in the next release. From dca9dcd2764896bcaffd71686911c8fa60801bc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?colin=20axn=C3=A9r?= <25233464+colin-axner@users.noreply.github.com> Date: Wed, 28 Oct 2020 14:31:22 +0100 Subject: [PATCH 20/27] Fix panic in context when setting nodeURI (#7699) * Fix panic in context Move URI parsing outside of context. WithNodeURI will only set the nodeURI. To set the Client in the context, WithClient must be called. * add changelog * add deleted space back --- CHANGELOG.md | 1 + client/cmd.go | 8 ++++++++ client/context.go | 7 ------- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1003e6bd00..fd6ba83dd4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -60,6 +60,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Bug Fixes * (kvstore) [\#7415](https://github.com/cosmos/cosmos-sdk/pull/7415) Allow new stores to be registered during on-chain upgrades. +* (client) [\#7699](https://github.com/cosmos/cosmos-sdk/pull/7699) Fix panic in context when setting invalid nodeURI. `WithNodeURI` does not set the `Client` in the context. ## [v0.40.0-rc0](https://github.com/cosmos/cosmos-sdk/releases/tag/v0.40.0-rc0) - 2020-10-13 diff --git a/client/cmd.go b/client/cmd.go index 712a792740..8395fb49b5 100644 --- a/client/cmd.go +++ b/client/cmd.go @@ -8,6 +8,7 @@ import ( "github.com/spf13/cobra" "github.com/spf13/pflag" "github.com/tendermint/tendermint/libs/cli" + rpchttp "github.com/tendermint/tendermint/rpc/client/http" "github.com/cosmos/cosmos-sdk/client/flags" sdk "github.com/cosmos/cosmos-sdk/types" @@ -131,6 +132,13 @@ func ReadPersistentCommandFlags(clientCtx Context, flagSet *pflag.FlagSet) (Cont rpcURI, _ := flagSet.GetString(flags.FlagNode) if rpcURI != "" { clientCtx = clientCtx.WithNodeURI(rpcURI) + + client, err := rpchttp.New(rpcURI, "/websocket") + if err != nil { + return clientCtx, err + } + + clientCtx = clientCtx.WithClient(client) } } diff --git a/client/context.go b/client/context.go index 96c909478b..7afddcf431 100644 --- a/client/context.go +++ b/client/context.go @@ -10,7 +10,6 @@ import ( "github.com/gogo/protobuf/proto" "github.com/pkg/errors" rpcclient "github.com/tendermint/tendermint/rpc/client" - rpchttp "github.com/tendermint/tendermint/rpc/client/http" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" @@ -95,12 +94,6 @@ func (ctx Context) WithOutputFormat(format string) Context { // WithNodeURI returns a copy of the context with an updated node URI. func (ctx Context) WithNodeURI(nodeURI string) Context { ctx.NodeURI = nodeURI - client, err := rpchttp.New(nodeURI, "/websocket") - if err != nil { - panic(err) - } - - ctx.Client = client return ctx } From d83fc46b970c7bf8cac28b1a5cde5d3218a9f4ea Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Oct 2020 14:39:23 +0100 Subject: [PATCH 21/27] build(deps): bump codecov/codecov-action from v1.0.13 to v1.0.14 (#7698) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Alessio Treglia Co-authored-by: Marko --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1976f21f0c..82003294f4 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -151,7 +151,7 @@ jobs: sed -i.bak "/$(echo $filename | sed 's/\//\\\//g')/d" coverage.txt done if: env.GIT_DIFF - - uses: codecov/codecov-action@v1.0.13 + - uses: codecov/codecov-action@v1.0.14 with: file: ./coverage.txt if: env.GIT_DIFF From 1b0d6540d8d59c3df5d236884d2d36c15f55c6d9 Mon Sep 17 00:00:00 2001 From: Federico Kunze <31522760+fedekunze@users.noreply.github.com> Date: Wed, 28 Oct 2020 16:57:48 +0100 Subject: [PATCH 22/27] ibc: internal audit part 1 (#7704) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ibc: internal audit part 1 * Update x/ibc/core/02-client/keeper/client.go * gofmt * fix tests Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> Co-authored-by: Colin Axner --- x/ibc/core/02-client/abci_test.go | 8 +++++++ x/ibc/core/02-client/keeper/client.go | 18 +++++++------- x/ibc/core/02-client/keeper/client_test.go | 12 +++++----- x/ibc/core/02-client/keeper/keeper_test.go | 19 ++++++++++----- x/ibc/core/02-client/types/genesis.go | 2 +- x/ibc/core/02-client/types/proposal.go | 7 +++++- x/ibc/core/24-host/keys.go | 14 ++--------- x/ibc/core/24-host/parse.go | 10 -------- x/ibc/core/24-host/validate.go | 16 ++++++------- x/ibc/core/handler.go | 4 ++++ x/ibc/core/keeper/msg_server.go | 4 ---- x/ibc/core/keeper/msg_server_test.go | 28 ---------------------- 12 files changed, 57 insertions(+), 85 deletions(-) diff --git a/x/ibc/core/02-client/abci_test.go b/x/ibc/core/02-client/abci_test.go index 33774b7c53..fe9016750f 100644 --- a/x/ibc/core/02-client/abci_test.go +++ b/x/ibc/core/02-client/abci_test.go @@ -8,6 +8,7 @@ import ( client "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client" "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" "github.com/cosmos/cosmos-sdk/x/ibc/core/exported" + localhosttypes "github.com/cosmos/cosmos-sdk/x/ibc/light-clients/09-localhost/types" ibctesting "github.com/cosmos/cosmos-sdk/x/ibc/testing" ) @@ -25,6 +26,13 @@ func (suite *ClientTestSuite) SetupTest() { suite.chainA = suite.coordinator.GetChain(ibctesting.GetChainID(0)) suite.chainB = suite.coordinator.GetChain(ibctesting.GetChainID(1)) + + // set localhost client + version := types.ParseChainID(suite.chainA.GetContext().ChainID()) + localHostClient := localhosttypes.NewClientState( + suite.chainA.GetContext().ChainID(), types.NewHeight(version, uint64(suite.chainA.GetContext().BlockHeight())), + ) + suite.chainA.App.IBCKeeper.ClientKeeper.SetClientState(suite.chainA.GetContext(), exported.Localhost, localHostClient) } func TestClientTestSuite(t *testing.T) { diff --git a/x/ibc/core/02-client/keeper/client.go b/x/ibc/core/02-client/keeper/client.go index 463df9ef46..49e9c62c88 100644 --- a/x/ibc/core/02-client/keeper/client.go +++ b/x/ibc/core/02-client/keeper/client.go @@ -22,6 +22,7 @@ func (k Keeper) CreateClient( return sdkerrors.Wrapf(types.ErrClientExists, "cannot create client with ID %s", clientID) } + // check if consensus state is nil in case the created client is Localhost if consensusState != nil { k.SetClientConsensusState(ctx, clientID, clientState.GetLatestHeight(), consensusState) } @@ -52,20 +53,15 @@ func (k Keeper) UpdateClient(ctx sdk.Context, clientID string, header exported.H return sdkerrors.Wrapf(types.ErrClientFrozen, "cannot update client with ID %s", clientID) } - var ( - consensusState exported.ConsensusState - consensusHeight exported.Height - err error - ) - - clientState, consensusState, err = clientState.CheckHeaderAndUpdateState(ctx, k.cdc, k.ClientStore(ctx, clientID), header) - + clientState, consensusState, err := clientState.CheckHeaderAndUpdateState(ctx, k.cdc, k.ClientStore(ctx, clientID), header) if err != nil { return sdkerrors.Wrapf(err, "cannot update client with ID %s", clientID) } k.SetClientState(ctx, clientID, clientState) + var consensusHeight exported.Height + // we don't set consensus state for localhost client if header != nil && clientID != exported.Localhost { k.SetClientConsensusState(ctx, clientID, header.GetHeight(), consensusState) @@ -116,7 +112,7 @@ func (k Keeper) UpgradeClient(ctx sdk.Context, clientID string, upgradedClient e err := clientState.VerifyUpgrade(ctx, k.cdc, k.ClientStore(ctx, clientID), upgradedClient, upgradeHeight, proofUpgrade) if err != nil { - return sdkerrors.Wrapf(err, "cannot upgrade client with ID: %s", clientID) + return sdkerrors.Wrapf(err, "cannot upgrade client with ID %s", clientID) } k.SetClientState(ctx, clientID, upgradedClient) @@ -155,6 +151,10 @@ func (k Keeper) CheckMisbehaviourAndUpdateState(ctx sdk.Context, misbehaviour ex return sdkerrors.Wrapf(types.ErrClientNotFound, "cannot check misbehaviour for client with ID %s", misbehaviour.GetClientID()) } + if clientState.IsFrozen() && clientState.GetFrozenHeight().LTE(misbehaviour.GetHeight()) { + return sdkerrors.Wrapf(types.ErrInvalidMisbehaviour, "client is already frozen at height ≤ misbehaviour height (%s ≤ %s)", clientState.GetFrozenHeight(), misbehaviour.GetHeight()) + } + clientState, err := clientState.CheckMisbehaviourAndUpdateState(ctx, k.cdc, k.ClientStore(ctx, misbehaviour.GetClientID()), misbehaviour) if err != nil { return err diff --git a/x/ibc/core/02-client/keeper/client_test.go b/x/ibc/core/02-client/keeper/client_test.go index d0e8a06254..31cf5d80fe 100644 --- a/x/ibc/core/02-client/keeper/client_test.go +++ b/x/ibc/core/02-client/keeper/client_test.go @@ -222,14 +222,14 @@ func (suite *KeeperTestSuite) TestUpdateClientTendermint() { } func (suite *KeeperTestSuite) TestUpdateClientLocalhost() { - var localhostClient exported.ClientState = localhosttypes.NewClientState(suite.header.Header.GetChainID(), types.NewHeight(0, uint64(suite.ctx.BlockHeight()))) + version := types.ParseChainID(suite.chainA.ChainID) + var localhostClient exported.ClientState = localhosttypes.NewClientState(suite.chainA.ChainID, types.NewHeight(version, uint64(suite.chainA.GetContext().BlockHeight()))) - suite.ctx = suite.ctx.WithBlockHeight(suite.ctx.BlockHeight() + 1) + ctx := suite.chainA.GetContext().WithBlockHeight(suite.chainA.GetContext().BlockHeight() + 1) + err := suite.chainA.App.IBCKeeper.ClientKeeper.UpdateClient(ctx, exported.Localhost, nil) + suite.Require().NoError(err) - err := suite.keeper.UpdateClient(suite.ctx, exported.Localhost, nil) - suite.Require().NoError(err, err) - - clientState, found := suite.keeper.GetClientState(suite.ctx, exported.Localhost) + clientState, found := suite.chainA.App.IBCKeeper.ClientKeeper.GetClientState(ctx, exported.Localhost) suite.Require().True(found) suite.Require().Equal(localhostClient.GetLatestHeight().(types.Height).Increment(), clientState.GetLatestHeight()) } diff --git a/x/ibc/core/02-client/keeper/keeper_test.go b/x/ibc/core/02-client/keeper/keeper_test.go index 9679353422..11db64a4d6 100644 --- a/x/ibc/core/02-client/keeper/keeper_test.go +++ b/x/ibc/core/02-client/keeper/keeper_test.go @@ -113,6 +113,13 @@ func (suite *KeeperTestSuite) SetupTest() { app.StakingKeeper.SetHistoricalInfo(suite.ctx, int64(i), &hi) } + // add localhost client + version := types.ParseChainID(suite.chainA.ChainID) + localHostClient := localhosttypes.NewClientState( + suite.chainA.ChainID, types.NewHeight(version, uint64(suite.chainA.GetContext().BlockHeight())), + ) + suite.chainA.App.IBCKeeper.ClientKeeper.SetClientState(suite.chainA.GetContext(), exported.Localhost, localHostClient) + queryHelper := baseapp.NewQueryServerTestHelper(suite.ctx, app.InterfaceRegistry()) types.RegisterQueryServer(queryHelper, app.IBCKeeper.ClientKeeper) suite.queryClient = types.NewQueryClient(queryHelper) @@ -245,15 +252,15 @@ func (suite KeeperTestSuite) TestGetAllClients() { } for i := range expClients { - suite.keeper.SetClientState(suite.ctx, clientIDs[i], expClients[i]) + suite.chainA.App.IBCKeeper.ClientKeeper.SetClientState(suite.chainA.GetContext(), clientIDs[i], expClients[i]) } // add localhost client - localHostClient, found := suite.keeper.GetClientState(suite.ctx, exported.Localhost) + localHostClient, found := suite.chainA.App.IBCKeeper.ClientKeeper.GetClientState(suite.chainA.GetContext(), exported.Localhost) suite.Require().True(found) expClients = append(expClients, localHostClient) - clients := suite.keeper.GetAllClients(suite.ctx) + clients := suite.chainA.App.IBCKeeper.ClientKeeper.GetAllClients(suite.chainA.GetContext()) suite.Require().Len(clients, len(expClients)) suite.Require().Equal(expClients, clients) } @@ -271,16 +278,16 @@ func (suite KeeperTestSuite) TestGetAllGenesisClients() { expGenClients := make([]types.IdentifiedClientState, len(expClients)) for i := range expClients { - suite.keeper.SetClientState(suite.ctx, clientIDs[i], expClients[i]) + suite.chainA.App.IBCKeeper.ClientKeeper.SetClientState(suite.chainA.GetContext(), clientIDs[i], expClients[i]) expGenClients[i] = types.NewIdentifiedClientState(clientIDs[i], expClients[i]) } // add localhost client - localHostClient, found := suite.keeper.GetClientState(suite.ctx, exported.Localhost) + localHostClient, found := suite.chainA.App.IBCKeeper.ClientKeeper.GetClientState(suite.chainA.GetContext(), exported.Localhost) suite.Require().True(found) expGenClients = append(expGenClients, types.NewIdentifiedClientState(exported.Localhost, localHostClient)) - genClients := suite.keeper.GetAllGenesisClients(suite.ctx) + genClients := suite.chainA.App.IBCKeeper.ClientKeeper.GetAllGenesisClients(suite.chainA.GetContext()) suite.Require().Equal(expGenClients, genClients) } diff --git a/x/ibc/core/02-client/types/genesis.go b/x/ibc/core/02-client/types/genesis.go index 77efae936e..c9be22f821 100644 --- a/x/ibc/core/02-client/types/genesis.go +++ b/x/ibc/core/02-client/types/genesis.go @@ -80,7 +80,7 @@ func DefaultGenesisState() GenesisState { return GenesisState{ Clients: []IdentifiedClientState{}, ClientsConsensus: ClientsConsensusStates{}, - CreateLocalhost: true, + CreateLocalhost: false, } } diff --git a/x/ibc/core/02-client/types/proposal.go b/x/ibc/core/02-client/types/proposal.go index b91fd1d06c..edbb4a8063 100644 --- a/x/ibc/core/02-client/types/proposal.go +++ b/x/ibc/core/02-client/types/proposal.go @@ -2,6 +2,7 @@ package types import ( govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + host "github.com/cosmos/cosmos-sdk/x/ibc/core/24-host" "github.com/cosmos/cosmos-sdk/x/ibc/core/exported" ) @@ -33,7 +34,7 @@ func (cup *ClientUpdateProposal) GetTitle() string { return cup.Title } // GetDescription returns the description of a client update proposal. func (cup *ClientUpdateProposal) GetDescription() string { return cup.Description } -// GetDescription returns the routing key of a client update proposal. +// ProposalRoute returns the routing key of a client update proposal. func (cup *ClientUpdateProposal) ProposalRoute() string { return RouterKey } // ProposalType returns the type of a client update proposal. @@ -46,6 +47,10 @@ func (cup *ClientUpdateProposal) ValidateBasic() error { return err } + if err := host.ClientIdentifierValidator(cup.ClientId); err != nil { + return err + } + header, err := UnpackHeader(cup.Header) if err != nil { return err diff --git a/x/ibc/core/24-host/keys.go b/x/ibc/core/24-host/keys.go index 50249552c0..c2f344028e 100644 --- a/x/ibc/core/24-host/keys.go +++ b/x/ibc/core/24-host/keys.go @@ -39,11 +39,6 @@ const ( KeyPacketReceiptPrefix = "receipts" ) -// KeyPrefixBytes return the key prefix bytes from a URL string format -func KeyPrefixBytes(prefix int) []byte { - return []byte(fmt.Sprintf("%d/", prefix)) -} - // FullClientPath returns the full path of a specific client path in the format: // "clients/{clientID}/{path}" as a string. func FullClientPath(clientID string, path string) string { @@ -87,7 +82,7 @@ func KeyConsensusState(height exported.Height) []byte { // ClientConnectionsPath defines a reverse mapping from clients to a set of connections func ClientConnectionsPath(clientID string) string { - return fmt.Sprintf("clients/%s/connections", clientID) + return fmt.Sprintf("%s/%s/connections", KeyClientStorePrefix, clientID) } // ConnectionPath defines the path under which connection paths are stored @@ -95,7 +90,7 @@ func ConnectionPath(connectionID string) string { return fmt.Sprintf("%s/%s", KeyConnectionPrefix, connectionID) } -// KeyClientConnections returns the store key for the connectios of a given client +// KeyClientConnections returns the store key for the connections of a given client func KeyClientConnections(clientID string) []byte { return []byte(ClientConnectionsPath(clientID)) } @@ -108,11 +103,6 @@ func KeyConnection(connectionID string) []byte { // ICS04 // The following paths are the keys to the store as defined in https://github.com/cosmos/ics/tree/master/spec/ics-004-channel-and-packet-semantics#store-paths -// GetChannelPortsKeysPrefix returns the prefix bytes for ICS04 and ICS05 iterators -func GetChannelPortsKeysPrefix(prefix int) []byte { - return []byte(fmt.Sprintf("%d/ports/", prefix)) -} - // ChannelPath defines the path under which channels are stored func ChannelPath(portID, channelID string) string { return fmt.Sprintf("%s/", KeyChannelPrefix) + channelPath(portID, channelID) diff --git a/x/ibc/core/24-host/parse.go b/x/ibc/core/24-host/parse.go index 31500c3463..7200c4ff00 100644 --- a/x/ibc/core/24-host/parse.go +++ b/x/ibc/core/24-host/parse.go @@ -6,16 +6,6 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) -// RemovePath is an util function to remove a path from a set. -func RemovePath(paths []string, path string) ([]string, bool) { - for i, p := range paths { - if p == path { - return append(paths[:i], paths[i+1:]...), true - } - } - return paths, false -} - // ParseConnectionPath returns the connection ID from a full path. It returns // an error if the provided path is invalid. func ParseConnectionPath(path string) (string, error) { diff --git a/x/ibc/core/24-host/validate.go b/x/ibc/core/24-host/validate.go index 0a8db56067..6d512fbe0c 100644 --- a/x/ibc/core/24-host/validate.go +++ b/x/ibc/core/24-host/validate.go @@ -56,29 +56,29 @@ func defaultIdentifierValidator(id string, min, max int) error { //nolint:unpara } // ClientIdentifierValidator is the default validator function for Client identifiers. -// A valid Identifier must be between 9-20 characters and only contain lowercase -// alphabetic characters, +// A valid Identifier must be between 9-64 characters and only contain lowercase +// alphabetic characters. func ClientIdentifierValidator(id string) error { return defaultIdentifierValidator(id, 9, DefaultMaxCharacterLength) } // ConnectionIdentifierValidator is the default validator function for Connection identifiers. -// A valid Identifier must be between 10-20 characters and only contain lowercase -// alphabetic characters, +// A valid Identifier must be between 10-64 characters and only contain lowercase +// alphabetic characters. func ConnectionIdentifierValidator(id string) error { return defaultIdentifierValidator(id, 10, DefaultMaxCharacterLength) } // ChannelIdentifierValidator is the default validator function for Channel identifiers. -// A valid Identifier must be between 10-20 characters and only contain lowercase -// alphabetic characters, +// A valid Identifier must be between 10-64 characters and only contain lowercase +// alphabetic characters. func ChannelIdentifierValidator(id string) error { return defaultIdentifierValidator(id, 10, DefaultMaxCharacterLength) } // PortIdentifierValidator is the default validator function for Port identifiers. -// A valid Identifier must be between 2-20 characters and only contain lowercase -// alphabetic characters, +// A valid Identifier must be between 2-64 characters and only contain lowercase +// alphabetic characters. func PortIdentifierValidator(id string) error { return defaultIdentifierValidator(id, 2, DefaultMaxCharacterLength) } diff --git a/x/ibc/core/handler.go b/x/ibc/core/handler.go index d2ef7f7b61..c8e4dfc898 100644 --- a/x/ibc/core/handler.go +++ b/x/ibc/core/handler.go @@ -24,6 +24,10 @@ func NewHandler(k keeper.Keeper) sdk.Handler { res, err := k.UpdateClient(sdk.WrapSDKContext(ctx), msg) return sdk.WrapServiceResult(ctx, res, err) + case *clienttypes.MsgUpgradeClient: + res, err := k.UpgradeClient(sdk.WrapSDKContext(ctx), msg) + return sdk.WrapServiceResult(ctx, res, err) + case *clienttypes.MsgSubmitMisbehaviour: res, err := k.SubmitMisbehaviour(sdk.WrapSDKContext(ctx), msg) return sdk.WrapServiceResult(ctx, res, err) diff --git a/x/ibc/core/keeper/msg_server.go b/x/ibc/core/keeper/msg_server.go index d448aca8b6..d26ea627b0 100644 --- a/x/ibc/core/keeper/msg_server.go +++ b/x/ibc/core/keeper/msg_server.go @@ -84,10 +84,6 @@ func (k Keeper) UpgradeClient(goCtx context.Context, msg *clienttypes.MsgUpgrade return nil, err } - if err := upgradedClient.Validate(); err != nil { - return nil, err - } - if err = k.ClientKeeper.UpgradeClient(ctx, msg.ClientId, upgradedClient, msg.UpgradeHeight, msg.ProofUpgrade); err != nil { return nil, err } diff --git a/x/ibc/core/keeper/msg_server_test.go b/x/ibc/core/keeper/msg_server_test.go index 2f3910fe71..0e1f6aab77 100644 --- a/x/ibc/core/keeper/msg_server_test.go +++ b/x/ibc/core/keeper/msg_server_test.go @@ -688,34 +688,6 @@ func (suite *KeeperTestSuite) TestUpgradeClient() { }, expPass: false, }, - { - name: "invalid clientstate", - setup: func() { - - upgradedClient = ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod+ibctesting.TrustingPeriod, ibctesting.MaxClockDrift, newClientHeight, ibctesting.DefaultConsensusParams, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, false, false) - - // upgrade Height is at next block - upgradeHeight = clienttypes.NewHeight(0, uint64(suite.chainB.GetContext().BlockHeight()+1)) - - // zero custom fields and store in upgrade store - suite.chainB.App.UpgradeKeeper.SetUpgradedClient(suite.chainB.GetContext(), int64(upgradeHeight.GetVersionHeight()), upgradedClient) - - // commit upgrade store changes and update clients - - suite.coordinator.CommitBlock(suite.chainB) - err := suite.coordinator.UpdateClient(suite.chainA, suite.chainB, clientA, ibctesting.Tendermint) - suite.Require().NoError(err) - - cs, found := suite.chainA.App.IBCKeeper.ClientKeeper.GetClientState(suite.chainA.GetContext(), clientA) - suite.Require().True(found) - - proofUpgrade, _ := suite.chainB.QueryUpgradeProof(upgradetypes.UpgradedClientKey(int64(upgradeHeight.GetVersionHeight())), cs.GetLatestHeight().GetVersionHeight()) - - msg, err = clienttypes.NewMsgUpgradeClient(clientA, upgradedClient, upgradeHeight, proofUpgrade, suite.chainA.SenderAccount.GetAddress()) - suite.Require().NoError(err) - }, - expPass: false, - }, { name: "VerifyUpgrade fails", setup: func() { From 82f15f306e8a6a2e9ae3e122c348b579c43a3d92 Mon Sep 17 00:00:00 2001 From: Amaury Martiny Date: Wed, 28 Oct 2020 20:20:45 +0100 Subject: [PATCH 23/27] RegisterInterfaces registers service Msg type_urls (#7671) * Add RegisterMsgServiceDesc * Refactor newSendTxMsgServiceCmd * Add test * Register in all modules * Remove RegisterMsgServiceDesc from baseapp * Add explicit error message * Add comment * Update comment * Add test * Update comment * Remove duplicate import * Fix lint * Forgot vesting * Fix lint * Fix test * Put in types/module * Put in types/msgservice * Add comment about panic * Update baseapp/msg_service_router.go Co-authored-by: Robert Zaremba * Update baseapp/msg_service_router.go Co-authored-by: Robert Zaremba * Update baseapp/msg_service_router.go Co-authored-by: Robert Zaremba * Add comment * Add better test * Update baseapp/msg_service_router.go Co-authored-by: Marie Gauthier Co-authored-by: Robert Zaremba Co-authored-by: Marie Gauthier Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- baseapp/msg_service_router.go | 40 ++++----- baseapp/msg_service_router_test.go | 31 ++++++- testutil/testdata/codec.go | 3 + types/msgservice/msg_service.go | 44 ++++++++++ x/auth/client/cli/cli_test.go | 39 +++++++-- x/auth/vesting/types/codec.go | 3 + x/bank/client/cli/cli_test.go | 88 +------------------- x/bank/client/testutil/cli_helpers.go | 95 ++++++++++++++++++++++ x/bank/types/codec.go | 3 + x/crisis/types/codec.go | 3 + x/distribution/types/codec.go | 3 + x/evidence/types/codec.go | 3 + x/gov/types/codec.go | 3 + x/ibc/applications/transfer/types/codec.go | 3 + x/ibc/core/02-client/types/codec.go | 3 + x/ibc/core/03-connection/types/codec.go | 3 + x/ibc/core/04-channel/types/codec.go | 3 + x/slashing/types/codec.go | 3 + x/staking/types/codec.go | 3 + 19 files changed, 259 insertions(+), 117 deletions(-) create mode 100644 types/msgservice/msg_service.go diff --git a/baseapp/msg_service_router.go b/baseapp/msg_service_router.go index b02fbd10c0..b883faa37b 100644 --- a/baseapp/msg_service_router.go +++ b/baseapp/msg_service_router.go @@ -39,27 +39,32 @@ func (msr *MsgServiceRouter) Handler(methodName string) MsgServiceHandler { // RegisterService implements the gRPC Server.RegisterService method. sd is a gRPC // service description, handler is an object which implements that gRPC service. +// +// This function PANICs if it is called before the service `Msg`s have been +// registered using RegisterInterfaces. func (msr *MsgServiceRouter) RegisterService(sd *grpc.ServiceDesc, handler interface{}) { // Adds a top-level query handler based on the gRPC service name. for _, method := range sd.Methods { fqMethod := fmt.Sprintf("/%s/%s", sd.ServiceName, method.MethodName) methodHandler := method.Handler - // NOTE: This is how we pull the concrete request type for each handler for registering in the InterfaceRegistry. - // This approach is maybe a bit hacky, but less hacky than reflecting on the handler object itself. - // We use a no-op interceptor to avoid actually calling into the handler itself. - _, _ = methodHandler(nil, context.Background(), func(i interface{}) error { - msg, ok := i.(proto.Message) - if !ok { - // We panic here because there is no other alternative and the app cannot be initialized correctly - // this should only happen if there is a problem with code generation in which case the app won't - // work correctly anyway. - panic(fmt.Errorf("can't register request type %T for service method %s", i, fqMethod)) - } - - msr.interfaceRegistry.RegisterCustomTypeURL((*sdk.MsgRequest)(nil), fqMethod, msg) - return nil - }, noopInterceptor) + // Check that the service Msg fully-qualified method name has already + // been registered (via RegisterInterfaces). If the user registers a + // service without registering according service Msg type, there might be + // some unexpected behavior down the road. Since we can't return an error + // (`Server.RegisterService` interface restriction) we panic (at startup). + serviceMsg, err := msr.interfaceRegistry.Resolve(fqMethod) + if err != nil || serviceMsg == nil { + panic( + fmt.Errorf( + "type_url %s has not been registered yet. "+ + "Before calling RegisterService, you must register all interfaces by calling the `RegisterInterfaces` "+ + "method on module.BasicManager. Each module should call `msgservice.RegisterMsgServiceDesc` inside its "+ + "`RegisterInterfaces` method with the `_Msg_serviceDesc` generated by proto-gen", + fqMethod, + ), + ) + } msr.routes[fqMethod] = func(ctx sdk.Context, req sdk.MsgRequest) (*sdk.Result, error) { ctx = ctx.WithEventManager(sdk.NewEventManager()) @@ -89,9 +94,4 @@ func (msr *MsgServiceRouter) SetInterfaceRegistry(interfaceRegistry codectypes.I msr.interfaceRegistry = interfaceRegistry } -// gRPC NOOP interceptor -func noopInterceptor(_ context.Context, _ interface{}, _ *grpc.UnaryServerInfo, _ grpc.UnaryHandler) (interface{}, error) { - return nil, nil -} - func noopDecoder(_ interface{}) error { return nil } diff --git a/baseapp/msg_service_router_test.go b/baseapp/msg_service_router_test.go index d5e01acd17..bbbf9e1356 100644 --- a/baseapp/msg_service_router_test.go +++ b/baseapp/msg_service_router_test.go @@ -4,15 +4,13 @@ import ( "os" "testing" - "github.com/cosmos/cosmos-sdk/baseapp" - - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" + "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client/tx" "github.com/cosmos/cosmos-sdk/simapp" "github.com/cosmos/cosmos-sdk/testutil/testdata" @@ -20,9 +18,34 @@ import ( authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" ) +func TestRegisterService(t *testing.T) { + db := dbm.NewMemDB() + + // Create an encoding config that doesn't register testdata Msg services. + encCfg := simapp.MakeTestEncodingConfig() + app := baseapp.NewBaseApp("test", log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, encCfg.TxConfig.TxDecoder()) + app.SetInterfaceRegistry(encCfg.InterfaceRegistry) + require.Panics(t, func() { + testdata.RegisterMsgServer( + app.MsgServiceRouter(), + testdata.MsgServerImpl{}, + ) + }) + + // Register testdata Msg services, and rerun `RegisterService`. + testdata.RegisterInterfaces(encCfg.InterfaceRegistry) + require.NotPanics(t, func() { + testdata.RegisterMsgServer( + app.MsgServiceRouter(), + testdata.MsgServerImpl{}, + ) + }) +} + func TestMsgService(t *testing.T) { priv, _, _ := testdata.KeyTestPubAddr() encCfg := simapp.MakeTestEncodingConfig() + testdata.RegisterInterfaces(encCfg.InterfaceRegistry) db := dbm.NewMemDB() app := baseapp.NewBaseApp("test", log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, encCfg.TxConfig.TxDecoder()) app.SetInterfaceRegistry(encCfg.InterfaceRegistry) diff --git a/testutil/testdata/codec.go b/testutil/testdata/codec.go index 54f63d03c2..d5c6e8abd2 100644 --- a/testutil/testdata/codec.go +++ b/testutil/testdata/codec.go @@ -5,6 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" ) func NewTestInterfaceRegistry() types.InterfaceRegistry { @@ -30,6 +31,8 @@ func RegisterInterfaces(registry types.InterfaceRegistry) { (*HasHasAnimalI)(nil), &HasHasAnimal{}, ) + + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) } func NewTestAmino() *amino.Codec { diff --git a/types/msgservice/msg_service.go b/types/msgservice/msg_service.go new file mode 100644 index 0000000000..277ee3d157 --- /dev/null +++ b/types/msgservice/msg_service.go @@ -0,0 +1,44 @@ +package msgservice + +import ( + "context" + "fmt" + + "github.com/gogo/protobuf/proto" + "google.golang.org/grpc" + + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// RegisterMsgServiceDesc registers all type_urls from Msg services described +// in `sd` into the registry. +func RegisterMsgServiceDesc(registry codectypes.InterfaceRegistry, sd *grpc.ServiceDesc) { + // Adds a top-level type_url based on the Msg service name. + for _, method := range sd.Methods { + fqMethod := fmt.Sprintf("/%s/%s", sd.ServiceName, method.MethodName) + methodHandler := method.Handler + + // NOTE: This is how we pull the concrete request type for each handler for registering in the InterfaceRegistry. + // This approach is maybe a bit hacky, but less hacky than reflecting on the handler object itself. + // We use a no-op interceptor to avoid actually calling into the handler itself. + _, _ = methodHandler(nil, context.Background(), func(i interface{}) error { + msg, ok := i.(proto.Message) + if !ok { + // We panic here because there is no other alternative and the app cannot be initialized correctly + // this should only happen if there is a problem with code generation in which case the app won't + // work correctly anyway. + panic(fmt.Errorf("can't register request type %T for service method %s", i, fqMethod)) + } + + registry.RegisterCustomTypeURL((*sdk.MsgRequest)(nil), fqMethod, msg) + return nil + }, noopInterceptor) + + } +} + +// gRPC NOOP interceptor +func noopInterceptor(_ context.Context, _ interface{}, _ *grpc.UnaryServerInfo, _ grpc.UnaryHandler) (interface{}, error) { + return nil, nil +} diff --git a/x/auth/client/cli/cli_test.go b/x/auth/client/cli/cli_test.go index 0902501a79..4961e91c37 100644 --- a/x/auth/client/cli/cli_test.go +++ b/x/auth/client/cli/cli_test.go @@ -174,9 +174,11 @@ func (s *IntegrationTestSuite) TestCLIQueryTxCmd() { account2, err := val.ClientCtx.Keyring.Key("newAccount2") s.Require().NoError(err) - // Send coins. sendTokens := sdk.NewInt64Coin(s.cfg.BondDenom, 10) - out, err := bankcli.MsgSendExec( + + // Send coins, try both with legacy Msg and with Msg service. + // Legacy Msg. + legacyMsgOut, err := bankcli.MsgSendExec( val.ClientCtx, val.Address, account2.GetAddress(), @@ -187,31 +189,55 @@ func (s *IntegrationTestSuite) TestCLIQueryTxCmd() { fmt.Sprintf("--gas=%d", flags.DefaultGasLimit), ) s.Require().NoError(err) + var legacyMsgTxRes sdk.TxResponse + s.Require().NoError(val.ClientCtx.JSONMarshaler.UnmarshalJSON(legacyMsgOut.Bytes(), &legacyMsgTxRes)) + // Service Msg. + out, err := bankcli.ServiceMsgSendExec( + val.ClientCtx, + val.Address, + account2.GetAddress(), + sdk.NewCoins(sendTokens), + fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--gas=%d", flags.DefaultGasLimit), + ) + s.Require().NoError(err) var txRes sdk.TxResponse s.Require().NoError(val.ClientCtx.JSONMarshaler.UnmarshalJSON(out.Bytes(), &txRes)) s.Require().NoError(s.network.WaitForNextBlock()) testCases := []struct { - name string - args []string - expectErr bool + name string + args []string + expectErr bool + rawLogContains string }{ { "with invalid hash", []string{"somethinginvalid", fmt.Sprintf("--%s=json", tmcli.OutputFlag)}, true, + "", }, { "with valid and not existing hash", []string{"C7E7D3A86A17AB3A321172239F3B61357937AF0F25D9FA4D2F4DCCAD9B0D7747", fmt.Sprintf("--%s=json", tmcli.OutputFlag)}, true, + "", }, { - "happy case", + "happy case (legacy Msg)", + []string{legacyMsgTxRes.TxHash, fmt.Sprintf("--%s=json", tmcli.OutputFlag)}, + false, + "", + }, + { + "happy case (service Msg)", []string{txRes.TxHash, fmt.Sprintf("--%s=json", tmcli.OutputFlag)}, false, + "/cosmos.bank.v1beta1.Msg/Send", }, } @@ -230,6 +256,7 @@ func (s *IntegrationTestSuite) TestCLIQueryTxCmd() { var result sdk.TxResponse s.Require().NoError(val.ClientCtx.JSONMarshaler.UnmarshalJSON(out.Bytes(), &result)) s.Require().NotNil(result.Height) + s.Require().Contains(result.RawLog, tc.rawLogContains) } }) } diff --git a/x/auth/vesting/types/codec.go b/x/auth/vesting/types/codec.go index f5652ea017..eeaf80a95a 100644 --- a/x/auth/vesting/types/codec.go +++ b/x/auth/vesting/types/codec.go @@ -4,6 +4,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/cosmos/cosmos-sdk/x/auth/vesting/exported" ) @@ -49,6 +50,8 @@ func RegisterInterfaces(registry types.InterfaceRegistry) { (*sdk.Msg)(nil), &MsgCreateVestingAccount{}, ) + + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) } var amino = codec.NewLegacyAmino() diff --git a/x/bank/client/cli/cli_test.go b/x/bank/client/cli/cli_test.go index c68be4ccd3..9b8c5cf612 100644 --- a/x/bank/client/cli/cli_test.go +++ b/x/bank/client/cli/cli_test.go @@ -5,13 +5,6 @@ import ( "fmt" "testing" - "github.com/spf13/cobra" - - "github.com/cosmos/cosmos-sdk/client/tx" - - "github.com/gogo/protobuf/grpc" - grpc2 "google.golang.org/grpc" - "github.com/gogo/protobuf/proto" "github.com/stretchr/testify/suite" tmcli "github.com/tendermint/tendermint/libs/cli" @@ -302,82 +295,6 @@ func (s *IntegrationTestSuite) TestNewSendTxCmd() { } } -// serviceMsgClientConn is an instance of grpc.ClientConn that is used to test building -// transactions with MsgClient's. It is intended to be replaced by the work in -// https://github.com/cosmos/cosmos-sdk/issues/7541 when that is ready. -type serviceMsgClientConn struct { - msgs []sdk.Msg -} - -func (t *serviceMsgClientConn) Invoke(_ context.Context, method string, args, _ interface{}, _ ...grpc2.CallOption) error { - req, ok := args.(sdk.MsgRequest) - if !ok { - return fmt.Errorf("%T should implement %T", args, (*sdk.MsgRequest)(nil)) - } - - err := req.ValidateBasic() - if err != nil { - return err - } - - t.msgs = append(t.msgs, sdk.ServiceMsg{ - MethodName: method, - Request: req, - }) - - return nil -} - -func (t *serviceMsgClientConn) NewStream(context.Context, *grpc2.StreamDesc, string, ...grpc2.CallOption) (grpc2.ClientStream, error) { - return nil, fmt.Errorf("not supported") -} - -var _ grpc.ClientConn = &serviceMsgClientConn{} - -// newSendTxMsgServiceCmd is just for the purpose of testing ServiceMsg's in an end-to-end case. It is effectively -// NewSendTxCmd but using MsgClient. -func newSendTxMsgServiceCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "send [from_key_or_address] [to_address] [amount]", - Short: `Send funds from one account to another. Note, the'--from' flag is -ignored as it is implied from [from_key_or_address].`, - Args: cobra.ExactArgs(3), - RunE: func(cmd *cobra.Command, args []string) error { - cmd.Flags().Set(flags.FlagFrom, args[0]) - - clientCtx := client.GetClientContextFromCmd(cmd) - clientCtx, err := client.ReadTxCommandFlags(clientCtx, cmd.Flags()) - if err != nil { - return err - } - - toAddr, err := sdk.AccAddressFromBech32(args[1]) - if err != nil { - return err - } - - coins, err := sdk.ParseCoins(args[2]) - if err != nil { - return err - } - - msg := types.NewMsgSend(clientCtx.GetFromAddress(), toAddr, coins) - svcMsgClientConn := &serviceMsgClientConn{} - bankMsgClient := types.NewMsgClient(svcMsgClientConn) - _, err = bankMsgClient.Send(context.Background(), msg) - if err != nil { - return err - } - - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), svcMsgClientConn.msgs...) - }, - } - - flags.AddTxFlagsToCmd(cmd) - - return cmd -} - // TestBankMsgService does a basic test of whether or not service Msg's as defined // in ADR 031 work in the most basic end-to-end case. func (s *IntegrationTestSuite) TestBankMsgService() { @@ -419,10 +336,7 @@ func (s *IntegrationTestSuite) TestBankMsgService() { s.Run(tc.name, func() { clientCtx := val.ClientCtx - args := []string{tc.from.String(), tc.to.String(), tc.amount.String()} - args = append(args, tc.args...) - - bz, err := clitestutil.ExecTestCLICmd(clientCtx, newSendTxMsgServiceCmd(), args) + bz, err := banktestutil.ServiceMsgSendExec(clientCtx, tc.from, tc.to, tc.amount, tc.args...) if tc.expectErr { s.Require().Error(err) } else { diff --git a/x/bank/client/testutil/cli_helpers.go b/x/bank/client/testutil/cli_helpers.go index a1a33c4f67..4dff74e2b5 100644 --- a/x/bank/client/testutil/cli_helpers.go +++ b/x/bank/client/testutil/cli_helpers.go @@ -1,14 +1,22 @@ package testutil import ( + "context" "fmt" + gogogrpc "github.com/gogo/protobuf/grpc" + "github.com/spf13/cobra" "github.com/tendermint/tendermint/libs/cli" + grpc "google.golang.org/grpc" "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/client/tx" "github.com/cosmos/cosmos-sdk/testutil" clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" + sdk "github.com/cosmos/cosmos-sdk/types" bankcli "github.com/cosmos/cosmos-sdk/x/bank/client/cli" + "github.com/cosmos/cosmos-sdk/x/bank/types" ) func MsgSendExec(clientCtx client.Context, from, to, amount fmt.Stringer, extraArgs ...string) (testutil.BufferWriter, error) { @@ -24,3 +32,90 @@ func QueryBalancesExec(clientCtx client.Context, address fmt.Stringer, extraArgs return clitestutil.ExecTestCLICmd(clientCtx, bankcli.GetBalancesCmd(), args) } + +// serviceMsgClientConn is an instance of grpc.ClientConn that is used to test building +// transactions with MsgClient's. It is intended to be replaced by the work in +// https://github.com/cosmos/cosmos-sdk/issues/7541 when that is ready. +type serviceMsgClientConn struct { + msgs []sdk.Msg +} + +func (t *serviceMsgClientConn) Invoke(_ context.Context, method string, args, _ interface{}, _ ...grpc.CallOption) error { + req, ok := args.(sdk.MsgRequest) + if !ok { + return fmt.Errorf("%T should implement %T", args, (*sdk.MsgRequest)(nil)) + } + + err := req.ValidateBasic() + if err != nil { + return err + } + + t.msgs = append(t.msgs, sdk.ServiceMsg{ + MethodName: method, + Request: req, + }) + + return nil +} + +func (t *serviceMsgClientConn) NewStream(context.Context, *grpc.StreamDesc, string, ...grpc.CallOption) (grpc.ClientStream, error) { + return nil, fmt.Errorf("not supported") +} + +var _ gogogrpc.ClientConn = &serviceMsgClientConn{} + +// newSendTxMsgServiceCmd is just for the purpose of testing ServiceMsg's in an end-to-end case. It is effectively +// NewSendTxCmd but using MsgClient. +func newSendTxMsgServiceCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "send [from_key_or_address] [to_address] [amount]", + Short: `Send funds from one account to another. Note, the'--from' flag is +ignored as it is implied from [from_key_or_address].`, + Args: cobra.ExactArgs(3), + RunE: func(cmd *cobra.Command, args []string) error { + cmd.Flags().Set(flags.FlagFrom, args[0]) + + clientCtx := client.GetClientContextFromCmd(cmd) + clientCtx, err := client.ReadTxCommandFlags(clientCtx, cmd.Flags()) + if err != nil { + return err + } + + toAddr, err := sdk.AccAddressFromBech32(args[1]) + if err != nil { + return err + } + + coins, err := sdk.ParseCoins(args[2]) + if err != nil { + return err + } + + msg := types.NewMsgSend(clientCtx.GetFromAddress(), toAddr, coins) + svcMsgClientConn := &serviceMsgClientConn{} + bankMsgClient := types.NewMsgClient(svcMsgClientConn) + _, err = bankMsgClient.Send(context.Background(), msg) + if err != nil { + return err + } + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), svcMsgClientConn.msgs...) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +// ServiceMsgSendExec is a temporary method to test Msg services in CLI using +// x/bank's Msg/Send service. After https://github.com/cosmos/cosmos-sdk/issues/7541 +// is merged, this method should be removed, and we should prefer MsgSendExec +// instead. +func ServiceMsgSendExec(clientCtx client.Context, from, to, amount fmt.Stringer, extraArgs ...string) (testutil.BufferWriter, error) { + args := []string{from.String(), to.String(), amount.String()} + args = append(args, extraArgs...) + + return clitestutil.ExecTestCLICmd(clientCtx, newSendTxMsgServiceCmd(), args) +} diff --git a/x/bank/types/codec.go b/x/bank/types/codec.go index 42c117e24a..ef1c897d97 100644 --- a/x/bank/types/codec.go +++ b/x/bank/types/codec.go @@ -5,6 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec/types" cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" "github.com/cosmos/cosmos-sdk/x/bank/exported" ) @@ -28,6 +29,8 @@ func RegisterInterfaces(registry types.InterfaceRegistry) { (*exported.SupplyI)(nil), &Supply{}, ) + + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) } var ( diff --git a/x/crisis/types/codec.go b/x/crisis/types/codec.go index 3b5dd5eb5a..ac02c54630 100644 --- a/x/crisis/types/codec.go +++ b/x/crisis/types/codec.go @@ -5,6 +5,7 @@ import ( codectypes "github.com/cosmos/cosmos-sdk/codec/types" cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" ) // RegisterLegacyAminoCodec registers the necessary x/crisis interfaces and concrete types @@ -17,6 +18,8 @@ func RegisterInterfaces(registry codectypes.InterfaceRegistry) { registry.RegisterImplementations((*sdk.Msg)(nil), &MsgVerifyInvariant{}, ) + + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) } var ( diff --git a/x/distribution/types/codec.go b/x/distribution/types/codec.go index 8d0e81f370..73aca45060 100644 --- a/x/distribution/types/codec.go +++ b/x/distribution/types/codec.go @@ -5,6 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec/types" cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" ) @@ -30,6 +31,8 @@ func RegisterInterfaces(registry types.InterfaceRegistry) { (*govtypes.Content)(nil), &CommunityPoolSpendProposal{}, ) + + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) } var ( diff --git a/x/evidence/types/codec.go b/x/evidence/types/codec.go index b75d9efb4f..9de2743e38 100644 --- a/x/evidence/types/codec.go +++ b/x/evidence/types/codec.go @@ -5,6 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec/types" cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" "github.com/cosmos/cosmos-sdk/x/evidence/exported" ) @@ -23,6 +24,8 @@ func RegisterInterfaces(registry types.InterfaceRegistry) { (*exported.Evidence)(nil), &Equivocation{}, ) + + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) } var ( diff --git a/x/gov/types/codec.go b/x/gov/types/codec.go index 85bac043ab..46deb5c59e 100644 --- a/x/gov/types/codec.go +++ b/x/gov/types/codec.go @@ -5,6 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec/types" cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" ) // RegisterLegacyAminoCodec registers all the necessary types and interfaces for the @@ -28,6 +29,8 @@ func RegisterInterfaces(registry types.InterfaceRegistry) { (*Content)(nil), &TextProposal{}, ) + + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) } // RegisterProposalTypeCodec registers an external proposal content type defined diff --git a/x/ibc/applications/transfer/types/codec.go b/x/ibc/applications/transfer/types/codec.go index e7ee37abb4..18b594f8a7 100644 --- a/x/ibc/applications/transfer/types/codec.go +++ b/x/ibc/applications/transfer/types/codec.go @@ -4,12 +4,15 @@ import ( "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" ) // RegisterInterfaces register the ibc transfer module interfaces to protobuf // Any. func RegisterInterfaces(registry codectypes.InterfaceRegistry) { registry.RegisterImplementations((*sdk.Msg)(nil), &MsgTransfer{}) + + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) } var ( diff --git a/x/ibc/core/02-client/types/codec.go b/x/ibc/core/02-client/types/codec.go index 76402a1116..d3cb8f7a5f 100644 --- a/x/ibc/core/02-client/types/codec.go +++ b/x/ibc/core/02-client/types/codec.go @@ -6,6 +6,7 @@ import ( codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/types/msgservice" "github.com/cosmos/cosmos-sdk/x/ibc/core/exported" ) @@ -41,6 +42,8 @@ func RegisterInterfaces(registry codectypes.InterfaceRegistry) { &MsgUpdateClient{}, &MsgSubmitMisbehaviour{}, ) + + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) } // PackClientState constructs a new Any packed with the given client state value. It returns diff --git a/x/ibc/core/03-connection/types/codec.go b/x/ibc/core/03-connection/types/codec.go index c784590d0c..6105fa9ee1 100644 --- a/x/ibc/core/03-connection/types/codec.go +++ b/x/ibc/core/03-connection/types/codec.go @@ -4,6 +4,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" "github.com/cosmos/cosmos-sdk/x/ibc/core/exported" ) @@ -32,6 +33,8 @@ func RegisterInterfaces(registry codectypes.InterfaceRegistry) { &MsgConnectionOpenAck{}, &MsgConnectionOpenConfirm{}, ) + + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) } var ( diff --git a/x/ibc/core/04-channel/types/codec.go b/x/ibc/core/04-channel/types/codec.go index 6ea150a792..a74f0a7fc9 100644 --- a/x/ibc/core/04-channel/types/codec.go +++ b/x/ibc/core/04-channel/types/codec.go @@ -4,6 +4,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" "github.com/cosmos/cosmos-sdk/x/ibc/core/exported" ) @@ -47,6 +48,8 @@ func RegisterInterfaces(registry codectypes.InterfaceRegistry) { &MsgTimeout{}, &MsgTimeoutOnClose{}, ) + + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) } // SubModuleCdc references the global x/ibc/core/04-channel module codec. Note, the codec should diff --git a/x/slashing/types/codec.go b/x/slashing/types/codec.go index a6edce9fb9..bc89862f1b 100644 --- a/x/slashing/types/codec.go +++ b/x/slashing/types/codec.go @@ -5,6 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec/types" cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" ) // RegisterLegacyAminoCodec registers concrete types on LegacyAmino codec @@ -16,6 +17,8 @@ func RegisterInterfaces(registry types.InterfaceRegistry) { registry.RegisterImplementations((*sdk.Msg)(nil), &MsgUnjail{}, ) + + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) } var ( diff --git a/x/staking/types/codec.go b/x/staking/types/codec.go index b4b3c353dc..714554a33c 100644 --- a/x/staking/types/codec.go +++ b/x/staking/types/codec.go @@ -5,6 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec/types" cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" ) // RegisterLegacyAminoCodec registers the necessary x/staking interfaces and concrete types @@ -26,6 +27,8 @@ func RegisterInterfaces(registry types.InterfaceRegistry) { &MsgUndelegate{}, &MsgBeginRedelegate{}, ) + + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) } var ( From 536eb689dca9e5456bece211ca9da604714865c3 Mon Sep 17 00:00:00 2001 From: Cory Date: Thu, 29 Oct 2020 04:37:46 -0700 Subject: [PATCH 24/27] Add Deprecation headers for legacy rest endpoints (#7686) * add deprecation headers for legacy rest endpoints * add deprecation headers for missing tx routes * rm handler-level deprecation headers * switch to middleware Route.Use method for setting deprecation Headers * set deprecation headers using subrouter * cleanup gofmt * goimports * Update client/rest/rest.go * update deprecation headers to be set on each module individually Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- client/docs/swagger-ui/swagger-ui-bundle.js | 2 +- client/docs/swagger_legacy.yaml | 2 +- client/rest/rest.go | 27 +++++++++++++++++++++ types/module/module.go | 3 +-- x/auth/client/rest/rest.go | 7 ++++-- x/bank/client/rest/rest.go | 4 ++- x/distribution/client/rest/rest.go | 5 +++- x/evidence/client/rest/rest.go | 5 +++- x/gov/client/rest/rest.go | 4 ++- x/mint/client/rest/rest.go | 4 ++- x/slashing/client/rest/rest.go | 5 +++- x/staking/client/rest/rest.go | 4 ++- x/upgrade/client/rest/rest.go | 4 ++- 13 files changed, 62 insertions(+), 14 deletions(-) create mode 100644 client/rest/rest.go diff --git a/client/docs/swagger-ui/swagger-ui-bundle.js b/client/docs/swagger-ui/swagger-ui-bundle.js index 4491b4b284..07eceace93 100644 --- a/client/docs/swagger-ui/swagger-ui-bundle.js +++ b/client/docs/swagger-ui/swagger-ui-bundle.js @@ -41773,4 +41773,4 @@ }, o.resolve = i, e.exports = o, o.id = 1058 }]) }); -//# sourceMappingURL=swagger-ui-bundle.js.map \ No newline at end of file +//# sourceMappingURL=swagger-ui-bundle.js.map diff --git a/client/docs/swagger_legacy.yaml b/client/docs/swagger_legacy.yaml index 6e996d42cd..fe00efa484 100644 --- a/client/docs/swagger_legacy.yaml +++ b/client/docs/swagger_legacy.yaml @@ -2595,4 +2595,4 @@ definitions: total: type: array items: - $ref: "#/definitions/Coin" \ No newline at end of file + $ref: "#/definitions/Coin" diff --git a/client/rest/rest.go b/client/rest/rest.go new file mode 100644 index 0000000000..9a0f901840 --- /dev/null +++ b/client/rest/rest.go @@ -0,0 +1,27 @@ +package rest + +import ( + "net/http" + + "github.com/gorilla/mux" +) + +// addHTTPDeprecationHeaders is a mux middleware function for adding HTTP +// Deprecation headers to a http handler +func addHTTPDeprecationHeaders(h http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Deprecation", "true") + w.Header().Set("Link", "; rel=\"deprecation\"") + w.Header().Set("Warning", "199 - \"this endpoint is deprecated and may not work as before, see deprecation link for more info\"") + h.ServeHTTP(w, r) + }) +} + +// WithHTTPDeprecationHeaders returns a new *mux.Router, identical to its input +// but with the addition of HTTP Deprecation headers. This is used to mark legacy +// amino REST endpoints as deprecated in the REST API. +func WithHTTPDeprecationHeaders(r *mux.Router) *mux.Router { + subRouter := r.NewRoute().Subrouter() + subRouter.Use(addHTTPDeprecationHeaders) + return subRouter +} diff --git a/types/module/module.go b/types/module/module.go index 97319e5d00..6b678745e2 100644 --- a/types/module/module.go +++ b/types/module/module.go @@ -31,9 +31,8 @@ package module import ( "encoding/json" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/gorilla/mux" + "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" abci "github.com/tendermint/tendermint/abci/types" diff --git a/x/auth/client/rest/rest.go b/x/auth/client/rest/rest.go index d3106edca2..77f8f48964 100644 --- a/x/auth/client/rest/rest.go +++ b/x/auth/client/rest/rest.go @@ -4,6 +4,7 @@ import ( "github.com/gorilla/mux" "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/rest" ) // REST query and parameter values @@ -12,7 +13,8 @@ const ( ) // RegisterRoutes registers the auth module REST routes. -func RegisterRoutes(clientCtx client.Context, r *mux.Router, storeName string) { +func RegisterRoutes(clientCtx client.Context, rtr *mux.Router, storeName string) { + r := rest.WithHTTPDeprecationHeaders(rtr) r.HandleFunc( "/auth/accounts/{address}", QueryAccountRequestHandlerFn(storeName, clientCtx), ).Methods(MethodGet) @@ -24,7 +26,8 @@ func RegisterRoutes(clientCtx client.Context, r *mux.Router, storeName string) { } // RegisterTxRoutes registers all transaction routes on the provided router. -func RegisterTxRoutes(clientCtx client.Context, r *mux.Router) { +func RegisterTxRoutes(clientCtx client.Context, rtr *mux.Router) { + r := rest.WithHTTPDeprecationHeaders(rtr) r.HandleFunc("/txs/{hash}", QueryTxRequestHandlerFn(clientCtx)).Methods("GET") r.HandleFunc("/txs", QueryTxsRequestHandlerFn(clientCtx)).Methods("GET") r.HandleFunc("/txs", BroadcastTxRequest(clientCtx)).Methods("POST") diff --git a/x/bank/client/rest/rest.go b/x/bank/client/rest/rest.go index e70a946d26..4325386d44 100644 --- a/x/bank/client/rest/rest.go +++ b/x/bank/client/rest/rest.go @@ -1,6 +1,7 @@ package rest import ( + "github.com/cosmos/cosmos-sdk/client/rest" "github.com/gorilla/mux" "github.com/cosmos/cosmos-sdk/client" @@ -8,7 +9,8 @@ import ( // RegisterHandlers registers all x/bank transaction and query HTTP REST handlers // on the provided mux router. -func RegisterHandlers(clientCtx client.Context, r *mux.Router) { +func RegisterHandlers(clientCtx client.Context, rtr *mux.Router) { + r := rest.WithHTTPDeprecationHeaders(rtr) r.HandleFunc("/bank/accounts/{address}/transfers", NewSendRequestHandlerFn(clientCtx)).Methods("POST") r.HandleFunc("/bank/balances/{address}", QueryBalancesRequestHandlerFn(clientCtx)).Methods("GET") r.HandleFunc("/bank/total", totalSupplyHandlerFn(clientCtx)).Methods("GET") diff --git a/x/distribution/client/rest/rest.go b/x/distribution/client/rest/rest.go index 0269e92611..3fdcef89e1 100644 --- a/x/distribution/client/rest/rest.go +++ b/x/distribution/client/rest/rest.go @@ -6,6 +6,7 @@ import ( "github.com/gorilla/mux" "github.com/cosmos/cosmos-sdk/client" + clientrest "github.com/cosmos/cosmos-sdk/client/rest" "github.com/cosmos/cosmos-sdk/client/tx" "github.com/cosmos/cosmos-sdk/types/rest" "github.com/cosmos/cosmos-sdk/x/distribution/types" @@ -13,7 +14,9 @@ import ( govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" ) -func RegisterHandlers(clientCtx client.Context, r *mux.Router) { +func RegisterHandlers(clientCtx client.Context, rtr *mux.Router) { + r := clientrest.WithHTTPDeprecationHeaders(rtr) + registerQueryRoutes(clientCtx, r) registerTxHandlers(clientCtx, r) } diff --git a/x/evidence/client/rest/rest.go b/x/evidence/client/rest/rest.go index 89756eb58a..f2714cc7ba 100644 --- a/x/evidence/client/rest/rest.go +++ b/x/evidence/client/rest/rest.go @@ -4,6 +4,7 @@ import ( "net/http" "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/rest" "github.com/gorilla/mux" ) @@ -24,7 +25,9 @@ type EvidenceRESTHandler struct { // RegisterRoutes registers all Evidence submission handlers for the evidence module's // REST service handler. -func RegisterRoutes(clientCtx client.Context, r *mux.Router, handlers []EvidenceRESTHandler) { +func RegisterRoutes(clientCtx client.Context, rtr *mux.Router, handlers []EvidenceRESTHandler) { + r := rest.WithHTTPDeprecationHeaders(rtr) + registerQueryRoutes(clientCtx, r) registerTxRoutes(clientCtx, r, handlers) } diff --git a/x/gov/client/rest/rest.go b/x/gov/client/rest/rest.go index 5136e19ea1..f11798e967 100644 --- a/x/gov/client/rest/rest.go +++ b/x/gov/client/rest/rest.go @@ -6,6 +6,7 @@ import ( "github.com/gorilla/mux" "github.com/cosmos/cosmos-sdk/client" + clientrest "github.com/cosmos/cosmos-sdk/client/rest" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/rest" ) @@ -28,7 +29,8 @@ type ProposalRESTHandler struct { Handler func(http.ResponseWriter, *http.Request) } -func RegisterHandlers(clientCtx client.Context, r *mux.Router, phs []ProposalRESTHandler) { +func RegisterHandlers(clientCtx client.Context, rtr *mux.Router, phs []ProposalRESTHandler) { + r := clientrest.WithHTTPDeprecationHeaders(rtr) registerQueryRoutes(clientCtx, r) registerTxHandlers(clientCtx, r, phs) } diff --git a/x/mint/client/rest/rest.go b/x/mint/client/rest/rest.go index a159739a0b..2ed28d41d7 100644 --- a/x/mint/client/rest/rest.go +++ b/x/mint/client/rest/rest.go @@ -4,9 +4,11 @@ import ( "github.com/gorilla/mux" "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/rest" ) // RegisterRoutes registers minting module REST handlers on the provided router. -func RegisterRoutes(clientCtx client.Context, r *mux.Router) { +func RegisterRoutes(clientCtx client.Context, rtr *mux.Router) { + r := rest.WithHTTPDeprecationHeaders(rtr) registerQueryRoutes(clientCtx, r) } diff --git a/x/slashing/client/rest/rest.go b/x/slashing/client/rest/rest.go index cdce1a34a0..21d73a5e88 100644 --- a/x/slashing/client/rest/rest.go +++ b/x/slashing/client/rest/rest.go @@ -1,12 +1,15 @@ package rest import ( + "github.com/cosmos/cosmos-sdk/client/rest" "github.com/gorilla/mux" "github.com/cosmos/cosmos-sdk/client" ) -func RegisterHandlers(clientCtx client.Context, r *mux.Router) { +func RegisterHandlers(clientCtx client.Context, rtr *mux.Router) { + r := rest.WithHTTPDeprecationHeaders(rtr) + registerQueryRoutes(clientCtx, r) registerTxHandlers(clientCtx, r) } diff --git a/x/staking/client/rest/rest.go b/x/staking/client/rest/rest.go index cdce1a34a0..bb4e82917c 100644 --- a/x/staking/client/rest/rest.go +++ b/x/staking/client/rest/rest.go @@ -1,12 +1,14 @@ package rest import ( + "github.com/cosmos/cosmos-sdk/client/rest" "github.com/gorilla/mux" "github.com/cosmos/cosmos-sdk/client" ) -func RegisterHandlers(clientCtx client.Context, r *mux.Router) { +func RegisterHandlers(clientCtx client.Context, rtr *mux.Router) { + r := rest.WithHTTPDeprecationHeaders(rtr) registerQueryRoutes(clientCtx, r) registerTxHandlers(clientCtx, r) } diff --git a/x/upgrade/client/rest/rest.go b/x/upgrade/client/rest/rest.go index cdb078e7da..83577c0cbc 100644 --- a/x/upgrade/client/rest/rest.go +++ b/x/upgrade/client/rest/rest.go @@ -1,13 +1,15 @@ package rest import ( + "github.com/cosmos/cosmos-sdk/client/rest" "github.com/gorilla/mux" "github.com/cosmos/cosmos-sdk/client" ) // RegisterRoutes registers REST routes for the upgrade module under the path specified by routeName. -func RegisterRoutes(clientCtx client.Context, r *mux.Router) { +func RegisterRoutes(clientCtx client.Context, rtr *mux.Router) { + r := rest.WithHTTPDeprecationHeaders(rtr) registerQueryRoutes(clientCtx, r) registerTxHandlers(clientCtx, r) } From b7b925a1acf6d48e4ba08737b65bb540ee0920a7 Mon Sep 17 00:00:00 2001 From: Aditya Date: Thu, 29 Oct 2020 12:17:37 +0000 Subject: [PATCH 25/27] Sort validators like tendermint in HistoricalInfo (#7691) * sort validators like tendermint * address comments * switch ordering in tests * change sort logic in error case * don't change test validators array order Co-authored-by: Jack Zampolin Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- x/staking/keeper/historical_info_test.go | 11 +++++---- x/staking/keeper/keeper_test.go | 6 ++++- x/staking/types/historical_info.go | 3 ++- x/staking/types/validator.go | 25 +++++++++++++++++++ x/staking/types/validator_test.go | 31 ++++++++++++++++++++++++ 5 files changed, 69 insertions(+), 7 deletions(-) diff --git a/x/staking/keeper/historical_info_test.go b/x/staking/keeper/historical_info_test.go index 0ccdee9408..a9411d0db9 100644 --- a/x/staking/keeper/historical_info_test.go +++ b/x/staking/keeper/historical_info_test.go @@ -31,7 +31,7 @@ func TestHistoricalInfo(t *testing.T) { recv, found := app.StakingKeeper.GetHistoricalInfo(ctx, 2) require.True(t, found, "HistoricalInfo not found after set") require.Equal(t, hi, recv, "HistoricalInfo not equal") - require.True(t, sort.IsSorted(types.Validators(recv.Valset)), "HistoricalInfo validators is not sorted") + require.True(t, sort.IsSorted(types.ValidatorsByVotingPower(recv.Valset)), "HistoricalInfo validators is not sorted") app.StakingKeeper.DeleteHistoricalInfo(ctx, 2) @@ -76,15 +76,16 @@ func TestTrackHistoricalInfo(t *testing.T) { require.True(t, found) require.Equal(t, hi5, recv) - // Set last validators in keeper + // Set bonded validators in keeper val1 := teststaking.NewValidator(t, addrVals[2], PKs[2]) app.StakingKeeper.SetValidator(ctx, val1) app.StakingKeeper.SetLastValidatorPower(ctx, val1.GetOperator(), 10) val2 := teststaking.NewValidator(t, addrVals[3], PKs[3]) - vals := []types.Validator{val1, val2} - sort.Sort(types.Validators(vals)) app.StakingKeeper.SetValidator(ctx, val2) - app.StakingKeeper.SetLastValidatorPower(ctx, val2.GetOperator(), 8) + app.StakingKeeper.SetLastValidatorPower(ctx, val2.GetOperator(), 80) + + vals := []types.Validator{val1, val2} + sort.Sort(types.ValidatorsByVotingPower(vals)) // Set Header for BeginBlock context header := tmproto.Header{ diff --git a/x/staking/keeper/keeper_test.go b/x/staking/keeper/keeper_test.go index 0342dfea9b..2f9819989f 100644 --- a/x/staking/keeper/keeper_test.go +++ b/x/staking/keeper/keeper_test.go @@ -41,7 +41,11 @@ func (suite *KeeperTestSuite) SetupTest() { Height: 5, } - hi := types.NewHistoricalInfo(header, validators) + // sort a copy of the validators, so that original validators does not + // have its order changed + sortedVals := make([]types.Validator, len(validators)) + copy(sortedVals, validators) + hi := types.NewHistoricalInfo(header, sortedVals) app.StakingKeeper.SetHistoricalInfo(ctx, 5, &hi) suite.app, suite.ctx, suite.queryClient, suite.addrs, suite.vals = app, ctx, queryClient, addrs, validators diff --git a/x/staking/types/historical_info.go b/x/staking/types/historical_info.go index 10df3ced02..1a8461ad13 100644 --- a/x/staking/types/historical_info.go +++ b/x/staking/types/historical_info.go @@ -14,7 +14,8 @@ import ( // NewHistoricalInfo will create a historical information struct from header and valset // it will first sort valset before inclusion into historical info func NewHistoricalInfo(header tmproto.Header, valSet Validators) HistoricalInfo { - sort.Sort(valSet) + // Must sort in the same way that tendermint does + sort.Sort(ValidatorsByVotingPower(valSet)) return HistoricalInfo{ Header: header, diff --git a/x/staking/types/validator.go b/x/staking/types/validator.go index 8b5cfcdf14..19e032dbab 100644 --- a/x/staking/types/validator.go +++ b/x/staking/types/validator.go @@ -123,6 +123,31 @@ func (v Validators) Swap(i, j int) { v[j] = it } +// ValidatorsByVotingPower implements sort.Interface for []Validator based on +// the VotingPower and Address fields. +// The validators are sorted first by their voting power (descending). Secondary index - Address (ascending). +// Copied from tendermint/types/validator_set.go +type ValidatorsByVotingPower []Validator + +func (valz ValidatorsByVotingPower) Len() int { return len(valz) } + +func (valz ValidatorsByVotingPower) Less(i, j int) bool { + if valz[i].ConsensusPower() == valz[j].ConsensusPower() { + addrI, errI := valz[i].GetConsAddr() + addrJ, errJ := valz[j].GetConsAddr() + // If either returns error, then return false + if errI != nil || errJ != nil { + return false + } + return bytes.Compare(addrI, addrJ) == -1 + } + return valz[i].ConsensusPower() > valz[j].ConsensusPower() +} + +func (valz ValidatorsByVotingPower) Swap(i, j int) { + valz[i], valz[j] = valz[j], valz[i] +} + // UnpackInterfaces implements UnpackInterfacesMessage.UnpackInterfaces func (v Validators) UnpackInterfaces(c codectypes.AnyUnpacker) error { for i := range v { diff --git a/x/staking/types/validator_test.go b/x/staking/types/validator_test.go index 2e9d961169..64afc97681 100644 --- a/x/staking/types/validator_test.go +++ b/x/staking/types/validator_test.go @@ -274,6 +274,37 @@ func TestValidatorsSortDeterminism(t *testing.T) { } } +// Check SortTendermint sorts the same as tendermint +func TestValidatorsSortTendermint(t *testing.T) { + vals := make([]Validator, 100) + + for i := range vals { + pk := ed25519.GenPrivKey().PubKey() + pk2 := ed25519.GenPrivKey().PubKey() + vals[i] = newValidator(t, sdk.ValAddress(pk2.Address()), pk) + vals[i].Status = Bonded + vals[i].Tokens = sdk.NewInt(rand.Int63()) + } + // create some validators with the same power + for i := 0; i < 10; i++ { + vals[i].Tokens = sdk.NewInt(1000000) + } + + valz := Validators(vals) + + // create expected tendermint validators by converting to tendermint then sorting + expectedVals, err := valz.ToTmValidators() + require.NoError(t, err) + sort.Sort(tmtypes.ValidatorsByVotingPower(expectedVals)) + + // sort in SDK and then convert to tendermint + sort.Sort(ValidatorsByVotingPower(valz)) + actualVals, err := valz.ToTmValidators() + require.NoError(t, err) + + require.Equal(t, expectedVals, actualVals, "sorting in SDK is not the same as sorting in Tendermint") +} + func TestValidatorToTm(t *testing.T) { vals := make(Validators, 10) expected := make([]*tmtypes.Validator, 10) From 1a157132899d95d7075dbf3a6750e10d5e4b2dcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?colin=20axn=C3=A9r?= <25233464+colin-axner@users.noreply.github.com> Date: Thu, 29 Oct 2020 13:42:12 +0100 Subject: [PATCH 26/27] remove proof path from IBC queries (#7725) * remove proof path * make proto-all with old install * fix build --- proto/ibc/core/channel/v1/query.proto | 24 +- proto/ibc/core/client/v1/query.proto | 8 +- proto/ibc/core/connection/v1/query.proto | 16 +- x/ibc/core/02-client/client/utils/utils.go | 4 +- x/ibc/core/02-client/types/query.go | 12 +- x/ibc/core/02-client/types/query.pb.go | 209 ++----- .../core/03-connection/client/utils/utils.go | 4 +- x/ibc/core/03-connection/types/query.go | 16 +- x/ibc/core/03-connection/types/query.pb.go | 340 +++--------- x/ibc/core/04-channel/client/utils/utils.go | 6 +- x/ibc/core/04-channel/keeper/grpc_query.go | 8 +- x/ibc/core/04-channel/types/query.go | 24 +- x/ibc/core/04-channel/types/query.pb.go | 510 ++++-------------- 13 files changed, 246 insertions(+), 935 deletions(-) diff --git a/proto/ibc/core/channel/v1/query.proto b/proto/ibc/core/channel/v1/query.proto index 13b14ce4c0..16faf462d5 100644 --- a/proto/ibc/core/channel/v1/query.proto +++ b/proto/ibc/core/channel/v1/query.proto @@ -94,10 +94,8 @@ message QueryChannelResponse { ibc.core.channel.v1.Channel channel = 1; // merkle proof of existence bytes proof = 2; - // merkle proof path - string proof_path = 3; // height at which the proof was retrieved - ibc.core.client.v1.Height proof_height = 4 [(gogoproto.nullable) = false]; + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; } // QueryChannelsRequest is the request type for the Query/Channels RPC method @@ -152,10 +150,8 @@ message QueryChannelClientStateResponse { ibc.core.client.v1.IdentifiedClientState identified_client_state = 1; // merkle proof of existence bytes proof = 2; - // merkle proof path - string proof_path = 3; // height at which the proof was retrieved - ibc.core.client.v1.Height proof_height = 4 [(gogoproto.nullable) = false]; + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; } // QueryChannelConsensusStateRequest is the request type for the @@ -180,10 +176,8 @@ message QueryChannelConsensusStateResponse { string client_id = 2; // merkle proof of existence bytes proof = 3; - // merkle proof path - string proof_path = 4; // height at which the proof was retrieved - ibc.core.client.v1.Height proof_height = 5 [(gogoproto.nullable) = false]; + ibc.core.client.v1.Height proof_height = 4 [(gogoproto.nullable) = false]; } // QueryPacketCommitmentRequest is the request type for the @@ -205,10 +199,8 @@ message QueryPacketCommitmentResponse { bytes commitment = 1; // merkle proof of existence bytes proof = 2; - // merkle proof path - string proof_path = 3; // height at which the proof was retrieved - ibc.core.client.v1.Height proof_height = 4 [(gogoproto.nullable) = false]; + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; } // QueryPacketCommitmentsRequest is the request type for the @@ -251,10 +243,8 @@ message QueryPacketAcknowledgementResponse { bytes acknowledgement = 1; // merkle proof of existence bytes proof = 2; - // merkle proof path - string proof_path = 3; // height at which the proof was retrieved - ibc.core.client.v1.Height proof_height = 4 [(gogoproto.nullable) = false]; + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; } // QueryUnreceivedPacketsRequest is the request type for the @@ -313,8 +303,6 @@ message QueryNextSequenceReceiveResponse { uint64 next_sequence_receive = 1; // merkle proof of existence bytes proof = 2; - // merkle proof path - string proof_path = 3; // height at which the proof was retrieved - ibc.core.client.v1.Height proof_height = 4 [(gogoproto.nullable) = false]; + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; } diff --git a/proto/ibc/core/client/v1/query.proto b/proto/ibc/core/client/v1/query.proto index 25584b13bd..a40fed843e 100644 --- a/proto/ibc/core/client/v1/query.proto +++ b/proto/ibc/core/client/v1/query.proto @@ -50,10 +50,8 @@ message QueryClientStateResponse { google.protobuf.Any client_state = 1; // merkle proof of existence bytes proof = 2; - // merkle proof path - string proof_path = 3; // height at which the proof was retrieved - ibc.core.client.v1.Height proof_height = 4 [(gogoproto.nullable) = false]; + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; } // QueryClientStatesRequest is the request type for the Query/ClientStates RPC @@ -94,10 +92,8 @@ message QueryConsensusStateResponse { google.protobuf.Any consensus_state = 1; // merkle proof of existence bytes proof = 2; - // merkle proof path - string proof_path = 3; // height at which the proof was retrieved - ibc.core.client.v1.Height proof_height = 4 [(gogoproto.nullable) = false]; + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; } // QueryConsensusStatesRequest is the request type for the Query/ConsensusStates diff --git a/proto/ibc/core/connection/v1/query.proto b/proto/ibc/core/connection/v1/query.proto index 6a36a382b5..c2666ee28a 100644 --- a/proto/ibc/core/connection/v1/query.proto +++ b/proto/ibc/core/connection/v1/query.proto @@ -57,10 +57,8 @@ message QueryConnectionResponse { ibc.core.connection.v1.ConnectionEnd connection = 1; // merkle proof of existence bytes proof = 2; - // merkle proof path - string proof_path = 3; // height at which the proof was retrieved - ibc.core.client.v1.Height proof_height = 4 [(gogoproto.nullable) = false]; + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; } // QueryConnectionsRequest is the request type for the Query/Connections RPC @@ -94,10 +92,8 @@ message QueryClientConnectionsResponse { repeated string connection_paths = 1; // merkle proof of existence bytes proof = 2; - // merkle proof path - string proof_path = 3; // height at which the proof was generated - ibc.core.client.v1.Height proof_height = 4 [(gogoproto.nullable) = false]; + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; } // QueryConnectionClientStateRequest is the request type for the @@ -114,10 +110,8 @@ message QueryConnectionClientStateResponse { ibc.core.client.v1.IdentifiedClientState identified_client_state = 1; // merkle proof of existence bytes proof = 2; - // merkle proof path - string proof_path = 3; // height at which the proof was retrieved - ibc.core.client.v1.Height proof_height = 4 [(gogoproto.nullable) = false]; + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; } // QueryConnectionConsensusStateRequest is the request type for the @@ -138,8 +132,6 @@ message QueryConnectionConsensusStateResponse { string client_id = 2; // merkle proof of existence bytes proof = 3; - // merkle proof path - string proof_path = 4; // height at which the proof was retrieved - ibc.core.client.v1.Height proof_height = 5 [(gogoproto.nullable) = false]; + ibc.core.client.v1.Height proof_height = 4 [(gogoproto.nullable) = false]; } diff --git a/x/ibc/core/02-client/client/utils/utils.go b/x/ibc/core/02-client/client/utils/utils.go index e87073cb4b..bcd649ae77 100644 --- a/x/ibc/core/02-client/client/utils/utils.go +++ b/x/ibc/core/02-client/client/utils/utils.go @@ -62,7 +62,7 @@ func QueryClientStateABCI( return nil, err } - clientStateRes := types.NewQueryClientStateResponse(clientID, anyClientState, proofBz, proofHeight) + clientStateRes := types.NewQueryClientStateResponse(anyClientState, proofBz, proofHeight) return clientStateRes, nil } @@ -115,7 +115,7 @@ func QueryConsensusStateABCI( return nil, err } - return types.NewQueryConsensusStateResponse(clientID, anyConsensusState, proofBz, proofHeight), nil + return types.NewQueryConsensusStateResponse(anyConsensusState, proofBz, proofHeight), nil } // QueryTendermintHeader takes a client context and returns the appropriate diff --git a/x/ibc/core/02-client/types/query.go b/x/ibc/core/02-client/types/query.go index c629898ff5..3f898dadb4 100644 --- a/x/ibc/core/02-client/types/query.go +++ b/x/ibc/core/02-client/types/query.go @@ -1,35 +1,27 @@ package types import ( - "strings" - codectypes "github.com/cosmos/cosmos-sdk/codec/types" - commitmenttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/23-commitment/types" - host "github.com/cosmos/cosmos-sdk/x/ibc/core/24-host" ) // NewQueryClientStateResponse creates a new QueryClientStateResponse instance. func NewQueryClientStateResponse( - clientID string, clientStateAny *codectypes.Any, proof []byte, height Height, + clientStateAny *codectypes.Any, proof []byte, height Height, ) *QueryClientStateResponse { - path := commitmenttypes.NewMerklePath(append([]string{clientID}, strings.Split(host.ClientStatePath(), "/")...)) return &QueryClientStateResponse{ ClientState: clientStateAny, Proof: proof, - ProofPath: path.Pretty(), ProofHeight: height, } } // NewQueryConsensusStateResponse creates a new QueryConsensusStateResponse instance. func NewQueryConsensusStateResponse( - clientID string, consensusStateAny *codectypes.Any, proof []byte, height Height, + consensusStateAny *codectypes.Any, proof []byte, height Height, ) *QueryConsensusStateResponse { - path := commitmenttypes.NewMerklePath(strings.Split(host.FullClientPath(clientID, host.ConsensusStatePath(height)), "/")) return &QueryConsensusStateResponse{ ConsensusState: consensusStateAny, Proof: proof, - ProofPath: path.Pretty(), ProofHeight: height, } } diff --git a/x/ibc/core/02-client/types/query.pb.go b/x/ibc/core/02-client/types/query.pb.go index 3b2c2612b8..fb91ead13c 100644 --- a/x/ibc/core/02-client/types/query.pb.go +++ b/x/ibc/core/02-client/types/query.pb.go @@ -86,10 +86,8 @@ type QueryClientStateResponse struct { ClientState *types.Any `protobuf:"bytes,1,opt,name=client_state,json=clientState,proto3" json:"client_state,omitempty"` // merkle proof of existence Proof []byte `protobuf:"bytes,2,opt,name=proof,proto3" json:"proof,omitempty"` - // merkle proof path - ProofPath string `protobuf:"bytes,3,opt,name=proof_path,json=proofPath,proto3" json:"proof_path,omitempty"` // height at which the proof was retrieved - ProofHeight Height `protobuf:"bytes,4,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height"` + ProofHeight Height `protobuf:"bytes,3,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height"` } func (m *QueryClientStateResponse) Reset() { *m = QueryClientStateResponse{} } @@ -139,13 +137,6 @@ func (m *QueryClientStateResponse) GetProof() []byte { return nil } -func (m *QueryClientStateResponse) GetProofPath() string { - if m != nil { - return m.ProofPath - } - return "" -} - func (m *QueryClientStateResponse) GetProofHeight() Height { if m != nil { return m.ProofHeight @@ -339,10 +330,8 @@ type QueryConsensusStateResponse struct { ConsensusState *types.Any `protobuf:"bytes,1,opt,name=consensus_state,json=consensusState,proto3" json:"consensus_state,omitempty"` // merkle proof of existence Proof []byte `protobuf:"bytes,2,opt,name=proof,proto3" json:"proof,omitempty"` - // merkle proof path - ProofPath string `protobuf:"bytes,3,opt,name=proof_path,json=proofPath,proto3" json:"proof_path,omitempty"` // height at which the proof was retrieved - ProofHeight Height `protobuf:"bytes,4,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height"` + ProofHeight Height `protobuf:"bytes,3,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height"` } func (m *QueryConsensusStateResponse) Reset() { *m = QueryConsensusStateResponse{} } @@ -392,13 +381,6 @@ func (m *QueryConsensusStateResponse) GetProof() []byte { return nil } -func (m *QueryConsensusStateResponse) GetProofPath() string { - if m != nil { - return m.ProofPath - } - return "" -} - func (m *QueryConsensusStateResponse) GetProofHeight() Height { if m != nil { return m.ProofHeight @@ -532,55 +514,54 @@ func init() { func init() { proto.RegisterFile("ibc/core/client/v1/query.proto", fileDescriptor_dc42cdfd1d52d76e) } var fileDescriptor_dc42cdfd1d52d76e = []byte{ - // 765 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x56, 0x4f, 0x4f, 0x13, 0x41, - 0x14, 0xef, 0xf0, 0xc7, 0xc0, 0xb4, 0x80, 0x99, 0x90, 0x58, 0x16, 0x2c, 0x58, 0xa2, 0x82, 0xd2, - 0x19, 0x5a, 0xa3, 0x78, 0xf1, 0x20, 0x24, 0x28, 0x17, 0x02, 0xeb, 0xc1, 0xc4, 0xc4, 0x90, 0xdd, - 0xed, 0xb0, 0x9d, 0x08, 0x3b, 0xa5, 0x33, 0x6d, 0x24, 0x84, 0x0b, 0x9f, 0xc0, 0xc4, 0xc4, 0xab, - 0x5f, 0xc0, 0x78, 0xf2, 0x33, 0x18, 0x2e, 0x26, 0x44, 0x13, 0xe3, 0xc1, 0x18, 0x03, 0x7e, 0x10, - 0xb3, 0x33, 0xb3, 0xb0, 0x0b, 0x4b, 0x58, 0x8d, 0x89, 0xa7, 0xee, 0xbe, 0x3f, 0xf3, 0x7e, 0xef, - 0xf7, 0x7b, 0xf3, 0xba, 0xb0, 0xc4, 0x5c, 0x8f, 0x78, 0xbc, 0x45, 0x89, 0xb7, 0xc1, 0x68, 0x20, - 0x49, 0xa7, 0x4a, 0xb6, 0xda, 0xb4, 0xb5, 0x8d, 0x9b, 0x2d, 0x2e, 0x39, 0x42, 0xcc, 0xf5, 0x70, - 0xe8, 0xc7, 0xda, 0x8f, 0x3b, 0x55, 0xeb, 0x96, 0xc7, 0xc5, 0x26, 0x17, 0xc4, 0x75, 0x04, 0xd5, - 0xc1, 0xa4, 0x53, 0x75, 0xa9, 0x74, 0xaa, 0xa4, 0xe9, 0xf8, 0x2c, 0x70, 0x24, 0xe3, 0x81, 0xce, - 0xb7, 0xc6, 0x53, 0xce, 0x37, 0x27, 0xe9, 0x80, 0x11, 0x9f, 0x73, 0x7f, 0x83, 0x12, 0xf5, 0xe6, - 0xb6, 0xd7, 0x89, 0x13, 0x98, 0xda, 0xd6, 0x98, 0x71, 0x39, 0x4d, 0x46, 0x9c, 0x20, 0xe0, 0x52, - 0x1d, 0x2c, 0x8c, 0x77, 0xd8, 0xe7, 0x3e, 0x57, 0x8f, 0x24, 0x7c, 0xd2, 0xd6, 0xf2, 0x3d, 0x78, - 0x65, 0x35, 0x44, 0xb4, 0xa0, 0x6a, 0x3c, 0x91, 0x8e, 0xa4, 0x36, 0xdd, 0x6a, 0x53, 0x21, 0xd1, - 0x28, 0xec, 0xd7, 0x95, 0xd7, 0x58, 0xbd, 0x08, 0x26, 0xc0, 0x54, 0xbf, 0xdd, 0xa7, 0x0d, 0x4b, - 0xf5, 0xf2, 0x27, 0x00, 0x8b, 0x67, 0x13, 0x45, 0x93, 0x07, 0x82, 0xa2, 0x39, 0x58, 0x30, 0x99, - 0x22, 0xb4, 0xab, 0xe4, 0x7c, 0x6d, 0x18, 0x6b, 0x7c, 0x38, 0x82, 0x8e, 0x1f, 0x06, 0xdb, 0x76, - 0xde, 0x3b, 0x39, 0x00, 0x0d, 0xc3, 0xde, 0x66, 0x8b, 0xf3, 0xf5, 0x62, 0xd7, 0x04, 0x98, 0x2a, - 0xd8, 0xfa, 0x05, 0x5d, 0x85, 0x50, 0x3d, 0xac, 0x35, 0x1d, 0xd9, 0x28, 0x76, 0x2b, 0x24, 0xfd, - 0xca, 0xb2, 0xe2, 0xc8, 0x06, 0x5a, 0x80, 0x05, 0xed, 0x6e, 0x50, 0xe6, 0x37, 0x64, 0xb1, 0x47, - 0x55, 0xb3, 0xf0, 0x59, 0x25, 0xf0, 0x63, 0x15, 0x31, 0xdf, 0xb3, 0xff, 0x63, 0x3c, 0x67, 0xe7, - 0x55, 0x96, 0x36, 0x95, 0xdd, 0xb3, 0xed, 0x88, 0x88, 0x88, 0x45, 0x08, 0x4f, 0x74, 0x32, 0xcd, - 0xdc, 0xc0, 0x5a, 0x54, 0x1c, 0x8a, 0x8a, 0xf5, 0x04, 0x18, 0x51, 0xf1, 0x8a, 0xe3, 0x47, 0x24, - 0xda, 0xb1, 0xcc, 0xf2, 0x07, 0x00, 0x47, 0x52, 0x8a, 0x18, 0xd2, 0x96, 0xe1, 0x40, 0x9c, 0x34, - 0x51, 0x04, 0x13, 0xdd, 0x53, 0xf9, 0xda, 0x74, 0x5a, 0x1f, 0x4b, 0x75, 0x1a, 0x48, 0xb6, 0xce, - 0x68, 0x3d, 0x4e, 0x7f, 0x21, 0x46, 0xa5, 0x40, 0x8f, 0x12, 0xa8, 0xbb, 0x14, 0xea, 0x9b, 0x17, - 0xa2, 0xd6, 0x60, 0x12, 0xb0, 0xdf, 0x01, 0x68, 0x69, 0xd8, 0xa1, 0x2b, 0x10, 0x6d, 0x91, 0x79, - 0x4c, 0xd0, 0x75, 0x38, 0xd8, 0xa1, 0x2d, 0xc1, 0x78, 0xb0, 0x16, 0xb4, 0x37, 0x5d, 0xda, 0x52, - 0x40, 0x7a, 0xec, 0x01, 0x63, 0x5d, 0x56, 0xc6, 0x78, 0x98, 0x11, 0xb1, 0x3b, 0x11, 0xa6, 0x45, - 0x42, 0x93, 0x70, 0x60, 0x23, 0xec, 0x4d, 0xc6, 0xa5, 0xee, 0xb3, 0x0b, 0xda, 0x68, 0x94, 0xfc, - 0x0a, 0xe0, 0x68, 0x2a, 0x5c, 0xc3, 0xf3, 0x03, 0x38, 0xe4, 0x45, 0x9e, 0x0c, 0xf3, 0x39, 0xe8, - 0x25, 0x8e, 0xf9, 0x8f, 0x23, 0xba, 0x97, 0xde, 0x98, 0xc8, 0x24, 0xc4, 0x62, 0xca, 0x34, 0xfc, - 0xcd, 0x0c, 0x7f, 0x04, 0x70, 0x2c, 0x1d, 0x84, 0xa1, 0xf7, 0x39, 0xbc, 0x7c, 0x8a, 0xde, 0x68, - 0x92, 0x67, 0xd2, 0xda, 0x4d, 0x1e, 0xf3, 0x94, 0xc9, 0x46, 0x82, 0x80, 0xa1, 0x24, 0xfb, 0xff, - 0x6e, 0xaa, 0x6b, 0x9f, 0x7b, 0x61, 0xaf, 0x6a, 0x04, 0xbd, 0x05, 0x30, 0x1f, 0xbb, 0x46, 0xe8, - 0x76, 0x1a, 0xce, 0x73, 0x96, 0xa4, 0x35, 0x93, 0x2d, 0x58, 0x03, 0x28, 0xdf, 0xdd, 0xfb, 0xf2, - 0xeb, 0x75, 0x17, 0x41, 0x15, 0xa2, 0xd6, 0x7c, 0xb4, 0xe1, 0xf5, 0x7f, 0x41, 0xe2, 0xf6, 0x93, - 0x9d, 0x63, 0x2d, 0x77, 0xd1, 0x1b, 0x00, 0x0b, 0xf1, 0x9d, 0x81, 0x32, 0x55, 0x8d, 0x06, 0xc3, - 0xaa, 0x64, 0x8c, 0x36, 0x20, 0xa7, 0x15, 0xc8, 0x49, 0x74, 0xed, 0x42, 0x90, 0xe8, 0x3b, 0x80, - 0x83, 0x49, 0x05, 0x11, 0x3e, 0xbf, 0x58, 0xda, 0xfa, 0xb0, 0x48, 0xe6, 0x78, 0x03, 0x8f, 0x29, - 0x78, 0x1e, 0x72, 0x52, 0xe1, 0x9d, 0x1a, 0xbd, 0x38, 0x8d, 0xc4, 0x2c, 0x13, 0xb2, 0x93, 0x5c, - 0x49, 0xbb, 0x44, 0xdf, 0xca, 0x13, 0xbb, 0x7e, 0xdf, 0x45, 0xef, 0x01, 0x1c, 0x3a, 0x35, 0xe7, - 0x28, 0x2b, 0xde, 0x63, 0xf6, 0x67, 0xb3, 0x27, 0x98, 0x0e, 0xef, 0xab, 0x0e, 0x6b, 0x68, 0xf6, - 0x4f, 0x3b, 0x9c, 0x5f, 0xdd, 0x3f, 0x2c, 0x81, 0x83, 0xc3, 0x12, 0xf8, 0x79, 0x58, 0x02, 0xaf, - 0x8e, 0x4a, 0xb9, 0x83, 0xa3, 0x52, 0xee, 0xdb, 0x51, 0x29, 0xf7, 0x6c, 0xce, 0x67, 0xb2, 0xd1, - 0x76, 0xb1, 0xc7, 0x37, 0x89, 0xf9, 0x1c, 0xd1, 0x3f, 0x15, 0x51, 0x7f, 0x41, 0x5e, 0x92, 0xe3, - 0xcf, 0x8e, 0xd9, 0x5a, 0xc5, 0x54, 0x94, 0xdb, 0x4d, 0x2a, 0xdc, 0x4b, 0x6a, 0x1b, 0xde, 0xf9, - 0x1d, 0x00, 0x00, 0xff, 0xff, 0xc3, 0x28, 0x91, 0xcd, 0xf9, 0x08, 0x00, 0x00, + // 747 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0x4f, 0x4f, 0x13, 0x41, + 0x14, 0xef, 0xf0, 0xc7, 0xc0, 0xb4, 0x80, 0x99, 0x90, 0x58, 0x16, 0x52, 0x6a, 0x89, 0x5a, 0x94, + 0xce, 0xd0, 0x1a, 0xc5, 0x8b, 0x07, 0x21, 0x41, 0xb9, 0x10, 0x59, 0x0f, 0x26, 0x26, 0x86, 0xec, + 0x6e, 0x87, 0xed, 0x44, 0xd8, 0x29, 0x9d, 0x69, 0x23, 0x21, 0x5c, 0xf8, 0x04, 0x26, 0x26, 0x5e, + 0xfd, 0x02, 0x86, 0x93, 0x89, 0xdf, 0xc0, 0x70, 0x24, 0x7a, 0xf1, 0x60, 0x8c, 0x01, 0x3f, 0x88, + 0xe9, 0xcc, 0x2c, 0xdd, 0x85, 0x25, 0xac, 0x46, 0x4f, 0x3b, 0xf3, 0xfe, 0xfe, 0xde, 0xef, 0xbd, + 0x79, 0x59, 0x58, 0x60, 0xae, 0x47, 0x3c, 0xde, 0xa2, 0xc4, 0xdb, 0x64, 0x34, 0x90, 0xa4, 0x53, + 0x25, 0xdb, 0x6d, 0xda, 0xda, 0xc1, 0xcd, 0x16, 0x97, 0x1c, 0x21, 0xe6, 0x7a, 0xb8, 0xab, 0xc7, + 0x5a, 0x8f, 0x3b, 0x55, 0xeb, 0xb6, 0xc7, 0xc5, 0x16, 0x17, 0xc4, 0x75, 0x04, 0xd5, 0xc6, 0xa4, + 0x53, 0x75, 0xa9, 0x74, 0xaa, 0xa4, 0xe9, 0xf8, 0x2c, 0x70, 0x24, 0xe3, 0x81, 0xf6, 0xb7, 0xa6, + 0x13, 0xe2, 0x9b, 0x48, 0xda, 0x60, 0xc2, 0xe7, 0xdc, 0xdf, 0xa4, 0x44, 0xdd, 0xdc, 0xf6, 0x06, + 0x71, 0x02, 0x93, 0xdb, 0x9a, 0x32, 0x2a, 0xa7, 0xc9, 0x88, 0x13, 0x04, 0x5c, 0xaa, 0xc0, 0xc2, + 0x68, 0xc7, 0x7d, 0xee, 0x73, 0x75, 0x24, 0xdd, 0x93, 0x96, 0x96, 0xee, 0xc3, 0x6b, 0x6b, 0x5d, + 0x44, 0x4b, 0x2a, 0xc7, 0x33, 0xe9, 0x48, 0x6a, 0xd3, 0xed, 0x36, 0x15, 0x12, 0x4d, 0xc2, 0x61, + 0x9d, 0x79, 0x9d, 0xd5, 0xf3, 0xa0, 0x08, 0xca, 0xc3, 0xf6, 0x90, 0x16, 0xac, 0xd4, 0x4b, 0x07, + 0x00, 0xe6, 0xcf, 0x3b, 0x8a, 0x26, 0x0f, 0x04, 0x45, 0x0b, 0x30, 0x67, 0x3c, 0x45, 0x57, 0xae, + 0x9c, 0xb3, 0xb5, 0x71, 0xac, 0xf1, 0xe1, 0x10, 0x3a, 0x7e, 0x14, 0xec, 0xd8, 0x59, 0xaf, 0x17, + 0x00, 0x8d, 0xc3, 0xc1, 0x66, 0x8b, 0xf3, 0x8d, 0x7c, 0x5f, 0x11, 0x94, 0x73, 0xb6, 0xbe, 0xa0, + 0x25, 0x98, 0x53, 0x87, 0xf5, 0x06, 0x65, 0x7e, 0x43, 0xe6, 0xfb, 0x55, 0x38, 0x0b, 0x9f, 0xa7, + 0x1a, 0x3f, 0x51, 0x16, 0x8b, 0x03, 0x87, 0x3f, 0xa6, 0x33, 0x76, 0x56, 0x79, 0x69, 0x51, 0xc9, + 0x3d, 0x8f, 0x57, 0x84, 0x95, 0x2e, 0x43, 0xd8, 0x6b, 0x84, 0x41, 0x7b, 0x13, 0xeb, 0xae, 0xe1, + 0x6e, 0xd7, 0xb0, 0x6e, 0xb1, 0xe9, 0x1a, 0x7e, 0xea, 0xf8, 0x21, 0x4b, 0x76, 0xc4, 0xb3, 0xf4, + 0x11, 0xc0, 0x89, 0x84, 0x24, 0x86, 0x95, 0x55, 0x38, 0x12, 0x65, 0x45, 0xe4, 0x41, 0xb1, 0xbf, + 0x9c, 0xad, 0xcd, 0x26, 0xd5, 0xb1, 0x52, 0xa7, 0x81, 0x64, 0x1b, 0x8c, 0xd6, 0xa3, 0xfc, 0xe6, + 0x22, 0x5c, 0x09, 0xf4, 0x38, 0x86, 0xba, 0x4f, 0xa1, 0xbe, 0x75, 0x29, 0x6a, 0x0d, 0x26, 0x06, + 0xfb, 0x03, 0x80, 0x96, 0x86, 0xdd, 0x55, 0x05, 0xa2, 0x2d, 0x52, 0xcf, 0x01, 0xba, 0x01, 0x47, + 0x3b, 0xb4, 0x25, 0x18, 0x0f, 0xd6, 0x83, 0xf6, 0x96, 0x4b, 0x5b, 0x0a, 0xc8, 0x80, 0x3d, 0x62, + 0xa4, 0xab, 0x4a, 0x18, 0x35, 0x8b, 0x34, 0xb1, 0x67, 0xa6, 0x9b, 0x84, 0x66, 0xe0, 0xc8, 0x66, + 0xb7, 0x36, 0x19, 0x5a, 0x0d, 0x14, 0x41, 0x79, 0xc8, 0xce, 0x69, 0xa1, 0xe9, 0xe4, 0x27, 0x00, + 0x27, 0x13, 0xe1, 0x1a, 0x9e, 0x1f, 0xc2, 0x31, 0x2f, 0xd4, 0xa4, 0x18, 0xc0, 0x51, 0x2f, 0x16, + 0xe6, 0x7f, 0xce, 0xe0, 0x7e, 0x32, 0x72, 0x91, 0x8a, 0xe9, 0xe5, 0x84, 0x76, 0xff, 0xcd, 0x90, + 0x7e, 0x06, 0x70, 0x2a, 0x19, 0x84, 0xe1, 0xef, 0x25, 0xbc, 0x7a, 0x86, 0xbf, 0x70, 0x54, 0xe7, + 0x92, 0xca, 0x8d, 0x87, 0x79, 0xce, 0x64, 0x23, 0x46, 0xc0, 0x58, 0x9c, 0xde, 0x7f, 0x37, 0xb6, + 0xb5, 0x2f, 0x83, 0x70, 0x50, 0x15, 0x82, 0xde, 0x03, 0x98, 0x8d, 0xbc, 0x13, 0x74, 0x27, 0x09, + 0xe7, 0x05, 0x6b, 0xce, 0x9a, 0x4b, 0x67, 0xac, 0x01, 0x94, 0xee, 0xed, 0x7f, 0xfd, 0xf5, 0xb6, + 0x8f, 0xa0, 0x0a, 0x51, 0x8b, 0x3a, 0xdc, 0xd1, 0x7a, 0x9b, 0xc7, 0x9e, 0x37, 0xd9, 0x3d, 0xed, + 0xe5, 0x1e, 0x7a, 0x07, 0x60, 0x2e, 0xba, 0x14, 0x50, 0xaa, 0xac, 0xe1, 0x60, 0x58, 0x95, 0x94, + 0xd6, 0x06, 0xe4, 0xac, 0x02, 0x39, 0x83, 0xae, 0x5f, 0x0a, 0x12, 0x7d, 0x07, 0x70, 0x34, 0xde, + 0x41, 0x84, 0x2f, 0x4e, 0x96, 0xb4, 0x1f, 0x2c, 0x92, 0xda, 0xde, 0xc0, 0x63, 0x0a, 0x9e, 0x87, + 0x9c, 0x44, 0x78, 0x67, 0x46, 0x2f, 0x4a, 0x23, 0x31, 0xdb, 0x82, 0xec, 0xc6, 0x77, 0xce, 0x1e, + 0xd1, 0xaf, 0xb2, 0x27, 0xd7, 0xf7, 0x3d, 0x74, 0x00, 0xe0, 0xd8, 0x99, 0x39, 0x47, 0x69, 0xf1, + 0x9e, 0xb2, 0x3f, 0x9f, 0xde, 0xc1, 0x54, 0xf8, 0x40, 0x55, 0x58, 0x43, 0xf3, 0x7f, 0x5a, 0xe1, + 0xe2, 0xda, 0xe1, 0x71, 0x01, 0x1c, 0x1d, 0x17, 0xc0, 0xcf, 0xe3, 0x02, 0x78, 0x73, 0x52, 0xc8, + 0x1c, 0x9d, 0x14, 0x32, 0xdf, 0x4e, 0x0a, 0x99, 0x17, 0x0b, 0x3e, 0x93, 0x8d, 0xb6, 0x8b, 0x3d, + 0xbe, 0x45, 0xcc, 0x0f, 0x85, 0xfe, 0x54, 0x44, 0xfd, 0x15, 0x79, 0x4d, 0x4e, 0x7f, 0x1c, 0xe6, + 0x6b, 0x15, 0x93, 0x51, 0xee, 0x34, 0xa9, 0x70, 0xaf, 0xa8, 0x75, 0x77, 0xf7, 0x77, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x09, 0x8e, 0x83, 0x3d, 0xbb, 0x08, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -842,14 +823,7 @@ func (m *QueryClientStateResponse) MarshalToSizedBuffer(dAtA []byte) (int, error i = encodeVarintQuery(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x22 - if len(m.ProofPath) > 0 { - i -= len(m.ProofPath) - copy(dAtA[i:], m.ProofPath) - i = encodeVarintQuery(dAtA, i, uint64(len(m.ProofPath))) - i-- - dAtA[i] = 0x1a - } + dAtA[i] = 0x1a if len(m.Proof) > 0 { i -= len(m.Proof) copy(dAtA[i:], m.Proof) @@ -1035,14 +1009,7 @@ func (m *QueryConsensusStateResponse) MarshalToSizedBuffer(dAtA []byte) (int, er i = encodeVarintQuery(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x22 - if len(m.ProofPath) > 0 { - i -= len(m.ProofPath) - copy(dAtA[i:], m.ProofPath) - i = encodeVarintQuery(dAtA, i, uint64(len(m.ProofPath))) - i-- - dAtA[i] = 0x1a - } + dAtA[i] = 0x1a if len(m.Proof) > 0 { i -= len(m.Proof) copy(dAtA[i:], m.Proof) @@ -1194,10 +1161,6 @@ func (m *QueryClientStateResponse) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } - l = len(m.ProofPath) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } l = m.ProofHeight.Size() n += 1 + l + sovQuery(uint64(l)) return n @@ -1271,10 +1234,6 @@ func (m *QueryConsensusStateResponse) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } - l = len(m.ProofPath) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } l = m.ProofHeight.Size() n += 1 + l + sovQuery(uint64(l)) return n @@ -1507,38 +1466,6 @@ func (m *QueryClientStateResponse) Unmarshal(dAtA []byte) error { } iNdEx = postIndex case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofPath", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ProofPath = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) } @@ -2050,38 +1977,6 @@ func (m *QueryConsensusStateResponse) Unmarshal(dAtA []byte) error { } iNdEx = postIndex case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofPath", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ProofPath = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) } diff --git a/x/ibc/core/03-connection/client/utils/utils.go b/x/ibc/core/03-connection/client/utils/utils.go index 87de8a720c..955ecfe6ba 100644 --- a/x/ibc/core/03-connection/client/utils/utils.go +++ b/x/ibc/core/03-connection/client/utils/utils.go @@ -57,7 +57,7 @@ func queryConnectionABCI(clientCtx client.Context, connectionID string) (*types. return nil, err } - return types.NewQueryConnectionResponse(connectionID, connection, proofBz, proofHeight), nil + return types.NewQueryConnectionResponse(connection, proofBz, proofHeight), nil } // QueryClientConnections queries the connection paths registered for a particular client. @@ -96,7 +96,7 @@ func queryClientConnectionsABCI(clientCtx client.Context, clientID string) (*typ return nil, err } - return types.NewQueryClientConnectionsResponse(clientID, paths, proofBz, proofHeight), nil + return types.NewQueryClientConnectionsResponse(paths, proofBz, proofHeight), nil } // QueryConnectionClientState returns the ClientState of a connection end. If diff --git a/x/ibc/core/03-connection/types/query.go b/x/ibc/core/03-connection/types/query.go index d13f7ff913..09058e6e8e 100644 --- a/x/ibc/core/03-connection/types/query.go +++ b/x/ibc/core/03-connection/types/query.go @@ -1,37 +1,29 @@ package types import ( - "strings" - codectypes "github.com/cosmos/cosmos-sdk/codec/types" clienttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" - commitmenttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/23-commitment/types" - host "github.com/cosmos/cosmos-sdk/x/ibc/core/24-host" "github.com/cosmos/cosmos-sdk/x/ibc/core/exported" ) // NewQueryConnectionResponse creates a new QueryConnectionResponse instance func NewQueryConnectionResponse( - connectionID string, connection ConnectionEnd, proof []byte, height clienttypes.Height, + connection ConnectionEnd, proof []byte, height clienttypes.Height, ) *QueryConnectionResponse { - path := commitmenttypes.NewMerklePath(strings.Split(host.ConnectionPath(connectionID), "/")) return &QueryConnectionResponse{ Connection: &connection, Proof: proof, - ProofPath: path.Pretty(), ProofHeight: height, } } // NewQueryClientConnectionsResponse creates a new ConnectionPaths instance func NewQueryClientConnectionsResponse( - clientID string, connectionPaths []string, proof []byte, height clienttypes.Height, + connectionPaths []string, proof []byte, height clienttypes.Height, ) *QueryClientConnectionsResponse { - path := commitmenttypes.NewMerklePath(strings.Split(host.ClientConnectionsPath(clientID), "/")) return &QueryClientConnectionsResponse{ ConnectionPaths: connectionPaths, Proof: proof, - ProofPath: path.Pretty(), ProofHeight: height, } } @@ -45,23 +37,19 @@ func NewQueryClientConnectionsRequest(clientID string) *QueryClientConnectionsRe // NewQueryConnectionClientStateResponse creates a newQueryConnectionClientStateResponse instance func NewQueryConnectionClientStateResponse(identifiedClientState clienttypes.IdentifiedClientState, proof []byte, height clienttypes.Height) *QueryConnectionClientStateResponse { - path := commitmenttypes.NewMerklePath(strings.Split(host.FullClientPath(identifiedClientState.ClientId, host.ClientStatePath()), "/")) return &QueryConnectionClientStateResponse{ IdentifiedClientState: &identifiedClientState, Proof: proof, - ProofPath: path.Pretty(), ProofHeight: height, } } // NewQueryConnectionConsensusStateResponse creates a newQueryConnectionConsensusStateResponse instance func NewQueryConnectionConsensusStateResponse(clientID string, anyConsensusState *codectypes.Any, consensusStateHeight exported.Height, proof []byte, height clienttypes.Height) *QueryConnectionConsensusStateResponse { - path := commitmenttypes.NewMerklePath(strings.Split(host.FullClientPath(clientID, host.ConsensusStatePath(consensusStateHeight)), "/")) return &QueryConnectionConsensusStateResponse{ ConsensusState: anyConsensusState, ClientId: clientID, Proof: proof, - ProofPath: path.Pretty(), ProofHeight: height, } } diff --git a/x/ibc/core/03-connection/types/query.pb.go b/x/ibc/core/03-connection/types/query.pb.go index 7db05b66bb..3007ac05bc 100644 --- a/x/ibc/core/03-connection/types/query.pb.go +++ b/x/ibc/core/03-connection/types/query.pb.go @@ -87,10 +87,8 @@ type QueryConnectionResponse struct { Connection *ConnectionEnd `protobuf:"bytes,1,opt,name=connection,proto3" json:"connection,omitempty"` // merkle proof of existence Proof []byte `protobuf:"bytes,2,opt,name=proof,proto3" json:"proof,omitempty"` - // merkle proof path - ProofPath string `protobuf:"bytes,3,opt,name=proof_path,json=proofPath,proto3" json:"proof_path,omitempty"` // height at which the proof was retrieved - ProofHeight types.Height `protobuf:"bytes,4,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height"` + ProofHeight types.Height `protobuf:"bytes,3,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height"` } func (m *QueryConnectionResponse) Reset() { *m = QueryConnectionResponse{} } @@ -140,13 +138,6 @@ func (m *QueryConnectionResponse) GetProof() []byte { return nil } -func (m *QueryConnectionResponse) GetProofPath() string { - if m != nil { - return m.ProofPath - } - return "" -} - func (m *QueryConnectionResponse) GetProofHeight() types.Height { if m != nil { return m.ProofHeight @@ -319,10 +310,8 @@ type QueryClientConnectionsResponse struct { ConnectionPaths []string `protobuf:"bytes,1,rep,name=connection_paths,json=connectionPaths,proto3" json:"connection_paths,omitempty"` // merkle proof of existence Proof []byte `protobuf:"bytes,2,opt,name=proof,proto3" json:"proof,omitempty"` - // merkle proof path - ProofPath string `protobuf:"bytes,3,opt,name=proof_path,json=proofPath,proto3" json:"proof_path,omitempty"` // height at which the proof was generated - ProofHeight types.Height `protobuf:"bytes,4,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height"` + ProofHeight types.Height `protobuf:"bytes,3,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height"` } func (m *QueryClientConnectionsResponse) Reset() { *m = QueryClientConnectionsResponse{} } @@ -372,13 +361,6 @@ func (m *QueryClientConnectionsResponse) GetProof() []byte { return nil } -func (m *QueryClientConnectionsResponse) GetProofPath() string { - if m != nil { - return m.ProofPath - } - return "" -} - func (m *QueryClientConnectionsResponse) GetProofHeight() types.Height { if m != nil { return m.ProofHeight @@ -440,10 +422,8 @@ type QueryConnectionClientStateResponse struct { IdentifiedClientState *types.IdentifiedClientState `protobuf:"bytes,1,opt,name=identified_client_state,json=identifiedClientState,proto3" json:"identified_client_state,omitempty"` // merkle proof of existence Proof []byte `protobuf:"bytes,2,opt,name=proof,proto3" json:"proof,omitempty"` - // merkle proof path - ProofPath string `protobuf:"bytes,3,opt,name=proof_path,json=proofPath,proto3" json:"proof_path,omitempty"` // height at which the proof was retrieved - ProofHeight types.Height `protobuf:"bytes,4,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height"` + ProofHeight types.Height `protobuf:"bytes,3,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height"` } func (m *QueryConnectionClientStateResponse) Reset() { *m = QueryConnectionClientStateResponse{} } @@ -493,13 +473,6 @@ func (m *QueryConnectionClientStateResponse) GetProof() []byte { return nil } -func (m *QueryConnectionClientStateResponse) GetProofPath() string { - if m != nil { - return m.ProofPath - } - return "" -} - func (m *QueryConnectionClientStateResponse) GetProofHeight() types.Height { if m != nil { return m.ProofHeight @@ -579,10 +552,8 @@ type QueryConnectionConsensusStateResponse struct { ClientId string `protobuf:"bytes,2,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"` // merkle proof of existence Proof []byte `protobuf:"bytes,3,opt,name=proof,proto3" json:"proof,omitempty"` - // merkle proof path - ProofPath string `protobuf:"bytes,4,opt,name=proof_path,json=proofPath,proto3" json:"proof_path,omitempty"` // height at which the proof was retrieved - ProofHeight types.Height `protobuf:"bytes,5,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height"` + ProofHeight types.Height `protobuf:"bytes,4,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height"` } func (m *QueryConnectionConsensusStateResponse) Reset() { *m = QueryConnectionConsensusStateResponse{} } @@ -639,13 +610,6 @@ func (m *QueryConnectionConsensusStateResponse) GetProof() []byte { return nil } -func (m *QueryConnectionConsensusStateResponse) GetProofPath() string { - if m != nil { - return m.ProofPath - } - return "" -} - func (m *QueryConnectionConsensusStateResponse) GetProofHeight() types.Height { if m != nil { return m.ProofHeight @@ -671,65 +635,63 @@ func init() { } var fileDescriptor_cd8d529f8c7cd06b = []byte{ - // 921 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x56, 0x41, 0x6f, 0x1b, 0x45, - 0x14, 0xce, 0x38, 0x49, 0xd5, 0x3c, 0xa7, 0x05, 0x46, 0x69, 0xbb, 0x2c, 0xd4, 0x09, 0x5b, 0x42, - 0x53, 0xa0, 0x33, 0x75, 0xa2, 0x56, 0xa5, 0xad, 0x11, 0xb8, 0x2a, 0x34, 0x97, 0xaa, 0x2c, 0xe2, - 0xc2, 0x25, 0xda, 0x5d, 0x4f, 0xd6, 0x2b, 0xe2, 0x1d, 0xd7, 0xb3, 0xb6, 0xb0, 0x8a, 0x0f, 0x70, - 0xe6, 0x80, 0x84, 0x38, 0xf2, 0x07, 0xb8, 0xf2, 0x0f, 0x90, 0x90, 0x7a, 0xac, 0xc4, 0xa5, 0xe2, - 0x50, 0xa1, 0x84, 0x2b, 0x17, 0xee, 0x48, 0x68, 0x67, 0xc6, 0xd9, 0xd9, 0x78, 0xb7, 0x31, 0x16, - 0x52, 0x4e, 0xde, 0x79, 0xf3, 0xde, 0xbc, 0xef, 0x7d, 0xef, 0xcd, 0x37, 0x06, 0x27, 0xf2, 0x03, - 0x1a, 0xf0, 0x1e, 0xa3, 0x01, 0x8f, 0x63, 0x16, 0x24, 0x11, 0x8f, 0xe9, 0xa0, 0x4e, 0x1f, 0xf5, - 0x59, 0x6f, 0x48, 0xba, 0x3d, 0x9e, 0x70, 0x7c, 0x3e, 0xf2, 0x03, 0x92, 0xfa, 0x90, 0xcc, 0x87, - 0x0c, 0xea, 0xf6, 0x4a, 0xc8, 0x43, 0x2e, 0x5d, 0x68, 0xfa, 0xa5, 0xbc, 0xed, 0xb7, 0x03, 0x2e, - 0x3a, 0x5c, 0x50, 0xdf, 0x13, 0x4c, 0x1d, 0x43, 0x07, 0x75, 0x9f, 0x25, 0x5e, 0x9d, 0x76, 0xbd, - 0x30, 0x8a, 0x3d, 0x19, 0xae, 0x7c, 0x57, 0xb3, 0xec, 0x7b, 0x11, 0x8b, 0x93, 0x34, 0xb3, 0xfa, - 0xd2, 0x0e, 0x97, 0x4b, 0xe0, 0x19, 0x40, 0x94, 0xe3, 0xeb, 0x21, 0xe7, 0xe1, 0x1e, 0xa3, 0x5e, - 0x37, 0xa2, 0x5e, 0x1c, 0xf3, 0x44, 0xa6, 0x11, 0x7a, 0xf7, 0x55, 0xbd, 0x2b, 0x57, 0x7e, 0x7f, - 0x97, 0x7a, 0xb1, 0x2e, 0xce, 0x69, 0xc0, 0xf9, 0x4f, 0x52, 0x90, 0x77, 0x0f, 0x4f, 0x74, 0xd9, - 0xa3, 0x3e, 0x13, 0x09, 0xbe, 0x04, 0x67, 0xb2, 0x34, 0x3b, 0x51, 0xcb, 0x42, 0x6b, 0x68, 0x63, - 0xc9, 0x5d, 0xce, 0x8c, 0xdb, 0x2d, 0xe7, 0x77, 0x04, 0x17, 0x26, 0xe2, 0x45, 0x97, 0xc7, 0x82, - 0xe1, 0x7b, 0x00, 0x99, 0xaf, 0x8c, 0xae, 0x6e, 0xae, 0x93, 0x62, 0x32, 0x49, 0x16, 0x7f, 0x2f, - 0x6e, 0xb9, 0x46, 0x20, 0x5e, 0x81, 0xc5, 0x6e, 0x8f, 0xf3, 0x5d, 0xab, 0xb2, 0x86, 0x36, 0x96, - 0x5d, 0xb5, 0xc0, 0x17, 0x01, 0xe4, 0xc7, 0x4e, 0xd7, 0x4b, 0xda, 0xd6, 0xbc, 0x84, 0xb6, 0x24, - 0x2d, 0x0f, 0xbd, 0xa4, 0x8d, 0xef, 0xc2, 0xb2, 0xda, 0x6e, 0xb3, 0x28, 0x6c, 0x27, 0xd6, 0x82, - 0xcc, 0x6e, 0x1b, 0xd9, 0x15, 0xcd, 0x83, 0x3a, 0xb9, 0x2f, 0x3d, 0x9a, 0x0b, 0x4f, 0x9e, 0xaf, - 0xce, 0xb9, 0x55, 0x19, 0xa5, 0x4c, 0x8e, 0x37, 0x51, 0x9b, 0x18, 0x93, 0xf3, 0x11, 0x40, 0xd6, - 0x4d, 0x5d, 0xdb, 0x5b, 0x44, 0xb5, 0x9e, 0xa4, 0xad, 0x27, 0x6a, 0x82, 0x74, 0xeb, 0xc9, 0x43, - 0x2f, 0x64, 0x3a, 0xd6, 0x35, 0x22, 0x9d, 0xbf, 0x10, 0x58, 0x93, 0x39, 0x34, 0x81, 0x0f, 0xa0, - 0x9a, 0xf1, 0x20, 0x2c, 0xb4, 0x36, 0xbf, 0x51, 0xdd, 0x7c, 0xb7, 0x8c, 0xc1, 0xed, 0x16, 0x8b, - 0x93, 0x68, 0x37, 0x62, 0x2d, 0xa3, 0x17, 0xe6, 0x01, 0xf8, 0xe3, 0x1c, 0xe8, 0x8a, 0x04, 0x7d, - 0xf9, 0x58, 0xd0, 0x0a, 0x8c, 0x89, 0x1a, 0xdf, 0x84, 0x53, 0x9a, 0xd7, 0xf9, 0x29, 0x79, 0xd5, - 0xfe, 0xce, 0x1d, 0xb8, 0xa8, 0xca, 0x95, 0x6e, 0x05, 0xc4, 0xbe, 0x06, 0x4b, 0xea, 0x88, 0x6c, - 0xe2, 0x4e, 0x2b, 0xc3, 0x76, 0xcb, 0xf9, 0x15, 0x41, 0xad, 0x2c, 0x5c, 0x73, 0x76, 0x05, 0x5e, - 0x36, 0xa6, 0x36, 0x1d, 0x0e, 0x45, 0xdc, 0x92, 0xfb, 0x52, 0x66, 0x4f, 0x47, 0x44, 0x9c, 0xe0, - 0x60, 0xf9, 0xf0, 0xc6, 0x91, 0xa6, 0xab, 0x82, 0x3e, 0x4d, 0xbc, 0x64, 0x3c, 0x26, 0xb8, 0x51, - 0x78, 0xff, 0x9a, 0xd6, 0xdf, 0xcf, 0x57, 0x57, 0x86, 0x5e, 0x67, 0xef, 0x96, 0x93, 0xdb, 0x76, - 0x8e, 0xdc, 0xcc, 0xaf, 0x2b, 0xe0, 0xbc, 0x28, 0x89, 0xe6, 0xcb, 0x83, 0x0b, 0xd1, 0xe1, 0xe0, - 0xec, 0x68, 0xea, 0x45, 0xea, 0xa2, 0xa7, 0xfa, 0x4a, 0x51, 0x69, 0xc6, 0xac, 0x19, 0x67, 0x9e, - 0x8b, 0x8a, 0xcc, 0x27, 0xc8, 0xf3, 0xcf, 0x08, 0xde, 0x3c, 0xca, 0x41, 0x5a, 0x75, 0x2c, 0xfa, - 0xe2, 0x7f, 0xe4, 0x1a, 0xaf, 0xc3, 0xd9, 0x01, 0xeb, 0x89, 0x74, 0x33, 0xee, 0x77, 0x7c, 0xd6, - 0x93, 0xa5, 0x2e, 0xb8, 0x67, 0xb4, 0xf5, 0x81, 0x34, 0x9a, 0x6e, 0xc6, 0xf5, 0xc9, 0xdc, 0x34, - 0xea, 0x7f, 0x10, 0xac, 0x1f, 0x83, 0x5a, 0x37, 0xaf, 0x01, 0xe9, 0x50, 0xab, 0x9d, 0x5c, 0xd3, - 0x56, 0x88, 0x52, 0x7c, 0x32, 0x56, 0x7c, 0xf2, 0x61, 0x3c, 0x74, 0xcf, 0x06, 0xb9, 0x63, 0xf2, - 0x77, 0xad, 0x92, 0xbf, 0x6b, 0x59, 0xd7, 0xe6, 0xcb, 0xbb, 0xb6, 0x70, 0x5c, 0xd7, 0x16, 0x67, - 0xe8, 0xda, 0xe6, 0xb7, 0xa7, 0x61, 0x51, 0xd6, 0x8f, 0x7f, 0x42, 0x00, 0x19, 0x09, 0x98, 0x94, - 0x49, 0x5f, 0xf1, 0x0b, 0x66, 0xd3, 0xa9, 0xfd, 0x15, 0x9f, 0xce, 0xed, 0x6f, 0x7e, 0xfb, 0xf3, - 0xfb, 0xca, 0x75, 0xbc, 0x45, 0xd5, 0xbb, 0x6b, 0x3c, 0xb9, 0xea, 0x05, 0x37, 0xd4, 0x94, 0x3e, - 0xce, 0x8d, 0xc4, 0x08, 0xff, 0x88, 0xa0, 0x6a, 0x28, 0x12, 0x9e, 0x36, 0xfb, 0x58, 0xfa, 0xec, - 0x6b, 0xd3, 0x07, 0x68, 0xbc, 0xef, 0x48, 0xbc, 0xeb, 0xf8, 0xd2, 0x14, 0x78, 0xf1, 0x2f, 0x08, - 0x5e, 0x99, 0xd0, 0x4d, 0x7c, 0xfd, 0xc5, 0x49, 0x4b, 0x64, 0xda, 0xbe, 0xf1, 0x5f, 0xc3, 0x34, - 0xe2, 0xf7, 0x25, 0xe2, 0x9b, 0xf8, 0x46, 0x29, 0x62, 0x35, 0x90, 0x79, 0xa2, 0xc7, 0x43, 0x3a, - 0xc2, 0xcf, 0x10, 0x9c, 0x2b, 0x14, 0x34, 0xfc, 0xde, 0x94, 0xec, 0x4d, 0x2a, 0xad, 0x7d, 0x6b, - 0x96, 0x50, 0x5d, 0xd0, 0x7d, 0x59, 0x50, 0x13, 0x7f, 0x30, 0xc3, 0xc8, 0x50, 0x53, 0x6e, 0xf1, - 0x0f, 0x15, 0xb0, 0xca, 0x6e, 0x3c, 0xbe, 0x33, 0x2d, 0xc4, 0x22, 0x79, 0xb3, 0x1b, 0x33, 0x46, - 0xeb, 0x1a, 0xbf, 0x92, 0x35, 0x0e, 0x70, 0x32, 0x53, 0x8d, 0x79, 0x81, 0xa2, 0x5a, 0xeb, 0xe8, - 0xe3, 0xbc, 0x62, 0x8e, 0xa8, 0x92, 0x8c, 0xcc, 0xae, 0xd6, 0xa3, 0xe6, 0x67, 0x4f, 0xf6, 0x6b, - 0xe8, 0xe9, 0x7e, 0x0d, 0xfd, 0xb1, 0x5f, 0x43, 0xdf, 0x1d, 0xd4, 0xe6, 0x9e, 0x1e, 0xd4, 0xe6, - 0x9e, 0x1d, 0xd4, 0xe6, 0x3e, 0xbf, 0x1d, 0x46, 0x49, 0xbb, 0xef, 0x93, 0x80, 0x77, 0xa8, 0xfe, - 0xd7, 0xad, 0x7e, 0xae, 0x8a, 0xd6, 0x17, 0xf4, 0x4b, 0x7a, 0xf8, 0xe7, 0xf9, 0xda, 0xd6, 0x55, - 0x03, 0x75, 0x32, 0xec, 0x32, 0xe1, 0x9f, 0x92, 0xd2, 0xb8, 0xf5, 0x6f, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xa3, 0x81, 0x7f, 0x88, 0x02, 0x0c, 0x00, 0x00, + // 891 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xc1, 0x4f, 0x2b, 0x45, + 0x18, 0xef, 0x14, 0xde, 0xcb, 0x63, 0xca, 0x7b, 0xea, 0xa4, 0x0f, 0xea, 0xaa, 0x05, 0x17, 0x2b, + 0xa0, 0x32, 0x43, 0x21, 0x10, 0x04, 0x6a, 0xb4, 0x04, 0x85, 0x0b, 0xc1, 0x35, 0x5e, 0xbc, 0x90, + 0xdd, 0xed, 0xb0, 0xdd, 0x48, 0x77, 0x4a, 0x77, 0xdb, 0xd8, 0x60, 0x2f, 0x9e, 0x3d, 0x98, 0x18, + 0x8f, 0x5e, 0x3d, 0x78, 0xf5, 0xe8, 0xcd, 0x13, 0x47, 0x12, 0x2f, 0x9c, 0x88, 0x29, 0x5e, 0xbd, + 0xf8, 0x17, 0x98, 0x9d, 0x99, 0xb2, 0xb3, 0x74, 0x0b, 0xa5, 0x91, 0x53, 0x77, 0xbf, 0xf9, 0xbe, + 0x99, 0xdf, 0xef, 0xf7, 0x7d, 0xf3, 0xdb, 0x42, 0xdd, 0xb5, 0x6c, 0x62, 0xb3, 0x06, 0x25, 0x36, + 0xf3, 0x3c, 0x6a, 0x07, 0x2e, 0xf3, 0x48, 0xab, 0x48, 0x4e, 0x9b, 0xb4, 0xd1, 0xc6, 0xf5, 0x06, + 0x0b, 0x18, 0x9a, 0x72, 0x2d, 0x1b, 0x87, 0x39, 0x38, 0xca, 0xc1, 0xad, 0xa2, 0x96, 0x75, 0x98, + 0xc3, 0x78, 0x0a, 0x09, 0x9f, 0x44, 0xb6, 0xf6, 0x9e, 0xcd, 0xfc, 0x1a, 0xf3, 0x89, 0x65, 0xfa, + 0x54, 0x6c, 0x43, 0x5a, 0x45, 0x8b, 0x06, 0x66, 0x91, 0xd4, 0x4d, 0xc7, 0xf5, 0x4c, 0x5e, 0x2e, + 0x72, 0x67, 0xa2, 0xd3, 0x4f, 0x5c, 0xea, 0x05, 0xe1, 0xc9, 0xe2, 0x49, 0x26, 0xcc, 0x0f, 0x80, + 0xa7, 0x00, 0x11, 0x89, 0x6f, 0x3a, 0x8c, 0x39, 0x27, 0x94, 0x98, 0x75, 0x97, 0x98, 0x9e, 0xc7, + 0x02, 0x7e, 0x8c, 0x2f, 0x57, 0x5f, 0x97, 0xab, 0xfc, 0xcd, 0x6a, 0x1e, 0x13, 0xd3, 0x93, 0xe4, + 0xf4, 0x12, 0x9c, 0xfa, 0x3c, 0x04, 0xb9, 0x73, 0xb3, 0xa3, 0x41, 0x4f, 0x9b, 0xd4, 0x0f, 0xd0, + 0x1c, 0x7c, 0x1e, 0x1d, 0x73, 0xe4, 0x56, 0x72, 0x60, 0x16, 0x2c, 0x4c, 0x18, 0x93, 0x51, 0x70, + 0xbf, 0xa2, 0xff, 0x0e, 0xe0, 0x74, 0x5f, 0xbd, 0x5f, 0x67, 0x9e, 0x4f, 0xd1, 0x2e, 0x84, 0x51, + 0x2e, 0xaf, 0xce, 0xac, 0x14, 0x70, 0xb2, 0x98, 0x38, 0xaa, 0xdf, 0xf5, 0x2a, 0x86, 0x52, 0x88, + 0xb2, 0xf0, 0x49, 0xbd, 0xc1, 0xd8, 0x71, 0x2e, 0x3d, 0x0b, 0x16, 0x26, 0x0d, 0xf1, 0x82, 0x76, + 0xe0, 0x24, 0x7f, 0x38, 0xaa, 0x52, 0xd7, 0xa9, 0x06, 0xb9, 0x31, 0xbe, 0xbd, 0xa6, 0x6c, 0x2f, + 0x74, 0x6c, 0x15, 0xf1, 0x1e, 0xcf, 0x28, 0x8f, 0x9f, 0x5f, 0xcd, 0xa4, 0x8c, 0x0c, 0xaf, 0x12, + 0x21, 0xdd, 0xec, 0x03, 0xef, 0xf7, 0xd8, 0x7f, 0x0a, 0x61, 0xd4, 0x2e, 0x09, 0xfe, 0x5d, 0x2c, + 0x7a, 0x8b, 0xc3, 0xde, 0x62, 0x31, 0x22, 0xb2, 0xb7, 0xf8, 0xd0, 0x74, 0xa8, 0xac, 0x35, 0x94, + 0x4a, 0xfd, 0x1f, 0x00, 0x73, 0xfd, 0x67, 0x48, 0x85, 0x0e, 0x60, 0x26, 0x22, 0xea, 0xe7, 0xc0, + 0xec, 0xd8, 0x42, 0x66, 0xe5, 0x83, 0x41, 0x12, 0xed, 0x57, 0xa8, 0x17, 0xb8, 0xc7, 0x2e, 0xad, + 0x28, 0x62, 0xab, 0x1b, 0xa0, 0xcf, 0x62, 0xa0, 0xd3, 0x1c, 0xf4, 0xfc, 0xbd, 0xa0, 0x05, 0x18, + 0x15, 0x35, 0xda, 0x80, 0x4f, 0x1f, 0xa8, 0xab, 0xcc, 0xd7, 0xb7, 0xe1, 0x5b, 0x82, 0x2e, 0x4f, + 0x4b, 0x10, 0xf6, 0x0d, 0x38, 0x21, 0xb6, 0x88, 0x46, 0xea, 0x99, 0x08, 0xec, 0x57, 0xf4, 0x5f, + 0x00, 0xcc, 0x0f, 0x2a, 0x97, 0x9a, 0x2d, 0xc2, 0x57, 0x95, 0xb1, 0xac, 0x9b, 0x41, 0x55, 0x08, + 0x37, 0x61, 0xbc, 0x12, 0xc5, 0x0f, 0xc3, 0xf0, 0x63, 0x4e, 0x8e, 0x05, 0xdf, 0xbe, 0xd5, 0x55, + 0x81, 0xf8, 0x8b, 0xc0, 0x0c, 0x7a, 0x73, 0x80, 0x4a, 0x89, 0x37, 0xa8, 0x9c, 0xfb, 0xf7, 0x6a, + 0x26, 0xdb, 0x36, 0x6b, 0x27, 0x9b, 0x7a, 0x6c, 0x59, 0xbf, 0x75, 0xb7, 0xba, 0x00, 0xea, 0x77, + 0x1d, 0x22, 0x05, 0x31, 0xe1, 0xb4, 0x7b, 0x33, 0x19, 0x47, 0x52, 0x5b, 0x3f, 0x4c, 0x91, 0x63, + 0xbb, 0x98, 0x44, 0x4d, 0x19, 0x26, 0x65, 0xcf, 0x97, 0x6e, 0x52, 0xf8, 0x31, 0x85, 0xfc, 0x0d, + 0xc0, 0x77, 0x6e, 0x93, 0x0c, 0x69, 0x79, 0x7e, 0xd3, 0xff, 0x1f, 0xc5, 0x44, 0x05, 0xf8, 0xa2, + 0x45, 0x1b, 0x7e, 0xb8, 0xe8, 0x35, 0x6b, 0x16, 0x6d, 0x70, 0x2e, 0xe3, 0xc6, 0x73, 0x19, 0x3d, + 0xe0, 0x41, 0x35, 0x4d, 0x61, 0x15, 0xa5, 0x49, 0xd4, 0x57, 0x00, 0x16, 0xee, 0x41, 0x2d, 0xbb, + 0x53, 0x82, 0xe1, 0x58, 0x8a, 0x95, 0x58, 0x57, 0xb2, 0x58, 0x98, 0x32, 0xee, 0x99, 0x32, 0xfe, + 0xc4, 0x6b, 0x1b, 0x2f, 0xec, 0xd8, 0x36, 0xf1, 0xdb, 0x92, 0x8e, 0xdf, 0x96, 0xa8, 0x2d, 0x63, + 0x77, 0xb5, 0x65, 0x7c, 0x84, 0xb6, 0xac, 0x7c, 0xff, 0x0c, 0x3e, 0xe1, 0x04, 0xd1, 0xaf, 0x00, + 0xc2, 0x88, 0x25, 0xc2, 0x83, 0xdc, 0x29, 0xf9, 0x2b, 0xa2, 0x91, 0xa1, 0xf3, 0x85, 0x60, 0xfa, + 0xd6, 0x77, 0x7f, 0xfe, 0xfd, 0x63, 0x7a, 0x0d, 0xad, 0x12, 0xf1, 0xed, 0x53, 0x3e, 0x7b, 0xe2, + 0x2b, 0xaa, 0x18, 0x1e, 0x39, 0x8b, 0xf5, 0xbc, 0x83, 0x7e, 0x06, 0x30, 0xa3, 0x98, 0x06, 0x1a, + 0xf6, 0xf4, 0x9e, 0x3b, 0x69, 0xcb, 0xc3, 0x17, 0x48, 0xbc, 0xef, 0x73, 0xbc, 0x05, 0x34, 0x37, + 0x04, 0x5e, 0xf4, 0x07, 0x80, 0xaf, 0xf5, 0x59, 0x1b, 0x5a, 0xbb, 0xfb, 0xd0, 0x01, 0x4e, 0xaa, + 0xad, 0x3f, 0xb4, 0x4c, 0x22, 0xfe, 0x88, 0x23, 0xde, 0x40, 0xeb, 0x03, 0x11, 0x8b, 0x89, 0x8b, + 0x0b, 0xdd, 0x9b, 0xc2, 0x0e, 0xba, 0x04, 0xf0, 0x65, 0xa2, 0x25, 0xa1, 0x0f, 0x87, 0x54, 0xaf, + 0xdf, 0x2b, 0xb5, 0xcd, 0x51, 0x4a, 0x25, 0xa1, 0x3d, 0x4e, 0xa8, 0x8c, 0x3e, 0x1e, 0x61, 0x64, + 0x88, 0x6a, 0x98, 0xe8, 0xa7, 0x34, 0xcc, 0x0d, 0xba, 0xd2, 0x68, 0x7b, 0x58, 0x88, 0x49, 0xfe, + 0xa5, 0x95, 0x46, 0xac, 0x96, 0x1c, 0xbf, 0xe5, 0x1c, 0x5b, 0x28, 0x18, 0x89, 0x63, 0xdc, 0x81, + 0x88, 0x34, 0x33, 0x72, 0x16, 0xb7, 0xc4, 0x0e, 0x11, 0x96, 0x11, 0xc5, 0xc5, 0x7b, 0xa7, 0xfc, + 0xe5, 0x79, 0x37, 0x0f, 0x2e, 0xba, 0x79, 0xf0, 0x57, 0x37, 0x0f, 0x7e, 0xb8, 0xce, 0xa7, 0x2e, + 0xae, 0xf3, 0xa9, 0xcb, 0xeb, 0x7c, 0xea, 0xab, 0x2d, 0xc7, 0x0d, 0xaa, 0x4d, 0x0b, 0xdb, 0xac, + 0x46, 0xe4, 0x3f, 0x5f, 0xf1, 0xb3, 0xe4, 0x57, 0xbe, 0x26, 0xdf, 0x90, 0x9b, 0x3f, 0xb0, 0xcb, + 0xab, 0x4b, 0x0a, 0xea, 0xa0, 0x5d, 0xa7, 0xbe, 0xf5, 0x94, 0x7b, 0xdf, 0xea, 0x7f, 0x01, 0x00, + 0x00, 0xff, 0xff, 0x3b, 0x66, 0x6e, 0x99, 0x86, 0x0b, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1031,14 +993,7 @@ func (m *QueryConnectionResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) i = encodeVarintQuery(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x22 - if len(m.ProofPath) > 0 { - i -= len(m.ProofPath) - copy(dAtA[i:], m.ProofPath) - i = encodeVarintQuery(dAtA, i, uint64(len(m.ProofPath))) - i-- - dAtA[i] = 0x1a - } + dAtA[i] = 0x1a if len(m.Proof) > 0 { i -= len(m.Proof) copy(dAtA[i:], m.Proof) @@ -1214,14 +1169,7 @@ func (m *QueryClientConnectionsResponse) MarshalToSizedBuffer(dAtA []byte) (int, i = encodeVarintQuery(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x22 - if len(m.ProofPath) > 0 { - i -= len(m.ProofPath) - copy(dAtA[i:], m.ProofPath) - i = encodeVarintQuery(dAtA, i, uint64(len(m.ProofPath))) - i-- - dAtA[i] = 0x1a - } + dAtA[i] = 0x1a if len(m.Proof) > 0 { i -= len(m.Proof) copy(dAtA[i:], m.Proof) @@ -1300,14 +1248,7 @@ func (m *QueryConnectionClientStateResponse) MarshalToSizedBuffer(dAtA []byte) ( i = encodeVarintQuery(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x22 - if len(m.ProofPath) > 0 { - i -= len(m.ProofPath) - copy(dAtA[i:], m.ProofPath) - i = encodeVarintQuery(dAtA, i, uint64(len(m.ProofPath))) - i-- - dAtA[i] = 0x1a - } + dAtA[i] = 0x1a if len(m.Proof) > 0 { i -= len(m.Proof) copy(dAtA[i:], m.Proof) @@ -1399,14 +1340,7 @@ func (m *QueryConnectionConsensusStateResponse) MarshalToSizedBuffer(dAtA []byte i = encodeVarintQuery(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x2a - if len(m.ProofPath) > 0 { - i -= len(m.ProofPath) - copy(dAtA[i:], m.ProofPath) - i = encodeVarintQuery(dAtA, i, uint64(len(m.ProofPath))) - i-- - dAtA[i] = 0x22 - } + dAtA[i] = 0x22 if len(m.Proof) > 0 { i -= len(m.Proof) copy(dAtA[i:], m.Proof) @@ -1474,10 +1408,6 @@ func (m *QueryConnectionResponse) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } - l = len(m.ProofPath) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } l = m.ProofHeight.Size() n += 1 + l + sovQuery(uint64(l)) return n @@ -1546,10 +1476,6 @@ func (m *QueryClientConnectionsResponse) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } - l = len(m.ProofPath) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } l = m.ProofHeight.Size() n += 1 + l + sovQuery(uint64(l)) return n @@ -1582,10 +1508,6 @@ func (m *QueryConnectionClientStateResponse) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } - l = len(m.ProofPath) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } l = m.ProofHeight.Size() n += 1 + l + sovQuery(uint64(l)) return n @@ -1628,10 +1550,6 @@ func (m *QueryConnectionConsensusStateResponse) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } - l = len(m.ProofPath) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } l = m.ProofHeight.Size() n += 1 + l + sovQuery(uint64(l)) return n @@ -1828,38 +1746,6 @@ func (m *QueryConnectionResponse) Unmarshal(dAtA []byte) error { } iNdEx = postIndex case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofPath", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ProofPath = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) } @@ -2342,38 +2228,6 @@ func (m *QueryClientConnectionsResponse) Unmarshal(dAtA []byte) error { } iNdEx = postIndex case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofPath", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ProofPath = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) } @@ -2615,38 +2469,6 @@ func (m *QueryConnectionClientStateResponse) Unmarshal(dAtA []byte) error { } iNdEx = postIndex case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofPath", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ProofPath = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) } @@ -2958,38 +2780,6 @@ func (m *QueryConnectionConsensusStateResponse) Unmarshal(dAtA []byte) error { } iNdEx = postIndex case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofPath", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ProofPath = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) } diff --git a/x/ibc/core/04-channel/client/utils/utils.go b/x/ibc/core/04-channel/client/utils/utils.go index 725c346c6c..5657367f41 100644 --- a/x/ibc/core/04-channel/client/utils/utils.go +++ b/x/ibc/core/04-channel/client/utils/utils.go @@ -51,7 +51,7 @@ func queryPacketCommitmentABCI( return nil, sdkerrors.Wrapf(types.ErrPacketCommitmentNotFound, "portID (%s), channelID (%s), sequence (%d)", portID, channelID, sequence) } - return types.NewQueryPacketCommitmentResponse(portID, channelID, sequence, value, proofBz, proofHeight), nil + return types.NewQueryPacketCommitmentResponse(value, proofBz, proofHeight), nil } // QueryChannel returns a channel end. @@ -93,7 +93,7 @@ func queryChannelABCI(clientCtx client.Context, portID, channelID string) (*type return nil, err } - return types.NewQueryChannelResponse(portID, channelID, channel, proofBz, proofHeight), nil + return types.NewQueryChannelResponse(channel, proofBz, proofHeight), nil } // QueryChannelClientState returns the ClientState of a channel end. If @@ -229,5 +229,5 @@ func queryNextSequenceRecvABCI(clientCtx client.Context, portID, channelID strin sequence := binary.BigEndian.Uint64(value) - return types.NewQueryNextSequenceReceiveResponse(portID, channelID, sequence, proofBz, proofHeight), nil + return types.NewQueryNextSequenceReceiveResponse(sequence, proofBz, proofHeight), nil } diff --git a/x/ibc/core/04-channel/keeper/grpc_query.go b/x/ibc/core/04-channel/keeper/grpc_query.go index 433b135fc2..86d340a507 100644 --- a/x/ibc/core/04-channel/keeper/grpc_query.go +++ b/x/ibc/core/04-channel/keeper/grpc_query.go @@ -40,7 +40,7 @@ func (q Keeper) Channel(c context.Context, req *types.QueryChannelRequest) (*typ } selfHeight := clienttypes.GetSelfHeight(ctx) - return types.NewQueryChannelResponse(req.PortId, req.ChannelId, channel, nil, selfHeight), nil + return types.NewQueryChannelResponse(channel, nil, selfHeight), nil } // Channels implements the Query/Channels gRPC method @@ -222,7 +222,7 @@ func (q Keeper) PacketCommitment(c context.Context, req *types.QueryPacketCommit } selfHeight := clienttypes.GetSelfHeight(ctx) - return types.NewQueryPacketCommitmentResponse(req.PortId, req.ChannelId, req.Sequence, commitmentBz, nil, selfHeight), nil + return types.NewQueryPacketCommitmentResponse(commitmentBz, nil, selfHeight), nil } // PacketCommitments implements the Query/PacketCommitments gRPC method @@ -287,7 +287,7 @@ func (q Keeper) PacketAcknowledgement(c context.Context, req *types.QueryPacketA } selfHeight := clienttypes.GetSelfHeight(ctx) - return types.NewQueryPacketAcknowledgementResponse(req.PortId, req.ChannelId, req.Sequence, acknowledgementBz, nil, selfHeight), nil + return types.NewQueryPacketAcknowledgementResponse(acknowledgementBz, nil, selfHeight), nil } // UnreceivedPackets implements the Query/UnreceivedPackets gRPC method. Given @@ -411,7 +411,7 @@ func (q Keeper) NextSequenceReceive(c context.Context, req *types.QueryNextSeque } selfHeight := clienttypes.GetSelfHeight(ctx) - return types.NewQueryNextSequenceReceiveResponse(req.PortId, req.ChannelId, sequence, nil, selfHeight), nil + return types.NewQueryNextSequenceReceiveResponse(sequence, nil, selfHeight), nil } func validategRPCRequest(portID, channelID string) error { diff --git a/x/ibc/core/04-channel/types/query.go b/x/ibc/core/04-channel/types/query.go index 91bf2ed823..debe1acb33 100644 --- a/x/ibc/core/04-channel/types/query.go +++ b/x/ibc/core/04-channel/types/query.go @@ -1,84 +1,68 @@ package types import ( - "strings" - codectypes "github.com/cosmos/cosmos-sdk/codec/types" clienttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" - commitmenttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/23-commitment/types" - host "github.com/cosmos/cosmos-sdk/x/ibc/core/24-host" "github.com/cosmos/cosmos-sdk/x/ibc/core/exported" ) // NewQueryChannelResponse creates a new QueryChannelResponse instance -func NewQueryChannelResponse(portID, channelID string, channel Channel, proof []byte, height clienttypes.Height) *QueryChannelResponse { - path := commitmenttypes.NewMerklePath(strings.Split(host.ChannelPath(portID, channelID), "/")) +func NewQueryChannelResponse(channel Channel, proof []byte, height clienttypes.Height) *QueryChannelResponse { return &QueryChannelResponse{ Channel: &channel, Proof: proof, - ProofPath: path.Pretty(), ProofHeight: height, } } // NewQueryChannelClientStateResponse creates a newQueryChannelClientStateResponse instance func NewQueryChannelClientStateResponse(identifiedClientState clienttypes.IdentifiedClientState, proof []byte, height clienttypes.Height) *QueryChannelClientStateResponse { - path := commitmenttypes.NewMerklePath(strings.Split(host.FullClientPath(identifiedClientState.ClientId, host.ClientStatePath()), "/")) return &QueryChannelClientStateResponse{ IdentifiedClientState: &identifiedClientState, Proof: proof, - ProofPath: path.Pretty(), ProofHeight: height, } } // NewQueryChannelConsensusStateResponse creates a newQueryChannelConsensusStateResponse instance func NewQueryChannelConsensusStateResponse(clientID string, anyConsensusState *codectypes.Any, consensusStateHeight exported.Height, proof []byte, height clienttypes.Height) *QueryChannelConsensusStateResponse { - path := commitmenttypes.NewMerklePath(strings.Split(host.FullClientPath(clientID, host.ConsensusStatePath(consensusStateHeight)), "/")) return &QueryChannelConsensusStateResponse{ ConsensusState: anyConsensusState, ClientId: clientID, Proof: proof, - ProofPath: path.Pretty(), ProofHeight: height, } } // NewQueryPacketCommitmentResponse creates a new QueryPacketCommitmentResponse instance func NewQueryPacketCommitmentResponse( - portID, channelID string, sequence uint64, commitment []byte, proof []byte, height clienttypes.Height, + commitment []byte, proof []byte, height clienttypes.Height, ) *QueryPacketCommitmentResponse { - path := commitmenttypes.NewMerklePath(strings.Split(host.PacketCommitmentPath(portID, channelID, sequence), "/")) return &QueryPacketCommitmentResponse{ Commitment: commitment, Proof: proof, - ProofPath: path.Pretty(), ProofHeight: height, } } // NewQueryPacketAcknowledgementResponse creates a new QueryPacketAcknowledgementResponse instance func NewQueryPacketAcknowledgementResponse( - portID, channelID string, sequence uint64, acknowledgement []byte, proof []byte, height clienttypes.Height, + acknowledgement []byte, proof []byte, height clienttypes.Height, ) *QueryPacketAcknowledgementResponse { - path := commitmenttypes.NewMerklePath(strings.Split(host.PacketAcknowledgementPath(portID, channelID, sequence), "/")) return &QueryPacketAcknowledgementResponse{ Acknowledgement: acknowledgement, Proof: proof, - ProofPath: path.Pretty(), ProofHeight: height, } } // NewQueryNextSequenceReceiveResponse creates a new QueryNextSequenceReceiveResponse instance func NewQueryNextSequenceReceiveResponse( - portID, channelID string, sequence uint64, proof []byte, height clienttypes.Height, + sequence uint64, proof []byte, height clienttypes.Height, ) *QueryNextSequenceReceiveResponse { - path := commitmenttypes.NewMerklePath(strings.Split(host.NextSequenceRecvPath(portID, channelID), "/")) return &QueryNextSequenceReceiveResponse{ NextSequenceReceive: sequence, Proof: proof, - ProofPath: path.Pretty(), ProofHeight: height, } } diff --git a/x/ibc/core/04-channel/types/query.pb.go b/x/ibc/core/04-channel/types/query.pb.go index 8bb272f255..073e2c5bec 100644 --- a/x/ibc/core/04-channel/types/query.pb.go +++ b/x/ibc/core/04-channel/types/query.pb.go @@ -95,10 +95,8 @@ type QueryChannelResponse struct { Channel *Channel `protobuf:"bytes,1,opt,name=channel,proto3" json:"channel,omitempty"` // merkle proof of existence Proof []byte `protobuf:"bytes,2,opt,name=proof,proto3" json:"proof,omitempty"` - // merkle proof path - ProofPath string `protobuf:"bytes,3,opt,name=proof_path,json=proofPath,proto3" json:"proof_path,omitempty"` // height at which the proof was retrieved - ProofHeight types.Height `protobuf:"bytes,4,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height"` + ProofHeight types.Height `protobuf:"bytes,3,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height"` } func (m *QueryChannelResponse) Reset() { *m = QueryChannelResponse{} } @@ -148,13 +146,6 @@ func (m *QueryChannelResponse) GetProof() []byte { return nil } -func (m *QueryChannelResponse) GetProofPath() string { - if m != nil { - return m.ProofPath - } - return "" -} - func (m *QueryChannelResponse) GetProofHeight() types.Height { if m != nil { return m.ProofHeight @@ -456,10 +447,8 @@ type QueryChannelClientStateResponse struct { IdentifiedClientState *types.IdentifiedClientState `protobuf:"bytes,1,opt,name=identified_client_state,json=identifiedClientState,proto3" json:"identified_client_state,omitempty"` // merkle proof of existence Proof []byte `protobuf:"bytes,2,opt,name=proof,proto3" json:"proof,omitempty"` - // merkle proof path - ProofPath string `protobuf:"bytes,3,opt,name=proof_path,json=proofPath,proto3" json:"proof_path,omitempty"` // height at which the proof was retrieved - ProofHeight types.Height `protobuf:"bytes,4,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height"` + ProofHeight types.Height `protobuf:"bytes,3,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height"` } func (m *QueryChannelClientStateResponse) Reset() { *m = QueryChannelClientStateResponse{} } @@ -509,13 +498,6 @@ func (m *QueryChannelClientStateResponse) GetProof() []byte { return nil } -func (m *QueryChannelClientStateResponse) GetProofPath() string { - if m != nil { - return m.ProofPath - } - return "" -} - func (m *QueryChannelClientStateResponse) GetProofHeight() types.Height { if m != nil { return m.ProofHeight @@ -606,10 +588,8 @@ type QueryChannelConsensusStateResponse struct { ClientId string `protobuf:"bytes,2,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"` // merkle proof of existence Proof []byte `protobuf:"bytes,3,opt,name=proof,proto3" json:"proof,omitempty"` - // merkle proof path - ProofPath string `protobuf:"bytes,4,opt,name=proof_path,json=proofPath,proto3" json:"proof_path,omitempty"` // height at which the proof was retrieved - ProofHeight types.Height `protobuf:"bytes,5,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height"` + ProofHeight types.Height `protobuf:"bytes,4,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height"` } func (m *QueryChannelConsensusStateResponse) Reset() { *m = QueryChannelConsensusStateResponse{} } @@ -666,13 +646,6 @@ func (m *QueryChannelConsensusStateResponse) GetProof() []byte { return nil } -func (m *QueryChannelConsensusStateResponse) GetProofPath() string { - if m != nil { - return m.ProofPath - } - return "" -} - func (m *QueryChannelConsensusStateResponse) GetProofHeight() types.Height { if m != nil { return m.ProofHeight @@ -753,10 +726,8 @@ type QueryPacketCommitmentResponse struct { Commitment []byte `protobuf:"bytes,1,opt,name=commitment,proto3" json:"commitment,omitempty"` // merkle proof of existence Proof []byte `protobuf:"bytes,2,opt,name=proof,proto3" json:"proof,omitempty"` - // merkle proof path - ProofPath string `protobuf:"bytes,3,opt,name=proof_path,json=proofPath,proto3" json:"proof_path,omitempty"` // height at which the proof was retrieved - ProofHeight types.Height `protobuf:"bytes,4,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height"` + ProofHeight types.Height `protobuf:"bytes,3,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height"` } func (m *QueryPacketCommitmentResponse) Reset() { *m = QueryPacketCommitmentResponse{} } @@ -806,13 +777,6 @@ func (m *QueryPacketCommitmentResponse) GetProof() []byte { return nil } -func (m *QueryPacketCommitmentResponse) GetProofPath() string { - if m != nil { - return m.ProofPath - } - return "" -} - func (m *QueryPacketCommitmentResponse) GetProofHeight() types.Height { if m != nil { return m.ProofHeight @@ -1022,10 +986,8 @@ type QueryPacketAcknowledgementResponse struct { Acknowledgement []byte `protobuf:"bytes,1,opt,name=acknowledgement,proto3" json:"acknowledgement,omitempty"` // merkle proof of existence Proof []byte `protobuf:"bytes,2,opt,name=proof,proto3" json:"proof,omitempty"` - // merkle proof path - ProofPath string `protobuf:"bytes,3,opt,name=proof_path,json=proofPath,proto3" json:"proof_path,omitempty"` // height at which the proof was retrieved - ProofHeight types.Height `protobuf:"bytes,4,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height"` + ProofHeight types.Height `protobuf:"bytes,3,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height"` } func (m *QueryPacketAcknowledgementResponse) Reset() { *m = QueryPacketAcknowledgementResponse{} } @@ -1075,13 +1037,6 @@ func (m *QueryPacketAcknowledgementResponse) GetProof() []byte { return nil } -func (m *QueryPacketAcknowledgementResponse) GetProofPath() string { - if m != nil { - return m.ProofPath - } - return "" -} - func (m *QueryPacketAcknowledgementResponse) GetProofHeight() types.Height { if m != nil { return m.ProofHeight @@ -1394,10 +1349,8 @@ type QueryNextSequenceReceiveResponse struct { NextSequenceReceive uint64 `protobuf:"varint,1,opt,name=next_sequence_receive,json=nextSequenceReceive,proto3" json:"next_sequence_receive,omitempty"` // merkle proof of existence Proof []byte `protobuf:"bytes,2,opt,name=proof,proto3" json:"proof,omitempty"` - // merkle proof path - ProofPath string `protobuf:"bytes,3,opt,name=proof_path,json=proofPath,proto3" json:"proof_path,omitempty"` // height at which the proof was retrieved - ProofHeight types.Height `protobuf:"bytes,4,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height"` + ProofHeight types.Height `protobuf:"bytes,3,opt,name=proof_height,json=proofHeight,proto3" json:"proof_height"` } func (m *QueryNextSequenceReceiveResponse) Reset() { *m = QueryNextSequenceReceiveResponse{} } @@ -1447,13 +1400,6 @@ func (m *QueryNextSequenceReceiveResponse) GetProof() []byte { return nil } -func (m *QueryNextSequenceReceiveResponse) GetProofPath() string { - if m != nil { - return m.ProofPath - } - return "" -} - func (m *QueryNextSequenceReceiveResponse) GetProofHeight() types.Height { if m != nil { return m.ProofHeight @@ -1489,94 +1435,92 @@ func init() { func init() { proto.RegisterFile("ibc/core/channel/v1/query.proto", fileDescriptor_1034a1e9abc4cca1) } var fileDescriptor_1034a1e9abc4cca1 = []byte{ - // 1377 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x59, 0xcf, 0x6f, 0x1b, 0x45, - 0x14, 0xce, 0xd8, 0x6e, 0x9b, 0xbc, 0xfe, 0xa2, 0x93, 0x44, 0x4d, 0xb7, 0xa9, 0x93, 0xae, 0x54, - 0x48, 0x2b, 0x75, 0x07, 0x27, 0x25, 0x44, 0x08, 0x2a, 0x25, 0x91, 0x68, 0x53, 0xa9, 0x6d, 0xba, - 0x51, 0xa5, 0xb6, 0x07, 0xcc, 0x7a, 0x3d, 0xb1, 0x57, 0x89, 0x77, 0x5d, 0xef, 0xda, 0x4d, 0x08, - 0x46, 0xa8, 0x48, 0xd0, 0x13, 0x42, 0xea, 0x81, 0x23, 0x12, 0x37, 0xfe, 0x04, 0x4e, 0x5c, 0x73, - 0x23, 0x52, 0x39, 0x20, 0x21, 0x55, 0x28, 0xe1, 0xc0, 0x8d, 0x13, 0x17, 0x0e, 0x08, 0xed, 0xcc, - 0xec, 0x7a, 0xd7, 0xde, 0xdd, 0xc4, 0x71, 0x4a, 0x10, 0xa7, 0x7a, 0xdf, 0xbc, 0xf7, 0xe6, 0xfb, - 0xbe, 0xf7, 0x76, 0xf6, 0x4d, 0x03, 0x63, 0x46, 0x41, 0x27, 0xba, 0x55, 0xa3, 0x44, 0x2f, 0x6b, - 0xa6, 0x49, 0x57, 0x49, 0x23, 0x47, 0x1e, 0xd7, 0x69, 0x6d, 0x5d, 0xa9, 0xd6, 0x2c, 0xc7, 0xc2, - 0x83, 0x46, 0x41, 0x57, 0x5c, 0x07, 0x45, 0x38, 0x28, 0x8d, 0x9c, 0x14, 0x88, 0x5a, 0x35, 0xa8, - 0xe9, 0xb8, 0x41, 0xfc, 0x17, 0x8f, 0x92, 0xae, 0xe8, 0x96, 0x5d, 0xb1, 0x6c, 0x52, 0xd0, 0x6c, - 0xca, 0xd3, 0x91, 0x46, 0xae, 0x40, 0x1d, 0x2d, 0x47, 0xaa, 0x5a, 0xc9, 0x30, 0x35, 0xc7, 0xb0, - 0x4c, 0xe1, 0x7b, 0x31, 0x0a, 0x82, 0xb7, 0x19, 0x77, 0x19, 0x2d, 0x59, 0x56, 0x69, 0x95, 0x12, - 0xad, 0x6a, 0x10, 0xcd, 0x34, 0x2d, 0x87, 0xc5, 0xdb, 0x62, 0xf5, 0x9c, 0x58, 0x65, 0x4f, 0x85, - 0xfa, 0x32, 0xd1, 0x4c, 0x81, 0x5e, 0x1a, 0x2a, 0x59, 0x25, 0x8b, 0xfd, 0x24, 0xee, 0x2f, 0x6e, - 0x95, 0x6f, 0xc3, 0xe0, 0x3d, 0x17, 0xd3, 0x3c, 0xdf, 0x44, 0xa5, 0x8f, 0xeb, 0xd4, 0x76, 0xf0, - 0x59, 0x38, 0x56, 0xb5, 0x6a, 0x4e, 0xde, 0x28, 0x8e, 0xa0, 0x71, 0x34, 0x31, 0xa0, 0x1e, 0x75, - 0x1f, 0x17, 0x8a, 0xf8, 0x02, 0x80, 0xc0, 0xe3, 0xae, 0xa5, 0xd8, 0xda, 0x80, 0xb0, 0x2c, 0x14, - 0xe5, 0x4d, 0x04, 0x43, 0xe1, 0x7c, 0x76, 0xd5, 0x32, 0x6d, 0x8a, 0xa7, 0xe1, 0x98, 0xf0, 0x62, - 0x09, 0x8f, 0x4f, 0x8e, 0x2a, 0x11, 0x6a, 0x2a, 0x5e, 0x98, 0xe7, 0x8c, 0x87, 0xe0, 0x48, 0xb5, - 0x66, 0x59, 0xcb, 0x6c, 0xab, 0x13, 0x2a, 0x7f, 0x70, 0x51, 0xb0, 0x1f, 0xf9, 0xaa, 0xe6, 0x94, - 0x47, 0xd2, 0x1c, 0x05, 0xb3, 0x2c, 0x6a, 0x4e, 0x19, 0xcf, 0xc3, 0x09, 0xbe, 0x5c, 0xa6, 0x46, - 0xa9, 0xec, 0x8c, 0x64, 0xd8, 0x8e, 0x52, 0x60, 0x47, 0x5e, 0xa0, 0x46, 0x4e, 0xb9, 0xc9, 0x3c, - 0xe6, 0x32, 0x9b, 0x2f, 0xc7, 0xfa, 0xd4, 0xe3, 0x2c, 0x8a, 0x9b, 0xe4, 0x0f, 0xc2, 0x4c, 0x6c, - 0x4f, 0x9a, 0xf7, 0x01, 0x5a, 0x75, 0x13, 0x64, 0x5e, 0x57, 0x78, 0x91, 0x15, 0xb7, 0xc8, 0x0a, - 0xef, 0x19, 0x51, 0x64, 0x65, 0x51, 0x2b, 0x51, 0x11, 0xab, 0x06, 0x22, 0xe5, 0x97, 0x08, 0x86, - 0xdb, 0x36, 0x10, 0x5a, 0xcd, 0x41, 0xbf, 0xa0, 0x6f, 0x8f, 0xa0, 0xf1, 0x34, 0xcb, 0x1f, 0x25, - 0xd6, 0x42, 0x91, 0x9a, 0x8e, 0xb1, 0x6c, 0xd0, 0xa2, 0x27, 0x9b, 0x1f, 0x87, 0x6f, 0x84, 0x50, - 0xa6, 0x18, 0xca, 0x37, 0x76, 0x45, 0xc9, 0x01, 0x04, 0x61, 0xe2, 0x19, 0x38, 0x2a, 0x54, 0x4c, - 0xef, 0x51, 0x45, 0xe1, 0x2f, 0x3f, 0x43, 0x90, 0xe5, 0x04, 0x2d, 0xd3, 0xa4, 0xba, 0x9b, 0xad, - 0x5d, 0xcb, 0x2c, 0x80, 0xee, 0x2f, 0x8a, 0x4e, 0x0b, 0x58, 0xda, 0xb4, 0x4e, 0xed, 0x5b, 0xeb, - 0xdf, 0x11, 0x8c, 0xc5, 0x42, 0xf9, 0x7f, 0xa9, 0xfe, 0xc0, 0x13, 0x9d, 0x63, 0x9a, 0x67, 0xde, - 0x4b, 0x8e, 0xe6, 0xd0, 0x5e, 0xdf, 0xed, 0xbf, 0x7d, 0x11, 0x23, 0x52, 0x0b, 0x11, 0x35, 0x38, - 0x6b, 0xf8, 0xfa, 0xe4, 0x39, 0xd4, 0xbc, 0xed, 0xba, 0x88, 0x37, 0xe5, 0x72, 0x14, 0x91, 0x80, - 0xa4, 0x81, 0x9c, 0xc3, 0x46, 0x94, 0xf9, 0x10, 0x4f, 0x84, 0xef, 0x10, 0x5c, 0x0c, 0x09, 0xe0, - 0x52, 0x36, 0xed, 0xba, 0x7d, 0x10, 0xf2, 0xe2, 0x4b, 0x70, 0xaa, 0x41, 0x6b, 0xb6, 0x61, 0x99, - 0x79, 0xb3, 0x5e, 0x29, 0xd0, 0x1a, 0x63, 0x91, 0x51, 0x4f, 0x0a, 0xeb, 0x1d, 0x66, 0x0c, 0xba, - 0x05, 0xb8, 0xb4, 0xdc, 0x04, 0xd6, 0xbf, 0x10, 0xc8, 0x49, 0x58, 0x45, 0xbd, 0xde, 0x83, 0xd3, - 0xba, 0xb7, 0x12, 0xaa, 0xd3, 0x90, 0xc2, 0xbf, 0x24, 0x8a, 0xf7, 0x25, 0x51, 0x66, 0xcd, 0x75, - 0xf5, 0x94, 0x1e, 0x4a, 0x83, 0xcf, 0xc3, 0x80, 0xa8, 0xb1, 0xcf, 0xa8, 0x9f, 0x1b, 0x16, 0x8a, - 0xad, 0x42, 0xa5, 0xe3, 0x0b, 0x95, 0xd9, 0xad, 0x50, 0x47, 0xf6, 0x53, 0xa8, 0x1a, 0x8c, 0x32, - 0xee, 0x8b, 0x9a, 0xbe, 0x42, 0x9d, 0x79, 0xab, 0x52, 0x31, 0x9c, 0x0a, 0x35, 0x9d, 0x5e, 0x4b, - 0x24, 0x41, 0xbf, 0xed, 0xa6, 0x30, 0x75, 0x2a, 0x8a, 0xe3, 0x3f, 0xcb, 0xdf, 0x23, 0xb8, 0x10, - 0xb3, 0xa9, 0xd0, 0x9a, 0x1d, 0x76, 0x9e, 0x95, 0x6d, 0x7c, 0x42, 0x0d, 0x58, 0x0e, 0xb1, 0xb1, - 0xbf, 0x89, 0xc3, 0x6e, 0xf7, 0xaa, 0x58, 0xf8, 0x00, 0x4f, 0xef, 0xfb, 0x00, 0xff, 0xc3, 0xfb, - 0x96, 0x44, 0x20, 0x14, 0xf2, 0xde, 0x82, 0xe3, 0x2d, 0x31, 0xbd, 0x23, 0x7c, 0x22, 0xf2, 0x08, - 0xe7, 0x49, 0x66, 0xf5, 0x95, 0x40, 0x95, 0x82, 0xc1, 0xff, 0x85, 0x73, 0xfc, 0x89, 0x38, 0x6b, - 0x7c, 0xac, 0xa6, 0xf5, 0x64, 0x95, 0x16, 0x4b, 0xf4, 0x55, 0x37, 0xf2, 0xa6, 0x77, 0x72, 0xc4, - 0xec, 0x2c, 0xe4, 0x9e, 0x80, 0xd3, 0x5a, 0x78, 0x49, 0xb4, 0x74, 0xbb, 0xf9, 0x10, 0xfb, 0xfa, - 0x6b, 0xaf, 0xaf, 0xef, 0x9b, 0x35, 0xaa, 0x53, 0xa3, 0x41, 0x8b, 0x9c, 0x54, 0xcf, 0x7d, 0x7d, - 0x1d, 0xce, 0x57, 0x59, 0xa6, 0x7c, 0xab, 0x6d, 0xf2, 0x9e, 0x84, 0xf6, 0x48, 0x7a, 0x3c, 0x3d, - 0x91, 0x51, 0xcf, 0x55, 0xdb, 0x9a, 0x75, 0xc9, 0x73, 0x90, 0xd7, 0x44, 0x3b, 0x47, 0x00, 0x13, - 0xfa, 0x8e, 0xc2, 0x40, 0x2b, 0x1f, 0x62, 0xf9, 0x5a, 0x86, 0x40, 0x5f, 0xa5, 0xba, 0xec, 0xab, - 0xe7, 0x08, 0xce, 0xf9, 0x5b, 0xaf, 0x6a, 0xeb, 0xb4, 0x38, 0xab, 0xaf, 0x1c, 0xba, 0x1e, 0x0e, - 0x48, 0x51, 0xa0, 0x5e, 0xb1, 0x16, 0x0f, 0xc5, 0x40, 0x73, 0x87, 0xae, 0xf9, 0x58, 0x54, 0x5e, - 0x8f, 0x5e, 0x87, 0xa5, 0x2d, 0x04, 0xe3, 0xf1, 0xb9, 0x05, 0xaf, 0x49, 0x18, 0x36, 0xe9, 0x5a, - 0x4b, 0xa8, 0xbc, 0x68, 0x06, 0xb6, 0x55, 0x46, 0x1d, 0x34, 0x3b, 0x63, 0x0f, 0xef, 0x6d, 0x9a, - 0xfc, 0x11, 0xc3, 0x11, 0x46, 0x09, 0x7f, 0x8b, 0xe0, 0x98, 0x98, 0x2b, 0x70, 0xf4, 0x09, 0x1b, - 0x71, 0xa7, 0x94, 0x2e, 0xef, 0xc1, 0x93, 0x0b, 0x23, 0xcf, 0x3d, 0x7d, 0xf1, 0xdb, 0xf3, 0xd4, - 0xbb, 0xf8, 0x1d, 0xc2, 0x2e, 0xc4, 0xfe, 0x5d, 0x98, 0x5f, 0x9b, 0xbd, 0x71, 0x9b, 0x6c, 0xb4, - 0x2a, 0xd0, 0x24, 0x6e, 0x5d, 0x6c, 0xb2, 0x21, 0xaa, 0xd5, 0xc4, 0xcf, 0x10, 0xf4, 0x7b, 0x43, - 0x3e, 0xde, 0x7d, 0x6f, 0xef, 0x15, 0x90, 0xae, 0xec, 0xc5, 0x55, 0xe0, 0xbc, 0xc4, 0x70, 0x8e, - 0xe1, 0x0b, 0x89, 0x38, 0xf1, 0x0f, 0x08, 0x70, 0xe7, 0xcd, 0x03, 0x4f, 0x25, 0xec, 0x14, 0x77, - 0x65, 0x92, 0xae, 0x75, 0x17, 0x24, 0x80, 0x5e, 0x67, 0x40, 0x67, 0xf0, 0x74, 0x34, 0x50, 0x3f, - 0xd0, 0xd5, 0xd4, 0x7f, 0x68, 0xb6, 0x18, 0x6c, 0xb9, 0x0c, 0x3a, 0xc6, 0xfe, 0x44, 0x06, 0x71, - 0xf7, 0x8f, 0x44, 0x06, 0xb1, 0x37, 0x0b, 0xf9, 0x2e, 0x63, 0xb0, 0x80, 0x6f, 0xec, 0xbf, 0x25, - 0x48, 0xf0, 0x3e, 0x82, 0xbf, 0x4c, 0xc1, 0x70, 0xe4, 0x70, 0x8c, 0xa7, 0x77, 0x07, 0x18, 0x35, - 0xf9, 0x4b, 0x6f, 0x77, 0x1d, 0x27, 0xb8, 0x7d, 0x86, 0x18, 0xb9, 0x26, 0xde, 0xe8, 0x85, 0x5c, - 0x78, 0x8e, 0x27, 0xe2, 0x3e, 0x40, 0x36, 0xc2, 0xb7, 0x8a, 0x26, 0xe1, 0x67, 0x40, 0xcb, 0xce, - 0x9f, 0x9b, 0xf8, 0x17, 0x04, 0xaf, 0xb5, 0x8f, 0x57, 0x38, 0x17, 0xcf, 0x29, 0x66, 0xba, 0x96, - 0x26, 0xbb, 0x09, 0x11, 0x0a, 0x7c, 0xc8, 0x04, 0x78, 0x84, 0x1f, 0xf4, 0x20, 0x40, 0xc7, 0x07, - 0xc8, 0x26, 0x1b, 0xde, 0xc9, 0xda, 0xc4, 0x2f, 0x10, 0x9c, 0xe9, 0x18, 0x1e, 0x71, 0x17, 0x58, - 0xfd, 0x37, 0x70, 0xaa, 0xab, 0x18, 0x41, 0xf0, 0x3e, 0x23, 0x78, 0x17, 0xdf, 0x3e, 0x50, 0x82, - 0x78, 0x07, 0xc1, 0x70, 0xe4, 0x9c, 0x96, 0xd4, 0xc4, 0x49, 0x23, 0x65, 0x52, 0x13, 0x27, 0x0e, - 0x84, 0xf2, 0x43, 0xc6, 0x70, 0x09, 0xdf, 0xeb, 0x9d, 0xa1, 0xa6, 0xaf, 0x84, 0x6a, 0xf7, 0x79, - 0x0a, 0xce, 0x74, 0x4c, 0x4a, 0x49, 0xb5, 0x8b, 0x9b, 0xf7, 0x92, 0x6a, 0x17, 0x3b, 0x8a, 0xc9, - 0x5f, 0xf0, 0xd7, 0xf3, 0x53, 0x84, 0x3f, 0x39, 0xe0, 0xf6, 0x4c, 0x98, 0x99, 0x9a, 0xa4, 0xee, - 0x03, 0xca, 0x57, 0x05, 0xe5, 0x3f, 0x11, 0x9c, 0x0c, 0x8d, 0x48, 0x58, 0x49, 0x26, 0xd4, 0x3e, - 0xe0, 0x49, 0x64, 0xcf, 0xfe, 0x82, 0xfc, 0x53, 0x4e, 0xfe, 0x63, 0xfc, 0xd1, 0xbf, 0xcd, 0x9d, - 0x61, 0x61, 0xbd, 0x80, 0x7f, 0x42, 0x30, 0x18, 0x31, 0x48, 0xe1, 0x84, 0x4f, 0x49, 0xfc, 0x4c, - 0x27, 0xbd, 0xd5, 0x65, 0x94, 0x50, 0x62, 0x91, 0x09, 0x71, 0x0b, 0xdf, 0xec, 0x41, 0x88, 0xd0, - 0xb8, 0x37, 0xa7, 0x6e, 0x6e, 0x67, 0xd1, 0xd6, 0x76, 0x16, 0xfd, 0xba, 0x9d, 0x45, 0x5f, 0xed, - 0x64, 0xfb, 0xb6, 0x76, 0xb2, 0x7d, 0x3f, 0xef, 0x64, 0xfb, 0x1e, 0xcd, 0x94, 0x0c, 0xa7, 0x5c, - 0x2f, 0x28, 0xba, 0x55, 0x21, 0xe2, 0xef, 0x07, 0xfc, 0x9f, 0xab, 0x76, 0x71, 0x85, 0xac, 0x11, - 0xff, 0xef, 0x04, 0x6f, 0x5e, 0xbb, 0xea, 0x21, 0x71, 0xd6, 0xab, 0xd4, 0x2e, 0x1c, 0x65, 0xff, - 0x61, 0x33, 0xf5, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x51, 0xd1, 0xa1, 0x4e, 0xce, 0x18, 0x00, - 0x00, + // 1353 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0xcf, 0x6f, 0xdc, 0xc4, + 0x17, 0xcf, 0xec, 0x6e, 0xdb, 0xe4, 0xf5, 0xd7, 0xb7, 0x93, 0x44, 0x4d, 0xdd, 0x74, 0x93, 0x5a, + 0xea, 0x97, 0xb4, 0x52, 0x3d, 0x6c, 0x52, 0x42, 0x84, 0xa0, 0x52, 0x12, 0x89, 0x36, 0x95, 0xda, + 0xa6, 0x8e, 0x2a, 0xb5, 0x3d, 0xb0, 0x78, 0xbd, 0x93, 0x8d, 0x95, 0xac, 0xbd, 0x5d, 0x7b, 0xb7, + 0x09, 0x61, 0x11, 0x2a, 0x12, 0xf4, 0x84, 0x90, 0x7a, 0x40, 0xe2, 0x82, 0xc4, 0x2d, 0x47, 0xfe, + 0x02, 0xae, 0xbd, 0x11, 0xa9, 0x1c, 0x90, 0x2a, 0x15, 0x94, 0x70, 0xe0, 0xc6, 0x89, 0x3b, 0xf2, + 0xcc, 0xd8, 0x6b, 0xef, 0xda, 0x4e, 0x36, 0x9b, 0x05, 0xc4, 0x29, 0xeb, 0xf1, 0x7b, 0x6f, 0x3e, + 0x9f, 0xcf, 0x7b, 0x1e, 0x7f, 0x1c, 0x18, 0x33, 0x0a, 0x3a, 0xd1, 0xad, 0x2a, 0x25, 0xfa, 0x8a, + 0x66, 0x9a, 0x74, 0x8d, 0xd4, 0x73, 0xe4, 0x71, 0x8d, 0x56, 0x37, 0x94, 0x4a, 0xd5, 0x72, 0x2c, + 0x3c, 0x68, 0x14, 0x74, 0xc5, 0x0d, 0x50, 0x44, 0x80, 0x52, 0xcf, 0x49, 0x81, 0xac, 0x35, 0x83, + 0x9a, 0x8e, 0x9b, 0xc4, 0x7f, 0xf1, 0x2c, 0xe9, 0x8a, 0x6e, 0xd9, 0x65, 0xcb, 0x26, 0x05, 0xcd, + 0xa6, 0xbc, 0x1c, 0xa9, 0xe7, 0x0a, 0xd4, 0xd1, 0x72, 0xa4, 0xa2, 0x95, 0x0c, 0x53, 0x73, 0x0c, + 0xcb, 0x14, 0xb1, 0x17, 0xa3, 0x20, 0x78, 0x9b, 0xf1, 0x90, 0xd1, 0x92, 0x65, 0x95, 0xd6, 0x28, + 0xd1, 0x2a, 0x06, 0xd1, 0x4c, 0xd3, 0x72, 0x58, 0xbe, 0x2d, 0xee, 0x9e, 0x13, 0x77, 0xd9, 0x55, + 0xa1, 0xb6, 0x4c, 0x34, 0x53, 0xa0, 0x97, 0x86, 0x4a, 0x56, 0xc9, 0x62, 0x3f, 0x89, 0xfb, 0x8b, + 0xaf, 0xca, 0xb7, 0x61, 0xf0, 0x9e, 0x8b, 0x69, 0x9e, 0x6f, 0xa2, 0xd2, 0xc7, 0x35, 0x6a, 0x3b, + 0xf8, 0x2c, 0x1c, 0xab, 0x58, 0x55, 0x27, 0x6f, 0x14, 0x47, 0xd0, 0x38, 0x9a, 0x18, 0x50, 0x8f, + 0xba, 0x97, 0x0b, 0x45, 0x7c, 0x01, 0x40, 0xe0, 0x71, 0xef, 0xa5, 0xd8, 0xbd, 0x01, 0xb1, 0xb2, + 0x50, 0x94, 0xb7, 0x10, 0x0c, 0x85, 0xeb, 0xd9, 0x15, 0xcb, 0xb4, 0x29, 0x9e, 0x86, 0x63, 0x22, + 0x8a, 0x15, 0x3c, 0x3e, 0x39, 0xaa, 0x44, 0xa8, 0xa9, 0x78, 0x69, 0x5e, 0x30, 0x1e, 0x82, 0x23, + 0x95, 0xaa, 0x65, 0x2d, 0xb3, 0xad, 0x4e, 0xa8, 0xfc, 0x02, 0xcf, 0xc3, 0x09, 0xf6, 0x23, 0xbf, + 0x42, 0x8d, 0xd2, 0x8a, 0x33, 0x92, 0x66, 0x25, 0xa5, 0x40, 0x49, 0xde, 0x81, 0x7a, 0x4e, 0xb9, + 0xc9, 0x22, 0xe6, 0x32, 0x2f, 0x5e, 0x8f, 0xf5, 0xa9, 0xc7, 0x59, 0x16, 0x5f, 0x92, 0x3f, 0x08, + 0x43, 0xb5, 0x3d, 0xee, 0xef, 0x03, 0x34, 0x1b, 0x23, 0xd0, 0xfe, 0x5f, 0xe1, 0x5d, 0x54, 0xdc, + 0x2e, 0x2a, 0x7c, 0x28, 0x44, 0x17, 0x95, 0x45, 0xad, 0x44, 0x45, 0xae, 0x1a, 0xc8, 0x94, 0x5f, + 0x23, 0x18, 0x6e, 0xd9, 0x40, 0x88, 0x31, 0x07, 0xfd, 0x82, 0x9f, 0x3d, 0x82, 0xc6, 0xd3, 0xac, + 0x7e, 0x94, 0x1a, 0x0b, 0x45, 0x6a, 0x3a, 0xc6, 0xb2, 0x41, 0x8b, 0x9e, 0x2e, 0x7e, 0x1e, 0xbe, + 0x11, 0x42, 0x99, 0x62, 0x28, 0xdf, 0xd8, 0x13, 0x25, 0x07, 0x10, 0x84, 0x89, 0x67, 0xe0, 0x68, + 0x87, 0x2a, 0x8a, 0x78, 0xf9, 0x19, 0x82, 0x2c, 0x27, 0x68, 0x99, 0x26, 0xd5, 0xdd, 0x6a, 0xad, + 0x5a, 0x66, 0x01, 0x74, 0xff, 0xa6, 0x18, 0xa5, 0xc0, 0x4a, 0x8b, 0xd6, 0xa9, 0x03, 0x6b, 0xfd, + 0x3b, 0x82, 0xb1, 0x58, 0x28, 0xff, 0x2d, 0xd5, 0x1f, 0x78, 0xa2, 0x73, 0x4c, 0xf3, 0x2c, 0x7a, + 0xc9, 0xd1, 0x1c, 0xda, 0xed, 0xc3, 0xfb, 0x8b, 0x2f, 0x62, 0x44, 0x69, 0x21, 0xa2, 0x06, 0x67, + 0x0d, 0x5f, 0x9f, 0x3c, 0x87, 0x9a, 0xb7, 0xdd, 0x10, 0xf1, 0xa4, 0x5c, 0x8e, 0x22, 0x12, 0x90, + 0x34, 0x50, 0x73, 0xd8, 0x88, 0x5a, 0xee, 0xe5, 0x23, 0xbf, 0x85, 0xe0, 0x62, 0x88, 0xa1, 0xcb, + 0xc9, 0xb4, 0x6b, 0xf6, 0x61, 0xe8, 0x87, 0x2f, 0xc1, 0xa9, 0x3a, 0xad, 0xda, 0x86, 0x65, 0xe6, + 0xcd, 0x5a, 0xb9, 0x40, 0xab, 0x0c, 0x64, 0x46, 0x3d, 0x29, 0x56, 0xef, 0xb0, 0xc5, 0x60, 0x98, + 0xe0, 0x92, 0x09, 0x85, 0x09, 0xac, 0xaf, 0x10, 0xc8, 0x49, 0x58, 0x45, 0x43, 0xde, 0x83, 0xd3, + 0xba, 0x77, 0x27, 0xd4, 0x88, 0x21, 0x85, 0xbf, 0x0b, 0x14, 0xef, 0x5d, 0xa0, 0xcc, 0x9a, 0x1b, + 0xea, 0x29, 0x3d, 0x54, 0x06, 0x9f, 0x87, 0x01, 0xd1, 0x44, 0x9f, 0x51, 0x3f, 0x5f, 0x58, 0x28, + 0x36, 0x3b, 0x91, 0x4e, 0xea, 0x44, 0xe6, 0x20, 0x9d, 0xa8, 0xc2, 0x28, 0x23, 0xb7, 0xa8, 0xe9, + 0xab, 0xd4, 0x99, 0xb7, 0xca, 0x65, 0xc3, 0x29, 0x53, 0xd3, 0xe9, 0xb6, 0x07, 0x12, 0xf4, 0xdb, + 0x6e, 0x09, 0x53, 0xa7, 0x42, 0x7d, 0xff, 0x5a, 0xfe, 0x06, 0xc1, 0x85, 0x98, 0x4d, 0x85, 0x98, + 0xec, 0xb8, 0xf2, 0x56, 0xd9, 0xc6, 0x27, 0xd4, 0xc0, 0x4a, 0x2f, 0x47, 0xf3, 0xdb, 0x38, 0x70, + 0x76, 0xb7, 0x92, 0x84, 0xcf, 0xd8, 0xf4, 0x81, 0xcf, 0xd8, 0x3f, 0xbc, 0xe3, 0x3e, 0x02, 0xa1, + 0xd0, 0xef, 0x16, 0x1c, 0x6f, 0xaa, 0xe5, 0x9d, 0xb2, 0x13, 0x91, 0xa7, 0x2c, 0x2f, 0x32, 0xab, + 0xaf, 0x06, 0xda, 0x10, 0x4c, 0xfe, 0x37, 0x1c, 0xb5, 0x4f, 0xc4, 0x69, 0xe1, 0x63, 0x35, 0xad, + 0x27, 0x6b, 0xb4, 0x58, 0xa2, 0xbd, 0x9e, 0xd4, 0x2d, 0xef, 0xd9, 0x8f, 0xd9, 0x59, 0xc8, 0x3d, + 0x01, 0xa7, 0xb5, 0xf0, 0x2d, 0x31, 0xb3, 0xad, 0xcb, 0xbd, 0x1c, 0xdc, 0xaf, 0xbd, 0xc1, 0xbd, + 0x6f, 0x56, 0xa9, 0x4e, 0x8d, 0x3a, 0x2d, 0x72, 0xd4, 0x5d, 0x0f, 0xee, 0x75, 0x38, 0x5f, 0x61, + 0x95, 0xf2, 0xcd, 0xb9, 0xc8, 0x7b, 0x1a, 0xd9, 0x23, 0xe9, 0xf1, 0xf4, 0x44, 0x46, 0x3d, 0x57, + 0x69, 0x99, 0xc6, 0x25, 0x2f, 0x40, 0x5e, 0x17, 0xf3, 0x1a, 0x01, 0x4c, 0x08, 0x38, 0x0a, 0x03, + 0xcd, 0x7a, 0x88, 0xd5, 0x6b, 0x2e, 0x04, 0x06, 0x27, 0xd5, 0xe1, 0xe0, 0x3c, 0x47, 0x70, 0xce, + 0xdf, 0x7a, 0x4d, 0xdb, 0xa0, 0xc5, 0x59, 0x7d, 0xf5, 0x1f, 0xd7, 0xc3, 0x01, 0x29, 0x0a, 0x54, + 0x8f, 0xb5, 0x78, 0x28, 0x4c, 0xc5, 0x1d, 0xba, 0xee, 0x63, 0x51, 0x79, 0x3f, 0xba, 0x35, 0x2c, + 0xdf, 0x23, 0x18, 0x8f, 0xaf, 0x2d, 0x78, 0x4d, 0xc2, 0xb0, 0x49, 0xd7, 0x9b, 0x42, 0xe5, 0xc5, + 0x30, 0xb0, 0xad, 0x32, 0xea, 0xa0, 0xd9, 0x9e, 0xdb, 0xc3, 0xc7, 0x65, 0xf2, 0x47, 0x0c, 0x47, + 0x18, 0x66, 0xfc, 0x1d, 0x82, 0x63, 0xe2, 0xdd, 0x8e, 0xa3, 0xcf, 0xc8, 0x88, 0x2f, 0x33, 0xe9, + 0xf2, 0x3e, 0x22, 0x39, 0x73, 0x79, 0xee, 0xe9, 0xcb, 0xdf, 0x9e, 0xa7, 0xde, 0xc5, 0xef, 0x10, + 0xf6, 0x59, 0xe9, 0x7f, 0x51, 0xf2, 0x8f, 0x4f, 0xcf, 0xd3, 0x92, 0xcd, 0xa6, 0xc4, 0x0d, 0xe2, + 0x0a, 0x6f, 0x93, 0x4d, 0xd1, 0x8e, 0x06, 0x7e, 0x86, 0xa0, 0xdf, 0x73, 0xd2, 0x78, 0xef, 0xbd, + 0xbd, 0x19, 0x97, 0xae, 0xec, 0x27, 0x54, 0xe0, 0xbc, 0xc4, 0x70, 0x8e, 0xe1, 0x0b, 0x89, 0x38, + 0xf1, 0x0f, 0x08, 0x70, 0xbb, 0xbd, 0xc7, 0x53, 0x09, 0x3b, 0xc5, 0x7d, 0x97, 0x48, 0xd7, 0x3a, + 0x4b, 0x12, 0x40, 0xaf, 0x33, 0xa0, 0x33, 0x78, 0x3a, 0x1a, 0xa8, 0x9f, 0xe8, 0x6a, 0xea, 0x5f, + 0x34, 0x9a, 0x0c, 0xb6, 0x5d, 0x06, 0x6d, 0xde, 0x3a, 0x91, 0x41, 0x9c, 0xc9, 0x4f, 0x64, 0x10, + 0x6b, 0xdf, 0xe5, 0xbb, 0x8c, 0xc1, 0x02, 0xbe, 0x71, 0xf0, 0x91, 0x20, 0x41, 0xd3, 0x8f, 0xbf, + 0x4c, 0xc1, 0x70, 0xa4, 0x41, 0xc5, 0xd3, 0x7b, 0x03, 0x8c, 0x72, 0xdf, 0xd2, 0xdb, 0x1d, 0xe7, + 0x09, 0x6e, 0x9f, 0x21, 0x46, 0xae, 0x81, 0x37, 0xbb, 0x21, 0x17, 0xf6, 0xd2, 0x44, 0x78, 0x72, + 0xb2, 0x19, 0x76, 0xf6, 0x0d, 0xc2, 0xcf, 0x80, 0xe6, 0x3a, 0xbf, 0x6e, 0xe0, 0x57, 0x08, 0xfe, + 0xd7, 0x6a, 0x90, 0x70, 0x2e, 0x9e, 0x53, 0x8c, 0x01, 0x96, 0x26, 0x3b, 0x49, 0x11, 0x0a, 0x7c, + 0xc8, 0x04, 0x78, 0x84, 0x1f, 0x74, 0x21, 0x40, 0xdb, 0x1b, 0xc6, 0x26, 0x9b, 0xde, 0xd1, 0xd9, + 0xc0, 0x2f, 0x11, 0x9c, 0x69, 0xb3, 0x7f, 0xb8, 0x03, 0xac, 0xfe, 0x13, 0x38, 0xd5, 0x51, 0x8e, + 0x20, 0x78, 0x9f, 0x11, 0xbc, 0x8b, 0x6f, 0x1f, 0x2a, 0x41, 0xbc, 0x8b, 0x60, 0x38, 0xd2, 0x69, + 0x25, 0x0d, 0x71, 0x92, 0x29, 0x4c, 0x1a, 0xe2, 0x44, 0x4b, 0x27, 0x3f, 0x64, 0x0c, 0x97, 0xf0, + 0xbd, 0xee, 0x19, 0x6a, 0xfa, 0x6a, 0xa8, 0x77, 0x9f, 0xa7, 0xe0, 0x4c, 0x9b, 0x15, 0x4a, 0xea, + 0x5d, 0x9c, 0xa1, 0x4b, 0xea, 0x5d, 0xac, 0xd7, 0x92, 0xbf, 0xe0, 0x8f, 0xe7, 0xa7, 0x08, 0x7f, + 0x72, 0xc8, 0xe3, 0x99, 0x60, 0x8a, 0x1a, 0xa4, 0xe6, 0x03, 0xca, 0x57, 0x04, 0xe5, 0x3f, 0x11, + 0x9c, 0x0c, 0x79, 0x20, 0xac, 0x24, 0x13, 0x6a, 0x75, 0x70, 0x12, 0xd9, 0x77, 0xbc, 0x20, 0xff, + 0x94, 0x93, 0xff, 0x18, 0x7f, 0xf4, 0x77, 0x73, 0x67, 0x58, 0xd8, 0x2c, 0xe0, 0x9f, 0x10, 0x0c, + 0x46, 0x38, 0x25, 0x9c, 0xf0, 0x2a, 0x89, 0x37, 0x6d, 0xd2, 0x5b, 0x1d, 0x66, 0x09, 0x25, 0x16, + 0x99, 0x10, 0xb7, 0xf0, 0xcd, 0x2e, 0x84, 0x08, 0xf9, 0xb9, 0x39, 0xf5, 0xc5, 0x4e, 0x16, 0x6d, + 0xef, 0x64, 0xd1, 0xaf, 0x3b, 0x59, 0xf4, 0xd5, 0x6e, 0xb6, 0x6f, 0x7b, 0x37, 0xdb, 0xf7, 0xf3, + 0x6e, 0xb6, 0xef, 0xd1, 0x4c, 0xc9, 0x70, 0x56, 0x6a, 0x05, 0x45, 0xb7, 0xca, 0x44, 0xfc, 0x17, + 0x9e, 0xff, 0xb9, 0x6a, 0x17, 0x57, 0xc9, 0x3a, 0xf1, 0xff, 0xdb, 0xfe, 0xe6, 0xb5, 0xab, 0x1e, + 0x12, 0x67, 0xa3, 0x42, 0xed, 0xc2, 0x51, 0xf6, 0x4f, 0x93, 0xa9, 0xbf, 0x02, 0x00, 0x00, 0xff, + 0xff, 0x4c, 0x6c, 0x44, 0xa5, 0x14, 0x18, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -2119,14 +2063,7 @@ func (m *QueryChannelResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintQuery(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x22 - if len(m.ProofPath) > 0 { - i -= len(m.ProofPath) - copy(dAtA[i:], m.ProofPath) - i = encodeVarintQuery(dAtA, i, uint64(len(m.ProofPath))) - i-- - dAtA[i] = 0x1a - } + dAtA[i] = 0x1a if len(m.Proof) > 0 { i -= len(m.Proof) copy(dAtA[i:], m.Proof) @@ -2410,14 +2347,7 @@ func (m *QueryChannelClientStateResponse) MarshalToSizedBuffer(dAtA []byte) (int i = encodeVarintQuery(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x22 - if len(m.ProofPath) > 0 { - i -= len(m.ProofPath) - copy(dAtA[i:], m.ProofPath) - i = encodeVarintQuery(dAtA, i, uint64(len(m.ProofPath))) - i-- - dAtA[i] = 0x1a - } + dAtA[i] = 0x1a if len(m.Proof) > 0 { i -= len(m.Proof) copy(dAtA[i:], m.Proof) @@ -2516,14 +2446,7 @@ func (m *QueryChannelConsensusStateResponse) MarshalToSizedBuffer(dAtA []byte) ( i = encodeVarintQuery(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x2a - if len(m.ProofPath) > 0 { - i -= len(m.ProofPath) - copy(dAtA[i:], m.ProofPath) - i = encodeVarintQuery(dAtA, i, uint64(len(m.ProofPath))) - i-- - dAtA[i] = 0x22 - } + dAtA[i] = 0x22 if len(m.Proof) > 0 { i -= len(m.Proof) copy(dAtA[i:], m.Proof) @@ -2624,14 +2547,7 @@ func (m *QueryPacketCommitmentResponse) MarshalToSizedBuffer(dAtA []byte) (int, i = encodeVarintQuery(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x22 - if len(m.ProofPath) > 0 { - i -= len(m.ProofPath) - copy(dAtA[i:], m.ProofPath) - i = encodeVarintQuery(dAtA, i, uint64(len(m.ProofPath))) - i-- - dAtA[i] = 0x1a - } + dAtA[i] = 0x1a if len(m.Proof) > 0 { i -= len(m.Proof) copy(dAtA[i:], m.Proof) @@ -2828,14 +2744,7 @@ func (m *QueryPacketAcknowledgementResponse) MarshalToSizedBuffer(dAtA []byte) ( i = encodeVarintQuery(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x22 - if len(m.ProofPath) > 0 { - i -= len(m.ProofPath) - copy(dAtA[i:], m.ProofPath) - i = encodeVarintQuery(dAtA, i, uint64(len(m.ProofPath))) - i-- - dAtA[i] = 0x1a - } + dAtA[i] = 0x1a if len(m.Proof) > 0 { i -= len(m.Proof) copy(dAtA[i:], m.Proof) @@ -3131,14 +3040,7 @@ func (m *QueryNextSequenceReceiveResponse) MarshalToSizedBuffer(dAtA []byte) (in i = encodeVarintQuery(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x22 - if len(m.ProofPath) > 0 { - i -= len(m.ProofPath) - copy(dAtA[i:], m.ProofPath) - i = encodeVarintQuery(dAtA, i, uint64(len(m.ProofPath))) - i-- - dAtA[i] = 0x1a - } + dAtA[i] = 0x1a if len(m.Proof) > 0 { i -= len(m.Proof) copy(dAtA[i:], m.Proof) @@ -3196,10 +3098,6 @@ func (m *QueryChannelResponse) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } - l = len(m.ProofPath) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } l = m.ProofHeight.Size() n += 1 + l + sovQuery(uint64(l)) return n @@ -3308,10 +3206,6 @@ func (m *QueryChannelClientStateResponse) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } - l = len(m.ProofPath) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } l = m.ProofHeight.Size() n += 1 + l + sovQuery(uint64(l)) return n @@ -3358,10 +3252,6 @@ func (m *QueryChannelConsensusStateResponse) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } - l = len(m.ProofPath) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } l = m.ProofHeight.Size() n += 1 + l + sovQuery(uint64(l)) return n @@ -3401,10 +3291,6 @@ func (m *QueryPacketCommitmentResponse) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } - l = len(m.ProofPath) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } l = m.ProofHeight.Size() n += 1 + l + sovQuery(uint64(l)) return n @@ -3486,10 +3372,6 @@ func (m *QueryPacketAcknowledgementResponse) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } - l = len(m.ProofPath) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } l = m.ProofHeight.Size() n += 1 + l + sovQuery(uint64(l)) return n @@ -3609,10 +3491,6 @@ func (m *QueryNextSequenceReceiveResponse) Size() (n int) { if l > 0 { n += 1 + l + sovQuery(uint64(l)) } - l = len(m.ProofPath) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } l = m.ProofHeight.Size() n += 1 + l + sovQuery(uint64(l)) return n @@ -3841,38 +3719,6 @@ func (m *QueryChannelResponse) Unmarshal(dAtA []byte) error { } iNdEx = postIndex case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofPath", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ProofPath = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) } @@ -4668,38 +4514,6 @@ func (m *QueryChannelClientStateResponse) Unmarshal(dAtA []byte) error { } iNdEx = postIndex case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofPath", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ProofPath = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) } @@ -5043,38 +4857,6 @@ func (m *QueryChannelConsensusStateResponse) Unmarshal(dAtA []byte) error { } iNdEx = postIndex case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofPath", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ProofPath = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) } @@ -5365,38 +5147,6 @@ func (m *QueryPacketCommitmentResponse) Unmarshal(dAtA []byte) error { } iNdEx = postIndex case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofPath", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ProofPath = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) } @@ -5996,38 +5746,6 @@ func (m *QueryPacketAcknowledgementResponse) Unmarshal(dAtA []byte) error { } iNdEx = postIndex case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofPath", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ProofPath = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) } @@ -6994,38 +6712,6 @@ func (m *QueryNextSequenceReceiveResponse) Unmarshal(dAtA []byte) error { } iNdEx = postIndex case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProofPath", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ProofPath = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ProofHeight", wireType) } From 9087ffc774a8c586d04cb90c90438c02cca9ab5b Mon Sep 17 00:00:00 2001 From: Amaury Martiny Date: Thu, 29 Oct 2020 16:32:47 +0100 Subject: [PATCH 27/27] Throw an error on duplicate registration (#7729) * Panic on registering a service twice * Panic if we register twice * Fix test * Fix test * Add clearer panic message * Add comment * Fix test --- baseapp/grpcrouter.go | 20 +++++++++++- baseapp/grpcrouter_helpers.go | 6 ++-- baseapp/grpcrouter_test.go | 38 +++++++++++++++++++--- baseapp/msg_service_router.go | 21 ++++++++++-- baseapp/msg_service_router_test.go | 27 +++++++++++++++- client/grpc/reflection/reflection_test.go | 5 --- codec/types/interface_registry.go | 33 +++++++++++++++++++ codec/types/types_test.go | 39 +++++++++++++++++++++++ 8 files changed, 173 insertions(+), 16 deletions(-) diff --git a/baseapp/grpcrouter.go b/baseapp/grpcrouter.go index a32da67581..566333b2a4 100644 --- a/baseapp/grpcrouter.go +++ b/baseapp/grpcrouter.go @@ -54,13 +54,31 @@ func (qrt *GRPCQueryRouter) Route(path string) GRPCQueryHandler { } // RegisterService implements the gRPC Server.RegisterService method. sd is a gRPC -// service description, handler is an object which implements that gRPC service +// service description, handler is an object which implements that gRPC service/ +// +// This functions PANICS: +// - if a protobuf service is registered twice. func (qrt *GRPCQueryRouter) RegisterService(sd *grpc.ServiceDesc, handler interface{}) { // adds a top-level query handler based on the gRPC service name for _, method := range sd.Methods { fqName := fmt.Sprintf("/%s/%s", sd.ServiceName, method.MethodName) methodHandler := method.Handler + // Check that each service is only registered once. If a service is + // registered more than once, then we should error. Since we can't + // return an error (`Server.RegisterService` interface restriction) we + // panic (at startup). + _, found := qrt.routes[fqName] + if found { + panic( + fmt.Errorf( + "gRPC query service %s has already been registered. Please make sure to only register each service once. "+ + "This usually means that there are conflicting modules registering the same gRPC query service", + fqName, + ), + ) + } + qrt.routes[fqName] = func(ctx sdk.Context, req abci.RequestQuery) (abci.ResponseQuery, error) { // call the method handler from the service description with the handler object, // a wrapped sdk.Context with proto-unmarshaled data from the ABCI request data diff --git a/baseapp/grpcrouter_helpers.go b/baseapp/grpcrouter_helpers.go index bd7d498e7a..2ea74b55fc 100644 --- a/baseapp/grpcrouter_helpers.go +++ b/baseapp/grpcrouter_helpers.go @@ -18,7 +18,7 @@ import ( // service client. type QueryServiceTestHelper struct { *GRPCQueryRouter - ctx sdk.Context + Ctx sdk.Context } var ( @@ -31,7 +31,7 @@ var ( func NewQueryServerTestHelper(ctx sdk.Context, interfaceRegistry types.InterfaceRegistry) *QueryServiceTestHelper { qrt := NewGRPCQueryRouter() qrt.SetInterfaceRegistry(interfaceRegistry) - return &QueryServiceTestHelper{GRPCQueryRouter: qrt, ctx: ctx} + return &QueryServiceTestHelper{GRPCQueryRouter: qrt, Ctx: ctx} } // Invoke implements the grpc ClientConn.Invoke method @@ -45,7 +45,7 @@ func (q *QueryServiceTestHelper) Invoke(_ gocontext.Context, method string, args return err } - res, err := querier(q.ctx, abci.RequestQuery{Data: reqBz}) + res, err := querier(q.Ctx, abci.RequestQuery{Data: reqBz}) if err != nil { return err } diff --git a/baseapp/grpcrouter_test.go b/baseapp/grpcrouter_test.go index d2051a1132..6a83939b4a 100644 --- a/baseapp/grpcrouter_test.go +++ b/baseapp/grpcrouter_test.go @@ -1,24 +1,29 @@ -package baseapp +package baseapp_test import ( "context" + "os" "testing" "github.com/stretchr/testify/require" + "github.com/tendermint/tendermint/libs/log" + dbm "github.com/tendermint/tm-db" + "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/simapp" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" ) func TestGRPCRouter(t *testing.T) { - qr := NewGRPCQueryRouter() + qr := baseapp.NewGRPCQueryRouter() interfaceRegistry := testdata.NewTestInterfaceRegistry() qr.SetInterfaceRegistry(interfaceRegistry) testdata.RegisterQueryServer(qr, testdata.QueryImpl{}) - helper := &QueryServiceTestHelper{ + helper := &baseapp.QueryServiceTestHelper{ GRPCQueryRouter: qr, - ctx: sdk.Context{}.WithContext(context.Background()), + Ctx: sdk.Context{}.WithContext(context.Background()), } client := testdata.NewQueryClient(helper) @@ -44,3 +49,28 @@ func TestGRPCRouter(t *testing.T) { require.NotNil(t, res3) require.Equal(t, spot, res3.HasAnimal.Animal.GetCachedValue()) } + +func TestRegisterQueryServiceTwice(t *testing.T) { + // Setup baseapp. + db := dbm.NewMemDB() + encCfg := simapp.MakeTestEncodingConfig() + app := baseapp.NewBaseApp("test", log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, encCfg.TxConfig.TxDecoder()) + app.SetInterfaceRegistry(encCfg.InterfaceRegistry) + testdata.RegisterInterfaces(encCfg.InterfaceRegistry) + + // First time registering service shouldn't panic. + require.NotPanics(t, func() { + testdata.RegisterQueryServer( + app.GRPCQueryRouter(), + testdata.QueryImpl{}, + ) + }) + + // Second time should panic. + require.Panics(t, func() { + testdata.RegisterQueryServer( + app.GRPCQueryRouter(), + testdata.QueryImpl{}, + ) + }) +} diff --git a/baseapp/msg_service_router.go b/baseapp/msg_service_router.go index b883faa37b..ea2ed4b4eb 100644 --- a/baseapp/msg_service_router.go +++ b/baseapp/msg_service_router.go @@ -40,8 +40,10 @@ func (msr *MsgServiceRouter) Handler(methodName string) MsgServiceHandler { // RegisterService implements the gRPC Server.RegisterService method. sd is a gRPC // service description, handler is an object which implements that gRPC service. // -// This function PANICs if it is called before the service `Msg`s have been -// registered using RegisterInterfaces. +// This function PANICs: +// - if it is called before the service `Msg`s have been registered using +// RegisterInterfaces, +// - or if a service is being registered twice. func (msr *MsgServiceRouter) RegisterService(sd *grpc.ServiceDesc, handler interface{}) { // Adds a top-level query handler based on the gRPC service name. for _, method := range sd.Methods { @@ -66,6 +68,21 @@ func (msr *MsgServiceRouter) RegisterService(sd *grpc.ServiceDesc, handler inter ) } + // Check that each service is only registered once. If a service is + // registered more than once, then we should error. Since we can't + // return an error (`Server.RegisterService` interface restriction) we + // panic (at startup). + _, found := msr.routes[fqMethod] + if found { + panic( + fmt.Errorf( + "msg service %s has already been registered. Please make sure to only register each service once. "+ + "This usually means that there are conflicting modules registering the same msg service", + fqMethod, + ), + ) + } + msr.routes[fqMethod] = func(ctx sdk.Context, req sdk.MsgRequest) (*sdk.Result, error) { ctx = ctx.WithEventManager(sdk.NewEventManager()) interceptor := func(goCtx context.Context, _ interface{}, _ *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { diff --git a/baseapp/msg_service_router_test.go b/baseapp/msg_service_router_test.go index bbbf9e1356..34f9c08027 100644 --- a/baseapp/msg_service_router_test.go +++ b/baseapp/msg_service_router_test.go @@ -18,7 +18,7 @@ import ( authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" ) -func TestRegisterService(t *testing.T) { +func TestRegisterMsgService(t *testing.T) { db := dbm.NewMemDB() // Create an encoding config that doesn't register testdata Msg services. @@ -42,6 +42,31 @@ func TestRegisterService(t *testing.T) { }) } +func TestRegisterMsgServiceTwice(t *testing.T) { + // Setup baseapp. + db := dbm.NewMemDB() + encCfg := simapp.MakeTestEncodingConfig() + app := baseapp.NewBaseApp("test", log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, encCfg.TxConfig.TxDecoder()) + app.SetInterfaceRegistry(encCfg.InterfaceRegistry) + testdata.RegisterInterfaces(encCfg.InterfaceRegistry) + + // First time registering service shouldn't panic. + require.NotPanics(t, func() { + testdata.RegisterMsgServer( + app.MsgServiceRouter(), + testdata.MsgServerImpl{}, + ) + }) + + // Second time should panic. + require.Panics(t, func() { + testdata.RegisterMsgServer( + app.MsgServiceRouter(), + testdata.MsgServerImpl{}, + ) + }) +} + func TestMsgService(t *testing.T) { priv, _, _ := testdata.KeyTestPubAddr() encCfg := simapp.MakeTestEncodingConfig() diff --git a/client/grpc/reflection/reflection_test.go b/client/grpc/reflection/reflection_test.go index 037e7e06ae..211fc397ad 100644 --- a/client/grpc/reflection/reflection_test.go +++ b/client/grpc/reflection/reflection_test.go @@ -21,14 +21,9 @@ type IntegrationTestSuite struct { func (s *IntegrationTestSuite) SetupSuite() { app := simapp.Setup(false) - srv := reflection.NewReflectionServiceServer(app.InterfaceRegistry()) - sdkCtx := app.BaseApp.NewContext(false, tmproto.Header{}) queryHelper := baseapp.NewQueryServerTestHelper(sdkCtx, app.InterfaceRegistry()) - - reflection.RegisterReflectionServiceServer(queryHelper, srv) queryClient := reflection.NewReflectionServiceClient(queryHelper) - s.queryClient = queryClient } diff --git a/codec/types/interface_registry.go b/codec/types/interface_registry.go index 57650af61d..0f9eb760be 100644 --- a/codec/types/interface_registry.go +++ b/codec/types/interface_registry.go @@ -115,6 +115,11 @@ func (registry *interfaceRegistry) RegisterInterface(protoName string, iface int registry.RegisterImplementations(iface, impls...) } +// RegisterImplementations registers a concrete proto Message which implements +// the given interface. +// +// This function PANICs if different concrete types are registered under the +// same typeURL. func (registry *interfaceRegistry) RegisterImplementations(iface interface{}, impls ...proto.Message) { for _, impl := range impls { typeURL := "/" + proto.MessageName(impl) @@ -122,10 +127,20 @@ func (registry *interfaceRegistry) RegisterImplementations(iface interface{}, im } } +// RegisterCustomTypeURL registers a concrete type which implements the given +// interface under `typeURL`. +// +// This function PANICs if different concrete types are registered under the +// same typeURL. func (registry *interfaceRegistry) RegisterCustomTypeURL(iface interface{}, typeURL string, impl proto.Message) { registry.registerImpl(iface, typeURL, impl) } +// registerImpl registers a concrete type which implements the given +// interface under `typeURL`. +// +// This function PANICs if different concrete types are registered under the +// same typeURL. func (registry *interfaceRegistry) registerImpl(iface interface{}, typeURL string, impl proto.Message) { ityp := reflect.TypeOf(iface).Elem() imap, found := registry.interfaceImpls[ityp] @@ -138,6 +153,24 @@ func (registry *interfaceRegistry) registerImpl(iface interface{}, typeURL strin panic(fmt.Errorf("type %T doesn't actually implement interface %+v", impl, ityp)) } + // Check if we already registered something under the given typeURL. It's + // okay to register the same concrete type again, but if we are registering + // a new concrete type under the same typeURL, then we throw an error (here, + // we panic). + foundImplType, found := imap[typeURL] + if found && foundImplType != implType { + panic( + fmt.Errorf( + "concrete type %s has already been registered under typeURL %s, cannot register %s under same typeURL. "+ + "This usually means that there are conflicting modules registering different concrete types "+ + "for a same interface implementation", + foundImplType, + typeURL, + implType, + ), + ) + } + imap[typeURL] = implType registry.typeURLMap[typeURL] = implType diff --git a/codec/types/types_test.go b/codec/types/types_test.go index 5e2a0f7f77..1ff03a5f56 100644 --- a/codec/types/types_test.go +++ b/codec/types/types_test.go @@ -48,22 +48,61 @@ type TestI interface { DoSomething() } +// A struct that has the same typeURL as testdata.Dog, but is actually another +// concrete type. +type FakeDog struct{} + +var ( + _ proto.Message = &FakeDog{} + _ testdata.Animal = &FakeDog{} +) + +// dummy implementation of proto.Message and testdata.Animal +func (dog FakeDog) Reset() {} +func (dog FakeDog) String() string { return "fakedog" } +func (dog FakeDog) ProtoMessage() {} +func (dog FakeDog) XXX_MessageName() string { return proto.MessageName(&testdata.Dog{}) } +func (dog FakeDog) Greet() string { return "fakedog" } + func TestRegister(t *testing.T) { registry := types.NewInterfaceRegistry() registry.RegisterInterface("Animal", (*testdata.Animal)(nil)) registry.RegisterInterface("TestI", (*TestI)(nil)) + + // Happy path. require.NotPanics(t, func() { registry.RegisterImplementations((*testdata.Animal)(nil), &testdata.Dog{}) }) + + // testdata.Dog doesn't implement TestI require.Panics(t, func() { registry.RegisterImplementations((*TestI)(nil), &testdata.Dog{}) }) + + // nil proto message require.Panics(t, func() { registry.RegisterImplementations((*TestI)(nil), nil) }) + + // Not an interface. require.Panics(t, func() { registry.RegisterInterface("not_an_interface", (*testdata.Dog)(nil)) }) + + // Duplicate registration with same concrete type. + require.NotPanics(t, func() { + registry.RegisterImplementations((*testdata.Animal)(nil), &testdata.Dog{}) + }) + + // Duplicate registration with different concrete type on same typeURL. + require.PanicsWithError( + t, + "concrete type *testdata.Dog has already been registered under typeURL /testdata.Dog, cannot register *types_test.FakeDog under same typeURL. "+ + "This usually means that there are conflicting modules registering different concrete types for a same interface implementation", + func() { + registry.RegisterImplementations((*testdata.Animal)(nil), &FakeDog{}) + }, + ) } func TestUnpackInterfaces(t *testing.T) {