From 8fbd4edacb33599458a37461122d03d17362d9b2 Mon Sep 17 00:00:00 2001 From: phamminh0811 <1phamminh0811@gmail.com> Date: Mon, 8 May 2023 14:38:48 +0700 Subject: [PATCH 01/90] bump go mod to sdk 47 --- ante/ante.go | 4 +- ante/ante_test.go | 12 +- ante/fee.go | 2 +- ante/fee_test.go | 6 +- app/ante.go | 8 +- app/app.go | 67 +- app/encoding.go | 2 +- app/export.go | 2 +- app/helpers/test_helpers.go | 16 +- app/sim_test.go | 13 +- app/test_access.go | 6 +- app/test_helpers.go | 12 +- cmd/feeappd/cmd/root.go | 15 +- cmd/feeappd/cmd/root_test.go | 4 +- cmd/feeappd/cmd/testnet.go | 16 +- cmd/feeappd/main.go | 6 +- go.mod | 173 +- go.sum | 959 ++- .../feeabstraction/absfee/v1beta1/epoch.proto | 2 +- .../absfee/v1beta1/feepool.proto | 2 +- .../absfee/v1beta1/genesis.proto | 2 +- .../absfee/v1beta1/osmosisibc.proto | 2 +- .../absfee/v1beta1/params.proto | 2 +- .../absfee/v1beta1/proposal.proto | 2 +- .../feeabstraction/absfee/v1beta1/query.proto | 2 +- proto/feeabstraction/absfee/v1beta1/tx.proto | 2 +- tests/interchaintest/go.mod | 386 +- tests/interchaintest/go.sum | 1303 ---- .../osmosistypes/gamm/balancer/tx.pb.go | 1352 ---- .../osmosistypes/gamm/types/query.pb.go | 6727 ----------------- .../osmosistypes/gamm/types/tx.pb.go | 4972 ------------ x/feeabs/ante/decorate.go | 4 +- x/feeabs/client/cli/query.go | 2 +- x/feeabs/client/cli/tx.go | 2 +- x/feeabs/client/cli/tx_test.go | 2 +- x/feeabs/client/cli/util.go | 2 +- x/feeabs/ibc_module.go | 12 +- x/feeabs/ibctesting/chain.go | 36 +- x/feeabs/ibctesting/coordinator.go | 8 +- x/feeabs/ibctesting/endpoint.go | 16 +- x/feeabs/ibctesting/event_utils.go | 6 +- x/feeabs/ibctesting/path.go | 2 +- x/feeabs/ibctesting/wasm.go | 6 +- x/feeabs/keeper/abci.go | 2 +- x/feeabs/keeper/config.go | 2 +- x/feeabs/keeper/epoch.go | 2 +- x/feeabs/keeper/exchange_rate.go | 2 +- x/feeabs/keeper/genesis.go | 2 +- x/feeabs/keeper/genesis_test.go | 4 +- x/feeabs/keeper/grpc_query.go | 2 +- x/feeabs/keeper/grpc_query_test.go | 2 +- x/feeabs/keeper/host_zone_test.go | 6 +- x/feeabs/keeper/ibc.go | 12 +- x/feeabs/keeper/keeper.go | 8 +- x/feeabs/keeper/keeper_test.go | 12 +- x/feeabs/keeper/msgserver.go | 2 +- x/feeabs/keeper/proposal.go | 2 +- x/feeabs/keeper/proposal_test.go | 4 +- x/feeabs/module.go | 8 +- x/feeabs/proposal_handler.go | 10 +- x/feeabs/relay_test.go | 10 +- x/feeabs/types/build_memo_test.go | 2 +- x/feeabs/types/expected_keepers.go | 6 +- x/feeabs/types/ibc.go | 2 +- x/feeabs/types/osmosisibc.pb.go | 2 +- x/feeabs/types/query.pb.go | 1718 ----- x/feeabs/types/tx.pb.go | 1316 ---- 67 files changed, 1162 insertions(+), 18153 deletions(-) delete mode 100644 tests/interchaintest/go.sum delete mode 100644 tests/interchaintest/osmosistypes/gamm/balancer/tx.pb.go delete mode 100644 tests/interchaintest/osmosistypes/gamm/types/query.pb.go delete mode 100644 tests/interchaintest/osmosistypes/gamm/types/tx.pb.go delete mode 100644 x/feeabs/types/query.pb.go delete mode 100644 x/feeabs/types/tx.pb.go diff --git a/ante/ante.go b/ante/ante.go index d0f81a99..317a7c04 100644 --- a/ante/ante.go +++ b/ante/ante.go @@ -4,8 +4,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/ante" - ibcante "github.com/cosmos/ibc-go/v4/modules/core/ante" - ibckeeper "github.com/cosmos/ibc-go/v4/modules/core/keeper" + ibcante "github.com/cosmos/ibc-go/v7/modules/core/ante" + ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" ) // HandlerOptions extend the SDK's AnteHandler options by requiring the IBC diff --git a/ante/ante_test.go b/ante/ante_test.go index b9ab1c09..a25a9a3e 100644 --- a/ante/ante_test.go +++ b/ante/ante_test.go @@ -4,20 +4,22 @@ import ( "fmt" "testing" + sdkerrors "cosmossdk.io/errors" + errorstypes "github.com/cosmos/cosmos-sdk/types/errors" + "cosmossdk.io/simapp" + tmrand "github.com/cometbft/cometbft/libs/rand" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/tx" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" - "github.com/cosmos/cosmos-sdk/simapp" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/tx/signing" xauthsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" "github.com/stretchr/testify/suite" - tmrand "github.com/tendermint/tendermint/libs/rand" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - "github.com/notional-labs/fee-abstraction/v2/app" - apphelpers "github.com/notional-labs/fee-abstraction/v2/app/helpers" + "github.com/notional-labs/fee-abstraction/v3/app" + apphelpers "github.com/notional-labs/fee-abstraction/v3/app/helpers" ) type IntegrationTestSuite struct { diff --git a/ante/fee.go b/ante/fee.go index 2d1cb083..c962a1ca 100644 --- a/ante/fee.go +++ b/ante/fee.go @@ -1,9 +1,9 @@ package ante import ( + tmstrings "github.com/cometbft/cometbft/libs/strings" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - tmstrings "github.com/tendermint/tendermint/libs/strings" ) const maxBypassMinFeeMsgGasUsage = uint64(200_000) diff --git a/ante/fee_test.go b/ante/fee_test.go index cd3d0ebd..d3a7aceb 100644 --- a/ante/fee_test.go +++ b/ante/fee_test.go @@ -4,10 +4,10 @@ import ( cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" - ibcclienttypes "github.com/cosmos/ibc-go/v4/modules/core/02-client/types" - ibcchanneltypes "github.com/cosmos/ibc-go/v4/modules/core/04-channel/types" + ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - "github.com/notional-labs/fee-abstraction/v2/ante" + "github.com/notional-labs/fee-abstraction/v3/ante" ) func (s *IntegrationTestSuite) TestMempoolFeeDecorator() { diff --git a/app/ante.go b/app/ante.go index 31a21a6c..54b822c4 100644 --- a/app/ante.go +++ b/app/ante.go @@ -4,11 +4,11 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/ante" - ibcante "github.com/cosmos/ibc-go/v4/modules/core/ante" - ibckeeper "github.com/cosmos/ibc-go/v4/modules/core/keeper" + ibcante "github.com/cosmos/ibc-go/v7/modules/core/ante" + ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" - feeabsante "github.com/notional-labs/fee-abstraction/v2/x/feeabs/ante" - feeabskeeper "github.com/notional-labs/fee-abstraction/v2/x/feeabs/keeper" + feeabsante "github.com/notional-labs/fee-abstraction/v3/x/feeabs/ante" + feeabskeeper "github.com/notional-labs/fee-abstraction/v3/x/feeabs/keeper" ) // HandlerOptions extends the SDK's AnteHandler options by requiring the IBC diff --git a/app/app.go b/app/app.go index 01773070..7e889ab3 100644 --- a/app/app.go +++ b/app/app.go @@ -9,6 +9,7 @@ import ( "path/filepath" "sort" + "cosmossdk.io/simapp" "github.com/CosmWasm/wasmd/x/wasm" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" @@ -19,14 +20,12 @@ import ( "github.com/cosmos/cosmos-sdk/server/api" "github.com/cosmos/cosmos-sdk/server/config" servertypes "github.com/cosmos/cosmos-sdk/server/types" - "github.com/cosmos/cosmos-sdk/simapp" store "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" "github.com/cosmos/cosmos-sdk/version" "github.com/cosmos/cosmos-sdk/x/auth" "github.com/cosmos/cosmos-sdk/x/auth/ante" - authrest "github.com/cosmos/cosmos-sdk/x/auth/client/rest" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" authsims "github.com/cosmos/cosmos-sdk/x/auth/simulation" authtx "github.com/cosmos/cosmos-sdk/x/auth/tx" @@ -46,7 +45,7 @@ import ( crisiskeeper "github.com/cosmos/cosmos-sdk/x/crisis/keeper" crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types" distr "github.com/cosmos/cosmos-sdk/x/distribution" - distrclient "github.com/cosmos/cosmos-sdk/x/distribution/client" + // distrclient "github.com/cosmos/cosmos-sdk/x/distribution/client" distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper" distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" "github.com/cosmos/cosmos-sdk/x/evidence" @@ -78,43 +77,42 @@ import ( upgradeclient "github.com/cosmos/cosmos-sdk/x/upgrade/client" upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" - ica "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts" - icacontrollerkeeper "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/controller/keeper" - icacontrollertypes "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/controller/types" - icahost "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/host" - icahostkeeper "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/host/keeper" - icahosttypes "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/host/types" - icatypes "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/types" - "github.com/cosmos/ibc-go/v4/modules/apps/transfer" - ibctransferkeeper "github.com/cosmos/ibc-go/v4/modules/apps/transfer/keeper" - ibctransfertypes "github.com/cosmos/ibc-go/v4/modules/apps/transfer/types" - ibc "github.com/cosmos/ibc-go/v4/modules/core" - ibcclient "github.com/cosmos/ibc-go/v4/modules/core/02-client" - ibcclientclient "github.com/cosmos/ibc-go/v4/modules/core/02-client/client" - ibcclienttypes "github.com/cosmos/ibc-go/v4/modules/core/02-client/types" - porttypes "github.com/cosmos/ibc-go/v4/modules/core/05-port/types" - ibchost "github.com/cosmos/ibc-go/v4/modules/core/24-host" - ibckeeper "github.com/cosmos/ibc-go/v4/modules/core/keeper" - + ica "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts" + icacontrollerkeeper "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/keeper" + icacontrollertypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/types" + icahost "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host" + icahostkeeper "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/keeper" + icahosttypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/types" + icatypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/types" + "github.com/cosmos/ibc-go/v7/modules/apps/transfer" + ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" + ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + ibc "github.com/cosmos/ibc-go/v7/modules/core" + ibcclient "github.com/cosmos/ibc-go/v7/modules/core/02-client" + ibcclientclient "github.com/cosmos/ibc-go/v7/modules/core/02-client/client" + ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" + ibchost "github.com/cosmos/ibc-go/v7/modules/core/24-host" + ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" + + dbm "github.com/cometbft/cometbft-db" + abci "github.com/cometbft/cometbft/abci/types" + tmjson "github.com/cometbft/cometbft/libs/json" + "github.com/cometbft/cometbft/libs/log" + tmos "github.com/cometbft/cometbft/libs/os" "github.com/gorilla/mux" - "github.com/gravity-devs/liquidity/x/liquidity" "github.com/rakyll/statik/fs" "github.com/spf13/cast" - abci "github.com/tendermint/tendermint/abci/types" - tmjson "github.com/tendermint/tendermint/libs/json" - "github.com/tendermint/tendermint/libs/log" - tmos "github.com/tendermint/tendermint/libs/os" - dbm "github.com/tendermint/tm-db" - feeabsmodule "github.com/notional-labs/fee-abstraction/v2/x/feeabs" - feeabskeeper "github.com/notional-labs/fee-abstraction/v2/x/feeabs/keeper" - feeabstypes "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" + feeabsmodule "github.com/notional-labs/fee-abstraction/v3/x/feeabs" + feeabskeeper "github.com/notional-labs/fee-abstraction/v3/x/feeabs/keeper" + feeabstypes "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" - "github.com/strangelove-ventures/packet-forward-middleware/v4/router" - routerkeeper "github.com/strangelove-ventures/packet-forward-middleware/v4/router/keeper" - routertypes "github.com/strangelove-ventures/packet-forward-middleware/v4/router/types" + "github.com/strangelove-ventures/packet-forward-middleware/v7/router" + routerkeeper "github.com/strangelove-ventures/packet-forward-middleware/v7/router/keeper" + routertypes "github.com/strangelove-ventures/packet-forward-middleware/v7/router/types" - appparams "github.com/notional-labs/fee-abstraction/v2/app/params" + appparams "github.com/notional-labs/fee-abstraction/v3/app/params" // unnamed import of statik for swagger UI support _ "github.com/cosmos/cosmos-sdk/client/docs/statik" @@ -156,7 +154,6 @@ var ( evidence.AppModuleBasic{}, transfer.AppModuleBasic{}, vesting.AppModuleBasic{}, - liquidity.AppModuleBasic{}, router.AppModuleBasic{}, ica.AppModuleBasic{}, wasm.AppModuleBasic{}, diff --git a/app/encoding.go b/app/encoding.go index 363ec541..b8a18ba4 100644 --- a/app/encoding.go +++ b/app/encoding.go @@ -1,7 +1,7 @@ package app import ( - "github.com/notional-labs/fee-abstraction/v2/app/params" + "github.com/notional-labs/fee-abstraction/v3/app/params" "github.com/cosmos/cosmos-sdk/std" ) diff --git a/app/export.go b/app/export.go index 25a040d0..3148fca3 100644 --- a/app/export.go +++ b/app/export.go @@ -4,7 +4,7 @@ import ( "encoding/json" "log" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" servertypes "github.com/cosmos/cosmos-sdk/server/types" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/app/helpers/test_helpers.go b/app/helpers/test_helpers.go index f30d64bd..295f700e 100644 --- a/app/helpers/test_helpers.go +++ b/app/helpers/test_helpers.go @@ -6,18 +6,18 @@ import ( "testing" "time" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" + dbm "github.com/cometbft/cometbft-db" + abci "github.com/cometbft/cometbft/abci/types" + "github.com/cometbft/cometbft/libs/log" + tmrand "github.com/cometbft/cometbft/libs/rand" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" + tmtypes "github.com/cometbft/cometbft/types" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" - "github.com/tendermint/tendermint/libs/log" - tmrand "github.com/tendermint/tendermint/libs/rand" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - tmtypes "github.com/tendermint/tendermint/types" - dbm "github.com/tendermint/tm-db" "github.com/CosmWasm/wasmd/x/wasm" sdk "github.com/cosmos/cosmos-sdk/types" - feeapp "github.com/notional-labs/fee-abstraction/v2/app" + feeapp "github.com/notional-labs/fee-abstraction/v3/app" ) // SimAppChainID hardcoded chainID for simulation diff --git a/app/sim_test.go b/app/sim_test.go index 9ca6fd0e..99ab19c1 100644 --- a/app/sim_test.go +++ b/app/sim_test.go @@ -6,18 +6,17 @@ import ( "os" "testing" - feeapp "github.com/notional-labs/fee-abstraction/v2/app" + feeapp "github.com/notional-labs/fee-abstraction/v3/app" - "github.com/notional-labs/fee-abstraction/v2/app/helpers" + dbm "github.com/cometbft/cometbft-db" + "github.com/cometbft/cometbft/libs/log" + "github.com/cometbft/cometbft/libs/rand" + "github.com/notional-labs/fee-abstraction/v3/app/helpers" "github.com/stretchr/testify/require" - "github.com/tendermint/tendermint/libs/log" - "github.com/tendermint/tendermint/libs/rand" - dbm "github.com/tendermint/tm-db" + "cosmossdk.io/simapp" "github.com/CosmWasm/wasmd/x/wasm" "github.com/cosmos/cosmos-sdk/baseapp" - "github.com/cosmos/cosmos-sdk/simapp" - "github.com/cosmos/cosmos-sdk/store" simulation2 "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/simulation" ) diff --git a/app/test_access.go b/app/test_access.go index f90a67b9..49a468ad 100644 --- a/app/test_access.go +++ b/app/test_access.go @@ -5,7 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/keeper" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/keeper" "github.com/CosmWasm/wasmd/app/params" @@ -13,8 +13,8 @@ import ( bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" - ibctransferkeeper "github.com/cosmos/ibc-go/v4/modules/apps/transfer/keeper" - ibckeeper "github.com/cosmos/ibc-go/v4/modules/core/keeper" + ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" + ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" ) diff --git a/app/test_helpers.go b/app/test_helpers.go index e45160da..85dd0e1f 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -10,29 +10,29 @@ import ( "testing" "time" + // "cosmossdk.io/simapp/helpers" + abci "github.com/cometbft/cometbft/abci/types" + "github.com/cometbft/cometbft/libs/log" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" - "github.com/cosmos/cosmos-sdk/simapp/helpers" "github.com/cosmos/cosmos-sdk/snapshots" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/errors" "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" "github.com/CosmWasm/wasmd/x/wasm" + dbm "github.com/cometbft/cometbft-db" + tmtypes "github.com/cometbft/cometbft/types" codectypes "github.com/cosmos/cosmos-sdk/codec/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - tmtypes "github.com/tendermint/tendermint/types" - dbm "github.com/tendermint/tm-db" ) // DefaultConsensusParams defines the default Tendermint consensus params used in diff --git a/cmd/feeappd/cmd/root.go b/cmd/feeappd/cmd/root.go index fd4730d4..79d8617a 100644 --- a/cmd/feeappd/cmd/root.go +++ b/cmd/feeappd/cmd/root.go @@ -6,6 +6,10 @@ import ( "os" "path/filepath" + tmcli "github.com/cometbft/cometbft/libs/cli" + "github.com/cometbft/cometbft/libs/log" + + dbm "github.com/cometbft/cometbft-db" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/config" @@ -24,20 +28,17 @@ import ( banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" "github.com/cosmos/cosmos-sdk/x/crisis" genutilcli "github.com/cosmos/cosmos-sdk/x/genutil/client/cli" - ibcclienttypes "github.com/cosmos/ibc-go/v4/modules/core/02-client/types" - ibcchanneltypes "github.com/cosmos/ibc-go/v4/modules/core/04-channel/types" + ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" "github.com/prometheus/client_golang/prometheus" "github.com/spf13/cast" "github.com/spf13/cobra" - tmcli "github.com/tendermint/tendermint/libs/cli" - "github.com/tendermint/tendermint/libs/log" - dbm "github.com/tendermint/tm-db" "github.com/CosmWasm/wasmd/x/wasm" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" - feeapp "github.com/notional-labs/fee-abstraction/v2/app" - "github.com/notional-labs/fee-abstraction/v2/app/params" + feeapp "github.com/notional-labs/fee-abstraction/v3/app" + "github.com/notional-labs/fee-abstraction/v3/app/params" ) // NewRootCmd creates a new root command for simd. It is called once in the diff --git a/cmd/feeappd/cmd/root_test.go b/cmd/feeappd/cmd/root_test.go index 960a1fb4..1748de32 100644 --- a/cmd/feeappd/cmd/root_test.go +++ b/cmd/feeappd/cmd/root_test.go @@ -6,8 +6,8 @@ import ( svrcmd "github.com/cosmos/cosmos-sdk/server/cmd" "github.com/stretchr/testify/require" - app "github.com/notional-labs/fee-abstraction/v2/app" - "github.com/notional-labs/fee-abstraction/v2/cmd/feeappd/cmd" + app "github.com/notional-labs/fee-abstraction/v3/app" + "github.com/notional-labs/fee-abstraction/v3/cmd/feeappd/cmd" ) func TestRootCmdConfig(t *testing.T) { diff --git a/cmd/feeappd/cmd/testnet.go b/cmd/feeappd/cmd/testnet.go index dd2fcb46..3a4e5f56 100644 --- a/cmd/feeappd/cmd/testnet.go +++ b/cmd/feeappd/cmd/testnet.go @@ -10,12 +10,12 @@ import ( "os" "path/filepath" + tmconfig "github.com/cometbft/cometbft/config" + tmos "github.com/cometbft/cometbft/libs/os" + tmrand "github.com/cometbft/cometbft/libs/rand" + "github.com/cometbft/cometbft/types" + tmtime "github.com/cometbft/cometbft/types/time" "github.com/spf13/cobra" - tmconfig "github.com/tendermint/tendermint/config" - tmos "github.com/tendermint/tendermint/libs/os" - tmrand "github.com/tendermint/tendermint/libs/rand" - "github.com/tendermint/tendermint/types" - tmtime "github.com/tendermint/tendermint/types/time" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" @@ -33,10 +33,10 @@ import ( "github.com/cosmos/cosmos-sdk/x/genutil" genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - ibcclienttypes "github.com/cosmos/ibc-go/v4/modules/core/02-client/types" - ibcchanneltypes "github.com/cosmos/ibc-go/v4/modules/core/04-channel/types" + ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - "github.com/notional-labs/fee-abstraction/v2/app/params" + "github.com/notional-labs/fee-abstraction/v3/app/params" ) var ( diff --git a/cmd/feeappd/main.go b/cmd/feeappd/main.go index c1794b36..3fd6481f 100644 --- a/cmd/feeappd/main.go +++ b/cmd/feeappd/main.go @@ -6,9 +6,9 @@ import ( "github.com/cosmos/cosmos-sdk/server" svrcmd "github.com/cosmos/cosmos-sdk/server/cmd" - app "github.com/notional-labs/fee-abstraction/v2/app" - "github.com/notional-labs/fee-abstraction/v2/app/params" - "github.com/notional-labs/fee-abstraction/v2/cmd/feeappd/cmd" + app "github.com/notional-labs/fee-abstraction/v3/app" + "github.com/notional-labs/fee-abstraction/v3/app/params" + "github.com/notional-labs/fee-abstraction/v3/cmd/feeappd/cmd" ) func main() { diff --git a/go.mod b/go.mod index 91a5bfb1..40e8b318 100644 --- a/go.mod +++ b/go.mod @@ -1,141 +1,180 @@ -module github.com/notional-labs/fee-abstraction/v2 +module github.com/notional-labs/fee-abstraction/v3 go 1.18 require ( - github.com/CosmWasm/wasmd v0.30.0 - github.com/CosmWasm/wasmvm v1.1.1 - github.com/cosmos/cosmos-sdk v0.45.13 - github.com/cosmos/gogoproto v1.4.3 - github.com/cosmos/ibc-go/v4 v4.3.0 - github.com/gogo/protobuf v1.3.3 - github.com/golang/protobuf v1.5.2 + cosmossdk.io/errors v1.0.0-beta.7 + cosmossdk.io/simapp v0.0.0-20230224204036-a6adb0821462 + github.com/CosmWasm/wasmd v0.40.0-rc.0 + github.com/CosmWasm/wasmvm v1.2.1 + github.com/cometbft/cometbft v0.37.0 + github.com/cometbft/cometbft-db v0.7.0 + github.com/cosmos/cosmos-sdk v0.47.0 + github.com/cosmos/gogoproto v1.4.6 + github.com/cosmos/ibc-go/v7 v7.0.0 + github.com/gogo/protobuf v1.3.2 + github.com/golang/protobuf v1.5.3 github.com/gorilla/mux v1.8.0 - github.com/gravity-devs/liquidity v1.5.3 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/prometheus/client_golang v1.14.0 github.com/rakyll/statik v0.1.7 github.com/spf13/cast v1.5.0 github.com/spf13/cobra v1.6.1 - github.com/strangelove-ventures/packet-forward-middleware/v4 v4.0.5 - github.com/stretchr/testify v1.8.1 - github.com/tendermint/tendermint v0.34.26 - github.com/tendermint/tm-db v0.6.7 - google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e - google.golang.org/grpc v1.50.1 + github.com/strangelove-ventures/packet-forward-middleware/v7 v7.0.0 + github.com/stretchr/testify v1.8.2 + google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 + google.golang.org/grpc v1.53.0 ) require ( - filippo.io/edwards25519 v1.0.0-rc.1 // indirect + cloud.google.com/go v0.110.0 // indirect + cloud.google.com/go/compute v1.18.0 // indirect + cloud.google.com/go/compute/metadata v0.2.3 // indirect + cloud.google.com/go/iam v0.12.0 // indirect + cloud.google.com/go/storage v1.29.0 // indirect + cosmossdk.io/api v0.3.1 // indirect + cosmossdk.io/core v0.5.1 // indirect + cosmossdk.io/depinject v1.0.0-alpha.3 // indirect + cosmossdk.io/math v1.0.0-rc.0 // indirect + cosmossdk.io/tools/rosetta v0.2.1 // indirect + filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.1 // indirect github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect - github.com/Workiva/go-datastructures v1.0.53 // indirect github.com/armon/go-metrics v0.4.1 // indirect + github.com/aws/aws-sdk-go v1.44.203 // indirect github.com/beorn7/perks v1.0.1 // indirect + github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect - github.com/btcsuite/btcd v0.22.2 // indirect + github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect + github.com/cenkalti/backoff/v4 v4.1.3 // indirect github.com/cespare/xxhash v1.1.0 // indirect - github.com/cespare/xxhash/v2 v2.1.2 // indirect - github.com/coinbase/rosetta-sdk-go v0.7.0 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/chzyer/readline v1.5.1 // indirect + github.com/cockroachdb/apd/v2 v2.0.2 // indirect + github.com/coinbase/rosetta-sdk-go/types v1.0.0 // indirect github.com/confio/ics23/go v0.9.0 // indirect github.com/cosmos/btcutil v1.0.5 // indirect - github.com/cosmos/cosmos-proto v1.0.0-alpha8 // indirect + github.com/cosmos/cosmos-proto v1.0.0-beta.2 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect - github.com/cosmos/gorocksdb v1.2.0 // indirect - github.com/cosmos/iavl v0.19.5 // indirect + github.com/cosmos/gogogateway v1.2.0 // indirect + github.com/cosmos/iavl v0.20.0 // indirect + github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab // indirect github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect - github.com/creachadair/taskgroup v0.3.2 // indirect + github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect + github.com/creachadair/taskgroup v0.4.2 // indirect github.com/danieljoos/wincred v1.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect github.com/dgraph-io/badger/v2 v2.2007.4 // indirect - github.com/dgraph-io/ristretto v0.1.0 // indirect + github.com/dgraph-io/ristretto v0.1.1 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect github.com/docker/distribution v2.8.1+incompatible // indirect - github.com/dustin/go-humanize v1.0.0 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect github.com/dvsekhvalnov/jose2go v1.5.0 // indirect - github.com/felixge/httpsnoop v1.0.1 // indirect + github.com/felixge/httpsnoop v1.0.2 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect - github.com/gin-gonic/gin v1.7.0 // indirect github.com/go-kit/kit v0.12.0 // indirect github.com/go-kit/log v0.2.1 // indirect - github.com/go-logfmt/logfmt v0.5.1 // indirect + github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect - github.com/gogo/gateway v1.1.0 // indirect - github.com/golang/glog v1.0.0 // indirect + github.com/gogo/googleapis v1.4.1 // indirect + github.com/golang/glog v1.1.0 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/mock v1.6.0 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/btree v1.1.2 // indirect + github.com/google/go-cmp v0.5.9 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/orderedcode v0.0.1 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect + github.com/googleapis/gax-go/v2 v2.7.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect github.com/gorilla/websocket v1.5.0 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.0.1 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect github.com/gtank/merlin v0.1.1 // indirect github.com/gtank/ristretto255 v0.1.2 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-getter v1.7.0 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect + github.com/hashicorp/go-safetemp v1.0.0 // indirect + github.com/hashicorp/go-version v1.6.0 // indirect github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect github.com/hashicorp/hcl v1.0.0 // indirect - github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 // indirect + github.com/hdevalence/ed25519consensus v0.1.0 // indirect + github.com/huandu/skiplist v1.2.0 // indirect github.com/iancoleman/orderedmap v0.2.0 // indirect - github.com/improbable-eng/grpc-web v0.14.1 // indirect - github.com/inconshreveable/mousetrap v1.0.1 // indirect + github.com/improbable-eng/grpc-web v0.15.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect - github.com/klauspost/compress v1.15.11 // indirect - github.com/lib/pq v1.10.6 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/compress v1.16.3 // indirect + github.com/lib/pq v1.10.7 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect - github.com/magiconair/properties v1.8.6 // indirect - github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.16 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect + github.com/magiconair/properties v1.8.7 // indirect + github.com/manifoldco/promptui v0.9.0 // indirect + github.com/mattn/go-isatty v0.0.17 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect github.com/minio/highwayhash v1.0.2 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mtibben/percent v0.2.1 // indirect - github.com/onsi/ginkgo v1.16.4 // indirect - github.com/onsi/gomega v1.18.1 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/pelletier/go-toml v1.9.5 // indirect - github.com/pelletier/go-toml/v2 v2.0.5 // indirect - github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect + github.com/pelletier/go-toml/v2 v2.0.6 // indirect + github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.3.0 // indirect - github.com/prometheus/common v0.37.0 // indirect - github.com/prometheus/procfs v0.8.0 // indirect + github.com/prometheus/common v0.40.0 // indirect + github.com/prometheus/procfs v0.9.0 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect - github.com/regen-network/cosmos-proto v0.3.1 // indirect - github.com/rs/cors v1.8.2 // indirect - github.com/rs/zerolog v1.27.0 // indirect + github.com/rs/cors v1.8.3 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect - github.com/spf13/afero v1.9.2 // indirect + github.com/spf13/afero v1.9.3 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/spf13/viper v1.14.0 // indirect - github.com/subosito/gotenv v1.4.1 // indirect - github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect + github.com/spf13/viper v1.15.0 // indirect + github.com/subosito/gotenv v1.4.2 // indirect + github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect + github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c // indirect github.com/tendermint/go-amino v0.16.0 // indirect - github.com/tidwall/btree v1.5.0 // indirect + github.com/tidwall/btree v1.6.0 // indirect + github.com/ulikunitz/xz v0.5.11 // indirect github.com/zondax/hid v0.9.1 // indirect github.com/zondax/ledger-go v0.14.1 // indirect - go.etcd.io/bbolt v1.3.6 // indirect - golang.org/x/crypto v0.5.0 // indirect - golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect - golang.org/x/net v0.5.0 // indirect - golang.org/x/sys v0.4.0 // indirect - golang.org/x/term v0.4.0 // indirect - golang.org/x/text v0.6.0 // indirect - google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8 // indirect + go.etcd.io/bbolt v1.3.7 // indirect + go.opencensus.io v0.24.0 // indirect + golang.org/x/crypto v0.7.0 // indirect + golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 // indirect + golang.org/x/net v0.8.0 // indirect + golang.org/x/oauth2 v0.5.0 // indirect + golang.org/x/sys v0.6.0 // indirect + golang.org/x/term v0.6.0 // indirect + golang.org/x/text v0.8.0 // indirect + golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect + google.golang.org/api v0.110.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/protobuf v1.29.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect nhooyr.io/websocket v1.8.6 // indirect + pgregory.net/rapid v0.5.5 // indirect + sigs.k8s.io/yaml v1.3.0 // indirect ) replace ( - github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 - github.com/tendermint/tendermint => github.com/informalsystems/tendermint v0.34.24 - google.golang.org/grpc => google.golang.org/grpc v1.33.2 + // use cosmos fork of keyring + github.com/99designs/keyring => github.com/cosmos/keyring v1.2.0 + github.com/cosmos/iavl => github.com/cosmos/iavl v0.20.0 + // use notional fork of packet forward middleware + github.com/strangelove-ventures/packet-forward-middleware/v7 => github.com/notional-labs/packet-forward-middleware/v7 v7.0.1 ) diff --git a/go.sum b/go.sum index f976fcb8..2c98e46b 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,4 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= @@ -16,56 +17,206 @@ cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHOb cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= +cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= +cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= +cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= +cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= +cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= +cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= +cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= +cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= +cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= +cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= +cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= +cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= +cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= +cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= +cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= +cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= +cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= +cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= +cloud.google.com/go/compute v1.18.0 h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY= +cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= +cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= +cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= +cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= +cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= +cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= +cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= +cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= +cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= +cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= +cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= +cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= +cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= +cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= +cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= +cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= +cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= +cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= +cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= +cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= +cloud.google.com/go/iam v0.12.0 h1:DRtTY29b75ciH6Ov1PHb4/iat2CLCvrOm40Q0a6DFpE= +cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= +cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= +cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= +cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/longrunning v0.3.0 h1:NjljC+FYPV3uh5/OwWT6pVU+doBqMg2x/rZlE+CamDs= +cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= +cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= +cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= +cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= +cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= +cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= +cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= +cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= +cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= +cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= +cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= +cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= +cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= +cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= +cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= +cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= +cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= +cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= +cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= +cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= +cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= +cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= +cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= +cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= +cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= +cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= +cloud.google.com/go/storage v1.29.0 h1:6weCgzRvMg7lzuUurI4697AqIRPU1SvzHhynwpW31jI= +cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= +cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= +cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= +cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= +cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= +cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= +cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= +cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= +cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= +cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= +cosmossdk.io/core v0.5.1/go.mod h1:KZtwHCLjcFuo0nmDc24Xy6CRNEL9Vl/MeimQ2aC7NLE= +cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= +cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= +cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= +cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= +cosmossdk.io/math v1.0.0-rc.0 h1:ml46ukocrAAoBpYKMidF0R2tQJ1Uxfns0yH8wqgMAFc= +cosmossdk.io/math v1.0.0-rc.0/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= +cosmossdk.io/simapp v0.0.0-20230224204036-a6adb0821462 h1:g8muUHnXL8vhld2Sjilyhb1UQObc+x9GVuDK43TYZns= +cosmossdk.io/simapp v0.0.0-20230224204036-a6adb0821462/go.mod h1:4Dd3NLoLYoN90kZ0uyHoTHzVVk9+J0v4HhZRBNTAq2c= +cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= +cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= -filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= +filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= -github.com/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o= -github.com/99designs/keyring v1.2.1/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= -github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= -github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= -github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= -github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= -github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= -github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= -github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= -github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= -github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= -github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= -github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= -github.com/CosmWasm/wasmd v0.30.0 h1:oUVz3TgO/+24JZQdoTOlOv+IK7N9hEa/s3M4eR9i4FQ= -github.com/CosmWasm/wasmd v0.30.0/go.mod h1:umLGeYyowAMMEdOYfDOf8jsDrQ75Qkm1+ogBXT/w01c= -github.com/CosmWasm/wasmvm v1.1.1 h1:0xtdrmmsP9fibe+x42WcMkp5aQ738BICgcH3FNVLzm4= -github.com/CosmWasm/wasmvm v1.1.1/go.mod h1:ei0xpvomwSdONsxDuONzV7bL1jSET1M8brEx0FCXc+A= +github.com/CosmWasm/wasmd v0.40.0-rc.0 h1:QhJzLSWQCjUjrEPO2dc61WgafnaxetuKZRBHUfKJR84= +github.com/CosmWasm/wasmd v0.40.0-rc.0/go.mod h1:9MispMuIWmjs6HlgRx+XPLfOD0y1k7iQx5KIE2cNGTc= +github.com/CosmWasm/wasmvm v1.2.1 h1:si0tRsRDdUShV0k51Wn6zRKlmj3/WWP9Yr4cLmDTf+8= +github.com/CosmWasm/wasmvm v1.2.1/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= -github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= @@ -73,26 +224,19 @@ github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/VictoriaMetrics/fastcache v1.5.7/go.mod h1:ptDBkNMQI4RtmVo8VS/XwRY6RoTu1dAWCbrk+6WsEM8= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/Workiva/go-datastructures v1.0.53 h1:J6Y/52yX10Xc5JjXmGtWoSSxs3mZnGSaq37xZZh7Yig= -github.com/Workiva/go-datastructures v1.0.53/go.mod h1:1yZL+zfsztete+ePzZz/Zb1/t5BnDuE2Ya2MMGhzP6A= -github.com/Zilliqa/gozilliqa-sdk v1.2.1-0.20201201074141-dd0ecada1be6/go.mod h1:eSYp2T6f0apnuW8TzhV3f6Aff2SE8Dwio++U4ha4yEM= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +github.com/alecthomas/participle/v2 v2.0.0-alpha7 h1:cK4vjj0VSgb3lN1nuKA5F7dw+1s1pWBe5bx7nNCnN+c= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= @@ -101,58 +245,70 @@ github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+ github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.203 h1:pcsP805b9acL3wUqa4JR2vg1k2wnItkDYNvfmcy6F+U= +github.com/aws/aws-sdk-go v1.44.203/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s= github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= -github.com/btcsuite/btcd v0.0.0-20190315201642-aa6e0f35703c/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94= -github.com/btcsuite/btcd v0.22.2 h1:vBZ+lGGd1XubpOWO67ITJpAEsICWhA0YzqkcpkgNBfo= -github.com/btcsuite/btcd v0.22.2/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= +github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= +github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= +github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM= +github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI= +github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04= +github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= -github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9/go.mod h1:1MxXX1Ux4x6mqPmjkUgTP1CdXIBXKX7T+Jk9Gxrmx+U= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= +github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= +github.com/cockroachdb/apd/v3 v3.1.0 h1:MK3Ow7LH0W8zkd5GMKA1PvS9qG3bWFI95WaVNfyZJ/w= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/coinbase/rosetta-sdk-go v0.7.0 h1:lmTO/JEpCvZgpbkOITL95rA80CPKb5CtMzLaqF2mCNg= -github.com/coinbase/rosetta-sdk-go v0.7.0/go.mod h1:7nD3oBPIiHqhRprqvMgPoGxe/nyq3yftRmpsy29coWE= +github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= +github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= +github.com/cometbft/cometbft v0.37.0 h1:M005vBaSaugvYYmNZwJOopynQSjwLoDTwflnQ/I/eYk= +github.com/cometbft/cometbft v0.37.0/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= +github.com/cometbft/cometbft-db v0.7.0 h1:uBjbrBx4QzU0zOEnU8KxoDl18dMNgDh+zZRUE0ucsbo= +github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= @@ -160,102 +316,106 @@ github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= -github.com/cosmos/cosmos-proto v1.0.0-alpha8 h1:d3pCRuMYYvGA5bM0ZbbjKn+AoQD4A7dyNG2wzwWalUw= -github.com/cosmos/cosmos-proto v1.0.0-alpha8/go.mod h1:6/p+Bc4O8JKeZqe0VqUGTX31eoYqemTT4C1hLCWsO7I= -github.com/cosmos/cosmos-sdk v0.45.13 h1:5eNcMBL5avM80I1Zs3uPE2Pm95O+l9iuZU/CoP9rmzc= -github.com/cosmos/cosmos-sdk v0.45.13/go.mod h1:tpDFgc98sgRcLLRiosBSyos8EZoDHv1xab9HPLGLQJ4= +github.com/cosmos/cosmos-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= +github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= +github.com/cosmos/cosmos-sdk v0.47.0 h1:GKYtBpvjwuDEVix1vdnQpq7PuEOnItuEK0vdAL2cZ5g= +github.com/cosmos/cosmos-sdk v0.47.0/go.mod h1:FTtZbqiHCZ2vun9WrPq6qLQafNKkAuIhLAxzLjr2TiI= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= -github.com/cosmos/gogoproto v1.4.3 h1:RP3yyVREh9snv/lsOvmsAPQt8f44LgL281X0IOIhhcI= -github.com/cosmos/gogoproto v1.4.3/go.mod h1:0hLIG5TR7IvV1fme1HCFKjfzW9X2x0Mo+RooWXCnOWU= -github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= -github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= -github.com/cosmos/iavl v0.19.5 h1:rGA3hOrgNxgRM5wYcSCxgQBap7fW82WZgY78V9po/iY= -github.com/cosmos/iavl v0.19.5/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= -github.com/cosmos/ibc-go/v4 v4.3.0 h1:yOzVsyZzsv4XPBux8gq+D0LhZn45yGWKjvT+6Vyo5no= -github.com/cosmos/ibc-go/v4 v4.3.0/go.mod h1:CcLvIoi9NNtIbNsxs4KjBGjYhlwqtsmXy1AKARKiMzQ= -github.com/cosmos/interchain-accounts v0.2.4 h1:7UrroFQsCRSp17980mk6anx4YteveIJVkU+a0wlsHQI= +github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= +github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= +github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= +github.com/cosmos/gogoproto v1.4.6 h1:Ee7z15dWJaGlgM2rWrK8N2IX7PQcuccu8oG68jp5RL4= +github.com/cosmos/gogoproto v1.4.6/go.mod h1:VS/ASYmPgv6zkPKLjR9EB91lwbLHOzaGCirmKKhncfI= +github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= +github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= +github.com/cosmos/ibc-go/v7 v7.0.0 h1:j4kyywlG0hhDmT9FmSaR5iCIka7Pz7kJTxGWY1nlV9Q= +github.com/cosmos/ibc-go/v7 v7.0.0/go.mod h1:BFh8nKWjr5zeR2OZfhkzdgDzj1+KjRn3aJLpwapStj8= +github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab h1:I9ialKTQo7248V827Bba4OuKPmk+FPzmTVHsLXaIJWw= +github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab/go.mod h1:2CwqasX5dSD7Hbp/9b6lhK6BwoBDCBldx7gPKRukR60= +github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= +github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= github.com/cosmos/ledger-cosmos-go v0.12.2 h1:/XYaBlE2BJxtvpkHiBm97gFGSGmYGKunKyF3nNqAXZA= github.com/cosmos/ledger-cosmos-go v0.12.2/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI= +github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= +github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creachadair/taskgroup v0.3.2 h1:zlfutDS+5XG40AOxcHDSThxKzns8Tnr9jnr6VqkYlkM= -github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= +github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= +github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/cucumber/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= +github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc= -github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= +github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= -github.com/dgraph-io/badger/v2 v2.2007.2/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgraph-io/ristretto v0.0.3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= -github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= +github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= +github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= -github.com/dop251/goja v0.0.0-20200721192441-a695b0cdd498/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= -github.com/dvyukov/go-fuzz v0.0.0-20200318091601-be3528f3a813/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/ethereum/go-ethereum v1.9.25/go.mod h1:vMkFiYLHI4tgPw4k2j4MHKoovchFE8plZ0M9VMk4/oM= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= -github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= -github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= +github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= +github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= -github.com/gin-gonic/gin v1.7.0 h1:jGB9xAJQ12AIGNB4HguylppmDK1Am9ppF7XnGXXJuoU= -github.com/gin-gonic/gin v1.7.0/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= +github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -264,25 +424,20 @@ github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= +github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= +github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= -github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE= -github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= -github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= +github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= @@ -292,25 +447,39 @@ github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gogo/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0= -github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= +github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= +github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= +github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= +github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= -github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= +github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -327,11 +496,11 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -347,17 +516,24 @@ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -370,13 +546,34 @@ github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= +github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= +github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= +github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= +github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= +github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= @@ -387,24 +584,17 @@ github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2z github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= -github.com/gravity-devs/liquidity v1.5.3 h1:QbMHk1q+dzlM76Zv3vxaHhq4lBdhaelB0g7NmLbsv2Q= -github.com/gravity-devs/liquidity v1.5.3/go.mod h1:ULtNk738lNb1Kh31larCNxZ7IK21TeKZmNzS/OkE0hw= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.0.1 h1:X2vfSnm1WC8HEo0MBHZg2TcuDUHJj6kd1TmEAQncnSA= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.0.1/go.mod h1:oVMjMN64nzEcepv1kdZKgx1qNYt4Ro0Gqefiq2JWdis= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= @@ -417,6 +607,10 @@ github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyN github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-getter v1.7.0 h1:bzrYP+qu/gMrL1au7/aDvkoOVGUJpeKBgbqRHACAFDY= +github.com/hashicorp/go-getter v1.7.0/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= @@ -424,16 +618,19 @@ github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iP github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= +github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= +github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= @@ -442,104 +639,91 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 h1:aSVUgRRRtOrZOC1fYmY9gV0e9z/Iu+xNVSASWjsuyGU= -github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3/go.mod h1:5PC6ZNPde8bBqU/ewGZig35+UIZtw9Ytxez8/q5ZyFE= -github.com/holiman/uint256 v1.1.1/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= +github.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= +github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c= +github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= +github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= +github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= -github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= github.com/iancoleman/orderedmap v0.2.0 h1:sq1N/TFpYH++aViPcaKjys3bDClUEU7s5B+z6jq8pNA= github.com/iancoleman/orderedmap v0.2.0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/improbable-eng/grpc-web v0.14.1 h1:NrN4PY71A6tAz2sKDvC5JCauENWp0ykG8Oq1H3cpFvw= -github.com/improbable-eng/grpc-web v0.14.1/go.mod h1:zEjGHa8DAlkoOXmswrNvhUGEYQA9UI7DhrGeHR1DMGU= +github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= +github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/informalsystems/tendermint v0.34.24 h1:2beNEg5tp+U5oj/Md+0xDBsMHGbdue31T3OrstS6xS0= -github.com/informalsystems/tendermint v0.34.24/go.mod h1:rXVrl4OYzmIa1I91av3iLv2HS0fGSiucyW9J4aMTpKI= -github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jhump/protoreflect v1.13.1-0.20220928232736-101791cb1b4c h1:XImQJfpJLmGEEd8ll5yPVyL/aEvmgGHW4WYTyNseLOM= +github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b h1:izTof8BKh/nE1wrKOrloNA5q4odOarjf+Xpe+4qow98= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.15.11 h1:Lcadnb3RKGin4FYM/orgq0qde+nc15E5Cbqg4B9Sx9c= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= +github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs= -github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= +github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77/go.mod h1:5ELEyG+X8f+meRWHuqUOewBOhvHkl7M76pdGEansxW4= +github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= -github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= +github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= +github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= -github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 h1:QRUSJEgZn2Snx0EmT/QLXibWjSUDjKWvXIT19NBVp94= @@ -548,13 +732,15 @@ github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= +github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -570,8 +756,6 @@ github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRW github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= -github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= -github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= @@ -579,32 +763,28 @@ github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzE github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/neilotoole/errgroup v0.1.5/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/notional-labs/packet-forward-middleware/v7 v7.0.1 h1:HG5uY0G3BNprePzG047N7V1TFLxVyq89VSKnyRghTcM= +github.com/notional-labs/packet-forward-middleware/v7 v7.0.1/go.mod h1:ixg45X2kEtfjrSgZOQMuahY9VmXa1S3ZtO2amHA1ilU= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= -github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= +github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= +github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= @@ -619,23 +799,18 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= -github.com/otiai10/copy v1.6.0 h1:IinKAryFFuPONZ7cm6T6E2QX/vcJwSnlaA5lfoaXIiQ= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= -github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.0.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwbMiyQg= -github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= +github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= +github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= -github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= +github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d h1:htwtWgtQo8YS6JFWWi2DNgY0RwSGJ1ruMoxY6CUUclk= +github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -653,8 +828,6 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -665,50 +838,35 @@ github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6T github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= -github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/common v0.40.0 h1:Afz7EVRqGg2Mqqf4JuF9vdvp1pi220m55Pi9T2JnO4Q= +github.com/prometheus/common v0.40.0/go.mod h1:L65ZJPSmfn/UBWLQIHV7dBrKFidB/wPlF1y5TlSt9OE= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= -github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= -github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= +github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzywPxOvwMdxcg= -github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNwWejXC7QqCOnH3O0+YM= -github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= -github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= -github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= +github.com/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= -github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= -github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= -github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.27.0 h1:1T7qCieN22GVc8S4Q2yuexzBb1EqjbgjSH9RohbMjKs= -github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= +github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= +github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -717,8 +875,6 @@ github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0 github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= -github.com/shirou/gopsutil v2.20.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -733,8 +889,8 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.9.2 h1:j49Hj62F0n+DaZ1dDCvhABaPNSGNkt32oRFxI33IEMw= -github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= +github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk= +github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= @@ -750,13 +906,8 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.14.0 h1:Rg7d3Lo706X9tHsJMUjdiwMpHB7W8WnSVOssIY+JElU= -github.com/spf13/viper v1.14.0/go.mod h1:WT//axPky3FdvXHzGw33dNdXXXfFQqmEalje+egj8As= -github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= -github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw= -github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= -github.com/strangelove-ventures/packet-forward-middleware/v4 v4.0.5 h1:KKUqeGhVBK38+1LwThC8IeIcsJZ6COX5kvhiJroFqCM= -github.com/strangelove-ventures/packet-forward-middleware/v4 v4.0.5/go.mod h1:4zAtg449/JISRmf+sbmqolqSLP+QJBh+EtWkWtt/AKE= +github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU= +github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= @@ -772,54 +923,48 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs= -github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= -github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= -github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= +github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= +github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= +github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= +github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= +github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= +github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= -github.com/tendermint/tm-db v0.6.7 h1:fE00Cbl0jayAoqlExN6oyQJ7fR/ZtoVOmvPJ//+shu8= -github.com/tendermint/tm-db v0.6.7/go.mod h1:byQDzFkZV1syXr/ReXS808NxA2xvyuuVgXOJ/088L6I= -github.com/tidwall/btree v1.5.0 h1:iV0yVY/frd7r6qGBXfEYs7DH0gTDgrKTrDjS7xt/IyQ= -github.com/tidwall/btree v1.5.0/go.mod h1:LGm8L/DZjPLmeWGjv5kFrY8dL4uVhMmzmmLYmsObdKE= -github.com/tidwall/gjson v1.6.7/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI= -github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= -github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/tidwall/sjson v1.1.4/go.mod h1:wXpKXu8CtDjKAZ+3DrKY5ROCorDFahq8l0tey/Lx1fg= -github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= +github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= +github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= -github.com/tyler-smith/go-bip39 v1.0.2/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= +github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/vmihailenco/msgpack/v5 v5.1.4/go.mod h1:C5gboKD0TJPqWDTVTtrQNfRbiBwHZGo8UTqP/9/XvLI= -github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= -github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/ybbus/jsonrpc v2.1.2+incompatible/go.mod h1:XJrh1eMSzdIYFbM08flv0wp5G35eRniyeGut1z+LSiE= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo= github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= github.com/zondax/ledger-go v0.14.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c= github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= -go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= +go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= +go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= @@ -829,6 +974,10 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= @@ -837,31 +986,25 @@ go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+ go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= -golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= +golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= @@ -870,10 +1013,11 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= -golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= +golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 h1:LGJsf5LRplCck6jUCH3dBL2dmycNruWNF5xugkSlfXw= +golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -884,23 +1028,23 @@ golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRu golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mobile v0.0.0-20200801112145-973feb4309de/go.mod h1:skQtrUTUwhdJvXM/2KKJzY8pDgNr9I/FOMqDVRPBUS4= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191209134235-331c550502dd/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0 h1:b9gGHsz9/HhJ3HF5DHQytPpuwocVTChQJK3AvoLRD5I= -golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -933,21 +1077,33 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= -golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -957,8 +1113,24 @@ golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= +golang.org/x/oauth2 v0.5.0 h1:HuArIo48skDwlrvM3sEdHXElYslAMsf3KwRkkW4MC4s= +golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -969,7 +1141,12 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1011,43 +1188,65 @@ golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= -golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.4.0 h1:O7UWfv5+A2qiuulQk30kVinPoMtoIPeVaKLEgLpVkvg= -golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1057,13 +1256,18 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= -golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -1088,7 +1292,6 @@ golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1109,7 +1312,6 @@ golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -1118,11 +1320,22 @@ golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.2.0 h1:G6AHpWxTMGY1KyEYoAQ5WTtIekUUvDNjan3ugu60JvE= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= @@ -1143,12 +1356,45 @@ google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz513 google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= +google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= +google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= +google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= +google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= +google.golang.org/api v0.110.0 h1:l+rh0KYUooe9JGbGVx71tbFo4SMbMTXK3I3ia2QSEeU= +google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= @@ -1172,7 +1418,6 @@ google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200324203455-a04cca1dde73/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= @@ -1185,19 +1430,126 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e h1:S9GbmC1iCgvbLyAokVCwiO6tVIrU9Y7c5oMx1V/ki/Y= -google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= +google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= +google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 h1:EfLuoKW5WfkgVdDy7dTK8qSbH37AX5mj/MFh+bGPz14= +google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= +google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1210,26 +1562,27 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8 h1:KR8+MyP7/qOlV+8Af01LtjL04bu7on42eVsxT4EyBQk= -google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.29.1 h1:7QBf+IK2gx70Ap/hDsOmam3GE0v9HicjfEdAxE62UoM= +google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= -gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -1245,7 +1598,9 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= +gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1255,8 +1610,12 @@ honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= +pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/proto/feeabstraction/absfee/v1beta1/epoch.proto b/proto/feeabstraction/absfee/v1beta1/epoch.proto index bf45c67d..ed3d6bb6 100644 --- a/proto/feeabstraction/absfee/v1beta1/epoch.proto +++ b/proto/feeabstraction/absfee/v1beta1/epoch.proto @@ -5,7 +5,7 @@ import "gogoproto/gogo.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; -option go_package = "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types"; +option go_package = "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types"; message EpochInfo { // identifier is a unique reference to this particular timer. diff --git a/proto/feeabstraction/absfee/v1beta1/feepool.proto b/proto/feeabstraction/absfee/v1beta1/feepool.proto index 8dad7b9d..100816d4 100644 --- a/proto/feeabstraction/absfee/v1beta1/feepool.proto +++ b/proto/feeabstraction/absfee/v1beta1/feepool.proto @@ -6,4 +6,4 @@ import "google/api/annotations.proto"; import "cosmos/base/query/v1beta1/pagination.proto"; import "feeabstraction/absfee/v1beta1/params.proto"; -option go_package = "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types"; +option go_package = "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types"; diff --git a/proto/feeabstraction/absfee/v1beta1/genesis.proto b/proto/feeabstraction/absfee/v1beta1/genesis.proto index d42c843c..36a0c1d9 100644 --- a/proto/feeabstraction/absfee/v1beta1/genesis.proto +++ b/proto/feeabstraction/absfee/v1beta1/genesis.proto @@ -7,7 +7,7 @@ import "cosmos/base/query/v1beta1/pagination.proto"; import "feeabstraction/absfee/v1beta1/params.proto"; import "feeabstraction/absfee/v1beta1/epoch.proto"; -option go_package = "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types"; +option go_package = "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types"; // Params defines the parameters for the feeabs module. message GenesisState { diff --git a/proto/feeabstraction/absfee/v1beta1/osmosisibc.proto b/proto/feeabstraction/absfee/v1beta1/osmosisibc.proto index a6250b40..45b3d3d4 100644 --- a/proto/feeabstraction/absfee/v1beta1/osmosisibc.proto +++ b/proto/feeabstraction/absfee/v1beta1/osmosisibc.proto @@ -6,7 +6,7 @@ import "google/protobuf/timestamp.proto"; import "google/api/annotations.proto"; import "tendermint/abci/types.proto"; -option go_package = "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types"; +option go_package = "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types"; message QueryArithmeticTwapToNowRequest { uint64 pool_id = 1; diff --git a/proto/feeabstraction/absfee/v1beta1/params.proto b/proto/feeabstraction/absfee/v1beta1/params.proto index 0816aa8b..6f600fdb 100644 --- a/proto/feeabstraction/absfee/v1beta1/params.proto +++ b/proto/feeabstraction/absfee/v1beta1/params.proto @@ -6,7 +6,7 @@ import "google/api/annotations.proto"; import "cosmos/base/query/v1beta1/pagination.proto"; import "google/protobuf/duration.proto"; -option go_package = "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types"; +option go_package = "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types"; // Params defines the parameters for the feeabs module. message Params { diff --git a/proto/feeabstraction/absfee/v1beta1/proposal.proto b/proto/feeabstraction/absfee/v1beta1/proposal.proto index becacaa0..680a25e5 100644 --- a/proto/feeabstraction/absfee/v1beta1/proposal.proto +++ b/proto/feeabstraction/absfee/v1beta1/proposal.proto @@ -5,7 +5,7 @@ import "gogoproto/gogo.proto"; import "google/protobuf/timestamp.proto"; import "google/api/annotations.proto"; -option go_package = "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types"; +option go_package = "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types"; message HostChainFeeAbsConfig { // ibc token is allowed to be used as fee token diff --git a/proto/feeabstraction/absfee/v1beta1/query.proto b/proto/feeabstraction/absfee/v1beta1/query.proto index f2678104..d4ad525c 100644 --- a/proto/feeabstraction/absfee/v1beta1/query.proto +++ b/proto/feeabstraction/absfee/v1beta1/query.proto @@ -8,7 +8,7 @@ import "feeabstraction/absfee/v1beta1/osmosisibc.proto"; import "feeabstraction/absfee/v1beta1/proposal.proto"; import "cosmos/base/v1beta1/coin.proto"; -option go_package = "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types"; +option go_package = "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types"; // Query defines the gRPC querier service. service Query { diff --git a/proto/feeabstraction/absfee/v1beta1/tx.proto b/proto/feeabstraction/absfee/v1beta1/tx.proto index a326f44f..10203b91 100644 --- a/proto/feeabstraction/absfee/v1beta1/tx.proto +++ b/proto/feeabstraction/absfee/v1beta1/tx.proto @@ -9,7 +9,7 @@ import "feeabstraction/absfee/v1beta1/epoch.proto"; import "cosmos/base/v1beta1/coin.proto"; import "google/protobuf/timestamp.proto"; -option go_package = "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types"; +option go_package = "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types"; // Msg is the cosmos.group.v1 Msg service. service Msg { diff --git a/tests/interchaintest/go.mod b/tests/interchaintest/go.mod index 9f1202b3..baf3c1cc 100644 --- a/tests/interchaintest/go.mod +++ b/tests/interchaintest/go.mod @@ -1,200 +1,200 @@ -module github.com/notional-labs/fee-abstraction/tests/interchaintest +// module github.com/notional-labs/fee-abstraction/tests/interchaintest -go 1.19 +// go 1.19 -require ( - github.com/cosmos/cosmos-proto v1.0.0-beta.2 - github.com/cosmos/cosmos-sdk v0.45.14 - github.com/cosmos/ibc-go/v4 v4.3.0 - github.com/gogo/protobuf v1.3.3 - github.com/golang/protobuf v1.5.2 - github.com/grpc-ecosystem/grpc-gateway v1.16.0 - github.com/notional-labs/fee-abstraction/v2 v2.0.1 - github.com/strangelove-ventures/interchaintest/v4 v4.0.0-20230331040355-5d08aab13017 - github.com/stretchr/testify v1.8.2 - go.uber.org/zap v1.23.0 - google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa - google.golang.org/grpc v1.53.0 -) +// require ( +// github.com/cosmos/cosmos-proto v1.0.0-beta.2 +// github.com/cosmos/cosmos-sdk v0.45.14 +// github.com/cosmos/ibc-go/v4 v4.3.0 +// github.com/gogo/protobuf v1.3.3 +// github.com/golang/protobuf v1.5.2 +// github.com/grpc-ecosystem/grpc-gateway v1.16.0 +// github.com/notional-labs/fee-abstraction/v2 v2.0.1 +// github.com/strangelove-ventures/interchaintest/v4 v4.0.0-20230331040355-5d08aab13017 +// github.com/stretchr/testify v1.8.2 +// go.uber.org/zap v1.23.0 +// google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa +// google.golang.org/grpc v1.53.0 +// ) -require ( - filippo.io/edwards25519 v1.0.0-rc.1 // indirect - github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect - github.com/99designs/keyring v1.2.1 // indirect - github.com/BurntSushi/toml v1.2.1 // indirect - github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect - github.com/ChainSafe/go-schnorrkel/1 v0.0.0-00010101000000-000000000000 // indirect - github.com/CosmWasm/wasmd v0.31.0 // indirect - github.com/CosmWasm/wasmvm v1.2.1 // indirect - github.com/Microsoft/go-winio v0.6.0 // indirect - github.com/StirlingMarketingGroup/go-namecase v1.0.0 // indirect - github.com/armon/go-metrics v0.4.1 // indirect - github.com/avast/retry-go/v4 v4.0.4 // indirect - github.com/benbjohnson/clock v1.3.0 // indirect - github.com/beorn7/perks v1.0.1 // indirect - github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect - github.com/btcsuite/btcd v0.23.0 // indirect - github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect - github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.4 // indirect - github.com/cespare/xxhash v1.1.0 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/confio/ics23/go v0.9.0 // indirect - github.com/cosmos/btcutil v1.0.5 // indirect - github.com/cosmos/go-bip39 v1.0.0 // indirect - github.com/cosmos/gogoproto v1.4.6 // indirect - github.com/cosmos/gorocksdb v1.2.0 // indirect - github.com/cosmos/iavl v0.19.5 // indirect - github.com/cosmos/interchain-security v1.0.0 // indirect - github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect - github.com/danieljoos/wincred v1.1.2 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/deckarep/golang-set v1.8.0 // indirect - github.com/decred/base58 v1.0.3 // indirect - github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect - github.com/dgraph-io/badger/v3 v3.2103.2 // indirect - github.com/dgraph-io/ristretto v0.1.0 // indirect - github.com/docker/distribution v2.8.1+incompatible // indirect - github.com/docker/docker v20.10.19+incompatible // indirect - github.com/docker/go-connections v0.4.0 // indirect - github.com/docker/go-units v0.5.0 // indirect - github.com/dustin/go-humanize v1.0.1-0.20200219035652-afde56e7acac // indirect - github.com/dvsekhvalnov/jose2go v1.5.0 // indirect - github.com/ethereum/go-ethereum v1.10.17 // indirect - github.com/felixge/httpsnoop v1.0.2 // indirect - github.com/fsnotify/fsnotify v1.6.0 // indirect - github.com/go-kit/kit v0.12.0 // indirect - github.com/go-kit/log v0.2.1 // indirect - github.com/go-logfmt/logfmt v0.5.1 // indirect - github.com/go-stack/stack v1.8.1 // indirect - github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect - github.com/gogo/gateway v1.1.0 // indirect - github.com/golang/glog v1.0.0 // indirect - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/snappy v0.0.4 // indirect - github.com/google/btree v1.1.2 // indirect - github.com/google/flatbuffers v1.12.1 // indirect - github.com/google/go-cmp v0.5.9 // indirect - github.com/google/uuid v1.3.0 // indirect - github.com/gorilla/handlers v1.5.1 // indirect - github.com/gorilla/mux v1.8.0 // indirect - github.com/gorilla/websocket v1.5.0 // indirect - github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect - github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect - github.com/gtank/merlin v0.1.1 // indirect - github.com/gtank/ristretto255 v0.1.2 // indirect - github.com/hashicorp/go-immutable-radix v1.3.1 // indirect - github.com/hashicorp/go-version v1.6.0 // indirect - github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect - github.com/hashicorp/hcl v1.0.0 // indirect - github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 // indirect - github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 // indirect - github.com/inconshreveable/mousetrap v1.0.1 // indirect - github.com/ipfs/go-cid v0.0.7 // indirect - github.com/jmhodges/levigo v1.0.0 // indirect - github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect - github.com/klauspost/compress v1.15.11 // indirect - github.com/klauspost/cpuid/v2 v2.0.9 // indirect - github.com/libp2p/go-buffer-pool v0.1.0 // indirect - github.com/libp2p/go-libp2p-core v0.15.1 // indirect - github.com/libp2p/go-openssl v0.0.7 // indirect - github.com/magiconair/properties v1.8.7 // indirect - github.com/mattn/go-isatty v0.0.16 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect - github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect - github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 // indirect - github.com/minio/sha256-simd v1.0.0 // indirect - github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/mr-tron/base58 v1.2.0 // indirect - github.com/mtibben/percent v0.2.1 // indirect - github.com/multiformats/go-base32 v0.0.3 // indirect - github.com/multiformats/go-base36 v0.1.0 // indirect - github.com/multiformats/go-multiaddr v0.4.1 // indirect - github.com/multiformats/go-multibase v0.0.3 // indirect - github.com/multiformats/go-multicodec v0.4.1 // indirect - github.com/multiformats/go-multihash v0.1.0 // indirect - github.com/multiformats/go-varint v0.0.6 // indirect - github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.1.0-rc2 // indirect - github.com/pelletier/go-toml/v2 v2.0.6 // indirect - github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect - github.com/pierrec/xxHash v0.1.5 // indirect - github.com/pkg/errors v0.9.1 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_golang v1.14.0 // indirect - github.com/prometheus/client_model v0.3.0 // indirect - github.com/prometheus/common v0.37.0 // indirect - github.com/prometheus/procfs v0.8.0 // indirect - github.com/rakyll/statik v0.1.7 // indirect - github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect - github.com/regen-network/cosmos-proto v0.3.1 // indirect - github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect - github.com/rs/cors v1.8.2 // indirect - github.com/sasha-s/go-deadlock v0.3.1 // indirect - github.com/sirupsen/logrus v1.9.0 // indirect - github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect - github.com/spaolacci/murmur3 v1.1.0 // indirect - github.com/spf13/afero v1.9.3 // indirect - github.com/spf13/cast v1.5.0 // indirect - github.com/spf13/cobra v1.6.1 // indirect - github.com/spf13/jwalterweatherman v1.1.0 // indirect - github.com/spf13/pflag v1.0.5 // indirect - github.com/spf13/viper v1.15.0 // indirect - github.com/subosito/gotenv v1.4.2 // indirect - github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a // indirect - github.com/tendermint/go-amino v0.16.0 // indirect - github.com/tendermint/tendermint v0.34.26 // indirect - github.com/tendermint/tm-db v0.6.8-0.20220506192307-f628bb5dc95b // indirect - github.com/tidwall/btree v1.5.0 // indirect - github.com/vedhavyas/go-subkey v1.0.3 // indirect - github.com/zondax/hid v0.9.1 // indirect - github.com/zondax/ledger-go v0.14.1 // indirect - go.etcd.io/bbolt v1.3.6 // indirect - go.opencensus.io v0.24.0 // indirect - go.uber.org/atomic v1.10.0 // indirect - go.uber.org/multierr v1.8.0 // indirect - golang.org/x/crypto v0.5.0 // indirect - golang.org/x/exp v0.0.0-20230131160201-f062dba9d201 // indirect - golang.org/x/mod v0.8.0 // indirect - golang.org/x/net v0.7.0 // indirect - golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.5.0 // indirect - golang.org/x/term v0.5.0 // indirect - golang.org/x/text v0.7.0 // indirect - golang.org/x/tools v0.6.0 // indirect - google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8 // indirect - gopkg.in/ini.v1 v1.67.0 // indirect - gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect - lukechampine.com/blake3 v1.1.6 // indirect - lukechampine.com/uint128 v1.1.1 // indirect - modernc.org/cc/v3 v3.36.0 // indirect - modernc.org/ccgo/v3 v3.16.6 // indirect - modernc.org/libc v1.16.7 // indirect - modernc.org/mathutil v1.4.1 // indirect - modernc.org/memory v1.1.1 // indirect - modernc.org/opt v0.1.1 // indirect - modernc.org/sqlite v1.17.3 // indirect - modernc.org/strutil v1.1.1 // indirect - modernc.org/token v1.0.0 // indirect -) +// require ( +// filippo.io/edwards25519 v1.0.0-rc.1 // indirect +// github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect +// github.com/99designs/keyring v1.2.1 // indirect +// github.com/BurntSushi/toml v1.2.1 // indirect +// github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect +// github.com/ChainSafe/go-schnorrkel/1 v0.0.0-00010101000000-000000000000 // indirect +// github.com/CosmWasm/wasmd v0.31.0 // indirect +// github.com/CosmWasm/wasmvm v1.2.1 // indirect +// github.com/Microsoft/go-winio v0.6.0 // indirect +// github.com/StirlingMarketingGroup/go-namecase v1.0.0 // indirect +// github.com/armon/go-metrics v0.4.1 // indirect +// github.com/avast/retry-go/v4 v4.0.4 // indirect +// github.com/benbjohnson/clock v1.3.0 // indirect +// github.com/beorn7/perks v1.0.1 // indirect +// github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect +// github.com/btcsuite/btcd v0.23.0 // indirect +// github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect +// github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.4 // indirect +// github.com/cespare/xxhash v1.1.0 // indirect +// github.com/cespare/xxhash/v2 v2.2.0 // indirect +// github.com/confio/ics23/go v0.9.0 // indirect +// github.com/cosmos/btcutil v1.0.5 // indirect +// github.com/cosmos/go-bip39 v1.0.0 // indirect +// github.com/cosmos/gogoproto v1.4.6 // indirect +// github.com/cosmos/gorocksdb v1.2.0 // indirect +// github.com/cosmos/iavl v0.19.5 // indirect +// github.com/cosmos/interchain-security v1.0.0 // indirect +// github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect +// github.com/danieljoos/wincred v1.1.2 // indirect +// github.com/davecgh/go-spew v1.1.1 // indirect +// github.com/deckarep/golang-set v1.8.0 // indirect +// github.com/decred/base58 v1.0.3 // indirect +// github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect +// github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0 // indirect +// github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect +// github.com/dgraph-io/badger/v3 v3.2103.2 // indirect +// github.com/dgraph-io/ristretto v0.1.0 // indirect +// github.com/docker/distribution v2.8.1+incompatible // indirect +// github.com/docker/docker v20.10.19+incompatible // indirect +// github.com/docker/go-connections v0.4.0 // indirect +// github.com/docker/go-units v0.5.0 // indirect +// github.com/dustin/go-humanize v1.0.1-0.20200219035652-afde56e7acac // indirect +// github.com/dvsekhvalnov/jose2go v1.5.0 // indirect +// github.com/ethereum/go-ethereum v1.10.17 // indirect +// github.com/felixge/httpsnoop v1.0.2 // indirect +// github.com/fsnotify/fsnotify v1.6.0 // indirect +// github.com/go-kit/kit v0.12.0 // indirect +// github.com/go-kit/log v0.2.1 // indirect +// github.com/go-logfmt/logfmt v0.5.1 // indirect +// github.com/go-stack/stack v1.8.1 // indirect +// github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect +// github.com/gogo/gateway v1.1.0 // indirect +// github.com/golang/glog v1.0.0 // indirect +// github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect +// github.com/golang/snappy v0.0.4 // indirect +// github.com/google/btree v1.1.2 // indirect +// github.com/google/flatbuffers v1.12.1 // indirect +// github.com/google/go-cmp v0.5.9 // indirect +// github.com/google/uuid v1.3.0 // indirect +// github.com/gorilla/handlers v1.5.1 // indirect +// github.com/gorilla/mux v1.8.0 // indirect +// github.com/gorilla/websocket v1.5.0 // indirect +// github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect +// github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect +// github.com/gtank/merlin v0.1.1 // indirect +// github.com/gtank/ristretto255 v0.1.2 // indirect +// github.com/hashicorp/go-immutable-radix v1.3.1 // indirect +// github.com/hashicorp/go-version v1.6.0 // indirect +// github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect +// github.com/hashicorp/hcl v1.0.0 // indirect +// github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 // indirect +// github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 // indirect +// github.com/inconshreveable/mousetrap v1.0.1 // indirect +// github.com/ipfs/go-cid v0.0.7 // indirect +// github.com/jmhodges/levigo v1.0.0 // indirect +// github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect +// github.com/klauspost/compress v1.15.11 // indirect +// github.com/klauspost/cpuid/v2 v2.0.9 // indirect +// github.com/libp2p/go-buffer-pool v0.1.0 // indirect +// github.com/libp2p/go-libp2p-core v0.15.1 // indirect +// github.com/libp2p/go-openssl v0.0.7 // indirect +// github.com/magiconair/properties v1.8.7 // indirect +// github.com/mattn/go-isatty v0.0.16 // indirect +// github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect +// github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect +// github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 // indirect +// github.com/minio/sha256-simd v1.0.0 // indirect +// github.com/mitchellh/mapstructure v1.5.0 // indirect +// github.com/mr-tron/base58 v1.2.0 // indirect +// github.com/mtibben/percent v0.2.1 // indirect +// github.com/multiformats/go-base32 v0.0.3 // indirect +// github.com/multiformats/go-base36 v0.1.0 // indirect +// github.com/multiformats/go-multiaddr v0.4.1 // indirect +// github.com/multiformats/go-multibase v0.0.3 // indirect +// github.com/multiformats/go-multicodec v0.4.1 // indirect +// github.com/multiformats/go-multihash v0.1.0 // indirect +// github.com/multiformats/go-varint v0.0.6 // indirect +// github.com/opencontainers/go-digest v1.0.0 // indirect +// github.com/opencontainers/image-spec v1.1.0-rc2 // indirect +// github.com/pelletier/go-toml/v2 v2.0.6 // indirect +// github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect +// github.com/pierrec/xxHash v0.1.5 // indirect +// github.com/pkg/errors v0.9.1 // indirect +// github.com/pmezard/go-difflib v1.0.0 // indirect +// github.com/prometheus/client_golang v1.14.0 // indirect +// github.com/prometheus/client_model v0.3.0 // indirect +// github.com/prometheus/common v0.37.0 // indirect +// github.com/prometheus/procfs v0.8.0 // indirect +// github.com/rakyll/statik v0.1.7 // indirect +// github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect +// github.com/regen-network/cosmos-proto v0.3.1 // indirect +// github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect +// github.com/rs/cors v1.8.2 // indirect +// github.com/sasha-s/go-deadlock v0.3.1 // indirect +// github.com/sirupsen/logrus v1.9.0 // indirect +// github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect +// github.com/spaolacci/murmur3 v1.1.0 // indirect +// github.com/spf13/afero v1.9.3 // indirect +// github.com/spf13/cast v1.5.0 // indirect +// github.com/spf13/cobra v1.6.1 // indirect +// github.com/spf13/jwalterweatherman v1.1.0 // indirect +// github.com/spf13/pflag v1.0.5 // indirect +// github.com/spf13/viper v1.15.0 // indirect +// github.com/subosito/gotenv v1.4.2 // indirect +// github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a // indirect +// github.com/tendermint/go-amino v0.16.0 // indirect +// github.com/tendermint/tendermint v0.34.26 // indirect +// github.com/tendermint/tm-db v0.6.8-0.20220506192307-f628bb5dc95b // indirect +// github.com/tidwall/btree v1.5.0 // indirect +// github.com/vedhavyas/go-subkey v1.0.3 // indirect +// github.com/zondax/hid v0.9.1 // indirect +// github.com/zondax/ledger-go v0.14.1 // indirect +// go.etcd.io/bbolt v1.3.6 // indirect +// go.opencensus.io v0.24.0 // indirect +// go.uber.org/atomic v1.10.0 // indirect +// go.uber.org/multierr v1.8.0 // indirect +// golang.org/x/crypto v0.5.0 // indirect +// golang.org/x/exp v0.0.0-20230131160201-f062dba9d201 // indirect +// golang.org/x/mod v0.8.0 // indirect +// golang.org/x/net v0.7.0 // indirect +// golang.org/x/sync v0.1.0 // indirect +// golang.org/x/sys v0.5.0 // indirect +// golang.org/x/term v0.5.0 // indirect +// golang.org/x/text v0.7.0 // indirect +// golang.org/x/tools v0.6.0 // indirect +// google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8 // indirect +// gopkg.in/ini.v1 v1.67.0 // indirect +// gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect +// gopkg.in/yaml.v2 v2.4.0 // indirect +// gopkg.in/yaml.v3 v3.0.1 // indirect +// lukechampine.com/blake3 v1.1.6 // indirect +// lukechampine.com/uint128 v1.1.1 // indirect +// modernc.org/cc/v3 v3.36.0 // indirect +// modernc.org/ccgo/v3 v3.16.6 // indirect +// modernc.org/libc v1.16.7 // indirect +// modernc.org/mathutil v1.4.1 // indirect +// modernc.org/memory v1.1.1 // indirect +// modernc.org/opt v0.1.1 // indirect +// modernc.org/sqlite v1.17.3 // indirect +// modernc.org/strutil v1.1.1 // indirect +// modernc.org/token v1.0.0 // indirect +// ) -replace ( - github.com/ChainSafe/go-schnorrkel => github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d - github.com/ChainSafe/go-schnorrkel/1 => github.com/ChainSafe/go-schnorrkel v1.0.0 - github.com/btcsuite/btcd => github.com/btcsuite/btcd v0.22.2 //indirect +// replace ( +// github.com/ChainSafe/go-schnorrkel => github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d +// github.com/ChainSafe/go-schnorrkel/1 => github.com/ChainSafe/go-schnorrkel v1.0.0 +// github.com/btcsuite/btcd => github.com/btcsuite/btcd v0.22.2 //indirect - // interchaintest supports ICS features so we need this for now - github.com/cosmos/cosmos-sdk => github.com/cosmos/cosmos-sdk v0.45.13-ics - github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 - // For this nested module, you always want to replace the parent reference with the current worktree. - github.com/notional-labs/fee-abstraction => ../../ - github.com/strangelove-ventures/interchaintest/v4 => github.com/notional-labs/interchaintest/v4 v4.0.1-0.20230426092153-0a643db3c6b2 +// // interchaintest supports ICS features so we need this for now +// github.com/cosmos/cosmos-sdk => github.com/cosmos/cosmos-sdk v0.45.13-ics +// github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 +// // For this nested module, you always want to replace the parent reference with the current worktree. +// github.com/notional-labs/fee-abstraction => ../../ +// github.com/strangelove-ventures/interchaintest/v4 => github.com/notional-labs/interchaintest/v4 v4.0.1-0.20230426092153-0a643db3c6b2 - // use informal system fork of tendermint - github.com/tendermint/tendermint => github.com/informalsystems/tendermint v0.34.26 +// // use informal system fork of tendermint +// github.com/tendermint/tendermint => github.com/informalsystems/tendermint v0.34.26 - github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 -) +// github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 +// ) diff --git a/tests/interchaintest/go.sum b/tests/interchaintest/go.sum deleted file mode 100644 index 42820948..00000000 --- a/tests/interchaintest/go.sum +++ /dev/null @@ -1,1303 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= -filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= -github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= -github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= -github.com/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o= -github.com/99designs/keyring v1.2.1/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= -github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM= -github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= -github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= -github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM= -github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= -github.com/CosmWasm/wasmd v0.31.0 h1:xACf6A/SkCeGWQWrKGsR4X9PQb5G4XYuNfnrl+HQ1mE= -github.com/CosmWasm/wasmd v0.31.0/go.mod h1:VcyDGk/ISVlMUeW+1GGL0zdHWBS2FPwLEV2qZ86l7l8= -github.com/CosmWasm/wasmvm v1.2.1 h1:si0tRsRDdUShV0k51Wn6zRKlmj3/WWP9Yr4cLmDTf+8= -github.com/CosmWasm/wasmvm v1.2.1/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= -github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= -github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= -github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= -github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/StirlingMarketingGroup/go-namecase v1.0.0 h1:2CzaNtCzc4iNHirR+5ru9OzGg8rQp860gqLBFqRI02Y= -github.com/StirlingMarketingGroup/go-namecase v1.0.0/go.mod h1:ZsoSKcafcAzuBx+sndbxHu/RjDcDTrEdT4UvhniHfio= -github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= -github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= -github.com/Workiva/go-datastructures v1.0.53 h1:J6Y/52yX10Xc5JjXmGtWoSSxs3mZnGSaq37xZZh7Yig= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= -github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= -github.com/avast/retry-go/v4 v4.0.4 h1:38hLf0DsRXh+hOF6HbTni0+5QGTNdw9zbaMD7KAO830= -github.com/avast/retry-go/v4 v4.0.4/go.mod h1:HqmLvS2VLdStPCGDFjSuZ9pzlTqVRldCI4w2dO4m1Ms= -github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= -github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= -github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2/go.mod h1:3hGg3PpiEjHnrkrlasTfxFqUsZ2GCk/fMUn4CbKgSkM= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2/go.mod h1:45MfaXZ0cNbeuT0KQ1XJylq8A6+OpVV2E5kvY/Kq+u8= -github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7NkwbjlijluLsrIbu/iyl35RO4= -github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= -github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= -github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= -github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= -github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s= -github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= -github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= -github.com/btcsuite/btcd v0.22.2 h1:vBZ+lGGd1XubpOWO67ITJpAEsICWhA0YzqkcpkgNBfo= -github.com/btcsuite/btcd v0.22.2/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= -github.com/btcsuite/btcd/btcec/v2 v2.1.2/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= -github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= -github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= -github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= -github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= -github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.4 h1:G2kCJurlIkguX0oxxI9sPPENuQqMVhIhV9RVkh/dpDg= -github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.4/go.mod h1:5g1oM4Zu3BOaLpsKQ+O8PAv2kNuq+kPcA1VzFbsSqxE= -github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= -github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/coinbase/rosetta-sdk-go v0.7.9 h1:lqllBjMnazTjIqYrOGv8h8jxjg9+hJazIGZr9ZvoCcA= -github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= -github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= -github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= -github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= -github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= -github.com/cosmos/cosmos-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= -github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= -github.com/cosmos/cosmos-sdk v0.45.13-ics h1:EuBiwr9UO/s+dcjCXrrmwrZPowEhBYguIdMcr5fH3dg= -github.com/cosmos/cosmos-sdk v0.45.13-ics/go.mod h1:tpDFgc98sgRcLLRiosBSyos8EZoDHv1xab9HPLGLQJ4= -github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= -github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= -github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= -github.com/cosmos/gogoproto v1.4.6 h1:Ee7z15dWJaGlgM2rWrK8N2IX7PQcuccu8oG68jp5RL4= -github.com/cosmos/gogoproto v1.4.6/go.mod h1:VS/ASYmPgv6zkPKLjR9EB91lwbLHOzaGCirmKKhncfI= -github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= -github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= -github.com/cosmos/iavl v0.19.5 h1:rGA3hOrgNxgRM5wYcSCxgQBap7fW82WZgY78V9po/iY= -github.com/cosmos/iavl v0.19.5/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= -github.com/cosmos/ibc-go/v4 v4.3.0 h1:yOzVsyZzsv4XPBux8gq+D0LhZn45yGWKjvT+6Vyo5no= -github.com/cosmos/ibc-go/v4 v4.3.0/go.mod h1:CcLvIoi9NNtIbNsxs4KjBGjYhlwqtsmXy1AKARKiMzQ= -github.com/cosmos/interchain-security v1.0.0 h1:xNQjjigqH3mzEKSGQhAhKy8I0TA8XR2z5rRTxRBKK3o= -github.com/cosmos/interchain-security v1.0.0/go.mod h1:J9SbXUJT1GSe+mZy+MDCxtuAfbhwCKBEJRYnfjXsE8Q= -github.com/cosmos/ledger-cosmos-go v0.12.2 h1:/XYaBlE2BJxtvpkHiBm97gFGSGmYGKunKyF3nNqAXZA= -github.com/cosmos/ledger-cosmos-go v0.12.2/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creachadair/taskgroup v0.3.2 h1:zlfutDS+5XG40AOxcHDSThxKzns8Tnr9jnr6VqkYlkM= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= -github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= -github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= -github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4= -github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= -github.com/decred/base58 v1.0.3 h1:KGZuh8d1WEMIrK0leQRM47W85KqCAdl2N+uagbctdDI= -github.com/decred/base58 v1.0.3/go.mod h1:pXP9cXCfM2sFLb2viz2FNIdeMWmZDBKG3ZBYbiSM78E= -github.com/decred/dcrd/chaincfg/chainhash v1.0.2 h1:rt5Vlq/jM3ZawwiacWjPa+smINyLRN07EO0cNBV6DGU= -github.com/decred/dcrd/chaincfg/chainhash v1.0.2/go.mod h1:BpbrGgrPTr3YJYRN3Bm+D9NuaFd+zGyNeIKgrhCXK60= -github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= -github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= -github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0 h1:3GIJYXQDAKpLEFriGFN8SbSffak10UXHGdIcFaMPykY= -github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0/go.mod h1:3s92l0paYkZoIHuj4X93Teg/HB7eGM9x/zokGw+u4mY= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= -github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= -github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= -github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= -github.com/dgraph-io/badger/v3 v3.2103.2 h1:dpyM5eCJAtQCBcMCZcT4UBZchuTJgCywerHHgmxfxM8= -github.com/dgraph-io/badger/v3 v3.2103.2/go.mod h1:RHo4/GmYcKKh5Lxu63wLEMHJ70Pac2JqZRYGhlyAo2M= -github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= -github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= -github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= -github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= -github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.19+incompatible h1:lzEmjivyNHFHMNAFLXORMBXyGIhw/UP4DvJwvyKYq64= -github.com/docker/docker v20.10.19+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= -github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= -github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.1-0.20200219035652-afde56e7acac h1:opbrjaN/L8gg6Xh5D04Tem+8xVcz6ajZlGCs49mQgyg= -github.com/dustin/go-humanize v1.0.1-0.20200219035652-afde56e7acac/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= -github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= -github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/ethereum/go-ethereum v1.10.17 h1:XEcumY+qSr1cZQaWsQs5Kck3FHB0V2RiMHPdTBJ+oT8= -github.com/ethereum/go-ethereum v1.10.17/go.mod h1:Lt5WzjM07XlXc95YzrhosmR4J9Ahd6X2wyEV2SvGhk0= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= -github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= -github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= -github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= -github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= -github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= -github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= -github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= -github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= -github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= -github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= -github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= -github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= -github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= -github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= -github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= -github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gogo/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0= -github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= -github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= -github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= -github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= -github.com/google/flatbuffers v1.12.1 h1:MVlul7pQNoDzWRLTw5imwYsl+usrS1TXG2H4jg6ImGw= -github.com/google/flatbuffers v1.12.1/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= -github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= -github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= -github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= -github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= -github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= -github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= -github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= -github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= -github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= -github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= -github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= -github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= -github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= -github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= -github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= -github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 h1:aSVUgRRRtOrZOC1fYmY9gV0e9z/Iu+xNVSASWjsuyGU= -github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3/go.mod h1:5PC6ZNPde8bBqU/ewGZig35+UIZtw9Ytxez8/q5ZyFE= -github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= -github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huin/goupnp v1.0.3-0.20220313090229-ca81a64b4204/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= -github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 h1:H+uM0Bv88eur3ZSsd2NGKg3YIiuXxwxtlN7HjE66UTU= -github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845/go.mod h1:c1tRKs5Tx7E2+uHGSyyncziFjvGpgv4H2HrqXeUQ/Uk= -github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= -github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= -github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= -github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= -github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= -github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= -github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= -github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= -github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= -github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= -github.com/informalsystems/tendermint v0.34.26 h1:89XvVexAy62geGWxmDmdmmJvfindx+Su2oTuwfSWMeU= -github.com/informalsystems/tendermint v0.34.26/go.mod h1:q3uAZ/t5+MblQhFuHSd4flqaLDx7iUtWpwWbwvHAFhs= -github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= -github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= -github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= -github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= -github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.15.11 h1:Lcadnb3RKGin4FYM/orgq0qde+nc15E5Cbqg4B9Sx9c= -github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= -github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= -github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= -github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= -github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs= -github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= -github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= -github.com/libp2p/go-libp2p-core v0.15.1 h1:0RY+Mi/ARK9DgG1g9xVQLb8dDaaU8tCePMtGALEfBnM= -github.com/libp2p/go-libp2p-core v0.15.1/go.mod h1:agSaboYM4hzB1cWekgVReqV5M4g5M+2eNNejV+1EEhs= -github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= -github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= -github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-sqlite3 v1.14.12 h1:TJ1bhYJPV44phC+IMu1u2K/i5RriLTPe+yc68XDJ1Z0= -github.com/mattn/go-sqlite3 v1.14.12/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= -github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 h1:QRUSJEgZn2Snx0EmT/QLXibWjSUDjKWvXIT19NBVp94= -github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= -github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= -github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= -github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae h1:O4SWKdcHVCvYqyDV+9CJA1fcDN2L11Bule0iFy3YlAI= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= -github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= -github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= -github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.4.1 h1:Pq37uLx3hsyNlTDir7FZyU8+cFCTqd5y1KiM2IzOutI= -github.com/multiformats/go-multiaddr v0.4.1/go.mod h1:3afI9HfVW8csiF8UZqtpYRiDyew8pRX7qLIGHu9FLuM= -github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multicodec v0.4.1 h1:BSJbf+zpghcZMZrwTYBGwy0CPcVZGWiC72Cp8bBd4R4= -github.com/multiformats/go-multicodec v0.4.1/go.mod h1:1Hj/eHRaVWSXiSNNfcEPcwZleTmdNP81xlxDLnWU9GQ= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.1.0 h1:CgAgwqk3//SVEw3T+6DqI4mWMyRuDwZtOWcJT0q9+EA= -github.com/multiformats/go-multihash v0.1.0/go.mod h1:RJlXsxt6vHGaia+S8We0ErjhojtKzPP2AH4+kYM7k84= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= -github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/notional-labs/fee-abstraction/v2 v2.0.1 h1:w++wIzSIoMQk5scVGud96ZLU6IJLlectE13dN6eX9AY= -github.com/notional-labs/fee-abstraction/v2 v2.0.1/go.mod h1:6xlQD2XVfVxYc6xJ9AGFkIE4b/b+cGbs3/D0jHhRyXw= -github.com/notional-labs/interchaintest/v4 v4.0.1-0.20230426092153-0a643db3c6b2 h1:+kAuQXIy2/fHAmMtF2kQOdsrufusbrzQP6jx82S3tKY= -github.com/notional-labs/interchaintest/v4 v4.0.1-0.20230426092153-0a643db3c6b2/go.mod h1:Na9KNE38VWqOKMSTpbIzXCICDkazn+6kFf4BG0ublCk= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= -github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= -github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= -github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= -github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/otiai10/copy v1.6.0 h1:IinKAryFFuPONZ7cm6T6E2QX/vcJwSnlaA5lfoaXIiQ= -github.com/oxyno-zeta/gomock-extra-matcher v1.1.0 h1:Yyk5ov0ZPKBXtVEeIWtc4J2XVrHuNoIK+0F2BUJgtsc= -github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= -github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= -github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= -github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= -github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= -github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= -github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pierrec/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo= -github.com/pierrec/xxHash v0.1.5/go.mod h1:w2waW5Zoa/Wc4Yqe0wgrIYAGKqRMf7czn2HNKXmuL+I= -github.com/pierrre/gotestcover v0.0.0-20160517101806-924dca7d15f0/go.mod h1:4xpMLz7RBWyB+ElzHu8Llua96TRCB3YwX+l5EP1wmHk= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= -github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= -github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= -github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= -github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= -github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= -github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= -github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= -github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzywPxOvwMdxcg= -github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNwWejXC7QqCOnH3O0+YM= -github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= -github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= -github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk= -github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= -github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= -github.com/robertkrimen/godocdown v0.0.0-20130622164427-0bfa04905481/go.mod h1:C9WhFzY47SzYBIvzFqSvHIR6ROgDo4TtdTuRaOMjF/s= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= -github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= -github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/zerolog v1.27.0 h1:1T7qCieN22GVc8S4Q2yuexzBb1EqjbgjSH9RohbMjKs= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= -github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= -github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= -github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk= -github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= -github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= -github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU= -github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= -github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= -github.com/strangelove-ventures/go-subkey v1.0.7 h1:cOP/Lajg3uxV/tvspu0m6+0Cu+DJgygkEAbx/s+f35I= -github.com/strangelove-ventures/go-subkey v1.0.7/go.mod h1:E34izOIEm+sZ1YmYawYRquqBQWeZBjVB4pF7bMuhc1c= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= -github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= -github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= -github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a h1:1ur3QoCqvE5fl+nylMaIr9PVV1w343YRDtsy+Rwu7XI= -github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= -github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= -github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= -github.com/tendermint/tm-db v0.6.8-0.20220506192307-f628bb5dc95b h1:Y3ZPG6gdDCAV2sdGkD759ji/09GzaNu1X3qKTmZIbTo= -github.com/tendermint/tm-db v0.6.8-0.20220506192307-f628bb5dc95b/go.mod h1:ADqbS9NOSnBRK9R2RtYC61CdsHmVMD/yXAzcMuPexbU= -github.com/tidwall/btree v1.5.0 h1:iV0yVY/frd7r6qGBXfEYs7DH0gTDgrKTrDjS7xt/IyQ= -github.com/tidwall/btree v1.5.0/go.mod h1:LGm8L/DZjPLmeWGjv5kFrY8dL4uVhMmzmmLYmsObdKE= -github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= -github.com/tklauser/go-sysconf v0.3.5 h1:uu3Xl4nkLzQfXNsWn15rPc/HQCJKObbt1dKJeWp3vU4= -github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= -github.com/tklauser/numcpus v0.2.2 h1:oyhllyrScuYI6g+h/zUvNXNp1wy7x8qQy3t/piefldA= -github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= -github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= -github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo= -github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= -github.com/zondax/ledger-go v0.14.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c= -github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= -go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= -go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= -go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= -go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= -go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= -golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= -golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20230131160201-f062dba9d201 h1:BEABXpNXLEz0WxtA+6CQIz2xkg80e+1zrhWyMcq8VzE= -golang.org/x/exp v0.0.0-20230131160201-f062dba9d201/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211107104306-e0b2ad06fe42/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.1.0 h1:xYY+Bajn2a7VBmTM5GikTmnK8ZuX8YgnQCqZpbBNtmA= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200108203644-89082a384178/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= -golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= -gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200108215221-bd8f9a0ef82f/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200324203455-a04cca1dde73/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa h1:qQPhfbPO23fwm/9lQr91L1u62Zo6cm+zI+slZT+uf+o= -google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= -google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8 h1:KR8+MyP7/qOlV+8Af01LtjL04bu7on42eVsxT4EyBQk= -google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= -gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= -gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -lukechampine.com/blake3 v1.1.6 h1:H3cROdztr7RCfoaTpGZFQsrqvweFLrqS73j7L7cmR5c= -lukechampine.com/blake3 v1.1.6/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= -lukechampine.com/uint128 v1.1.1 h1:pnxCASz787iMf+02ssImqk6OLt+Z5QHMoZyUXR4z6JU= -lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= -modernc.org/cc/v3 v3.36.0 h1:0kmRkTmqNidmu3c7BNDSdVHCxXCkWLmWmCIVX4LUboo= -modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= -modernc.org/ccgo/v3 v3.0.0-20220428102840-41399a37e894/go.mod h1:eI31LL8EwEBKPpNpA4bU1/i+sKOwOrQy8D87zWUcRZc= -modernc.org/ccgo/v3 v3.0.0-20220430103911-bc99d88307be/go.mod h1:bwdAnOoaIt8Ax9YdWGjxWsdkPcZyRPHqrOvJxaKAKGw= -modernc.org/ccgo/v3 v3.16.4/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= -modernc.org/ccgo/v3 v3.16.6 h1:3l18poV+iUemQ98O3X5OMr97LOqlzis+ytivU4NqGhA= -modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= -modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk= -modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= -modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM= -modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= -modernc.org/libc v0.0.0-20220428101251-2d5f3daf273b/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= -modernc.org/libc v1.16.0/go.mod h1:N4LD6DBE9cf+Dzf9buBlzVJndKr/iJHG97vGLHYnb5A= -modernc.org/libc v1.16.1/go.mod h1:JjJE0eu4yeK7tab2n4S1w8tlWd9MxXLRzheaRnAKymU= -modernc.org/libc v1.16.7 h1:qzQtHhsZNpVPpeCu+aMIQldXeV1P0vRhSqCL0nOIJOA= -modernc.org/libc v1.16.7/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU= -modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/mathutil v1.4.1 h1:ij3fYGe8zBF4Vu+g0oT7mB06r8sqGWKuJu1yXeR4by8= -modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/memory v1.1.1 h1:bDOL0DIDLQv7bWhP3gMvIrnoFw+Eo6F7a2QK9HPDiFU= -modernc.org/memory v1.1.1/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= -modernc.org/opt v0.1.1 h1:/0RX92k9vwVeDXj+Xn23DKp2VJubL7k8qNffND6qn3A= -modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= -modernc.org/sqlite v1.17.3 h1:iE+coC5g17LtByDYDWKpR6m2Z9022YrSh3bumwOnIrI= -modernc.org/sqlite v1.17.3/go.mod h1:10hPVYar9C0kfXuTWGz8s0XtB8uAGymUy51ZzStYe3k= -modernc.org/strutil v1.1.1 h1:xv+J1BXY3Opl2ALrBwyfEikFAj8pmqcpnfmuwUwcozs= -modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= -modernc.org/tcl v1.13.1 h1:npxzTwFTZYM8ghWicVIX1cRWzj7Nd8i6AqqX2p+IYao= -modernc.org/tcl v1.13.1/go.mod h1:XOLfOwzhkljL4itZkK6T72ckMgvj0BDsnKNdZVUOecw= -modernc.org/token v1.0.0 h1:a0jaWiNMDhDUtqOj09wvjWWAqd3q7WpBulmL9H2egsk= -modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= -modernc.org/z v1.5.1 h1:RTNHdsrOpeoSeOF4FbzTo8gBYByaJ5xT7NgZ9ZqRiJM= -modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8= -nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/tests/interchaintest/osmosistypes/gamm/balancer/tx.pb.go b/tests/interchaintest/osmosistypes/gamm/balancer/tx.pb.go deleted file mode 100644 index 4429aebe..00000000 --- a/tests/interchaintest/osmosistypes/gamm/balancer/tx.pb.go +++ /dev/null @@ -1,1352 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: osmosis/gamm/pool-models/balancer/tx/tx.proto - -package balancer - -import ( - context "context" - fmt "fmt" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" - _ "github.com/gogo/protobuf/types" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - 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" - time "time" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf -var _ = time.Kitchen - -// 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 - -// ===================== MsgCreatePool -type MsgCreateBalancerPool struct { - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` - PoolParams *PoolParams `protobuf:"bytes,2,opt,name=pool_params,json=poolParams,proto3" json:"pool_params,omitempty" yaml:"pool_params"` - PoolAssets []PoolAsset `protobuf:"bytes,3,rep,name=pool_assets,json=poolAssets,proto3" json:"pool_assets"` - FuturePoolGovernor string `protobuf:"bytes,4,opt,name=future_pool_governor,json=futurePoolGovernor,proto3" json:"future_pool_governor,omitempty" yaml:"future_pool_governor"` -} - -func (m *MsgCreateBalancerPool) Reset() { *m = MsgCreateBalancerPool{} } -func (m *MsgCreateBalancerPool) String() string { return proto.CompactTextString(m) } -func (*MsgCreateBalancerPool) ProtoMessage() {} -func (*MsgCreateBalancerPool) Descriptor() ([]byte, []int) { - return fileDescriptor_0647ee155de97433, []int{0} -} -func (m *MsgCreateBalancerPool) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgCreateBalancerPool) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgCreateBalancerPool.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 *MsgCreateBalancerPool) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgCreateBalancerPool.Merge(m, src) -} -func (m *MsgCreateBalancerPool) XXX_Size() int { - return m.Size() -} -func (m *MsgCreateBalancerPool) XXX_DiscardUnknown() { - xxx_messageInfo_MsgCreateBalancerPool.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgCreateBalancerPool proto.InternalMessageInfo - -func (m *MsgCreateBalancerPool) GetSender() string { - if m != nil { - return m.Sender - } - return "" -} - -func (m *MsgCreateBalancerPool) GetPoolParams() *PoolParams { - if m != nil { - return m.PoolParams - } - return nil -} - -func (m *MsgCreateBalancerPool) GetPoolAssets() []PoolAsset { - if m != nil { - return m.PoolAssets - } - return nil -} - -func (m *MsgCreateBalancerPool) GetFuturePoolGovernor() string { - if m != nil { - return m.FuturePoolGovernor - } - return "" -} - -// Returns the poolID -type MsgCreateBalancerPoolResponse struct { - PoolID uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` -} - -func (m *MsgCreateBalancerPoolResponse) Reset() { *m = MsgCreateBalancerPoolResponse{} } -func (m *MsgCreateBalancerPoolResponse) String() string { return proto.CompactTextString(m) } -func (*MsgCreateBalancerPoolResponse) ProtoMessage() {} -func (*MsgCreateBalancerPoolResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0647ee155de97433, []int{1} -} -func (m *MsgCreateBalancerPoolResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgCreateBalancerPoolResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgCreateBalancerPoolResponse.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 *MsgCreateBalancerPoolResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgCreateBalancerPoolResponse.Merge(m, src) -} -func (m *MsgCreateBalancerPoolResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgCreateBalancerPoolResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgCreateBalancerPoolResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgCreateBalancerPoolResponse proto.InternalMessageInfo - -func (m *MsgCreateBalancerPoolResponse) GetPoolID() uint64 { - if m != nil { - return m.PoolID - } - return 0 -} - -// ===================== MsgMigrateSharesToFullRangeConcentratedPosition -type MsgMigrateSharesToFullRangeConcentratedPosition struct { - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` - SharesToMigrate types.Coin `protobuf:"bytes,2,opt,name=shares_to_migrate,json=sharesToMigrate,proto3" json:"shares_to_migrate" yaml:"shares_to_migrate"` -} - -func (m *MsgMigrateSharesToFullRangeConcentratedPosition) Reset() { - *m = MsgMigrateSharesToFullRangeConcentratedPosition{} -} -func (m *MsgMigrateSharesToFullRangeConcentratedPosition) String() string { - return proto.CompactTextString(m) -} -func (*MsgMigrateSharesToFullRangeConcentratedPosition) ProtoMessage() {} -func (*MsgMigrateSharesToFullRangeConcentratedPosition) Descriptor() ([]byte, []int) { - return fileDescriptor_0647ee155de97433, []int{2} -} -func (m *MsgMigrateSharesToFullRangeConcentratedPosition) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgMigrateSharesToFullRangeConcentratedPosition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgMigrateSharesToFullRangeConcentratedPosition.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 *MsgMigrateSharesToFullRangeConcentratedPosition) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgMigrateSharesToFullRangeConcentratedPosition.Merge(m, src) -} -func (m *MsgMigrateSharesToFullRangeConcentratedPosition) XXX_Size() int { - return m.Size() -} -func (m *MsgMigrateSharesToFullRangeConcentratedPosition) XXX_DiscardUnknown() { - xxx_messageInfo_MsgMigrateSharesToFullRangeConcentratedPosition.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgMigrateSharesToFullRangeConcentratedPosition proto.InternalMessageInfo - -func (m *MsgMigrateSharesToFullRangeConcentratedPosition) GetSender() string { - if m != nil { - return m.Sender - } - return "" -} - -func (m *MsgMigrateSharesToFullRangeConcentratedPosition) GetSharesToMigrate() types.Coin { - if m != nil { - return m.SharesToMigrate - } - return types.Coin{} -} - -type MsgMigrateSharesToFullRangeConcentratedPositionResponse struct { - Amount0 github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=amount0,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"amount0" yaml:"amount0"` - Amount1 github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,2,opt,name=amount1,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"amount1" yaml:"amount1"` - LiquidityCreated github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,3,opt,name=liquidity_created,json=liquidityCreated,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"liquidity_created" yaml:"liquidity_created"` - JoinTime time.Time `protobuf:"bytes,4,opt,name=join_time,json=joinTime,proto3,stdtime" json:"join_time" yaml:"join_time"` -} - -func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) Reset() { - *m = MsgMigrateSharesToFullRangeConcentratedPositionResponse{} -} -func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) String() string { - return proto.CompactTextString(m) -} -func (*MsgMigrateSharesToFullRangeConcentratedPositionResponse) ProtoMessage() {} -func (*MsgMigrateSharesToFullRangeConcentratedPositionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0647ee155de97433, []int{3} -} -func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgMigrateSharesToFullRangeConcentratedPositionResponse.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 *MsgMigrateSharesToFullRangeConcentratedPositionResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgMigrateSharesToFullRangeConcentratedPositionResponse.Merge(m, src) -} -func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgMigrateSharesToFullRangeConcentratedPositionResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgMigrateSharesToFullRangeConcentratedPositionResponse proto.InternalMessageInfo - -func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) GetJoinTime() time.Time { - if m != nil { - return m.JoinTime - } - return time.Time{} -} - -func init() { - proto.RegisterType((*MsgCreateBalancerPool)(nil), "osmosis.gamm.poolmodels.balancer.v1beta1.MsgCreateBalancerPool") - proto.RegisterType((*MsgCreateBalancerPoolResponse)(nil), "osmosis.gamm.poolmodels.balancer.v1beta1.MsgCreateBalancerPoolResponse") - proto.RegisterType((*MsgMigrateSharesToFullRangeConcentratedPosition)(nil), "osmosis.gamm.poolmodels.balancer.v1beta1.MsgMigrateSharesToFullRangeConcentratedPosition") - proto.RegisterType((*MsgMigrateSharesToFullRangeConcentratedPositionResponse)(nil), "osmosis.gamm.poolmodels.balancer.v1beta1.MsgMigrateSharesToFullRangeConcentratedPositionResponse") -} - -func init() { - proto.RegisterFile("osmosis/gamm/pool-models/balancer/tx/tx.proto", fileDescriptor_0647ee155de97433) -} - -var fileDescriptor_0647ee155de97433 = []byte{ - // 721 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x95, 0xcf, 0x6e, 0xd3, 0x4a, - 0x14, 0xc6, 0xe3, 0xa6, 0x4a, 0x6f, 0x27, 0xba, 0xf7, 0xb6, 0x56, 0xef, 0x55, 0x08, 0x10, 0x47, - 0x46, 0x42, 0x41, 0x22, 0x33, 0x24, 0x80, 0x90, 0xd8, 0x14, 0xdc, 0xaa, 0x55, 0x91, 0x22, 0x15, - 0x53, 0x16, 0xed, 0x26, 0x9a, 0xc4, 0x53, 0xd7, 0x60, 0x7b, 0x82, 0x67, 0x52, 0xda, 0xb7, 0xe8, - 0x86, 0x2d, 0xcf, 0xc1, 0x96, 0x05, 0x52, 0x97, 0x5d, 0x22, 0x16, 0x06, 0xa5, 0x5b, 0x56, 0x79, - 0x02, 0x34, 0x7f, 0xec, 0x16, 0x48, 0x05, 0x51, 0xc5, 0x2a, 0xf6, 0xcc, 0x77, 0x7e, 0xdf, 0x99, - 0x33, 0xe7, 0x38, 0xa0, 0x49, 0x59, 0x44, 0x59, 0xc0, 0x90, 0x8f, 0xa3, 0x08, 0x0d, 0x28, 0x0d, - 0x9b, 0x11, 0xf5, 0x48, 0xc8, 0x50, 0x0f, 0x87, 0x38, 0xee, 0x93, 0x04, 0xf1, 0x03, 0xc4, 0x0f, - 0xe0, 0x20, 0xa1, 0x9c, 0x9a, 0x0d, 0x2d, 0x87, 0x42, 0x0e, 0x85, 0x5c, 0xa9, 0x61, 0xa6, 0x86, - 0xfb, 0xad, 0x1e, 0xe1, 0xb8, 0x55, 0x5d, 0xf2, 0xa9, 0x4f, 0x65, 0x10, 0x12, 0x4f, 0x2a, 0xbe, - 0x7a, 0xef, 0xd7, 0x76, 0xd9, 0xc3, 0x26, 0xa5, 0xa1, 0x8e, 0xaa, 0xf5, 0x65, 0x18, 0xea, 0x61, - 0x46, 0x90, 0x36, 0x40, 0x7d, 0x1a, 0xc4, 0x7a, 0xdf, 0xf2, 0x29, 0xf5, 0x43, 0x82, 0xe4, 0x5b, - 0x6f, 0xb8, 0x8b, 0x78, 0x10, 0x11, 0xc6, 0x71, 0x34, 0x50, 0x02, 0xfb, 0xdd, 0x0c, 0xf8, 0xaf, - 0xc3, 0xfc, 0x95, 0x84, 0x60, 0x4e, 0x9c, 0x73, 0x06, 0xe6, 0x2d, 0x50, 0x62, 0x24, 0xf6, 0x48, - 0x52, 0x31, 0xea, 0x46, 0x63, 0xde, 0x59, 0x1c, 0xa7, 0xd6, 0xdf, 0x87, 0x38, 0x0a, 0x1f, 0xda, - 0x6a, 0xdd, 0x76, 0xb5, 0xc0, 0xdc, 0x06, 0x65, 0x91, 0x70, 0x77, 0x80, 0x13, 0x1c, 0xb1, 0xca, - 0x4c, 0xdd, 0x68, 0x94, 0xdb, 0x75, 0xf8, 0x5d, 0x45, 0x74, 0x72, 0x50, 0xb0, 0x37, 0xa5, 0xce, - 0xf9, 0x7f, 0x9c, 0x5a, 0xa6, 0x22, 0x9e, 0x0b, 0xb7, 0x5d, 0x30, 0xc8, 0x35, 0xe6, 0x9a, 0x46, - 0x63, 0xc6, 0x08, 0x67, 0x95, 0x62, 0xbd, 0xd8, 0x28, 0xb7, 0xad, 0x8b, 0xd1, 0x8f, 0x85, 0xce, - 0x99, 0x3d, 0x4e, 0xad, 0x82, 0xe2, 0xc8, 0x05, 0x66, 0x3e, 0x05, 0x4b, 0xbb, 0x43, 0x3e, 0x4c, - 0x48, 0x57, 0xe2, 0x7c, 0xba, 0x4f, 0x92, 0x98, 0x26, 0x95, 0x59, 0x79, 0x36, 0x6b, 0x9c, 0x5a, - 0x57, 0x55, 0x26, 0x93, 0x54, 0xb6, 0x6b, 0xaa, 0x65, 0xe1, 0xb0, 0x9e, 0x2d, 0xae, 0x82, 0xeb, - 0x13, 0x2b, 0xe7, 0x12, 0x36, 0xa0, 0x31, 0x23, 0xe6, 0x0d, 0x30, 0x27, 0x31, 0x81, 0x27, 0x4b, - 0x38, 0xeb, 0x80, 0x51, 0x6a, 0x95, 0x84, 0x64, 0x63, 0xd5, 0x2d, 0x89, 0xad, 0x0d, 0xcf, 0xfe, - 0x60, 0x00, 0xd4, 0x61, 0x7e, 0x27, 0xf0, 0x13, 0xcc, 0xc9, 0xb3, 0x3d, 0x9c, 0x10, 0xb6, 0x45, - 0xd7, 0x86, 0x61, 0xe8, 0xe2, 0xd8, 0x27, 0x2b, 0x34, 0xee, 0x93, 0x98, 0x8b, 0x3d, 0x6f, 0x93, - 0xb2, 0x80, 0x07, 0x34, 0x9e, 0xe6, 0x6a, 0x7c, 0xb0, 0xc8, 0x24, 0xb3, 0xcb, 0x69, 0x37, 0x52, - 0x26, 0xfa, 0x82, 0xae, 0x40, 0xd5, 0x3c, 0x50, 0x34, 0x4f, 0x5e, 0xc4, 0x15, 0x1a, 0xc4, 0x4e, - 0x5d, 0xd4, 0x6f, 0x9c, 0x5a, 0x15, 0x0d, 0xfd, 0x91, 0x60, 0xbb, 0xff, 0x32, 0x9d, 0xa9, 0x4e, - 0xdc, 0x7e, 0x5f, 0x04, 0x0f, 0xa6, 0x3c, 0x47, 0x5e, 0xa8, 0x1d, 0x30, 0x87, 0x23, 0x3a, 0x8c, - 0xf9, 0x1d, 0x7d, 0xa0, 0x47, 0xc2, 0xff, 0x53, 0x6a, 0xdd, 0xf4, 0x03, 0xbe, 0x37, 0xec, 0xc1, - 0x3e, 0x8d, 0x90, 0xee, 0x74, 0xf5, 0xd3, 0x64, 0xde, 0x4b, 0xc4, 0x0f, 0x07, 0x84, 0xc1, 0x8d, - 0x98, 0x8f, 0x53, 0xeb, 0x1f, 0x95, 0xa9, 0xc6, 0xd8, 0x6e, 0x06, 0x3c, 0x63, 0xb7, 0xe4, 0xb1, - 0x2f, 0xcd, 0x6e, 0xe5, 0xec, 0x96, 0xf9, 0x1a, 0x2c, 0x86, 0xc1, 0xab, 0x61, 0xe0, 0x05, 0xfc, - 0xb0, 0xdb, 0x97, 0x8d, 0xe0, 0x55, 0x8a, 0xd2, 0xe5, 0xc9, 0x14, 0x2e, 0xab, 0xa4, 0x7f, 0x56, - 0xeb, 0x9f, 0x80, 0xb6, 0xbb, 0x90, 0xaf, 0xa9, 0x66, 0xf3, 0xcc, 0xe7, 0x60, 0xfe, 0x05, 0x0d, - 0xe2, 0xae, 0x98, 0x66, 0xd9, 0xc2, 0xe5, 0x76, 0x15, 0xaa, 0x51, 0x87, 0xd9, 0xa8, 0xc3, 0xad, - 0x6c, 0xd4, 0x9d, 0x6b, 0xfa, 0x3a, 0x17, 0x94, 0x45, 0x1e, 0x6a, 0x1f, 0x7d, 0xb6, 0x0c, 0xf7, - 0x2f, 0xf1, 0x2e, 0xc4, 0xed, 0x37, 0x45, 0x50, 0xec, 0x30, 0xdf, 0x7c, 0x6b, 0x00, 0x73, 0xc2, - 0x17, 0x61, 0x19, 0xfe, 0xee, 0x37, 0x0e, 0x4e, 0x1c, 0x8c, 0xea, 0xfa, 0x25, 0x01, 0x79, 0xc3, - 0x7c, 0x35, 0xc0, 0xed, 0xa9, 0x26, 0x66, 0x7b, 0x2a, 0xe7, 0x69, 0xd0, 0x55, 0xfc, 0xc7, 0xd0, - 0xd9, 0x71, 0x9d, 0xed, 0xe3, 0x51, 0xcd, 0x38, 0x19, 0xd5, 0x8c, 0x2f, 0xa3, 0x9a, 0x71, 0x74, - 0x5a, 0x2b, 0x9c, 0x9c, 0xd6, 0x0a, 0x1f, 0x4f, 0x6b, 0x85, 0x9d, 0xe5, 0x73, 0xed, 0xa5, 0xd3, - 0x68, 0x86, 0xb8, 0xc7, 0xb2, 0x17, 0xb4, 0xdf, 0xba, 0x8f, 0x0e, 0x2e, 0xfe, 0x4f, 0xe9, 0x95, - 0x64, 0xbb, 0xdc, 0xfd, 0x16, 0x00, 0x00, 0xff, 0xff, 0xb9, 0x46, 0x01, 0x17, 0xee, 0x06, 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 { - CreateBalancerPool(ctx context.Context, in *MsgCreateBalancerPool, opts ...grpc.CallOption) (*MsgCreateBalancerPoolResponse, error) - MigrateSharesToFullRangeConcentratedPosition(ctx context.Context, in *MsgMigrateSharesToFullRangeConcentratedPosition, opts ...grpc.CallOption) (*MsgMigrateSharesToFullRangeConcentratedPositionResponse, error) -} - -type msgClient struct { - cc grpc1.ClientConn -} - -func NewMsgClient(cc grpc1.ClientConn) MsgClient { - return &msgClient{cc} -} - -func (c *msgClient) CreateBalancerPool(ctx context.Context, in *MsgCreateBalancerPool, opts ...grpc.CallOption) (*MsgCreateBalancerPoolResponse, error) { - out := new(MsgCreateBalancerPoolResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.poolmodels.balancer.v1beta1.Msg/CreateBalancerPool", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) MigrateSharesToFullRangeConcentratedPosition(ctx context.Context, in *MsgMigrateSharesToFullRangeConcentratedPosition, opts ...grpc.CallOption) (*MsgMigrateSharesToFullRangeConcentratedPositionResponse, error) { - out := new(MsgMigrateSharesToFullRangeConcentratedPositionResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.poolmodels.balancer.v1beta1.Msg/MigrateSharesToFullRangeConcentratedPosition", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// MsgServer is the server API for Msg service. -type MsgServer interface { - CreateBalancerPool(context.Context, *MsgCreateBalancerPool) (*MsgCreateBalancerPoolResponse, error) - MigrateSharesToFullRangeConcentratedPosition(context.Context, *MsgMigrateSharesToFullRangeConcentratedPosition) (*MsgMigrateSharesToFullRangeConcentratedPositionResponse, error) -} - -// UnimplementedMsgServer can be embedded to have forward compatible implementations. -type UnimplementedMsgServer struct { -} - -func (*UnimplementedMsgServer) CreateBalancerPool(ctx context.Context, req *MsgCreateBalancerPool) (*MsgCreateBalancerPoolResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateBalancerPool not implemented") -} -func (*UnimplementedMsgServer) MigrateSharesToFullRangeConcentratedPosition(ctx context.Context, req *MsgMigrateSharesToFullRangeConcentratedPosition) (*MsgMigrateSharesToFullRangeConcentratedPositionResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method MigrateSharesToFullRangeConcentratedPosition not implemented") -} - -func RegisterMsgServer(s grpc1.Server, srv MsgServer) { - s.RegisterService(&_Msg_serviceDesc, srv) -} - -func _Msg_CreateBalancerPool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgCreateBalancerPool) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).CreateBalancerPool(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.poolmodels.balancer.v1beta1.Msg/CreateBalancerPool", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).CreateBalancerPool(ctx, req.(*MsgCreateBalancerPool)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_MigrateSharesToFullRangeConcentratedPosition_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgMigrateSharesToFullRangeConcentratedPosition) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).MigrateSharesToFullRangeConcentratedPosition(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.poolmodels.balancer.v1beta1.Msg/MigrateSharesToFullRangeConcentratedPosition", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).MigrateSharesToFullRangeConcentratedPosition(ctx, req.(*MsgMigrateSharesToFullRangeConcentratedPosition)) - } - return interceptor(ctx, in, info, handler) -} - -var _Msg_serviceDesc = grpc.ServiceDesc{ - ServiceName: "osmosis.gamm.poolmodels.balancer.v1beta1.Msg", - HandlerType: (*MsgServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "CreateBalancerPool", - Handler: _Msg_CreateBalancerPool_Handler, - }, - { - MethodName: "MigrateSharesToFullRangeConcentratedPosition", - Handler: _Msg_MigrateSharesToFullRangeConcentratedPosition_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "osmosis/gamm/pool-models/balancer/tx/tx.proto", -} - -func (m *MsgCreateBalancerPool) 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 *MsgCreateBalancerPool) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgCreateBalancerPool) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.FuturePoolGovernor) > 0 { - i -= len(m.FuturePoolGovernor) - copy(dAtA[i:], m.FuturePoolGovernor) - i = encodeVarintTx(dAtA, i, uint64(len(m.FuturePoolGovernor))) - i-- - dAtA[i] = 0x22 - } - if len(m.PoolAssets) > 0 { - for iNdEx := len(m.PoolAssets) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.PoolAssets[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - } - if m.PoolParams != nil { - { - size, err := m.PoolParams.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - 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] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgCreateBalancerPoolResponse) 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 *MsgCreateBalancerPoolResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgCreateBalancerPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.PoolID != 0 { - i = encodeVarintTx(dAtA, i, uint64(m.PoolID)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *MsgMigrateSharesToFullRangeConcentratedPosition) 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 *MsgMigrateSharesToFullRangeConcentratedPosition) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgMigrateSharesToFullRangeConcentratedPosition) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.SharesToMigrate.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - 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] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) 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 *MsgMigrateSharesToFullRangeConcentratedPositionResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - n3, err3 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.JoinTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.JoinTime):]) - if err3 != nil { - return 0, err3 - } - i -= n3 - i = encodeVarintTx(dAtA, i, uint64(n3)) - i-- - dAtA[i] = 0x22 - { - size := m.LiquidityCreated.Size() - i -= size - if _, err := m.LiquidityCreated.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - { - size := m.Amount1.Size() - i -= size - if _, err := m.Amount1.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - { - size := m.Amount0.Size() - i -= size - if _, err := m.Amount0.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - 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 *MsgCreateBalancerPool) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - if m.PoolParams != nil { - l = m.PoolParams.Size() - n += 1 + l + sovTx(uint64(l)) - } - if len(m.PoolAssets) > 0 { - for _, e := range m.PoolAssets { - l = e.Size() - n += 1 + l + sovTx(uint64(l)) - } - } - l = len(m.FuturePoolGovernor) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - return n -} - -func (m *MsgCreateBalancerPoolResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PoolID != 0 { - n += 1 + sovTx(uint64(m.PoolID)) - } - return n -} - -func (m *MsgMigrateSharesToFullRangeConcentratedPosition) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - l = m.SharesToMigrate.Size() - n += 1 + l + sovTx(uint64(l)) - return n -} - -func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Amount0.Size() - n += 1 + l + sovTx(uint64(l)) - l = m.Amount1.Size() - n += 1 + l + sovTx(uint64(l)) - l = m.LiquidityCreated.Size() - n += 1 + l + sovTx(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.JoinTime) - n += 1 + l + sovTx(uint64(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 *MsgCreateBalancerPool) 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: MsgCreateBalancerPool: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgCreateBalancerPool: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - 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 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolParams", 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.PoolParams == nil { - m.PoolParams = &PoolParams{} - } - if err := m.PoolParams.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolAssets", 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 - } - m.PoolAssets = append(m.PoolAssets, PoolAsset{}) - if err := m.PoolAssets[len(m.PoolAssets)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FuturePoolGovernor", 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.FuturePoolGovernor = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgCreateBalancerPoolResponse) 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: MsgCreateBalancerPoolResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgCreateBalancerPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolID", wireType) - } - m.PoolID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolID |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgMigrateSharesToFullRangeConcentratedPosition) 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: MsgMigrateSharesToFullRangeConcentratedPosition: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgMigrateSharesToFullRangeConcentratedPosition: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - 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 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SharesToMigrate", 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.SharesToMigrate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) 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: MsgMigrateSharesToFullRangeConcentratedPositionResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgMigrateSharesToFullRangeConcentratedPositionResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Amount0", 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 - } - if err := m.Amount0.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Amount1", 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 - } - if err := m.Amount1.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LiquidityCreated", 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 - } - if err := m.LiquidityCreated.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field JoinTime", 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 := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.JoinTime, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (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/tests/interchaintest/osmosistypes/gamm/types/query.pb.go b/tests/interchaintest/osmosistypes/gamm/types/query.pb.go deleted file mode 100644 index 8914073d..00000000 --- a/tests/interchaintest/osmosistypes/gamm/types/query.pb.go +++ /dev/null @@ -1,6727 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: osmosis/gamm/v1beta1/query.proto - -package types - -import ( - context "context" - fmt "fmt" - _ "github.com/cosmos/cosmos-proto" - types "github.com/cosmos/cosmos-sdk/codec/types" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - types1 "github.com/cosmos/cosmos-sdk/types" - query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" - _ "google.golang.org/genproto/googleapis/api/annotations" - 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 - -// =============================== Pool -type QueryPoolRequest struct { - PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` -} - -func (m *QueryPoolRequest) Reset() { *m = QueryPoolRequest{} } -func (m *QueryPoolRequest) String() string { return proto.CompactTextString(m) } -func (*QueryPoolRequest) ProtoMessage() {} -func (*QueryPoolRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{0} -} -func (m *QueryPoolRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryPoolRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryPoolRequest.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 *QueryPoolRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPoolRequest.Merge(m, src) -} -func (m *QueryPoolRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryPoolRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPoolRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryPoolRequest proto.InternalMessageInfo - -func (m *QueryPoolRequest) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -type QueryPoolResponse struct { - Pool *types.Any `protobuf:"bytes,1,opt,name=pool,proto3" json:"pool,omitempty"` -} - -func (m *QueryPoolResponse) Reset() { *m = QueryPoolResponse{} } -func (m *QueryPoolResponse) String() string { return proto.CompactTextString(m) } -func (*QueryPoolResponse) ProtoMessage() {} -func (*QueryPoolResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{1} -} -func (m *QueryPoolResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryPoolResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryPoolResponse.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 *QueryPoolResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPoolResponse.Merge(m, src) -} -func (m *QueryPoolResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryPoolResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPoolResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryPoolResponse proto.InternalMessageInfo - -func (m *QueryPoolResponse) GetPool() *types.Any { - if m != nil { - return m.Pool - } - return nil -} - -// =============================== Pools -type QueryPoolsRequest struct { - // pagination defines an optional pagination for the request. - Pagination *query.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (m *QueryPoolsRequest) Reset() { *m = QueryPoolsRequest{} } -func (m *QueryPoolsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryPoolsRequest) ProtoMessage() {} -func (*QueryPoolsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{2} -} -func (m *QueryPoolsRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryPoolsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryPoolsRequest.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 *QueryPoolsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPoolsRequest.Merge(m, src) -} -func (m *QueryPoolsRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryPoolsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPoolsRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryPoolsRequest proto.InternalMessageInfo - -func (m *QueryPoolsRequest) GetPagination() *query.PageRequest { - if m != nil { - return m.Pagination - } - return nil -} - -type QueryPoolsResponse struct { - Pools []*types.Any `protobuf:"bytes,1,rep,name=pools,proto3" json:"pools,omitempty"` - // pagination defines the pagination in the response. - Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (m *QueryPoolsResponse) Reset() { *m = QueryPoolsResponse{} } -func (m *QueryPoolsResponse) String() string { return proto.CompactTextString(m) } -func (*QueryPoolsResponse) ProtoMessage() {} -func (*QueryPoolsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{3} -} -func (m *QueryPoolsResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryPoolsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryPoolsResponse.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 *QueryPoolsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPoolsResponse.Merge(m, src) -} -func (m *QueryPoolsResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryPoolsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPoolsResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryPoolsResponse proto.InternalMessageInfo - -func (m *QueryPoolsResponse) GetPools() []*types.Any { - if m != nil { - return m.Pools - } - return nil -} - -func (m *QueryPoolsResponse) GetPagination() *query.PageResponse { - if m != nil { - return m.Pagination - } - return nil -} - -// =============================== NumPools -type QueryNumPoolsRequest struct { -} - -func (m *QueryNumPoolsRequest) Reset() { *m = QueryNumPoolsRequest{} } -func (m *QueryNumPoolsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryNumPoolsRequest) ProtoMessage() {} -func (*QueryNumPoolsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{4} -} -func (m *QueryNumPoolsRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryNumPoolsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryNumPoolsRequest.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 *QueryNumPoolsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryNumPoolsRequest.Merge(m, src) -} -func (m *QueryNumPoolsRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryNumPoolsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryNumPoolsRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryNumPoolsRequest proto.InternalMessageInfo - -type QueryNumPoolsResponse struct { - NumPools uint64 `protobuf:"varint,1,opt,name=num_pools,json=numPools,proto3" json:"num_pools,omitempty" yaml:"num_pools"` -} - -func (m *QueryNumPoolsResponse) Reset() { *m = QueryNumPoolsResponse{} } -func (m *QueryNumPoolsResponse) String() string { return proto.CompactTextString(m) } -func (*QueryNumPoolsResponse) ProtoMessage() {} -func (*QueryNumPoolsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{5} -} -func (m *QueryNumPoolsResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryNumPoolsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryNumPoolsResponse.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 *QueryNumPoolsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryNumPoolsResponse.Merge(m, src) -} -func (m *QueryNumPoolsResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryNumPoolsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryNumPoolsResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryNumPoolsResponse proto.InternalMessageInfo - -func (m *QueryNumPoolsResponse) GetNumPools() uint64 { - if m != nil { - return m.NumPools - } - return 0 -} - -// =============================== PoolType -type QueryPoolTypeRequest struct { - PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` -} - -func (m *QueryPoolTypeRequest) Reset() { *m = QueryPoolTypeRequest{} } -func (m *QueryPoolTypeRequest) String() string { return proto.CompactTextString(m) } -func (*QueryPoolTypeRequest) ProtoMessage() {} -func (*QueryPoolTypeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{6} -} -func (m *QueryPoolTypeRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryPoolTypeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryPoolTypeRequest.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 *QueryPoolTypeRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPoolTypeRequest.Merge(m, src) -} -func (m *QueryPoolTypeRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryPoolTypeRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPoolTypeRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryPoolTypeRequest proto.InternalMessageInfo - -func (m *QueryPoolTypeRequest) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -type QueryPoolTypeResponse struct { - PoolType string `protobuf:"bytes,1,opt,name=pool_type,json=poolType,proto3" json:"pool_type,omitempty" yaml:"pool_type"` -} - -func (m *QueryPoolTypeResponse) Reset() { *m = QueryPoolTypeResponse{} } -func (m *QueryPoolTypeResponse) String() string { return proto.CompactTextString(m) } -func (*QueryPoolTypeResponse) ProtoMessage() {} -func (*QueryPoolTypeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{7} -} -func (m *QueryPoolTypeResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryPoolTypeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryPoolTypeResponse.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 *QueryPoolTypeResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPoolTypeResponse.Merge(m, src) -} -func (m *QueryPoolTypeResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryPoolTypeResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPoolTypeResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryPoolTypeResponse proto.InternalMessageInfo - -func (m *QueryPoolTypeResponse) GetPoolType() string { - if m != nil { - return m.PoolType - } - return "" -} - -// =============================== CalcJoinPoolShares -type QueryCalcJoinPoolSharesRequest struct { - PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - TokensIn github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,2,rep,name=tokens_in,json=tokensIn,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"tokens_in"` -} - -func (m *QueryCalcJoinPoolSharesRequest) Reset() { *m = QueryCalcJoinPoolSharesRequest{} } -func (m *QueryCalcJoinPoolSharesRequest) String() string { return proto.CompactTextString(m) } -func (*QueryCalcJoinPoolSharesRequest) ProtoMessage() {} -func (*QueryCalcJoinPoolSharesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{8} -} -func (m *QueryCalcJoinPoolSharesRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryCalcJoinPoolSharesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryCalcJoinPoolSharesRequest.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 *QueryCalcJoinPoolSharesRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryCalcJoinPoolSharesRequest.Merge(m, src) -} -func (m *QueryCalcJoinPoolSharesRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryCalcJoinPoolSharesRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryCalcJoinPoolSharesRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryCalcJoinPoolSharesRequest proto.InternalMessageInfo - -func (m *QueryCalcJoinPoolSharesRequest) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -func (m *QueryCalcJoinPoolSharesRequest) GetTokensIn() github_com_cosmos_cosmos_sdk_types.Coins { - if m != nil { - return m.TokensIn - } - return nil -} - -type QueryCalcJoinPoolSharesResponse struct { - ShareOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=share_out_amount,json=shareOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_out_amount" yaml:"share_out_amount"` - TokensOut github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,2,rep,name=tokens_out,json=tokensOut,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"tokens_out"` -} - -func (m *QueryCalcJoinPoolSharesResponse) Reset() { *m = QueryCalcJoinPoolSharesResponse{} } -func (m *QueryCalcJoinPoolSharesResponse) String() string { return proto.CompactTextString(m) } -func (*QueryCalcJoinPoolSharesResponse) ProtoMessage() {} -func (*QueryCalcJoinPoolSharesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{9} -} -func (m *QueryCalcJoinPoolSharesResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryCalcJoinPoolSharesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryCalcJoinPoolSharesResponse.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 *QueryCalcJoinPoolSharesResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryCalcJoinPoolSharesResponse.Merge(m, src) -} -func (m *QueryCalcJoinPoolSharesResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryCalcJoinPoolSharesResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryCalcJoinPoolSharesResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryCalcJoinPoolSharesResponse proto.InternalMessageInfo - -func (m *QueryCalcJoinPoolSharesResponse) GetTokensOut() github_com_cosmos_cosmos_sdk_types.Coins { - if m != nil { - return m.TokensOut - } - return nil -} - -// =============================== CalcExitPoolCoinsFromShares -type QueryCalcExitPoolCoinsFromSharesRequest struct { - PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` - ShareInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,2,opt,name=share_in_amount,json=shareInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_in_amount"` -} - -func (m *QueryCalcExitPoolCoinsFromSharesRequest) Reset() { - *m = QueryCalcExitPoolCoinsFromSharesRequest{} -} -func (m *QueryCalcExitPoolCoinsFromSharesRequest) String() string { return proto.CompactTextString(m) } -func (*QueryCalcExitPoolCoinsFromSharesRequest) ProtoMessage() {} -func (*QueryCalcExitPoolCoinsFromSharesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{10} -} -func (m *QueryCalcExitPoolCoinsFromSharesRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryCalcExitPoolCoinsFromSharesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryCalcExitPoolCoinsFromSharesRequest.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 *QueryCalcExitPoolCoinsFromSharesRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryCalcExitPoolCoinsFromSharesRequest.Merge(m, src) -} -func (m *QueryCalcExitPoolCoinsFromSharesRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryCalcExitPoolCoinsFromSharesRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryCalcExitPoolCoinsFromSharesRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryCalcExitPoolCoinsFromSharesRequest proto.InternalMessageInfo - -func (m *QueryCalcExitPoolCoinsFromSharesRequest) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -type QueryCalcExitPoolCoinsFromSharesResponse struct { - TokensOut github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=tokens_out,json=tokensOut,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"tokens_out"` -} - -func (m *QueryCalcExitPoolCoinsFromSharesResponse) Reset() { - *m = QueryCalcExitPoolCoinsFromSharesResponse{} -} -func (m *QueryCalcExitPoolCoinsFromSharesResponse) String() string { return proto.CompactTextString(m) } -func (*QueryCalcExitPoolCoinsFromSharesResponse) ProtoMessage() {} -func (*QueryCalcExitPoolCoinsFromSharesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{11} -} -func (m *QueryCalcExitPoolCoinsFromSharesResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryCalcExitPoolCoinsFromSharesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryCalcExitPoolCoinsFromSharesResponse.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 *QueryCalcExitPoolCoinsFromSharesResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryCalcExitPoolCoinsFromSharesResponse.Merge(m, src) -} -func (m *QueryCalcExitPoolCoinsFromSharesResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryCalcExitPoolCoinsFromSharesResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryCalcExitPoolCoinsFromSharesResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryCalcExitPoolCoinsFromSharesResponse proto.InternalMessageInfo - -func (m *QueryCalcExitPoolCoinsFromSharesResponse) GetTokensOut() github_com_cosmos_cosmos_sdk_types.Coins { - if m != nil { - return m.TokensOut - } - return nil -} - -// =============================== PoolParams -type QueryPoolParamsRequest struct { - PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` -} - -func (m *QueryPoolParamsRequest) Reset() { *m = QueryPoolParamsRequest{} } -func (m *QueryPoolParamsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryPoolParamsRequest) ProtoMessage() {} -func (*QueryPoolParamsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{12} -} -func (m *QueryPoolParamsRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryPoolParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryPoolParamsRequest.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 *QueryPoolParamsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPoolParamsRequest.Merge(m, src) -} -func (m *QueryPoolParamsRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryPoolParamsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPoolParamsRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryPoolParamsRequest proto.InternalMessageInfo - -func (m *QueryPoolParamsRequest) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -type QueryPoolParamsResponse struct { - Params *types.Any `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` -} - -func (m *QueryPoolParamsResponse) Reset() { *m = QueryPoolParamsResponse{} } -func (m *QueryPoolParamsResponse) String() string { return proto.CompactTextString(m) } -func (*QueryPoolParamsResponse) ProtoMessage() {} -func (*QueryPoolParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{13} -} -func (m *QueryPoolParamsResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryPoolParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryPoolParamsResponse.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 *QueryPoolParamsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPoolParamsResponse.Merge(m, src) -} -func (m *QueryPoolParamsResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryPoolParamsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPoolParamsResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryPoolParamsResponse proto.InternalMessageInfo - -func (m *QueryPoolParamsResponse) GetParams() *types.Any { - if m != nil { - return m.Params - } - return nil -} - -// =============================== PoolLiquidity -type QueryTotalPoolLiquidityRequest struct { - PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` -} - -func (m *QueryTotalPoolLiquidityRequest) Reset() { *m = QueryTotalPoolLiquidityRequest{} } -func (m *QueryTotalPoolLiquidityRequest) String() string { return proto.CompactTextString(m) } -func (*QueryTotalPoolLiquidityRequest) ProtoMessage() {} -func (*QueryTotalPoolLiquidityRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{14} -} -func (m *QueryTotalPoolLiquidityRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryTotalPoolLiquidityRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryTotalPoolLiquidityRequest.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 *QueryTotalPoolLiquidityRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryTotalPoolLiquidityRequest.Merge(m, src) -} -func (m *QueryTotalPoolLiquidityRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryTotalPoolLiquidityRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryTotalPoolLiquidityRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryTotalPoolLiquidityRequest proto.InternalMessageInfo - -func (m *QueryTotalPoolLiquidityRequest) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -type QueryTotalPoolLiquidityResponse struct { - Liquidity github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=liquidity,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"liquidity" yaml:"liquidity"` -} - -func (m *QueryTotalPoolLiquidityResponse) Reset() { *m = QueryTotalPoolLiquidityResponse{} } -func (m *QueryTotalPoolLiquidityResponse) String() string { return proto.CompactTextString(m) } -func (*QueryTotalPoolLiquidityResponse) ProtoMessage() {} -func (*QueryTotalPoolLiquidityResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{15} -} -func (m *QueryTotalPoolLiquidityResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryTotalPoolLiquidityResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryTotalPoolLiquidityResponse.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 *QueryTotalPoolLiquidityResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryTotalPoolLiquidityResponse.Merge(m, src) -} -func (m *QueryTotalPoolLiquidityResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryTotalPoolLiquidityResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryTotalPoolLiquidityResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryTotalPoolLiquidityResponse proto.InternalMessageInfo - -func (m *QueryTotalPoolLiquidityResponse) GetLiquidity() github_com_cosmos_cosmos_sdk_types.Coins { - if m != nil { - return m.Liquidity - } - return nil -} - -// =============================== TotalShares -type QueryTotalSharesRequest struct { - PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` -} - -func (m *QueryTotalSharesRequest) Reset() { *m = QueryTotalSharesRequest{} } -func (m *QueryTotalSharesRequest) String() string { return proto.CompactTextString(m) } -func (*QueryTotalSharesRequest) ProtoMessage() {} -func (*QueryTotalSharesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{16} -} -func (m *QueryTotalSharesRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryTotalSharesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryTotalSharesRequest.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 *QueryTotalSharesRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryTotalSharesRequest.Merge(m, src) -} -func (m *QueryTotalSharesRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryTotalSharesRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryTotalSharesRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryTotalSharesRequest proto.InternalMessageInfo - -func (m *QueryTotalSharesRequest) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -type QueryTotalSharesResponse struct { - TotalShares types1.Coin `protobuf:"bytes,1,opt,name=total_shares,json=totalShares,proto3" json:"total_shares" yaml:"total_shares"` -} - -func (m *QueryTotalSharesResponse) Reset() { *m = QueryTotalSharesResponse{} } -func (m *QueryTotalSharesResponse) String() string { return proto.CompactTextString(m) } -func (*QueryTotalSharesResponse) ProtoMessage() {} -func (*QueryTotalSharesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{17} -} -func (m *QueryTotalSharesResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryTotalSharesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryTotalSharesResponse.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 *QueryTotalSharesResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryTotalSharesResponse.Merge(m, src) -} -func (m *QueryTotalSharesResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryTotalSharesResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryTotalSharesResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryTotalSharesResponse proto.InternalMessageInfo - -func (m *QueryTotalSharesResponse) GetTotalShares() types1.Coin { - if m != nil { - return m.TotalShares - } - return types1.Coin{} -} - -// =============================== CalcJoinPoolNoSwapShares -type QueryCalcJoinPoolNoSwapSharesRequest struct { - PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - TokensIn github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,2,rep,name=tokens_in,json=tokensIn,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"tokens_in"` -} - -func (m *QueryCalcJoinPoolNoSwapSharesRequest) Reset() { *m = QueryCalcJoinPoolNoSwapSharesRequest{} } -func (m *QueryCalcJoinPoolNoSwapSharesRequest) String() string { return proto.CompactTextString(m) } -func (*QueryCalcJoinPoolNoSwapSharesRequest) ProtoMessage() {} -func (*QueryCalcJoinPoolNoSwapSharesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{18} -} -func (m *QueryCalcJoinPoolNoSwapSharesRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryCalcJoinPoolNoSwapSharesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryCalcJoinPoolNoSwapSharesRequest.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 *QueryCalcJoinPoolNoSwapSharesRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryCalcJoinPoolNoSwapSharesRequest.Merge(m, src) -} -func (m *QueryCalcJoinPoolNoSwapSharesRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryCalcJoinPoolNoSwapSharesRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryCalcJoinPoolNoSwapSharesRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryCalcJoinPoolNoSwapSharesRequest proto.InternalMessageInfo - -func (m *QueryCalcJoinPoolNoSwapSharesRequest) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -func (m *QueryCalcJoinPoolNoSwapSharesRequest) GetTokensIn() github_com_cosmos_cosmos_sdk_types.Coins { - if m != nil { - return m.TokensIn - } - return nil -} - -type QueryCalcJoinPoolNoSwapSharesResponse struct { - TokensOut github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=tokens_out,json=tokensOut,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"tokens_out" yaml:"tokens_out"` - SharesOut github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,2,opt,name=shares_out,json=sharesOut,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"shares_out"` -} - -func (m *QueryCalcJoinPoolNoSwapSharesResponse) Reset() { *m = QueryCalcJoinPoolNoSwapSharesResponse{} } -func (m *QueryCalcJoinPoolNoSwapSharesResponse) String() string { return proto.CompactTextString(m) } -func (*QueryCalcJoinPoolNoSwapSharesResponse) ProtoMessage() {} -func (*QueryCalcJoinPoolNoSwapSharesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{19} -} -func (m *QueryCalcJoinPoolNoSwapSharesResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryCalcJoinPoolNoSwapSharesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryCalcJoinPoolNoSwapSharesResponse.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 *QueryCalcJoinPoolNoSwapSharesResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryCalcJoinPoolNoSwapSharesResponse.Merge(m, src) -} -func (m *QueryCalcJoinPoolNoSwapSharesResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryCalcJoinPoolNoSwapSharesResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryCalcJoinPoolNoSwapSharesResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryCalcJoinPoolNoSwapSharesResponse proto.InternalMessageInfo - -func (m *QueryCalcJoinPoolNoSwapSharesResponse) GetTokensOut() github_com_cosmos_cosmos_sdk_types.Coins { - if m != nil { - return m.TokensOut - } - return nil -} - -// QuerySpotPriceRequest defines the gRPC request structure for a SpotPrice -// query. -// -// Deprecated: Do not use. -type QuerySpotPriceRequest struct { - PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - BaseAssetDenom string `protobuf:"bytes,2,opt,name=base_asset_denom,json=baseAssetDenom,proto3" json:"base_asset_denom,omitempty" yaml:"base_asset_denom"` - QuoteAssetDenom string `protobuf:"bytes,3,opt,name=quote_asset_denom,json=quoteAssetDenom,proto3" json:"quote_asset_denom,omitempty" yaml:"quote_asset_denom"` -} - -func (m *QuerySpotPriceRequest) Reset() { *m = QuerySpotPriceRequest{} } -func (m *QuerySpotPriceRequest) String() string { return proto.CompactTextString(m) } -func (*QuerySpotPriceRequest) ProtoMessage() {} -func (*QuerySpotPriceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{20} -} -func (m *QuerySpotPriceRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QuerySpotPriceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QuerySpotPriceRequest.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 *QuerySpotPriceRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QuerySpotPriceRequest.Merge(m, src) -} -func (m *QuerySpotPriceRequest) XXX_Size() int { - return m.Size() -} -func (m *QuerySpotPriceRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QuerySpotPriceRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QuerySpotPriceRequest proto.InternalMessageInfo - -func (m *QuerySpotPriceRequest) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -func (m *QuerySpotPriceRequest) GetBaseAssetDenom() string { - if m != nil { - return m.BaseAssetDenom - } - return "" -} - -func (m *QuerySpotPriceRequest) GetQuoteAssetDenom() string { - if m != nil { - return m.QuoteAssetDenom - } - return "" -} - -type QueryPoolsWithFilterRequest struct { - // String of the coins in single string seperated by comma. Ex) - // 10uatom,100uosmo - MinLiquidity string `protobuf:"bytes,1,opt,name=min_liquidity,json=minLiquidity,proto3" json:"min_liquidity,omitempty" yaml:"min_liquidity"` - PoolType string `protobuf:"bytes,2,opt,name=pool_type,json=poolType,proto3" json:"pool_type,omitempty"` - Pagination *query.PageRequest `protobuf:"bytes,3,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (m *QueryPoolsWithFilterRequest) Reset() { *m = QueryPoolsWithFilterRequest{} } -func (m *QueryPoolsWithFilterRequest) String() string { return proto.CompactTextString(m) } -func (*QueryPoolsWithFilterRequest) ProtoMessage() {} -func (*QueryPoolsWithFilterRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{21} -} -func (m *QueryPoolsWithFilterRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryPoolsWithFilterRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryPoolsWithFilterRequest.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 *QueryPoolsWithFilterRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPoolsWithFilterRequest.Merge(m, src) -} -func (m *QueryPoolsWithFilterRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryPoolsWithFilterRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPoolsWithFilterRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryPoolsWithFilterRequest proto.InternalMessageInfo - -func (m *QueryPoolsWithFilterRequest) GetMinLiquidity() string { - if m != nil { - return m.MinLiquidity - } - return "" -} - -func (m *QueryPoolsWithFilterRequest) GetPoolType() string { - if m != nil { - return m.PoolType - } - return "" -} - -func (m *QueryPoolsWithFilterRequest) GetPagination() *query.PageRequest { - if m != nil { - return m.Pagination - } - return nil -} - -type QueryPoolsWithFilterResponse struct { - Pools []*types.Any `protobuf:"bytes,1,rep,name=pools,proto3" json:"pools,omitempty"` - // pagination defines the pagination in the response. - Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (m *QueryPoolsWithFilterResponse) Reset() { *m = QueryPoolsWithFilterResponse{} } -func (m *QueryPoolsWithFilterResponse) String() string { return proto.CompactTextString(m) } -func (*QueryPoolsWithFilterResponse) ProtoMessage() {} -func (*QueryPoolsWithFilterResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{22} -} -func (m *QueryPoolsWithFilterResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryPoolsWithFilterResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryPoolsWithFilterResponse.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 *QueryPoolsWithFilterResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPoolsWithFilterResponse.Merge(m, src) -} -func (m *QueryPoolsWithFilterResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryPoolsWithFilterResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPoolsWithFilterResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryPoolsWithFilterResponse proto.InternalMessageInfo - -func (m *QueryPoolsWithFilterResponse) GetPools() []*types.Any { - if m != nil { - return m.Pools - } - return nil -} - -func (m *QueryPoolsWithFilterResponse) GetPagination() *query.PageResponse { - if m != nil { - return m.Pagination - } - return nil -} - -// QuerySpotPriceResponse defines the gRPC response structure for a SpotPrice -// query. -// -// Deprecated: Do not use. -type QuerySpotPriceResponse struct { - // String of the Dec. Ex) 10.203uatom - SpotPrice string `protobuf:"bytes,1,opt,name=spot_price,json=spotPrice,proto3" json:"spot_price,omitempty" yaml:"spot_price"` -} - -func (m *QuerySpotPriceResponse) Reset() { *m = QuerySpotPriceResponse{} } -func (m *QuerySpotPriceResponse) String() string { return proto.CompactTextString(m) } -func (*QuerySpotPriceResponse) ProtoMessage() {} -func (*QuerySpotPriceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{23} -} -func (m *QuerySpotPriceResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QuerySpotPriceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QuerySpotPriceResponse.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 *QuerySpotPriceResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QuerySpotPriceResponse.Merge(m, src) -} -func (m *QuerySpotPriceResponse) XXX_Size() int { - return m.Size() -} -func (m *QuerySpotPriceResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QuerySpotPriceResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QuerySpotPriceResponse proto.InternalMessageInfo - -func (m *QuerySpotPriceResponse) GetSpotPrice() string { - if m != nil { - return m.SpotPrice - } - return "" -} - -// =============================== EstimateSwapExactAmountIn -type QuerySwapExactAmountInRequest struct { - // TODO: CHANGE THIS TO RESERVED IN A PATCH RELEASE - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` - PoolId uint64 `protobuf:"varint,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - TokenIn string `protobuf:"bytes,3,opt,name=token_in,json=tokenIn,proto3" json:"token_in,omitempty" yaml:"token_in"` - Routes []SwapAmountInRoute `protobuf:"bytes,4,rep,name=routes,proto3" json:"routes" yaml:"routes"` -} - -func (m *QuerySwapExactAmountInRequest) Reset() { *m = QuerySwapExactAmountInRequest{} } -func (m *QuerySwapExactAmountInRequest) String() string { return proto.CompactTextString(m) } -func (*QuerySwapExactAmountInRequest) ProtoMessage() {} -func (*QuerySwapExactAmountInRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{24} -} -func (m *QuerySwapExactAmountInRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QuerySwapExactAmountInRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QuerySwapExactAmountInRequest.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 *QuerySwapExactAmountInRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QuerySwapExactAmountInRequest.Merge(m, src) -} -func (m *QuerySwapExactAmountInRequest) XXX_Size() int { - return m.Size() -} -func (m *QuerySwapExactAmountInRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QuerySwapExactAmountInRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QuerySwapExactAmountInRequest proto.InternalMessageInfo - -func (m *QuerySwapExactAmountInRequest) GetSender() string { - if m != nil { - return m.Sender - } - return "" -} - -func (m *QuerySwapExactAmountInRequest) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -func (m *QuerySwapExactAmountInRequest) GetTokenIn() string { - if m != nil { - return m.TokenIn - } - return "" -} - -func (m *QuerySwapExactAmountInRequest) GetRoutes() []SwapAmountInRoute { - if m != nil { - return m.Routes - } - return nil -} - -type QuerySwapExactAmountInResponse struct { - TokenOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=token_out_amount,json=tokenOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_out_amount" yaml:"token_out_amount"` -} - -func (m *QuerySwapExactAmountInResponse) Reset() { *m = QuerySwapExactAmountInResponse{} } -func (m *QuerySwapExactAmountInResponse) String() string { return proto.CompactTextString(m) } -func (*QuerySwapExactAmountInResponse) ProtoMessage() {} -func (*QuerySwapExactAmountInResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{25} -} -func (m *QuerySwapExactAmountInResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QuerySwapExactAmountInResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QuerySwapExactAmountInResponse.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 *QuerySwapExactAmountInResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QuerySwapExactAmountInResponse.Merge(m, src) -} -func (m *QuerySwapExactAmountInResponse) XXX_Size() int { - return m.Size() -} -func (m *QuerySwapExactAmountInResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QuerySwapExactAmountInResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QuerySwapExactAmountInResponse proto.InternalMessageInfo - -// =============================== EstimateSwapExactAmountOut -type QuerySwapExactAmountOutRequest struct { - // TODO: CHANGE THIS TO RESERVED IN A PATCH RELEASE - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` - PoolId uint64 `protobuf:"varint,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - Routes []SwapAmountOutRoute `protobuf:"bytes,3,rep,name=routes,proto3" json:"routes" yaml:"routes"` - TokenOut string `protobuf:"bytes,4,opt,name=token_out,json=tokenOut,proto3" json:"token_out,omitempty" yaml:"token_out"` -} - -func (m *QuerySwapExactAmountOutRequest) Reset() { *m = QuerySwapExactAmountOutRequest{} } -func (m *QuerySwapExactAmountOutRequest) String() string { return proto.CompactTextString(m) } -func (*QuerySwapExactAmountOutRequest) ProtoMessage() {} -func (*QuerySwapExactAmountOutRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{26} -} -func (m *QuerySwapExactAmountOutRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QuerySwapExactAmountOutRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QuerySwapExactAmountOutRequest.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 *QuerySwapExactAmountOutRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QuerySwapExactAmountOutRequest.Merge(m, src) -} -func (m *QuerySwapExactAmountOutRequest) XXX_Size() int { - return m.Size() -} -func (m *QuerySwapExactAmountOutRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QuerySwapExactAmountOutRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QuerySwapExactAmountOutRequest proto.InternalMessageInfo - -func (m *QuerySwapExactAmountOutRequest) GetSender() string { - if m != nil { - return m.Sender - } - return "" -} - -func (m *QuerySwapExactAmountOutRequest) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -func (m *QuerySwapExactAmountOutRequest) GetRoutes() []SwapAmountOutRoute { - if m != nil { - return m.Routes - } - return nil -} - -func (m *QuerySwapExactAmountOutRequest) GetTokenOut() string { - if m != nil { - return m.TokenOut - } - return "" -} - -type QuerySwapExactAmountOutResponse struct { - TokenInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=token_in_amount,json=tokenInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_in_amount" yaml:"token_in_amount"` -} - -func (m *QuerySwapExactAmountOutResponse) Reset() { *m = QuerySwapExactAmountOutResponse{} } -func (m *QuerySwapExactAmountOutResponse) String() string { return proto.CompactTextString(m) } -func (*QuerySwapExactAmountOutResponse) ProtoMessage() {} -func (*QuerySwapExactAmountOutResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{27} -} -func (m *QuerySwapExactAmountOutResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QuerySwapExactAmountOutResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QuerySwapExactAmountOutResponse.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 *QuerySwapExactAmountOutResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QuerySwapExactAmountOutResponse.Merge(m, src) -} -func (m *QuerySwapExactAmountOutResponse) XXX_Size() int { - return m.Size() -} -func (m *QuerySwapExactAmountOutResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QuerySwapExactAmountOutResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QuerySwapExactAmountOutResponse proto.InternalMessageInfo - -type QueryTotalLiquidityRequest struct { -} - -func (m *QueryTotalLiquidityRequest) Reset() { *m = QueryTotalLiquidityRequest{} } -func (m *QueryTotalLiquidityRequest) String() string { return proto.CompactTextString(m) } -func (*QueryTotalLiquidityRequest) ProtoMessage() {} -func (*QueryTotalLiquidityRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{28} -} -func (m *QueryTotalLiquidityRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryTotalLiquidityRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryTotalLiquidityRequest.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 *QueryTotalLiquidityRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryTotalLiquidityRequest.Merge(m, src) -} -func (m *QueryTotalLiquidityRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryTotalLiquidityRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryTotalLiquidityRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryTotalLiquidityRequest proto.InternalMessageInfo - -type QueryTotalLiquidityResponse struct { - Liquidity github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=liquidity,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"liquidity" yaml:"liquidity"` -} - -func (m *QueryTotalLiquidityResponse) Reset() { *m = QueryTotalLiquidityResponse{} } -func (m *QueryTotalLiquidityResponse) String() string { return proto.CompactTextString(m) } -func (*QueryTotalLiquidityResponse) ProtoMessage() {} -func (*QueryTotalLiquidityResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{29} -} -func (m *QueryTotalLiquidityResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryTotalLiquidityResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryTotalLiquidityResponse.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 *QueryTotalLiquidityResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryTotalLiquidityResponse.Merge(m, src) -} -func (m *QueryTotalLiquidityResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryTotalLiquidityResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryTotalLiquidityResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryTotalLiquidityResponse proto.InternalMessageInfo - -func (m *QueryTotalLiquidityResponse) GetLiquidity() github_com_cosmos_cosmos_sdk_types.Coins { - if m != nil { - return m.Liquidity - } - return nil -} - -func init() { - proto.RegisterType((*QueryPoolRequest)(nil), "osmosis.gamm.v1beta1.QueryPoolRequest") - proto.RegisterType((*QueryPoolResponse)(nil), "osmosis.gamm.v1beta1.QueryPoolResponse") - proto.RegisterType((*QueryPoolsRequest)(nil), "osmosis.gamm.v1beta1.QueryPoolsRequest") - proto.RegisterType((*QueryPoolsResponse)(nil), "osmosis.gamm.v1beta1.QueryPoolsResponse") - proto.RegisterType((*QueryNumPoolsRequest)(nil), "osmosis.gamm.v1beta1.QueryNumPoolsRequest") - proto.RegisterType((*QueryNumPoolsResponse)(nil), "osmosis.gamm.v1beta1.QueryNumPoolsResponse") - proto.RegisterType((*QueryPoolTypeRequest)(nil), "osmosis.gamm.v1beta1.QueryPoolTypeRequest") - proto.RegisterType((*QueryPoolTypeResponse)(nil), "osmosis.gamm.v1beta1.QueryPoolTypeResponse") - proto.RegisterType((*QueryCalcJoinPoolSharesRequest)(nil), "osmosis.gamm.v1beta1.QueryCalcJoinPoolSharesRequest") - proto.RegisterType((*QueryCalcJoinPoolSharesResponse)(nil), "osmosis.gamm.v1beta1.QueryCalcJoinPoolSharesResponse") - proto.RegisterType((*QueryCalcExitPoolCoinsFromSharesRequest)(nil), "osmosis.gamm.v1beta1.QueryCalcExitPoolCoinsFromSharesRequest") - proto.RegisterType((*QueryCalcExitPoolCoinsFromSharesResponse)(nil), "osmosis.gamm.v1beta1.QueryCalcExitPoolCoinsFromSharesResponse") - proto.RegisterType((*QueryPoolParamsRequest)(nil), "osmosis.gamm.v1beta1.QueryPoolParamsRequest") - proto.RegisterType((*QueryPoolParamsResponse)(nil), "osmosis.gamm.v1beta1.QueryPoolParamsResponse") - proto.RegisterType((*QueryTotalPoolLiquidityRequest)(nil), "osmosis.gamm.v1beta1.QueryTotalPoolLiquidityRequest") - proto.RegisterType((*QueryTotalPoolLiquidityResponse)(nil), "osmosis.gamm.v1beta1.QueryTotalPoolLiquidityResponse") - proto.RegisterType((*QueryTotalSharesRequest)(nil), "osmosis.gamm.v1beta1.QueryTotalSharesRequest") - proto.RegisterType((*QueryTotalSharesResponse)(nil), "osmosis.gamm.v1beta1.QueryTotalSharesResponse") - proto.RegisterType((*QueryCalcJoinPoolNoSwapSharesRequest)(nil), "osmosis.gamm.v1beta1.QueryCalcJoinPoolNoSwapSharesRequest") - proto.RegisterType((*QueryCalcJoinPoolNoSwapSharesResponse)(nil), "osmosis.gamm.v1beta1.QueryCalcJoinPoolNoSwapSharesResponse") - proto.RegisterType((*QuerySpotPriceRequest)(nil), "osmosis.gamm.v1beta1.QuerySpotPriceRequest") - proto.RegisterType((*QueryPoolsWithFilterRequest)(nil), "osmosis.gamm.v1beta1.QueryPoolsWithFilterRequest") - proto.RegisterType((*QueryPoolsWithFilterResponse)(nil), "osmosis.gamm.v1beta1.QueryPoolsWithFilterResponse") - proto.RegisterType((*QuerySpotPriceResponse)(nil), "osmosis.gamm.v1beta1.QuerySpotPriceResponse") - proto.RegisterType((*QuerySwapExactAmountInRequest)(nil), "osmosis.gamm.v1beta1.QuerySwapExactAmountInRequest") - proto.RegisterType((*QuerySwapExactAmountInResponse)(nil), "osmosis.gamm.v1beta1.QuerySwapExactAmountInResponse") - proto.RegisterType((*QuerySwapExactAmountOutRequest)(nil), "osmosis.gamm.v1beta1.QuerySwapExactAmountOutRequest") - proto.RegisterType((*QuerySwapExactAmountOutResponse)(nil), "osmosis.gamm.v1beta1.QuerySwapExactAmountOutResponse") - proto.RegisterType((*QueryTotalLiquidityRequest)(nil), "osmosis.gamm.v1beta1.QueryTotalLiquidityRequest") - proto.RegisterType((*QueryTotalLiquidityResponse)(nil), "osmosis.gamm.v1beta1.QueryTotalLiquidityResponse") -} - -func init() { proto.RegisterFile("osmosis/gamm/v1beta1/query.proto", fileDescriptor_d9a717df9ca609ef) } - -var fileDescriptor_d9a717df9ca609ef = []byte{ - // 1788 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x58, 0x4b, 0x6c, 0x54, 0xd5, - 0x1b, 0xef, 0x99, 0x3e, 0xe8, 0x9c, 0xd2, 0xd7, 0xa1, 0xc0, 0x30, 0x2d, 0x33, 0xfc, 0xcf, 0x1f, - 0xda, 0x02, 0xed, 0x1d, 0x5a, 0x4a, 0x34, 0x55, 0x1e, 0x2d, 0xb4, 0x30, 0x8d, 0xd0, 0x7a, 0x21, - 0x10, 0x75, 0x31, 0xb9, 0x6d, 0x2f, 0xd3, 0x0b, 0x33, 0xf7, 0xdc, 0xce, 0x3d, 0x97, 0xb6, 0x31, - 0x84, 0x84, 0x18, 0xe3, 0xc2, 0x85, 0x09, 0xc2, 0xc2, 0x18, 0x75, 0x61, 0x8c, 0x61, 0x6d, 0xe2, - 0xca, 0x85, 0x31, 0x26, 0xc4, 0xc4, 0x04, 0xe3, 0xc6, 0xb8, 0x18, 0x0d, 0xe8, 0xce, 0x55, 0x37, - 0x2e, 0x35, 0xe7, 0x71, 0x1f, 0xf3, 0x7e, 0x28, 0x09, 0xae, 0x66, 0xee, 0xf9, 0x5e, 0xbf, 0xef, - 0x71, 0xbe, 0xf3, 0x9d, 0x03, 0x0f, 0x10, 0x3b, 0x4b, 0x6c, 0xc3, 0x4e, 0xa4, 0xb5, 0x6c, 0x36, - 0x71, 0x6b, 0x62, 0x59, 0xa7, 0xda, 0x44, 0x62, 0xdd, 0xd1, 0x73, 0x5b, 0x8a, 0x95, 0x23, 0x94, - 0xa0, 0x01, 0xc9, 0xa1, 0x30, 0x0e, 0x45, 0x72, 0x44, 0x07, 0xd2, 0x24, 0x4d, 0x38, 0x43, 0x82, - 0xfd, 0x13, 0xbc, 0xd1, 0xfd, 0x65, 0xb5, 0xd1, 0x4d, 0x49, 0x8e, 0xad, 0x70, 0x7a, 0x62, 0x59, - 0xb3, 0x75, 0x8f, 0xba, 0x42, 0x0c, 0x53, 0xd2, 0x8f, 0x04, 0xe9, 0x1c, 0x83, 0xc7, 0x65, 0x69, - 0x69, 0xc3, 0xd4, 0xa8, 0x41, 0x5c, 0xde, 0xa1, 0x34, 0x21, 0xe9, 0x8c, 0x9e, 0xd0, 0x2c, 0x23, - 0xa1, 0x99, 0x26, 0xa1, 0x9c, 0x68, 0x4b, 0xea, 0x3e, 0x49, 0xe5, 0x5f, 0xcb, 0xce, 0xf5, 0x84, - 0x66, 0x6e, 0xb9, 0x24, 0x61, 0x24, 0x25, 0xc0, 0x8b, 0x0f, 0x41, 0xc2, 0xa7, 0x61, 0xdf, 0xab, - 0xcc, 0xea, 0x12, 0x21, 0x19, 0x55, 0x5f, 0x77, 0x74, 0x9b, 0xa2, 0xa3, 0x70, 0x87, 0x45, 0x48, - 0x26, 0x65, 0xac, 0x46, 0xc0, 0x01, 0x30, 0xda, 0x36, 0x8b, 0xb6, 0xf3, 0xf1, 0x9e, 0x2d, 0x2d, - 0x9b, 0x99, 0xc6, 0x92, 0x80, 0xd5, 0x0e, 0xf6, 0x2f, 0xb9, 0x8a, 0x2f, 0xc0, 0xfe, 0x80, 0x02, - 0xdb, 0x22, 0xa6, 0xad, 0xa3, 0xe3, 0xb0, 0x8d, 0x91, 0xb9, 0x78, 0xd7, 0xe4, 0x80, 0x22, 0xa0, - 0x29, 0x2e, 0x34, 0x65, 0xc6, 0xdc, 0x9a, 0x0d, 0x7f, 0xf7, 0xc5, 0x78, 0x3b, 0x93, 0x4a, 0xaa, - 0x9c, 0x19, 0xbf, 0x11, 0xd0, 0x64, 0xbb, 0x58, 0xe6, 0x21, 0xf4, 0xe3, 0x10, 0x09, 0x71, 0x7d, - 0xc3, 0x8a, 0x74, 0x81, 0x05, 0x4d, 0x11, 0x89, 0x93, 0x41, 0x53, 0x96, 0xb4, 0xb4, 0x2e, 0x65, - 0xd5, 0x80, 0x24, 0x7e, 0x1f, 0x40, 0x14, 0xd4, 0x2e, 0x81, 0x9e, 0x80, 0xed, 0xcc, 0xb6, 0x1d, - 0x01, 0x07, 0x5a, 0xeb, 0x41, 0x2a, 0xb8, 0xd1, 0xf9, 0x32, 0xa8, 0x46, 0x6a, 0xa2, 0x12, 0x36, - 0x0b, 0x60, 0xed, 0x81, 0x03, 0x1c, 0xd5, 0x25, 0x27, 0x1b, 0x74, 0x1b, 0x2f, 0xc0, 0xdd, 0x45, - 0xeb, 0x12, 0xf0, 0x04, 0x0c, 0x9b, 0x4e, 0x36, 0xe5, 0x82, 0x66, 0xd9, 0x19, 0xd8, 0xce, 0xc7, - 0xfb, 0x44, 0x76, 0x3c, 0x12, 0x56, 0x3b, 0x4d, 0x29, 0x8a, 0xcf, 0x4a, 0x1b, 0xec, 0xeb, 0xca, - 0x96, 0xa5, 0x37, 0x95, 0x66, 0x17, 0x90, 0xaf, 0xc4, 0x07, 0xc4, 0x99, 0xe9, 0x96, 0xa5, 0x73, - 0x3d, 0xe1, 0x20, 0x20, 0x8f, 0x84, 0xd5, 0x4e, 0x4b, 0x8a, 0xe2, 0x2f, 0x01, 0x8c, 0x71, 0x65, - 0x67, 0xb5, 0xcc, 0xca, 0x02, 0x31, 0x4c, 0xa6, 0xf4, 0xf2, 0x9a, 0x96, 0xd3, 0xed, 0x66, 0xb0, - 0xa1, 0x35, 0x18, 0xa6, 0xe4, 0xa6, 0x6e, 0xda, 0x29, 0x83, 0x25, 0x83, 0x25, 0x72, 0x5f, 0x41, - 0x32, 0xdc, 0x34, 0x9c, 0x25, 0x86, 0x39, 0x7b, 0xec, 0x51, 0x3e, 0xde, 0xf2, 0xf0, 0x97, 0xf8, - 0x68, 0xda, 0xa0, 0x6b, 0xce, 0xb2, 0xb2, 0x42, 0xb2, 0x72, 0x4b, 0xc8, 0x9f, 0x71, 0x7b, 0xf5, - 0x66, 0x82, 0x61, 0xb6, 0xb9, 0x80, 0xad, 0x76, 0x0a, 0xed, 0x49, 0x13, 0xdf, 0x0d, 0xc1, 0x78, - 0x45, 0xe4, 0x32, 0x20, 0x36, 0xec, 0xb3, 0xd9, 0x4a, 0x8a, 0x38, 0x34, 0xa5, 0x65, 0x89, 0x63, - 0x52, 0x19, 0x97, 0x24, 0xb3, 0xfc, 0x73, 0x3e, 0x3e, 0x5c, 0x87, 0xe5, 0xa4, 0x49, 0xb7, 0xf3, - 0xf1, 0xbd, 0xc2, 0xe3, 0x62, 0x7d, 0x58, 0xed, 0xe1, 0x4b, 0x8b, 0x0e, 0x9d, 0xe1, 0x0b, 0xe8, - 0x06, 0x84, 0x32, 0x04, 0xc4, 0xa1, 0xcf, 0x22, 0x06, 0x32, 0xc2, 0x8b, 0x0e, 0xc5, 0x1f, 0x00, - 0x38, 0xe2, 0x05, 0x61, 0x6e, 0xd3, 0xa0, 0x2c, 0x08, 0x9c, 0x6b, 0x3e, 0x47, 0xb2, 0x85, 0x79, - 0xdc, 0x5b, 0x94, 0x47, 0x2f, 0x67, 0x57, 0x61, 0xaf, 0xf0, 0xca, 0x30, 0xdd, 0x20, 0x85, 0x78, - 0x90, 0x94, 0xc6, 0x82, 0xa4, 0x76, 0x73, 0x35, 0x49, 0x53, 0x04, 0x02, 0x3f, 0x00, 0x70, 0xb4, - 0x36, 0x38, 0x99, 0xaa, 0xc2, 0xa8, 0x81, 0x67, 0x1a, 0xb5, 0x39, 0xb8, 0xc7, 0xdb, 0x40, 0x4b, - 0x5a, 0x4e, 0xcb, 0x36, 0x55, 0xeb, 0xf8, 0x3c, 0xdc, 0x5b, 0xa2, 0x46, 0x7a, 0x33, 0x06, 0x3b, - 0x2c, 0xbe, 0x52, 0xad, 0xed, 0xaa, 0x92, 0x07, 0x5f, 0x94, 0x7b, 0xf0, 0x0a, 0xa1, 0x5a, 0x86, - 0x69, 0x7b, 0xc5, 0x58, 0x77, 0x8c, 0x55, 0x83, 0x6e, 0x35, 0x85, 0xeb, 0x13, 0x20, 0x77, 0x46, - 0x39, 0x7d, 0x12, 0xe0, 0x6d, 0x18, 0xce, 0xb8, 0x8b, 0xb5, 0xa3, 0x7d, 0x8e, 0x45, 0xdb, 0xef, - 0x24, 0x9e, 0x24, 0x6e, 0x2c, 0x03, 0xbe, 0xdc, 0xbc, 0x0c, 0x1d, 0x47, 0xd8, 0x7c, 0xbb, 0xc1, - 0x0e, 0x8c, 0x94, 0xea, 0x91, 0x2e, 0xbe, 0x06, 0x77, 0x52, 0xb6, 0x9c, 0xe2, 0x55, 0xe9, 0x66, - 0xa2, 0x8a, 0x97, 0x83, 0xd2, 0xcb, 0x5d, 0xc2, 0x58, 0x50, 0x18, 0xab, 0x5d, 0xd4, 0x37, 0x81, - 0xbf, 0x02, 0xf0, 0x60, 0x49, 0xef, 0xb9, 0x44, 0x2e, 0x6f, 0x68, 0xd6, 0x7f, 0xa2, 0x77, 0xfe, - 0x09, 0xe0, 0xa1, 0x1a, 0xf8, 0x65, 0x10, 0xef, 0x34, 0xb6, 0x2d, 0xe7, 0x64, 0x08, 0xfb, 0xdd, - 0x10, 0xba, 0xa2, 0xb8, 0xc9, 0xbd, 0x8a, 0x2e, 0x42, 0x28, 0x52, 0x20, 0xbb, 0x69, 0x33, 0x7d, - 0x29, 0x2c, 0x34, 0xb0, 0xad, 0xff, 0x07, 0x90, 0x87, 0xe7, 0x65, 0x8b, 0xd0, 0xa5, 0x9c, 0xb1, - 0xd2, 0xd4, 0x11, 0x8c, 0xe6, 0x60, 0x1f, 0x73, 0x3e, 0xa5, 0xd9, 0xb6, 0x4e, 0x53, 0xab, 0xba, - 0x49, 0xb2, 0x12, 0xdb, 0xa0, 0x7f, 0x54, 0x14, 0x73, 0x60, 0xb5, 0x87, 0x2d, 0xcd, 0xb0, 0x95, - 0x73, 0x6c, 0x01, 0x5d, 0x80, 0xfd, 0xeb, 0x0e, 0xa1, 0x85, 0x7a, 0x5a, 0xb9, 0x9e, 0xa1, 0xed, - 0x7c, 0x3c, 0x22, 0xf4, 0x94, 0xb0, 0x60, 0xb5, 0x97, 0xaf, 0xf9, 0x9a, 0xa6, 0x43, 0x11, 0xb0, - 0xd0, 0xd6, 0xd9, 0xd6, 0xd7, 0xae, 0x76, 0x6d, 0x18, 0x74, 0x8d, 0x65, 0x72, 0x5e, 0xd7, 0xf1, - 0xd7, 0x00, 0x0e, 0xfa, 0xa3, 0xd6, 0x35, 0x83, 0xae, 0xcd, 0x1b, 0x19, 0xaa, 0xe7, 0x5c, 0xa7, - 0x4f, 0xc2, 0xee, 0xac, 0x61, 0xa6, 0x82, 0xad, 0x80, 0x19, 0x8f, 0x6c, 0xe7, 0xe3, 0x03, 0xc2, - 0x78, 0x01, 0x19, 0xab, 0x3b, 0xb3, 0x86, 0xe9, 0x75, 0x13, 0x34, 0x18, 0x1c, 0x38, 0xb8, 0xff, - 0xfe, 0x68, 0x51, 0x34, 0x2e, 0xb6, 0x36, 0x3d, 0x2e, 0x7e, 0x04, 0xe0, 0x50, 0x79, 0x1f, 0x9e, - 0x93, 0xc1, 0x51, 0x95, 0xc7, 0x49, 0xa0, 0xa4, 0x24, 0xb2, 0x29, 0x08, 0x6d, 0x8b, 0xd0, 0x94, - 0xc5, 0x56, 0x65, 0x6c, 0x77, 0xfb, 0xdb, 0xc3, 0xa7, 0x61, 0x35, 0x6c, 0xbb, 0xd2, 0x2c, 0x97, - 0xf8, 0x2f, 0x00, 0xf7, 0x0b, 0xa5, 0x1b, 0x9a, 0x35, 0xb7, 0xa9, 0xad, 0xc8, 0xe9, 0x22, 0x69, - 0xba, 0xa9, 0x3b, 0x0c, 0x3b, 0x6c, 0xdd, 0x5c, 0xd5, 0x73, 0x52, 0x6f, 0xff, 0x76, 0x3e, 0xde, - 0x2d, 0xf5, 0xf2, 0x75, 0xac, 0x4a, 0x86, 0x60, 0x69, 0x87, 0x6a, 0x96, 0xb6, 0x02, 0x45, 0x9f, - 0x60, 0x4d, 0x48, 0x94, 0xe2, 0xae, 0xed, 0x7c, 0xbc, 0x37, 0xb0, 0xa1, 0x53, 0x86, 0x89, 0xd5, - 0x1d, 0xfc, 0x6f, 0xd2, 0x44, 0x57, 0x61, 0x47, 0x8e, 0x38, 0x54, 0xb7, 0x23, 0x6d, 0x3c, 0xfc, - 0x23, 0x4a, 0xb9, 0x1b, 0x9b, 0xc2, 0xfc, 0xf0, 0x5c, 0x60, 0xfc, 0xb3, 0xbb, 0x65, 0xaf, 0x90, - 0xa0, 0x85, 0x12, 0xac, 0x4a, 0x6d, 0xf8, 0xbe, 0x3b, 0x99, 0x96, 0x89, 0x80, 0x3f, 0xde, 0x09, - 0x40, 0xff, 0xde, 0x78, 0x57, 0xac, 0x0f, 0xab, 0x3d, 0x7c, 0xc9, 0x1b, 0xef, 0xf0, 0x5b, 0xa1, - 0xf2, 0xb8, 0x16, 0x1d, 0xfa, 0xac, 0x53, 0x73, 0xcd, 0x0b, 0x75, 0x2b, 0x0f, 0xf5, 0x68, 0xad, - 0x50, 0x33, 0x4c, 0x75, 0xc4, 0x9a, 0x5d, 0x1c, 0x3c, 0xc7, 0x23, 0x6d, 0xc5, 0x17, 0x07, 0x8f, - 0x84, 0xe5, 0x11, 0xc2, 0x1a, 0xe9, 0x3d, 0x77, 0xc8, 0x28, 0x17, 0x06, 0x99, 0x1f, 0x0b, 0xf6, - 0xba, 0x05, 0x53, 0x98, 0x9e, 0x0b, 0x0d, 0xa7, 0x67, 0x4f, 0x61, 0xfd, 0x79, 0xd9, 0xe9, 0x96, - 0x65, 0x28, 0x93, 0x33, 0x04, 0xa3, 0xfe, 0x3c, 0x50, 0x3c, 0x45, 0xe1, 0x0f, 0xdd, 0x6e, 0x58, - 0x4c, 0x7e, 0x2e, 0x86, 0xa2, 0xc9, 0x87, 0x03, 0xb0, 0x9d, 0xc3, 0x43, 0x77, 0x20, 0x6f, 0x55, - 0x36, 0xaa, 0xb0, 0x99, 0x4a, 0xee, 0xe6, 0xd1, 0xd1, 0xda, 0x8c, 0xc2, 0x49, 0xfc, 0xff, 0xbb, - 0x3f, 0xfe, 0x76, 0x2f, 0xb4, 0x1f, 0x0d, 0x26, 0xca, 0xbe, 0x96, 0x88, 0xde, 0xf8, 0x2e, 0x80, - 0x9d, 0xee, 0x7d, 0x17, 0x1d, 0xa9, 0xa2, 0xbb, 0xe8, 0xb2, 0x1c, 0x3d, 0x5a, 0x17, 0xaf, 0x84, - 0x32, 0xc2, 0xa1, 0xfc, 0x0f, 0xc5, 0xcb, 0x43, 0xf1, 0x6e, 0xd0, 0xe8, 0x53, 0x00, 0x7b, 0x0a, - 0x73, 0x86, 0x8e, 0x55, 0x31, 0x54, 0x36, 0xfb, 0xd1, 0x89, 0x06, 0x24, 0x24, 0xc0, 0x71, 0x0e, - 0x70, 0x04, 0x1d, 0x2a, 0x0f, 0x50, 0x4c, 0x88, 0x5e, 0x02, 0xd1, 0x67, 0x00, 0xf6, 0x16, 0x1d, - 0x52, 0x68, 0xa2, 0x56, 0x62, 0x4a, 0x0e, 0xe5, 0xe8, 0x64, 0x23, 0x22, 0x12, 0xe9, 0x18, 0x47, - 0x3a, 0x8c, 0x0e, 0x96, 0x47, 0x7a, 0x9d, 0x73, 0xeb, 0xab, 0x32, 0x9e, 0x6f, 0x03, 0xd8, 0xc6, - 0x34, 0xa1, 0xe1, 0x1a, 0xa6, 0x5c, 0x48, 0x23, 0x35, 0xf9, 0xea, 0x8b, 0x18, 0x37, 0x9f, 0x78, - 0x53, 0x76, 0xb6, 0xdb, 0xe8, 0x01, 0x80, 0x9d, 0xee, 0x33, 0x46, 0xd5, 0x3a, 0x2b, 0x7a, 0x30, - 0xa9, 0x5a, 0x67, 0xc5, 0xef, 0x22, 0x78, 0x82, 0x83, 0x3a, 0x8a, 0x0e, 0x57, 0x06, 0xc5, 0x47, - 0x98, 0x00, 0xb0, 0xfb, 0x00, 0x46, 0x2a, 0x0d, 0xc7, 0x68, 0xba, 0x8a, 0xf1, 0x1a, 0x37, 0x82, - 0xe8, 0x4b, 0x4d, 0xc9, 0x4a, 0x47, 0x5a, 0xd0, 0x37, 0x00, 0xa2, 0xd2, 0x07, 0x0f, 0x34, 0x55, - 0xa7, 0xd6, 0x42, 0x2c, 0x27, 0x1a, 0x94, 0x92, 0x28, 0xce, 0xf0, 0x70, 0x4e, 0xa3, 0x17, 0xeb, - 0xca, 0x71, 0xe2, 0x06, 0x31, 0xcc, 0x94, 0xbd, 0xa1, 0x59, 0x29, 0x9d, 0x1d, 0x13, 0x29, 0xc3, - 0x44, 0xbf, 0x03, 0x38, 0x58, 0xe5, 0x51, 0x00, 0x9d, 0xac, 0x01, 0xac, 0xfa, 0x4b, 0x47, 0xf4, - 0x54, 0xb3, 0xe2, 0xd2, 0xc1, 0xf3, 0xdc, 0xc1, 0x19, 0x74, 0xba, 0x3e, 0x07, 0xf5, 0x4d, 0x83, - 0x0a, 0x07, 0xc5, 0x33, 0x8a, 0x38, 0x9b, 0x98, 0x9f, 0x1f, 0x03, 0x08, 0xfd, 0xd7, 0x01, 0x34, - 0x56, 0xa3, 0x68, 0x0b, 0xde, 0x22, 0xa2, 0xe3, 0x75, 0x72, 0x4b, 0xd0, 0x53, 0x1c, 0xb4, 0x82, - 0xc6, 0xea, 0x03, 0x2d, 0x9e, 0x1e, 0xd0, 0xb7, 0x00, 0xa2, 0xd2, 0x67, 0x82, 0xaa, 0xf5, 0x54, - 0xf1, 0x95, 0xa2, 0x6a, 0x3d, 0x55, 0x7e, 0x8b, 0xc0, 0xb3, 0x1c, 0xf9, 0xcb, 0x68, 0xba, 0x3e, - 0xe4, 0xa2, 0xeb, 0xf2, 0x4f, 0xbf, 0xf5, 0x7e, 0x0e, 0x60, 0x57, 0xe0, 0x11, 0x00, 0x8d, 0xd7, - 0x82, 0x52, 0x58, 0x31, 0x4a, 0xbd, 0xec, 0x12, 0xf2, 0x34, 0x87, 0x3c, 0x85, 0x26, 0x1b, 0x81, - 0x2c, 0x6e, 0xa1, 0xac, 0x28, 0xc2, 0xde, 0x55, 0x01, 0x55, 0x6b, 0x64, 0xc5, 0x77, 0xd4, 0xe8, - 0x58, 0x7d, 0xcc, 0x12, 0xe4, 0x0b, 0x0d, 0x56, 0x04, 0x13, 0xb6, 0xdf, 0x09, 0x01, 0xf4, 0x3d, - 0x80, 0xfb, 0xe6, 0x6c, 0x6a, 0x64, 0x35, 0xaa, 0x97, 0x4c, 0xdf, 0xe8, 0x78, 0x35, 0x10, 0x15, - 0x6e, 0x2b, 0xd1, 0xa9, 0xc6, 0x84, 0xa4, 0x07, 0x73, 0xdc, 0x83, 0xd3, 0xe8, 0x64, 0x79, 0x0f, - 0x02, 0x5b, 0x50, 0xa2, 0x4d, 0x04, 0xfa, 0x8c, 0xbf, 0x0d, 0x7f, 0x00, 0x30, 0x5a, 0xc1, 0x9f, - 0x45, 0x87, 0xa2, 0x06, 0xb0, 0xf9, 0x43, 0x7e, 0xd5, 0x62, 0xaf, 0x3c, 0x13, 0xe3, 0x79, 0xee, - 0xd2, 0x19, 0x74, 0xea, 0x1f, 0xb8, 0x44, 0x1c, 0x3a, 0xbb, 0xf0, 0xe8, 0x49, 0x0c, 0x3c, 0x7e, - 0x12, 0x03, 0xbf, 0x3e, 0x89, 0x81, 0xf7, 0x9e, 0xc6, 0x5a, 0x1e, 0x3f, 0x8d, 0xb5, 0xfc, 0xf4, - 0x34, 0xd6, 0xf2, 0xfa, 0xb1, 0xc0, 0xec, 0x29, 0x6d, 0x8c, 0x67, 0xb4, 0x65, 0xdb, 0x33, 0x78, - 0x6b, 0x62, 0x2a, 0xb1, 0x29, 0xcc, 0xf2, 0x49, 0x74, 0xb9, 0x83, 0xdf, 0x94, 0x8f, 0xff, 0x1d, - 0x00, 0x00, 0xff, 0xff, 0xa7, 0x83, 0x77, 0x41, 0x8e, 0x1b, 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 - -// QueryClient is the client API for Query service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type QueryClient interface { - Pools(ctx context.Context, in *QueryPoolsRequest, opts ...grpc.CallOption) (*QueryPoolsResponse, error) - NumPools(ctx context.Context, in *QueryNumPoolsRequest, opts ...grpc.CallOption) (*QueryNumPoolsResponse, error) - TotalLiquidity(ctx context.Context, in *QueryTotalLiquidityRequest, opts ...grpc.CallOption) (*QueryTotalLiquidityResponse, error) - // PoolsWithFilter allows you to query specific pools with requested - // parameters - PoolsWithFilter(ctx context.Context, in *QueryPoolsWithFilterRequest, opts ...grpc.CallOption) (*QueryPoolsWithFilterResponse, error) - // Per Pool gRPC Endpoints - Pool(ctx context.Context, in *QueryPoolRequest, opts ...grpc.CallOption) (*QueryPoolResponse, error) - // PoolType returns the type of the pool. - // Returns "Balancer" as a string literal when the pool is a balancer pool. - // Errors if the pool is failed to be type caseted. - PoolType(ctx context.Context, in *QueryPoolTypeRequest, opts ...grpc.CallOption) (*QueryPoolTypeResponse, error) - // Simulates joining pool without a swap. Returns the amount of shares you'd - // get and tokens needed to provide - CalcJoinPoolNoSwapShares(ctx context.Context, in *QueryCalcJoinPoolNoSwapSharesRequest, opts ...grpc.CallOption) (*QueryCalcJoinPoolNoSwapSharesResponse, error) - CalcJoinPoolShares(ctx context.Context, in *QueryCalcJoinPoolSharesRequest, opts ...grpc.CallOption) (*QueryCalcJoinPoolSharesResponse, error) - CalcExitPoolCoinsFromShares(ctx context.Context, in *QueryCalcExitPoolCoinsFromSharesRequest, opts ...grpc.CallOption) (*QueryCalcExitPoolCoinsFromSharesResponse, error) - PoolParams(ctx context.Context, in *QueryPoolParamsRequest, opts ...grpc.CallOption) (*QueryPoolParamsResponse, error) - TotalPoolLiquidity(ctx context.Context, in *QueryTotalPoolLiquidityRequest, opts ...grpc.CallOption) (*QueryTotalPoolLiquidityResponse, error) - TotalShares(ctx context.Context, in *QueryTotalSharesRequest, opts ...grpc.CallOption) (*QueryTotalSharesResponse, error) - // SpotPrice defines a gRPC query handler that returns the spot price given - // a base denomination and a quote denomination. - SpotPrice(ctx context.Context, in *QuerySpotPriceRequest, opts ...grpc.CallOption) (*QuerySpotPriceResponse, error) - // Estimate the swap. - EstimateSwapExactAmountIn(ctx context.Context, in *QuerySwapExactAmountInRequest, opts ...grpc.CallOption) (*QuerySwapExactAmountInResponse, error) - EstimateSwapExactAmountOut(ctx context.Context, in *QuerySwapExactAmountOutRequest, opts ...grpc.CallOption) (*QuerySwapExactAmountOutResponse, error) -} - -type queryClient struct { - cc grpc1.ClientConn -} - -func NewQueryClient(cc grpc1.ClientConn) QueryClient { - return &queryClient{cc} -} - -func (c *queryClient) Pools(ctx context.Context, in *QueryPoolsRequest, opts ...grpc.CallOption) (*QueryPoolsResponse, error) { - out := new(QueryPoolsResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/Pools", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *queryClient) NumPools(ctx context.Context, in *QueryNumPoolsRequest, opts ...grpc.CallOption) (*QueryNumPoolsResponse, error) { - out := new(QueryNumPoolsResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/NumPools", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *queryClient) TotalLiquidity(ctx context.Context, in *QueryTotalLiquidityRequest, opts ...grpc.CallOption) (*QueryTotalLiquidityResponse, error) { - out := new(QueryTotalLiquidityResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/TotalLiquidity", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *queryClient) PoolsWithFilter(ctx context.Context, in *QueryPoolsWithFilterRequest, opts ...grpc.CallOption) (*QueryPoolsWithFilterResponse, error) { - out := new(QueryPoolsWithFilterResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/PoolsWithFilter", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *queryClient) Pool(ctx context.Context, in *QueryPoolRequest, opts ...grpc.CallOption) (*QueryPoolResponse, error) { - out := new(QueryPoolResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/Pool", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *queryClient) PoolType(ctx context.Context, in *QueryPoolTypeRequest, opts ...grpc.CallOption) (*QueryPoolTypeResponse, error) { - out := new(QueryPoolTypeResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/PoolType", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *queryClient) CalcJoinPoolNoSwapShares(ctx context.Context, in *QueryCalcJoinPoolNoSwapSharesRequest, opts ...grpc.CallOption) (*QueryCalcJoinPoolNoSwapSharesResponse, error) { - out := new(QueryCalcJoinPoolNoSwapSharesResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/CalcJoinPoolNoSwapShares", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *queryClient) CalcJoinPoolShares(ctx context.Context, in *QueryCalcJoinPoolSharesRequest, opts ...grpc.CallOption) (*QueryCalcJoinPoolSharesResponse, error) { - out := new(QueryCalcJoinPoolSharesResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/CalcJoinPoolShares", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *queryClient) CalcExitPoolCoinsFromShares(ctx context.Context, in *QueryCalcExitPoolCoinsFromSharesRequest, opts ...grpc.CallOption) (*QueryCalcExitPoolCoinsFromSharesResponse, error) { - out := new(QueryCalcExitPoolCoinsFromSharesResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/CalcExitPoolCoinsFromShares", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *queryClient) PoolParams(ctx context.Context, in *QueryPoolParamsRequest, opts ...grpc.CallOption) (*QueryPoolParamsResponse, error) { - out := new(QueryPoolParamsResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/PoolParams", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *queryClient) TotalPoolLiquidity(ctx context.Context, in *QueryTotalPoolLiquidityRequest, opts ...grpc.CallOption) (*QueryTotalPoolLiquidityResponse, error) { - out := new(QueryTotalPoolLiquidityResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/TotalPoolLiquidity", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *queryClient) TotalShares(ctx context.Context, in *QueryTotalSharesRequest, opts ...grpc.CallOption) (*QueryTotalSharesResponse, error) { - out := new(QueryTotalSharesResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/TotalShares", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// Deprecated: Do not use. -func (c *queryClient) SpotPrice(ctx context.Context, in *QuerySpotPriceRequest, opts ...grpc.CallOption) (*QuerySpotPriceResponse, error) { - out := new(QuerySpotPriceResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/SpotPrice", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *queryClient) EstimateSwapExactAmountIn(ctx context.Context, in *QuerySwapExactAmountInRequest, opts ...grpc.CallOption) (*QuerySwapExactAmountInResponse, error) { - out := new(QuerySwapExactAmountInResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/EstimateSwapExactAmountIn", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *queryClient) EstimateSwapExactAmountOut(ctx context.Context, in *QuerySwapExactAmountOutRequest, opts ...grpc.CallOption) (*QuerySwapExactAmountOutResponse, error) { - out := new(QuerySwapExactAmountOutResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/EstimateSwapExactAmountOut", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// QueryServer is the server API for Query service. -type QueryServer interface { - Pools(context.Context, *QueryPoolsRequest) (*QueryPoolsResponse, error) - NumPools(context.Context, *QueryNumPoolsRequest) (*QueryNumPoolsResponse, error) - TotalLiquidity(context.Context, *QueryTotalLiquidityRequest) (*QueryTotalLiquidityResponse, error) - // PoolsWithFilter allows you to query specific pools with requested - // parameters - PoolsWithFilter(context.Context, *QueryPoolsWithFilterRequest) (*QueryPoolsWithFilterResponse, error) - // Per Pool gRPC Endpoints - Pool(context.Context, *QueryPoolRequest) (*QueryPoolResponse, error) - // PoolType returns the type of the pool. - // Returns "Balancer" as a string literal when the pool is a balancer pool. - // Errors if the pool is failed to be type caseted. - PoolType(context.Context, *QueryPoolTypeRequest) (*QueryPoolTypeResponse, error) - // Simulates joining pool without a swap. Returns the amount of shares you'd - // get and tokens needed to provide - CalcJoinPoolNoSwapShares(context.Context, *QueryCalcJoinPoolNoSwapSharesRequest) (*QueryCalcJoinPoolNoSwapSharesResponse, error) - CalcJoinPoolShares(context.Context, *QueryCalcJoinPoolSharesRequest) (*QueryCalcJoinPoolSharesResponse, error) - CalcExitPoolCoinsFromShares(context.Context, *QueryCalcExitPoolCoinsFromSharesRequest) (*QueryCalcExitPoolCoinsFromSharesResponse, error) - PoolParams(context.Context, *QueryPoolParamsRequest) (*QueryPoolParamsResponse, error) - TotalPoolLiquidity(context.Context, *QueryTotalPoolLiquidityRequest) (*QueryTotalPoolLiquidityResponse, error) - TotalShares(context.Context, *QueryTotalSharesRequest) (*QueryTotalSharesResponse, error) - // SpotPrice defines a gRPC query handler that returns the spot price given - // a base denomination and a quote denomination. - SpotPrice(context.Context, *QuerySpotPriceRequest) (*QuerySpotPriceResponse, error) - // Estimate the swap. - EstimateSwapExactAmountIn(context.Context, *QuerySwapExactAmountInRequest) (*QuerySwapExactAmountInResponse, error) - EstimateSwapExactAmountOut(context.Context, *QuerySwapExactAmountOutRequest) (*QuerySwapExactAmountOutResponse, error) -} - -// UnimplementedQueryServer can be embedded to have forward compatible implementations. -type UnimplementedQueryServer struct { -} - -func (*UnimplementedQueryServer) Pools(ctx context.Context, req *QueryPoolsRequest) (*QueryPoolsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Pools not implemented") -} -func (*UnimplementedQueryServer) NumPools(ctx context.Context, req *QueryNumPoolsRequest) (*QueryNumPoolsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method NumPools not implemented") -} -func (*UnimplementedQueryServer) TotalLiquidity(ctx context.Context, req *QueryTotalLiquidityRequest) (*QueryTotalLiquidityResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method TotalLiquidity not implemented") -} -func (*UnimplementedQueryServer) PoolsWithFilter(ctx context.Context, req *QueryPoolsWithFilterRequest) (*QueryPoolsWithFilterResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PoolsWithFilter not implemented") -} -func (*UnimplementedQueryServer) Pool(ctx context.Context, req *QueryPoolRequest) (*QueryPoolResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Pool not implemented") -} -func (*UnimplementedQueryServer) PoolType(ctx context.Context, req *QueryPoolTypeRequest) (*QueryPoolTypeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PoolType not implemented") -} -func (*UnimplementedQueryServer) CalcJoinPoolNoSwapShares(ctx context.Context, req *QueryCalcJoinPoolNoSwapSharesRequest) (*QueryCalcJoinPoolNoSwapSharesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CalcJoinPoolNoSwapShares not implemented") -} -func (*UnimplementedQueryServer) CalcJoinPoolShares(ctx context.Context, req *QueryCalcJoinPoolSharesRequest) (*QueryCalcJoinPoolSharesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CalcJoinPoolShares not implemented") -} -func (*UnimplementedQueryServer) CalcExitPoolCoinsFromShares(ctx context.Context, req *QueryCalcExitPoolCoinsFromSharesRequest) (*QueryCalcExitPoolCoinsFromSharesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CalcExitPoolCoinsFromShares not implemented") -} -func (*UnimplementedQueryServer) PoolParams(ctx context.Context, req *QueryPoolParamsRequest) (*QueryPoolParamsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PoolParams not implemented") -} -func (*UnimplementedQueryServer) TotalPoolLiquidity(ctx context.Context, req *QueryTotalPoolLiquidityRequest) (*QueryTotalPoolLiquidityResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method TotalPoolLiquidity not implemented") -} -func (*UnimplementedQueryServer) TotalShares(ctx context.Context, req *QueryTotalSharesRequest) (*QueryTotalSharesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method TotalShares not implemented") -} -func (*UnimplementedQueryServer) SpotPrice(ctx context.Context, req *QuerySpotPriceRequest) (*QuerySpotPriceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SpotPrice not implemented") -} -func (*UnimplementedQueryServer) EstimateSwapExactAmountIn(ctx context.Context, req *QuerySwapExactAmountInRequest) (*QuerySwapExactAmountInResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method EstimateSwapExactAmountIn not implemented") -} -func (*UnimplementedQueryServer) EstimateSwapExactAmountOut(ctx context.Context, req *QuerySwapExactAmountOutRequest) (*QuerySwapExactAmountOutResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method EstimateSwapExactAmountOut not implemented") -} - -func RegisterQueryServer(s grpc1.Server, srv QueryServer) { - s.RegisterService(&_Query_serviceDesc, srv) -} - -func _Query_Pools_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryPoolsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).Pools(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/Pools", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Pools(ctx, req.(*QueryPoolsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_NumPools_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryNumPoolsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).NumPools(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/NumPools", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).NumPools(ctx, req.(*QueryNumPoolsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_TotalLiquidity_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryTotalLiquidityRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).TotalLiquidity(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/TotalLiquidity", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).TotalLiquidity(ctx, req.(*QueryTotalLiquidityRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_PoolsWithFilter_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryPoolsWithFilterRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).PoolsWithFilter(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/PoolsWithFilter", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).PoolsWithFilter(ctx, req.(*QueryPoolsWithFilterRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_Pool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryPoolRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).Pool(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/Pool", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Pool(ctx, req.(*QueryPoolRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_PoolType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryPoolTypeRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).PoolType(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/PoolType", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).PoolType(ctx, req.(*QueryPoolTypeRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_CalcJoinPoolNoSwapShares_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryCalcJoinPoolNoSwapSharesRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).CalcJoinPoolNoSwapShares(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/CalcJoinPoolNoSwapShares", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).CalcJoinPoolNoSwapShares(ctx, req.(*QueryCalcJoinPoolNoSwapSharesRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_CalcJoinPoolShares_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryCalcJoinPoolSharesRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).CalcJoinPoolShares(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/CalcJoinPoolShares", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).CalcJoinPoolShares(ctx, req.(*QueryCalcJoinPoolSharesRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_CalcExitPoolCoinsFromShares_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryCalcExitPoolCoinsFromSharesRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).CalcExitPoolCoinsFromShares(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/CalcExitPoolCoinsFromShares", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).CalcExitPoolCoinsFromShares(ctx, req.(*QueryCalcExitPoolCoinsFromSharesRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_PoolParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryPoolParamsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).PoolParams(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/PoolParams", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).PoolParams(ctx, req.(*QueryPoolParamsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_TotalPoolLiquidity_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryTotalPoolLiquidityRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).TotalPoolLiquidity(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/TotalPoolLiquidity", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).TotalPoolLiquidity(ctx, req.(*QueryTotalPoolLiquidityRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_TotalShares_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryTotalSharesRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).TotalShares(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/TotalShares", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).TotalShares(ctx, req.(*QueryTotalSharesRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_SpotPrice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QuerySpotPriceRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).SpotPrice(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/SpotPrice", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).SpotPrice(ctx, req.(*QuerySpotPriceRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_EstimateSwapExactAmountIn_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QuerySwapExactAmountInRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).EstimateSwapExactAmountIn(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/EstimateSwapExactAmountIn", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).EstimateSwapExactAmountIn(ctx, req.(*QuerySwapExactAmountInRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_EstimateSwapExactAmountOut_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QuerySwapExactAmountOutRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).EstimateSwapExactAmountOut(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/EstimateSwapExactAmountOut", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).EstimateSwapExactAmountOut(ctx, req.(*QuerySwapExactAmountOutRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "osmosis.gamm.v1beta1.Query", - HandlerType: (*QueryServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Pools", - Handler: _Query_Pools_Handler, - }, - { - MethodName: "NumPools", - Handler: _Query_NumPools_Handler, - }, - { - MethodName: "TotalLiquidity", - Handler: _Query_TotalLiquidity_Handler, - }, - { - MethodName: "PoolsWithFilter", - Handler: _Query_PoolsWithFilter_Handler, - }, - { - MethodName: "Pool", - Handler: _Query_Pool_Handler, - }, - { - MethodName: "PoolType", - Handler: _Query_PoolType_Handler, - }, - { - MethodName: "CalcJoinPoolNoSwapShares", - Handler: _Query_CalcJoinPoolNoSwapShares_Handler, - }, - { - MethodName: "CalcJoinPoolShares", - Handler: _Query_CalcJoinPoolShares_Handler, - }, - { - MethodName: "CalcExitPoolCoinsFromShares", - Handler: _Query_CalcExitPoolCoinsFromShares_Handler, - }, - { - MethodName: "PoolParams", - Handler: _Query_PoolParams_Handler, - }, - { - MethodName: "TotalPoolLiquidity", - Handler: _Query_TotalPoolLiquidity_Handler, - }, - { - MethodName: "TotalShares", - Handler: _Query_TotalShares_Handler, - }, - { - MethodName: "SpotPrice", - Handler: _Query_SpotPrice_Handler, - }, - { - MethodName: "EstimateSwapExactAmountIn", - Handler: _Query_EstimateSwapExactAmountIn_Handler, - }, - { - MethodName: "EstimateSwapExactAmountOut", - Handler: _Query_EstimateSwapExactAmountOut_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "osmosis/gamm/v1beta1/query.proto", -} - -func (m *QueryPoolRequest) 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 *QueryPoolRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryPoolRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.PoolId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *QueryPoolResponse) 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 *QueryPoolResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pool != nil { - { - size, err := m.Pool.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *QueryPoolsRequest) 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 *QueryPoolsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryPoolsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - return len(dAtA) - i, nil -} - -func (m *QueryPoolsResponse) 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 *QueryPoolsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryPoolsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.Pools) > 0 { - for iNdEx := len(m.Pools) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Pools[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *QueryNumPoolsRequest) 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 *QueryNumPoolsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryNumPoolsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *QueryNumPoolsResponse) 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 *QueryNumPoolsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryNumPoolsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.NumPools != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.NumPools)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *QueryPoolTypeRequest) 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 *QueryPoolTypeRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryPoolTypeRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.PoolId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *QueryPoolTypeResponse) 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 *QueryPoolTypeResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryPoolTypeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.PoolType) > 0 { - i -= len(m.PoolType) - copy(dAtA[i:], m.PoolType) - i = encodeVarintQuery(dAtA, i, uint64(len(m.PoolType))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *QueryCalcJoinPoolSharesRequest) 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 *QueryCalcJoinPoolSharesRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryCalcJoinPoolSharesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TokensIn) > 0 { - for iNdEx := len(m.TokensIn) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.TokensIn[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - if m.PoolId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *QueryCalcJoinPoolSharesResponse) 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 *QueryCalcJoinPoolSharesResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryCalcJoinPoolSharesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TokensOut) > 0 { - for iNdEx := len(m.TokensOut) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.TokensOut[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - { - size := m.ShareOutAmount.Size() - i -= size - if _, err := m.ShareOutAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *QueryCalcExitPoolCoinsFromSharesRequest) 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 *QueryCalcExitPoolCoinsFromSharesRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryCalcExitPoolCoinsFromSharesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.ShareInAmount.Size() - i -= size - if _, err := m.ShareInAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - if m.PoolId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *QueryCalcExitPoolCoinsFromSharesResponse) 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 *QueryCalcExitPoolCoinsFromSharesResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryCalcExitPoolCoinsFromSharesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TokensOut) > 0 { - for iNdEx := len(m.TokensOut) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.TokensOut[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *QueryPoolParamsRequest) 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 *QueryPoolParamsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryPoolParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.PoolId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *QueryPoolParamsResponse) 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 *QueryPoolParamsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryPoolParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Params != nil { - { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *QueryTotalPoolLiquidityRequest) 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 *QueryTotalPoolLiquidityRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryTotalPoolLiquidityRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.PoolId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *QueryTotalPoolLiquidityResponse) 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 *QueryTotalPoolLiquidityResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryTotalPoolLiquidityResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Liquidity) > 0 { - for iNdEx := len(m.Liquidity) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Liquidity[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *QueryTotalSharesRequest) 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 *QueryTotalSharesRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryTotalSharesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.PoolId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *QueryTotalSharesResponse) 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 *QueryTotalSharesResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryTotalSharesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.TotalShares.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *QueryCalcJoinPoolNoSwapSharesRequest) 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 *QueryCalcJoinPoolNoSwapSharesRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryCalcJoinPoolNoSwapSharesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TokensIn) > 0 { - for iNdEx := len(m.TokensIn) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.TokensIn[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - if m.PoolId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *QueryCalcJoinPoolNoSwapSharesResponse) 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 *QueryCalcJoinPoolNoSwapSharesResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryCalcJoinPoolNoSwapSharesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.SharesOut.Size() - i -= size - if _, err := m.SharesOut.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - if len(m.TokensOut) > 0 { - for iNdEx := len(m.TokensOut) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.TokensOut[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *QuerySpotPriceRequest) 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 *QuerySpotPriceRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QuerySpotPriceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.QuoteAssetDenom) > 0 { - i -= len(m.QuoteAssetDenom) - copy(dAtA[i:], m.QuoteAssetDenom) - i = encodeVarintQuery(dAtA, i, uint64(len(m.QuoteAssetDenom))) - i-- - dAtA[i] = 0x1a - } - if len(m.BaseAssetDenom) > 0 { - i -= len(m.BaseAssetDenom) - copy(dAtA[i:], m.BaseAssetDenom) - i = encodeVarintQuery(dAtA, i, uint64(len(m.BaseAssetDenom))) - i-- - dAtA[i] = 0x12 - } - if m.PoolId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *QueryPoolsWithFilterRequest) 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 *QueryPoolsWithFilterRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryPoolsWithFilterRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if len(m.PoolType) > 0 { - i -= len(m.PoolType) - copy(dAtA[i:], m.PoolType) - i = encodeVarintQuery(dAtA, i, uint64(len(m.PoolType))) - i-- - dAtA[i] = 0x12 - } - if len(m.MinLiquidity) > 0 { - i -= len(m.MinLiquidity) - copy(dAtA[i:], m.MinLiquidity) - i = encodeVarintQuery(dAtA, i, uint64(len(m.MinLiquidity))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *QueryPoolsWithFilterResponse) 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 *QueryPoolsWithFilterResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryPoolsWithFilterResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.Pools) > 0 { - for iNdEx := len(m.Pools) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Pools[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *QuerySpotPriceResponse) 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 *QuerySpotPriceResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QuerySpotPriceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.SpotPrice) > 0 { - i -= len(m.SpotPrice) - copy(dAtA[i:], m.SpotPrice) - i = encodeVarintQuery(dAtA, i, uint64(len(m.SpotPrice))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *QuerySwapExactAmountInRequest) 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 *QuerySwapExactAmountInRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QuerySwapExactAmountInRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Routes) > 0 { - for iNdEx := len(m.Routes) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Routes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - } - if len(m.TokenIn) > 0 { - i -= len(m.TokenIn) - copy(dAtA[i:], m.TokenIn) - i = encodeVarintQuery(dAtA, i, uint64(len(m.TokenIn))) - i-- - dAtA[i] = 0x1a - } - if m.PoolId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x10 - } - if len(m.Sender) > 0 { - i -= len(m.Sender) - copy(dAtA[i:], m.Sender) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Sender))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *QuerySwapExactAmountInResponse) 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 *QuerySwapExactAmountInResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QuerySwapExactAmountInResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.TokenOutAmount.Size() - i -= size - if _, err := m.TokenOutAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *QuerySwapExactAmountOutRequest) 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 *QuerySwapExactAmountOutRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QuerySwapExactAmountOutRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TokenOut) > 0 { - i -= len(m.TokenOut) - copy(dAtA[i:], m.TokenOut) - i = encodeVarintQuery(dAtA, i, uint64(len(m.TokenOut))) - i-- - dAtA[i] = 0x22 - } - if len(m.Routes) > 0 { - for iNdEx := len(m.Routes) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Routes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - } - if m.PoolId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x10 - } - if len(m.Sender) > 0 { - i -= len(m.Sender) - copy(dAtA[i:], m.Sender) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Sender))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *QuerySwapExactAmountOutResponse) 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 *QuerySwapExactAmountOutResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QuerySwapExactAmountOutResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.TokenInAmount.Size() - i -= size - if _, err := m.TokenInAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *QueryTotalLiquidityRequest) 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 *QueryTotalLiquidityRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryTotalLiquidityRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *QueryTotalLiquidityResponse) 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 *QueryTotalLiquidityResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryTotalLiquidityResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Liquidity) > 0 { - for iNdEx := len(m.Liquidity) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Liquidity[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { - offset -= sovQuery(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *QueryPoolRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PoolId != 0 { - n += 1 + sovQuery(uint64(m.PoolId)) - } - return n -} - -func (m *QueryPoolResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Pool != nil { - l = m.Pool.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryPoolsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryPoolsResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Pools) > 0 { - for _, e := range m.Pools { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryNumPoolsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *QueryNumPoolsResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.NumPools != 0 { - n += 1 + sovQuery(uint64(m.NumPools)) - } - return n -} - -func (m *QueryPoolTypeRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PoolId != 0 { - n += 1 + sovQuery(uint64(m.PoolId)) - } - return n -} - -func (m *QueryPoolTypeResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.PoolType) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryCalcJoinPoolSharesRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PoolId != 0 { - n += 1 + sovQuery(uint64(m.PoolId)) - } - if len(m.TokensIn) > 0 { - for _, e := range m.TokensIn { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - return n -} - -func (m *QueryCalcJoinPoolSharesResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ShareOutAmount.Size() - n += 1 + l + sovQuery(uint64(l)) - if len(m.TokensOut) > 0 { - for _, e := range m.TokensOut { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - return n -} - -func (m *QueryCalcExitPoolCoinsFromSharesRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PoolId != 0 { - n += 1 + sovQuery(uint64(m.PoolId)) - } - l = m.ShareInAmount.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func (m *QueryCalcExitPoolCoinsFromSharesResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.TokensOut) > 0 { - for _, e := range m.TokensOut { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - return n -} - -func (m *QueryPoolParamsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PoolId != 0 { - n += 1 + sovQuery(uint64(m.PoolId)) - } - return n -} - -func (m *QueryPoolParamsResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Params != nil { - l = m.Params.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryTotalPoolLiquidityRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PoolId != 0 { - n += 1 + sovQuery(uint64(m.PoolId)) - } - return n -} - -func (m *QueryTotalPoolLiquidityResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Liquidity) > 0 { - for _, e := range m.Liquidity { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - return n -} - -func (m *QueryTotalSharesRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PoolId != 0 { - n += 1 + sovQuery(uint64(m.PoolId)) - } - return n -} - -func (m *QueryTotalSharesResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.TotalShares.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func (m *QueryCalcJoinPoolNoSwapSharesRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PoolId != 0 { - n += 1 + sovQuery(uint64(m.PoolId)) - } - if len(m.TokensIn) > 0 { - for _, e := range m.TokensIn { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - return n -} - -func (m *QueryCalcJoinPoolNoSwapSharesResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.TokensOut) > 0 { - for _, e := range m.TokensOut { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - l = m.SharesOut.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func (m *QuerySpotPriceRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PoolId != 0 { - n += 1 + sovQuery(uint64(m.PoolId)) - } - l = len(m.BaseAssetDenom) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - l = len(m.QuoteAssetDenom) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryPoolsWithFilterRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.MinLiquidity) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - l = len(m.PoolType) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryPoolsWithFilterResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Pools) > 0 { - for _, e := range m.Pools { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QuerySpotPriceResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.SpotPrice) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QuerySwapExactAmountInRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - if m.PoolId != 0 { - n += 1 + sovQuery(uint64(m.PoolId)) - } - l = len(m.TokenIn) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - if len(m.Routes) > 0 { - for _, e := range m.Routes { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - return n -} - -func (m *QuerySwapExactAmountInResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.TokenOutAmount.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func (m *QuerySwapExactAmountOutRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - if m.PoolId != 0 { - n += 1 + sovQuery(uint64(m.PoolId)) - } - if len(m.Routes) > 0 { - for _, e := range m.Routes { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - l = len(m.TokenOut) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QuerySwapExactAmountOutResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.TokenInAmount.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func (m *QueryTotalLiquidityRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *QueryTotalLiquidityResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Liquidity) > 0 { - for _, e := range m.Liquidity { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - return n -} - -func sovQuery(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozQuery(x uint64) (n int) { - return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *QueryPoolRequest) 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 ErrIntOverflowQuery - } - 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: QueryPoolRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPoolRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryPoolResponse) 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 ErrIntOverflowQuery - } - 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: QueryPoolResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pool", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Pool == nil { - m.Pool = &types.Any{} - } - if err := m.Pool.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryPoolsRequest) 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 ErrIntOverflowQuery - } - 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: QueryPoolsRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPoolsRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Pagination == nil { - m.Pagination = &query.PageRequest{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryPoolsResponse) 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 ErrIntOverflowQuery - } - 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: QueryPoolsResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPoolsResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pools", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Pools = append(m.Pools, &types.Any{}) - if err := m.Pools[len(m.Pools)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Pagination == nil { - m.Pagination = &query.PageResponse{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryNumPoolsRequest) 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 ErrIntOverflowQuery - } - 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: QueryNumPoolsRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryNumPoolsRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryNumPoolsResponse) 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 ErrIntOverflowQuery - } - 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: QueryNumPoolsResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryNumPoolsResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field NumPools", wireType) - } - m.NumPools = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.NumPools |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryPoolTypeRequest) 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 ErrIntOverflowQuery - } - 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: QueryPoolTypeRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPoolTypeRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryPoolTypeResponse) 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 ErrIntOverflowQuery - } - 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: QueryPoolTypeResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPoolTypeResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolType", 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.PoolType = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryCalcJoinPoolSharesRequest) 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 ErrIntOverflowQuery - } - 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: QueryCalcJoinPoolSharesRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryCalcJoinPoolSharesRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokensIn", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TokensIn = append(m.TokensIn, types1.Coin{}) - if err := m.TokensIn[len(m.TokensIn)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryCalcJoinPoolSharesResponse) 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 ErrIntOverflowQuery - } - 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: QueryCalcJoinPoolSharesResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryCalcJoinPoolSharesResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShareOutAmount", 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 - } - if err := m.ShareOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokensOut", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TokensOut = append(m.TokensOut, types1.Coin{}) - if err := m.TokensOut[len(m.TokensOut)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryCalcExitPoolCoinsFromSharesRequest) 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 ErrIntOverflowQuery - } - 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: QueryCalcExitPoolCoinsFromSharesRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryCalcExitPoolCoinsFromSharesRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShareInAmount", 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 - } - if err := m.ShareInAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryCalcExitPoolCoinsFromSharesResponse) 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 ErrIntOverflowQuery - } - 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: QueryCalcExitPoolCoinsFromSharesResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryCalcExitPoolCoinsFromSharesResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokensOut", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TokensOut = append(m.TokensOut, types1.Coin{}) - if err := m.TokensOut[len(m.TokensOut)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryPoolParamsRequest) 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 ErrIntOverflowQuery - } - 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: QueryPoolParamsRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPoolParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryPoolParamsResponse) 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 ErrIntOverflowQuery - } - 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: QueryPoolParamsResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPoolParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Params == nil { - m.Params = &types.Any{} - } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryTotalPoolLiquidityRequest) 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 ErrIntOverflowQuery - } - 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: QueryTotalPoolLiquidityRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryTotalPoolLiquidityRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryTotalPoolLiquidityResponse) 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 ErrIntOverflowQuery - } - 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: QueryTotalPoolLiquidityResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryTotalPoolLiquidityResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Liquidity", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Liquidity = append(m.Liquidity, types1.Coin{}) - if err := m.Liquidity[len(m.Liquidity)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryTotalSharesRequest) 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 ErrIntOverflowQuery - } - 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: QueryTotalSharesRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryTotalSharesRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryTotalSharesResponse) 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 ErrIntOverflowQuery - } - 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: QueryTotalSharesResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryTotalSharesResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TotalShares", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.TotalShares.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryCalcJoinPoolNoSwapSharesRequest) 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 ErrIntOverflowQuery - } - 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: QueryCalcJoinPoolNoSwapSharesRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryCalcJoinPoolNoSwapSharesRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokensIn", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TokensIn = append(m.TokensIn, types1.Coin{}) - if err := m.TokensIn[len(m.TokensIn)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryCalcJoinPoolNoSwapSharesResponse) 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 ErrIntOverflowQuery - } - 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: QueryCalcJoinPoolNoSwapSharesResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryCalcJoinPoolNoSwapSharesResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokensOut", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TokensOut = append(m.TokensOut, types1.Coin{}) - if err := m.TokensOut[len(m.TokensOut)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SharesOut", 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 - } - if err := m.SharesOut.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QuerySpotPriceRequest) 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 ErrIntOverflowQuery - } - 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: QuerySpotPriceRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QuerySpotPriceRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field BaseAssetDenom", 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.BaseAssetDenom = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field QuoteAssetDenom", 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.QuoteAssetDenom = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryPoolsWithFilterRequest) 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 ErrIntOverflowQuery - } - 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: QueryPoolsWithFilterRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPoolsWithFilterRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MinLiquidity", 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.MinLiquidity = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolType", 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.PoolType = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Pagination == nil { - m.Pagination = &query.PageRequest{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryPoolsWithFilterResponse) 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 ErrIntOverflowQuery - } - 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: QueryPoolsWithFilterResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPoolsWithFilterResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pools", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Pools = append(m.Pools, &types.Any{}) - if err := m.Pools[len(m.Pools)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Pagination == nil { - m.Pagination = &query.PageResponse{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QuerySpotPriceResponse) 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 ErrIntOverflowQuery - } - 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: QuerySpotPriceResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QuerySpotPriceResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SpotPrice", 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.SpotPrice = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QuerySwapExactAmountInRequest) 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 ErrIntOverflowQuery - } - 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: QuerySwapExactAmountInRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QuerySwapExactAmountInRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - 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 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.Sender = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", 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.TokenIn = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Routes", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Routes = append(m.Routes, SwapAmountInRoute{}) - if err := m.Routes[len(m.Routes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QuerySwapExactAmountInResponse) 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 ErrIntOverflowQuery - } - 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: QuerySwapExactAmountInResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QuerySwapExactAmountInResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOutAmount", 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 - } - if err := m.TokenOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QuerySwapExactAmountOutRequest) 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 ErrIntOverflowQuery - } - 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: QuerySwapExactAmountOutRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QuerySwapExactAmountOutRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - 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 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.Sender = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Routes", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Routes = append(m.Routes, SwapAmountOutRoute{}) - if err := m.Routes[len(m.Routes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOut", 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.TokenOut = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QuerySwapExactAmountOutResponse) 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 ErrIntOverflowQuery - } - 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: QuerySwapExactAmountOutResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QuerySwapExactAmountOutResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenInAmount", 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 - } - if err := m.TokenInAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryTotalLiquidityRequest) 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 ErrIntOverflowQuery - } - 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: QueryTotalLiquidityRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryTotalLiquidityRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryTotalLiquidityResponse) 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 ErrIntOverflowQuery - } - 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: QueryTotalLiquidityResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryTotalLiquidityResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Liquidity", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Liquidity = append(m.Liquidity, types1.Coin{}) - if err := m.Liquidity[len(m.Liquidity)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipQuery(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, ErrIntOverflowQuery - } - 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, ErrIntOverflowQuery - } - 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, ErrIntOverflowQuery - } - 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, ErrInvalidLengthQuery - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupQuery - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthQuery - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") -) diff --git a/tests/interchaintest/osmosistypes/gamm/types/tx.pb.go b/tests/interchaintest/osmosistypes/gamm/types/tx.pb.go deleted file mode 100644 index 8fc4ac6d..00000000 --- a/tests/interchaintest/osmosistypes/gamm/types/tx.pb.go +++ /dev/null @@ -1,4972 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: osmosis/gamm/v1beta1/tx.proto - -package types - -import ( - context "context" - fmt "fmt" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - types "github.com/cosmos/cosmos-sdk/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 - -// ===================== MsgJoinPool -// This is really MsgJoinPoolNoSwap -type MsgJoinPool struct { - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` - PoolId uint64 `protobuf:"varint,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - ShareOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,3,opt,name=share_out_amount,json=shareOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_out_amount" yaml:"pool_amount_out"` - TokenInMaxs []types.Coin `protobuf:"bytes,4,rep,name=token_in_maxs,json=tokenInMaxs,proto3" json:"token_in_maxs" yaml:"token_in_max_amounts"` -} - -func (m *MsgJoinPool) Reset() { *m = MsgJoinPool{} } -func (m *MsgJoinPool) String() string { return proto.CompactTextString(m) } -func (*MsgJoinPool) ProtoMessage() {} -func (*MsgJoinPool) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{0} -} -func (m *MsgJoinPool) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgJoinPool) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgJoinPool.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 *MsgJoinPool) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgJoinPool.Merge(m, src) -} -func (m *MsgJoinPool) XXX_Size() int { - return m.Size() -} -func (m *MsgJoinPool) XXX_DiscardUnknown() { - xxx_messageInfo_MsgJoinPool.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgJoinPool proto.InternalMessageInfo - -func (m *MsgJoinPool) GetSender() string { - if m != nil { - return m.Sender - } - return "" -} - -func (m *MsgJoinPool) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -func (m *MsgJoinPool) GetTokenInMaxs() []types.Coin { - if m != nil { - return m.TokenInMaxs - } - return nil -} - -type MsgJoinPoolResponse struct { - ShareOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=share_out_amount,json=shareOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_out_amount" yaml:"share_out_amount"` - TokenIn []types.Coin `protobuf:"bytes,2,rep,name=token_in,json=tokenIn,proto3" json:"token_in" yaml:"token_in"` -} - -func (m *MsgJoinPoolResponse) Reset() { *m = MsgJoinPoolResponse{} } -func (m *MsgJoinPoolResponse) String() string { return proto.CompactTextString(m) } -func (*MsgJoinPoolResponse) ProtoMessage() {} -func (*MsgJoinPoolResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{1} -} -func (m *MsgJoinPoolResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgJoinPoolResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgJoinPoolResponse.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 *MsgJoinPoolResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgJoinPoolResponse.Merge(m, src) -} -func (m *MsgJoinPoolResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgJoinPoolResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgJoinPoolResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgJoinPoolResponse proto.InternalMessageInfo - -func (m *MsgJoinPoolResponse) GetTokenIn() []types.Coin { - if m != nil { - return m.TokenIn - } - return nil -} - -// ===================== MsgExitPool -type MsgExitPool struct { - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` - PoolId uint64 `protobuf:"varint,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - ShareInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,3,opt,name=share_in_amount,json=shareInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_in_amount" yaml:"share_in_amount"` - TokenOutMins []types.Coin `protobuf:"bytes,4,rep,name=token_out_mins,json=tokenOutMins,proto3" json:"token_out_mins" yaml:"token_out_min_amounts"` -} - -func (m *MsgExitPool) Reset() { *m = MsgExitPool{} } -func (m *MsgExitPool) String() string { return proto.CompactTextString(m) } -func (*MsgExitPool) ProtoMessage() {} -func (*MsgExitPool) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{2} -} -func (m *MsgExitPool) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgExitPool) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgExitPool.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 *MsgExitPool) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgExitPool.Merge(m, src) -} -func (m *MsgExitPool) XXX_Size() int { - return m.Size() -} -func (m *MsgExitPool) XXX_DiscardUnknown() { - xxx_messageInfo_MsgExitPool.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgExitPool proto.InternalMessageInfo - -func (m *MsgExitPool) GetSender() string { - if m != nil { - return m.Sender - } - return "" -} - -func (m *MsgExitPool) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -func (m *MsgExitPool) GetTokenOutMins() []types.Coin { - if m != nil { - return m.TokenOutMins - } - return nil -} - -type MsgExitPoolResponse struct { - TokenOut []types.Coin `protobuf:"bytes,1,rep,name=token_out,json=tokenOut,proto3" json:"token_out" yaml:"token_out"` -} - -func (m *MsgExitPoolResponse) Reset() { *m = MsgExitPoolResponse{} } -func (m *MsgExitPoolResponse) String() string { return proto.CompactTextString(m) } -func (*MsgExitPoolResponse) ProtoMessage() {} -func (*MsgExitPoolResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{3} -} -func (m *MsgExitPoolResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgExitPoolResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgExitPoolResponse.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 *MsgExitPoolResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgExitPoolResponse.Merge(m, src) -} -func (m *MsgExitPoolResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgExitPoolResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgExitPoolResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgExitPoolResponse proto.InternalMessageInfo - -func (m *MsgExitPoolResponse) GetTokenOut() []types.Coin { - if m != nil { - return m.TokenOut - } - return nil -} - -// ===================== MsgSwapExactAmountIn -type SwapAmountInRoute struct { - PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - TokenOutDenom string `protobuf:"bytes,2,opt,name=token_out_denom,json=tokenOutDenom,proto3" json:"token_out_denom,omitempty" yaml:"token_out_denom"` -} - -func (m *SwapAmountInRoute) Reset() { *m = SwapAmountInRoute{} } -func (m *SwapAmountInRoute) String() string { return proto.CompactTextString(m) } -func (*SwapAmountInRoute) ProtoMessage() {} -func (*SwapAmountInRoute) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{4} -} -func (m *SwapAmountInRoute) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *SwapAmountInRoute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_SwapAmountInRoute.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 *SwapAmountInRoute) XXX_Merge(src proto.Message) { - xxx_messageInfo_SwapAmountInRoute.Merge(m, src) -} -func (m *SwapAmountInRoute) XXX_Size() int { - return m.Size() -} -func (m *SwapAmountInRoute) XXX_DiscardUnknown() { - xxx_messageInfo_SwapAmountInRoute.DiscardUnknown(m) -} - -var xxx_messageInfo_SwapAmountInRoute proto.InternalMessageInfo - -func (m *SwapAmountInRoute) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -func (m *SwapAmountInRoute) GetTokenOutDenom() string { - if m != nil { - return m.TokenOutDenom - } - return "" -} - -type MsgSwapExactAmountIn struct { - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` - Routes []SwapAmountInRoute `protobuf:"bytes,2,rep,name=routes,proto3" json:"routes"` - TokenIn types.Coin `protobuf:"bytes,3,opt,name=token_in,json=tokenIn,proto3" json:"token_in" yaml:"token_in"` - TokenOutMinAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,4,opt,name=token_out_min_amount,json=tokenOutMinAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_out_min_amount" yaml:"token_out_min_amount"` -} - -func (m *MsgSwapExactAmountIn) Reset() { *m = MsgSwapExactAmountIn{} } -func (m *MsgSwapExactAmountIn) String() string { return proto.CompactTextString(m) } -func (*MsgSwapExactAmountIn) ProtoMessage() {} -func (*MsgSwapExactAmountIn) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{5} -} -func (m *MsgSwapExactAmountIn) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgSwapExactAmountIn) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgSwapExactAmountIn.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 *MsgSwapExactAmountIn) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgSwapExactAmountIn.Merge(m, src) -} -func (m *MsgSwapExactAmountIn) XXX_Size() int { - return m.Size() -} -func (m *MsgSwapExactAmountIn) XXX_DiscardUnknown() { - xxx_messageInfo_MsgSwapExactAmountIn.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgSwapExactAmountIn proto.InternalMessageInfo - -func (m *MsgSwapExactAmountIn) GetSender() string { - if m != nil { - return m.Sender - } - return "" -} - -func (m *MsgSwapExactAmountIn) GetRoutes() []SwapAmountInRoute { - if m != nil { - return m.Routes - } - return nil -} - -func (m *MsgSwapExactAmountIn) GetTokenIn() types.Coin { - if m != nil { - return m.TokenIn - } - return types.Coin{} -} - -type MsgSwapExactAmountInResponse struct { - TokenOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=token_out_amount,json=tokenOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_out_amount" yaml:"token_out_amount"` -} - -func (m *MsgSwapExactAmountInResponse) Reset() { *m = MsgSwapExactAmountInResponse{} } -func (m *MsgSwapExactAmountInResponse) String() string { return proto.CompactTextString(m) } -func (*MsgSwapExactAmountInResponse) ProtoMessage() {} -func (*MsgSwapExactAmountInResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{6} -} -func (m *MsgSwapExactAmountInResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgSwapExactAmountInResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgSwapExactAmountInResponse.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 *MsgSwapExactAmountInResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgSwapExactAmountInResponse.Merge(m, src) -} -func (m *MsgSwapExactAmountInResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgSwapExactAmountInResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgSwapExactAmountInResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgSwapExactAmountInResponse proto.InternalMessageInfo - -// ===================== MsgSwapExactAmountOut -type SwapAmountOutRoute struct { - PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - TokenInDenom string `protobuf:"bytes,2,opt,name=token_in_denom,json=tokenInDenom,proto3" json:"token_in_denom,omitempty" yaml:"token_out_denom"` -} - -func (m *SwapAmountOutRoute) Reset() { *m = SwapAmountOutRoute{} } -func (m *SwapAmountOutRoute) String() string { return proto.CompactTextString(m) } -func (*SwapAmountOutRoute) ProtoMessage() {} -func (*SwapAmountOutRoute) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{7} -} -func (m *SwapAmountOutRoute) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *SwapAmountOutRoute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_SwapAmountOutRoute.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 *SwapAmountOutRoute) XXX_Merge(src proto.Message) { - xxx_messageInfo_SwapAmountOutRoute.Merge(m, src) -} -func (m *SwapAmountOutRoute) XXX_Size() int { - return m.Size() -} -func (m *SwapAmountOutRoute) XXX_DiscardUnknown() { - xxx_messageInfo_SwapAmountOutRoute.DiscardUnknown(m) -} - -var xxx_messageInfo_SwapAmountOutRoute proto.InternalMessageInfo - -func (m *SwapAmountOutRoute) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -func (m *SwapAmountOutRoute) GetTokenInDenom() string { - if m != nil { - return m.TokenInDenom - } - return "" -} - -type MsgSwapExactAmountOut struct { - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` - Routes []SwapAmountOutRoute `protobuf:"bytes,2,rep,name=routes,proto3" json:"routes"` - TokenInMaxAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,3,opt,name=token_in_max_amount,json=tokenInMaxAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_in_max_amount" yaml:"token_in_max_amount"` - TokenOut types.Coin `protobuf:"bytes,4,opt,name=token_out,json=tokenOut,proto3" json:"token_out" yaml:"token_out"` -} - -func (m *MsgSwapExactAmountOut) Reset() { *m = MsgSwapExactAmountOut{} } -func (m *MsgSwapExactAmountOut) String() string { return proto.CompactTextString(m) } -func (*MsgSwapExactAmountOut) ProtoMessage() {} -func (*MsgSwapExactAmountOut) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{8} -} -func (m *MsgSwapExactAmountOut) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgSwapExactAmountOut) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgSwapExactAmountOut.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 *MsgSwapExactAmountOut) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgSwapExactAmountOut.Merge(m, src) -} -func (m *MsgSwapExactAmountOut) XXX_Size() int { - return m.Size() -} -func (m *MsgSwapExactAmountOut) XXX_DiscardUnknown() { - xxx_messageInfo_MsgSwapExactAmountOut.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgSwapExactAmountOut proto.InternalMessageInfo - -func (m *MsgSwapExactAmountOut) GetSender() string { - if m != nil { - return m.Sender - } - return "" -} - -func (m *MsgSwapExactAmountOut) GetRoutes() []SwapAmountOutRoute { - if m != nil { - return m.Routes - } - return nil -} - -func (m *MsgSwapExactAmountOut) GetTokenOut() types.Coin { - if m != nil { - return m.TokenOut - } - return types.Coin{} -} - -type MsgSwapExactAmountOutResponse struct { - TokenInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=token_in_amount,json=tokenInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_in_amount" yaml:"token_in_amount"` -} - -func (m *MsgSwapExactAmountOutResponse) Reset() { *m = MsgSwapExactAmountOutResponse{} } -func (m *MsgSwapExactAmountOutResponse) String() string { return proto.CompactTextString(m) } -func (*MsgSwapExactAmountOutResponse) ProtoMessage() {} -func (*MsgSwapExactAmountOutResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{9} -} -func (m *MsgSwapExactAmountOutResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgSwapExactAmountOutResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgSwapExactAmountOutResponse.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 *MsgSwapExactAmountOutResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgSwapExactAmountOutResponse.Merge(m, src) -} -func (m *MsgSwapExactAmountOutResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgSwapExactAmountOutResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgSwapExactAmountOutResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgSwapExactAmountOutResponse proto.InternalMessageInfo - -// ===================== MsgJoinSwapExternAmountIn -// TODO: Rename to MsgJoinSwapExactAmountIn -type MsgJoinSwapExternAmountIn struct { - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` - PoolId uint64 `protobuf:"varint,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - TokenIn types.Coin `protobuf:"bytes,3,opt,name=token_in,json=tokenIn,proto3" json:"token_in" yaml:"token_in"` - ShareOutMinAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,4,opt,name=share_out_min_amount,json=shareOutMinAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_out_min_amount" yaml:"share_out_min_amount"` -} - -func (m *MsgJoinSwapExternAmountIn) Reset() { *m = MsgJoinSwapExternAmountIn{} } -func (m *MsgJoinSwapExternAmountIn) String() string { return proto.CompactTextString(m) } -func (*MsgJoinSwapExternAmountIn) ProtoMessage() {} -func (*MsgJoinSwapExternAmountIn) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{10} -} -func (m *MsgJoinSwapExternAmountIn) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgJoinSwapExternAmountIn) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgJoinSwapExternAmountIn.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 *MsgJoinSwapExternAmountIn) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgJoinSwapExternAmountIn.Merge(m, src) -} -func (m *MsgJoinSwapExternAmountIn) XXX_Size() int { - return m.Size() -} -func (m *MsgJoinSwapExternAmountIn) XXX_DiscardUnknown() { - xxx_messageInfo_MsgJoinSwapExternAmountIn.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgJoinSwapExternAmountIn proto.InternalMessageInfo - -func (m *MsgJoinSwapExternAmountIn) GetSender() string { - if m != nil { - return m.Sender - } - return "" -} - -func (m *MsgJoinSwapExternAmountIn) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -func (m *MsgJoinSwapExternAmountIn) GetTokenIn() types.Coin { - if m != nil { - return m.TokenIn - } - return types.Coin{} -} - -type MsgJoinSwapExternAmountInResponse struct { - ShareOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=share_out_amount,json=shareOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_out_amount" yaml:"share_out_amount"` -} - -func (m *MsgJoinSwapExternAmountInResponse) Reset() { *m = MsgJoinSwapExternAmountInResponse{} } -func (m *MsgJoinSwapExternAmountInResponse) String() string { return proto.CompactTextString(m) } -func (*MsgJoinSwapExternAmountInResponse) ProtoMessage() {} -func (*MsgJoinSwapExternAmountInResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{11} -} -func (m *MsgJoinSwapExternAmountInResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgJoinSwapExternAmountInResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgJoinSwapExternAmountInResponse.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 *MsgJoinSwapExternAmountInResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgJoinSwapExternAmountInResponse.Merge(m, src) -} -func (m *MsgJoinSwapExternAmountInResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgJoinSwapExternAmountInResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgJoinSwapExternAmountInResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgJoinSwapExternAmountInResponse proto.InternalMessageInfo - -// ===================== MsgJoinSwapShareAmountOut -type MsgJoinSwapShareAmountOut struct { - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` - PoolId uint64 `protobuf:"varint,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - TokenInDenom string `protobuf:"bytes,3,opt,name=token_in_denom,json=tokenInDenom,proto3" json:"token_in_denom,omitempty" yaml:"token_in_denom"` - ShareOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,4,opt,name=share_out_amount,json=shareOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_out_amount" yaml:"share_out_amount"` - TokenInMaxAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,5,opt,name=token_in_max_amount,json=tokenInMaxAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_in_max_amount" yaml:"token_in_max_amount"` -} - -func (m *MsgJoinSwapShareAmountOut) Reset() { *m = MsgJoinSwapShareAmountOut{} } -func (m *MsgJoinSwapShareAmountOut) String() string { return proto.CompactTextString(m) } -func (*MsgJoinSwapShareAmountOut) ProtoMessage() {} -func (*MsgJoinSwapShareAmountOut) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{12} -} -func (m *MsgJoinSwapShareAmountOut) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgJoinSwapShareAmountOut) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgJoinSwapShareAmountOut.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 *MsgJoinSwapShareAmountOut) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgJoinSwapShareAmountOut.Merge(m, src) -} -func (m *MsgJoinSwapShareAmountOut) XXX_Size() int { - return m.Size() -} -func (m *MsgJoinSwapShareAmountOut) XXX_DiscardUnknown() { - xxx_messageInfo_MsgJoinSwapShareAmountOut.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgJoinSwapShareAmountOut proto.InternalMessageInfo - -func (m *MsgJoinSwapShareAmountOut) GetSender() string { - if m != nil { - return m.Sender - } - return "" -} - -func (m *MsgJoinSwapShareAmountOut) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -func (m *MsgJoinSwapShareAmountOut) GetTokenInDenom() string { - if m != nil { - return m.TokenInDenom - } - return "" -} - -type MsgJoinSwapShareAmountOutResponse struct { - TokenInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=token_in_amount,json=tokenInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_in_amount" yaml:"token_in_amount"` -} - -func (m *MsgJoinSwapShareAmountOutResponse) Reset() { *m = MsgJoinSwapShareAmountOutResponse{} } -func (m *MsgJoinSwapShareAmountOutResponse) String() string { return proto.CompactTextString(m) } -func (*MsgJoinSwapShareAmountOutResponse) ProtoMessage() {} -func (*MsgJoinSwapShareAmountOutResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{13} -} -func (m *MsgJoinSwapShareAmountOutResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgJoinSwapShareAmountOutResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgJoinSwapShareAmountOutResponse.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 *MsgJoinSwapShareAmountOutResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgJoinSwapShareAmountOutResponse.Merge(m, src) -} -func (m *MsgJoinSwapShareAmountOutResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgJoinSwapShareAmountOutResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgJoinSwapShareAmountOutResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgJoinSwapShareAmountOutResponse proto.InternalMessageInfo - -// ===================== MsgExitSwapShareAmountIn -type MsgExitSwapShareAmountIn struct { - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` - PoolId uint64 `protobuf:"varint,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - TokenOutDenom string `protobuf:"bytes,3,opt,name=token_out_denom,json=tokenOutDenom,proto3" json:"token_out_denom,omitempty" yaml:"token_out_denom"` - ShareInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,4,opt,name=share_in_amount,json=shareInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_in_amount" yaml:"share_in_amount"` - TokenOutMinAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,5,opt,name=token_out_min_amount,json=tokenOutMinAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_out_min_amount" yaml:"token_out_min_amount"` -} - -func (m *MsgExitSwapShareAmountIn) Reset() { *m = MsgExitSwapShareAmountIn{} } -func (m *MsgExitSwapShareAmountIn) String() string { return proto.CompactTextString(m) } -func (*MsgExitSwapShareAmountIn) ProtoMessage() {} -func (*MsgExitSwapShareAmountIn) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{14} -} -func (m *MsgExitSwapShareAmountIn) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgExitSwapShareAmountIn) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgExitSwapShareAmountIn.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 *MsgExitSwapShareAmountIn) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgExitSwapShareAmountIn.Merge(m, src) -} -func (m *MsgExitSwapShareAmountIn) XXX_Size() int { - return m.Size() -} -func (m *MsgExitSwapShareAmountIn) XXX_DiscardUnknown() { - xxx_messageInfo_MsgExitSwapShareAmountIn.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgExitSwapShareAmountIn proto.InternalMessageInfo - -func (m *MsgExitSwapShareAmountIn) GetSender() string { - if m != nil { - return m.Sender - } - return "" -} - -func (m *MsgExitSwapShareAmountIn) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -func (m *MsgExitSwapShareAmountIn) GetTokenOutDenom() string { - if m != nil { - return m.TokenOutDenom - } - return "" -} - -type MsgExitSwapShareAmountInResponse struct { - TokenOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=token_out_amount,json=tokenOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_out_amount" yaml:"token_out_amount"` -} - -func (m *MsgExitSwapShareAmountInResponse) Reset() { *m = MsgExitSwapShareAmountInResponse{} } -func (m *MsgExitSwapShareAmountInResponse) String() string { return proto.CompactTextString(m) } -func (*MsgExitSwapShareAmountInResponse) ProtoMessage() {} -func (*MsgExitSwapShareAmountInResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{15} -} -func (m *MsgExitSwapShareAmountInResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgExitSwapShareAmountInResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgExitSwapShareAmountInResponse.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 *MsgExitSwapShareAmountInResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgExitSwapShareAmountInResponse.Merge(m, src) -} -func (m *MsgExitSwapShareAmountInResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgExitSwapShareAmountInResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgExitSwapShareAmountInResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgExitSwapShareAmountInResponse proto.InternalMessageInfo - -// ===================== MsgExitSwapExternAmountOut -type MsgExitSwapExternAmountOut struct { - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` - PoolId uint64 `protobuf:"varint,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - TokenOut types.Coin `protobuf:"bytes,3,opt,name=token_out,json=tokenOut,proto3" json:"token_out" yaml:"token_out"` - ShareInMaxAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,4,opt,name=share_in_max_amount,json=shareInMaxAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_in_max_amount" yaml:"share_in_max_amount"` -} - -func (m *MsgExitSwapExternAmountOut) Reset() { *m = MsgExitSwapExternAmountOut{} } -func (m *MsgExitSwapExternAmountOut) String() string { return proto.CompactTextString(m) } -func (*MsgExitSwapExternAmountOut) ProtoMessage() {} -func (*MsgExitSwapExternAmountOut) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{16} -} -func (m *MsgExitSwapExternAmountOut) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgExitSwapExternAmountOut) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgExitSwapExternAmountOut.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 *MsgExitSwapExternAmountOut) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgExitSwapExternAmountOut.Merge(m, src) -} -func (m *MsgExitSwapExternAmountOut) XXX_Size() int { - return m.Size() -} -func (m *MsgExitSwapExternAmountOut) XXX_DiscardUnknown() { - xxx_messageInfo_MsgExitSwapExternAmountOut.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgExitSwapExternAmountOut proto.InternalMessageInfo - -func (m *MsgExitSwapExternAmountOut) GetSender() string { - if m != nil { - return m.Sender - } - return "" -} - -func (m *MsgExitSwapExternAmountOut) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -func (m *MsgExitSwapExternAmountOut) GetTokenOut() types.Coin { - if m != nil { - return m.TokenOut - } - return types.Coin{} -} - -type MsgExitSwapExternAmountOutResponse struct { - ShareInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=share_in_amount,json=shareInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_in_amount" yaml:"share_in_amount"` -} - -func (m *MsgExitSwapExternAmountOutResponse) Reset() { *m = MsgExitSwapExternAmountOutResponse{} } -func (m *MsgExitSwapExternAmountOutResponse) String() string { return proto.CompactTextString(m) } -func (*MsgExitSwapExternAmountOutResponse) ProtoMessage() {} -func (*MsgExitSwapExternAmountOutResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{17} -} -func (m *MsgExitSwapExternAmountOutResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgExitSwapExternAmountOutResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgExitSwapExternAmountOutResponse.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 *MsgExitSwapExternAmountOutResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgExitSwapExternAmountOutResponse.Merge(m, src) -} -func (m *MsgExitSwapExternAmountOutResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgExitSwapExternAmountOutResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgExitSwapExternAmountOutResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgExitSwapExternAmountOutResponse proto.InternalMessageInfo - -func init() { - proto.RegisterType((*MsgJoinPool)(nil), "osmosis.gamm.v1beta1.MsgJoinPool") - proto.RegisterType((*MsgJoinPoolResponse)(nil), "osmosis.gamm.v1beta1.MsgJoinPoolResponse") - proto.RegisterType((*MsgExitPool)(nil), "osmosis.gamm.v1beta1.MsgExitPool") - proto.RegisterType((*MsgExitPoolResponse)(nil), "osmosis.gamm.v1beta1.MsgExitPoolResponse") - proto.RegisterType((*SwapAmountInRoute)(nil), "osmosis.gamm.v1beta1.SwapAmountInRoute") - proto.RegisterType((*MsgSwapExactAmountIn)(nil), "osmosis.gamm.v1beta1.MsgSwapExactAmountIn") - proto.RegisterType((*MsgSwapExactAmountInResponse)(nil), "osmosis.gamm.v1beta1.MsgSwapExactAmountInResponse") - proto.RegisterType((*SwapAmountOutRoute)(nil), "osmosis.gamm.v1beta1.SwapAmountOutRoute") - proto.RegisterType((*MsgSwapExactAmountOut)(nil), "osmosis.gamm.v1beta1.MsgSwapExactAmountOut") - proto.RegisterType((*MsgSwapExactAmountOutResponse)(nil), "osmosis.gamm.v1beta1.MsgSwapExactAmountOutResponse") - proto.RegisterType((*MsgJoinSwapExternAmountIn)(nil), "osmosis.gamm.v1beta1.MsgJoinSwapExternAmountIn") - proto.RegisterType((*MsgJoinSwapExternAmountInResponse)(nil), "osmosis.gamm.v1beta1.MsgJoinSwapExternAmountInResponse") - proto.RegisterType((*MsgJoinSwapShareAmountOut)(nil), "osmosis.gamm.v1beta1.MsgJoinSwapShareAmountOut") - proto.RegisterType((*MsgJoinSwapShareAmountOutResponse)(nil), "osmosis.gamm.v1beta1.MsgJoinSwapShareAmountOutResponse") - proto.RegisterType((*MsgExitSwapShareAmountIn)(nil), "osmosis.gamm.v1beta1.MsgExitSwapShareAmountIn") - proto.RegisterType((*MsgExitSwapShareAmountInResponse)(nil), "osmosis.gamm.v1beta1.MsgExitSwapShareAmountInResponse") - proto.RegisterType((*MsgExitSwapExternAmountOut)(nil), "osmosis.gamm.v1beta1.MsgExitSwapExternAmountOut") - proto.RegisterType((*MsgExitSwapExternAmountOutResponse)(nil), "osmosis.gamm.v1beta1.MsgExitSwapExternAmountOutResponse") -} - -func init() { proto.RegisterFile("osmosis/gamm/v1beta1/tx.proto", fileDescriptor_cfc8fd3ac7df3247) } - -var fileDescriptor_cfc8fd3ac7df3247 = []byte{ - // 1121 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0x4d, 0x6f, 0x1b, 0x45, - 0x18, 0xce, 0xd8, 0x6e, 0x9a, 0x4c, 0x9a, 0xaf, 0x6d, 0xd2, 0x38, 0xdb, 0xd6, 0x4e, 0x07, 0x04, - 0x29, 0x55, 0x77, 0x9b, 0x14, 0x01, 0xe2, 0x02, 0x18, 0x82, 0x70, 0x85, 0xe5, 0x6a, 0x7b, 0xa9, - 0xb8, 0x58, 0xeb, 0x78, 0xe5, 0xae, 0x9a, 0x9d, 0xb1, 0x3c, 0xb3, 0xc1, 0x15, 0x12, 0x48, 0x7c, - 0xdc, 0x41, 0x88, 0x8f, 0x5f, 0x80, 0xf8, 0x0b, 0x1c, 0xe0, 0x00, 0x97, 0x1e, 0x7b, 0x83, 0x72, - 0xb0, 0x50, 0xf2, 0x0f, 0xfc, 0x0b, 0xd0, 0xee, 0xcc, 0x7e, 0x7a, 0x37, 0xf6, 0x26, 0x76, 0x73, - 0x4a, 0xbc, 0xf3, 0x7e, 0xbf, 0xcf, 0x3c, 0xef, 0xbb, 0x0b, 0xaf, 0x13, 0x6a, 0x11, 0x6a, 0x52, - 0xb5, 0xad, 0x5b, 0x96, 0x7a, 0xb8, 0xd3, 0x34, 0x98, 0xbe, 0xa3, 0xb2, 0x9e, 0xd2, 0xe9, 0x12, - 0x46, 0xa4, 0x35, 0x71, 0xac, 0x38, 0xc7, 0x8a, 0x38, 0x96, 0xd7, 0xda, 0xa4, 0x4d, 0x5c, 0x01, - 0xd5, 0xf9, 0x8f, 0xcb, 0xca, 0xa5, 0x7d, 0x57, 0x58, 0x6d, 0xea, 0xd4, 0xf0, 0x2d, 0xed, 0x13, - 0x13, 0xf3, 0x73, 0xf4, 0x7b, 0x0e, 0x2e, 0xd4, 0x68, 0xfb, 0x1e, 0x31, 0xf1, 0x7d, 0x42, 0x0e, - 0xa4, 0x9b, 0x70, 0x96, 0x1a, 0xb8, 0x65, 0x74, 0x8b, 0x60, 0x0b, 0x6c, 0xcf, 0x57, 0x56, 0x07, - 0xfd, 0xf2, 0xe2, 0x13, 0xdd, 0x3a, 0x78, 0x1b, 0xf1, 0xe7, 0x48, 0x13, 0x02, 0xd2, 0x2d, 0x78, - 0xb1, 0x43, 0xc8, 0x41, 0xc3, 0x6c, 0x15, 0x73, 0x5b, 0x60, 0xbb, 0x50, 0x91, 0x06, 0xfd, 0xf2, - 0x12, 0x97, 0x15, 0x07, 0x48, 0x9b, 0x75, 0xfe, 0xab, 0xb6, 0xa4, 0x2e, 0x5c, 0xa1, 0x8f, 0xf4, - 0xae, 0xd1, 0x20, 0x36, 0x6b, 0xe8, 0x16, 0xb1, 0x31, 0x2b, 0xe6, 0x5d, 0x0f, 0x1f, 0x3d, 0xed, - 0x97, 0x67, 0xfe, 0xed, 0x97, 0x5f, 0x69, 0x9b, 0xec, 0x91, 0xdd, 0x54, 0xf6, 0x89, 0xa5, 0x8a, - 0xa0, 0xf9, 0x9f, 0xdb, 0xb4, 0xf5, 0x58, 0x65, 0x4f, 0x3a, 0x06, 0x55, 0xaa, 0x98, 0x0d, 0xfa, - 0xe5, 0x2b, 0x21, 0x1f, 0xdc, 0x94, 0x63, 0x15, 0x69, 0x4b, 0xae, 0x87, 0xba, 0xcd, 0xde, 0x73, - 0x1f, 0x4a, 0x4d, 0xb8, 0xc8, 0xc8, 0x63, 0x03, 0x37, 0x4c, 0xdc, 0xb0, 0xf4, 0x1e, 0x2d, 0x16, - 0xb6, 0xf2, 0xdb, 0x0b, 0xbb, 0x9b, 0x0a, 0xb7, 0xab, 0x38, 0x35, 0xf1, 0xca, 0xa7, 0xbc, 0x4f, - 0x4c, 0x5c, 0x79, 0xc9, 0x89, 0x65, 0xd0, 0x2f, 0x5f, 0xe5, 0x1e, 0xc2, 0xda, 0xc2, 0x13, 0x45, - 0xda, 0x82, 0xfb, 0xb8, 0x8a, 0x6b, 0x7a, 0x8f, 0xa2, 0xe7, 0x00, 0x5e, 0x0e, 0xd5, 0x4f, 0x33, - 0x68, 0x87, 0x60, 0x6a, 0x48, 0x34, 0x21, 0x5f, 0x5e, 0xd1, 0x6a, 0xe6, 0x7c, 0x37, 0x44, 0xfd, - 0x63, 0xf6, 0x86, 0x13, 0xae, 0xc1, 0x39, 0x2f, 0xe4, 0x62, 0x6e, 0x54, 0xae, 0x1b, 0x22, 0xd7, - 0xe5, 0x68, 0xae, 0x48, 0xbb, 0x28, 0xf2, 0x43, 0x7f, 0x70, 0x6c, 0xec, 0xf5, 0x4c, 0x36, 0x55, - 0x6c, 0x74, 0xe0, 0x32, 0xcf, 0xcd, 0xc4, 0x13, 0x82, 0x46, 0xcc, 0x1c, 0xd2, 0x16, 0xdd, 0x27, - 0x55, 0x2c, 0x0a, 0x65, 0xc0, 0x25, 0x9e, 0xaf, 0x53, 0x4d, 0xcb, 0xc4, 0x63, 0x40, 0xe3, 0x65, - 0x51, 0xae, 0x6b, 0xe1, 0x72, 0x09, 0xf5, 0x00, 0x1b, 0x97, 0xdc, 0xe7, 0x75, 0x9b, 0xd5, 0x4c, - 0x4c, 0x51, 0xdb, 0xc5, 0x86, 0x57, 0x3f, 0x1f, 0x1b, 0xf7, 0xe1, 0xbc, 0xaf, 0x5e, 0x04, 0xa3, - 0x1c, 0x17, 0x85, 0xe3, 0x95, 0x98, 0x63, 0xa4, 0xcd, 0x79, 0xce, 0xd0, 0xd7, 0x00, 0xae, 0x3e, - 0xf8, 0x54, 0xef, 0xf0, 0xf4, 0xaa, 0x58, 0x23, 0x36, 0x33, 0xc2, 0x4d, 0x00, 0x23, 0x9b, 0x50, - 0x81, 0xcb, 0x41, 0x4e, 0x2d, 0x03, 0x13, 0xcb, 0xed, 0xdc, 0x7c, 0x45, 0x0e, 0xca, 0x1a, 0x13, - 0x40, 0xda, 0xa2, 0x17, 0xc1, 0x07, 0xee, 0xef, 0xbf, 0x73, 0x70, 0xad, 0x46, 0xdb, 0x4e, 0x24, - 0x7b, 0x3d, 0x7d, 0x9f, 0x79, 0xe1, 0x64, 0x41, 0xce, 0x1e, 0x9c, 0xed, 0x3a, 0xd1, 0x53, 0x81, - 0xe0, 0x57, 0x95, 0x24, 0xb6, 0x53, 0x86, 0xb2, 0xad, 0x14, 0x9c, 0x3a, 0x69, 0x42, 0x39, 0x72, - 0x15, 0x1c, 0x30, 0x9d, 0xed, 0x2a, 0x48, 0x9f, 0xc3, 0xb5, 0xa4, 0x8e, 0x17, 0x0b, 0x6e, 0x3a, - 0xb5, 0xcc, 0x38, 0xbd, 0x9a, 0x8e, 0x22, 0xa4, 0xad, 0x86, 0x40, 0xc4, 0x73, 0x44, 0xdf, 0x03, - 0x78, 0x2d, 0xa9, 0xb2, 0x61, 0xbe, 0x09, 0x8c, 0x4d, 0x86, 0x6f, 0xe2, 0xf6, 0x90, 0xb6, 0xe4, - 0x05, 0x26, 0xa2, 0xfa, 0x0a, 0x40, 0x29, 0x68, 0x44, 0xdd, 0x66, 0xa7, 0xc0, 0xdd, 0xbb, 0xde, - 0x55, 0x34, 0xf1, 0xd8, 0xb0, 0xbb, 0x24, 0xda, 0xc2, 0x51, 0xf7, 0x3c, 0x07, 0xd7, 0x87, 0x6b, - 0x53, 0xb7, 0x59, 0x16, 0xd8, 0x7d, 0x18, 0x83, 0xdd, 0xf6, 0x28, 0xd8, 0x79, 0xd9, 0xc6, 0x70, - 0xf7, 0x19, 0xbc, 0x9c, 0x30, 0x35, 0x04, 0x9f, 0x7d, 0x9c, 0xb9, 0x15, 0x72, 0xea, 0x20, 0x42, - 0xda, 0x4a, 0x30, 0x87, 0x04, 0xad, 0x45, 0x88, 0xa5, 0x30, 0x0a, 0xf5, 0xe3, 0x10, 0xcb, 0x77, - 0x00, 0x5e, 0x4f, 0xac, 0xad, 0x0f, 0xbc, 0x8e, 0xc7, 0x1b, 0xc1, 0xa5, 0x00, 0x67, 0x23, 0xef, - 0x98, 0x39, 0x8f, 0x65, 0x3c, 0xf2, 0x46, 0x7f, 0xe6, 0xe0, 0xa6, 0x18, 0xb9, 0x3c, 0x2e, 0x66, - 0x74, 0xf1, 0x69, 0xa8, 0x26, 0xd3, 0x90, 0x9a, 0x3c, 0xa1, 0x04, 0xf3, 0x7c, 0x72, 0x84, 0x92, - 0x64, 0x13, 0x69, 0xab, 0xde, 0x9e, 0x10, 0x10, 0xca, 0xcf, 0x00, 0xde, 0x48, 0x2d, 0xe2, 0xb9, - 0x6e, 0x31, 0xe8, 0x97, 0x7c, 0xa4, 0xbf, 0x0f, 0x9c, 0xd3, 0x53, 0xdd, 0xe9, 0x4c, 0xfd, 0x7d, - 0x67, 0x88, 0x87, 0xf8, 0x9d, 0xdd, 0x1c, 0xf4, 0xcb, 0xeb, 0x31, 0x60, 0x26, 0xd1, 0x50, 0x62, - 0xad, 0x0a, 0xd3, 0xde, 0xf8, 0x52, 0xe8, 0xe6, 0xc2, 0x8b, 0xa0, 0x1b, 0xf4, 0x43, 0x14, 0x43, - 0xd1, 0x46, 0x9d, 0x23, 0x41, 0xfc, 0x9a, 0x87, 0x45, 0xb1, 0x77, 0xc5, 0xe2, 0x9a, 0x22, 0x3f, - 0x24, 0xec, 0x4f, 0xf9, 0x8c, 0xfb, 0x53, 0xd2, 0x22, 0x5c, 0x98, 0xee, 0x22, 0x9c, 0xb6, 0xd7, - 0x5c, 0x78, 0x41, 0x7b, 0xcd, 0x4f, 0x00, 0x6e, 0xa5, 0xb5, 0xea, 0x7c, 0x77, 0x9b, 0xbf, 0x72, - 0x50, 0x0e, 0x45, 0x16, 0x26, 0xc8, 0x69, 0xd2, 0x50, 0x64, 0x84, 0xe7, 0x27, 0x30, 0xc2, 0x1d, - 0x8a, 0xf0, 0x51, 0x10, 0xa2, 0x88, 0xc2, 0xd9, 0x28, 0x22, 0xc1, 0x24, 0xd2, 0x56, 0x04, 0xb8, - 0x02, 0x8a, 0xf8, 0x11, 0x40, 0x94, 0x5e, 0xc5, 0x30, 0x47, 0xc4, 0x81, 0x0f, 0xa6, 0x0a, 0xfc, - 0xdd, 0xdf, 0x2e, 0xc2, 0x7c, 0x8d, 0xb6, 0xa5, 0x87, 0x70, 0xce, 0xff, 0xf6, 0x71, 0x23, 0x79, - 0xe7, 0x0b, 0xbd, 0xde, 0xcb, 0x37, 0x47, 0x8a, 0xf8, 0x39, 0x3d, 0x84, 0x73, 0xfe, 0x9b, 0x73, - 0xba, 0x65, 0x4f, 0xe4, 0x04, 0xcb, 0x43, 0xef, 0x8f, 0x94, 0xbf, 0xec, 0x45, 0x5f, 0xb1, 0x5e, - 0x4b, 0xd5, 0x1f, 0x92, 0x95, 0x77, 0xc7, 0x97, 0xf5, 0x9d, 0x1e, 0xf2, 0x55, 0x3f, 0xb6, 0x61, - 0xdf, 0x1a, 0xd7, 0x52, 0xdd, 0x66, 0xf2, 0xdd, 0x0c, 0xc2, 0xbe, 0xdf, 0x2f, 0x01, 0xbc, 0x92, - 0xb2, 0xea, 0xa9, 0x27, 0x36, 0x63, 0x58, 0x41, 0x7e, 0x33, 0xa3, 0x42, 0x62, 0x10, 0xb1, 0x7d, - 0x64, 0x74, 0x10, 0x51, 0x85, 0x31, 0x82, 0x48, 0x19, 0xa4, 0xdf, 0x00, 0xb8, 0x91, 0x46, 0x47, - 0x77, 0x4e, 0x44, 0x4f, 0x82, 0x86, 0xfc, 0x56, 0x56, 0x0d, 0x3f, 0x8e, 0x2f, 0xe0, 0x7a, 0xf2, - 0x68, 0x55, 0x46, 0x9a, 0x8c, 0xc8, 0xcb, 0x6f, 0x64, 0x93, 0xf7, 0x02, 0xa8, 0xdc, 0x7b, 0x7a, - 0x54, 0x02, 0xcf, 0x8e, 0x4a, 0xe0, 0xbf, 0xa3, 0x12, 0xf8, 0xf6, 0xb8, 0x34, 0xf3, 0xec, 0xb8, - 0x34, 0xf3, 0xcf, 0x71, 0x69, 0xe6, 0x93, 0x3b, 0x21, 0x9a, 0x10, 0xb6, 0x6f, 0x1f, 0xe8, 0x4d, - 0xea, 0xfd, 0x50, 0x0f, 0x77, 0x5e, 0x57, 0x7b, 0xfc, 0xb3, 0xaa, 0x4b, 0x1a, 0xcd, 0x59, 0xf7, - 0x33, 0xe8, 0xdd, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0x26, 0xaf, 0xfa, 0x83, 0x73, 0x15, 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 { - JoinPool(ctx context.Context, in *MsgJoinPool, opts ...grpc.CallOption) (*MsgJoinPoolResponse, error) - ExitPool(ctx context.Context, in *MsgExitPool, opts ...grpc.CallOption) (*MsgExitPoolResponse, error) - SwapExactAmountIn(ctx context.Context, in *MsgSwapExactAmountIn, opts ...grpc.CallOption) (*MsgSwapExactAmountInResponse, error) - SwapExactAmountOut(ctx context.Context, in *MsgSwapExactAmountOut, opts ...grpc.CallOption) (*MsgSwapExactAmountOutResponse, error) - JoinSwapExternAmountIn(ctx context.Context, in *MsgJoinSwapExternAmountIn, opts ...grpc.CallOption) (*MsgJoinSwapExternAmountInResponse, error) - JoinSwapShareAmountOut(ctx context.Context, in *MsgJoinSwapShareAmountOut, opts ...grpc.CallOption) (*MsgJoinSwapShareAmountOutResponse, error) - ExitSwapExternAmountOut(ctx context.Context, in *MsgExitSwapExternAmountOut, opts ...grpc.CallOption) (*MsgExitSwapExternAmountOutResponse, error) - ExitSwapShareAmountIn(ctx context.Context, in *MsgExitSwapShareAmountIn, opts ...grpc.CallOption) (*MsgExitSwapShareAmountInResponse, error) -} - -type msgClient struct { - cc grpc1.ClientConn -} - -func NewMsgClient(cc grpc1.ClientConn) MsgClient { - return &msgClient{cc} -} - -func (c *msgClient) JoinPool(ctx context.Context, in *MsgJoinPool, opts ...grpc.CallOption) (*MsgJoinPoolResponse, error) { - out := new(MsgJoinPoolResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Msg/JoinPool", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) ExitPool(ctx context.Context, in *MsgExitPool, opts ...grpc.CallOption) (*MsgExitPoolResponse, error) { - out := new(MsgExitPoolResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Msg/ExitPool", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) SwapExactAmountIn(ctx context.Context, in *MsgSwapExactAmountIn, opts ...grpc.CallOption) (*MsgSwapExactAmountInResponse, error) { - out := new(MsgSwapExactAmountInResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Msg/SwapExactAmountIn", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) SwapExactAmountOut(ctx context.Context, in *MsgSwapExactAmountOut, opts ...grpc.CallOption) (*MsgSwapExactAmountOutResponse, error) { - out := new(MsgSwapExactAmountOutResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Msg/SwapExactAmountOut", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) JoinSwapExternAmountIn(ctx context.Context, in *MsgJoinSwapExternAmountIn, opts ...grpc.CallOption) (*MsgJoinSwapExternAmountInResponse, error) { - out := new(MsgJoinSwapExternAmountInResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Msg/JoinSwapExternAmountIn", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) JoinSwapShareAmountOut(ctx context.Context, in *MsgJoinSwapShareAmountOut, opts ...grpc.CallOption) (*MsgJoinSwapShareAmountOutResponse, error) { - out := new(MsgJoinSwapShareAmountOutResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Msg/JoinSwapShareAmountOut", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) ExitSwapExternAmountOut(ctx context.Context, in *MsgExitSwapExternAmountOut, opts ...grpc.CallOption) (*MsgExitSwapExternAmountOutResponse, error) { - out := new(MsgExitSwapExternAmountOutResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Msg/ExitSwapExternAmountOut", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) ExitSwapShareAmountIn(ctx context.Context, in *MsgExitSwapShareAmountIn, opts ...grpc.CallOption) (*MsgExitSwapShareAmountInResponse, error) { - out := new(MsgExitSwapShareAmountInResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Msg/ExitSwapShareAmountIn", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// MsgServer is the server API for Msg service. -type MsgServer interface { - JoinPool(context.Context, *MsgJoinPool) (*MsgJoinPoolResponse, error) - ExitPool(context.Context, *MsgExitPool) (*MsgExitPoolResponse, error) - SwapExactAmountIn(context.Context, *MsgSwapExactAmountIn) (*MsgSwapExactAmountInResponse, error) - SwapExactAmountOut(context.Context, *MsgSwapExactAmountOut) (*MsgSwapExactAmountOutResponse, error) - JoinSwapExternAmountIn(context.Context, *MsgJoinSwapExternAmountIn) (*MsgJoinSwapExternAmountInResponse, error) - JoinSwapShareAmountOut(context.Context, *MsgJoinSwapShareAmountOut) (*MsgJoinSwapShareAmountOutResponse, error) - ExitSwapExternAmountOut(context.Context, *MsgExitSwapExternAmountOut) (*MsgExitSwapExternAmountOutResponse, error) - ExitSwapShareAmountIn(context.Context, *MsgExitSwapShareAmountIn) (*MsgExitSwapShareAmountInResponse, error) -} - -// UnimplementedMsgServer can be embedded to have forward compatible implementations. -type UnimplementedMsgServer struct { -} - -func (*UnimplementedMsgServer) JoinPool(ctx context.Context, req *MsgJoinPool) (*MsgJoinPoolResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method JoinPool not implemented") -} -func (*UnimplementedMsgServer) ExitPool(ctx context.Context, req *MsgExitPool) (*MsgExitPoolResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ExitPool not implemented") -} -func (*UnimplementedMsgServer) SwapExactAmountIn(ctx context.Context, req *MsgSwapExactAmountIn) (*MsgSwapExactAmountInResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SwapExactAmountIn not implemented") -} -func (*UnimplementedMsgServer) SwapExactAmountOut(ctx context.Context, req *MsgSwapExactAmountOut) (*MsgSwapExactAmountOutResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SwapExactAmountOut not implemented") -} -func (*UnimplementedMsgServer) JoinSwapExternAmountIn(ctx context.Context, req *MsgJoinSwapExternAmountIn) (*MsgJoinSwapExternAmountInResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method JoinSwapExternAmountIn not implemented") -} -func (*UnimplementedMsgServer) JoinSwapShareAmountOut(ctx context.Context, req *MsgJoinSwapShareAmountOut) (*MsgJoinSwapShareAmountOutResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method JoinSwapShareAmountOut not implemented") -} -func (*UnimplementedMsgServer) ExitSwapExternAmountOut(ctx context.Context, req *MsgExitSwapExternAmountOut) (*MsgExitSwapExternAmountOutResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ExitSwapExternAmountOut not implemented") -} -func (*UnimplementedMsgServer) ExitSwapShareAmountIn(ctx context.Context, req *MsgExitSwapShareAmountIn) (*MsgExitSwapShareAmountInResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ExitSwapShareAmountIn not implemented") -} - -func RegisterMsgServer(s grpc1.Server, srv MsgServer) { - s.RegisterService(&_Msg_serviceDesc, srv) -} - -func _Msg_JoinPool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgJoinPool) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).JoinPool(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Msg/JoinPool", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).JoinPool(ctx, req.(*MsgJoinPool)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_ExitPool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgExitPool) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).ExitPool(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Msg/ExitPool", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).ExitPool(ctx, req.(*MsgExitPool)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_SwapExactAmountIn_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgSwapExactAmountIn) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).SwapExactAmountIn(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Msg/SwapExactAmountIn", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).SwapExactAmountIn(ctx, req.(*MsgSwapExactAmountIn)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_SwapExactAmountOut_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgSwapExactAmountOut) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).SwapExactAmountOut(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Msg/SwapExactAmountOut", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).SwapExactAmountOut(ctx, req.(*MsgSwapExactAmountOut)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_JoinSwapExternAmountIn_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgJoinSwapExternAmountIn) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).JoinSwapExternAmountIn(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Msg/JoinSwapExternAmountIn", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).JoinSwapExternAmountIn(ctx, req.(*MsgJoinSwapExternAmountIn)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_JoinSwapShareAmountOut_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgJoinSwapShareAmountOut) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).JoinSwapShareAmountOut(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Msg/JoinSwapShareAmountOut", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).JoinSwapShareAmountOut(ctx, req.(*MsgJoinSwapShareAmountOut)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_ExitSwapExternAmountOut_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgExitSwapExternAmountOut) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).ExitSwapExternAmountOut(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Msg/ExitSwapExternAmountOut", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).ExitSwapExternAmountOut(ctx, req.(*MsgExitSwapExternAmountOut)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_ExitSwapShareAmountIn_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgExitSwapShareAmountIn) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).ExitSwapShareAmountIn(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Msg/ExitSwapShareAmountIn", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).ExitSwapShareAmountIn(ctx, req.(*MsgExitSwapShareAmountIn)) - } - return interceptor(ctx, in, info, handler) -} - -var _Msg_serviceDesc = grpc.ServiceDesc{ - ServiceName: "osmosis.gamm.v1beta1.Msg", - HandlerType: (*MsgServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "JoinPool", - Handler: _Msg_JoinPool_Handler, - }, - { - MethodName: "ExitPool", - Handler: _Msg_ExitPool_Handler, - }, - { - MethodName: "SwapExactAmountIn", - Handler: _Msg_SwapExactAmountIn_Handler, - }, - { - MethodName: "SwapExactAmountOut", - Handler: _Msg_SwapExactAmountOut_Handler, - }, - { - MethodName: "JoinSwapExternAmountIn", - Handler: _Msg_JoinSwapExternAmountIn_Handler, - }, - { - MethodName: "JoinSwapShareAmountOut", - Handler: _Msg_JoinSwapShareAmountOut_Handler, - }, - { - MethodName: "ExitSwapExternAmountOut", - Handler: _Msg_ExitSwapExternAmountOut_Handler, - }, - { - MethodName: "ExitSwapShareAmountIn", - Handler: _Msg_ExitSwapShareAmountIn_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "osmosis/gamm/v1beta1/tx.proto", -} - -func (m *MsgJoinPool) 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 *MsgJoinPool) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgJoinPool) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TokenInMaxs) > 0 { - for iNdEx := len(m.TokenInMaxs) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.TokenInMaxs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - } - { - size := m.ShareOutAmount.Size() - i -= size - if _, err := m.ShareOutAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if m.PoolId != 0 { - i = encodeVarintTx(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x10 - } - 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] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgJoinPoolResponse) 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 *MsgJoinPoolResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgJoinPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TokenIn) > 0 { - for iNdEx := len(m.TokenIn) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.TokenIn[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - { - size := m.ShareOutAmount.Size() - i -= size - if _, err := m.ShareOutAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *MsgExitPool) 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 *MsgExitPool) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgExitPool) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TokenOutMins) > 0 { - for iNdEx := len(m.TokenOutMins) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.TokenOutMins[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - } - { - size := m.ShareInAmount.Size() - i -= size - if _, err := m.ShareInAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if m.PoolId != 0 { - i = encodeVarintTx(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x10 - } - 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] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgExitPoolResponse) 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 *MsgExitPoolResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgExitPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TokenOut) > 0 { - for iNdEx := len(m.TokenOut) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.TokenOut[iNdEx].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 *SwapAmountInRoute) 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 *SwapAmountInRoute) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SwapAmountInRoute) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TokenOutDenom) > 0 { - i -= len(m.TokenOutDenom) - copy(dAtA[i:], m.TokenOutDenom) - i = encodeVarintTx(dAtA, i, uint64(len(m.TokenOutDenom))) - i-- - dAtA[i] = 0x12 - } - if m.PoolId != 0 { - i = encodeVarintTx(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *MsgSwapExactAmountIn) 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 *MsgSwapExactAmountIn) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgSwapExactAmountIn) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.TokenOutMinAmount.Size() - i -= size - if _, err := m.TokenOutMinAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - { - size, err := m.TokenIn.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if len(m.Routes) > 0 { - for iNdEx := len(m.Routes) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Routes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - 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] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgSwapExactAmountInResponse) 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 *MsgSwapExactAmountInResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgSwapExactAmountInResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.TokenOutAmount.Size() - i -= size - if _, err := m.TokenOutAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *SwapAmountOutRoute) 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 *SwapAmountOutRoute) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SwapAmountOutRoute) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TokenInDenom) > 0 { - i -= len(m.TokenInDenom) - copy(dAtA[i:], m.TokenInDenom) - i = encodeVarintTx(dAtA, i, uint64(len(m.TokenInDenom))) - i-- - dAtA[i] = 0x12 - } - if m.PoolId != 0 { - i = encodeVarintTx(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *MsgSwapExactAmountOut) 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 *MsgSwapExactAmountOut) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgSwapExactAmountOut) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.TokenOut.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - { - size := m.TokenInMaxAmount.Size() - i -= size - if _, err := m.TokenInMaxAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if len(m.Routes) > 0 { - for iNdEx := len(m.Routes) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Routes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - 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] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgSwapExactAmountOutResponse) 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 *MsgSwapExactAmountOutResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgSwapExactAmountOutResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.TokenInAmount.Size() - i -= size - if _, err := m.TokenInAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *MsgJoinSwapExternAmountIn) 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 *MsgJoinSwapExternAmountIn) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgJoinSwapExternAmountIn) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.ShareOutMinAmount.Size() - i -= size - if _, err := m.ShareOutMinAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - { - size, err := m.TokenIn.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if m.PoolId != 0 { - i = encodeVarintTx(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x10 - } - 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] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgJoinSwapExternAmountInResponse) 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 *MsgJoinSwapExternAmountInResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgJoinSwapExternAmountInResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.ShareOutAmount.Size() - i -= size - if _, err := m.ShareOutAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *MsgJoinSwapShareAmountOut) 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 *MsgJoinSwapShareAmountOut) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgJoinSwapShareAmountOut) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.TokenInMaxAmount.Size() - i -= size - if _, err := m.TokenInMaxAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - { - size := m.ShareOutAmount.Size() - i -= size - if _, err := m.ShareOutAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - if len(m.TokenInDenom) > 0 { - i -= len(m.TokenInDenom) - copy(dAtA[i:], m.TokenInDenom) - i = encodeVarintTx(dAtA, i, uint64(len(m.TokenInDenom))) - i-- - dAtA[i] = 0x1a - } - if m.PoolId != 0 { - i = encodeVarintTx(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x10 - } - 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] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgJoinSwapShareAmountOutResponse) 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 *MsgJoinSwapShareAmountOutResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgJoinSwapShareAmountOutResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.TokenInAmount.Size() - i -= size - if _, err := m.TokenInAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *MsgExitSwapShareAmountIn) 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 *MsgExitSwapShareAmountIn) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgExitSwapShareAmountIn) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.TokenOutMinAmount.Size() - i -= size - if _, err := m.TokenOutMinAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - { - size := m.ShareInAmount.Size() - i -= size - if _, err := m.ShareInAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - if len(m.TokenOutDenom) > 0 { - i -= len(m.TokenOutDenom) - copy(dAtA[i:], m.TokenOutDenom) - i = encodeVarintTx(dAtA, i, uint64(len(m.TokenOutDenom))) - i-- - dAtA[i] = 0x1a - } - if m.PoolId != 0 { - i = encodeVarintTx(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x10 - } - 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] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgExitSwapShareAmountInResponse) 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 *MsgExitSwapShareAmountInResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgExitSwapShareAmountInResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.TokenOutAmount.Size() - i -= size - if _, err := m.TokenOutAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *MsgExitSwapExternAmountOut) 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 *MsgExitSwapExternAmountOut) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgExitSwapExternAmountOut) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.ShareInMaxAmount.Size() - i -= size - if _, err := m.ShareInMaxAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - { - size, err := m.TokenOut.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if m.PoolId != 0 { - i = encodeVarintTx(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x10 - } - 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] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgExitSwapExternAmountOutResponse) 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 *MsgExitSwapExternAmountOutResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgExitSwapExternAmountOutResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.ShareInAmount.Size() - i -= size - if _, err := m.ShareInAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - 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 *MsgJoinPool) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - if m.PoolId != 0 { - n += 1 + sovTx(uint64(m.PoolId)) - } - l = m.ShareOutAmount.Size() - n += 1 + l + sovTx(uint64(l)) - if len(m.TokenInMaxs) > 0 { - for _, e := range m.TokenInMaxs { - l = e.Size() - n += 1 + l + sovTx(uint64(l)) - } - } - return n -} - -func (m *MsgJoinPoolResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ShareOutAmount.Size() - n += 1 + l + sovTx(uint64(l)) - if len(m.TokenIn) > 0 { - for _, e := range m.TokenIn { - l = e.Size() - n += 1 + l + sovTx(uint64(l)) - } - } - return n -} - -func (m *MsgExitPool) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - if m.PoolId != 0 { - n += 1 + sovTx(uint64(m.PoolId)) - } - l = m.ShareInAmount.Size() - n += 1 + l + sovTx(uint64(l)) - if len(m.TokenOutMins) > 0 { - for _, e := range m.TokenOutMins { - l = e.Size() - n += 1 + l + sovTx(uint64(l)) - } - } - return n -} - -func (m *MsgExitPoolResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.TokenOut) > 0 { - for _, e := range m.TokenOut { - l = e.Size() - n += 1 + l + sovTx(uint64(l)) - } - } - return n -} - -func (m *SwapAmountInRoute) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PoolId != 0 { - n += 1 + sovTx(uint64(m.PoolId)) - } - l = len(m.TokenOutDenom) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - return n -} - -func (m *MsgSwapExactAmountIn) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - if len(m.Routes) > 0 { - for _, e := range m.Routes { - l = e.Size() - n += 1 + l + sovTx(uint64(l)) - } - } - l = m.TokenIn.Size() - n += 1 + l + sovTx(uint64(l)) - l = m.TokenOutMinAmount.Size() - n += 1 + l + sovTx(uint64(l)) - return n -} - -func (m *MsgSwapExactAmountInResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.TokenOutAmount.Size() - n += 1 + l + sovTx(uint64(l)) - return n -} - -func (m *SwapAmountOutRoute) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PoolId != 0 { - n += 1 + sovTx(uint64(m.PoolId)) - } - l = len(m.TokenInDenom) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - return n -} - -func (m *MsgSwapExactAmountOut) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - if len(m.Routes) > 0 { - for _, e := range m.Routes { - l = e.Size() - n += 1 + l + sovTx(uint64(l)) - } - } - l = m.TokenInMaxAmount.Size() - n += 1 + l + sovTx(uint64(l)) - l = m.TokenOut.Size() - n += 1 + l + sovTx(uint64(l)) - return n -} - -func (m *MsgSwapExactAmountOutResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.TokenInAmount.Size() - n += 1 + l + sovTx(uint64(l)) - return n -} - -func (m *MsgJoinSwapExternAmountIn) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - if m.PoolId != 0 { - n += 1 + sovTx(uint64(m.PoolId)) - } - l = m.TokenIn.Size() - n += 1 + l + sovTx(uint64(l)) - l = m.ShareOutMinAmount.Size() - n += 1 + l + sovTx(uint64(l)) - return n -} - -func (m *MsgJoinSwapExternAmountInResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ShareOutAmount.Size() - n += 1 + l + sovTx(uint64(l)) - return n -} - -func (m *MsgJoinSwapShareAmountOut) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - if m.PoolId != 0 { - n += 1 + sovTx(uint64(m.PoolId)) - } - l = len(m.TokenInDenom) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - l = m.ShareOutAmount.Size() - n += 1 + l + sovTx(uint64(l)) - l = m.TokenInMaxAmount.Size() - n += 1 + l + sovTx(uint64(l)) - return n -} - -func (m *MsgJoinSwapShareAmountOutResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.TokenInAmount.Size() - n += 1 + l + sovTx(uint64(l)) - return n -} - -func (m *MsgExitSwapShareAmountIn) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - if m.PoolId != 0 { - n += 1 + sovTx(uint64(m.PoolId)) - } - l = len(m.TokenOutDenom) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - l = m.ShareInAmount.Size() - n += 1 + l + sovTx(uint64(l)) - l = m.TokenOutMinAmount.Size() - n += 1 + l + sovTx(uint64(l)) - return n -} - -func (m *MsgExitSwapShareAmountInResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.TokenOutAmount.Size() - n += 1 + l + sovTx(uint64(l)) - return n -} - -func (m *MsgExitSwapExternAmountOut) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - if m.PoolId != 0 { - n += 1 + sovTx(uint64(m.PoolId)) - } - l = m.TokenOut.Size() - n += 1 + l + sovTx(uint64(l)) - l = m.ShareInMaxAmount.Size() - n += 1 + l + sovTx(uint64(l)) - return n -} - -func (m *MsgExitSwapExternAmountOutResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ShareInAmount.Size() - n += 1 + l + sovTx(uint64(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 *MsgJoinPool) 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: MsgJoinPool: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgJoinPool: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - 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 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShareOutAmount", 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 - } - if err := m.ShareOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenInMaxs", 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 - } - m.TokenInMaxs = append(m.TokenInMaxs, types.Coin{}) - if err := m.TokenInMaxs[len(m.TokenInMaxs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgJoinPoolResponse) 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: MsgJoinPoolResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgJoinPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShareOutAmount", 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 - } - if err := m.ShareOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", 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 - } - m.TokenIn = append(m.TokenIn, types.Coin{}) - if err := m.TokenIn[len(m.TokenIn)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgExitPool) 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: MsgExitPool: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgExitPool: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - 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 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShareInAmount", 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 - } - if err := m.ShareInAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOutMins", 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 - } - m.TokenOutMins = append(m.TokenOutMins, types.Coin{}) - if err := m.TokenOutMins[len(m.TokenOutMins)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgExitPoolResponse) 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: MsgExitPoolResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgExitPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOut", 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 - } - m.TokenOut = append(m.TokenOut, types.Coin{}) - if err := m.TokenOut[len(m.TokenOut)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SwapAmountInRoute) 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: SwapAmountInRoute: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SwapAmountInRoute: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOutDenom", 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.TokenOutDenom = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgSwapExactAmountIn) 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: MsgSwapExactAmountIn: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgSwapExactAmountIn: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - 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 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Routes", 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 - } - m.Routes = append(m.Routes, SwapAmountInRoute{}) - if err := m.Routes[len(m.Routes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", 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.TokenIn.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOutMinAmount", 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 - } - if err := m.TokenOutMinAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgSwapExactAmountInResponse) 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: MsgSwapExactAmountInResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgSwapExactAmountInResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOutAmount", 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 - } - if err := m.TokenOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SwapAmountOutRoute) 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: SwapAmountOutRoute: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SwapAmountOutRoute: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenInDenom", 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.TokenInDenom = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgSwapExactAmountOut) 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: MsgSwapExactAmountOut: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgSwapExactAmountOut: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - 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 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Routes", 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 - } - m.Routes = append(m.Routes, SwapAmountOutRoute{}) - if err := m.Routes[len(m.Routes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenInMaxAmount", 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 - } - if err := m.TokenInMaxAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOut", 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.TokenOut.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgSwapExactAmountOutResponse) 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: MsgSwapExactAmountOutResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgSwapExactAmountOutResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenInAmount", 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 - } - if err := m.TokenInAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgJoinSwapExternAmountIn) 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: MsgJoinSwapExternAmountIn: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgJoinSwapExternAmountIn: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - 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 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", 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.TokenIn.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShareOutMinAmount", 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 - } - if err := m.ShareOutMinAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgJoinSwapExternAmountInResponse) 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: MsgJoinSwapExternAmountInResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgJoinSwapExternAmountInResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShareOutAmount", 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 - } - if err := m.ShareOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgJoinSwapShareAmountOut) 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: MsgJoinSwapShareAmountOut: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgJoinSwapShareAmountOut: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - 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 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenInDenom", 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.TokenInDenom = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShareOutAmount", 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 - } - if err := m.ShareOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenInMaxAmount", 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 - } - if err := m.TokenInMaxAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgJoinSwapShareAmountOutResponse) 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: MsgJoinSwapShareAmountOutResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgJoinSwapShareAmountOutResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenInAmount", 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 - } - if err := m.TokenInAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgExitSwapShareAmountIn) 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: MsgExitSwapShareAmountIn: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgExitSwapShareAmountIn: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - 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 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOutDenom", 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.TokenOutDenom = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShareInAmount", 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 - } - if err := m.ShareInAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOutMinAmount", 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 - } - if err := m.TokenOutMinAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgExitSwapShareAmountInResponse) 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: MsgExitSwapShareAmountInResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgExitSwapShareAmountInResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOutAmount", 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 - } - if err := m.TokenOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgExitSwapExternAmountOut) 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: MsgExitSwapExternAmountOut: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgExitSwapExternAmountOut: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - 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 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOut", 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.TokenOut.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShareInMaxAmount", 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 - } - if err := m.ShareInMaxAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgExitSwapExternAmountOutResponse) 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: MsgExitSwapExternAmountOutResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgExitSwapExternAmountOutResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShareInAmount", 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 - } - if err := m.ShareInAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (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/feeabs/ante/decorate.go b/x/feeabs/ante/decorate.go index 35a42317..fc76b2e9 100644 --- a/x/feeabs/ante/decorate.go +++ b/x/feeabs/ante/decorate.go @@ -6,8 +6,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/types" - feeabskeeper "github.com/notional-labs/fee-abstraction/v2/x/feeabs/keeper" - feeabstypes "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" + feeabskeeper "github.com/notional-labs/fee-abstraction/v3/x/feeabs/keeper" + feeabstypes "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" ) type FeeAbstractionDeductFeeDecorate struct { diff --git a/x/feeabs/client/cli/query.go b/x/feeabs/client/cli/query.go index 88a6280e..0c31a4f1 100644 --- a/x/feeabs/client/cli/query.go +++ b/x/feeabs/client/cli/query.go @@ -5,7 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" "github.com/spf13/cobra" ) diff --git a/x/feeabs/client/cli/tx.go b/x/feeabs/client/cli/tx.go index cd2ae189..3e611d1d 100644 --- a/x/feeabs/client/cli/tx.go +++ b/x/feeabs/client/cli/tx.go @@ -7,7 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" "github.com/spf13/cobra" ) diff --git a/x/feeabs/client/cli/tx_test.go b/x/feeabs/client/cli/tx_test.go index b24d20ad..9b164305 100644 --- a/x/feeabs/client/cli/tx_test.go +++ b/x/feeabs/client/cli/tx_test.go @@ -5,7 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/testutil" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" "github.com/stretchr/testify/require" ) diff --git a/x/feeabs/client/cli/util.go b/x/feeabs/client/cli/util.go index acccf0b3..04fa3005 100644 --- a/x/feeabs/client/cli/util.go +++ b/x/feeabs/client/cli/util.go @@ -4,7 +4,7 @@ import ( "io/ioutil" //nolint:staticcheck "github.com/cosmos/cosmos-sdk/codec" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" ) // ParseParamChangeProposalJSON reads and parses a ParamChangeProposalJSON from diff --git a/x/feeabs/ibc_module.go b/x/feeabs/ibc_module.go index f85c3820..0a473b00 100644 --- a/x/feeabs/ibc_module.go +++ b/x/feeabs/ibc_module.go @@ -7,12 +7,12 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - channeltypes "github.com/cosmos/ibc-go/v4/modules/core/04-channel/types" - porttypes "github.com/cosmos/ibc-go/v4/modules/core/05-port/types" - host "github.com/cosmos/ibc-go/v4/modules/core/24-host" - ibcexported "github.com/cosmos/ibc-go/v4/modules/core/exported" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/keeper" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" + host "github.com/cosmos/ibc-go/v7/modules/core/24-host" + ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/keeper" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" ) // IBCModule implements the ICS26 interface for transfer given the transfer keeper. diff --git a/x/feeabs/ibctesting/chain.go b/x/feeabs/ibctesting/chain.go index ea1f1129..ab789236 100644 --- a/x/feeabs/ibctesting/chain.go +++ b/x/feeabs/ibctesting/chain.go @@ -6,6 +6,12 @@ import ( "testing" "time" + abci "github.com/cometbft/cometbft/abci/types" + "github.com/cometbft/cometbft/crypto/tmhash" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" + tmprotoversion "github.com/cometbft/cometbft/proto/tendermint/version" + tmtypes "github.com/cometbft/cometbft/types" + tmversion "github.com/cometbft/cometbft/version" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" @@ -18,28 +24,22 @@ import ( capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" - "github.com/cosmos/cosmos-sdk/x/staking/teststaking" + // "github.com/cosmos/cosmos-sdk/x/staking/teststaking" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - clienttypes "github.com/cosmos/ibc-go/v4/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v4/modules/core/04-channel/types" - commitmenttypes "github.com/cosmos/ibc-go/v4/modules/core/23-commitment/types" - host "github.com/cosmos/ibc-go/v4/modules/core/24-host" - "github.com/cosmos/ibc-go/v4/modules/core/exported" - ibckeeper "github.com/cosmos/ibc-go/v4/modules/core/keeper" - "github.com/cosmos/ibc-go/v4/modules/core/types" - ibctmtypes "github.com/cosmos/ibc-go/v4/modules/light-clients/07-tendermint/types" - ibctesting "github.com/cosmos/ibc-go/v4/testing" - "github.com/cosmos/ibc-go/v4/testing/mock" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + commitmenttypes "github.com/cosmos/ibc-go/v7/modules/core/23-commitment/types" + host "github.com/cosmos/ibc-go/v7/modules/core/24-host" + "github.com/cosmos/ibc-go/v7/modules/core/exported" + ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" + "github.com/cosmos/ibc-go/v7/modules/core/types" + // ibctmtypes "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint/types" + ibctesting "github.com/cosmos/ibc-go/v7/testing" + "github.com/cosmos/ibc-go/v7/testing/mock" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" - "github.com/tendermint/tendermint/crypto/tmhash" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - tmprotoversion "github.com/tendermint/tendermint/proto/tendermint/version" - tmtypes "github.com/tendermint/tendermint/types" - tmversion "github.com/tendermint/tendermint/version" "github.com/CosmWasm/wasmd/x/wasm" - feeabs "github.com/notional-labs/fee-abstraction/v2/app" + feeabs "github.com/notional-labs/fee-abstraction/v3/app" ) // TestChain is a testing struct that wraps a simapp with the last TM Header, the current ABCI diff --git a/x/feeabs/ibctesting/coordinator.go b/x/feeabs/ibctesting/coordinator.go index ba4f39d4..806fac87 100644 --- a/x/feeabs/ibctesting/coordinator.go +++ b/x/feeabs/ibctesting/coordinator.go @@ -6,11 +6,11 @@ import ( "testing" "time" - channeltypes "github.com/cosmos/ibc-go/v4/modules/core/04-channel/types" - host "github.com/cosmos/ibc-go/v4/modules/core/24-host" - ibctesting "github.com/cosmos/ibc-go/v4/testing" + abci "github.com/cometbft/cometbft/abci/types" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + host "github.com/cosmos/ibc-go/v7/modules/core/24-host" + ibctesting "github.com/cosmos/ibc-go/v7/testing" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" ) diff --git a/x/feeabs/ibctesting/endpoint.go b/x/feeabs/ibctesting/endpoint.go index e468d46f..9f687fd3 100644 --- a/x/feeabs/ibctesting/endpoint.go +++ b/x/feeabs/ibctesting/endpoint.go @@ -5,14 +5,14 @@ import ( "github.com/stretchr/testify/require" - clienttypes "github.com/cosmos/ibc-go/v4/modules/core/02-client/types" - connectiontypes "github.com/cosmos/ibc-go/v4/modules/core/03-connection/types" - channeltypes "github.com/cosmos/ibc-go/v4/modules/core/04-channel/types" - commitmenttypes "github.com/cosmos/ibc-go/v4/modules/core/23-commitment/types" - host "github.com/cosmos/ibc-go/v4/modules/core/24-host" - "github.com/cosmos/ibc-go/v4/modules/core/exported" - ibctmtypes "github.com/cosmos/ibc-go/v4/modules/light-clients/07-tendermint/types" - ibctesting "github.com/cosmos/ibc-go/v4/testing" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + connectiontypes "github.com/cosmos/ibc-go/v7/modules/core/03-connection/types" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + commitmenttypes "github.com/cosmos/ibc-go/v7/modules/core/23-commitment/types" + host "github.com/cosmos/ibc-go/v7/modules/core/24-host" + "github.com/cosmos/ibc-go/v7/modules/core/exported" + // ibctmtypes "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint/types" + ibctesting "github.com/cosmos/ibc-go/v7/testing" ) // Endpoint is a which represents a channel endpoint and its associated diff --git a/x/feeabs/ibctesting/event_utils.go b/x/feeabs/ibctesting/event_utils.go index 0ca21336..1a09d1d5 100644 --- a/x/feeabs/ibctesting/event_utils.go +++ b/x/feeabs/ibctesting/event_utils.go @@ -4,9 +4,9 @@ import ( "strconv" "strings" - clienttypes "github.com/cosmos/ibc-go/v4/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v4/modules/core/04-channel/types" - abci "github.com/tendermint/tendermint/abci/types" + abci "github.com/cometbft/cometbft/abci/types" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" ) func getSendPackets(evts []abci.Event) []channeltypes.Packet { diff --git a/x/feeabs/ibctesting/path.go b/x/feeabs/ibctesting/path.go index dc8fa727..4a505b63 100644 --- a/x/feeabs/ibctesting/path.go +++ b/x/feeabs/ibctesting/path.go @@ -1,7 +1,7 @@ package ibctesting import ( - ibctesting "github.com/cosmos/ibc-go/v4/testing" + ibctesting "github.com/cosmos/ibc-go/v7/testing" ) // Path contains two endpoints representing two chains connected over IBC diff --git a/x/feeabs/ibctesting/wasm.go b/x/feeabs/ibctesting/wasm.go index 88d08a02..8d348f58 100644 --- a/x/feeabs/ibctesting/wasm.go +++ b/x/feeabs/ibctesting/wasm.go @@ -4,12 +4,12 @@ import ( "fmt" "github.com/CosmWasm/wasmd/x/wasm/types" + "github.com/cometbft/cometbft/libs/rand" sdk "github.com/cosmos/cosmos-sdk/types" - ibctesting "github.com/cosmos/ibc-go/v4/testing" + ibctesting "github.com/cosmos/ibc-go/v7/testing" "github.com/golang/protobuf/proto" //nolint - feeabs "github.com/notional-labs/fee-abstraction/v2/app" + feeabs "github.com/notional-labs/fee-abstraction/v3/app" "github.com/stretchr/testify/require" - "github.com/tendermint/tendermint/libs/rand" ) var wasmIdent = []byte("\x00\x61\x73\x6D") diff --git a/x/feeabs/keeper/abci.go b/x/feeabs/keeper/abci.go index 0de36b36..8574e861 100644 --- a/x/feeabs/keeper/abci.go +++ b/x/feeabs/keeper/abci.go @@ -6,7 +6,7 @@ import ( "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" ) // BeginBlocker of epochs module. diff --git a/x/feeabs/keeper/config.go b/x/feeabs/keeper/config.go index 091ab0e2..6b21c5f0 100644 --- a/x/feeabs/keeper/config.go +++ b/x/feeabs/keeper/config.go @@ -3,7 +3,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" ) func (keeper Keeper) HasHostZoneConfig(ctx sdk.Context, ibcDenom string) bool { diff --git a/x/feeabs/keeper/epoch.go b/x/feeabs/keeper/epoch.go index cfb98347..4076dccc 100644 --- a/x/feeabs/keeper/epoch.go +++ b/x/feeabs/keeper/epoch.go @@ -6,7 +6,7 @@ import ( "github.com/gogo/protobuf/proto" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" sdk "github.com/cosmos/cosmos-sdk/types" ) diff --git a/x/feeabs/keeper/exchange_rate.go b/x/feeabs/keeper/exchange_rate.go index 02f0f31f..96618634 100644 --- a/x/feeabs/keeper/exchange_rate.go +++ b/x/feeabs/keeper/exchange_rate.go @@ -3,7 +3,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" ) // GetTwapRate return Twap Price of ibcDenom diff --git a/x/feeabs/keeper/genesis.go b/x/feeabs/keeper/genesis.go index cf726eeb..d1fd6313 100644 --- a/x/feeabs/keeper/genesis.go +++ b/x/feeabs/keeper/genesis.go @@ -3,7 +3,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" ) // InitGenesis initializes the incentives module's state from a provided genesis state. diff --git a/x/feeabs/keeper/genesis_test.go b/x/feeabs/keeper/genesis_test.go index a52edb5a..01588ea7 100644 --- a/x/feeabs/keeper/genesis_test.go +++ b/x/feeabs/keeper/genesis_test.go @@ -6,8 +6,8 @@ import ( "github.com/stretchr/testify/require" - apphelpers "github.com/notional-labs/fee-abstraction/v2/app/helpers" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" + apphelpers "github.com/notional-labs/fee-abstraction/v3/app/helpers" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" ) var now = time.Now().UTC() diff --git a/x/feeabs/keeper/grpc_query.go b/x/feeabs/keeper/grpc_query.go index 9dd90ffe..6028a7ab 100644 --- a/x/feeabs/keeper/grpc_query.go +++ b/x/feeabs/keeper/grpc_query.go @@ -4,7 +4,7 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) diff --git a/x/feeabs/keeper/grpc_query_test.go b/x/feeabs/keeper/grpc_query_test.go index 03c18448..7a435178 100644 --- a/x/feeabs/keeper/grpc_query_test.go +++ b/x/feeabs/keeper/grpc_query_test.go @@ -5,7 +5,7 @@ import ( "time" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" ) var letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") diff --git a/x/feeabs/keeper/host_zone_test.go b/x/feeabs/keeper/host_zone_test.go index 6c130c68..c6a6d19d 100644 --- a/x/feeabs/keeper/host_zone_test.go +++ b/x/feeabs/keeper/host_zone_test.go @@ -6,9 +6,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - apphelpers "github.com/notional-labs/fee-abstraction/v2/app/helpers" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/keeper" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" + apphelpers "github.com/notional-labs/fee-abstraction/v3/app/helpers" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/keeper" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" ) func createNHostZone(t *testing.T, keeper *keeper.Keeper, ctx sdk.Context, n int) []types.HostChainFeeAbsConfig { diff --git a/x/feeabs/keeper/ibc.go b/x/feeabs/keeper/ibc.go index c0894ef7..9040b7a4 100644 --- a/x/feeabs/keeper/ibc.go +++ b/x/feeabs/keeper/ibc.go @@ -4,15 +4,15 @@ import ( "fmt" "time" + abci "github.com/cometbft/cometbft/abci/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - transfertypes "github.com/cosmos/ibc-go/v4/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v4/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v4/modules/core/04-channel/types" - host "github.com/cosmos/ibc-go/v4/modules/core/24-host" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" - abci "github.com/tendermint/tendermint/abci/types" + transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + host "github.com/cosmos/ibc-go/v7/modules/core/24-host" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" ) // GetPort returns the portID for the module. Used in ExportGenesis. diff --git a/x/feeabs/keeper/keeper.go b/x/feeabs/keeper/keeper.go index 8db23148..0e5ecb8a 100644 --- a/x/feeabs/keeper/keeper.go +++ b/x/feeabs/keeper/keeper.go @@ -3,15 +3,15 @@ package keeper import ( "fmt" + "github.com/cometbft/cometbft/libs/log" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - ibctransferkeeper "github.com/cosmos/ibc-go/v4/modules/apps/transfer/keeper" - "github.com/cosmos/ibc-go/v4/modules/core/exported" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" - "github.com/tendermint/tendermint/libs/log" + ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" + "github.com/cosmos/ibc-go/v7/modules/core/exported" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" ) type Keeper struct { diff --git a/x/feeabs/keeper/keeper_test.go b/x/feeabs/keeper/keeper_test.go index 288bcb18..3891812b 100644 --- a/x/feeabs/keeper/keeper_test.go +++ b/x/feeabs/keeper/keeper_test.go @@ -4,16 +4,16 @@ import ( "fmt" "testing" + tmrand "github.com/cometbft/cometbft/libs/rand" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" sdk "github.com/cosmos/cosmos-sdk/types" govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" - "github.com/notional-labs/fee-abstraction/v2/app" - apphelpers "github.com/notional-labs/fee-abstraction/v2/app/helpers" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/keeper" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v3/app" + apphelpers "github.com/notional-labs/fee-abstraction/v3/app/helpers" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/keeper" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" "github.com/stretchr/testify/suite" - tmrand "github.com/tendermint/tendermint/libs/rand" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" ) type KeeperTestSuite struct { diff --git a/x/feeabs/keeper/msgserver.go b/x/feeabs/keeper/msgserver.go index e87fa901..6ece417b 100644 --- a/x/feeabs/keeper/msgserver.go +++ b/x/feeabs/keeper/msgserver.go @@ -5,7 +5,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" ) type msgServer struct { diff --git a/x/feeabs/keeper/proposal.go b/x/feeabs/keeper/proposal.go index f8779a30..b69a3095 100644 --- a/x/feeabs/keeper/proposal.go +++ b/x/feeabs/keeper/proposal.go @@ -2,7 +2,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" ) func (k Keeper) AddHostZoneProposal(ctx sdk.Context, p *types.AddHostZoneProposal) error { diff --git a/x/feeabs/keeper/proposal_test.go b/x/feeabs/keeper/proposal_test.go index 6ed38cf0..53b62356 100644 --- a/x/feeabs/keeper/proposal_test.go +++ b/x/feeabs/keeper/proposal_test.go @@ -1,8 +1,8 @@ package keeper_test import ( - apphelpers "github.com/notional-labs/fee-abstraction/v2/app/helpers" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" + apphelpers "github.com/notional-labs/fee-abstraction/v3/app/helpers" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" ) func (suite *KeeperTestSuite) TestAddHostZoneProposal() { diff --git a/x/feeabs/module.go b/x/feeabs/module.go index 4ce3f304..68253797 100644 --- a/x/feeabs/module.go +++ b/x/feeabs/module.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" + abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" cdctypes "github.com/cosmos/cosmos-sdk/codec/types" @@ -12,11 +13,10 @@ import ( "github.com/cosmos/cosmos-sdk/types/module" "github.com/gorilla/mux" "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/client/cli" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/keeper" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/client/cli" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/keeper" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" "github.com/spf13/cobra" - abci "github.com/tendermint/tendermint/abci/types" ) var ( diff --git a/x/feeabs/proposal_handler.go b/x/feeabs/proposal_handler.go index a67d30c3..2255644d 100644 --- a/x/feeabs/proposal_handler.go +++ b/x/feeabs/proposal_handler.go @@ -6,14 +6,14 @@ import ( "github.com/cosmos/cosmos-sdk/client" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/cosmos/cosmos-sdk/types/rest" + // "github.com/cosmos/cosmos-sdk/types/rest" govclient "github.com/cosmos/cosmos-sdk/x/gov/client" - govrest "github.com/cosmos/cosmos-sdk/x/gov/client/rest" + // govrest "github.com/cosmos/cosmos-sdk/x/gov/client/rest" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/keeper" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/keeper" - cli "github.com/notional-labs/fee-abstraction/v2/x/feeabs/client/cli" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" + cli "github.com/notional-labs/fee-abstraction/v3/x/feeabs/client/cli" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" ) var ( diff --git a/x/feeabs/relay_test.go b/x/feeabs/relay_test.go index 01e1e31f..04391135 100644 --- a/x/feeabs/relay_test.go +++ b/x/feeabs/relay_test.go @@ -5,16 +5,16 @@ import ( wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" - wasmibctesting "github.com/notional-labs/fee-abstraction/v2/x/feeabs/ibctesting" + wasmibctesting "github.com/notional-labs/fee-abstraction/v3/x/feeabs/ibctesting" wasmvm "github.com/CosmWasm/wasmvm" wasmvmtypes "github.com/CosmWasm/wasmvm/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - ibctransfertypes "github.com/cosmos/ibc-go/v4/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v4/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v4/modules/core/04-channel/types" - ibctesting "github.com/cosmos/ibc-go/v4/testing" + ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v7/testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/x/feeabs/types/build_memo_test.go b/x/feeabs/types/build_memo_test.go index 48f0cb5a..7df5d555 100644 --- a/x/feeabs/types/build_memo_test.go +++ b/x/feeabs/types/build_memo_test.go @@ -5,7 +5,7 @@ import ( "github.com/stretchr/testify/require" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" ) // TODO: need to refactor this test, use driven table diff --git a/x/feeabs/types/expected_keepers.go b/x/feeabs/types/expected_keepers.go index 8a138dc0..6717137d 100644 --- a/x/feeabs/types/expected_keepers.go +++ b/x/feeabs/types/expected_keepers.go @@ -4,9 +4,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/auth/types" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - connectiontypes "github.com/cosmos/ibc-go/v4/modules/core/03-connection/types" - channeltypes "github.com/cosmos/ibc-go/v4/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v4/modules/core/exported" + connectiontypes "github.com/cosmos/ibc-go/v7/modules/core/03-connection/types" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" ) // AccountKeeper defines the expected account keeper used for simulations (noalias) diff --git a/x/feeabs/types/ibc.go b/x/feeabs/types/ibc.go index 4940eed7..2d83279b 100644 --- a/x/feeabs/types/ibc.go +++ b/x/feeabs/types/ibc.go @@ -3,10 +3,10 @@ package types import ( "time" + abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" - abci "github.com/tendermint/tendermint/abci/types" ) const ( diff --git a/x/feeabs/types/osmosisibc.pb.go b/x/feeabs/types/osmosisibc.pb.go index 185663ff..e58a1575 100644 --- a/x/feeabs/types/osmosisibc.pb.go +++ b/x/feeabs/types/osmosisibc.pb.go @@ -10,7 +10,7 @@ import ( proto "github.com/gogo/protobuf/proto" _ "github.com/gogo/protobuf/types" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - types1 "github.com/tendermint/tendermint/abci/types" + types1 "github.com/cometbft/cometbft/abci/types" _ "google.golang.org/genproto/googleapis/api/annotations" io "io" math "math" diff --git a/x/feeabs/types/query.pb.go b/x/feeabs/types/query.pb.go deleted file mode 100644 index f986eb1a..00000000 --- a/x/feeabs/types/query.pb.go +++ /dev/null @@ -1,1718 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: feeabstraction/absfee/v1beta1/query.proto - -package types - -import ( - context "context" - fmt "fmt" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/cosmos/gogoproto/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" - _ "google.golang.org/genproto/googleapis/api/annotations" - 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 - -type QueryHostChainConfigRequest struct { - IbcDenom string `protobuf:"bytes,1,opt,name=ibc_denom,json=ibcDenom,proto3" json:"ibc_denom,omitempty"` -} - -func (m *QueryHostChainConfigRequest) Reset() { *m = QueryHostChainConfigRequest{} } -func (m *QueryHostChainConfigRequest) String() string { return proto.CompactTextString(m) } -func (*QueryHostChainConfigRequest) ProtoMessage() {} -func (*QueryHostChainConfigRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0a3dde61db3cbb0e, []int{0} -} -func (m *QueryHostChainConfigRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryHostChainConfigRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryHostChainConfigRequest.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 *QueryHostChainConfigRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryHostChainConfigRequest.Merge(m, src) -} -func (m *QueryHostChainConfigRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryHostChainConfigRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryHostChainConfigRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryHostChainConfigRequest proto.InternalMessageInfo - -func (m *QueryHostChainConfigRequest) GetIbcDenom() string { - if m != nil { - return m.IbcDenom - } - return "" -} - -type QueryHostChainConfigRespone struct { - HostChainConfig HostChainFeeAbsConfig `protobuf:"bytes,1,opt,name=host_chain_config,json=hostChainConfig,proto3" json:"host_chain_config" yaml:"host_chain_config"` -} - -func (m *QueryHostChainConfigRespone) Reset() { *m = QueryHostChainConfigRespone{} } -func (m *QueryHostChainConfigRespone) String() string { return proto.CompactTextString(m) } -func (*QueryHostChainConfigRespone) ProtoMessage() {} -func (*QueryHostChainConfigRespone) Descriptor() ([]byte, []int) { - return fileDescriptor_0a3dde61db3cbb0e, []int{1} -} -func (m *QueryHostChainConfigRespone) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryHostChainConfigRespone) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryHostChainConfigRespone.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 *QueryHostChainConfigRespone) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryHostChainConfigRespone.Merge(m, src) -} -func (m *QueryHostChainConfigRespone) XXX_Size() int { - return m.Size() -} -func (m *QueryHostChainConfigRespone) XXX_DiscardUnknown() { - xxx_messageInfo_QueryHostChainConfigRespone.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryHostChainConfigRespone proto.InternalMessageInfo - -func (m *QueryHostChainConfigRespone) GetHostChainConfig() HostChainFeeAbsConfig { - if m != nil { - return m.HostChainConfig - } - return HostChainFeeAbsConfig{} -} - -// QueryOsmosisSpotPriceRequest is the request type for the Query/Feeabs RPC -// method. -type QueryOsmosisArithmeticTwapRequest struct { - IbcDenom string `protobuf:"bytes,1,opt,name=ibc_denom,json=ibcDenom,proto3" json:"ibc_denom,omitempty"` -} - -func (m *QueryOsmosisArithmeticTwapRequest) Reset() { *m = QueryOsmosisArithmeticTwapRequest{} } -func (m *QueryOsmosisArithmeticTwapRequest) String() string { return proto.CompactTextString(m) } -func (*QueryOsmosisArithmeticTwapRequest) ProtoMessage() {} -func (*QueryOsmosisArithmeticTwapRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0a3dde61db3cbb0e, []int{2} -} -func (m *QueryOsmosisArithmeticTwapRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryOsmosisArithmeticTwapRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryOsmosisArithmeticTwapRequest.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 *QueryOsmosisArithmeticTwapRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryOsmosisArithmeticTwapRequest.Merge(m, src) -} -func (m *QueryOsmosisArithmeticTwapRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryOsmosisArithmeticTwapRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryOsmosisArithmeticTwapRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryOsmosisArithmeticTwapRequest proto.InternalMessageInfo - -func (m *QueryOsmosisArithmeticTwapRequest) GetIbcDenom() string { - if m != nil { - return m.IbcDenom - } - return "" -} - -type QueryOsmosisArithmeticTwapResponse struct { - ArithmeticTwap github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,1,opt,name=arithmetic_twap,json=arithmeticTwap,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"arithmetic_twap" yaml:"arithmetic_twap"` -} - -func (m *QueryOsmosisArithmeticTwapResponse) Reset() { *m = QueryOsmosisArithmeticTwapResponse{} } -func (m *QueryOsmosisArithmeticTwapResponse) String() string { return proto.CompactTextString(m) } -func (*QueryOsmosisArithmeticTwapResponse) ProtoMessage() {} -func (*QueryOsmosisArithmeticTwapResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0a3dde61db3cbb0e, []int{3} -} -func (m *QueryOsmosisArithmeticTwapResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryOsmosisArithmeticTwapResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryOsmosisArithmeticTwapResponse.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 *QueryOsmosisArithmeticTwapResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryOsmosisArithmeticTwapResponse.Merge(m, src) -} -func (m *QueryOsmosisArithmeticTwapResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryOsmosisArithmeticTwapResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryOsmosisArithmeticTwapResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryOsmosisArithmeticTwapResponse proto.InternalMessageInfo - -// QueryFeeabsModuleBalacesRequest is the request type for the Query/Feeabs RPC -// method. -type QueryFeeabsModuleBalacesRequest struct { -} - -func (m *QueryFeeabsModuleBalacesRequest) Reset() { *m = QueryFeeabsModuleBalacesRequest{} } -func (m *QueryFeeabsModuleBalacesRequest) String() string { return proto.CompactTextString(m) } -func (*QueryFeeabsModuleBalacesRequest) ProtoMessage() {} -func (*QueryFeeabsModuleBalacesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0a3dde61db3cbb0e, []int{4} -} -func (m *QueryFeeabsModuleBalacesRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryFeeabsModuleBalacesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryFeeabsModuleBalacesRequest.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 *QueryFeeabsModuleBalacesRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryFeeabsModuleBalacesRequest.Merge(m, src) -} -func (m *QueryFeeabsModuleBalacesRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryFeeabsModuleBalacesRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryFeeabsModuleBalacesRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryFeeabsModuleBalacesRequest proto.InternalMessageInfo - -type QueryFeeabsModuleBalacesResponse struct { - Balances github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=balances,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"balances" yaml:"balances"` - Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` -} - -func (m *QueryFeeabsModuleBalacesResponse) Reset() { *m = QueryFeeabsModuleBalacesResponse{} } -func (m *QueryFeeabsModuleBalacesResponse) String() string { return proto.CompactTextString(m) } -func (*QueryFeeabsModuleBalacesResponse) ProtoMessage() {} -func (*QueryFeeabsModuleBalacesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0a3dde61db3cbb0e, []int{5} -} -func (m *QueryFeeabsModuleBalacesResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryFeeabsModuleBalacesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryFeeabsModuleBalacesResponse.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 *QueryFeeabsModuleBalacesResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryFeeabsModuleBalacesResponse.Merge(m, src) -} -func (m *QueryFeeabsModuleBalacesResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryFeeabsModuleBalacesResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryFeeabsModuleBalacesResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryFeeabsModuleBalacesResponse proto.InternalMessageInfo - -func (m *QueryFeeabsModuleBalacesResponse) GetBalances() github_com_cosmos_cosmos_sdk_types.Coins { - if m != nil { - return m.Balances - } - return nil -} - -func (m *QueryFeeabsModuleBalacesResponse) GetAddress() string { - if m != nil { - return m.Address - } - return "" -} - -type AllQueryHostChainConfigRequest struct { -} - -func (m *AllQueryHostChainConfigRequest) Reset() { *m = AllQueryHostChainConfigRequest{} } -func (m *AllQueryHostChainConfigRequest) String() string { return proto.CompactTextString(m) } -func (*AllQueryHostChainConfigRequest) ProtoMessage() {} -func (*AllQueryHostChainConfigRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0a3dde61db3cbb0e, []int{6} -} -func (m *AllQueryHostChainConfigRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *AllQueryHostChainConfigRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_AllQueryHostChainConfigRequest.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 *AllQueryHostChainConfigRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_AllQueryHostChainConfigRequest.Merge(m, src) -} -func (m *AllQueryHostChainConfigRequest) XXX_Size() int { - return m.Size() -} -func (m *AllQueryHostChainConfigRequest) XXX_DiscardUnknown() { - xxx_messageInfo_AllQueryHostChainConfigRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_AllQueryHostChainConfigRequest proto.InternalMessageInfo - -type AllQueryHostChainConfigRespone struct { - AllHostChainConfig []HostChainFeeAbsConfig `protobuf:"bytes,1,rep,name=all_host_chain_config,json=allHostChainConfig,proto3" json:"all_host_chain_config" yaml:"all_host_chain_config"` -} - -func (m *AllQueryHostChainConfigRespone) Reset() { *m = AllQueryHostChainConfigRespone{} } -func (m *AllQueryHostChainConfigRespone) String() string { return proto.CompactTextString(m) } -func (*AllQueryHostChainConfigRespone) ProtoMessage() {} -func (*AllQueryHostChainConfigRespone) Descriptor() ([]byte, []int) { - return fileDescriptor_0a3dde61db3cbb0e, []int{7} -} -func (m *AllQueryHostChainConfigRespone) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *AllQueryHostChainConfigRespone) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_AllQueryHostChainConfigRespone.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 *AllQueryHostChainConfigRespone) XXX_Merge(src proto.Message) { - xxx_messageInfo_AllQueryHostChainConfigRespone.Merge(m, src) -} -func (m *AllQueryHostChainConfigRespone) XXX_Size() int { - return m.Size() -} -func (m *AllQueryHostChainConfigRespone) XXX_DiscardUnknown() { - xxx_messageInfo_AllQueryHostChainConfigRespone.DiscardUnknown(m) -} - -var xxx_messageInfo_AllQueryHostChainConfigRespone proto.InternalMessageInfo - -func (m *AllQueryHostChainConfigRespone) GetAllHostChainConfig() []HostChainFeeAbsConfig { - if m != nil { - return m.AllHostChainConfig - } - return nil -} - -func init() { - proto.RegisterType((*QueryHostChainConfigRequest)(nil), "feeabstraction.absfee.v1beta1.QueryHostChainConfigRequest") - proto.RegisterType((*QueryHostChainConfigRespone)(nil), "feeabstraction.absfee.v1beta1.QueryHostChainConfigRespone") - proto.RegisterType((*QueryOsmosisArithmeticTwapRequest)(nil), "feeabstraction.absfee.v1beta1.QueryOsmosisArithmeticTwapRequest") - proto.RegisterType((*QueryOsmosisArithmeticTwapResponse)(nil), "feeabstraction.absfee.v1beta1.QueryOsmosisArithmeticTwapResponse") - proto.RegisterType((*QueryFeeabsModuleBalacesRequest)(nil), "feeabstraction.absfee.v1beta1.QueryFeeabsModuleBalacesRequest") - proto.RegisterType((*QueryFeeabsModuleBalacesResponse)(nil), "feeabstraction.absfee.v1beta1.QueryFeeabsModuleBalacesResponse") - proto.RegisterType((*AllQueryHostChainConfigRequest)(nil), "feeabstraction.absfee.v1beta1.AllQueryHostChainConfigRequest") - proto.RegisterType((*AllQueryHostChainConfigRespone)(nil), "feeabstraction.absfee.v1beta1.AllQueryHostChainConfigRespone") -} - -func init() { - proto.RegisterFile("feeabstraction/absfee/v1beta1/query.proto", fileDescriptor_0a3dde61db3cbb0e) -} - -var fileDescriptor_0a3dde61db3cbb0e = []byte{ - // 757 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0xcf, 0x4f, 0x13, 0x4d, - 0x18, 0xee, 0x40, 0x3e, 0x3e, 0x18, 0x92, 0xaf, 0xf9, 0x26, 0xf0, 0xa5, 0x5f, 0xc1, 0x6d, 0x99, - 0x18, 0x83, 0x84, 0xdd, 0x95, 0xea, 0x81, 0x34, 0x11, 0xfb, 0x83, 0x10, 0x2e, 0xc6, 0xd8, 0x70, - 0xf2, 0xd2, 0xcc, 0x6e, 0xa7, 0xed, 0xc6, 0xe9, 0xce, 0xd2, 0xd9, 0x82, 0x68, 0xbc, 0x70, 0x37, - 0x31, 0xf1, 0xe0, 0xdd, 0xa3, 0x27, 0x8f, 0xfe, 0x09, 0x24, 0x78, 0x20, 0xf1, 0xa2, 0x1e, 0xaa, - 0x01, 0xfe, 0x02, 0xfe, 0x02, 0xb3, 0x33, 0xdb, 0x42, 0x4b, 0xd9, 0x36, 0xf5, 0xd4, 0x6e, 0xe6, - 0x79, 0x9f, 0xf7, 0x79, 0xde, 0xf7, 0xd9, 0x59, 0x78, 0xb7, 0x4a, 0x29, 0xb1, 0x84, 0xdf, 0x24, - 0xb6, 0xef, 0x70, 0xd7, 0x24, 0x96, 0xa8, 0x52, 0x6a, 0xee, 0xad, 0x59, 0xd4, 0x27, 0x6b, 0xe6, - 0x6e, 0x8b, 0x36, 0x0f, 0x0c, 0xaf, 0xc9, 0x7d, 0x8e, 0x6e, 0xf5, 0x42, 0x0d, 0x05, 0x35, 0x42, - 0x68, 0x72, 0xae, 0xc6, 0x6b, 0x5c, 0x22, 0xcd, 0xe0, 0x9f, 0x2a, 0x4a, 0x2e, 0xd6, 0x38, 0xaf, - 0x31, 0x6a, 0x12, 0xcf, 0x31, 0x89, 0xeb, 0x72, 0x9f, 0x04, 0xb5, 0x22, 0x3c, 0x5d, 0x89, 0xee, - 0xee, 0x91, 0x26, 0x69, 0x74, 0xb0, 0x46, 0x34, 0x96, 0x8b, 0x06, 0x17, 0x8e, 0x70, 0x2c, 0x3b, - 0xc4, 0xaf, 0x0e, 0xe1, 0x6e, 0x72, 0x8f, 0x0b, 0xc2, 0x42, 0xb4, 0x66, 0x4b, 0x02, 0xd3, 0x22, - 0xe2, 0x12, 0x63, 0x73, 0xc7, 0x55, 0xe7, 0x38, 0x0b, 0x17, 0x9e, 0x06, 0xb3, 0xd8, 0xe6, 0xc2, - 0x2f, 0xd6, 0x89, 0xe3, 0x16, 0xb9, 0x5b, 0x75, 0x6a, 0x25, 0xba, 0xdb, 0xa2, 0xc2, 0x47, 0x0b, - 0x70, 0xc6, 0xb1, 0xec, 0x72, 0x85, 0xba, 0xbc, 0x91, 0x00, 0x69, 0xb0, 0x3c, 0x53, 0x9a, 0x76, - 0x2c, 0x7b, 0x33, 0x78, 0xc6, 0x1f, 0xc0, 0x4d, 0xc5, 0xc2, 0xe3, 0x2e, 0x45, 0x87, 0x00, 0xfe, - 0x5b, 0xe7, 0xc2, 0x2f, 0xdb, 0xc1, 0x59, 0xd9, 0x96, 0x87, 0x92, 0x65, 0x36, 0xf3, 0xc0, 0x88, - 0x9c, 0xba, 0xd1, 0xa5, 0xdc, 0xa2, 0x34, 0x6f, 0x09, 0x45, 0x5c, 0x48, 0x1f, 0xb5, 0x53, 0xb1, - 0x8b, 0x76, 0x2a, 0x71, 0x40, 0x1a, 0x2c, 0x8b, 0xaf, 0x91, 0xe3, 0x52, 0xbc, 0xde, 0xab, 0x05, - 0xe7, 0xe0, 0x92, 0xd4, 0xf8, 0x44, 0xcd, 0x31, 0xdf, 0x74, 0xfc, 0x7a, 0x83, 0xfa, 0x8e, 0xbd, - 0xb3, 0x4f, 0xbc, 0x91, 0x6c, 0xbe, 0x07, 0x10, 0x47, 0x51, 0x04, 0x66, 0x05, 0x45, 0xbb, 0x30, - 0x4e, 0xba, 0x27, 0x65, 0x7f, 0x9f, 0x78, 0x8a, 0xa9, 0xb0, 0x1d, 0x88, 0xfe, 0xd1, 0x4e, 0xdd, - 0xa9, 0x39, 0x7e, 0xbd, 0x65, 0x19, 0x36, 0x6f, 0x98, 0xe1, 0x56, 0xd4, 0x8f, 0x2e, 0x2a, 0xcf, - 0x4d, 0xff, 0xc0, 0xa3, 0xc2, 0xd8, 0xa4, 0xf6, 0x45, 0x3b, 0xf5, 0x9f, 0xb2, 0xd7, 0x47, 0x87, - 0x4b, 0xff, 0x90, 0x9e, 0xd6, 0x78, 0x09, 0xa6, 0xa4, 0xb0, 0x2d, 0x39, 0xca, 0xc7, 0xbc, 0xd2, - 0x62, 0xb4, 0x40, 0x18, 0xb1, 0xa9, 0x08, 0x9d, 0xe1, 0xcf, 0x00, 0xa6, 0x6f, 0xc6, 0x84, 0xd2, - 0x5f, 0xc2, 0x69, 0x8b, 0x30, 0xe2, 0xda, 0x54, 0x24, 0x40, 0x7a, 0x72, 0x79, 0x36, 0xf3, 0xbf, - 0xa1, 0xa4, 0x19, 0x41, 0x6e, 0xba, 0x4b, 0x29, 0x72, 0xc7, 0x2d, 0x14, 0xc3, 0x1d, 0xc4, 0x95, - 0xc8, 0x4e, 0x21, 0xfe, 0xf8, 0x33, 0xb5, 0x3c, 0x82, 0xc3, 0x80, 0x43, 0x94, 0xba, 0xfd, 0x50, - 0x02, 0xfe, 0x4d, 0x2a, 0x95, 0x26, 0x15, 0x22, 0x31, 0x21, 0x07, 0xdf, 0x79, 0xc4, 0x69, 0xa8, - 0xe5, 0x19, 0x8b, 0x48, 0x27, 0xfe, 0x04, 0x22, 0x20, 0x2a, 0x83, 0x6f, 0x00, 0x9c, 0x27, 0x8c, - 0x95, 0x07, 0xe5, 0x70, 0x72, 0xec, 0x1c, 0xde, 0x0e, 0x67, 0xb0, 0x18, 0x2e, 0x6a, 0x50, 0x03, - 0x5c, 0x42, 0x84, 0xb1, 0x3e, 0x59, 0x99, 0xef, 0x53, 0xf0, 0x2f, 0xa9, 0x17, 0x9d, 0x03, 0x38, - 0x3f, 0x30, 0x51, 0x28, 0x37, 0x44, 0xd3, 0xd0, 0x3c, 0x27, 0xf3, 0x7f, 0xc0, 0xa0, 0x32, 0x81, - 0xb7, 0x0e, 0xbf, 0x9e, 0xbf, 0x9b, 0xc8, 0xa1, 0x0d, 0xb3, 0x4a, 0xa9, 0x7e, 0xf5, 0xc2, 0x51, - 0xd4, 0xe6, 0x5e, 0xf7, 0x6e, 0xd2, 0x2f, 0x63, 0xa9, 0x07, 0x41, 0x35, 0x5f, 0x75, 0x5f, 0xa6, - 0xd7, 0xe8, 0x18, 0xc0, 0xb9, 0xfe, 0xec, 0xc9, 0xc5, 0x6f, 0x8c, 0xa2, 0xf1, 0xe6, 0x64, 0x27, - 0x1f, 0x8d, 0x5d, 0x1f, 0x3a, 0xcc, 0x48, 0x87, 0xab, 0x68, 0x25, 0xc2, 0x61, 0x43, 0x56, 0xea, - 0xdd, 0xb4, 0x1e, 0x03, 0x18, 0xef, 0x5b, 0x29, 0xca, 0x8e, 0x22, 0x64, 0x70, 0x82, 0x93, 0xe3, - 0xd5, 0xca, 0x68, 0xe3, 0x9c, 0xd4, 0x9f, 0x45, 0xeb, 0x11, 0xfa, 0x83, 0x54, 0xea, 0x32, 0x95, - 0xba, 0x4a, 0x65, 0xcf, 0x6e, 0xbe, 0x00, 0x88, 0xf2, 0xd7, 0x32, 0x8a, 0x1e, 0x0e, 0x11, 0x15, - 0xfd, 0x56, 0x26, 0xc7, 0x2e, 0x57, 0xb6, 0xd6, 0xa5, 0xad, 0x0c, 0xba, 0x17, 0x61, 0x8b, 0x30, - 0xa6, 0x5f, 0xb3, 0x56, 0xd8, 0x39, 0x3a, 0xd5, 0xc0, 0xc9, 0xa9, 0x06, 0x7e, 0x9d, 0x6a, 0xe0, - 0xed, 0x99, 0x16, 0x3b, 0x39, 0xd3, 0x62, 0xdf, 0xce, 0xb4, 0xd8, 0xb3, 0xec, 0x95, 0x8b, 0xc9, - 0xe5, 0x01, 0x19, 0x61, 0x3a, 0x0b, 0xc8, 0xfa, 0x7b, 0xec, 0x65, 0xcc, 0x17, 0x9d, 0x46, 0xf2, - 0xc2, 0xb2, 0xa6, 0xe4, 0x87, 0xf2, 0xfe, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x55, 0xf5, 0x2a, - 0xec, 0x52, 0x08, 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 - -// QueryClient is the client API for Query service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type QueryClient interface { - // OsmosisSpotPrice return spot price of pair Osmo/nativeToken - OsmosisArithmeticTwap(ctx context.Context, in *QueryOsmosisArithmeticTwapRequest, opts ...grpc.CallOption) (*QueryOsmosisArithmeticTwapResponse, error) - // FeeabsModuleBalances return total balances of feeabs module - FeeabsModuleBalances(ctx context.Context, in *QueryFeeabsModuleBalacesRequest, opts ...grpc.CallOption) (*QueryFeeabsModuleBalacesResponse, error) - HostChainConfig(ctx context.Context, in *QueryHostChainConfigRequest, opts ...grpc.CallOption) (*QueryHostChainConfigRespone, error) - AllHostChainConfig(ctx context.Context, in *AllQueryHostChainConfigRequest, opts ...grpc.CallOption) (*AllQueryHostChainConfigRespone, error) -} - -type queryClient struct { - cc grpc1.ClientConn -} - -func NewQueryClient(cc grpc1.ClientConn) QueryClient { - return &queryClient{cc} -} - -func (c *queryClient) OsmosisArithmeticTwap(ctx context.Context, in *QueryOsmosisArithmeticTwapRequest, opts ...grpc.CallOption) (*QueryOsmosisArithmeticTwapResponse, error) { - out := new(QueryOsmosisArithmeticTwapResponse) - err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Query/OsmosisArithmeticTwap", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *queryClient) FeeabsModuleBalances(ctx context.Context, in *QueryFeeabsModuleBalacesRequest, opts ...grpc.CallOption) (*QueryFeeabsModuleBalacesResponse, error) { - out := new(QueryFeeabsModuleBalacesResponse) - err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Query/FeeabsModuleBalances", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *queryClient) HostChainConfig(ctx context.Context, in *QueryHostChainConfigRequest, opts ...grpc.CallOption) (*QueryHostChainConfigRespone, error) { - out := new(QueryHostChainConfigRespone) - err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Query/HostChainConfig", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *queryClient) AllHostChainConfig(ctx context.Context, in *AllQueryHostChainConfigRequest, opts ...grpc.CallOption) (*AllQueryHostChainConfigRespone, error) { - out := new(AllQueryHostChainConfigRespone) - err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Query/AllHostChainConfig", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// QueryServer is the server API for Query service. -type QueryServer interface { - // OsmosisSpotPrice return spot price of pair Osmo/nativeToken - OsmosisArithmeticTwap(context.Context, *QueryOsmosisArithmeticTwapRequest) (*QueryOsmosisArithmeticTwapResponse, error) - // FeeabsModuleBalances return total balances of feeabs module - FeeabsModuleBalances(context.Context, *QueryFeeabsModuleBalacesRequest) (*QueryFeeabsModuleBalacesResponse, error) - HostChainConfig(context.Context, *QueryHostChainConfigRequest) (*QueryHostChainConfigRespone, error) - AllHostChainConfig(context.Context, *AllQueryHostChainConfigRequest) (*AllQueryHostChainConfigRespone, error) -} - -// UnimplementedQueryServer can be embedded to have forward compatible implementations. -type UnimplementedQueryServer struct { -} - -func (*UnimplementedQueryServer) OsmosisArithmeticTwap(ctx context.Context, req *QueryOsmosisArithmeticTwapRequest) (*QueryOsmosisArithmeticTwapResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method OsmosisArithmeticTwap not implemented") -} -func (*UnimplementedQueryServer) FeeabsModuleBalances(ctx context.Context, req *QueryFeeabsModuleBalacesRequest) (*QueryFeeabsModuleBalacesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method FeeabsModuleBalances not implemented") -} -func (*UnimplementedQueryServer) HostChainConfig(ctx context.Context, req *QueryHostChainConfigRequest) (*QueryHostChainConfigRespone, error) { - return nil, status.Errorf(codes.Unimplemented, "method HostChainConfig not implemented") -} -func (*UnimplementedQueryServer) AllHostChainConfig(ctx context.Context, req *AllQueryHostChainConfigRequest) (*AllQueryHostChainConfigRespone, error) { - return nil, status.Errorf(codes.Unimplemented, "method AllHostChainConfig not implemented") -} - -func RegisterQueryServer(s grpc1.Server, srv QueryServer) { - s.RegisterService(&_Query_serviceDesc, srv) -} - -func _Query_OsmosisArithmeticTwap_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryOsmosisArithmeticTwapRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).OsmosisArithmeticTwap(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/feeabstraction.absfee.v1beta1.Query/OsmosisArithmeticTwap", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).OsmosisArithmeticTwap(ctx, req.(*QueryOsmosisArithmeticTwapRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_FeeabsModuleBalances_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryFeeabsModuleBalacesRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).FeeabsModuleBalances(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/feeabstraction.absfee.v1beta1.Query/FeeabsModuleBalances", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).FeeabsModuleBalances(ctx, req.(*QueryFeeabsModuleBalacesRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_HostChainConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryHostChainConfigRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).HostChainConfig(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/feeabstraction.absfee.v1beta1.Query/HostChainConfig", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).HostChainConfig(ctx, req.(*QueryHostChainConfigRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_AllHostChainConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AllQueryHostChainConfigRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).AllHostChainConfig(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/feeabstraction.absfee.v1beta1.Query/AllHostChainConfig", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).AllHostChainConfig(ctx, req.(*AllQueryHostChainConfigRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "feeabstraction.absfee.v1beta1.Query", - HandlerType: (*QueryServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "OsmosisArithmeticTwap", - Handler: _Query_OsmosisArithmeticTwap_Handler, - }, - { - MethodName: "FeeabsModuleBalances", - Handler: _Query_FeeabsModuleBalances_Handler, - }, - { - MethodName: "HostChainConfig", - Handler: _Query_HostChainConfig_Handler, - }, - { - MethodName: "AllHostChainConfig", - Handler: _Query_AllHostChainConfig_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "feeabstraction/absfee/v1beta1/query.proto", -} - -func (m *QueryHostChainConfigRequest) 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 *QueryHostChainConfigRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryHostChainConfigRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.IbcDenom) > 0 { - i -= len(m.IbcDenom) - copy(dAtA[i:], m.IbcDenom) - i = encodeVarintQuery(dAtA, i, uint64(len(m.IbcDenom))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *QueryHostChainConfigRespone) 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 *QueryHostChainConfigRespone) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryHostChainConfigRespone) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.HostChainConfig.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *QueryOsmosisArithmeticTwapRequest) 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 *QueryOsmosisArithmeticTwapRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryOsmosisArithmeticTwapRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.IbcDenom) > 0 { - i -= len(m.IbcDenom) - copy(dAtA[i:], m.IbcDenom) - i = encodeVarintQuery(dAtA, i, uint64(len(m.IbcDenom))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *QueryOsmosisArithmeticTwapResponse) 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 *QueryOsmosisArithmeticTwapResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryOsmosisArithmeticTwapResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.ArithmeticTwap.Size() - i -= size - if _, err := m.ArithmeticTwap.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *QueryFeeabsModuleBalacesRequest) 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 *QueryFeeabsModuleBalacesRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryFeeabsModuleBalacesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *QueryFeeabsModuleBalacesResponse) 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 *QueryFeeabsModuleBalacesResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryFeeabsModuleBalacesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Address) > 0 { - i -= len(m.Address) - copy(dAtA[i:], m.Address) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) - i-- - dAtA[i] = 0x12 - } - if len(m.Balances) > 0 { - for iNdEx := len(m.Balances) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Balances[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *AllQueryHostChainConfigRequest) 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 *AllQueryHostChainConfigRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *AllQueryHostChainConfigRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *AllQueryHostChainConfigRespone) 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 *AllQueryHostChainConfigRespone) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *AllQueryHostChainConfigRespone) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.AllHostChainConfig) > 0 { - for iNdEx := len(m.AllHostChainConfig) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.AllHostChainConfig[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { - offset -= sovQuery(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *QueryHostChainConfigRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.IbcDenom) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryHostChainConfigRespone) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.HostChainConfig.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func (m *QueryOsmosisArithmeticTwapRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.IbcDenom) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryOsmosisArithmeticTwapResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ArithmeticTwap.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func (m *QueryFeeabsModuleBalacesRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *QueryFeeabsModuleBalacesResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Balances) > 0 { - for _, e := range m.Balances { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - l = len(m.Address) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *AllQueryHostChainConfigRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *AllQueryHostChainConfigRespone) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.AllHostChainConfig) > 0 { - for _, e := range m.AllHostChainConfig { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - return n -} - -func sovQuery(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozQuery(x uint64) (n int) { - return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *QueryHostChainConfigRequest) 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 ErrIntOverflowQuery - } - 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: QueryHostChainConfigRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryHostChainConfigRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IbcDenom", 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.IbcDenom = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryHostChainConfigRespone) 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 ErrIntOverflowQuery - } - 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: QueryHostChainConfigRespone: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryHostChainConfigRespone: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HostChainConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.HostChainConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryOsmosisArithmeticTwapRequest) 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 ErrIntOverflowQuery - } - 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: QueryOsmosisArithmeticTwapRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryOsmosisArithmeticTwapRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IbcDenom", 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.IbcDenom = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryOsmosisArithmeticTwapResponse) 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 ErrIntOverflowQuery - } - 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: QueryOsmosisArithmeticTwapResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryOsmosisArithmeticTwapResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ArithmeticTwap", 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 - } - if err := m.ArithmeticTwap.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryFeeabsModuleBalacesRequest) 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 ErrIntOverflowQuery - } - 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: QueryFeeabsModuleBalacesRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryFeeabsModuleBalacesRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryFeeabsModuleBalacesResponse) 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 ErrIntOverflowQuery - } - 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: QueryFeeabsModuleBalacesResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryFeeabsModuleBalacesResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Balances", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Balances = append(m.Balances, types.Coin{}) - if err := m.Balances[len(m.Balances)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Address", 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.Address = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AllQueryHostChainConfigRequest) 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 ErrIntOverflowQuery - } - 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: AllQueryHostChainConfigRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AllQueryHostChainConfigRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *AllQueryHostChainConfigRespone) 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 ErrIntOverflowQuery - } - 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: AllQueryHostChainConfigRespone: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: AllQueryHostChainConfigRespone: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AllHostChainConfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.AllHostChainConfig = append(m.AllHostChainConfig, HostChainFeeAbsConfig{}) - if err := m.AllHostChainConfig[len(m.AllHostChainConfig)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipQuery(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, ErrIntOverflowQuery - } - 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, ErrIntOverflowQuery - } - 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, ErrIntOverflowQuery - } - 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, ErrInvalidLengthQuery - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupQuery - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthQuery - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") -) diff --git a/x/feeabs/types/tx.pb.go b/x/feeabs/types/tx.pb.go deleted file mode 100644 index 764f13f8..00000000 --- a/x/feeabs/types/tx.pb.go +++ /dev/null @@ -1,1316 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: feeabstraction/absfee/v1beta1/tx.proto - -package types - -import ( - context "context" - fmt "fmt" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/cosmos/gogoproto/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" - _ "github.com/gogo/protobuf/types" - _ "google.golang.org/genproto/googleapis/api/annotations" - 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 - -// Msg fund module account -type MsgFundFeeAbsModuleAccount struct { - FromAddress string `protobuf:"bytes,1,opt,name=from_address,json=fromAddress,proto3" json:"from_address,omitempty"` - Amount github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,2,rep,name=amount,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"amount" yaml:"amount"` -} - -func (m *MsgFundFeeAbsModuleAccount) Reset() { *m = MsgFundFeeAbsModuleAccount{} } -func (m *MsgFundFeeAbsModuleAccount) String() string { return proto.CompactTextString(m) } -func (*MsgFundFeeAbsModuleAccount) ProtoMessage() {} -func (*MsgFundFeeAbsModuleAccount) Descriptor() ([]byte, []int) { - return fileDescriptor_84c172c34645b936, []int{0} -} -func (m *MsgFundFeeAbsModuleAccount) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgFundFeeAbsModuleAccount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgFundFeeAbsModuleAccount.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 *MsgFundFeeAbsModuleAccount) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgFundFeeAbsModuleAccount.Merge(m, src) -} -func (m *MsgFundFeeAbsModuleAccount) XXX_Size() int { - return m.Size() -} -func (m *MsgFundFeeAbsModuleAccount) XXX_DiscardUnknown() { - xxx_messageInfo_MsgFundFeeAbsModuleAccount.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgFundFeeAbsModuleAccount proto.InternalMessageInfo - -func (m *MsgFundFeeAbsModuleAccount) GetFromAddress() string { - if m != nil { - return m.FromAddress - } - return "" -} - -func (m *MsgFundFeeAbsModuleAccount) GetAmount() github_com_cosmos_cosmos_sdk_types.Coins { - if m != nil { - return m.Amount - } - return nil -} - -type MsgFundFeeAbsModuleAccountResponse struct { -} - -func (m *MsgFundFeeAbsModuleAccountResponse) Reset() { *m = MsgFundFeeAbsModuleAccountResponse{} } -func (m *MsgFundFeeAbsModuleAccountResponse) String() string { return proto.CompactTextString(m) } -func (*MsgFundFeeAbsModuleAccountResponse) ProtoMessage() {} -func (*MsgFundFeeAbsModuleAccountResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_84c172c34645b936, []int{1} -} -func (m *MsgFundFeeAbsModuleAccountResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgFundFeeAbsModuleAccountResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgFundFeeAbsModuleAccountResponse.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 *MsgFundFeeAbsModuleAccountResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgFundFeeAbsModuleAccountResponse.Merge(m, src) -} -func (m *MsgFundFeeAbsModuleAccountResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgFundFeeAbsModuleAccountResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgFundFeeAbsModuleAccountResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgFundFeeAbsModuleAccountResponse proto.InternalMessageInfo - -// Params defines the parameters for the feeabs module. -type MsgSendQueryIbcDenomTWAP struct { - FromAddress string `protobuf:"bytes,1,opt,name=from_address,json=fromAddress,proto3" json:"from_address,omitempty"` -} - -func (m *MsgSendQueryIbcDenomTWAP) Reset() { *m = MsgSendQueryIbcDenomTWAP{} } -func (m *MsgSendQueryIbcDenomTWAP) String() string { return proto.CompactTextString(m) } -func (*MsgSendQueryIbcDenomTWAP) ProtoMessage() {} -func (*MsgSendQueryIbcDenomTWAP) Descriptor() ([]byte, []int) { - return fileDescriptor_84c172c34645b936, []int{2} -} -func (m *MsgSendQueryIbcDenomTWAP) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgSendQueryIbcDenomTWAP) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgSendQueryIbcDenomTWAP.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 *MsgSendQueryIbcDenomTWAP) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgSendQueryIbcDenomTWAP.Merge(m, src) -} -func (m *MsgSendQueryIbcDenomTWAP) XXX_Size() int { - return m.Size() -} -func (m *MsgSendQueryIbcDenomTWAP) XXX_DiscardUnknown() { - xxx_messageInfo_MsgSendQueryIbcDenomTWAP.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgSendQueryIbcDenomTWAP proto.InternalMessageInfo - -func (m *MsgSendQueryIbcDenomTWAP) GetFromAddress() string { - if m != nil { - return m.FromAddress - } - return "" -} - -type MsgSendQueryIbcDenomTWAPResponse struct { -} - -func (m *MsgSendQueryIbcDenomTWAPResponse) Reset() { *m = MsgSendQueryIbcDenomTWAPResponse{} } -func (m *MsgSendQueryIbcDenomTWAPResponse) String() string { return proto.CompactTextString(m) } -func (*MsgSendQueryIbcDenomTWAPResponse) ProtoMessage() {} -func (*MsgSendQueryIbcDenomTWAPResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_84c172c34645b936, []int{3} -} -func (m *MsgSendQueryIbcDenomTWAPResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgSendQueryIbcDenomTWAPResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgSendQueryIbcDenomTWAPResponse.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 *MsgSendQueryIbcDenomTWAPResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgSendQueryIbcDenomTWAPResponse.Merge(m, src) -} -func (m *MsgSendQueryIbcDenomTWAPResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgSendQueryIbcDenomTWAPResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgSendQueryIbcDenomTWAPResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgSendQueryIbcDenomTWAPResponse proto.InternalMessageInfo - -// Params defines the parameters for the feeabs module. -type MsgSwapCrossChain struct { - FromAddress string `protobuf:"bytes,1,opt,name=from_address,json=fromAddress,proto3" json:"from_address,omitempty"` - IbcDenom string `protobuf:"bytes,2,opt,name=ibc_denom,json=ibcDenom,proto3" json:"ibc_denom,omitempty"` -} - -func (m *MsgSwapCrossChain) Reset() { *m = MsgSwapCrossChain{} } -func (m *MsgSwapCrossChain) String() string { return proto.CompactTextString(m) } -func (*MsgSwapCrossChain) ProtoMessage() {} -func (*MsgSwapCrossChain) Descriptor() ([]byte, []int) { - return fileDescriptor_84c172c34645b936, []int{4} -} -func (m *MsgSwapCrossChain) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgSwapCrossChain) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgSwapCrossChain.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 *MsgSwapCrossChain) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgSwapCrossChain.Merge(m, src) -} -func (m *MsgSwapCrossChain) XXX_Size() int { - return m.Size() -} -func (m *MsgSwapCrossChain) XXX_DiscardUnknown() { - xxx_messageInfo_MsgSwapCrossChain.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgSwapCrossChain proto.InternalMessageInfo - -func (m *MsgSwapCrossChain) GetFromAddress() string { - if m != nil { - return m.FromAddress - } - return "" -} - -func (m *MsgSwapCrossChain) GetIbcDenom() string { - if m != nil { - return m.IbcDenom - } - return "" -} - -type MsgSwapCrossChainResponse struct { -} - -func (m *MsgSwapCrossChainResponse) Reset() { *m = MsgSwapCrossChainResponse{} } -func (m *MsgSwapCrossChainResponse) String() string { return proto.CompactTextString(m) } -func (*MsgSwapCrossChainResponse) ProtoMessage() {} -func (*MsgSwapCrossChainResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_84c172c34645b936, []int{5} -} -func (m *MsgSwapCrossChainResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgSwapCrossChainResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgSwapCrossChainResponse.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 *MsgSwapCrossChainResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgSwapCrossChainResponse.Merge(m, src) -} -func (m *MsgSwapCrossChainResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgSwapCrossChainResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgSwapCrossChainResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgSwapCrossChainResponse proto.InternalMessageInfo - -func init() { - proto.RegisterType((*MsgFundFeeAbsModuleAccount)(nil), "feeabstraction.absfee.v1beta1.MsgFundFeeAbsModuleAccount") - proto.RegisterType((*MsgFundFeeAbsModuleAccountResponse)(nil), "feeabstraction.absfee.v1beta1.MsgFundFeeAbsModuleAccountResponse") - proto.RegisterType((*MsgSendQueryIbcDenomTWAP)(nil), "feeabstraction.absfee.v1beta1.MsgSendQueryIbcDenomTWAP") - proto.RegisterType((*MsgSendQueryIbcDenomTWAPResponse)(nil), "feeabstraction.absfee.v1beta1.MsgSendQueryIbcDenomTWAPResponse") - proto.RegisterType((*MsgSwapCrossChain)(nil), "feeabstraction.absfee.v1beta1.MsgSwapCrossChain") - proto.RegisterType((*MsgSwapCrossChainResponse)(nil), "feeabstraction.absfee.v1beta1.MsgSwapCrossChainResponse") -} - -func init() { - proto.RegisterFile("feeabstraction/absfee/v1beta1/tx.proto", fileDescriptor_84c172c34645b936) -} - -var fileDescriptor_84c172c34645b936 = []byte{ - // 542 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x4d, 0x6e, 0xd3, 0x40, - 0x14, 0x8e, 0x1b, 0xa9, 0xa2, 0x53, 0x40, 0x22, 0x02, 0x91, 0xba, 0xe0, 0x04, 0x0b, 0xa1, 0x80, - 0x14, 0x0f, 0x0d, 0x0b, 0xa0, 0x12, 0x42, 0x6e, 0x50, 0x25, 0x16, 0x91, 0x20, 0xad, 0x84, 0xc4, - 0xa6, 0x9a, 0xb1, 0x27, 0x8e, 0x45, 0x3c, 0xcf, 0xf8, 0x8d, 0x4b, 0x23, 0x71, 0x08, 0x58, 0x71, - 0x07, 0x76, 0x2c, 0xb8, 0x43, 0x97, 0x5d, 0xb2, 0x2a, 0x28, 0xb9, 0x01, 0x27, 0x40, 0xfe, 0x8b, - 0x52, 0xc0, 0x21, 0x74, 0x65, 0x7b, 0xe6, 0xfb, 0x7b, 0xcf, 0x6f, 0x86, 0xdc, 0x19, 0x08, 0xc1, - 0x38, 0xaa, 0x88, 0x39, 0xca, 0x07, 0x49, 0x19, 0xc7, 0x81, 0x10, 0xf4, 0x70, 0x8b, 0x0b, 0xc5, - 0xb6, 0xa8, 0x3a, 0xb2, 0xc2, 0x08, 0x14, 0xd4, 0x6e, 0x9e, 0xc5, 0x59, 0x19, 0xce, 0xca, 0x71, - 0xfa, 0x55, 0x0f, 0x3c, 0x48, 0x91, 0x34, 0x79, 0xcb, 0x48, 0xfa, 0x0d, 0x0f, 0xc0, 0x1b, 0x09, - 0xca, 0x42, 0x9f, 0x32, 0x29, 0x41, 0xb1, 0x84, 0x8b, 0xf9, 0xee, 0x3d, 0x07, 0x30, 0x00, 0xa4, - 0x9c, 0xa1, 0xa0, 0x6f, 0x63, 0x11, 0x8d, 0x67, 0xb6, 0x21, 0xf3, 0x7c, 0x99, 0x82, 0x0b, 0xec, - 0xe2, 0x98, 0x21, 0x8b, 0x58, 0x50, 0xe8, 0xde, 0x5d, 0x8c, 0x15, 0x21, 0x38, 0xc3, 0x1c, 0x6a, - 0xcc, 0x47, 0x28, 0x00, 0x0e, 0xf8, 0x85, 0x6d, 0x23, 0x2f, 0x20, 0xfd, 0xe2, 0xf1, 0x80, 0x2a, - 0x3f, 0x10, 0xa8, 0x58, 0x10, 0x66, 0x00, 0xf3, 0xab, 0x46, 0xf4, 0x1e, 0x7a, 0xbb, 0xb1, 0x74, - 0x77, 0x85, 0xb0, 0x39, 0xf6, 0xc0, 0x8d, 0x47, 0xc2, 0x76, 0x1c, 0x88, 0xa5, 0xaa, 0xdd, 0x22, - 0x17, 0x07, 0x11, 0x04, 0x07, 0xcc, 0x75, 0x23, 0x81, 0x58, 0xd7, 0x9a, 0x5a, 0x6b, 0xad, 0xbf, - 0x9e, 0xac, 0xd9, 0xd9, 0x52, 0x4d, 0x91, 0x55, 0x16, 0x24, 0xe0, 0xfa, 0x4a, 0xb3, 0xda, 0x5a, - 0xef, 0x6c, 0x58, 0x59, 0x26, 0x2b, 0xc9, 0x54, 0xf4, 0xd7, 0xea, 0x82, 0x2f, 0x77, 0xec, 0xe3, - 0xd3, 0x46, 0xe5, 0xe7, 0x69, 0xe3, 0xd2, 0x98, 0x05, 0xa3, 0x6d, 0x33, 0xa3, 0x99, 0x9f, 0xbf, - 0x37, 0x5a, 0x9e, 0xaf, 0x86, 0x31, 0xb7, 0x1c, 0x08, 0x68, 0x5e, 0x51, 0xf6, 0x68, 0xa3, 0xfb, - 0x86, 0xaa, 0x71, 0x28, 0x30, 0x55, 0xc0, 0x7e, 0xee, 0x65, 0xde, 0x26, 0x66, 0x79, 0xec, 0xbe, - 0xc0, 0x10, 0x24, 0x0a, 0xf3, 0x09, 0xa9, 0xf7, 0xd0, 0xdb, 0x13, 0xd2, 0x7d, 0x99, 0xfc, 0x9e, - 0xe7, 0xdc, 0x79, 0x26, 0x24, 0x04, 0xfb, 0xaf, 0xec, 0x17, 0x4b, 0x94, 0x66, 0x9a, 0xa4, 0x59, - 0x46, 0x9f, 0x59, 0xec, 0x91, 0x2b, 0x09, 0xe6, 0x1d, 0x0b, 0xbb, 0x11, 0x20, 0x76, 0x87, 0xcc, - 0x97, 0xcb, 0xb4, 0x6d, 0x93, 0xac, 0xf9, 0xdc, 0x39, 0x70, 0x13, 0xc1, 0xfa, 0x4a, 0xba, 0x7f, - 0xc1, 0xcf, 0x0d, 0xcc, 0x4d, 0xb2, 0xf1, 0x87, 0x68, 0xe1, 0xd8, 0xf9, 0x52, 0x25, 0xd5, 0x1e, - 0x7a, 0xb5, 0x8f, 0x1a, 0xb9, 0xf6, 0xf7, 0xd2, 0x1e, 0x5a, 0x0b, 0x87, 0xdd, 0x2a, 0x2b, 0x4a, - 0x7f, 0x7a, 0x4e, 0x62, 0x91, 0xad, 0xf6, 0x9e, 0x5c, 0xfe, 0xad, 0x15, 0xf7, 0x97, 0x90, 0x3c, - 0xc3, 0xd0, 0x1f, 0xfd, 0x2f, 0x63, 0xe6, 0xfe, 0x49, 0x23, 0xd7, 0xcb, 0x26, 0xf9, 0xf1, 0xbf, - 0x55, 0x4b, 0xa8, 0xba, 0x7d, 0x6e, 0x6a, 0x91, 0x6c, 0x67, 0xff, 0x78, 0x62, 0x68, 0x27, 0x13, - 0x43, 0xfb, 0x31, 0x31, 0xb4, 0x0f, 0x53, 0xa3, 0x72, 0x32, 0x35, 0x2a, 0xdf, 0xa6, 0x46, 0xe5, - 0xf5, 0xf6, 0xdc, 0xe8, 0x4b, 0x48, 0xe4, 0xd9, 0xa8, 0x3d, 0x62, 0x1c, 0xe9, 0x40, 0x88, 0xf6, - 0xfc, 0x35, 0x70, 0xd8, 0xa1, 0x47, 0x34, 0x4b, 0x92, 0x1d, 0x09, 0xbe, 0x9a, 0x9e, 0xe1, 0x07, - 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0x9e, 0xbc, 0x21, 0xe7, 0x04, 0x05, 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 { - SendQueryIbcDenomTWAP(ctx context.Context, in *MsgSendQueryIbcDenomTWAP, opts ...grpc.CallOption) (*MsgSendQueryIbcDenomTWAPResponse, error) - SwapCrossChain(ctx context.Context, in *MsgSwapCrossChain, opts ...grpc.CallOption) (*MsgSwapCrossChainResponse, error) - FundFeeAbsModuleAccount(ctx context.Context, in *MsgFundFeeAbsModuleAccount, opts ...grpc.CallOption) (*MsgFundFeeAbsModuleAccountResponse, error) -} - -type msgClient struct { - cc grpc1.ClientConn -} - -func NewMsgClient(cc grpc1.ClientConn) MsgClient { - return &msgClient{cc} -} - -func (c *msgClient) SendQueryIbcDenomTWAP(ctx context.Context, in *MsgSendQueryIbcDenomTWAP, opts ...grpc.CallOption) (*MsgSendQueryIbcDenomTWAPResponse, error) { - out := new(MsgSendQueryIbcDenomTWAPResponse) - err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Msg/SendQueryIbcDenomTWAP", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) SwapCrossChain(ctx context.Context, in *MsgSwapCrossChain, opts ...grpc.CallOption) (*MsgSwapCrossChainResponse, error) { - out := new(MsgSwapCrossChainResponse) - err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Msg/SwapCrossChain", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) FundFeeAbsModuleAccount(ctx context.Context, in *MsgFundFeeAbsModuleAccount, opts ...grpc.CallOption) (*MsgFundFeeAbsModuleAccountResponse, error) { - out := new(MsgFundFeeAbsModuleAccountResponse) - err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Msg/FundFeeAbsModuleAccount", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// MsgServer is the server API for Msg service. -type MsgServer interface { - SendQueryIbcDenomTWAP(context.Context, *MsgSendQueryIbcDenomTWAP) (*MsgSendQueryIbcDenomTWAPResponse, error) - SwapCrossChain(context.Context, *MsgSwapCrossChain) (*MsgSwapCrossChainResponse, error) - FundFeeAbsModuleAccount(context.Context, *MsgFundFeeAbsModuleAccount) (*MsgFundFeeAbsModuleAccountResponse, error) -} - -// UnimplementedMsgServer can be embedded to have forward compatible implementations. -type UnimplementedMsgServer struct { -} - -func (*UnimplementedMsgServer) SendQueryIbcDenomTWAP(ctx context.Context, req *MsgSendQueryIbcDenomTWAP) (*MsgSendQueryIbcDenomTWAPResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SendQueryIbcDenomTWAP not implemented") -} -func (*UnimplementedMsgServer) SwapCrossChain(ctx context.Context, req *MsgSwapCrossChain) (*MsgSwapCrossChainResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SwapCrossChain not implemented") -} -func (*UnimplementedMsgServer) FundFeeAbsModuleAccount(ctx context.Context, req *MsgFundFeeAbsModuleAccount) (*MsgFundFeeAbsModuleAccountResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method FundFeeAbsModuleAccount not implemented") -} - -func RegisterMsgServer(s grpc1.Server, srv MsgServer) { - s.RegisterService(&_Msg_serviceDesc, srv) -} - -func _Msg_SendQueryIbcDenomTWAP_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgSendQueryIbcDenomTWAP) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).SendQueryIbcDenomTWAP(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/feeabstraction.absfee.v1beta1.Msg/SendQueryIbcDenomTWAP", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).SendQueryIbcDenomTWAP(ctx, req.(*MsgSendQueryIbcDenomTWAP)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_SwapCrossChain_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgSwapCrossChain) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).SwapCrossChain(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/feeabstraction.absfee.v1beta1.Msg/SwapCrossChain", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).SwapCrossChain(ctx, req.(*MsgSwapCrossChain)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_FundFeeAbsModuleAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgFundFeeAbsModuleAccount) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).FundFeeAbsModuleAccount(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/feeabstraction.absfee.v1beta1.Msg/FundFeeAbsModuleAccount", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).FundFeeAbsModuleAccount(ctx, req.(*MsgFundFeeAbsModuleAccount)) - } - return interceptor(ctx, in, info, handler) -} - -var _Msg_serviceDesc = grpc.ServiceDesc{ - ServiceName: "feeabstraction.absfee.v1beta1.Msg", - HandlerType: (*MsgServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "SendQueryIbcDenomTWAP", - Handler: _Msg_SendQueryIbcDenomTWAP_Handler, - }, - { - MethodName: "SwapCrossChain", - Handler: _Msg_SwapCrossChain_Handler, - }, - { - MethodName: "FundFeeAbsModuleAccount", - Handler: _Msg_FundFeeAbsModuleAccount_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "feeabstraction/absfee/v1beta1/tx.proto", -} - -func (m *MsgFundFeeAbsModuleAccount) 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 *MsgFundFeeAbsModuleAccount) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgFundFeeAbsModuleAccount) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Amount) > 0 { - for iNdEx := len(m.Amount) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Amount[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - if len(m.FromAddress) > 0 { - i -= len(m.FromAddress) - copy(dAtA[i:], m.FromAddress) - i = encodeVarintTx(dAtA, i, uint64(len(m.FromAddress))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgFundFeeAbsModuleAccountResponse) 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 *MsgFundFeeAbsModuleAccountResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgFundFeeAbsModuleAccountResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *MsgSendQueryIbcDenomTWAP) 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 *MsgSendQueryIbcDenomTWAP) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgSendQueryIbcDenomTWAP) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.FromAddress) > 0 { - i -= len(m.FromAddress) - copy(dAtA[i:], m.FromAddress) - i = encodeVarintTx(dAtA, i, uint64(len(m.FromAddress))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgSendQueryIbcDenomTWAPResponse) 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 *MsgSendQueryIbcDenomTWAPResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgSendQueryIbcDenomTWAPResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *MsgSwapCrossChain) 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 *MsgSwapCrossChain) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgSwapCrossChain) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.IbcDenom) > 0 { - i -= len(m.IbcDenom) - copy(dAtA[i:], m.IbcDenom) - i = encodeVarintTx(dAtA, i, uint64(len(m.IbcDenom))) - i-- - dAtA[i] = 0x12 - } - if len(m.FromAddress) > 0 { - i -= len(m.FromAddress) - copy(dAtA[i:], m.FromAddress) - i = encodeVarintTx(dAtA, i, uint64(len(m.FromAddress))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgSwapCrossChainResponse) 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 *MsgSwapCrossChainResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgSwapCrossChainResponse) 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 *MsgFundFeeAbsModuleAccount) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.FromAddress) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - if len(m.Amount) > 0 { - for _, e := range m.Amount { - l = e.Size() - n += 1 + l + sovTx(uint64(l)) - } - } - return n -} - -func (m *MsgFundFeeAbsModuleAccountResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *MsgSendQueryIbcDenomTWAP) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.FromAddress) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - return n -} - -func (m *MsgSendQueryIbcDenomTWAPResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *MsgSwapCrossChain) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.FromAddress) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - l = len(m.IbcDenom) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - return n -} - -func (m *MsgSwapCrossChainResponse) 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 *MsgFundFeeAbsModuleAccount) 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: MsgFundFeeAbsModuleAccount: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgFundFeeAbsModuleAccount: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FromAddress", 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.FromAddress = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Amount", 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 - } - m.Amount = append(m.Amount, types.Coin{}) - if err := m.Amount[len(m.Amount)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgFundFeeAbsModuleAccountResponse) 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: MsgFundFeeAbsModuleAccountResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgFundFeeAbsModuleAccountResponse: 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) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgSendQueryIbcDenomTWAP) 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: MsgSendQueryIbcDenomTWAP: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgSendQueryIbcDenomTWAP: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FromAddress", 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.FromAddress = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgSendQueryIbcDenomTWAPResponse) 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: MsgSendQueryIbcDenomTWAPResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgSendQueryIbcDenomTWAPResponse: 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) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgSwapCrossChain) 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: MsgSwapCrossChain: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgSwapCrossChain: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FromAddress", 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.FromAddress = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IbcDenom", 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.IbcDenom = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgSwapCrossChainResponse) 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: MsgSwapCrossChainResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgSwapCrossChainResponse: 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) || (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") -) From 578366530707954c84854cc906c3401204099ff8 Mon Sep 17 00:00:00 2001 From: phamminh0811 <1phamminh0811@gmail.com> Date: Mon, 8 May 2023 17:07:04 +0700 Subject: [PATCH 02/90] bump ante, app and cmd --- ante/ante.go | 15 +- ante/ante_test.go | 6 +- app/ante.go | 4 +- app/app.go | 276 ++++++++++++++++++++------------- app/export.go | 4 +- app/helpers/test_helpers.go | 109 ++++++++++++- app/sim_test.go | 38 +++-- app/test_access.go | 2 +- app/test_helpers.go | 33 ++-- cmd/feeappd/cmd/genaccounts.go | 8 +- cmd/feeappd/cmd/root.go | 35 ++++- cmd/feeappd/cmd/root_test.go | 2 +- cmd/feeappd/cmd/testnet.go | 4 +- cmd/feeappd/main.go | 2 +- x/feeabs/keeper/keeper.go | 7 +- 15 files changed, 367 insertions(+), 178 deletions(-) diff --git a/ante/ante.go b/ante/ante.go index 317a7c04..824649e0 100644 --- a/ante/ante.go +++ b/ante/ante.go @@ -1,8 +1,9 @@ package ante import ( + sdkerrors "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + errorstypes "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/ante" ibcante "github.com/cosmos/ibc-go/v7/modules/core/ante" ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" @@ -19,13 +20,13 @@ type HandlerOptions struct { func NewAnteHandler(opts HandlerOptions) (sdk.AnteHandler, error) { if opts.AccountKeeper == nil { - return nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "account keeper is required for AnteHandler") + return nil, sdkerrors.Wrap(errorstypes.ErrLogic, "account keeper is required for AnteHandler") } if opts.BankKeeper == nil { - return nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "bank keeper is required for AnteHandler") + return nil, sdkerrors.Wrap(errorstypes.ErrLogic, "bank keeper is required for AnteHandler") } if opts.SignModeHandler == nil { - return nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "sign mode handler is required for ante builder") + return nil, sdkerrors.Wrap(errorstypes.ErrLogic, "sign mode handler is required for ante builder") } sigGasConsumer := opts.SigGasConsumer @@ -35,20 +36,20 @@ func NewAnteHandler(opts HandlerOptions) (sdk.AnteHandler, error) { anteDecorators := []sdk.AnteDecorator{ ante.NewSetUpContextDecorator(), - ante.NewRejectExtensionOptionsDecorator(), + ante.RejectExtensionOptionsDecorator{}, NewMempoolFeeDecorator(opts.BypassMinFeeMsgTypes), ante.NewValidateBasicDecorator(), ante.NewTxTimeoutHeightDecorator(), ante.NewValidateMemoDecorator(opts.AccountKeeper), ante.NewConsumeGasForTxSizeDecorator(opts.AccountKeeper), - ante.NewDeductFeeDecorator(opts.AccountKeeper, opts.BankKeeper, opts.FeegrantKeeper), + ante.NewDeductFeeDecorator(opts.AccountKeeper, opts.BankKeeper, opts.FeegrantKeeper, opts.TxFeeChecker), // SetPubKeyDecorator must be called before all signature verification decorators ante.NewSetPubKeyDecorator(opts.AccountKeeper), ante.NewValidateSigCountDecorator(opts.AccountKeeper), ante.NewSigGasConsumeDecorator(opts.AccountKeeper, sigGasConsumer), ante.NewSigVerificationDecorator(opts.AccountKeeper, opts.SignModeHandler), ante.NewIncrementSequenceDecorator(opts.AccountKeeper), - ibcante.NewAnteDecorator(opts.IBCkeeper), + ibcante.NewRedundantRelayDecorator(opts.IBCkeeper), } return sdk.ChainAnteDecorators(anteDecorators...), nil diff --git a/ante/ante_test.go b/ante/ante_test.go index a25a9a3e..a86dfaf8 100644 --- a/ante/ante_test.go +++ b/ante/ante_test.go @@ -4,9 +4,6 @@ import ( "fmt" "testing" - sdkerrors "cosmossdk.io/errors" - errorstypes "github.com/cosmos/cosmos-sdk/types/errors" - "cosmossdk.io/simapp" tmrand "github.com/cometbft/cometbft/libs/rand" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/client" @@ -14,6 +11,7 @@ import ( cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/cosmos/cosmos-sdk/types/tx/signing" xauthsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" "github.com/stretchr/testify/suite" @@ -43,7 +41,7 @@ func (s *IntegrationTestSuite) SetupTest() { Height: 1, }) - encodingConfig := simapp.MakeTestEncodingConfig() + encodingConfig := moduletestutil.MakeTestEncodingConfig() encodingConfig.Amino.RegisterConcrete(&testdata.TestMsg{}, "testdata.TestMsg", nil) testdata.RegisterInterfaces(encodingConfig.InterfaceRegistry) diff --git a/app/ante.go b/app/ante.go index 54b822c4..4645ea2e 100644 --- a/app/ante.go +++ b/app/ante.go @@ -42,7 +42,7 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { anteDecorators := []sdk.AnteDecorator{ ante.NewSetUpContextDecorator(), // outermost AnteDecorator. SetUpContext must be called first - ante.NewRejectExtensionOptionsDecorator(), + ante.RejectExtensionOptionsDecorator{}, feeabsante.NewFeeAbstrationMempoolFeeDecorator(options.FeeAbskeeper), ante.NewValidateBasicDecorator(), ante.NewTxTimeoutHeightDecorator(), @@ -55,7 +55,7 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { ante.NewSigGasConsumeDecorator(options.AccountKeeper, sigGasConsumer), ante.NewSigVerificationDecorator(options.AccountKeeper, options.SignModeHandler), ante.NewIncrementSequenceDecorator(options.AccountKeeper), - ibcante.NewAnteDecorator(options.IBCKeeper), + ibcante.NewRedundantRelayDecorator(options.IBCKeeper), } return sdk.ChainAnteDecorators(anteDecorators...), nil diff --git a/app/app.go b/app/app.go index 7e889ab3..d2e7157d 100644 --- a/app/app.go +++ b/app/app.go @@ -1,6 +1,7 @@ package app import ( + "encoding/json" "fmt" "io" stdlog "log" @@ -9,18 +10,19 @@ import ( "path/filepath" "sort" - "cosmossdk.io/simapp" "github.com/CosmWasm/wasmd/x/wasm" + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" + nodeservice "github.com/cosmos/cosmos-sdk/client/grpc/node" "github.com/cosmos/cosmos-sdk/client/grpc/tmservice" - "github.com/cosmos/cosmos-sdk/client/rpc" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/runtime" "github.com/cosmos/cosmos-sdk/server/api" "github.com/cosmos/cosmos-sdk/server/config" servertypes "github.com/cosmos/cosmos-sdk/server/types" - store "github.com/cosmos/cosmos-sdk/store/types" + storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" "github.com/cosmos/cosmos-sdk/version" @@ -41,11 +43,12 @@ import ( "github.com/cosmos/cosmos-sdk/x/capability" capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" + consensusparamkeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper" + consensusparamtypes "github.com/cosmos/cosmos-sdk/x/consensus/types" "github.com/cosmos/cosmos-sdk/x/crisis" crisiskeeper "github.com/cosmos/cosmos-sdk/x/crisis/keeper" crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types" distr "github.com/cosmos/cosmos-sdk/x/distribution" - // distrclient "github.com/cosmos/cosmos-sdk/x/distribution/client" distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper" distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" "github.com/cosmos/cosmos-sdk/x/evidence" @@ -57,8 +60,11 @@ import ( "github.com/cosmos/cosmos-sdk/x/genutil" genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" "github.com/cosmos/cosmos-sdk/x/gov" + govclient "github.com/cosmos/cosmos-sdk/x/gov/client" govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/cosmos/cosmos-sdk/x/mint" mintkeeper "github.com/cosmos/cosmos-sdk/x/mint/keeper" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" @@ -92,8 +98,10 @@ import ( ibcclientclient "github.com/cosmos/ibc-go/v7/modules/core/02-client/client" ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" - ibchost "github.com/cosmos/ibc-go/v7/modules/core/24-host" + ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" + solomachine "github.com/cosmos/ibc-go/v7/modules/light-clients/06-solomachine" + ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" dbm "github.com/cometbft/cometbft-db" abci "github.com/cometbft/cometbft/abci/types" @@ -118,6 +126,25 @@ import ( _ "github.com/cosmos/cosmos-sdk/client/docs/statik" ) +func getGovProposalHandlers() []govclient.ProposalHandler { + var govProposalHandlers []govclient.ProposalHandler + // this line is used by starport scaffolding # stargate/app/govProposalHandlers + + govProposalHandlers = append(govProposalHandlers, + paramsclient.ProposalHandler, + upgradeclient.LegacyProposalHandler, + upgradeclient.LegacyCancelProposalHandler, + ibcclientclient.UpdateClientProposalHandler, + ibcclientclient.UpgradeProposalHandler, + feeabsmodule.UpdateAddHostZoneClientProposalHandler, + feeabsmodule.UpdateDeleteHostZoneClientProposalHandler, + feeabsmodule.UpdateSetHostZoneClientProposalHandler, + // this line is used by starport scaffolding # stargate/app/govProposalHandler + ) + + return govProposalHandlers +} + var ( // DefaultNodeHome default home directories for the application daemon DefaultNodeHome string @@ -133,23 +160,14 @@ var ( staking.AppModuleBasic{}, mint.AppModuleBasic{}, distr.AppModuleBasic{}, - gov.NewAppModuleBasic( - paramsclient.ProposalHandler, - distrclient.ProposalHandler, - upgradeclient.ProposalHandler, - upgradeclient.CancelProposalHandler, - ibcclientclient.UpdateClientProposalHandler, - ibcclientclient.UpgradeProposalHandler, - feeabsmodule.UpdateAddHostZoneClientProposalHandler, - feeabsmodule.UpdateDeleteHostZoneClientProposalHandler, - feeabsmodule.UpdateSetHostZoneClientProposalHandler, - ), + gov.NewAppModuleBasic(getGovProposalHandlers()), params.AppModuleBasic{}, crisis.AppModuleBasic{}, slashing.AppModuleBasic{}, feegrantmodule.AppModuleBasic{}, authzmodule.AppModuleBasic{}, ibc.AppModuleBasic{}, + ibctm.AppModuleBasic{}, upgrade.AppModuleBasic{}, evidence.AppModuleBasic{}, transfer.AppModuleBasic{}, @@ -157,6 +175,7 @@ var ( router.AppModuleBasic{}, ica.AppModuleBasic{}, wasm.AppModuleBasic{}, + solomachine.AppModuleBasic{}, feeabsmodule.AppModuleBasic{}, ) @@ -181,7 +200,7 @@ var ( ) var ( - _ simapp.App = (*FeeAbs)(nil) + _ runtime.AppI = (*FeeAbs)(nil) _ servertypes.Application = (*FeeAbs)(nil) ) @@ -192,37 +211,38 @@ type FeeAbs struct { // nolint: golint *baseapp.BaseApp legacyAmino *codec.LegacyAmino appCodec codec.Codec + txConfig client.TxConfig interfaceRegistry types.InterfaceRegistry invCheckPeriod uint // keys to access the substores - keys map[string]*sdk.KVStoreKey - tkeys map[string]*sdk.TransientStoreKey - memKeys map[string]*sdk.MemoryStoreKey + keys map[string]*storetypes.KVStoreKey + tkeys map[string]*storetypes.TransientStoreKey + memKeys map[string]*storetypes.MemoryStoreKey // keepers - AccountKeeper authkeeper.AccountKeeper - BankKeeper bankkeeper.Keeper - CapabilityKeeper *capabilitykeeper.Keeper - StakingKeeper stakingkeeper.Keeper - SlashingKeeper slashingkeeper.Keeper - MintKeeper mintkeeper.Keeper - DistrKeeper distrkeeper.Keeper - GovKeeper govkeeper.Keeper - CrisisKeeper crisiskeeper.Keeper - UpgradeKeeper upgradekeeper.Keeper - ParamsKeeper paramskeeper.Keeper - // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly - IBCKeeper *ibckeeper.Keeper - ICAHostKeeper icahostkeeper.Keeper - ICAControllerKeeper icacontrollerkeeper.Keeper - EvidenceKeeper evidencekeeper.Keeper - TransferKeeper ibctransferkeeper.Keeper - FeeGrantKeeper feegrantkeeper.Keeper - AuthzKeeper authzkeeper.Keeper - FeeabsKeeper feeabskeeper.Keeper - WasmKeeper wasm.Keeper + AccountKeeper authkeeper.AccountKeeper + BankKeeper bankkeeper.Keeper + CapabilityKeeper *capabilitykeeper.Keeper + StakingKeeper *stakingkeeper.Keeper + SlashingKeeper slashingkeeper.Keeper + MintKeeper mintkeeper.Keeper + DistrKeeper distrkeeper.Keeper + GovKeeper govkeeper.Keeper + CrisisKeeper crisiskeeper.Keeper + UpgradeKeeper upgradekeeper.Keeper + ParamsKeeper paramskeeper.Keeper + IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly + ICAHostKeeper icahostkeeper.Keeper + ICAControllerKeeper icacontrollerkeeper.Keeper + EvidenceKeeper evidencekeeper.Keeper + TransferKeeper ibctransferkeeper.Keeper + FeeGrantKeeper feegrantkeeper.Keeper + AuthzKeeper authzkeeper.Keeper + FeeabsKeeper feeabskeeper.Keeper + ConsensusParamsKeeper consensusparamkeeper.Keeper + WasmKeeper wasm.Keeper RouterKeeper *routerkeeper.Keeper @@ -264,21 +284,22 @@ func NewFeeAbs( wasmOpts []wasm.Option, baseAppOptions ...func(*baseapp.BaseApp), ) *FeeAbs { - appCodec, legacyAmino := encodingConfig.Marshaler, encodingConfig.Amino + appCodec, legacyAmino, txConfig := encodingConfig.Marshaler, encodingConfig.Amino, encodingConfig.TxConfig interfaceRegistry := encodingConfig.InterfaceRegistry bApp := baseapp.NewBaseApp(appName, logger, db, encodingConfig.TxConfig.TxDecoder(), baseAppOptions...) bApp.SetCommitMultiStoreTracer(traceStore) bApp.SetVersion(version.Version) bApp.SetInterfaceRegistry(interfaceRegistry) + bApp.SetTxEncoder(txConfig.TxEncoder()) keys := sdk.NewKVStoreKeys( authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey, minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey, - govtypes.StoreKey, paramstypes.StoreKey, ibchost.StoreKey, upgradetypes.StoreKey, + govtypes.StoreKey, paramstypes.StoreKey, ibcexported.StoreKey, upgradetypes.StoreKey, evidencetypes.StoreKey, ibctransfertypes.StoreKey, feeabstypes.StoreKey, wasm.StoreKey, capabilitytypes.StoreKey, feegrant.StoreKey, authzkeeper.StoreKey, routertypes.StoreKey, - icahosttypes.StoreKey, icacontrollertypes.StoreKey, + icahosttypes.StoreKey, icacontrollertypes.StoreKey, consensusparamtypes.StoreKey, crisistypes.StoreKey, ) tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey) memKeys := sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey) @@ -287,6 +308,7 @@ func NewFeeAbs( BaseApp: bApp, legacyAmino: legacyAmino, appCodec: appCodec, + txConfig: txConfig, interfaceRegistry: interfaceRegistry, invCheckPeriod: invCheckPeriod, keys: keys, @@ -302,9 +324,8 @@ func NewFeeAbs( ) // set the BaseApp's parameter store - bApp.SetParamStore( - app.ParamsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramskeeper.ConsensusParamsKeyTable()), - ) + app.ConsensusParamsKeeper = consensusparamkeeper.NewKeeper(appCodec, keys[consensusparamtypes.StoreKey], authtypes.NewModuleAddress(govtypes.ModuleName).String()) + bApp.SetParamStore(&app.ConsensusParamsKeeper) // add capability keeper and ScopeToModule for ibc module app.CapabilityKeeper = capabilitykeeper.NewKeeper( @@ -312,7 +333,7 @@ func NewFeeAbs( keys[capabilitytypes.StoreKey], memKeys[capabilitytypes.MemStoreKey], ) - scopedIBCKeeper := app.CapabilityKeeper.ScopeToModule(ibchost.ModuleName) + scopedIBCKeeper := app.CapabilityKeeper.ScopeToModule(ibcexported.ModuleName) scopedICAHostKeeper := app.CapabilityKeeper.ScopeToModule(icahosttypes.SubModuleName) scopedICAControllerKeeper := app.CapabilityKeeper.ScopeToModule(icacontrollertypes.SubModuleName) // scopedInterTxKeeper := app.CapabilityKeeper.ScopeToModule(intertxtypes.ModuleName) @@ -325,82 +346,87 @@ func NewFeeAbs( app.AccountKeeper = authkeeper.NewAccountKeeper( appCodec, keys[authtypes.StoreKey], - app.GetSubspace(authtypes.ModuleName), authtypes.ProtoBaseAccount, maccPerms, + sdk.Bech32PrefixAccAddr, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) app.BankKeeper = bankkeeper.NewBaseKeeper( appCodec, keys[banktypes.StoreKey], app.AccountKeeper, - app.GetSubspace(banktypes.ModuleName), app.ModuleAccountAddrs(), + authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) app.AuthzKeeper = authzkeeper.NewKeeper( keys[authzkeeper.StoreKey], appCodec, app.BaseApp.MsgServiceRouter(), + app.AccountKeeper, ) app.FeeGrantKeeper = feegrantkeeper.NewKeeper( appCodec, keys[feegrant.StoreKey], app.AccountKeeper, ) - stakingKeeper := stakingkeeper.NewKeeper( + app.StakingKeeper = stakingkeeper.NewKeeper( appCodec, keys[stakingtypes.StoreKey], app.AccountKeeper, app.BankKeeper, - app.GetSubspace(stakingtypes.ModuleName), + authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) app.MintKeeper = mintkeeper.NewKeeper( appCodec, keys[minttypes.StoreKey], - app.GetSubspace(minttypes.ModuleName), - &stakingKeeper, + app.StakingKeeper, app.AccountKeeper, app.BankKeeper, authtypes.FeeCollectorName, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) app.DistrKeeper = distrkeeper.NewKeeper( appCodec, keys[distrtypes.StoreKey], - app.GetSubspace(distrtypes.ModuleName), app.AccountKeeper, app.BankKeeper, - &stakingKeeper, + app.StakingKeeper, authtypes.FeeCollectorName, - app.ModuleAccountAddrs(), + authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) app.SlashingKeeper = slashingkeeper.NewKeeper( appCodec, + legacyAmino, keys[slashingtypes.StoreKey], - &stakingKeeper, - app.GetSubspace(slashingtypes.ModuleName), + app.StakingKeeper, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) - app.CrisisKeeper = crisiskeeper.NewKeeper( - app.GetSubspace(crisistypes.ModuleName), + app.CrisisKeeper = *crisiskeeper.NewKeeper( + appCodec, + keys[crisistypes.StoreKey], invCheckPeriod, app.BankKeeper, authtypes.FeeCollectorName, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) - app.UpgradeKeeper = upgradekeeper.NewKeeper( + app.UpgradeKeeper = *upgradekeeper.NewKeeper( skipUpgradeHeights, keys[upgradetypes.StoreKey], appCodec, homePath, app.BaseApp, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) // register the staking hooks // NOTE: stakingKeeper above is passed by reference, so that it will contain these hooks - app.StakingKeeper = *stakingKeeper.SetHooks( + app.StakingKeeper.SetHooks( stakingtypes.NewMultiStakingHooks(app.DistrKeeper.Hooks(), app.SlashingKeeper.Hooks()), ) app.IBCKeeper = ibckeeper.NewKeeper( appCodec, - keys[ibchost.StoreKey], - app.GetSubspace(ibchost.ModuleName), + keys[ibcexported.StoreKey], + app.GetSubspace(ibcexported.ModuleName), app.StakingKeeper, app.UpgradeKeeper, scopedIBCKeeper, @@ -453,12 +479,11 @@ func NewFeeAbs( feeabsIBCModule := feeabsmodule.NewIBCModule(appCodec, app.FeeabsKeeper) // register the proposal types - govRouter := govtypes.NewRouter() + govRouter := govv1beta1.NewRouter() govRouter. - AddRoute(govtypes.RouterKey, govtypes.ProposalHandler). + AddRoute(govtypes.RouterKey, govv1beta1.ProposalHandler). AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.ParamsKeeper)). - AddRoute(distrtypes.RouterKey, distr.NewCommunityPoolSpendProposalHandler(app.DistrKeeper)). - AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(app.UpgradeKeeper)). + AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(&app.UpgradeKeeper)). AddRoute(ibcclienttypes.RouterKey, ibcclient.NewClientProposalHandler(app.IBCKeeper.ClientKeeper)). AddRoute(feeabstypes.RouterKey, feeabsmodule.NewHostZoneProposal(app.FeeabsKeeper)) @@ -477,6 +502,7 @@ func NewFeeAbs( keys[icahosttypes.StoreKey], app.GetSubspace(icahosttypes.SubModuleName), app.IBCKeeper.ChannelKeeper, + app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper, app.AccountKeeper, scopedICAHostKeeper, @@ -499,7 +525,7 @@ func NewFeeAbs( evidenceKeeper := evidencekeeper.NewKeeper( appCodec, keys[evidencetypes.StoreKey], - &app.StakingKeeper, + app.StakingKeeper, app.SlashingKeeper, ) app.EvidenceKeeper = *evidenceKeeper @@ -516,11 +542,10 @@ func NewFeeAbs( app.WasmKeeper = wasm.NewKeeper( appCodec, keys[wasm.StoreKey], - app.GetSubspace(wasm.ModuleName), app.AccountKeeper, app.BankKeeper, app.StakingKeeper, - app.DistrKeeper, + distrkeeper.NewQuerier(app.DistrKeeper), app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper, scopedWasmKeeper, @@ -530,6 +555,7 @@ func NewFeeAbs( wasmDir, wasmConfig, supportedFeatures, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), wasmOpts..., ) @@ -544,14 +570,23 @@ func NewFeeAbs( app.IBCKeeper.SetRouter(ibcRouter) - app.GovKeeper = govkeeper.NewKeeper( + govConfig := govtypes.DefaultConfig() + govKeeper := govkeeper.NewKeeper( appCodec, keys[govtypes.StoreKey], - app.GetSubspace(govtypes.ModuleName), app.AccountKeeper, app.BankKeeper, - &stakingKeeper, - govRouter, + app.StakingKeeper, + app.MsgServiceRouter(), + govConfig, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + ) + govKeeper.SetLegacyRouter(govRouter) + + app.GovKeeper = *govKeeper.SetHooks( + govtypes.NewMultiGovHooks( + // register the governance hooks + ), ) /**** Module Options ****/ @@ -568,17 +603,17 @@ func NewFeeAbs( app.BaseApp.DeliverTx, encodingConfig.TxConfig, ), - auth.NewAppModule(appCodec, app.AccountKeeper, nil), + auth.NewAppModule(appCodec, app.AccountKeeper, authsims.RandomGenesisAccounts, app.GetSubspace(authtypes.ModuleName)), vesting.NewAppModule(app.AccountKeeper, app.BankKeeper), - bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper), - capability.NewAppModule(appCodec, *app.CapabilityKeeper), - gov.NewAppModule(appCodec, app.GovKeeper, app.AccountKeeper, app.BankKeeper), - mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper), - slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper), - distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper), - staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper), - upgrade.NewAppModule(app.UpgradeKeeper), - wasm.NewAppModule(appCodec, &app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper), + bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper, app.GetSubspace(banktypes.ModuleName)), + capability.NewAppModule(appCodec, *app.CapabilityKeeper, false), + gov.NewAppModule(appCodec, &app.GovKeeper, app.AccountKeeper, app.BankKeeper, app.GetSubspace(govtypes.ModuleName)), + mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper, nil, app.GetSubspace(minttypes.ModuleName)), + slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper, app.GetSubspace(slashingtypes.ModuleName)), + distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper, app.GetSubspace(distrtypes.ModuleName)), + staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.GetSubspace(stakingtypes.ModuleName)), + upgrade.NewAppModule(&app.UpgradeKeeper), + wasm.NewAppModule(appCodec, &app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.MsgServiceRouter(), app.GetSubspace(wasmtypes.ModuleName)), evidence.NewAppModule(app.EvidenceKeeper), feegrantmodule.NewAppModule(appCodec, app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, app.interfaceRegistry), authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), @@ -589,7 +624,7 @@ func NewFeeAbs( // interTxModule, feeabsModule, routerModule, - crisis.NewAppModule(&app.CrisisKeeper, skipGenesisInvariants), // always be last to make sure that it checks for all invariants and not only part of them + crisis.NewAppModule(&app.CrisisKeeper, skipGenesisInvariants, app.GetSubspace(crisistypes.ModuleName)), // always be last to make sure that it checks for all invariants and not only part of them ) // During begin block slashing happens after distr.BeginBlocker so that @@ -615,7 +650,7 @@ func NewFeeAbs( vestingtypes.ModuleName, // additional non simd modules ibctransfertypes.ModuleName, - ibchost.ModuleName, + ibcexported.ModuleName, feeabstypes.ModuleName, icatypes.ModuleName, routertypes.ModuleName, @@ -642,7 +677,7 @@ func NewFeeAbs( vestingtypes.ModuleName, // additional non simd modules ibctransfertypes.ModuleName, - ibchost.ModuleName, + ibcexported.ModuleName, feeabstypes.ModuleName, icatypes.ModuleName, routertypes.ModuleName, @@ -676,7 +711,7 @@ func NewFeeAbs( vestingtypes.ModuleName, // additional non simd modules ibctransfertypes.ModuleName, - ibchost.ModuleName, + ibcexported.ModuleName, feeabstypes.ModuleName, icatypes.ModuleName, routertypes.ModuleName, @@ -689,7 +724,6 @@ func NewFeeAbs( // app.mm.SetOrderMigrations(custom order) app.mm.RegisterInvariants(&app.CrisisKeeper) - app.mm.RegisterRoutes(app.Router(), app.QueryRouter(), encodingConfig.Amino) app.configurator = module.NewConfigurator(app.appCodec, app.MsgServiceRouter(), app.GRPCQueryRouter()) app.mm.RegisterServices(app.configurator) @@ -699,19 +733,19 @@ func NewFeeAbs( // NOTE: this is not required apps that don't use the simulator for fuzz testing // transactions app.sm = module.NewSimulationManager( - auth.NewAppModule(appCodec, app.AccountKeeper, authsims.RandomGenesisAccounts), - bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper), - capability.NewAppModule(appCodec, *app.CapabilityKeeper), + auth.NewAppModule(appCodec, app.AccountKeeper, authsims.RandomGenesisAccounts, app.GetSubspace(authtypes.ModuleName)), + bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper, app.GetSubspace(banktypes.ModuleName)), + capability.NewAppModule(appCodec, *app.CapabilityKeeper, false), feegrantmodule.NewAppModule(appCodec, app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, app.interfaceRegistry), authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), - gov.NewAppModule(appCodec, app.GovKeeper, app.AccountKeeper, app.BankKeeper), - mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper), - staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper), - distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper), - slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper), + gov.NewAppModule(appCodec, &app.GovKeeper, app.AccountKeeper, app.BankKeeper, app.GetSubspace(govtypes.ModuleName)), + mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper, nil, app.GetSubspace(minttypes.ModuleName)), + staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.GetSubspace(stakingtypes.ModuleName)), + distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper, app.GetSubspace(distrtypes.ModuleName)), + slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper, app.GetSubspace(slashingtypes.ModuleName)), params.NewAppModule(app.ParamsKeeper), evidence.NewAppModule(app.EvidenceKeeper), - wasm.NewAppModule(appCodec, &app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper), + wasm.NewAppModule(appCodec, &app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.MsgServiceRouter(), app.GetSubspace(wasmtypes.ModuleName)), ibc.NewAppModule(app.IBCKeeper), transferModule, ) @@ -799,7 +833,7 @@ func NewFeeAbs( } if upgradeInfo.Name == upgradeName && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) { - storeUpgrades := store.StoreUpgrades{ + storeUpgrades := storetypes.StoreUpgrades{ Added: []string{icahosttypes.StoreKey}, } @@ -894,24 +928,34 @@ func (app *FeeAbs) InterfaceRegistry() types.InterfaceRegistry { // GetKey returns the KVStoreKey for the provided store key. // // NOTE: This is solely to be used for testing purposes. -func (app *FeeAbs) GetKey(storeKey string) *sdk.KVStoreKey { +func (app *FeeAbs) GetKey(storeKey string) *storetypes.KVStoreKey { return app.keys[storeKey] } // GetTKey returns the TransientStoreKey for the provided store key. // // NOTE: This is solely to be used for testing purposes. -func (app *FeeAbs) GetTKey(storeKey string) *sdk.TransientStoreKey { +func (app *FeeAbs) GetTKey(storeKey string) *storetypes.TransientStoreKey { return app.tkeys[storeKey] } // GetMemKey returns the MemStoreKey for the provided mem key. // // NOTE: This is solely used for testing purposes. -func (app *FeeAbs) GetMemKey(storeKey string) *sdk.MemoryStoreKey { +func (app *FeeAbs) GetMemKey(storeKey string) *storetypes.MemoryStoreKey { return app.memKeys[storeKey] } +// TxConfig returns WasmApp's TxConfig +func (app *FeeAbs) TxConfig() client.TxConfig { + return app.txConfig +} + +// DefaultGenesis returns a default genesis from the registered AppModuleBasic's. +func (app *FeeAbs) DefaultGenesis() map[string]json.RawMessage { + return ModuleBasics.DefaultGenesis(app.appCodec) +} + // GetSubspace returns a param subspace for a given module name. // // NOTE: This is solely to be used for testing purposes. @@ -929,16 +973,15 @@ func (app *FeeAbs) SimulationManager() *module.SimulationManager { // API server. func (app *FeeAbs) RegisterAPIRoutes(apiSvr *api.Server, apiConfig config.APIConfig) { clientCtx := apiSvr.ClientCtx - rpc.RegisterRoutes(clientCtx, apiSvr.Router) - // Register legacy tx routes. - authrest.RegisterTxRoutes(clientCtx, apiSvr.Router) // Register new tx routes from grpc-gateway. authtx.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) // Register new tendermint queries routes from grpc-gateway. tmservice.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) + // Register node gRPC service for grpc-gateway. + nodeservice.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) + // Register legacy and grpc-gateway routes for all modules. - ModuleBasics.RegisterRESTRoutes(clientCtx, apiSvr.Router) ModuleBasics.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) // register swagger API from root so that other applications can override easily @@ -954,7 +997,16 @@ func (app *FeeAbs) RegisterTxService(clientCtx client.Context) { // RegisterTendermintService implements the Application.RegisterTendermintService method. func (app *FeeAbs) RegisterTendermintService(clientCtx client.Context) { - tmservice.RegisterTendermintService(app.BaseApp.GRPCQueryRouter(), clientCtx, app.interfaceRegistry) + tmservice.RegisterTendermintService( + clientCtx, + app.BaseApp.GRPCQueryRouter(), + app.interfaceRegistry, + app.Query, + ) +} + +func (app *FeeAbs) RegisterNodeService(clientCtx client.Context) { + nodeservice.RegisterNodeService(clientCtx, app.GRPCQueryRouter()) } // RegisterSwaggerAPI registers swagger route with API Server @@ -969,7 +1021,7 @@ func RegisterSwaggerAPI(rtr *mux.Router) { } // initParamsKeeper init params keeper and its subspaces -func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino, key, tkey sdk.StoreKey) paramskeeper.Keeper { +func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino, key, tkey storetypes.StoreKey) paramskeeper.Keeper { paramsKeeper := paramskeeper.NewKeeper(appCodec, legacyAmino, key, tkey) paramsKeeper.Subspace(authtypes.ModuleName) @@ -978,10 +1030,10 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino paramsKeeper.Subspace(minttypes.ModuleName) paramsKeeper.Subspace(distrtypes.ModuleName) paramsKeeper.Subspace(slashingtypes.ModuleName) - paramsKeeper.Subspace(govtypes.ModuleName).WithKeyTable(govtypes.ParamKeyTable()) + paramsKeeper.Subspace(govtypes.ModuleName).WithKeyTable(govv1.ParamKeyTable()) paramsKeeper.Subspace(crisistypes.ModuleName) paramsKeeper.Subspace(ibctransfertypes.ModuleName) - paramsKeeper.Subspace(ibchost.ModuleName) + paramsKeeper.Subspace(ibcexported.ModuleName) paramsKeeper.Subspace(routertypes.ModuleName).WithKeyTable(routertypes.ParamKeyTable()) paramsKeeper.Subspace(icahosttypes.SubModuleName) paramsKeeper.Subspace(icacontrollertypes.SubModuleName) diff --git a/app/export.go b/app/export.go index 3148fca3..8dba6ad4 100644 --- a/app/export.go +++ b/app/export.go @@ -16,7 +16,7 @@ import ( // ExportAppStateAndValidators exports the state of the application for a genesis // file. func (app *FeeAbs) ExportAppStateAndValidators( - forZeroHeight bool, jailAllowedAddrs []string, + forZeroHeight bool, jailAllowedAddrs []string, modulesToExport []string, ) (servertypes.ExportedApp, error) { // as if they could withdraw from the start of the next block ctx := app.NewContext(true, tmproto.Header{Height: app.LastBlockHeight()}) @@ -29,7 +29,7 @@ func (app *FeeAbs) ExportAppStateAndValidators( app.prepForZeroHeightGenesis(ctx, jailAllowedAddrs) } - genState := app.mm.ExportGenesis(ctx, app.appCodec) + genState := app.mm.ExportGenesisForModules(ctx, app.appCodec, modulesToExport) appState, err := json.MarshalIndent(genState, "", " ") if err != nil { return servertypes.ExportedApp{}, err diff --git a/app/helpers/test_helpers.go b/app/helpers/test_helpers.go index 295f700e..2cdd5d15 100644 --- a/app/helpers/test_helpers.go +++ b/app/helpers/test_helpers.go @@ -6,6 +6,14 @@ import ( "testing" "time" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" + "github.com/cosmos/cosmos-sdk/testutil/mock" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + dbm "github.com/cometbft/cometbft-db" abci "github.com/cometbft/cometbft/abci/types" "github.com/cometbft/cometbft/libs/log" @@ -27,8 +35,8 @@ const ( // DefaultConsensusParams defines the default Tendermint consensus params used // in feeapp testing. -var DefaultConsensusParams = &abci.ConsensusParams{ - Block: &abci.BlockParams{ +var DefaultConsensusParams = &tmproto.ConsensusParams{ + Block: &tmproto.BlockParams{ MaxBytes: 200000, MaxGas: 2000000, }, @@ -59,7 +67,35 @@ func NewContextForApp(app feeapp.FeeAbs) sdk.Context { func Setup(t *testing.T, isCheckTx bool, invCheckPeriod uint) *feeapp.FeeAbs { t.Helper() + privVal := mock.NewPV() + pubKey, err := privVal.GetPubKey() + require.NoError(t, err) + // create validator set with single validator + validator := tmtypes.NewValidator(pubKey, 1) + valSet := tmtypes.NewValidatorSet([]*tmtypes.Validator{validator}) + // generate genesis account + senderPrivKey := secp256k1.GenPrivKey() + acc := authtypes.NewBaseAccount(senderPrivKey.PubKey().Address().Bytes(), senderPrivKey.PubKey(), 0, 0) + balance := banktypes.Balance{ + Address: acc.GetAddress().String(), + Coins: sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(100000000000000))), + } + + app := SetupWithGenesisValSet(t, isCheckTx, invCheckPeriod, valSet, []authtypes.GenesisAccount{acc}, balance) + + return app +} + +func SetupWithGenesisValSet(t *testing.T, + isCheckTx bool, invCheckPeriod uint, + valSet *tmtypes.ValidatorSet, + genAccs []authtypes.GenesisAccount, + balances ...banktypes.Balance, +) *feeapp.FeeAbs { + t.Helper() + app, genesisState := setup(!isCheckTx, invCheckPeriod) + genesisState = genesisStateWithValSet(t, app, genesisState, valSet, genAccs, balances...) if !isCheckTx { // InitChain must be called to stop deliverState from being nil stateBytes, err := json.MarshalIndent(genesisState, "", " ") @@ -78,10 +114,9 @@ func Setup(t *testing.T, isCheckTx bool, invCheckPeriod uint) *feeapp.FeeAbs { return app } -func setup(withGenesis bool, invCheckPeriod uint) (*feeapp.FeeAbs, feeapp.GenesisState) { +func setup(withGenesis bool, invCheckPeriod uint, wasmOpts ...wasm.Option) (*feeapp.FeeAbs, feeapp.GenesisState) { db := dbm.NewMemDB() encCdc := feeapp.MakeEncodingConfig() - var emptyWasmOpts []wasm.Option app := feeapp.NewFeeAbs( log.NewNopLogger(), db, @@ -92,7 +127,7 @@ func setup(withGenesis bool, invCheckPeriod uint) (*feeapp.FeeAbs, feeapp.Genesi invCheckPeriod, encCdc, EmptyAppOptions{}, - emptyWasmOpts, + wasmOpts, ) if withGenesis { return app, feeapp.NewDefaultGenesisState() @@ -101,6 +136,70 @@ func setup(withGenesis bool, invCheckPeriod uint) (*feeapp.FeeAbs, feeapp.Genesi return app, feeapp.GenesisState{} } +func genesisStateWithValSet(t *testing.T, + app *feeapp.FeeAbs, genesisState feeapp.GenesisState, + valSet *tmtypes.ValidatorSet, genAccs []authtypes.GenesisAccount, + balances ...banktypes.Balance, +) feeapp.GenesisState { + // set genesis accounts + authGenesis := authtypes.NewGenesisState(authtypes.DefaultParams(), genAccs) + genesisState[authtypes.ModuleName] = app.AppCodec().MustMarshalJSON(authGenesis) + + validators := make([]stakingtypes.Validator, 0, len(valSet.Validators)) + delegations := make([]stakingtypes.Delegation, 0, len(valSet.Validators)) + + bondAmt := sdk.DefaultPowerReduction + + for _, val := range valSet.Validators { + pk, err := cryptocodec.FromTmPubKeyInterface(val.PubKey) + require.NoError(t, err) + pkAny, err := codectypes.NewAnyWithValue(pk) + require.NoError(t, err) + validator := stakingtypes.Validator{ + OperatorAddress: sdk.ValAddress(val.Address).String(), + ConsensusPubkey: pkAny, + Jailed: false, + Status: stakingtypes.Bonded, + Tokens: bondAmt, + DelegatorShares: sdk.OneDec(), + Description: stakingtypes.Description{}, + UnbondingHeight: int64(0), + UnbondingTime: time.Unix(0, 0).UTC(), + Commission: stakingtypes.NewCommission(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()), + MinSelfDelegation: sdk.ZeroInt(), + } + validators = append(validators, validator) + delegations = append(delegations, stakingtypes.NewDelegation(genAccs[0].GetAddress(), val.Address.Bytes(), sdk.OneDec())) + + } + // set validators and delegations + stakingGenesis := stakingtypes.NewGenesisState(stakingtypes.DefaultParams(), validators, delegations) + genesisState[stakingtypes.ModuleName] = app.AppCodec().MustMarshalJSON(stakingGenesis) + + totalSupply := sdk.NewCoins() + for _, b := range balances { + // add genesis acc tokens to total supply + totalSupply = totalSupply.Add(b.Coins...) + } + + for range delegations { + // add delegated tokens to total supply + totalSupply = totalSupply.Add(sdk.NewCoin(sdk.DefaultBondDenom, bondAmt)) + } + + // add bonded amount to bonded pool module account + balances = append(balances, banktypes.Balance{ + Address: authtypes.NewModuleAddress(stakingtypes.BondedPoolName).String(), + Coins: sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, bondAmt)}, + }) + + // update total supply + bankGenesis := banktypes.NewGenesisState(banktypes.DefaultGenesisState().Params, balances, totalSupply, []banktypes.Metadata{}, []banktypes.SendEnabled{}) + genesisState[banktypes.ModuleName] = app.AppCodec().MustMarshalJSON(bankGenesis) + + return genesisState +} + func AddHostZoneProposalFixture(mutators ...func(*types.AddHostZoneProposal)) *types.AddHostZoneProposal { p := &types.AddHostZoneProposal{ Title: "Title", diff --git a/app/sim_test.go b/app/sim_test.go index 99ab19c1..4e6aca6b 100644 --- a/app/sim_test.go +++ b/app/sim_test.go @@ -14,25 +14,33 @@ import ( "github.com/notional-labs/fee-abstraction/v3/app/helpers" "github.com/stretchr/testify/require" - "cosmossdk.io/simapp" "github.com/CosmWasm/wasmd/x/wasm" "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/store" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" simulation2 "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/simulation" + simcli "github.com/cosmos/cosmos-sdk/x/simulation/client/cli" ) func init() { - simapp.GetSimulatorFlags() + simcli.GetSimulatorFlags() } // Profile with: // /usr/local/go/bin/go test -benchmem -run=^$ github.com/cosmos/cosmos-sdk/feeappApp -bench ^BenchmarkFullAppSimulation$ -Commit=true -cpuprofile cpu.out func BenchmarkFullAppSimulation(b *testing.B) { - config, db, dir, logger, _, err := simapp.SetupSimulation("goleveldb-app-sim", "Simulation") + config := simcli.NewConfigFromFlags() + + db, dir, logger, skip, err := simtestutil.SetupSimulation(config, "leveldb-app-sim", "Simulation", true, true) if err != nil { b.Fatalf("simulation setup failed: %s", err.Error()) } + if skip { + b.Skip("skipping application simulation") + } + defer func() { db.Close() err = os.RemoveAll(dir) @@ -42,23 +50,23 @@ func BenchmarkFullAppSimulation(b *testing.B) { }() var emptyWasmOpts []wasm.Option - app := feeapp.NewFeeAbs(logger, db, nil, true, map[int64]bool{}, feeapp.DefaultNodeHome, simapp.FlagPeriodValue, feeapp.MakeEncodingConfig(), simapp.EmptyAppOptions{}, emptyWasmOpts, interBlockCacheOpt()) + app := feeapp.NewFeeAbs(logger, db, nil, true, map[int64]bool{}, feeapp.DefaultNodeHome, simcli.FlagPeriodValue, feeapp.MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, emptyWasmOpts, interBlockCacheOpt()) // Run randomized simulation:w _, simParams, simErr := simulation.SimulateFromSeed( b, os.Stdout, app.BaseApp, - simapp.AppStateFn(app.AppCodec(), app.SimulationManager()), + simtestutil.AppStateFn(app.AppCodec(), app.SimulationManager(), app.DefaultGenesis()), simulation2.RandomAccounts, // Replace with own random account function if using keys other than secp256k1 - simapp.SimulationOperations(app, app.AppCodec(), config), + simtestutil.SimulationOperations(app, app.AppCodec(), config), app.ModuleAccountAddrs(), config, app.AppCodec(), ) // export state and simParams before the simulation error is checked - if err = simapp.CheckExportSimulation(app, config, simParams); err != nil { + if err = simtestutil.CheckExportSimulation(app, config, simParams); err != nil { b.Fatal(err) } @@ -67,7 +75,7 @@ func BenchmarkFullAppSimulation(b *testing.B) { } if config.Commit { - simapp.PrintStats(db) + simtestutil.PrintStats(db) } } @@ -80,11 +88,11 @@ func interBlockCacheOpt() func(*baseapp.BaseApp) { // // TODO: Make another test for the fuzzer itself, which just has noOp txs // // and doesn't depend on the application. func TestAppStateDeterminism(t *testing.T) { - if !simapp.FlagEnabledValue { + if !simcli.FlagEnabledValue { t.Skip("skipping application simulation") } - config := simapp.NewConfigFromFlags() + config := simcli.NewConfigFromFlags() config.InitialBlockHeight = 1 config.ExportParamsPath = "" config.OnOperation = false @@ -100,7 +108,7 @@ func TestAppStateDeterminism(t *testing.T) { for j := 0; j < numTimesToRunPerSeed; j++ { var logger log.Logger - if simapp.FlagVerboseValue { + if simcli.FlagVerboseValue { logger = log.TestingLogger() } else { logger = log.NewNopLogger() @@ -108,7 +116,7 @@ func TestAppStateDeterminism(t *testing.T) { db := dbm.NewMemDB() var emptyWasmOpts []wasm.Option - app := feeapp.NewFeeAbs(logger, db, nil, true, map[int64]bool{}, feeapp.DefaultNodeHome, simapp.FlagPeriodValue, feeapp.MakeEncodingConfig(), simapp.EmptyAppOptions{}, emptyWasmOpts, interBlockCacheOpt()) + app := feeapp.NewFeeAbs(logger, db, nil, true, map[int64]bool{}, feeapp.DefaultNodeHome, simcli.FlagPeriodValue, feeapp.MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, emptyWasmOpts, interBlockCacheOpt()) fmt.Printf( "running non-determinism simulation; seed %d: %d/%d, attempt: %d/%d\n", @@ -119,9 +127,9 @@ func TestAppStateDeterminism(t *testing.T) { t, os.Stdout, app.BaseApp, - simapp.AppStateFn(app.AppCodec(), app.SimulationManager()), + simtestutil.AppStateFn(app.AppCodec(), app.SimulationManager(), app.DefaultGenesis()), simulation2.RandomAccounts, // Replace with own random account function if using keys other than secp256k1 - simapp.SimulationOperations(app, app.AppCodec(), config), + simtestutil.SimulationOperations(app, app.AppCodec(), config), app.ModuleAccountAddrs(), config, app.AppCodec(), @@ -129,7 +137,7 @@ func TestAppStateDeterminism(t *testing.T) { require.NoError(t, err) if config.Commit { - simapp.PrintStats(db) + simtestutil.PrintStats(db) } appHash := app.LastCommitID().Hash diff --git a/app/test_access.go b/app/test_access.go index 49a468ad..0118239c 100644 --- a/app/test_access.go +++ b/app/test_access.go @@ -53,7 +53,7 @@ func (s TestSupport) ScopedTransferKeeper() capabilitykeeper.ScopedKeeper { } func (s TestSupport) StakingKeeper() stakingkeeper.Keeper { - return s.app.StakingKeeper + return *s.app.StakingKeeper } func (s TestSupport) BankKeeper() bankkeeper.Keeper { diff --git a/app/test_helpers.go b/app/test_helpers.go index 85dd0e1f..b34d39e1 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -5,12 +5,13 @@ import ( "encoding/hex" "encoding/json" "fmt" + "math/rand" "path/filepath" "strconv" "testing" "time" - // "cosmossdk.io/simapp/helpers" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" abci "github.com/cometbft/cometbft/abci/types" "github.com/cometbft/cometbft/libs/log" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" @@ -20,6 +21,7 @@ import ( "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/snapshots" + "github.com/cosmos/cosmos-sdk/snapshots/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/errors" "github.com/stretchr/testify/require" @@ -37,8 +39,8 @@ import ( // DefaultConsensusParams defines the default Tendermint consensus params used in // FeeAbs testing. -var DefaultConsensusParams = &abci.ConsensusParams{ - Block: &abci.BlockParams{ +var DefaultConsensusParams = &tmproto.ConsensusParams{ + Block: &tmproto.BlockParams{ MaxBytes: 8000000, MaxGas: 1234000000, }, @@ -57,11 +59,11 @@ var DefaultConsensusParams = &abci.ConsensusParams{ func setup(t testing.TB, withGenesis bool, invCheckPeriod uint, opts ...wasm.Option) (*FeeAbs, GenesisState) { nodeHome := t.TempDir() snapshotDir := filepath.Join(nodeHome, "data", "snapshots") - snapshotDB, err := sdk.NewLevelDB("metadata", snapshotDir) + snapshotDB, err := dbm.NewGoLevelDB("metadata", snapshotDir) require.NoError(t, err) snapshotStore, err := snapshots.NewStore(snapshotDB, snapshotDir) require.NoError(t, err) - baseAppOpts := []func(*baseapp.BaseApp){baseapp.SetSnapshotStore(snapshotStore), baseapp.SetSnapshotKeepRecent(2)} + baseAppOpts := []func(*baseapp.BaseApp){baseapp.SetSnapshot(snapshotStore, types.SnapshotOptions{KeepRecent: 2})} db := dbm.NewMemDB() app := NewFeeAbs( log.NewNopLogger(), @@ -138,7 +140,7 @@ func SetupWithGenesisValSet( }) // update total supply - bankGenesis := banktypes.NewGenesisState(banktypes.DefaultGenesisState().Params, balances, totalSupply, []banktypes.Metadata{}) + bankGenesis := banktypes.NewGenesisState(banktypes.DefaultGenesisState().Params, balances, totalSupply, []banktypes.Metadata{}, []banktypes.SendEnabled{}) genesisState[banktypes.ModuleName] = app.appCodec.MustMarshalJSON(bankGenesis) stateBytes, err := json.MarshalIndent(genesisState, "", " ") @@ -195,7 +197,7 @@ func createIncrementalAccounts(accNum int) []sdk.AccAddress { buffer.WriteString("A58856F0FD53BF058B4909A21AEC019107BA6") // base address string buffer.WriteString(numString) // adding on final two digits to make addresses unique - res, err := sdk.AccAddressFromHex(buffer.String()) + res, err := sdk.AccAddressFromHexUnsafe(buffer.String()) if err != nil { panic(err) } @@ -270,7 +272,7 @@ func ConvertAddrsToValAddrs(addrs []sdk.AccAddress) []sdk.ValAddress { } func TestAddr(addr string, bech string) (sdk.AccAddress, error) { - res, err := sdk.AccAddressFromHex(addr) + res, err := sdk.AccAddressFromHexUnsafe(addr) if err != nil { return nil, err } @@ -306,7 +308,8 @@ func SignCheckDeliver( t *testing.T, txCfg client.TxConfig, app *baseapp.BaseApp, header tmproto.Header, msgs []sdk.Msg, chainID string, accNums, accSeqs []uint64, expSimPass, expPass bool, priv ...cryptotypes.PrivKey, ) (sdk.GasInfo, *sdk.Result, error) { - tx, err := helpers.GenTx( + tx, err := simtestutil.GenSignedMockTx( + rand.New(rand.NewSource(time.Now().UnixNano())), txCfg, msgs, sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 0)}, @@ -333,7 +336,7 @@ func SignCheckDeliver( // Simulate a sending a transaction and committing a block app.BeginBlock(abci.RequestBeginBlock{Header: header}) - gInfo, res, err := app.Deliver(txCfg.TxEncoder(), tx) + gInfo, res, err := app.SimDeliver(txCfg.TxEncoder(), tx) if expPass { require.NoError(t, err) @@ -355,7 +358,8 @@ func SignAndDeliver( t *testing.T, txCfg client.TxConfig, app *baseapp.BaseApp, header tmproto.Header, msgs []sdk.Msg, chainID string, accNums, accSeqs []uint64, expSimPass, expPass bool, priv ...cryptotypes.PrivKey, ) (sdk.GasInfo, *sdk.Result, error) { - tx, err := helpers.GenTx( + tx, err := simtestutil.GenSignedMockTx( + rand.New(rand.NewSource(time.Now().UnixNano())), txCfg, msgs, sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 0)}, @@ -369,7 +373,7 @@ func SignAndDeliver( // Simulate a sending a transaction and committing a block app.BeginBlock(abci.RequestBeginBlock{Header: header}) - gInfo, res, err := app.Deliver(txCfg.TxEncoder(), tx) + gInfo, res, err := app.SimDeliver(txCfg.TxEncoder(), tx) if expPass { require.NoError(t, err) @@ -392,11 +396,12 @@ func GenSequenceOfTxs(txGen client.TxConfig, msgs []sdk.Msg, accNums []uint64, i txs := make([]sdk.Tx, numToGenerate) var err error for i := 0; i < numToGenerate; i++ { - txs[i], err = helpers.GenTx( + txs[i], err = simtestutil.GenSignedMockTx( + rand.New(rand.NewSource(time.Now().UnixNano())), txGen, msgs, sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 0)}, - helpers.DefaultGenTxGas, + simtestutil.DefaultGenTxGas, "", accNums, initSeqNums, diff --git a/cmd/feeappd/cmd/genaccounts.go b/cmd/feeappd/cmd/genaccounts.go index d2122d19..c6d1b49b 100644 --- a/cmd/feeappd/cmd/genaccounts.go +++ b/cmd/feeappd/cmd/genaccounts.go @@ -53,7 +53,7 @@ contain valid denominations. Accounts may optionally be supplied with vesting pa } // attempt to lookup address from Keybase if no address was provided - kb, err := keyring.New(sdk.KeyringServiceName(), keyringBackend, clientCtx.HomeDir, inBuf) + kb, err := keyring.New(sdk.KeyringServiceName(), keyringBackend, clientCtx.HomeDir, inBuf, clientCtx.Codec) if err != nil { return err } @@ -63,7 +63,11 @@ contain valid denominations. Accounts may optionally be supplied with vesting pa return fmt.Errorf("failed to get address from Keybase: %w", err) } - addr = info.GetAddress() + addr, err = info.GetAddress() + if err != nil { + return fmt.Errorf("failed to get address from Keyring Record: %w", err) + } + } coins, err := sdk.ParseCoinsNormalized(args[1]) diff --git a/cmd/feeappd/cmd/root.go b/cmd/feeappd/cmd/root.go index 79d8617a..00ee393e 100644 --- a/cmd/feeappd/cmd/root.go +++ b/cmd/feeappd/cmd/root.go @@ -6,6 +6,7 @@ import ( "os" "path/filepath" + tmcfg "github.com/cometbft/cometbft/config" tmcli "github.com/cometbft/cometbft/libs/cli" "github.com/cometbft/cometbft/libs/log" @@ -21,13 +22,16 @@ import ( serverconfig "github.com/cosmos/cosmos-sdk/server/config" servertypes "github.com/cosmos/cosmos-sdk/server/types" "github.com/cosmos/cosmos-sdk/snapshots" + snapshotstypes "github.com/cosmos/cosmos-sdk/snapshots/types" "github.com/cosmos/cosmos-sdk/store" sdk "github.com/cosmos/cosmos-sdk/types" authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli" "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" "github.com/cosmos/cosmos-sdk/x/crisis" + "github.com/cosmos/cosmos-sdk/x/genutil" genutilcli "github.com/cosmos/cosmos-sdk/x/genutil/client/cli" + genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" "github.com/prometheus/client_golang/prometheus" @@ -74,7 +78,8 @@ func NewRootCmd() (*cobra.Command, params.EncodingConfig) { } customTemplate, customfeeappConfig := initAppConfig() - return server.InterceptConfigsPreRunHandler(cmd, customTemplate, customfeeappConfig) + customTMConfig := initTendermintConfig() + return server.InterceptConfigsPreRunHandler(cmd, customTemplate, customfeeappConfig, customTMConfig) }, } @@ -98,14 +103,28 @@ func initAppConfig() (string, interface{}) { } } +// initTendermintConfig helps to override default Tendermint Config values. +// return tmcfg.DefaultConfig if no custom configuration is required for the application. +func initTendermintConfig() *tmcfg.Config { + cfg := tmcfg.DefaultConfig() + + // these values put a higher strain on node memory + // cfg.P2P.MaxNumInboundPeers = 100 + // cfg.P2P.MaxNumOutboundPeers = 40 + + return cfg +} + func initRootCmd(rootCmd *cobra.Command, encodingConfig params.EncodingConfig) { cfg := sdk.GetConfig() cfg.Seal() + gentxModule := feeapp.ModuleBasics[genutiltypes.ModuleName].(genutil.AppModuleBasic) + rootCmd.AddCommand( genutilcli.InitCmd(feeapp.ModuleBasics, feeapp.DefaultNodeHome), - genutilcli.CollectGenTxsCmd(banktypes.GenesisBalancesIterator{}, feeapp.DefaultNodeHome), + genutilcli.CollectGenTxsCmd(banktypes.GenesisBalancesIterator{}, feeapp.DefaultNodeHome, gentxModule.GenTxValidator), genutilcli.GenTxCmd(feeapp.ModuleBasics, encodingConfig.TxConfig, banktypes.GenesisBalancesIterator{}, feeapp.DefaultNodeHome), genutilcli.ValidateGenesisCmd(feeapp.ModuleBasics), AddGenesisAccountCmd(feeapp.DefaultNodeHome), @@ -211,7 +230,7 @@ func (ac appCreator) newApp( } snapshotDir := filepath.Join(cast.ToString(appOpts.Get(flags.FlagHome)), "data", "snapshots") - snapshotDB, err := sdk.NewLevelDB("metadata", snapshotDir) + snapshotDB, err := dbm.NewGoLevelDB("metadata", snapshotDir) if err != nil { panic(err) } @@ -240,9 +259,10 @@ func (ac appCreator) newApp( baseapp.SetInterBlockCache(cache), baseapp.SetTrace(cast.ToBool(appOpts.Get(server.FlagTrace))), baseapp.SetIndexEvents(cast.ToStringSlice(appOpts.Get(server.FlagIndexEvents))), - baseapp.SetSnapshotStore(snapshotStore), - baseapp.SetSnapshotInterval(cast.ToUint64(appOpts.Get(server.FlagStateSyncSnapshotInterval))), - baseapp.SetSnapshotKeepRecent(cast.ToUint32(appOpts.Get(server.FlagStateSyncSnapshotKeepRecent))), + baseapp.SetSnapshot(snapshotStore, snapshotstypes.SnapshotOptions{ + Interval: cast.ToUint64(appOpts.Get(server.FlagStateSyncSnapshotInterval)), + KeepRecent: cast.ToUint32(appOpts.Get(server.FlagStateSyncSnapshotKeepRecent)), + }), ) } @@ -254,6 +274,7 @@ func (ac appCreator) appExport( forZeroHeight bool, jailAllowedAddrs []string, appOpts servertypes.AppOptions, + modulesToExport []string, ) (servertypes.ExportedApp, error) { homePath, ok := appOpts.Get(flags.FlagHome).(string) if !ok || homePath == "" { @@ -285,5 +306,5 @@ func (ac appCreator) appExport( } } - return app.ExportAppStateAndValidators(forZeroHeight, jailAllowedAddrs) + return app.ExportAppStateAndValidators(forZeroHeight, jailAllowedAddrs, modulesToExport) } diff --git a/cmd/feeappd/cmd/root_test.go b/cmd/feeappd/cmd/root_test.go index 1748de32..972416eb 100644 --- a/cmd/feeappd/cmd/root_test.go +++ b/cmd/feeappd/cmd/root_test.go @@ -18,5 +18,5 @@ func TestRootCmdConfig(t *testing.T) { "test", // value }) - require.NoError(t, svrcmd.Execute(rootCmd, app.DefaultNodeHome)) + require.NoError(t, svrcmd.Execute(rootCmd, "", app.DefaultNodeHome)) } diff --git a/cmd/feeappd/cmd/testnet.go b/cmd/feeappd/cmd/testnet.go index 3a4e5f56..5fef4607 100644 --- a/cmd/feeappd/cmd/testnet.go +++ b/cmd/feeappd/cmd/testnet.go @@ -177,7 +177,7 @@ func InitTestnet( memo := fmt.Sprintf("%s@%s:26656", nodeIDs[i], ip) genFiles = append(genFiles, nodeConfig.GenesisFile()) - kb, err := keyring.New(sdk.KeyringServiceName(), keyringBackend, nodeDir, inBuf) + kb, err := keyring.New(sdk.KeyringServiceName(), keyringBackend, nodeDir, inBuf, clientCtx.Codec) if err != nil { return err } @@ -347,7 +347,7 @@ func collectGenFiles( return err } - nodeAppState, err := genutil.GenAppStateFromConfig(clientCtx.Codec, clientCtx.TxConfig, nodeConfig, initCfg, *genDoc, genBalIterator) + nodeAppState, err := genutil.GenAppStateFromConfig(clientCtx.Codec, clientCtx.TxConfig, nodeConfig, initCfg, *genDoc, genBalIterator, genutiltypes.DefaultMessageValidator) if err != nil { return err } diff --git a/cmd/feeappd/main.go b/cmd/feeappd/main.go index 3fd6481f..9c3ded0e 100644 --- a/cmd/feeappd/main.go +++ b/cmd/feeappd/main.go @@ -15,7 +15,7 @@ func main() { params.SetAddressPrefixes() rootCmd, _ := cmd.NewRootCmd() - if err := svrcmd.Execute(rootCmd, app.DefaultNodeHome); err != nil { + if err := svrcmd.Execute(rootCmd, "", app.DefaultNodeHome); err != nil { switch e := err.(type) { case server.ErrorCode: os.Exit(e.Code) diff --git a/x/feeabs/keeper/keeper.go b/x/feeabs/keeper/keeper.go index 0e5ecb8a..23ff7161 100644 --- a/x/feeabs/keeper/keeper.go +++ b/x/feeabs/keeper/keeper.go @@ -6,6 +6,7 @@ import ( "github.com/cometbft/cometbft/libs/log" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" + storetypes "github.com/cosmos/cosmos-sdk/store/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" @@ -16,7 +17,7 @@ import ( type Keeper struct { cdc codec.BinaryCodec - storeKey sdk.StoreKey + storeKey storetypes.StoreKey sk types.StakingKeeper ak types.AccountKeeper bk types.BankKeeper @@ -31,8 +32,8 @@ type Keeper struct { func NewKeeper( cdc codec.BinaryCodec, - storeKey sdk.StoreKey, - memKey sdk.StoreKey, + storeKey storetypes.StoreKey, + memKey storetypes.StoreKey, ps paramtypes.Subspace, sk types.StakingKeeper, ak types.AccountKeeper, From d60469fee18225f3be5938d9be7416398e8e95c6 Mon Sep 17 00:00:00 2001 From: phamminh0811 <1phamminh0811@gmail.com> Date: Mon, 15 May 2023 11:12:47 +0700 Subject: [PATCH 03/90] add cometbft thirdparty --- Makefile | 5 +- go.mod | 11 +- go.sum | 719 +++++++- scripts/protocgen.sh | 7 +- third_party/tendermint/abci/types.proto | 486 +++++ third_party/tendermint/crypto/keys.proto | 17 + third_party/tendermint/crypto/proof.proto | 41 + third_party/tendermint/types/params.proto | 92 + third_party/tendermint/types/validator.proto | 37 + x/feeabs/types/epoch.pb.go | 34 +- x/feeabs/types/feepool.pb.go | 28 +- x/feeabs/types/genesis.pb.go | 46 +- x/feeabs/types/osmosisibc.pb.go | 78 +- x/feeabs/types/params.pb.go | 50 +- x/feeabs/types/proposal.pb.go | 20 +- x/feeabs/types/query.pb.go | 1718 ++++++++++++++++++ x/feeabs/types/tx.pb.go | 1316 ++++++++++++++ x/feeabs/types/tx.pb.gw.go | 337 ++++ 18 files changed, 4885 insertions(+), 157 deletions(-) create mode 100644 third_party/tendermint/abci/types.proto create mode 100644 third_party/tendermint/crypto/keys.proto create mode 100644 third_party/tendermint/crypto/proof.proto create mode 100644 third_party/tendermint/types/params.proto create mode 100644 third_party/tendermint/types/validator.proto create mode 100644 x/feeabs/types/query.pb.go create mode 100644 x/feeabs/types/tx.pb.go create mode 100644 x/feeabs/types/tx.pb.gw.go diff --git a/Makefile b/Makefile index b1d0d948..606725d7 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,7 @@ endif LEDGER_ENABLED ?= true SDK_PACK := $(shell go list -m github.com/cosmos/cosmos-sdk | sed 's/ /\@/g') -TM_VERSION := $(shell go list -m github.com/tendermint/tendermint | sed 's:.* ::') +TM_VERSION := $(shell go list -m github.com/cometbft/cometbft | sed 's:.* ::') DOCKER := $(shell which docker) DOCKER_BUF := $(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace bufbuild/buf:1.0.0-rc8 BUILDDIR ?= $(CURDIR)/build @@ -64,7 +64,7 @@ ldflags = -X github.com/cosmos/cosmos-sdk/version.Name=feeapp \ -X github.com/cosmos/cosmos-sdk/version.Version=$(VERSION) \ -X github.com/cosmos/cosmos-sdk/version.Commit=$(COMMIT) \ -X "github.com/cosmos/cosmos-sdk/version.BuildTags=$(build_tags_comma_sep)" \ - -X github.com/tendermint/tendermint/version.TMCoreSemVer=$(TM_VERSION) + -X github.com/cometbft/cometbft/version.TMCoreSemVer=$(TM_VERSION) ifeq (cleveldb,$(findstring cleveldb,$(COSMOS_BUILD_OPTIONS))) ldflags += -X github.com/cosmos/cosmos-sdk/types.DBBackend=cleveldb @@ -117,7 +117,6 @@ ictest-all: ictest-basic ictest-ibc ictest-packet-forward ############################################################################### ### Proto ### ############################################################################### - protoVer=v0.8 protoImageName=ghcr.io/notional-labs/fa-proto-gen:$(protoVer) containerProtoGen=fa-proto-gen-$(protoVer) diff --git a/go.mod b/go.mod index 40e8b318..8ba97606 100644 --- a/go.mod +++ b/go.mod @@ -3,8 +3,7 @@ module github.com/notional-labs/fee-abstraction/v3 go 1.18 require ( - cosmossdk.io/errors v1.0.0-beta.7 - cosmossdk.io/simapp v0.0.0-20230224204036-a6adb0821462 + cosmossdk.io/errors v1.0.0-beta.7 github.com/CosmWasm/wasmd v0.40.0-rc.0 github.com/CosmWasm/wasmvm v1.2.1 github.com/cometbft/cometbft v0.37.0 @@ -22,8 +21,9 @@ require ( github.com/spf13/cobra v1.6.1 github.com/strangelove-ventures/packet-forward-middleware/v7 v7.0.0 github.com/stretchr/testify v1.8.2 + github.com/tendermint/tendermint v0.35.9 google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 - google.golang.org/grpc v1.53.0 + google.golang.org/grpc v1.54.0 ) require ( @@ -46,6 +46,7 @@ require ( github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect + github.com/btcsuite/btcd v0.22.1 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect github.com/cenkalti/backoff/v4 v4.1.3 // indirect github.com/cespare/xxhash v1.1.0 // indirect @@ -127,6 +128,7 @@ require ( github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mtibben/percent v0.2.1 // indirect + github.com/oasisprotocol/curve25519-voi v0.0.0-20210609091139-0a56a4bca00b // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/pelletier/go-toml/v2 v2.0.6 // indirect github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d // indirect @@ -162,7 +164,7 @@ require ( golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/api v0.110.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.29.1 // indirect + google.golang.org/protobuf v1.30.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect @@ -175,6 +177,7 @@ replace ( // use cosmos fork of keyring github.com/99designs/keyring => github.com/cosmos/keyring v1.2.0 github.com/cosmos/iavl => github.com/cosmos/iavl v0.20.0 + github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 // use notional fork of packet forward middleware github.com/strangelove-ventures/packet-forward-middleware/v7 => github.com/notional-labs/packet-forward-middleware/v7 v7.0.1 ) diff --git a/go.sum b/go.sum index 2c98e46b..aaf88030 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= +bitbucket.org/creachadair/shell v0.0.6/go.mod h1:8Qqi/cYk7vPnsOePHroKXDJYmb5x7ENhtiFtfZq8K+M= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -12,6 +14,7 @@ cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6 cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.60.0/go.mod h1:yw2G51M9IfRboUH61Us8GqCeF1PzPblB823Mn2q2eAU= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= @@ -27,6 +30,7 @@ cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aD cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM= cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= @@ -100,6 +104,7 @@ cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1 cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= @@ -142,6 +147,7 @@ cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2k cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/pubsub v1.5.0/go.mod h1:ZEwJccE3z93Z2HWvstpri00jOg7oO4UZDtKhwDwqF0w= cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= @@ -164,6 +170,7 @@ cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyW cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/spanner v1.7.0/go.mod h1:sd3K2gZ9Fd0vMPLXzeCrF6fq4i63Q7aTLW/lBIfBkIk= cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= @@ -188,6 +195,7 @@ cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xX cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= @@ -198,8 +206,6 @@ cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= cosmossdk.io/math v1.0.0-rc.0 h1:ml46ukocrAAoBpYKMidF0R2tQJ1Uxfns0yH8wqgMAFc= cosmossdk.io/math v1.0.0-rc.0/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= -cosmossdk.io/simapp v0.0.0-20230224204036-a6adb0821462 h1:g8muUHnXL8vhld2Sjilyhb1UQObc+x9GVuDK43TYZns= -cosmossdk.io/simapp v0.0.0-20230224204036-a6adb0821462/go.mod h1:4Dd3NLoLYoN90kZ0uyHoTHzVVk9+J0v4HhZRBNTAq2c= cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -207,8 +213,17 @@ filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= +github.com/Antonboom/errname v0.1.7/go.mod h1:g0ONh16msHIPgJSGsecu1G/dcF2hlYR/0SddnIAGavU= +github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= +github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0/go.mod h1:HcM1YX14R7CJcghJGOYCgdezslRSVzqwLf/q+4Y2r/0= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8= +github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= @@ -216,40 +231,78 @@ github.com/CosmWasm/wasmd v0.40.0-rc.0 h1:QhJzLSWQCjUjrEPO2dc61WgafnaxetuKZRBHUf github.com/CosmWasm/wasmd v0.40.0-rc.0/go.mod h1:9MispMuIWmjs6HlgRx+XPLfOD0y1k7iQx5KIE2cNGTc= github.com/CosmWasm/wasmvm v1.2.1 h1:si0tRsRDdUShV0k51Wn6zRKlmj3/WWP9Yr4cLmDTf+8= github.com/CosmWasm/wasmvm v1.2.1/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= +github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= +github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= +github.com/GaijinEntertainment/go-exhaustruct/v2 v2.2.0/go.mod h1:n/vLeA7V+QY84iYAGwMkkUUp9ooeuftMEvaDrSVch+Q= +github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/OpenPeeDeeP/depguard v1.1.0/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= +github.com/Workiva/go-datastructures v1.0.53/go.mod h1:1yZL+zfsztete+ePzZz/Zb1/t5BnDuE2Ya2MMGhzP6A= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= +github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= +github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alecthomas/participle/v2 v2.0.0-alpha7 h1:cK4vjj0VSgb3lN1nuKA5F7dw+1s1pWBe5bx7nNCnN+c= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= +github.com/alingse/asasalint v0.0.10/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I= +github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= +github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= +github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +github.com/ashanbrown/forbidigo v1.3.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= +github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= +github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.36.30/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= +github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/aws/aws-sdk-go v1.44.203 h1:pcsP805b9acL3wUqa4JR2vg1k2wnItkDYNvfmcy6F+U= github.com/aws/aws-sdk-go v1.44.203/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= +github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= +github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= +github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -259,22 +312,50 @@ github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s= github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= +github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= +github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= +github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A= +github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU= +github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= +github.com/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c= +github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= +github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= +github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= +github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= +github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= +github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= +github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= +github.com/bufbuild/buf v1.3.1/go.mod h1:CTRUb23N+zlm1U8ZIBKz0Sqluk++qQloB2i/MZNZHIs= +github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= +github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= +github.com/chavacava/garif v0.0.0-20220316182200-5cad0b5181d4/go.mod h1:W8EnPSQ8Nv4fUjc/v1/8tHFqhuOJXnRub0dTfuAQktU= +github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM= @@ -285,8 +366,10 @@ github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObk github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04= github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= +github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= +github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= @@ -298,6 +381,7 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/apd/v3 v3.1.0 h1:MK3Ow7LH0W8zkd5GMKA1PvS9qG3bWFI95WaVNfyZJ/w= @@ -311,12 +395,19 @@ github.com/cometbft/cometbft-db v0.7.0 h1:uBjbrBx4QzU0zOEnU8KxoDl18dMNgDh+zZRUE0 github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= +github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190620071333-e64a0ec8b42a/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= github.com/cosmos/cosmos-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= @@ -345,22 +436,38 @@ github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzU github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creachadair/atomicfile v0.2.6/go.mod h1:BRq8Une6ckFneYXZQ+kO7p1ZZP3I2fzVzf28JxrIkBc= +github.com/creachadair/command v0.0.0-20220426235536-a748effdf6a1/go.mod h1:bAM+qFQb/KwWyCc9MLC4U1jvn3XyakqP5QRkds5T6cY= +github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= +github.com/creachadair/tomledit v0.0.22/go.mod h1:cIu/4x5L855oSRejIqr+WRFh+mv9g4fWLiUFaApYn/Y= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cucumber/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= +github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/daixiang0/gci v0.4.2/go.mod h1:d0f+IJhr9loBtIq+ebwhRoTt1LGbPH96ih8bKlsRT9E= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= +github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= +github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= +github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= +github.com/denisenkom/go-mssqldb v0.12.0/go.mod h1:iiK0YP1ZeepvmBQk/QpLEhhTNJgfzrpArPY/aFvc9yU= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= +github.com/dgraph-io/badger/v2 v2.2007.2/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= @@ -370,9 +477,16 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= +github.com/docker/cli v20.10.14+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v20.10.17+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v20.10.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.17+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= @@ -393,29 +507,53 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= +github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= +github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= +github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= +github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= +github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= +github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/firefart/nonamedreturns v1.0.4/go.mod h1:TDhe/tjI1BXo48CmYbUduTV7BdIga8MAO/xbKdcVsGI= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= +github.com/franela/goblin v0.0.0-20210519012713-85d372ac71e2/go.mod h1:VzmDKDJVZI3aJmnRI9VjAn9nJ8qPPsN1fqzr9dqInIo= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= +github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= +github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= +github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= +github.com/go-critic/go-critic v0.6.3/go.mod h1:c6b3ZP1MQ7o6lPR7Rv3lEf7pYQUmAcx8ABHgdZCQt/k= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -424,13 +562,17 @@ github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= @@ -438,9 +580,24 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87 github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= +github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= +github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= +github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astequal v1.0.1/go.mod h1:4oGA3EZXTVItV/ipGiOx7NWkY5veFfcsOJVS2YxltLw= +github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= +github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= +github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5/go.mod h1:3NAwwmD4uY/yggRxoEjk/S00MIV3A+H7rrE3i87eYxM= +github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= +github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= +github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= @@ -450,17 +607,19 @@ github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/E github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= +github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188/go.mod h1:vXjM/+wXQnTPR4KqTKDgJukSZ6amVRtWMPEjE6sQoK8= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= @@ -480,6 +639,7 @@ github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71 github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -501,13 +661,26 @@ github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= +github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= +github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ= +github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= +github.com/golangci/golangci-lint v1.47.0/go.mod h1:3TZhfF5KolbIkXYjUFvER6G9CoxzLEaafr/u/QI1S5A= +github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= +github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= +github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/revgrep v0.0.0-20210930125155-c22e5001d4f2/go.mod h1:LK+zW4MpyytAWQRz0M4xnzEk50lSvqDQKfx304apFkY= +github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= +github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -542,6 +715,7 @@ github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= @@ -553,7 +727,11 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= +github.com/google/trillian v1.3.11/go.mod h1:0tPraVHrSDkA3BO6vKX67zgLXs6SsOAbHEivX+9mPgw= +github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -575,7 +753,11 @@ github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1Yu github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/gookit/color v1.5.1/go.mod h1:wZFzea4X8qN6vHOSP2apMb4/+w/orMznEzYsIHPaqKM= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= +github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= +github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= @@ -587,12 +769,27 @@ github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= +github.com/gostaticanalysis/analysisutil v0.4.1/go.mod h1:18U/DLpRgIUd459wGxVHE0fRgmo1UgHDcbw7F5idXu0= +github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= +github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= +github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= +github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= +github.com/gostaticanalysis/forcetypeassert v0.1.0/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= +github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= +github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= +github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Repi5x3CuviD3dgAZaBU= +github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= +github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= @@ -603,7 +800,11 @@ github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/b github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= +github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= +github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= +github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= @@ -611,13 +812,20 @@ github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9n github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-getter v1.7.0 h1:bzrYP+qu/gMrL1au7/aDvkoOVGUJpeKBgbqRHACAFDY= github.com/hashicorp/go-getter v1.7.0/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= +github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= @@ -626,31 +834,49 @@ github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= +github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= +github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= +github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= +github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c= github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= +github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= +github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= github.com/iancoleman/orderedmap v0.2.0 h1:sq1N/TFpYH++aViPcaKjys3bDClUEU7s5B+z6jq8pNA= github.com/iancoleman/orderedmap v0.2.0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA= +github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= @@ -658,7 +884,17 @@ github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLf github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a/go.mod h1:Zi/ZFkEqFHTm7qkjyNJjaWH4LQA9LQhGJyF0lTYGpxw= +github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= +github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f/go.mod h1:qr2b5kx4HbFS7/g4uYO5qv9ei8303JMsC7ESbYiqr2Q= +github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSnpuG7toUTG4= +github.com/jhump/protoreflect v1.11.1-0.20220213155251-0c2aedc66cf4/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b h1:izTof8BKh/nE1wrKOrloNA5q4odOarjf+Xpe+4qow98= +github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= +github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -666,74 +902,142 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGw github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= +github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jonboulle/clockwork v0.2.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= +github.com/josharian/txtarfs v0.0.0-20210218200122-0702f000015a/go.mod h1:izVPOvVRsHiKkeGCT6tYBNWyDVuzj9wAaBb5R9qamfw= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/errcheck v1.6.1/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kulti/thelper v0.6.3/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= +github.com/kunwardeep/paralleltest v1.0.6/go.mod h1:Y0Y0XISdZM5IKm3TREQMZ6iteqn1YuwCsJO/0kL9Zes= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= +github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= +github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= +github.com/letsencrypt/pkcs11key/v4 v4.0.0/go.mod h1:EFUvBDay26dErnNb70Nd0/VW3tJiIbETBPTl9ATXQag= +github.com/lib/pq v0.0.0-20180327071824-d34b9ff171c2/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= +github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= +github.com/maratori/testpackage v1.1.0/go.mod h1:PeAhzU8qkCwdGEMTEupsHJNlQu2gZopMC6RjbhmHeDc= +github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= +github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= +github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= +github.com/mgechev/revive v1.2.1/go.mod h1:+Ro3wqY4vakcYNtkBWdZC7dBg1xSB6sp054wWwmeFm0= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= +github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= +github.com/miekg/pkcs11 v1.0.2/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= +github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 h1:QRUSJEgZn2Snx0EmT/QLXibWjSUDjKWvXIT19NBVp94= github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= +github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= @@ -741,8 +1045,16 @@ github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS4 github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= +github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= +github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -750,84 +1062,152 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= +github.com/mozilla/scribe v0.0.0-20180711195314-fb71baf557c1/go.mod h1:FIczTrinKo8VaLxe6PWTPEXRXDIHz2QAwiaBaP5/4a8= +github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= +github.com/mroth/weightedrand v0.4.1/go.mod h1:3p2SIcC8al1YMzGhAIoXD+r9olo/g/cdJgAD905gyNE= +github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-proto-validators v0.0.0-20180403085117-0950a7990007/go.mod h1:m2XC9Qq0AlmmVksL6FktJCdTYyLk7V3fKyp0sl1yWQo= +github.com/mwitkow/go-proto-validators v0.2.0/go.mod h1:ZfA1hW+UH/2ZHOWvQ3HnQaU0DtnpXu850MZiy+YUgcc= github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= +github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= +github.com/nats-io/jwt v1.2.2/go.mod h1:/xX356yQA6LuXI9xWW7mZNpxgF2mBmGecH+Fj34sP5Q= +github.com/nats-io/jwt/v2 v2.0.3/go.mod h1:VRP+deawSXyhNjXmxPCHskrR6Mq50BqpEI5SEcNiGlY= github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= +github.com/nats-io/nats-server/v2 v2.5.0/go.mod h1:Kj86UtrXAL6LwYRA6H4RqzkHhK0Vcv2ZnKD5WbQ1t3g= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nats.go v1.12.1/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= +github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nishanths/exhaustive v0.8.1/go.mod h1:qj+zJJUgJ76tR92+25+03oYUhzF4R7/2Wk7fGTfCHmg= +github.com/nishanths/predeclared v0.0.0-20190419143655-18a43bb90ffc/go.mod h1:62PewwiQTlm/7Rj+cxVYqZvDIUc+JjZq6GHAC1fsObQ= +github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= github.com/notional-labs/packet-forward-middleware/v7 v7.0.1 h1:HG5uY0G3BNprePzG047N7V1TFLxVyq89VSKnyRghTcM= github.com/notional-labs/packet-forward-middleware/v7 v7.0.1/go.mod h1:ixg45X2kEtfjrSgZOQMuahY9VmXa1S3ZtO2amHA1ilU= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/oasisprotocol/curve25519-voi v0.0.0-20210609091139-0a56a4bca00b h1:MKwruh+HeCSKWphkxuzvRzU4QzDkg7yiPkDVV0cDFgI= +github.com/oasisprotocol/curve25519-voi v0.0.0-20210609091139-0a56a4bca00b/go.mod h1:TLJifjWF6eotcfzDjKZsDqWJ+73Uvj/N85MvVyrvynM= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/oklog/ulid/v2 v2.0.2/go.mod h1:mtBL0Qe/0HAx6/a4Z30qxVIAL1eQDweXq5lxOEiwQ68= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/ginkgo/v2 v2.1.4/go.mod h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU= +github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= +github.com/opencontainers/runc v1.1.2/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= +github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= +github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= +github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= +github.com/ory/dockertest/v3 v3.9.1/go.mod h1:42Ir9hmvaAPm0Mgibk6mBPi7SFvTXxEcnztDYOJ//uM= +github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= +github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= +github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= +github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= +github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= +github.com/pelletier/go-toml/v2 v2.0.2/go.mod h1:MovirKjgVRESsAvNZlAjtFwV867yGuwRkXbG66OzopI= github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d h1:htwtWgtQo8YS6JFWWi2DNgY0RwSGJ1ruMoxY6CUUclk= github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= +github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/polyfloyd/go-errorlint v1.0.0/go.mod h1:KZy4xxPJyy88/gldCe5OdW6OQRtNO3EZE7hXzmnebgA= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -844,6 +1224,9 @@ github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt2 github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.40.0 h1:Afz7EVRqGg2Mqqf4JuF9vdvp1pi220m55Pi9T2JnO4Q= github.com/prometheus/common v0.40.0/go.mod h1:L65ZJPSmfn/UBWLQIHV7dBrKFidB/wPlF1y5TlSt9OE= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -852,50 +1235,104 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= +github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= +github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= +github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= +github.com/quasilyte/go-ruleguard v0.3.16-0.20220213074421-6aa060fab41a/go.mod h1:VMX+OnnSw4LicdiEGtRSD/1X8kW7GuEscjYNr4cOIT4= +github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/dsl v0.3.16/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/dsl v0.3.21/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= +github.com/quasilyte/gogrep v0.0.0-20220120141003-628d8b3623b5/go.mod h1:wSEyW6O61xRV6zb6My3HxrQ5/8ke7NE2OayqCHa3xRM= +github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= +github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= +github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= +github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= +github.com/remyoudompheng/go-dbus v0.0.0-20121104212943-b7232d34b1d5/go.mod h1:+u151txRmLpwxBmpYn9z3d1sdJdjRPQpsXuYeY9jNls= +github.com/remyoudompheng/go-liblzma v0.0.0-20190506200333-81bf2d431b96/go.mod h1:90HvCY7+oHHUKkbeMCiHt1WuFR2/hPJ9QrljDG+v6ls= +github.com/remyoudompheng/go-misc v0.0.0-20190427085024-2d6ac652a50e/go.mod h1:80FQABjoFzZ2M5uEa6FUaJYEmqU2UOKojlFVak1UAwI= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/zerolog v1.27.0 h1:1T7qCieN22GVc8S4Q2yuexzBb1EqjbgjSH9RohbMjKs= +github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryancurrah/gomodguard v1.2.3/go.mod h1:rYbA/4Tg5c54mV1sv4sQTP5WOPBcoLtnBZ7/TEhXAbg= +github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= +github.com/sagikazarmark/crypt v0.6.0/go.mod h1:U8+INwJo3nBv1m6A/8OBXAq7Jnpspk5AxSgDyEQcea8= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= +github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= +github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= +github.com/securego/gosec/v2 v2.12.0/go.mod h1:iTpT+eKTw59bSgklBHlSnH5O2tNygHMDxfvMubA4i7I= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= +github.com/shirou/gopsutil/v3 v3.22.6/go.mod h1:EdIubSnZhbAvBS1yJ7Xi+AShB/hxwLHOMz4MCYz7yMs= +github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= +github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sivchari/containedctx v1.0.2/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= +github.com/sivchari/nosnakecase v1.5.0/go.mod h1:CwDzrzPea40/GB6uynrNLiorAlgFRvRbFSgJx2Gs+QY= +github.com/sivchari/tenv v1.6.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= +github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk= github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v1.3.0/go.mod h1:BrRVncBjOJa/eUcVVm9CE+oC6as8k+VYr4NY7WCi9V4= +github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= +github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= @@ -906,16 +1343,24 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM= +github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU= github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= +github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= +github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= +github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -924,21 +1369,46 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= +github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs= +github.com/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7vWWGaGo= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= +github.com/sylvia7788/contextcheck v1.0.4/go.mod h1:vuPKJMQ7MQ91ZTqfdyreNKwZjyUg6KO+IebVyQDedZQ= +github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= +github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= +github.com/tendermint/tendermint v0.35.9 h1:yUEgfkcNHWSidsU8wHjRDbYPVijV4cHxCclKVITGRAQ= +github.com/tendermint/tendermint v0.35.9/go.mod h1:FYvzUDkmVv1awfFl9V85yl5NKyjxz6XLZGX132+ftAY= +github.com/tendermint/tm-db v0.6.6/go.mod h1:wP8d49A85B7/erz/r4YbKssKw6ylsO/hKtFk7E1aWZI= +github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= +github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= +github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= +github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= +github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= +github.com/tj/assert v0.0.3/go.mod h1:Ne6X72Q+TB1AteidzQncjw9PabbMp4PBMZ1k+vd1Pvk= +github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= +github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tomarrell/wrapcheck/v2 v2.6.2/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= +github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= +github.com/tommy-muehle/go-mnd/v2 v2.5.0/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= +github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= @@ -948,24 +1418,64 @@ github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLY github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= +github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/uudashr/gocognit v1.0.6/go.mod h1:nAIUuVBnYU7pcninia3BHOvQkpQCeO76Uscky5BOwcY= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus= +github.com/valyala/quicktemplate v1.7.0/go.mod h1:sqKJnoaOF88V07vkO+9FL8fb9uZg/VPSJnLYn+LmLk8= +github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= +github.com/vektra/mockery/v2 v2.14.0/go.mod h1:bnD1T8tExSgPD1ripLkDbr60JA9VtQeu12P3wgLZd7M= +github.com/viki-org/dnscache v0.0.0-20130720023526-c70c1f23c5d8/go.mod h1:dniwbG03GafCjFohMDmz6Zc6oCuiqgH6tGNyXTkHzXE= +github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= +github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= +github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA= +github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= +github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= +github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo= github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= github.com/zondax/ledger-go v0.14.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c= github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= +gitlab.com/bosi/decorder v0.2.2/go.mod h1:9K1RB5+VPNQYtXtTDAzd2OEftsZb1oV0IrJrzChSdGE= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= +go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.etcd.io/etcd v0.0.0-20200513171258-e048e166ab9c/go.mod h1:xCI7ZzBfRuGgBXyXO6yfWfDmlWd35khcWpUa4L0xI/k= +go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= +go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= +go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= +go.etcd.io/etcd/client/v2 v2.305.4/go.mod h1:Ud+VUwIi9/uQHOMA+4ekToJ12lTxlv0zB/+DHwTGEbU= +go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= +go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY= +go.mozilla.org/mozlog v0.0.0-20170222151521-4bb13139d403/go.mod h1:jHoPAGnDrCy6kaI2tAze5Prf0Nr0w/oNkROt2lw3n3o= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -981,11 +1491,24 @@ go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqe go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= +go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= +go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= +golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -993,16 +1516,33 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= +golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210915214749-c084706c2272/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= @@ -1015,6 +1555,8 @@ golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMk golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 h1:LGJsf5LRplCck6jUCH3dBL2dmycNruWNF5xugkSlfXw= golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp/typeparams v0.0.0-20220218215828-6cf2b201936e/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1040,8 +1582,12 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= +golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1062,6 +1608,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1077,6 +1625,7 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= @@ -1087,14 +1636,24 @@ golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= @@ -1119,6 +1678,7 @@ golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= @@ -1135,6 +1695,7 @@ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1142,6 +1703,7 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1156,20 +1718,27 @@ golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1178,6 +1747,7 @@ golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1188,45 +1758,70 @@ golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211213223007-03aa0b5f6827/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220405210540-1e041c57c461/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1234,6 +1829,7 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1242,8 +1838,10 @@ golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= @@ -1263,36 +1861,51 @@ golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190228203856-589c23e65e65/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1302,29 +1915,58 @@ golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200630154851-b2d8b0336632/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200706234117-b22de6825cf7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201028025901-8cd080b735b3/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= +golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= +golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.9-0.20211228192929-ee1ca4ffc4da/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= +golang.org/x/tools v0.1.11-0.20220513221640-090b14e8501f/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= +golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1336,11 +1978,16 @@ golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNq golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= @@ -1366,7 +2013,9 @@ google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6 google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw= google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= @@ -1376,6 +2025,7 @@ google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69 google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.81.0/go.mod h1:FA6Mb/bZxj706H2j+j2d6mHEEaHBmbbWnkfvmorOCko= google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= @@ -1392,12 +2042,15 @@ google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181107211654-5fc9ac540362/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1406,6 +2059,7 @@ google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dT google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= @@ -1418,6 +2072,7 @@ google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200324203455-a04cca1dde73/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= @@ -1426,6 +2081,8 @@ google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200707001353-8e8330bf89df/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -1458,8 +2115,13 @@ google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEc google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= @@ -1479,6 +2141,7 @@ google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= @@ -1506,6 +2169,7 @@ google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 h1:EfLuoKW5WfkgVdDy7dTK8qSbH37AX5mj/MFh+bGPz14= google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= +google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1515,11 +2179,13 @@ google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ij google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.0/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= @@ -1538,6 +2204,7 @@ google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= @@ -1547,8 +2214,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= -google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/grpc v1.54.0 h1:EhTqbhiYeixwWQtAEZAxmV9MGqcjEU2mFx52xCzNyag= +google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1562,22 +2229,28 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.29.1 h1:7QBf+IK2gx70Ap/hDsOmam3GE0v9HicjfEdAxE62UoM= -google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= @@ -1590,15 +2263,21 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.6/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= +gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= +gotest.tools/v3 v3.2.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1608,14 +2287,22 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.3.2/go.mod h1:jzwdWgg7Jdq75wlfblQxO4neNaFFSvgc1tD5Wv8U0Yw= +mvdan.cc/gofumpt v0.3.1/go.mod h1:w3ymliuxvzVx8DAutBnVyDqYb1Niy/yCJt/lk821YCE= +mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= +mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= +mvdan.cc/unparam v0.0.0-20211214103731-d0ef000c54e5/go.mod h1:b8RRCBm0eeiWR8cfN88xeq2G5SG3VKGO+5UPWi5FSOY= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +pgregory.net/rapid v0.4.8/go.mod h1:Z5PbWqjvWR1I3UGjvboUuan4fe4ZYEYNLNQLExzCoUs= pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/scripts/protocgen.sh b/scripts/protocgen.sh index 394df4f0..bd55e5ee 100644 --- a/scripts/protocgen.sh +++ b/scripts/protocgen.sh @@ -3,11 +3,6 @@ set -eo pipefail # get protoc executions -go get github.com/regen-network/cosmos-proto/protoc-gen-gocosmos 2>/dev/null - -# get cosmos sdk from github -# go get github.com/cosmos/cosmos-sdk 2>/dev/null - echo "Generating gogo proto code" cd proto proto_dirs=$(find ./feeabstraction/absfee/v1beta1/ -path -prune -o -name '*.proto' -print0 | xargs -0 -n1 dirname | sort | uniq) @@ -24,7 +19,7 @@ cd .. # move proto files to the right places # # Note: Proto files are suffixed with the current binary version. -cp -r github.com/notional-labs/fee-abstraction/v2/x/feeabs/types/* ./x/feeabs/types/ +cp -r github.com/notional-labs/fee-abstraction/v3/x/feeabs/types/* ./x/feeabs/types/ rm -rf github.com go mod tidy -compat=1.18 diff --git a/third_party/tendermint/abci/types.proto b/third_party/tendermint/abci/types.proto new file mode 100644 index 00000000..8efe8ce5 --- /dev/null +++ b/third_party/tendermint/abci/types.proto @@ -0,0 +1,486 @@ +syntax = "proto3"; +package tendermint.abci; + +option go_package = "github.com/cometbft/cometbft/abci/types"; + +// For more information on gogo.proto, see: +// https://github.com/cosmos/gogoproto/blob/master/extensions.md +import "tendermint/crypto/proof.proto"; +import "tendermint/crypto/keys.proto"; +import "tendermint/types/params.proto"; +import "tendermint/types/validator.proto"; +import "google/protobuf/timestamp.proto"; +import "gogoproto/gogo.proto"; + +// NOTE: When using custom types, mind the warnings. +// https://github.com/cosmos/gogoproto/blob/master/custom_types.md#warnings-and-issues + +service ABCI { + rpc Echo(RequestEcho) returns (ResponseEcho); + rpc Flush(RequestFlush) returns (ResponseFlush); + rpc Info(RequestInfo) returns (ResponseInfo); + rpc CheckTx(RequestCheckTx) returns (ResponseCheckTx); + rpc Query(RequestQuery) returns (ResponseQuery); + rpc Commit(RequestCommit) returns (ResponseCommit); + rpc InitChain(RequestInitChain) returns (ResponseInitChain); + rpc ListSnapshots(RequestListSnapshots) returns (ResponseListSnapshots); + rpc OfferSnapshot(RequestOfferSnapshot) returns (ResponseOfferSnapshot); + rpc LoadSnapshotChunk(RequestLoadSnapshotChunk) + returns (ResponseLoadSnapshotChunk); + rpc ApplySnapshotChunk(RequestApplySnapshotChunk) + returns (ResponseApplySnapshotChunk); + rpc PrepareProposal(RequestPrepareProposal) returns (ResponsePrepareProposal); + rpc ProcessProposal(RequestProcessProposal) returns (ResponseProcessProposal); + rpc ExtendVote(RequestExtendVote) returns (ResponseExtendVote); + rpc VerifyVoteExtension(RequestVerifyVoteExtension) returns (ResponseVerifyVoteExtension); + rpc FinalizeBlock(RequestFinalizeBlock) returns (ResponseFinalizeBlock); +} + +//---------------------------------------- +// Request types + +message Request { + oneof value { + RequestEcho echo = 1; + RequestFlush flush = 2; + RequestInfo info = 3; + RequestInitChain init_chain = 5; + RequestQuery query = 6; + RequestCheckTx check_tx = 8; + RequestCommit commit = 11; + RequestListSnapshots list_snapshots = 12; + RequestOfferSnapshot offer_snapshot = 13; + RequestLoadSnapshotChunk load_snapshot_chunk = 14; + RequestApplySnapshotChunk apply_snapshot_chunk = 15; + RequestPrepareProposal prepare_proposal = 16; + RequestProcessProposal process_proposal = 17; + RequestExtendVote extend_vote = 18; + RequestVerifyVoteExtension verify_vote_extension = 19; + RequestFinalizeBlock finalize_block = 20; + } + reserved 4, 7, 9, 10; // SetOption, BeginBlock, DeliverTx, EndBlock +} + +message RequestEcho { + string message = 1; +} + +message RequestFlush {} + +message RequestInfo { + string version = 1; + uint64 block_version = 2; + uint64 p2p_version = 3; + string abci_version = 4; +} + +message RequestInitChain { + google.protobuf.Timestamp time = 1 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + string chain_id = 2; + tendermint.types.ConsensusParams consensus_params = 3; + repeated ValidatorUpdate validators = 4 [(gogoproto.nullable) = false]; + bytes app_state_bytes = 5; + int64 initial_height = 6; +} + +message RequestQuery { + bytes data = 1; + string path = 2; + int64 height = 3; + bool prove = 4; +} + +enum CheckTxType { + NEW = 0 [(gogoproto.enumvalue_customname) = "New"]; + RECHECK = 1 [(gogoproto.enumvalue_customname) = "Recheck"]; +} + +message RequestCheckTx { + bytes tx = 1; + CheckTxType type = 2; +} + +message RequestCommit {} + +// lists available snapshots +message RequestListSnapshots {} + +// offers a snapshot to the application +message RequestOfferSnapshot { + Snapshot snapshot = 1; // snapshot offered by peers + bytes app_hash = 2; // light client-verified app hash for snapshot height +} + +// loads a snapshot chunk +message RequestLoadSnapshotChunk { + uint64 height = 1; + uint32 format = 2; + uint32 chunk = 3; +} + +// Applies a snapshot chunk +message RequestApplySnapshotChunk { + uint32 index = 1; + bytes chunk = 2; + string sender = 3; +} + +message RequestPrepareProposal { + // the modified transactions cannot exceed this size. + int64 max_tx_bytes = 1; + // txs is an array of transactions that will be included in a block, + // sent to the app for possible modifications. + repeated bytes txs = 2; + ExtendedCommitInfo local_last_commit = 3 [(gogoproto.nullable) = false]; + repeated Misbehavior misbehavior = 4 [(gogoproto.nullable) = false]; + int64 height = 5; + google.protobuf.Timestamp time = 6 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + bytes next_validators_hash = 7; + // address of the public key of the validator proposing the block. + bytes proposer_address = 8; +} + +message RequestProcessProposal { + repeated bytes txs = 1; + CommitInfo proposed_last_commit = 2 [(gogoproto.nullable) = false]; + repeated Misbehavior misbehavior = 3 [(gogoproto.nullable) = false]; + // hash is the merkle root hash of the fields of the proposed block. + bytes hash = 4; + int64 height = 5; + google.protobuf.Timestamp time = 6 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + bytes next_validators_hash = 7; + // address of the public key of the original proposer of the block. + bytes proposer_address = 8; +} + +// Extends a vote with application-injected data +message RequestExtendVote { + // the hash of the block that this vote may be referring to + bytes hash = 1; + // the height of the extended vote + int64 height = 2; +} + +// Verify the vote extension +message RequestVerifyVoteExtension { + // the hash of the block that this received vote corresponds to + bytes hash = 1; + // the validator that signed the vote extension + bytes validator_address = 2; + int64 height = 3; + bytes vote_extension = 4; +} + +message RequestFinalizeBlock { + repeated bytes txs = 1; + CommitInfo decided_last_commit = 2 [(gogoproto.nullable) = false]; + repeated Misbehavior misbehavior = 3 [(gogoproto.nullable) = false]; + // hash is the merkle root hash of the fields of the decided block. + bytes hash = 4; + int64 height = 5; + google.protobuf.Timestamp time = 6 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + bytes next_validators_hash = 7; + // proposer_address is the address of the public key of the original proposer of the block. + bytes proposer_address = 8; +} + +//---------------------------------------- +// Response types + +message Response { + oneof value { + ResponseException exception = 1; + ResponseEcho echo = 2; + ResponseFlush flush = 3; + ResponseInfo info = 4; + ResponseInitChain init_chain = 6; + ResponseQuery query = 7; + ResponseCheckTx check_tx = 9; + ResponseCommit commit = 12; + ResponseListSnapshots list_snapshots = 13; + ResponseOfferSnapshot offer_snapshot = 14; + ResponseLoadSnapshotChunk load_snapshot_chunk = 15; + ResponseApplySnapshotChunk apply_snapshot_chunk = 16; + ResponsePrepareProposal prepare_proposal = 17; + ResponseProcessProposal process_proposal = 18; + ResponseExtendVote extend_vote = 19; + ResponseVerifyVoteExtension verify_vote_extension = 20; + ResponseFinalizeBlock finalize_block = 21; + } + reserved 5, 8, 10, 11; // SetOption, BeginBlock, DeliverTx, EndBlock +} + +// nondeterministic +message ResponseException { + string error = 1; +} + +message ResponseEcho { + string message = 1; +} + +message ResponseFlush {} + +message ResponseInfo { + string data = 1; + + string version = 2; + uint64 app_version = 3; + + int64 last_block_height = 4; + bytes last_block_app_hash = 5; +} + +message ResponseInitChain { + tendermint.types.ConsensusParams consensus_params = 1; + repeated ValidatorUpdate validators = 2 [(gogoproto.nullable) = false]; + bytes app_hash = 3; +} + +message ResponseQuery { + uint32 code = 1; + // bytes data = 2; // use "value" instead. + string log = 3; // nondeterministic + string info = 4; // nondeterministic + int64 index = 5; + bytes key = 6; + bytes value = 7; + tendermint.crypto.ProofOps proof_ops = 8; + int64 height = 9; + string codespace = 10; +} + +message ResponseCheckTx { + uint32 code = 1; + bytes data = 2; + string log = 3; // nondeterministic + string info = 4; // nondeterministic + int64 gas_wanted = 5 [json_name = "gas_wanted"]; + int64 gas_used = 6 [json_name = "gas_used"]; + repeated Event events = 7 + [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; + string codespace = 8; + + // These reserved fields were used until v0.37 by the priority mempool (now + // removed). + reserved 9 to 11; + reserved "sender", "priority", "mempool_error"; +} + +message ResponseCommit { + reserved 1, 2; // data was previously returned here + int64 retain_height = 3; +} + +message ResponseListSnapshots { + repeated Snapshot snapshots = 1; +} + +message ResponseOfferSnapshot { + Result result = 1; + + enum Result { + UNKNOWN = 0; // Unknown result, abort all snapshot restoration + ACCEPT = 1; // Snapshot accepted, apply chunks + ABORT = 2; // Abort all snapshot restoration + REJECT = 3; // Reject this specific snapshot, try others + REJECT_FORMAT = 4; // Reject all snapshots of this format, try others + REJECT_SENDER = 5; // Reject all snapshots from the sender(s), try others + } +} + +message ResponseLoadSnapshotChunk { + bytes chunk = 1; +} + +message ResponseApplySnapshotChunk { + Result result = 1; + repeated uint32 refetch_chunks = 2; // Chunks to refetch and reapply + repeated string reject_senders = 3; // Chunk senders to reject and ban + + enum Result { + UNKNOWN = 0; // Unknown result, abort all snapshot restoration + ACCEPT = 1; // Chunk successfully accepted + ABORT = 2; // Abort all snapshot restoration + RETRY = 3; // Retry chunk (combine with refetch and reject) + RETRY_SNAPSHOT = 4; // Retry snapshot (combine with refetch and reject) + REJECT_SNAPSHOT = 5; // Reject this snapshot, try others + } +} + +message ResponsePrepareProposal { + repeated bytes txs = 1; +} + +message ResponseProcessProposal { + ProposalStatus status = 1; + + enum ProposalStatus { + UNKNOWN = 0; + ACCEPT = 1; + REJECT = 2; + } +} + +message ResponseExtendVote { + bytes vote_extension = 1; +} + +message ResponseVerifyVoteExtension { + VerifyStatus status = 1; + + enum VerifyStatus { + UNKNOWN = 0; + ACCEPT = 1; + // Rejecting the vote extension will reject the entire precommit by the sender. + // Incorrectly implementing this thus has liveness implications as it may affect + // CometBFT's ability to receive 2/3+ valid votes to finalize the block. + // Honest nodes should never be rejected. + REJECT = 2; + } +} + +message ResponseFinalizeBlock { + // set of block events emmitted as part of executing the block + repeated Event events = 1 + [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; + // the result of executing each transaction including the events + // the particular transction emitted. This should match the order + // of the transactions delivered in the block itself + repeated ExecTxResult tx_results = 2; + // a list of updates to the validator set. These will reflect the validator set at current height + 2. + repeated ValidatorUpdate validator_updates = 3 [(gogoproto.nullable) = false]; + // updates to the consensus params, if any. + tendermint.types.ConsensusParams consensus_param_updates = 4; + // app_hash is the hash of the applications' state which is used to confirm that execution of the transactions was deterministic. It is up to the application to decide which algorithm to use. + bytes app_hash = 5; +} + +//---------------------------------------- +// Misc. + +message CommitInfo { + int32 round = 1; + repeated VoteInfo votes = 2 [(gogoproto.nullable) = false]; +} + +// ExtendedCommitInfo is similar to CommitInfo except that it is only used in +// the PrepareProposal request such that CometBFT can provide vote extensions +// to the application. +message ExtendedCommitInfo { + // The round at which the block proposer decided in the previous height. + int32 round = 1; + // List of validators' addresses in the last validator set with their voting + // information, including vote extensions. + repeated ExtendedVoteInfo votes = 2 [(gogoproto.nullable) = false]; +} + +// Event allows application developers to attach additional information to +// ResponseFinalizeBlock and ResponseCheckTx. +// Later, transactions may be queried using these events. +message Event { + string type = 1; + repeated EventAttribute attributes = 2 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "attributes,omitempty" + ]; +} + +// EventAttribute is a single key-value pair, associated with an event. +message EventAttribute { + string key = 1; + string value = 2; + bool index = 3; // nondeterministic +} + +// ExecTxResult contains results of executing one individual transaction. +// +// * Its structure is equivalent to #ResponseDeliverTx which will be deprecated/deleted +message ExecTxResult { + uint32 code = 1; + bytes data = 2; + string log = 3; // nondeterministic + string info = 4; // nondeterministic + int64 gas_wanted = 5; + int64 gas_used = 6; + repeated Event events = 7 + [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; // nondeterministic + string codespace = 8; +} + +// TxResult contains results of executing the transaction. +// +// One usage is indexing transaction results. +message TxResult { + int64 height = 1; + uint32 index = 2; + bytes tx = 3; + ExecTxResult result = 4 [(gogoproto.nullable) = false]; +} + +//---------------------------------------- +// Blockchain Types + +message Validator { + bytes address = 1; // The first 20 bytes of SHA256(public key) + // PubKey pub_key = 2 [(gogoproto.nullable)=false]; + int64 power = 3; // The voting power +} + +message ValidatorUpdate { + tendermint.crypto.PublicKey pub_key = 1 [(gogoproto.nullable) = false]; + int64 power = 2; +} + +message VoteInfo { + Validator validator = 1 [(gogoproto.nullable) = false]; + tendermint.types.BlockIDFlag block_id_flag = 3; + + reserved 2; // signed_last_block +} + +message ExtendedVoteInfo { + // The validator that sent the vote. + Validator validator = 1 [(gogoproto.nullable) = false]; + // Non-deterministic extension provided by the sending validator's application. + bytes vote_extension = 3; + // Vote extension signature created by CometBFT + bytes extension_signature = 4; + // block_id_flag indicates whether the validator voted for a block, nil, or did not vote at all + tendermint.types.BlockIDFlag block_id_flag = 5; + + reserved 2; // signed_last_block +} + +enum MisbehaviorType { + UNKNOWN = 0; + DUPLICATE_VOTE = 1; + LIGHT_CLIENT_ATTACK = 2; +} + +message Misbehavior { + MisbehaviorType type = 1; + // The offending validator + Validator validator = 2 [(gogoproto.nullable) = false]; + // The height when the offense occurred + int64 height = 3; + // The corresponding time where the offense occurred + google.protobuf.Timestamp time = 4 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + // Total voting power of the validator set in case the ABCI application does + // not store historical validators. + // https://github.com/tendermint/tendermint/issues/4581 + int64 total_voting_power = 5; +} + +//---------------------------------------- +// State Sync Types + +message Snapshot { + uint64 height = 1; // The height at which the snapshot was taken + uint32 format = 2; // The application-specific snapshot format + uint32 chunks = 3; // Number of chunks in the snapshot + bytes hash = 4; // Arbitrary snapshot hash, equal only if identical + bytes metadata = 5; // Arbitrary application metadata +} \ No newline at end of file diff --git a/third_party/tendermint/crypto/keys.proto b/third_party/tendermint/crypto/keys.proto new file mode 100644 index 00000000..9a5b95cf --- /dev/null +++ b/third_party/tendermint/crypto/keys.proto @@ -0,0 +1,17 @@ +syntax = "proto3"; +package tendermint.crypto; + +option go_package = "github.com/cometbft/cometbft/proto/tendermint/crypto"; + +import "gogoproto/gogo.proto"; + +// PublicKey defines the keys available for use with Validators +message PublicKey { + option (gogoproto.compare) = true; + option (gogoproto.equal) = true; + + oneof sum { + bytes ed25519 = 1; + bytes secp256k1 = 2; + } +} \ No newline at end of file diff --git a/third_party/tendermint/crypto/proof.proto b/third_party/tendermint/crypto/proof.proto new file mode 100644 index 00000000..68dc758b --- /dev/null +++ b/third_party/tendermint/crypto/proof.proto @@ -0,0 +1,41 @@ +syntax = "proto3"; +package tendermint.crypto; + +option go_package = "github.com/cometbft/cometbft/proto/tendermint/crypto"; + +import "gogoproto/gogo.proto"; + +message Proof { + int64 total = 1; + int64 index = 2; + bytes leaf_hash = 3; + repeated bytes aunts = 4; +} + +message ValueOp { + // Encoded in ProofOp.Key. + bytes key = 1; + + // To encode in ProofOp.Data + Proof proof = 2; +} + +message DominoOp { + string key = 1; + string input = 2; + string output = 3; +} + +// ProofOp defines an operation used for calculating Merkle root +// The data could be arbitrary format, providing nessecary data +// for example neighbouring node hash +message ProofOp { + string type = 1; + bytes key = 2; + bytes data = 3; +} + +// ProofOps is Merkle proof defined by the list of ProofOps +message ProofOps { + repeated ProofOp ops = 1 [(gogoproto.nullable) = false]; +} \ No newline at end of file diff --git a/third_party/tendermint/types/params.proto b/third_party/tendermint/types/params.proto new file mode 100644 index 00000000..882ff7fd --- /dev/null +++ b/third_party/tendermint/types/params.proto @@ -0,0 +1,92 @@ +syntax = "proto3"; +package tendermint.types; + +option go_package = "github.com/cometbft/cometbft/proto/tendermint/types"; + +import "gogoproto/gogo.proto"; +import "google/protobuf/duration.proto"; + +option (gogoproto.equal_all) = true; + +// ConsensusParams contains consensus critical parameters that determine the +// validity of blocks. +message ConsensusParams { + BlockParams block = 1; + EvidenceParams evidence = 2; + ValidatorParams validator = 3; + VersionParams version = 4; + ABCIParams abci = 5; +} + +// BlockParams contains limits on the block size. +message BlockParams { + // Max block size, in bytes. + // Note: must be greater than 0 + int64 max_bytes = 1; + // Max gas per block. + // Note: must be greater or equal to -1 + int64 max_gas = 2; + + reserved 3; // was TimeIotaMs see https://github.com/tendermint/tendermint/pull/5792 +} + +// EvidenceParams determine how we handle evidence of malfeasance. +message EvidenceParams { + // Max age of evidence, in blocks. + // + // The basic formula for calculating this is: MaxAgeDuration / {average block + // time}. + int64 max_age_num_blocks = 1; + + // Max age of evidence, in time. + // + // It should correspond with an app's "unbonding period" or other similar + // mechanism for handling [Nothing-At-Stake + // attacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed). + google.protobuf.Duration max_age_duration = 2 + [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; + + // This sets the maximum size of total evidence in bytes that can be committed in a single block. + // and should fall comfortably under the max block bytes. + // Default is 1048576 or 1MB + int64 max_bytes = 3; +} + +// ValidatorParams restrict the public key types validators can use. +// NOTE: uses ABCI pubkey naming, not Amino names. +message ValidatorParams { + option (gogoproto.populate) = true; + option (gogoproto.equal) = true; + + repeated string pub_key_types = 1; +} + +// VersionParams contains the ABCI application version. +message VersionParams { + option (gogoproto.populate) = true; + option (gogoproto.equal) = true; + + uint64 app = 1; +} + +// HashedParams is a subset of ConsensusParams. +// +// It is hashed into the Header.ConsensusHash. +message HashedParams { + int64 block_max_bytes = 1; + int64 block_max_gas = 2; +} + +// ABCIParams configure functionality specific to the Application Blockchain Interface. +message ABCIParams { + // vote_extensions_enable_height configures the first height during which + // vote extensions will be enabled. During this specified height, and for all + // subsequent heights, precommit messages that do not contain valid extension data + // will be considered invalid. Prior to this height, vote extensions will not + // be used or accepted by validators on the network. + // + // Once enabled, vote extensions will be created by the application in ExtendVote, + // passed to the application for validation in VerifyVoteExtension and given + // to the application to use when proposing a block during PrepareProposal. + int64 vote_extensions_enable_height = 1; +} \ No newline at end of file diff --git a/third_party/tendermint/types/validator.proto b/third_party/tendermint/types/validator.proto new file mode 100644 index 00000000..9a6efbcb --- /dev/null +++ b/third_party/tendermint/types/validator.proto @@ -0,0 +1,37 @@ +syntax = "proto3"; +package tendermint.types; + +option go_package = "github.com/cometbft/cometbft/proto/tendermint/types"; + +import "gogoproto/gogo.proto"; +import "tendermint/crypto/keys.proto"; + +// BlockIdFlag indicates which BlockID the signature is for +enum BlockIDFlag { + option (gogoproto.goproto_enum_stringer) = true; + option (gogoproto.goproto_enum_prefix) = false; + + BLOCK_ID_FLAG_UNKNOWN = 0 [(gogoproto.enumvalue_customname) = "BlockIDFlagUnknown"]; // indicates an error condition + BLOCK_ID_FLAG_ABSENT = 1 [(gogoproto.enumvalue_customname) = "BlockIDFlagAbsent"]; // the vote was not received + BLOCK_ID_FLAG_COMMIT = 2 [(gogoproto.enumvalue_customname) = "BlockIDFlagCommit"]; // voted for the block that received the majority + BLOCK_ID_FLAG_NIL = 3 [(gogoproto.enumvalue_customname) = "BlockIDFlagNil"]; // voted for nil +} + + +message ValidatorSet { + repeated Validator validators = 1; + Validator proposer = 2; + int64 total_voting_power = 3; +} + +message Validator { + bytes address = 1; + tendermint.crypto.PublicKey pub_key = 2 [(gogoproto.nullable) = false]; + int64 voting_power = 3; + int64 proposer_priority = 4; +} + +message SimpleValidator { + tendermint.crypto.PublicKey pub_key = 1; + int64 voting_power = 2; +} \ No newline at end of file diff --git a/x/feeabs/types/epoch.pb.go b/x/feeabs/types/epoch.pb.go index 7165654b..4d75f061 100644 --- a/x/feeabs/types/epoch.pb.go +++ b/x/feeabs/types/epoch.pb.go @@ -164,7 +164,7 @@ var fileDescriptor_4a30326e6468dfa9 = []byte{ // 452 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x3f, 0x6f, 0xd3, 0x40, 0x14, 0xcf, 0xd1, 0x50, 0x9c, 0x03, 0x04, 0x58, 0x05, 0x4c, 0xa4, 0x9e, 0xa3, 0xb0, 0x04, 0x41, - 0x7d, 0x4a, 0x61, 0x2a, 0x5b, 0x00, 0x09, 0x18, 0xd3, 0x0e, 0x88, 0x25, 0x3a, 0x3b, 0xcf, 0xf6, + 0x7d, 0x0a, 0x65, 0x2a, 0x5b, 0x00, 0x09, 0x18, 0xd3, 0x0e, 0x88, 0x25, 0x3a, 0x3b, 0xcf, 0xf6, 0x49, 0xb1, 0xcf, 0xb2, 0x9f, 0x2b, 0xb2, 0xf1, 0x11, 0x32, 0xf2, 0x91, 0x3a, 0x76, 0x64, 0x0a, 0x28, 0xd9, 0x18, 0xfb, 0x09, 0x90, 0xef, 0xec, 0x92, 0x12, 0x50, 0x37, 0xfb, 0xfd, 0xfe, 0xbd, 0xf7, 0xd3, 0xd1, 0x67, 0x21, 0x80, 0xf0, 0x0b, 0xcc, 0x45, 0x80, 0x52, 0xa5, 0x5c, 0xf8, 0x45, @@ -174,22 +174,22 @@ var fileDescriptor_4a30326e6468dfa9 = []byte{ 0x72, 0x83, 0xbb, 0x7f, 0xe3, 0x28, 0x13, 0x28, 0x50, 0x24, 0x99, 0x21, 0xf4, 0x17, 0x6d, 0xda, 0x79, 0x57, 0x6d, 0xf1, 0x21, 0x0d, 0x95, 0xcd, 0x28, 0x95, 0x53, 0x48, 0x51, 0x86, 0x12, 0x72, 0x87, 0xf4, 0xc8, 0xa0, 0x33, 0xde, 0x98, 0xd8, 0x9f, 0x28, 0x2d, 0x50, 0xe4, 0x38, 0xa9, 0x6c, - 0x9c, 0x1b, 0x3d, 0x32, 0xb8, 0x7d, 0xd8, 0xf5, 0x4c, 0x86, 0xd7, 0x64, 0x78, 0x27, 0x4d, 0xc6, - 0x68, 0xff, 0x6c, 0xe9, 0xb6, 0x2e, 0x96, 0xee, 0x83, 0xb9, 0x48, 0x66, 0x47, 0xfd, 0x3f, 0xda, - 0xfe, 0xe2, 0x87, 0x4b, 0xc6, 0x1d, 0x3d, 0xa8, 0xe8, 0x76, 0x4c, 0xad, 0x66, 0x75, 0x67, 0x47, - 0xfb, 0x3e, 0xd9, 0xf2, 0x7d, 0x5b, 0x13, 0x46, 0xc3, 0xca, 0xf6, 0xd7, 0xd2, 0xb5, 0x1b, 0xc9, - 0x0b, 0x95, 0x48, 0x84, 0x24, 0xc3, 0xf9, 0xc5, 0xd2, 0xbd, 0x67, 0xc2, 0x1a, 0xac, 0xff, 0xad, - 0x8a, 0xba, 0x74, 0xb7, 0x9f, 0xd2, 0xbb, 0x41, 0x99, 0xe7, 0x90, 0xe2, 0x44, 0xd7, 0xef, 0xb4, - 0x7b, 0x64, 0xb0, 0x33, 0xbe, 0x53, 0x0f, 0x75, 0x19, 0xf6, 0x57, 0x42, 0x9d, 0x2b, 0xac, 0xc9, - 0xc6, 0xdd, 0x37, 0xaf, 0xbd, 0xfb, 0x79, 0x7d, 0xb7, 0x6b, 0x56, 0xf9, 0x9f, 0x93, 0x69, 0xe1, - 0xe1, 0x66, 0xf2, 0xf1, 0x65, 0x23, 0xaf, 0xe8, 0x23, 0xc3, 0x0f, 0x54, 0x99, 0xa2, 0x4c, 0x23, - 0x23, 0x84, 0xa9, 0xb3, 0xdb, 0x23, 0x03, 0x6b, 0xbc, 0xa7, 0xd1, 0x37, 0x35, 0x78, 0x6c, 0x30, - 0xfb, 0x35, 0xed, 0xfe, 0x2b, 0x2d, 0x06, 0x19, 0xc5, 0xe8, 0x58, 0xfa, 0xd4, 0xc7, 0x5b, 0x81, - 0xef, 0x35, 0xfc, 0xb1, 0x6d, 0xdd, 0xba, 0x6f, 0x8d, 0x4e, 0xce, 0x56, 0x8c, 0x9c, 0xaf, 0x18, - 0xf9, 0xb9, 0x62, 0x64, 0xb1, 0x66, 0xad, 0xf3, 0x35, 0x6b, 0x7d, 0x5f, 0xb3, 0xd6, 0xe7, 0xa3, - 0x48, 0x62, 0x5c, 0xfa, 0x5e, 0xa0, 0x12, 0x9e, 0xaa, 0xaa, 0x4d, 0x31, 0x3b, 0x98, 0x09, 0xbf, - 0xe0, 0x21, 0xc0, 0xc1, 0xe6, 0x3b, 0x3f, 0x3d, 0xe4, 0x5f, 0xb8, 0x79, 0xd0, 0x1c, 0xe7, 0x19, - 0x14, 0xfe, 0xae, 0xae, 0xe9, 0xe5, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x5c, 0x93, 0xf5, 0x54, + 0x9c, 0x1b, 0x3d, 0x32, 0xb8, 0xfd, 0xb2, 0xeb, 0x99, 0x0c, 0xaf, 0xc9, 0xf0, 0x4e, 0x9a, 0x8c, + 0xd1, 0xfe, 0xd9, 0xd2, 0x6d, 0x5d, 0x2c, 0xdd, 0x07, 0x73, 0x91, 0xcc, 0x8e, 0xfa, 0x7f, 0xb4, + 0xfd, 0xc5, 0x0f, 0x97, 0x8c, 0x3b, 0x7a, 0x50, 0xd1, 0xed, 0x98, 0x5a, 0xcd, 0xea, 0xce, 0x8e, + 0xf6, 0x7d, 0xb2, 0xe5, 0xfb, 0xb6, 0x26, 0x8c, 0x86, 0x95, 0xed, 0xaf, 0xa5, 0x6b, 0x37, 0x92, + 0x17, 0x2a, 0x91, 0x08, 0x49, 0x86, 0xf3, 0x8b, 0xa5, 0x7b, 0xcf, 0x84, 0x35, 0x58, 0xff, 0x5b, + 0x15, 0x75, 0xe9, 0x6e, 0x3f, 0xa5, 0x77, 0x83, 0x32, 0xcf, 0x21, 0xc5, 0x89, 0xae, 0xdf, 0x69, + 0xf7, 0xc8, 0x60, 0x67, 0x7c, 0xa7, 0x1e, 0xea, 0x32, 0xec, 0xaf, 0x84, 0x3a, 0x57, 0x58, 0x93, + 0x8d, 0xbb, 0x6f, 0x5e, 0x7b, 0xf7, 0xf3, 0xfa, 0x6e, 0xd7, 0xac, 0xf2, 0x3f, 0x27, 0xd3, 0xc2, + 0xc3, 0xcd, 0xe4, 0xe3, 0xcb, 0x46, 0x5e, 0xd1, 0x47, 0x86, 0x1f, 0xa8, 0x32, 0x45, 0x99, 0x46, + 0x46, 0x08, 0x53, 0x67, 0xb7, 0x47, 0x06, 0xd6, 0x78, 0x4f, 0xa3, 0x6f, 0x6a, 0xf0, 0xd8, 0x60, + 0xf6, 0x6b, 0xda, 0xfd, 0x57, 0x5a, 0x0c, 0x32, 0x8a, 0xd1, 0xb1, 0xf4, 0xa9, 0x8f, 0xb7, 0x02, + 0xdf, 0x6b, 0xf8, 0x63, 0xdb, 0xba, 0x75, 0xdf, 0x1a, 0x9d, 0x9c, 0xad, 0x18, 0x39, 0x5f, 0x31, + 0xf2, 0x73, 0xc5, 0xc8, 0x62, 0xcd, 0x5a, 0xe7, 0x6b, 0xd6, 0xfa, 0xbe, 0x66, 0xad, 0xcf, 0x47, + 0x91, 0xc4, 0xb8, 0xf4, 0xbd, 0x40, 0x25, 0x3c, 0x55, 0x55, 0x9b, 0x62, 0x76, 0x30, 0x13, 0x7e, + 0xc1, 0x43, 0x80, 0x83, 0xcd, 0x77, 0x7e, 0x7a, 0xc8, 0xbf, 0x70, 0xf3, 0xa0, 0x39, 0xce, 0x33, + 0x28, 0xfc, 0x5d, 0x5d, 0xd3, 0xe1, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7b, 0xf6, 0xd0, 0xd5, 0x12, 0x03, 0x00, 0x00, } diff --git a/x/feeabs/types/feepool.pb.go b/x/feeabs/types/feepool.pb.go index bef654db..22b8bec8 100644 --- a/x/feeabs/types/feepool.pb.go +++ b/x/feeabs/types/feepool.pb.go @@ -29,18 +29,18 @@ func init() { var fileDescriptor_aeac12e01fe4cbff = []byte{ // 219 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x8f, 0x31, 0x4e, 0xc5, 0x30, - 0x0c, 0x86, 0xdb, 0x85, 0x81, 0x11, 0x31, 0x3d, 0x41, 0x0e, 0x00, 0x7a, 0xb1, 0x1e, 0x6c, 0x8c, - 0x9c, 0x81, 0x89, 0xcd, 0xa9, 0xdc, 0x10, 0x29, 0x8d, 0x43, 0x9c, 0x57, 0xd1, 0x5b, 0x70, 0x2c, - 0xc6, 0x8e, 0x8c, 0xa8, 0xbd, 0x08, 0x4a, 0x5b, 0x10, 0x2c, 0x6f, 0xb3, 0xe4, 0xef, 0xff, 0x7e, - 0xfb, 0xfc, 0xb6, 0x25, 0x42, 0x23, 0x39, 0x61, 0x93, 0x1d, 0x07, 0x40, 0x23, 0x2d, 0x11, 0xf4, - 0x07, 0x43, 0x19, 0x0f, 0xd0, 0x12, 0x45, 0x66, 0xaf, 0x63, 0xe2, 0xcc, 0x17, 0xd7, 0xff, 0x61, - 0xbd, 0xc2, 0x7a, 0x83, 0x77, 0x97, 0x96, 0x2d, 0x2f, 0x24, 0x94, 0x69, 0x0d, 0xed, 0xae, 0x2c, - 0xb3, 0xf5, 0x04, 0x18, 0x1d, 0x60, 0x08, 0x9c, 0xb1, 0x64, 0x65, 0xdb, 0xde, 0x34, 0x2c, 0x1d, - 0x0b, 0x18, 0x14, 0x82, 0xd7, 0x23, 0xa5, 0xe1, 0xb7, 0x3b, 0xa2, 0x75, 0x61, 0x81, 0x7f, 0xd8, - 0xd3, 0xb7, 0x46, 0x4c, 0xd8, 0x6d, 0xde, 0xc7, 0xa7, 0x8f, 0x49, 0xd5, 0xe3, 0xa4, 0xea, 0xaf, - 0x49, 0xd5, 0xef, 0xb3, 0xaa, 0xc6, 0x59, 0x55, 0x9f, 0xb3, 0xaa, 0x9e, 0x1f, 0xac, 0xcb, 0x2f, - 0x47, 0xa3, 0x1b, 0xee, 0x20, 0x70, 0x11, 0xa1, 0xdf, 0x7b, 0x34, 0x52, 0x9e, 0xdd, 0xff, 0xf5, - 0xf7, 0x77, 0xf0, 0x06, 0x6b, 0x27, 0xe4, 0x21, 0x92, 0x98, 0xb3, 0x45, 0x7e, 0xff, 0x1d, 0x00, - 0x00, 0xff, 0xff, 0x6a, 0x37, 0x68, 0xb3, 0x36, 0x01, 0x00, 0x00, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x8f, 0xb1, 0x4e, 0xc4, 0x30, + 0x0c, 0x86, 0xdb, 0x85, 0x81, 0x11, 0x31, 0x9d, 0x20, 0x0f, 0x00, 0xba, 0x58, 0xa7, 0xdb, 0x18, + 0x79, 0x06, 0x26, 0x36, 0xa7, 0x72, 0x43, 0xa4, 0x34, 0x0e, 0x71, 0xae, 0xa2, 0x6f, 0xc1, 0x63, + 0x31, 0x76, 0x64, 0x44, 0xed, 0x8b, 0xa0, 0xb4, 0x05, 0xc1, 0x72, 0x9b, 0x25, 0x7f, 0xff, 0xf7, + 0xdb, 0x97, 0xf7, 0x2d, 0x11, 0x1a, 0xc9, 0x09, 0x9b, 0xec, 0x38, 0x00, 0x1a, 0x69, 0x89, 0xa0, + 0x3f, 0x18, 0xca, 0x78, 0x80, 0x96, 0x28, 0x32, 0x7b, 0x1d, 0x13, 0x67, 0xbe, 0xba, 0xfd, 0x0f, + 0xeb, 0x15, 0xd6, 0x1b, 0xbc, 0xbb, 0xb6, 0x6c, 0x79, 0x21, 0xa1, 0x4c, 0x6b, 0x68, 0x77, 0x63, + 0x99, 0xad, 0x27, 0xc0, 0xe8, 0x00, 0x43, 0xe0, 0x8c, 0x25, 0x2b, 0xdb, 0xf6, 0xae, 0x61, 0xe9, + 0x58, 0xc0, 0xa0, 0x10, 0xbc, 0x9e, 0x28, 0x0d, 0xbf, 0xdd, 0x11, 0xad, 0x0b, 0x0b, 0xfc, 0xc3, + 0x9e, 0xbf, 0x35, 0x62, 0xc2, 0x6e, 0xf3, 0x3e, 0x3e, 0x7d, 0x4c, 0xaa, 0x1e, 0x27, 0x55, 0x7f, + 0x4d, 0xaa, 0x7e, 0x9f, 0x55, 0x35, 0xce, 0xaa, 0xfa, 0x9c, 0x55, 0xf5, 0xfc, 0x60, 0x5d, 0x7e, + 0x39, 0x19, 0xdd, 0x70, 0x07, 0x81, 0x8b, 0x08, 0xfd, 0xde, 0xa3, 0x91, 0xf2, 0xec, 0xfe, 0xaf, + 0xbf, 0x3f, 0xc2, 0x1b, 0xac, 0x9d, 0x90, 0x87, 0x48, 0x62, 0x2e, 0x16, 0xf9, 0xf1, 0x3b, 0x00, + 0x00, 0xff, 0xff, 0x4d, 0x52, 0x4d, 0x32, 0x36, 0x01, 0x00, 0x00, } diff --git a/x/feeabs/types/genesis.pb.go b/x/feeabs/types/genesis.pb.go index 1b928b63..36a570ec 100644 --- a/x/feeabs/types/genesis.pb.go +++ b/x/feeabs/types/genesis.pb.go @@ -95,29 +95,29 @@ func init() { } var fileDescriptor_c85d049bd82004cc = []byte{ - // 342 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x90, 0xc1, 0x4a, 0xf3, 0x40, - 0x10, 0xc7, 0x93, 0xaf, 0x1f, 0x11, 0x53, 0xbd, 0x04, 0xc5, 0x52, 0x34, 0x2d, 0x05, 0x21, 0x2a, - 0xcd, 0xd2, 0x7a, 0xeb, 0xb1, 0xa0, 0xd2, 0x9b, 0xd4, 0x9e, 0xbc, 0xc8, 0x24, 0x9d, 0xa4, 0x81, - 0x24, 0xb3, 0x66, 0xb7, 0xc5, 0xbe, 0x85, 0x2f, 0x25, 0xf4, 0xd8, 0xa3, 0xa7, 0x22, 0xed, 0x1b, - 0xf8, 0x04, 0x92, 0x6c, 0x2a, 0x7a, 0xa9, 0xb7, 0x5d, 0xf8, 0xfd, 0x7f, 0xff, 0x99, 0x31, 0xaf, - 0x02, 0x44, 0xf0, 0x84, 0xcc, 0xc0, 0x97, 0x11, 0xa5, 0x0c, 0x3c, 0x11, 0x20, 0xb2, 0x59, 0xc7, - 0x43, 0x09, 0x1d, 0x16, 0x62, 0x8a, 0x22, 0x12, 0x2e, 0xcf, 0x48, 0x92, 0x75, 0xf6, 0x1b, 0x76, - 0x15, 0xec, 0x96, 0x70, 0xfd, 0x28, 0xa4, 0x90, 0x0a, 0x92, 0xe5, 0x2f, 0x15, 0xaa, 0x9f, 0x86, - 0x44, 0x61, 0x8c, 0x0c, 0x78, 0xc4, 0x20, 0x4d, 0x49, 0x42, 0x9e, 0x2d, 0x95, 0xf5, 0x4b, 0x9f, - 0x44, 0x42, 0x82, 0x79, 0x20, 0x90, 0x3d, 0x4f, 0x31, 0x9b, 0x7f, 0x77, 0x73, 0x08, 0xa3, 0xb4, - 0x80, 0xb7, 0xec, 0xee, 0x59, 0x39, 0x64, 0x90, 0x6c, 0xbd, 0x17, 0xbb, 0x59, 0xe4, 0xe4, 0x4f, - 0x14, 0xda, 0x7a, 0xd3, 0xcd, 0x83, 0x3b, 0xb5, 0xe7, 0x83, 0x04, 0x89, 0xd6, 0xc8, 0x34, 0x94, - 0xab, 0xa6, 0x37, 0x75, 0xa7, 0xda, 0x3d, 0x77, 0x77, 0xee, 0xed, 0xde, 0x17, 0x70, 0xff, 0x78, - 0xb1, 0x6a, 0x68, 0x9f, 0xab, 0xc6, 0xe1, 0x1c, 0x92, 0xb8, 0xd7, 0x52, 0x8a, 0xd6, 0xb0, 0x74, - 0x59, 0xb7, 0xa6, 0x51, 0xb4, 0x8a, 0xda, 0xbf, 0x66, 0xc5, 0xa9, 0x76, 0x9d, 0x3f, 0xac, 0x37, - 0x39, 0x3c, 0x48, 0x03, 0xea, 0xff, 0xcf, 0xc5, 0xc3, 0x32, 0x6d, 0x9d, 0x98, 0x7b, 0x9c, 0x32, - 0xf9, 0x14, 0x8d, 0x6b, 0x95, 0xa6, 0xee, 0xec, 0x0f, 0x8d, 0xfc, 0x3b, 0x18, 0xf7, 0x47, 0x8b, - 0xb5, 0xad, 0x2f, 0xd7, 0xb6, 0xfe, 0xb1, 0xb6, 0xf5, 0xd7, 0x8d, 0xad, 0x2d, 0x37, 0xb6, 0xf6, - 0xbe, 0xb1, 0xb5, 0xc7, 0x5e, 0x18, 0xc9, 0xc9, 0xd4, 0x73, 0x7d, 0x4a, 0x58, 0x4a, 0x79, 0x19, - 0xc4, 0xed, 0x18, 0x3c, 0xc1, 0x02, 0xc4, 0xf6, 0xcf, 0x33, 0xcd, 0xba, 0xec, 0x85, 0xa9, 0xb9, - 0x98, 0x9c, 0x73, 0x14, 0x9e, 0x51, 0x1c, 0xe9, 0xfa, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x4c, 0x72, - 0x8d, 0xa5, 0x29, 0x02, 0x00, 0x00, + // 343 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x90, 0xc1, 0x4a, 0xeb, 0x40, + 0x14, 0x86, 0x93, 0xdb, 0x4b, 0x2e, 0x37, 0xd5, 0x4d, 0x50, 0x2c, 0x45, 0xd3, 0x52, 0x10, 0xa2, + 0xd2, 0x0c, 0x6d, 0x77, 0x5d, 0x16, 0x54, 0xba, 0x93, 0xda, 0x95, 0x1b, 0x39, 0x49, 0x4f, 0xd2, + 0x40, 0x92, 0x33, 0x66, 0xa6, 0xc5, 0xbe, 0x85, 0x2f, 0x25, 0x74, 0xd9, 0xa5, 0xab, 0x22, 0xed, + 0x1b, 0xf8, 0x04, 0x92, 0x4c, 0x2a, 0xba, 0xa9, 0xbb, 0x19, 0xf8, 0xfe, 0xef, 0x3f, 0xe7, 0x98, + 0x57, 0x01, 0x22, 0x78, 0x42, 0x66, 0xe0, 0xcb, 0x88, 0x52, 0x06, 0x9e, 0x08, 0x10, 0xd9, 0xbc, + 0xe3, 0xa1, 0x84, 0x0e, 0x0b, 0x31, 0x45, 0x11, 0x09, 0x97, 0x67, 0x24, 0xc9, 0x3a, 0xfb, 0x09, + 0xbb, 0x0a, 0x76, 0x4b, 0xb8, 0x7e, 0x14, 0x52, 0x48, 0x05, 0xc9, 0xf2, 0x97, 0x0a, 0xd5, 0x4f, + 0x43, 0xa2, 0x30, 0x46, 0x06, 0x3c, 0x62, 0x90, 0xa6, 0x24, 0x21, 0xcf, 0x96, 0xca, 0xfa, 0xa5, + 0x4f, 0x22, 0x21, 0xc1, 0x3c, 0x10, 0xc8, 0x9e, 0x66, 0x98, 0x2d, 0xbe, 0xba, 0x39, 0x84, 0x51, + 0x5a, 0xc0, 0x3b, 0x76, 0xff, 0xac, 0x1c, 0x32, 0x48, 0x76, 0xde, 0x8b, 0xfd, 0x2c, 0x72, 0xf2, + 0xa7, 0x0a, 0x6d, 0xbd, 0xea, 0xe6, 0xc1, 0xad, 0xda, 0xf3, 0x5e, 0x82, 0x44, 0x6b, 0x6c, 0x1a, + 0xca, 0x55, 0xd3, 0x9b, 0xba, 0x53, 0xed, 0x9e, 0xbb, 0x7b, 0xf7, 0x76, 0xef, 0x0a, 0x78, 0x70, + 0xbc, 0x5c, 0x37, 0xb4, 0x8f, 0x75, 0xe3, 0x70, 0x01, 0x49, 0xdc, 0x6f, 0x29, 0x45, 0x6b, 0x54, + 0xba, 0xac, 0x1b, 0xd3, 0x28, 0x5a, 0x45, 0xed, 0x4f, 0xb3, 0xe2, 0x54, 0xbb, 0xce, 0x2f, 0xd6, + 0xeb, 0x1c, 0x1e, 0xa6, 0x01, 0x0d, 0xfe, 0xe6, 0xe2, 0x51, 0x99, 0xb6, 0x4e, 0xcc, 0x7f, 0x9c, + 0x32, 0xf9, 0x18, 0x4d, 0x6a, 0x95, 0xa6, 0xee, 0xfc, 0x1f, 0x19, 0xf9, 0x77, 0x38, 0x19, 0x8c, + 0x97, 0x1b, 0x5b, 0x5f, 0x6d, 0x6c, 0xfd, 0x7d, 0x63, 0xeb, 0x2f, 0x5b, 0x5b, 0x5b, 0x6d, 0x6d, + 0xed, 0x6d, 0x6b, 0x6b, 0x0f, 0xfd, 0x30, 0x92, 0xd3, 0x99, 0xe7, 0xfa, 0x94, 0xb0, 0x94, 0xf2, + 0x32, 0x88, 0xdb, 0x31, 0x78, 0x82, 0x05, 0x88, 0xed, 0xef, 0x67, 0x9a, 0xf7, 0xd8, 0x33, 0x53, + 0x73, 0x31, 0xb9, 0xe0, 0x28, 0x3c, 0xa3, 0x38, 0x52, 0xef, 0x33, 0x00, 0x00, 0xff, 0xff, 0x6b, + 0x17, 0xa8, 0x24, 0x29, 0x02, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/x/feeabs/types/osmosisibc.pb.go b/x/feeabs/types/osmosisibc.pb.go index e58a1575..201bfed4 100644 --- a/x/feeabs/types/osmosisibc.pb.go +++ b/x/feeabs/types/osmosisibc.pb.go @@ -10,7 +10,7 @@ import ( proto "github.com/gogo/protobuf/proto" _ "github.com/gogo/protobuf/types" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - types1 "github.com/cometbft/cometbft/abci/types" + types1 "github.com/tendermint/tendermint/abci/types" _ "google.golang.org/genproto/googleapis/api/annotations" io "io" math "math" @@ -439,44 +439,44 @@ func init() { } var fileDescriptor_d7e956854d14a746 = []byte{ - // 592 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x94, 0xc1, 0x6e, 0xda, 0x4c, - 0x10, 0xc7, 0xf1, 0x17, 0x94, 0xaf, 0x2c, 0x55, 0xaa, 0x5a, 0x55, 0x4a, 0x69, 0xb0, 0x91, 0x0f, - 0x15, 0x17, 0x76, 0x15, 0xaa, 0x5e, 0x72, 0x69, 0x21, 0x39, 0x34, 0x97, 0xa8, 0xb5, 0x90, 0x5a, - 0xf5, 0x82, 0xc6, 0x66, 0x81, 0x15, 0xd8, 0x6b, 0xbc, 0x4b, 0x28, 0x6f, 0x91, 0x4b, 0xdf, 0x29, - 0xc7, 0x1c, 0x7a, 0xa8, 0x7a, 0xa0, 0x15, 0xbc, 0x41, 0x9e, 0xa0, 0xda, 0xb5, 0x0d, 0x24, 0x71, - 0x7b, 0xf2, 0xec, 0xcc, 0x7f, 0x7e, 0x3b, 0x33, 0x1e, 0x1b, 0xe1, 0x01, 0xa5, 0xe0, 0x09, 0x19, - 0x83, 0x2f, 0x19, 0x0f, 0x09, 0x78, 0x62, 0x40, 0x29, 0xb9, 0x3c, 0xf6, 0xa8, 0x84, 0x63, 0xc2, - 0x45, 0xc0, 0x05, 0x13, 0xcc, 0xf3, 0x71, 0x14, 0x73, 0xc9, 0xcd, 0xda, 0x5d, 0x3d, 0x4e, 0xf4, - 0x38, 0xd5, 0x57, 0x9f, 0x0d, 0xf9, 0x90, 0x6b, 0x25, 0x51, 0x56, 0x92, 0x54, 0xb5, 0x87, 0x9c, - 0x0f, 0x27, 0x94, 0xe8, 0x93, 0x37, 0x1b, 0x10, 0xc9, 0x02, 0x2a, 0x24, 0x04, 0x51, 0x2a, 0x38, - 0x4a, 0x05, 0x10, 0x31, 0x02, 0x61, 0xc8, 0x25, 0x28, 0xb8, 0x48, 0xa3, 0x2f, 0x25, 0x0d, 0xfb, - 0x34, 0x0e, 0x58, 0x28, 0x09, 0x78, 0x3e, 0x23, 0x72, 0x11, 0xd1, 0x34, 0xe8, 0x7c, 0x37, 0x90, - 0xfd, 0x71, 0x46, 0xe3, 0x45, 0x3b, 0x66, 0x72, 0x14, 0x50, 0xc9, 0xfc, 0xee, 0x1c, 0xa2, 0x2e, - 0xbf, 0xe0, 0x73, 0x97, 0x4e, 0x67, 0x54, 0x48, 0xf3, 0x39, 0xfa, 0x3f, 0xe2, 0x7c, 0xd2, 0x63, - 0xfd, 0x8a, 0x51, 0x37, 0x1a, 0x45, 0x77, 0x5f, 0x1d, 0xcf, 0xfb, 0x66, 0x0d, 0x21, 0x0f, 0x04, - 0xed, 0x81, 0x10, 0x54, 0x56, 0xfe, 0xab, 0x1b, 0x8d, 0x92, 0x5b, 0x52, 0x9e, 0xb6, 0x72, 0x98, - 0x36, 0x2a, 0x4f, 0x67, 0x5c, 0x66, 0xf1, 0x3d, 0x1d, 0x47, 0xda, 0x95, 0x08, 0x3e, 0x23, 0x24, - 0x24, 0xc4, 0xb2, 0xa7, 0x1a, 0xaa, 0x14, 0xeb, 0x46, 0xa3, 0xdc, 0xaa, 0xe2, 0xa4, 0x19, 0x9c, - 0x75, 0x8b, 0xbb, 0x59, 0xb7, 0x9d, 0xda, 0xf5, 0xd2, 0x2e, 0xdc, 0x2e, 0xed, 0xa7, 0x0b, 0x08, - 0x26, 0x27, 0xce, 0x36, 0xd7, 0xb9, 0xfa, 0x65, 0x1b, 0x6e, 0x49, 0x3b, 0x94, 0xdc, 0xf9, 0x66, - 0xa0, 0xfa, 0xdf, 0xdb, 0x12, 0x11, 0x0f, 0x05, 0x35, 0xa7, 0xe8, 0x09, 0x6c, 0xc2, 0x3d, 0x39, - 0x87, 0x48, 0xf7, 0x57, 0xea, 0xbc, 0x57, 0xf7, 0xfc, 0x5c, 0xda, 0xaf, 0x86, 0x4c, 0x8e, 0x66, - 0x1e, 0xf6, 0x79, 0x40, 0x7c, 0xfd, 0x2e, 0xd3, 0x47, 0x53, 0xf4, 0xc7, 0xe9, 0x18, 0xcf, 0xa8, - 0x7f, 0xbb, 0xb4, 0x0f, 0x93, 0x8a, 0xee, 0xe1, 0x1c, 0xf7, 0x00, 0xee, 0xdc, 0xef, 0xbc, 0x43, - 0x87, 0xe7, 0xa1, 0xa4, 0xb1, 0x3f, 0x02, 0x16, 0xea, 0x02, 0xb3, 0x21, 0x9b, 0xa8, 0xd8, 0x07, - 0x09, 0xba, 0x82, 0xc7, 0xae, 0xb6, 0x95, 0x2f, 0x02, 0x39, 0x4a, 0x27, 0xab, 0x6d, 0xe7, 0x14, - 0xbd, 0xb8, 0x47, 0xf8, 0x00, 0xfe, 0x98, 0xca, 0xb3, 0x34, 0x21, 0x0f, 0x12, 0xd0, 0x80, 0x67, - 0x10, 0x65, 0x3b, 0x18, 0x55, 0x72, 0x21, 0x6d, 0x7f, 0x9c, 0xc7, 0x70, 0xe6, 0xe8, 0x28, 0xbf, - 0xec, 0x24, 0xcd, 0xfc, 0x84, 0x1e, 0xc5, 0x89, 0x43, 0x54, 0x8c, 0xfa, 0x5e, 0xa3, 0xdc, 0x7a, - 0x83, 0xff, 0xb9, 0xe9, 0x38, 0x1f, 0xd7, 0x29, 0xaa, 0xc9, 0xbb, 0x1b, 0x98, 0x73, 0x81, 0xca, - 0xa7, 0x7a, 0xe2, 0x5a, 0x65, 0xbe, 0x7d, 0x70, 0x4f, 0x0d, 0x6f, 0xb7, 0x1b, 0xab, 0xed, 0xc6, - 0x29, 0x4a, 0x27, 0x3c, 0xe0, 0x75, 0xd1, 0x41, 0xc2, 0xdb, 0x2c, 0x41, 0x07, 0x95, 0xe2, 0xd4, - 0xce, 0x98, 0x56, 0x0e, 0x33, 0x51, 0xec, 0x42, 0xb7, 0x69, 0x9d, 0xee, 0xf5, 0xca, 0x32, 0x6e, - 0x56, 0x96, 0xf1, 0x7b, 0x65, 0x19, 0x57, 0x6b, 0xab, 0x70, 0xb3, 0xb6, 0x0a, 0x3f, 0xd6, 0x56, - 0xe1, 0xcb, 0xc9, 0xce, 0x06, 0x85, 0x5c, 0x0d, 0x02, 0x26, 0xcd, 0x09, 0x78, 0x82, 0x0c, 0x28, - 0x6d, 0xee, 0xfe, 0x39, 0x2e, 0x5b, 0xe4, 0x2b, 0x49, 0x66, 0x96, 0x6c, 0x96, 0xb7, 0xaf, 0xbf, - 0x80, 0xd7, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x40, 0x8b, 0x48, 0x36, 0x64, 0x04, 0x00, 0x00, + // 591 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x94, 0xc1, 0x6e, 0xd3, 0x40, + 0x10, 0x86, 0x63, 0x1a, 0x15, 0xb2, 0x41, 0x45, 0x58, 0xa8, 0x84, 0xd0, 0xd8, 0x91, 0x0f, 0x28, + 0x97, 0xec, 0xaa, 0xad, 0xb8, 0xf4, 0x02, 0x49, 0x7b, 0xa0, 0x97, 0x0a, 0xac, 0x48, 0x20, 0x2e, + 0xd1, 0xd8, 0xd9, 0x24, 0xab, 0xc4, 0x5e, 0xc7, 0xbb, 0x69, 0xc8, 0x5b, 0xf4, 0xc2, 0x3b, 0xf5, + 0xd8, 0x03, 0x07, 0xc4, 0x21, 0xa0, 0xe4, 0x0d, 0xfa, 0x04, 0x68, 0xd7, 0x76, 0x92, 0xb6, 0x86, + 0x93, 0x67, 0x67, 0xfe, 0xf9, 0x76, 0x66, 0x3c, 0x36, 0xc2, 0x7d, 0x4a, 0xc1, 0x13, 0x32, 0x06, + 0x5f, 0x32, 0x1e, 0x12, 0xf0, 0x44, 0x9f, 0x52, 0x72, 0x79, 0xe8, 0x51, 0x09, 0x87, 0x84, 0x8b, + 0x80, 0x0b, 0x26, 0x98, 0xe7, 0xe3, 0x28, 0xe6, 0x92, 0x9b, 0xb5, 0xbb, 0x7a, 0x9c, 0xe8, 0x71, + 0xaa, 0xaf, 0xbe, 0x18, 0xf0, 0x01, 0xd7, 0x4a, 0xa2, 0xac, 0x24, 0xa9, 0x6a, 0x0f, 0x38, 0x1f, + 0x8c, 0x29, 0xd1, 0x27, 0x6f, 0xda, 0x27, 0x92, 0x05, 0x54, 0x48, 0x08, 0xa2, 0x54, 0x70, 0x90, + 0x0a, 0x20, 0x62, 0x04, 0xc2, 0x90, 0x4b, 0x50, 0x70, 0x91, 0x46, 0x5f, 0x4b, 0x1a, 0xf6, 0x68, + 0x1c, 0xb0, 0x50, 0x12, 0xf0, 0x7c, 0x46, 0xe4, 0x3c, 0xa2, 0x69, 0xd0, 0xf9, 0x61, 0x20, 0xfb, + 0xd3, 0x94, 0xc6, 0xf3, 0x56, 0xcc, 0xe4, 0x30, 0xa0, 0x92, 0xf9, 0x9d, 0x19, 0x44, 0x1d, 0x7e, + 0xc1, 0x67, 0x2e, 0x9d, 0x4c, 0xa9, 0x90, 0xe6, 0x4b, 0xf4, 0x38, 0xe2, 0x7c, 0xdc, 0x65, 0xbd, + 0x8a, 0x51, 0x37, 0x1a, 0x45, 0x77, 0x57, 0x1d, 0xcf, 0x7b, 0x66, 0x0d, 0x21, 0x0f, 0x04, 0xed, + 0x82, 0x10, 0x54, 0x56, 0x1e, 0xd5, 0x8d, 0x46, 0xc9, 0x2d, 0x29, 0x4f, 0x4b, 0x39, 0x4c, 0x1b, + 0x95, 0x27, 0x53, 0x2e, 0xb3, 0xf8, 0x8e, 0x8e, 0x23, 0xed, 0x4a, 0x04, 0x5f, 0x10, 0x12, 0x12, + 0x62, 0xd9, 0x55, 0x0d, 0x55, 0x8a, 0x75, 0xa3, 0x51, 0x3e, 0xaa, 0xe2, 0xa4, 0x19, 0x9c, 0x75, + 0x8b, 0x3b, 0x59, 0xb7, 0xed, 0xda, 0xf5, 0xc2, 0x2e, 0xdc, 0x2e, 0xec, 0xe7, 0x73, 0x08, 0xc6, + 0x27, 0xce, 0x26, 0xd7, 0xb9, 0xfa, 0x6d, 0x1b, 0x6e, 0x49, 0x3b, 0x94, 0xdc, 0xf9, 0x6e, 0xa0, + 0xfa, 0xbf, 0xdb, 0x12, 0x11, 0x0f, 0x05, 0x35, 0x27, 0xe8, 0x19, 0xac, 0xc3, 0x5d, 0x39, 0x83, + 0x48, 0xf7, 0x57, 0x6a, 0x7f, 0x50, 0xf7, 0xfc, 0x5a, 0xd8, 0x6f, 0x06, 0x4c, 0x0e, 0xa7, 0x1e, + 0xf6, 0x79, 0x40, 0x7c, 0xfd, 0x2e, 0xd3, 0x47, 0x53, 0xf4, 0x46, 0xe9, 0x18, 0xcf, 0xa8, 0x7f, + 0xbb, 0xb0, 0xf7, 0x93, 0x8a, 0xee, 0xe1, 0x1c, 0x77, 0x0f, 0xee, 0xdc, 0xef, 0xbc, 0x47, 0xfb, + 0xe7, 0xa1, 0xa4, 0xb1, 0x3f, 0x04, 0x16, 0xea, 0x02, 0xb3, 0x21, 0x9b, 0xa8, 0xd8, 0x03, 0x09, + 0xba, 0x82, 0xa7, 0xae, 0xb6, 0x95, 0x2f, 0x02, 0x39, 0x4c, 0x27, 0xab, 0x6d, 0xe7, 0x14, 0xbd, + 0xba, 0x47, 0xf8, 0x08, 0xfe, 0x88, 0xca, 0xb3, 0x34, 0x21, 0x0f, 0x12, 0xd0, 0x80, 0x67, 0x10, + 0x65, 0x3b, 0x18, 0x55, 0x72, 0x21, 0x2d, 0x7f, 0x94, 0xc7, 0x70, 0x66, 0xe8, 0x20, 0xbf, 0xec, + 0x24, 0xcd, 0xfc, 0x8c, 0x9e, 0xc4, 0x89, 0x43, 0x54, 0x8c, 0xfa, 0x4e, 0xa3, 0x7c, 0xf4, 0x16, + 0xff, 0x77, 0xd3, 0x71, 0x3e, 0xae, 0x5d, 0x54, 0x93, 0x77, 0xd7, 0x30, 0xe7, 0x02, 0x95, 0x4f, + 0xf5, 0xc4, 0xb5, 0xca, 0x7c, 0xf7, 0xe0, 0x9e, 0x1a, 0xde, 0x6c, 0x37, 0x56, 0xdb, 0x8d, 0x53, + 0x94, 0x4e, 0x78, 0xc0, 0xeb, 0xa0, 0xbd, 0x84, 0xb7, 0x5e, 0x82, 0x36, 0x2a, 0xc5, 0xa9, 0x9d, + 0x31, 0xad, 0x1c, 0x66, 0xa2, 0xd8, 0x86, 0x6e, 0xd2, 0xda, 0x9d, 0xeb, 0xa5, 0x65, 0xdc, 0x2c, + 0x2d, 0xe3, 0xcf, 0xd2, 0x32, 0xae, 0x56, 0x56, 0xe1, 0x66, 0x65, 0x15, 0x7e, 0xae, 0xac, 0xc2, + 0xd7, 0x93, 0xad, 0x0d, 0x0a, 0xb9, 0x1a, 0x04, 0x8c, 0x9b, 0x63, 0xf0, 0x04, 0xe9, 0x53, 0xda, + 0xdc, 0xfe, 0x73, 0x5c, 0x1e, 0x93, 0x6f, 0x24, 0x99, 0x59, 0xb2, 0x59, 0xde, 0xae, 0xfe, 0x02, + 0x8e, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x67, 0xee, 0x6d, 0xb7, 0x64, 0x04, 0x00, 0x00, } func (m *QueryArithmeticTwapToNowRequest) Marshal() (dAtA []byte, err error) { diff --git a/x/feeabs/types/params.pb.go b/x/feeabs/types/params.pb.go index b4e66abf..1250e6c8 100644 --- a/x/feeabs/types/params.pb.go +++ b/x/feeabs/types/params.pb.go @@ -127,31 +127,31 @@ func init() { var fileDescriptor_64e66a0978c84086 = []byte{ // 403 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x92, 0x3f, 0x8f, 0xd3, 0x30, - 0x18, 0xc6, 0x9b, 0x03, 0x2a, 0x9d, 0xc7, 0xa8, 0x88, 0xa8, 0xba, 0x0b, 0x88, 0x09, 0x9d, 0x74, - 0x35, 0x05, 0xb1, 0xb0, 0xc1, 0x89, 0xa1, 0x0b, 0x1c, 0xd0, 0x89, 0xc5, 0x7a, 0xed, 0xbe, 0x49, - 0x2c, 0x35, 0xb6, 0x6b, 0xbb, 0x2d, 0xf7, 0x2d, 0xf8, 0x4a, 0x6c, 0x8c, 0x37, 0x32, 0xa2, 0xf6, - 0x8b, 0x20, 0xff, 0x69, 0xd5, 0xdb, 0x92, 0x3c, 0xbf, 0x9f, 0xdf, 0x47, 0xf1, 0x4b, 0xae, 0x1a, - 0x44, 0xe0, 0xce, 0x5b, 0x10, 0x5e, 0x6a, 0x45, 0x81, 0xbb, 0x06, 0x91, 0x6e, 0xa6, 0x1c, 0x3d, - 0x4c, 0xa9, 0x01, 0x0b, 0xbd, 0x9b, 0x18, 0xab, 0xbd, 0x2e, 0x2f, 0x1f, 0xb2, 0x93, 0xc4, 0x4e, - 0x32, 0x3b, 0x1e, 0xb5, 0xba, 0xd5, 0x91, 0xa4, 0xe1, 0x29, 0x49, 0xe3, 0x8b, 0x56, 0xeb, 0x76, - 0x89, 0x14, 0x8c, 0xa4, 0xa0, 0x94, 0xf6, 0x10, 0xdc, 0x7c, 0xe4, 0xf8, 0x4a, 0x68, 0xd7, 0x6b, - 0x47, 0x39, 0x38, 0xa4, 0xab, 0x35, 0xda, 0xbb, 0x93, 0xd1, 0xad, 0x54, 0x11, 0xce, 0x6c, 0x9d, - 0x4f, 0x8a, 0x6f, 0x7c, 0xdd, 0xd0, 0xc5, 0xda, 0x9e, 0xe4, 0x2f, 0x7f, 0x9f, 0x91, 0xe1, 0x6d, - 0xec, 0x5b, 0xbe, 0x23, 0xcf, 0x82, 0xba, 0x41, 0x26, 0xb9, 0xc0, 0x05, 0x93, 0x8a, 0xc5, 0x39, - 0xd2, 0x55, 0xc5, 0x8b, 0xe2, 0xd5, 0xf9, 0xb7, 0x51, 0x8a, 0x67, 0x21, 0x9d, 0xa9, 0x2f, 0x29, - 0x0b, 0x5a, 0xc6, 0x58, 0xec, 0xc2, 0xfc, 0x16, 0x0c, 0x33, 0xe0, 0xbb, 0xea, 0x2c, 0x69, 0x39, - 0xfe, 0x1a, 0xd2, 0xf9, 0x16, 0xcc, 0x2d, 0xf8, 0xae, 0xbc, 0x24, 0x44, 0x74, 0x20, 0x15, 0x53, - 0xd0, 0x63, 0xf5, 0x28, 0x92, 0xe7, 0xf1, 0xcb, 0x67, 0xe8, 0xb1, 0x7c, 0x4d, 0x46, 0x92, 0x0b, - 0xe6, 0x2d, 0x28, 0xd7, 0xa0, 0x65, 0xa2, 0x03, 0xa5, 0x70, 0x59, 0x3d, 0x8e, 0x60, 0x29, 0xb9, - 0x98, 0xe7, 0xe8, 0x26, 0x25, 0xe5, 0x94, 0x3c, 0x0d, 0x46, 0xea, 0x20, 0xc5, 0xea, 0xa8, 0x3c, - 0x39, 0x2a, 0xb1, 0xc1, 0x4c, 0xac, 0x0e, 0xca, 0x27, 0xf2, 0xfc, 0x50, 0x5d, 0x58, 0xed, 0x5c, - 0x2a, 0xe4, 0x42, 0x7f, 0x58, 0x2c, 0x2c, 0x3a, 0x57, 0x0d, 0xa3, 0x7c, 0x91, 0xb1, 0x9b, 0x23, - 0xf5, 0x7d, 0x0b, 0xe6, 0x43, 0x62, 0x3e, 0xce, 0xff, 0xec, 0xea, 0xe2, 0x7e, 0x57, 0x17, 0xff, - 0x76, 0x75, 0xf1, 0x6b, 0x5f, 0x0f, 0xee, 0xf7, 0xf5, 0xe0, 0xef, 0xbe, 0x1e, 0xfc, 0x78, 0xdf, - 0x4a, 0xdf, 0xad, 0xf9, 0x44, 0xe8, 0x9e, 0x2a, 0x1d, 0x7e, 0x3b, 0x2c, 0xaf, 0x97, 0xc0, 0x1d, - 0x6d, 0x10, 0xaf, 0x4f, 0x57, 0x68, 0xf3, 0x86, 0xfe, 0xa4, 0x69, 0x55, 0xa8, 0xbf, 0x33, 0xe8, - 0xf8, 0x30, 0x5e, 0xd0, 0xdb, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x36, 0x3c, 0x48, 0x29, 0x6d, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x92, 0x3f, 0x6f, 0x13, 0x31, + 0x18, 0xc6, 0x73, 0x05, 0x22, 0xd5, 0xe3, 0x29, 0x88, 0x53, 0xd4, 0x1e, 0x88, 0x09, 0x55, 0x6a, + 0x4c, 0x54, 0xb1, 0xb0, 0x41, 0xc5, 0x90, 0x05, 0x0a, 0x64, 0x62, 0xb1, 0x5e, 0x3b, 0xef, 0xdd, + 0x59, 0xca, 0xd9, 0x8e, 0xed, 0x24, 0xf4, 0x5b, 0xf0, 0x95, 0xd8, 0x18, 0x3b, 0x32, 0xa2, 0xe4, + 0x8b, 0x20, 0xff, 0x49, 0x94, 0x6e, 0x77, 0xf7, 0xfc, 0x7e, 0x7e, 0x1f, 0x9d, 0x5f, 0x72, 0xd5, + 0x20, 0x02, 0x77, 0xde, 0x82, 0xf0, 0x52, 0x2b, 0x0a, 0xdc, 0x35, 0x88, 0x74, 0x33, 0xe5, 0xe8, + 0x61, 0x4a, 0x0d, 0x58, 0xe8, 0xdd, 0xc4, 0x58, 0xed, 0x75, 0x79, 0xf9, 0x98, 0x9d, 0x24, 0x76, + 0x92, 0xd9, 0xf1, 0xa8, 0xd5, 0xad, 0x8e, 0x24, 0x0d, 0x4f, 0x49, 0x1a, 0x5f, 0xb4, 0x5a, 0xb7, + 0x4b, 0xa4, 0x60, 0x24, 0x05, 0xa5, 0xb4, 0x87, 0xe0, 0xe6, 0x23, 0xc7, 0x57, 0x42, 0xbb, 0x5e, + 0x3b, 0xca, 0xc1, 0x21, 0x5d, 0xad, 0xd1, 0xde, 0x9f, 0x8c, 0x6e, 0xa5, 0x8a, 0x70, 0x66, 0xeb, + 0x7c, 0x52, 0x7c, 0xe3, 0xeb, 0x86, 0x2e, 0xd6, 0xf6, 0x24, 0x7f, 0xfd, 0xfb, 0x8c, 0x0c, 0xef, + 0x62, 0xdf, 0xf2, 0x1d, 0x79, 0x11, 0xd4, 0x0d, 0x32, 0xc9, 0x05, 0x2e, 0x98, 0x54, 0x2c, 0xce, + 0x91, 0xae, 0x2a, 0x5e, 0x15, 0x6f, 0xce, 0xbf, 0x8d, 0x52, 0x3c, 0x0b, 0xe9, 0x4c, 0x7d, 0x49, + 0x59, 0xd0, 0x32, 0xc6, 0x62, 0x17, 0xe6, 0xb7, 0x60, 0x98, 0x01, 0xdf, 0x55, 0x67, 0x49, 0xcb, + 0xf1, 0xd7, 0x90, 0xce, 0xb7, 0x60, 0xee, 0xc0, 0x77, 0xe5, 0x25, 0x21, 0xa2, 0x03, 0xa9, 0x98, + 0x82, 0x1e, 0xab, 0x27, 0x91, 0x3c, 0x8f, 0x5f, 0x3e, 0x43, 0x8f, 0xe5, 0x5b, 0x32, 0x92, 0x5c, + 0x30, 0x6f, 0x41, 0xb9, 0x06, 0x2d, 0x13, 0x1d, 0x28, 0x85, 0xcb, 0xea, 0x69, 0x04, 0x4b, 0xc9, + 0xc5, 0x3c, 0x47, 0xb7, 0x29, 0x29, 0xa7, 0xe4, 0x79, 0x30, 0x52, 0x07, 0x29, 0x56, 0x47, 0xe5, + 0xd9, 0x51, 0x89, 0x0d, 0x66, 0x62, 0x75, 0x50, 0x3e, 0x91, 0x97, 0x87, 0xea, 0xc2, 0x6a, 0xe7, + 0x52, 0x21, 0x17, 0xfa, 0xc3, 0x62, 0x61, 0xd1, 0xb9, 0x6a, 0x18, 0xe5, 0x8b, 0x8c, 0xdd, 0x1e, + 0xa9, 0xef, 0x5b, 0x30, 0x1f, 0x12, 0xf3, 0x71, 0xfe, 0x67, 0x57, 0x17, 0x0f, 0xbb, 0xba, 0xf8, + 0xb7, 0xab, 0x8b, 0x5f, 0xfb, 0x7a, 0xf0, 0xb0, 0xaf, 0x07, 0x7f, 0xf7, 0xf5, 0xe0, 0xc7, 0xfb, + 0x56, 0xfa, 0x6e, 0xcd, 0x27, 0x42, 0xf7, 0x54, 0xe9, 0xf0, 0xdb, 0x61, 0x79, 0xbd, 0x04, 0xee, + 0x68, 0x83, 0x78, 0x7d, 0xba, 0x42, 0x9b, 0x1b, 0xfa, 0x93, 0xa6, 0x55, 0xa1, 0xfe, 0xde, 0xa0, + 0xe3, 0xc3, 0x78, 0x41, 0x37, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0x11, 0x59, 0x6d, 0xa8, 0x6d, 0x02, 0x00, 0x00, } diff --git a/x/feeabs/types/proposal.pb.go b/x/feeabs/types/proposal.pb.go index f5c80348..32363be3 100644 --- a/x/feeabs/types/proposal.pb.go +++ b/x/feeabs/types/proposal.pb.go @@ -238,7 +238,7 @@ var fileDescriptor_b23c77c2b5aa1f89 = []byte{ // 470 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x93, 0xbf, 0x6e, 0xd4, 0x40, 0x10, 0xc6, 0xcf, 0xe4, 0x38, 0x92, 0x4d, 0x81, 0x30, 0x47, 0x62, 0x25, 0xe0, 0x3b, 0xb9, 0xba, - 0x82, 0x78, 0x95, 0x00, 0xcd, 0x89, 0x26, 0x7f, 0x84, 0x48, 0x17, 0x99, 0x54, 0x69, 0xcc, 0xae, + 0x82, 0x78, 0x15, 0x02, 0xcd, 0x89, 0x26, 0x7f, 0x84, 0x48, 0x17, 0x99, 0x54, 0x69, 0xcc, 0xae, 0x3d, 0xf6, 0xad, 0x58, 0xef, 0x58, 0xde, 0x4d, 0x20, 0x3c, 0x01, 0x25, 0x8f, 0xc0, 0x4b, 0x50, 0xd2, 0x53, 0x5e, 0x49, 0x85, 0xd0, 0xdd, 0x1b, 0xf0, 0x04, 0x68, 0xbd, 0x06, 0x1d, 0x12, 0xa2, 0xa2, 0xa1, 0xf3, 0x37, 0xfb, 0x9b, 0xd9, 0xcf, 0xdf, 0x68, 0xc9, 0xc3, 0x02, 0x80, 0x71, 0x6d, @@ -257,15 +257,15 @@ var fileDescriptor_b23c77c2b5aa1f89 = []byte{ 0x64, 0x3d, 0xe9, 0x54, 0xf4, 0xd1, 0x23, 0x77, 0x0f, 0xf3, 0xdc, 0xfe, 0xc2, 0x05, 0x2a, 0x38, 0xeb, 0x12, 0xf5, 0x87, 0xe4, 0xa6, 0x11, 0x46, 0x82, 0x73, 0x9e, 0x38, 0xe1, 0x8f, 0xc9, 0x66, 0x0e, 0x3a, 0x6b, 0x44, 0x6d, 0x33, 0xe8, 0xcc, 0xac, 0x96, 0xfc, 0x97, 0xe4, 0xce, 0x0c, 0xb5, - 0x49, 0x33, 0x9b, 0x47, 0x9a, 0xb5, 0x51, 0xb4, 0x56, 0x36, 0x0f, 0x1e, 0xc7, 0x7f, 0xdd, 0x4f, - 0xfc, 0xc7, 0x18, 0x93, 0xdb, 0xb3, 0x9f, 0x65, 0x57, 0x98, 0xf6, 0xdf, 0x7d, 0x18, 0xf5, 0x22, - 0x4d, 0xb6, 0x4e, 0x40, 0x82, 0x81, 0x7f, 0xe6, 0x7c, 0x77, 0x75, 0x5f, 0x6b, 0xed, 0xf9, 0xaf, - 0xad, 0x74, 0x97, 0xda, 0xb0, 0x5e, 0x80, 0xf9, 0xdf, 0xc2, 0x3a, 0x3a, 0xff, 0xbc, 0x08, 0xbd, - 0xf9, 0x22, 0xf4, 0xbe, 0x2d, 0x42, 0xef, 0xfd, 0x32, 0xec, 0xcd, 0x97, 0x61, 0xef, 0xcb, 0x32, - 0xec, 0x5d, 0x4c, 0x4b, 0x61, 0x66, 0x97, 0x3c, 0xce, 0xb0, 0xa2, 0x0a, 0xed, 0x45, 0x4c, 0xee, - 0x49, 0xc6, 0x35, 0x2d, 0x00, 0xf6, 0x56, 0x9f, 0xde, 0xd5, 0x01, 0x7d, 0x43, 0x9d, 0x27, 0x6a, - 0xae, 0x6b, 0xd0, 0x7c, 0xd0, 0xbe, 0x80, 0x47, 0x3f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xee, 0x8f, - 0x0b, 0xe5, 0xa5, 0x03, 0x00, 0x00, + 0x49, 0x33, 0x9b, 0x47, 0x9a, 0xb5, 0x51, 0xb4, 0x56, 0x36, 0x1f, 0x3d, 0x8e, 0xff, 0xba, 0x9f, + 0xf8, 0x8f, 0x31, 0x26, 0xb7, 0x67, 0x3f, 0xcb, 0xae, 0x30, 0xed, 0xbf, 0xfb, 0x30, 0xea, 0x45, + 0x9a, 0x6c, 0x9d, 0x80, 0x04, 0x03, 0xff, 0xcc, 0xf9, 0xee, 0xea, 0xbe, 0xd6, 0xda, 0xf3, 0x5f, + 0x5b, 0xe9, 0x2e, 0xb5, 0x61, 0xbd, 0x00, 0xf3, 0xbf, 0x85, 0x75, 0x74, 0xfe, 0x79, 0x11, 0x7a, + 0xf3, 0x45, 0xe8, 0x7d, 0x5b, 0x84, 0xde, 0xfb, 0x65, 0xd8, 0x9b, 0x2f, 0xc3, 0xde, 0x97, 0x65, + 0xd8, 0xbb, 0x98, 0x96, 0xc2, 0xcc, 0x2e, 0x79, 0x9c, 0x61, 0x45, 0x15, 0xda, 0x8b, 0x98, 0xdc, + 0x93, 0x8c, 0x6b, 0x5a, 0x00, 0xec, 0xad, 0x3e, 0xbd, 0xab, 0x03, 0xfa, 0x86, 0x3a, 0x4f, 0xd4, + 0x5c, 0xd7, 0xa0, 0xf9, 0xa0, 0x7d, 0x01, 0x07, 0x3f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xc9, 0xea, + 0x2e, 0x64, 0xa5, 0x03, 0x00, 0x00, } func (m *HostChainFeeAbsConfig) Marshal() (dAtA []byte, err error) { diff --git a/x/feeabs/types/query.pb.go b/x/feeabs/types/query.pb.go new file mode 100644 index 00000000..cf897daa --- /dev/null +++ b/x/feeabs/types/query.pb.go @@ -0,0 +1,1718 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: feeabstraction/absfee/v1beta1/query.proto + +package types + +import ( + context "context" + fmt "fmt" + github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/gogo/protobuf/grpc" + proto "github.com/gogo/protobuf/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" + 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 + +type QueryHostChainConfigRequest struct { + IbcDenom string `protobuf:"bytes,1,opt,name=ibc_denom,json=ibcDenom,proto3" json:"ibc_denom,omitempty"` +} + +func (m *QueryHostChainConfigRequest) Reset() { *m = QueryHostChainConfigRequest{} } +func (m *QueryHostChainConfigRequest) String() string { return proto.CompactTextString(m) } +func (*QueryHostChainConfigRequest) ProtoMessage() {} +func (*QueryHostChainConfigRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_0a3dde61db3cbb0e, []int{0} +} +func (m *QueryHostChainConfigRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryHostChainConfigRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryHostChainConfigRequest.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 *QueryHostChainConfigRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryHostChainConfigRequest.Merge(m, src) +} +func (m *QueryHostChainConfigRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryHostChainConfigRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryHostChainConfigRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryHostChainConfigRequest proto.InternalMessageInfo + +func (m *QueryHostChainConfigRequest) GetIbcDenom() string { + if m != nil { + return m.IbcDenom + } + return "" +} + +type QueryHostChainConfigRespone struct { + HostChainConfig HostChainFeeAbsConfig `protobuf:"bytes,1,opt,name=host_chain_config,json=hostChainConfig,proto3" json:"host_chain_config" yaml:"host_chain_config"` +} + +func (m *QueryHostChainConfigRespone) Reset() { *m = QueryHostChainConfigRespone{} } +func (m *QueryHostChainConfigRespone) String() string { return proto.CompactTextString(m) } +func (*QueryHostChainConfigRespone) ProtoMessage() {} +func (*QueryHostChainConfigRespone) Descriptor() ([]byte, []int) { + return fileDescriptor_0a3dde61db3cbb0e, []int{1} +} +func (m *QueryHostChainConfigRespone) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryHostChainConfigRespone) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryHostChainConfigRespone.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 *QueryHostChainConfigRespone) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryHostChainConfigRespone.Merge(m, src) +} +func (m *QueryHostChainConfigRespone) XXX_Size() int { + return m.Size() +} +func (m *QueryHostChainConfigRespone) XXX_DiscardUnknown() { + xxx_messageInfo_QueryHostChainConfigRespone.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryHostChainConfigRespone proto.InternalMessageInfo + +func (m *QueryHostChainConfigRespone) GetHostChainConfig() HostChainFeeAbsConfig { + if m != nil { + return m.HostChainConfig + } + return HostChainFeeAbsConfig{} +} + +// QueryOsmosisSpotPriceRequest is the request type for the Query/Feeabs RPC +// method. +type QueryOsmosisArithmeticTwapRequest struct { + IbcDenom string `protobuf:"bytes,1,opt,name=ibc_denom,json=ibcDenom,proto3" json:"ibc_denom,omitempty"` +} + +func (m *QueryOsmosisArithmeticTwapRequest) Reset() { *m = QueryOsmosisArithmeticTwapRequest{} } +func (m *QueryOsmosisArithmeticTwapRequest) String() string { return proto.CompactTextString(m) } +func (*QueryOsmosisArithmeticTwapRequest) ProtoMessage() {} +func (*QueryOsmosisArithmeticTwapRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_0a3dde61db3cbb0e, []int{2} +} +func (m *QueryOsmosisArithmeticTwapRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryOsmosisArithmeticTwapRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryOsmosisArithmeticTwapRequest.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 *QueryOsmosisArithmeticTwapRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryOsmosisArithmeticTwapRequest.Merge(m, src) +} +func (m *QueryOsmosisArithmeticTwapRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryOsmosisArithmeticTwapRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryOsmosisArithmeticTwapRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryOsmosisArithmeticTwapRequest proto.InternalMessageInfo + +func (m *QueryOsmosisArithmeticTwapRequest) GetIbcDenom() string { + if m != nil { + return m.IbcDenom + } + return "" +} + +type QueryOsmosisArithmeticTwapResponse struct { + ArithmeticTwap github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,1,opt,name=arithmetic_twap,json=arithmeticTwap,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"arithmetic_twap" yaml:"arithmetic_twap"` +} + +func (m *QueryOsmosisArithmeticTwapResponse) Reset() { *m = QueryOsmosisArithmeticTwapResponse{} } +func (m *QueryOsmosisArithmeticTwapResponse) String() string { return proto.CompactTextString(m) } +func (*QueryOsmosisArithmeticTwapResponse) ProtoMessage() {} +func (*QueryOsmosisArithmeticTwapResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0a3dde61db3cbb0e, []int{3} +} +func (m *QueryOsmosisArithmeticTwapResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryOsmosisArithmeticTwapResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryOsmosisArithmeticTwapResponse.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 *QueryOsmosisArithmeticTwapResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryOsmosisArithmeticTwapResponse.Merge(m, src) +} +func (m *QueryOsmosisArithmeticTwapResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryOsmosisArithmeticTwapResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryOsmosisArithmeticTwapResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryOsmosisArithmeticTwapResponse proto.InternalMessageInfo + +// QueryFeeabsModuleBalacesRequest is the request type for the Query/Feeabs RPC +// method. +type QueryFeeabsModuleBalacesRequest struct { +} + +func (m *QueryFeeabsModuleBalacesRequest) Reset() { *m = QueryFeeabsModuleBalacesRequest{} } +func (m *QueryFeeabsModuleBalacesRequest) String() string { return proto.CompactTextString(m) } +func (*QueryFeeabsModuleBalacesRequest) ProtoMessage() {} +func (*QueryFeeabsModuleBalacesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_0a3dde61db3cbb0e, []int{4} +} +func (m *QueryFeeabsModuleBalacesRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryFeeabsModuleBalacesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryFeeabsModuleBalacesRequest.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 *QueryFeeabsModuleBalacesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryFeeabsModuleBalacesRequest.Merge(m, src) +} +func (m *QueryFeeabsModuleBalacesRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryFeeabsModuleBalacesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryFeeabsModuleBalacesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryFeeabsModuleBalacesRequest proto.InternalMessageInfo + +type QueryFeeabsModuleBalacesResponse struct { + Balances github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=balances,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"balances" yaml:"balances"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` +} + +func (m *QueryFeeabsModuleBalacesResponse) Reset() { *m = QueryFeeabsModuleBalacesResponse{} } +func (m *QueryFeeabsModuleBalacesResponse) String() string { return proto.CompactTextString(m) } +func (*QueryFeeabsModuleBalacesResponse) ProtoMessage() {} +func (*QueryFeeabsModuleBalacesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0a3dde61db3cbb0e, []int{5} +} +func (m *QueryFeeabsModuleBalacesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryFeeabsModuleBalacesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryFeeabsModuleBalacesResponse.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 *QueryFeeabsModuleBalacesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryFeeabsModuleBalacesResponse.Merge(m, src) +} +func (m *QueryFeeabsModuleBalacesResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryFeeabsModuleBalacesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryFeeabsModuleBalacesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryFeeabsModuleBalacesResponse proto.InternalMessageInfo + +func (m *QueryFeeabsModuleBalacesResponse) GetBalances() github_com_cosmos_cosmos_sdk_types.Coins { + if m != nil { + return m.Balances + } + return nil +} + +func (m *QueryFeeabsModuleBalacesResponse) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +type AllQueryHostChainConfigRequest struct { +} + +func (m *AllQueryHostChainConfigRequest) Reset() { *m = AllQueryHostChainConfigRequest{} } +func (m *AllQueryHostChainConfigRequest) String() string { return proto.CompactTextString(m) } +func (*AllQueryHostChainConfigRequest) ProtoMessage() {} +func (*AllQueryHostChainConfigRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_0a3dde61db3cbb0e, []int{6} +} +func (m *AllQueryHostChainConfigRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AllQueryHostChainConfigRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AllQueryHostChainConfigRequest.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 *AllQueryHostChainConfigRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_AllQueryHostChainConfigRequest.Merge(m, src) +} +func (m *AllQueryHostChainConfigRequest) XXX_Size() int { + return m.Size() +} +func (m *AllQueryHostChainConfigRequest) XXX_DiscardUnknown() { + xxx_messageInfo_AllQueryHostChainConfigRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_AllQueryHostChainConfigRequest proto.InternalMessageInfo + +type AllQueryHostChainConfigRespone struct { + AllHostChainConfig []HostChainFeeAbsConfig `protobuf:"bytes,1,rep,name=all_host_chain_config,json=allHostChainConfig,proto3" json:"all_host_chain_config" yaml:"all_host_chain_config"` +} + +func (m *AllQueryHostChainConfigRespone) Reset() { *m = AllQueryHostChainConfigRespone{} } +func (m *AllQueryHostChainConfigRespone) String() string { return proto.CompactTextString(m) } +func (*AllQueryHostChainConfigRespone) ProtoMessage() {} +func (*AllQueryHostChainConfigRespone) Descriptor() ([]byte, []int) { + return fileDescriptor_0a3dde61db3cbb0e, []int{7} +} +func (m *AllQueryHostChainConfigRespone) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AllQueryHostChainConfigRespone) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AllQueryHostChainConfigRespone.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 *AllQueryHostChainConfigRespone) XXX_Merge(src proto.Message) { + xxx_messageInfo_AllQueryHostChainConfigRespone.Merge(m, src) +} +func (m *AllQueryHostChainConfigRespone) XXX_Size() int { + return m.Size() +} +func (m *AllQueryHostChainConfigRespone) XXX_DiscardUnknown() { + xxx_messageInfo_AllQueryHostChainConfigRespone.DiscardUnknown(m) +} + +var xxx_messageInfo_AllQueryHostChainConfigRespone proto.InternalMessageInfo + +func (m *AllQueryHostChainConfigRespone) GetAllHostChainConfig() []HostChainFeeAbsConfig { + if m != nil { + return m.AllHostChainConfig + } + return nil +} + +func init() { + proto.RegisterType((*QueryHostChainConfigRequest)(nil), "feeabstraction.absfee.v1beta1.QueryHostChainConfigRequest") + proto.RegisterType((*QueryHostChainConfigRespone)(nil), "feeabstraction.absfee.v1beta1.QueryHostChainConfigRespone") + proto.RegisterType((*QueryOsmosisArithmeticTwapRequest)(nil), "feeabstraction.absfee.v1beta1.QueryOsmosisArithmeticTwapRequest") + proto.RegisterType((*QueryOsmosisArithmeticTwapResponse)(nil), "feeabstraction.absfee.v1beta1.QueryOsmosisArithmeticTwapResponse") + proto.RegisterType((*QueryFeeabsModuleBalacesRequest)(nil), "feeabstraction.absfee.v1beta1.QueryFeeabsModuleBalacesRequest") + proto.RegisterType((*QueryFeeabsModuleBalacesResponse)(nil), "feeabstraction.absfee.v1beta1.QueryFeeabsModuleBalacesResponse") + proto.RegisterType((*AllQueryHostChainConfigRequest)(nil), "feeabstraction.absfee.v1beta1.AllQueryHostChainConfigRequest") + proto.RegisterType((*AllQueryHostChainConfigRespone)(nil), "feeabstraction.absfee.v1beta1.AllQueryHostChainConfigRespone") +} + +func init() { + proto.RegisterFile("feeabstraction/absfee/v1beta1/query.proto", fileDescriptor_0a3dde61db3cbb0e) +} + +var fileDescriptor_0a3dde61db3cbb0e = []byte{ + // 757 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0xcf, 0x4f, 0xdb, 0x48, + 0x18, 0xcd, 0x80, 0x96, 0x85, 0x41, 0xda, 0x68, 0x47, 0xb0, 0xca, 0x06, 0xd6, 0x09, 0xa3, 0x55, + 0x45, 0x11, 0xb6, 0x4b, 0xe8, 0x01, 0x45, 0x2a, 0xcd, 0x0f, 0x84, 0xb8, 0x54, 0x55, 0x23, 0x4e, + 0xbd, 0x44, 0x63, 0x67, 0x92, 0x58, 0x9d, 0x78, 0x4c, 0xc6, 0x81, 0xd2, 0xaa, 0x17, 0xee, 0x95, + 0x2a, 0xf5, 0xd0, 0x7b, 0x8f, 0x3d, 0xf5, 0xd8, 0x3f, 0x01, 0x89, 0x1e, 0x90, 0x7a, 0x69, 0x7b, + 0x48, 0x2b, 0xe0, 0x2f, 0xe0, 0x2f, 0xa8, 0x3c, 0xe3, 0x04, 0x12, 0x82, 0x13, 0xa5, 0xa7, 0xc4, + 0x9a, 0xf7, 0xbd, 0xef, 0xbd, 0xef, 0x7b, 0x1e, 0xc3, 0xbb, 0x55, 0x4a, 0x89, 0x25, 0xfc, 0x26, + 0xb1, 0x7d, 0x87, 0xbb, 0x26, 0xb1, 0x44, 0x95, 0x52, 0x73, 0x7f, 0xcd, 0xa2, 0x3e, 0x59, 0x33, + 0xf7, 0x5a, 0xb4, 0x79, 0x68, 0x78, 0x4d, 0xee, 0x73, 0xf4, 0x5f, 0x2f, 0xd4, 0x50, 0x50, 0x23, + 0x84, 0x26, 0xe7, 0x6a, 0xbc, 0xc6, 0x25, 0xd2, 0x0c, 0xfe, 0xa9, 0xa2, 0xe4, 0x62, 0x8d, 0xf3, + 0x1a, 0xa3, 0x26, 0xf1, 0x1c, 0x93, 0xb8, 0x2e, 0xf7, 0x49, 0x50, 0x2b, 0xc2, 0xd3, 0x95, 0xe8, + 0xee, 0x1e, 0x69, 0x92, 0x46, 0x07, 0x6b, 0x44, 0x63, 0xb9, 0x68, 0x70, 0xe1, 0x08, 0xc7, 0xb2, + 0x43, 0xfc, 0xea, 0x10, 0xee, 0x26, 0xf7, 0xb8, 0x20, 0x2c, 0x44, 0x6b, 0xb6, 0x24, 0x30, 0x2d, + 0x22, 0xae, 0x30, 0x36, 0x77, 0x5c, 0x75, 0x8e, 0xb3, 0x70, 0xe1, 0x49, 0x30, 0x8b, 0x1d, 0x2e, + 0xfc, 0x62, 0x9d, 0x38, 0x6e, 0x91, 0xbb, 0x55, 0xa7, 0x56, 0xa2, 0x7b, 0x2d, 0x2a, 0x7c, 0xb4, + 0x00, 0x67, 0x1c, 0xcb, 0x2e, 0x57, 0xa8, 0xcb, 0x1b, 0x09, 0x90, 0x06, 0xcb, 0x33, 0xa5, 0x69, + 0xc7, 0xb2, 0xb7, 0x82, 0x67, 0xfc, 0x1e, 0xdc, 0x56, 0x2c, 0x3c, 0xee, 0x52, 0x74, 0x04, 0xe0, + 0xdf, 0x75, 0x2e, 0xfc, 0xb2, 0x1d, 0x9c, 0x95, 0x6d, 0x79, 0x28, 0x59, 0x66, 0x33, 0xf7, 0x8d, + 0xc8, 0xa9, 0x1b, 0x5d, 0xca, 0x6d, 0x4a, 0xf3, 0x96, 0x50, 0xc4, 0x85, 0xf4, 0x71, 0x3b, 0x15, + 0xbb, 0x6c, 0xa7, 0x12, 0x87, 0xa4, 0xc1, 0xb2, 0xf8, 0x06, 0x39, 0x2e, 0xc5, 0xeb, 0xbd, 0x5a, + 0x70, 0x0e, 0x2e, 0x49, 0x8d, 0x8f, 0xd5, 0x1c, 0xf3, 0x4d, 0xc7, 0xaf, 0x37, 0xa8, 0xef, 0xd8, + 0xbb, 0x07, 0xc4, 0x1b, 0xc9, 0xe6, 0x3b, 0x00, 0x71, 0x14, 0x45, 0x60, 0x56, 0x50, 0xb4, 0x07, + 0xe3, 0xa4, 0x7b, 0x52, 0xf6, 0x0f, 0x88, 0xa7, 0x98, 0x0a, 0x3b, 0x81, 0xe8, 0xef, 0xed, 0xd4, + 0x9d, 0x9a, 0xe3, 0xd7, 0x5b, 0x96, 0x61, 0xf3, 0x86, 0x19, 0x6e, 0x45, 0xfd, 0xe8, 0xa2, 0xf2, + 0xcc, 0xf4, 0x0f, 0x3d, 0x2a, 0x8c, 0x2d, 0x6a, 0x5f, 0xb6, 0x53, 0xff, 0x28, 0x7b, 0x7d, 0x74, + 0xb8, 0xf4, 0x17, 0xe9, 0x69, 0x8d, 0x97, 0x60, 0x4a, 0x0a, 0xdb, 0x96, 0xa3, 0x7c, 0xc4, 0x2b, + 0x2d, 0x46, 0x0b, 0x84, 0x11, 0x9b, 0x8a, 0xd0, 0x19, 0xfe, 0x04, 0x60, 0xfa, 0x76, 0x4c, 0x28, + 0xfd, 0x05, 0x9c, 0xb6, 0x08, 0x23, 0xae, 0x4d, 0x45, 0x02, 0xa4, 0x27, 0x97, 0x67, 0x33, 0xff, + 0x1a, 0x4a, 0x9a, 0x11, 0xe4, 0xa6, 0xbb, 0x94, 0x22, 0x77, 0xdc, 0x42, 0x31, 0xdc, 0x41, 0x5c, + 0x89, 0xec, 0x14, 0xe2, 0x0f, 0x3f, 0x52, 0xcb, 0x23, 0x38, 0x0c, 0x38, 0x44, 0xa9, 0xdb, 0x0f, + 0x25, 0xe0, 0x9f, 0xa4, 0x52, 0x69, 0x52, 0x21, 0x12, 0x13, 0x72, 0xf0, 0x9d, 0x47, 0x9c, 0x86, + 0x5a, 0x9e, 0xb1, 0x88, 0x74, 0xe2, 0x8f, 0x20, 0x02, 0xa2, 0x32, 0xf8, 0x1a, 0xc0, 0x79, 0xc2, + 0x58, 0x79, 0x50, 0x0e, 0x27, 0xc7, 0xce, 0xe1, 0xff, 0xe1, 0x0c, 0x16, 0xc3, 0x45, 0x0d, 0x6a, + 0x80, 0x4b, 0x88, 0x30, 0xd6, 0x27, 0x2b, 0xf3, 0x6d, 0x0a, 0xfe, 0x21, 0xf5, 0xa2, 0x0b, 0x00, + 0xe7, 0x07, 0x26, 0x0a, 0xe5, 0x86, 0x68, 0x1a, 0x9a, 0xe7, 0x64, 0xfe, 0x37, 0x18, 0x54, 0x26, + 0xf0, 0xf6, 0xd1, 0x97, 0x8b, 0xb7, 0x13, 0x39, 0xb4, 0x69, 0x56, 0x29, 0xd5, 0xaf, 0x5f, 0x38, + 0x8a, 0xda, 0xdc, 0xef, 0xde, 0x4d, 0xfa, 0x55, 0x2c, 0xf5, 0x20, 0xa8, 0xe6, 0xcb, 0xee, 0xcb, + 0xf4, 0x0a, 0x9d, 0x00, 0x38, 0xd7, 0x9f, 0x3d, 0xb9, 0xf8, 0xcd, 0x51, 0x34, 0xde, 0x9e, 0xec, + 0xe4, 0xc3, 0xb1, 0xeb, 0x43, 0x87, 0x19, 0xe9, 0x70, 0x15, 0xad, 0x44, 0x38, 0x6c, 0xc8, 0x4a, + 0xbd, 0x9b, 0xd6, 0x13, 0x00, 0xe3, 0x7d, 0x2b, 0x45, 0xd9, 0x51, 0x84, 0x0c, 0x4e, 0x70, 0x72, + 0xbc, 0x5a, 0x19, 0x6d, 0x9c, 0x93, 0xfa, 0xb3, 0x68, 0x23, 0x42, 0x7f, 0x90, 0x4a, 0x5d, 0xa6, + 0x52, 0x57, 0xa9, 0xec, 0xd9, 0xcd, 0x67, 0x00, 0x51, 0xfe, 0x46, 0x46, 0xd1, 0x83, 0x21, 0xa2, + 0xa2, 0xdf, 0xca, 0xe4, 0xd8, 0xe5, 0xca, 0xd6, 0x86, 0xb4, 0x95, 0x41, 0xf7, 0x22, 0x6c, 0x11, + 0xc6, 0xf4, 0x1b, 0xd6, 0x0a, 0xbb, 0xc7, 0x67, 0x1a, 0x38, 0x3d, 0xd3, 0xc0, 0xcf, 0x33, 0x0d, + 0xbc, 0x39, 0xd7, 0x62, 0xa7, 0xe7, 0x5a, 0xec, 0xeb, 0xb9, 0x16, 0x7b, 0x9a, 0xbd, 0x76, 0x31, + 0xb9, 0x3c, 0x20, 0x23, 0x4c, 0x67, 0x01, 0x59, 0x7f, 0x8f, 0xfd, 0x75, 0xf3, 0x79, 0xa7, 0x91, + 0xbc, 0xb0, 0xac, 0x29, 0xf9, 0xa1, 0x5c, 0xff, 0x15, 0x00, 0x00, 0xff, 0xff, 0x72, 0x90, 0x0f, + 0x6d, 0x52, 0x08, 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 + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type QueryClient interface { + // OsmosisSpotPrice return spot price of pair Osmo/nativeToken + OsmosisArithmeticTwap(ctx context.Context, in *QueryOsmosisArithmeticTwapRequest, opts ...grpc.CallOption) (*QueryOsmosisArithmeticTwapResponse, error) + // FeeabsModuleBalances return total balances of feeabs module + FeeabsModuleBalances(ctx context.Context, in *QueryFeeabsModuleBalacesRequest, opts ...grpc.CallOption) (*QueryFeeabsModuleBalacesResponse, error) + HostChainConfig(ctx context.Context, in *QueryHostChainConfigRequest, opts ...grpc.CallOption) (*QueryHostChainConfigRespone, error) + AllHostChainConfig(ctx context.Context, in *AllQueryHostChainConfigRequest, opts ...grpc.CallOption) (*AllQueryHostChainConfigRespone, error) +} + +type queryClient struct { + cc grpc1.ClientConn +} + +func NewQueryClient(cc grpc1.ClientConn) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) OsmosisArithmeticTwap(ctx context.Context, in *QueryOsmosisArithmeticTwapRequest, opts ...grpc.CallOption) (*QueryOsmosisArithmeticTwapResponse, error) { + out := new(QueryOsmosisArithmeticTwapResponse) + err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Query/OsmosisArithmeticTwap", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) FeeabsModuleBalances(ctx context.Context, in *QueryFeeabsModuleBalacesRequest, opts ...grpc.CallOption) (*QueryFeeabsModuleBalacesResponse, error) { + out := new(QueryFeeabsModuleBalacesResponse) + err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Query/FeeabsModuleBalances", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) HostChainConfig(ctx context.Context, in *QueryHostChainConfigRequest, opts ...grpc.CallOption) (*QueryHostChainConfigRespone, error) { + out := new(QueryHostChainConfigRespone) + err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Query/HostChainConfig", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) AllHostChainConfig(ctx context.Context, in *AllQueryHostChainConfigRequest, opts ...grpc.CallOption) (*AllQueryHostChainConfigRespone, error) { + out := new(AllQueryHostChainConfigRespone) + err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Query/AllHostChainConfig", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +type QueryServer interface { + // OsmosisSpotPrice return spot price of pair Osmo/nativeToken + OsmosisArithmeticTwap(context.Context, *QueryOsmosisArithmeticTwapRequest) (*QueryOsmosisArithmeticTwapResponse, error) + // FeeabsModuleBalances return total balances of feeabs module + FeeabsModuleBalances(context.Context, *QueryFeeabsModuleBalacesRequest) (*QueryFeeabsModuleBalacesResponse, error) + HostChainConfig(context.Context, *QueryHostChainConfigRequest) (*QueryHostChainConfigRespone, error) + AllHostChainConfig(context.Context, *AllQueryHostChainConfigRequest) (*AllQueryHostChainConfigRespone, error) +} + +// UnimplementedQueryServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (*UnimplementedQueryServer) OsmosisArithmeticTwap(ctx context.Context, req *QueryOsmosisArithmeticTwapRequest) (*QueryOsmosisArithmeticTwapResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method OsmosisArithmeticTwap not implemented") +} +func (*UnimplementedQueryServer) FeeabsModuleBalances(ctx context.Context, req *QueryFeeabsModuleBalacesRequest) (*QueryFeeabsModuleBalacesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method FeeabsModuleBalances not implemented") +} +func (*UnimplementedQueryServer) HostChainConfig(ctx context.Context, req *QueryHostChainConfigRequest) (*QueryHostChainConfigRespone, error) { + return nil, status.Errorf(codes.Unimplemented, "method HostChainConfig not implemented") +} +func (*UnimplementedQueryServer) AllHostChainConfig(ctx context.Context, req *AllQueryHostChainConfigRequest) (*AllQueryHostChainConfigRespone, error) { + return nil, status.Errorf(codes.Unimplemented, "method AllHostChainConfig not implemented") +} + +func RegisterQueryServer(s grpc1.Server, srv QueryServer) { + s.RegisterService(&_Query_serviceDesc, srv) +} + +func _Query_OsmosisArithmeticTwap_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryOsmosisArithmeticTwapRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).OsmosisArithmeticTwap(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/feeabstraction.absfee.v1beta1.Query/OsmosisArithmeticTwap", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).OsmosisArithmeticTwap(ctx, req.(*QueryOsmosisArithmeticTwapRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_FeeabsModuleBalances_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryFeeabsModuleBalacesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).FeeabsModuleBalances(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/feeabstraction.absfee.v1beta1.Query/FeeabsModuleBalances", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).FeeabsModuleBalances(ctx, req.(*QueryFeeabsModuleBalacesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_HostChainConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryHostChainConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).HostChainConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/feeabstraction.absfee.v1beta1.Query/HostChainConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).HostChainConfig(ctx, req.(*QueryHostChainConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_AllHostChainConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AllQueryHostChainConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).AllHostChainConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/feeabstraction.absfee.v1beta1.Query/AllHostChainConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).AllHostChainConfig(ctx, req.(*AllQueryHostChainConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Query_serviceDesc = grpc.ServiceDesc{ + ServiceName: "feeabstraction.absfee.v1beta1.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "OsmosisArithmeticTwap", + Handler: _Query_OsmosisArithmeticTwap_Handler, + }, + { + MethodName: "FeeabsModuleBalances", + Handler: _Query_FeeabsModuleBalances_Handler, + }, + { + MethodName: "HostChainConfig", + Handler: _Query_HostChainConfig_Handler, + }, + { + MethodName: "AllHostChainConfig", + Handler: _Query_AllHostChainConfig_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "feeabstraction/absfee/v1beta1/query.proto", +} + +func (m *QueryHostChainConfigRequest) 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 *QueryHostChainConfigRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryHostChainConfigRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.IbcDenom) > 0 { + i -= len(m.IbcDenom) + copy(dAtA[i:], m.IbcDenom) + i = encodeVarintQuery(dAtA, i, uint64(len(m.IbcDenom))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryHostChainConfigRespone) 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 *QueryHostChainConfigRespone) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryHostChainConfigRespone) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.HostChainConfig.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryOsmosisArithmeticTwapRequest) 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 *QueryOsmosisArithmeticTwapRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryOsmosisArithmeticTwapRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.IbcDenom) > 0 { + i -= len(m.IbcDenom) + copy(dAtA[i:], m.IbcDenom) + i = encodeVarintQuery(dAtA, i, uint64(len(m.IbcDenom))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryOsmosisArithmeticTwapResponse) 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 *QueryOsmosisArithmeticTwapResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryOsmosisArithmeticTwapResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.ArithmeticTwap.Size() + i -= size + if _, err := m.ArithmeticTwap.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryFeeabsModuleBalacesRequest) 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 *QueryFeeabsModuleBalacesRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryFeeabsModuleBalacesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryFeeabsModuleBalacesResponse) 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 *QueryFeeabsModuleBalacesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryFeeabsModuleBalacesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0x12 + } + if len(m.Balances) > 0 { + for iNdEx := len(m.Balances) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Balances[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *AllQueryHostChainConfigRequest) 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 *AllQueryHostChainConfigRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AllQueryHostChainConfigRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *AllQueryHostChainConfigRespone) 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 *AllQueryHostChainConfigRespone) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AllQueryHostChainConfigRespone) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.AllHostChainConfig) > 0 { + for iNdEx := len(m.AllHostChainConfig) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.AllHostChainConfig[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *QueryHostChainConfigRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.IbcDenom) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryHostChainConfigRespone) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.HostChainConfig.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryOsmosisArithmeticTwapRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.IbcDenom) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryOsmosisArithmeticTwapResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ArithmeticTwap.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryFeeabsModuleBalacesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryFeeabsModuleBalacesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Balances) > 0 { + for _, e := range m.Balances { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + l = len(m.Address) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *AllQueryHostChainConfigRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *AllQueryHostChainConfigRespone) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.AllHostChainConfig) > 0 { + for _, e := range m.AllHostChainConfig { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryHostChainConfigRequest) 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 ErrIntOverflowQuery + } + 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: QueryHostChainConfigRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryHostChainConfigRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IbcDenom", 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.IbcDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryHostChainConfigRespone) 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 ErrIntOverflowQuery + } + 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: QueryHostChainConfigRespone: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryHostChainConfigRespone: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostChainConfig", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.HostChainConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryOsmosisArithmeticTwapRequest) 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 ErrIntOverflowQuery + } + 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: QueryOsmosisArithmeticTwapRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryOsmosisArithmeticTwapRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IbcDenom", 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.IbcDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryOsmosisArithmeticTwapResponse) 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 ErrIntOverflowQuery + } + 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: QueryOsmosisArithmeticTwapResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryOsmosisArithmeticTwapResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ArithmeticTwap", 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 + } + if err := m.ArithmeticTwap.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryFeeabsModuleBalacesRequest) 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 ErrIntOverflowQuery + } + 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: QueryFeeabsModuleBalacesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryFeeabsModuleBalacesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryFeeabsModuleBalacesResponse) 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 ErrIntOverflowQuery + } + 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: QueryFeeabsModuleBalacesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryFeeabsModuleBalacesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Balances", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Balances = append(m.Balances, types.Coin{}) + if err := m.Balances[len(m.Balances)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", 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.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AllQueryHostChainConfigRequest) 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 ErrIntOverflowQuery + } + 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: AllQueryHostChainConfigRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AllQueryHostChainConfigRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AllQueryHostChainConfigRespone) 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 ErrIntOverflowQuery + } + 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: AllQueryHostChainConfigRespone: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AllQueryHostChainConfigRespone: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AllHostChainConfig", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AllHostChainConfig = append(m.AllHostChainConfig, HostChainFeeAbsConfig{}) + if err := m.AllHostChainConfig[len(m.AllHostChainConfig)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipQuery(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, ErrIntOverflowQuery + } + 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, ErrIntOverflowQuery + } + 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, ErrIntOverflowQuery + } + 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, ErrInvalidLengthQuery + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupQuery + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthQuery + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/feeabs/types/tx.pb.go b/x/feeabs/types/tx.pb.go new file mode 100644 index 00000000..c5eda118 --- /dev/null +++ b/x/feeabs/types/tx.pb.go @@ -0,0 +1,1316 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: feeabstraction/absfee/v1beta1/tx.proto + +package types + +import ( + context "context" + fmt "fmt" + github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/query" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/gogo/protobuf/grpc" + proto "github.com/gogo/protobuf/proto" + _ "github.com/gogo/protobuf/types" + _ "google.golang.org/genproto/googleapis/api/annotations" + 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 + +// Msg fund module account +type MsgFundFeeAbsModuleAccount struct { + FromAddress string `protobuf:"bytes,1,opt,name=from_address,json=fromAddress,proto3" json:"from_address,omitempty"` + Amount github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,2,rep,name=amount,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"amount" yaml:"amount"` +} + +func (m *MsgFundFeeAbsModuleAccount) Reset() { *m = MsgFundFeeAbsModuleAccount{} } +func (m *MsgFundFeeAbsModuleAccount) String() string { return proto.CompactTextString(m) } +func (*MsgFundFeeAbsModuleAccount) ProtoMessage() {} +func (*MsgFundFeeAbsModuleAccount) Descriptor() ([]byte, []int) { + return fileDescriptor_84c172c34645b936, []int{0} +} +func (m *MsgFundFeeAbsModuleAccount) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgFundFeeAbsModuleAccount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgFundFeeAbsModuleAccount.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 *MsgFundFeeAbsModuleAccount) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgFundFeeAbsModuleAccount.Merge(m, src) +} +func (m *MsgFundFeeAbsModuleAccount) XXX_Size() int { + return m.Size() +} +func (m *MsgFundFeeAbsModuleAccount) XXX_DiscardUnknown() { + xxx_messageInfo_MsgFundFeeAbsModuleAccount.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgFundFeeAbsModuleAccount proto.InternalMessageInfo + +func (m *MsgFundFeeAbsModuleAccount) GetFromAddress() string { + if m != nil { + return m.FromAddress + } + return "" +} + +func (m *MsgFundFeeAbsModuleAccount) GetAmount() github_com_cosmos_cosmos_sdk_types.Coins { + if m != nil { + return m.Amount + } + return nil +} + +type MsgFundFeeAbsModuleAccountResponse struct { +} + +func (m *MsgFundFeeAbsModuleAccountResponse) Reset() { *m = MsgFundFeeAbsModuleAccountResponse{} } +func (m *MsgFundFeeAbsModuleAccountResponse) String() string { return proto.CompactTextString(m) } +func (*MsgFundFeeAbsModuleAccountResponse) ProtoMessage() {} +func (*MsgFundFeeAbsModuleAccountResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_84c172c34645b936, []int{1} +} +func (m *MsgFundFeeAbsModuleAccountResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgFundFeeAbsModuleAccountResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgFundFeeAbsModuleAccountResponse.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 *MsgFundFeeAbsModuleAccountResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgFundFeeAbsModuleAccountResponse.Merge(m, src) +} +func (m *MsgFundFeeAbsModuleAccountResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgFundFeeAbsModuleAccountResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgFundFeeAbsModuleAccountResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgFundFeeAbsModuleAccountResponse proto.InternalMessageInfo + +// Params defines the parameters for the feeabs module. +type MsgSendQueryIbcDenomTWAP struct { + FromAddress string `protobuf:"bytes,1,opt,name=from_address,json=fromAddress,proto3" json:"from_address,omitempty"` +} + +func (m *MsgSendQueryIbcDenomTWAP) Reset() { *m = MsgSendQueryIbcDenomTWAP{} } +func (m *MsgSendQueryIbcDenomTWAP) String() string { return proto.CompactTextString(m) } +func (*MsgSendQueryIbcDenomTWAP) ProtoMessage() {} +func (*MsgSendQueryIbcDenomTWAP) Descriptor() ([]byte, []int) { + return fileDescriptor_84c172c34645b936, []int{2} +} +func (m *MsgSendQueryIbcDenomTWAP) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSendQueryIbcDenomTWAP) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSendQueryIbcDenomTWAP.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 *MsgSendQueryIbcDenomTWAP) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSendQueryIbcDenomTWAP.Merge(m, src) +} +func (m *MsgSendQueryIbcDenomTWAP) XXX_Size() int { + return m.Size() +} +func (m *MsgSendQueryIbcDenomTWAP) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSendQueryIbcDenomTWAP.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSendQueryIbcDenomTWAP proto.InternalMessageInfo + +func (m *MsgSendQueryIbcDenomTWAP) GetFromAddress() string { + if m != nil { + return m.FromAddress + } + return "" +} + +type MsgSendQueryIbcDenomTWAPResponse struct { +} + +func (m *MsgSendQueryIbcDenomTWAPResponse) Reset() { *m = MsgSendQueryIbcDenomTWAPResponse{} } +func (m *MsgSendQueryIbcDenomTWAPResponse) String() string { return proto.CompactTextString(m) } +func (*MsgSendQueryIbcDenomTWAPResponse) ProtoMessage() {} +func (*MsgSendQueryIbcDenomTWAPResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_84c172c34645b936, []int{3} +} +func (m *MsgSendQueryIbcDenomTWAPResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSendQueryIbcDenomTWAPResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSendQueryIbcDenomTWAPResponse.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 *MsgSendQueryIbcDenomTWAPResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSendQueryIbcDenomTWAPResponse.Merge(m, src) +} +func (m *MsgSendQueryIbcDenomTWAPResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgSendQueryIbcDenomTWAPResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSendQueryIbcDenomTWAPResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSendQueryIbcDenomTWAPResponse proto.InternalMessageInfo + +// Params defines the parameters for the feeabs module. +type MsgSwapCrossChain struct { + FromAddress string `protobuf:"bytes,1,opt,name=from_address,json=fromAddress,proto3" json:"from_address,omitempty"` + IbcDenom string `protobuf:"bytes,2,opt,name=ibc_denom,json=ibcDenom,proto3" json:"ibc_denom,omitempty"` +} + +func (m *MsgSwapCrossChain) Reset() { *m = MsgSwapCrossChain{} } +func (m *MsgSwapCrossChain) String() string { return proto.CompactTextString(m) } +func (*MsgSwapCrossChain) ProtoMessage() {} +func (*MsgSwapCrossChain) Descriptor() ([]byte, []int) { + return fileDescriptor_84c172c34645b936, []int{4} +} +func (m *MsgSwapCrossChain) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSwapCrossChain) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSwapCrossChain.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 *MsgSwapCrossChain) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSwapCrossChain.Merge(m, src) +} +func (m *MsgSwapCrossChain) XXX_Size() int { + return m.Size() +} +func (m *MsgSwapCrossChain) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSwapCrossChain.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSwapCrossChain proto.InternalMessageInfo + +func (m *MsgSwapCrossChain) GetFromAddress() string { + if m != nil { + return m.FromAddress + } + return "" +} + +func (m *MsgSwapCrossChain) GetIbcDenom() string { + if m != nil { + return m.IbcDenom + } + return "" +} + +type MsgSwapCrossChainResponse struct { +} + +func (m *MsgSwapCrossChainResponse) Reset() { *m = MsgSwapCrossChainResponse{} } +func (m *MsgSwapCrossChainResponse) String() string { return proto.CompactTextString(m) } +func (*MsgSwapCrossChainResponse) ProtoMessage() {} +func (*MsgSwapCrossChainResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_84c172c34645b936, []int{5} +} +func (m *MsgSwapCrossChainResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSwapCrossChainResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSwapCrossChainResponse.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 *MsgSwapCrossChainResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSwapCrossChainResponse.Merge(m, src) +} +func (m *MsgSwapCrossChainResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgSwapCrossChainResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSwapCrossChainResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSwapCrossChainResponse proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MsgFundFeeAbsModuleAccount)(nil), "feeabstraction.absfee.v1beta1.MsgFundFeeAbsModuleAccount") + proto.RegisterType((*MsgFundFeeAbsModuleAccountResponse)(nil), "feeabstraction.absfee.v1beta1.MsgFundFeeAbsModuleAccountResponse") + proto.RegisterType((*MsgSendQueryIbcDenomTWAP)(nil), "feeabstraction.absfee.v1beta1.MsgSendQueryIbcDenomTWAP") + proto.RegisterType((*MsgSendQueryIbcDenomTWAPResponse)(nil), "feeabstraction.absfee.v1beta1.MsgSendQueryIbcDenomTWAPResponse") + proto.RegisterType((*MsgSwapCrossChain)(nil), "feeabstraction.absfee.v1beta1.MsgSwapCrossChain") + proto.RegisterType((*MsgSwapCrossChainResponse)(nil), "feeabstraction.absfee.v1beta1.MsgSwapCrossChainResponse") +} + +func init() { + proto.RegisterFile("feeabstraction/absfee/v1beta1/tx.proto", fileDescriptor_84c172c34645b936) +} + +var fileDescriptor_84c172c34645b936 = []byte{ + // 542 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x4d, 0x6e, 0xd3, 0x40, + 0x14, 0x8e, 0x1b, 0xa9, 0xa2, 0x53, 0x40, 0x22, 0x02, 0x91, 0xba, 0xe0, 0x04, 0x0b, 0xa1, 0x80, + 0x14, 0x0f, 0x6d, 0x17, 0x40, 0x25, 0x84, 0xdc, 0xa0, 0x4a, 0x2c, 0x22, 0x41, 0x5a, 0x09, 0x89, + 0x4d, 0x35, 0x63, 0x4f, 0x1c, 0x8b, 0x78, 0x9e, 0xf1, 0x1b, 0x97, 0x46, 0xe2, 0x10, 0xb0, 0xe2, + 0x0e, 0xec, 0x58, 0x70, 0x87, 0x2e, 0xbb, 0x64, 0x55, 0x50, 0x72, 0x03, 0x4e, 0x80, 0xfc, 0x17, + 0xa5, 0x80, 0x43, 0xda, 0x95, 0xed, 0x99, 0xef, 0xef, 0x3d, 0xbf, 0x19, 0x72, 0xaf, 0x2f, 0x04, + 0xe3, 0xa8, 0x22, 0xe6, 0x28, 0x1f, 0x24, 0x65, 0x1c, 0xfb, 0x42, 0xd0, 0xc3, 0x0d, 0x2e, 0x14, + 0xdb, 0xa0, 0xea, 0xc8, 0x0a, 0x23, 0x50, 0x50, 0xbb, 0x7d, 0x16, 0x67, 0x65, 0x38, 0x2b, 0xc7, + 0xe9, 0xd7, 0x3d, 0xf0, 0x20, 0x45, 0xd2, 0xe4, 0x2d, 0x23, 0xe9, 0xb7, 0x3c, 0x00, 0x6f, 0x28, + 0x28, 0x0b, 0x7d, 0xca, 0xa4, 0x04, 0xc5, 0x12, 0x2e, 0xe6, 0xbb, 0x0f, 0x1c, 0xc0, 0x00, 0x90, + 0x72, 0x86, 0x82, 0xbe, 0x8b, 0x45, 0x34, 0x9a, 0xda, 0x86, 0xcc, 0xf3, 0x65, 0x0a, 0x2e, 0xb0, + 0xf3, 0x63, 0x86, 0x2c, 0x62, 0x41, 0xa1, 0x7b, 0x7f, 0x3e, 0x56, 0x84, 0xe0, 0x0c, 0x72, 0xa8, + 0x31, 0x1b, 0xa1, 0x00, 0x38, 0xe0, 0x17, 0xb6, 0x8d, 0xbc, 0x80, 0xf4, 0x8b, 0xc7, 0x7d, 0xaa, + 0xfc, 0x40, 0xa0, 0x62, 0x41, 0x98, 0x01, 0xcc, 0x6f, 0x1a, 0xd1, 0xbb, 0xe8, 0xed, 0xc6, 0xd2, + 0xdd, 0x15, 0xc2, 0xe6, 0xd8, 0x05, 0x37, 0x1e, 0x0a, 0xdb, 0x71, 0x20, 0x96, 0xaa, 0x76, 0x87, + 0x5c, 0xee, 0x47, 0x10, 0x1c, 0x30, 0xd7, 0x8d, 0x04, 0x62, 0x5d, 0x6b, 0x6a, 0xad, 0x95, 0xde, + 0x6a, 0xb2, 0x66, 0x67, 0x4b, 0x35, 0x45, 0x96, 0x59, 0x90, 0x80, 0xeb, 0x4b, 0xcd, 0x6a, 0x6b, + 0x75, 0x73, 0xcd, 0xca, 0x32, 0x59, 0x49, 0xa6, 0xa2, 0xbf, 0x56, 0x07, 0x7c, 0xb9, 0x63, 0x1f, + 0x9f, 0x36, 0x2a, 0xbf, 0x4e, 0x1b, 0x57, 0x46, 0x2c, 0x18, 0x6e, 0x9b, 0x19, 0xcd, 0xfc, 0xf2, + 0xa3, 0xd1, 0xf2, 0x7c, 0x35, 0x88, 0xb9, 0xe5, 0x40, 0x40, 0xf3, 0x8a, 0xb2, 0x47, 0x1b, 0xdd, + 0xb7, 0x54, 0x8d, 0x42, 0x81, 0xa9, 0x02, 0xf6, 0x72, 0x2f, 0xf3, 0x2e, 0x31, 0xcb, 0x63, 0xf7, + 0x04, 0x86, 0x20, 0x51, 0x98, 0x4f, 0x49, 0xbd, 0x8b, 0xde, 0x9e, 0x90, 0xee, 0xab, 0xe4, 0xf7, + 0xbc, 0xe0, 0xce, 0x73, 0x21, 0x21, 0xd8, 0x7f, 0x6d, 0xbf, 0x5c, 0xa0, 0x34, 0xd3, 0x24, 0xcd, + 0x32, 0xfa, 0xd4, 0x62, 0x8f, 0x5c, 0x4b, 0x30, 0xef, 0x59, 0xd8, 0x89, 0x00, 0xb1, 0x33, 0x60, + 0xbe, 0x5c, 0xa4, 0x6d, 0xeb, 0x64, 0xc5, 0xe7, 0xce, 0x81, 0x9b, 0x08, 0xd6, 0x97, 0xd2, 0xfd, + 0x4b, 0x7e, 0x6e, 0x60, 0xae, 0x93, 0xb5, 0xbf, 0x44, 0x0b, 0xc7, 0xcd, 0xaf, 0x55, 0x52, 0xed, + 0xa2, 0x57, 0xfb, 0xa4, 0x91, 0x1b, 0xff, 0x2e, 0xed, 0x91, 0x35, 0x77, 0xd8, 0xad, 0xb2, 0xa2, + 0xf4, 0x67, 0x17, 0x24, 0x16, 0xd9, 0x6a, 0x1f, 0xc8, 0xd5, 0x3f, 0x5a, 0xf1, 0x70, 0x01, 0xc9, + 0x33, 0x0c, 0xfd, 0xf1, 0x79, 0x19, 0x53, 0xf7, 0xcf, 0x1a, 0xb9, 0x59, 0x36, 0xc9, 0x4f, 0xfe, + 0xaf, 0x5a, 0x42, 0xd5, 0xed, 0x0b, 0x53, 0x8b, 0x64, 0x3b, 0xfb, 0xc7, 0x63, 0x43, 0x3b, 0x19, + 0x1b, 0xda, 0xcf, 0xb1, 0xa1, 0x7d, 0x9c, 0x18, 0x95, 0x93, 0x89, 0x51, 0xf9, 0x3e, 0x31, 0x2a, + 0x6f, 0xb6, 0x67, 0x46, 0x5f, 0x42, 0x22, 0xcf, 0x86, 0xed, 0x21, 0xe3, 0x48, 0xfb, 0x42, 0xb4, + 0x67, 0xaf, 0x81, 0xc3, 0x2d, 0x7a, 0x44, 0xb3, 0x24, 0xd9, 0x91, 0xe0, 0xcb, 0xe9, 0x19, 0xde, + 0xfa, 0x1d, 0x00, 0x00, 0xff, 0xff, 0xb9, 0xd9, 0x04, 0x66, 0x04, 0x05, 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 { + SendQueryIbcDenomTWAP(ctx context.Context, in *MsgSendQueryIbcDenomTWAP, opts ...grpc.CallOption) (*MsgSendQueryIbcDenomTWAPResponse, error) + SwapCrossChain(ctx context.Context, in *MsgSwapCrossChain, opts ...grpc.CallOption) (*MsgSwapCrossChainResponse, error) + FundFeeAbsModuleAccount(ctx context.Context, in *MsgFundFeeAbsModuleAccount, opts ...grpc.CallOption) (*MsgFundFeeAbsModuleAccountResponse, error) +} + +type msgClient struct { + cc grpc1.ClientConn +} + +func NewMsgClient(cc grpc1.ClientConn) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) SendQueryIbcDenomTWAP(ctx context.Context, in *MsgSendQueryIbcDenomTWAP, opts ...grpc.CallOption) (*MsgSendQueryIbcDenomTWAPResponse, error) { + out := new(MsgSendQueryIbcDenomTWAPResponse) + err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Msg/SendQueryIbcDenomTWAP", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) SwapCrossChain(ctx context.Context, in *MsgSwapCrossChain, opts ...grpc.CallOption) (*MsgSwapCrossChainResponse, error) { + out := new(MsgSwapCrossChainResponse) + err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Msg/SwapCrossChain", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) FundFeeAbsModuleAccount(ctx context.Context, in *MsgFundFeeAbsModuleAccount, opts ...grpc.CallOption) (*MsgFundFeeAbsModuleAccountResponse, error) { + out := new(MsgFundFeeAbsModuleAccountResponse) + err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Msg/FundFeeAbsModuleAccount", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +type MsgServer interface { + SendQueryIbcDenomTWAP(context.Context, *MsgSendQueryIbcDenomTWAP) (*MsgSendQueryIbcDenomTWAPResponse, error) + SwapCrossChain(context.Context, *MsgSwapCrossChain) (*MsgSwapCrossChainResponse, error) + FundFeeAbsModuleAccount(context.Context, *MsgFundFeeAbsModuleAccount) (*MsgFundFeeAbsModuleAccountResponse, error) +} + +// UnimplementedMsgServer can be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (*UnimplementedMsgServer) SendQueryIbcDenomTWAP(ctx context.Context, req *MsgSendQueryIbcDenomTWAP) (*MsgSendQueryIbcDenomTWAPResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SendQueryIbcDenomTWAP not implemented") +} +func (*UnimplementedMsgServer) SwapCrossChain(ctx context.Context, req *MsgSwapCrossChain) (*MsgSwapCrossChainResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SwapCrossChain not implemented") +} +func (*UnimplementedMsgServer) FundFeeAbsModuleAccount(ctx context.Context, req *MsgFundFeeAbsModuleAccount) (*MsgFundFeeAbsModuleAccountResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method FundFeeAbsModuleAccount not implemented") +} + +func RegisterMsgServer(s grpc1.Server, srv MsgServer) { + s.RegisterService(&_Msg_serviceDesc, srv) +} + +func _Msg_SendQueryIbcDenomTWAP_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgSendQueryIbcDenomTWAP) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).SendQueryIbcDenomTWAP(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/feeabstraction.absfee.v1beta1.Msg/SendQueryIbcDenomTWAP", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).SendQueryIbcDenomTWAP(ctx, req.(*MsgSendQueryIbcDenomTWAP)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_SwapCrossChain_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgSwapCrossChain) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).SwapCrossChain(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/feeabstraction.absfee.v1beta1.Msg/SwapCrossChain", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).SwapCrossChain(ctx, req.(*MsgSwapCrossChain)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_FundFeeAbsModuleAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgFundFeeAbsModuleAccount) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).FundFeeAbsModuleAccount(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/feeabstraction.absfee.v1beta1.Msg/FundFeeAbsModuleAccount", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).FundFeeAbsModuleAccount(ctx, req.(*MsgFundFeeAbsModuleAccount)) + } + return interceptor(ctx, in, info, handler) +} + +var _Msg_serviceDesc = grpc.ServiceDesc{ + ServiceName: "feeabstraction.absfee.v1beta1.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "SendQueryIbcDenomTWAP", + Handler: _Msg_SendQueryIbcDenomTWAP_Handler, + }, + { + MethodName: "SwapCrossChain", + Handler: _Msg_SwapCrossChain_Handler, + }, + { + MethodName: "FundFeeAbsModuleAccount", + Handler: _Msg_FundFeeAbsModuleAccount_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "feeabstraction/absfee/v1beta1/tx.proto", +} + +func (m *MsgFundFeeAbsModuleAccount) 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 *MsgFundFeeAbsModuleAccount) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgFundFeeAbsModuleAccount) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Amount) > 0 { + for iNdEx := len(m.Amount) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Amount[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if len(m.FromAddress) > 0 { + i -= len(m.FromAddress) + copy(dAtA[i:], m.FromAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.FromAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgFundFeeAbsModuleAccountResponse) 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 *MsgFundFeeAbsModuleAccountResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgFundFeeAbsModuleAccountResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgSendQueryIbcDenomTWAP) 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 *MsgSendQueryIbcDenomTWAP) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSendQueryIbcDenomTWAP) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.FromAddress) > 0 { + i -= len(m.FromAddress) + copy(dAtA[i:], m.FromAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.FromAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgSendQueryIbcDenomTWAPResponse) 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 *MsgSendQueryIbcDenomTWAPResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSendQueryIbcDenomTWAPResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgSwapCrossChain) 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 *MsgSwapCrossChain) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSwapCrossChain) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.IbcDenom) > 0 { + i -= len(m.IbcDenom) + copy(dAtA[i:], m.IbcDenom) + i = encodeVarintTx(dAtA, i, uint64(len(m.IbcDenom))) + i-- + dAtA[i] = 0x12 + } + if len(m.FromAddress) > 0 { + i -= len(m.FromAddress) + copy(dAtA[i:], m.FromAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.FromAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgSwapCrossChainResponse) 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 *MsgSwapCrossChainResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSwapCrossChainResponse) 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 *MsgFundFeeAbsModuleAccount) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.FromAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if len(m.Amount) > 0 { + for _, e := range m.Amount { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } + return n +} + +func (m *MsgFundFeeAbsModuleAccountResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgSendQueryIbcDenomTWAP) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.FromAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgSendQueryIbcDenomTWAPResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgSwapCrossChain) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.FromAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.IbcDenom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgSwapCrossChainResponse) 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 *MsgFundFeeAbsModuleAccount) 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: MsgFundFeeAbsModuleAccount: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgFundFeeAbsModuleAccount: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FromAddress", 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.FromAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", 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 + } + m.Amount = append(m.Amount, types.Coin{}) + if err := m.Amount[len(m.Amount)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgFundFeeAbsModuleAccountResponse) 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: MsgFundFeeAbsModuleAccountResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgFundFeeAbsModuleAccountResponse: 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) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgSendQueryIbcDenomTWAP) 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: MsgSendQueryIbcDenomTWAP: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSendQueryIbcDenomTWAP: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FromAddress", 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.FromAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgSendQueryIbcDenomTWAPResponse) 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: MsgSendQueryIbcDenomTWAPResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSendQueryIbcDenomTWAPResponse: 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) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgSwapCrossChain) 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: MsgSwapCrossChain: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSwapCrossChain: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FromAddress", 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.FromAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IbcDenom", 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.IbcDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgSwapCrossChainResponse) 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: MsgSwapCrossChainResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSwapCrossChainResponse: 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) || (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/feeabs/types/tx.pb.gw.go b/x/feeabs/types/tx.pb.gw.go new file mode 100644 index 00000000..c374b335 --- /dev/null +++ b/x/feeabs/types/tx.pb.gw.go @@ -0,0 +1,337 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: feeabstraction/absfee/v1beta1/tx.proto + +/* +Package types is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package types + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage +var _ = metadata.Join + +var ( + filter_Msg_SendQueryIbcDenomTWAP_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Msg_SendQueryIbcDenomTWAP_0(ctx context.Context, marshaler runtime.Marshaler, client MsgClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq MsgSendQueryIbcDenomTWAP + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Msg_SendQueryIbcDenomTWAP_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.SendQueryIbcDenomTWAP(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Msg_SendQueryIbcDenomTWAP_0(ctx context.Context, marshaler runtime.Marshaler, server MsgServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq MsgSendQueryIbcDenomTWAP + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Msg_SendQueryIbcDenomTWAP_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SendQueryIbcDenomTWAP(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Msg_SwapCrossChain_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Msg_SwapCrossChain_0(ctx context.Context, marshaler runtime.Marshaler, client MsgClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq MsgSwapCrossChain + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Msg_SwapCrossChain_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.SwapCrossChain(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Msg_SwapCrossChain_0(ctx context.Context, marshaler runtime.Marshaler, server MsgServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq MsgSwapCrossChain + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Msg_SwapCrossChain_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SwapCrossChain(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Msg_FundFeeAbsModuleAccount_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Msg_FundFeeAbsModuleAccount_0(ctx context.Context, marshaler runtime.Marshaler, client MsgClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq MsgFundFeeAbsModuleAccount + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Msg_FundFeeAbsModuleAccount_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.FundFeeAbsModuleAccount(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Msg_FundFeeAbsModuleAccount_0(ctx context.Context, marshaler runtime.Marshaler, server MsgServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq MsgFundFeeAbsModuleAccount + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Msg_FundFeeAbsModuleAccount_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.FundFeeAbsModuleAccount(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterMsgHandlerServer registers the http handlers for service Msg to "mux". +// UnaryRPC :call MsgServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterMsgHandlerFromEndpoint instead. +func RegisterMsgHandlerServer(ctx context.Context, mux *runtime.ServeMux, server MsgServer) error { + + mux.Handle("GET", pattern_Msg_SendQueryIbcDenomTWAP_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Msg_SendQueryIbcDenomTWAP_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Msg_SendQueryIbcDenomTWAP_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Msg_SwapCrossChain_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Msg_SwapCrossChain_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Msg_SwapCrossChain_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Msg_FundFeeAbsModuleAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Msg_FundFeeAbsModuleAccount_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Msg_FundFeeAbsModuleAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterMsgHandlerFromEndpoint is same as RegisterMsgHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterMsgHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterMsgHandler(ctx, mux, conn) +} + +// RegisterMsgHandler registers the http handlers for service Msg to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterMsgHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterMsgHandlerClient(ctx, mux, NewMsgClient(conn)) +} + +// RegisterMsgHandlerClient registers the http handlers for service Msg +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "MsgClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "MsgClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "MsgClient" to call the correct interceptors. +func RegisterMsgHandlerClient(ctx context.Context, mux *runtime.ServeMux, client MsgClient) error { + + mux.Handle("GET", pattern_Msg_SendQueryIbcDenomTWAP_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Msg_SendQueryIbcDenomTWAP_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Msg_SendQueryIbcDenomTWAP_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Msg_SwapCrossChain_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Msg_SwapCrossChain_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Msg_SwapCrossChain_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Msg_FundFeeAbsModuleAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Msg_FundFeeAbsModuleAccount_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Msg_FundFeeAbsModuleAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Msg_SendQueryIbcDenomTWAP_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"feeabs", "ibc_denom_twap"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_Msg_SwapCrossChain_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"feeabs", "swap_crosschain"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_Msg_FundFeeAbsModuleAccount_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"feeabs", "fund_feeabs_moduleacc"}, "", runtime.AssumeColonVerbOpt(true))) +) + +var ( + forward_Msg_SendQueryIbcDenomTWAP_0 = runtime.ForwardResponseMessage + + forward_Msg_SwapCrossChain_0 = runtime.ForwardResponseMessage + + forward_Msg_FundFeeAbsModuleAccount_0 = runtime.ForwardResponseMessage +) From c8d47530c5b5639779df26864c65529555af4f9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=E1=BA=A1m=20Anh=20Minh?= <1phamminh0811@gmail.com> Date: Thu, 25 May 2023 11:38:39 +0700 Subject: [PATCH 04/90] update version to v4 --- ante/ante_test.go | 4 +- ante/fee_test.go | 2 +- app/ante.go | 4 +- app/app.go | 8 +- app/encoding.go | 2 +- app/helpers/test_helpers.go | 4 +- app/sim_test.go | 4 +- app/test_access.go | 2 +- cmd/feeappd/cmd/root.go | 4 +- cmd/feeappd/cmd/root_test.go | 4 +- cmd/feeappd/cmd/testnet.go | 2 +- cmd/feeappd/main.go | 6 +- go.mod | 5 +- go.sum | 696 ----------------------------- scripts/protocgen.sh | 2 +- x/feeabs/ante/decorate.go | 4 +- x/feeabs/client/cli/query.go | 2 +- x/feeabs/client/cli/tx.go | 2 +- x/feeabs/client/cli/tx_test.go | 2 +- x/feeabs/client/cli/util.go | 2 +- x/feeabs/ibc_module.go | 4 +- x/feeabs/ibctesting/chain.go | 5 +- x/feeabs/ibctesting/wasm.go | 2 +- x/feeabs/keeper/abci.go | 2 +- x/feeabs/keeper/config.go | 2 +- x/feeabs/keeper/epoch.go | 2 +- x/feeabs/keeper/exchange_rate.go | 2 +- x/feeabs/keeper/genesis.go | 2 +- x/feeabs/keeper/genesis_test.go | 4 +- x/feeabs/keeper/grpc_query.go | 2 +- x/feeabs/keeper/grpc_query_test.go | 2 +- x/feeabs/keeper/host_zone_test.go | 6 +- x/feeabs/keeper/ibc.go | 2 +- x/feeabs/keeper/keeper.go | 4 +- x/feeabs/keeper/keeper_test.go | 8 +- x/feeabs/keeper/msgserver.go | 2 +- x/feeabs/keeper/proposal.go | 2 +- x/feeabs/keeper/proposal_test.go | 4 +- x/feeabs/module.go | 6 +- x/feeabs/proposal_handler.go | 8 +- x/feeabs/relay_test.go | 2 +- x/feeabs/types/build_memo_test.go | 2 +- x/feeabs/types/osmosisibc.pb.go | 2 +- 43 files changed, 72 insertions(+), 766 deletions(-) diff --git a/ante/ante_test.go b/ante/ante_test.go index a86dfaf8..91b770e0 100644 --- a/ante/ante_test.go +++ b/ante/ante_test.go @@ -16,8 +16,8 @@ import ( xauthsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" "github.com/stretchr/testify/suite" - "github.com/notional-labs/fee-abstraction/v3/app" - apphelpers "github.com/notional-labs/fee-abstraction/v3/app/helpers" + "github.com/notional-labs/fee-abstraction/v4/app" + apphelpers "github.com/notional-labs/fee-abstraction/v4/app/helpers" ) type IntegrationTestSuite struct { diff --git a/ante/fee_test.go b/ante/fee_test.go index d3a7aceb..452887d0 100644 --- a/ante/fee_test.go +++ b/ante/fee_test.go @@ -7,7 +7,7 @@ import ( ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - "github.com/notional-labs/fee-abstraction/v3/ante" + "github.com/notional-labs/fee-abstraction/v4/ante" ) func (s *IntegrationTestSuite) TestMempoolFeeDecorator() { diff --git a/app/ante.go b/app/ante.go index 4645ea2e..886c347e 100644 --- a/app/ante.go +++ b/app/ante.go @@ -7,8 +7,8 @@ import ( ibcante "github.com/cosmos/ibc-go/v7/modules/core/ante" ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" - feeabsante "github.com/notional-labs/fee-abstraction/v3/x/feeabs/ante" - feeabskeeper "github.com/notional-labs/fee-abstraction/v3/x/feeabs/keeper" + feeabsante "github.com/notional-labs/fee-abstraction/v4/x/feeabs/ante" + feeabskeeper "github.com/notional-labs/fee-abstraction/v4/x/feeabs/keeper" ) // HandlerOptions extends the SDK's AnteHandler options by requiring the IBC diff --git a/app/app.go b/app/app.go index d2e7157d..efb8d5ab 100644 --- a/app/app.go +++ b/app/app.go @@ -112,15 +112,15 @@ import ( "github.com/rakyll/statik/fs" "github.com/spf13/cast" - feeabsmodule "github.com/notional-labs/fee-abstraction/v3/x/feeabs" - feeabskeeper "github.com/notional-labs/fee-abstraction/v3/x/feeabs/keeper" - feeabstypes "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" + feeabsmodule "github.com/notional-labs/fee-abstraction/v4/x/feeabs" + feeabskeeper "github.com/notional-labs/fee-abstraction/v4/x/feeabs/keeper" + feeabstypes "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" "github.com/strangelove-ventures/packet-forward-middleware/v7/router" routerkeeper "github.com/strangelove-ventures/packet-forward-middleware/v7/router/keeper" routertypes "github.com/strangelove-ventures/packet-forward-middleware/v7/router/types" - appparams "github.com/notional-labs/fee-abstraction/v3/app/params" + appparams "github.com/notional-labs/fee-abstraction/v4/app/params" // unnamed import of statik for swagger UI support _ "github.com/cosmos/cosmos-sdk/client/docs/statik" diff --git a/app/encoding.go b/app/encoding.go index b8a18ba4..89597ecd 100644 --- a/app/encoding.go +++ b/app/encoding.go @@ -1,7 +1,7 @@ package app import ( - "github.com/notional-labs/fee-abstraction/v3/app/params" + "github.com/notional-labs/fee-abstraction/v4/app/params" "github.com/cosmos/cosmos-sdk/std" ) diff --git a/app/helpers/test_helpers.go b/app/helpers/test_helpers.go index 2cdd5d15..6fabf05e 100644 --- a/app/helpers/test_helpers.go +++ b/app/helpers/test_helpers.go @@ -20,12 +20,12 @@ import ( tmrand "github.com/cometbft/cometbft/libs/rand" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" tmtypes "github.com/cometbft/cometbft/types" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" "github.com/stretchr/testify/require" "github.com/CosmWasm/wasmd/x/wasm" sdk "github.com/cosmos/cosmos-sdk/types" - feeapp "github.com/notional-labs/fee-abstraction/v3/app" + feeapp "github.com/notional-labs/fee-abstraction/v4/app" ) // SimAppChainID hardcoded chainID for simulation diff --git a/app/sim_test.go b/app/sim_test.go index 4e6aca6b..989bc6e2 100644 --- a/app/sim_test.go +++ b/app/sim_test.go @@ -6,12 +6,12 @@ import ( "os" "testing" - feeapp "github.com/notional-labs/fee-abstraction/v3/app" + feeapp "github.com/notional-labs/fee-abstraction/v4/app" dbm "github.com/cometbft/cometbft-db" "github.com/cometbft/cometbft/libs/log" "github.com/cometbft/cometbft/libs/rand" - "github.com/notional-labs/fee-abstraction/v3/app/helpers" + "github.com/notional-labs/fee-abstraction/v4/app/helpers" "github.com/stretchr/testify/require" "github.com/CosmWasm/wasmd/x/wasm" diff --git a/app/test_access.go b/app/test_access.go index 0118239c..5ab2360d 100644 --- a/app/test_access.go +++ b/app/test_access.go @@ -5,7 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/keeper" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/keeper" "github.com/CosmWasm/wasmd/app/params" diff --git a/cmd/feeappd/cmd/root.go b/cmd/feeappd/cmd/root.go index 00ee393e..8014218e 100644 --- a/cmd/feeappd/cmd/root.go +++ b/cmd/feeappd/cmd/root.go @@ -41,8 +41,8 @@ import ( "github.com/CosmWasm/wasmd/x/wasm" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" - feeapp "github.com/notional-labs/fee-abstraction/v3/app" - "github.com/notional-labs/fee-abstraction/v3/app/params" + feeapp "github.com/notional-labs/fee-abstraction/v4/app" + "github.com/notional-labs/fee-abstraction/v4/app/params" ) // NewRootCmd creates a new root command for simd. It is called once in the diff --git a/cmd/feeappd/cmd/root_test.go b/cmd/feeappd/cmd/root_test.go index 972416eb..63cdd34e 100644 --- a/cmd/feeappd/cmd/root_test.go +++ b/cmd/feeappd/cmd/root_test.go @@ -6,8 +6,8 @@ import ( svrcmd "github.com/cosmos/cosmos-sdk/server/cmd" "github.com/stretchr/testify/require" - app "github.com/notional-labs/fee-abstraction/v3/app" - "github.com/notional-labs/fee-abstraction/v3/cmd/feeappd/cmd" + app "github.com/notional-labs/fee-abstraction/v4/app" + "github.com/notional-labs/fee-abstraction/v4/cmd/feeappd/cmd" ) func TestRootCmdConfig(t *testing.T) { diff --git a/cmd/feeappd/cmd/testnet.go b/cmd/feeappd/cmd/testnet.go index 5fef4607..a732e011 100644 --- a/cmd/feeappd/cmd/testnet.go +++ b/cmd/feeappd/cmd/testnet.go @@ -36,7 +36,7 @@ import ( ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - "github.com/notional-labs/fee-abstraction/v3/app/params" + "github.com/notional-labs/fee-abstraction/v4/app/params" ) var ( diff --git a/cmd/feeappd/main.go b/cmd/feeappd/main.go index 9c3ded0e..6b65a2e8 100644 --- a/cmd/feeappd/main.go +++ b/cmd/feeappd/main.go @@ -6,9 +6,9 @@ import ( "github.com/cosmos/cosmos-sdk/server" svrcmd "github.com/cosmos/cosmos-sdk/server/cmd" - app "github.com/notional-labs/fee-abstraction/v3/app" - "github.com/notional-labs/fee-abstraction/v3/app/params" - "github.com/notional-labs/fee-abstraction/v3/cmd/feeappd/cmd" + app "github.com/notional-labs/fee-abstraction/v4/app" + "github.com/notional-labs/fee-abstraction/v4/app/params" + "github.com/notional-labs/fee-abstraction/v4/cmd/feeappd/cmd" ) func main() { diff --git a/go.mod b/go.mod index 8ba97606..dfee578b 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/notional-labs/fee-abstraction/v3 +module github.com/notional-labs/fee-abstraction/v4 go 1.18 @@ -21,7 +21,6 @@ require ( github.com/spf13/cobra v1.6.1 github.com/strangelove-ventures/packet-forward-middleware/v7 v7.0.0 github.com/stretchr/testify v1.8.2 - github.com/tendermint/tendermint v0.35.9 google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 google.golang.org/grpc v1.54.0 ) @@ -46,7 +45,6 @@ require ( github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect - github.com/btcsuite/btcd v0.22.1 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect github.com/cenkalti/backoff/v4 v4.1.3 // indirect github.com/cespare/xxhash v1.1.0 // indirect @@ -128,7 +126,6 @@ require ( github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mtibben/percent v0.2.1 // indirect - github.com/oasisprotocol/curve25519-voi v0.0.0-20210609091139-0a56a4bca00b // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/pelletier/go-toml/v2 v2.0.6 // indirect github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d // indirect diff --git a/go.sum b/go.sum index aaf88030..cc7d6a98 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,3 @@ -4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= -bitbucket.org/creachadair/shell v0.0.6/go.mod h1:8Qqi/cYk7vPnsOePHroKXDJYmb5x7ENhtiFtfZq8K+M= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -14,7 +12,6 @@ cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6 cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.60.0/go.mod h1:yw2G51M9IfRboUH61Us8GqCeF1PzPblB823Mn2q2eAU= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= @@ -30,7 +27,6 @@ cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aD cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM= cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= @@ -104,7 +100,6 @@ cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1 cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= -cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= @@ -147,7 +142,6 @@ cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2k cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/pubsub v1.5.0/go.mod h1:ZEwJccE3z93Z2HWvstpri00jOg7oO4UZDtKhwDwqF0w= cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= @@ -170,7 +164,6 @@ cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyW cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= -cloud.google.com/go/spanner v1.7.0/go.mod h1:sd3K2gZ9Fd0vMPLXzeCrF6fq4i63Q7aTLW/lBIfBkIk= cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= @@ -195,7 +188,6 @@ cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xX cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= -contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= @@ -213,17 +205,8 @@ filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= -github.com/Antonboom/errname v0.1.7/go.mod h1:g0ONh16msHIPgJSGsecu1G/dcF2hlYR/0SddnIAGavU= -github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= -github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0/go.mod h1:HcM1YX14R7CJcghJGOYCgdezslRSVzqwLf/q+4Y2r/0= -github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= @@ -231,78 +214,40 @@ github.com/CosmWasm/wasmd v0.40.0-rc.0 h1:QhJzLSWQCjUjrEPO2dc61WgafnaxetuKZRBHUf github.com/CosmWasm/wasmd v0.40.0-rc.0/go.mod h1:9MispMuIWmjs6HlgRx+XPLfOD0y1k7iQx5KIE2cNGTc= github.com/CosmWasm/wasmvm v1.2.1 h1:si0tRsRDdUShV0k51Wn6zRKlmj3/WWP9Yr4cLmDTf+8= github.com/CosmWasm/wasmvm v1.2.1/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= -github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= -github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= -github.com/GaijinEntertainment/go-exhaustruct/v2 v2.2.0/go.mod h1:n/vLeA7V+QY84iYAGwMkkUUp9ooeuftMEvaDrSVch+Q= -github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= -github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= -github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= -github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= -github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/OpenPeeDeeP/depguard v1.1.0/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/Workiva/go-datastructures v1.0.53/go.mod h1:1yZL+zfsztete+ePzZz/Zb1/t5BnDuE2Ya2MMGhzP6A= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= -github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alecthomas/participle/v2 v2.0.0-alpha7 h1:cK4vjj0VSgb3lN1nuKA5F7dw+1s1pWBe5bx7nNCnN+c= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= -github.com/alingse/asasalint v0.0.10/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I= -github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= -github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= -github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= -github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/ashanbrown/forbidigo v1.3.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= -github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.36.30/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= -github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/aws/aws-sdk-go v1.44.203 h1:pcsP805b9acL3wUqa4JR2vg1k2wnItkDYNvfmcy6F+U= github.com/aws/aws-sdk-go v1.44.203/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= -github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= -github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -312,50 +257,22 @@ github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s= github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= -github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= -github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= -github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A= -github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c= -github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/bufbuild/buf v1.3.1/go.mod h1:CTRUb23N+zlm1U8ZIBKz0Sqluk++qQloB2i/MZNZHIs= -github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= -github.com/chavacava/garif v0.0.0-20220316182200-5cad0b5181d4/go.mod h1:W8EnPSQ8Nv4fUjc/v1/8tHFqhuOJXnRub0dTfuAQktU= -github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM= @@ -366,10 +283,8 @@ github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObk github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04= github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= -github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= -github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= @@ -381,7 +296,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/apd/v3 v3.1.0 h1:MK3Ow7LH0W8zkd5GMKA1PvS9qG3bWFI95WaVNfyZJ/w= @@ -395,19 +309,12 @@ github.com/cometbft/cometbft-db v0.7.0 h1:uBjbrBx4QzU0zOEnU8KxoDl18dMNgDh+zZRUE0 github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= -github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= -github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190620071333-e64a0ec8b42a/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= github.com/cosmos/cosmos-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= @@ -436,38 +343,22 @@ github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzU github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creachadair/atomicfile v0.2.6/go.mod h1:BRq8Une6ckFneYXZQ+kO7p1ZZP3I2fzVzf28JxrIkBc= -github.com/creachadair/command v0.0.0-20220426235536-a748effdf6a1/go.mod h1:bAM+qFQb/KwWyCc9MLC4U1jvn3XyakqP5QRkds5T6cY= -github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= -github.com/creachadair/tomledit v0.0.22/go.mod h1:cIu/4x5L855oSRejIqr+WRFh+mv9g4fWLiUFaApYn/Y= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cucumber/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= -github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= -github.com/daixiang0/gci v0.4.2/go.mod h1:d0f+IJhr9loBtIq+ebwhRoTt1LGbPH96ih8bKlsRT9E= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= -github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= -github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= -github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= -github.com/denisenkom/go-mssqldb v0.12.0/go.mod h1:iiK0YP1ZeepvmBQk/QpLEhhTNJgfzrpArPY/aFvc9yU= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= -github.com/dgraph-io/badger/v2 v2.2007.2/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= @@ -477,16 +368,9 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= -github.com/docker/cli v20.10.14+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/cli v20.10.17+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v20.10.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.17+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= @@ -507,53 +391,29 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= -github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= -github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= -github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= -github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= -github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= -github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= -github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= -github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/firefart/nonamedreturns v1.0.4/go.mod h1:TDhe/tjI1BXo48CmYbUduTV7BdIga8MAO/xbKdcVsGI= -github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= -github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= -github.com/franela/goblin v0.0.0-20210519012713-85d372ac71e2/go.mod h1:VzmDKDJVZI3aJmnRI9VjAn9nJ8qPPsN1fqzr9dqInIo= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= -github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= -github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= -github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= -github.com/go-critic/go-critic v0.6.3/go.mod h1:c6b3ZP1MQ7o6lPR7Rv3lEf7pYQUmAcx8ABHgdZCQt/k= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -562,17 +422,13 @@ github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= @@ -580,24 +436,9 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87 github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= -github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= -github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= -github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= -github.com/go-toolsmith/astequal v1.0.1/go.mod h1:4oGA3EZXTVItV/ipGiOx7NWkY5veFfcsOJVS2YxltLw= -github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= -github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= -github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5/go.mod h1:3NAwwmD4uY/yggRxoEjk/S00MIV3A+H7rrE3i87eYxM= -github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= -github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= -github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= -github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= -github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= @@ -607,19 +448,11 @@ github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/E github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= -github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= -github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188/go.mod h1:vXjM/+wXQnTPR4KqTKDgJukSZ6amVRtWMPEjE6sQoK8= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= @@ -639,7 +472,6 @@ github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71 github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -661,26 +493,13 @@ github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= -github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= -github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ= -github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= -github.com/golangci/golangci-lint v1.47.0/go.mod h1:3TZhfF5KolbIkXYjUFvER6G9CoxzLEaafr/u/QI1S5A= -github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= -github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= -github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= -github.com/golangci/revgrep v0.0.0-20210930125155-c22e5001d4f2/go.mod h1:LK+zW4MpyytAWQRz0M4xnzEk50lSvqDQKfx304apFkY= -github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= -github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -715,7 +534,6 @@ github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= @@ -727,11 +545,7 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -github.com/google/trillian v1.3.11/go.mod h1:0tPraVHrSDkA3BO6vKX67zgLXs6SsOAbHEivX+9mPgw= -github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -753,11 +567,7 @@ github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1Yu github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/gookit/color v1.5.1/go.mod h1:wZFzea4X8qN6vHOSP2apMb4/+w/orMznEzYsIHPaqKM= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= -github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= -github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= @@ -769,27 +579,12 @@ github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= -github.com/gostaticanalysis/analysisutil v0.4.1/go.mod h1:18U/DLpRgIUd459wGxVHE0fRgmo1UgHDcbw7F5idXu0= -github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= -github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= -github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= -github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= -github.com/gostaticanalysis/forcetypeassert v0.1.0/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= -github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= -github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= -github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Repi5x3CuviD3dgAZaBU= -github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= -github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= @@ -800,11 +595,7 @@ github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/b github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= -github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= -github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= @@ -812,20 +603,13 @@ github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9n github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-getter v1.7.0 h1:bzrYP+qu/gMrL1au7/aDvkoOVGUJpeKBgbqRHACAFDY= github.com/hashicorp/go-getter v1.7.0/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= -github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= @@ -834,49 +618,31 @@ github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= -github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= -github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= -github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= -github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c= github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= -github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= -github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= github.com/iancoleman/orderedmap v0.2.0 h1:sq1N/TFpYH++aViPcaKjys3bDClUEU7s5B+z6jq8pNA= github.com/iancoleman/orderedmap v0.2.0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA= -github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= @@ -884,17 +650,7 @@ github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLf github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a/go.mod h1:Zi/ZFkEqFHTm7qkjyNJjaWH4LQA9LQhGJyF0lTYGpxw= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= -github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f/go.mod h1:qr2b5kx4HbFS7/g4uYO5qv9ei8303JMsC7ESbYiqr2Q= -github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSnpuG7toUTG4= -github.com/jhump/protoreflect v1.11.1-0.20220213155251-0c2aedc66cf4/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b h1:izTof8BKh/nE1wrKOrloNA5q4odOarjf+Xpe+4qow98= -github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= -github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -902,142 +658,72 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGw github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= -github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jonboulle/clockwork v0.2.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= -github.com/josharian/txtarfs v0.0.0-20210218200122-0702f000015a/go.mod h1:izVPOvVRsHiKkeGCT6tYBNWyDVuzj9wAaBb5R9qamfw= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= -github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/errcheck v1.6.1/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kulti/thelper v0.6.3/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= -github.com/kunwardeep/paralleltest v1.0.6/go.mod h1:Y0Y0XISdZM5IKm3TREQMZ6iteqn1YuwCsJO/0kL9Zes= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= -github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= -github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= -github.com/letsencrypt/pkcs11key/v4 v4.0.0/go.mod h1:EFUvBDay26dErnNb70Nd0/VW3tJiIbETBPTl9ATXQag= -github.com/lib/pq v0.0.0-20180327071824-d34b9ff171c2/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= -github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= -github.com/maratori/testpackage v1.1.0/go.mod h1:PeAhzU8qkCwdGEMTEupsHJNlQu2gZopMC6RjbhmHeDc= -github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= -github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= -github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= -github.com/mgechev/revive v1.2.1/go.mod h1:+Ro3wqY4vakcYNtkBWdZC7dBg1xSB6sp054wWwmeFm0= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= -github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= -github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= -github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= -github.com/miekg/pkcs11 v1.0.2/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= -github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 h1:QRUSJEgZn2Snx0EmT/QLXibWjSUDjKWvXIT19NBVp94= github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= @@ -1045,16 +731,8 @@ github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS4 github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= -github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= -github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -1062,152 +740,84 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= -github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= -github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= -github.com/mozilla/scribe v0.0.0-20180711195314-fb71baf557c1/go.mod h1:FIczTrinKo8VaLxe6PWTPEXRXDIHz2QAwiaBaP5/4a8= -github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= -github.com/mroth/weightedrand v0.4.1/go.mod h1:3p2SIcC8al1YMzGhAIoXD+r9olo/g/cdJgAD905gyNE= -github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-proto-validators v0.0.0-20180403085117-0950a7990007/go.mod h1:m2XC9Qq0AlmmVksL6FktJCdTYyLk7V3fKyp0sl1yWQo= -github.com/mwitkow/go-proto-validators v0.2.0/go.mod h1:ZfA1hW+UH/2ZHOWvQ3HnQaU0DtnpXu850MZiy+YUgcc= github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= -github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/jwt v1.2.2/go.mod h1:/xX356yQA6LuXI9xWW7mZNpxgF2mBmGecH+Fj34sP5Q= -github.com/nats-io/jwt/v2 v2.0.3/go.mod h1:VRP+deawSXyhNjXmxPCHskrR6Mq50BqpEI5SEcNiGlY= github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats-server/v2 v2.5.0/go.mod h1:Kj86UtrXAL6LwYRA6H4RqzkHhK0Vcv2ZnKD5WbQ1t3g= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nats.go v1.12.1/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= -github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nishanths/exhaustive v0.8.1/go.mod h1:qj+zJJUgJ76tR92+25+03oYUhzF4R7/2Wk7fGTfCHmg= -github.com/nishanths/predeclared v0.0.0-20190419143655-18a43bb90ffc/go.mod h1:62PewwiQTlm/7Rj+cxVYqZvDIUc+JjZq6GHAC1fsObQ= -github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= github.com/notional-labs/packet-forward-middleware/v7 v7.0.1 h1:HG5uY0G3BNprePzG047N7V1TFLxVyq89VSKnyRghTcM= github.com/notional-labs/packet-forward-middleware/v7 v7.0.1/go.mod h1:ixg45X2kEtfjrSgZOQMuahY9VmXa1S3ZtO2amHA1ilU= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/oasisprotocol/curve25519-voi v0.0.0-20210609091139-0a56a4bca00b h1:MKwruh+HeCSKWphkxuzvRzU4QzDkg7yiPkDVV0cDFgI= -github.com/oasisprotocol/curve25519-voi v0.0.0-20210609091139-0a56a4bca00b/go.mod h1:TLJifjWF6eotcfzDjKZsDqWJ+73Uvj/N85MvVyrvynM= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/oklog/ulid/v2 v2.0.2/go.mod h1:mtBL0Qe/0HAx6/a4Z30qxVIAL1eQDweXq5lxOEiwQ68= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/ginkgo/v2 v2.1.4/go.mod h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU= -github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= -github.com/opencontainers/runc v1.1.2/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= -github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= -github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= -github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= -github.com/ory/dockertest/v3 v3.9.1/go.mod h1:42Ir9hmvaAPm0Mgibk6mBPi7SFvTXxEcnztDYOJ//uM= -github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= -github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= -github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= -github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= -github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= -github.com/pelletier/go-toml/v2 v2.0.2/go.mod h1:MovirKjgVRESsAvNZlAjtFwV867yGuwRkXbG66OzopI= github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM= -github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d h1:htwtWgtQo8YS6JFWWi2DNgY0RwSGJ1ruMoxY6CUUclk= github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= -github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= -github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/polyfloyd/go-errorlint v1.0.0/go.mod h1:KZy4xxPJyy88/gldCe5OdW6OQRtNO3EZE7hXzmnebgA= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= -github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -1224,9 +834,6 @@ github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt2 github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.40.0 h1:Afz7EVRqGg2Mqqf4JuF9vdvp1pi220m55Pi9T2JnO4Q= github.com/prometheus/common v0.40.0/go.mod h1:L65ZJPSmfn/UBWLQIHV7dBrKFidB/wPlF1y5TlSt9OE= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -1235,104 +842,52 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= -github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= -github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= -github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= -github.com/quasilyte/go-ruleguard v0.3.16-0.20220213074421-6aa060fab41a/go.mod h1:VMX+OnnSw4LicdiEGtRSD/1X8kW7GuEscjYNr4cOIT4= -github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/dsl v0.3.16/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/dsl v0.3.21/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= -github.com/quasilyte/gogrep v0.0.0-20220120141003-628d8b3623b5/go.mod h1:wSEyW6O61xRV6zb6My3HxrQ5/8ke7NE2OayqCHa3xRM= -github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= -github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= -github.com/remyoudompheng/go-dbus v0.0.0-20121104212943-b7232d34b1d5/go.mod h1:+u151txRmLpwxBmpYn9z3d1sdJdjRPQpsXuYeY9jNls= -github.com/remyoudompheng/go-liblzma v0.0.0-20190506200333-81bf2d431b96/go.mod h1:90HvCY7+oHHUKkbeMCiHt1WuFR2/hPJ9QrljDG+v6ls= -github.com/remyoudompheng/go-misc v0.0.0-20190427085024-2d6ac652a50e/go.mod h1:80FQABjoFzZ2M5uEa6FUaJYEmqU2UOKojlFVak1UAwI= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.27.0 h1:1T7qCieN22GVc8S4Q2yuexzBb1EqjbgjSH9RohbMjKs= -github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryancurrah/gomodguard v1.2.3/go.mod h1:rYbA/4Tg5c54mV1sv4sQTP5WOPBcoLtnBZ7/TEhXAbg= -github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= -github.com/sagikazarmark/crypt v0.6.0/go.mod h1:U8+INwJo3nBv1m6A/8OBXAq7Jnpspk5AxSgDyEQcea8= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= -github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= -github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= -github.com/securego/gosec/v2 v2.12.0/go.mod h1:iTpT+eKTw59bSgklBHlSnH5O2tNygHMDxfvMubA4i7I= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= -github.com/shirou/gopsutil/v3 v3.22.6/go.mod h1:EdIubSnZhbAvBS1yJ7Xi+AShB/hxwLHOMz4MCYz7yMs= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/sivchari/containedctx v1.0.2/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= -github.com/sivchari/nosnakecase v1.5.0/go.mod h1:CwDzrzPea40/GB6uynrNLiorAlgFRvRbFSgJx2Gs+QY= -github.com/sivchari/tenv v1.6.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk= github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.3.0/go.mod h1:BrRVncBjOJa/eUcVVm9CE+oC6as8k+VYr4NY7WCi9V4= -github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= -github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= @@ -1343,24 +898,16 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM= -github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU= github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= -github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= -github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= -github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -1369,46 +916,21 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= -github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs= -github.com/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7vWWGaGo= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/sylvia7788/contextcheck v1.0.4/go.mod h1:vuPKJMQ7MQ91ZTqfdyreNKwZjyUg6KO+IebVyQDedZQ= -github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= -github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= -github.com/tendermint/tendermint v0.35.9 h1:yUEgfkcNHWSidsU8wHjRDbYPVijV4cHxCclKVITGRAQ= -github.com/tendermint/tendermint v0.35.9/go.mod h1:FYvzUDkmVv1awfFl9V85yl5NKyjxz6XLZGX132+ftAY= -github.com/tendermint/tm-db v0.6.6/go.mod h1:wP8d49A85B7/erz/r4YbKssKw6ylsO/hKtFk7E1aWZI= -github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= -github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= -github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= -github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= -github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= -github.com/tj/assert v0.0.3/go.mod h1:Ne6X72Q+TB1AteidzQncjw9PabbMp4PBMZ1k+vd1Pvk= -github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= -github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tomarrell/wrapcheck/v2 v2.6.2/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= -github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= -github.com/tommy-muehle/go-mnd/v2 v2.5.0/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= -github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= @@ -1418,64 +940,24 @@ github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLY github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= -github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/uudashr/gocognit v1.0.6/go.mod h1:nAIUuVBnYU7pcninia3BHOvQkpQCeO76Uscky5BOwcY= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus= -github.com/valyala/quicktemplate v1.7.0/go.mod h1:sqKJnoaOF88V07vkO+9FL8fb9uZg/VPSJnLYn+LmLk8= -github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= -github.com/vektra/mockery/v2 v2.14.0/go.mod h1:bnD1T8tExSgPD1ripLkDbr60JA9VtQeu12P3wgLZd7M= -github.com/viki-org/dnscache v0.0.0-20130720023526-c70c1f23c5d8/go.mod h1:dniwbG03GafCjFohMDmz6Zc6oCuiqgH6tGNyXTkHzXE= -github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= -github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= -github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA= -github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= -github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo= github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= github.com/zondax/ledger-go v0.14.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c= github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= -gitlab.com/bosi/decorder v0.2.2/go.mod h1:9K1RB5+VPNQYtXtTDAzd2OEftsZb1oV0IrJrzChSdGE= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= -go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.etcd.io/etcd v0.0.0-20200513171258-e048e166ab9c/go.mod h1:xCI7ZzBfRuGgBXyXO6yfWfDmlWd35khcWpUa4L0xI/k= -go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= -go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= -go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= -go.etcd.io/etcd/client/v2 v2.305.4/go.mod h1:Ud+VUwIi9/uQHOMA+4ekToJ12lTxlv0zB/+DHwTGEbU= -go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= -go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY= -go.mozilla.org/mozlog v0.0.0-20170222151521-4bb13139d403/go.mod h1:jHoPAGnDrCy6kaI2tAze5Prf0Nr0w/oNkROt2lw3n3o= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -1491,24 +973,11 @@ go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqe go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= -go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1516,33 +985,16 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210915214749-c084706c2272/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= @@ -1555,8 +1007,6 @@ golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMk golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 h1:LGJsf5LRplCck6jUCH3dBL2dmycNruWNF5xugkSlfXw= golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/exp/typeparams v0.0.0-20220218215828-6cf2b201936e/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1582,12 +1032,8 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= -golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1608,8 +1054,6 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1625,7 +1069,6 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= @@ -1636,24 +1079,14 @@ golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= @@ -1678,7 +1111,6 @@ golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= @@ -1695,7 +1127,6 @@ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1703,7 +1134,6 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1718,27 +1148,20 @@ golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1747,7 +1170,6 @@ golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1758,70 +1180,45 @@ golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211213223007-03aa0b5f6827/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220405210540-1e041c57c461/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1829,7 +1226,6 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1838,10 +1234,8 @@ golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= @@ -1861,51 +1255,34 @@ golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190228203856-589c23e65e65/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1915,58 +1292,29 @@ golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200630154851-b2d8b0336632/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200706234117-b22de6825cf7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201028025901-8cd080b735b3/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= -golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= -golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.9-0.20211228192929-ee1ca4ffc4da/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= -golang.org/x/tools v0.1.11-0.20220513221640-090b14e8501f/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= -golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1978,16 +1326,11 @@ golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNq golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= @@ -2013,9 +1356,7 @@ google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6 google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw= google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= @@ -2025,7 +1366,6 @@ google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69 google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= -google.golang.org/api v0.81.0/go.mod h1:FA6Mb/bZxj706H2j+j2d6mHEEaHBmbbWnkfvmorOCko= google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= @@ -2042,15 +1382,12 @@ google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181107211654-5fc9ac540362/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -2059,7 +1396,6 @@ google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dT google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= @@ -2081,8 +1417,6 @@ google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200707001353-8e8330bf89df/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -2115,13 +1449,8 @@ google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEc google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= @@ -2141,7 +1470,6 @@ google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= @@ -2169,7 +1497,6 @@ google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 h1:EfLuoKW5WfkgVdDy7dTK8qSbH37AX5mj/MFh+bGPz14= google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= -google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -2179,13 +1506,11 @@ google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ij google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.0/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= @@ -2204,7 +1529,6 @@ google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= @@ -2229,7 +1553,6 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= @@ -2239,18 +1562,13 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= @@ -2263,21 +1581,15 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.6/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= -gotest.tools/v3 v3.2.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -2287,22 +1599,14 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.3.2/go.mod h1:jzwdWgg7Jdq75wlfblQxO4neNaFFSvgc1tD5Wv8U0Yw= -mvdan.cc/gofumpt v0.3.1/go.mod h1:w3ymliuxvzVx8DAutBnVyDqYb1Niy/yCJt/lk821YCE= -mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= -mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= -mvdan.cc/unparam v0.0.0-20211214103731-d0ef000c54e5/go.mod h1:b8RRCBm0eeiWR8cfN88xeq2G5SG3VKGO+5UPWi5FSOY= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -pgregory.net/rapid v0.4.8/go.mod h1:Z5PbWqjvWR1I3UGjvboUuan4fe4ZYEYNLNQLExzCoUs= pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/scripts/protocgen.sh b/scripts/protocgen.sh index bd55e5ee..c760e8e1 100644 --- a/scripts/protocgen.sh +++ b/scripts/protocgen.sh @@ -19,7 +19,7 @@ cd .. # move proto files to the right places # # Note: Proto files are suffixed with the current binary version. -cp -r github.com/notional-labs/fee-abstraction/v3/x/feeabs/types/* ./x/feeabs/types/ +cp -r github.com/notional-labs/fee-abstraction/v4/x/feeabs/types/* ./x/feeabs/types/ rm -rf github.com go mod tidy -compat=1.18 diff --git a/x/feeabs/ante/decorate.go b/x/feeabs/ante/decorate.go index fc76b2e9..7a785fd7 100644 --- a/x/feeabs/ante/decorate.go +++ b/x/feeabs/ante/decorate.go @@ -6,8 +6,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/types" - feeabskeeper "github.com/notional-labs/fee-abstraction/v3/x/feeabs/keeper" - feeabstypes "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" + feeabskeeper "github.com/notional-labs/fee-abstraction/v4/x/feeabs/keeper" + feeabstypes "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" ) type FeeAbstractionDeductFeeDecorate struct { diff --git a/x/feeabs/client/cli/query.go b/x/feeabs/client/cli/query.go index 0c31a4f1..949aadf1 100644 --- a/x/feeabs/client/cli/query.go +++ b/x/feeabs/client/cli/query.go @@ -5,7 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" "github.com/spf13/cobra" ) diff --git a/x/feeabs/client/cli/tx.go b/x/feeabs/client/cli/tx.go index 3e611d1d..9fd513a0 100644 --- a/x/feeabs/client/cli/tx.go +++ b/x/feeabs/client/cli/tx.go @@ -7,7 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" "github.com/spf13/cobra" ) diff --git a/x/feeabs/client/cli/tx_test.go b/x/feeabs/client/cli/tx_test.go index 9b164305..711b674b 100644 --- a/x/feeabs/client/cli/tx_test.go +++ b/x/feeabs/client/cli/tx_test.go @@ -5,7 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/testutil" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" "github.com/stretchr/testify/require" ) diff --git a/x/feeabs/client/cli/util.go b/x/feeabs/client/cli/util.go index 04fa3005..8c9f4b82 100644 --- a/x/feeabs/client/cli/util.go +++ b/x/feeabs/client/cli/util.go @@ -4,7 +4,7 @@ import ( "io/ioutil" //nolint:staticcheck "github.com/cosmos/cosmos-sdk/codec" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" ) // ParseParamChangeProposalJSON reads and parses a ParamChangeProposalJSON from diff --git a/x/feeabs/ibc_module.go b/x/feeabs/ibc_module.go index 0a473b00..7c009300 100644 --- a/x/feeabs/ibc_module.go +++ b/x/feeabs/ibc_module.go @@ -11,8 +11,8 @@ import ( porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" host "github.com/cosmos/ibc-go/v7/modules/core/24-host" ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/keeper" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/keeper" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" ) // IBCModule implements the ICS26 interface for transfer given the transfer keeper. diff --git a/x/feeabs/ibctesting/chain.go b/x/feeabs/ibctesting/chain.go index ab789236..0f13bf56 100644 --- a/x/feeabs/ibctesting/chain.go +++ b/x/feeabs/ibctesting/chain.go @@ -24,6 +24,8 @@ import ( capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" + "github.com/cosmos/cosmos-sdk/x/staking/teststaking" + // "github.com/cosmos/cosmos-sdk/x/staking/teststaking" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" @@ -33,13 +35,14 @@ import ( "github.com/cosmos/ibc-go/v7/modules/core/exported" ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" "github.com/cosmos/ibc-go/v7/modules/core/types" + // ibctmtypes "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint/types" ibctesting "github.com/cosmos/ibc-go/v7/testing" "github.com/cosmos/ibc-go/v7/testing/mock" "github.com/stretchr/testify/require" "github.com/CosmWasm/wasmd/x/wasm" - feeabs "github.com/notional-labs/fee-abstraction/v3/app" + feeabs "github.com/notional-labs/fee-abstraction/v4/app" ) // TestChain is a testing struct that wraps a simapp with the last TM Header, the current ABCI diff --git a/x/feeabs/ibctesting/wasm.go b/x/feeabs/ibctesting/wasm.go index 8d348f58..8086f0e2 100644 --- a/x/feeabs/ibctesting/wasm.go +++ b/x/feeabs/ibctesting/wasm.go @@ -8,7 +8,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" ibctesting "github.com/cosmos/ibc-go/v7/testing" "github.com/golang/protobuf/proto" //nolint - feeabs "github.com/notional-labs/fee-abstraction/v3/app" + feeabs "github.com/notional-labs/fee-abstraction/v4/app" "github.com/stretchr/testify/require" ) diff --git a/x/feeabs/keeper/abci.go b/x/feeabs/keeper/abci.go index 8574e861..d182e20b 100644 --- a/x/feeabs/keeper/abci.go +++ b/x/feeabs/keeper/abci.go @@ -6,7 +6,7 @@ import ( "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" ) // BeginBlocker of epochs module. diff --git a/x/feeabs/keeper/config.go b/x/feeabs/keeper/config.go index 6b21c5f0..a9dd7975 100644 --- a/x/feeabs/keeper/config.go +++ b/x/feeabs/keeper/config.go @@ -3,7 +3,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" ) func (keeper Keeper) HasHostZoneConfig(ctx sdk.Context, ibcDenom string) bool { diff --git a/x/feeabs/keeper/epoch.go b/x/feeabs/keeper/epoch.go index 4076dccc..f8f5a608 100644 --- a/x/feeabs/keeper/epoch.go +++ b/x/feeabs/keeper/epoch.go @@ -6,7 +6,7 @@ import ( "github.com/gogo/protobuf/proto" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" sdk "github.com/cosmos/cosmos-sdk/types" ) diff --git a/x/feeabs/keeper/exchange_rate.go b/x/feeabs/keeper/exchange_rate.go index 96618634..26efe2ff 100644 --- a/x/feeabs/keeper/exchange_rate.go +++ b/x/feeabs/keeper/exchange_rate.go @@ -3,7 +3,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" ) // GetTwapRate return Twap Price of ibcDenom diff --git a/x/feeabs/keeper/genesis.go b/x/feeabs/keeper/genesis.go index d1fd6313..977da0b4 100644 --- a/x/feeabs/keeper/genesis.go +++ b/x/feeabs/keeper/genesis.go @@ -3,7 +3,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" ) // InitGenesis initializes the incentives module's state from a provided genesis state. diff --git a/x/feeabs/keeper/genesis_test.go b/x/feeabs/keeper/genesis_test.go index 01588ea7..4a1a7033 100644 --- a/x/feeabs/keeper/genesis_test.go +++ b/x/feeabs/keeper/genesis_test.go @@ -6,8 +6,8 @@ import ( "github.com/stretchr/testify/require" - apphelpers "github.com/notional-labs/fee-abstraction/v3/app/helpers" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" + apphelpers "github.com/notional-labs/fee-abstraction/v4/app/helpers" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" ) var now = time.Now().UTC() diff --git a/x/feeabs/keeper/grpc_query.go b/x/feeabs/keeper/grpc_query.go index 6028a7ab..d532d04e 100644 --- a/x/feeabs/keeper/grpc_query.go +++ b/x/feeabs/keeper/grpc_query.go @@ -4,7 +4,7 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) diff --git a/x/feeabs/keeper/grpc_query_test.go b/x/feeabs/keeper/grpc_query_test.go index 7a435178..ebd13f39 100644 --- a/x/feeabs/keeper/grpc_query_test.go +++ b/x/feeabs/keeper/grpc_query_test.go @@ -5,7 +5,7 @@ import ( "time" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" ) var letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") diff --git a/x/feeabs/keeper/host_zone_test.go b/x/feeabs/keeper/host_zone_test.go index c6a6d19d..becd1b1a 100644 --- a/x/feeabs/keeper/host_zone_test.go +++ b/x/feeabs/keeper/host_zone_test.go @@ -6,9 +6,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - apphelpers "github.com/notional-labs/fee-abstraction/v3/app/helpers" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/keeper" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" + apphelpers "github.com/notional-labs/fee-abstraction/v4/app/helpers" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/keeper" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" ) func createNHostZone(t *testing.T, keeper *keeper.Keeper, ctx sdk.Context, n int) []types.HostChainFeeAbsConfig { diff --git a/x/feeabs/keeper/ibc.go b/x/feeabs/keeper/ibc.go index 9040b7a4..fb361ba1 100644 --- a/x/feeabs/keeper/ibc.go +++ b/x/feeabs/keeper/ibc.go @@ -12,7 +12,7 @@ import ( clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" host "github.com/cosmos/ibc-go/v7/modules/core/24-host" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" ) // GetPort returns the portID for the module. Used in ExportGenesis. diff --git a/x/feeabs/keeper/keeper.go b/x/feeabs/keeper/keeper.go index 23ff7161..ab8546b6 100644 --- a/x/feeabs/keeper/keeper.go +++ b/x/feeabs/keeper/keeper.go @@ -5,14 +5,14 @@ import ( "github.com/cometbft/cometbft/libs/log" "github.com/cosmos/cosmos-sdk/codec" - sdk "github.com/cosmos/cosmos-sdk/types" storetypes "github.com/cosmos/cosmos-sdk/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" "github.com/cosmos/ibc-go/v7/modules/core/exported" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" ) type Keeper struct { diff --git a/x/feeabs/keeper/keeper_test.go b/x/feeabs/keeper/keeper_test.go index 3891812b..db5b877e 100644 --- a/x/feeabs/keeper/keeper_test.go +++ b/x/feeabs/keeper/keeper_test.go @@ -9,10 +9,10 @@ import ( "github.com/cosmos/cosmos-sdk/baseapp" sdk "github.com/cosmos/cosmos-sdk/types" govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" - "github.com/notional-labs/fee-abstraction/v3/app" - apphelpers "github.com/notional-labs/fee-abstraction/v3/app/helpers" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/keeper" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v4/app" + apphelpers "github.com/notional-labs/fee-abstraction/v4/app/helpers" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/keeper" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" "github.com/stretchr/testify/suite" ) diff --git a/x/feeabs/keeper/msgserver.go b/x/feeabs/keeper/msgserver.go index 6ece417b..292b9d14 100644 --- a/x/feeabs/keeper/msgserver.go +++ b/x/feeabs/keeper/msgserver.go @@ -5,7 +5,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" ) type msgServer struct { diff --git a/x/feeabs/keeper/proposal.go b/x/feeabs/keeper/proposal.go index b69a3095..6a663b6f 100644 --- a/x/feeabs/keeper/proposal.go +++ b/x/feeabs/keeper/proposal.go @@ -2,7 +2,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" ) func (k Keeper) AddHostZoneProposal(ctx sdk.Context, p *types.AddHostZoneProposal) error { diff --git a/x/feeabs/keeper/proposal_test.go b/x/feeabs/keeper/proposal_test.go index 53b62356..f202fbc0 100644 --- a/x/feeabs/keeper/proposal_test.go +++ b/x/feeabs/keeper/proposal_test.go @@ -1,8 +1,8 @@ package keeper_test import ( - apphelpers "github.com/notional-labs/fee-abstraction/v3/app/helpers" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" + apphelpers "github.com/notional-labs/fee-abstraction/v4/app/helpers" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" ) func (suite *KeeperTestSuite) TestAddHostZoneProposal() { diff --git a/x/feeabs/module.go b/x/feeabs/module.go index 68253797..a10dd029 100644 --- a/x/feeabs/module.go +++ b/x/feeabs/module.go @@ -13,9 +13,9 @@ import ( "github.com/cosmos/cosmos-sdk/types/module" "github.com/gorilla/mux" "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/client/cli" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/keeper" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/client/cli" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/keeper" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" "github.com/spf13/cobra" ) diff --git a/x/feeabs/proposal_handler.go b/x/feeabs/proposal_handler.go index 2255644d..ae2b6bf0 100644 --- a/x/feeabs/proposal_handler.go +++ b/x/feeabs/proposal_handler.go @@ -6,14 +6,16 @@ import ( "github.com/cosmos/cosmos-sdk/client" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/types/rest" + // "github.com/cosmos/cosmos-sdk/types/rest" govclient "github.com/cosmos/cosmos-sdk/x/gov/client" // govrest "github.com/cosmos/cosmos-sdk/x/gov/client/rest" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/keeper" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/keeper" - cli "github.com/notional-labs/fee-abstraction/v3/x/feeabs/client/cli" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" + cli "github.com/notional-labs/fee-abstraction/v4/x/feeabs/client/cli" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" ) var ( diff --git a/x/feeabs/relay_test.go b/x/feeabs/relay_test.go index 04391135..0e92f754 100644 --- a/x/feeabs/relay_test.go +++ b/x/feeabs/relay_test.go @@ -5,7 +5,7 @@ import ( wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" - wasmibctesting "github.com/notional-labs/fee-abstraction/v3/x/feeabs/ibctesting" + wasmibctesting "github.com/notional-labs/fee-abstraction/v4/x/feeabs/ibctesting" wasmvm "github.com/CosmWasm/wasmvm" wasmvmtypes "github.com/CosmWasm/wasmvm/types" diff --git a/x/feeabs/types/build_memo_test.go b/x/feeabs/types/build_memo_test.go index 7df5d555..403e988b 100644 --- a/x/feeabs/types/build_memo_test.go +++ b/x/feeabs/types/build_memo_test.go @@ -5,7 +5,7 @@ import ( "github.com/stretchr/testify/require" - "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" ) // TODO: need to refactor this test, use driven table diff --git a/x/feeabs/types/osmosisibc.pb.go b/x/feeabs/types/osmosisibc.pb.go index 201bfed4..48c51f17 100644 --- a/x/feeabs/types/osmosisibc.pb.go +++ b/x/feeabs/types/osmosisibc.pb.go @@ -10,7 +10,7 @@ import ( proto "github.com/gogo/protobuf/proto" _ "github.com/gogo/protobuf/types" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - types1 "github.com/tendermint/tendermint/abci/types" + types1 "github.com/cometbft/cometbft/abci/types" _ "google.golang.org/genproto/googleapis/api/annotations" io "io" math "math" From 67b11c1d9f16c1ff12660ac8bb42e7be5623909c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=E1=BA=A1m=20Anh=20Minh?= <1phamminh0811@gmail.com> Date: Thu, 25 May 2023 13:01:32 +0700 Subject: [PATCH 05/90] fix all errors --- x/feeabs/ante/expected_keepers.go | 2 ++ x/feeabs/client/cli/tx.go | 29 +++++++++++++++++++------ x/feeabs/ibc_module.go | 3 ++- x/feeabs/ibctesting/chain.go | 35 +++++++++++++++--------------- x/feeabs/ibctesting/endpoint.go | 8 +++---- x/feeabs/keeper/ibc.go | 29 ++----------------------- x/feeabs/keeper/keeper.go | 10 ++++++--- x/feeabs/keeper/keeper_test.go | 2 ++ x/feeabs/keeper/proposal_test.go | 18 +++++++++++---- x/feeabs/module.go | 15 ------------- x/feeabs/proposal_handler.go | 27 +++++------------------ x/feeabs/relay_test.go | 2 +- x/feeabs/types/codec.go | 4 ++-- x/feeabs/types/expected_keepers.go | 4 +++- x/feeabs/types/proposal.go | 26 +++++++++++----------- 15 files changed, 97 insertions(+), 117 deletions(-) diff --git a/x/feeabs/ante/expected_keepers.go b/x/feeabs/ante/expected_keepers.go index 980486b2..47978462 100644 --- a/x/feeabs/ante/expected_keepers.go +++ b/x/feeabs/ante/expected_keepers.go @@ -17,5 +17,7 @@ type AccountKeeper interface { } type BankKeeper interface { + IsSendEnabledCoins(ctx sdk.Context, coins ...sdk.Coin) error + SendCoins(ctx sdk.Context, from, to sdk.AccAddress, amt sdk.Coins) error SendCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error } diff --git a/x/feeabs/client/cli/tx.go b/x/feeabs/client/cli/tx.go index 9fd513a0..1ad386a8 100644 --- a/x/feeabs/client/cli/tx.go +++ b/x/feeabs/client/cli/tx.go @@ -2,7 +2,7 @@ package cli import ( sdk "github.com/cosmos/cosmos-sdk/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govv1types "github.com/cosmos/cosmos-sdk/x/gov/types/v1" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" @@ -114,13 +114,18 @@ func NewCmdSubmitAddHostZoneProposal() *cobra.Command { proposal.Title, proposal.Description, proposal.HostChainFeeAbsConfig, ) + from := clientCtx.GetFromAddress() + legacyContent, err := govv1types.NewLegacyContent(content, from.String()) + if err != nil { + return err + } + deposit, err := sdk.ParseCoinsNormalized(proposal.Deposit) if err != nil { return err } - from := clientCtx.GetFromAddress() - msg, err := govtypes.NewMsgSubmitProposal(content, deposit, from) + msg, err := govv1types.NewMsgSubmitProposal([]sdk.Msg{legacyContent}, deposit, from.String(), "", "", "") if err != nil { return err } @@ -154,13 +159,18 @@ func NewCmdSubmitDeleteHostZoneProposal() *cobra.Command { proposal.Title, proposal.Description, proposal.IbcDenom, ) + from := clientCtx.GetFromAddress() + legacyContent, err := govv1types.NewLegacyContent(content, from.String()) + if err != nil { + return err + } + deposit, err := sdk.ParseCoinsNormalized(proposal.Deposit) if err != nil { return err } - from := clientCtx.GetFromAddress() - msg, err := govtypes.NewMsgSubmitProposal(content, deposit, from) + msg, err := govv1types.NewMsgSubmitProposal([]sdk.Msg{legacyContent}, deposit, from.String(), "", "", "") if err != nil { return err } @@ -194,13 +204,18 @@ func NewCmdSubmitSetHostZoneProposal() *cobra.Command { proposal.Title, proposal.Description, proposal.HostChainFeeAbsConfig, ) + from := clientCtx.GetFromAddress() + legacyContent, err := govv1types.NewLegacyContent(content, from.String()) + if err != nil { + return err + } + deposit, err := sdk.ParseCoinsNormalized(proposal.Deposit) if err != nil { return err } - from := clientCtx.GetFromAddress() - msg, err := govtypes.NewMsgSubmitProposal(content, deposit, from) + msg, err := govv1types.NewMsgSubmitProposal([]sdk.Msg{legacyContent}, deposit, from.String(), "", "", "") if err != nil { return err } diff --git a/x/feeabs/ibc_module.go b/x/feeabs/ibc_module.go index 7c009300..038cd0f4 100644 --- a/x/feeabs/ibc_module.go +++ b/x/feeabs/ibc_module.go @@ -204,7 +204,8 @@ func (am IBCModule) OnTimeoutPacket( params := am.keeper.GetParams(ctx) chancap := am.keeper.GetCapability(ctx, host.ChannelCapabilityPath(types.IBCPortID, params.IbcQueryIcqChannel)) // Resend request if timeout - err := am.keeper.OnTimeoutPacket(ctx, chancap, packet) // If there is an error here we should still handle the timeout + err := am.keeper.OnTimeoutPacket(ctx, chancap, packet.SourcePort, packet.SourceChannel, + packet.TimeoutHeight, packet.TimeoutTimestamp, packet.Data) // If there is an error here we should still handle the timeout if err != nil { am.keeper.Logger(ctx).Error(fmt.Sprintf("Error OnTimeoutPacket %s", err.Error())) ctx.EventManager().EmitEvent( diff --git a/x/feeabs/ibctesting/chain.go b/x/feeabs/ibctesting/chain.go index 0f13bf56..30ef4084 100644 --- a/x/feeabs/ibctesting/chain.go +++ b/x/feeabs/ibctesting/chain.go @@ -23,20 +23,19 @@ import ( banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" - "github.com/cosmos/cosmos-sdk/x/staking/teststaking" + teststaking "github.com/cosmos/cosmos-sdk/x/staking/testutil" - // "github.com/cosmos/cosmos-sdk/x/staking/teststaking" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" commitmenttypes "github.com/cosmos/ibc-go/v7/modules/core/23-commitment/types" host "github.com/cosmos/ibc-go/v7/modules/core/24-host" - "github.com/cosmos/ibc-go/v7/modules/core/exported" + ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" "github.com/cosmos/ibc-go/v7/modules/core/types" + ibctestingtypes "github.com/cosmos/ibc-go/v7/testing/types" - // ibctmtypes "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint/types" + ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" ibctesting "github.com/cosmos/ibc-go/v7/testing" "github.com/cosmos/ibc-go/v7/testing/mock" "github.com/stretchr/testify/require" @@ -56,8 +55,8 @@ type TestChain struct { Coordinator *Coordinator App ibctesting.TestingApp ChainID string - LastHeader *ibctmtypes.Header // header for last block height committed - CurrentHeader tmproto.Header // header for current block height + LastHeader *ibctm.Header // header for last block height committed + CurrentHeader tmproto.Header // header for current block height QueryServer types.QueryServer TxConfig client.TxConfig Codec codec.BinaryCodec @@ -154,7 +153,7 @@ func (chain *TestChain) QueryProof(key []byte) ([]byte, clienttypes.Height) { // for the query and the height at which the proof will succeed on a tendermint verifier. func (chain *TestChain) QueryProofAtHeight(key []byte, height int64) ([]byte, clienttypes.Height) { res := chain.App.Query(abci.RequestQuery{ - Path: fmt.Sprintf("store/%s/key", host.StoreKey), + Path: fmt.Sprintf("store/%s/key", ibcexported.StoreKey), Height: height - 1, Data: key, Prove: true, @@ -293,7 +292,7 @@ func (chain *TestChain) captureIBCEvents(r *sdk.Result) { // GetClientState retrieves the client state for the provided clientID. The client is // expected to exist otherwise testing will fail. -func (chain *TestChain) GetClientState(clientID string) exported.ClientState { +func (chain *TestChain) GetClientState(clientID string) ibcexported.ClientState { clientState, found := chain.App.GetIBCKeeper().ClientKeeper.GetClientState(chain.GetContext(), clientID) require.True(chain.t, found) @@ -302,7 +301,7 @@ func (chain *TestChain) GetClientState(clientID string) exported.ClientState { // GetConsensusState retrieves the consensus state for the provided clientID and height. // It will return a success boolean depending on if consensus state exists or not. -func (chain *TestChain) GetConsensusState(clientID string, height exported.Height) (exported.ConsensusState, bool) { +func (chain *TestChain) GetConsensusState(clientID string, height ibcexported.Height) (ibcexported.ConsensusState, bool) { return chain.App.GetIBCKeeper().ClientKeeper.GetClientConsensusState(chain.GetContext(), clientID, height) } @@ -325,7 +324,7 @@ func (chain *TestChain) GetValsAtHeight(height int64) (*tmtypes.ValidatorSet, bo // GetAcknowledgement retrieves an acknowledgement for the provided packet. If the // acknowledgement does not exist then testing will fail. -func (chain *TestChain) GetAcknowledgement(packet exported.PacketI) []byte { +func (chain *TestChain) GetAcknowledgement(packet ibcexported.PacketI) []byte { ack, found := chain.App.GetIBCKeeper().ChannelKeeper.GetPacketAcknowledgement(chain.GetContext(), packet.GetDestPort(), packet.GetDestChannel(), packet.GetSequence()) require.True(chain.t, found) @@ -339,13 +338,13 @@ func (chain *TestChain) GetPrefix() commitmenttypes.MerklePrefix { // ConstructUpdateTMClientHeader will construct a valid 07-tendermint Header to update the // light client on the source chain. -func (chain *TestChain) ConstructUpdateTMClientHeader(counterparty *TestChain, clientID string) (*ibctmtypes.Header, error) { +func (chain *TestChain) ConstructUpdateTMClientHeader(counterparty *TestChain, clientID string) (*ibctm.Header, error) { return chain.ConstructUpdateTMClientHeaderWithTrustedHeight(counterparty, clientID, clienttypes.ZeroHeight()) } // ConstructUpdateTMClientHeader will construct a valid 07-tendermint Header to update the // light client on the source chain. -func (chain *TestChain) ConstructUpdateTMClientHeaderWithTrustedHeight(counterparty *TestChain, clientID string, trustedHeight clienttypes.Height) (*ibctmtypes.Header, error) { +func (chain *TestChain) ConstructUpdateTMClientHeaderWithTrustedHeight(counterparty *TestChain, clientID string, trustedHeight clienttypes.Height) (*ibctm.Header, error) { header := counterparty.LastHeader // Relayer must query for LatestHeight on client to get TrustedHeight if the trusted height is not set if trustedHeight.IsZero() { @@ -367,7 +366,7 @@ func (chain *TestChain) ConstructUpdateTMClientHeaderWithTrustedHeight(counterpa // NextValidatorsHash tmTrustedVals, ok = counterparty.GetValsAtHeight(int64(trustedHeight.RevisionHeight + 1)) if !ok { - return nil, sdkerrors.Wrapf(ibctmtypes.ErrInvalidHeaderHeight, "could not retrieve trusted validators at trustedHeight: %d", trustedHeight) + return nil, sdkerrors.Wrapf(ibctm.ErrInvalidHeaderHeight, "could not retrieve trusted validators at trustedHeight: %d", trustedHeight) } } // inject trusted fields into last header @@ -391,13 +390,13 @@ func (chain *TestChain) ExpireClient(amount time.Duration) { // CurrentTMClientHeader creates a TM header using the current header parameters // on the chain. The trusted fields in the header are set to nil. -func (chain *TestChain) CurrentTMClientHeader() *ibctmtypes.Header { +func (chain *TestChain) CurrentTMClientHeader() *ibctm.Header { return chain.CreateTMClientHeader(chain.ChainID, chain.CurrentHeader.Height, clienttypes.Height{}, chain.CurrentHeader.Time, chain.Vals, nil, chain.Signers) } // CreateTMClientHeader creates a TM header to update the TM client. Args are passed in to allow // caller flexibility to use params that differ from the chain. -func (chain *TestChain) CreateTMClientHeader(chainID string, blockHeight int64, trustedHeight clienttypes.Height, timestamp time.Time, tmValSet, tmTrustedVals *tmtypes.ValidatorSet, signers []tmtypes.PrivValidator) *ibctmtypes.Header { +func (chain *TestChain) CreateTMClientHeader(chainID string, blockHeight int64, trustedHeight clienttypes.Height, timestamp time.Time, tmValSet, tmTrustedVals *tmtypes.ValidatorSet, signers []tmtypes.PrivValidator) *ibctm.Header { var ( valSet *tmproto.ValidatorSet trustedVals *tmproto.ValidatorSet @@ -448,7 +447,7 @@ func (chain *TestChain) CreateTMClientHeader(chainID string, blockHeight int64, // The trusted fields may be nil. They may be filled before relaying messages to a client. // The relayer is responsible for querying client and injecting appropriate trusted fields. - return &ibctmtypes.Header{ + return &ibctm.Header{ SignedHeader: signedHeader, ValidatorSet: valSet, TrustedHeight: trustedHeight, @@ -573,7 +572,7 @@ func (a TestingAppDecorator) GetBaseApp() *baseapp.BaseApp { return a.TestSupport().GetBaseApp() } -func (a TestingAppDecorator) GetStakingKeeper() stakingkeeper.Keeper { +func (a TestingAppDecorator) GetStakingKeeper() ibctestingtypes.StakingKeeper { return a.TestSupport().StakingKeeper() } diff --git a/x/feeabs/ibctesting/endpoint.go b/x/feeabs/ibctesting/endpoint.go index 9f687fd3..adf1daa5 100644 --- a/x/feeabs/ibctesting/endpoint.go +++ b/x/feeabs/ibctesting/endpoint.go @@ -11,7 +11,7 @@ import ( commitmenttypes "github.com/cosmos/ibc-go/v7/modules/core/23-commitment/types" host "github.com/cosmos/ibc-go/v7/modules/core/24-host" "github.com/cosmos/ibc-go/v7/modules/core/exported" - // ibctmtypes "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint/types" + ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" ibctesting "github.com/cosmos/ibc-go/v7/testing" ) @@ -66,9 +66,9 @@ func (endpoint *Endpoint) CreateClient() (err error) { require.True(endpoint.Chain.t, ok) height := endpoint.Counterparty.Chain.LastHeader.GetHeight().(clienttypes.Height) - clientState = ibctmtypes.NewClientState( + clientState = ibctm.NewClientState( endpoint.Counterparty.Chain.ChainID, tmConfig.TrustLevel, tmConfig.TrustingPeriod, tmConfig.UnbondingPeriod, tmConfig.MaxClockDrift, - height, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, tmConfig.AllowUpdateAfterExpiry, tmConfig.AllowUpdateAfterMisbehaviour, + height, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, ) consensusState = endpoint.Counterparty.Chain.LastHeader.ConsensusState() case exported.Solomachine: @@ -106,7 +106,7 @@ func (endpoint *Endpoint) UpdateClient() (err error) { // ensure counterparty has committed state endpoint.Chain.Coordinator.CommitBlock(endpoint.Counterparty.Chain) - var header exported.Header + var header *ibctm.Header switch endpoint.ClientConfig.GetClientType() { case exported.Tendermint: diff --git a/x/feeabs/keeper/ibc.go b/x/feeabs/keeper/ibc.go index fb361ba1..99148c50 100644 --- a/x/feeabs/keeper/ibc.go +++ b/x/feeabs/keeper/ibc.go @@ -79,21 +79,6 @@ func (k Keeper) SendInterchainQuery( sourcePort string, sourceChannel string, ) (uint64, error) { - sequence, found := k.channelKeeper.GetNextSequenceSend(ctx, sourcePort, sourceChannel) - if !found { - return 0, sdkerrors.Wrapf( - channeltypes.ErrSequenceSendNotFound, - "source port: %s, source channel: %s", sourcePort, sourceChannel, - ) - } - sourceChannelEnd, found := k.channelKeeper.GetChannel(ctx, sourcePort, sourceChannel) - if !found { - return 0, sdkerrors.Wrapf(channeltypes.ErrChannelNotFound, "port ID (%s) channel ID (%s)", sourcePort, sourceChannel) - } - - destinationPort := sourceChannelEnd.GetCounterparty().GetPortID() - destinationChannel := sourceChannelEnd.GetCounterparty().GetChannelID() - timeoutTimestamp := ctx.BlockTime().Add(time.Minute * 5).UnixNano() channelCap, ok := k.scopedKeeper.GetCapability(ctx, host.ChannelCapabilityPath(sourcePort, sourceChannel)) if !ok { @@ -106,18 +91,8 @@ func (k Keeper) SendInterchainQuery( } icqPacketData := types.NewInterchainQueryPacketData(data, "") - packet := channeltypes.NewPacket( - icqPacketData.GetBytes(), - sequence, - sourcePort, - sourceChannel, - destinationPort, - destinationChannel, - clienttypes.ZeroHeight(), - uint64(timeoutTimestamp), - ) - - if err := k.channelKeeper.SendPacket(ctx, channelCap, packet); err != nil { + sequence, err := k.channelKeeper.SendPacket(ctx, channelCap, sourcePort, sourceChannel, clienttypes.ZeroHeight(), uint64(timeoutTimestamp), icqPacketData.GetBytes()) + if err != nil { return 0, err } diff --git a/x/feeabs/keeper/keeper.go b/x/feeabs/keeper/keeper.go index ab8546b6..6ec75cf3 100644 --- a/x/feeabs/keeper/keeper.go +++ b/x/feeabs/keeper/keeper.go @@ -11,7 +11,8 @@ import ( capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" - "github.com/cosmos/ibc-go/v7/modules/core/exported" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" ) @@ -129,8 +130,11 @@ func (k Keeper) SetParams(ctx sdk.Context, params types.Params) { } // OnTimeoutPacket resend packet when timeout -func (k Keeper) OnTimeoutPacket(ctx sdk.Context, chanCap *capabilitytypes.Capability, packet exported.PacketI) error { - return k.channelKeeper.SendPacket(ctx, chanCap, packet) +func (k Keeper) OnTimeoutPacket(ctx sdk.Context, chanCap *capabilitytypes.Capability, sourcePort string, + sourceChannel string, timeoutHeight clienttypes.Height, timeoutTimestamp uint64, packetData []byte) error { + _, err := k.channelKeeper.SendPacket(ctx, chanCap, sourcePort, sourceChannel, + timeoutHeight, timeoutTimestamp, packetData) + return err } func (k Keeper) GetCapability(ctx sdk.Context, name string) *capabilitytypes.Capability { diff --git a/x/feeabs/keeper/keeper_test.go b/x/feeabs/keeper/keeper_test.go index db5b877e..771f22bf 100644 --- a/x/feeabs/keeper/keeper_test.go +++ b/x/feeabs/keeper/keeper_test.go @@ -27,6 +27,8 @@ type KeeperTestSuite struct { msgServer types.MsgServer } +var valTokens = sdk.TokensFromConsensusPower(42, sdk.DefaultPowerReduction) + func (suite *KeeperTestSuite) SetupTest() { suite.feeAbsApp = apphelpers.Setup(suite.T(), false, 1) suite.ctx = suite.feeAbsApp.BaseApp.NewContext(false, tmproto.Header{ diff --git a/x/feeabs/keeper/proposal_test.go b/x/feeabs/keeper/proposal_test.go index f202fbc0..97fcc26e 100644 --- a/x/feeabs/keeper/proposal_test.go +++ b/x/feeabs/keeper/proposal_test.go @@ -3,10 +3,17 @@ package keeper_test import ( apphelpers "github.com/notional-labs/fee-abstraction/v4/app/helpers" "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + + sdk "github.com/cosmos/cosmos-sdk/types" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + govv1types "github.com/cosmos/cosmos-sdk/x/gov/types/v1" ) func (suite *KeeperTestSuite) TestAddHostZoneProposal() { suite.SetupTest() + addrs := simtestutil.AddTestAddrs(suite.feeAbsApp.BankKeeper, suite.feeAbsApp.StakingKeeper, suite.ctx, 10, valTokens) for _, tc := range []struct { desc string @@ -30,13 +37,16 @@ func (suite *KeeperTestSuite) TestAddHostZoneProposal() { p.HostChainConfig = &tc.hostChainConfig }) + legacyProposal, err := govv1types.NewLegacyContent(proposal, authtypes.NewModuleAddress(govtypes.ModuleName).String()) + suite.Require().NoError(err) + // store proposal - storedProposal, err := suite.govKeeper.SubmitProposal(suite.ctx, proposal) + _, err = suite.govKeeper.SubmitProposal(suite.ctx, []sdk.Msg{legacyProposal}, "", "", "", addrs[0]) suite.Require().NoError(err) // execute proposal - handler := suite.govKeeper.Router().GetRoute(storedProposal.ProposalRoute()) - err = handler(suite.ctx, storedProposal.GetContent()) + handler := suite.govKeeper.LegacyRouter().GetRoute(proposal.ProposalRoute()) + err = handler(suite.ctx, proposal) suite.Require().NoError(err) hostChainConfig, err := suite.feeAbsKeeper.GetHostZoneConfig(suite.ctx, tc.hostChainConfig.IbcDenom) @@ -44,7 +54,7 @@ func (suite *KeeperTestSuite) TestAddHostZoneProposal() { suite.Require().Equal(tc.hostChainConfig, hostChainConfig) // store proposal again and it should error - _, err = suite.govKeeper.SubmitProposal(suite.ctx, proposal) + _, err = suite.govKeeper.SubmitProposal(suite.ctx, []sdk.Msg{legacyProposal}, "", "", "", addrs[0]) suite.Require().Error(err) }) } diff --git a/x/feeabs/module.go b/x/feeabs/module.go index a10dd029..a3077a01 100644 --- a/x/feeabs/module.go +++ b/x/feeabs/module.go @@ -120,21 +120,6 @@ func (am AppModule) Name() string { // RegisterInvariants registers the feeabs module invariants. func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} -// Route return feeabs module message routing (not need anymore because using ADR 031) -func (am AppModule) Route() sdk.Route { - return sdk.Route{} -} - -// QueryRouter return feeabs module query routing key -func (AppModule) QuerierRoute() string { - return types.QuerierRoute -} - -// LegacyQuerierHandler returns feeabs legacy querier handler -func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sdk.Querier { - return nil -} - // RegisterServices registers a GRPC query service to respond to the // module-specific GRPC queries. func (am AppModule) RegisterServices(cfg module.Configurator) { diff --git a/x/feeabs/proposal_handler.go b/x/feeabs/proposal_handler.go index ae2b6bf0..58d5e7a6 100644 --- a/x/feeabs/proposal_handler.go +++ b/x/feeabs/proposal_handler.go @@ -1,17 +1,11 @@ package feeabs import ( - "net/http" - - "github.com/cosmos/cosmos-sdk/client" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/cosmos/cosmos-sdk/types/rest" - // "github.com/cosmos/cosmos-sdk/types/rest" govclient "github.com/cosmos/cosmos-sdk/x/gov/client" - // govrest "github.com/cosmos/cosmos-sdk/x/gov/client/rest" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + v1beta1types "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/notional-labs/fee-abstraction/v4/x/feeabs/keeper" cli "github.com/notional-labs/fee-abstraction/v4/x/feeabs/client/cli" @@ -19,14 +13,14 @@ import ( ) var ( - UpdateAddHostZoneClientProposalHandler = govclient.NewProposalHandler(cli.NewCmdSubmitAddHostZoneProposal, emptyRestHandler) - UpdateDeleteHostZoneClientProposalHandler = govclient.NewProposalHandler(cli.NewCmdSubmitDeleteHostZoneProposal, emptyRestHandler) - UpdateSetHostZoneClientProposalHandler = govclient.NewProposalHandler(cli.NewCmdSubmitSetHostZoneProposal, emptyRestHandler) + UpdateAddHostZoneClientProposalHandler = govclient.NewProposalHandler(cli.NewCmdSubmitAddHostZoneProposal) + UpdateDeleteHostZoneClientProposalHandler = govclient.NewProposalHandler(cli.NewCmdSubmitDeleteHostZoneProposal) + UpdateSetHostZoneClientProposalHandler = govclient.NewProposalHandler(cli.NewCmdSubmitSetHostZoneProposal) ) // NewHostZoneProposal defines the add host zone proposal handler -func NewHostZoneProposal(k keeper.Keeper) govtypes.Handler { - return func(ctx sdk.Context, content govtypes.Content) error { +func NewHostZoneProposal(k keeper.Keeper) v1beta1types.Handler { + return func(ctx sdk.Context, content v1beta1types.Content) error { switch c := content.(type) { case *types.AddHostZoneProposal: return k.AddHostZoneProposal(ctx, c) @@ -39,12 +33,3 @@ func NewHostZoneProposal(k keeper.Keeper) govtypes.Handler { } } } - -func emptyRestHandler(client.Context) govrest.ProposalRESTHandler { - return govrest.ProposalRESTHandler{ - SubRoute: "unsupported", - Handler: func(w http.ResponseWriter, r *http.Request) { - rest.WriteErrorResponse(w, http.StatusBadRequest, "Legacy REST Routes are not supported") - }, - } -} diff --git a/x/feeabs/relay_test.go b/x/feeabs/relay_test.go index 0e92f754..2feb7d67 100644 --- a/x/feeabs/relay_test.go +++ b/x/feeabs/relay_test.go @@ -78,7 +78,7 @@ func TestFromIBCTransferToContract(t *testing.T) { // when transfer via sdk transfer from A (module) -> B (contract) coinToSendToB := sdk.NewCoin(sdk.DefaultBondDenom, transferAmount) timeoutHeight := clienttypes.NewHeight(1, 110) - msg := ibctransfertypes.NewMsgTransfer(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID, coinToSendToB, chainA.SenderAccount.GetAddress().String(), chainB.SenderAccount.GetAddress().String(), timeoutHeight, 0) + msg := ibctransfertypes.NewMsgTransfer(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID, coinToSendToB, chainA.SenderAccount.GetAddress().String(), chainB.SenderAccount.GetAddress().String(), timeoutHeight, 0, "") _, err := chainA.SendMsgs(msg) require.NoError(t, err) require.NoError(t, path.EndpointB.UpdateClient()) diff --git a/x/feeabs/types/codec.go b/x/feeabs/types/codec.go index 52e20cfb..06b5fffc 100644 --- a/x/feeabs/types/codec.go +++ b/x/feeabs/types/codec.go @@ -6,7 +6,7 @@ import ( 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" + v1beta1types "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" ) var ( @@ -37,7 +37,7 @@ func RegisterInterfaces(registry types.InterfaceRegistry) { ) registry.RegisterImplementations( - (*govtypes.Content)(nil), + (*v1beta1types.Content)(nil), &AddHostZoneProposal{}, &DeleteHostZoneProposal{}, &SetHostZoneProposal{}, diff --git a/x/feeabs/types/expected_keepers.go b/x/feeabs/types/expected_keepers.go index 6717137d..bc0d87f8 100644 --- a/x/feeabs/types/expected_keepers.go +++ b/x/feeabs/types/expected_keepers.go @@ -4,6 +4,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/auth/types" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" connectiontypes "github.com/cosmos/ibc-go/v7/modules/core/03-connection/types" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" @@ -61,6 +62,7 @@ type ScopedKeeper interface { type ChannelKeeper interface { GetChannel(ctx sdk.Context, srcPort, srcChan string) (channel channeltypes.Channel, found bool) GetNextSequenceSend(ctx sdk.Context, portID, channelID string) (uint64, bool) - SendPacket(ctx sdk.Context, channelCap *capabilitytypes.Capability, packet ibcexported.PacketI) error + SendPacket(ctx sdk.Context, channelCap *capabilitytypes.Capability, sourcePort string, sourceChannel string, + timeoutHeight clienttypes.Height, timeoutTimestamp uint64, data []byte) (uint64, error) ChanCloseInit(ctx sdk.Context, portID, channelID string, chanCap *capabilitytypes.Capability) error } diff --git a/x/feeabs/types/proposal.go b/x/feeabs/types/proposal.go index df39d4db..3e264444 100644 --- a/x/feeabs/types/proposal.go +++ b/x/feeabs/types/proposal.go @@ -1,13 +1,13 @@ package types import ( - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + v1beta1types "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" ) var ( - _ govtypes.Content = &AddHostZoneProposal{} - _ govtypes.Content = &DeleteHostZoneProposal{} - _ govtypes.Content = &SetHostZoneProposal{} + _ v1beta1types.Content = &AddHostZoneProposal{} + _ v1beta1types.Content = &DeleteHostZoneProposal{} + _ v1beta1types.Content = &SetHostZoneProposal{} ) const ( @@ -18,13 +18,13 @@ const ( ) func init() { - govtypes.RegisterProposalType(ProposalTypeAddHostZone) - govtypes.RegisterProposalType(ProposalTypeDeleteHostZone) - govtypes.RegisterProposalType(ProposalTypeSetHostZone) + v1beta1types.RegisterProposalType(ProposalTypeAddHostZone) + v1beta1types.RegisterProposalType(ProposalTypeDeleteHostZone) + v1beta1types.RegisterProposalType(ProposalTypeSetHostZone) } // NewClientUpdateProposal creates a new client update proposal. -func NewAddHostZoneProposal(title, description string, config HostChainFeeAbsConfig) govtypes.Content { +func NewAddHostZoneProposal(title, description string, config HostChainFeeAbsConfig) v1beta1types.Content { return &AddHostZoneProposal{ Title: title, Description: description, @@ -32,7 +32,7 @@ func NewAddHostZoneProposal(title, description string, config HostChainFeeAbsCon } } -func NewDeleteHostZoneProposal(title, description, ibc_denom string) govtypes.Content { +func NewDeleteHostZoneProposal(title, description, ibc_denom string) v1beta1types.Content { return &DeleteHostZoneProposal{ Title: title, Description: description, @@ -40,7 +40,7 @@ func NewDeleteHostZoneProposal(title, description, ibc_denom string) govtypes.Co } } -func NewSetHostZoneProposal(title, description string, config HostChainFeeAbsConfig) govtypes.Content { +func NewSetHostZoneProposal(title, description string, config HostChainFeeAbsConfig) v1beta1types.Content { return &SetHostZoneProposal{ Title: title, Description: description, @@ -62,7 +62,7 @@ func (ahzp *AddHostZoneProposal) ProposalType() string { return ProposalTypeAddH // ValidateBasic runs basic stateless validity checks func (ahzp *AddHostZoneProposal) ValidateBasic() error { - err := govtypes.ValidateAbstract(ahzp) + err := v1beta1types.ValidateAbstract(ahzp) if err != nil { return err } @@ -86,7 +86,7 @@ func (dhzp *DeleteHostZoneProposal) ProposalType() string { return ProposalTypeD // ValidateBasic runs basic stateless validity checks func (dhzp *DeleteHostZoneProposal) ValidateBasic() error { - err := govtypes.ValidateAbstract(dhzp) + err := v1beta1types.ValidateAbstract(dhzp) if err != nil { return err } @@ -110,7 +110,7 @@ func (shzp *SetHostZoneProposal) ProposalType() string { return ProposalTypeSetH // ValidateBasic runs basic stateless validity checks func (shzp *SetHostZoneProposal) ValidateBasic() error { - err := govtypes.ValidateAbstract(shzp) + err := v1beta1types.ValidateAbstract(shzp) if err != nil { return err } From d329ea83e41a1ec5ed3a885f6282fd495bfc7a2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=E1=BA=A1m=20Anh=20Minh?= <1phamminh0811@gmail.com> Date: Thu, 25 May 2023 13:23:07 +0700 Subject: [PATCH 06/90] update proto to fix keeper test --- Makefile | 8 +- .../feeabstraction/absfee/v1beta1/epoch.proto | 2 +- .../absfee/v1beta1/feepool.proto | 2 +- .../absfee/v1beta1/genesis.proto | 2 +- .../absfee/v1beta1/osmosisibc.proto | 2 +- .../absfee/v1beta1/params.proto | 2 +- .../absfee/v1beta1/proposal.proto | 2 +- .../feeabstraction/absfee/v1beta1/query.proto | 2 +- proto/feeabstraction/absfee/v1beta1/tx.proto | 2 +- x/feeabs/keeper/epoch.go | 2 +- x/feeabs/types/epoch.pb.go | 40 +++++----- x/feeabs/types/feepool.pb.go | 30 +++---- x/feeabs/types/genesis.pb.go | 44 +++++----- x/feeabs/types/osmosisibc.pb.go | 80 +++++++++---------- x/feeabs/types/params.pb.go | 52 ++++++------ x/feeabs/types/proposal.pb.go | 22 ++--- x/feeabs/types/query.pb.go | 68 ++++++++-------- x/feeabs/types/tx.pb.go | 72 ++++++++--------- 18 files changed, 215 insertions(+), 219 deletions(-) diff --git a/Makefile b/Makefile index 606725d7..d2d39ba4 100644 --- a/Makefile +++ b/Makefile @@ -117,17 +117,13 @@ ictest-all: ictest-basic ictest-ibc ictest-packet-forward ############################################################################### ### Proto ### ############################################################################### -protoVer=v0.8 -protoImageName=ghcr.io/notional-labs/fa-proto-gen:$(protoVer) -containerProtoGen=fa-proto-gen-$(protoVer) -containerProtoFmt=fa-proto-fmt-$(protoVer) +PROTO_BUILDER_IMAGE=ghcr.io/cosmos/proto-builder proto-all: proto-format proto-gen proto-gen: @echo "Generating Protobuf files" - @if docker ps -a --format '{{.Names}}' | grep -Eq "^${containerProtoGen}$$"; then docker start -a $(containerProtoGen); else docker run --name $(containerProtoGen) -v $(CURDIR):/workspace --workdir /workspace $(protoImageName) \ - sh ./scripts/protocgen.sh; fi + $(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace $(PROTO_BUILDER_IMAGE) sh ./scripts/protocgen.sh proto-format: @echo "Formatting Protobuf files" diff --git a/proto/feeabstraction/absfee/v1beta1/epoch.proto b/proto/feeabstraction/absfee/v1beta1/epoch.proto index ed3d6bb6..57d27157 100644 --- a/proto/feeabstraction/absfee/v1beta1/epoch.proto +++ b/proto/feeabstraction/absfee/v1beta1/epoch.proto @@ -5,7 +5,7 @@ import "gogoproto/gogo.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; -option go_package = "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types"; +option go_package = "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types"; message EpochInfo { // identifier is a unique reference to this particular timer. diff --git a/proto/feeabstraction/absfee/v1beta1/feepool.proto b/proto/feeabstraction/absfee/v1beta1/feepool.proto index 100816d4..0f61b453 100644 --- a/proto/feeabstraction/absfee/v1beta1/feepool.proto +++ b/proto/feeabstraction/absfee/v1beta1/feepool.proto @@ -6,4 +6,4 @@ import "google/api/annotations.proto"; import "cosmos/base/query/v1beta1/pagination.proto"; import "feeabstraction/absfee/v1beta1/params.proto"; -option go_package = "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types"; +option go_package = "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types"; diff --git a/proto/feeabstraction/absfee/v1beta1/genesis.proto b/proto/feeabstraction/absfee/v1beta1/genesis.proto index 36a0c1d9..0bc50fc9 100644 --- a/proto/feeabstraction/absfee/v1beta1/genesis.proto +++ b/proto/feeabstraction/absfee/v1beta1/genesis.proto @@ -7,7 +7,7 @@ import "cosmos/base/query/v1beta1/pagination.proto"; import "feeabstraction/absfee/v1beta1/params.proto"; import "feeabstraction/absfee/v1beta1/epoch.proto"; -option go_package = "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types"; +option go_package = "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types"; // Params defines the parameters for the feeabs module. message GenesisState { diff --git a/proto/feeabstraction/absfee/v1beta1/osmosisibc.proto b/proto/feeabstraction/absfee/v1beta1/osmosisibc.proto index 45b3d3d4..87ce84bd 100644 --- a/proto/feeabstraction/absfee/v1beta1/osmosisibc.proto +++ b/proto/feeabstraction/absfee/v1beta1/osmosisibc.proto @@ -6,7 +6,7 @@ import "google/protobuf/timestamp.proto"; import "google/api/annotations.proto"; import "tendermint/abci/types.proto"; -option go_package = "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types"; +option go_package = "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types"; message QueryArithmeticTwapToNowRequest { uint64 pool_id = 1; diff --git a/proto/feeabstraction/absfee/v1beta1/params.proto b/proto/feeabstraction/absfee/v1beta1/params.proto index 6f600fdb..4437ee85 100644 --- a/proto/feeabstraction/absfee/v1beta1/params.proto +++ b/proto/feeabstraction/absfee/v1beta1/params.proto @@ -6,7 +6,7 @@ import "google/api/annotations.proto"; import "cosmos/base/query/v1beta1/pagination.proto"; import "google/protobuf/duration.proto"; -option go_package = "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types"; +option go_package = "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types"; // Params defines the parameters for the feeabs module. message Params { diff --git a/proto/feeabstraction/absfee/v1beta1/proposal.proto b/proto/feeabstraction/absfee/v1beta1/proposal.proto index 680a25e5..4170ea89 100644 --- a/proto/feeabstraction/absfee/v1beta1/proposal.proto +++ b/proto/feeabstraction/absfee/v1beta1/proposal.proto @@ -5,7 +5,7 @@ import "gogoproto/gogo.proto"; import "google/protobuf/timestamp.proto"; import "google/api/annotations.proto"; -option go_package = "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types"; +option go_package = "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types"; message HostChainFeeAbsConfig { // ibc token is allowed to be used as fee token diff --git a/proto/feeabstraction/absfee/v1beta1/query.proto b/proto/feeabstraction/absfee/v1beta1/query.proto index d4ad525c..4e9707fb 100644 --- a/proto/feeabstraction/absfee/v1beta1/query.proto +++ b/proto/feeabstraction/absfee/v1beta1/query.proto @@ -8,7 +8,7 @@ import "feeabstraction/absfee/v1beta1/osmosisibc.proto"; import "feeabstraction/absfee/v1beta1/proposal.proto"; import "cosmos/base/v1beta1/coin.proto"; -option go_package = "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types"; +option go_package = "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types"; // Query defines the gRPC querier service. service Query { diff --git a/proto/feeabstraction/absfee/v1beta1/tx.proto b/proto/feeabstraction/absfee/v1beta1/tx.proto index 10203b91..8f9e6f5c 100644 --- a/proto/feeabstraction/absfee/v1beta1/tx.proto +++ b/proto/feeabstraction/absfee/v1beta1/tx.proto @@ -9,7 +9,7 @@ import "feeabstraction/absfee/v1beta1/epoch.proto"; import "cosmos/base/v1beta1/coin.proto"; import "google/protobuf/timestamp.proto"; -option go_package = "github.com/notional-labs/fee-abstraction/v3/x/feeabs/types"; +option go_package = "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types"; // Msg is the cosmos.group.v1 Msg service. service Msg { diff --git a/x/feeabs/keeper/epoch.go b/x/feeabs/keeper/epoch.go index f8f5a608..359e75c8 100644 --- a/x/feeabs/keeper/epoch.go +++ b/x/feeabs/keeper/epoch.go @@ -4,7 +4,7 @@ import ( "fmt" "time" - "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" diff --git a/x/feeabs/types/epoch.pb.go b/x/feeabs/types/epoch.pb.go index 4d75f061..17fd669a 100644 --- a/x/feeabs/types/epoch.pb.go +++ b/x/feeabs/types/epoch.pb.go @@ -6,9 +6,9 @@ package types import ( fmt "fmt" _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" _ "github.com/gogo/protobuf/types" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" io "io" math "math" math_bits "math/bits" @@ -164,7 +164,7 @@ var fileDescriptor_4a30326e6468dfa9 = []byte{ // 452 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x3f, 0x6f, 0xd3, 0x40, 0x14, 0xcf, 0xd1, 0x50, 0x9c, 0x03, 0x04, 0x58, 0x05, 0x4c, 0xa4, 0x9e, 0xa3, 0xb0, 0x04, 0x41, - 0x7d, 0x0a, 0x65, 0x2a, 0x5b, 0x00, 0x09, 0x18, 0xd3, 0x0e, 0x88, 0x25, 0x3a, 0x3b, 0xcf, 0xf6, + 0x7d, 0x0a, 0x74, 0x2a, 0x5b, 0x00, 0x09, 0x18, 0xd3, 0x0e, 0x88, 0x25, 0x3a, 0x3b, 0xcf, 0xf6, 0x49, 0xb1, 0xcf, 0xb2, 0x9f, 0x2b, 0xb2, 0xf1, 0x11, 0x32, 0xf2, 0x91, 0x3a, 0x76, 0x64, 0x0a, 0x28, 0xd9, 0x18, 0xfb, 0x09, 0x90, 0xef, 0xec, 0x92, 0x12, 0x50, 0x37, 0xfb, 0xfd, 0xfe, 0xbd, 0xf7, 0xd3, 0xd1, 0x67, 0x21, 0x80, 0xf0, 0x0b, 0xcc, 0x45, 0x80, 0x52, 0xa5, 0x5c, 0xf8, 0x45, @@ -182,14 +182,14 @@ var fileDescriptor_4a30326e6468dfa9 = []byte{ 0x15, 0x75, 0xe9, 0x6e, 0x3f, 0xa5, 0x77, 0x83, 0x32, 0xcf, 0x21, 0xc5, 0x89, 0xae, 0xdf, 0x69, 0xf7, 0xc8, 0x60, 0x67, 0x7c, 0xa7, 0x1e, 0xea, 0x32, 0xec, 0xaf, 0x84, 0x3a, 0x57, 0x58, 0x93, 0x8d, 0xbb, 0x6f, 0x5e, 0x7b, 0xf7, 0xf3, 0xfa, 0x6e, 0xd7, 0xac, 0xf2, 0x3f, 0x27, 0xd3, 0xc2, - 0xc3, 0xcd, 0xe4, 0xe3, 0xcb, 0x46, 0x5e, 0xd1, 0x47, 0x86, 0x1f, 0xa8, 0x32, 0x45, 0x99, 0x46, - 0x46, 0x08, 0x53, 0x67, 0xb7, 0x47, 0x06, 0xd6, 0x78, 0x4f, 0xa3, 0x6f, 0x6a, 0xf0, 0xd8, 0x60, - 0xf6, 0x6b, 0xda, 0xfd, 0x57, 0x5a, 0x0c, 0x32, 0x8a, 0xd1, 0xb1, 0xf4, 0xa9, 0x8f, 0xb7, 0x02, - 0xdf, 0x6b, 0xf8, 0x63, 0xdb, 0xba, 0x75, 0xdf, 0x1a, 0x9d, 0x9c, 0xad, 0x18, 0x39, 0x5f, 0x31, - 0xf2, 0x73, 0xc5, 0xc8, 0x62, 0xcd, 0x5a, 0xe7, 0x6b, 0xd6, 0xfa, 0xbe, 0x66, 0xad, 0xcf, 0x47, - 0x91, 0xc4, 0xb8, 0xf4, 0xbd, 0x40, 0x25, 0x3c, 0x55, 0x55, 0x9b, 0x62, 0x76, 0x30, 0x13, 0x7e, - 0xc1, 0x43, 0x80, 0x83, 0xcd, 0x77, 0x7e, 0x7a, 0xc8, 0xbf, 0x70, 0xf3, 0xa0, 0x39, 0xce, 0x33, - 0x28, 0xfc, 0x5d, 0x5d, 0xd3, 0xe1, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7b, 0xf6, 0xd0, 0xd5, + 0xc3, 0xcd, 0xe4, 0xe3, 0xcb, 0x46, 0x0e, 0xe9, 0x23, 0xc3, 0x0f, 0x54, 0x99, 0xa2, 0x4c, 0x23, + 0x23, 0x84, 0xa9, 0xb3, 0xdb, 0x23, 0x03, 0x6b, 0xbc, 0xa7, 0xd1, 0x37, 0x35, 0x78, 0x6c, 0x30, + 0xfb, 0x35, 0xed, 0xfe, 0x2b, 0x2d, 0x06, 0x19, 0xc5, 0xe8, 0x58, 0xfa, 0xd4, 0xc7, 0x5b, 0x81, + 0xef, 0x35, 0xfc, 0xb1, 0x6d, 0xdd, 0xba, 0x6f, 0x8d, 0x4e, 0xce, 0x56, 0x8c, 0x9c, 0xaf, 0x18, + 0xf9, 0xb9, 0x62, 0x64, 0xb1, 0x66, 0xad, 0xf3, 0x35, 0x6b, 0x7d, 0x5f, 0xb3, 0xd6, 0xe7, 0xa3, + 0x48, 0x62, 0x5c, 0xfa, 0x5e, 0xa0, 0x12, 0x9e, 0xaa, 0xaa, 0x4d, 0x31, 0x3b, 0x98, 0x09, 0xbf, + 0xe0, 0x21, 0xc0, 0xc1, 0xe6, 0x3b, 0x3f, 0x3d, 0xe4, 0x5f, 0xb8, 0x79, 0xd0, 0x1c, 0xe7, 0x19, + 0x14, 0xfe, 0xae, 0xae, 0xe9, 0xd5, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0c, 0xc1, 0xc8, 0xe4, 0x12, 0x03, 0x00, 0x00, } @@ -228,7 +228,7 @@ func (m *EpochInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x30 } - n1, err1 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CurrentEpochStartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CurrentEpochStartTime):]) + n1, err1 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.CurrentEpochStartTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CurrentEpochStartTime):]) if err1 != nil { return 0, err1 } @@ -241,7 +241,7 @@ func (m *EpochInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x20 } - n2, err2 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.Duration, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.Duration):]) + n2, err2 := github_com_cosmos_gogoproto_types.StdDurationMarshalTo(m.Duration, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdDuration(m.Duration):]) if err2 != nil { return 0, err2 } @@ -249,7 +249,7 @@ func (m *EpochInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintEpoch(dAtA, i, uint64(n2)) i-- dAtA[i] = 0x1a - n3, err3 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime):]) + n3, err3 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.StartTime):]) if err3 != nil { return 0, err3 } @@ -288,14 +288,14 @@ func (m *EpochInfo) Size() (n int) { if l > 0 { n += 1 + l + sovEpoch(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.StartTime) n += 1 + l + sovEpoch(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.Duration) + l = github_com_cosmos_gogoproto_types.SizeOfStdDuration(m.Duration) n += 1 + l + sovEpoch(uint64(l)) if m.CurrentEpoch != 0 { n += 1 + sovEpoch(uint64(m.CurrentEpoch)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.CurrentEpochStartTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CurrentEpochStartTime) n += 1 + l + sovEpoch(uint64(l)) if m.EpochCountingStarted { n += 2 @@ -402,7 +402,7 @@ func (m *EpochInfo) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.StartTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.StartTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -435,7 +435,7 @@ func (m *EpochInfo) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.Duration, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdDurationUnmarshal(&m.Duration, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -487,7 +487,7 @@ func (m *EpochInfo) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.CurrentEpochStartTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.CurrentEpochStartTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/feeabs/types/feepool.pb.go b/x/feeabs/types/feepool.pb.go index 22b8bec8..d9f4f8a2 100644 --- a/x/feeabs/types/feepool.pb.go +++ b/x/feeabs/types/feepool.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" math "math" ) @@ -28,19 +28,19 @@ func init() { } var fileDescriptor_aeac12e01fe4cbff = []byte{ - // 219 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x8f, 0xb1, 0x4e, 0xc4, 0x30, - 0x0c, 0x86, 0xdb, 0x85, 0x81, 0x11, 0x31, 0x9d, 0x20, 0x0f, 0x00, 0xba, 0x58, 0xa7, 0xdb, 0x18, - 0x79, 0x06, 0x26, 0x36, 0xa7, 0x72, 0x43, 0xa4, 0x34, 0x0e, 0x71, 0xae, 0xa2, 0x6f, 0xc1, 0x63, - 0x31, 0x76, 0x64, 0x44, 0xed, 0x8b, 0xa0, 0xb4, 0x05, 0xc1, 0x72, 0x9b, 0x25, 0x7f, 0xff, 0xf7, - 0xdb, 0x97, 0xf7, 0x2d, 0x11, 0x1a, 0xc9, 0x09, 0x9b, 0xec, 0x38, 0x00, 0x1a, 0x69, 0x89, 0xa0, - 0x3f, 0x18, 0xca, 0x78, 0x80, 0x96, 0x28, 0x32, 0x7b, 0x1d, 0x13, 0x67, 0xbe, 0xba, 0xfd, 0x0f, - 0xeb, 0x15, 0xd6, 0x1b, 0xbc, 0xbb, 0xb6, 0x6c, 0x79, 0x21, 0xa1, 0x4c, 0x6b, 0x68, 0x77, 0x63, - 0x99, 0xad, 0x27, 0xc0, 0xe8, 0x00, 0x43, 0xe0, 0x8c, 0x25, 0x2b, 0xdb, 0xf6, 0xae, 0x61, 0xe9, - 0x58, 0xc0, 0xa0, 0x10, 0xbc, 0x9e, 0x28, 0x0d, 0xbf, 0xdd, 0x11, 0xad, 0x0b, 0x0b, 0xfc, 0xc3, - 0x9e, 0xbf, 0x35, 0x62, 0xc2, 0x6e, 0xf3, 0x3e, 0x3e, 0x7d, 0x4c, 0xaa, 0x1e, 0x27, 0x55, 0x7f, + // 220 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x8f, 0x31, 0x4e, 0xc5, 0x30, + 0x0c, 0x86, 0xdb, 0x85, 0x81, 0x11, 0x31, 0x3d, 0x41, 0x0e, 0x00, 0x7a, 0xb1, 0x9e, 0x60, 0x62, + 0xe4, 0x0c, 0x4c, 0x6c, 0x4e, 0xe5, 0x86, 0x48, 0x69, 0x1c, 0xe2, 0xbc, 0x8a, 0xde, 0x82, 0x63, + 0x31, 0x76, 0x64, 0x44, 0xed, 0x45, 0x50, 0xda, 0x82, 0x60, 0x79, 0x9b, 0x25, 0x7f, 0xff, 0xf7, + 0xdb, 0xe7, 0xb7, 0x2d, 0x11, 0x1a, 0xc9, 0x09, 0x9b, 0xec, 0x38, 0x00, 0x1a, 0x69, 0x89, 0xa0, + 0x3f, 0x18, 0xca, 0x78, 0x80, 0x96, 0x28, 0x32, 0x7b, 0x1d, 0x13, 0x67, 0xbe, 0xb8, 0xfe, 0x0f, + 0xeb, 0x15, 0xd6, 0x1b, 0xbc, 0xbb, 0xb4, 0x6c, 0x79, 0x21, 0xa1, 0x4c, 0x6b, 0x68, 0x77, 0x65, + 0x99, 0xad, 0x27, 0xc0, 0xe8, 0x00, 0x43, 0xe0, 0x8c, 0x25, 0x2b, 0xdb, 0xf6, 0xa6, 0x61, 0xe9, + 0x58, 0xc0, 0xa0, 0x10, 0xbc, 0x1e, 0x29, 0x0d, 0xbf, 0xdd, 0x11, 0xad, 0x0b, 0x0b, 0xfc, 0xc3, + 0x9e, 0xbe, 0x35, 0x62, 0xc2, 0x6e, 0xf3, 0x3e, 0x3e, 0x7d, 0x4c, 0xaa, 0x1e, 0x27, 0x55, 0x7f, 0x4d, 0xaa, 0x7e, 0x9f, 0x55, 0x35, 0xce, 0xaa, 0xfa, 0x9c, 0x55, 0xf5, 0xfc, 0x60, 0x5d, 0x7e, - 0x39, 0x19, 0xdd, 0x70, 0x07, 0x81, 0x8b, 0x08, 0xfd, 0xde, 0xa3, 0x91, 0xf2, 0xec, 0xfe, 0xaf, - 0xbf, 0x3f, 0xc2, 0x1b, 0xac, 0x9d, 0x90, 0x87, 0x48, 0x62, 0x2e, 0x16, 0xf9, 0xf1, 0x3b, 0x00, - 0x00, 0xff, 0xff, 0x4d, 0x52, 0x4d, 0x32, 0x36, 0x01, 0x00, 0x00, + 0x39, 0x1a, 0xdd, 0x70, 0x07, 0x81, 0x8b, 0x08, 0xfd, 0xde, 0xa3, 0x91, 0xf2, 0xec, 0xfe, 0xaf, + 0xbf, 0xbf, 0x87, 0x37, 0x58, 0x3b, 0x21, 0x0f, 0x91, 0xc4, 0x9c, 0x2d, 0xf2, 0xbb, 0xef, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x3a, 0x65, 0x55, 0x03, 0x36, 0x01, 0x00, 0x00, } diff --git a/x/feeabs/types/genesis.pb.go b/x/feeabs/types/genesis.pb.go index 36a570ec..c638c518 100644 --- a/x/feeabs/types/genesis.pb.go +++ b/x/feeabs/types/genesis.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" io "io" math "math" @@ -95,29 +95,29 @@ func init() { } var fileDescriptor_c85d049bd82004cc = []byte{ - // 343 bytes of a gzipped FileDescriptorProto + // 344 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x90, 0xc1, 0x4a, 0xeb, 0x40, 0x14, 0x86, 0x93, 0xdb, 0x4b, 0x2e, 0x37, 0xd5, 0x4d, 0x50, 0x2c, 0x45, 0xd3, 0x52, 0x10, 0xa2, - 0xd2, 0x0c, 0x6d, 0x77, 0x5d, 0x16, 0x54, 0xba, 0x93, 0xda, 0x95, 0x1b, 0x39, 0x49, 0x4f, 0xd2, - 0x40, 0x92, 0x33, 0x66, 0xa6, 0xc5, 0xbe, 0x85, 0x2f, 0x25, 0x74, 0xd9, 0xa5, 0xab, 0x22, 0xed, - 0x1b, 0xf8, 0x04, 0x92, 0x4c, 0x2a, 0xba, 0xa9, 0xbb, 0x19, 0xf8, 0xfe, 0xef, 0x3f, 0xe7, 0x98, - 0x57, 0x01, 0x22, 0x78, 0x42, 0x66, 0xe0, 0xcb, 0x88, 0x52, 0x06, 0x9e, 0x08, 0x10, 0xd9, 0xbc, - 0xe3, 0xa1, 0x84, 0x0e, 0x0b, 0x31, 0x45, 0x11, 0x09, 0x97, 0x67, 0x24, 0xc9, 0x3a, 0xfb, 0x09, - 0xbb, 0x0a, 0x76, 0x4b, 0xb8, 0x7e, 0x14, 0x52, 0x48, 0x05, 0xc9, 0xf2, 0x97, 0x0a, 0xd5, 0x4f, - 0x43, 0xa2, 0x30, 0x46, 0x06, 0x3c, 0x62, 0x90, 0xa6, 0x24, 0x21, 0xcf, 0x96, 0xca, 0xfa, 0xa5, - 0x4f, 0x22, 0x21, 0xc1, 0x3c, 0x10, 0xc8, 0x9e, 0x66, 0x98, 0x2d, 0xbe, 0xba, 0x39, 0x84, 0x51, - 0x5a, 0xc0, 0x3b, 0x76, 0xff, 0xac, 0x1c, 0x32, 0x48, 0x76, 0xde, 0x8b, 0xfd, 0x2c, 0x72, 0xf2, - 0xa7, 0x0a, 0x6d, 0xbd, 0xea, 0xe6, 0xc1, 0xad, 0xda, 0xf3, 0x5e, 0x82, 0x44, 0x6b, 0x6c, 0x1a, - 0xca, 0x55, 0xd3, 0x9b, 0xba, 0x53, 0xed, 0x9e, 0xbb, 0x7b, 0xf7, 0x76, 0xef, 0x0a, 0x78, 0x70, - 0xbc, 0x5c, 0x37, 0xb4, 0x8f, 0x75, 0xe3, 0x70, 0x01, 0x49, 0xdc, 0x6f, 0x29, 0x45, 0x6b, 0x54, - 0xba, 0xac, 0x1b, 0xd3, 0x28, 0x5a, 0x45, 0xed, 0x4f, 0xb3, 0xe2, 0x54, 0xbb, 0xce, 0x2f, 0xd6, - 0xeb, 0x1c, 0x1e, 0xa6, 0x01, 0x0d, 0xfe, 0xe6, 0xe2, 0x51, 0x99, 0xb6, 0x4e, 0xcc, 0x7f, 0x9c, - 0x32, 0xf9, 0x18, 0x4d, 0x6a, 0x95, 0xa6, 0xee, 0xfc, 0x1f, 0x19, 0xf9, 0x77, 0x38, 0x19, 0x8c, - 0x97, 0x1b, 0x5b, 0x5f, 0x6d, 0x6c, 0xfd, 0x7d, 0x63, 0xeb, 0x2f, 0x5b, 0x5b, 0x5b, 0x6d, 0x6d, - 0xed, 0x6d, 0x6b, 0x6b, 0x0f, 0xfd, 0x30, 0x92, 0xd3, 0x99, 0xe7, 0xfa, 0x94, 0xb0, 0x94, 0xf2, - 0x32, 0x88, 0xdb, 0x31, 0x78, 0x82, 0x05, 0x88, 0xed, 0xef, 0x67, 0x9a, 0xf7, 0xd8, 0x33, 0x53, - 0x73, 0x31, 0xb9, 0xe0, 0x28, 0x3c, 0xa3, 0x38, 0x52, 0xef, 0x33, 0x00, 0x00, 0xff, 0xff, 0x6b, - 0x17, 0xa8, 0x24, 0x29, 0x02, 0x00, 0x00, + 0xd2, 0x0c, 0xad, 0xae, 0xba, 0x2c, 0xa8, 0x74, 0x27, 0xb5, 0x2b, 0x37, 0x72, 0x92, 0x9e, 0xa4, + 0x81, 0x24, 0x67, 0xcc, 0x4c, 0x8b, 0x7d, 0x0b, 0x5f, 0x4a, 0xe8, 0xb2, 0x4b, 0x57, 0x45, 0xda, + 0x37, 0xf0, 0x09, 0x24, 0x99, 0x54, 0x74, 0x53, 0x77, 0x33, 0xf0, 0xfd, 0xdf, 0x7f, 0xce, 0x31, + 0x2f, 0x02, 0x44, 0xf0, 0x84, 0xcc, 0xc0, 0x97, 0x11, 0xa5, 0x0c, 0x3c, 0x11, 0x20, 0xb2, 0x59, + 0xc7, 0x43, 0x09, 0x1d, 0x16, 0x62, 0x8a, 0x22, 0x12, 0x2e, 0xcf, 0x48, 0x92, 0x75, 0xf2, 0x13, + 0x76, 0x15, 0xec, 0x96, 0x70, 0xfd, 0x20, 0xa4, 0x90, 0x0a, 0x92, 0xe5, 0x2f, 0x15, 0xaa, 0x1f, + 0x87, 0x44, 0x61, 0x8c, 0x0c, 0x78, 0xc4, 0x20, 0x4d, 0x49, 0x42, 0x9e, 0x2d, 0x95, 0xf5, 0x73, + 0x9f, 0x44, 0x42, 0x82, 0x79, 0x20, 0x90, 0x3d, 0x4d, 0x31, 0x9b, 0x7f, 0x75, 0x73, 0x08, 0xa3, + 0xb4, 0x80, 0xb7, 0xec, 0xee, 0x59, 0x39, 0x64, 0x90, 0x6c, 0xbd, 0x67, 0xbb, 0x59, 0xe4, 0xe4, + 0x4f, 0x14, 0xda, 0x7a, 0xd5, 0xcd, 0xbd, 0x5b, 0xb5, 0xe7, 0xbd, 0x04, 0x89, 0xd6, 0xc8, 0x34, + 0x94, 0xab, 0xa6, 0x37, 0x75, 0xa7, 0xda, 0x3d, 0x75, 0x77, 0xee, 0xed, 0xde, 0x15, 0x70, 0xff, + 0x70, 0xb1, 0x6a, 0x68, 0x1f, 0xab, 0xc6, 0xfe, 0x1c, 0x92, 0xb8, 0xd7, 0x52, 0x8a, 0xd6, 0xb0, + 0x74, 0x59, 0x37, 0xa6, 0x51, 0xb4, 0x8a, 0xda, 0x9f, 0x66, 0xc5, 0xa9, 0x76, 0x9d, 0x5f, 0xac, + 0xd7, 0x39, 0x3c, 0x48, 0x03, 0xea, 0xff, 0xcd, 0xc5, 0xc3, 0x32, 0x6d, 0x1d, 0x99, 0xff, 0x38, + 0x65, 0xf2, 0x31, 0x1a, 0xd7, 0x2a, 0x4d, 0xdd, 0xf9, 0x3f, 0x34, 0xf2, 0xef, 0x60, 0xdc, 0x1f, + 0x2d, 0xd6, 0xb6, 0xbe, 0x5c, 0xdb, 0xfa, 0xfb, 0xda, 0xd6, 0x5f, 0x36, 0xb6, 0xb6, 0xdc, 0xd8, + 0xda, 0xdb, 0xc6, 0xd6, 0x1e, 0x7a, 0x61, 0x24, 0x27, 0x53, 0xcf, 0xf5, 0x29, 0x61, 0x29, 0xe5, + 0x65, 0x10, 0xb7, 0x63, 0xf0, 0x04, 0x0b, 0x10, 0xdb, 0xdf, 0xcf, 0x34, 0xbb, 0x62, 0xcf, 0x4c, + 0xcd, 0xc5, 0xe4, 0x9c, 0xa3, 0xf0, 0x8c, 0xe2, 0x48, 0x97, 0x9f, 0x01, 0x00, 0x00, 0xff, 0xff, + 0x1c, 0x20, 0xb0, 0x15, 0x29, 0x02, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/x/feeabs/types/osmosisibc.pb.go b/x/feeabs/types/osmosisibc.pb.go index 48c51f17..d1b18396 100644 --- a/x/feeabs/types/osmosisibc.pb.go +++ b/x/feeabs/types/osmosisibc.pb.go @@ -7,9 +7,9 @@ import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" _ "github.com/gogo/protobuf/types" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" types1 "github.com/cometbft/cometbft/abci/types" _ "google.golang.org/genproto/googleapis/api/annotations" io "io" @@ -442,41 +442,41 @@ var fileDescriptor_d7e956854d14a746 = []byte{ // 591 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x94, 0xc1, 0x6e, 0xd3, 0x40, 0x10, 0x86, 0x63, 0x1a, 0x15, 0xb2, 0x41, 0x45, 0x58, 0xa8, 0x84, 0xd0, 0xd8, 0x91, 0x0f, 0x28, - 0x97, 0xec, 0xaa, 0xad, 0xb8, 0xf4, 0x02, 0x49, 0x7b, 0xa0, 0x97, 0x0a, 0xac, 0x48, 0x20, 0x2e, - 0xd1, 0xd8, 0xd9, 0x24, 0xab, 0xc4, 0x5e, 0xc7, 0xbb, 0x69, 0xc8, 0x5b, 0xf4, 0xc2, 0x3b, 0xf5, - 0xd8, 0x03, 0x07, 0xc4, 0x21, 0xa0, 0xe4, 0x0d, 0xfa, 0x04, 0x68, 0xd7, 0x76, 0x92, 0xb6, 0x86, - 0x93, 0x67, 0x67, 0xfe, 0xf9, 0x76, 0x66, 0x3c, 0x36, 0xc2, 0x7d, 0x4a, 0xc1, 0x13, 0x32, 0x06, - 0x5f, 0x32, 0x1e, 0x12, 0xf0, 0x44, 0x9f, 0x52, 0x72, 0x79, 0xe8, 0x51, 0x09, 0x87, 0x84, 0x8b, - 0x80, 0x0b, 0x26, 0x98, 0xe7, 0xe3, 0x28, 0xe6, 0x92, 0x9b, 0xb5, 0xbb, 0x7a, 0x9c, 0xe8, 0x71, - 0xaa, 0xaf, 0xbe, 0x18, 0xf0, 0x01, 0xd7, 0x4a, 0xa2, 0xac, 0x24, 0xa9, 0x6a, 0x0f, 0x38, 0x1f, - 0x8c, 0x29, 0xd1, 0x27, 0x6f, 0xda, 0x27, 0x92, 0x05, 0x54, 0x48, 0x08, 0xa2, 0x54, 0x70, 0x90, - 0x0a, 0x20, 0x62, 0x04, 0xc2, 0x90, 0x4b, 0x50, 0x70, 0x91, 0x46, 0x5f, 0x4b, 0x1a, 0xf6, 0x68, - 0x1c, 0xb0, 0x50, 0x12, 0xf0, 0x7c, 0x46, 0xe4, 0x3c, 0xa2, 0x69, 0xd0, 0xf9, 0x61, 0x20, 0xfb, - 0xd3, 0x94, 0xc6, 0xf3, 0x56, 0xcc, 0xe4, 0x30, 0xa0, 0x92, 0xf9, 0x9d, 0x19, 0x44, 0x1d, 0x7e, - 0xc1, 0x67, 0x2e, 0x9d, 0x4c, 0xa9, 0x90, 0xe6, 0x4b, 0xf4, 0x38, 0xe2, 0x7c, 0xdc, 0x65, 0xbd, - 0x8a, 0x51, 0x37, 0x1a, 0x45, 0x77, 0x57, 0x1d, 0xcf, 0x7b, 0x66, 0x0d, 0x21, 0x0f, 0x04, 0xed, - 0x82, 0x10, 0x54, 0x56, 0x1e, 0xd5, 0x8d, 0x46, 0xc9, 0x2d, 0x29, 0x4f, 0x4b, 0x39, 0x4c, 0x1b, - 0x95, 0x27, 0x53, 0x2e, 0xb3, 0xf8, 0x8e, 0x8e, 0x23, 0xed, 0x4a, 0x04, 0x5f, 0x10, 0x12, 0x12, - 0x62, 0xd9, 0x55, 0x0d, 0x55, 0x8a, 0x75, 0xa3, 0x51, 0x3e, 0xaa, 0xe2, 0xa4, 0x19, 0x9c, 0x75, - 0x8b, 0x3b, 0x59, 0xb7, 0xed, 0xda, 0xf5, 0xc2, 0x2e, 0xdc, 0x2e, 0xec, 0xe7, 0x73, 0x08, 0xc6, - 0x27, 0xce, 0x26, 0xd7, 0xb9, 0xfa, 0x6d, 0x1b, 0x6e, 0x49, 0x3b, 0x94, 0xdc, 0xf9, 0x6e, 0xa0, - 0xfa, 0xbf, 0xdb, 0x12, 0x11, 0x0f, 0x05, 0x35, 0x27, 0xe8, 0x19, 0xac, 0xc3, 0x5d, 0x39, 0x83, - 0x48, 0xf7, 0x57, 0x6a, 0x7f, 0x50, 0xf7, 0xfc, 0x5a, 0xd8, 0x6f, 0x06, 0x4c, 0x0e, 0xa7, 0x1e, - 0xf6, 0x79, 0x40, 0x7c, 0xfd, 0x2e, 0xd3, 0x47, 0x53, 0xf4, 0x46, 0xe9, 0x18, 0xcf, 0xa8, 0x7f, - 0xbb, 0xb0, 0xf7, 0x93, 0x8a, 0xee, 0xe1, 0x1c, 0x77, 0x0f, 0xee, 0xdc, 0xef, 0xbc, 0x47, 0xfb, - 0xe7, 0xa1, 0xa4, 0xb1, 0x3f, 0x04, 0x16, 0xea, 0x02, 0xb3, 0x21, 0x9b, 0xa8, 0xd8, 0x03, 0x09, - 0xba, 0x82, 0xa7, 0xae, 0xb6, 0x95, 0x2f, 0x02, 0x39, 0x4c, 0x27, 0xab, 0x6d, 0xe7, 0x14, 0xbd, - 0xba, 0x47, 0xf8, 0x08, 0xfe, 0x88, 0xca, 0xb3, 0x34, 0x21, 0x0f, 0x12, 0xd0, 0x80, 0x67, 0x10, - 0x65, 0x3b, 0x18, 0x55, 0x72, 0x21, 0x2d, 0x7f, 0x94, 0xc7, 0x70, 0x66, 0xe8, 0x20, 0xbf, 0xec, - 0x24, 0xcd, 0xfc, 0x8c, 0x9e, 0xc4, 0x89, 0x43, 0x54, 0x8c, 0xfa, 0x4e, 0xa3, 0x7c, 0xf4, 0x16, - 0xff, 0x77, 0xd3, 0x71, 0x3e, 0xae, 0x5d, 0x54, 0x93, 0x77, 0xd7, 0x30, 0xe7, 0x02, 0x95, 0x4f, - 0xf5, 0xc4, 0xb5, 0xca, 0x7c, 0xf7, 0xe0, 0x9e, 0x1a, 0xde, 0x6c, 0x37, 0x56, 0xdb, 0x8d, 0x53, - 0x94, 0x4e, 0x78, 0xc0, 0xeb, 0xa0, 0xbd, 0x84, 0xb7, 0x5e, 0x82, 0x36, 0x2a, 0xc5, 0xa9, 0x9d, - 0x31, 0xad, 0x1c, 0x66, 0xa2, 0xd8, 0x86, 0x6e, 0xd2, 0xda, 0x9d, 0xeb, 0xa5, 0x65, 0xdc, 0x2c, - 0x2d, 0xe3, 0xcf, 0xd2, 0x32, 0xae, 0x56, 0x56, 0xe1, 0x66, 0x65, 0x15, 0x7e, 0xae, 0xac, 0xc2, - 0xd7, 0x93, 0xad, 0x0d, 0x0a, 0xb9, 0x1a, 0x04, 0x8c, 0x9b, 0x63, 0xf0, 0x04, 0xe9, 0x53, 0xda, - 0xdc, 0xfe, 0x73, 0x5c, 0x1e, 0x93, 0x6f, 0x24, 0x99, 0x59, 0xb2, 0x59, 0xde, 0xae, 0xfe, 0x02, - 0x8e, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x67, 0xee, 0x6d, 0xb7, 0x64, 0x04, 0x00, 0x00, + 0x97, 0xec, 0xaa, 0x05, 0x2e, 0xbd, 0x40, 0xd2, 0x1e, 0xe8, 0xa5, 0x02, 0x2b, 0x12, 0x88, 0x4b, + 0x34, 0x76, 0x36, 0xc9, 0x2a, 0xb1, 0xd7, 0xf1, 0x6e, 0x1a, 0xf2, 0x16, 0xbd, 0xf0, 0x4e, 0x3d, + 0xf6, 0xc0, 0x01, 0x71, 0x08, 0x28, 0x79, 0x83, 0x3e, 0x01, 0xda, 0xb5, 0x9d, 0xa4, 0xad, 0xe1, + 0xe4, 0xd9, 0x99, 0x7f, 0xbe, 0x9d, 0x19, 0x8f, 0x8d, 0x70, 0x9f, 0x52, 0xf0, 0x84, 0x8c, 0xc1, + 0x97, 0x8c, 0x87, 0x04, 0x3c, 0xd1, 0xa7, 0x94, 0x5c, 0x1c, 0x7a, 0x54, 0xc2, 0x21, 0xe1, 0x22, + 0xe0, 0x82, 0x09, 0xe6, 0xf9, 0x38, 0x8a, 0xb9, 0xe4, 0x66, 0xed, 0xb6, 0x1e, 0x27, 0x7a, 0x9c, + 0xea, 0xab, 0xcf, 0x06, 0x7c, 0xc0, 0xb5, 0x92, 0x28, 0x2b, 0x49, 0xaa, 0xda, 0x03, 0xce, 0x07, + 0x63, 0x4a, 0xf4, 0xc9, 0x9b, 0xf6, 0x89, 0x64, 0x01, 0x15, 0x12, 0x82, 0x28, 0x15, 0x1c, 0xa4, + 0x02, 0x88, 0x18, 0x81, 0x30, 0xe4, 0x12, 0x14, 0x5c, 0xa4, 0xd1, 0x97, 0x92, 0x86, 0x3d, 0x1a, + 0x07, 0x2c, 0x94, 0x04, 0x3c, 0x9f, 0x11, 0x39, 0x8f, 0x68, 0x1a, 0x74, 0x7e, 0x18, 0xc8, 0xfe, + 0x34, 0xa5, 0xf1, 0xbc, 0x15, 0x33, 0x39, 0x0c, 0xa8, 0x64, 0x7e, 0x67, 0x06, 0x51, 0x87, 0x9f, + 0xf3, 0x99, 0x4b, 0x27, 0x53, 0x2a, 0xa4, 0xf9, 0x1c, 0x3d, 0x8c, 0x38, 0x1f, 0x77, 0x59, 0xaf, + 0x62, 0xd4, 0x8d, 0x46, 0xd1, 0xdd, 0x55, 0xc7, 0xb3, 0x9e, 0x59, 0x43, 0xc8, 0x03, 0x41, 0xbb, + 0x20, 0x04, 0x95, 0x95, 0x07, 0x75, 0xa3, 0x51, 0x72, 0x4b, 0xca, 0xd3, 0x52, 0x0e, 0xd3, 0x46, + 0xe5, 0xc9, 0x94, 0xcb, 0x2c, 0xbe, 0xa3, 0xe3, 0x48, 0xbb, 0x12, 0xc1, 0x17, 0x84, 0x84, 0x84, + 0x58, 0x76, 0x55, 0x43, 0x95, 0x62, 0xdd, 0x68, 0x94, 0x8f, 0xaa, 0x38, 0x69, 0x06, 0x67, 0xdd, + 0xe2, 0x4e, 0xd6, 0x6d, 0xbb, 0x76, 0xb5, 0xb0, 0x0b, 0x37, 0x0b, 0xfb, 0xe9, 0x1c, 0x82, 0xf1, + 0xb1, 0xb3, 0xc9, 0x75, 0x2e, 0x7f, 0xdb, 0x86, 0x5b, 0xd2, 0x0e, 0x25, 0x77, 0xbe, 0x1b, 0xa8, + 0xfe, 0xef, 0xb6, 0x44, 0xc4, 0x43, 0x41, 0xcd, 0x09, 0x7a, 0x02, 0xeb, 0x70, 0x57, 0xce, 0x20, + 0xd2, 0xfd, 0x95, 0xda, 0x1f, 0xd4, 0x3d, 0xbf, 0x16, 0xf6, 0xab, 0x01, 0x93, 0xc3, 0xa9, 0x87, + 0x7d, 0x1e, 0x10, 0x5f, 0xbf, 0xcb, 0xf4, 0xd1, 0x14, 0xbd, 0x51, 0x3a, 0xc6, 0x53, 0xea, 0xdf, + 0x2c, 0xec, 0xfd, 0xa4, 0xa2, 0x3b, 0x38, 0xc7, 0xdd, 0x83, 0x5b, 0xf7, 0x3b, 0xef, 0xd1, 0xfe, + 0x59, 0x28, 0x69, 0xec, 0x0f, 0x81, 0x85, 0xba, 0xc0, 0x6c, 0xc8, 0x26, 0x2a, 0xf6, 0x40, 0x82, + 0xae, 0xe0, 0xb1, 0xab, 0x6d, 0xe5, 0x8b, 0x40, 0x0e, 0xd3, 0xc9, 0x6a, 0xdb, 0x39, 0x41, 0x2f, + 0xee, 0x10, 0x3e, 0x82, 0x3f, 0xa2, 0xf2, 0x34, 0x4d, 0xc8, 0x83, 0x04, 0x34, 0xe0, 0x19, 0x44, + 0xd9, 0x0e, 0x46, 0x95, 0x5c, 0x48, 0xcb, 0x1f, 0xe5, 0x31, 0x9c, 0x19, 0x3a, 0xc8, 0x2f, 0x3b, + 0x49, 0x33, 0x3f, 0xa3, 0x47, 0x71, 0xe2, 0x10, 0x15, 0xa3, 0xbe, 0xd3, 0x28, 0x1f, 0xbd, 0xc5, + 0xff, 0xdd, 0x74, 0x9c, 0x8f, 0x6b, 0x17, 0xd5, 0xe4, 0xdd, 0x35, 0xcc, 0x39, 0x47, 0xe5, 0x13, + 0x3d, 0x71, 0xad, 0x32, 0xdf, 0xdd, 0xbb, 0xa7, 0x86, 0x37, 0xdb, 0x8d, 0xd5, 0x76, 0xe3, 0x14, + 0xa5, 0x13, 0xee, 0xf1, 0x3a, 0x68, 0x2f, 0xe1, 0xad, 0x97, 0xa0, 0x8d, 0x4a, 0x71, 0x6a, 0x67, + 0x4c, 0x2b, 0x87, 0x99, 0x28, 0xb6, 0xa1, 0x9b, 0xb4, 0x76, 0xe7, 0x6a, 0x69, 0x19, 0xd7, 0x4b, + 0xcb, 0xf8, 0xb3, 0xb4, 0x8c, 0xcb, 0x95, 0x55, 0xb8, 0x5e, 0x59, 0x85, 0x9f, 0x2b, 0xab, 0xf0, + 0xf5, 0x78, 0x6b, 0x83, 0x42, 0xae, 0x06, 0x01, 0xe3, 0xe6, 0x18, 0x3c, 0x41, 0xfa, 0x94, 0x36, + 0xb7, 0xff, 0x1c, 0x17, 0x6f, 0xc8, 0x37, 0x92, 0xcc, 0x2c, 0xd9, 0x2c, 0x6f, 0x57, 0x7f, 0x01, + 0xaf, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x10, 0xd9, 0x75, 0x86, 0x64, 0x04, 0x00, 0x00, } func (m *QueryArithmeticTwapToNowRequest) Marshal() (dAtA []byte, err error) { @@ -499,7 +499,7 @@ func (m *QueryArithmeticTwapToNowRequest) MarshalToSizedBuffer(dAtA []byte) (int _ = i var l int _ = l - n1, err1 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime):]) + n1, err1 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.StartTime):]) if err1 != nil { return 0, err1 } @@ -805,7 +805,7 @@ func (m *QueryArithmeticTwapToNowRequest) Size() (n int) { if l > 0 { n += 1 + l + sovOsmosisibc(uint64(l)) } - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.StartTime) n += 1 + l + sovOsmosisibc(uint64(l)) return n } @@ -1060,7 +1060,7 @@ func (m *QueryArithmeticTwapToNowRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.StartTime, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.StartTime, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/feeabs/types/params.pb.go b/x/feeabs/types/params.pb.go index 1250e6c8..96ab219f 100644 --- a/x/feeabs/types/params.pb.go +++ b/x/feeabs/types/params.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" _ "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" _ "github.com/gogo/protobuf/types" _ "google.golang.org/genproto/googleapis/api/annotations" io "io" @@ -127,31 +127,31 @@ func init() { var fileDescriptor_64e66a0978c84086 = []byte{ // 403 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x92, 0x3f, 0x6f, 0x13, 0x31, - 0x18, 0xc6, 0x73, 0x05, 0x22, 0xd5, 0xe3, 0x29, 0x88, 0x53, 0xd4, 0x1e, 0x88, 0x09, 0x55, 0x6a, - 0x4c, 0x54, 0xb1, 0xb0, 0x41, 0xc5, 0x90, 0x05, 0x0a, 0x64, 0x62, 0xb1, 0x5e, 0x3b, 0xef, 0xdd, - 0x59, 0xca, 0xd9, 0x8e, 0xed, 0x24, 0xf4, 0x5b, 0xf0, 0x95, 0xd8, 0x18, 0x3b, 0x32, 0xa2, 0xe4, - 0x8b, 0x20, 0xff, 0x49, 0x94, 0x6e, 0x77, 0xf7, 0xfc, 0x7e, 0x7e, 0x1f, 0x9d, 0x5f, 0x72, 0xd5, - 0x20, 0x02, 0x77, 0xde, 0x82, 0xf0, 0x52, 0x2b, 0x0a, 0xdc, 0x35, 0x88, 0x74, 0x33, 0xe5, 0xe8, - 0x61, 0x4a, 0x0d, 0x58, 0xe8, 0xdd, 0xc4, 0x58, 0xed, 0x75, 0x79, 0xf9, 0x98, 0x9d, 0x24, 0x76, - 0x92, 0xd9, 0xf1, 0xa8, 0xd5, 0xad, 0x8e, 0x24, 0x0d, 0x4f, 0x49, 0x1a, 0x5f, 0xb4, 0x5a, 0xb7, - 0x4b, 0xa4, 0x60, 0x24, 0x05, 0xa5, 0xb4, 0x87, 0xe0, 0xe6, 0x23, 0xc7, 0x57, 0x42, 0xbb, 0x5e, - 0x3b, 0xca, 0xc1, 0x21, 0x5d, 0xad, 0xd1, 0xde, 0x9f, 0x8c, 0x6e, 0xa5, 0x8a, 0x70, 0x66, 0xeb, - 0x7c, 0x52, 0x7c, 0xe3, 0xeb, 0x86, 0x2e, 0xd6, 0xf6, 0x24, 0x7f, 0xfd, 0xfb, 0x8c, 0x0c, 0xef, - 0x62, 0xdf, 0xf2, 0x1d, 0x79, 0x11, 0xd4, 0x0d, 0x32, 0xc9, 0x05, 0x2e, 0x98, 0x54, 0x2c, 0xce, - 0x91, 0xae, 0x2a, 0x5e, 0x15, 0x6f, 0xce, 0xbf, 0x8d, 0x52, 0x3c, 0x0b, 0xe9, 0x4c, 0x7d, 0x49, - 0x59, 0xd0, 0x32, 0xc6, 0x62, 0x17, 0xe6, 0xb7, 0x60, 0x98, 0x01, 0xdf, 0x55, 0x67, 0x49, 0xcb, - 0xf1, 0xd7, 0x90, 0xce, 0xb7, 0x60, 0xee, 0xc0, 0x77, 0xe5, 0x25, 0x21, 0xa2, 0x03, 0xa9, 0x98, - 0x82, 0x1e, 0xab, 0x27, 0x91, 0x3c, 0x8f, 0x5f, 0x3e, 0x43, 0x8f, 0xe5, 0x5b, 0x32, 0x92, 0x5c, - 0x30, 0x6f, 0x41, 0xb9, 0x06, 0x2d, 0x13, 0x1d, 0x28, 0x85, 0xcb, 0xea, 0x69, 0x04, 0x4b, 0xc9, - 0xc5, 0x3c, 0x47, 0xb7, 0x29, 0x29, 0xa7, 0xe4, 0x79, 0x30, 0x52, 0x07, 0x29, 0x56, 0x47, 0xe5, - 0xd9, 0x51, 0x89, 0x0d, 0x66, 0x62, 0x75, 0x50, 0x3e, 0x91, 0x97, 0x87, 0xea, 0xc2, 0x6a, 0xe7, - 0x52, 0x21, 0x17, 0xfa, 0xc3, 0x62, 0x61, 0xd1, 0xb9, 0x6a, 0x18, 0xe5, 0x8b, 0x8c, 0xdd, 0x1e, - 0xa9, 0xef, 0x5b, 0x30, 0x1f, 0x12, 0xf3, 0x71, 0xfe, 0x67, 0x57, 0x17, 0x0f, 0xbb, 0xba, 0xf8, - 0xb7, 0xab, 0x8b, 0x5f, 0xfb, 0x7a, 0xf0, 0xb0, 0xaf, 0x07, 0x7f, 0xf7, 0xf5, 0xe0, 0xc7, 0xfb, - 0x56, 0xfa, 0x6e, 0xcd, 0x27, 0x42, 0xf7, 0x54, 0xe9, 0xf0, 0xdb, 0x61, 0x79, 0xbd, 0x04, 0xee, - 0x68, 0x83, 0x78, 0x7d, 0xba, 0x42, 0x9b, 0x1b, 0xfa, 0x93, 0xa6, 0x55, 0xa1, 0xfe, 0xde, 0xa0, - 0xe3, 0xc3, 0x78, 0x41, 0x37, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0x11, 0x59, 0x6d, 0xa8, 0x6d, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x92, 0x3f, 0x8f, 0xd3, 0x30, + 0x18, 0xc6, 0x9b, 0x03, 0x2a, 0x9d, 0xc7, 0xa8, 0x88, 0xa8, 0xba, 0x0b, 0x88, 0x09, 0x9d, 0x74, + 0x35, 0x15, 0xb0, 0xb0, 0xc1, 0x89, 0xa1, 0x0b, 0x1c, 0xd0, 0x89, 0xc5, 0x7a, 0xed, 0xbe, 0x49, + 0x2c, 0x35, 0xb6, 0x6b, 0xbb, 0x2d, 0xf7, 0x2d, 0xf8, 0x4a, 0x6c, 0x8c, 0x37, 0x32, 0xa2, 0xf6, + 0x8b, 0x20, 0xff, 0x69, 0xd5, 0xdb, 0x92, 0x3c, 0xbf, 0x9f, 0xdf, 0x47, 0xf1, 0x4b, 0xae, 0x1a, + 0x44, 0xe0, 0xce, 0x5b, 0x10, 0x5e, 0x6a, 0x45, 0x81, 0xbb, 0x06, 0x91, 0x6e, 0xa6, 0x1c, 0x3d, + 0x4c, 0xa9, 0x01, 0x0b, 0xbd, 0x9b, 0x18, 0xab, 0xbd, 0x2e, 0x2f, 0x1f, 0xb2, 0x93, 0xc4, 0x4e, + 0x32, 0x3b, 0x1e, 0xb5, 0xba, 0xd5, 0x91, 0xa4, 0xe1, 0x29, 0x49, 0xe3, 0x8b, 0x56, 0xeb, 0x76, + 0x89, 0x14, 0x8c, 0xa4, 0xa0, 0x94, 0xf6, 0x10, 0xdc, 0x7c, 0xe4, 0xf8, 0x4a, 0x68, 0xd7, 0x6b, + 0x47, 0x39, 0x38, 0xa4, 0xab, 0x35, 0xda, 0xbb, 0x93, 0xd1, 0xad, 0x54, 0x11, 0xce, 0x6c, 0x9d, + 0x4f, 0x8a, 0x6f, 0x7c, 0xdd, 0xd0, 0xc5, 0xda, 0x9e, 0xe4, 0x2f, 0x7f, 0x9f, 0x91, 0xe1, 0x6d, + 0xec, 0x5b, 0xbe, 0x23, 0xcf, 0x82, 0xba, 0x41, 0x26, 0xb9, 0xc0, 0x05, 0x93, 0x8a, 0xc5, 0x39, + 0xd2, 0x55, 0xc5, 0x8b, 0xe2, 0xd5, 0xf9, 0xb7, 0x51, 0x8a, 0x67, 0x21, 0x9d, 0xa9, 0x2f, 0x29, + 0x0b, 0x5a, 0xc6, 0x58, 0xec, 0xc2, 0xfc, 0x16, 0x0c, 0x33, 0xe0, 0xbb, 0xea, 0x2c, 0x69, 0x39, + 0xfe, 0x1a, 0xd2, 0xf9, 0x16, 0xcc, 0x2d, 0xf8, 0xae, 0xbc, 0x24, 0x44, 0x74, 0x20, 0x15, 0x53, + 0xd0, 0x63, 0xf5, 0x28, 0x92, 0xe7, 0xf1, 0xcb, 0x67, 0xe8, 0xb1, 0x7c, 0x4d, 0x46, 0x92, 0x0b, + 0xe6, 0x2d, 0x28, 0xd7, 0xa0, 0x65, 0xa2, 0x03, 0xa5, 0x70, 0x59, 0x3d, 0x8e, 0x60, 0x29, 0xb9, + 0x98, 0xe7, 0xe8, 0x26, 0x25, 0xe5, 0x94, 0x3c, 0x0d, 0x46, 0xea, 0x20, 0xc5, 0xea, 0xa8, 0x3c, + 0x39, 0x2a, 0xb1, 0xc1, 0x4c, 0xac, 0x0e, 0xca, 0x27, 0xf2, 0xfc, 0x50, 0x5d, 0x58, 0xed, 0x5c, + 0x2a, 0xe4, 0x42, 0x7f, 0x58, 0x2c, 0x2c, 0x3a, 0x57, 0x0d, 0xa3, 0x7c, 0x91, 0xb1, 0x9b, 0x23, + 0xf5, 0x7d, 0x0b, 0xe6, 0x43, 0x62, 0x3e, 0xce, 0xff, 0xec, 0xea, 0xe2, 0x7e, 0x57, 0x17, 0xff, + 0x76, 0x75, 0xf1, 0x6b, 0x5f, 0x0f, 0xee, 0xf7, 0xf5, 0xe0, 0xef, 0xbe, 0x1e, 0xfc, 0x78, 0xdf, + 0x4a, 0xdf, 0xad, 0xf9, 0x44, 0xe8, 0x9e, 0x2a, 0x1d, 0x7e, 0x3b, 0x2c, 0xaf, 0x97, 0xc0, 0x1d, + 0x6d, 0x10, 0xaf, 0x4f, 0x57, 0x68, 0xf3, 0x96, 0xfe, 0xa4, 0x69, 0x55, 0xa8, 0xbf, 0x33, 0xe8, + 0xf8, 0x30, 0x5e, 0xd0, 0x9b, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x66, 0x6e, 0x75, 0x99, 0x6d, 0x02, 0x00, 0x00, } diff --git a/x/feeabs/types/proposal.pb.go b/x/feeabs/types/proposal.pb.go index 32363be3..91bdb786 100644 --- a/x/feeabs/types/proposal.pb.go +++ b/x/feeabs/types/proposal.pb.go @@ -6,7 +6,7 @@ package types import ( fmt "fmt" _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/gogo/protobuf/proto" + proto "github.com/cosmos/gogoproto/proto" _ "github.com/gogo/protobuf/types" _ "google.golang.org/genproto/googleapis/api/annotations" io "io" @@ -238,7 +238,7 @@ var fileDescriptor_b23c77c2b5aa1f89 = []byte{ // 470 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x93, 0xbf, 0x6e, 0xd4, 0x40, 0x10, 0xc6, 0xcf, 0xe4, 0x38, 0x92, 0x4d, 0x81, 0x30, 0x47, 0x62, 0x25, 0xe0, 0x3b, 0xb9, 0xba, - 0x82, 0x78, 0x15, 0x02, 0xcd, 0x89, 0x26, 0x7f, 0x84, 0x48, 0x17, 0x99, 0x54, 0x69, 0xcc, 0xae, + 0x82, 0x78, 0x15, 0x08, 0xcd, 0x89, 0x26, 0x7f, 0x84, 0x48, 0x17, 0x99, 0x54, 0x69, 0xcc, 0xae, 0x3d, 0xf6, 0xad, 0x58, 0xef, 0x58, 0xde, 0x4d, 0x20, 0x3c, 0x01, 0x25, 0x8f, 0xc0, 0x4b, 0x50, 0xd2, 0x53, 0x5e, 0x49, 0x85, 0xd0, 0xdd, 0x1b, 0xf0, 0x04, 0x68, 0xbd, 0x06, 0x1d, 0x12, 0xa2, 0xa2, 0xa1, 0xf3, 0x37, 0xfb, 0x9b, 0xd9, 0xcf, 0xdf, 0x68, 0xc9, 0xc3, 0x02, 0x80, 0x71, 0x6d, @@ -257,15 +257,15 @@ var fileDescriptor_b23c77c2b5aa1f89 = []byte{ 0x64, 0x3d, 0xe9, 0x54, 0xf4, 0xd1, 0x23, 0x77, 0x0f, 0xf3, 0xdc, 0xfe, 0xc2, 0x05, 0x2a, 0x38, 0xeb, 0x12, 0xf5, 0x87, 0xe4, 0xa6, 0x11, 0x46, 0x82, 0x73, 0x9e, 0x38, 0xe1, 0x8f, 0xc9, 0x66, 0x0e, 0x3a, 0x6b, 0x44, 0x6d, 0x33, 0xe8, 0xcc, 0xac, 0x96, 0xfc, 0x97, 0xe4, 0xce, 0x0c, 0xb5, - 0x49, 0x33, 0x9b, 0x47, 0x9a, 0xb5, 0x51, 0xb4, 0x56, 0x36, 0x1f, 0x3d, 0x8e, 0xff, 0xba, 0x9f, - 0xf8, 0x8f, 0x31, 0x26, 0xb7, 0x67, 0x3f, 0xcb, 0xae, 0x30, 0xed, 0xbf, 0xfb, 0x30, 0xea, 0x45, - 0x9a, 0x6c, 0x9d, 0x80, 0x04, 0x03, 0xff, 0xcc, 0xf9, 0xee, 0xea, 0xbe, 0xd6, 0xda, 0xf3, 0x5f, - 0x5b, 0xe9, 0x2e, 0xb5, 0x61, 0xbd, 0x00, 0xf3, 0xbf, 0x85, 0x75, 0x74, 0xfe, 0x79, 0x11, 0x7a, - 0xf3, 0x45, 0xe8, 0x7d, 0x5b, 0x84, 0xde, 0xfb, 0x65, 0xd8, 0x9b, 0x2f, 0xc3, 0xde, 0x97, 0x65, - 0xd8, 0xbb, 0x98, 0x96, 0xc2, 0xcc, 0x2e, 0x79, 0x9c, 0x61, 0x45, 0x15, 0xda, 0x8b, 0x98, 0xdc, - 0x93, 0x8c, 0x6b, 0x5a, 0x00, 0xec, 0xad, 0x3e, 0xbd, 0xab, 0x03, 0xfa, 0x86, 0x3a, 0x4f, 0xd4, - 0x5c, 0xd7, 0xa0, 0xf9, 0xa0, 0x7d, 0x01, 0x07, 0x3f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xc9, 0xea, - 0x2e, 0x64, 0xa5, 0x03, 0x00, 0x00, + 0x49, 0x33, 0x9b, 0x47, 0x9a, 0xb5, 0x51, 0xb4, 0x56, 0x36, 0x1f, 0x1d, 0xc4, 0x7f, 0xdd, 0x4f, + 0xfc, 0xc7, 0x18, 0x93, 0xdb, 0xb3, 0x9f, 0x65, 0x57, 0x98, 0xf6, 0xdf, 0x7d, 0x18, 0xf5, 0x22, + 0x4d, 0xb6, 0x4e, 0x40, 0x82, 0x81, 0x7f, 0xe6, 0x7c, 0x77, 0x75, 0x5f, 0x6b, 0xed, 0xf9, 0xaf, + 0xad, 0x74, 0x97, 0xda, 0xb0, 0x5e, 0x80, 0xf9, 0xdf, 0xc2, 0x3a, 0x3a, 0xff, 0xbc, 0x08, 0xbd, + 0xf9, 0x22, 0xf4, 0xbe, 0x2d, 0x42, 0xef, 0xfd, 0x32, 0xec, 0xcd, 0x97, 0x61, 0xef, 0xcb, 0x32, + 0xec, 0x5d, 0x4c, 0x4b, 0x61, 0x66, 0x97, 0x3c, 0xce, 0xb0, 0xa2, 0x0a, 0xed, 0x45, 0x4c, 0xee, + 0x49, 0xc6, 0x35, 0x2d, 0x00, 0xf6, 0x56, 0x9f, 0xde, 0xd5, 0x01, 0x7d, 0x43, 0x9d, 0x27, 0x6a, + 0xae, 0x6b, 0xd0, 0x7c, 0xd0, 0xbe, 0x80, 0xc7, 0x3f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xbe, 0xdd, + 0x36, 0x55, 0xa5, 0x03, 0x00, 0x00, } func (m *HostChainFeeAbsConfig) Marshal() (dAtA []byte, err error) { diff --git a/x/feeabs/types/query.pb.go b/x/feeabs/types/query.pb.go index cf897daa..9b897a29 100644 --- a/x/feeabs/types/query.pb.go +++ b/x/feeabs/types/query.pb.go @@ -9,8 +9,8 @@ import ( github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" @@ -391,7 +391,7 @@ var fileDescriptor_0a3dde61db3cbb0e = []byte{ // 757 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0xcf, 0x4f, 0xdb, 0x48, 0x18, 0xcd, 0x80, 0x96, 0x85, 0x41, 0xda, 0x68, 0x47, 0xb0, 0xca, 0x06, 0xd6, 0x09, 0xa3, 0x55, - 0x45, 0x11, 0xb6, 0x4b, 0xe8, 0x01, 0x45, 0x2a, 0xcd, 0x0f, 0x84, 0xb8, 0x54, 0x55, 0x23, 0x4e, + 0x45, 0x11, 0xb6, 0x4b, 0xca, 0x01, 0x45, 0x2a, 0xcd, 0x0f, 0x84, 0xb8, 0x54, 0x55, 0x23, 0x4e, 0xbd, 0x44, 0x63, 0x67, 0x92, 0x58, 0x9d, 0x78, 0x4c, 0xc6, 0x81, 0xd2, 0xaa, 0x17, 0xee, 0x95, 0x2a, 0xf5, 0xd0, 0x7b, 0x8f, 0x3d, 0xf5, 0xd8, 0x3f, 0x01, 0x89, 0x1e, 0x90, 0x7a, 0x69, 0x7b, 0x48, 0x2b, 0xe0, 0x2f, 0xe0, 0x2f, 0xa8, 0x3c, 0xe3, 0x04, 0x12, 0x82, 0x13, 0xa5, 0xa7, 0xc4, @@ -406,37 +406,37 @@ var fileDescriptor_0a3dde61db3cbb0e = []byte{ 0xfc, 0x62, 0x9d, 0x38, 0x6e, 0x91, 0xbb, 0x55, 0xa7, 0x56, 0xa2, 0x7b, 0x2d, 0x2a, 0x7c, 0xb4, 0x00, 0x67, 0x1c, 0xcb, 0x2e, 0x57, 0xa8, 0xcb, 0x1b, 0x09, 0x90, 0x06, 0xcb, 0x33, 0xa5, 0x69, 0xc7, 0xb2, 0xb7, 0x82, 0x67, 0xfc, 0x1e, 0xdc, 0x56, 0x2c, 0x3c, 0xee, 0x52, 0x74, 0x04, 0xe0, - 0xdf, 0x75, 0x2e, 0xfc, 0xb2, 0x1d, 0x9c, 0x95, 0x6d, 0x79, 0x28, 0x59, 0x66, 0x33, 0xf7, 0x8d, - 0xc8, 0xa9, 0x1b, 0x5d, 0xca, 0x6d, 0x4a, 0xf3, 0x96, 0x50, 0xc4, 0x85, 0xf4, 0x71, 0x3b, 0x15, - 0xbb, 0x6c, 0xa7, 0x12, 0x87, 0xa4, 0xc1, 0xb2, 0xf8, 0x06, 0x39, 0x2e, 0xc5, 0xeb, 0xbd, 0x5a, - 0x70, 0x0e, 0x2e, 0x49, 0x8d, 0x8f, 0xd5, 0x1c, 0xf3, 0x4d, 0xc7, 0xaf, 0x37, 0xa8, 0xef, 0xd8, - 0xbb, 0x07, 0xc4, 0x1b, 0xc9, 0xe6, 0x3b, 0x00, 0x71, 0x14, 0x45, 0x60, 0x56, 0x50, 0xb4, 0x07, - 0xe3, 0xa4, 0x7b, 0x52, 0xf6, 0x0f, 0x88, 0xa7, 0x98, 0x0a, 0x3b, 0x81, 0xe8, 0xef, 0xed, 0xd4, - 0x9d, 0x9a, 0xe3, 0xd7, 0x5b, 0x96, 0x61, 0xf3, 0x86, 0x19, 0x6e, 0x45, 0xfd, 0xe8, 0xa2, 0xf2, - 0xcc, 0xf4, 0x0f, 0x3d, 0x2a, 0x8c, 0x2d, 0x6a, 0x5f, 0xb6, 0x53, 0xff, 0x28, 0x7b, 0x7d, 0x74, - 0xb8, 0xf4, 0x17, 0xe9, 0x69, 0x8d, 0x97, 0x60, 0x4a, 0x0a, 0xdb, 0x96, 0xa3, 0x7c, 0xc4, 0x2b, - 0x2d, 0x46, 0x0b, 0x84, 0x11, 0x9b, 0x8a, 0xd0, 0x19, 0xfe, 0x04, 0x60, 0xfa, 0x76, 0x4c, 0x28, - 0xfd, 0x05, 0x9c, 0xb6, 0x08, 0x23, 0xae, 0x4d, 0x45, 0x02, 0xa4, 0x27, 0x97, 0x67, 0x33, 0xff, - 0x1a, 0x4a, 0x9a, 0x11, 0xe4, 0xa6, 0xbb, 0x94, 0x22, 0x77, 0xdc, 0x42, 0x31, 0xdc, 0x41, 0x5c, - 0x89, 0xec, 0x14, 0xe2, 0x0f, 0x3f, 0x52, 0xcb, 0x23, 0x38, 0x0c, 0x38, 0x44, 0xa9, 0xdb, 0x0f, - 0x25, 0xe0, 0x9f, 0xa4, 0x52, 0x69, 0x52, 0x21, 0x12, 0x13, 0x72, 0xf0, 0x9d, 0x47, 0x9c, 0x86, - 0x5a, 0x9e, 0xb1, 0x88, 0x74, 0xe2, 0x8f, 0x20, 0x02, 0xa2, 0x32, 0xf8, 0x1a, 0xc0, 0x79, 0xc2, - 0x58, 0x79, 0x50, 0x0e, 0x27, 0xc7, 0xce, 0xe1, 0xff, 0xe1, 0x0c, 0x16, 0xc3, 0x45, 0x0d, 0x6a, - 0x80, 0x4b, 0x88, 0x30, 0xd6, 0x27, 0x2b, 0xf3, 0x6d, 0x0a, 0xfe, 0x21, 0xf5, 0xa2, 0x0b, 0x00, - 0xe7, 0x07, 0x26, 0x0a, 0xe5, 0x86, 0x68, 0x1a, 0x9a, 0xe7, 0x64, 0xfe, 0x37, 0x18, 0x54, 0x26, - 0xf0, 0xf6, 0xd1, 0x97, 0x8b, 0xb7, 0x13, 0x39, 0xb4, 0x69, 0x56, 0x29, 0xd5, 0xaf, 0x5f, 0x38, - 0x8a, 0xda, 0xdc, 0xef, 0xde, 0x4d, 0xfa, 0x55, 0x2c, 0xf5, 0x20, 0xa8, 0xe6, 0xcb, 0xee, 0xcb, - 0xf4, 0x0a, 0x9d, 0x00, 0x38, 0xd7, 0x9f, 0x3d, 0xb9, 0xf8, 0xcd, 0x51, 0x34, 0xde, 0x9e, 0xec, - 0xe4, 0xc3, 0xb1, 0xeb, 0x43, 0x87, 0x19, 0xe9, 0x70, 0x15, 0xad, 0x44, 0x38, 0x6c, 0xc8, 0x4a, - 0xbd, 0x9b, 0xd6, 0x13, 0x00, 0xe3, 0x7d, 0x2b, 0x45, 0xd9, 0x51, 0x84, 0x0c, 0x4e, 0x70, 0x72, - 0xbc, 0x5a, 0x19, 0x6d, 0x9c, 0x93, 0xfa, 0xb3, 0x68, 0x23, 0x42, 0x7f, 0x90, 0x4a, 0x5d, 0xa6, - 0x52, 0x57, 0xa9, 0xec, 0xd9, 0xcd, 0x67, 0x00, 0x51, 0xfe, 0x46, 0x46, 0xd1, 0x83, 0x21, 0xa2, - 0xa2, 0xdf, 0xca, 0xe4, 0xd8, 0xe5, 0xca, 0xd6, 0x86, 0xb4, 0x95, 0x41, 0xf7, 0x22, 0x6c, 0x11, - 0xc6, 0xf4, 0x1b, 0xd6, 0x0a, 0xbb, 0xc7, 0x67, 0x1a, 0x38, 0x3d, 0xd3, 0xc0, 0xcf, 0x33, 0x0d, - 0xbc, 0x39, 0xd7, 0x62, 0xa7, 0xe7, 0x5a, 0xec, 0xeb, 0xb9, 0x16, 0x7b, 0x9a, 0xbd, 0x76, 0x31, - 0xb9, 0x3c, 0x20, 0x23, 0x4c, 0x67, 0x01, 0x59, 0x7f, 0x8f, 0xfd, 0x75, 0xf3, 0x79, 0xa7, 0x91, - 0xbc, 0xb0, 0xac, 0x29, 0xf9, 0xa1, 0x5c, 0xff, 0x15, 0x00, 0x00, 0xff, 0xff, 0x72, 0x90, 0x0f, - 0x6d, 0x52, 0x08, 0x00, 0x00, + 0xdf, 0x75, 0x2e, 0xfc, 0xb2, 0x1d, 0x9c, 0x95, 0x6d, 0x79, 0x28, 0x59, 0x66, 0x33, 0xeb, 0x46, + 0xe4, 0xd4, 0x8d, 0x2e, 0xe5, 0x36, 0xa5, 0x79, 0x4b, 0x28, 0xe2, 0x42, 0xfa, 0xb8, 0x9d, 0x8a, + 0x5d, 0xb6, 0x53, 0x89, 0x43, 0xd2, 0x60, 0x59, 0x7c, 0x83, 0x1c, 0x97, 0xe2, 0xf5, 0x5e, 0x2d, + 0x38, 0x07, 0x97, 0xa4, 0xc6, 0xc7, 0x6a, 0x8e, 0xf9, 0xa6, 0xe3, 0xd7, 0x1b, 0xd4, 0x77, 0xec, + 0xdd, 0x03, 0xe2, 0x8d, 0x64, 0xf3, 0x1d, 0x80, 0x38, 0x8a, 0x22, 0x30, 0x2b, 0x28, 0xda, 0x83, + 0x71, 0xd2, 0x3d, 0x29, 0xfb, 0x07, 0xc4, 0x53, 0x4c, 0x85, 0x9d, 0x40, 0xf4, 0xf7, 0x76, 0xea, + 0x4e, 0xcd, 0xf1, 0xeb, 0x2d, 0xcb, 0xb0, 0x79, 0xc3, 0x0c, 0xb7, 0xa2, 0x7e, 0x74, 0x51, 0x79, + 0x66, 0xfa, 0x87, 0x1e, 0x15, 0xc6, 0x16, 0xb5, 0x2f, 0xdb, 0xa9, 0x7f, 0x94, 0xbd, 0x3e, 0x3a, + 0x5c, 0xfa, 0x8b, 0xf4, 0xb4, 0xc6, 0x4b, 0x30, 0x25, 0x85, 0x6d, 0xcb, 0x51, 0x3e, 0xe2, 0x95, + 0x16, 0xa3, 0x05, 0xc2, 0x88, 0x4d, 0x45, 0xe8, 0x0c, 0x7f, 0x02, 0x30, 0x7d, 0x3b, 0x26, 0x94, + 0xfe, 0x02, 0x4e, 0x5b, 0x84, 0x11, 0xd7, 0xa6, 0x22, 0x01, 0xd2, 0x93, 0xcb, 0xb3, 0x99, 0x7f, + 0x0d, 0x25, 0xcd, 0x08, 0x72, 0xd3, 0x5d, 0x4a, 0x91, 0x3b, 0x6e, 0xa1, 0x18, 0xee, 0x20, 0xae, + 0x44, 0x76, 0x0a, 0xf1, 0x87, 0x1f, 0xa9, 0xe5, 0x11, 0x1c, 0x06, 0x1c, 0xa2, 0xd4, 0xed, 0x87, + 0x12, 0xf0, 0x4f, 0x52, 0xa9, 0x34, 0xa9, 0x10, 0x89, 0x09, 0x39, 0xf8, 0xce, 0x23, 0x4e, 0x43, + 0x2d, 0xcf, 0x58, 0x44, 0x3a, 0xf1, 0x47, 0x10, 0x01, 0x51, 0x19, 0x7c, 0x0d, 0xe0, 0x3c, 0x61, + 0xac, 0x3c, 0x28, 0x87, 0x93, 0x63, 0xe7, 0xf0, 0xff, 0x70, 0x06, 0x8b, 0xe1, 0xa2, 0x06, 0x35, + 0xc0, 0x25, 0x44, 0x18, 0xeb, 0x93, 0x95, 0xf9, 0x36, 0x05, 0xff, 0x90, 0x7a, 0xd1, 0x05, 0x80, + 0xf3, 0x03, 0x13, 0x85, 0x72, 0x43, 0x34, 0x0d, 0xcd, 0x73, 0x32, 0xff, 0x1b, 0x0c, 0x2a, 0x13, + 0x78, 0xfb, 0xe8, 0xcb, 0xc5, 0xdb, 0x89, 0x1c, 0xda, 0x34, 0xab, 0x94, 0xea, 0xd7, 0x2f, 0x1c, + 0x45, 0x6d, 0xee, 0x77, 0xef, 0x26, 0xfd, 0x2a, 0x96, 0x7a, 0x10, 0x54, 0xf3, 0x65, 0xf7, 0x65, + 0x7a, 0x85, 0x4e, 0x00, 0x9c, 0xeb, 0xcf, 0x9e, 0x5c, 0xfc, 0xe6, 0x28, 0x1a, 0x6f, 0x4f, 0x76, + 0xf2, 0xe1, 0xd8, 0xf5, 0xa1, 0xc3, 0x8c, 0x74, 0xb8, 0x8a, 0x56, 0x22, 0x1c, 0x36, 0x64, 0xa5, + 0xde, 0x4d, 0xeb, 0x09, 0x80, 0xf1, 0xbe, 0x95, 0xa2, 0xec, 0x28, 0x42, 0x06, 0x27, 0x38, 0x39, + 0x5e, 0xad, 0x8c, 0x36, 0xce, 0x49, 0xfd, 0x59, 0xb4, 0x11, 0xa1, 0x3f, 0x48, 0xa5, 0x2e, 0x53, + 0xa9, 0xab, 0x54, 0xf6, 0xec, 0xe6, 0x33, 0x80, 0x28, 0x7f, 0x23, 0xa3, 0xe8, 0xc1, 0x10, 0x51, + 0xd1, 0x6f, 0x65, 0x72, 0xec, 0x72, 0x65, 0x6b, 0x43, 0xda, 0xca, 0xa0, 0x7b, 0x11, 0xb6, 0x08, + 0x63, 0xfa, 0x0d, 0x6b, 0x85, 0xdd, 0xe3, 0x33, 0x0d, 0x9c, 0x9e, 0x69, 0xe0, 0xe7, 0x99, 0x06, + 0xde, 0x9c, 0x6b, 0xb1, 0xd3, 0x73, 0x2d, 0xf6, 0xf5, 0x5c, 0x8b, 0x3d, 0xcd, 0x5e, 0xbb, 0x98, + 0x5c, 0x1e, 0x90, 0x11, 0xa6, 0xb3, 0x80, 0xac, 0xbf, 0xc7, 0xfe, 0xba, 0xf9, 0xbc, 0xd3, 0x48, + 0x5e, 0x58, 0xd6, 0x94, 0xfc, 0x50, 0xde, 0xff, 0x15, 0x00, 0x00, 0xff, 0xff, 0x05, 0xa7, 0x17, + 0x5c, 0x52, 0x08, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/feeabs/types/tx.pb.go b/x/feeabs/types/tx.pb.go index c5eda118..1255e5bd 100644 --- a/x/feeabs/types/tx.pb.go +++ b/x/feeabs/types/tx.pb.go @@ -10,8 +10,8 @@ import ( types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/cosmos/gogoproto/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" _ "github.com/gogo/protobuf/types" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" @@ -307,40 +307,40 @@ func init() { var fileDescriptor_84c172c34645b936 = []byte{ // 542 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x4d, 0x6e, 0xd3, 0x40, - 0x14, 0x8e, 0x1b, 0xa9, 0xa2, 0x53, 0x40, 0x22, 0x02, 0x91, 0xba, 0xe0, 0x04, 0x0b, 0xa1, 0x80, - 0x14, 0x0f, 0x6d, 0x17, 0x40, 0x25, 0x84, 0xdc, 0xa0, 0x4a, 0x2c, 0x22, 0x41, 0x5a, 0x09, 0x89, - 0x4d, 0x35, 0x63, 0x4f, 0x1c, 0x8b, 0x78, 0x9e, 0xf1, 0x1b, 0x97, 0x46, 0xe2, 0x10, 0xb0, 0xe2, - 0x0e, 0xec, 0x58, 0x70, 0x87, 0x2e, 0xbb, 0x64, 0x55, 0x50, 0x72, 0x03, 0x4e, 0x80, 0xfc, 0x17, - 0xa5, 0x80, 0x43, 0xda, 0x95, 0xed, 0x99, 0xef, 0xef, 0x3d, 0xbf, 0x19, 0x72, 0xaf, 0x2f, 0x04, - 0xe3, 0xa8, 0x22, 0xe6, 0x28, 0x1f, 0x24, 0x65, 0x1c, 0xfb, 0x42, 0xd0, 0xc3, 0x0d, 0x2e, 0x14, - 0xdb, 0xa0, 0xea, 0xc8, 0x0a, 0x23, 0x50, 0x50, 0xbb, 0x7d, 0x16, 0x67, 0x65, 0x38, 0x2b, 0xc7, - 0xe9, 0xd7, 0x3d, 0xf0, 0x20, 0x45, 0xd2, 0xe4, 0x2d, 0x23, 0xe9, 0xb7, 0x3c, 0x00, 0x6f, 0x28, - 0x28, 0x0b, 0x7d, 0xca, 0xa4, 0x04, 0xc5, 0x12, 0x2e, 0xe6, 0xbb, 0x0f, 0x1c, 0xc0, 0x00, 0x90, - 0x72, 0x86, 0x82, 0xbe, 0x8b, 0x45, 0x34, 0x9a, 0xda, 0x86, 0xcc, 0xf3, 0x65, 0x0a, 0x2e, 0xb0, - 0xf3, 0x63, 0x86, 0x2c, 0x62, 0x41, 0xa1, 0x7b, 0x7f, 0x3e, 0x56, 0x84, 0xe0, 0x0c, 0x72, 0xa8, - 0x31, 0x1b, 0xa1, 0x00, 0x38, 0xe0, 0x17, 0xb6, 0x8d, 0xbc, 0x80, 0xf4, 0x8b, 0xc7, 0x7d, 0xaa, - 0xfc, 0x40, 0xa0, 0x62, 0x41, 0x98, 0x01, 0xcc, 0x6f, 0x1a, 0xd1, 0xbb, 0xe8, 0xed, 0xc6, 0xd2, - 0xdd, 0x15, 0xc2, 0xe6, 0xd8, 0x05, 0x37, 0x1e, 0x0a, 0xdb, 0x71, 0x20, 0x96, 0xaa, 0x76, 0x87, - 0x5c, 0xee, 0x47, 0x10, 0x1c, 0x30, 0xd7, 0x8d, 0x04, 0x62, 0x5d, 0x6b, 0x6a, 0xad, 0x95, 0xde, - 0x6a, 0xb2, 0x66, 0x67, 0x4b, 0x35, 0x45, 0x96, 0x59, 0x90, 0x80, 0xeb, 0x4b, 0xcd, 0x6a, 0x6b, - 0x75, 0x73, 0xcd, 0xca, 0x32, 0x59, 0x49, 0xa6, 0xa2, 0xbf, 0x56, 0x07, 0x7c, 0xb9, 0x63, 0x1f, - 0x9f, 0x36, 0x2a, 0xbf, 0x4e, 0x1b, 0x57, 0x46, 0x2c, 0x18, 0x6e, 0x9b, 0x19, 0xcd, 0xfc, 0xf2, - 0xa3, 0xd1, 0xf2, 0x7c, 0x35, 0x88, 0xb9, 0xe5, 0x40, 0x40, 0xf3, 0x8a, 0xb2, 0x47, 0x1b, 0xdd, - 0xb7, 0x54, 0x8d, 0x42, 0x81, 0xa9, 0x02, 0xf6, 0x72, 0x2f, 0xf3, 0x2e, 0x31, 0xcb, 0x63, 0xf7, - 0x04, 0x86, 0x20, 0x51, 0x98, 0x4f, 0x49, 0xbd, 0x8b, 0xde, 0x9e, 0x90, 0xee, 0xab, 0xe4, 0xf7, - 0xbc, 0xe0, 0xce, 0x73, 0x21, 0x21, 0xd8, 0x7f, 0x6d, 0xbf, 0x5c, 0xa0, 0x34, 0xd3, 0x24, 0xcd, - 0x32, 0xfa, 0xd4, 0x62, 0x8f, 0x5c, 0x4b, 0x30, 0xef, 0x59, 0xd8, 0x89, 0x00, 0xb1, 0x33, 0x60, - 0xbe, 0x5c, 0xa4, 0x6d, 0xeb, 0x64, 0xc5, 0xe7, 0xce, 0x81, 0x9b, 0x08, 0xd6, 0x97, 0xd2, 0xfd, - 0x4b, 0x7e, 0x6e, 0x60, 0xae, 0x93, 0xb5, 0xbf, 0x44, 0x0b, 0xc7, 0xcd, 0xaf, 0x55, 0x52, 0xed, - 0xa2, 0x57, 0xfb, 0xa4, 0x91, 0x1b, 0xff, 0x2e, 0xed, 0x91, 0x35, 0x77, 0xd8, 0xad, 0xb2, 0xa2, - 0xf4, 0x67, 0x17, 0x24, 0x16, 0xd9, 0x6a, 0x1f, 0xc8, 0xd5, 0x3f, 0x5a, 0xf1, 0x70, 0x01, 0xc9, - 0x33, 0x0c, 0xfd, 0xf1, 0x79, 0x19, 0x53, 0xf7, 0xcf, 0x1a, 0xb9, 0x59, 0x36, 0xc9, 0x4f, 0xfe, - 0xaf, 0x5a, 0x42, 0xd5, 0xed, 0x0b, 0x53, 0x8b, 0x64, 0x3b, 0xfb, 0xc7, 0x63, 0x43, 0x3b, 0x19, - 0x1b, 0xda, 0xcf, 0xb1, 0xa1, 0x7d, 0x9c, 0x18, 0x95, 0x93, 0x89, 0x51, 0xf9, 0x3e, 0x31, 0x2a, - 0x6f, 0xb6, 0x67, 0x46, 0x5f, 0x42, 0x22, 0xcf, 0x86, 0xed, 0x21, 0xe3, 0x48, 0xfb, 0x42, 0xb4, - 0x67, 0xaf, 0x81, 0xc3, 0x2d, 0x7a, 0x44, 0xb3, 0x24, 0xd9, 0x91, 0xe0, 0xcb, 0xe9, 0x19, 0xde, - 0xfa, 0x1d, 0x00, 0x00, 0xff, 0xff, 0xb9, 0xd9, 0x04, 0x66, 0x04, 0x05, 0x00, 0x00, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xdf, 0x6a, 0xd3, 0x50, + 0x18, 0x6f, 0x56, 0x18, 0xee, 0x4c, 0x05, 0x8b, 0x62, 0x97, 0x69, 0x5a, 0x83, 0x48, 0x15, 0x9a, + 0xe3, 0xa6, 0xa0, 0x0e, 0x44, 0xb2, 0xca, 0xc0, 0x8b, 0x82, 0x76, 0x03, 0xc1, 0x9b, 0x71, 0x4e, + 0x72, 0x9a, 0x06, 0x9b, 0xf3, 0xc5, 0x7c, 0x27, 0x73, 0x05, 0x1f, 0x42, 0xaf, 0x7c, 0x07, 0xef, + 0xbc, 0xf0, 0x1d, 0x76, 0xb9, 0x4b, 0xaf, 0xa6, 0xb4, 0x6f, 0xe0, 0x13, 0x48, 0xfe, 0x95, 0x4e, + 0x4d, 0xed, 0x76, 0x95, 0xe4, 0x9c, 0xdf, 0xbf, 0xef, 0xcb, 0x77, 0x0e, 0xb9, 0xd3, 0x17, 0x82, + 0x71, 0x54, 0x11, 0x73, 0x94, 0x0f, 0x92, 0x32, 0x8e, 0x7d, 0x21, 0xe8, 0xc1, 0x06, 0x17, 0x8a, + 0x6d, 0x50, 0x75, 0x68, 0x85, 0x11, 0x28, 0xa8, 0xdd, 0x3c, 0x8d, 0xb3, 0x32, 0x9c, 0x95, 0xe3, + 0xf4, 0xab, 0x1e, 0x78, 0x90, 0x22, 0x69, 0xf2, 0x96, 0x91, 0xf4, 0x1b, 0x1e, 0x80, 0x37, 0x14, + 0x94, 0x85, 0x3e, 0x65, 0x52, 0x82, 0x62, 0x09, 0x17, 0xf3, 0xdd, 0x7b, 0x0e, 0x60, 0x00, 0x48, + 0x39, 0x43, 0x41, 0xdf, 0xc5, 0x22, 0x1a, 0x4d, 0x6d, 0x43, 0xe6, 0xf9, 0x32, 0x05, 0x17, 0xd8, + 0xf9, 0x31, 0x43, 0x16, 0xb1, 0xa0, 0xd0, 0xbd, 0x3b, 0x1f, 0x2b, 0x42, 0x70, 0x06, 0x39, 0xd4, + 0x98, 0x8d, 0x50, 0x00, 0x1c, 0xf0, 0x0b, 0xdb, 0x46, 0x5e, 0x40, 0xfa, 0xc5, 0xe3, 0x3e, 0x55, + 0x7e, 0x20, 0x50, 0xb1, 0x20, 0xcc, 0x00, 0xe6, 0x37, 0x8d, 0xe8, 0x5d, 0xf4, 0x76, 0x62, 0xe9, + 0xee, 0x08, 0x61, 0x73, 0xec, 0x82, 0x1b, 0x0f, 0x85, 0xed, 0x38, 0x10, 0x4b, 0x55, 0xbb, 0x45, + 0x2e, 0xf6, 0x23, 0x08, 0xf6, 0x99, 0xeb, 0x46, 0x02, 0xb1, 0xae, 0x35, 0xb5, 0xd6, 0x4a, 0x6f, + 0x35, 0x59, 0xb3, 0xb3, 0xa5, 0x9a, 0x22, 0xcb, 0x2c, 0x48, 0xc0, 0xf5, 0xa5, 0x66, 0xb5, 0xb5, + 0xba, 0xb9, 0x66, 0x65, 0x99, 0xac, 0x24, 0x53, 0xd1, 0x5f, 0xab, 0x03, 0xbe, 0xdc, 0xb6, 0x8f, + 0x4e, 0x1a, 0x95, 0x5f, 0x27, 0x8d, 0x4b, 0x23, 0x16, 0x0c, 0xb7, 0xcc, 0x8c, 0x66, 0x7e, 0xf9, + 0xd1, 0x68, 0x79, 0xbe, 0x1a, 0xc4, 0xdc, 0x72, 0x20, 0xa0, 0x79, 0x45, 0xd9, 0xa3, 0x8d, 0xee, + 0x5b, 0xaa, 0x46, 0xa1, 0xc0, 0x54, 0x01, 0x7b, 0xb9, 0x97, 0x79, 0x9b, 0x98, 0xe5, 0xb1, 0x7b, + 0x02, 0x43, 0x90, 0x28, 0xcc, 0xa7, 0xa4, 0xde, 0x45, 0x6f, 0x57, 0x48, 0xf7, 0x55, 0xf2, 0x7b, + 0x5e, 0x70, 0xe7, 0xb9, 0x90, 0x10, 0xec, 0xbd, 0xb6, 0x5f, 0x2e, 0x50, 0x9a, 0x69, 0x92, 0x66, + 0x19, 0x7d, 0x6a, 0xb1, 0x4b, 0xae, 0x24, 0x98, 0xf7, 0x2c, 0xec, 0x44, 0x80, 0xd8, 0x19, 0x30, + 0x5f, 0x2e, 0xd2, 0xb6, 0x75, 0xb2, 0xe2, 0x73, 0x67, 0xdf, 0x4d, 0x04, 0xeb, 0x4b, 0xe9, 0xfe, + 0x05, 0x3f, 0x37, 0x30, 0xd7, 0xc9, 0xda, 0x5f, 0xa2, 0x85, 0xe3, 0xe6, 0xd7, 0x2a, 0xa9, 0x76, + 0xd1, 0xab, 0x7d, 0xd2, 0xc8, 0xb5, 0x7f, 0x97, 0xf6, 0xc8, 0x9a, 0x3b, 0xec, 0x56, 0x59, 0x51, + 0xfa, 0xb3, 0x73, 0x12, 0x8b, 0x6c, 0xb5, 0x0f, 0xe4, 0xf2, 0x1f, 0xad, 0xb8, 0xbf, 0x80, 0xe4, + 0x29, 0x86, 0xfe, 0xf8, 0xac, 0x8c, 0xa9, 0xfb, 0x67, 0x8d, 0x5c, 0x2f, 0x9b, 0xe4, 0x27, 0xff, + 0x57, 0x2d, 0xa1, 0xea, 0xf6, 0xb9, 0xa9, 0x45, 0xb2, 0xed, 0xbd, 0xa3, 0xb1, 0xa1, 0x1d, 0x8f, + 0x0d, 0xed, 0xe7, 0xd8, 0xd0, 0x3e, 0x4e, 0x8c, 0xca, 0xf1, 0xc4, 0xa8, 0x7c, 0x9f, 0x18, 0x95, + 0x37, 0x5b, 0x33, 0xa3, 0x2f, 0x21, 0x91, 0x67, 0xc3, 0xf6, 0x90, 0x71, 0xa4, 0x7d, 0x21, 0xda, + 0xb3, 0xd7, 0xc0, 0xc1, 0x43, 0x7a, 0x48, 0xb3, 0x24, 0xd9, 0x91, 0xe0, 0xcb, 0xe9, 0x19, 0x7e, + 0xf0, 0x3b, 0x00, 0x00, 0xff, 0xff, 0xce, 0xee, 0x1c, 0x57, 0x04, 0x05, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. From 9175311dd5f92d155834f8148051a12c67d28feb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=E1=BA=A1m=20Anh=20Minh?= <1phamminh0811@gmail.com> Date: Mon, 29 May 2023 17:38:35 +0700 Subject: [PATCH 07/90] fix chainId error --- app/test_helpers.go | 34 ++++++++++++++++++++++++++++++++-- x/feeabs/ibctesting/chain.go | 6 +++--- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/app/test_helpers.go b/app/test_helpers.go index b34d39e1..792f5f73 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -11,7 +11,6 @@ import ( "testing" "time" - simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" abci "github.com/cometbft/cometbft/abci/types" "github.com/cometbft/cometbft/libs/log" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" @@ -22,6 +21,7 @@ import ( cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/snapshots" "github.com/cosmos/cosmos-sdk/snapshots/types" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/errors" "github.com/stretchr/testify/require" @@ -80,6 +80,33 @@ func setup(t testing.TB, withGenesis bool, invCheckPeriod uint, opts ...wasm.Opt return app, GenesisState{} } +func setupWithChainID(t testing.TB, withGenesis bool, invCheckPeriod uint, chainID string, opts ...wasm.Option) (*FeeAbs, GenesisState) { + nodeHome := t.TempDir() + snapshotDir := filepath.Join(nodeHome, "data", "snapshots") + snapshotDB, err := dbm.NewGoLevelDB("metadata", snapshotDir) + require.NoError(t, err) + snapshotStore, err := snapshots.NewStore(snapshotDB, snapshotDir) + require.NoError(t, err) + baseAppOpts := []func(*baseapp.BaseApp){ + baseapp.SetChainID(chainID), + baseapp.SetSnapshot(snapshotStore, types.SnapshotOptions{KeepRecent: 2}), + } + db := dbm.NewMemDB() + app := NewFeeAbs( + log.NewNopLogger(), + db, nil, true, map[int64]bool{}, + nodeHome, + invCheckPeriod, + MakeEncodingConfig(), + EmptyBaseAppOptions{}, + opts, + baseAppOpts...) + if withGenesis { + return app, NewDefaultGenesisState() + } + return app, GenesisState{} +} + // SetupWithGenesisValSet initializes a new FeeAbs with a validator set and genesis accounts // that also act as delegators. For simplicity, each validator is bonded with a delegation // of one consensus engine unit (10^6) in the default token of the FeeAbs from first genesis @@ -89,9 +116,10 @@ func SetupWithGenesisValSet( valSet *tmtypes.ValidatorSet, genAccs []authtypes.GenesisAccount, opts []wasm.Option, + chainID string, balances ...banktypes.Balance, ) *FeeAbs { - app, genesisState := setup(t, true, 5, opts...) + app, genesisState := setupWithChainID(t, true, 5, chainID, opts...) // set genesis accounts authGenesis := authtypes.NewGenesisState(authtypes.DefaultParams(), genAccs) genesisState[authtypes.ModuleName] = app.appCodec.MustMarshalJSON(authGenesis) @@ -152,6 +180,7 @@ func SetupWithGenesisValSet( Validators: []abci.ValidatorUpdate{}, ConsensusParams: DefaultConsensusParams, AppStateBytes: stateBytes, + ChainId: chainID, }, ) @@ -162,6 +191,7 @@ func SetupWithGenesisValSet( AppHash: app.LastCommitID().Hash, ValidatorsHash: valSet.Hash(), NextValidatorsHash: valSet.Hash(), + ChainID: chainID, }}) return app diff --git a/x/feeabs/ibctesting/chain.go b/x/feeabs/ibctesting/chain.go index 30ef4084..ea8a8636 100644 --- a/x/feeabs/ibctesting/chain.go +++ b/x/feeabs/ibctesting/chain.go @@ -105,14 +105,14 @@ func NewTestChain(t *testing.T, coord *Coordinator, chainID string, opts ...wasm Address: acc.GetAddress().String(), Coins: sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, amount)), } - - app := NewTestingAppDecorator(t, feeabs.SetupWithGenesisValSet(t, valSet, []authtypes.GenesisAccount{acc}, opts, balance)) + + app := NewTestingAppDecorator(t, feeabs.SetupWithGenesisValSet(t, valSet, []authtypes.GenesisAccount{acc}, opts, chainID, balance)) // create current header and call begin block header := tmproto.Header{ ChainID: chainID, Height: 1, - Time: coord.CurrentTime.UTC(), + Time: coord.CurrentTime.UTC(), } txConfig := app.GetTxConfig() From fa3818f4b83c8367d01c197e455af2afbaac13d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=E1=BA=A1m=20Anh=20Minh?= <1phamminh0811@gmail.com> Date: Tue, 30 May 2023 09:15:07 +0700 Subject: [PATCH 08/90] fix store code and instantiate contract in relay test --- x/feeabs/ibctesting/wasm.go | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/x/feeabs/ibctesting/wasm.go b/x/feeabs/ibctesting/wasm.go index 8086f0e2..2d17a77e 100644 --- a/x/feeabs/ibctesting/wasm.go +++ b/x/feeabs/ibctesting/wasm.go @@ -7,7 +7,6 @@ import ( "github.com/cometbft/cometbft/libs/rand" sdk "github.com/cosmos/cosmos-sdk/types" ibctesting "github.com/cosmos/ibc-go/v7/testing" - "github.com/golang/protobuf/proto" //nolint feeabs "github.com/notional-labs/fee-abstraction/v4/app" "github.com/stretchr/testify/require" ) @@ -34,13 +33,13 @@ func (chain *TestChain) StoreCode(byteCode []byte) types.MsgStoreCodeResponse { } r, err := chain.SendMsgs(storeMsg) require.NoError(chain.t, err) - protoResult := chain.parseSDKResultData(r) - require.Len(chain.t, protoResult.Data, 1) + require.Len(chain.t, r.MsgResponses, 1) + require.NotEmpty(chain.t, r.MsgResponses[0].GetCachedValue()) // unmarshal protobuf response from data - var pInstResp types.MsgStoreCodeResponse - require.NoError(chain.t, pInstResp.Unmarshal(protoResult.Data[0].Data)) + pInstResp := r.MsgResponses[0].GetCachedValue().(*types.MsgStoreCodeResponse) require.NotEmpty(chain.t, pInstResp.CodeID) - return pInstResp + require.NotEmpty(chain.t, pInstResp.Checksum) + return *pInstResp } func (chain *TestChain) InstantiateContract(codeID uint64, initMsg []byte) sdk.AccAddress { @@ -55,20 +54,13 @@ func (chain *TestChain) InstantiateContract(codeID uint64, initMsg []byte) sdk.A r, err := chain.SendMsgs(instantiateMsg) require.NoError(chain.t, err) - protoResult := chain.parseSDKResultData(r) - require.Len(chain.t, protoResult.Data, 1) - - var pExecResp types.MsgInstantiateContractResponse - require.NoError(chain.t, pExecResp.Unmarshal(protoResult.Data[0].Data)) + require.Len(chain.t, r.MsgResponses, 1) + require.NotEmpty(chain.t, r.MsgResponses[0].GetCachedValue()) + pExecResp := r.MsgResponses[0].GetCachedValue().(*types.MsgInstantiateContractResponse) a, err := sdk.AccAddressFromBech32(pExecResp.Address) require.NoError(chain.t, err) - return a -} -func (chain *TestChain) parseSDKResultData(r *sdk.Result) sdk.TxMsgData { - var protoResult sdk.TxMsgData - require.NoError(chain.t, proto.Unmarshal(r.Data, &protoResult)) - return protoResult + return a } // ContractInfo is a helper function to returns the ContractInfo for the given contract address From a02072ed927574efb9e0e59c9ad687d3cf86161c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=E1=BA=A1m=20Anh=20Minh?= <1phamminh0811@gmail.com> Date: Tue, 30 May 2023 10:13:44 +0700 Subject: [PATCH 09/90] initially fix fee abs interchain test --- go.work.example | 2 - tests/interchaintest/chain_start_test.go | 6 +- tests/interchaintest/go.mod | 433 +- tests/interchaintest/ibc_transfer_test.go | 18 +- .../gamm/balancer/balancerPool.pb.go | 110 +- .../osmosistypes/gamm/balancer/codec.go | 2 +- .../osmosistypes/gamm/balancer/msgs.go | 2 +- .../osmosistypes/gamm/balancer/pool.go | 2 +- .../osmosistypes/gamm/balancer/tx.pb.go | 1421 ++++ .../osmosistypes/gamm/types/codec.go | 2 +- .../osmosistypes/gamm/types/genesis.pb.go | 531 +- .../osmosistypes/gamm/types/msgs.go | 2 +- .../osmosistypes/gamm/types/query.pb.go | 7126 +++++++++++++++++ .../osmosistypes/gamm/types/query.pb.gw.go | 101 + .../osmosistypes/gamm/types/tx.pb.go | 4568 +++++++++++ .../osmosistypes/gamm/v2types/query.pb.go | 692 ++ .../osmosistypes/gamm/v2types/query.pb.gw.go | 207 + .../poolmanager/types/swap_route.pb.go | 1032 +++ tests/interchaintest/packet_foward_test.go | 61 +- tests/interchaintest/setup.go | 11 +- 20 files changed, 15999 insertions(+), 330 deletions(-) create mode 100644 tests/interchaintest/osmosistypes/gamm/balancer/tx.pb.go create mode 100644 tests/interchaintest/osmosistypes/gamm/types/query.pb.go create mode 100644 tests/interchaintest/osmosistypes/gamm/types/tx.pb.go create mode 100644 tests/interchaintest/osmosistypes/gamm/v2types/query.pb.go create mode 100644 tests/interchaintest/osmosistypes/gamm/v2types/query.pb.gw.go create mode 100644 tests/interchaintest/osmosistypes/poolmanager/types/swap_route.pb.go diff --git a/go.work.example b/go.work.example index 4c808ca3..8a7a74c3 100644 --- a/go.work.example +++ b/go.work.example @@ -5,5 +5,3 @@ use ( ./tests/interchaintest ) - -replace github.com/tendermint/tendermint => github.com/informalsystems/tendermint v0.34.24 diff --git a/tests/interchaintest/chain_start_test.go b/tests/interchaintest/chain_start_test.go index aae82878..67c4ac8f 100644 --- a/tests/interchaintest/chain_start_test.go +++ b/tests/interchaintest/chain_start_test.go @@ -4,9 +4,9 @@ import ( "context" "testing" - "github.com/strangelove-ventures/interchaintest/v4" - "github.com/strangelove-ventures/interchaintest/v4/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v4/testreporter" + "github.com/strangelove-ventures/interchaintest/v7" + "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v7/testreporter" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) diff --git a/tests/interchaintest/go.mod b/tests/interchaintest/go.mod index baf3c1cc..87a63c2c 100644 --- a/tests/interchaintest/go.mod +++ b/tests/interchaintest/go.mod @@ -1,200 +1,247 @@ -// module github.com/notional-labs/fee-abstraction/tests/interchaintest +module github.com/notional-labs/fee-abstraction/tests/interchaintest -// go 1.19 +go 1.19 -// require ( -// github.com/cosmos/cosmos-proto v1.0.0-beta.2 -// github.com/cosmos/cosmos-sdk v0.45.14 -// github.com/cosmos/ibc-go/v4 v4.3.0 -// github.com/gogo/protobuf v1.3.3 -// github.com/golang/protobuf v1.5.2 -// github.com/grpc-ecosystem/grpc-gateway v1.16.0 -// github.com/notional-labs/fee-abstraction/v2 v2.0.1 -// github.com/strangelove-ventures/interchaintest/v4 v4.0.0-20230331040355-5d08aab13017 -// github.com/stretchr/testify v1.8.2 -// go.uber.org/zap v1.23.0 -// google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa -// google.golang.org/grpc v1.53.0 -// ) +require ( + github.com/cosmos/cosmos-proto v1.0.0-beta.2 + github.com/cosmos/cosmos-sdk v0.47.1 + github.com/cosmos/ibc-go/v7 v7.0.0 + github.com/gogo/protobuf v1.3.3 + github.com/golang/protobuf v1.5.3 + github.com/grpc-ecosystem/grpc-gateway v1.16.0 + github.com/notional-labs/fee-abstraction/v4 v4.0.1 + github.com/strangelove-ventures/interchaintest/v7 v7.1.2 + github.com/stretchr/testify v1.8.2 + go.uber.org/zap v1.24.0 + google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 + google.golang.org/grpc v1.54.0 +) -// require ( -// filippo.io/edwards25519 v1.0.0-rc.1 // indirect -// github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect -// github.com/99designs/keyring v1.2.1 // indirect -// github.com/BurntSushi/toml v1.2.1 // indirect -// github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect -// github.com/ChainSafe/go-schnorrkel/1 v0.0.0-00010101000000-000000000000 // indirect -// github.com/CosmWasm/wasmd v0.31.0 // indirect -// github.com/CosmWasm/wasmvm v1.2.1 // indirect -// github.com/Microsoft/go-winio v0.6.0 // indirect -// github.com/StirlingMarketingGroup/go-namecase v1.0.0 // indirect -// github.com/armon/go-metrics v0.4.1 // indirect -// github.com/avast/retry-go/v4 v4.0.4 // indirect -// github.com/benbjohnson/clock v1.3.0 // indirect -// github.com/beorn7/perks v1.0.1 // indirect -// github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect -// github.com/btcsuite/btcd v0.23.0 // indirect -// github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect -// github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.4 // indirect -// github.com/cespare/xxhash v1.1.0 // indirect -// github.com/cespare/xxhash/v2 v2.2.0 // indirect -// github.com/confio/ics23/go v0.9.0 // indirect -// github.com/cosmos/btcutil v1.0.5 // indirect -// github.com/cosmos/go-bip39 v1.0.0 // indirect -// github.com/cosmos/gogoproto v1.4.6 // indirect -// github.com/cosmos/gorocksdb v1.2.0 // indirect -// github.com/cosmos/iavl v0.19.5 // indirect -// github.com/cosmos/interchain-security v1.0.0 // indirect -// github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect -// github.com/danieljoos/wincred v1.1.2 // indirect -// github.com/davecgh/go-spew v1.1.1 // indirect -// github.com/deckarep/golang-set v1.8.0 // indirect -// github.com/decred/base58 v1.0.3 // indirect -// github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect -// github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0 // indirect -// github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect -// github.com/dgraph-io/badger/v3 v3.2103.2 // indirect -// github.com/dgraph-io/ristretto v0.1.0 // indirect -// github.com/docker/distribution v2.8.1+incompatible // indirect -// github.com/docker/docker v20.10.19+incompatible // indirect -// github.com/docker/go-connections v0.4.0 // indirect -// github.com/docker/go-units v0.5.0 // indirect -// github.com/dustin/go-humanize v1.0.1-0.20200219035652-afde56e7acac // indirect -// github.com/dvsekhvalnov/jose2go v1.5.0 // indirect -// github.com/ethereum/go-ethereum v1.10.17 // indirect -// github.com/felixge/httpsnoop v1.0.2 // indirect -// github.com/fsnotify/fsnotify v1.6.0 // indirect -// github.com/go-kit/kit v0.12.0 // indirect -// github.com/go-kit/log v0.2.1 // indirect -// github.com/go-logfmt/logfmt v0.5.1 // indirect -// github.com/go-stack/stack v1.8.1 // indirect -// github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect -// github.com/gogo/gateway v1.1.0 // indirect -// github.com/golang/glog v1.0.0 // indirect -// github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect -// github.com/golang/snappy v0.0.4 // indirect -// github.com/google/btree v1.1.2 // indirect -// github.com/google/flatbuffers v1.12.1 // indirect -// github.com/google/go-cmp v0.5.9 // indirect -// github.com/google/uuid v1.3.0 // indirect -// github.com/gorilla/handlers v1.5.1 // indirect -// github.com/gorilla/mux v1.8.0 // indirect -// github.com/gorilla/websocket v1.5.0 // indirect -// github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect -// github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect -// github.com/gtank/merlin v0.1.1 // indirect -// github.com/gtank/ristretto255 v0.1.2 // indirect -// github.com/hashicorp/go-immutable-radix v1.3.1 // indirect -// github.com/hashicorp/go-version v1.6.0 // indirect -// github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect -// github.com/hashicorp/hcl v1.0.0 // indirect -// github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 // indirect -// github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 // indirect -// github.com/inconshreveable/mousetrap v1.0.1 // indirect -// github.com/ipfs/go-cid v0.0.7 // indirect -// github.com/jmhodges/levigo v1.0.0 // indirect -// github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect -// github.com/klauspost/compress v1.15.11 // indirect -// github.com/klauspost/cpuid/v2 v2.0.9 // indirect -// github.com/libp2p/go-buffer-pool v0.1.0 // indirect -// github.com/libp2p/go-libp2p-core v0.15.1 // indirect -// github.com/libp2p/go-openssl v0.0.7 // indirect -// github.com/magiconair/properties v1.8.7 // indirect -// github.com/mattn/go-isatty v0.0.16 // indirect -// github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect -// github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect -// github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 // indirect -// github.com/minio/sha256-simd v1.0.0 // indirect -// github.com/mitchellh/mapstructure v1.5.0 // indirect -// github.com/mr-tron/base58 v1.2.0 // indirect -// github.com/mtibben/percent v0.2.1 // indirect -// github.com/multiformats/go-base32 v0.0.3 // indirect -// github.com/multiformats/go-base36 v0.1.0 // indirect -// github.com/multiformats/go-multiaddr v0.4.1 // indirect -// github.com/multiformats/go-multibase v0.0.3 // indirect -// github.com/multiformats/go-multicodec v0.4.1 // indirect -// github.com/multiformats/go-multihash v0.1.0 // indirect -// github.com/multiformats/go-varint v0.0.6 // indirect -// github.com/opencontainers/go-digest v1.0.0 // indirect -// github.com/opencontainers/image-spec v1.1.0-rc2 // indirect -// github.com/pelletier/go-toml/v2 v2.0.6 // indirect -// github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect -// github.com/pierrec/xxHash v0.1.5 // indirect -// github.com/pkg/errors v0.9.1 // indirect -// github.com/pmezard/go-difflib v1.0.0 // indirect -// github.com/prometheus/client_golang v1.14.0 // indirect -// github.com/prometheus/client_model v0.3.0 // indirect -// github.com/prometheus/common v0.37.0 // indirect -// github.com/prometheus/procfs v0.8.0 // indirect -// github.com/rakyll/statik v0.1.7 // indirect -// github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect -// github.com/regen-network/cosmos-proto v0.3.1 // indirect -// github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect -// github.com/rs/cors v1.8.2 // indirect -// github.com/sasha-s/go-deadlock v0.3.1 // indirect -// github.com/sirupsen/logrus v1.9.0 // indirect -// github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect -// github.com/spaolacci/murmur3 v1.1.0 // indirect -// github.com/spf13/afero v1.9.3 // indirect -// github.com/spf13/cast v1.5.0 // indirect -// github.com/spf13/cobra v1.6.1 // indirect -// github.com/spf13/jwalterweatherman v1.1.0 // indirect -// github.com/spf13/pflag v1.0.5 // indirect -// github.com/spf13/viper v1.15.0 // indirect -// github.com/subosito/gotenv v1.4.2 // indirect -// github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a // indirect -// github.com/tendermint/go-amino v0.16.0 // indirect -// github.com/tendermint/tendermint v0.34.26 // indirect -// github.com/tendermint/tm-db v0.6.8-0.20220506192307-f628bb5dc95b // indirect -// github.com/tidwall/btree v1.5.0 // indirect -// github.com/vedhavyas/go-subkey v1.0.3 // indirect -// github.com/zondax/hid v0.9.1 // indirect -// github.com/zondax/ledger-go v0.14.1 // indirect -// go.etcd.io/bbolt v1.3.6 // indirect -// go.opencensus.io v0.24.0 // indirect -// go.uber.org/atomic v1.10.0 // indirect -// go.uber.org/multierr v1.8.0 // indirect -// golang.org/x/crypto v0.5.0 // indirect -// golang.org/x/exp v0.0.0-20230131160201-f062dba9d201 // indirect -// golang.org/x/mod v0.8.0 // indirect -// golang.org/x/net v0.7.0 // indirect -// golang.org/x/sync v0.1.0 // indirect -// golang.org/x/sys v0.5.0 // indirect -// golang.org/x/term v0.5.0 // indirect -// golang.org/x/text v0.7.0 // indirect -// golang.org/x/tools v0.6.0 // indirect -// google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8 // indirect -// gopkg.in/ini.v1 v1.67.0 // indirect -// gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect -// gopkg.in/yaml.v2 v2.4.0 // indirect -// gopkg.in/yaml.v3 v3.0.1 // indirect -// lukechampine.com/blake3 v1.1.6 // indirect -// lukechampine.com/uint128 v1.1.1 // indirect -// modernc.org/cc/v3 v3.36.0 // indirect -// modernc.org/ccgo/v3 v3.16.6 // indirect -// modernc.org/libc v1.16.7 // indirect -// modernc.org/mathutil v1.4.1 // indirect -// modernc.org/memory v1.1.1 // indirect -// modernc.org/opt v0.1.1 // indirect -// modernc.org/sqlite v1.17.3 // indirect -// modernc.org/strutil v1.1.1 // indirect -// modernc.org/token v1.0.0 // indirect -// ) +require ( + cloud.google.com/go v0.110.0 // indirect + cloud.google.com/go/compute v1.18.0 // indirect + cloud.google.com/go/compute/metadata v0.2.3 // indirect + cloud.google.com/go/iam v0.12.0 // indirect + cloud.google.com/go/storage v1.29.0 // indirect + cosmossdk.io/api v0.3.1 // indirect + cosmossdk.io/core v0.5.1 // indirect + cosmossdk.io/depinject v1.0.0-alpha.3 // indirect + cosmossdk.io/errors v1.0.0-beta.7 // indirect + cosmossdk.io/math v1.0.0 // indirect + cosmossdk.io/tools/rosetta v0.2.1 // indirect + filippo.io/edwards25519 v1.0.0 // indirect + github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect + github.com/99designs/keyring v1.2.2 // indirect + github.com/BurntSushi/toml v1.2.1 // indirect + github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect + github.com/ChainSafe/go-schnorrkel/1 v0.0.0-00010101000000-000000000000 // indirect + github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420 // indirect + github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e // indirect + github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec // indirect + github.com/Microsoft/go-winio v0.6.0 // indirect + github.com/StirlingMarketingGroup/go-namecase v1.0.0 // indirect + github.com/armon/go-metrics v0.4.1 // indirect + github.com/avast/retry-go/v4 v4.3.3 // indirect + github.com/aws/aws-sdk-go v1.44.203 // indirect + github.com/benbjohnson/clock v1.3.0 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect + github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect + github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect + github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cespare/xxhash v1.1.0 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/chzyer/readline v1.5.1 // indirect + github.com/coinbase/rosetta-sdk-go/types v1.0.0 // indirect + github.com/cometbft/cometbft v0.37.0 // indirect + github.com/cometbft/cometbft-db v0.7.0 // indirect + github.com/confio/ics23/go v0.9.0 // indirect + github.com/cosmos/btcutil v1.0.5 // indirect + github.com/cosmos/go-bip39 v1.0.0 // indirect + github.com/cosmos/gogogateway v1.2.0 // indirect + github.com/cosmos/gogoproto v1.4.6 // indirect + github.com/cosmos/iavl v0.20.0 // indirect + github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab // indirect + github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect + github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect + github.com/creachadair/taskgroup v0.4.2 // indirect + github.com/danieljoos/wincred v1.1.2 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/deckarep/golang-set v1.8.0 // indirect + github.com/decred/base58 v1.0.4 // indirect + github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect + github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect + github.com/dgraph-io/badger/v2 v2.2007.4 // indirect + github.com/dgraph-io/ristretto v0.1.1 // indirect + github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect + github.com/docker/distribution v2.8.1+incompatible // indirect + github.com/docker/docker v20.10.19+incompatible // indirect + github.com/docker/go-connections v0.4.0 // indirect + github.com/docker/go-units v0.5.0 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect + github.com/dvsekhvalnov/jose2go v1.5.0 // indirect + github.com/ethereum/go-ethereum v1.10.20 // indirect + github.com/felixge/httpsnoop v1.0.2 // indirect + github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/go-kit/kit v0.12.0 // indirect + github.com/go-kit/log v0.2.1 // indirect + github.com/go-logfmt/logfmt v0.6.0 // indirect + github.com/go-stack/stack v1.8.1 // indirect + github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect + github.com/gogo/googleapis v1.4.1 // indirect + github.com/golang/glog v1.1.0 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/mock v1.6.0 // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/google/btree v1.1.2 // indirect + github.com/google/go-cmp v0.5.9 // indirect + github.com/google/orderedcode v0.0.1 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect + github.com/googleapis/gax-go/v2 v2.7.0 // indirect + github.com/gorilla/handlers v1.5.1 // indirect + github.com/gorilla/mux v1.8.0 // indirect + github.com/gorilla/websocket v1.5.0 // indirect + github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect + github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect + github.com/gtank/merlin v0.1.1 // indirect + github.com/gtank/ristretto255 v0.1.2 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-getter v1.7.0 // indirect + github.com/hashicorp/go-immutable-radix v1.3.1 // indirect + github.com/hashicorp/go-safetemp v1.0.0 // indirect + github.com/hashicorp/go-version v1.6.0 // indirect + github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/hdevalence/ed25519consensus v0.1.0 // indirect + github.com/huandu/skiplist v1.2.0 // indirect + github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 // indirect + github.com/improbable-eng/grpc-web v0.15.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/ipfs/go-cid v0.2.0 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/jmhodges/levigo v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect + github.com/klauspost/compress v1.16.3 // indirect + github.com/klauspost/cpuid/v2 v2.2.3 // indirect + github.com/lib/pq v1.10.7 // indirect + github.com/libp2p/go-buffer-pool v0.1.0 // indirect + github.com/libp2p/go-libp2p v0.22.0 // indirect + github.com/libp2p/go-openssl v0.1.0 // indirect + github.com/magiconair/properties v1.8.7 // indirect + github.com/manifoldco/promptui v0.9.0 // indirect + github.com/mattn/go-isatty v0.0.17 // indirect + github.com/mattn/go-pointer v0.0.1 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect + github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b // indirect + github.com/minio/highwayhash v1.0.2 // indirect + github.com/minio/sha256-simd v1.0.0 // indirect + github.com/misko9/go-substrate-rpc-client/v4 v4.0.0-20230413215336-5bd2aea337ae // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/go-testing-interface v1.14.1 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/mr-tron/base58 v1.2.0 // indirect + github.com/mtibben/percent v0.2.1 // indirect + github.com/multiformats/go-base32 v0.0.4 // indirect + github.com/multiformats/go-base36 v0.1.0 // indirect + github.com/multiformats/go-multiaddr v0.6.0 // indirect + github.com/multiformats/go-multibase v0.1.1 // indirect + github.com/multiformats/go-multicodec v0.5.0 // indirect + github.com/multiformats/go-multihash v0.2.1 // indirect + github.com/multiformats/go-varint v0.0.6 // indirect + github.com/opencontainers/go-digest v1.0.0 // indirect + github.com/opencontainers/image-spec v1.1.0-rc2 // indirect + github.com/pelletier/go-toml v1.9.5 // indirect + github.com/pelletier/go-toml/v2 v2.0.6 // indirect + github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d // indirect + github.com/pierrec/xxHash v0.1.5 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/prometheus/client_golang v1.14.0 // indirect + github.com/prometheus/client_model v0.3.0 // indirect + github.com/prometheus/common v0.40.0 // indirect + github.com/prometheus/procfs v0.9.0 // indirect + github.com/rakyll/statik v0.1.7 // indirect + github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect + github.com/rs/cors v1.8.3 // indirect + github.com/sasha-s/go-deadlock v0.3.1 // indirect + github.com/sirupsen/logrus v1.9.0 // indirect + github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect + github.com/spaolacci/murmur3 v1.1.0 // indirect + github.com/spf13/afero v1.9.3 // indirect + github.com/spf13/cast v1.5.0 // indirect + github.com/spf13/cobra v1.6.1 // indirect + github.com/spf13/jwalterweatherman v1.1.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/spf13/viper v1.15.0 // indirect + github.com/subosito/gotenv v1.4.2 // indirect + github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect + github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c // indirect + github.com/tendermint/go-amino v0.16.0 // indirect + github.com/tidwall/btree v1.6.0 // indirect + github.com/tyler-smith/go-bip32 v1.0.0 // indirect + github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef // indirect + github.com/ulikunitz/xz v0.5.11 // indirect + github.com/zondax/hid v0.9.1 // indirect + github.com/zondax/ledger-go v0.14.1 // indirect + go.etcd.io/bbolt v1.3.7 // indirect + go.opencensus.io v0.24.0 // indirect + go.uber.org/atomic v1.10.0 // indirect + go.uber.org/multierr v1.8.0 // indirect + golang.org/x/crypto v0.7.0 // indirect + golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect + golang.org/x/mod v0.9.0 // indirect + golang.org/x/net v0.8.0 // indirect + golang.org/x/oauth2 v0.5.0 // indirect + golang.org/x/sync v0.1.0 // indirect + golang.org/x/sys v0.6.0 // indirect + golang.org/x/term v0.6.0 // indirect + golang.org/x/text v0.8.0 // indirect + golang.org/x/tools v0.7.0 // indirect + golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect + google.golang.org/api v0.110.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/protobuf v1.30.0 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect + gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + lukechampine.com/blake3 v1.1.7 // indirect + lukechampine.com/uint128 v1.2.0 // indirect + modernc.org/cc/v3 v3.40.0 // indirect + modernc.org/ccgo/v3 v3.16.13 // indirect + modernc.org/libc v1.22.3 // indirect + modernc.org/mathutil v1.5.0 // indirect + modernc.org/memory v1.5.0 // indirect + modernc.org/opt v0.1.3 // indirect + modernc.org/sqlite v1.21.1 // indirect + modernc.org/strutil v1.1.3 // indirect + modernc.org/token v1.0.1 // indirect + nhooyr.io/websocket v1.8.6 // indirect + pgregory.net/rapid v0.5.5 // indirect + sigs.k8s.io/yaml v1.3.0 // indirect +) -// replace ( -// github.com/ChainSafe/go-schnorrkel => github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d -// github.com/ChainSafe/go-schnorrkel/1 => github.com/ChainSafe/go-schnorrkel v1.0.0 -// github.com/btcsuite/btcd => github.com/btcsuite/btcd v0.22.2 //indirect +replace ( + github.com/99designs/keyring => github.com/cosmos/keyring v1.2.0 -// // interchaintest supports ICS features so we need this for now -// github.com/cosmos/cosmos-sdk => github.com/cosmos/cosmos-sdk v0.45.13-ics -// github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 -// // For this nested module, you always want to replace the parent reference with the current worktree. -// github.com/notional-labs/fee-abstraction => ../../ -// github.com/strangelove-ventures/interchaintest/v4 => github.com/notional-labs/interchaintest/v4 v4.0.1-0.20230426092153-0a643db3c6b2 + github.com/ChainSafe/go-schnorrkel => github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d + github.com/ChainSafe/go-schnorrkel/1 => github.com/ChainSafe/go-schnorrkel v1.0.0 + github.com/btcsuite/btcd => github.com/btcsuite/btcd v0.22.2 //indirect -// // use informal system fork of tendermint -// github.com/tendermint/tendermint => github.com/informalsystems/tendermint v0.34.26 + // interchaintest supports ICS features so we need this for now + github.com/cosmos/cosmos-sdk => github.com/cosmos/cosmos-sdk v0.47.0 + github.com/cosmos/iavl => github.com/cosmos/iavl v0.20.0 + github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 + // For this nested module, you always want to replace the parent reference with the current worktree. + github.com/notional-labs/fee-abstraction/v4 => ../../ + github.com/strangelove-ventures/interchaintest/v7 => github.com/notional-labs/interchaintest/v7 v7.1.2 -// github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 -// ) + github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 +) diff --git a/tests/interchaintest/ibc_transfer_test.go b/tests/interchaintest/ibc_transfer_test.go index ed51801e..b4dba2a7 100644 --- a/tests/interchaintest/ibc_transfer_test.go +++ b/tests/interchaintest/ibc_transfer_test.go @@ -5,12 +5,14 @@ import ( "fmt" "testing" - transfertypes "github.com/cosmos/ibc-go/v4/modules/apps/transfer/types" - "github.com/strangelove-ventures/interchaintest/v4" - "github.com/strangelove-ventures/interchaintest/v4/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v4/ibc" - "github.com/strangelove-ventures/interchaintest/v4/testreporter" - "github.com/strangelove-ventures/interchaintest/v4/testutil" + sdktypes "github.com/cosmos/cosmos-sdk/types" + + transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + "github.com/strangelove-ventures/interchaintest/v7" + "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v7/ibc" + "github.com/strangelove-ventures/interchaintest/v7/testreporter" + "github.com/strangelove-ventures/interchaintest/v7/testutil" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) @@ -107,8 +109,8 @@ func TestFeeabsGaiaIBCTransfer(t *testing.T) { // Get our Bech32 encoded user addresses feeabsUser, gaiaUser := users[0], users[1] - feeabsUserAddr := feeabsUser.Bech32Address(feeabs.Config().Bech32Prefix) - gaiaUserAddr := gaiaUser.Bech32Address(gaia.Config().Bech32Prefix) + feeabsUserAddr := sdktypes.MustBech32ifyAddressBytes(feeabs.Config().Bech32Prefix, feeabsUser.Address()) + gaiaUserAddr := sdktypes.MustBech32ifyAddressBytes(gaia.Config().Bech32Prefix, gaiaUser.Address()) // Get original account balances feeabsOrigBal, err := feeabs.GetBalance(ctx, feeabsUserAddr, feeabs.Config().Denom) diff --git a/tests/interchaintest/osmosistypes/gamm/balancer/balancerPool.pb.go b/tests/interchaintest/osmosistypes/gamm/balancer/balancerPool.pb.go index c0835cf9..00379b28 100644 --- a/tests/interchaintest/osmosistypes/gamm/balancer/balancerPool.pb.go +++ b/tests/interchaintest/osmosistypes/gamm/balancer/balancerPool.pb.go @@ -13,6 +13,7 @@ import ( _ "github.com/cosmos/cosmos-proto" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types1 "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/cosmos-sdk/x/auth/types" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" @@ -301,59 +302,62 @@ func init() { } var fileDescriptor_7e991f749f68c2a4 = []byte{ - // 831 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0x4f, 0x6f, 0xe3, 0x44, - 0x14, 0x8f, 0x93, 0xb4, 0xd9, 0x4e, 0x96, 0x45, 0x9d, 0xcd, 0xc1, 0x4d, 0x45, 0x5c, 0x0d, 0x12, - 0x5a, 0xa1, 0x8d, 0xad, 0x2c, 0x70, 0xd9, 0xcb, 0x6a, 0xd3, 0x16, 0xd4, 0x5b, 0x71, 0x91, 0x4a, - 0x51, 0x25, 0x6b, 0x92, 0x4c, 0x6c, 0xab, 0xb6, 0xc7, 0xf2, 0x4c, 0xd2, 0xf6, 0x1b, 0x70, 0xec, - 0xb1, 0xdc, 0x7a, 0xe7, 0x0a, 0xdf, 0xa1, 0x82, 0x4b, 0x8f, 0x88, 0x83, 0x41, 0x2d, 0x27, 0x8e, - 0xf9, 0x04, 0x68, 0xfe, 0x38, 0x49, 0x4b, 0x22, 0x5a, 0x71, 0xca, 0xbc, 0x37, 0xef, 0xfd, 0xde, - 0xef, 0xbd, 0xf7, 0x1b, 0x07, 0x7c, 0x4e, 0x59, 0x4c, 0x59, 0xc8, 0x1c, 0x1f, 0xc7, 0xb1, 0x93, - 0x52, 0x1a, 0xb5, 0x63, 0x3a, 0x20, 0x11, 0x73, 0x7a, 0x38, 0xc2, 0x49, 0x9f, 0x64, 0xd3, 0xc3, - 0x3e, 0xa5, 0x91, 0x9d, 0x66, 0x94, 0x53, 0xd8, 0xd0, 0x59, 0xb6, 0xc8, 0xb2, 0xc7, 0x9d, 0x1e, - 0xe1, 0xb8, 0xd3, 0xdc, 0xe8, 0x4b, 0xb7, 0x27, 0x63, 0x1c, 0x65, 0xa8, 0x84, 0x66, 0xc3, 0xa7, - 0x3e, 0x55, 0x7e, 0x71, 0xd2, 0xde, 0x96, 0x4f, 0xa9, 0x1f, 0x11, 0x47, 0x5a, 0xbd, 0xd1, 0xd0, - 0x19, 0x8c, 0x32, 0xcc, 0x43, 0x9a, 0xe8, 0x7b, 0xeb, 0xe1, 0x3d, 0x0f, 0x63, 0xc2, 0x38, 0x8e, - 0xd3, 0x02, 0x40, 0x15, 0x71, 0xf0, 0x88, 0x07, 0x8e, 0xa6, 0x21, 0x8d, 0x07, 0xf7, 0x3d, 0xcc, - 0xc8, 0xf4, 0xbe, 0x4f, 0x43, 0x5d, 0x00, 0xfd, 0x5a, 0x01, 0xe6, 0x41, 0x4c, 0x29, 0x0f, 0x0e, - 0x49, 0xe8, 0x07, 0x7c, 0x3b, 0xc0, 0x89, 0x4f, 0xf6, 0x71, 0x86, 0x63, 0x06, 0xbf, 0x05, 0x80, - 0x71, 0x9c, 0x71, 0x4f, 0x54, 0x35, 0x8d, 0x2d, 0xe3, 0x55, 0xfd, 0x4d, 0xd3, 0x56, 0x94, 0xec, - 0x82, 0x92, 0xfd, 0x4d, 0x41, 0xa9, 0xfb, 0xd1, 0x75, 0x6e, 0x95, 0x26, 0xb9, 0xb5, 0x7e, 0x8e, - 0xe3, 0xe8, 0x2d, 0x9a, 0xe5, 0xa2, 0x8b, 0x3f, 0x2c, 0xc3, 0x5d, 0x93, 0x0e, 0x11, 0x0e, 0x03, - 0xf0, 0xac, 0xe8, 0xd4, 0x2c, 0x4b, 0xdc, 0x8d, 0x7f, 0xe1, 0xee, 0xe8, 0x80, 0x6e, 0x47, 0xc0, - 0xfe, 0x9d, 0x5b, 0xb0, 0x48, 0x79, 0x4d, 0xe3, 0x90, 0x93, 0x38, 0xe5, 0xe7, 0x93, 0xdc, 0xfa, - 0x50, 0x15, 0x2b, 0xee, 0xd0, 0xa5, 0x28, 0x35, 0x45, 0x87, 0x63, 0xd0, 0x08, 0x93, 0x90, 0x87, - 0x38, 0xf2, 0xc4, 0x6e, 0xbd, 0x53, 0xd9, 0x26, 0x33, 0x2b, 0x5b, 0x95, 0x57, 0xf5, 0x37, 0x96, - 0xbd, 0x68, 0x8f, 0xb6, 0x58, 0xf4, 0x7b, 0xc6, 0x08, 0xef, 0x7e, 0xac, 0x5b, 0xda, 0x54, 0x55, - 0x16, 0x41, 0x21, 0x17, 0x6a, 0xb7, 0x48, 0x53, 0x63, 0x64, 0x90, 0x81, 0x97, 0x1c, 0x67, 0x3e, - 0xe1, 0xf7, 0xcb, 0x56, 0x1f, 0x57, 0x16, 0xe9, 0xb2, 0x4d, 0x55, 0x76, 0x01, 0x12, 0x72, 0xd7, - 0x95, 0x77, 0xae, 0x28, 0xfa, 0xab, 0x0c, 0x80, 0xb0, 0xf5, 0xfe, 0x8e, 0xc1, 0x33, 0x76, 0x8a, - 0x53, 0x6f, 0x48, 0xd4, 0xf6, 0xd6, 0xba, 0xef, 0x05, 0xee, 0xef, 0xb9, 0xf5, 0x89, 0x1f, 0xf2, - 0x60, 0xd4, 0xb3, 0xfb, 0x34, 0xd6, 0x32, 0xd5, 0x3f, 0x6d, 0x36, 0x38, 0x71, 0xf8, 0x79, 0x4a, - 0x98, 0xbd, 0x43, 0xfa, 0xb3, 0xf1, 0x16, 0x38, 0xc8, 0xad, 0x89, 0xe3, 0x97, 0x84, 0x08, 0x74, - 0x72, 0x16, 0x72, 0x89, 0x5e, 0xfe, 0x7f, 0xe8, 0x05, 0x0e, 0x72, 0x6b, 0xe2, 0x28, 0xd0, 0x7f, - 0x30, 0xc0, 0x26, 0x93, 0xc2, 0xd4, 0x1d, 0x7b, 0x7d, 0x29, 0x4d, 0x2f, 0x95, 0xbd, 0x99, 0x15, - 0xa9, 0x1a, 0x7b, 0xf1, 0x20, 0x97, 0x29, 0xba, 0xfb, 0xe9, 0x75, 0x6e, 0x19, 0x93, 0xdc, 0x42, - 0xba, 0xab, 0xe5, 0x05, 0x90, 0x6b, 0xb2, 0x25, 0x28, 0xe8, 0x47, 0x03, 0xac, 0x4d, 0x77, 0x05, - 0x77, 0xc1, 0x0a, 0xa7, 0x27, 0x24, 0xd1, 0x0f, 0x64, 0xc3, 0xd6, 0xef, 0x5e, 0x3c, 0xb9, 0x29, - 0xa3, 0x6d, 0x1a, 0x26, 0xdd, 0x86, 0xde, 0xea, 0x73, 0xbd, 0x55, 0x91, 0x85, 0x5c, 0x95, 0x0d, - 0x0f, 0xc1, 0xaa, 0xe2, 0xa1, 0x87, 0xf9, 0xee, 0x09, 0xc3, 0xdc, 0x4b, 0xf8, 0x24, 0xb7, 0x3e, - 0x50, 0xb0, 0x0a, 0x05, 0xb9, 0x1a, 0x0e, 0xfd, 0x5c, 0x05, 0x55, 0xc1, 0x16, 0xbe, 0x06, 0x35, - 0x3c, 0x18, 0x64, 0x84, 0x31, 0xad, 0x06, 0x38, 0xc9, 0xad, 0x17, 0x2a, 0x49, 0x5f, 0x20, 0xb7, - 0x08, 0x81, 0x2f, 0x40, 0x39, 0x1c, 0x48, 0x2e, 0x55, 0xb7, 0x1c, 0x0e, 0xe0, 0x10, 0xd4, 0xa5, - 0xfe, 0xee, 0xcd, 0x7f, 0x6b, 0xb9, 0x90, 0xf5, 0xc4, 0x1f, 0x3c, 0xa0, 0xe2, 0x53, 0xea, 0xcd, - 0x61, 0x21, 0x17, 0xa4, 0x33, 0xd1, 0x7e, 0x0d, 0x1a, 0xc3, 0x11, 0x1f, 0x65, 0x44, 0x85, 0xf8, - 0x74, 0x4c, 0xb2, 0x84, 0x66, 0x66, 0x55, 0x52, 0xb6, 0x66, 0x50, 0x8b, 0xa2, 0x90, 0x0b, 0x95, - 0x5b, 0x30, 0xf8, 0x4a, 0x3b, 0xe1, 0x11, 0x78, 0xce, 0x29, 0xc7, 0x91, 0xc7, 0x02, 0x9c, 0x11, - 0x66, 0xae, 0xfc, 0xd7, 0xa2, 0x36, 0x35, 0xe9, 0x97, 0xc5, 0xa2, 0x66, 0xc9, 0xc8, 0xad, 0x4b, - 0xf3, 0x40, 0x5a, 0xf0, 0x58, 0x4f, 0x05, 0x0b, 0x29, 0x30, 0x73, 0xf5, 0x71, 0xcf, 0xbb, 0xa9, - 0xf1, 0xa1, 0xc2, 0x9f, 0x43, 0xd0, 0xb3, 0x90, 0x61, 0x0c, 0x06, 0x05, 0x71, 0xad, 0x8c, 0x9a, - 0x9c, 0xc1, 0xee, 0x93, 0x95, 0x71, 0xaf, 0x8f, 0x42, 0x1f, 0xaa, 0x0f, 0x25, 0xef, 0xb7, 0xeb, - 0xdf, 0x5f, 0x59, 0xa5, 0xcb, 0x2b, 0xab, 0xf4, 0xcb, 0x4f, 0xed, 0x15, 0x41, 0x74, 0xaf, 0x7b, - 0x74, 0x7d, 0xdb, 0x32, 0x6e, 0x6e, 0x5b, 0xc6, 0x9f, 0xb7, 0x2d, 0xe3, 0xe2, 0xae, 0x55, 0xba, - 0xb9, 0x6b, 0x95, 0x7e, 0xbb, 0x6b, 0x95, 0xbe, 0x7b, 0x37, 0x57, 0x58, 0x77, 0xda, 0x8e, 0x70, - 0x8f, 0x15, 0x86, 0x33, 0xee, 0x7c, 0xe1, 0x9c, 0x2d, 0xff, 0x43, 0xed, 0xad, 0xca, 0x8f, 0xfc, - 0x67, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x5d, 0xc4, 0xe9, 0x0d, 0x7c, 0x07, 0x00, 0x00, + // 867 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0x4f, 0x8f, 0xdb, 0x44, + 0x14, 0x8f, 0x37, 0xd9, 0x4d, 0x77, 0x52, 0x8a, 0x76, 0x9a, 0x83, 0x93, 0x15, 0x99, 0xd5, 0x80, + 0x50, 0x55, 0x35, 0xb6, 0x52, 0xe0, 0xb2, 0x97, 0xaa, 0x6e, 0x0b, 0xea, 0xad, 0xb8, 0x48, 0xa5, + 0xa8, 0x92, 0x35, 0x49, 0x26, 0xb6, 0x55, 0xdb, 0x63, 0x79, 0x26, 0x69, 0xf7, 0x1b, 0xa0, 0x9e, + 0x7a, 0x2c, 0xb7, 0xde, 0xb9, 0x70, 0xe0, 0x43, 0xac, 0xe0, 0x52, 0x89, 0x0b, 0xe2, 0x60, 0xd0, + 0xee, 0x01, 0x89, 0x63, 0x3e, 0x01, 0x9a, 0x3f, 0xce, 0x9f, 0x25, 0x11, 0xad, 0x7a, 0x49, 0x66, + 0xde, 0xbc, 0xf7, 0x7b, 0xbf, 0xf7, 0xde, 0x6f, 0xc6, 0xe0, 0x73, 0xc6, 0x53, 0xc6, 0x63, 0xee, + 0x86, 0x24, 0x4d, 0xdd, 0x9c, 0xb1, 0xa4, 0x9f, 0xb2, 0x31, 0x4d, 0xb8, 0x3b, 0x24, 0x09, 0xc9, + 0x46, 0xb4, 0x58, 0x2c, 0x1e, 0x30, 0x96, 0x38, 0x79, 0xc1, 0x04, 0x83, 0x6d, 0x13, 0xe5, 0xc8, + 0x28, 0x67, 0x36, 0x18, 0x52, 0x41, 0x06, 0xdd, 0xce, 0x48, 0x99, 0x03, 0xe5, 0xe3, 0xea, 0x8d, + 0x0e, 0xe8, 0xb6, 0x43, 0x16, 0x32, 0x6d, 0x97, 0x2b, 0x63, 0x3d, 0x20, 0x69, 0x9c, 0x31, 0x57, + 0xfd, 0x1a, 0x53, 0x2f, 0x64, 0x2c, 0x4c, 0xa8, 0xab, 0x76, 0xc3, 0xe9, 0xc4, 0x1d, 0x4f, 0x0b, + 0x22, 0x62, 0x96, 0x99, 0x73, 0x74, 0xf1, 0x5c, 0xc4, 0x29, 0xe5, 0x82, 0xa4, 0x79, 0x05, 0xa0, + 0xf3, 0xba, 0x64, 0x2a, 0x22, 0xd7, 0x30, 0x53, 0x9b, 0x0b, 0xe7, 0x43, 0xc2, 0xe9, 0xe2, 0x7c, + 0xc4, 0x62, 0x93, 0x00, 0xff, 0x5a, 0x07, 0xf6, 0xc3, 0x94, 0x31, 0x11, 0x3d, 0xa2, 0x71, 0x18, + 0x89, 0x3b, 0x11, 0xc9, 0x42, 0xfa, 0x80, 0x14, 0x24, 0xe5, 0xf0, 0x5b, 0x00, 0xb8, 0x20, 0x85, + 0x08, 0x64, 0x56, 0xdb, 0x3a, 0xb2, 0xae, 0xb5, 0x6e, 0x76, 0x1d, 0x4d, 0xc9, 0xa9, 0x28, 0x39, + 0xdf, 0x54, 0x94, 0xbc, 0x8f, 0x4e, 0x4b, 0x54, 0x9b, 0x97, 0xe8, 0xe0, 0x84, 0xa4, 0xc9, 0x31, + 0x5e, 0xc6, 0xe2, 0x97, 0x7f, 0x22, 0xcb, 0xdf, 0x57, 0x06, 0xe9, 0x0e, 0x23, 0x70, 0xa9, 0xaa, + 0xd4, 0xde, 0x51, 0xb8, 0x9d, 0xff, 0xe0, 0xde, 0x35, 0x0e, 0xde, 0x40, 0xc2, 0xfe, 0x53, 0x22, + 0x58, 0x85, 0xdc, 0x60, 0x69, 0x2c, 0x68, 0x9a, 0x8b, 0x93, 0x79, 0x89, 0x3e, 0xd4, 0xc9, 0xaa, + 0x33, 0xfc, 0x4a, 0xa6, 0x5a, 0xa0, 0xc3, 0x19, 0x68, 0xc7, 0x59, 0x2c, 0x62, 0x92, 0x04, 0x72, + 0xdc, 0xc1, 0x33, 0x55, 0x26, 0xb7, 0xeb, 0x47, 0xf5, 0x6b, 0xad, 0x9b, 0xc8, 0xd9, 0x34, 0x5a, + 0x47, 0xce, 0xfe, 0x36, 0xe7, 0x54, 0x78, 0x1f, 0x9b, 0x92, 0x0e, 0x75, 0x96, 0x4d, 0x50, 0xd8, + 0x87, 0xc6, 0x2c, 0xc3, 0x74, 0x1b, 0x39, 0xe4, 0xe0, 0xaa, 0x20, 0x45, 0x48, 0xc5, 0x7a, 0xda, + 0xc6, 0xdb, 0xa5, 0xc5, 0x26, 0x6d, 0x57, 0xa7, 0xdd, 0x80, 0x84, 0xfd, 0x03, 0x6d, 0x5d, 0x49, + 0x8a, 0x5f, 0xd4, 0x01, 0x90, 0x7b, 0x33, 0xbf, 0x27, 0xe0, 0x12, 0x7f, 0x46, 0xf2, 0x60, 0x42, + 0xf5, 0xf4, 0xf6, 0xbd, 0xdb, 0x12, 0xf7, 0x8f, 0x12, 0x7d, 0x1a, 0xc6, 0x22, 0x9a, 0x0e, 0x9d, + 0x11, 0x4b, 0x8d, 0x72, 0xcd, 0x5f, 0x9f, 0x8f, 0x9f, 0xba, 0xe2, 0x24, 0xa7, 0xdc, 0xb9, 0x4b, + 0x47, 0xcb, 0xf6, 0x56, 0x38, 0xd8, 0x6f, 0xca, 0xe5, 0x97, 0x94, 0x4a, 0x74, 0xfa, 0x3c, 0x16, + 0x0a, 0x7d, 0xe7, 0xfd, 0xd0, 0x2b, 0x1c, 0xec, 0x37, 0xe5, 0x52, 0xa2, 0xff, 0x60, 0x81, 0x43, + 0xae, 0x84, 0x69, 0x2a, 0x0e, 0x46, 0x4a, 0x9a, 0x41, 0xae, 0x6a, 0xb3, 0xeb, 0x4a, 0x35, 0xce, + 0xe6, 0x46, 0x6e, 0x53, 0xb4, 0x77, 0xfd, 0xb4, 0x44, 0xd6, 0xbc, 0x44, 0xd8, 0x54, 0xb5, 0x3d, + 0x01, 0xf6, 0x6d, 0xbe, 0x05, 0xe5, 0xf8, 0x93, 0x17, 0x7f, 0xff, 0x74, 0x1d, 0xad, 0x3d, 0x25, + 0xde, 0xca, 0xab, 0xa1, 0xbd, 0xf0, 0x8f, 0x16, 0xd8, 0x5f, 0x4c, 0x14, 0xde, 0x03, 0xbb, 0x82, + 0x3d, 0xa5, 0x99, 0xb9, 0x46, 0x1d, 0xc7, 0x3c, 0x18, 0xf2, 0x62, 0x2e, 0x78, 0xdf, 0x61, 0x71, + 0xe6, 0xb5, 0xcd, 0xec, 0x2f, 0x9b, 0xd9, 0xcb, 0x28, 0xec, 0xeb, 0x68, 0xf8, 0x08, 0xec, 0x69, + 0xb6, 0xa6, 0xe5, 0xb7, 0xde, 0xa1, 0xe5, 0xf7, 0x33, 0x31, 0x2f, 0xd1, 0x07, 0x1a, 0x56, 0xa3, + 0x60, 0xdf, 0xc0, 0xe1, 0xdf, 0x1a, 0xa0, 0x21, 0xd9, 0xc2, 0x1b, 0xa0, 0x49, 0xc6, 0xe3, 0x82, + 0x72, 0x6e, 0x34, 0x03, 0xe7, 0x25, 0xba, 0xa2, 0x83, 0xcc, 0x01, 0xf6, 0x2b, 0x17, 0x78, 0x05, + 0xec, 0xc4, 0x63, 0xc5, 0xa5, 0xe1, 0xef, 0xc4, 0x63, 0x38, 0x01, 0x2d, 0xa5, 0xd2, 0xb5, 0x29, + 0x1d, 0x6d, 0x97, 0xbb, 0x99, 0xcb, 0x85, 0x6b, 0x56, 0xbd, 0xc1, 0xc1, 0x0a, 0x16, 0xf6, 0x41, + 0xbe, 0x94, 0xf6, 0xd7, 0xa0, 0x3d, 0x99, 0x8a, 0x69, 0x41, 0xb5, 0x4b, 0xc8, 0x66, 0xb4, 0xc8, + 0x58, 0x61, 0x37, 0x14, 0x65, 0xb4, 0x84, 0xda, 0xe4, 0x85, 0x7d, 0xa8, 0xcd, 0x92, 0xc1, 0x57, + 0xc6, 0x08, 0x1f, 0x83, 0xcb, 0x82, 0x09, 0x92, 0x04, 0x3c, 0x22, 0x05, 0xe5, 0xf6, 0xee, 0xff, + 0x0d, 0xea, 0xd0, 0x90, 0xbe, 0x5a, 0x0d, 0x6a, 0x19, 0x8c, 0xfd, 0x96, 0xda, 0x3e, 0x54, 0x3b, + 0xf8, 0xc4, 0x74, 0x85, 0x48, 0x29, 0x70, 0x7b, 0xef, 0xed, 0x1e, 0x81, 0xae, 0xc1, 0x87, 0x1a, + 0x7f, 0x05, 0xc1, 0xf4, 0x42, 0xb9, 0x71, 0x18, 0x55, 0xc4, 0x8d, 0x32, 0x9a, 0xaa, 0x07, 0xf7, + 0xde, 0x59, 0x19, 0x6b, 0x75, 0x54, 0xfa, 0xd0, 0x75, 0xe8, 0x4b, 0x70, 0xec, 0x7e, 0xff, 0x1a, + 0xd5, 0x5e, 0xbd, 0x46, 0xb5, 0x5f, 0x7e, 0xee, 0xef, 0x4a, 0xa2, 0xf7, 0xe5, 0x4d, 0xe8, 0x6c, + 0xbd, 0x09, 0xde, 0xe3, 0xd3, 0xb3, 0x9e, 0xf5, 0xe6, 0xac, 0x67, 0xfd, 0x75, 0xd6, 0xb3, 0x5e, + 0x9e, 0xf7, 0x6a, 0x6f, 0xce, 0x7b, 0xb5, 0xdf, 0xcf, 0x7b, 0xb5, 0xef, 0x6e, 0xad, 0xd0, 0x32, + 0xf1, 0xfd, 0x84, 0x0c, 0x79, 0xb5, 0x71, 0x67, 0x83, 0x2f, 0xdc, 0xe7, 0xdb, 0xbf, 0xd3, 0xc3, + 0x3d, 0xf5, 0xa1, 0xf8, 0xec, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x5c, 0xe8, 0x89, 0xe3, 0xd3, + 0x07, 0x00, 0x00, } func (m *SmoothWeightChangeParams) Marshal() (dAtA []byte, err error) { diff --git a/tests/interchaintest/osmosistypes/gamm/balancer/codec.go b/tests/interchaintest/osmosistypes/gamm/balancer/codec.go index 0d7673fe..4a7799d6 100644 --- a/tests/interchaintest/osmosistypes/gamm/balancer/codec.go +++ b/tests/interchaintest/osmosistypes/gamm/balancer/codec.go @@ -27,4 +27,4 @@ var ( // The actual codec used for serialization should be provided to x/staking and // defined at the application level. ModuleCdc = codec.NewAminoCodec(amino) -) +) \ No newline at end of file diff --git a/tests/interchaintest/osmosistypes/gamm/balancer/msgs.go b/tests/interchaintest/osmosistypes/gamm/balancer/msgs.go index 75c7a7a1..dafc79a5 100644 --- a/tests/interchaintest/osmosistypes/gamm/balancer/msgs.go +++ b/tests/interchaintest/osmosistypes/gamm/balancer/msgs.go @@ -46,4 +46,4 @@ func (msg MsgMigrateSharesToFullRangeConcentratedPosition) GetSigners() []sdk.Ac panic(err) } return []sdk.AccAddress{sender} -} +} \ No newline at end of file diff --git a/tests/interchaintest/osmosistypes/gamm/balancer/pool.go b/tests/interchaintest/osmosistypes/gamm/balancer/pool.go index 9f8c5898..09026a6c 100644 --- a/tests/interchaintest/osmosistypes/gamm/balancer/pool.go +++ b/tests/interchaintest/osmosistypes/gamm/balancer/pool.go @@ -42,4 +42,4 @@ func (p Pool) MarshalJSON() ([]byte, error) { TotalShares: p.TotalShares, PoolAssets: p.PoolAssets, }) -} +} \ No newline at end of file diff --git a/tests/interchaintest/osmosistypes/gamm/balancer/tx.pb.go b/tests/interchaintest/osmosistypes/gamm/balancer/tx.pb.go new file mode 100644 index 00000000..fd331041 --- /dev/null +++ b/tests/interchaintest/osmosistypes/gamm/balancer/tx.pb.go @@ -0,0 +1,1421 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: osmosis/gamm/pool-models/balancer/tx/tx.proto + +package balancer + +import ( + context "context" + fmt "fmt" + github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + _ "github.com/gogo/protobuf/gogoproto" + grpc1 "github.com/gogo/protobuf/grpc" + proto "github.com/gogo/protobuf/proto" + _ "github.com/gogo/protobuf/types" + github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + 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" + time "time" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf +var _ = time.Kitchen + +// 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 + +// ===================== MsgCreatePool +type MsgCreateBalancerPool struct { + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` + PoolParams *PoolParams `protobuf:"bytes,2,opt,name=pool_params,json=poolParams,proto3" json:"pool_params,omitempty" yaml:"pool_params"` + PoolAssets []PoolAsset `protobuf:"bytes,3,rep,name=pool_assets,json=poolAssets,proto3" json:"pool_assets"` + FuturePoolGovernor string `protobuf:"bytes,4,opt,name=future_pool_governor,json=futurePoolGovernor,proto3" json:"future_pool_governor,omitempty" yaml:"future_pool_governor"` +} + +func (m *MsgCreateBalancerPool) Reset() { *m = MsgCreateBalancerPool{} } +func (m *MsgCreateBalancerPool) String() string { return proto.CompactTextString(m) } +func (*MsgCreateBalancerPool) ProtoMessage() {} +func (*MsgCreateBalancerPool) Descriptor() ([]byte, []int) { + return fileDescriptor_0647ee155de97433, []int{0} +} +func (m *MsgCreateBalancerPool) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgCreateBalancerPool) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgCreateBalancerPool.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 *MsgCreateBalancerPool) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgCreateBalancerPool.Merge(m, src) +} +func (m *MsgCreateBalancerPool) XXX_Size() int { + return m.Size() +} +func (m *MsgCreateBalancerPool) XXX_DiscardUnknown() { + xxx_messageInfo_MsgCreateBalancerPool.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgCreateBalancerPool proto.InternalMessageInfo + +func (m *MsgCreateBalancerPool) GetSender() string { + if m != nil { + return m.Sender + } + return "" +} + +func (m *MsgCreateBalancerPool) GetPoolParams() *PoolParams { + if m != nil { + return m.PoolParams + } + return nil +} + +func (m *MsgCreateBalancerPool) GetPoolAssets() []PoolAsset { + if m != nil { + return m.PoolAssets + } + return nil +} + +func (m *MsgCreateBalancerPool) GetFuturePoolGovernor() string { + if m != nil { + return m.FuturePoolGovernor + } + return "" +} + +// Returns the poolID +type MsgCreateBalancerPoolResponse struct { + PoolID uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` +} + +func (m *MsgCreateBalancerPoolResponse) Reset() { *m = MsgCreateBalancerPoolResponse{} } +func (m *MsgCreateBalancerPoolResponse) String() string { return proto.CompactTextString(m) } +func (*MsgCreateBalancerPoolResponse) ProtoMessage() {} +func (*MsgCreateBalancerPoolResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0647ee155de97433, []int{1} +} +func (m *MsgCreateBalancerPoolResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgCreateBalancerPoolResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgCreateBalancerPoolResponse.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 *MsgCreateBalancerPoolResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgCreateBalancerPoolResponse.Merge(m, src) +} +func (m *MsgCreateBalancerPoolResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgCreateBalancerPoolResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgCreateBalancerPoolResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgCreateBalancerPoolResponse proto.InternalMessageInfo + +func (m *MsgCreateBalancerPoolResponse) GetPoolID() uint64 { + if m != nil { + return m.PoolID + } + return 0 +} + +// ===================== MsgMigrateSharesToFullRangeConcentratedPosition +type MsgMigrateSharesToFullRangeConcentratedPosition struct { + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` + // shares_to_migrate indicates number of shares to migrate. + SharesToMigrate types.Coin `protobuf:"bytes,2,opt,name=shares_to_migrate,json=sharesToMigrate,proto3" json:"shares_to_migrate" yaml:"shares_to_migrate"` + // token_out_mins indicates minimum token to exit Balancer pool with. + TokenOutMins []types.Coin `protobuf:"bytes,3,rep,name=token_out_mins,json=tokenOutMins,proto3" json:"token_out_mins" yaml:"token_out_min_amounts"` +} + +func (m *MsgMigrateSharesToFullRangeConcentratedPosition) Reset() { + *m = MsgMigrateSharesToFullRangeConcentratedPosition{} +} +func (m *MsgMigrateSharesToFullRangeConcentratedPosition) String() string { + return proto.CompactTextString(m) +} +func (*MsgMigrateSharesToFullRangeConcentratedPosition) ProtoMessage() {} +func (*MsgMigrateSharesToFullRangeConcentratedPosition) Descriptor() ([]byte, []int) { + return fileDescriptor_0647ee155de97433, []int{2} +} +func (m *MsgMigrateSharesToFullRangeConcentratedPosition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgMigrateSharesToFullRangeConcentratedPosition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgMigrateSharesToFullRangeConcentratedPosition.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 *MsgMigrateSharesToFullRangeConcentratedPosition) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgMigrateSharesToFullRangeConcentratedPosition.Merge(m, src) +} +func (m *MsgMigrateSharesToFullRangeConcentratedPosition) XXX_Size() int { + return m.Size() +} +func (m *MsgMigrateSharesToFullRangeConcentratedPosition) XXX_DiscardUnknown() { + xxx_messageInfo_MsgMigrateSharesToFullRangeConcentratedPosition.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgMigrateSharesToFullRangeConcentratedPosition proto.InternalMessageInfo + +func (m *MsgMigrateSharesToFullRangeConcentratedPosition) GetSender() string { + if m != nil { + return m.Sender + } + return "" +} + +func (m *MsgMigrateSharesToFullRangeConcentratedPosition) GetSharesToMigrate() types.Coin { + if m != nil { + return m.SharesToMigrate + } + return types.Coin{} +} + +func (m *MsgMigrateSharesToFullRangeConcentratedPosition) GetTokenOutMins() []types.Coin { + if m != nil { + return m.TokenOutMins + } + return nil +} + +type MsgMigrateSharesToFullRangeConcentratedPositionResponse struct { + Amount0 github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=amount0,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"amount0" yaml:"amount0"` + Amount1 github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,2,opt,name=amount1,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"amount1" yaml:"amount1"` + LiquidityCreated github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,3,opt,name=liquidity_created,json=liquidityCreated,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"liquidity_created" yaml:"liquidity_created"` + JoinTime time.Time `protobuf:"bytes,4,opt,name=join_time,json=joinTime,proto3,stdtime" json:"join_time" yaml:"join_time"` +} + +func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) Reset() { + *m = MsgMigrateSharesToFullRangeConcentratedPositionResponse{} +} +func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) String() string { + return proto.CompactTextString(m) +} +func (*MsgMigrateSharesToFullRangeConcentratedPositionResponse) ProtoMessage() {} +func (*MsgMigrateSharesToFullRangeConcentratedPositionResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0647ee155de97433, []int{3} +} +func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgMigrateSharesToFullRangeConcentratedPositionResponse.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 *MsgMigrateSharesToFullRangeConcentratedPositionResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgMigrateSharesToFullRangeConcentratedPositionResponse.Merge(m, src) +} +func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgMigrateSharesToFullRangeConcentratedPositionResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgMigrateSharesToFullRangeConcentratedPositionResponse proto.InternalMessageInfo + +func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) GetJoinTime() time.Time { + if m != nil { + return m.JoinTime + } + return time.Time{} +} + +func init() { + proto.RegisterType((*MsgCreateBalancerPool)(nil), "osmosis.gamm.poolmodels.balancer.v1beta1.MsgCreateBalancerPool") + proto.RegisterType((*MsgCreateBalancerPoolResponse)(nil), "osmosis.gamm.poolmodels.balancer.v1beta1.MsgCreateBalancerPoolResponse") + proto.RegisterType((*MsgMigrateSharesToFullRangeConcentratedPosition)(nil), "osmosis.gamm.poolmodels.balancer.v1beta1.MsgMigrateSharesToFullRangeConcentratedPosition") + proto.RegisterType((*MsgMigrateSharesToFullRangeConcentratedPositionResponse)(nil), "osmosis.gamm.poolmodels.balancer.v1beta1.MsgMigrateSharesToFullRangeConcentratedPositionResponse") +} + +func init() { + proto.RegisterFile("osmosis/gamm/pool-models/balancer/tx/tx.proto", fileDescriptor_0647ee155de97433) +} + +var fileDescriptor_0647ee155de97433 = []byte{ + // 792 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0x4d, 0x6f, 0xe3, 0x44, + 0x18, 0x8e, 0x9b, 0x2a, 0xcb, 0x4e, 0x60, 0xd9, 0x58, 0x0b, 0x0a, 0x61, 0x89, 0x83, 0x41, 0xab, + 0x80, 0xc8, 0x0c, 0x09, 0x20, 0xa4, 0xbd, 0x2c, 0xb8, 0xd5, 0xae, 0x8a, 0x14, 0x51, 0xcc, 0x72, + 0xe8, 0x5e, 0xac, 0x49, 0x3c, 0xeb, 0x1d, 0xd6, 0x9e, 0x09, 0x9e, 0x71, 0x69, 0xff, 0x02, 0xa7, + 0x5e, 0xb8, 0xf2, 0x0b, 0x38, 0xf0, 0x17, 0xb8, 0xf5, 0xd8, 0x23, 0xe2, 0x60, 0xaa, 0xf4, 0xc0, + 0x85, 0x53, 0x7e, 0x01, 0x9a, 0x0f, 0xa7, 0x2d, 0xa4, 0x40, 0x54, 0x71, 0x49, 0x3c, 0xef, 0x3c, + 0xef, 0xf3, 0xbc, 0x7e, 0xbf, 0x0c, 0x06, 0x5c, 0x64, 0x5c, 0x50, 0x81, 0x12, 0x9c, 0x65, 0x68, + 0xc6, 0x79, 0x3a, 0xc8, 0x78, 0x4c, 0x52, 0x81, 0x26, 0x38, 0xc5, 0x6c, 0x4a, 0x72, 0x24, 0x0f, + 0x90, 0x3c, 0x80, 0xb3, 0x9c, 0x4b, 0xee, 0xf6, 0x2d, 0x1c, 0x2a, 0x38, 0x54, 0x70, 0x83, 0x86, + 0x15, 0x1a, 0xee, 0x0f, 0x27, 0x44, 0xe2, 0x61, 0xe7, 0x4e, 0xc2, 0x13, 0xae, 0x9d, 0x90, 0x7a, + 0x32, 0xfe, 0x9d, 0x16, 0xce, 0x28, 0xe3, 0x48, 0xff, 0x5a, 0xd3, 0x87, 0xff, 0x1e, 0x41, 0xf5, + 0xb0, 0xcb, 0x79, 0x6a, 0xbd, 0xba, 0x53, 0xed, 0x86, 0x26, 0x58, 0x10, 0x64, 0x35, 0xd1, 0x94, + 0x53, 0x66, 0xef, 0xbd, 0x84, 0xf3, 0x24, 0x25, 0x48, 0x9f, 0x26, 0xc5, 0x53, 0x24, 0x69, 0x46, + 0x84, 0xc4, 0xd9, 0xcc, 0x00, 0xfc, 0xd3, 0x0d, 0xf0, 0xca, 0x58, 0x24, 0x5b, 0x39, 0xc1, 0x92, + 0x04, 0x17, 0x04, 0xdc, 0x77, 0x40, 0x43, 0x10, 0x16, 0x93, 0xbc, 0xed, 0xf4, 0x9c, 0xfe, 0xcd, + 0xa0, 0xb5, 0x28, 0xbd, 0x97, 0x0e, 0x71, 0x96, 0xde, 0xf7, 0x8d, 0xdd, 0x0f, 0x2d, 0xc0, 0xdd, + 0x03, 0x4d, 0x15, 0x70, 0x34, 0xc3, 0x39, 0xce, 0x44, 0x7b, 0xa3, 0xe7, 0xf4, 0x9b, 0xa3, 0x1e, + 0xbc, 0x94, 0x24, 0x1b, 0x1c, 0x54, 0xdc, 0xbb, 0x1a, 0x17, 0xbc, 0xba, 0x28, 0x3d, 0xd7, 0x30, + 0x5e, 0x70, 0xf7, 0x43, 0x30, 0x5b, 0x62, 0xdc, 0x87, 0x96, 0x1a, 0x0b, 0x41, 0xa4, 0x68, 0xd7, + 0x7b, 0xf5, 0x7e, 0x73, 0xe4, 0x5d, 0x4d, 0xfd, 0xa9, 0xc2, 0x05, 0x9b, 0xc7, 0xa5, 0x57, 0x33, + 0x3c, 0xda, 0x20, 0xdc, 0x2f, 0xc0, 0x9d, 0xa7, 0x85, 0x2c, 0x72, 0x12, 0x69, 0xba, 0x84, 0xef, + 0x93, 0x9c, 0xf1, 0xbc, 0xbd, 0xa9, 0xdf, 0xcd, 0x5b, 0x94, 0xde, 0xeb, 0x26, 0x92, 0x55, 0x28, + 0x3f, 0x74, 0x8d, 0x59, 0x29, 0x3c, 0xb2, 0xc6, 0xfb, 0xf7, 0xbe, 0xfb, 0xfd, 0xa7, 0x77, 0xdf, + 0xbc, 0x54, 0xb6, 0xa9, 0x4e, 0xe3, 0xa0, 0x2a, 0xd4, 0x40, 0xb1, 0xf8, 0xdb, 0xe0, 0x8d, 0x95, + 0x19, 0x0e, 0x89, 0x98, 0x71, 0x26, 0x88, 0xfb, 0x16, 0xb8, 0xa1, 0xe5, 0x68, 0xac, 0x53, 0xbd, + 0x19, 0x80, 0x79, 0xe9, 0x35, 0x14, 0x64, 0x67, 0x3b, 0x6c, 0xa8, 0xab, 0x9d, 0xd8, 0xff, 0x71, + 0x03, 0xa0, 0xb1, 0x48, 0xc6, 0x34, 0xc9, 0xb1, 0x24, 0x5f, 0x3e, 0xc3, 0x39, 0x11, 0x8f, 0xf9, + 0xc3, 0x22, 0x4d, 0x43, 0xcc, 0x12, 0xb2, 0xc5, 0xd9, 0x94, 0x30, 0xa9, 0xee, 0xe2, 0x5d, 0x2e, + 0xa8, 0xa4, 0x9c, 0xad, 0x53, 0xc2, 0x04, 0xb4, 0x84, 0xe6, 0x8c, 0x24, 0x8f, 0x32, 0x23, 0x62, + 0x0b, 0xf9, 0x1a, 0x34, 0x4d, 0x06, 0x55, 0x93, 0x2d, 0x93, 0xbd, 0xc5, 0x29, 0x0b, 0x7a, 0x2a, + 0xcf, 0x8b, 0xd2, 0x6b, 0x5b, 0xd2, 0xbf, 0x32, 0xf8, 0xe1, 0xcb, 0xc2, 0x46, 0x6a, 0x03, 0x77, + 0x09, 0xb8, 0x25, 0xf9, 0x73, 0xc2, 0x22, 0x5e, 0xc8, 0x28, 0xa3, 0xac, 0xaa, 0xe9, 0x3f, 0xa8, + 0xbc, 0x6d, 0x55, 0xee, 0x1a, 0x95, 0x4b, 0xee, 0x11, 0xce, 0x78, 0xc1, 0xa4, 0xf0, 0xc3, 0x17, + 0xb5, 0xfd, 0xf3, 0x42, 0x8e, 0x29, 0x13, 0xfe, 0xcf, 0x75, 0xf0, 0xf1, 0x9a, 0xe9, 0x5a, 0xd6, + 0xe3, 0x09, 0xb8, 0x61, 0x58, 0xdf, 0xb7, 0x79, 0xfb, 0x44, 0x05, 0xf0, 0x6b, 0xe9, 0xdd, 0x4b, + 0xa8, 0x7c, 0x56, 0x4c, 0xe0, 0x94, 0x67, 0xc8, 0x0e, 0x9e, 0xf9, 0x1b, 0x88, 0xf8, 0x39, 0x92, + 0x87, 0x33, 0x22, 0xe0, 0x0e, 0x93, 0x8b, 0xd2, 0xbb, 0x65, 0x42, 0xb5, 0x34, 0x7e, 0x58, 0x11, + 0x9e, 0x73, 0x0f, 0x75, 0x76, 0xaf, 0xcd, 0x3d, 0x5c, 0x72, 0x0f, 0xdd, 0x6f, 0x41, 0x2b, 0xa5, + 0xdf, 0x14, 0x34, 0xa6, 0xf2, 0x30, 0x32, 0xad, 0x18, 0xb7, 0xeb, 0x5a, 0xe5, 0xb3, 0x35, 0x54, + 0xb6, 0xc9, 0xf4, 0xbc, 0xa4, 0x7f, 0x23, 0xf4, 0xc3, 0xdb, 0x4b, 0x9b, 0xe9, 0xe9, 0xd8, 0xfd, + 0x0a, 0xdc, 0xfc, 0x9a, 0x53, 0x16, 0xa9, 0xe5, 0xa2, 0x27, 0xaa, 0x39, 0xea, 0x40, 0xb3, 0x79, + 0x60, 0xb5, 0x79, 0xe0, 0xe3, 0x6a, 0xf3, 0x04, 0x77, 0x6d, 0x3d, 0x6f, 0x1b, 0x89, 0xa5, 0xab, + 0x7f, 0xf4, 0x9b, 0xe7, 0x84, 0x2f, 0xa8, 0xb3, 0x02, 0x8f, 0xbe, 0xaf, 0x83, 0xfa, 0x58, 0x24, + 0xee, 0x0f, 0x0e, 0x70, 0x57, 0x2c, 0xa8, 0x07, 0xf0, 0xbf, 0x6e, 0x61, 0xb8, 0x72, 0xfe, 0x3a, + 0x8f, 0xae, 0x49, 0xb0, 0x6c, 0x98, 0x3f, 0x1c, 0xf0, 0xde, 0x5a, 0x83, 0xb9, 0xb7, 0x96, 0xf2, + 0x3a, 0xd4, 0x1d, 0xfc, 0xbf, 0x51, 0x57, 0xaf, 0x1b, 0xec, 0x1d, 0xcf, 0xbb, 0xce, 0xc9, 0xbc, + 0xeb, 0x9c, 0xce, 0xbb, 0xce, 0xd1, 0x59, 0xb7, 0x76, 0x72, 0xd6, 0xad, 0xfd, 0x72, 0xd6, 0xad, + 0x3d, 0x79, 0x70, 0xa1, 0xbd, 0x6c, 0x18, 0x83, 0x14, 0x4f, 0x44, 0x75, 0x40, 0xfb, 0xc3, 0x8f, + 0xd0, 0xc1, 0xd5, 0x9f, 0xb8, 0x49, 0x43, 0xb7, 0xcb, 0x07, 0x7f, 0x06, 0x00, 0x00, 0xff, 0xff, + 0x67, 0xfc, 0xcb, 0xc9, 0x90, 0x07, 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 { + CreateBalancerPool(ctx context.Context, in *MsgCreateBalancerPool, opts ...grpc.CallOption) (*MsgCreateBalancerPoolResponse, error) + MigrateSharesToFullRangeConcentratedPosition(ctx context.Context, in *MsgMigrateSharesToFullRangeConcentratedPosition, opts ...grpc.CallOption) (*MsgMigrateSharesToFullRangeConcentratedPositionResponse, error) +} + +type msgClient struct { + cc grpc1.ClientConn +} + +func NewMsgClient(cc grpc1.ClientConn) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) CreateBalancerPool(ctx context.Context, in *MsgCreateBalancerPool, opts ...grpc.CallOption) (*MsgCreateBalancerPoolResponse, error) { + out := new(MsgCreateBalancerPoolResponse) + err := c.cc.Invoke(ctx, "/osmosis.gamm.poolmodels.balancer.v1beta1.Msg/CreateBalancerPool", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) MigrateSharesToFullRangeConcentratedPosition(ctx context.Context, in *MsgMigrateSharesToFullRangeConcentratedPosition, opts ...grpc.CallOption) (*MsgMigrateSharesToFullRangeConcentratedPositionResponse, error) { + out := new(MsgMigrateSharesToFullRangeConcentratedPositionResponse) + err := c.cc.Invoke(ctx, "/osmosis.gamm.poolmodels.balancer.v1beta1.Msg/MigrateSharesToFullRangeConcentratedPosition", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +type MsgServer interface { + CreateBalancerPool(context.Context, *MsgCreateBalancerPool) (*MsgCreateBalancerPoolResponse, error) + MigrateSharesToFullRangeConcentratedPosition(context.Context, *MsgMigrateSharesToFullRangeConcentratedPosition) (*MsgMigrateSharesToFullRangeConcentratedPositionResponse, error) +} + +// UnimplementedMsgServer can be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (*UnimplementedMsgServer) CreateBalancerPool(ctx context.Context, req *MsgCreateBalancerPool) (*MsgCreateBalancerPoolResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateBalancerPool not implemented") +} +func (*UnimplementedMsgServer) MigrateSharesToFullRangeConcentratedPosition(ctx context.Context, req *MsgMigrateSharesToFullRangeConcentratedPosition) (*MsgMigrateSharesToFullRangeConcentratedPositionResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method MigrateSharesToFullRangeConcentratedPosition not implemented") +} + +func RegisterMsgServer(s grpc1.Server, srv MsgServer) { + s.RegisterService(&_Msg_serviceDesc, srv) +} + +func _Msg_CreateBalancerPool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgCreateBalancerPool) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).CreateBalancerPool(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.gamm.poolmodels.balancer.v1beta1.Msg/CreateBalancerPool", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).CreateBalancerPool(ctx, req.(*MsgCreateBalancerPool)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_MigrateSharesToFullRangeConcentratedPosition_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgMigrateSharesToFullRangeConcentratedPosition) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).MigrateSharesToFullRangeConcentratedPosition(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.gamm.poolmodels.balancer.v1beta1.Msg/MigrateSharesToFullRangeConcentratedPosition", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).MigrateSharesToFullRangeConcentratedPosition(ctx, req.(*MsgMigrateSharesToFullRangeConcentratedPosition)) + } + return interceptor(ctx, in, info, handler) +} + +var _Msg_serviceDesc = grpc.ServiceDesc{ + ServiceName: "osmosis.gamm.poolmodels.balancer.v1beta1.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateBalancerPool", + Handler: _Msg_CreateBalancerPool_Handler, + }, + { + MethodName: "MigrateSharesToFullRangeConcentratedPosition", + Handler: _Msg_MigrateSharesToFullRangeConcentratedPosition_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "osmosis/gamm/pool-models/balancer/tx/tx.proto", +} + +func (m *MsgCreateBalancerPool) 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 *MsgCreateBalancerPool) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgCreateBalancerPool) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.FuturePoolGovernor) > 0 { + i -= len(m.FuturePoolGovernor) + copy(dAtA[i:], m.FuturePoolGovernor) + i = encodeVarintTx(dAtA, i, uint64(len(m.FuturePoolGovernor))) + i-- + dAtA[i] = 0x22 + } + if len(m.PoolAssets) > 0 { + for iNdEx := len(m.PoolAssets) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.PoolAssets[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if m.PoolParams != nil { + { + size, err := m.PoolParams.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + 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] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgCreateBalancerPoolResponse) 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 *MsgCreateBalancerPoolResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgCreateBalancerPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.PoolID != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.PoolID)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *MsgMigrateSharesToFullRangeConcentratedPosition) 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 *MsgMigrateSharesToFullRangeConcentratedPosition) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgMigrateSharesToFullRangeConcentratedPosition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TokenOutMins) > 0 { + for iNdEx := len(m.TokenOutMins) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TokenOutMins[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + { + size, err := m.SharesToMigrate.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + 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] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) 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 *MsgMigrateSharesToFullRangeConcentratedPositionResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + n3, err3 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.JoinTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.JoinTime):]) + if err3 != nil { + return 0, err3 + } + i -= n3 + i = encodeVarintTx(dAtA, i, uint64(n3)) + i-- + dAtA[i] = 0x22 + { + size := m.LiquidityCreated.Size() + i -= size + if _, err := m.LiquidityCreated.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size := m.Amount1.Size() + i -= size + if _, err := m.Amount1.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size := m.Amount0.Size() + i -= size + if _, err := m.Amount0.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + 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 *MsgCreateBalancerPool) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.PoolParams != nil { + l = m.PoolParams.Size() + n += 1 + l + sovTx(uint64(l)) + } + if len(m.PoolAssets) > 0 { + for _, e := range m.PoolAssets { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } + l = len(m.FuturePoolGovernor) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgCreateBalancerPoolResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PoolID != 0 { + n += 1 + sovTx(uint64(m.PoolID)) + } + return n +} + +func (m *MsgMigrateSharesToFullRangeConcentratedPosition) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.SharesToMigrate.Size() + n += 1 + l + sovTx(uint64(l)) + if len(m.TokenOutMins) > 0 { + for _, e := range m.TokenOutMins { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } + return n +} + +func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Amount0.Size() + n += 1 + l + sovTx(uint64(l)) + l = m.Amount1.Size() + n += 1 + l + sovTx(uint64(l)) + l = m.LiquidityCreated.Size() + n += 1 + l + sovTx(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdTime(m.JoinTime) + n += 1 + l + sovTx(uint64(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 *MsgCreateBalancerPool) 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: MsgCreateBalancerPool: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgCreateBalancerPool: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + 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 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolParams", 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.PoolParams == nil { + m.PoolParams = &PoolParams{} + } + if err := m.PoolParams.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolAssets", 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 + } + m.PoolAssets = append(m.PoolAssets, PoolAsset{}) + if err := m.PoolAssets[len(m.PoolAssets)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FuturePoolGovernor", 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.FuturePoolGovernor = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgCreateBalancerPoolResponse) 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: MsgCreateBalancerPoolResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgCreateBalancerPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolID", wireType) + } + m.PoolID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgMigrateSharesToFullRangeConcentratedPosition) 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: MsgMigrateSharesToFullRangeConcentratedPosition: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgMigrateSharesToFullRangeConcentratedPosition: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + 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 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SharesToMigrate", 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.SharesToMigrate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenOutMins", 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 + } + m.TokenOutMins = append(m.TokenOutMins, types.Coin{}) + if err := m.TokenOutMins[len(m.TokenOutMins)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) 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: MsgMigrateSharesToFullRangeConcentratedPositionResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgMigrateSharesToFullRangeConcentratedPositionResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount0", 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 + } + if err := m.Amount0.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount1", 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 + } + if err := m.Amount1.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LiquidityCreated", 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 + } + if err := m.LiquidityCreated.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field JoinTime", 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 := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.JoinTime, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (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/tests/interchaintest/osmosistypes/gamm/types/codec.go b/tests/interchaintest/osmosistypes/gamm/types/codec.go index 4ae7aa23..2e3f0218 100644 --- a/tests/interchaintest/osmosistypes/gamm/types/codec.go +++ b/tests/interchaintest/osmosistypes/gamm/types/codec.go @@ -32,4 +32,4 @@ var ( // The actual codec used for serialization should be provided to x/staking and // defined at the application level. ModuleCdc = codec.NewAminoCodec(amino) -) +) \ No newline at end of file diff --git a/tests/interchaintest/osmosistypes/gamm/types/genesis.pb.go b/tests/interchaintest/osmosistypes/gamm/types/genesis.pb.go index 16628a67..dac734da 100644 --- a/tests/interchaintest/osmosistypes/gamm/types/genesis.pb.go +++ b/tests/interchaintest/osmosistypes/gamm/types/genesis.pb.go @@ -76,8 +76,9 @@ func (m *Params) GetPoolCreationFee() github_com_cosmos_cosmos_sdk_types.Coins { type GenesisState struct { Pools []*types1.Any `protobuf:"bytes,1,rep,name=pools,proto3" json:"pools,omitempty"` // will be renamed to next_pool_id in an upcoming version - NextPoolNumber uint64 `protobuf:"varint,2,opt,name=next_pool_number,json=nextPoolNumber,proto3" json:"next_pool_number,omitempty"` - Params Params `protobuf:"bytes,3,opt,name=params,proto3" json:"params"` + NextPoolNumber uint64 `protobuf:"varint,2,opt,name=next_pool_number,json=nextPoolNumber,proto3" json:"next_pool_number,omitempty"` + Params Params `protobuf:"bytes,3,opt,name=params,proto3" json:"params"` + MigrationRecords *MigrationRecords `protobuf:"bytes,4,opt,name=migration_records,json=migrationRecords,proto3" json:"migration_records,omitempty"` } func (m *GenesisState) Reset() { *m = GenesisState{} } @@ -134,9 +135,122 @@ func (m *GenesisState) GetParams() Params { return Params{} } +func (m *GenesisState) GetMigrationRecords() *MigrationRecords { + if m != nil { + return m.MigrationRecords + } + return nil +} + +// MigrationRecords contains all the links between balancer and concentrated +// pools +type MigrationRecords struct { + BalancerToConcentratedPoolLinks []BalancerToConcentratedPoolLink `protobuf:"bytes,1,rep,name=balancer_to_concentrated_pool_links,json=balancerToConcentratedPoolLinks,proto3" json:"balancer_to_concentrated_pool_links"` +} + +func (m *MigrationRecords) Reset() { *m = MigrationRecords{} } +func (m *MigrationRecords) String() string { return proto.CompactTextString(m) } +func (*MigrationRecords) ProtoMessage() {} +func (*MigrationRecords) Descriptor() ([]byte, []int) { + return fileDescriptor_5a324eb7f1dd793e, []int{2} +} +func (m *MigrationRecords) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MigrationRecords) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MigrationRecords.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 *MigrationRecords) XXX_Merge(src proto.Message) { + xxx_messageInfo_MigrationRecords.Merge(m, src) +} +func (m *MigrationRecords) XXX_Size() int { + return m.Size() +} +func (m *MigrationRecords) XXX_DiscardUnknown() { + xxx_messageInfo_MigrationRecords.DiscardUnknown(m) +} + +var xxx_messageInfo_MigrationRecords proto.InternalMessageInfo + +func (m *MigrationRecords) GetBalancerToConcentratedPoolLinks() []BalancerToConcentratedPoolLink { + if m != nil { + return m.BalancerToConcentratedPoolLinks + } + return nil +} + +// BalancerToConcentratedPoolLink defines a single link between a single +// balancer pool and a single concentrated liquidity pool. This link is used to +// allow a balancer pool to migrate to a single canonical full range +// concentrated liquidity pool position +// A balancer pool can be linked to a maximum of one cl pool, and a cl pool can +// be linked to a maximum of one balancer pool. +type BalancerToConcentratedPoolLink struct { + BalancerPoolId uint64 `protobuf:"varint,1,opt,name=balancer_pool_id,json=balancerPoolId,proto3" json:"balancer_pool_id,omitempty"` + ClPoolId uint64 `protobuf:"varint,2,opt,name=cl_pool_id,json=clPoolId,proto3" json:"cl_pool_id,omitempty"` +} + +func (m *BalancerToConcentratedPoolLink) Reset() { *m = BalancerToConcentratedPoolLink{} } +func (m *BalancerToConcentratedPoolLink) String() string { return proto.CompactTextString(m) } +func (*BalancerToConcentratedPoolLink) ProtoMessage() {} +func (*BalancerToConcentratedPoolLink) Descriptor() ([]byte, []int) { + return fileDescriptor_5a324eb7f1dd793e, []int{3} +} +func (m *BalancerToConcentratedPoolLink) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BalancerToConcentratedPoolLink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_BalancerToConcentratedPoolLink.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 *BalancerToConcentratedPoolLink) XXX_Merge(src proto.Message) { + xxx_messageInfo_BalancerToConcentratedPoolLink.Merge(m, src) +} +func (m *BalancerToConcentratedPoolLink) XXX_Size() int { + return m.Size() +} +func (m *BalancerToConcentratedPoolLink) XXX_DiscardUnknown() { + xxx_messageInfo_BalancerToConcentratedPoolLink.DiscardUnknown(m) +} + +var xxx_messageInfo_BalancerToConcentratedPoolLink proto.InternalMessageInfo + +func (m *BalancerToConcentratedPoolLink) GetBalancerPoolId() uint64 { + if m != nil { + return m.BalancerPoolId + } + return 0 +} + +func (m *BalancerToConcentratedPoolLink) GetClPoolId() uint64 { + if m != nil { + return m.ClPoolId + } + return 0 +} + func init() { proto.RegisterType((*Params)(nil), "osmosis.gamm.v1beta1.Params") proto.RegisterType((*GenesisState)(nil), "osmosis.gamm.v1beta1.GenesisState") + proto.RegisterType((*MigrationRecords)(nil), "osmosis.gamm.v1beta1.MigrationRecords") + proto.RegisterType((*BalancerToConcentratedPoolLink)(nil), "osmosis.gamm.v1beta1.BalancerToConcentratedPoolLink") } func init() { @@ -144,35 +258,70 @@ func init() { } var fileDescriptor_5a324eb7f1dd793e = []byte{ - // 401 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x92, 0xcf, 0xaa, 0xd3, 0x40, - 0x18, 0xc5, 0x33, 0xde, 0x7b, 0x0b, 0xe6, 0x8a, 0x7f, 0x42, 0x17, 0xb9, 0x17, 0x49, 0x4b, 0x56, - 0xd9, 0x74, 0xc6, 0x56, 0xdd, 0x74, 0x67, 0x0a, 0x8a, 0x22, 0x52, 0xe2, 0xce, 0x4d, 0x98, 0xc4, - 0x69, 0x0c, 0x26, 0xf3, 0x85, 0xcc, 0xb4, 0x34, 0x6f, 0x21, 0xb8, 0xf7, 0x01, 0x74, 0xeb, 0x43, - 0x14, 0x57, 0x5d, 0xba, 0xaa, 0xd2, 0xbe, 0x81, 0x4f, 0x20, 0xf3, 0x27, 0x22, 0xe8, 0x2a, 0xf9, - 0xe6, 0xfb, 0x9d, 0xc3, 0x99, 0x93, 0xb8, 0x21, 0x88, 0x1a, 0x44, 0x29, 0x48, 0x41, 0xeb, 0x9a, - 0x6c, 0xa6, 0x19, 0x93, 0x74, 0x4a, 0x0a, 0xc6, 0x99, 0x28, 0x05, 0x6e, 0x5a, 0x90, 0xe0, 0x0d, - 0x2d, 0x83, 0x15, 0x83, 0x2d, 0x73, 0x3d, 0x2c, 0xa0, 0x00, 0x0d, 0x10, 0xf5, 0x66, 0xd8, 0xeb, - 0xab, 0x02, 0xa0, 0xa8, 0x18, 0xd1, 0x53, 0xb6, 0x5e, 0x11, 0xca, 0xbb, 0x7e, 0x95, 0x6b, 0x9f, - 0xd4, 0x68, 0xcc, 0x60, 0x57, 0x81, 0x99, 0x48, 0x46, 0x05, 0xfb, 0x13, 0x22, 0x87, 0x92, 0x9b, - 0x7d, 0xf8, 0x09, 0xb9, 0x83, 0x25, 0x6d, 0x69, 0x2d, 0xbc, 0x8f, 0xc8, 0xbd, 0xd7, 0x00, 0x54, - 0x69, 0xde, 0x32, 0x2a, 0x4b, 0xe0, 0xe9, 0x8a, 0x31, 0x1f, 0x8d, 0xcf, 0xa2, 0xcb, 0xd9, 0x15, - 0xb6, 0xae, 0xca, 0xa7, 0x0f, 0x8a, 0x17, 0x50, 0xf2, 0xf8, 0xe5, 0xee, 0x30, 0x72, 0x7e, 0x1d, - 0x46, 0x7e, 0x47, 0xeb, 0x6a, 0x1e, 0xfe, 0xe3, 0x10, 0x7e, 0xfe, 0x31, 0x8a, 0x8a, 0x52, 0xbe, - 0x5b, 0x67, 0x38, 0x87, 0xda, 0xc6, 0xb3, 0x8f, 0x89, 0x78, 0xfb, 0x9e, 0xc8, 0xae, 0x61, 0x42, - 0x9b, 0x89, 0xe4, 0x8e, 0xd2, 0x2f, 0xac, 0xfc, 0x29, 0x63, 0xe1, 0x17, 0xe4, 0xde, 0x7a, 0x66, - 0x4a, 0x7b, 0x2d, 0xa9, 0x64, 0xde, 0x63, 0xf7, 0x42, 0x31, 0xc2, 0x26, 0x1b, 0x62, 0xd3, 0x0b, - 0xee, 0x7b, 0xc1, 0x4f, 0x78, 0x17, 0xdf, 0xfc, 0xf6, 0x75, 0x72, 0xb1, 0x04, 0xa8, 0x9e, 0x27, - 0x86, 0xf6, 0x22, 0xf7, 0x2e, 0x67, 0x5b, 0x99, 0xea, 0x7c, 0x7c, 0x5d, 0x67, 0xac, 0xf5, 0x6f, - 0x8c, 0x51, 0x74, 0x9e, 0xdc, 0x56, 0xe7, 0x8a, 0x7d, 0xa5, 0x4f, 0xbd, 0xb9, 0x3b, 0x68, 0x74, - 0x23, 0xfe, 0xd9, 0x18, 0x45, 0x97, 0xb3, 0xfb, 0xf8, 0x7f, 0x5f, 0x09, 0x9b, 0xd6, 0xe2, 0x73, - 0x75, 0xfd, 0xc4, 0x2a, 0xe2, 0x17, 0xbb, 0x63, 0x80, 0xf6, 0xc7, 0x00, 0xfd, 0x3c, 0x06, 0xe8, - 0xc3, 0x29, 0x70, 0xf6, 0xa7, 0xc0, 0xf9, 0x7e, 0x0a, 0x9c, 0x37, 0x0f, 0xfe, 0xaa, 0xc0, 0xfa, - 0x4d, 0x2a, 0x9a, 0x89, 0x7e, 0x20, 0x9b, 0xe9, 0x23, 0xb2, 0x35, 0x3f, 0x8b, 0x2e, 0x24, 0x1b, - 0xe8, 0x1b, 0x3d, 0xfc, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x03, 0x26, 0x4b, 0x36, 0x49, 0x02, 0x00, - 0x00, + // 536 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x93, 0x3f, 0x6f, 0xd3, 0x4e, + 0x18, 0xc7, 0x73, 0x6d, 0x1a, 0xfd, 0x7e, 0x57, 0x04, 0xa9, 0x95, 0xc1, 0xad, 0x2a, 0x27, 0x32, + 0x12, 0xca, 0x92, 0x33, 0x29, 0x74, 0xc9, 0x46, 0x22, 0x81, 0x40, 0x05, 0x55, 0x2e, 0x13, 0x8b, + 0x75, 0x76, 0xae, 0xc6, 0x8a, 0x7d, 0x4f, 0xe4, 0xbb, 0x54, 0xcd, 0xc6, 0xc8, 0x88, 0xc4, 0x0c, + 0x62, 0x66, 0xe6, 0x45, 0x54, 0x4c, 0x1d, 0x99, 0x0a, 0x4a, 0x16, 0x66, 0x5e, 0x01, 0xba, 0x3f, + 0x8e, 0xaa, 0x12, 0x75, 0xb2, 0x9f, 0xe7, 0xf9, 0x3c, 0x5f, 0x3f, 0xcf, 0xf7, 0xce, 0xd8, 0x07, + 0x51, 0x80, 0xc8, 0x44, 0x90, 0xd2, 0xa2, 0x08, 0xce, 0xfa, 0x31, 0x93, 0xb4, 0x1f, 0xa4, 0x8c, + 0x33, 0x91, 0x09, 0x32, 0x2d, 0x41, 0x82, 0xd3, 0xb2, 0x0c, 0x51, 0x0c, 0xb1, 0xcc, 0x5e, 0x2b, + 0x85, 0x14, 0x34, 0x10, 0xa8, 0x37, 0xc3, 0xee, 0xed, 0xa6, 0x00, 0x69, 0xce, 0x02, 0x1d, 0xc5, + 0xb3, 0xd3, 0x80, 0xf2, 0x79, 0x55, 0x4a, 0xb4, 0x4e, 0x64, 0x7a, 0x4c, 0x60, 0x4b, 0x9e, 0x89, + 0x82, 0x98, 0x0a, 0xb6, 0x1a, 0x22, 0x81, 0x8c, 0x9b, 0xba, 0xff, 0x19, 0xe1, 0xc6, 0x31, 0x2d, + 0x69, 0x21, 0x9c, 0x8f, 0x08, 0xef, 0x4c, 0x01, 0xf2, 0x28, 0x29, 0x19, 0x95, 0x19, 0xf0, 0xe8, + 0x94, 0x31, 0x17, 0x75, 0x36, 0xbb, 0xdb, 0x07, 0xbb, 0xc4, 0xaa, 0x2a, 0x9d, 0x6a, 0x50, 0x32, + 0x82, 0x8c, 0x0f, 0x8f, 0x2e, 0xae, 0xda, 0xb5, 0x3f, 0x57, 0x6d, 0x77, 0x4e, 0x8b, 0x7c, 0xe0, + 0xff, 0xa3, 0xe0, 0x7f, 0xfd, 0xd9, 0xee, 0xa6, 0x99, 0x7c, 0x3b, 0x8b, 0x49, 0x02, 0x85, 0x1d, + 0xcf, 0x3e, 0x7a, 0x62, 0x3c, 0x09, 0xe4, 0x7c, 0xca, 0x84, 0x16, 0x13, 0xe1, 0x3d, 0xd5, 0x3f, + 0xb2, 0xed, 0x4f, 0x19, 0xf3, 0xdf, 0x6d, 0xe0, 0x3b, 0xcf, 0x8c, 0x69, 0x27, 0x92, 0x4a, 0xe6, + 0x1c, 0xe2, 0x2d, 0xc5, 0x08, 0x3b, 0x59, 0x8b, 0x18, 0x5f, 0x48, 0xe5, 0x0b, 0x79, 0xc2, 0xe7, + 0xc3, 0xff, 0xbf, 0x7f, 0xeb, 0x6d, 0x1d, 0x03, 0xe4, 0xcf, 0x43, 0x43, 0x3b, 0x5d, 0xdc, 0xe4, + 0xec, 0x5c, 0x46, 0x7a, 0x3e, 0x3e, 0x2b, 0x62, 0x56, 0xba, 0x1b, 0x1d, 0xd4, 0xad, 0x87, 0x77, + 0x55, 0x5e, 0xb1, 0xaf, 0x74, 0xd6, 0x19, 0xe0, 0xc6, 0x54, 0x3b, 0xe2, 0x6e, 0x76, 0x50, 0x77, + 0xfb, 0x60, 0x9f, 0xac, 0x3b, 0x25, 0x62, 0x5c, 0x1b, 0xd6, 0xd5, 0xfa, 0xa1, 0xed, 0x70, 0x4e, + 0xf0, 0x4e, 0x91, 0xa5, 0xa5, 0x59, 0xbe, 0x64, 0x09, 0x94, 0x63, 0xe1, 0xd6, 0xb5, 0xcc, 0x83, + 0xf5, 0x32, 0x2f, 0x2b, 0x3c, 0x34, 0x74, 0xd8, 0x2c, 0x6e, 0x64, 0xfc, 0x4f, 0x08, 0x37, 0x6f, + 0x62, 0xce, 0x7b, 0x84, 0xef, 0xc7, 0x34, 0xa7, 0x3c, 0x61, 0x65, 0x24, 0x21, 0x4a, 0x80, 0x27, + 0x8c, 0xcb, 0x92, 0x4a, 0x36, 0x36, 0x4b, 0xe6, 0x19, 0x9f, 0x54, 0x2e, 0x3d, 0x5e, 0xff, 0xf1, + 0xa1, 0x15, 0x78, 0x0d, 0xa3, 0x6b, 0xed, 0xca, 0x8b, 0xa3, 0x8c, 0x4f, 0xec, 0x6e, 0xed, 0xf8, + 0x56, 0x4a, 0xf8, 0x1c, 0x7b, 0xb7, 0x0b, 0x29, 0xf3, 0x57, 0xb3, 0xea, 0xd9, 0xb2, 0xb1, 0x8b, + 0x8c, 0xf9, 0x55, 0x5e, 0x1f, 0xd6, 0xd8, 0xd9, 0xc7, 0x38, 0xc9, 0x57, 0x8c, 0x39, 0xa0, 0xff, + 0x92, 0xdc, 0x54, 0x07, 0xf5, 0xdf, 0x5f, 0xda, 0x68, 0xf8, 0xe2, 0x62, 0xe1, 0xa1, 0xcb, 0x85, + 0x87, 0x7e, 0x2d, 0x3c, 0xf4, 0x61, 0xe9, 0xd5, 0x2e, 0x97, 0x5e, 0xed, 0xc7, 0xd2, 0xab, 0xbd, + 0x79, 0x78, 0xed, 0x9e, 0xd9, 0x85, 0x7b, 0x39, 0x8d, 0x45, 0x15, 0x04, 0x67, 0xfd, 0xc3, 0xe0, + 0xdc, 0xfc, 0x91, 0xfa, 0xd6, 0xc5, 0x0d, 0x7d, 0x6d, 0x1e, 0xfd, 0x0d, 0x00, 0x00, 0xff, 0xff, + 0xe6, 0xf6, 0xdd, 0x82, 0xae, 0x03, 0x00, 0x00, } +func (this *BalancerToConcentratedPoolLink) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*BalancerToConcentratedPoolLink) + if !ok { + that2, ok := that.(BalancerToConcentratedPoolLink) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.BalancerPoolId != that1.BalancerPoolId { + return false + } + if this.ClPoolId != that1.ClPoolId { + return false + } + return true +} func (m *Params) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -230,6 +379,18 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.MigrationRecords != nil { + { + size, err := m.MigrationRecords.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } { size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -262,6 +423,76 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *MigrationRecords) 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 *MigrationRecords) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MigrationRecords) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.BalancerToConcentratedPoolLinks) > 0 { + for iNdEx := len(m.BalancerToConcentratedPoolLinks) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.BalancerToConcentratedPoolLinks[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *BalancerToConcentratedPoolLink) 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 *BalancerToConcentratedPoolLink) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BalancerToConcentratedPoolLink) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ClPoolId != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.ClPoolId)) + i-- + dAtA[i] = 0x10 + } + if m.BalancerPoolId != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.BalancerPoolId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { offset -= sovGenesis(v) base := offset @@ -305,6 +536,40 @@ func (m *GenesisState) Size() (n int) { } l = m.Params.Size() n += 1 + l + sovGenesis(uint64(l)) + if m.MigrationRecords != nil { + l = m.MigrationRecords.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + return n +} + +func (m *MigrationRecords) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.BalancerToConcentratedPoolLinks) > 0 { + for _, e := range m.BalancerToConcentratedPoolLinks { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + return n +} + +func (m *BalancerToConcentratedPoolLink) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.BalancerPoolId != 0 { + n += 1 + sovGenesis(uint64(m.BalancerPoolId)) + } + if m.ClPoolId != 0 { + n += 1 + sovGenesis(uint64(m.ClPoolId)) + } return n } @@ -513,6 +778,214 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MigrationRecords", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MigrationRecords == nil { + m.MigrationRecords = &MigrationRecords{} + } + if err := m.MigrationRecords.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MigrationRecords) 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 ErrIntOverflowGenesis + } + 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: MigrationRecords: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MigrationRecords: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BalancerToConcentratedPoolLinks", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BalancerToConcentratedPoolLinks = append(m.BalancerToConcentratedPoolLinks, BalancerToConcentratedPoolLink{}) + if err := m.BalancerToConcentratedPoolLinks[len(m.BalancerToConcentratedPoolLinks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *BalancerToConcentratedPoolLink) 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 ErrIntOverflowGenesis + } + 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: BalancerToConcentratedPoolLink: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BalancerToConcentratedPoolLink: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field BalancerPoolId", wireType) + } + m.BalancerPoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.BalancerPoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ClPoolId", wireType) + } + m.ClPoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ClPoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipGenesis(dAtA[iNdEx:]) diff --git a/tests/interchaintest/osmosistypes/gamm/types/msgs.go b/tests/interchaintest/osmosistypes/gamm/types/msgs.go index ef629682..c394d2f3 100644 --- a/tests/interchaintest/osmosistypes/gamm/types/msgs.go +++ b/tests/interchaintest/osmosistypes/gamm/types/msgs.go @@ -203,4 +203,4 @@ func (msg MsgExitSwapShareAmountIn) GetSigners() []sdk.AccAddress { panic(err) } return []sdk.AccAddress{sender} -} +} \ No newline at end of file diff --git a/tests/interchaintest/osmosistypes/gamm/types/query.pb.go b/tests/interchaintest/osmosistypes/gamm/types/query.pb.go new file mode 100644 index 00000000..5d5331d2 --- /dev/null +++ b/tests/interchaintest/osmosistypes/gamm/types/query.pb.go @@ -0,0 +1,7126 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: osmosis/gamm/v1beta1/query.proto + +package types + +import ( + context "context" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + types "github.com/cosmos/cosmos-sdk/codec/types" + github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + types1 "github.com/cosmos/cosmos-sdk/types" + query "github.com/cosmos/cosmos-sdk/types/query" + _ "github.com/gogo/protobuf/gogoproto" + grpc1 "github.com/gogo/protobuf/grpc" + proto "github.com/gogo/protobuf/proto" + types2 "github.com/notional-labs/fee-abstraction/tests/interchaintest/osmosistypes/poolmanager/types" + _ "google.golang.org/genproto/googleapis/api/annotations" + 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 + +// =============================== Pool +// Deprecated: please use the alternative in x/poolmanager +// +// Deprecated: Do not use. +type QueryPoolRequest struct { + PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` +} + +func (m *QueryPoolRequest) Reset() { *m = QueryPoolRequest{} } +func (m *QueryPoolRequest) String() string { return proto.CompactTextString(m) } +func (*QueryPoolRequest) ProtoMessage() {} +func (*QueryPoolRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{0} +} +func (m *QueryPoolRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryPoolRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryPoolRequest.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 *QueryPoolRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryPoolRequest.Merge(m, src) +} +func (m *QueryPoolRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryPoolRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryPoolRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryPoolRequest proto.InternalMessageInfo + +func (m *QueryPoolRequest) GetPoolId() uint64 { + if m != nil { + return m.PoolId + } + return 0 +} + +// Deprecated: please use the alternative in x/poolmanager +// +// Deprecated: Do not use. +type QueryPoolResponse struct { + Pool *types.Any `protobuf:"bytes,1,opt,name=pool,proto3" json:"pool,omitempty"` +} + +func (m *QueryPoolResponse) Reset() { *m = QueryPoolResponse{} } +func (m *QueryPoolResponse) String() string { return proto.CompactTextString(m) } +func (*QueryPoolResponse) ProtoMessage() {} +func (*QueryPoolResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{1} +} +func (m *QueryPoolResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryPoolResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryPoolResponse.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 *QueryPoolResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryPoolResponse.Merge(m, src) +} +func (m *QueryPoolResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryPoolResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryPoolResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryPoolResponse proto.InternalMessageInfo + +func (m *QueryPoolResponse) GetPool() *types.Any { + if m != nil { + return m.Pool + } + return nil +} + +// =============================== Pools +type QueryPoolsRequest struct { + // pagination defines an optional pagination for the request. + Pagination *query.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryPoolsRequest) Reset() { *m = QueryPoolsRequest{} } +func (m *QueryPoolsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryPoolsRequest) ProtoMessage() {} +func (*QueryPoolsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{2} +} +func (m *QueryPoolsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryPoolsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryPoolsRequest.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 *QueryPoolsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryPoolsRequest.Merge(m, src) +} +func (m *QueryPoolsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryPoolsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryPoolsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryPoolsRequest proto.InternalMessageInfo + +func (m *QueryPoolsRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +type QueryPoolsResponse struct { + Pools []*types.Any `protobuf:"bytes,1,rep,name=pools,proto3" json:"pools,omitempty"` + // pagination defines the pagination in the response. + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryPoolsResponse) Reset() { *m = QueryPoolsResponse{} } +func (m *QueryPoolsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryPoolsResponse) ProtoMessage() {} +func (*QueryPoolsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{3} +} +func (m *QueryPoolsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryPoolsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryPoolsResponse.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 *QueryPoolsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryPoolsResponse.Merge(m, src) +} +func (m *QueryPoolsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryPoolsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryPoolsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryPoolsResponse proto.InternalMessageInfo + +func (m *QueryPoolsResponse) GetPools() []*types.Any { + if m != nil { + return m.Pools + } + return nil +} + +func (m *QueryPoolsResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil +} + +// =============================== NumPools +// +// Deprecated: Do not use. +type QueryNumPoolsRequest struct { +} + +func (m *QueryNumPoolsRequest) Reset() { *m = QueryNumPoolsRequest{} } +func (m *QueryNumPoolsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryNumPoolsRequest) ProtoMessage() {} +func (*QueryNumPoolsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{4} +} +func (m *QueryNumPoolsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryNumPoolsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryNumPoolsRequest.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 *QueryNumPoolsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryNumPoolsRequest.Merge(m, src) +} +func (m *QueryNumPoolsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryNumPoolsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryNumPoolsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryNumPoolsRequest proto.InternalMessageInfo + +// Deprecated: Do not use. +type QueryNumPoolsResponse struct { + NumPools uint64 `protobuf:"varint,1,opt,name=num_pools,json=numPools,proto3" json:"num_pools,omitempty" yaml:"num_pools"` +} + +func (m *QueryNumPoolsResponse) Reset() { *m = QueryNumPoolsResponse{} } +func (m *QueryNumPoolsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryNumPoolsResponse) ProtoMessage() {} +func (*QueryNumPoolsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{5} +} +func (m *QueryNumPoolsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryNumPoolsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryNumPoolsResponse.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 *QueryNumPoolsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryNumPoolsResponse.Merge(m, src) +} +func (m *QueryNumPoolsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryNumPoolsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryNumPoolsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryNumPoolsResponse proto.InternalMessageInfo + +func (m *QueryNumPoolsResponse) GetNumPools() uint64 { + if m != nil { + return m.NumPools + } + return 0 +} + +// =============================== PoolType +type QueryPoolTypeRequest struct { + PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` +} + +func (m *QueryPoolTypeRequest) Reset() { *m = QueryPoolTypeRequest{} } +func (m *QueryPoolTypeRequest) String() string { return proto.CompactTextString(m) } +func (*QueryPoolTypeRequest) ProtoMessage() {} +func (*QueryPoolTypeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{6} +} +func (m *QueryPoolTypeRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryPoolTypeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryPoolTypeRequest.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 *QueryPoolTypeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryPoolTypeRequest.Merge(m, src) +} +func (m *QueryPoolTypeRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryPoolTypeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryPoolTypeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryPoolTypeRequest proto.InternalMessageInfo + +func (m *QueryPoolTypeRequest) GetPoolId() uint64 { + if m != nil { + return m.PoolId + } + return 0 +} + +type QueryPoolTypeResponse struct { + PoolType string `protobuf:"bytes,1,opt,name=pool_type,json=poolType,proto3" json:"pool_type,omitempty" yaml:"pool_type"` +} + +func (m *QueryPoolTypeResponse) Reset() { *m = QueryPoolTypeResponse{} } +func (m *QueryPoolTypeResponse) String() string { return proto.CompactTextString(m) } +func (*QueryPoolTypeResponse) ProtoMessage() {} +func (*QueryPoolTypeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{7} +} +func (m *QueryPoolTypeResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryPoolTypeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryPoolTypeResponse.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 *QueryPoolTypeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryPoolTypeResponse.Merge(m, src) +} +func (m *QueryPoolTypeResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryPoolTypeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryPoolTypeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryPoolTypeResponse proto.InternalMessageInfo + +func (m *QueryPoolTypeResponse) GetPoolType() string { + if m != nil { + return m.PoolType + } + return "" +} + +// =============================== CalcJoinPoolShares +type QueryCalcJoinPoolSharesRequest struct { + PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` + TokensIn github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,2,rep,name=tokens_in,json=tokensIn,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"tokens_in"` +} + +func (m *QueryCalcJoinPoolSharesRequest) Reset() { *m = QueryCalcJoinPoolSharesRequest{} } +func (m *QueryCalcJoinPoolSharesRequest) String() string { return proto.CompactTextString(m) } +func (*QueryCalcJoinPoolSharesRequest) ProtoMessage() {} +func (*QueryCalcJoinPoolSharesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{8} +} +func (m *QueryCalcJoinPoolSharesRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryCalcJoinPoolSharesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryCalcJoinPoolSharesRequest.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 *QueryCalcJoinPoolSharesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryCalcJoinPoolSharesRequest.Merge(m, src) +} +func (m *QueryCalcJoinPoolSharesRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryCalcJoinPoolSharesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryCalcJoinPoolSharesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryCalcJoinPoolSharesRequest proto.InternalMessageInfo + +func (m *QueryCalcJoinPoolSharesRequest) GetPoolId() uint64 { + if m != nil { + return m.PoolId + } + return 0 +} + +func (m *QueryCalcJoinPoolSharesRequest) GetTokensIn() github_com_cosmos_cosmos_sdk_types.Coins { + if m != nil { + return m.TokensIn + } + return nil +} + +type QueryCalcJoinPoolSharesResponse struct { + ShareOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=share_out_amount,json=shareOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_out_amount" yaml:"share_out_amount"` + TokensOut github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,2,rep,name=tokens_out,json=tokensOut,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"tokens_out"` +} + +func (m *QueryCalcJoinPoolSharesResponse) Reset() { *m = QueryCalcJoinPoolSharesResponse{} } +func (m *QueryCalcJoinPoolSharesResponse) String() string { return proto.CompactTextString(m) } +func (*QueryCalcJoinPoolSharesResponse) ProtoMessage() {} +func (*QueryCalcJoinPoolSharesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{9} +} +func (m *QueryCalcJoinPoolSharesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryCalcJoinPoolSharesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryCalcJoinPoolSharesResponse.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 *QueryCalcJoinPoolSharesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryCalcJoinPoolSharesResponse.Merge(m, src) +} +func (m *QueryCalcJoinPoolSharesResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryCalcJoinPoolSharesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryCalcJoinPoolSharesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryCalcJoinPoolSharesResponse proto.InternalMessageInfo + +func (m *QueryCalcJoinPoolSharesResponse) GetTokensOut() github_com_cosmos_cosmos_sdk_types.Coins { + if m != nil { + return m.TokensOut + } + return nil +} + +// =============================== CalcExitPoolCoinsFromShares +type QueryCalcExitPoolCoinsFromSharesRequest struct { + PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` + ShareInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,2,opt,name=share_in_amount,json=shareInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_in_amount"` +} + +func (m *QueryCalcExitPoolCoinsFromSharesRequest) Reset() { + *m = QueryCalcExitPoolCoinsFromSharesRequest{} +} +func (m *QueryCalcExitPoolCoinsFromSharesRequest) String() string { return proto.CompactTextString(m) } +func (*QueryCalcExitPoolCoinsFromSharesRequest) ProtoMessage() {} +func (*QueryCalcExitPoolCoinsFromSharesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{10} +} +func (m *QueryCalcExitPoolCoinsFromSharesRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryCalcExitPoolCoinsFromSharesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryCalcExitPoolCoinsFromSharesRequest.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 *QueryCalcExitPoolCoinsFromSharesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryCalcExitPoolCoinsFromSharesRequest.Merge(m, src) +} +func (m *QueryCalcExitPoolCoinsFromSharesRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryCalcExitPoolCoinsFromSharesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryCalcExitPoolCoinsFromSharesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryCalcExitPoolCoinsFromSharesRequest proto.InternalMessageInfo + +func (m *QueryCalcExitPoolCoinsFromSharesRequest) GetPoolId() uint64 { + if m != nil { + return m.PoolId + } + return 0 +} + +type QueryCalcExitPoolCoinsFromSharesResponse struct { + TokensOut github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=tokens_out,json=tokensOut,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"tokens_out"` +} + +func (m *QueryCalcExitPoolCoinsFromSharesResponse) Reset() { + *m = QueryCalcExitPoolCoinsFromSharesResponse{} +} +func (m *QueryCalcExitPoolCoinsFromSharesResponse) String() string { return proto.CompactTextString(m) } +func (*QueryCalcExitPoolCoinsFromSharesResponse) ProtoMessage() {} +func (*QueryCalcExitPoolCoinsFromSharesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{11} +} +func (m *QueryCalcExitPoolCoinsFromSharesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryCalcExitPoolCoinsFromSharesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryCalcExitPoolCoinsFromSharesResponse.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 *QueryCalcExitPoolCoinsFromSharesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryCalcExitPoolCoinsFromSharesResponse.Merge(m, src) +} +func (m *QueryCalcExitPoolCoinsFromSharesResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryCalcExitPoolCoinsFromSharesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryCalcExitPoolCoinsFromSharesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryCalcExitPoolCoinsFromSharesResponse proto.InternalMessageInfo + +func (m *QueryCalcExitPoolCoinsFromSharesResponse) GetTokensOut() github_com_cosmos_cosmos_sdk_types.Coins { + if m != nil { + return m.TokensOut + } + return nil +} + +// =============================== PoolParams +type QueryPoolParamsRequest struct { + PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` +} + +func (m *QueryPoolParamsRequest) Reset() { *m = QueryPoolParamsRequest{} } +func (m *QueryPoolParamsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryPoolParamsRequest) ProtoMessage() {} +func (*QueryPoolParamsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{12} +} +func (m *QueryPoolParamsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryPoolParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryPoolParamsRequest.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 *QueryPoolParamsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryPoolParamsRequest.Merge(m, src) +} +func (m *QueryPoolParamsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryPoolParamsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryPoolParamsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryPoolParamsRequest proto.InternalMessageInfo + +func (m *QueryPoolParamsRequest) GetPoolId() uint64 { + if m != nil { + return m.PoolId + } + return 0 +} + +type QueryPoolParamsResponse struct { + Params *types.Any `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` +} + +func (m *QueryPoolParamsResponse) Reset() { *m = QueryPoolParamsResponse{} } +func (m *QueryPoolParamsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryPoolParamsResponse) ProtoMessage() {} +func (*QueryPoolParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{13} +} +func (m *QueryPoolParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryPoolParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryPoolParamsResponse.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 *QueryPoolParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryPoolParamsResponse.Merge(m, src) +} +func (m *QueryPoolParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryPoolParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryPoolParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryPoolParamsResponse proto.InternalMessageInfo + +func (m *QueryPoolParamsResponse) GetParams() *types.Any { + if m != nil { + return m.Params + } + return nil +} + +// =============================== PoolLiquidity +// Deprecated: please use the alternative in x/poolmanager +// +// Deprecated: Do not use. +type QueryTotalPoolLiquidityRequest struct { + PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` +} + +func (m *QueryTotalPoolLiquidityRequest) Reset() { *m = QueryTotalPoolLiquidityRequest{} } +func (m *QueryTotalPoolLiquidityRequest) String() string { return proto.CompactTextString(m) } +func (*QueryTotalPoolLiquidityRequest) ProtoMessage() {} +func (*QueryTotalPoolLiquidityRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{14} +} +func (m *QueryTotalPoolLiquidityRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTotalPoolLiquidityRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTotalPoolLiquidityRequest.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 *QueryTotalPoolLiquidityRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTotalPoolLiquidityRequest.Merge(m, src) +} +func (m *QueryTotalPoolLiquidityRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryTotalPoolLiquidityRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTotalPoolLiquidityRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryTotalPoolLiquidityRequest proto.InternalMessageInfo + +func (m *QueryTotalPoolLiquidityRequest) GetPoolId() uint64 { + if m != nil { + return m.PoolId + } + return 0 +} + +// Deprecated: please use the alternative in x/poolmanager +// +// Deprecated: Do not use. +type QueryTotalPoolLiquidityResponse struct { + Liquidity github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=liquidity,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"liquidity" yaml:"liquidity"` +} + +func (m *QueryTotalPoolLiquidityResponse) Reset() { *m = QueryTotalPoolLiquidityResponse{} } +func (m *QueryTotalPoolLiquidityResponse) String() string { return proto.CompactTextString(m) } +func (*QueryTotalPoolLiquidityResponse) ProtoMessage() {} +func (*QueryTotalPoolLiquidityResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{15} +} +func (m *QueryTotalPoolLiquidityResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTotalPoolLiquidityResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTotalPoolLiquidityResponse.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 *QueryTotalPoolLiquidityResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTotalPoolLiquidityResponse.Merge(m, src) +} +func (m *QueryTotalPoolLiquidityResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryTotalPoolLiquidityResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTotalPoolLiquidityResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryTotalPoolLiquidityResponse proto.InternalMessageInfo + +func (m *QueryTotalPoolLiquidityResponse) GetLiquidity() github_com_cosmos_cosmos_sdk_types.Coins { + if m != nil { + return m.Liquidity + } + return nil +} + +// =============================== TotalShares +type QueryTotalSharesRequest struct { + PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` +} + +func (m *QueryTotalSharesRequest) Reset() { *m = QueryTotalSharesRequest{} } +func (m *QueryTotalSharesRequest) String() string { return proto.CompactTextString(m) } +func (*QueryTotalSharesRequest) ProtoMessage() {} +func (*QueryTotalSharesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{16} +} +func (m *QueryTotalSharesRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTotalSharesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTotalSharesRequest.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 *QueryTotalSharesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTotalSharesRequest.Merge(m, src) +} +func (m *QueryTotalSharesRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryTotalSharesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTotalSharesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryTotalSharesRequest proto.InternalMessageInfo + +func (m *QueryTotalSharesRequest) GetPoolId() uint64 { + if m != nil { + return m.PoolId + } + return 0 +} + +type QueryTotalSharesResponse struct { + TotalShares types1.Coin `protobuf:"bytes,1,opt,name=total_shares,json=totalShares,proto3" json:"total_shares" yaml:"total_shares"` +} + +func (m *QueryTotalSharesResponse) Reset() { *m = QueryTotalSharesResponse{} } +func (m *QueryTotalSharesResponse) String() string { return proto.CompactTextString(m) } +func (*QueryTotalSharesResponse) ProtoMessage() {} +func (*QueryTotalSharesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{17} +} +func (m *QueryTotalSharesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTotalSharesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTotalSharesResponse.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 *QueryTotalSharesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTotalSharesResponse.Merge(m, src) +} +func (m *QueryTotalSharesResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryTotalSharesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTotalSharesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryTotalSharesResponse proto.InternalMessageInfo + +func (m *QueryTotalSharesResponse) GetTotalShares() types1.Coin { + if m != nil { + return m.TotalShares + } + return types1.Coin{} +} + +// =============================== CalcJoinPoolNoSwapShares +type QueryCalcJoinPoolNoSwapSharesRequest struct { + PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` + TokensIn github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,2,rep,name=tokens_in,json=tokensIn,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"tokens_in"` +} + +func (m *QueryCalcJoinPoolNoSwapSharesRequest) Reset() { *m = QueryCalcJoinPoolNoSwapSharesRequest{} } +func (m *QueryCalcJoinPoolNoSwapSharesRequest) String() string { return proto.CompactTextString(m) } +func (*QueryCalcJoinPoolNoSwapSharesRequest) ProtoMessage() {} +func (*QueryCalcJoinPoolNoSwapSharesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{18} +} +func (m *QueryCalcJoinPoolNoSwapSharesRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryCalcJoinPoolNoSwapSharesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryCalcJoinPoolNoSwapSharesRequest.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 *QueryCalcJoinPoolNoSwapSharesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryCalcJoinPoolNoSwapSharesRequest.Merge(m, src) +} +func (m *QueryCalcJoinPoolNoSwapSharesRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryCalcJoinPoolNoSwapSharesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryCalcJoinPoolNoSwapSharesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryCalcJoinPoolNoSwapSharesRequest proto.InternalMessageInfo + +func (m *QueryCalcJoinPoolNoSwapSharesRequest) GetPoolId() uint64 { + if m != nil { + return m.PoolId + } + return 0 +} + +func (m *QueryCalcJoinPoolNoSwapSharesRequest) GetTokensIn() github_com_cosmos_cosmos_sdk_types.Coins { + if m != nil { + return m.TokensIn + } + return nil +} + +type QueryCalcJoinPoolNoSwapSharesResponse struct { + TokensOut github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=tokens_out,json=tokensOut,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"tokens_out" yaml:"tokens_out"` + SharesOut github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,2,opt,name=shares_out,json=sharesOut,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"shares_out"` +} + +func (m *QueryCalcJoinPoolNoSwapSharesResponse) Reset() { *m = QueryCalcJoinPoolNoSwapSharesResponse{} } +func (m *QueryCalcJoinPoolNoSwapSharesResponse) String() string { return proto.CompactTextString(m) } +func (*QueryCalcJoinPoolNoSwapSharesResponse) ProtoMessage() {} +func (*QueryCalcJoinPoolNoSwapSharesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{19} +} +func (m *QueryCalcJoinPoolNoSwapSharesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryCalcJoinPoolNoSwapSharesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryCalcJoinPoolNoSwapSharesResponse.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 *QueryCalcJoinPoolNoSwapSharesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryCalcJoinPoolNoSwapSharesResponse.Merge(m, src) +} +func (m *QueryCalcJoinPoolNoSwapSharesResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryCalcJoinPoolNoSwapSharesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryCalcJoinPoolNoSwapSharesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryCalcJoinPoolNoSwapSharesResponse proto.InternalMessageInfo + +func (m *QueryCalcJoinPoolNoSwapSharesResponse) GetTokensOut() github_com_cosmos_cosmos_sdk_types.Coins { + if m != nil { + return m.TokensOut + } + return nil +} + +// QuerySpotPriceRequest defines the gRPC request structure for a SpotPrice +// query. +// +// Deprecated: Do not use. +type QuerySpotPriceRequest struct { + PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` + BaseAssetDenom string `protobuf:"bytes,2,opt,name=base_asset_denom,json=baseAssetDenom,proto3" json:"base_asset_denom,omitempty" yaml:"base_asset_denom"` + QuoteAssetDenom string `protobuf:"bytes,3,opt,name=quote_asset_denom,json=quoteAssetDenom,proto3" json:"quote_asset_denom,omitempty" yaml:"quote_asset_denom"` +} + +func (m *QuerySpotPriceRequest) Reset() { *m = QuerySpotPriceRequest{} } +func (m *QuerySpotPriceRequest) String() string { return proto.CompactTextString(m) } +func (*QuerySpotPriceRequest) ProtoMessage() {} +func (*QuerySpotPriceRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{20} +} +func (m *QuerySpotPriceRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuerySpotPriceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySpotPriceRequest.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 *QuerySpotPriceRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySpotPriceRequest.Merge(m, src) +} +func (m *QuerySpotPriceRequest) XXX_Size() int { + return m.Size() +} +func (m *QuerySpotPriceRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySpotPriceRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QuerySpotPriceRequest proto.InternalMessageInfo + +func (m *QuerySpotPriceRequest) GetPoolId() uint64 { + if m != nil { + return m.PoolId + } + return 0 +} + +func (m *QuerySpotPriceRequest) GetBaseAssetDenom() string { + if m != nil { + return m.BaseAssetDenom + } + return "" +} + +func (m *QuerySpotPriceRequest) GetQuoteAssetDenom() string { + if m != nil { + return m.QuoteAssetDenom + } + return "" +} + +type QueryPoolsWithFilterRequest struct { + // String of the coins in single string seperated by comma. Ex) + // 10uatom,100uosmo + MinLiquidity string `protobuf:"bytes,1,opt,name=min_liquidity,json=minLiquidity,proto3" json:"min_liquidity,omitempty" yaml:"min_liquidity"` + PoolType string `protobuf:"bytes,2,opt,name=pool_type,json=poolType,proto3" json:"pool_type,omitempty"` + Pagination *query.PageRequest `protobuf:"bytes,3,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryPoolsWithFilterRequest) Reset() { *m = QueryPoolsWithFilterRequest{} } +func (m *QueryPoolsWithFilterRequest) String() string { return proto.CompactTextString(m) } +func (*QueryPoolsWithFilterRequest) ProtoMessage() {} +func (*QueryPoolsWithFilterRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{21} +} +func (m *QueryPoolsWithFilterRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryPoolsWithFilterRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryPoolsWithFilterRequest.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 *QueryPoolsWithFilterRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryPoolsWithFilterRequest.Merge(m, src) +} +func (m *QueryPoolsWithFilterRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryPoolsWithFilterRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryPoolsWithFilterRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryPoolsWithFilterRequest proto.InternalMessageInfo + +func (m *QueryPoolsWithFilterRequest) GetMinLiquidity() string { + if m != nil { + return m.MinLiquidity + } + return "" +} + +func (m *QueryPoolsWithFilterRequest) GetPoolType() string { + if m != nil { + return m.PoolType + } + return "" +} + +func (m *QueryPoolsWithFilterRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +type QueryPoolsWithFilterResponse struct { + Pools []*types.Any `protobuf:"bytes,1,rep,name=pools,proto3" json:"pools,omitempty"` + // pagination defines the pagination in the response. + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryPoolsWithFilterResponse) Reset() { *m = QueryPoolsWithFilterResponse{} } +func (m *QueryPoolsWithFilterResponse) String() string { return proto.CompactTextString(m) } +func (*QueryPoolsWithFilterResponse) ProtoMessage() {} +func (*QueryPoolsWithFilterResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{22} +} +func (m *QueryPoolsWithFilterResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryPoolsWithFilterResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryPoolsWithFilterResponse.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 *QueryPoolsWithFilterResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryPoolsWithFilterResponse.Merge(m, src) +} +func (m *QueryPoolsWithFilterResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryPoolsWithFilterResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryPoolsWithFilterResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryPoolsWithFilterResponse proto.InternalMessageInfo + +func (m *QueryPoolsWithFilterResponse) GetPools() []*types.Any { + if m != nil { + return m.Pools + } + return nil +} + +func (m *QueryPoolsWithFilterResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil +} + +// QuerySpotPriceResponse defines the gRPC response structure for a SpotPrice +// query. +// +// Deprecated: Do not use. +type QuerySpotPriceResponse struct { + // String of the Dec. Ex) 10.203uatom + SpotPrice string `protobuf:"bytes,1,opt,name=spot_price,json=spotPrice,proto3" json:"spot_price,omitempty" yaml:"spot_price"` +} + +func (m *QuerySpotPriceResponse) Reset() { *m = QuerySpotPriceResponse{} } +func (m *QuerySpotPriceResponse) String() string { return proto.CompactTextString(m) } +func (*QuerySpotPriceResponse) ProtoMessage() {} +func (*QuerySpotPriceResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{23} +} +func (m *QuerySpotPriceResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuerySpotPriceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySpotPriceResponse.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 *QuerySpotPriceResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySpotPriceResponse.Merge(m, src) +} +func (m *QuerySpotPriceResponse) XXX_Size() int { + return m.Size() +} +func (m *QuerySpotPriceResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySpotPriceResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QuerySpotPriceResponse proto.InternalMessageInfo + +func (m *QuerySpotPriceResponse) GetSpotPrice() string { + if m != nil { + return m.SpotPrice + } + return "" +} + +// =============================== EstimateSwapExactAmountIn +// +// Deprecated: Do not use. +type QuerySwapExactAmountInRequest struct { + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` + PoolId uint64 `protobuf:"varint,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` + TokenIn string `protobuf:"bytes,3,opt,name=token_in,json=tokenIn,proto3" json:"token_in,omitempty" yaml:"token_in"` + Routes []types2.SwapAmountInRoute `protobuf:"bytes,4,rep,name=routes,proto3" json:"routes" yaml:"routes"` +} + +func (m *QuerySwapExactAmountInRequest) Reset() { *m = QuerySwapExactAmountInRequest{} } +func (m *QuerySwapExactAmountInRequest) String() string { return proto.CompactTextString(m) } +func (*QuerySwapExactAmountInRequest) ProtoMessage() {} +func (*QuerySwapExactAmountInRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{24} +} +func (m *QuerySwapExactAmountInRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuerySwapExactAmountInRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySwapExactAmountInRequest.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 *QuerySwapExactAmountInRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySwapExactAmountInRequest.Merge(m, src) +} +func (m *QuerySwapExactAmountInRequest) XXX_Size() int { + return m.Size() +} +func (m *QuerySwapExactAmountInRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySwapExactAmountInRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QuerySwapExactAmountInRequest proto.InternalMessageInfo + +func (m *QuerySwapExactAmountInRequest) GetSender() string { + if m != nil { + return m.Sender + } + return "" +} + +func (m *QuerySwapExactAmountInRequest) GetPoolId() uint64 { + if m != nil { + return m.PoolId + } + return 0 +} + +func (m *QuerySwapExactAmountInRequest) GetTokenIn() string { + if m != nil { + return m.TokenIn + } + return "" +} + +func (m *QuerySwapExactAmountInRequest) GetRoutes() []types2.SwapAmountInRoute { + if m != nil { + return m.Routes + } + return nil +} + +// Deprecated: Do not use. +type QuerySwapExactAmountInResponse struct { + TokenOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=token_out_amount,json=tokenOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_out_amount" yaml:"token_out_amount"` +} + +func (m *QuerySwapExactAmountInResponse) Reset() { *m = QuerySwapExactAmountInResponse{} } +func (m *QuerySwapExactAmountInResponse) String() string { return proto.CompactTextString(m) } +func (*QuerySwapExactAmountInResponse) ProtoMessage() {} +func (*QuerySwapExactAmountInResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{25} +} +func (m *QuerySwapExactAmountInResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuerySwapExactAmountInResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySwapExactAmountInResponse.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 *QuerySwapExactAmountInResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySwapExactAmountInResponse.Merge(m, src) +} +func (m *QuerySwapExactAmountInResponse) XXX_Size() int { + return m.Size() +} +func (m *QuerySwapExactAmountInResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySwapExactAmountInResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QuerySwapExactAmountInResponse proto.InternalMessageInfo + +// =============================== EstimateSwapExactAmountOut +// +// Deprecated: Do not use. +type QuerySwapExactAmountOutRequest struct { + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` + PoolId uint64 `protobuf:"varint,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` + Routes []types2.SwapAmountOutRoute `protobuf:"bytes,3,rep,name=routes,proto3" json:"routes" yaml:"routes"` + TokenOut string `protobuf:"bytes,4,opt,name=token_out,json=tokenOut,proto3" json:"token_out,omitempty" yaml:"token_out"` +} + +func (m *QuerySwapExactAmountOutRequest) Reset() { *m = QuerySwapExactAmountOutRequest{} } +func (m *QuerySwapExactAmountOutRequest) String() string { return proto.CompactTextString(m) } +func (*QuerySwapExactAmountOutRequest) ProtoMessage() {} +func (*QuerySwapExactAmountOutRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{26} +} +func (m *QuerySwapExactAmountOutRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuerySwapExactAmountOutRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySwapExactAmountOutRequest.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 *QuerySwapExactAmountOutRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySwapExactAmountOutRequest.Merge(m, src) +} +func (m *QuerySwapExactAmountOutRequest) XXX_Size() int { + return m.Size() +} +func (m *QuerySwapExactAmountOutRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySwapExactAmountOutRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QuerySwapExactAmountOutRequest proto.InternalMessageInfo + +func (m *QuerySwapExactAmountOutRequest) GetSender() string { + if m != nil { + return m.Sender + } + return "" +} + +func (m *QuerySwapExactAmountOutRequest) GetPoolId() uint64 { + if m != nil { + return m.PoolId + } + return 0 +} + +func (m *QuerySwapExactAmountOutRequest) GetRoutes() []types2.SwapAmountOutRoute { + if m != nil { + return m.Routes + } + return nil +} + +func (m *QuerySwapExactAmountOutRequest) GetTokenOut() string { + if m != nil { + return m.TokenOut + } + return "" +} + +// Deprecated: Do not use. +type QuerySwapExactAmountOutResponse struct { + TokenInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=token_in_amount,json=tokenInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_in_amount" yaml:"token_in_amount"` +} + +func (m *QuerySwapExactAmountOutResponse) Reset() { *m = QuerySwapExactAmountOutResponse{} } +func (m *QuerySwapExactAmountOutResponse) String() string { return proto.CompactTextString(m) } +func (*QuerySwapExactAmountOutResponse) ProtoMessage() {} +func (*QuerySwapExactAmountOutResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{27} +} +func (m *QuerySwapExactAmountOutResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuerySwapExactAmountOutResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySwapExactAmountOutResponse.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 *QuerySwapExactAmountOutResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySwapExactAmountOutResponse.Merge(m, src) +} +func (m *QuerySwapExactAmountOutResponse) XXX_Size() int { + return m.Size() +} +func (m *QuerySwapExactAmountOutResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySwapExactAmountOutResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QuerySwapExactAmountOutResponse proto.InternalMessageInfo + +type QueryTotalLiquidityRequest struct { +} + +func (m *QueryTotalLiquidityRequest) Reset() { *m = QueryTotalLiquidityRequest{} } +func (m *QueryTotalLiquidityRequest) String() string { return proto.CompactTextString(m) } +func (*QueryTotalLiquidityRequest) ProtoMessage() {} +func (*QueryTotalLiquidityRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{28} +} +func (m *QueryTotalLiquidityRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTotalLiquidityRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTotalLiquidityRequest.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 *QueryTotalLiquidityRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTotalLiquidityRequest.Merge(m, src) +} +func (m *QueryTotalLiquidityRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryTotalLiquidityRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTotalLiquidityRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryTotalLiquidityRequest proto.InternalMessageInfo + +type QueryTotalLiquidityResponse struct { + Liquidity github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=liquidity,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"liquidity" yaml:"liquidity"` +} + +func (m *QueryTotalLiquidityResponse) Reset() { *m = QueryTotalLiquidityResponse{} } +func (m *QueryTotalLiquidityResponse) String() string { return proto.CompactTextString(m) } +func (*QueryTotalLiquidityResponse) ProtoMessage() {} +func (*QueryTotalLiquidityResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{29} +} +func (m *QueryTotalLiquidityResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTotalLiquidityResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTotalLiquidityResponse.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 *QueryTotalLiquidityResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTotalLiquidityResponse.Merge(m, src) +} +func (m *QueryTotalLiquidityResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryTotalLiquidityResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTotalLiquidityResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryTotalLiquidityResponse proto.InternalMessageInfo + +func (m *QueryTotalLiquidityResponse) GetLiquidity() github_com_cosmos_cosmos_sdk_types.Coins { + if m != nil { + return m.Liquidity + } + return nil +} + +// =============================== QueryConcentratedPoolIdLinkFromCFMM +type QueryConcentratedPoolIdLinkFromCFMMRequest struct { + CfmmPoolId uint64 `protobuf:"varint,1,opt,name=cfmm_pool_id,json=cfmmPoolId,proto3" json:"cfmm_pool_id,omitempty" yaml:"cfmm_pool_id"` +} + +func (m *QueryConcentratedPoolIdLinkFromCFMMRequest) Reset() { + *m = QueryConcentratedPoolIdLinkFromCFMMRequest{} +} +func (m *QueryConcentratedPoolIdLinkFromCFMMRequest) String() string { + return proto.CompactTextString(m) +} +func (*QueryConcentratedPoolIdLinkFromCFMMRequest) ProtoMessage() {} +func (*QueryConcentratedPoolIdLinkFromCFMMRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{30} +} +func (m *QueryConcentratedPoolIdLinkFromCFMMRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryConcentratedPoolIdLinkFromCFMMRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryConcentratedPoolIdLinkFromCFMMRequest.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 *QueryConcentratedPoolIdLinkFromCFMMRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryConcentratedPoolIdLinkFromCFMMRequest.Merge(m, src) +} +func (m *QueryConcentratedPoolIdLinkFromCFMMRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryConcentratedPoolIdLinkFromCFMMRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryConcentratedPoolIdLinkFromCFMMRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryConcentratedPoolIdLinkFromCFMMRequest proto.InternalMessageInfo + +func (m *QueryConcentratedPoolIdLinkFromCFMMRequest) GetCfmmPoolId() uint64 { + if m != nil { + return m.CfmmPoolId + } + return 0 +} + +type QueryConcentratedPoolIdLinkFromCFMMResponse struct { + ConcentratedPoolId uint64 `protobuf:"varint,1,opt,name=concentrated_pool_id,json=concentratedPoolId,proto3" json:"concentrated_pool_id,omitempty"` +} + +func (m *QueryConcentratedPoolIdLinkFromCFMMResponse) Reset() { + *m = QueryConcentratedPoolIdLinkFromCFMMResponse{} +} +func (m *QueryConcentratedPoolIdLinkFromCFMMResponse) String() string { + return proto.CompactTextString(m) +} +func (*QueryConcentratedPoolIdLinkFromCFMMResponse) ProtoMessage() {} +func (*QueryConcentratedPoolIdLinkFromCFMMResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d9a717df9ca609ef, []int{31} +} +func (m *QueryConcentratedPoolIdLinkFromCFMMResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryConcentratedPoolIdLinkFromCFMMResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryConcentratedPoolIdLinkFromCFMMResponse.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 *QueryConcentratedPoolIdLinkFromCFMMResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryConcentratedPoolIdLinkFromCFMMResponse.Merge(m, src) +} +func (m *QueryConcentratedPoolIdLinkFromCFMMResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryConcentratedPoolIdLinkFromCFMMResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryConcentratedPoolIdLinkFromCFMMResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryConcentratedPoolIdLinkFromCFMMResponse proto.InternalMessageInfo + +func (m *QueryConcentratedPoolIdLinkFromCFMMResponse) GetConcentratedPoolId() uint64 { + if m != nil { + return m.ConcentratedPoolId + } + return 0 +} + +func init() { + proto.RegisterType((*QueryPoolRequest)(nil), "osmosis.gamm.v1beta1.QueryPoolRequest") + proto.RegisterType((*QueryPoolResponse)(nil), "osmosis.gamm.v1beta1.QueryPoolResponse") + proto.RegisterType((*QueryPoolsRequest)(nil), "osmosis.gamm.v1beta1.QueryPoolsRequest") + proto.RegisterType((*QueryPoolsResponse)(nil), "osmosis.gamm.v1beta1.QueryPoolsResponse") + proto.RegisterType((*QueryNumPoolsRequest)(nil), "osmosis.gamm.v1beta1.QueryNumPoolsRequest") + proto.RegisterType((*QueryNumPoolsResponse)(nil), "osmosis.gamm.v1beta1.QueryNumPoolsResponse") + proto.RegisterType((*QueryPoolTypeRequest)(nil), "osmosis.gamm.v1beta1.QueryPoolTypeRequest") + proto.RegisterType((*QueryPoolTypeResponse)(nil), "osmosis.gamm.v1beta1.QueryPoolTypeResponse") + proto.RegisterType((*QueryCalcJoinPoolSharesRequest)(nil), "osmosis.gamm.v1beta1.QueryCalcJoinPoolSharesRequest") + proto.RegisterType((*QueryCalcJoinPoolSharesResponse)(nil), "osmosis.gamm.v1beta1.QueryCalcJoinPoolSharesResponse") + proto.RegisterType((*QueryCalcExitPoolCoinsFromSharesRequest)(nil), "osmosis.gamm.v1beta1.QueryCalcExitPoolCoinsFromSharesRequest") + proto.RegisterType((*QueryCalcExitPoolCoinsFromSharesResponse)(nil), "osmosis.gamm.v1beta1.QueryCalcExitPoolCoinsFromSharesResponse") + proto.RegisterType((*QueryPoolParamsRequest)(nil), "osmosis.gamm.v1beta1.QueryPoolParamsRequest") + proto.RegisterType((*QueryPoolParamsResponse)(nil), "osmosis.gamm.v1beta1.QueryPoolParamsResponse") + proto.RegisterType((*QueryTotalPoolLiquidityRequest)(nil), "osmosis.gamm.v1beta1.QueryTotalPoolLiquidityRequest") + proto.RegisterType((*QueryTotalPoolLiquidityResponse)(nil), "osmosis.gamm.v1beta1.QueryTotalPoolLiquidityResponse") + proto.RegisterType((*QueryTotalSharesRequest)(nil), "osmosis.gamm.v1beta1.QueryTotalSharesRequest") + proto.RegisterType((*QueryTotalSharesResponse)(nil), "osmosis.gamm.v1beta1.QueryTotalSharesResponse") + proto.RegisterType((*QueryCalcJoinPoolNoSwapSharesRequest)(nil), "osmosis.gamm.v1beta1.QueryCalcJoinPoolNoSwapSharesRequest") + proto.RegisterType((*QueryCalcJoinPoolNoSwapSharesResponse)(nil), "osmosis.gamm.v1beta1.QueryCalcJoinPoolNoSwapSharesResponse") + proto.RegisterType((*QuerySpotPriceRequest)(nil), "osmosis.gamm.v1beta1.QuerySpotPriceRequest") + proto.RegisterType((*QueryPoolsWithFilterRequest)(nil), "osmosis.gamm.v1beta1.QueryPoolsWithFilterRequest") + proto.RegisterType((*QueryPoolsWithFilterResponse)(nil), "osmosis.gamm.v1beta1.QueryPoolsWithFilterResponse") + proto.RegisterType((*QuerySpotPriceResponse)(nil), "osmosis.gamm.v1beta1.QuerySpotPriceResponse") + proto.RegisterType((*QuerySwapExactAmountInRequest)(nil), "osmosis.gamm.v1beta1.QuerySwapExactAmountInRequest") + proto.RegisterType((*QuerySwapExactAmountInResponse)(nil), "osmosis.gamm.v1beta1.QuerySwapExactAmountInResponse") + proto.RegisterType((*QuerySwapExactAmountOutRequest)(nil), "osmosis.gamm.v1beta1.QuerySwapExactAmountOutRequest") + proto.RegisterType((*QuerySwapExactAmountOutResponse)(nil), "osmosis.gamm.v1beta1.QuerySwapExactAmountOutResponse") + proto.RegisterType((*QueryTotalLiquidityRequest)(nil), "osmosis.gamm.v1beta1.QueryTotalLiquidityRequest") + proto.RegisterType((*QueryTotalLiquidityResponse)(nil), "osmosis.gamm.v1beta1.QueryTotalLiquidityResponse") + proto.RegisterType((*QueryConcentratedPoolIdLinkFromCFMMRequest)(nil), "osmosis.gamm.v1beta1.QueryConcentratedPoolIdLinkFromCFMMRequest") + proto.RegisterType((*QueryConcentratedPoolIdLinkFromCFMMResponse)(nil), "osmosis.gamm.v1beta1.QueryConcentratedPoolIdLinkFromCFMMResponse") +} + +func init() { proto.RegisterFile("osmosis/gamm/v1beta1/query.proto", fileDescriptor_d9a717df9ca609ef) } + +var fileDescriptor_d9a717df9ca609ef = []byte{ + // 1966 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x58, 0x4d, 0x6c, 0x1c, 0x49, + 0x15, 0x4e, 0x4f, 0x1c, 0xaf, 0xfd, 0x92, 0xd8, 0x4e, 0xad, 0x93, 0x4c, 0xc6, 0xc9, 0x4c, 0x28, + 0x76, 0xe3, 0x6c, 0x62, 0xf7, 0xd8, 0x89, 0x23, 0xc0, 0x90, 0xdd, 0xd8, 0x5e, 0x3b, 0x19, 0x2b, + 0x89, 0xbd, 0x9d, 0x15, 0x08, 0x10, 0xb4, 0xda, 0xe3, 0xce, 0xb8, 0x37, 0xd3, 0x5d, 0x93, 0xe9, + 0xea, 0x8d, 0xad, 0x55, 0xb4, 0xd2, 0x9e, 0x80, 0xcb, 0x22, 0x01, 0x8b, 0x40, 0x08, 0x2e, 0x2b, + 0x84, 0xb8, 0x82, 0xc4, 0x89, 0x03, 0xe2, 0x12, 0x71, 0x8a, 0x04, 0x07, 0xc4, 0x61, 0x40, 0x09, + 0xdc, 0x38, 0xf9, 0xb2, 0x57, 0x54, 0x55, 0xaf, 0x7f, 0xe6, 0xc7, 0x3d, 0x3f, 0x4b, 0xa4, 0xdd, + 0xd3, 0x4c, 0x57, 0xbd, 0x9f, 0xef, 0xfd, 0xd4, 0xab, 0x57, 0x0f, 0xce, 0x33, 0xdf, 0x65, 0xbe, + 0xe3, 0x17, 0x2b, 0x96, 0xeb, 0x16, 0xdf, 0x9d, 0xdf, 0xb2, 0xb9, 0x35, 0x5f, 0x7c, 0x18, 0xd8, + 0xf5, 0x3d, 0xbd, 0x56, 0x67, 0x9c, 0x91, 0x49, 0xa4, 0xd0, 0x05, 0x85, 0x8e, 0x14, 0xb9, 0xc9, + 0x0a, 0xab, 0x30, 0x49, 0x50, 0x14, 0xff, 0x14, 0x6d, 0xee, 0x5c, 0x47, 0x69, 0x7c, 0x17, 0xb7, + 0x67, 0xc2, 0xed, 0x1a, 0x63, 0x55, 0xd7, 0xf2, 0xac, 0x8a, 0x5d, 0x8f, 0xa8, 0xfc, 0x47, 0x56, + 0xcd, 0xac, 0xb3, 0x80, 0xdb, 0x48, 0x9d, 0x2f, 0x4b, 0xf2, 0xe2, 0x96, 0xe5, 0xdb, 0x11, 0x55, + 0x99, 0x39, 0x1e, 0xee, 0x5f, 0x4a, 0xee, 0x4b, 0xc4, 0x11, 0x55, 0xcd, 0xaa, 0x38, 0x9e, 0xc5, + 0x1d, 0x16, 0xd2, 0x9e, 0xad, 0x30, 0x56, 0xa9, 0xda, 0x45, 0xab, 0xe6, 0x14, 0x2d, 0xcf, 0x63, + 0x5c, 0x6e, 0xfa, 0xb8, 0x7b, 0x06, 0x77, 0xe5, 0xd7, 0x56, 0x70, 0xbf, 0x68, 0x79, 0x7b, 0xe1, + 0x96, 0x52, 0x62, 0x2a, 0x53, 0xd5, 0x87, 0xda, 0xa2, 0x2b, 0x30, 0xf1, 0x96, 0xd0, 0xba, 0xc9, + 0x58, 0xd5, 0xb0, 0x1f, 0x06, 0xb6, 0xcf, 0xc9, 0x65, 0x78, 0x49, 0xd8, 0x66, 0x3a, 0xdb, 0x59, + 0xed, 0xbc, 0x76, 0x71, 0x68, 0x99, 0xec, 0x37, 0x0a, 0x63, 0x7b, 0x96, 0x5b, 0x5d, 0xa4, 0xb8, + 0x41, 0x8d, 0x61, 0xf1, 0xaf, 0xb4, 0xbd, 0x98, 0xc9, 0x6a, 0xf4, 0x36, 0x9c, 0x48, 0x08, 0xf1, + 0x6b, 0xcc, 0xf3, 0x6d, 0x72, 0x15, 0x86, 0x04, 0x89, 0x14, 0x71, 0xf4, 0xca, 0xa4, 0xae, 0xe0, + 0xe9, 0x21, 0x3c, 0x7d, 0xc9, 0xdb, 0x5b, 0x1e, 0xfd, 0xcb, 0xef, 0x67, 0x8f, 0x08, 0xae, 0x92, + 0x21, 0x89, 0xa5, 0xb4, 0x6f, 0x27, 0xa4, 0xf9, 0x21, 0xa6, 0x35, 0x80, 0xd8, 0x1f, 0xd9, 0x8c, + 0x94, 0x79, 0x41, 0x47, 0x53, 0x84, 0xf3, 0x74, 0x15, 0x6e, 0x74, 0x9e, 0xbe, 0x69, 0x55, 0x6c, + 0xe4, 0x35, 0x12, 0x9c, 0xf4, 0xc7, 0x1a, 0x90, 0xa4, 0x74, 0x04, 0x7b, 0x0d, 0x8e, 0x08, 0xfd, + 0x7e, 0x56, 0x3b, 0x7f, 0xb8, 0x17, 0xb4, 0x8a, 0x9a, 0xdc, 0xec, 0x80, 0x6a, 0xba, 0x2b, 0x2a, + 0xa5, 0xb3, 0x09, 0x56, 0x0e, 0x26, 0x25, 0xaa, 0xbb, 0x81, 0x9b, 0x34, 0x5b, 0xfa, 0xe3, 0x2e, + 0x9c, 0x6c, 0xd9, 0x43, 0xd0, 0xf3, 0x30, 0xea, 0x05, 0xae, 0x19, 0x02, 0x17, 0x91, 0x9a, 0xdc, + 0x6f, 0x14, 0x26, 0x54, 0xa4, 0xa2, 0x2d, 0x6a, 0x8c, 0x78, 0xc8, 0x2a, 0xe5, 0xad, 0xa0, 0x2e, + 0xb1, 0xf2, 0xf6, 0x5e, 0xcd, 0x1e, 0x24, 0xec, 0x74, 0x1d, 0x41, 0xc5, 0x42, 0x62, 0x50, 0x92, + 0x98, 0xef, 0xd5, 0x6c, 0x29, 0x67, 0x34, 0x09, 0x2a, 0xda, 0xa2, 0xc6, 0x48, 0x0d, 0x59, 0xe9, + 0x1f, 0x34, 0xc8, 0x4b, 0x61, 0x2b, 0x56, 0xb5, 0xbc, 0xce, 0x1c, 0x4f, 0x08, 0xbd, 0xb7, 0x63, + 0xd5, 0x6d, 0x7f, 0x10, 0x6c, 0x64, 0x07, 0x46, 0x39, 0x7b, 0x60, 0x7b, 0xbe, 0xe9, 0x88, 0xa0, + 0x88, 0x80, 0x9e, 0x69, 0x0a, 0x4a, 0x18, 0x8e, 0x15, 0xe6, 0x78, 0xcb, 0x73, 0x4f, 0x1a, 0x85, + 0x43, 0xbf, 0xfd, 0x67, 0xe1, 0x62, 0xc5, 0xe1, 0x3b, 0xc1, 0x96, 0x5e, 0x66, 0x2e, 0x1e, 0x11, + 0xfc, 0x99, 0xf5, 0xb7, 0x1f, 0x14, 0x05, 0x66, 0x5f, 0x32, 0xf8, 0xc6, 0x88, 0x92, 0x5e, 0xf2, + 0xe8, 0x07, 0x19, 0x28, 0x1c, 0x88, 0x1c, 0x1d, 0xe2, 0xc3, 0x84, 0x2f, 0x56, 0x4c, 0x16, 0x70, + 0xd3, 0x72, 0x59, 0xe0, 0x71, 0xf4, 0x4b, 0x49, 0x68, 0xfe, 0x47, 0xa3, 0x70, 0xa1, 0x07, 0xcd, + 0x25, 0x8f, 0xef, 0x37, 0x0a, 0xa7, 0x95, 0xc5, 0xad, 0xf2, 0xa8, 0x31, 0x26, 0x97, 0x36, 0x02, + 0xbe, 0x24, 0x17, 0xc8, 0x3b, 0x00, 0xe8, 0x02, 0x16, 0xf0, 0x17, 0xe1, 0x03, 0xf4, 0xf0, 0x46, + 0xc0, 0xe9, 0xcf, 0x35, 0x98, 0x8e, 0x9c, 0xb0, 0xba, 0xeb, 0x70, 0xe1, 0x04, 0x49, 0xb5, 0x56, + 0x67, 0x6e, 0x73, 0x1c, 0x4f, 0xb7, 0xc4, 0x31, 0x8a, 0xd9, 0xd7, 0x61, 0x5c, 0x59, 0xe5, 0x78, + 0xa1, 0x93, 0x32, 0xd2, 0x49, 0x7a, 0x7f, 0x4e, 0x32, 0x8e, 0x4b, 0x31, 0x25, 0x4f, 0x39, 0x82, + 0x7e, 0xa4, 0xc1, 0xc5, 0xee, 0xe0, 0x30, 0x54, 0xcd, 0x5e, 0xd3, 0x5e, 0xa8, 0xd7, 0x56, 0xe1, + 0x54, 0x74, 0x80, 0x36, 0xad, 0xba, 0xe5, 0x0e, 0x94, 0xeb, 0xf4, 0x26, 0x9c, 0x6e, 0x13, 0x83, + 0xd6, 0xcc, 0xc0, 0x70, 0x4d, 0xae, 0xa4, 0x95, 0x60, 0x03, 0x69, 0xe8, 0x5b, 0x78, 0x06, 0xdf, + 0x66, 0xdc, 0xaa, 0x0a, 0x69, 0xb7, 0x9d, 0x87, 0x81, 0xb3, 0xed, 0xf0, 0xbd, 0x81, 0xaf, 0x85, + 0x8f, 0x35, 0x3c, 0x1d, 0x9d, 0x64, 0x22, 0xc8, 0xc7, 0x30, 0x5a, 0x0d, 0x17, 0xbb, 0x7b, 0xfc, + 0x4d, 0xe1, 0xf1, 0xb8, 0x9a, 0x44, 0x9c, 0xb4, 0xbf, 0x28, 0x44, 0x7c, 0x12, 0xe6, 0x1a, 0xba, + 0x50, 0xa2, 0x1c, 0xbc, 0xec, 0xd0, 0x00, 0xb2, 0xed, 0x72, 0xd0, 0xcc, 0x6f, 0xc2, 0x31, 0x2e, + 0x96, 0x4d, 0x99, 0x9d, 0x61, 0x44, 0x52, 0x2c, 0x9d, 0x42, 0x4b, 0x5f, 0x56, 0xca, 0x92, 0xcc, + 0xd4, 0x38, 0xca, 0x63, 0x15, 0xf4, 0x8f, 0x1a, 0xbc, 0xd2, 0x56, 0x83, 0xee, 0xb2, 0x7b, 0x8f, + 0xac, 0xda, 0xe7, 0xa2, 0x86, 0x7e, 0xa2, 0xc1, 0xab, 0x5d, 0xf0, 0xa3, 0x13, 0xdf, 0xef, 0xef, + 0x78, 0xae, 0xa2, 0x0b, 0x4f, 0x84, 0x2e, 0x0c, 0x59, 0xe9, 0x80, 0x67, 0x96, 0xdc, 0x01, 0x50, + 0x21, 0xc0, 0xaa, 0x3a, 0x48, 0x7d, 0x1a, 0x55, 0x12, 0x44, 0x09, 0xf8, 0xaf, 0x86, 0x97, 0xe8, + 0xbd, 0x1a, 0xe3, 0x9b, 0x75, 0xa7, 0x3c, 0xd0, 0x55, 0x4c, 0x56, 0x61, 0x42, 0x18, 0x6f, 0x5a, + 0xbe, 0x6f, 0x73, 0x73, 0xdb, 0xf6, 0x98, 0x8b, 0xd8, 0xa6, 0xe2, 0x2b, 0xa3, 0x95, 0x82, 0x1a, + 0x63, 0x62, 0x69, 0x49, 0xac, 0xbc, 0x29, 0x16, 0xc8, 0x2d, 0x38, 0xf1, 0x30, 0x60, 0xbc, 0x59, + 0xce, 0x61, 0x29, 0xe7, 0xec, 0x7e, 0xa3, 0x90, 0x55, 0x72, 0xda, 0x48, 0xa8, 0x31, 0x2e, 0xd7, + 0x62, 0x49, 0xe2, 0x50, 0xad, 0x0f, 0x8d, 0x0c, 0x4d, 0x1c, 0x31, 0x8e, 0x3e, 0x72, 0xf8, 0x8e, + 0x88, 0xe4, 0x9a, 0x6d, 0xd3, 0x3f, 0x69, 0x30, 0x15, 0xb7, 0x5e, 0xdf, 0x70, 0xf8, 0xce, 0x9a, + 0x53, 0xe5, 0x76, 0x3d, 0x34, 0xfa, 0x3a, 0x1c, 0x77, 0x1d, 0xcf, 0x4c, 0x96, 0x03, 0xa1, 0x3c, + 0xbb, 0xdf, 0x28, 0x4c, 0x2a, 0xe5, 0x4d, 0xdb, 0xd4, 0x38, 0xe6, 0x3a, 0x5e, 0x54, 0x51, 0xc8, + 0x54, 0xb2, 0xf1, 0x90, 0xf6, 0xc7, 0x2d, 0x46, 0x4b, 0xfb, 0x78, 0x78, 0xe0, 0xf6, 0xf1, 0x97, + 0x1a, 0x9c, 0xed, 0x6c, 0xc3, 0x67, 0xa4, 0x91, 0x34, 0xf0, 0x5a, 0x49, 0xa4, 0x14, 0x22, 0x5b, + 0x00, 0xf0, 0x6b, 0x8c, 0x9b, 0x35, 0xb1, 0x8a, 0xbe, 0x3d, 0x19, 0x1f, 0x8f, 0x78, 0x8f, 0x1a, + 0xa3, 0x7e, 0xc8, 0x2d, 0x0b, 0xe4, 0x0f, 0x32, 0x70, 0x4e, 0x09, 0x7d, 0x64, 0xd5, 0x56, 0x77, + 0xad, 0x32, 0x76, 0x19, 0x25, 0x2f, 0x0c, 0xdd, 0x6b, 0x30, 0xec, 0xdb, 0xde, 0xb6, 0x5d, 0x47, + 0xb9, 0x27, 0xf6, 0x1b, 0x85, 0xe3, 0x28, 0x57, 0xae, 0x53, 0x03, 0x09, 0x92, 0xa9, 0x9d, 0xe9, + 0x9a, 0xda, 0x3a, 0xa8, 0x3a, 0x21, 0x8a, 0x90, 0x4a, 0xc5, 0x97, 0xf7, 0x1b, 0x85, 0xf1, 0xc4, + 0x81, 0x36, 0x1d, 0x8f, 0x1a, 0x2f, 0xc9, 0xbf, 0x25, 0x8f, 0x7c, 0x07, 0x86, 0xe5, 0xe3, 0xcb, + 0xcf, 0x0e, 0x49, 0xf7, 0xeb, 0x7a, 0xf8, 0xee, 0x4b, 0x3c, 0xd6, 0x22, 0x27, 0x0a, 0x73, 0x22, + 0x4b, 0x04, 0xdb, 0xf2, 0x49, 0x2c, 0x19, 0x88, 0x5d, 0xc9, 0xa2, 0x06, 0x0a, 0x95, 0xce, 0xf8, + 0x59, 0xd8, 0xac, 0x76, 0x70, 0x46, 0xdc, 0xf1, 0x29, 0x6c, 0xff, 0xbf, 0x8e, 0xaf, 0x55, 0x1e, + 0x35, 0xc6, 0xe4, 0x52, 0xd4, 0xf1, 0x49, 0x6c, 0x1f, 0x66, 0x3a, 0x63, 0xdb, 0x08, 0xf8, 0x8b, + 0x8e, 0xd4, 0x77, 0x23, 0xcf, 0x1f, 0x96, 0x9e, 0x2f, 0xf6, 0xe8, 0x79, 0x01, 0xad, 0x07, 0xd7, + 0x8b, 0x67, 0x45, 0xe4, 0x83, 0xec, 0x50, 0xeb, 0xb3, 0x22, 0xda, 0xa2, 0x78, 0xb1, 0x6c, 0x04, + 0xca, 0x23, 0x3f, 0x0d, 0x5b, 0x90, 0x4e, 0x1e, 0xc1, 0x70, 0xd5, 0x60, 0x3c, 0x4c, 0xa5, 0xe6, + 0x68, 0xdd, 0xea, 0x3b, 0x5a, 0xa7, 0x9a, 0x33, 0x33, 0x0a, 0xd6, 0x71, 0x4c, 0xd0, 0x44, 0xac, + 0xce, 0x42, 0x2e, 0xee, 0x16, 0x5a, 0x7b, 0x2d, 0xfa, 0x8b, 0xb0, 0x56, 0xb6, 0x6e, 0x7f, 0x26, + 0xda, 0x26, 0x5a, 0x81, 0x4b, 0xea, 0xca, 0x66, 0x5e, 0xd9, 0xf6, 0x78, 0xdd, 0xe2, 0xf6, 0xb6, + 0xac, 0x67, 0xdb, 0xb7, 0x1d, 0xef, 0x81, 0xe8, 0xac, 0x57, 0xd6, 0xee, 0xdc, 0x09, 0x73, 0xee, + 0x2b, 0x70, 0xac, 0x7c, 0xdf, 0x55, 0xaf, 0xd1, 0xf8, 0x4a, 0x3b, 0x1d, 0x77, 0x37, 0xc9, 0x5d, + 0x6a, 0x80, 0xf8, 0x54, 0xd2, 0xa8, 0x09, 0x97, 0x7b, 0x52, 0x84, 0x6e, 0x99, 0x83, 0xc9, 0x72, + 0x82, 0xb2, 0x59, 0xa3, 0x41, 0xca, 0x6d, 0x52, 0xae, 0xfc, 0xee, 0x14, 0x1c, 0x91, 0x1a, 0xc8, + 0xfb, 0x20, 0x4b, 0xb2, 0x4f, 0xa6, 0xf5, 0x4e, 0xc3, 0x22, 0xbd, 0x6d, 0x26, 0x91, 0xbb, 0xd8, + 0x9d, 0x50, 0xe1, 0xa2, 0x5f, 0xfc, 0xe0, 0xaf, 0xff, 0xfe, 0x51, 0xe6, 0x1c, 0x99, 0x2a, 0x76, + 0x9c, 0x2d, 0xa9, 0x3b, 0xe0, 0x43, 0x0d, 0x46, 0xc2, 0x37, 0x3e, 0xb9, 0x94, 0x22, 0xbb, 0x65, + 0x48, 0x90, 0xbb, 0xdc, 0x13, 0x2d, 0x42, 0xb9, 0x24, 0xa1, 0x7c, 0x81, 0x14, 0x3a, 0x43, 0x89, + 0xa6, 0x06, 0xdf, 0xcb, 0x68, 0xe4, 0x63, 0x0d, 0xc6, 0x9a, 0x13, 0x90, 0xcc, 0xa5, 0xe8, 0xea, + 0x98, 0xca, 0xb9, 0xf9, 0x3e, 0x38, 0x10, 0xe3, 0xac, 0xc4, 0x38, 0x4d, 0x5e, 0xed, 0x8c, 0x51, + 0x35, 0xc3, 0x51, 0x36, 0x92, 0x5f, 0x6b, 0x30, 0xde, 0x72, 0x1f, 0x93, 0xf9, 0x6e, 0xb1, 0x69, + 0xeb, 0x3f, 0x72, 0x57, 0xfa, 0x61, 0x41, 0xa4, 0x33, 0x12, 0xe9, 0x05, 0xf2, 0x4a, 0x67, 0xa4, + 0xf7, 0x25, 0x35, 0x26, 0xa2, 0x4f, 0xbe, 0xaf, 0xc1, 0x90, 0x90, 0x44, 0x2e, 0x74, 0x51, 0x15, + 0x42, 0x9a, 0xee, 0x4a, 0x87, 0x38, 0xe6, 0xd2, 0x3d, 0x26, 0xd5, 0x17, 0xdf, 0xc3, 0xe3, 0xf0, + 0x58, 0xc4, 0xf6, 0x23, 0x0d, 0x46, 0xc2, 0xe1, 0x4d, 0x6a, 0xb6, 0xb5, 0x8c, 0x89, 0x52, 0xb3, + 0xad, 0x75, 0x1a, 0x44, 0xe7, 0x25, 0xae, 0xcb, 0xe4, 0xb5, 0x83, 0x71, 0xc9, 0x86, 0x2d, 0xc6, + 0x46, 0x7e, 0xa2, 0x41, 0xf6, 0xa0, 0xa7, 0x00, 0x59, 0x4c, 0x51, 0xde, 0xe5, 0xfd, 0x93, 0xfb, + 0xea, 0x40, 0xbc, 0x68, 0xc8, 0x21, 0xf2, 0x67, 0x0d, 0x48, 0xfb, 0x98, 0x87, 0x2c, 0xf4, 0x28, + 0xb5, 0x19, 0xcb, 0xb5, 0x3e, 0xb9, 0x10, 0xc5, 0x0d, 0xe9, 0xce, 0x45, 0xf2, 0xe5, 0x9e, 0xc2, + 0x5c, 0x7c, 0x87, 0x39, 0x9e, 0x29, 0x47, 0xd2, 0xb6, 0xb8, 0xfa, 0x4c, 0xc7, 0x23, 0xff, 0xd1, + 0x60, 0x2a, 0x65, 0x14, 0x42, 0xae, 0x77, 0x01, 0x96, 0x3e, 0xdf, 0xc9, 0xbd, 0x3e, 0x28, 0x3b, + 0x1a, 0x78, 0x53, 0x1a, 0xb8, 0x44, 0xde, 0xe8, 0xcd, 0x40, 0x7b, 0xd7, 0xe1, 0xca, 0x40, 0x35, + 0x3c, 0x52, 0xf7, 0xad, 0xb0, 0xf3, 0x57, 0x1a, 0x40, 0x3c, 0x13, 0x21, 0x33, 0x5d, 0x92, 0xb6, + 0x69, 0x02, 0x93, 0x9b, 0xed, 0x91, 0x1a, 0x41, 0x2f, 0x48, 0xd0, 0x3a, 0x99, 0xe9, 0x0d, 0xb4, + 0x1a, 0xb8, 0x90, 0x27, 0x1a, 0x90, 0xf6, 0xc1, 0x48, 0x6a, 0x3e, 0x1d, 0x38, 0x9b, 0x49, 0xcd, + 0xa7, 0x83, 0xa7, 0x2f, 0x74, 0x55, 0x22, 0xff, 0x1a, 0x59, 0xec, 0x0d, 0xb9, 0x2a, 0xbc, 0xf2, + 0x33, 0xaa, 0xbe, 0xa2, 0x96, 0xfc, 0x46, 0x83, 0xa3, 0x89, 0xa9, 0x07, 0x99, 0xed, 0x86, 0xa6, + 0x39, 0x69, 0xf4, 0x5e, 0xc9, 0x11, 0xf5, 0xa2, 0x44, 0xbd, 0x40, 0xae, 0xf4, 0x83, 0x5a, 0x3d, + 0xbb, 0x45, 0x5e, 0x8c, 0x46, 0x6f, 0x23, 0x92, 0x56, 0xcb, 0x5a, 0x1f, 0xe5, 0xb9, 0x99, 0xde, + 0x88, 0x11, 0xe4, 0x97, 0xfa, 0x4c, 0x0a, 0xc1, 0x2c, 0x2f, 0xdd, 0xa7, 0x1a, 0x9c, 0x59, 0xf5, + 0xb9, 0xe3, 0x5a, 0xdc, 0x6e, 0x7b, 0x63, 0x90, 0xab, 0x69, 0x20, 0x0e, 0x78, 0x9e, 0xe5, 0x16, + 0xfa, 0x63, 0x42, 0x0b, 0x6e, 0x49, 0x0b, 0xde, 0x20, 0xd7, 0x3b, 0x5b, 0x90, 0x38, 0x85, 0x88, + 0xb6, 0x98, 0x28, 0x35, 0xd1, 0x49, 0x14, 0x26, 0xfd, 0x4d, 0x83, 0xdc, 0x01, 0x26, 0x6d, 0x04, + 0x9c, 0xf4, 0x01, 0x2f, 0x7e, 0xc9, 0xa4, 0xa6, 0xfc, 0xc1, 0xdd, 0x3e, 0x2d, 0x49, 0xab, 0x6e, + 0x90, 0xd7, 0x3f, 0x85, 0x55, 0x2c, 0xe0, 0xc2, 0xac, 0x4f, 0x34, 0xc8, 0xa7, 0x37, 0xa6, 0xe4, + 0x46, 0x5a, 0x3d, 0xec, 0xa5, 0x79, 0xce, 0x2d, 0x7d, 0x0a, 0x09, 0x68, 0xf2, 0xa6, 0x34, 0x79, + 0x9d, 0xdc, 0xea, 0x6c, 0x72, 0xa7, 0x8e, 0xd9, 0xac, 0x3a, 0xde, 0x03, 0xf3, 0x7e, 0x9d, 0xb9, + 0xa6, 0xe8, 0xc6, 0x8b, 0xef, 0x25, 0x5b, 0xf4, 0xc7, 0xcb, 0xeb, 0x4f, 0x9e, 0xe5, 0xb5, 0xa7, + 0xcf, 0xf2, 0xda, 0xbf, 0x9e, 0xe5, 0xb5, 0x1f, 0x3e, 0xcf, 0x1f, 0x7a, 0xfa, 0x3c, 0x7f, 0xe8, + 0xef, 0xcf, 0xf3, 0x87, 0xbe, 0x35, 0x97, 0x78, 0x4e, 0xa0, 0xb6, 0xd9, 0xaa, 0xb5, 0xe5, 0x47, + 0xaa, 0xdf, 0x9d, 0xbf, 0x56, 0xdc, 0x55, 0x00, 0xe4, 0xe3, 0x62, 0x6b, 0x58, 0x8e, 0x46, 0xae, + 0xfe, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x0b, 0xaf, 0xd8, 0xf4, 0xc5, 0x1d, 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 + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type QueryClient interface { + Pools(ctx context.Context, in *QueryPoolsRequest, opts ...grpc.CallOption) (*QueryPoolsResponse, error) + // Deprecated: please use the alternative in x/poolmanager + NumPools(ctx context.Context, in *QueryNumPoolsRequest, opts ...grpc.CallOption) (*QueryNumPoolsResponse, error) + TotalLiquidity(ctx context.Context, in *QueryTotalLiquidityRequest, opts ...grpc.CallOption) (*QueryTotalLiquidityResponse, error) + // PoolsWithFilter allows you to query specific pools with requested + // parameters + PoolsWithFilter(ctx context.Context, in *QueryPoolsWithFilterRequest, opts ...grpc.CallOption) (*QueryPoolsWithFilterResponse, error) + // Deprecated: please use the alternative in x/poolmanager + Pool(ctx context.Context, in *QueryPoolRequest, opts ...grpc.CallOption) (*QueryPoolResponse, error) + // PoolType returns the type of the pool. + // Returns "Balancer" as a string literal when the pool is a balancer pool. + // Errors if the pool is failed to be type caseted. + PoolType(ctx context.Context, in *QueryPoolTypeRequest, opts ...grpc.CallOption) (*QueryPoolTypeResponse, error) + // Simulates joining pool without a swap. Returns the amount of shares you'd + // get and tokens needed to provide + CalcJoinPoolNoSwapShares(ctx context.Context, in *QueryCalcJoinPoolNoSwapSharesRequest, opts ...grpc.CallOption) (*QueryCalcJoinPoolNoSwapSharesResponse, error) + CalcJoinPoolShares(ctx context.Context, in *QueryCalcJoinPoolSharesRequest, opts ...grpc.CallOption) (*QueryCalcJoinPoolSharesResponse, error) + CalcExitPoolCoinsFromShares(ctx context.Context, in *QueryCalcExitPoolCoinsFromSharesRequest, opts ...grpc.CallOption) (*QueryCalcExitPoolCoinsFromSharesResponse, error) + PoolParams(ctx context.Context, in *QueryPoolParamsRequest, opts ...grpc.CallOption) (*QueryPoolParamsResponse, error) + // Deprecated: please use the alternative in x/poolmanager + TotalPoolLiquidity(ctx context.Context, in *QueryTotalPoolLiquidityRequest, opts ...grpc.CallOption) (*QueryTotalPoolLiquidityResponse, error) + TotalShares(ctx context.Context, in *QueryTotalSharesRequest, opts ...grpc.CallOption) (*QueryTotalSharesResponse, error) + // SpotPrice defines a gRPC query handler that returns the spot price given + // a base denomination and a quote denomination. + SpotPrice(ctx context.Context, in *QuerySpotPriceRequest, opts ...grpc.CallOption) (*QuerySpotPriceResponse, error) + // Deprecated: please use the alternative in x/poolmanager + EstimateSwapExactAmountIn(ctx context.Context, in *QuerySwapExactAmountInRequest, opts ...grpc.CallOption) (*QuerySwapExactAmountInResponse, error) + // Deprecated: please use the alternative in x/poolmanager + EstimateSwapExactAmountOut(ctx context.Context, in *QuerySwapExactAmountOutRequest, opts ...grpc.CallOption) (*QuerySwapExactAmountOutResponse, error) + // ConcentratedPoolIdLinkFromBalancer returns the pool id of the concentrated + // pool that is linked with the given CFMM pool. + ConcentratedPoolIdLinkFromCFMM(ctx context.Context, in *QueryConcentratedPoolIdLinkFromCFMMRequest, opts ...grpc.CallOption) (*QueryConcentratedPoolIdLinkFromCFMMResponse, error) +} + +type queryClient struct { + cc grpc1.ClientConn +} + +func NewQueryClient(cc grpc1.ClientConn) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) Pools(ctx context.Context, in *QueryPoolsRequest, opts ...grpc.CallOption) (*QueryPoolsResponse, error) { + out := new(QueryPoolsResponse) + err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/Pools", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Deprecated: Do not use. +func (c *queryClient) NumPools(ctx context.Context, in *QueryNumPoolsRequest, opts ...grpc.CallOption) (*QueryNumPoolsResponse, error) { + out := new(QueryNumPoolsResponse) + err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/NumPools", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) TotalLiquidity(ctx context.Context, in *QueryTotalLiquidityRequest, opts ...grpc.CallOption) (*QueryTotalLiquidityResponse, error) { + out := new(QueryTotalLiquidityResponse) + err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/TotalLiquidity", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) PoolsWithFilter(ctx context.Context, in *QueryPoolsWithFilterRequest, opts ...grpc.CallOption) (*QueryPoolsWithFilterResponse, error) { + out := new(QueryPoolsWithFilterResponse) + err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/PoolsWithFilter", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Deprecated: Do not use. +func (c *queryClient) Pool(ctx context.Context, in *QueryPoolRequest, opts ...grpc.CallOption) (*QueryPoolResponse, error) { + out := new(QueryPoolResponse) + err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/Pool", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) PoolType(ctx context.Context, in *QueryPoolTypeRequest, opts ...grpc.CallOption) (*QueryPoolTypeResponse, error) { + out := new(QueryPoolTypeResponse) + err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/PoolType", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) CalcJoinPoolNoSwapShares(ctx context.Context, in *QueryCalcJoinPoolNoSwapSharesRequest, opts ...grpc.CallOption) (*QueryCalcJoinPoolNoSwapSharesResponse, error) { + out := new(QueryCalcJoinPoolNoSwapSharesResponse) + err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/CalcJoinPoolNoSwapShares", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) CalcJoinPoolShares(ctx context.Context, in *QueryCalcJoinPoolSharesRequest, opts ...grpc.CallOption) (*QueryCalcJoinPoolSharesResponse, error) { + out := new(QueryCalcJoinPoolSharesResponse) + err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/CalcJoinPoolShares", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) CalcExitPoolCoinsFromShares(ctx context.Context, in *QueryCalcExitPoolCoinsFromSharesRequest, opts ...grpc.CallOption) (*QueryCalcExitPoolCoinsFromSharesResponse, error) { + out := new(QueryCalcExitPoolCoinsFromSharesResponse) + err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/CalcExitPoolCoinsFromShares", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) PoolParams(ctx context.Context, in *QueryPoolParamsRequest, opts ...grpc.CallOption) (*QueryPoolParamsResponse, error) { + out := new(QueryPoolParamsResponse) + err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/PoolParams", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Deprecated: Do not use. +func (c *queryClient) TotalPoolLiquidity(ctx context.Context, in *QueryTotalPoolLiquidityRequest, opts ...grpc.CallOption) (*QueryTotalPoolLiquidityResponse, error) { + out := new(QueryTotalPoolLiquidityResponse) + err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/TotalPoolLiquidity", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) TotalShares(ctx context.Context, in *QueryTotalSharesRequest, opts ...grpc.CallOption) (*QueryTotalSharesResponse, error) { + out := new(QueryTotalSharesResponse) + err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/TotalShares", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Deprecated: Do not use. +func (c *queryClient) SpotPrice(ctx context.Context, in *QuerySpotPriceRequest, opts ...grpc.CallOption) (*QuerySpotPriceResponse, error) { + out := new(QuerySpotPriceResponse) + err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/SpotPrice", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Deprecated: Do not use. +func (c *queryClient) EstimateSwapExactAmountIn(ctx context.Context, in *QuerySwapExactAmountInRequest, opts ...grpc.CallOption) (*QuerySwapExactAmountInResponse, error) { + out := new(QuerySwapExactAmountInResponse) + err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/EstimateSwapExactAmountIn", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Deprecated: Do not use. +func (c *queryClient) EstimateSwapExactAmountOut(ctx context.Context, in *QuerySwapExactAmountOutRequest, opts ...grpc.CallOption) (*QuerySwapExactAmountOutResponse, error) { + out := new(QuerySwapExactAmountOutResponse) + err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/EstimateSwapExactAmountOut", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) ConcentratedPoolIdLinkFromCFMM(ctx context.Context, in *QueryConcentratedPoolIdLinkFromCFMMRequest, opts ...grpc.CallOption) (*QueryConcentratedPoolIdLinkFromCFMMResponse, error) { + out := new(QueryConcentratedPoolIdLinkFromCFMMResponse) + err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/ConcentratedPoolIdLinkFromCFMM", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +type QueryServer interface { + Pools(context.Context, *QueryPoolsRequest) (*QueryPoolsResponse, error) + // Deprecated: please use the alternative in x/poolmanager + NumPools(context.Context, *QueryNumPoolsRequest) (*QueryNumPoolsResponse, error) + TotalLiquidity(context.Context, *QueryTotalLiquidityRequest) (*QueryTotalLiquidityResponse, error) + // PoolsWithFilter allows you to query specific pools with requested + // parameters + PoolsWithFilter(context.Context, *QueryPoolsWithFilterRequest) (*QueryPoolsWithFilterResponse, error) + // Deprecated: please use the alternative in x/poolmanager + Pool(context.Context, *QueryPoolRequest) (*QueryPoolResponse, error) + // PoolType returns the type of the pool. + // Returns "Balancer" as a string literal when the pool is a balancer pool. + // Errors if the pool is failed to be type caseted. + PoolType(context.Context, *QueryPoolTypeRequest) (*QueryPoolTypeResponse, error) + // Simulates joining pool without a swap. Returns the amount of shares you'd + // get and tokens needed to provide + CalcJoinPoolNoSwapShares(context.Context, *QueryCalcJoinPoolNoSwapSharesRequest) (*QueryCalcJoinPoolNoSwapSharesResponse, error) + CalcJoinPoolShares(context.Context, *QueryCalcJoinPoolSharesRequest) (*QueryCalcJoinPoolSharesResponse, error) + CalcExitPoolCoinsFromShares(context.Context, *QueryCalcExitPoolCoinsFromSharesRequest) (*QueryCalcExitPoolCoinsFromSharesResponse, error) + PoolParams(context.Context, *QueryPoolParamsRequest) (*QueryPoolParamsResponse, error) + // Deprecated: please use the alternative in x/poolmanager + TotalPoolLiquidity(context.Context, *QueryTotalPoolLiquidityRequest) (*QueryTotalPoolLiquidityResponse, error) + TotalShares(context.Context, *QueryTotalSharesRequest) (*QueryTotalSharesResponse, error) + // SpotPrice defines a gRPC query handler that returns the spot price given + // a base denomination and a quote denomination. + SpotPrice(context.Context, *QuerySpotPriceRequest) (*QuerySpotPriceResponse, error) + // Deprecated: please use the alternative in x/poolmanager + EstimateSwapExactAmountIn(context.Context, *QuerySwapExactAmountInRequest) (*QuerySwapExactAmountInResponse, error) + // Deprecated: please use the alternative in x/poolmanager + EstimateSwapExactAmountOut(context.Context, *QuerySwapExactAmountOutRequest) (*QuerySwapExactAmountOutResponse, error) + // ConcentratedPoolIdLinkFromBalancer returns the pool id of the concentrated + // pool that is linked with the given CFMM pool. + ConcentratedPoolIdLinkFromCFMM(context.Context, *QueryConcentratedPoolIdLinkFromCFMMRequest) (*QueryConcentratedPoolIdLinkFromCFMMResponse, error) +} + +// UnimplementedQueryServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (*UnimplementedQueryServer) Pools(ctx context.Context, req *QueryPoolsRequest) (*QueryPoolsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Pools not implemented") +} +func (*UnimplementedQueryServer) NumPools(ctx context.Context, req *QueryNumPoolsRequest) (*QueryNumPoolsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method NumPools not implemented") +} +func (*UnimplementedQueryServer) TotalLiquidity(ctx context.Context, req *QueryTotalLiquidityRequest) (*QueryTotalLiquidityResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TotalLiquidity not implemented") +} +func (*UnimplementedQueryServer) PoolsWithFilter(ctx context.Context, req *QueryPoolsWithFilterRequest) (*QueryPoolsWithFilterResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PoolsWithFilter not implemented") +} +func (*UnimplementedQueryServer) Pool(ctx context.Context, req *QueryPoolRequest) (*QueryPoolResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Pool not implemented") +} +func (*UnimplementedQueryServer) PoolType(ctx context.Context, req *QueryPoolTypeRequest) (*QueryPoolTypeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PoolType not implemented") +} +func (*UnimplementedQueryServer) CalcJoinPoolNoSwapShares(ctx context.Context, req *QueryCalcJoinPoolNoSwapSharesRequest) (*QueryCalcJoinPoolNoSwapSharesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CalcJoinPoolNoSwapShares not implemented") +} +func (*UnimplementedQueryServer) CalcJoinPoolShares(ctx context.Context, req *QueryCalcJoinPoolSharesRequest) (*QueryCalcJoinPoolSharesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CalcJoinPoolShares not implemented") +} +func (*UnimplementedQueryServer) CalcExitPoolCoinsFromShares(ctx context.Context, req *QueryCalcExitPoolCoinsFromSharesRequest) (*QueryCalcExitPoolCoinsFromSharesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CalcExitPoolCoinsFromShares not implemented") +} +func (*UnimplementedQueryServer) PoolParams(ctx context.Context, req *QueryPoolParamsRequest) (*QueryPoolParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PoolParams not implemented") +} +func (*UnimplementedQueryServer) TotalPoolLiquidity(ctx context.Context, req *QueryTotalPoolLiquidityRequest) (*QueryTotalPoolLiquidityResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TotalPoolLiquidity not implemented") +} +func (*UnimplementedQueryServer) TotalShares(ctx context.Context, req *QueryTotalSharesRequest) (*QueryTotalSharesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TotalShares not implemented") +} +func (*UnimplementedQueryServer) SpotPrice(ctx context.Context, req *QuerySpotPriceRequest) (*QuerySpotPriceResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SpotPrice not implemented") +} +func (*UnimplementedQueryServer) EstimateSwapExactAmountIn(ctx context.Context, req *QuerySwapExactAmountInRequest) (*QuerySwapExactAmountInResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EstimateSwapExactAmountIn not implemented") +} +func (*UnimplementedQueryServer) EstimateSwapExactAmountOut(ctx context.Context, req *QuerySwapExactAmountOutRequest) (*QuerySwapExactAmountOutResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EstimateSwapExactAmountOut not implemented") +} +func (*UnimplementedQueryServer) ConcentratedPoolIdLinkFromCFMM(ctx context.Context, req *QueryConcentratedPoolIdLinkFromCFMMRequest) (*QueryConcentratedPoolIdLinkFromCFMMResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ConcentratedPoolIdLinkFromCFMM not implemented") +} + +func RegisterQueryServer(s grpc1.Server, srv QueryServer) { + s.RegisterService(&_Query_serviceDesc, srv) +} + +func _Query_Pools_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryPoolsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Pools(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.gamm.v1beta1.Query/Pools", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Pools(ctx, req.(*QueryPoolsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_NumPools_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryNumPoolsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).NumPools(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.gamm.v1beta1.Query/NumPools", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).NumPools(ctx, req.(*QueryNumPoolsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_TotalLiquidity_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTotalLiquidityRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).TotalLiquidity(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.gamm.v1beta1.Query/TotalLiquidity", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).TotalLiquidity(ctx, req.(*QueryTotalLiquidityRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_PoolsWithFilter_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryPoolsWithFilterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).PoolsWithFilter(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.gamm.v1beta1.Query/PoolsWithFilter", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).PoolsWithFilter(ctx, req.(*QueryPoolsWithFilterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_Pool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryPoolRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Pool(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.gamm.v1beta1.Query/Pool", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Pool(ctx, req.(*QueryPoolRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_PoolType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryPoolTypeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).PoolType(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.gamm.v1beta1.Query/PoolType", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).PoolType(ctx, req.(*QueryPoolTypeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_CalcJoinPoolNoSwapShares_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryCalcJoinPoolNoSwapSharesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).CalcJoinPoolNoSwapShares(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.gamm.v1beta1.Query/CalcJoinPoolNoSwapShares", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).CalcJoinPoolNoSwapShares(ctx, req.(*QueryCalcJoinPoolNoSwapSharesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_CalcJoinPoolShares_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryCalcJoinPoolSharesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).CalcJoinPoolShares(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.gamm.v1beta1.Query/CalcJoinPoolShares", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).CalcJoinPoolShares(ctx, req.(*QueryCalcJoinPoolSharesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_CalcExitPoolCoinsFromShares_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryCalcExitPoolCoinsFromSharesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).CalcExitPoolCoinsFromShares(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.gamm.v1beta1.Query/CalcExitPoolCoinsFromShares", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).CalcExitPoolCoinsFromShares(ctx, req.(*QueryCalcExitPoolCoinsFromSharesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_PoolParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryPoolParamsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).PoolParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.gamm.v1beta1.Query/PoolParams", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).PoolParams(ctx, req.(*QueryPoolParamsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_TotalPoolLiquidity_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTotalPoolLiquidityRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).TotalPoolLiquidity(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.gamm.v1beta1.Query/TotalPoolLiquidity", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).TotalPoolLiquidity(ctx, req.(*QueryTotalPoolLiquidityRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_TotalShares_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTotalSharesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).TotalShares(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.gamm.v1beta1.Query/TotalShares", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).TotalShares(ctx, req.(*QueryTotalSharesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_SpotPrice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QuerySpotPriceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).SpotPrice(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.gamm.v1beta1.Query/SpotPrice", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).SpotPrice(ctx, req.(*QuerySpotPriceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_EstimateSwapExactAmountIn_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QuerySwapExactAmountInRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).EstimateSwapExactAmountIn(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.gamm.v1beta1.Query/EstimateSwapExactAmountIn", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).EstimateSwapExactAmountIn(ctx, req.(*QuerySwapExactAmountInRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_EstimateSwapExactAmountOut_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QuerySwapExactAmountOutRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).EstimateSwapExactAmountOut(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.gamm.v1beta1.Query/EstimateSwapExactAmountOut", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).EstimateSwapExactAmountOut(ctx, req.(*QuerySwapExactAmountOutRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_ConcentratedPoolIdLinkFromCFMM_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryConcentratedPoolIdLinkFromCFMMRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ConcentratedPoolIdLinkFromCFMM(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.gamm.v1beta1.Query/ConcentratedPoolIdLinkFromCFMM", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ConcentratedPoolIdLinkFromCFMM(ctx, req.(*QueryConcentratedPoolIdLinkFromCFMMRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Query_serviceDesc = grpc.ServiceDesc{ + ServiceName: "osmosis.gamm.v1beta1.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Pools", + Handler: _Query_Pools_Handler, + }, + { + MethodName: "NumPools", + Handler: _Query_NumPools_Handler, + }, + { + MethodName: "TotalLiquidity", + Handler: _Query_TotalLiquidity_Handler, + }, + { + MethodName: "PoolsWithFilter", + Handler: _Query_PoolsWithFilter_Handler, + }, + { + MethodName: "Pool", + Handler: _Query_Pool_Handler, + }, + { + MethodName: "PoolType", + Handler: _Query_PoolType_Handler, + }, + { + MethodName: "CalcJoinPoolNoSwapShares", + Handler: _Query_CalcJoinPoolNoSwapShares_Handler, + }, + { + MethodName: "CalcJoinPoolShares", + Handler: _Query_CalcJoinPoolShares_Handler, + }, + { + MethodName: "CalcExitPoolCoinsFromShares", + Handler: _Query_CalcExitPoolCoinsFromShares_Handler, + }, + { + MethodName: "PoolParams", + Handler: _Query_PoolParams_Handler, + }, + { + MethodName: "TotalPoolLiquidity", + Handler: _Query_TotalPoolLiquidity_Handler, + }, + { + MethodName: "TotalShares", + Handler: _Query_TotalShares_Handler, + }, + { + MethodName: "SpotPrice", + Handler: _Query_SpotPrice_Handler, + }, + { + MethodName: "EstimateSwapExactAmountIn", + Handler: _Query_EstimateSwapExactAmountIn_Handler, + }, + { + MethodName: "EstimateSwapExactAmountOut", + Handler: _Query_EstimateSwapExactAmountOut_Handler, + }, + { + MethodName: "ConcentratedPoolIdLinkFromCFMM", + Handler: _Query_ConcentratedPoolIdLinkFromCFMM_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "osmosis/gamm/v1beta1/query.proto", +} + +func (m *QueryPoolRequest) 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 *QueryPoolRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryPoolRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.PoolId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryPoolResponse) 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 *QueryPoolResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pool != nil { + { + size, err := m.Pool.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryPoolsRequest) 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 *QueryPoolsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryPoolsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + return len(dAtA) - i, nil +} + +func (m *QueryPoolsResponse) 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 *QueryPoolsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryPoolsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.Pools) > 0 { + for iNdEx := len(m.Pools) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Pools[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryNumPoolsRequest) 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 *QueryNumPoolsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryNumPoolsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryNumPoolsResponse) 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 *QueryNumPoolsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryNumPoolsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.NumPools != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.NumPools)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryPoolTypeRequest) 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 *QueryPoolTypeRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryPoolTypeRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.PoolId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryPoolTypeResponse) 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 *QueryPoolTypeResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryPoolTypeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.PoolType) > 0 { + i -= len(m.PoolType) + copy(dAtA[i:], m.PoolType) + i = encodeVarintQuery(dAtA, i, uint64(len(m.PoolType))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryCalcJoinPoolSharesRequest) 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 *QueryCalcJoinPoolSharesRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryCalcJoinPoolSharesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TokensIn) > 0 { + for iNdEx := len(m.TokensIn) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TokensIn[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if m.PoolId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryCalcJoinPoolSharesResponse) 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 *QueryCalcJoinPoolSharesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryCalcJoinPoolSharesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TokensOut) > 0 { + for iNdEx := len(m.TokensOut) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TokensOut[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size := m.ShareOutAmount.Size() + i -= size + if _, err := m.ShareOutAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryCalcExitPoolCoinsFromSharesRequest) 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 *QueryCalcExitPoolCoinsFromSharesRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryCalcExitPoolCoinsFromSharesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.ShareInAmount.Size() + i -= size + if _, err := m.ShareInAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if m.PoolId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryCalcExitPoolCoinsFromSharesResponse) 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 *QueryCalcExitPoolCoinsFromSharesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryCalcExitPoolCoinsFromSharesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TokensOut) > 0 { + for iNdEx := len(m.TokensOut) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TokensOut[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryPoolParamsRequest) 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 *QueryPoolParamsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryPoolParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.PoolId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryPoolParamsResponse) 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 *QueryPoolParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryPoolParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Params != nil { + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryTotalPoolLiquidityRequest) 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 *QueryTotalPoolLiquidityRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTotalPoolLiquidityRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.PoolId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryTotalPoolLiquidityResponse) 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 *QueryTotalPoolLiquidityResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTotalPoolLiquidityResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Liquidity) > 0 { + for iNdEx := len(m.Liquidity) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Liquidity[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryTotalSharesRequest) 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 *QueryTotalSharesRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTotalSharesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.PoolId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryTotalSharesResponse) 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 *QueryTotalSharesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTotalSharesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.TotalShares.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryCalcJoinPoolNoSwapSharesRequest) 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 *QueryCalcJoinPoolNoSwapSharesRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryCalcJoinPoolNoSwapSharesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TokensIn) > 0 { + for iNdEx := len(m.TokensIn) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TokensIn[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if m.PoolId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryCalcJoinPoolNoSwapSharesResponse) 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 *QueryCalcJoinPoolNoSwapSharesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryCalcJoinPoolNoSwapSharesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.SharesOut.Size() + i -= size + if _, err := m.SharesOut.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.TokensOut) > 0 { + for iNdEx := len(m.TokensOut) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TokensOut[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QuerySpotPriceRequest) 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 *QuerySpotPriceRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuerySpotPriceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.QuoteAssetDenom) > 0 { + i -= len(m.QuoteAssetDenom) + copy(dAtA[i:], m.QuoteAssetDenom) + i = encodeVarintQuery(dAtA, i, uint64(len(m.QuoteAssetDenom))) + i-- + dAtA[i] = 0x1a + } + if len(m.BaseAssetDenom) > 0 { + i -= len(m.BaseAssetDenom) + copy(dAtA[i:], m.BaseAssetDenom) + i = encodeVarintQuery(dAtA, i, uint64(len(m.BaseAssetDenom))) + i-- + dAtA[i] = 0x12 + } + if m.PoolId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryPoolsWithFilterRequest) 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 *QueryPoolsWithFilterRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryPoolsWithFilterRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if len(m.PoolType) > 0 { + i -= len(m.PoolType) + copy(dAtA[i:], m.PoolType) + i = encodeVarintQuery(dAtA, i, uint64(len(m.PoolType))) + i-- + dAtA[i] = 0x12 + } + if len(m.MinLiquidity) > 0 { + i -= len(m.MinLiquidity) + copy(dAtA[i:], m.MinLiquidity) + i = encodeVarintQuery(dAtA, i, uint64(len(m.MinLiquidity))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryPoolsWithFilterResponse) 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 *QueryPoolsWithFilterResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryPoolsWithFilterResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.Pools) > 0 { + for iNdEx := len(m.Pools) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Pools[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QuerySpotPriceResponse) 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 *QuerySpotPriceResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuerySpotPriceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.SpotPrice) > 0 { + i -= len(m.SpotPrice) + copy(dAtA[i:], m.SpotPrice) + i = encodeVarintQuery(dAtA, i, uint64(len(m.SpotPrice))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QuerySwapExactAmountInRequest) 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 *QuerySwapExactAmountInRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuerySwapExactAmountInRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Routes) > 0 { + for iNdEx := len(m.Routes) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Routes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + if len(m.TokenIn) > 0 { + i -= len(m.TokenIn) + copy(dAtA[i:], m.TokenIn) + i = encodeVarintQuery(dAtA, i, uint64(len(m.TokenIn))) + i-- + dAtA[i] = 0x1a + } + if m.PoolId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) + i-- + dAtA[i] = 0x10 + } + if len(m.Sender) > 0 { + i -= len(m.Sender) + copy(dAtA[i:], m.Sender) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Sender))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QuerySwapExactAmountInResponse) 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 *QuerySwapExactAmountInResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuerySwapExactAmountInResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.TokenOutAmount.Size() + i -= size + if _, err := m.TokenOutAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QuerySwapExactAmountOutRequest) 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 *QuerySwapExactAmountOutRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuerySwapExactAmountOutRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TokenOut) > 0 { + i -= len(m.TokenOut) + copy(dAtA[i:], m.TokenOut) + i = encodeVarintQuery(dAtA, i, uint64(len(m.TokenOut))) + i-- + dAtA[i] = 0x22 + } + if len(m.Routes) > 0 { + for iNdEx := len(m.Routes) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Routes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if m.PoolId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) + i-- + dAtA[i] = 0x10 + } + if len(m.Sender) > 0 { + i -= len(m.Sender) + copy(dAtA[i:], m.Sender) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Sender))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QuerySwapExactAmountOutResponse) 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 *QuerySwapExactAmountOutResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuerySwapExactAmountOutResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.TokenInAmount.Size() + i -= size + if _, err := m.TokenInAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryTotalLiquidityRequest) 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 *QueryTotalLiquidityRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTotalLiquidityRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryTotalLiquidityResponse) 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 *QueryTotalLiquidityResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTotalLiquidityResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Liquidity) > 0 { + for iNdEx := len(m.Liquidity) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Liquidity[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryConcentratedPoolIdLinkFromCFMMRequest) 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 *QueryConcentratedPoolIdLinkFromCFMMRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryConcentratedPoolIdLinkFromCFMMRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.CfmmPoolId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.CfmmPoolId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryConcentratedPoolIdLinkFromCFMMResponse) 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 *QueryConcentratedPoolIdLinkFromCFMMResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryConcentratedPoolIdLinkFromCFMMResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ConcentratedPoolId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.ConcentratedPoolId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *QueryPoolRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PoolId != 0 { + n += 1 + sovQuery(uint64(m.PoolId)) + } + return n +} + +func (m *QueryPoolResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Pool != nil { + l = m.Pool.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryPoolsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryPoolsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Pools) > 0 { + for _, e := range m.Pools { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryNumPoolsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryNumPoolsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.NumPools != 0 { + n += 1 + sovQuery(uint64(m.NumPools)) + } + return n +} + +func (m *QueryPoolTypeRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PoolId != 0 { + n += 1 + sovQuery(uint64(m.PoolId)) + } + return n +} + +func (m *QueryPoolTypeResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.PoolType) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryCalcJoinPoolSharesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PoolId != 0 { + n += 1 + sovQuery(uint64(m.PoolId)) + } + if len(m.TokensIn) > 0 { + for _, e := range m.TokensIn { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryCalcJoinPoolSharesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ShareOutAmount.Size() + n += 1 + l + sovQuery(uint64(l)) + if len(m.TokensOut) > 0 { + for _, e := range m.TokensOut { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryCalcExitPoolCoinsFromSharesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PoolId != 0 { + n += 1 + sovQuery(uint64(m.PoolId)) + } + l = m.ShareInAmount.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryCalcExitPoolCoinsFromSharesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.TokensOut) > 0 { + for _, e := range m.TokensOut { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryPoolParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PoolId != 0 { + n += 1 + sovQuery(uint64(m.PoolId)) + } + return n +} + +func (m *QueryPoolParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Params != nil { + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryTotalPoolLiquidityRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PoolId != 0 { + n += 1 + sovQuery(uint64(m.PoolId)) + } + return n +} + +func (m *QueryTotalPoolLiquidityResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Liquidity) > 0 { + for _, e := range m.Liquidity { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryTotalSharesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PoolId != 0 { + n += 1 + sovQuery(uint64(m.PoolId)) + } + return n +} + +func (m *QueryTotalSharesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.TotalShares.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryCalcJoinPoolNoSwapSharesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PoolId != 0 { + n += 1 + sovQuery(uint64(m.PoolId)) + } + if len(m.TokensIn) > 0 { + for _, e := range m.TokensIn { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryCalcJoinPoolNoSwapSharesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.TokensOut) > 0 { + for _, e := range m.TokensOut { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + l = m.SharesOut.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QuerySpotPriceRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PoolId != 0 { + n += 1 + sovQuery(uint64(m.PoolId)) + } + l = len(m.BaseAssetDenom) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.QuoteAssetDenom) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryPoolsWithFilterRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.MinLiquidity) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.PoolType) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryPoolsWithFilterResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Pools) > 0 { + for _, e := range m.Pools { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QuerySpotPriceResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SpotPrice) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QuerySwapExactAmountInRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.PoolId != 0 { + n += 1 + sovQuery(uint64(m.PoolId)) + } + l = len(m.TokenIn) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if len(m.Routes) > 0 { + for _, e := range m.Routes { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QuerySwapExactAmountInResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.TokenOutAmount.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QuerySwapExactAmountOutRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.PoolId != 0 { + n += 1 + sovQuery(uint64(m.PoolId)) + } + if len(m.Routes) > 0 { + for _, e := range m.Routes { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + l = len(m.TokenOut) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QuerySwapExactAmountOutResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.TokenInAmount.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryTotalLiquidityRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryTotalLiquidityResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Liquidity) > 0 { + for _, e := range m.Liquidity { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryConcentratedPoolIdLinkFromCFMMRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.CfmmPoolId != 0 { + n += 1 + sovQuery(uint64(m.CfmmPoolId)) + } + return n +} + +func (m *QueryConcentratedPoolIdLinkFromCFMMResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.ConcentratedPoolId != 0 { + n += 1 + sovQuery(uint64(m.ConcentratedPoolId)) + } + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryPoolRequest) 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 ErrIntOverflowQuery + } + 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: QueryPoolRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryPoolRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + } + m.PoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryPoolResponse) 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 ErrIntOverflowQuery + } + 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: QueryPoolResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pool", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pool == nil { + m.Pool = &types.Any{} + } + if err := m.Pool.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryPoolsRequest) 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 ErrIntOverflowQuery + } + 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: QueryPoolsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryPoolsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryPoolsResponse) 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 ErrIntOverflowQuery + } + 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: QueryPoolsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryPoolsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pools", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Pools = append(m.Pools, &types.Any{}) + if err := m.Pools[len(m.Pools)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryNumPoolsRequest) 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 ErrIntOverflowQuery + } + 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: QueryNumPoolsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryNumPoolsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryNumPoolsResponse) 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 ErrIntOverflowQuery + } + 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: QueryNumPoolsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryNumPoolsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NumPools", wireType) + } + m.NumPools = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NumPools |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryPoolTypeRequest) 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 ErrIntOverflowQuery + } + 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: QueryPoolTypeRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryPoolTypeRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + } + m.PoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryPoolTypeResponse) 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 ErrIntOverflowQuery + } + 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: QueryPoolTypeResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryPoolTypeResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolType", 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.PoolType = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryCalcJoinPoolSharesRequest) 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 ErrIntOverflowQuery + } + 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: QueryCalcJoinPoolSharesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryCalcJoinPoolSharesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + } + m.PoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokensIn", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TokensIn = append(m.TokensIn, types1.Coin{}) + if err := m.TokensIn[len(m.TokensIn)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryCalcJoinPoolSharesResponse) 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 ErrIntOverflowQuery + } + 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: QueryCalcJoinPoolSharesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryCalcJoinPoolSharesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ShareOutAmount", 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 + } + if err := m.ShareOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokensOut", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TokensOut = append(m.TokensOut, types1.Coin{}) + if err := m.TokensOut[len(m.TokensOut)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryCalcExitPoolCoinsFromSharesRequest) 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 ErrIntOverflowQuery + } + 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: QueryCalcExitPoolCoinsFromSharesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryCalcExitPoolCoinsFromSharesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + } + m.PoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ShareInAmount", 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 + } + if err := m.ShareInAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryCalcExitPoolCoinsFromSharesResponse) 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 ErrIntOverflowQuery + } + 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: QueryCalcExitPoolCoinsFromSharesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryCalcExitPoolCoinsFromSharesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokensOut", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TokensOut = append(m.TokensOut, types1.Coin{}) + if err := m.TokensOut[len(m.TokensOut)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryPoolParamsRequest) 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 ErrIntOverflowQuery + } + 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: QueryPoolParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryPoolParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + } + m.PoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryPoolParamsResponse) 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 ErrIntOverflowQuery + } + 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: QueryPoolParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryPoolParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Params == nil { + m.Params = &types.Any{} + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryTotalPoolLiquidityRequest) 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 ErrIntOverflowQuery + } + 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: QueryTotalPoolLiquidityRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryTotalPoolLiquidityRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + } + m.PoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryTotalPoolLiquidityResponse) 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 ErrIntOverflowQuery + } + 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: QueryTotalPoolLiquidityResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryTotalPoolLiquidityResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Liquidity", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Liquidity = append(m.Liquidity, types1.Coin{}) + if err := m.Liquidity[len(m.Liquidity)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryTotalSharesRequest) 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 ErrIntOverflowQuery + } + 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: QueryTotalSharesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryTotalSharesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + } + m.PoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryTotalSharesResponse) 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 ErrIntOverflowQuery + } + 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: QueryTotalSharesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryTotalSharesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TotalShares", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.TotalShares.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryCalcJoinPoolNoSwapSharesRequest) 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 ErrIntOverflowQuery + } + 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: QueryCalcJoinPoolNoSwapSharesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryCalcJoinPoolNoSwapSharesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + } + m.PoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokensIn", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TokensIn = append(m.TokensIn, types1.Coin{}) + if err := m.TokensIn[len(m.TokensIn)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryCalcJoinPoolNoSwapSharesResponse) 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 ErrIntOverflowQuery + } + 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: QueryCalcJoinPoolNoSwapSharesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryCalcJoinPoolNoSwapSharesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokensOut", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TokensOut = append(m.TokensOut, types1.Coin{}) + if err := m.TokensOut[len(m.TokensOut)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SharesOut", 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 + } + if err := m.SharesOut.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QuerySpotPriceRequest) 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 ErrIntOverflowQuery + } + 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: QuerySpotPriceRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QuerySpotPriceRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + } + m.PoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BaseAssetDenom", 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.BaseAssetDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field QuoteAssetDenom", 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.QuoteAssetDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryPoolsWithFilterRequest) 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 ErrIntOverflowQuery + } + 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: QueryPoolsWithFilterRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryPoolsWithFilterRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MinLiquidity", 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.MinLiquidity = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolType", 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.PoolType = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryPoolsWithFilterResponse) 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 ErrIntOverflowQuery + } + 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: QueryPoolsWithFilterResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryPoolsWithFilterResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pools", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Pools = append(m.Pools, &types.Any{}) + if err := m.Pools[len(m.Pools)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QuerySpotPriceResponse) 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 ErrIntOverflowQuery + } + 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: QuerySpotPriceResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QuerySpotPriceResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SpotPrice", 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.SpotPrice = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QuerySwapExactAmountInRequest) 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 ErrIntOverflowQuery + } + 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: QuerySwapExactAmountInRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QuerySwapExactAmountInRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + 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 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.Sender = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + } + m.PoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", 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.TokenIn = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Routes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Routes = append(m.Routes, types2.SwapAmountInRoute{}) + if err := m.Routes[len(m.Routes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QuerySwapExactAmountInResponse) 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 ErrIntOverflowQuery + } + 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: QuerySwapExactAmountInResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QuerySwapExactAmountInResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenOutAmount", 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 + } + if err := m.TokenOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QuerySwapExactAmountOutRequest) 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 ErrIntOverflowQuery + } + 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: QuerySwapExactAmountOutRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QuerySwapExactAmountOutRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + 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 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.Sender = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + } + m.PoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Routes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Routes = append(m.Routes, types2.SwapAmountOutRoute{}) + if err := m.Routes[len(m.Routes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenOut", 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.TokenOut = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QuerySwapExactAmountOutResponse) 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 ErrIntOverflowQuery + } + 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: QuerySwapExactAmountOutResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QuerySwapExactAmountOutResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenInAmount", 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 + } + if err := m.TokenInAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryTotalLiquidityRequest) 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 ErrIntOverflowQuery + } + 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: QueryTotalLiquidityRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryTotalLiquidityRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryTotalLiquidityResponse) 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 ErrIntOverflowQuery + } + 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: QueryTotalLiquidityResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryTotalLiquidityResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Liquidity", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Liquidity = append(m.Liquidity, types1.Coin{}) + if err := m.Liquidity[len(m.Liquidity)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryConcentratedPoolIdLinkFromCFMMRequest) 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 ErrIntOverflowQuery + } + 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: QueryConcentratedPoolIdLinkFromCFMMRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryConcentratedPoolIdLinkFromCFMMRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CfmmPoolId", wireType) + } + m.CfmmPoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.CfmmPoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryConcentratedPoolIdLinkFromCFMMResponse) 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 ErrIntOverflowQuery + } + 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: QueryConcentratedPoolIdLinkFromCFMMResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryConcentratedPoolIdLinkFromCFMMResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ConcentratedPoolId", wireType) + } + m.ConcentratedPoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ConcentratedPoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipQuery(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, ErrIntOverflowQuery + } + 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, ErrIntOverflowQuery + } + 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, ErrIntOverflowQuery + } + 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, ErrInvalidLengthQuery + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupQuery + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthQuery + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") +) diff --git a/tests/interchaintest/osmosistypes/gamm/types/query.pb.gw.go b/tests/interchaintest/osmosistypes/gamm/types/query.pb.gw.go index c1b4f7c7..1a44c3ac 100644 --- a/tests/interchaintest/osmosistypes/gamm/types/query.pb.gw.go +++ b/tests/interchaintest/osmosistypes/gamm/types/query.pb.gw.go @@ -771,6 +771,60 @@ func local_request_Query_EstimateSwapExactAmountOut_0(ctx context.Context, marsh } +func request_Query_ConcentratedPoolIdLinkFromCFMM_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryConcentratedPoolIdLinkFromCFMMRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["cfmm_pool_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "cfmm_pool_id") + } + + protoReq.CfmmPoolId, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "cfmm_pool_id", err) + } + + msg, err := client.ConcentratedPoolIdLinkFromCFMM(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_ConcentratedPoolIdLinkFromCFMM_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryConcentratedPoolIdLinkFromCFMMRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["cfmm_pool_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "cfmm_pool_id") + } + + protoReq.CfmmPoolId, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "cfmm_pool_id", err) + } + + msg, err := server.ConcentratedPoolIdLinkFromCFMM(ctx, &protoReq) + return msg, metadata, err + +} + // RegisterQueryHandlerServer registers the http handlers for service Query to "mux". // UnaryRPC :call QueryServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -1099,6 +1153,29 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) + mux.Handle("GET", pattern_Query_ConcentratedPoolIdLinkFromCFMM_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_ConcentratedPoolIdLinkFromCFMM_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_ConcentratedPoolIdLinkFromCFMM_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -1420,6 +1497,26 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) + mux.Handle("GET", pattern_Query_ConcentratedPoolIdLinkFromCFMM_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_ConcentratedPoolIdLinkFromCFMM_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_ConcentratedPoolIdLinkFromCFMM_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -1451,6 +1548,8 @@ var ( pattern_Query_EstimateSwapExactAmountIn_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5}, []string{"osmosis", "gamm", "v1beta1", "pool_id", "estimate", "swap_exact_amount_in"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_EstimateSwapExactAmountOut_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5}, []string{"osmosis", "gamm", "v1beta1", "pool_id", "estimate", "swap_exact_amount_out"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_ConcentratedPoolIdLinkFromCFMM_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"osmosis", "gamm", "v1beta1", "concentrated_pool_id_link_from_cfmm", "cfmm_pool_id"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( @@ -1481,4 +1580,6 @@ var ( forward_Query_EstimateSwapExactAmountIn_0 = runtime.ForwardResponseMessage forward_Query_EstimateSwapExactAmountOut_0 = runtime.ForwardResponseMessage + + forward_Query_ConcentratedPoolIdLinkFromCFMM_0 = runtime.ForwardResponseMessage ) diff --git a/tests/interchaintest/osmosistypes/gamm/types/tx.pb.go b/tests/interchaintest/osmosistypes/gamm/types/tx.pb.go new file mode 100644 index 00000000..54724c2f --- /dev/null +++ b/tests/interchaintest/osmosistypes/gamm/types/tx.pb.go @@ -0,0 +1,4568 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: osmosis/gamm/v1beta1/tx.proto + +package types + +import ( + context "context" + fmt "fmt" + github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + _ "github.com/gogo/protobuf/gogoproto" + grpc1 "github.com/gogo/protobuf/grpc" + proto "github.com/gogo/protobuf/proto" + types1 "github.com/notional-labs/fee-abstraction/tests/interchaintest/osmosistypes/poolmanager/types" + 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 + +// ===================== MsgJoinPool +// This is really MsgJoinPoolNoSwap +type MsgJoinPool struct { + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` + PoolId uint64 `protobuf:"varint,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` + ShareOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,3,opt,name=share_out_amount,json=shareOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_out_amount" yaml:"pool_amount_out"` + TokenInMaxs []types.Coin `protobuf:"bytes,4,rep,name=token_in_maxs,json=tokenInMaxs,proto3" json:"token_in_maxs" yaml:"token_in_max_amounts"` +} + +func (m *MsgJoinPool) Reset() { *m = MsgJoinPool{} } +func (m *MsgJoinPool) String() string { return proto.CompactTextString(m) } +func (*MsgJoinPool) ProtoMessage() {} +func (*MsgJoinPool) Descriptor() ([]byte, []int) { + return fileDescriptor_cfc8fd3ac7df3247, []int{0} +} +func (m *MsgJoinPool) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgJoinPool) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgJoinPool.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 *MsgJoinPool) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgJoinPool.Merge(m, src) +} +func (m *MsgJoinPool) XXX_Size() int { + return m.Size() +} +func (m *MsgJoinPool) XXX_DiscardUnknown() { + xxx_messageInfo_MsgJoinPool.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgJoinPool proto.InternalMessageInfo + +func (m *MsgJoinPool) GetSender() string { + if m != nil { + return m.Sender + } + return "" +} + +func (m *MsgJoinPool) GetPoolId() uint64 { + if m != nil { + return m.PoolId + } + return 0 +} + +func (m *MsgJoinPool) GetTokenInMaxs() []types.Coin { + if m != nil { + return m.TokenInMaxs + } + return nil +} + +type MsgJoinPoolResponse struct { + ShareOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=share_out_amount,json=shareOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_out_amount" yaml:"share_out_amount"` + TokenIn []types.Coin `protobuf:"bytes,2,rep,name=token_in,json=tokenIn,proto3" json:"token_in" yaml:"token_in"` +} + +func (m *MsgJoinPoolResponse) Reset() { *m = MsgJoinPoolResponse{} } +func (m *MsgJoinPoolResponse) String() string { return proto.CompactTextString(m) } +func (*MsgJoinPoolResponse) ProtoMessage() {} +func (*MsgJoinPoolResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_cfc8fd3ac7df3247, []int{1} +} +func (m *MsgJoinPoolResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgJoinPoolResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgJoinPoolResponse.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 *MsgJoinPoolResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgJoinPoolResponse.Merge(m, src) +} +func (m *MsgJoinPoolResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgJoinPoolResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgJoinPoolResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgJoinPoolResponse proto.InternalMessageInfo + +func (m *MsgJoinPoolResponse) GetTokenIn() []types.Coin { + if m != nil { + return m.TokenIn + } + return nil +} + +// ===================== MsgExitPool +type MsgExitPool struct { + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` + PoolId uint64 `protobuf:"varint,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` + ShareInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,3,opt,name=share_in_amount,json=shareInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_in_amount" yaml:"share_in_amount"` + TokenOutMins []types.Coin `protobuf:"bytes,4,rep,name=token_out_mins,json=tokenOutMins,proto3" json:"token_out_mins" yaml:"token_out_min_amounts"` +} + +func (m *MsgExitPool) Reset() { *m = MsgExitPool{} } +func (m *MsgExitPool) String() string { return proto.CompactTextString(m) } +func (*MsgExitPool) ProtoMessage() {} +func (*MsgExitPool) Descriptor() ([]byte, []int) { + return fileDescriptor_cfc8fd3ac7df3247, []int{2} +} +func (m *MsgExitPool) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgExitPool) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgExitPool.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 *MsgExitPool) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgExitPool.Merge(m, src) +} +func (m *MsgExitPool) XXX_Size() int { + return m.Size() +} +func (m *MsgExitPool) XXX_DiscardUnknown() { + xxx_messageInfo_MsgExitPool.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgExitPool proto.InternalMessageInfo + +func (m *MsgExitPool) GetSender() string { + if m != nil { + return m.Sender + } + return "" +} + +func (m *MsgExitPool) GetPoolId() uint64 { + if m != nil { + return m.PoolId + } + return 0 +} + +func (m *MsgExitPool) GetTokenOutMins() []types.Coin { + if m != nil { + return m.TokenOutMins + } + return nil +} + +type MsgExitPoolResponse struct { + TokenOut []types.Coin `protobuf:"bytes,1,rep,name=token_out,json=tokenOut,proto3" json:"token_out" yaml:"token_out"` +} + +func (m *MsgExitPoolResponse) Reset() { *m = MsgExitPoolResponse{} } +func (m *MsgExitPoolResponse) String() string { return proto.CompactTextString(m) } +func (*MsgExitPoolResponse) ProtoMessage() {} +func (*MsgExitPoolResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_cfc8fd3ac7df3247, []int{3} +} +func (m *MsgExitPoolResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgExitPoolResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgExitPoolResponse.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 *MsgExitPoolResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgExitPoolResponse.Merge(m, src) +} +func (m *MsgExitPoolResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgExitPoolResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgExitPoolResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgExitPoolResponse proto.InternalMessageInfo + +func (m *MsgExitPoolResponse) GetTokenOut() []types.Coin { + if m != nil { + return m.TokenOut + } + return nil +} + +// ===================== MsgSwapExactAmountIn +type MsgSwapExactAmountIn struct { + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` + Routes []types1.SwapAmountInRoute `protobuf:"bytes,2,rep,name=routes,proto3" json:"routes"` + TokenIn types.Coin `protobuf:"bytes,3,opt,name=token_in,json=tokenIn,proto3" json:"token_in" yaml:"token_in"` + TokenOutMinAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,4,opt,name=token_out_min_amount,json=tokenOutMinAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_out_min_amount" yaml:"token_out_min_amount"` +} + +func (m *MsgSwapExactAmountIn) Reset() { *m = MsgSwapExactAmountIn{} } +func (m *MsgSwapExactAmountIn) String() string { return proto.CompactTextString(m) } +func (*MsgSwapExactAmountIn) ProtoMessage() {} +func (*MsgSwapExactAmountIn) Descriptor() ([]byte, []int) { + return fileDescriptor_cfc8fd3ac7df3247, []int{4} +} +func (m *MsgSwapExactAmountIn) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSwapExactAmountIn) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSwapExactAmountIn.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 *MsgSwapExactAmountIn) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSwapExactAmountIn.Merge(m, src) +} +func (m *MsgSwapExactAmountIn) XXX_Size() int { + return m.Size() +} +func (m *MsgSwapExactAmountIn) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSwapExactAmountIn.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSwapExactAmountIn proto.InternalMessageInfo + +func (m *MsgSwapExactAmountIn) GetSender() string { + if m != nil { + return m.Sender + } + return "" +} + +func (m *MsgSwapExactAmountIn) GetRoutes() []types1.SwapAmountInRoute { + if m != nil { + return m.Routes + } + return nil +} + +func (m *MsgSwapExactAmountIn) GetTokenIn() types.Coin { + if m != nil { + return m.TokenIn + } + return types.Coin{} +} + +type MsgSwapExactAmountInResponse struct { + TokenOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=token_out_amount,json=tokenOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_out_amount" yaml:"token_out_amount"` +} + +func (m *MsgSwapExactAmountInResponse) Reset() { *m = MsgSwapExactAmountInResponse{} } +func (m *MsgSwapExactAmountInResponse) String() string { return proto.CompactTextString(m) } +func (*MsgSwapExactAmountInResponse) ProtoMessage() {} +func (*MsgSwapExactAmountInResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_cfc8fd3ac7df3247, []int{5} +} +func (m *MsgSwapExactAmountInResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSwapExactAmountInResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSwapExactAmountInResponse.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 *MsgSwapExactAmountInResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSwapExactAmountInResponse.Merge(m, src) +} +func (m *MsgSwapExactAmountInResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgSwapExactAmountInResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSwapExactAmountInResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSwapExactAmountInResponse proto.InternalMessageInfo + +type MsgSwapExactAmountOut struct { + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` + Routes []types1.SwapAmountOutRoute `protobuf:"bytes,2,rep,name=routes,proto3" json:"routes"` + TokenInMaxAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,3,opt,name=token_in_max_amount,json=tokenInMaxAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_in_max_amount" yaml:"token_in_max_amount"` + TokenOut types.Coin `protobuf:"bytes,4,opt,name=token_out,json=tokenOut,proto3" json:"token_out" yaml:"token_out"` +} + +func (m *MsgSwapExactAmountOut) Reset() { *m = MsgSwapExactAmountOut{} } +func (m *MsgSwapExactAmountOut) String() string { return proto.CompactTextString(m) } +func (*MsgSwapExactAmountOut) ProtoMessage() {} +func (*MsgSwapExactAmountOut) Descriptor() ([]byte, []int) { + return fileDescriptor_cfc8fd3ac7df3247, []int{6} +} +func (m *MsgSwapExactAmountOut) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSwapExactAmountOut) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSwapExactAmountOut.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 *MsgSwapExactAmountOut) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSwapExactAmountOut.Merge(m, src) +} +func (m *MsgSwapExactAmountOut) XXX_Size() int { + return m.Size() +} +func (m *MsgSwapExactAmountOut) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSwapExactAmountOut.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSwapExactAmountOut proto.InternalMessageInfo + +func (m *MsgSwapExactAmountOut) GetSender() string { + if m != nil { + return m.Sender + } + return "" +} + +func (m *MsgSwapExactAmountOut) GetRoutes() []types1.SwapAmountOutRoute { + if m != nil { + return m.Routes + } + return nil +} + +func (m *MsgSwapExactAmountOut) GetTokenOut() types.Coin { + if m != nil { + return m.TokenOut + } + return types.Coin{} +} + +type MsgSwapExactAmountOutResponse struct { + TokenInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=token_in_amount,json=tokenInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_in_amount" yaml:"token_in_amount"` +} + +func (m *MsgSwapExactAmountOutResponse) Reset() { *m = MsgSwapExactAmountOutResponse{} } +func (m *MsgSwapExactAmountOutResponse) String() string { return proto.CompactTextString(m) } +func (*MsgSwapExactAmountOutResponse) ProtoMessage() {} +func (*MsgSwapExactAmountOutResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_cfc8fd3ac7df3247, []int{7} +} +func (m *MsgSwapExactAmountOutResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSwapExactAmountOutResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSwapExactAmountOutResponse.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 *MsgSwapExactAmountOutResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSwapExactAmountOutResponse.Merge(m, src) +} +func (m *MsgSwapExactAmountOutResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgSwapExactAmountOutResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSwapExactAmountOutResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSwapExactAmountOutResponse proto.InternalMessageInfo + +// ===================== MsgJoinSwapExternAmountIn +// TODO: Rename to MsgJoinSwapExactAmountIn +type MsgJoinSwapExternAmountIn struct { + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` + PoolId uint64 `protobuf:"varint,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` + TokenIn types.Coin `protobuf:"bytes,3,opt,name=token_in,json=tokenIn,proto3" json:"token_in" yaml:"token_in"` + ShareOutMinAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,4,opt,name=share_out_min_amount,json=shareOutMinAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_out_min_amount" yaml:"share_out_min_amount"` +} + +func (m *MsgJoinSwapExternAmountIn) Reset() { *m = MsgJoinSwapExternAmountIn{} } +func (m *MsgJoinSwapExternAmountIn) String() string { return proto.CompactTextString(m) } +func (*MsgJoinSwapExternAmountIn) ProtoMessage() {} +func (*MsgJoinSwapExternAmountIn) Descriptor() ([]byte, []int) { + return fileDescriptor_cfc8fd3ac7df3247, []int{8} +} +func (m *MsgJoinSwapExternAmountIn) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgJoinSwapExternAmountIn) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgJoinSwapExternAmountIn.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 *MsgJoinSwapExternAmountIn) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgJoinSwapExternAmountIn.Merge(m, src) +} +func (m *MsgJoinSwapExternAmountIn) XXX_Size() int { + return m.Size() +} +func (m *MsgJoinSwapExternAmountIn) XXX_DiscardUnknown() { + xxx_messageInfo_MsgJoinSwapExternAmountIn.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgJoinSwapExternAmountIn proto.InternalMessageInfo + +func (m *MsgJoinSwapExternAmountIn) GetSender() string { + if m != nil { + return m.Sender + } + return "" +} + +func (m *MsgJoinSwapExternAmountIn) GetPoolId() uint64 { + if m != nil { + return m.PoolId + } + return 0 +} + +func (m *MsgJoinSwapExternAmountIn) GetTokenIn() types.Coin { + if m != nil { + return m.TokenIn + } + return types.Coin{} +} + +type MsgJoinSwapExternAmountInResponse struct { + ShareOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=share_out_amount,json=shareOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_out_amount" yaml:"share_out_amount"` +} + +func (m *MsgJoinSwapExternAmountInResponse) Reset() { *m = MsgJoinSwapExternAmountInResponse{} } +func (m *MsgJoinSwapExternAmountInResponse) String() string { return proto.CompactTextString(m) } +func (*MsgJoinSwapExternAmountInResponse) ProtoMessage() {} +func (*MsgJoinSwapExternAmountInResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_cfc8fd3ac7df3247, []int{9} +} +func (m *MsgJoinSwapExternAmountInResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgJoinSwapExternAmountInResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgJoinSwapExternAmountInResponse.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 *MsgJoinSwapExternAmountInResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgJoinSwapExternAmountInResponse.Merge(m, src) +} +func (m *MsgJoinSwapExternAmountInResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgJoinSwapExternAmountInResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgJoinSwapExternAmountInResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgJoinSwapExternAmountInResponse proto.InternalMessageInfo + +// ===================== MsgJoinSwapShareAmountOut +type MsgJoinSwapShareAmountOut struct { + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` + PoolId uint64 `protobuf:"varint,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` + TokenInDenom string `protobuf:"bytes,3,opt,name=token_in_denom,json=tokenInDenom,proto3" json:"token_in_denom,omitempty" yaml:"token_in_denom"` + ShareOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,4,opt,name=share_out_amount,json=shareOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_out_amount" yaml:"share_out_amount"` + TokenInMaxAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,5,opt,name=token_in_max_amount,json=tokenInMaxAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_in_max_amount" yaml:"token_in_max_amount"` +} + +func (m *MsgJoinSwapShareAmountOut) Reset() { *m = MsgJoinSwapShareAmountOut{} } +func (m *MsgJoinSwapShareAmountOut) String() string { return proto.CompactTextString(m) } +func (*MsgJoinSwapShareAmountOut) ProtoMessage() {} +func (*MsgJoinSwapShareAmountOut) Descriptor() ([]byte, []int) { + return fileDescriptor_cfc8fd3ac7df3247, []int{10} +} +func (m *MsgJoinSwapShareAmountOut) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgJoinSwapShareAmountOut) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgJoinSwapShareAmountOut.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 *MsgJoinSwapShareAmountOut) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgJoinSwapShareAmountOut.Merge(m, src) +} +func (m *MsgJoinSwapShareAmountOut) XXX_Size() int { + return m.Size() +} +func (m *MsgJoinSwapShareAmountOut) XXX_DiscardUnknown() { + xxx_messageInfo_MsgJoinSwapShareAmountOut.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgJoinSwapShareAmountOut proto.InternalMessageInfo + +func (m *MsgJoinSwapShareAmountOut) GetSender() string { + if m != nil { + return m.Sender + } + return "" +} + +func (m *MsgJoinSwapShareAmountOut) GetPoolId() uint64 { + if m != nil { + return m.PoolId + } + return 0 +} + +func (m *MsgJoinSwapShareAmountOut) GetTokenInDenom() string { + if m != nil { + return m.TokenInDenom + } + return "" +} + +type MsgJoinSwapShareAmountOutResponse struct { + TokenInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=token_in_amount,json=tokenInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_in_amount" yaml:"token_in_amount"` +} + +func (m *MsgJoinSwapShareAmountOutResponse) Reset() { *m = MsgJoinSwapShareAmountOutResponse{} } +func (m *MsgJoinSwapShareAmountOutResponse) String() string { return proto.CompactTextString(m) } +func (*MsgJoinSwapShareAmountOutResponse) ProtoMessage() {} +func (*MsgJoinSwapShareAmountOutResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_cfc8fd3ac7df3247, []int{11} +} +func (m *MsgJoinSwapShareAmountOutResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgJoinSwapShareAmountOutResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgJoinSwapShareAmountOutResponse.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 *MsgJoinSwapShareAmountOutResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgJoinSwapShareAmountOutResponse.Merge(m, src) +} +func (m *MsgJoinSwapShareAmountOutResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgJoinSwapShareAmountOutResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgJoinSwapShareAmountOutResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgJoinSwapShareAmountOutResponse proto.InternalMessageInfo + +// ===================== MsgExitSwapShareAmountIn +type MsgExitSwapShareAmountIn struct { + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` + PoolId uint64 `protobuf:"varint,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` + TokenOutDenom string `protobuf:"bytes,3,opt,name=token_out_denom,json=tokenOutDenom,proto3" json:"token_out_denom,omitempty" yaml:"token_out_denom"` + ShareInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,4,opt,name=share_in_amount,json=shareInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_in_amount" yaml:"share_in_amount"` + TokenOutMinAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,5,opt,name=token_out_min_amount,json=tokenOutMinAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_out_min_amount" yaml:"token_out_min_amount"` +} + +func (m *MsgExitSwapShareAmountIn) Reset() { *m = MsgExitSwapShareAmountIn{} } +func (m *MsgExitSwapShareAmountIn) String() string { return proto.CompactTextString(m) } +func (*MsgExitSwapShareAmountIn) ProtoMessage() {} +func (*MsgExitSwapShareAmountIn) Descriptor() ([]byte, []int) { + return fileDescriptor_cfc8fd3ac7df3247, []int{12} +} +func (m *MsgExitSwapShareAmountIn) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgExitSwapShareAmountIn) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgExitSwapShareAmountIn.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 *MsgExitSwapShareAmountIn) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgExitSwapShareAmountIn.Merge(m, src) +} +func (m *MsgExitSwapShareAmountIn) XXX_Size() int { + return m.Size() +} +func (m *MsgExitSwapShareAmountIn) XXX_DiscardUnknown() { + xxx_messageInfo_MsgExitSwapShareAmountIn.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgExitSwapShareAmountIn proto.InternalMessageInfo + +func (m *MsgExitSwapShareAmountIn) GetSender() string { + if m != nil { + return m.Sender + } + return "" +} + +func (m *MsgExitSwapShareAmountIn) GetPoolId() uint64 { + if m != nil { + return m.PoolId + } + return 0 +} + +func (m *MsgExitSwapShareAmountIn) GetTokenOutDenom() string { + if m != nil { + return m.TokenOutDenom + } + return "" +} + +type MsgExitSwapShareAmountInResponse struct { + TokenOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=token_out_amount,json=tokenOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_out_amount" yaml:"token_out_amount"` +} + +func (m *MsgExitSwapShareAmountInResponse) Reset() { *m = MsgExitSwapShareAmountInResponse{} } +func (m *MsgExitSwapShareAmountInResponse) String() string { return proto.CompactTextString(m) } +func (*MsgExitSwapShareAmountInResponse) ProtoMessage() {} +func (*MsgExitSwapShareAmountInResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_cfc8fd3ac7df3247, []int{13} +} +func (m *MsgExitSwapShareAmountInResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgExitSwapShareAmountInResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgExitSwapShareAmountInResponse.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 *MsgExitSwapShareAmountInResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgExitSwapShareAmountInResponse.Merge(m, src) +} +func (m *MsgExitSwapShareAmountInResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgExitSwapShareAmountInResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgExitSwapShareAmountInResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgExitSwapShareAmountInResponse proto.InternalMessageInfo + +// ===================== MsgExitSwapExternAmountOut +type MsgExitSwapExternAmountOut struct { + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` + PoolId uint64 `protobuf:"varint,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` + TokenOut types.Coin `protobuf:"bytes,3,opt,name=token_out,json=tokenOut,proto3" json:"token_out" yaml:"token_out"` + ShareInMaxAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,4,opt,name=share_in_max_amount,json=shareInMaxAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_in_max_amount" yaml:"share_in_max_amount"` +} + +func (m *MsgExitSwapExternAmountOut) Reset() { *m = MsgExitSwapExternAmountOut{} } +func (m *MsgExitSwapExternAmountOut) String() string { return proto.CompactTextString(m) } +func (*MsgExitSwapExternAmountOut) ProtoMessage() {} +func (*MsgExitSwapExternAmountOut) Descriptor() ([]byte, []int) { + return fileDescriptor_cfc8fd3ac7df3247, []int{14} +} +func (m *MsgExitSwapExternAmountOut) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgExitSwapExternAmountOut) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgExitSwapExternAmountOut.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 *MsgExitSwapExternAmountOut) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgExitSwapExternAmountOut.Merge(m, src) +} +func (m *MsgExitSwapExternAmountOut) XXX_Size() int { + return m.Size() +} +func (m *MsgExitSwapExternAmountOut) XXX_DiscardUnknown() { + xxx_messageInfo_MsgExitSwapExternAmountOut.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgExitSwapExternAmountOut proto.InternalMessageInfo + +func (m *MsgExitSwapExternAmountOut) GetSender() string { + if m != nil { + return m.Sender + } + return "" +} + +func (m *MsgExitSwapExternAmountOut) GetPoolId() uint64 { + if m != nil { + return m.PoolId + } + return 0 +} + +func (m *MsgExitSwapExternAmountOut) GetTokenOut() types.Coin { + if m != nil { + return m.TokenOut + } + return types.Coin{} +} + +type MsgExitSwapExternAmountOutResponse struct { + ShareInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=share_in_amount,json=shareInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_in_amount" yaml:"share_in_amount"` +} + +func (m *MsgExitSwapExternAmountOutResponse) Reset() { *m = MsgExitSwapExternAmountOutResponse{} } +func (m *MsgExitSwapExternAmountOutResponse) String() string { return proto.CompactTextString(m) } +func (*MsgExitSwapExternAmountOutResponse) ProtoMessage() {} +func (*MsgExitSwapExternAmountOutResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_cfc8fd3ac7df3247, []int{15} +} +func (m *MsgExitSwapExternAmountOutResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgExitSwapExternAmountOutResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgExitSwapExternAmountOutResponse.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 *MsgExitSwapExternAmountOutResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgExitSwapExternAmountOutResponse.Merge(m, src) +} +func (m *MsgExitSwapExternAmountOutResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgExitSwapExternAmountOutResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgExitSwapExternAmountOutResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgExitSwapExternAmountOutResponse proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MsgJoinPool)(nil), "osmosis.gamm.v1beta1.MsgJoinPool") + proto.RegisterType((*MsgJoinPoolResponse)(nil), "osmosis.gamm.v1beta1.MsgJoinPoolResponse") + proto.RegisterType((*MsgExitPool)(nil), "osmosis.gamm.v1beta1.MsgExitPool") + proto.RegisterType((*MsgExitPoolResponse)(nil), "osmosis.gamm.v1beta1.MsgExitPoolResponse") + proto.RegisterType((*MsgSwapExactAmountIn)(nil), "osmosis.gamm.v1beta1.MsgSwapExactAmountIn") + proto.RegisterType((*MsgSwapExactAmountInResponse)(nil), "osmosis.gamm.v1beta1.MsgSwapExactAmountInResponse") + proto.RegisterType((*MsgSwapExactAmountOut)(nil), "osmosis.gamm.v1beta1.MsgSwapExactAmountOut") + proto.RegisterType((*MsgSwapExactAmountOutResponse)(nil), "osmosis.gamm.v1beta1.MsgSwapExactAmountOutResponse") + proto.RegisterType((*MsgJoinSwapExternAmountIn)(nil), "osmosis.gamm.v1beta1.MsgJoinSwapExternAmountIn") + proto.RegisterType((*MsgJoinSwapExternAmountInResponse)(nil), "osmosis.gamm.v1beta1.MsgJoinSwapExternAmountInResponse") + proto.RegisterType((*MsgJoinSwapShareAmountOut)(nil), "osmosis.gamm.v1beta1.MsgJoinSwapShareAmountOut") + proto.RegisterType((*MsgJoinSwapShareAmountOutResponse)(nil), "osmosis.gamm.v1beta1.MsgJoinSwapShareAmountOutResponse") + proto.RegisterType((*MsgExitSwapShareAmountIn)(nil), "osmosis.gamm.v1beta1.MsgExitSwapShareAmountIn") + proto.RegisterType((*MsgExitSwapShareAmountInResponse)(nil), "osmosis.gamm.v1beta1.MsgExitSwapShareAmountInResponse") + proto.RegisterType((*MsgExitSwapExternAmountOut)(nil), "osmosis.gamm.v1beta1.MsgExitSwapExternAmountOut") + proto.RegisterType((*MsgExitSwapExternAmountOutResponse)(nil), "osmosis.gamm.v1beta1.MsgExitSwapExternAmountOutResponse") +} + +func init() { proto.RegisterFile("osmosis/gamm/v1beta1/tx.proto", fileDescriptor_cfc8fd3ac7df3247) } + +var fileDescriptor_cfc8fd3ac7df3247 = []byte{ + // 1209 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0xbb, 0x6f, 0xdb, 0x46, + 0x18, 0x37, 0x25, 0xc5, 0x76, 0xce, 0xf5, 0x43, 0x8c, 0x1f, 0x32, 0x9d, 0x48, 0xce, 0xb5, 0x48, + 0x9c, 0x38, 0x22, 0x63, 0x07, 0x7d, 0xc0, 0x4b, 0x51, 0xb5, 0x01, 0xaa, 0x20, 0x82, 0x02, 0x66, + 0x09, 0xba, 0x08, 0x94, 0x45, 0x28, 0x6c, 0xcc, 0x3b, 0x41, 0x47, 0x3a, 0x0a, 0x0a, 0xb4, 0x40, + 0x81, 0x0e, 0xed, 0xd4, 0xa2, 0xe8, 0xe3, 0xcf, 0xe8, 0xda, 0xff, 0x20, 0x63, 0x86, 0x16, 0x68, + 0x53, 0x40, 0x28, 0xec, 0xa1, 0x6b, 0xa1, 0xb5, 0x4b, 0x71, 0xbc, 0x23, 0x45, 0x52, 0xa4, 0x24, + 0x3a, 0x52, 0xbc, 0xd8, 0xd2, 0xdd, 0xf7, 0xba, 0xdf, 0xf7, 0xe3, 0xef, 0x3e, 0x0a, 0x5c, 0xc1, + 0xc4, 0xc4, 0xc4, 0x20, 0x4a, 0x53, 0x33, 0x4d, 0xe5, 0x78, 0xaf, 0xae, 0x5b, 0xda, 0x9e, 0x62, + 0x75, 0xe4, 0x56, 0x1b, 0x5b, 0x58, 0x5c, 0xe5, 0xdb, 0x32, 0xdd, 0x96, 0xf9, 0xb6, 0xb4, 0xda, + 0xc4, 0x4d, 0xec, 0x18, 0x28, 0xf4, 0x13, 0xb3, 0x95, 0xb2, 0x9a, 0x69, 0x20, 0xac, 0x38, 0x7f, + 0xf9, 0x52, 0xfe, 0xd0, 0xf1, 0x57, 0xea, 0x1a, 0xd1, 0xbd, 0xe0, 0x87, 0xd8, 0x40, 0x7c, 0xff, + 0x96, 0x9b, 0xbd, 0x85, 0xf1, 0x91, 0xa9, 0x21, 0xad, 0xa9, 0xb7, 0x3d, 0x3b, 0xf2, 0x54, 0x6b, + 0xd5, 0xda, 0xd8, 0xb6, 0x74, 0x66, 0x0d, 0x5f, 0xa6, 0xc0, 0x42, 0x85, 0x34, 0xef, 0x61, 0x03, + 0x3d, 0xc0, 0xf8, 0x48, 0xbc, 0x01, 0x66, 0x89, 0x8e, 0x1a, 0x7a, 0x3b, 0x27, 0x6c, 0x0b, 0x3b, + 0x17, 0x4b, 0xd9, 0x5e, 0xb7, 0xb0, 0xf8, 0x4c, 0x33, 0x8f, 0x0e, 0x20, 0x5b, 0x87, 0x2a, 0x37, + 0x10, 0x77, 0xc1, 0x1c, 0x4d, 0x51, 0x33, 0x1a, 0xb9, 0xd4, 0xb6, 0xb0, 0x93, 0x29, 0x89, 0xbd, + 0x6e, 0x61, 0x89, 0xd9, 0xf2, 0x0d, 0xa8, 0xce, 0xd2, 0x4f, 0xe5, 0x86, 0xd8, 0x06, 0x2b, 0xe4, + 0xb1, 0xd6, 0xd6, 0x6b, 0xd8, 0xb6, 0x6a, 0x9a, 0x89, 0x6d, 0x64, 0xe5, 0xd2, 0x4e, 0x86, 0x8f, + 0x9f, 0x77, 0x0b, 0x33, 0x2f, 0xbb, 0x85, 0x6b, 0x4d, 0xc3, 0x7a, 0x6c, 0xd7, 0xe5, 0x43, 0x6c, + 0x2a, 0xfc, 0x88, 0xec, 0x5f, 0x91, 0x34, 0x9e, 0x28, 0xd6, 0xb3, 0x96, 0x4e, 0xe4, 0x32, 0xb2, + 0x7a, 0xdd, 0xc2, 0xba, 0x2f, 0x07, 0x0b, 0x45, 0xa3, 0x42, 0x75, 0xc9, 0xc9, 0x50, 0xb5, 0xad, + 0x0f, 0x9c, 0x45, 0xb1, 0x0e, 0x16, 0x2d, 0xfc, 0x44, 0x47, 0x35, 0x03, 0xd5, 0x4c, 0xad, 0x43, + 0x72, 0x99, 0xed, 0xf4, 0xce, 0xc2, 0xfe, 0xa6, 0xcc, 0xe2, 0xca, 0x14, 0x41, 0x17, 0x7f, 0xf9, + 0x43, 0x6c, 0xa0, 0xd2, 0x9b, 0xb4, 0x96, 0x5e, 0xb7, 0xb0, 0xc5, 0x32, 0xf8, 0xbd, 0x79, 0x26, + 0x02, 0xd5, 0x05, 0x67, 0xb9, 0x8c, 0x2a, 0x5a, 0x87, 0x1c, 0x6c, 0x7d, 0xf3, 0xcf, 0x2f, 0x37, + 0xd7, 0x03, 0x0d, 0xff, 0x14, 0x1b, 0xa8, 0x48, 0x8b, 0x83, 0x7f, 0x0a, 0xe0, 0x92, 0x0f, 0x5c, + 0x55, 0x27, 0x2d, 0x8c, 0x88, 0x2e, 0x92, 0x08, 0x30, 0x18, 0xdc, 0xe5, 0xc4, 0x60, 0x6c, 0xf0, + 0xe6, 0x84, 0xe2, 0x0d, 0xa2, 0x51, 0x01, 0xf3, 0xee, 0x79, 0x72, 0xa9, 0x51, 0x40, 0x6c, 0x70, + 0x20, 0x96, 0x83, 0x40, 0x40, 0x75, 0x8e, 0x1f, 0x1e, 0xfe, 0xc5, 0x88, 0x73, 0xb7, 0x63, 0x58, + 0x53, 0x25, 0x4e, 0x0b, 0x2c, 0xb3, 0xb3, 0x19, 0x68, 0x42, 0xbc, 0x09, 0x85, 0x83, 0xea, 0xa2, + 0xb3, 0x52, 0x46, 0x1c, 0x28, 0x1d, 0x2c, 0xb1, 0xf3, 0x52, 0x34, 0x4d, 0x03, 0x8d, 0xc1, 0x9b, + 0xb7, 0x38, 0x5c, 0x97, 0xfd, 0x70, 0x71, 0xf7, 0x3e, 0x71, 0xde, 0x70, 0xd6, 0xab, 0xb6, 0x55, + 0x31, 0x50, 0x24, 0x73, 0xf4, 0x8e, 0x61, 0x31, 0xe6, 0x34, 0x1d, 0xe2, 0xb8, 0xe0, 0x7a, 0xc4, + 0x79, 0x00, 0x2e, 0x7a, 0xb1, 0x73, 0xc2, 0xa8, 0xaa, 0x72, 0xbc, 0xaa, 0x95, 0x50, 0x55, 0x50, + 0x9d, 0x77, 0x2b, 0x81, 0xff, 0xa5, 0xc0, 0x6a, 0x85, 0x34, 0x1f, 0x3e, 0xd5, 0x5a, 0x77, 0x3b, + 0xda, 0x21, 0x27, 0x4b, 0x19, 0x25, 0xe9, 0xe7, 0x7d, 0x30, 0xeb, 0x48, 0x0a, 0xe1, 0xbc, 0x92, + 0x65, 0x57, 0xe1, 0x7c, 0x12, 0xe4, 0x95, 0x46, 0x53, 0xb9, 0x59, 0x54, 0xea, 0x56, 0xca, 0xd0, + 0x3a, 0x55, 0x1e, 0x23, 0xc0, 0x53, 0xda, 0xe9, 0x57, 0xe3, 0xa9, 0xf8, 0x39, 0x58, 0x8d, 0x6a, + 0x47, 0x2e, 0xe3, 0x9c, 0xaa, 0x92, 0x98, 0x44, 0x5b, 0xf1, 0x2d, 0x86, 0x6a, 0xd6, 0xd7, 0x61, + 0x76, 0xc6, 0xe1, 0x6d, 0xfe, 0x5e, 0x00, 0x97, 0xa3, 0xd0, 0xf7, 0x2b, 0x45, 0x3f, 0xd3, 0x64, + 0x94, 0x22, 0x1c, 0x0f, 0xaa, 0x4b, 0x6e, 0xd5, 0x2c, 0x3d, 0xfc, 0x3a, 0x0d, 0xd6, 0x06, 0xab, + 0xaa, 0xda, 0x56, 0x12, 0x52, 0x54, 0x42, 0xa4, 0x50, 0xc6, 0x24, 0x45, 0xd5, 0xb6, 0xa2, 0x58, + 0xf1, 0x19, 0xb8, 0x14, 0xa1, 0xc6, 0x5c, 0x0a, 0xee, 0x27, 0xc6, 0x42, 0x8a, 0x15, 0x78, 0xa8, + 0xae, 0xf4, 0xf5, 0x9d, 0x2b, 0x42, 0xe0, 0xb1, 0xcb, 0x8c, 0xe2, 0xe4, 0x18, 0x8f, 0xdd, 0xc1, + 0x75, 0xca, 0x0a, 0x18, 0x60, 0x05, 0xbd, 0x9a, 0x8b, 0x3a, 0xc5, 0xbb, 0xc8, 0x2a, 0x29, 0x52, + 0x9f, 0xef, 0x04, 0x70, 0x25, 0xb2, 0x17, 0x1e, 0x45, 0x5a, 0x60, 0xd9, 0x3b, 0x46, 0x80, 0x21, + 0x67, 0x16, 0xc8, 0x50, 0x38, 0xa8, 0x2e, 0x72, 0x44, 0x38, 0x3f, 0xfe, 0x4d, 0x81, 0x4d, 0x7e, + 0xad, 0xb1, 0xba, 0x2c, 0xbd, 0x8d, 0xce, 0x22, 0x1c, 0x89, 0x2e, 0x82, 0xc9, 0xeb, 0x42, 0xff, + 0xce, 0x9c, 0x9c, 0x2e, 0x44, 0xc5, 0x84, 0x6a, 0xd6, 0xbd, 0x8b, 0xfb, 0xba, 0x70, 0x8b, 0x32, + 0xe0, 0xfa, 0xe0, 0xe0, 0xc0, 0x69, 0x40, 0x21, 0x75, 0x79, 0x60, 0x20, 0xf8, 0xb3, 0x00, 0xae, + 0xc6, 0x42, 0x7e, 0xae, 0x73, 0x05, 0xfc, 0x2d, 0x1d, 0x60, 0xc3, 0x43, 0xba, 0x7b, 0x26, 0xc5, + 0x48, 0xc4, 0x86, 0xf7, 0xdd, 0x4b, 0xda, 0x40, 0xb5, 0x86, 0x8e, 0xb0, 0xc9, 0xa5, 0x60, 0xb3, + 0xd7, 0x2d, 0xac, 0x85, 0x68, 0xec, 0xec, 0xbb, 0xd7, 0x6f, 0x19, 0x7d, 0x44, 0xbf, 0x46, 0x62, + 0x95, 0x99, 0xf6, 0x0c, 0x16, 0xa3, 0x62, 0x17, 0x5e, 0x87, 0x8a, 0x0d, 0x67, 0x9c, 0x53, 0xa8, + 0x5f, 0x78, 0x7e, 0x08, 0x32, 0x2e, 0xd8, 0xd6, 0x73, 0x14, 0x9f, 0xdf, 0xd3, 0x20, 0xc7, 0x47, + 0xa3, 0x50, 0x5d, 0x53, 0xd4, 0x9e, 0x92, 0x7b, 0x4c, 0xda, 0x5c, 0x3f, 0xdd, 0xa4, 0x70, 0xe1, + 0x9e, 0x81, 0x5b, 0x78, 0xd5, 0xb6, 0x18, 0xe1, 0x22, 0x06, 0xd9, 0xcc, 0x74, 0x07, 0xd9, 0xb8, + 0xd1, 0xe7, 0xc2, 0x6b, 0x1a, 0x7d, 0x76, 0x29, 0xe1, 0xae, 0x0d, 0x8e, 0x3e, 0x83, 0x84, 0x33, + 0x10, 0xfc, 0x49, 0x00, 0xdb, 0x71, 0x7d, 0x3d, 0xdf, 0x71, 0xa8, 0x97, 0x02, 0x92, 0xaf, 0x32, + 0xbf, 0xf6, 0x4e, 0x53, 0xe1, 0x02, 0x43, 0x47, 0x7a, 0x02, 0x43, 0x07, 0x55, 0x1f, 0x8f, 0x32, + 0x3e, 0xf5, 0xc9, 0xbc, 0x9a, 0xfa, 0x44, 0x84, 0x84, 0xea, 0x0a, 0x67, 0x62, 0x5f, 0x7d, 0x8a, + 0x94, 0x0c, 0x3b, 0x31, 0x64, 0x08, 0xde, 0x77, 0xb4, 0xec, 0x1f, 0x05, 0x00, 0xe3, 0x41, 0xf7, + 0xeb, 0x4f, 0xf8, 0xa1, 0x12, 0xa6, 0xfa, 0x50, 0xed, 0xff, 0x3a, 0x07, 0xd2, 0x15, 0xd2, 0x14, + 0x1f, 0x81, 0x79, 0xef, 0x47, 0x93, 0xab, 0x72, 0xd4, 0x4f, 0x3a, 0xb2, 0xef, 0xd5, 0x5f, 0xba, + 0x31, 0xd2, 0xc4, 0x3b, 0xd3, 0x23, 0x30, 0xef, 0xbd, 0x55, 0xc7, 0x47, 0x76, 0x4d, 0x86, 0x44, + 0x1e, 0x78, 0x7d, 0x24, 0x20, 0x3b, 0xf8, 0xa2, 0x77, 0x33, 0xd6, 0x7f, 0xc0, 0x56, 0xda, 0x1f, + 0xdf, 0xd6, 0x4b, 0x7a, 0x0c, 0xc4, 0x88, 0x37, 0x89, 0xdd, 0x71, 0x23, 0x55, 0x6d, 0x4b, 0xba, + 0x93, 0xc0, 0xd8, 0xcb, 0xfb, 0xa5, 0x00, 0xd6, 0x63, 0x46, 0x54, 0x65, 0x68, 0x33, 0x06, 0x1d, + 0xa4, 0x77, 0x13, 0x3a, 0x44, 0x16, 0x11, 0x9a, 0x8c, 0x46, 0x17, 0x11, 0x74, 0x18, 0xa3, 0x88, + 0x98, 0x4b, 0xfa, 0x2b, 0x01, 0x6c, 0xc4, 0xa9, 0xd7, 0xed, 0xa1, 0xec, 0x89, 0xf0, 0x90, 0xde, + 0x4b, 0xea, 0xe1, 0xd5, 0xf1, 0x05, 0x58, 0x8b, 0xbe, 0xb6, 0xe5, 0x91, 0x21, 0x03, 0xf6, 0xd2, + 0x3b, 0xc9, 0xec, 0xdd, 0x02, 0x4a, 0xf7, 0x9e, 0x9f, 0xe4, 0x85, 0x17, 0x27, 0x79, 0xe1, 0xef, + 0x93, 0xbc, 0xf0, 0xed, 0x69, 0x7e, 0xe6, 0xc5, 0x69, 0x7e, 0xe6, 0x8f, 0xd3, 0xfc, 0xcc, 0x27, + 0xb7, 0x7d, 0x32, 0xc1, 0x63, 0x17, 0x8f, 0xb4, 0x3a, 0x71, 0xbf, 0x28, 0xc7, 0x7b, 0x6f, 0x2b, + 0x1d, 0x26, 0x5b, 0x8e, 0x68, 0xd4, 0x67, 0x9d, 0xdf, 0x4f, 0xef, 0xfc, 0x1f, 0x00, 0x00, 0xff, + 0xff, 0x0d, 0x7d, 0x1e, 0x03, 0xed, 0x15, 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 { + JoinPool(ctx context.Context, in *MsgJoinPool, opts ...grpc.CallOption) (*MsgJoinPoolResponse, error) + ExitPool(ctx context.Context, in *MsgExitPool, opts ...grpc.CallOption) (*MsgExitPoolResponse, error) + SwapExactAmountIn(ctx context.Context, in *MsgSwapExactAmountIn, opts ...grpc.CallOption) (*MsgSwapExactAmountInResponse, error) + SwapExactAmountOut(ctx context.Context, in *MsgSwapExactAmountOut, opts ...grpc.CallOption) (*MsgSwapExactAmountOutResponse, error) + JoinSwapExternAmountIn(ctx context.Context, in *MsgJoinSwapExternAmountIn, opts ...grpc.CallOption) (*MsgJoinSwapExternAmountInResponse, error) + JoinSwapShareAmountOut(ctx context.Context, in *MsgJoinSwapShareAmountOut, opts ...grpc.CallOption) (*MsgJoinSwapShareAmountOutResponse, error) + ExitSwapExternAmountOut(ctx context.Context, in *MsgExitSwapExternAmountOut, opts ...grpc.CallOption) (*MsgExitSwapExternAmountOutResponse, error) + ExitSwapShareAmountIn(ctx context.Context, in *MsgExitSwapShareAmountIn, opts ...grpc.CallOption) (*MsgExitSwapShareAmountInResponse, error) +} + +type msgClient struct { + cc grpc1.ClientConn +} + +func NewMsgClient(cc grpc1.ClientConn) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) JoinPool(ctx context.Context, in *MsgJoinPool, opts ...grpc.CallOption) (*MsgJoinPoolResponse, error) { + out := new(MsgJoinPoolResponse) + err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Msg/JoinPool", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) ExitPool(ctx context.Context, in *MsgExitPool, opts ...grpc.CallOption) (*MsgExitPoolResponse, error) { + out := new(MsgExitPoolResponse) + err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Msg/ExitPool", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) SwapExactAmountIn(ctx context.Context, in *MsgSwapExactAmountIn, opts ...grpc.CallOption) (*MsgSwapExactAmountInResponse, error) { + out := new(MsgSwapExactAmountInResponse) + err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Msg/SwapExactAmountIn", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) SwapExactAmountOut(ctx context.Context, in *MsgSwapExactAmountOut, opts ...grpc.CallOption) (*MsgSwapExactAmountOutResponse, error) { + out := new(MsgSwapExactAmountOutResponse) + err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Msg/SwapExactAmountOut", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) JoinSwapExternAmountIn(ctx context.Context, in *MsgJoinSwapExternAmountIn, opts ...grpc.CallOption) (*MsgJoinSwapExternAmountInResponse, error) { + out := new(MsgJoinSwapExternAmountInResponse) + err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Msg/JoinSwapExternAmountIn", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) JoinSwapShareAmountOut(ctx context.Context, in *MsgJoinSwapShareAmountOut, opts ...grpc.CallOption) (*MsgJoinSwapShareAmountOutResponse, error) { + out := new(MsgJoinSwapShareAmountOutResponse) + err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Msg/JoinSwapShareAmountOut", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) ExitSwapExternAmountOut(ctx context.Context, in *MsgExitSwapExternAmountOut, opts ...grpc.CallOption) (*MsgExitSwapExternAmountOutResponse, error) { + out := new(MsgExitSwapExternAmountOutResponse) + err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Msg/ExitSwapExternAmountOut", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) ExitSwapShareAmountIn(ctx context.Context, in *MsgExitSwapShareAmountIn, opts ...grpc.CallOption) (*MsgExitSwapShareAmountInResponse, error) { + out := new(MsgExitSwapShareAmountInResponse) + err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Msg/ExitSwapShareAmountIn", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +type MsgServer interface { + JoinPool(context.Context, *MsgJoinPool) (*MsgJoinPoolResponse, error) + ExitPool(context.Context, *MsgExitPool) (*MsgExitPoolResponse, error) + SwapExactAmountIn(context.Context, *MsgSwapExactAmountIn) (*MsgSwapExactAmountInResponse, error) + SwapExactAmountOut(context.Context, *MsgSwapExactAmountOut) (*MsgSwapExactAmountOutResponse, error) + JoinSwapExternAmountIn(context.Context, *MsgJoinSwapExternAmountIn) (*MsgJoinSwapExternAmountInResponse, error) + JoinSwapShareAmountOut(context.Context, *MsgJoinSwapShareAmountOut) (*MsgJoinSwapShareAmountOutResponse, error) + ExitSwapExternAmountOut(context.Context, *MsgExitSwapExternAmountOut) (*MsgExitSwapExternAmountOutResponse, error) + ExitSwapShareAmountIn(context.Context, *MsgExitSwapShareAmountIn) (*MsgExitSwapShareAmountInResponse, error) +} + +// UnimplementedMsgServer can be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (*UnimplementedMsgServer) JoinPool(ctx context.Context, req *MsgJoinPool) (*MsgJoinPoolResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method JoinPool not implemented") +} +func (*UnimplementedMsgServer) ExitPool(ctx context.Context, req *MsgExitPool) (*MsgExitPoolResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ExitPool not implemented") +} +func (*UnimplementedMsgServer) SwapExactAmountIn(ctx context.Context, req *MsgSwapExactAmountIn) (*MsgSwapExactAmountInResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SwapExactAmountIn not implemented") +} +func (*UnimplementedMsgServer) SwapExactAmountOut(ctx context.Context, req *MsgSwapExactAmountOut) (*MsgSwapExactAmountOutResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SwapExactAmountOut not implemented") +} +func (*UnimplementedMsgServer) JoinSwapExternAmountIn(ctx context.Context, req *MsgJoinSwapExternAmountIn) (*MsgJoinSwapExternAmountInResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method JoinSwapExternAmountIn not implemented") +} +func (*UnimplementedMsgServer) JoinSwapShareAmountOut(ctx context.Context, req *MsgJoinSwapShareAmountOut) (*MsgJoinSwapShareAmountOutResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method JoinSwapShareAmountOut not implemented") +} +func (*UnimplementedMsgServer) ExitSwapExternAmountOut(ctx context.Context, req *MsgExitSwapExternAmountOut) (*MsgExitSwapExternAmountOutResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ExitSwapExternAmountOut not implemented") +} +func (*UnimplementedMsgServer) ExitSwapShareAmountIn(ctx context.Context, req *MsgExitSwapShareAmountIn) (*MsgExitSwapShareAmountInResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ExitSwapShareAmountIn not implemented") +} + +func RegisterMsgServer(s grpc1.Server, srv MsgServer) { + s.RegisterService(&_Msg_serviceDesc, srv) +} + +func _Msg_JoinPool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgJoinPool) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).JoinPool(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.gamm.v1beta1.Msg/JoinPool", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).JoinPool(ctx, req.(*MsgJoinPool)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_ExitPool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgExitPool) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).ExitPool(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.gamm.v1beta1.Msg/ExitPool", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).ExitPool(ctx, req.(*MsgExitPool)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_SwapExactAmountIn_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgSwapExactAmountIn) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).SwapExactAmountIn(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.gamm.v1beta1.Msg/SwapExactAmountIn", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).SwapExactAmountIn(ctx, req.(*MsgSwapExactAmountIn)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_SwapExactAmountOut_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgSwapExactAmountOut) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).SwapExactAmountOut(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.gamm.v1beta1.Msg/SwapExactAmountOut", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).SwapExactAmountOut(ctx, req.(*MsgSwapExactAmountOut)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_JoinSwapExternAmountIn_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgJoinSwapExternAmountIn) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).JoinSwapExternAmountIn(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.gamm.v1beta1.Msg/JoinSwapExternAmountIn", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).JoinSwapExternAmountIn(ctx, req.(*MsgJoinSwapExternAmountIn)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_JoinSwapShareAmountOut_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgJoinSwapShareAmountOut) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).JoinSwapShareAmountOut(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.gamm.v1beta1.Msg/JoinSwapShareAmountOut", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).JoinSwapShareAmountOut(ctx, req.(*MsgJoinSwapShareAmountOut)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_ExitSwapExternAmountOut_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgExitSwapExternAmountOut) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).ExitSwapExternAmountOut(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.gamm.v1beta1.Msg/ExitSwapExternAmountOut", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).ExitSwapExternAmountOut(ctx, req.(*MsgExitSwapExternAmountOut)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_ExitSwapShareAmountIn_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgExitSwapShareAmountIn) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).ExitSwapShareAmountIn(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.gamm.v1beta1.Msg/ExitSwapShareAmountIn", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).ExitSwapShareAmountIn(ctx, req.(*MsgExitSwapShareAmountIn)) + } + return interceptor(ctx, in, info, handler) +} + +var _Msg_serviceDesc = grpc.ServiceDesc{ + ServiceName: "osmosis.gamm.v1beta1.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "JoinPool", + Handler: _Msg_JoinPool_Handler, + }, + { + MethodName: "ExitPool", + Handler: _Msg_ExitPool_Handler, + }, + { + MethodName: "SwapExactAmountIn", + Handler: _Msg_SwapExactAmountIn_Handler, + }, + { + MethodName: "SwapExactAmountOut", + Handler: _Msg_SwapExactAmountOut_Handler, + }, + { + MethodName: "JoinSwapExternAmountIn", + Handler: _Msg_JoinSwapExternAmountIn_Handler, + }, + { + MethodName: "JoinSwapShareAmountOut", + Handler: _Msg_JoinSwapShareAmountOut_Handler, + }, + { + MethodName: "ExitSwapExternAmountOut", + Handler: _Msg_ExitSwapExternAmountOut_Handler, + }, + { + MethodName: "ExitSwapShareAmountIn", + Handler: _Msg_ExitSwapShareAmountIn_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "osmosis/gamm/v1beta1/tx.proto", +} + +func (m *MsgJoinPool) 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 *MsgJoinPool) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgJoinPool) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TokenInMaxs) > 0 { + for iNdEx := len(m.TokenInMaxs) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TokenInMaxs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + { + size := m.ShareOutAmount.Size() + i -= size + if _, err := m.ShareOutAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if m.PoolId != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.PoolId)) + i-- + dAtA[i] = 0x10 + } + 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] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgJoinPoolResponse) 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 *MsgJoinPoolResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgJoinPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TokenIn) > 0 { + for iNdEx := len(m.TokenIn) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TokenIn[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size := m.ShareOutAmount.Size() + i -= size + if _, err := m.ShareOutAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *MsgExitPool) 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 *MsgExitPool) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgExitPool) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TokenOutMins) > 0 { + for iNdEx := len(m.TokenOutMins) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TokenOutMins[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + { + size := m.ShareInAmount.Size() + i -= size + if _, err := m.ShareInAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if m.PoolId != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.PoolId)) + i-- + dAtA[i] = 0x10 + } + 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] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgExitPoolResponse) 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 *MsgExitPoolResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgExitPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TokenOut) > 0 { + for iNdEx := len(m.TokenOut) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TokenOut[iNdEx].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 *MsgSwapExactAmountIn) 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 *MsgSwapExactAmountIn) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSwapExactAmountIn) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.TokenOutMinAmount.Size() + i -= size + if _, err := m.TokenOutMinAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + { + size, err := m.TokenIn.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.Routes) > 0 { + for iNdEx := len(m.Routes) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Routes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + 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] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgSwapExactAmountInResponse) 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 *MsgSwapExactAmountInResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSwapExactAmountInResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.TokenOutAmount.Size() + i -= size + if _, err := m.TokenOutAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *MsgSwapExactAmountOut) 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 *MsgSwapExactAmountOut) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSwapExactAmountOut) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.TokenOut.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + { + size := m.TokenInMaxAmount.Size() + i -= size + if _, err := m.TokenInMaxAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.Routes) > 0 { + for iNdEx := len(m.Routes) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Routes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + 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] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgSwapExactAmountOutResponse) 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 *MsgSwapExactAmountOutResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSwapExactAmountOutResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.TokenInAmount.Size() + i -= size + if _, err := m.TokenInAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *MsgJoinSwapExternAmountIn) 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 *MsgJoinSwapExternAmountIn) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgJoinSwapExternAmountIn) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.ShareOutMinAmount.Size() + i -= size + if _, err := m.ShareOutMinAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + { + size, err := m.TokenIn.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if m.PoolId != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.PoolId)) + i-- + dAtA[i] = 0x10 + } + 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] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgJoinSwapExternAmountInResponse) 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 *MsgJoinSwapExternAmountInResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgJoinSwapExternAmountInResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.ShareOutAmount.Size() + i -= size + if _, err := m.ShareOutAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *MsgJoinSwapShareAmountOut) 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 *MsgJoinSwapShareAmountOut) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgJoinSwapShareAmountOut) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.TokenInMaxAmount.Size() + i -= size + if _, err := m.TokenInMaxAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + { + size := m.ShareOutAmount.Size() + i -= size + if _, err := m.ShareOutAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + if len(m.TokenInDenom) > 0 { + i -= len(m.TokenInDenom) + copy(dAtA[i:], m.TokenInDenom) + i = encodeVarintTx(dAtA, i, uint64(len(m.TokenInDenom))) + i-- + dAtA[i] = 0x1a + } + if m.PoolId != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.PoolId)) + i-- + dAtA[i] = 0x10 + } + 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] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgJoinSwapShareAmountOutResponse) 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 *MsgJoinSwapShareAmountOutResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgJoinSwapShareAmountOutResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.TokenInAmount.Size() + i -= size + if _, err := m.TokenInAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *MsgExitSwapShareAmountIn) 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 *MsgExitSwapShareAmountIn) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgExitSwapShareAmountIn) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.TokenOutMinAmount.Size() + i -= size + if _, err := m.TokenOutMinAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + { + size := m.ShareInAmount.Size() + i -= size + if _, err := m.ShareInAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + if len(m.TokenOutDenom) > 0 { + i -= len(m.TokenOutDenom) + copy(dAtA[i:], m.TokenOutDenom) + i = encodeVarintTx(dAtA, i, uint64(len(m.TokenOutDenom))) + i-- + dAtA[i] = 0x1a + } + if m.PoolId != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.PoolId)) + i-- + dAtA[i] = 0x10 + } + 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] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgExitSwapShareAmountInResponse) 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 *MsgExitSwapShareAmountInResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgExitSwapShareAmountInResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.TokenOutAmount.Size() + i -= size + if _, err := m.TokenOutAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *MsgExitSwapExternAmountOut) 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 *MsgExitSwapExternAmountOut) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgExitSwapExternAmountOut) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.ShareInMaxAmount.Size() + i -= size + if _, err := m.ShareInMaxAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + { + size, err := m.TokenOut.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if m.PoolId != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.PoolId)) + i-- + dAtA[i] = 0x10 + } + 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] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgExitSwapExternAmountOutResponse) 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 *MsgExitSwapExternAmountOutResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgExitSwapExternAmountOutResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.ShareInAmount.Size() + i -= size + if _, err := m.ShareInAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + 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 *MsgJoinPool) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.PoolId != 0 { + n += 1 + sovTx(uint64(m.PoolId)) + } + l = m.ShareOutAmount.Size() + n += 1 + l + sovTx(uint64(l)) + if len(m.TokenInMaxs) > 0 { + for _, e := range m.TokenInMaxs { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } + return n +} + +func (m *MsgJoinPoolResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ShareOutAmount.Size() + n += 1 + l + sovTx(uint64(l)) + if len(m.TokenIn) > 0 { + for _, e := range m.TokenIn { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } + return n +} + +func (m *MsgExitPool) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.PoolId != 0 { + n += 1 + sovTx(uint64(m.PoolId)) + } + l = m.ShareInAmount.Size() + n += 1 + l + sovTx(uint64(l)) + if len(m.TokenOutMins) > 0 { + for _, e := range m.TokenOutMins { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } + return n +} + +func (m *MsgExitPoolResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.TokenOut) > 0 { + for _, e := range m.TokenOut { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } + return n +} + +func (m *MsgSwapExactAmountIn) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if len(m.Routes) > 0 { + for _, e := range m.Routes { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } + l = m.TokenIn.Size() + n += 1 + l + sovTx(uint64(l)) + l = m.TokenOutMinAmount.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgSwapExactAmountInResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.TokenOutAmount.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgSwapExactAmountOut) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if len(m.Routes) > 0 { + for _, e := range m.Routes { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } + l = m.TokenInMaxAmount.Size() + n += 1 + l + sovTx(uint64(l)) + l = m.TokenOut.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgSwapExactAmountOutResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.TokenInAmount.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgJoinSwapExternAmountIn) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.PoolId != 0 { + n += 1 + sovTx(uint64(m.PoolId)) + } + l = m.TokenIn.Size() + n += 1 + l + sovTx(uint64(l)) + l = m.ShareOutMinAmount.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgJoinSwapExternAmountInResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ShareOutAmount.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgJoinSwapShareAmountOut) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.PoolId != 0 { + n += 1 + sovTx(uint64(m.PoolId)) + } + l = len(m.TokenInDenom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.ShareOutAmount.Size() + n += 1 + l + sovTx(uint64(l)) + l = m.TokenInMaxAmount.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgJoinSwapShareAmountOutResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.TokenInAmount.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgExitSwapShareAmountIn) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.PoolId != 0 { + n += 1 + sovTx(uint64(m.PoolId)) + } + l = len(m.TokenOutDenom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.ShareInAmount.Size() + n += 1 + l + sovTx(uint64(l)) + l = m.TokenOutMinAmount.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgExitSwapShareAmountInResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.TokenOutAmount.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgExitSwapExternAmountOut) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.PoolId != 0 { + n += 1 + sovTx(uint64(m.PoolId)) + } + l = m.TokenOut.Size() + n += 1 + l + sovTx(uint64(l)) + l = m.ShareInMaxAmount.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgExitSwapExternAmountOutResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ShareInAmount.Size() + n += 1 + l + sovTx(uint64(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 *MsgJoinPool) 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: MsgJoinPool: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgJoinPool: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + 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 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + } + m.PoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ShareOutAmount", 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 + } + if err := m.ShareOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenInMaxs", 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 + } + m.TokenInMaxs = append(m.TokenInMaxs, types.Coin{}) + if err := m.TokenInMaxs[len(m.TokenInMaxs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgJoinPoolResponse) 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: MsgJoinPoolResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgJoinPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ShareOutAmount", 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 + } + if err := m.ShareOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", 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 + } + m.TokenIn = append(m.TokenIn, types.Coin{}) + if err := m.TokenIn[len(m.TokenIn)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgExitPool) 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: MsgExitPool: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgExitPool: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + 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 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + } + m.PoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ShareInAmount", 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 + } + if err := m.ShareInAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenOutMins", 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 + } + m.TokenOutMins = append(m.TokenOutMins, types.Coin{}) + if err := m.TokenOutMins[len(m.TokenOutMins)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgExitPoolResponse) 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: MsgExitPoolResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgExitPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenOut", 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 + } + m.TokenOut = append(m.TokenOut, types.Coin{}) + if err := m.TokenOut[len(m.TokenOut)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgSwapExactAmountIn) 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: MsgSwapExactAmountIn: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSwapExactAmountIn: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + 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 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Routes", 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 + } + m.Routes = append(m.Routes, types1.SwapAmountInRoute{}) + if err := m.Routes[len(m.Routes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", 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.TokenIn.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenOutMinAmount", 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 + } + if err := m.TokenOutMinAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgSwapExactAmountInResponse) 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: MsgSwapExactAmountInResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSwapExactAmountInResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenOutAmount", 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 + } + if err := m.TokenOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgSwapExactAmountOut) 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: MsgSwapExactAmountOut: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSwapExactAmountOut: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + 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 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Routes", 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 + } + m.Routes = append(m.Routes, types1.SwapAmountOutRoute{}) + if err := m.Routes[len(m.Routes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenInMaxAmount", 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 + } + if err := m.TokenInMaxAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenOut", 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.TokenOut.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgSwapExactAmountOutResponse) 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: MsgSwapExactAmountOutResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSwapExactAmountOutResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenInAmount", 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 + } + if err := m.TokenInAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgJoinSwapExternAmountIn) 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: MsgJoinSwapExternAmountIn: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgJoinSwapExternAmountIn: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + 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 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + } + m.PoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", 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.TokenIn.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ShareOutMinAmount", 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 + } + if err := m.ShareOutMinAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgJoinSwapExternAmountInResponse) 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: MsgJoinSwapExternAmountInResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgJoinSwapExternAmountInResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ShareOutAmount", 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 + } + if err := m.ShareOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgJoinSwapShareAmountOut) 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: MsgJoinSwapShareAmountOut: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgJoinSwapShareAmountOut: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + 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 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + } + m.PoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenInDenom", 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.TokenInDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ShareOutAmount", 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 + } + if err := m.ShareOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenInMaxAmount", 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 + } + if err := m.TokenInMaxAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgJoinSwapShareAmountOutResponse) 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: MsgJoinSwapShareAmountOutResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgJoinSwapShareAmountOutResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenInAmount", 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 + } + if err := m.TokenInAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgExitSwapShareAmountIn) 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: MsgExitSwapShareAmountIn: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgExitSwapShareAmountIn: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + 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 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + } + m.PoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenOutDenom", 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.TokenOutDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ShareInAmount", 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 + } + if err := m.ShareInAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenOutMinAmount", 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 + } + if err := m.TokenOutMinAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgExitSwapShareAmountInResponse) 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: MsgExitSwapShareAmountInResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgExitSwapShareAmountInResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenOutAmount", 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 + } + if err := m.TokenOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgExitSwapExternAmountOut) 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: MsgExitSwapExternAmountOut: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgExitSwapExternAmountOut: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + 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 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + } + m.PoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenOut", 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.TokenOut.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ShareInMaxAmount", 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 + } + if err := m.ShareInMaxAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgExitSwapExternAmountOutResponse) 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: MsgExitSwapExternAmountOutResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgExitSwapExternAmountOutResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ShareInAmount", 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 + } + if err := m.ShareInAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (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/tests/interchaintest/osmosistypes/gamm/v2types/query.pb.go b/tests/interchaintest/osmosistypes/gamm/v2types/query.pb.go new file mode 100644 index 00000000..4f10afcc --- /dev/null +++ b/tests/interchaintest/osmosistypes/gamm/v2types/query.pb.go @@ -0,0 +1,692 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: osmosis/gamm/v2/query.proto + +package v2types + +import ( + context "context" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + _ "github.com/cosmos/cosmos-sdk/codec/types" + _ "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/query" + _ "github.com/gogo/protobuf/gogoproto" + grpc1 "github.com/gogo/protobuf/grpc" + proto "github.com/gogo/protobuf/proto" + _ "github.com/notional-labs/fee-abstraction/tests/interchaintest/osmosistypes/gamm/types" + _ "google.golang.org/genproto/googleapis/api/annotations" + 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 + +// Deprecated: please use alternate in x/poolmanager +// +// Deprecated: Do not use. +type QuerySpotPriceRequest struct { + PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` + BaseAssetDenom string `protobuf:"bytes,2,opt,name=base_asset_denom,json=baseAssetDenom,proto3" json:"base_asset_denom,omitempty" yaml:"base_asset_denom"` + QuoteAssetDenom string `protobuf:"bytes,3,opt,name=quote_asset_denom,json=quoteAssetDenom,proto3" json:"quote_asset_denom,omitempty" yaml:"quote_asset_denom"` +} + +func (m *QuerySpotPriceRequest) Reset() { *m = QuerySpotPriceRequest{} } +func (m *QuerySpotPriceRequest) String() string { return proto.CompactTextString(m) } +func (*QuerySpotPriceRequest) ProtoMessage() {} +func (*QuerySpotPriceRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_49ff000e88fc374c, []int{0} +} +func (m *QuerySpotPriceRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuerySpotPriceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySpotPriceRequest.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 *QuerySpotPriceRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySpotPriceRequest.Merge(m, src) +} +func (m *QuerySpotPriceRequest) XXX_Size() int { + return m.Size() +} +func (m *QuerySpotPriceRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySpotPriceRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QuerySpotPriceRequest proto.InternalMessageInfo + +func (m *QuerySpotPriceRequest) GetPoolId() uint64 { + if m != nil { + return m.PoolId + } + return 0 +} + +func (m *QuerySpotPriceRequest) GetBaseAssetDenom() string { + if m != nil { + return m.BaseAssetDenom + } + return "" +} + +func (m *QuerySpotPriceRequest) GetQuoteAssetDenom() string { + if m != nil { + return m.QuoteAssetDenom + } + return "" +} + +// Depreacted: please use alternate in x/poolmanager +// +// Deprecated: Do not use. +type QuerySpotPriceResponse struct { + // String of the Dec. Ex) 10.203uatom + SpotPrice string `protobuf:"bytes,1,opt,name=spot_price,json=spotPrice,proto3" json:"spot_price,omitempty" yaml:"spot_price"` +} + +func (m *QuerySpotPriceResponse) Reset() { *m = QuerySpotPriceResponse{} } +func (m *QuerySpotPriceResponse) String() string { return proto.CompactTextString(m) } +func (*QuerySpotPriceResponse) ProtoMessage() {} +func (*QuerySpotPriceResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_49ff000e88fc374c, []int{1} +} +func (m *QuerySpotPriceResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuerySpotPriceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySpotPriceResponse.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 *QuerySpotPriceResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySpotPriceResponse.Merge(m, src) +} +func (m *QuerySpotPriceResponse) XXX_Size() int { + return m.Size() +} +func (m *QuerySpotPriceResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySpotPriceResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QuerySpotPriceResponse proto.InternalMessageInfo + +func (m *QuerySpotPriceResponse) GetSpotPrice() string { + if m != nil { + return m.SpotPrice + } + return "" +} + +func init() { + proto.RegisterType((*QuerySpotPriceRequest)(nil), "osmosis.gamm.v2.QuerySpotPriceRequest") + proto.RegisterType((*QuerySpotPriceResponse)(nil), "osmosis.gamm.v2.QuerySpotPriceResponse") +} + +func init() { proto.RegisterFile("osmosis/gamm/v2/query.proto", fileDescriptor_49ff000e88fc374c) } + +var fileDescriptor_49ff000e88fc374c = []byte{ + // 468 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0x41, 0x6f, 0xd3, 0x30, + 0x14, 0xc7, 0xeb, 0x02, 0x43, 0xf5, 0x61, 0x63, 0x16, 0x83, 0xd2, 0x8d, 0x74, 0xca, 0x81, 0x0d, + 0x10, 0xb1, 0x1a, 0xe0, 0xb2, 0x1b, 0x15, 0x48, 0x20, 0x71, 0x80, 0x70, 0xe3, 0x12, 0x39, 0xad, + 0x09, 0x96, 0x9a, 0x3c, 0xb7, 0x76, 0xaa, 0x55, 0x88, 0x0b, 0x27, 0x8e, 0x93, 0xb8, 0xf1, 0x89, + 0x38, 0x4e, 0xe2, 0x02, 0x97, 0x0a, 0xb5, 0x7c, 0x82, 0x7e, 0x02, 0x64, 0x3b, 0xe9, 0x58, 0x40, + 0xda, 0x2d, 0x7e, 0xbf, 0xbf, 0xff, 0xff, 0xf7, 0x9c, 0x87, 0x77, 0x41, 0x65, 0xa0, 0x84, 0xa2, + 0x29, 0xcb, 0x32, 0x3a, 0x0d, 0xe9, 0xb8, 0xe0, 0x93, 0x59, 0x20, 0x27, 0xa0, 0x81, 0x6c, 0x95, + 0x30, 0x30, 0x30, 0x98, 0x86, 0x9d, 0xeb, 0x29, 0xa4, 0x60, 0x19, 0x35, 0x5f, 0x4e, 0xd6, 0xb9, + 0x7d, 0xde, 0xa3, 0x97, 0x70, 0xcd, 0x7a, 0x54, 0x1f, 0x97, 0xd8, 0x1b, 0x58, 0x4e, 0x13, 0xa6, + 0xf8, 0x9a, 0x0e, 0x40, 0xe4, 0x25, 0xbf, 0xf7, 0x37, 0xb7, 0xf1, 0x6b, 0x95, 0x64, 0xa9, 0xc8, + 0x99, 0x16, 0x50, 0x69, 0xf7, 0x52, 0x80, 0x74, 0xc4, 0x29, 0x93, 0x82, 0xb2, 0x3c, 0x07, 0x6d, + 0xa1, 0x2a, 0xe9, 0xad, 0x92, 0xda, 0x53, 0x52, 0xbc, 0xa3, 0x2c, 0x9f, 0x55, 0xc8, 0x85, 0xc4, + 0xae, 0x79, 0x77, 0x70, 0xc8, 0xff, 0x89, 0xf0, 0xce, 0x6b, 0x13, 0xfb, 0x46, 0x82, 0x7e, 0x35, + 0x11, 0x03, 0x1e, 0xf1, 0x71, 0xc1, 0x95, 0x26, 0xf7, 0xf1, 0x55, 0x09, 0x30, 0x8a, 0xc5, 0xb0, + 0x8d, 0xf6, 0xd1, 0xe1, 0xe5, 0x3e, 0x59, 0xcd, 0xbb, 0x9b, 0x33, 0x96, 0x8d, 0x8e, 0xfc, 0x12, + 0xf8, 0xd1, 0x86, 0xf9, 0x7a, 0x31, 0x24, 0xcf, 0xf0, 0x35, 0x33, 0x41, 0xcc, 0x94, 0xe2, 0x3a, + 0x1e, 0xf2, 0x1c, 0xb2, 0x76, 0x73, 0x1f, 0x1d, 0xb6, 0xfa, 0xbb, 0xab, 0x79, 0xf7, 0xa6, 0xbb, + 0x55, 0x57, 0xf8, 0xd1, 0xa6, 0x29, 0x3d, 0x31, 0x95, 0xa7, 0xa6, 0x40, 0x9e, 0xe3, 0xed, 0x71, + 0x01, 0xfa, 0xbc, 0xcf, 0x25, 0xeb, 0xb3, 0xb7, 0x9a, 0x77, 0xdb, 0xce, 0xe7, 0x1f, 0x89, 0x1f, + 0x6d, 0xd9, 0xda, 0x99, 0xd3, 0x51, 0xb3, 0x8d, 0xfc, 0x08, 0xdf, 0xa8, 0x8f, 0xa6, 0x24, 0xe4, + 0x8a, 0x93, 0x47, 0x18, 0x2b, 0x09, 0x3a, 0x96, 0xa6, 0x6a, 0xc7, 0x6b, 0xf5, 0x77, 0x56, 0xf3, + 0xee, 0xb6, 0x0b, 0x38, 0x63, 0x7e, 0xd4, 0x52, 0xd5, 0x6d, 0xe3, 0x19, 0x7e, 0x45, 0xf8, 0x8a, + 0x35, 0x25, 0x27, 0x08, 0xb7, 0xd6, 0xce, 0xe4, 0x4e, 0x50, 0x5b, 0x97, 0xe0, 0xbf, 0xaf, 0xda, + 0x39, 0xb8, 0x50, 0xe7, 0x5a, 0xf4, 0xc3, 0x4f, 0xdf, 0x7f, 0x7f, 0x69, 0xde, 0x25, 0x07, 0xb4, + 0xbe, 0xa4, 0xe6, 0xc9, 0x15, 0xfd, 0x50, 0xfe, 0x83, 0x8f, 0xd4, 0x36, 0xaa, 0x3e, 0x37, 0x51, + 0xff, 0xe5, 0xb7, 0x85, 0x87, 0x4e, 0x17, 0x1e, 0xfa, 0xb5, 0xf0, 0xd0, 0xc9, 0xd2, 0x6b, 0x9c, + 0x2e, 0xbd, 0xc6, 0x8f, 0xa5, 0xd7, 0x78, 0x1b, 0xa6, 0x42, 0xbf, 0x2f, 0x92, 0x60, 0x00, 0x59, + 0xe5, 0xf7, 0x60, 0xc4, 0x12, 0xb5, 0x36, 0x9f, 0xf6, 0x1e, 0xd3, 0xe3, 0x2a, 0x42, 0xcf, 0x24, + 0x57, 0xc9, 0x86, 0xdd, 0x90, 0x87, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x7d, 0x9a, 0x16, 0x18, + 0x26, 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 + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type QueryClient interface { + // Deprecated: please use alternate in x/poolmanager + SpotPrice(ctx context.Context, in *QuerySpotPriceRequest, opts ...grpc.CallOption) (*QuerySpotPriceResponse, error) +} + +type queryClient struct { + cc grpc1.ClientConn +} + +func NewQueryClient(cc grpc1.ClientConn) QueryClient { + return &queryClient{cc} +} + +// Deprecated: Do not use. +func (c *queryClient) SpotPrice(ctx context.Context, in *QuerySpotPriceRequest, opts ...grpc.CallOption) (*QuerySpotPriceResponse, error) { + out := new(QuerySpotPriceResponse) + err := c.cc.Invoke(ctx, "/osmosis.gamm.v2.Query/SpotPrice", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +type QueryServer interface { + // Deprecated: please use alternate in x/poolmanager + SpotPrice(context.Context, *QuerySpotPriceRequest) (*QuerySpotPriceResponse, error) +} + +// UnimplementedQueryServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (*UnimplementedQueryServer) SpotPrice(ctx context.Context, req *QuerySpotPriceRequest) (*QuerySpotPriceResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SpotPrice not implemented") +} + +func RegisterQueryServer(s grpc1.Server, srv QueryServer) { + s.RegisterService(&_Query_serviceDesc, srv) +} + +func _Query_SpotPrice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QuerySpotPriceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).SpotPrice(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.gamm.v2.Query/SpotPrice", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).SpotPrice(ctx, req.(*QuerySpotPriceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Query_serviceDesc = grpc.ServiceDesc{ + ServiceName: "osmosis.gamm.v2.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "SpotPrice", + Handler: _Query_SpotPrice_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "osmosis/gamm/v2/query.proto", +} + +func (m *QuerySpotPriceRequest) 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 *QuerySpotPriceRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuerySpotPriceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.QuoteAssetDenom) > 0 { + i -= len(m.QuoteAssetDenom) + copy(dAtA[i:], m.QuoteAssetDenom) + i = encodeVarintQuery(dAtA, i, uint64(len(m.QuoteAssetDenom))) + i-- + dAtA[i] = 0x1a + } + if len(m.BaseAssetDenom) > 0 { + i -= len(m.BaseAssetDenom) + copy(dAtA[i:], m.BaseAssetDenom) + i = encodeVarintQuery(dAtA, i, uint64(len(m.BaseAssetDenom))) + i-- + dAtA[i] = 0x12 + } + if m.PoolId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QuerySpotPriceResponse) 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 *QuerySpotPriceResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuerySpotPriceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.SpotPrice) > 0 { + i -= len(m.SpotPrice) + copy(dAtA[i:], m.SpotPrice) + i = encodeVarintQuery(dAtA, i, uint64(len(m.SpotPrice))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *QuerySpotPriceRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PoolId != 0 { + n += 1 + sovQuery(uint64(m.PoolId)) + } + l = len(m.BaseAssetDenom) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.QuoteAssetDenom) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QuerySpotPriceResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SpotPrice) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QuerySpotPriceRequest) 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 ErrIntOverflowQuery + } + 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: QuerySpotPriceRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QuerySpotPriceRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + } + m.PoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BaseAssetDenom", 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.BaseAssetDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field QuoteAssetDenom", 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.QuoteAssetDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QuerySpotPriceResponse) 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 ErrIntOverflowQuery + } + 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: QuerySpotPriceResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QuerySpotPriceResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SpotPrice", 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.SpotPrice = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipQuery(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, ErrIntOverflowQuery + } + 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, ErrIntOverflowQuery + } + 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, ErrIntOverflowQuery + } + 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, ErrInvalidLengthQuery + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupQuery + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthQuery + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") +) diff --git a/tests/interchaintest/osmosistypes/gamm/v2types/query.pb.gw.go b/tests/interchaintest/osmosistypes/gamm/v2types/query.pb.gw.go new file mode 100644 index 00000000..2195093b --- /dev/null +++ b/tests/interchaintest/osmosistypes/gamm/v2types/query.pb.gw.go @@ -0,0 +1,207 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: osmosis/gamm/v2/query.proto + +/* +Package v2types is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package v2types + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage +var _ = metadata.Join + +var ( + filter_Query_SpotPrice_0 = &utilities.DoubleArray{Encoding: map[string]int{"pool_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Query_SpotPrice_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QuerySpotPriceRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["pool_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") + } + + protoReq.PoolId, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SpotPrice_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.SpotPrice(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_SpotPrice_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QuerySpotPriceRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["pool_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") + } + + protoReq.PoolId, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SpotPrice_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SpotPrice(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". +// UnaryRPC :call QueryServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { + + mux.Handle("GET", pattern_Query_SpotPrice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_SpotPrice_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_SpotPrice_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterQueryHandler(ctx, mux, conn) +} + +// RegisterQueryHandler registers the http handlers for service Query to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn)) +} + +// RegisterQueryHandlerClient registers the http handlers for service Query +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "QueryClient" to call the correct interceptors. +func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { + + mux.Handle("GET", pattern_Query_SpotPrice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_SpotPrice_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_SpotPrice_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Query_SpotPrice_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"osmosis", "gamm", "v2", "pools", "pool_id", "prices"}, "", runtime.AssumeColonVerbOpt(false))) +) + +var ( + forward_Query_SpotPrice_0 = runtime.ForwardResponseMessage +) diff --git a/tests/interchaintest/osmosistypes/poolmanager/types/swap_route.pb.go b/tests/interchaintest/osmosistypes/poolmanager/types/swap_route.pb.go new file mode 100644 index 00000000..f8e87f27 --- /dev/null +++ b/tests/interchaintest/osmosistypes/poolmanager/types/swap_route.pb.go @@ -0,0 +1,1032 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: osmosis/poolmanager/v1beta1/swap_route.proto + +package types + +import ( + fmt "fmt" + github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/gogo/protobuf/gogoproto" + proto "github.com/gogo/protobuf/proto" + 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 + +type SwapAmountInRoute struct { + PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` + TokenOutDenom string `protobuf:"bytes,2,opt,name=token_out_denom,json=tokenOutDenom,proto3" json:"token_out_denom,omitempty" yaml:"token_out_denom"` +} + +func (m *SwapAmountInRoute) Reset() { *m = SwapAmountInRoute{} } +func (m *SwapAmountInRoute) String() string { return proto.CompactTextString(m) } +func (*SwapAmountInRoute) ProtoMessage() {} +func (*SwapAmountInRoute) Descriptor() ([]byte, []int) { + return fileDescriptor_cddd97a9a05492a8, []int{0} +} +func (m *SwapAmountInRoute) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SwapAmountInRoute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_SwapAmountInRoute.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 *SwapAmountInRoute) XXX_Merge(src proto.Message) { + xxx_messageInfo_SwapAmountInRoute.Merge(m, src) +} +func (m *SwapAmountInRoute) XXX_Size() int { + return m.Size() +} +func (m *SwapAmountInRoute) XXX_DiscardUnknown() { + xxx_messageInfo_SwapAmountInRoute.DiscardUnknown(m) +} + +var xxx_messageInfo_SwapAmountInRoute proto.InternalMessageInfo + +func (m *SwapAmountInRoute) GetPoolId() uint64 { + if m != nil { + return m.PoolId + } + return 0 +} + +func (m *SwapAmountInRoute) GetTokenOutDenom() string { + if m != nil { + return m.TokenOutDenom + } + return "" +} + +type SwapAmountOutRoute struct { + PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` + TokenInDenom string `protobuf:"bytes,2,opt,name=token_in_denom,json=tokenInDenom,proto3" json:"token_in_denom,omitempty" yaml:"token_in_denom"` +} + +func (m *SwapAmountOutRoute) Reset() { *m = SwapAmountOutRoute{} } +func (m *SwapAmountOutRoute) String() string { return proto.CompactTextString(m) } +func (*SwapAmountOutRoute) ProtoMessage() {} +func (*SwapAmountOutRoute) Descriptor() ([]byte, []int) { + return fileDescriptor_cddd97a9a05492a8, []int{1} +} +func (m *SwapAmountOutRoute) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SwapAmountOutRoute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_SwapAmountOutRoute.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 *SwapAmountOutRoute) XXX_Merge(src proto.Message) { + xxx_messageInfo_SwapAmountOutRoute.Merge(m, src) +} +func (m *SwapAmountOutRoute) XXX_Size() int { + return m.Size() +} +func (m *SwapAmountOutRoute) XXX_DiscardUnknown() { + xxx_messageInfo_SwapAmountOutRoute.DiscardUnknown(m) +} + +var xxx_messageInfo_SwapAmountOutRoute proto.InternalMessageInfo + +func (m *SwapAmountOutRoute) GetPoolId() uint64 { + if m != nil { + return m.PoolId + } + return 0 +} + +func (m *SwapAmountOutRoute) GetTokenInDenom() string { + if m != nil { + return m.TokenInDenom + } + return "" +} + +type SwapAmountInSplitRoute struct { + Pools []SwapAmountInRoute `protobuf:"bytes,1,rep,name=pools,proto3" json:"pools" yaml:"pools"` + TokenInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,2,opt,name=token_in_amount,json=tokenInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_in_amount" yaml:"token_in_amount"` +} + +func (m *SwapAmountInSplitRoute) Reset() { *m = SwapAmountInSplitRoute{} } +func (m *SwapAmountInSplitRoute) String() string { return proto.CompactTextString(m) } +func (*SwapAmountInSplitRoute) ProtoMessage() {} +func (*SwapAmountInSplitRoute) Descriptor() ([]byte, []int) { + return fileDescriptor_cddd97a9a05492a8, []int{2} +} +func (m *SwapAmountInSplitRoute) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SwapAmountInSplitRoute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_SwapAmountInSplitRoute.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 *SwapAmountInSplitRoute) XXX_Merge(src proto.Message) { + xxx_messageInfo_SwapAmountInSplitRoute.Merge(m, src) +} +func (m *SwapAmountInSplitRoute) XXX_Size() int { + return m.Size() +} +func (m *SwapAmountInSplitRoute) XXX_DiscardUnknown() { + xxx_messageInfo_SwapAmountInSplitRoute.DiscardUnknown(m) +} + +var xxx_messageInfo_SwapAmountInSplitRoute proto.InternalMessageInfo + +func (m *SwapAmountInSplitRoute) GetPools() []SwapAmountInRoute { + if m != nil { + return m.Pools + } + return nil +} + +type SwapAmountOutSplitRoute struct { + Pools []SwapAmountOutRoute `protobuf:"bytes,1,rep,name=pools,proto3" json:"pools" yaml:"pools"` + TokenOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,2,opt,name=token_out_amount,json=tokenOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_out_amount" yaml:"token_out_amount"` +} + +func (m *SwapAmountOutSplitRoute) Reset() { *m = SwapAmountOutSplitRoute{} } +func (m *SwapAmountOutSplitRoute) String() string { return proto.CompactTextString(m) } +func (*SwapAmountOutSplitRoute) ProtoMessage() {} +func (*SwapAmountOutSplitRoute) Descriptor() ([]byte, []int) { + return fileDescriptor_cddd97a9a05492a8, []int{3} +} +func (m *SwapAmountOutSplitRoute) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SwapAmountOutSplitRoute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_SwapAmountOutSplitRoute.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 *SwapAmountOutSplitRoute) XXX_Merge(src proto.Message) { + xxx_messageInfo_SwapAmountOutSplitRoute.Merge(m, src) +} +func (m *SwapAmountOutSplitRoute) XXX_Size() int { + return m.Size() +} +func (m *SwapAmountOutSplitRoute) XXX_DiscardUnknown() { + xxx_messageInfo_SwapAmountOutSplitRoute.DiscardUnknown(m) +} + +var xxx_messageInfo_SwapAmountOutSplitRoute proto.InternalMessageInfo + +func (m *SwapAmountOutSplitRoute) GetPools() []SwapAmountOutRoute { + if m != nil { + return m.Pools + } + return nil +} + +func init() { + proto.RegisterType((*SwapAmountInRoute)(nil), "osmosis.poolmanager.v1beta1.SwapAmountInRoute") + proto.RegisterType((*SwapAmountOutRoute)(nil), "osmosis.poolmanager.v1beta1.SwapAmountOutRoute") + proto.RegisterType((*SwapAmountInSplitRoute)(nil), "osmosis.poolmanager.v1beta1.SwapAmountInSplitRoute") + proto.RegisterType((*SwapAmountOutSplitRoute)(nil), "osmosis.poolmanager.v1beta1.SwapAmountOutSplitRoute") +} + +func init() { + proto.RegisterFile("osmosis/poolmanager/v1beta1/swap_route.proto", fileDescriptor_cddd97a9a05492a8) +} + +var fileDescriptor_cddd97a9a05492a8 = []byte{ + // 446 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x93, 0x4d, 0x8b, 0xd3, 0x40, + 0x18, 0xc7, 0x33, 0xbe, 0xac, 0x38, 0xae, 0x55, 0xc3, 0xba, 0x5b, 0x57, 0x48, 0x4a, 0x0e, 0x52, + 0xd0, 0xce, 0x50, 0x45, 0x04, 0x2f, 0x62, 0xf0, 0x60, 0x4e, 0xc5, 0xf4, 0x56, 0x0f, 0x61, 0xd2, + 0x84, 0x18, 0x9a, 0xcc, 0x84, 0xce, 0xa4, 0xb5, 0x57, 0xf1, 0x03, 0xf8, 0xb1, 0x7a, 0xec, 0x51, + 0x3c, 0x04, 0x69, 0xc1, 0x8b, 0xb7, 0x7c, 0x02, 0xc9, 0x24, 0xb1, 0x49, 0x85, 0xa2, 0x9e, 0x32, + 0x2f, 0xcf, 0xcb, 0xef, 0xff, 0xcf, 0x33, 0xf0, 0x09, 0xe3, 0x31, 0xe3, 0x21, 0xc7, 0x09, 0x63, + 0x51, 0x4c, 0x28, 0x09, 0xfc, 0x39, 0x5e, 0x0c, 0x5d, 0x5f, 0x90, 0x21, 0xe6, 0x4b, 0x92, 0x38, + 0x73, 0x96, 0x0a, 0x1f, 0x25, 0x73, 0x26, 0x98, 0xfa, 0xb0, 0x8a, 0x46, 0x8d, 0x68, 0x54, 0x45, + 0x5f, 0x9e, 0x05, 0x2c, 0x60, 0x32, 0x0e, 0x17, 0xab, 0x32, 0xc5, 0xf8, 0x0c, 0xe0, 0xbd, 0xf1, + 0x92, 0x24, 0xaf, 0x63, 0x96, 0x52, 0x61, 0x51, 0xbb, 0x28, 0xa7, 0x3e, 0x86, 0x37, 0x8a, 0x12, + 0x4e, 0xe8, 0x75, 0x41, 0x0f, 0xf4, 0xaf, 0x99, 0x6a, 0x9e, 0xe9, 0x9d, 0x15, 0x89, 0xa3, 0x97, + 0x46, 0x75, 0x61, 0xd8, 0x27, 0xc5, 0xca, 0xf2, 0x54, 0x13, 0xde, 0x11, 0x6c, 0xe6, 0x53, 0x87, + 0xa5, 0xc2, 0xf1, 0x7c, 0xca, 0xe2, 0xee, 0x95, 0x1e, 0xe8, 0xdf, 0x34, 0x2f, 0xf3, 0x4c, 0x3f, + 0x2f, 0x93, 0x0e, 0x02, 0x0c, 0xfb, 0xb6, 0x3c, 0x19, 0xa5, 0xe2, 0x8d, 0xdc, 0x7f, 0x02, 0x50, + 0xdd, 0x63, 0x8c, 0x52, 0xf1, 0x1f, 0x1c, 0xaf, 0x60, 0xa7, 0x6c, 0x13, 0xd2, 0x16, 0xc6, 0x83, + 0x3c, 0xd3, 0xef, 0x37, 0x31, 0xea, 0x7b, 0xc3, 0x3e, 0x95, 0x07, 0x16, 0x2d, 0x21, 0x7e, 0x00, + 0x78, 0xde, 0xf4, 0x62, 0x9c, 0x44, 0x61, 0x05, 0x32, 0x81, 0xd7, 0x8b, 0x2e, 0xbc, 0x0b, 0x7a, + 0x57, 0xfb, 0xb7, 0x9e, 0x22, 0x74, 0xc4, 0x69, 0xf4, 0x87, 0x9f, 0xe6, 0xd9, 0x3a, 0xd3, 0x95, + 0x3c, 0xd3, 0x4f, 0xf7, 0xe8, 0xdc, 0xb0, 0xcb, 0x92, 0x6a, 0x52, 0xfb, 0x17, 0x52, 0x87, 0xc8, + 0xb4, 0x0a, 0xfc, 0x6d, 0x91, 0xf5, 0x2d, 0xd3, 0x1f, 0x05, 0xa1, 0xf8, 0x90, 0xba, 0x68, 0xca, + 0x62, 0x3c, 0x95, 0x8d, 0xab, 0xcf, 0x80, 0x7b, 0x33, 0x2c, 0x56, 0x89, 0xcf, 0x91, 0x45, 0xc5, + 0xa1, 0xdb, 0xbf, 0xcb, 0xd5, 0x6e, 0x5b, 0xb4, 0xa4, 0x32, 0x7e, 0x02, 0x78, 0xd1, 0x72, 0xbb, + 0xa1, 0xf4, 0x7d, 0x5b, 0x29, 0xfe, 0x4b, 0xa5, 0xf5, 0x2f, 0x3b, 0x2e, 0x95, 0xc3, 0xbb, 0xfb, + 0x49, 0x68, 0x69, 0xb5, 0xfe, 0x59, 0xeb, 0xc5, 0xe1, 0x64, 0xd5, 0x62, 0x3b, 0xf5, 0x68, 0x95, + 0x64, 0xe6, 0xbb, 0xf5, 0x56, 0x03, 0x9b, 0xad, 0x06, 0xbe, 0x6f, 0x35, 0xf0, 0x65, 0xa7, 0x29, + 0x9b, 0x9d, 0xa6, 0x7c, 0xdd, 0x69, 0xca, 0xe4, 0x45, 0xa3, 0x59, 0x25, 0x73, 0x10, 0x11, 0x97, + 0xd7, 0x1b, 0xbc, 0x18, 0x3e, 0xc7, 0x1f, 0x5b, 0x6f, 0x4f, 0x12, 0xb8, 0x27, 0xf2, 0xf1, 0x3c, + 0xfb, 0x15, 0x00, 0x00, 0xff, 0xff, 0x05, 0xfe, 0x01, 0x2a, 0x9f, 0x03, 0x00, 0x00, +} + +func (m *SwapAmountInRoute) 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 *SwapAmountInRoute) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SwapAmountInRoute) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TokenOutDenom) > 0 { + i -= len(m.TokenOutDenom) + copy(dAtA[i:], m.TokenOutDenom) + i = encodeVarintSwapRoute(dAtA, i, uint64(len(m.TokenOutDenom))) + i-- + dAtA[i] = 0x12 + } + if m.PoolId != 0 { + i = encodeVarintSwapRoute(dAtA, i, uint64(m.PoolId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *SwapAmountOutRoute) 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 *SwapAmountOutRoute) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SwapAmountOutRoute) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TokenInDenom) > 0 { + i -= len(m.TokenInDenom) + copy(dAtA[i:], m.TokenInDenom) + i = encodeVarintSwapRoute(dAtA, i, uint64(len(m.TokenInDenom))) + i-- + dAtA[i] = 0x12 + } + if m.PoolId != 0 { + i = encodeVarintSwapRoute(dAtA, i, uint64(m.PoolId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *SwapAmountInSplitRoute) 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 *SwapAmountInSplitRoute) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SwapAmountInSplitRoute) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.TokenInAmount.Size() + i -= size + if _, err := m.TokenInAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintSwapRoute(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Pools) > 0 { + for iNdEx := len(m.Pools) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Pools[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintSwapRoute(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *SwapAmountOutSplitRoute) 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 *SwapAmountOutSplitRoute) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SwapAmountOutSplitRoute) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.TokenOutAmount.Size() + i -= size + if _, err := m.TokenOutAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintSwapRoute(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Pools) > 0 { + for iNdEx := len(m.Pools) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Pools[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintSwapRoute(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func encodeVarintSwapRoute(dAtA []byte, offset int, v uint64) int { + offset -= sovSwapRoute(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *SwapAmountInRoute) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PoolId != 0 { + n += 1 + sovSwapRoute(uint64(m.PoolId)) + } + l = len(m.TokenOutDenom) + if l > 0 { + n += 1 + l + sovSwapRoute(uint64(l)) + } + return n +} + +func (m *SwapAmountOutRoute) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PoolId != 0 { + n += 1 + sovSwapRoute(uint64(m.PoolId)) + } + l = len(m.TokenInDenom) + if l > 0 { + n += 1 + l + sovSwapRoute(uint64(l)) + } + return n +} + +func (m *SwapAmountInSplitRoute) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Pools) > 0 { + for _, e := range m.Pools { + l = e.Size() + n += 1 + l + sovSwapRoute(uint64(l)) + } + } + l = m.TokenInAmount.Size() + n += 1 + l + sovSwapRoute(uint64(l)) + return n +} + +func (m *SwapAmountOutSplitRoute) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Pools) > 0 { + for _, e := range m.Pools { + l = e.Size() + n += 1 + l + sovSwapRoute(uint64(l)) + } + } + l = m.TokenOutAmount.Size() + n += 1 + l + sovSwapRoute(uint64(l)) + return n +} + +func sovSwapRoute(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozSwapRoute(x uint64) (n int) { + return sovSwapRoute(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *SwapAmountInRoute) 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 ErrIntOverflowSwapRoute + } + 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: SwapAmountInRoute: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SwapAmountInRoute: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + } + m.PoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowSwapRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenOutDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowSwapRoute + } + 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 ErrInvalidLengthSwapRoute + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthSwapRoute + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TokenOutDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipSwapRoute(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthSwapRoute + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SwapAmountOutRoute) 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 ErrIntOverflowSwapRoute + } + 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: SwapAmountOutRoute: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SwapAmountOutRoute: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + } + m.PoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowSwapRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenInDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowSwapRoute + } + 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 ErrInvalidLengthSwapRoute + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthSwapRoute + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TokenInDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipSwapRoute(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthSwapRoute + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SwapAmountInSplitRoute) 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 ErrIntOverflowSwapRoute + } + 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: SwapAmountInSplitRoute: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SwapAmountInSplitRoute: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pools", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowSwapRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthSwapRoute + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthSwapRoute + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Pools = append(m.Pools, SwapAmountInRoute{}) + if err := m.Pools[len(m.Pools)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenInAmount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowSwapRoute + } + 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 ErrInvalidLengthSwapRoute + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthSwapRoute + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.TokenInAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipSwapRoute(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthSwapRoute + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SwapAmountOutSplitRoute) 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 ErrIntOverflowSwapRoute + } + 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: SwapAmountOutSplitRoute: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SwapAmountOutSplitRoute: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pools", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowSwapRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthSwapRoute + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthSwapRoute + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Pools = append(m.Pools, SwapAmountOutRoute{}) + if err := m.Pools[len(m.Pools)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenOutAmount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowSwapRoute + } + 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 ErrInvalidLengthSwapRoute + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthSwapRoute + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.TokenOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipSwapRoute(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthSwapRoute + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipSwapRoute(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, ErrIntOverflowSwapRoute + } + 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, ErrIntOverflowSwapRoute + } + 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, ErrIntOverflowSwapRoute + } + 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, ErrInvalidLengthSwapRoute + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupSwapRoute + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthSwapRoute + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthSwapRoute = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowSwapRoute = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupSwapRoute = fmt.Errorf("proto: unexpected end of group") +) diff --git a/tests/interchaintest/packet_foward_test.go b/tests/interchaintest/packet_foward_test.go index 40cf517b..6e6b050d 100644 --- a/tests/interchaintest/packet_foward_test.go +++ b/tests/interchaintest/packet_foward_test.go @@ -9,12 +9,14 @@ import ( "testing" "time" - transfertypes "github.com/cosmos/ibc-go/v4/modules/apps/transfer/types" - interchaintest "github.com/strangelove-ventures/interchaintest/v4" - "github.com/strangelove-ventures/interchaintest/v4/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v4/ibc" - "github.com/strangelove-ventures/interchaintest/v4/testreporter" - "github.com/strangelove-ventures/interchaintest/v4/testutil" + sdktypes "github.com/cosmos/cosmos-sdk/types" + + transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + interchaintest "github.com/strangelove-ventures/interchaintest/v7" + "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v7/ibc" + "github.com/strangelove-ventures/interchaintest/v7/testreporter" + "github.com/strangelove-ventures/interchaintest/v7/testutil" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) @@ -307,14 +309,14 @@ func TestPacketForwardMiddleware(t *testing.T) { // Send Gaia uatom to Osmosis gaiaHeight, err := gaia.Height(ctx) require.NoError(t, err) - dstAddress := osmosisUser.Bech32Address(osmosis.Config().Bech32Prefix) + dstAddress := sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()) transfer := ibc.WalletAmount{ Address: dstAddress, Denom: gaia.Config().Denom, Amount: amountToSend, } - tx, err := gaia.SendIBCTransfer(ctx, channGaiaOsmosis.ChannelID, gaiaUser.KeyName, transfer, ibc.TransferOptions{}) + tx, err := gaia.SendIBCTransfer(ctx, channGaiaOsmosis.ChannelID, gaiaUser.KeyName(), transfer, ibc.TransferOptions{}) require.NoError(t, err) require.NoError(t, tx.Validate()) @@ -326,14 +328,14 @@ func TestPacketForwardMiddleware(t *testing.T) { // Send Feeabs stake to Osmosis feeabsHeight, err := feeabs.Height(ctx) require.NoError(t, err) - dstAddress = osmosisUser.Bech32Address(osmosis.Config().Bech32Prefix) + dstAddress =sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()) transfer = ibc.WalletAmount{ Address: dstAddress, Denom: feeabs.Config().Denom, Amount: amountToSend, } - tx, err = feeabs.SendIBCTransfer(ctx, channFeeabsOsmosis.ChannelID, feeabsUser.KeyName, transfer, ibc.TransferOptions{}) + tx, err = feeabs.SendIBCTransfer(ctx, channFeeabsOsmosis.ChannelID, feeabsUser.KeyName(), transfer, ibc.TransferOptions{}) require.NoError(t, err) require.NoError(t, tx.Validate()) @@ -345,14 +347,14 @@ func TestPacketForwardMiddleware(t *testing.T) { // Send Gaia uatom to Feeabs gaiaHeight, err = gaia.Height(ctx) require.NoError(t, err) - dstAddress = feeabsUser.Bech32Address(feeabs.Config().Bech32Prefix) + dstAddress = sdktypes.MustBech32ifyAddressBytes(feeabs.Config().Bech32Prefix, feeabsUser.Address()) transfer = ibc.WalletAmount{ Address: dstAddress, Denom: gaia.Config().Denom, Amount: amountToSend, } - tx, err = gaia.SendIBCTransfer(ctx, channGaiaFeeabs.ChannelID, gaiaUser.KeyName, transfer, ibc.TransferOptions{}) + tx, err = gaia.SendIBCTransfer(ctx, channGaiaFeeabs.ChannelID, gaiaUser.KeyName(), transfer, ibc.TransferOptions{}) require.NoError(t, err) require.NoError(t, tx.Validate()) @@ -362,13 +364,13 @@ func TestPacketForwardMiddleware(t *testing.T) { require.NoError(t, err) // Setup contract on Osmosis // Store code crosschain Registry - crossChainRegistryContractID, err := osmosis.StoreContract(ctx, osmosisUser.KeyName, "./bytecode/crosschain_registry.wasm") + crossChainRegistryContractID, err := osmosis.StoreContract(ctx, osmosisUser.KeyName(), "./bytecode/crosschain_registry.wasm") require.NoError(t, err) _ = crossChainRegistryContractID // // Instatiate - owner := osmosisUser.Bech32Address(osmosis.Config().Bech32Prefix) + owner := sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()) initMsg := fmt.Sprintf("{\"owner\":\"%s\"}", owner) - registryContractAddress, err := osmosis.InstantiateContract(ctx, osmosisUser.KeyName, crossChainRegistryContractID, initMsg, true) + registryContractAddress, err := osmosis.InstantiateContract(ctx, osmosisUser.KeyName(), crossChainRegistryContractID, initMsg, true) require.NoError(t, err) // Execute msg := fmt.Sprintf("{\"modify_chain_channel_links\": {\"operations\": [{\"operation\": \"set\",\"source_chain\": \"feeabs\",\"destination_chain\": \"osmosis\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"osmosis\",\"destination_chain\": \"feeabs\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"feeabs\",\"destination_chain\": \"gaia\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"gaia\",\"destination_chain\": \"feeabs\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"osmosis\",\"destination_chain\": \"gaia\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"gaia\",\"destination_chain\": \"osmosis\",\"channel_id\": \"%s\"}]}}", @@ -378,7 +380,7 @@ func TestPacketForwardMiddleware(t *testing.T) { channGaiaFeeabs.ChannelID, channOsmosisGaia.ChannelID, channGaiaOsmosis.ChannelID) - _, err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName, registryContractAddress, msg) + err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName(), registryContractAddress, msg) require.NoError(t, err) // Execute msg = `{ @@ -392,23 +394,23 @@ func TestPacketForwardMiddleware(t *testing.T) { ] } }` - _, err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName, registryContractAddress, msg) + err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName(), registryContractAddress, msg) require.NoError(t, err) // Create pool Osmosis(uatom)/Osmosis(stake) on Osmosis denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(channOsmosisGaia.PortID, channOsmosisGaia.ChannelID, gaia.Config().Denom)) uatomOnOsmosis := denomTrace.IBCDenom() - osmosisUserBalance, err := osmosis.GetBalance(ctx, osmosisUser.Bech32Address(osmosis.Config().Bech32Prefix), uatomOnOsmosis) + osmosisUserBalance, err := osmosis.GetBalance(ctx, sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()), uatomOnOsmosis) require.NoError(t, err) require.Equal(t, amountToSend, osmosisUserBalance) denomTrace = transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(channOsmosisFeeabs.PortID, channOsmosisFeeabs.ChannelID, feeabs.Config().Denom)) stakeOnOsmosis := denomTrace.IBCDenom() - osmosisUserBalance, err = osmosis.GetBalance(ctx, osmosisUser.Bech32Address(osmosis.Config().Bech32Prefix), stakeOnOsmosis) + osmosisUserBalance, err = osmosis.GetBalance(ctx, sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()), stakeOnOsmosis) require.NoError(t, err) require.Equal(t, amountToSend, osmosisUserBalance) - poolID, err := cosmos.OsmosisCreatePool(osmosis, ctx, osmosisUser.KeyName, cosmos.OsmosisPoolParams{ + poolID, err := cosmos.OsmosisCreatePool(osmosis, ctx, osmosisUser.KeyName(), cosmos.OsmosisPoolParams{ Weights: fmt.Sprintf("5%s,5%s", stakeOnOsmosis, uatomOnOsmosis), InitialDeposit: fmt.Sprintf("1000000000%s,1000000000%s", stakeOnOsmosis, uatomOnOsmosis), SwapFee: "0.01", @@ -419,10 +421,10 @@ func TestPacketForwardMiddleware(t *testing.T) { require.Equal(t, poolID, "1") // store swaprouter - swapRouterContractID, err := osmosis.StoreContract(ctx, osmosisUser.KeyName, "./bytecode/swaprouter.wasm") + swapRouterContractID, err := osmosis.StoreContract(ctx, osmosisUser.KeyName(), "./bytecode/swaprouter.wasm") require.NoError(t, err) // instantiate - swapRouterContractAddress, err := osmosis.InstantiateContract(ctx, osmosisUser.KeyName, swapRouterContractID, initMsg, true) + swapRouterContractAddress, err := osmosis.InstantiateContract(ctx, osmosisUser.KeyName(), swapRouterContractID, initMsg, true) require.NoError(t, err) // execute @@ -432,16 +434,15 @@ func TestPacketForwardMiddleware(t *testing.T) { poolID, stakeOnOsmosis, ) - txHash, err := osmosis.ExecuteContract(ctx, osmosisUser.KeyName, swapRouterContractAddress, msg) + err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName(), swapRouterContractAddress, msg) require.NoError(t, err) - _ = txHash // store xcs - xcsContractID, err := osmosis.StoreContract(ctx, osmosisUser.KeyName, "./bytecode/crosschain_swaps.wasm") + xcsContractID, err := osmosis.StoreContract(ctx, osmosisUser.KeyName(), "./bytecode/crosschain_swaps.wasm") require.NoError(t, err) // instantiate initMsg = fmt.Sprintf("{\"swap_contract\":\"%s\",\"governor\": \"%s\"}", swapRouterContractAddress, owner) - xcsContractAddress, err := osmosis.InstantiateContract(ctx, osmosisUser.KeyName, xcsContractID, initMsg, true) + xcsContractAddress, err := osmosis.InstantiateContract(ctx, osmosisUser.KeyName(), xcsContractID, initMsg, true) _ = xcsContractAddress require.NoError(t, err) // Swap Feeabs(uatom) to Osmosis @@ -457,7 +458,7 @@ func TestPacketForwardMiddleware(t *testing.T) { Amount: 1_000_000, } - tx, err = gaia.SendIBCTransfer(ctx, channGaiaFeeabs.ChannelID, gaiaUser.KeyName, transfer, ibc.TransferOptions{}) + tx, err = gaia.SendIBCTransfer(ctx, channGaiaFeeabs.ChannelID, gaiaUser.KeyName(), transfer, ibc.TransferOptions{}) require.NoError(t, err) require.NoError(t, tx.Validate()) @@ -472,7 +473,7 @@ func TestPacketForwardMiddleware(t *testing.T) { current_directory, _ := os.Getwd() param_change_path := path.Join(current_directory, "proposal", "proposal.json") - paramTx, err := feeabs.ParamChangeProposal(ctx, feeabsUser.KeyName, param_change_path) + paramTx, err := feeabs.ParamChangeProposal(ctx, feeabsUser.KeyName(), param_change_path) require.NoError(t, err, "error submitting param change proposal tx") err = feeabs.VoteOnProposalAllValidators(ctx, paramTx.ProposalID, cosmos.ProposalVoteYes) @@ -482,7 +483,7 @@ func TestPacketForwardMiddleware(t *testing.T) { _, err = cosmos.PollForProposalStatus(ctx, feeabs, height, height+10, paramTx.ProposalID, cosmos.ProposalStatusPassed) require.NoError(t, err, "proposal status did not change to passed in expected number of blocks") - _, err = cosmos.FeeabsAddHostZoneProposal(feeabs, ctx, feeabsUser.KeyName, "./proposal/host_zone.json") + _, err = cosmos.FeeabsAddHostZoneProposal(feeabs, ctx, feeabsUser.KeyName(), "./proposal/host_zone.json") require.NoError(t, err) err = feeabs.VoteOnProposalAllValidators(ctx, "2", cosmos.ProposalVoteYes) @@ -502,7 +503,7 @@ func TestPacketForwardMiddleware(t *testing.T) { require.NoError(t, err) fmt.Printf("Module Account Balances before swap: %v\n", feeabsModule.Balances) - transferTx, err := cosmos.FeeabsCrossChainSwap(feeabs, ctx, feeabsUser.KeyName, uatomOnFeeabs) + transferTx, err := cosmos.FeeabsCrossChainSwap(feeabs, ctx, feeabsUser.KeyName(), uatomOnFeeabs) require.NoError(t, err) _, err = testutil.PollForAck(ctx, feeabs, feeabsHeight, feeabsHeight+25, transferTx.Packet) require.NoError(t, err) diff --git a/tests/interchaintest/setup.go b/tests/interchaintest/setup.go index f1d9d1ba..96cce2a8 100644 --- a/tests/interchaintest/setup.go +++ b/tests/interchaintest/setup.go @@ -4,14 +4,13 @@ import ( "os" "strings" - simappparams "github.com/cosmos/cosmos-sdk/simapp/params" "github.com/cosmos/cosmos-sdk/types" balancertypes "github.com/notional-labs/fee-abstraction/tests/interchaintest/osmosistypes/gamm/balancer" gammtypes "github.com/notional-labs/fee-abstraction/tests/interchaintest/osmosistypes/gamm/types" - feeabstype "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" - "github.com/strangelove-ventures/interchaintest/v4/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v4/chain/cosmos/wasm" - "github.com/strangelove-ventures/interchaintest/v4/ibc" + feeabstype "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" + // "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos/wasm" + "github.com/strangelove-ventures/interchaintest/v7/ibc" ) type QueryFeeabsModuleBalacesResponse struct { @@ -53,8 +52,6 @@ var ( GasAdjustment: 1.1, TrustingPeriod: "112h", NoHostMount: false, - SkipGenTx: false, - PreGenesis: nil, ModifyGenesis: cosmos.ModifyGenesisProposalTime(votingPeriod, maxDepositPeriod), ConfigFileOverrides: nil, EncodingConfig: feeabsEncoding(), From 4d78fcce787944530a41a4c15054dd74fd0cc3c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=E1=BA=A1m=20Anh=20Minh?= <1phamminh0811@gmail.com> Date: Tue, 30 May 2023 11:12:27 +0700 Subject: [PATCH 10/90] fix lint --- ante/fee.go | 7 ++++--- app/ante.go | 9 +++++---- app/app.go | 3 +-- app/export.go | 15 ++++++++++++--- app/params/config.go | 9 +++++---- app/test_helpers.go | 16 +++++++++------- x/feeabs/ante/decorate.go | 27 ++++++++++++++------------- x/feeabs/ibc_module.go | 11 ++++++----- x/feeabs/ibctesting/chain.go | 6 +++--- x/feeabs/keeper/config.go | 2 +- x/feeabs/keeper/exchange_rate.go | 2 +- x/feeabs/keeper/ibc.go | 2 +- x/feeabs/proposal_handler.go | 5 +++-- x/feeabs/relay_test.go | 10 ++++++---- x/feeabs/types/errors.go | 2 +- x/feeabs/types/msg.go | 2 +- 16 files changed, 73 insertions(+), 55 deletions(-) diff --git a/ante/fee.go b/ante/fee.go index c962a1ca..d495f238 100644 --- a/ante/fee.go +++ b/ante/fee.go @@ -3,7 +3,8 @@ package ante import ( tmstrings "github.com/cometbft/cometbft/libs/strings" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + sdkerrors "cosmossdk.io/errors" + errorstypes "github.com/cosmos/cosmos-sdk/types/errors" ) const maxBypassMinFeeMsgGasUsage = uint64(200_000) @@ -29,7 +30,7 @@ func NewMempoolFeeDecorator(bypassMsgTypes []string) MempoolFeeDecorator { func (mfd MempoolFeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error) { feeTx, ok := tx.(sdk.FeeTx) if !ok { - return ctx, sdkerrors.Wrap(sdkerrors.ErrTxDecode, "Tx must be a FeeTx") + return ctx, sdkerrors.Wrap(errorstypes.ErrTxDecode, "Tx must be a FeeTx") } feeCoins := feeTx.GetFee() @@ -54,7 +55,7 @@ func (mfd MempoolFeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate b } if !feeCoins.IsAnyGTE(requiredFees) { - return ctx, sdkerrors.Wrapf(sdkerrors.ErrInsufficientFee, "insufficient fees; got: %s required: %s", feeCoins, requiredFees) + return ctx, sdkerrors.Wrapf(errorstypes.ErrInsufficientFee, "insufficient fees; got: %s required: %s", feeCoins, requiredFees) } } } diff --git a/app/ante.go b/app/ante.go index 886c347e..e48d8a32 100644 --- a/app/ante.go +++ b/app/ante.go @@ -2,7 +2,8 @@ package app import ( sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + sdkerrors "cosmossdk.io/errors" + errorstypes "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/ante" ibcante "github.com/cosmos/ibc-go/v7/modules/core/ante" ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" @@ -24,15 +25,15 @@ type HandlerOptions struct { // signer. func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { if options.AccountKeeper == nil { - return nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "account keeper is required for ante builder") + return nil, sdkerrors.Wrap(errorstypes.ErrLogic, "account keeper is required for ante builder") } if options.BankKeeper == nil { - return nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "bank keeper is required for ante builder") + return nil, sdkerrors.Wrap(errorstypes.ErrLogic, "bank keeper is required for ante builder") } if options.SignModeHandler == nil { - return nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "sign mode handler is required for ante builder") + return nil, sdkerrors.Wrap(errorstypes.ErrLogic, "sign mode handler is required for ante builder") } sigGasConsumer := options.SigGasConsumer diff --git a/app/app.go b/app/app.go index efb8d5ab..32612b2f 100644 --- a/app/app.go +++ b/app/app.go @@ -63,7 +63,6 @@ import ( govclient "github.com/cosmos/cosmos-sdk/x/gov/client" govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/cosmos/cosmos-sdk/x/mint" mintkeeper "github.com/cosmos/cosmos-sdk/x/mint/keeper" @@ -1030,7 +1029,7 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino paramsKeeper.Subspace(minttypes.ModuleName) paramsKeeper.Subspace(distrtypes.ModuleName) paramsKeeper.Subspace(slashingtypes.ModuleName) - paramsKeeper.Subspace(govtypes.ModuleName).WithKeyTable(govv1.ParamKeyTable()) + paramsKeeper.Subspace(govtypes.ModuleName).WithKeyTable(paramstypes.ConsensusParamsKeyTable()) paramsKeeper.Subspace(crisistypes.ModuleName) paramsKeeper.Subspace(ibctransfertypes.ModuleName) paramsKeeper.Subspace(ibcexported.ModuleName) diff --git a/app/export.go b/app/export.go index 8dba6ad4..f3d11fcb 100644 --- a/app/export.go +++ b/app/export.go @@ -110,7 +110,10 @@ func (app *FeeAbs) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs [] feePool.CommunityPool = feePool.CommunityPool.Add(scraps...) app.DistrKeeper.SetFeePool(ctx, feePool) - app.DistrKeeper.Hooks().AfterValidatorCreated(ctx, val.GetOperator()) + err := app.DistrKeeper.Hooks().AfterValidatorCreated(ctx, val.GetOperator()) + if err != nil { + panic(err) + } return false }) @@ -124,8 +127,14 @@ func (app *FeeAbs) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs [] if err != nil { panic(err) } - app.DistrKeeper.Hooks().BeforeDelegationCreated(ctx, delAddr, valAddr) - app.DistrKeeper.Hooks().AfterDelegationModified(ctx, delAddr, valAddr) + err = app.DistrKeeper.Hooks().BeforeDelegationCreated(ctx, delAddr, valAddr) + if err != nil { + panic(err) + } + err = app.DistrKeeper.Hooks().AfterDelegationModified(ctx, delAddr, valAddr) + if err != nil { + panic(err) + } } // reset context height diff --git a/app/params/config.go b/app/params/config.go index f0fc6b26..4cf5c9a4 100644 --- a/app/params/config.go +++ b/app/params/config.go @@ -4,7 +4,8 @@ import ( serverconfig "github.com/cosmos/cosmos-sdk/server/config" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/address" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + sdkerrors "cosmossdk.io/errors" + errorstypes "github.com/cosmos/cosmos-sdk/types/errors" ) const ( @@ -52,16 +53,16 @@ func SetAddressPrefixes() { // source: https://github.com/cosmos/cosmos-sdk/blob/v0.43.0-beta1/types/address.go#L141 config.SetAddressVerifier(func(bytes []byte) error { if len(bytes) == 0 { - return sdkerrors.Wrap(sdkerrors.ErrUnknownAddress, "addresses cannot be empty") + return sdkerrors.Wrap(errorstypes.ErrUnknownAddress, "addresses cannot be empty") } if len(bytes) > address.MaxAddrLen { - return sdkerrors.Wrapf(sdkerrors.ErrUnknownAddress, "address max length is %d, got %d", address.MaxAddrLen, len(bytes)) + return sdkerrors.Wrapf(errorstypes.ErrUnknownAddress, "address max length is %d, got %d", address.MaxAddrLen, len(bytes)) } // TODO: Do we want to allow addresses of lengths other than 20 and 32 bytes? if len(bytes) != 20 && len(bytes) != 32 { - return sdkerrors.Wrapf(sdkerrors.ErrUnknownAddress, "address length must be 20 or 32 bytes, got %d", len(bytes)) + return sdkerrors.Wrapf(errorstypes.ErrUnknownAddress, "address length must be 20 or 32 bytes, got %d", len(bytes)) } return nil diff --git a/app/test_helpers.go b/app/test_helpers.go index 792f5f73..258391c2 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -11,6 +11,7 @@ import ( "testing" "time" + "cosmossdk.io/math" abci "github.com/cometbft/cometbft/abci/types" "github.com/cometbft/cometbft/libs/log" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" @@ -23,7 +24,8 @@ import ( "github.com/cosmos/cosmos-sdk/snapshots/types" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/errors" + sdkerrors "cosmossdk.io/errors" + errorstypes "github.com/cosmos/cosmos-sdk/types/errors" "github.com/stretchr/testify/require" "github.com/CosmWasm/wasmd/x/wasm" @@ -127,7 +129,7 @@ func SetupWithGenesisValSet( validators := make([]stakingtypes.Validator, 0, len(valSet.Validators)) delegations := make([]stakingtypes.Delegation, 0, len(valSet.Validators)) - bondAmt := sdk.NewInt(1000000) + bondAmt := math.NewInt(1000000) for _, val := range valSet.Validators { pk, err := cryptocodec.FromTmPubKeyInterface(val.PubKey) @@ -245,7 +247,7 @@ func createIncrementalAccounts(accNum int) []sdk.AccAddress { } // AddTestAddrsFromPubKeys adds the addresses into the WasmApp providing only the public keys. -func AddTestAddrsFromPubKeys(app *FeeAbs, ctx sdk.Context, pubKeys []cryptotypes.PubKey, accAmt sdk.Int) { +func AddTestAddrsFromPubKeys(app *FeeAbs, ctx sdk.Context, pubKeys []cryptotypes.PubKey, accAmt math.Int) { initCoins := sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), accAmt)) for _, pk := range pubKeys { @@ -255,17 +257,17 @@ func AddTestAddrsFromPubKeys(app *FeeAbs, ctx sdk.Context, pubKeys []cryptotypes // AddTestAddrs constructs and returns accNum amount of accounts with an // initial balance of accAmt in random order -func AddTestAddrs(app *FeeAbs, ctx sdk.Context, accNum int, accAmt sdk.Int) []sdk.AccAddress { +func AddTestAddrs(app *FeeAbs, ctx sdk.Context, accNum int, accAmt math.Int) []sdk.AccAddress { return addTestAddrs(app, ctx, accNum, accAmt, createRandomAccounts) } // AddTestAddrs constructs and returns accNum amount of accounts with an // initial balance of accAmt in random order -func AddTestAddrsIncremental(app *FeeAbs, ctx sdk.Context, accNum int, accAmt sdk.Int) []sdk.AccAddress { +func AddTestAddrsIncremental(app *FeeAbs, ctx sdk.Context, accNum int, accAmt math.Int) []sdk.AccAddress { return addTestAddrs(app, ctx, accNum, accAmt, createIncrementalAccounts) } -func addTestAddrs(app *FeeAbs, ctx sdk.Context, accNum int, accAmt sdk.Int, strategy GenerateAccountStrategy) []sdk.AccAddress { +func addTestAddrs(app *FeeAbs, ctx sdk.Context, accNum int, accAmt math.Int, strategy GenerateAccountStrategy) []sdk.AccAddress { testAddrs := strategy(accNum) initCoins := sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), accAmt)) @@ -476,7 +478,7 @@ func NewPubKeyFromHex(pk string) (res cryptotypes.PubKey) { panic(err) } if len(pkBytes) != ed25519.PubKeySize { - panic(errors.Wrap(errors.ErrInvalidPubKey, "invalid pubkey size")) + panic(sdkerrors.Wrap(errorstypes.ErrInvalidPubKey, "invalid pubkey size")) } return &ed25519.PubKey{Key: pkBytes} } diff --git a/x/feeabs/ante/decorate.go b/x/feeabs/ante/decorate.go index 7a785fd7..11d51445 100644 --- a/x/feeabs/ante/decorate.go +++ b/x/feeabs/ante/decorate.go @@ -4,7 +4,8 @@ import ( "fmt" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + sdkerrors "cosmossdk.io/errors" + errorstypes "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/types" feeabskeeper "github.com/notional-labs/fee-abstraction/v4/x/feeabs/keeper" feeabstypes "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" @@ -29,7 +30,7 @@ func NewFeeAbstractionDeductFeeDecorate(ak AccountKeeper, bk BankKeeper, feeabsK func (fadfd FeeAbstractionDeductFeeDecorate) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error) { feeTx, ok := tx.(sdk.FeeTx) if !ok { - return ctx, sdkerrors.Wrap(sdkerrors.ErrTxDecode, "Tx must be a FeeTx") + return ctx, sdkerrors.Wrap(errorstypes.ErrTxDecode, "Tx must be a FeeTx") } fee := feeTx.GetFee() @@ -62,7 +63,7 @@ func (fadfd FeeAbstractionDeductFeeDecorate) normalDeductFeeAnteHandle(ctx sdk.C // this works with only when feegrant enabled. if feeGranter != nil { if fadfd.feegrantKeeper == nil { - return ctx, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "fee grants are not enabled") + return ctx, sdkerrors.Wrap(errorstypes.ErrInvalidRequest, "fee grants are not enabled") } else if !feeGranter.Equals(feePayer) { err := fadfd.feegrantKeeper.UseGrantedFees(ctx, feeGranter, feePayer, fee, tx.GetMsgs()) @@ -76,7 +77,7 @@ func (fadfd FeeAbstractionDeductFeeDecorate) normalDeductFeeAnteHandle(ctx sdk.C deductFeesFromAcc := fadfd.accountKeeper.GetAccount(ctx, deductFeesFrom) if deductFeesFromAcc == nil { - return ctx, sdkerrors.Wrapf(sdkerrors.ErrUnknownAddress, "fee payer address: %s does not exist", deductFeesFrom) + return ctx, sdkerrors.Wrapf(errorstypes.ErrUnknownAddress, "fee payer address: %s does not exist", deductFeesFrom) } // deduct the fees @@ -105,7 +106,7 @@ func (fadfd FeeAbstractionDeductFeeDecorate) abstractionDeductFeeHandler(ctx sdk // this works with only when feegrant enabled. if feeGranter != nil { if fadfd.feegrantKeeper == nil { - return ctx, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "fee grants are not enabled") + return ctx, sdkerrors.Wrap(errorstypes.ErrInvalidRequest, "fee grants are not enabled") } else if !feeGranter.Equals(feePayer) { err := fadfd.feegrantKeeper.UseGrantedFees(ctx, feeGranter, feePayer, fee, tx.GetMsgs()) @@ -121,13 +122,13 @@ func (fadfd FeeAbstractionDeductFeeDecorate) abstractionDeductFeeHandler(ctx sdk deductFeesFrom := fadfd.feeabsKeeper.GetFeeAbsModuleAddress() deductFeesFromAcc := fadfd.accountKeeper.GetAccount(ctx, deductFeesFrom) if deductFeesFromAcc == nil { - return ctx, sdkerrors.Wrapf(sdkerrors.ErrUnknownAddress, "fee abstraction didn't set : %s does not exist", deductFeesFrom) + return ctx, sdkerrors.Wrapf(errorstypes.ErrUnknownAddress, "fee abstraction didn't set : %s does not exist", deductFeesFrom) } // calculate the native token can be swapped from ibc token ibcFees := feeTx.GetFee() if len(ibcFees) != 1 { - return ctx, sdkerrors.Wrapf(sdkerrors.ErrInvalidCoins, "invalid ibc token: %s", ibcFees) + return ctx, sdkerrors.Wrapf(errorstypes.ErrInvalidCoins, "invalid ibc token: %s", ibcFees) } nativeFees, err := fadfd.feeabsKeeper.CalculateNativeFromIBCCoins(ctx, ibcFees, hostChainConfig) @@ -160,12 +161,12 @@ func (fadfd FeeAbstractionDeductFeeDecorate) abstractionDeductFeeHandler(ctx sdk // DeductFees deducts fees from the given account. func DeductFees(bankKeeper types.BankKeeper, ctx sdk.Context, accAddress sdk.AccAddress, fees sdk.Coins) error { if !fees.IsValid() { - return sdkerrors.Wrapf(sdkerrors.ErrInsufficientFee, "invalid fee amount: %s", fees) + return sdkerrors.Wrapf(errorstypes.ErrInsufficientFee, "invalid fee amount: %s", fees) } err := bankKeeper.SendCoinsFromAccountToModule(ctx, accAddress, types.FeeCollectorName, fees) if err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrInsufficientFunds, err.Error()) + return sdkerrors.Wrapf(errorstypes.ErrInsufficientFunds, err.Error()) } return nil @@ -190,7 +191,7 @@ func NewFeeAbstrationMempoolFeeDecorator(feeabsKeeper feeabskeeper.Keeper) FeeAb func (famfd FeeAbstrationMempoolFeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error) { feeTx, ok := tx.(sdk.FeeTx) if !ok { - return ctx, sdkerrors.Wrap(sdkerrors.ErrTxDecode, "Tx must be a FeeTx") + return ctx, sdkerrors.Wrap(errorstypes.ErrTxDecode, "Tx must be a FeeTx") } feeCoins := feeTx.GetFee() @@ -205,7 +206,7 @@ func (famfd FeeAbstrationMempoolFeeDecorator) AnteHandle(ctx sdk.Context, tx sdk } feeCoinsLen := feeCoins.Len() if feeCoinsLen == 0 { - return ctx, sdkerrors.Wrapf(sdkerrors.ErrInsufficientFee, "insufficient fees") + return ctx, sdkerrors.Wrapf(errorstypes.ErrInsufficientFee, "insufficient fees") } feeDenom := feeCoins.GetDenomByIndex(0) @@ -214,7 +215,7 @@ func (famfd FeeAbstrationMempoolFeeDecorator) AnteHandle(ctx sdk.Context, tx sdk hostChainConfig, _ := famfd.feeabsKeeper.GetHostZoneConfig(ctx, feeDenom) nativeCoinsFees, err := famfd.feeabsKeeper.CalculateNativeFromIBCCoins(ctx, feeCoins, hostChainConfig) if err != nil { - return ctx, sdkerrors.Wrapf(sdkerrors.ErrInsufficientFee, "insufficient fees") + return ctx, sdkerrors.Wrapf(errorstypes.ErrInsufficientFee, "insufficient fees") } feeCoins = nativeCoinsFees @@ -231,7 +232,7 @@ func (famfd FeeAbstrationMempoolFeeDecorator) AnteHandle(ctx sdk.Context, tx sdk } if !feeCoins.IsAnyGTE(requiredFees) { - return ctx, sdkerrors.Wrapf(sdkerrors.ErrInsufficientFee, "insufficient fees; got: %s required: %s", feeCoins, requiredFees) + return ctx, sdkerrors.Wrapf(errorstypes.ErrInsufficientFee, "insufficient fees; got: %s required: %s", feeCoins, requiredFees) } } diff --git a/x/feeabs/ibc_module.go b/x/feeabs/ibc_module.go index 038cd0f4..80953d47 100644 --- a/x/feeabs/ibc_module.go +++ b/x/feeabs/ibc_module.go @@ -5,7 +5,8 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + sdkerrors "cosmossdk.io/errors" + errorstypes "github.com/cosmos/cosmos-sdk/types/errors" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" @@ -131,7 +132,7 @@ func (am IBCModule) OnChanCloseInit( channelID string, ) error { // Disallow user-initiated channel closing for channels - return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "user cannot close channel") + return sdkerrors.Wrap(errorstypes.ErrInvalidRequest, "user cannot close channel") } // OnChanCloseConfirm implements the IBCModule interface. @@ -165,12 +166,12 @@ func (am IBCModule) OnAcknowledgementPacket( ) error { var ack channeltypes.Acknowledgement if err := types.ModuleCdc.UnmarshalJSON(acknowledgement, &ack); err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal packet acknowledgement: %v", err) + return sdkerrors.Wrapf(errorstypes.ErrUnknownRequest, "cannot unmarshal packet acknowledgement: %v", err) } var IcqPacketData types.InterchainQueryPacketData if err := types.ModuleCdc.UnmarshalJSON(packet.GetData(), &IcqPacketData); err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal packet data: %v", err) + return sdkerrors.Wrapf(errorstypes.ErrUnknownRequest, "cannot unmarshal packet data: %v", err) } IcqReqs, err := types.DeserializeCosmosQuery(IcqPacketData.GetData()) @@ -188,7 +189,7 @@ func (am IBCModule) OnAcknowledgementPacket( ) if err := am.keeper.OnAcknowledgementPacket(ctx, ack, IcqReqs); err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "error OnAcknowledgementPacket: %v", err) + return sdkerrors.Wrapf(errorstypes.ErrInvalidRequest, "error OnAcknowledgementPacket: %v", err) } return nil } diff --git a/x/feeabs/ibctesting/chain.go b/x/feeabs/ibctesting/chain.go index ea8a8636..d9dddc6b 100644 --- a/x/feeabs/ibctesting/chain.go +++ b/x/feeabs/ibctesting/chain.go @@ -6,6 +6,7 @@ import ( "testing" "time" + sdkerrors "cosmossdk.io/errors" abci "github.com/cometbft/cometbft/abci/types" "github.com/cometbft/cometbft/crypto/tmhash" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" @@ -18,7 +19,6 @@ import ( "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper" @@ -105,14 +105,14 @@ func NewTestChain(t *testing.T, coord *Coordinator, chainID string, opts ...wasm Address: acc.GetAddress().String(), Coins: sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, amount)), } - + app := NewTestingAppDecorator(t, feeabs.SetupWithGenesisValSet(t, valSet, []authtypes.GenesisAccount{acc}, opts, chainID, balance)) // create current header and call begin block header := tmproto.Header{ ChainID: chainID, Height: 1, - Time: coord.CurrentTime.UTC(), + Time: coord.CurrentTime.UTC(), } txConfig := app.GetTxConfig() diff --git a/x/feeabs/keeper/config.go b/x/feeabs/keeper/config.go index 64244bf7..e8e2bda2 100644 --- a/x/feeabs/keeper/config.go +++ b/x/feeabs/keeper/config.go @@ -1,8 +1,8 @@ package keeper import ( + sdkerrors "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" ) diff --git a/x/feeabs/keeper/exchange_rate.go b/x/feeabs/keeper/exchange_rate.go index 26efe2ff..01f6997f 100644 --- a/x/feeabs/keeper/exchange_rate.go +++ b/x/feeabs/keeper/exchange_rate.go @@ -2,7 +2,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + sdkerrors "cosmossdk.io/errors" "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" ) diff --git a/x/feeabs/keeper/ibc.go b/x/feeabs/keeper/ibc.go index ad204452..f83acc68 100644 --- a/x/feeabs/keeper/ibc.go +++ b/x/feeabs/keeper/ibc.go @@ -4,9 +4,9 @@ import ( "fmt" "time" + sdkerrors "cosmossdk.io/errors" abci "github.com/cometbft/cometbft/abci/types" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" diff --git a/x/feeabs/proposal_handler.go b/x/feeabs/proposal_handler.go index 58d5e7a6..1b790ed4 100644 --- a/x/feeabs/proposal_handler.go +++ b/x/feeabs/proposal_handler.go @@ -2,7 +2,8 @@ package feeabs import ( sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + sdkerrors "cosmossdk.io/errors" + errorstypes "github.com/cosmos/cosmos-sdk/types/errors" govclient "github.com/cosmos/cosmos-sdk/x/gov/client" v1beta1types "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" @@ -29,7 +30,7 @@ func NewHostZoneProposal(k keeper.Keeper) v1beta1types.Handler { case *types.SetHostZoneProposal: return k.SetHostZoneProposal(ctx, c) default: - return sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unrecognized ibc proposal content type: %T", c) + return sdkerrors.Wrapf(errorstypes.ErrUnknownRequest, "unrecognized ibc proposal content type: %T", c) } } } diff --git a/x/feeabs/relay_test.go b/x/feeabs/relay_test.go index 2feb7d67..5085defe 100644 --- a/x/feeabs/relay_test.go +++ b/x/feeabs/relay_test.go @@ -3,14 +3,16 @@ package feeabs_test import ( "testing" + "cosmossdk.io/math" + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" wasmibctesting "github.com/notional-labs/fee-abstraction/v4/x/feeabs/ibctesting" + sdkerrors "cosmossdk.io/errors" wasmvm "github.com/CosmWasm/wasmvm" wasmvmtypes "github.com/CosmWasm/wasmvm/types" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" @@ -25,12 +27,12 @@ func TestFromIBCTransferToContract(t *testing.T) { // then the contract can handle the receiving side of an ics20 transfer // that was started on chain A via ibc transfer module - transferAmount := sdk.NewInt(1) + transferAmount := math.NewInt(1) specs := map[string]struct { contract wasmtesting.IBCContractCallbacks setupContract func(t *testing.T, contract wasmtesting.IBCContractCallbacks, chain *wasmibctesting.TestChain) - expChainABalanceDiff sdk.Int - expChainBBalanceDiff sdk.Int + expChainABalanceDiff math.Int + expChainBBalanceDiff math.Int }{ "ack": { contract: &ackReceiverContract{}, diff --git a/x/feeabs/types/errors.go b/x/feeabs/types/errors.go index 142f4af8..d941329b 100644 --- a/x/feeabs/types/errors.go +++ b/x/feeabs/types/errors.go @@ -1,7 +1,7 @@ package types import ( - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + sdkerrors "cosmossdk.io/errors" ) var ( diff --git a/x/feeabs/types/msg.go b/x/feeabs/types/msg.go index aa775c8c..fa72f001 100644 --- a/x/feeabs/types/msg.go +++ b/x/feeabs/types/msg.go @@ -3,7 +3,7 @@ package types import ( "github.com/cosmos/cosmos-sdk/codec/legacy" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + sdkerrors "cosmossdk.io/errors" ) var _ sdk.Msg = &MsgSendQueryIbcDenomTWAP{} From a0a03730f72866ac4dcdb3d0d057191841440aa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=E1=BA=A1m=20Anh=20Minh?= <1phamminh0811@gmail.com> Date: Tue, 30 May 2023 11:13:47 +0700 Subject: [PATCH 11/90] remove check generate code --- .github/workflows/check-generated.yml | 25 ------------------------- 1 file changed, 25 deletions(-) delete mode 100644 .github/workflows/check-generated.yml diff --git a/.github/workflows/check-generated.yml b/.github/workflows/check-generated.yml deleted file mode 100644 index 272ca707..00000000 --- a/.github/workflows/check-generated.yml +++ /dev/null @@ -1,25 +0,0 @@ -name: Check generated code -on: - workflow_dispatch: - pull_request: - branches: - - '*' - -permissions: - contents: read - -jobs: - check-proto: - runs-on: ubuntu-latest - steps: - - - uses: actions/setup-go@v3 - with: - go-version: '1.19' - - - uses: actions/checkout@v3 - with: - fetch-depth: 1 # we need a .git directory to run git diff - - - name: "Check protobuf generated code" - run: scripts/check-generated.sh \ No newline at end of file From 068407c8ad67485874db2efdca41788807cc1985 Mon Sep 17 00:00:00 2001 From: GNaD Date: Wed, 2 Aug 2023 15:14:29 +0700 Subject: [PATCH 12/90] interchain test --- tests/interchaintest/go.mod | 109 +- tests/interchaintest/go.sum | 1751 ++++++++++++++++++++ tests/interchaintest/packet_foward_test.go | 14 +- tests/interchaintest/setup.go | 35 +- 4 files changed, 1847 insertions(+), 62 deletions(-) create mode 100644 tests/interchaintest/go.sum diff --git a/tests/interchaintest/go.mod b/tests/interchaintest/go.mod index 87a63c2c..61ada9a7 100644 --- a/tests/interchaintest/go.mod +++ b/tests/interchaintest/go.mod @@ -4,44 +4,47 @@ go 1.19 require ( github.com/cosmos/cosmos-proto v1.0.0-beta.2 - github.com/cosmos/cosmos-sdk v0.47.1 - github.com/cosmos/ibc-go/v7 v7.0.0 + github.com/cosmos/cosmos-sdk v0.47.4 + github.com/cosmos/ibc-go/v7 v7.2.0 github.com/gogo/protobuf v1.3.3 github.com/golang/protobuf v1.5.3 github.com/grpc-ecosystem/grpc-gateway v1.16.0 + github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 github.com/notional-labs/fee-abstraction/v4 v4.0.1 github.com/strangelove-ventures/interchaintest/v7 v7.1.2 - github.com/stretchr/testify v1.8.2 + github.com/stretchr/testify v1.8.4 go.uber.org/zap v1.24.0 - google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 - google.golang.org/grpc v1.54.0 + google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 + google.golang.org/grpc v1.57.0 ) require ( - cloud.google.com/go v0.110.0 // indirect - cloud.google.com/go/compute v1.18.0 // indirect + cloud.google.com/go v0.110.4 // indirect + cloud.google.com/go/compute v1.20.1 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v0.12.0 // indirect - cloud.google.com/go/storage v1.29.0 // indirect + cloud.google.com/go/iam v1.1.0 // indirect + cloud.google.com/go/storage v1.30.1 // indirect cosmossdk.io/api v0.3.1 // indirect cosmossdk.io/core v0.5.1 // indirect cosmossdk.io/depinject v1.0.0-alpha.3 // indirect - cosmossdk.io/errors v1.0.0-beta.7 // indirect - cosmossdk.io/math v1.0.0 // indirect + cosmossdk.io/errors v1.0.0 // indirect + cosmossdk.io/math v1.0.1 // indirect cosmossdk.io/tools/rosetta v0.2.1 // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.2 // indirect - github.com/BurntSushi/toml v1.2.1 // indirect + github.com/BurntSushi/toml v1.3.2 // indirect github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect github.com/ChainSafe/go-schnorrkel/1 v0.0.0-00010101000000-000000000000 // indirect github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420 // indirect + github.com/CosmWasm/wasmd v0.40.0-rc.1 // indirect + github.com/CosmWasm/wasmvm v1.2.3 // indirect github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e // indirect github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec // indirect github.com/Microsoft/go-winio v0.6.0 // indirect github.com/StirlingMarketingGroup/go-namecase v1.0.0 // indirect github.com/armon/go-metrics v0.4.1 // indirect - github.com/avast/retry-go/v4 v4.3.3 // indirect + github.com/avast/retry-go/v4 v4.3.4 // indirect github.com/aws/aws-sdk-go v1.44.203 // indirect github.com/benbjohnson/clock v1.3.0 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -53,15 +56,15 @@ require ( github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chzyer/readline v1.5.1 // indirect github.com/coinbase/rosetta-sdk-go/types v1.0.0 // indirect - github.com/cometbft/cometbft v0.37.0 // indirect - github.com/cometbft/cometbft-db v0.7.0 // indirect + github.com/cometbft/cometbft v0.37.2 // indirect + github.com/cometbft/cometbft-db v0.8.0 // indirect github.com/confio/ics23/go v0.9.0 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect - github.com/cosmos/gogoproto v1.4.6 // indirect + github.com/cosmos/gogoproto v1.4.10 // indirect github.com/cosmos/iavl v0.20.0 // indirect - github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab // indirect + github.com/cosmos/ics23/go v0.10.0 // indirect github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect github.com/creachadair/taskgroup v0.4.2 // indirect @@ -70,14 +73,14 @@ require ( github.com/deckarep/golang-set v1.8.0 // indirect github.com/decred/base58 v1.0.4 // indirect github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect github.com/dgraph-io/badger/v2 v2.2007.4 // indirect github.com/dgraph-io/ristretto v0.1.1 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect - github.com/docker/distribution v2.8.1+incompatible // indirect - github.com/docker/docker v20.10.19+incompatible // indirect + github.com/docker/distribution v2.8.2+incompatible // indirect + github.com/docker/docker v24.0.5+incompatible // indirect github.com/docker/go-connections v0.4.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect @@ -98,9 +101,10 @@ require ( github.com/google/btree v1.1.2 // indirect github.com/google/go-cmp v0.5.9 // indirect github.com/google/orderedcode v0.0.1 // indirect + github.com/google/s2a-go v0.1.4 // indirect github.com/google/uuid v1.3.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect - github.com/googleapis/gax-go/v2 v2.7.0 // indirect + github.com/googleapis/gax-go/v2 v2.11.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect github.com/gorilla/mux v1.8.0 // indirect github.com/gorilla/websocket v1.5.0 // indirect @@ -109,7 +113,7 @@ require ( github.com/gtank/merlin v0.1.1 // indirect github.com/gtank/ristretto255 v0.1.2 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-getter v1.7.0 // indirect + github.com/hashicorp/go-getter v1.7.1 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect github.com/hashicorp/go-version v1.6.0 // indirect @@ -117,13 +121,11 @@ require ( github.com/hashicorp/hcl v1.0.0 // indirect github.com/hdevalence/ed25519consensus v0.1.0 // indirect github.com/huandu/skiplist v1.2.0 // indirect - github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 // indirect github.com/improbable-eng/grpc-web v0.15.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/ipfs/go-cid v0.2.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect - github.com/json-iterator/go v1.1.12 // indirect github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect github.com/klauspost/compress v1.16.3 // indirect github.com/klauspost/cpuid/v2 v2.2.3 // indirect @@ -131,9 +133,10 @@ require ( github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/libp2p/go-libp2p v0.22.0 // indirect github.com/libp2p/go-openssl v0.1.0 // indirect + github.com/linxGnu/grocksdb v1.7.16 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect - github.com/mattn/go-isatty v0.0.17 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect github.com/mattn/go-pointer v0.0.1 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b // indirect @@ -143,8 +146,6 @@ require ( github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mr-tron/base58 v1.2.0 // indirect github.com/mtibben/percent v0.2.1 // indirect github.com/multiformats/go-base32 v0.0.4 // indirect @@ -157,57 +158,57 @@ require ( github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0-rc2 // indirect github.com/pelletier/go-toml v1.9.5 // indirect - github.com/pelletier/go-toml/v2 v2.0.6 // indirect - github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d // indirect + github.com/pelletier/go-toml/v2 v2.0.9 // indirect + github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 // indirect github.com/pierrec/xxHash v0.1.5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_golang v1.14.0 // indirect + github.com/prometheus/client_golang v1.15.0 // indirect github.com/prometheus/client_model v0.3.0 // indirect - github.com/prometheus/common v0.40.0 // indirect + github.com/prometheus/common v0.42.0 // indirect github.com/prometheus/procfs v0.9.0 // indirect github.com/rakyll/statik v0.1.7 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/rs/cors v1.8.3 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect - github.com/sirupsen/logrus v1.9.0 // indirect github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect - github.com/spf13/afero v1.9.3 // indirect - github.com/spf13/cast v1.5.0 // indirect - github.com/spf13/cobra v1.6.1 // indirect + github.com/spf13/afero v1.9.5 // indirect + github.com/spf13/cast v1.5.1 // indirect + github.com/spf13/cobra v1.7.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/spf13/viper v1.15.0 // indirect + github.com/spf13/viper v1.16.0 // indirect github.com/subosito/gotenv v1.4.2 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect - github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c // indirect github.com/tendermint/go-amino v0.16.0 // indirect github.com/tidwall/btree v1.6.0 // indirect github.com/tyler-smith/go-bip32 v1.0.0 // indirect - github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef // indirect + github.com/tyler-smith/go-bip39 v1.1.0 // indirect github.com/ulikunitz/xz v0.5.11 // indirect github.com/zondax/hid v0.9.1 // indirect github.com/zondax/ledger-go v0.14.1 // indirect go.etcd.io/bbolt v1.3.7 // indirect go.opencensus.io v0.24.0 // indirect go.uber.org/atomic v1.10.0 // indirect - go.uber.org/multierr v1.8.0 // indirect - golang.org/x/crypto v0.7.0 // indirect - golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect - golang.org/x/mod v0.9.0 // indirect - golang.org/x/net v0.8.0 // indirect - golang.org/x/oauth2 v0.5.0 // indirect - golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.6.0 // indirect - golang.org/x/term v0.6.0 // indirect - golang.org/x/text v0.8.0 // indirect - golang.org/x/tools v0.7.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + golang.org/x/crypto v0.11.0 // indirect + golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc // indirect + golang.org/x/mod v0.12.0 // indirect + golang.org/x/net v0.12.0 // indirect + golang.org/x/oauth2 v0.8.0 // indirect + golang.org/x/sync v0.3.0 // indirect + golang.org/x/sys v0.10.0 // indirect + golang.org/x/term v0.10.0 // indirect + golang.org/x/text v0.11.0 // indirect + golang.org/x/tools v0.11.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.110.0 // indirect + google.golang.org/api v0.126.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.30.0 // indirect + google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 // indirect + google.golang.org/protobuf v1.31.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect gopkg.in/yaml.v2 v2.4.0 // indirect @@ -216,11 +217,11 @@ require ( lukechampine.com/uint128 v1.2.0 // indirect modernc.org/cc/v3 v3.40.0 // indirect modernc.org/ccgo/v3 v3.16.13 // indirect - modernc.org/libc v1.22.3 // indirect + modernc.org/libc v1.22.5 // indirect modernc.org/mathutil v1.5.0 // indirect modernc.org/memory v1.5.0 // indirect modernc.org/opt v0.1.3 // indirect - modernc.org/sqlite v1.21.1 // indirect + modernc.org/sqlite v1.24.0 // indirect modernc.org/strutil v1.1.3 // indirect modernc.org/token v1.0.1 // indirect nhooyr.io/websocket v1.8.6 // indirect @@ -241,7 +242,7 @@ replace ( github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 // For this nested module, you always want to replace the parent reference with the current worktree. github.com/notional-labs/fee-abstraction/v4 => ../../ - github.com/strangelove-ventures/interchaintest/v7 => github.com/notional-labs/interchaintest/v7 v7.1.2 + github.com/strangelove-ventures/interchaintest/v7 => github.com/notional-labs/interchaintest/v7 v7.0.0-20230802080145-fb706019ec21 github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 ) diff --git a/tests/interchaintest/go.sum b/tests/interchaintest/go.sum new file mode 100644 index 00000000..53aa68ea --- /dev/null +++ b/tests/interchaintest/go.sum @@ -0,0 +1,1751 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= +cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= +cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +cloud.google.com/go v0.110.4 h1:1JYyxKMN9hd5dR2MYTPWkGUgcoxVVhg0LKNKEo0qvmk= +cloud.google.com/go v0.110.4/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= +cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= +cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= +cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= +cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= +cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= +cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= +cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= +cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= +cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= +cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= +cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= +cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= +cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= +cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= +cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= +cloud.google.com/go/compute v1.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZNbg= +cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= +cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= +cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= +cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= +cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= +cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= +cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= +cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= +cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= +cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= +cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= +cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= +cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= +cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= +cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= +cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= +cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= +cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= +cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= +cloud.google.com/go/iam v1.1.0 h1:67gSqaPukx7O8WLLHMa0PNs3EBGd2eE4d+psbO/CO94= +cloud.google.com/go/iam v1.1.0/go.mod h1:nxdHjaKfCr7fNYx/HJMM8LgiMugmveWlkatear5gVyk= +cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= +cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= +cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= +cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= +cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= +cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= +cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= +cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= +cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= +cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= +cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= +cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= +cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= +cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= +cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= +cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= +cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= +cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= +cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= +cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= +cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= +cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= +cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= +cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= +cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= +cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= +cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= +cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= +cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= +cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= +cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= +cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= +cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= +cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= +cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= +cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= +cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= +cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= +cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= +cosmossdk.io/core v0.5.1/go.mod h1:KZtwHCLjcFuo0nmDc24Xy6CRNEL9Vl/MeimQ2aC7NLE= +cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= +cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= +cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04= +cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0= +cosmossdk.io/math v1.0.1 h1:Qx3ifyOPaMLNH/89WeZFH268yCvU4xEcnPLu3sJqPPg= +cosmossdk.io/math v1.0.1/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= +cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= +cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= +filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= +github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= +github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= +github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= +github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM= +github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= +github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420 h1:oknQF/iIhf5lVjbwjsVDzDByupRhga8nhA3NAmwyHDA= +github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420/go.mod h1:KYkiMX5AbOlXXYfxkrYPrRPV6EbVUALTQh5ptUOJzu8= +github.com/CosmWasm/wasmd v0.40.0-rc.1 h1:prIM2vP1jNh0zgs9seua5BgKdayBgp3FiHtwxFcZSGs= +github.com/CosmWasm/wasmd v0.40.0-rc.1/go.mod h1:uacdue6EGn9JA1TqBNHB3iCe4PCIChuFT23AzIl2VME= +github.com/CosmWasm/wasmvm v1.2.3 h1:OKYlobwmVGbl0eSn0mXoAAjE5hIuXnQCLPjbNd91sVY= +github.com/CosmWasm/wasmvm v1.2.3/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= +github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e h1:ahyvB3q25YnZWly5Gq1ekg6jcmWaGj/vG/MhF4aisoc= +github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e/go.mod h1:kGUqhHd//musdITWjFvNTHn90WG9bMLBEPQZ17Cmlpw= +github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec h1:1Qb69mGp/UtRPn422BH4/Y4Q3SLUrD9KHuDkm8iodFc= +github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec/go.mod h1:CD8UlnlLDiqb36L110uqiP2iSflVjx9g/3U9hCI4q2U= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= +github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= +github.com/StirlingMarketingGroup/go-namecase v1.0.0 h1:2CzaNtCzc4iNHirR+5ru9OzGg8rQp860gqLBFqRI02Y= +github.com/StirlingMarketingGroup/go-namecase v1.0.0/go.mod h1:ZsoSKcafcAzuBx+sndbxHu/RjDcDTrEdT4UvhniHfio= +github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= +github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= +github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +github.com/alecthomas/participle/v2 v2.0.0-alpha7 h1:cK4vjj0VSgb3lN1nuKA5F7dw+1s1pWBe5bx7nNCnN+c= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= +github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +github.com/avast/retry-go/v4 v4.3.4 h1:pHLkL7jvCvP317I8Ge+Km2Yhntv3SdkJm7uekkqbKhM= +github.com/avast/retry-go/v4 v4.3.4/go.mod h1:rv+Nla6Vk3/ilU0H51VHddWHiwimzX66yZ0JT6T+UvE= +github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= +github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.203 h1:pcsP805b9acL3wUqa4JR2vg1k2wnItkDYNvfmcy6F+U= +github.com/aws/aws-sdk-go v1.44.203/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= +github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= +github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s= +github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= +github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= +github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= +github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= +github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= +github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= +github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM= +github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI= +github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04= +github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= +github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= +github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cmars/basen v0.0.0-20150613233007-fe3947df716e h1:0XBUw73chJ1VYSsfvcPvVT7auykAJce9FpRr10L6Qhw= +github.com/cmars/basen v0.0.0-20150613233007-fe3947df716e/go.mod h1:P13beTBKr5Q18lJe1rIoLUqjM+CB1zYrRg44ZqGuQSA= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= +github.com/cockroachdb/apd/v3 v3.1.0 h1:MK3Ow7LH0W8zkd5GMKA1PvS9qG3bWFI95WaVNfyZJ/w= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= +github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= +github.com/cometbft/cometbft v0.37.2 h1:XB0yyHGT0lwmJlFmM4+rsRnczPlHoAKFX6K8Zgc2/Jc= +github.com/cometbft/cometbft v0.37.2/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= +github.com/cometbft/cometbft-db v0.8.0 h1:vUMDaH3ApkX8m0KZvOFFy9b5DZHBAjsnEuo9AKVZpjo= +github.com/cometbft/cometbft-db v0.8.0/go.mod h1:6ASCP4pfhmrCBpfk01/9E1SI29nD3HfVHrY4PG8x5c0= +github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= +github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= +github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= +github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= +github.com/cosmos/cosmos-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= +github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= +github.com/cosmos/cosmos-sdk v0.47.0 h1:GKYtBpvjwuDEVix1vdnQpq7PuEOnItuEK0vdAL2cZ5g= +github.com/cosmos/cosmos-sdk v0.47.0/go.mod h1:FTtZbqiHCZ2vun9WrPq6qLQafNKkAuIhLAxzLjr2TiI= +github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= +github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= +github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= +github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= +github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= +github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= +github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoKuI= +github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek= +github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= +github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= +github.com/cosmos/ibc-go/v7 v7.2.0 h1:dx0DLUl7rxdyZ8NiT6UsrbzKOJx/w7s+BOaewFRH6cg= +github.com/cosmos/ibc-go/v7 v7.2.0/go.mod h1:OOcjKIRku/j1Xs1RgKK0yvKRrJ5iFuZYMetR1n3yMlc= +github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= +github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= +github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= +github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= +github.com/cosmos/ledger-cosmos-go v0.12.2 h1:/XYaBlE2BJxtvpkHiBm97gFGSGmYGKunKyF3nNqAXZA= +github.com/cosmos/ledger-cosmos-go v0.12.2/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI= +github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= +github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= +github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/cucumber/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= +github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= +github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= +github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4= +github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= +github.com/decred/base58 v1.0.4 h1:QJC6B0E0rXOPA8U/kw2rP+qiRJsUaE2Er+pYb3siUeA= +github.com/decred/base58 v1.0.4/go.mod h1:jJswKPEdvpFpvf7dsDvFZyLT22xZ9lWqEByX38oGd9E= +github.com/decred/dcrd/chaincfg/chainhash v1.0.2 h1:rt5Vlq/jM3ZawwiacWjPa+smINyLRN07EO0cNBV6DGU= +github.com/decred/dcrd/chaincfg/chainhash v1.0.2/go.mod h1:BpbrGgrPTr3YJYRN3Bm+D9NuaFd+zGyNeIKgrhCXK60= +github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= +github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1 h1:18HurQ6DfHeNvwIjvOmrgr44bPdtVaQAe/WWwHg9goM= +github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1/go.mod h1:XmyzkaXBy7ZvHdrTAlXAjpog8qKSAWa3ze7yqzWmgmc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= +github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= +github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= +github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= +github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= +github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= +github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= +github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= +github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= +github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v24.0.5+incompatible h1:WmgcE4fxyI6EEXxBRxsHnZXrO1pQ3smi0k/jho4HLeY= +github.com/docker/docker v24.0.5+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= +github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= +github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/ethereum/go-ethereum v1.10.20 h1:75IW830ClSS40yrQC1ZCMZCt5I+zU16oqId2SiQwdQ4= +github.com/ethereum/go-ethereum v1.10.20/go.mod h1:LWUN82TCHGpxB3En5HVmLLzPD7YSrEUFmFfN1nKkVN0= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= +github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= +github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14= +github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= +github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= +github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= +github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= +github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= +github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= +github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= +github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY= +github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= +github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= +github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= +github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= +github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= +github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= +github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= +github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= +github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= +github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= +github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= +github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= +github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= +github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= +github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= +github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= +github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= +github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= +github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= +github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= +github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4= +github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= +github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= +github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= +github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= +github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= +github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= +github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= +github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= +github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= +github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-getter v1.7.1 h1:SWiSWN/42qdpR0MdhaOc/bLR48PLuP1ZQtYLRlM69uY= +github.com/hashicorp/go-getter v1.7.1/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= +github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= +github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= +github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= +github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= +github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c= +github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= +github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= +github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= +github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 h1:H+uM0Bv88eur3ZSsd2NGKg3YIiuXxwxtlN7HjE66UTU= +github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845/go.mod h1:c1tRKs5Tx7E2+uHGSyyncziFjvGpgv4H2HrqXeUQ/Uk= +github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= +github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/ipfs/go-cid v0.2.0 h1:01JTiihFq9en9Vz0lc0VDWvZe/uBonGpzo4THP0vcQ0= +github.com/ipfs/go-cid v0.2.0/go.mod h1:P+HXFDF4CVhaVayiEb4wkAy7zBHxBwsJyt0Y5U6MLro= +github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b h1:izTof8BKh/nE1wrKOrloNA5q4odOarjf+Xpe+4qow98= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= +github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= +github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.3 h1:sxCkb+qR91z4vsqw4vGGZlDgPz3G7gjaLyK3V8y70BU= +github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= +github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= +github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= +github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= +github.com/libp2p/go-libp2p v0.22.0 h1:2Tce0kHOp5zASFKJbNzRElvh0iZwdtG5uZheNW8chIw= +github.com/libp2p/go-libp2p v0.22.0/go.mod h1:UDolmweypBSjQb2f7xutPnwZ/fxioLbMBxSjRksxxU4= +github.com/libp2p/go-openssl v0.1.0 h1:LBkKEcUv6vtZIQLVTegAil8jbNpJErQ9AnT+bWV+Ooo= +github.com/libp2p/go-openssl v0.1.0/go.mod h1:OiOxwPpL3n4xlenjx2h7AwSGaFSC/KZvf6gNdOBQMtc= +github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= +github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/linxGnu/grocksdb v1.7.16 h1:Q2co1xrpdkr5Hx3Fp+f+f7fRGhQFQhvi/+226dtLmA8= +github.com/linxGnu/grocksdb v1.7.16/go.mod h1:JkS7pl5qWpGpuVb3bPqTz8nC12X3YtPZT+Xq7+QfQo4= +github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= +github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= +github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-pointer v0.0.1 h1:n+XhsuGeVO6MEAp7xyEukFINEa+Quek5psIR/ylA6o0= +github.com/mattn/go-pointer v0.0.1/go.mod h1:2zXcozF6qYGgmsG+SeTZz3oAbFLdD3OWqnUbNvJZAlc= +github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= +github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b h1:QrHweqAtyJ9EwCaGHBu1fghwxIPiopAHV06JlXrMHjk= +github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b/go.mod h1:xxLb2ip6sSUts3g1irPVHyk/DGslwQsNOo9I7smJfNU= +github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= +github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= +github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= +github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= +github.com/misko9/go-substrate-rpc-client/v4 v4.0.0-20230413215336-5bd2aea337ae h1:ZYbJh4TLwfSuSQe6DT/1982SfNNBcmvzrX5FycfSrmo= +github.com/misko9/go-substrate-rpc-client/v4 v4.0.0-20230413215336-5bd2aea337ae/go.mod h1:XexEkZgpnQ3sqUYz84DFoVUcDake6G/tYHrwdbdERhM= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= +github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae h1:O4SWKdcHVCvYqyDV+9CJA1fcDN2L11Bule0iFy3YlAI= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= +github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= +github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= +github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= +github.com/multiformats/go-base32 v0.0.4 h1:+qMh4a2f37b4xTNs6mqitDinryCI+tfO2dRVMN9mjSE= +github.com/multiformats/go-base32 v0.0.4/go.mod h1:jNLFzjPZtp3aIARHbJRZIaPuspdH0J6q39uUM5pnABM= +github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= +github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= +github.com/multiformats/go-multiaddr v0.6.0 h1:qMnoOPj2s8xxPU5kZ57Cqdr0hHhARz7mFsPMIiYNqzg= +github.com/multiformats/go-multiaddr v0.6.0/go.mod h1:F4IpaKZuPP360tOMn2Tpyu0At8w23aRyVqeK0DbFeGM= +github.com/multiformats/go-multibase v0.1.1 h1:3ASCDsuLX8+j4kx58qnJ4YFq/JWTJpCyDW27ztsVTOI= +github.com/multiformats/go-multibase v0.1.1/go.mod h1:ZEjHE+IsUrgp5mhlEAYjMtZwK1k4haNkcaPg9aoe1a8= +github.com/multiformats/go-multicodec v0.5.0 h1:EgU6cBe/D7WRwQb1KmnBvU7lrcFGMggZVTPtOW9dDHs= +github.com/multiformats/go-multicodec v0.5.0/go.mod h1:DiY2HFaEp5EhEXb/iYzVAunmyX/aSFMxq2KMKfWEues= +github.com/multiformats/go-multihash v0.2.1 h1:aem8ZT0VA2nCHHk7bPJ1BjUbHNciqZC/d16Vve9l108= +github.com/multiformats/go-multihash v0.2.1/go.mod h1:WxoMcYG85AZVQUyRyo9s4wULvW5qrI9vb2Lt6evduFc= +github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= +github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= +github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= +github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= +github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= +github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/notional-labs/interchaintest/v7 v7.0.0-20230802080145-fb706019ec21 h1:WY8+Dj86f6Nqn65iUjC+OJUw9uSIVCsWy0r+xGRgrJo= +github.com/notional-labs/interchaintest/v7 v7.0.0-20230802080145-fb706019ec21/go.mod h1:tx6Ou/S8XjDMqTLM9vVCuoTU3VMVAQZTBH0Bwk70lQo= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= +github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= +github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= +github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= +github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= +github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= +github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= +github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= +github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= +github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= +github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml/v2 v2.0.9 h1:uH2qQXheeefCCkuBBSLi7jCiSmj3VRh2+Goq2N7Xxu0= +github.com/pelletier/go-toml/v2 v2.0.9/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= +github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= +github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 h1:hDSdbBuw3Lefr6R18ax0tZ2BJeNB3NehB3trOwYBsdU= +github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= +github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo= +github.com/pierrec/xxHash v0.1.5/go.mod h1:w2waW5Zoa/Wc4Yqe0wgrIYAGKqRMf7czn2HNKXmuL+I= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= +github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.15.0 h1:5fCgGYogn0hFdhyhLbw7hEsWxufKtY9klyvdNfFlFhM= +github.com/prometheus/client_golang v1.15.0/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt1N9XgF6zxWmaC0xOk= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= +github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= +github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= +github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= +github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= +github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= +github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= +github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= +github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= +github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= +github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= +github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= +github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= +github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= +github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= +github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= +github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= +github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.1.5-0.20170601210322-f6abca593680/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= +github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= +github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= +github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= +github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= +github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= +github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= +github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= +github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw= +github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/tyler-smith/go-bip32 v1.0.0 h1:sDR9juArbUgX+bO/iblgZnMPeWY1KZMUC2AFUJdv5KE= +github.com/tyler-smith/go-bip32 v1.0.0/go.mod h1:onot+eHknzV4BVPwrzqY5OoVpyCvnwD7lMawL5aQupE= +github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= +github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= +github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= +github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= +github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo= +github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +github.com/zondax/ledger-go v0.14.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c= +github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= +go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= +go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= +golang.org/x/crypto v0.0.0-20170613210332-850760c427c5/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= +golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= +golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc h1:mCRnTeVUjcrhlRmO0VK8a6k6Rrf6TF9htwo2pJVSjIU= +golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= +golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= +golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= +golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c= +golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= +golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.1.0 h1:xYY+Bajn2a7VBmTM5GikTmnK8ZuX8YgnQCqZpbBNtmA= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.11.0 h1:EMCa6U9S2LtZXLAMoWiR/R8dAQFRqbAitmbJ2UKhoi8= +golang.org/x/tools v0.11.0/go.mod h1:anzJrxPjNtfgiYQYirP2CPGzGLxrH2u2QBhn6Bf3qY8= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= +google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= +google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= +google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= +google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= +google.golang.org/api v0.126.0 h1:q4GJq+cAdMAC7XP7njvQ4tvohGLiSlytuL4BQxbIZ+o= +google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200324203455-a04cca1dde73/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= +google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= +google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 h1:Au6te5hbKUV8pIYWHqOUZ1pva5qK/rwbIhoXEUB9Lu8= +google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:O9kGHb51iE/nOGvQaDUuadVYqovW56s5emA88lQnj6Y= +google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 h1:s5YSX+ZH5b5vS9rnpGymvIyMpLRJizowqDlOuyjXnTk= +google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 h1:bVf09lpb+OJbByTj913DRJioFFAjf/ZGxEz7MajTp2U= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.57.0 h1:kfzNeI/klCGD2YPMUlaGNT3pxvYfga7smW3Vth8Zsiw= +google.golang.org/grpc v1.57.0/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= +gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= +gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +launchpad.net/gocheck v0.0.0-20140225173054-000000000087 h1:Izowp2XBH6Ya6rv+hqbceQyw/gSGoXfH/UPoTGduL54= +launchpad.net/gocheck v0.0.0-20140225173054-000000000087/go.mod h1:hj7XX3B/0A+80Vse0e+BUHsHMTEhd0O4cpUHr/e/BUM= +lukechampine.com/blake3 v1.1.7 h1:GgRMhmdsuK8+ii6UZFDL8Nb+VyMwadAgcJyfYHxG6n0= +lukechampine.com/blake3 v1.1.7/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= +lukechampine.com/uint128 v1.2.0 h1:mBi/5l91vocEN8otkC5bDLhi2KdCticRiwbdB0O+rjI= +lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +modernc.org/cc/v3 v3.40.0 h1:P3g79IUS/93SYhtoeaHW+kRCIrYaxJ27MFPv+7kaTOw= +modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0= +modernc.org/ccgo/v3 v3.16.13 h1:Mkgdzl46i5F/CNR/Kj80Ri59hC8TKAhZrYSaqvkwzUw= +modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= +modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk= +modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM= +modernc.org/libc v1.22.5 h1:91BNch/e5B0uPbJFgqbxXuOnxBQjlS//icfQEGmvyjE= +modernc.org/libc v1.22.5/go.mod h1:jj+Z7dTNX8fBScMVNRAYZ/jF91K8fdT2hYMThc3YjBY= +modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= +modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds= +modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sqlite v1.24.0 h1:EsClRIWHGhLTCX44p+Ri/JLD+vFGo0QGjasg2/F9TlI= +modernc.org/sqlite v1.24.0/go.mod h1:OrDj17Mggn6MhE+iPbBNf7RGKODDE9NFT0f3EwDzJqk= +modernc.org/strutil v1.1.3 h1:fNMm+oJklMGYfU9Ylcywl0CO5O6nTfaowNsh2wpPjzY= +modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= +modernc.org/tcl v1.15.2 h1:C4ybAYCGJw968e+Me18oW55kD/FexcHbqH2xak1ROSY= +modernc.org/token v1.0.1 h1:A3qvTqOwexpfZZeyI0FeGPDlSWX5pjZu9hF4lU+EKWg= +modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/z v1.7.3 h1:zDJf6iHjrnB+WRD88stbXokugjyc0/pB91ri1gO6LZY= +nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= +nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= +pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/tests/interchaintest/packet_foward_test.go b/tests/interchaintest/packet_foward_test.go index 6e6b050d..acbe31b7 100644 --- a/tests/interchaintest/packet_foward_test.go +++ b/tests/interchaintest/packet_foward_test.go @@ -10,6 +10,7 @@ import ( "time" sdktypes "github.com/cosmos/cosmos-sdk/types" + paramsutils "github.com/cosmos/cosmos-sdk/x/params/client/utils" transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" interchaintest "github.com/strangelove-ventures/interchaintest/v7" @@ -328,7 +329,7 @@ func TestPacketForwardMiddleware(t *testing.T) { // Send Feeabs stake to Osmosis feeabsHeight, err := feeabs.Height(ctx) require.NoError(t, err) - dstAddress =sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()) + dstAddress = sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()) transfer = ibc.WalletAmount{ Address: dstAddress, Denom: feeabs.Config().Denom, @@ -380,7 +381,7 @@ func TestPacketForwardMiddleware(t *testing.T) { channGaiaFeeabs.ChannelID, channOsmosisGaia.ChannelID, channGaiaOsmosis.ChannelID) - err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName(), registryContractAddress, msg) + _, err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName(), registryContractAddress, msg) require.NoError(t, err) // Execute msg = `{ @@ -394,7 +395,7 @@ func TestPacketForwardMiddleware(t *testing.T) { ] } }` - err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName(), registryContractAddress, msg) + _, err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName(), registryContractAddress, msg) require.NoError(t, err) // Create pool Osmosis(uatom)/Osmosis(stake) on Osmosis @@ -434,7 +435,7 @@ func TestPacketForwardMiddleware(t *testing.T) { poolID, stakeOnOsmosis, ) - err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName(), swapRouterContractAddress, msg) + _, err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName(), swapRouterContractAddress, msg) require.NoError(t, err) // store xcs @@ -473,7 +474,10 @@ func TestPacketForwardMiddleware(t *testing.T) { current_directory, _ := os.Getwd() param_change_path := path.Join(current_directory, "proposal", "proposal.json") - paramTx, err := feeabs.ParamChangeProposal(ctx, feeabsUser.KeyName(), param_change_path) + changeParamProposal, err := paramsutils.ParseParamChangeProposalJSON(feeabs.Config().EncodingConfig.Amino, param_change_path) + require.NoError(t, err) + + paramTx, err := feeabs.ParamChangeProposal(ctx, feeabsUser.KeyName(), &changeParamProposal) require.NoError(t, err, "error submitting param change proposal tx") err = feeabs.VoteOnProposalAllValidators(ctx, paramTx.ProposalID, cosmos.ProposalVoteYes) diff --git a/tests/interchaintest/setup.go b/tests/interchaintest/setup.go index 96cce2a8..02d71e83 100644 --- a/tests/interchaintest/setup.go +++ b/tests/interchaintest/setup.go @@ -1,14 +1,20 @@ package interchaintest import ( + "encoding/json" + "fmt" "os" "strings" "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module/testutil" + "github.com/icza/dyno" balancertypes "github.com/notional-labs/fee-abstraction/tests/interchaintest/osmosistypes/gamm/balancer" gammtypes "github.com/notional-labs/fee-abstraction/tests/interchaintest/osmosistypes/gamm/types" feeabstype "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos/wasm" + // "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos/wasm" "github.com/strangelove-ventures/interchaintest/v7/ibc" ) @@ -52,7 +58,7 @@ var ( GasAdjustment: 1.1, TrustingPeriod: "112h", NoHostMount: false, - ModifyGenesis: cosmos.ModifyGenesisProposalTime(votingPeriod, maxDepositPeriod), + ModifyGenesis: modifyGenesisShortProposals(votingPeriod, maxDepositPeriod), ConfigFileOverrides: nil, EncodingConfig: feeabsEncoding(), } @@ -65,7 +71,7 @@ var ( // feeabsEncoding registers the feeabs specific module codecs so that the associated types and msgs // will be supported when writing to the blocksdb sqlite database. -func feeabsEncoding() *simappparams.EncodingConfig { +func feeabsEncoding() *testutil.TestEncodingConfig { cfg := wasm.WasmEncoding() // register custom types @@ -74,7 +80,7 @@ func feeabsEncoding() *simappparams.EncodingConfig { return cfg } -func osmosisEncoding() *simappparams.EncodingConfig { +func osmosisEncoding() *testutil.TestEncodingConfig { cfg := wasm.WasmEncoding() gammtypes.RegisterInterfaces(cfg.InterfaceRegistry) @@ -99,3 +105,26 @@ func GetDockerImageInfo() (repo, version string) { branchVersion = strings.ReplaceAll(branchVersion, "/", "-") return repo, branchVersion } + +func modifyGenesisShortProposals(votingPeriod string, maxDepositPeriod string) func(ibc.ChainConfig, []byte) ([]byte, error) { + return func(chainConfig ibc.ChainConfig, genbz []byte) ([]byte, error) { + g := make(map[string]interface{}) + if err := json.Unmarshal(genbz, &g); err != nil { + return nil, fmt.Errorf("failed to unmarshal genesis file: %w", err) + } + if err := dyno.Set(g, votingPeriod, "app_state", "gov", "voting_params", "voting_period"); err != nil { + return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) + } + if err := dyno.Set(g, maxDepositPeriod, "app_state", "gov", "deposit_params", "max_deposit_period"); err != nil { + return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) + } + if err := dyno.Set(g, chainConfig.Denom, "app_state", "gov", "deposit_params", "min_deposit", 0, "denom"); err != nil { + return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) + } + out, err := json.Marshal(g) + if err != nil { + return nil, fmt.Errorf("failed to marshal genesis bytes to json: %w", err) + } + return out, nil + } +} From 3af0d86363477041282ba7c42c9874a853a15203 Mon Sep 17 00:00:00 2001 From: GnaD13 Date: Thu, 3 Aug 2023 11:05:47 +0700 Subject: [PATCH 13/90] scipts test --- app/app.go | 2 +- scripts/node_start/runnode_custom.sh | 18 +++++++++--------- scripts/pool.json | 2 +- tests/interchaintest/packet_foward_test.go | 4 ++-- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/app/app.go b/app/app.go index 32612b2f..46c3becf 100644 --- a/app/app.go +++ b/app/app.go @@ -153,7 +153,7 @@ var ( // and genesis verification. ModuleBasics = module.NewBasicManager( auth.AppModuleBasic{}, - genutil.AppModuleBasic{}, + genutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator), bank.AppModuleBasic{}, capability.AppModuleBasic{}, staking.AppModuleBasic{}, diff --git a/scripts/node_start/runnode_custom.sh b/scripts/node_start/runnode_custom.sh index 0e7f452f..157fef4f 100755 --- a/scripts/node_start/runnode_custom.sh +++ b/scripts/node_start/runnode_custom.sh @@ -2,7 +2,7 @@ # Run this script to quickly install, setup, and run the current version of juno without docker. # ./scripts/test_node.sh [clean|c] -KEY="feeapp1" +KEY="test" CHAINID="feeappd-t1" MONIKER="localfeeappd" KEYALGO="secp256k1" @@ -25,7 +25,7 @@ from_scratch () { # juno1efd63aw40lxf3n4mhf7dzhjkr453axurv2zdzk echo "decorate bright ozone fork gallery riot bus exhaust worth way bone indoor calm squirrel merry zero scheme cotton until shop any excess stage laundry" | feeappd keys add $KEY --keyring-backend $KEYRING --algo $KEYALGO --recover # juno1hj5fveer5cjtn4wd6wstzugjfdxzl0xps73ftl - echo "wealth flavor believe regret funny network recall kiss grape useless pepper cram hint member few certain unveil rather brick bargain curious require crowd raise" | feeappd keys add feeacc --keyring-backend $KEYRING --algo $KEYALGO --recover + echo "wealth flavor believe regret funny network recall kiss grape useless pepper cram hint member few certain unveil rather brick bargain curious require crowd raise" | feeappd keys add myaccount --keyring-backend $KEYRING --algo $KEYALGO --recover feeappd init $MONIKER --chain-id $CHAINID @@ -37,10 +37,10 @@ from_scratch () { # Set gas limit in genesis update_test_genesis '.consensus_params["block"]["max_gas"]="100000000"' - update_test_genesis '.app_state["gov"]["voting_params"]["voting_period"]="45s"' + update_test_genesis '.app_state["gov"]["params"]["voting_period"]="45s"' update_test_genesis '.app_state["staking"]["params"]["bond_denom"]="stake"' - update_test_genesis '.app_state["bank"]["params"]["send_enabled"]=[{"denom": "stake","enabled": true}]' + #update_test_genesis '.app_state["bank"]["params"]["send_enabled"]=[{"denom": "stake","enabled": true}]' # update_test_genesis '.app_state["staking"]["params"]["min_commission_rate"]="0.100000000000000000"' # sdk 46 only update_test_genesis '.app_state["mint"]["params"]["mint_denom"]="stake"' @@ -52,10 +52,10 @@ from_scratch () { update_test_genesis '.app_state["feeshare"]["params"]["allowed_denoms"]=["stake"]' # Allocate genesis accounts - feeappd add-genesis-account $KEY 10000000000000stake,100000000000000utest --keyring-backend $KEYRING - feeappd add-genesis-account feeacc 10000000000000stake,100000000000000utest --keyring-backend $KEYRING + feeappd add-genesis-account $KEY 10000000000000000000stake,100000000000000utest --keyring-backend $KEYRING + feeappd add-genesis-account myaccount 1000000000stake,100000000000000utest --keyring-backend $KEYRING - feeappd gentx $KEY 10000000000000stake --keyring-backend $KEYRING --chain-id $CHAINID + feeappd gentx $KEY 10000000000000000000stake --keyring-backend $KEYRING --chain-id $CHAINID # Collect genesis tx feeappd collect-gentxs @@ -76,7 +76,7 @@ echo "Starting node..." sed -i '/laddr = "tcp:\/\/127.0.0.1:26657"/c\laddr = "tcp:\/\/0.0.0.0:26657"' ~/.feeappd/config/config.toml sed -i 's/cors_allowed_origins = \[\]/cors_allowed_origins = \["\*"\]/g' ~/.feeappd/config/config.toml sed -i 's/enable = false/enable = true/g' ~/.feeappd/config/app.toml -sed -i '/address = "tcp:\/\/0.0.0.0:1317"/c\address = "tcp:\/\/0.0.0.0:1318"' ~/.feeappd/config/app.toml +sed -i '/address = "tcp:\/\/localhost:1317"/c\address = "tcp:\/\/localhost:1318"' ~/.feeappd/config/app.toml feeappd config node tcp://0.0.0.0:2241 -feeappd start --pruning=nothing --minimum-gas-prices=0.0001stake --p2p.laddr tcp://0.0.0.0:2240 --rpc.laddr tcp://0.0.0.0:2241 --grpc.address 0.0.0.0:2242 --grpc-web.address 0.0.0.0:2243 \ No newline at end of file +feeappd start --pruning=nothing --minimum-gas-prices=0stake --p2p.laddr tcp://0.0.0.0:2240 --rpc.laddr tcp://0.0.0.0:2241 --grpc.address 0.0.0.0:2242 --grpc-web.address 0.0.0.0:2243 diff --git a/scripts/pool.json b/scripts/pool.json index 908851c1..481387f8 100644 --- a/scripts/pool.json +++ b/scripts/pool.json @@ -4,4 +4,4 @@ "swap-fee": "0.01", "exit-fee": "0.01", "future-governor": "168h" -} \ No newline at end of file +} diff --git a/tests/interchaintest/packet_foward_test.go b/tests/interchaintest/packet_foward_test.go index acbe31b7..04169c81 100644 --- a/tests/interchaintest/packet_foward_test.go +++ b/tests/interchaintest/packet_foward_test.go @@ -73,8 +73,8 @@ func TestPacketForwardMiddleware(t *testing.T) { Name: "osmosis", Version: "v15.0.0", ChainConfig: ibc.ChainConfig{ - GasPrices: "0.005uosmo", - EncodingConfig: osmosisEncoding(), + GasPrices: "0.005uosmo", + // EncodingConfig: osmosisEncoding(), }, GasAdjustment: &gasAdjustment, NumValidators: &numVals, From 82bae8c5901744ee82f8ee0478a706a8050ec360 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=E1=BA=A1m=20Anh=20Minh?= <1phamminh0811@gmail.com> Date: Thu, 3 Aug 2023 11:26:18 +0700 Subject: [PATCH 14/90] add chain ID to root --- cmd/feeappd/cmd/root.go | 13 +++++++++++++ go.mod | 2 +- testnode.sh | 0 3 files changed, 14 insertions(+), 1 deletion(-) mode change 100644 => 100755 testnode.sh diff --git a/cmd/feeappd/cmd/root.go b/cmd/feeappd/cmd/root.go index 8014218e..3047cc61 100644 --- a/cmd/feeappd/cmd/root.go +++ b/cmd/feeappd/cmd/root.go @@ -11,6 +11,7 @@ import ( "github.com/cometbft/cometbft/libs/log" dbm "github.com/cometbft/cometbft-db" + tmtypes "github.com/cometbft/cometbft/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/config" @@ -244,6 +245,17 @@ func (ac appCreator) newApp( wasmOpts = append(wasmOpts, wasmkeeper.WithVMCacheMetrics(prometheus.DefaultRegisterer)) } + homeDir := cast.ToString(appOpts.Get(flags.FlagHome)) + chainID := cast.ToString(appOpts.Get(flags.FlagChainID)) + if chainID == "" { + // fallback to genesis chain-id + appGenesis, err := tmtypes.GenesisDocFromFile(filepath.Join(homeDir, "config", "genesis.json")) + if err != nil { + panic(err) + } + + chainID = appGenesis.ChainID + } return feeapp.NewFeeAbs( logger, db, traceStore, true, skipUpgradeHeights, cast.ToString(appOpts.Get(flags.FlagHome)), @@ -263,6 +275,7 @@ func (ac appCreator) newApp( Interval: cast.ToUint64(appOpts.Get(server.FlagStateSyncSnapshotInterval)), KeepRecent: cast.ToUint32(appOpts.Get(server.FlagStateSyncSnapshotKeepRecent)), }), + baseapp.SetChainID(chainID), ) } diff --git a/go.mod b/go.mod index dfee578b..f0758a68 100644 --- a/go.mod +++ b/go.mod @@ -34,7 +34,7 @@ require ( cosmossdk.io/api v0.3.1 // indirect cosmossdk.io/core v0.5.1 // indirect cosmossdk.io/depinject v1.0.0-alpha.3 // indirect - cosmossdk.io/math v1.0.0-rc.0 // indirect + cosmossdk.io/math v1.0.0-rc.0 cosmossdk.io/tools/rosetta v0.2.1 // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect diff --git a/testnode.sh b/testnode.sh old mode 100644 new mode 100755 From 13180f9761ee6bd39c6a086fafec80839c1d4436 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=E1=BA=A1m=20Anh=20Minh?= <1phamminh0811@gmail.com> Date: Thu, 3 Aug 2023 11:54:27 +0700 Subject: [PATCH 15/90] default baseappOption --- cmd/feeappd/cmd/root.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/cmd/feeappd/cmd/root.go b/cmd/feeappd/cmd/root.go index 3047cc61..45967c94 100644 --- a/cmd/feeappd/cmd/root.go +++ b/cmd/feeappd/cmd/root.go @@ -26,6 +26,7 @@ import ( snapshotstypes "github.com/cosmos/cosmos-sdk/snapshots/types" "github.com/cosmos/cosmos-sdk/store" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/mempool" authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli" "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" @@ -275,6 +276,14 @@ func (ac appCreator) newApp( Interval: cast.ToUint64(appOpts.Get(server.FlagStateSyncSnapshotInterval)), KeepRecent: cast.ToUint32(appOpts.Get(server.FlagStateSyncSnapshotKeepRecent)), }), + baseapp.SetIAVLCacheSize(cast.ToInt(appOpts.Get(server.FlagIAVLCacheSize))), + baseapp.SetIAVLDisableFastNode(cast.ToBool(appOpts.Get(server.FlagDisableIAVLFastNode))), + baseapp.SetMempool( + mempool.NewSenderNonceMempool( + mempool.SenderNonceMaxTxOpt(cast.ToInt(appOpts.Get(server.FlagMempoolMaxTxs))), + ), + ), + baseapp.SetIAVLLazyLoading(cast.ToBool(appOpts.Get(server.FlagIAVLLazyLoading))), baseapp.SetChainID(chainID), ) } From 8c28b0047be2e3b942939bb0c7c010f8001c0757 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=E1=BA=A1m=20Anh=20Minh?= <1phamminh0811@gmail.com> Date: Thu, 3 Aug 2023 14:15:44 +0700 Subject: [PATCH 16/90] fix query error --- cmd/feeappd/cmd/root.go | 62 ++--------------------------------------- go.mod | 2 ++ go.sum | 23 +++++---------- 3 files changed, 11 insertions(+), 76 deletions(-) diff --git a/cmd/feeappd/cmd/root.go b/cmd/feeappd/cmd/root.go index 45967c94..9aa99aa3 100644 --- a/cmd/feeappd/cmd/root.go +++ b/cmd/feeappd/cmd/root.go @@ -4,15 +4,12 @@ import ( "errors" "io" "os" - "path/filepath" tmcfg "github.com/cometbft/cometbft/config" tmcli "github.com/cometbft/cometbft/libs/cli" "github.com/cometbft/cometbft/libs/log" dbm "github.com/cometbft/cometbft-db" - tmtypes "github.com/cometbft/cometbft/types" - "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/config" "github.com/cosmos/cosmos-sdk/client/debug" @@ -22,11 +19,7 @@ import ( "github.com/cosmos/cosmos-sdk/server" serverconfig "github.com/cosmos/cosmos-sdk/server/config" servertypes "github.com/cosmos/cosmos-sdk/server/types" - "github.com/cosmos/cosmos-sdk/snapshots" - snapshotstypes "github.com/cosmos/cosmos-sdk/snapshots/types" - "github.com/cosmos/cosmos-sdk/store" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/mempool" authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli" "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" @@ -215,48 +208,17 @@ func (ac appCreator) newApp( traceStore io.Writer, appOpts servertypes.AppOptions, ) servertypes.Application { - var cache sdk.MultiStorePersistentCache - - if cast.ToBool(appOpts.Get(server.FlagInterBlockCache)) { - cache = store.NewCommitKVStoreCacheManager() - } - skipUpgradeHeights := make(map[int64]bool) for _, h := range cast.ToIntSlice(appOpts.Get(server.FlagUnsafeSkipUpgrades)) { skipUpgradeHeights[int64(h)] = true } - - pruningOpts, err := server.GetPruningOptionsFromFlags(appOpts) - if err != nil { - panic(err) - } - - snapshotDir := filepath.Join(cast.ToString(appOpts.Get(flags.FlagHome)), "data", "snapshots") - snapshotDB, err := dbm.NewGoLevelDB("metadata", snapshotDir) - if err != nil { - panic(err) - } - snapshotStore, err := snapshots.NewStore(snapshotDB, snapshotDir) - if err != nil { - panic(err) - } - var wasmOpts []wasm.Option if cast.ToBool(appOpts.Get("telemetry.enabled")) { wasmOpts = append(wasmOpts, wasmkeeper.WithVMCacheMetrics(prometheus.DefaultRegisterer)) } - homeDir := cast.ToString(appOpts.Get(flags.FlagHome)) - chainID := cast.ToString(appOpts.Get(flags.FlagChainID)) - if chainID == "" { - // fallback to genesis chain-id - appGenesis, err := tmtypes.GenesisDocFromFile(filepath.Join(homeDir, "config", "genesis.json")) - if err != nil { - panic(err) - } + baseappOptions := server.DefaultBaseappOptions(appOpts) - chainID = appGenesis.ChainID - } return feeapp.NewFeeAbs( logger, db, traceStore, true, skipUpgradeHeights, cast.ToString(appOpts.Get(flags.FlagHome)), @@ -264,27 +226,7 @@ func (ac appCreator) newApp( ac.encCfg, appOpts, wasmOpts, - baseapp.SetPruning(pruningOpts), - baseapp.SetMinGasPrices(cast.ToString(appOpts.Get(server.FlagMinGasPrices))), - baseapp.SetHaltHeight(cast.ToUint64(appOpts.Get(server.FlagHaltHeight))), - baseapp.SetHaltTime(cast.ToUint64(appOpts.Get(server.FlagHaltTime))), - baseapp.SetMinRetainBlocks(cast.ToUint64(appOpts.Get(server.FlagMinRetainBlocks))), - baseapp.SetInterBlockCache(cache), - baseapp.SetTrace(cast.ToBool(appOpts.Get(server.FlagTrace))), - baseapp.SetIndexEvents(cast.ToStringSlice(appOpts.Get(server.FlagIndexEvents))), - baseapp.SetSnapshot(snapshotStore, snapshotstypes.SnapshotOptions{ - Interval: cast.ToUint64(appOpts.Get(server.FlagStateSyncSnapshotInterval)), - KeepRecent: cast.ToUint32(appOpts.Get(server.FlagStateSyncSnapshotKeepRecent)), - }), - baseapp.SetIAVLCacheSize(cast.ToInt(appOpts.Get(server.FlagIAVLCacheSize))), - baseapp.SetIAVLDisableFastNode(cast.ToBool(appOpts.Get(server.FlagDisableIAVLFastNode))), - baseapp.SetMempool( - mempool.NewSenderNonceMempool( - mempool.SenderNonceMaxTxOpt(cast.ToInt(appOpts.Get(server.FlagMempoolMaxTxs))), - ), - ), - baseapp.SetIAVLLazyLoading(cast.ToBool(appOpts.Get(server.FlagIAVLLazyLoading))), - baseapp.SetChainID(chainID), + baseappOptions..., ) } diff --git a/go.mod b/go.mod index f0758a68..5cd95b76 100644 --- a/go.mod +++ b/go.mod @@ -177,4 +177,6 @@ replace ( github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 // use notional fork of packet forward middleware github.com/strangelove-ventures/packet-forward-middleware/v7 => github.com/notional-labs/packet-forward-middleware/v7 v7.0.1 + // change goleveldb + github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 ) diff --git a/go.sum b/go.sum index cc7d6a98..8430189b 100644 --- a/go.sum +++ b/go.sum @@ -406,7 +406,6 @@ github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2 github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -438,7 +437,6 @@ github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GO github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= @@ -540,7 +538,6 @@ github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= @@ -758,22 +755,17 @@ github.com/notional-labs/packet-forward-middleware/v7 v7.0.1 h1:HG5uY0G3BNprePzG github.com/notional-labs/packet-forward-middleware/v7 v7.0.1/go.mod h1:ixg45X2kEtfjrSgZOQMuahY9VmXa1S3ZtO2amHA1ilU= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= @@ -915,15 +907,14 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= -github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= @@ -1069,6 +1060,7 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= @@ -1079,7 +1071,6 @@ golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1180,16 +1171,17 @@ golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1305,7 +1297,6 @@ golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82u golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= From 1cbf00459ae59ca1e6fe83fc0f2276d2e6c7fef4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=E1=BA=A1m=20Anh=20Minh?= <1phamminh0811@gmail.com> Date: Thu, 3 Aug 2023 16:04:01 +0700 Subject: [PATCH 17/90] change gov proposal version to v1beta1 --- x/feeabs/client/cli/tx.go | 32 +++++++------------------------- 1 file changed, 7 insertions(+), 25 deletions(-) diff --git a/x/feeabs/client/cli/tx.go b/x/feeabs/client/cli/tx.go index 1ad386a8..c51f3b0d 100644 --- a/x/feeabs/client/cli/tx.go +++ b/x/feeabs/client/cli/tx.go @@ -2,7 +2,7 @@ package cli import ( sdk "github.com/cosmos/cosmos-sdk/types" - govv1types "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" @@ -110,28 +110,22 @@ func NewCmdSubmitAddHostZoneProposal() *cobra.Command { return err } + from := clientCtx.GetFromAddress() content := types.NewAddHostZoneProposal( proposal.Title, proposal.Description, proposal.HostChainFeeAbsConfig, ) - from := clientCtx.GetFromAddress() - legacyContent, err := govv1types.NewLegacyContent(content, from.String()) - if err != nil { - return err - } - deposit, err := sdk.ParseCoinsNormalized(proposal.Deposit) if err != nil { return err } - msg, err := govv1types.NewMsgSubmitProposal([]sdk.Msg{legacyContent}, deposit, from.String(), "", "", "") + msg, err := govv1beta1.NewMsgSubmitProposal(content, deposit, from) if err != nil { return err } return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, } @@ -155,28 +149,22 @@ func NewCmdSubmitDeleteHostZoneProposal() *cobra.Command { return err } + from := clientCtx.GetFromAddress() content := types.NewDeleteHostZoneProposal( proposal.Title, proposal.Description, proposal.IbcDenom, ) - from := clientCtx.GetFromAddress() - legacyContent, err := govv1types.NewLegacyContent(content, from.String()) - if err != nil { - return err - } - deposit, err := sdk.ParseCoinsNormalized(proposal.Deposit) if err != nil { return err } - msg, err := govv1types.NewMsgSubmitProposal([]sdk.Msg{legacyContent}, deposit, from.String(), "", "", "") + msg, err := govv1beta1.NewMsgSubmitProposal(content, deposit, from) if err != nil { return err } return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, } @@ -200,28 +188,22 @@ func NewCmdSubmitSetHostZoneProposal() *cobra.Command { return err } + from := clientCtx.GetFromAddress() content := types.NewSetHostZoneProposal( proposal.Title, proposal.Description, proposal.HostChainFeeAbsConfig, ) - from := clientCtx.GetFromAddress() - legacyContent, err := govv1types.NewLegacyContent(content, from.String()) - if err != nil { - return err - } - deposit, err := sdk.ParseCoinsNormalized(proposal.Deposit) if err != nil { return err } - msg, err := govv1types.NewMsgSubmitProposal([]sdk.Msg{legacyContent}, deposit, from.String(), "", "", "") + msg, err := govv1beta1.NewMsgSubmitProposal(content, deposit, from) if err != nil { return err } return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, } From d17351c951c3ca4ad994aa98c9d59b4588d1b91a Mon Sep 17 00:00:00 2001 From: GnaD13 Date: Thu, 3 Aug 2023 16:04:54 +0700 Subject: [PATCH 18/90] ictest setup --- .../osmosistypes/gamm/balancer/codec.go | 2 +- .../interchaintest/osmosistypes/gamm/types/codec.go | 2 +- tests/interchaintest/packet_foward_test.go | 4 ++-- tests/interchaintest/setup.go | 12 +++++------- x/feeabs/client/cli/tx.go | 3 ++- 5 files changed, 11 insertions(+), 12 deletions(-) diff --git a/tests/interchaintest/osmosistypes/gamm/balancer/codec.go b/tests/interchaintest/osmosistypes/gamm/balancer/codec.go index 4a7799d6..0d7673fe 100644 --- a/tests/interchaintest/osmosistypes/gamm/balancer/codec.go +++ b/tests/interchaintest/osmosistypes/gamm/balancer/codec.go @@ -27,4 +27,4 @@ var ( // The actual codec used for serialization should be provided to x/staking and // defined at the application level. ModuleCdc = codec.NewAminoCodec(amino) -) \ No newline at end of file +) diff --git a/tests/interchaintest/osmosistypes/gamm/types/codec.go b/tests/interchaintest/osmosistypes/gamm/types/codec.go index 2e3f0218..4ae7aa23 100644 --- a/tests/interchaintest/osmosistypes/gamm/types/codec.go +++ b/tests/interchaintest/osmosistypes/gamm/types/codec.go @@ -32,4 +32,4 @@ var ( // The actual codec used for serialization should be provided to x/staking and // defined at the application level. ModuleCdc = codec.NewAminoCodec(amino) -) \ No newline at end of file +) diff --git a/tests/interchaintest/packet_foward_test.go b/tests/interchaintest/packet_foward_test.go index 04169c81..acbe31b7 100644 --- a/tests/interchaintest/packet_foward_test.go +++ b/tests/interchaintest/packet_foward_test.go @@ -73,8 +73,8 @@ func TestPacketForwardMiddleware(t *testing.T) { Name: "osmosis", Version: "v15.0.0", ChainConfig: ibc.ChainConfig{ - GasPrices: "0.005uosmo", - // EncodingConfig: osmosisEncoding(), + GasPrices: "0.005uosmo", + EncodingConfig: osmosisEncoding(), }, GasAdjustment: &gasAdjustment, NumValidators: &numVals, diff --git a/tests/interchaintest/setup.go b/tests/interchaintest/setup.go index 02d71e83..c0cd4750 100644 --- a/tests/interchaintest/setup.go +++ b/tests/interchaintest/setup.go @@ -9,8 +9,6 @@ import ( "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/icza/dyno" - balancertypes "github.com/notional-labs/fee-abstraction/tests/interchaintest/osmosistypes/gamm/balancer" - gammtypes "github.com/notional-labs/fee-abstraction/tests/interchaintest/osmosistypes/gamm/types" feeabstype "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos/wasm" @@ -83,8 +81,8 @@ func feeabsEncoding() *testutil.TestEncodingConfig { func osmosisEncoding() *testutil.TestEncodingConfig { cfg := wasm.WasmEncoding() - gammtypes.RegisterInterfaces(cfg.InterfaceRegistry) - balancertypes.RegisterInterfaces(cfg.InterfaceRegistry) + // gammtypes.RegisterInterfaces(cfg.InterfaceRegistry) + // balancertypes.RegisterInterfaces(cfg.InterfaceRegistry) return cfg } @@ -112,13 +110,13 @@ func modifyGenesisShortProposals(votingPeriod string, maxDepositPeriod string) f if err := json.Unmarshal(genbz, &g); err != nil { return nil, fmt.Errorf("failed to unmarshal genesis file: %w", err) } - if err := dyno.Set(g, votingPeriod, "app_state", "gov", "voting_params", "voting_period"); err != nil { + if err := dyno.Set(g, votingPeriod, "app_state", "gov", "params", "voting_period"); err != nil { return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) } - if err := dyno.Set(g, maxDepositPeriod, "app_state", "gov", "deposit_params", "max_deposit_period"); err != nil { + if err := dyno.Set(g, maxDepositPeriod, "app_state", "gov", "params", "max_deposit_period"); err != nil { return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) } - if err := dyno.Set(g, chainConfig.Denom, "app_state", "gov", "deposit_params", "min_deposit", 0, "denom"); err != nil { + if err := dyno.Set(g, chainConfig.Denom, "app_state", "gov", "params", "min_deposit", 0, "denom"); err != nil { return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) } out, err := json.Marshal(g) diff --git a/x/feeabs/client/cli/tx.go b/x/feeabs/client/cli/tx.go index 1ad386a8..3fad2550 100644 --- a/x/feeabs/client/cli/tx.go +++ b/x/feeabs/client/cli/tx.go @@ -3,6 +3,7 @@ package cli import ( sdk "github.com/cosmos/cosmos-sdk/types" govv1types "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" @@ -125,7 +126,7 @@ func NewCmdSubmitAddHostZoneProposal() *cobra.Command { return err } - msg, err := govv1types.NewMsgSubmitProposal([]sdk.Msg{legacyContent}, deposit, from.String(), "", "", "") + msg, err := v1beta1.NewMsgSubmitProposal([]sdk.Msg{legacyContent}, deposit, from.String(), "", "", "") if err != nil { return err } From 01a581bf1c48f85f836222890e1dc863b34bf093 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=E1=BA=A1m=20Anh=20Minh?= <1phamminh0811@gmail.com> Date: Thu, 3 Aug 2023 16:06:02 +0700 Subject: [PATCH 19/90] Revert "fix query error" This reverts commit 8c28b0047be2e3b942939bb0c7c010f8001c0757. --- cmd/feeappd/cmd/root.go | 62 +++++++++++++++++++++++++++++++++++++++-- go.mod | 2 -- go.sum | 23 ++++++++++----- 3 files changed, 76 insertions(+), 11 deletions(-) diff --git a/cmd/feeappd/cmd/root.go b/cmd/feeappd/cmd/root.go index 9aa99aa3..45967c94 100644 --- a/cmd/feeappd/cmd/root.go +++ b/cmd/feeappd/cmd/root.go @@ -4,12 +4,15 @@ import ( "errors" "io" "os" + "path/filepath" tmcfg "github.com/cometbft/cometbft/config" tmcli "github.com/cometbft/cometbft/libs/cli" "github.com/cometbft/cometbft/libs/log" dbm "github.com/cometbft/cometbft-db" + tmtypes "github.com/cometbft/cometbft/types" + "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/config" "github.com/cosmos/cosmos-sdk/client/debug" @@ -19,7 +22,11 @@ import ( "github.com/cosmos/cosmos-sdk/server" serverconfig "github.com/cosmos/cosmos-sdk/server/config" servertypes "github.com/cosmos/cosmos-sdk/server/types" + "github.com/cosmos/cosmos-sdk/snapshots" + snapshotstypes "github.com/cosmos/cosmos-sdk/snapshots/types" + "github.com/cosmos/cosmos-sdk/store" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/mempool" authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli" "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" @@ -208,17 +215,48 @@ func (ac appCreator) newApp( traceStore io.Writer, appOpts servertypes.AppOptions, ) servertypes.Application { + var cache sdk.MultiStorePersistentCache + + if cast.ToBool(appOpts.Get(server.FlagInterBlockCache)) { + cache = store.NewCommitKVStoreCacheManager() + } + skipUpgradeHeights := make(map[int64]bool) for _, h := range cast.ToIntSlice(appOpts.Get(server.FlagUnsafeSkipUpgrades)) { skipUpgradeHeights[int64(h)] = true } + + pruningOpts, err := server.GetPruningOptionsFromFlags(appOpts) + if err != nil { + panic(err) + } + + snapshotDir := filepath.Join(cast.ToString(appOpts.Get(flags.FlagHome)), "data", "snapshots") + snapshotDB, err := dbm.NewGoLevelDB("metadata", snapshotDir) + if err != nil { + panic(err) + } + snapshotStore, err := snapshots.NewStore(snapshotDB, snapshotDir) + if err != nil { + panic(err) + } + var wasmOpts []wasm.Option if cast.ToBool(appOpts.Get("telemetry.enabled")) { wasmOpts = append(wasmOpts, wasmkeeper.WithVMCacheMetrics(prometheus.DefaultRegisterer)) } - baseappOptions := server.DefaultBaseappOptions(appOpts) + homeDir := cast.ToString(appOpts.Get(flags.FlagHome)) + chainID := cast.ToString(appOpts.Get(flags.FlagChainID)) + if chainID == "" { + // fallback to genesis chain-id + appGenesis, err := tmtypes.GenesisDocFromFile(filepath.Join(homeDir, "config", "genesis.json")) + if err != nil { + panic(err) + } + chainID = appGenesis.ChainID + } return feeapp.NewFeeAbs( logger, db, traceStore, true, skipUpgradeHeights, cast.ToString(appOpts.Get(flags.FlagHome)), @@ -226,7 +264,27 @@ func (ac appCreator) newApp( ac.encCfg, appOpts, wasmOpts, - baseappOptions..., + baseapp.SetPruning(pruningOpts), + baseapp.SetMinGasPrices(cast.ToString(appOpts.Get(server.FlagMinGasPrices))), + baseapp.SetHaltHeight(cast.ToUint64(appOpts.Get(server.FlagHaltHeight))), + baseapp.SetHaltTime(cast.ToUint64(appOpts.Get(server.FlagHaltTime))), + baseapp.SetMinRetainBlocks(cast.ToUint64(appOpts.Get(server.FlagMinRetainBlocks))), + baseapp.SetInterBlockCache(cache), + baseapp.SetTrace(cast.ToBool(appOpts.Get(server.FlagTrace))), + baseapp.SetIndexEvents(cast.ToStringSlice(appOpts.Get(server.FlagIndexEvents))), + baseapp.SetSnapshot(snapshotStore, snapshotstypes.SnapshotOptions{ + Interval: cast.ToUint64(appOpts.Get(server.FlagStateSyncSnapshotInterval)), + KeepRecent: cast.ToUint32(appOpts.Get(server.FlagStateSyncSnapshotKeepRecent)), + }), + baseapp.SetIAVLCacheSize(cast.ToInt(appOpts.Get(server.FlagIAVLCacheSize))), + baseapp.SetIAVLDisableFastNode(cast.ToBool(appOpts.Get(server.FlagDisableIAVLFastNode))), + baseapp.SetMempool( + mempool.NewSenderNonceMempool( + mempool.SenderNonceMaxTxOpt(cast.ToInt(appOpts.Get(server.FlagMempoolMaxTxs))), + ), + ), + baseapp.SetIAVLLazyLoading(cast.ToBool(appOpts.Get(server.FlagIAVLLazyLoading))), + baseapp.SetChainID(chainID), ) } diff --git a/go.mod b/go.mod index 5cd95b76..f0758a68 100644 --- a/go.mod +++ b/go.mod @@ -177,6 +177,4 @@ replace ( github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 // use notional fork of packet forward middleware github.com/strangelove-ventures/packet-forward-middleware/v7 => github.com/notional-labs/packet-forward-middleware/v7 v7.0.1 - // change goleveldb - github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 ) diff --git a/go.sum b/go.sum index 8430189b..cc7d6a98 100644 --- a/go.sum +++ b/go.sum @@ -406,6 +406,7 @@ github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2 github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -437,6 +438,7 @@ github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GO github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= @@ -538,6 +540,7 @@ github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= @@ -755,17 +758,22 @@ github.com/notional-labs/packet-forward-middleware/v7 v7.0.1 h1:HG5uY0G3BNprePzG github.com/notional-labs/packet-forward-middleware/v7 v7.0.1/go.mod h1:ixg45X2kEtfjrSgZOQMuahY9VmXa1S3ZtO2amHA1ilU= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= @@ -907,14 +915,15 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= -github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= +github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= +github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= @@ -1060,7 +1069,6 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= @@ -1071,6 +1079,7 @@ golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1171,17 +1180,16 @@ golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1297,6 +1305,7 @@ golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82u golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= From 27140a90f3b7ac868d202f245312cc3653f0a1b6 Mon Sep 17 00:00:00 2001 From: GnaD13 Date: Thu, 3 Aug 2023 16:21:20 +0700 Subject: [PATCH 20/90] done --- go.mod | 1 + go.sum | 23 +++++++---------------- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/go.mod b/go.mod index f0758a68..91624cfc 100644 --- a/go.mod +++ b/go.mod @@ -177,4 +177,5 @@ replace ( github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 // use notional fork of packet forward middleware github.com/strangelove-ventures/packet-forward-middleware/v7 => github.com/notional-labs/packet-forward-middleware/v7 v7.0.1 + github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 ) diff --git a/go.sum b/go.sum index cc7d6a98..8430189b 100644 --- a/go.sum +++ b/go.sum @@ -406,7 +406,6 @@ github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2 github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -438,7 +437,6 @@ github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GO github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= @@ -540,7 +538,6 @@ github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= @@ -758,22 +755,17 @@ github.com/notional-labs/packet-forward-middleware/v7 v7.0.1 h1:HG5uY0G3BNprePzG github.com/notional-labs/packet-forward-middleware/v7 v7.0.1/go.mod h1:ixg45X2kEtfjrSgZOQMuahY9VmXa1S3ZtO2amHA1ilU= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= @@ -915,15 +907,14 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= -github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= @@ -1069,6 +1060,7 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= @@ -1079,7 +1071,6 @@ golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1180,16 +1171,17 @@ golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1305,7 +1297,6 @@ golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82u golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= From 422c8837e4e91b25871850c2c88068ee1a639408 Mon Sep 17 00:00:00 2001 From: GnaD13 Date: Thu, 3 Aug 2023 17:13:07 +0700 Subject: [PATCH 21/90] nit --- tests/interchaintest/go.mod | 2 +- tests/interchaintest/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/interchaintest/go.mod b/tests/interchaintest/go.mod index 61ada9a7..4f38c44d 100644 --- a/tests/interchaintest/go.mod +++ b/tests/interchaintest/go.mod @@ -242,7 +242,7 @@ replace ( github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 // For this nested module, you always want to replace the parent reference with the current worktree. github.com/notional-labs/fee-abstraction/v4 => ../../ - github.com/strangelove-ventures/interchaintest/v7 => github.com/notional-labs/interchaintest/v7 v7.0.0-20230802080145-fb706019ec21 + github.com/strangelove-ventures/interchaintest/v7 => github.com/notional-labs/interchaintest/v7 v7.0.0-20230803100453-9e61f78e0e8c github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 ) diff --git a/tests/interchaintest/go.sum b/tests/interchaintest/go.sum index 53aa68ea..9cf1de6e 100644 --- a/tests/interchaintest/go.sum +++ b/tests/interchaintest/go.sum @@ -825,8 +825,8 @@ github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxzi github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/notional-labs/interchaintest/v7 v7.0.0-20230802080145-fb706019ec21 h1:WY8+Dj86f6Nqn65iUjC+OJUw9uSIVCsWy0r+xGRgrJo= -github.com/notional-labs/interchaintest/v7 v7.0.0-20230802080145-fb706019ec21/go.mod h1:tx6Ou/S8XjDMqTLM9vVCuoTU3VMVAQZTBH0Bwk70lQo= +github.com/notional-labs/interchaintest/v7 v7.0.0-20230803100453-9e61f78e0e8c h1:Hb2ZrD6g5SR/xG8bHvEO43D579sm+BA1LPDi71SDHMs= +github.com/notional-labs/interchaintest/v7 v7.0.0-20230803100453-9e61f78e0e8c/go.mod h1:tx6Ou/S8XjDMqTLM9vVCuoTU3VMVAQZTBH0Bwk70lQo= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= From b43887079700af3307056a5fc0fef6ecb4dc5be0 Mon Sep 17 00:00:00 2001 From: GnaD13 Date: Fri, 4 Aug 2023 03:10:54 +0700 Subject: [PATCH 22/90] change to ibc-app PFM --- app/app.go | 6 +++--- go.mod | 4 ++-- go.sum | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/app.go b/app/app.go index 46c3becf..65614dcd 100644 --- a/app/app.go +++ b/app/app.go @@ -115,9 +115,9 @@ import ( feeabskeeper "github.com/notional-labs/fee-abstraction/v4/x/feeabs/keeper" feeabstypes "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" - "github.com/strangelove-ventures/packet-forward-middleware/v7/router" - routerkeeper "github.com/strangelove-ventures/packet-forward-middleware/v7/router/keeper" - routertypes "github.com/strangelove-ventures/packet-forward-middleware/v7/router/types" + "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router" + routerkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/keeper" + routertypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/types" appparams "github.com/notional-labs/fee-abstraction/v4/app/params" diff --git a/go.mod b/go.mod index 91624cfc..c887774d 100644 --- a/go.mod +++ b/go.mod @@ -10,6 +10,7 @@ require ( github.com/cometbft/cometbft-db v0.7.0 github.com/cosmos/cosmos-sdk v0.47.0 github.com/cosmos/gogoproto v1.4.6 + github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79 github.com/cosmos/ibc-go/v7 v7.0.0 github.com/gogo/protobuf v1.3.2 github.com/golang/protobuf v1.5.3 @@ -19,7 +20,6 @@ require ( github.com/rakyll/statik v0.1.7 github.com/spf13/cast v1.5.0 github.com/spf13/cobra v1.6.1 - github.com/strangelove-ventures/packet-forward-middleware/v7 v7.0.0 github.com/stretchr/testify v1.8.2 google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 google.golang.org/grpc v1.54.0 @@ -176,6 +176,6 @@ replace ( github.com/cosmos/iavl => github.com/cosmos/iavl v0.20.0 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 // use notional fork of packet forward middleware - github.com/strangelove-ventures/packet-forward-middleware/v7 => github.com/notional-labs/packet-forward-middleware/v7 v7.0.1 + // github.com/strangelove-ventures/packet-forward-middleware/v7 => github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79 github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 ) diff --git a/go.sum b/go.sum index 8430189b..6d2abaf8 100644 --- a/go.sum +++ b/go.sum @@ -331,6 +331,8 @@ github.com/cosmos/gogoproto v1.4.6 h1:Ee7z15dWJaGlgM2rWrK8N2IX7PQcuccu8oG68jp5RL github.com/cosmos/gogoproto v1.4.6/go.mod h1:VS/ASYmPgv6zkPKLjR9EB91lwbLHOzaGCirmKKhncfI= github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= +github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79 h1:n+PjYB3JnbKN+sGmX6khST4xMP+D0UdrMNj7O91fuOg= +github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79/go.mod h1:fctjEnz9xaBFOlmYYPdKL8Hs1Y3GUKilSwsJdqBb5QU= github.com/cosmos/ibc-go/v7 v7.0.0 h1:j4kyywlG0hhDmT9FmSaR5iCIka7Pz7kJTxGWY1nlV9Q= github.com/cosmos/ibc-go/v7 v7.0.0/go.mod h1:BFh8nKWjr5zeR2OZfhkzdgDzj1+KjRn3aJLpwapStj8= github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab h1:I9ialKTQo7248V827Bba4OuKPmk+FPzmTVHsLXaIJWw= @@ -751,8 +753,6 @@ github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxzi github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/notional-labs/packet-forward-middleware/v7 v7.0.1 h1:HG5uY0G3BNprePzG047N7V1TFLxVyq89VSKnyRghTcM= -github.com/notional-labs/packet-forward-middleware/v7 v7.0.1/go.mod h1:ixg45X2kEtfjrSgZOQMuahY9VmXa1S3ZtO2amHA1ilU= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= From d645aa87ed5bdcdc2973c956ebb713672e9d3d08 Mon Sep 17 00:00:00 2001 From: GnaD13 Date: Thu, 10 Aug 2023 16:41:53 +0700 Subject: [PATCH 23/90] move from notional to osmosis --- .github/workflows/interchaintest.yaml | 11 ++++---- .github/workflows/push_docker_image.yml | 23 ++++++++-------- Makefile | 2 +- README-v2.md | 3 +-- README.md | 35 ++++++++++++++++--------- ante/ante_test.go | 4 +-- ante/fee_test.go | 2 +- app/ante.go | 6 ++--- app/app.go | 8 +++--- app/encoding.go | 2 +- app/helpers/test_helpers.go | 4 +-- app/sim_test.go | 4 +-- app/test_access.go | 2 +- cmd/feeappd/cmd/root.go | 4 +-- cmd/feeappd/cmd/root_test.go | 4 +-- cmd/feeappd/cmd/testnet.go | 2 +- cmd/feeappd/main.go | 6 ++--- go.mod | 3 +-- x/feeabs/ante/decorate.go | 6 ++--- x/feeabs/client/cli/query.go | 2 +- x/feeabs/client/cli/tx.go | 2 +- x/feeabs/client/cli/tx_test.go | 2 +- x/feeabs/client/cli/util.go | 2 +- x/feeabs/ibc_module.go | 6 ++--- x/feeabs/ibctesting/chain.go | 2 +- x/feeabs/ibctesting/wasm.go | 2 +- x/feeabs/keeper/abci.go | 2 +- x/feeabs/keeper/config.go | 2 +- x/feeabs/keeper/epoch.go | 2 +- x/feeabs/keeper/exchange_rate.go | 4 +-- x/feeabs/keeper/genesis.go | 2 +- x/feeabs/keeper/genesis_test.go | 4 +-- x/feeabs/keeper/grpc_query.go | 2 +- x/feeabs/keeper/grpc_query_test.go | 2 +- x/feeabs/keeper/host_zone_test.go | 6 ++--- x/feeabs/keeper/ibc.go | 2 +- x/feeabs/keeper/keeper.go | 4 +-- x/feeabs/keeper/keeper_test.go | 8 +++--- x/feeabs/keeper/msgserver.go | 2 +- x/feeabs/keeper/proposal.go | 2 +- x/feeabs/keeper/proposal_test.go | 6 ++--- x/feeabs/module.go | 6 ++--- x/feeabs/proposal_handler.go | 8 +++--- x/feeabs/relay_test.go | 2 +- x/feeabs/types/build_memo_test.go | 2 +- 45 files changed, 112 insertions(+), 105 deletions(-) diff --git a/.github/workflows/interchaintest.yaml b/.github/workflows/interchaintest.yaml index 158d2d91..3f6aebdc 100644 --- a/.github/workflows/interchaintest.yaml +++ b/.github/workflows/interchaintest.yaml @@ -19,12 +19,11 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - - name: Login to GitHub Container Registry - uses: docker/login-action@v2 + - name: Login to DockerHub + uses: docker/login-action@v2 with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and push id: build_push_image @@ -35,7 +34,7 @@ jobs: push: true platforms: linux/amd64,linux/arm64 tags: | - ghcr.io/notional-labs/fee-abstraction-ictest:latest + osmolabs/fee-abstraction-ictest:latest test-basic: runs-on: ubuntu-latest needs: build-and-push-image diff --git a/.github/workflows/push_docker_image.yml b/.github/workflows/push_docker_image.yml index b0978bee..8bf0e393 100644 --- a/.github/workflows/push_docker_image.yml +++ b/.github/workflows/push_docker_image.yml @@ -2,10 +2,10 @@ # # On every new `vX.Y.Z` tag the following images are pushed: # -# notional-labs/fee-abstraction:X.Y.Z # is pushed -# notional-labs/fee-abstraction:X.Y # is updated to X.Y.Z -# notional-labs/fee-abstraction:X # is updated to X.Y.Z -# notional-labs/fee-abstraction:latest # is updated to X.Y.Z +# osmosis-labs/fee-abstraction:X.Y.Z # is pushed +# osmosis-labs/fee-abstraction:X.Y # is updated to X.Y.Z +# osmosis-labs/fee-abstraction:X # is updated to X.Y.Z +# osmosis-labs/fee-abstraction:latest # is updated to X.Y.Z # # All the images above have support for linux/amd64 and linux/arm64. # @@ -33,12 +33,11 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - - name: Login to GitHub Container Registry - uses: docker/login-action@v2 + - name: Login to DockerHub + uses: docker/login-action@v2 with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Parse tag id: tag @@ -61,6 +60,6 @@ jobs: push: true platforms: linux/amd64,linux/arm64 tags: | - ghcr.io/notional-labs/fee-abstraction:${{ env.MAJOR_VERSION }} - ghcr.io/notional-labs/fee-abstraction:${{ env.MAJOR_VERSION }}.${{ env.MINOR_VERSION }} - ghcr.io/notional-labs/fee-abstraction:${{ env.MAJOR_VERSION }}.${{ env.MINOR_VERSION }}.${{ env.PATCH_VERSION }} \ No newline at end of file + osmolabs/fee-abstraction:${{ env.MAJOR_VERSION }} + osmolabs/fee-abstraction:${{ env.MAJOR_VERSION }}.${{ env.MINOR_VERSION }} + osmolabs/fee-abstraction:${{ env.MAJOR_VERSION }}.${{ env.MINOR_VERSION }}.${{ env.PATCH_VERSION }} \ No newline at end of file diff --git a/Makefile b/Makefile index 040e4815..09543f0d 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,7 @@ TM_VERSION := $(shell go list -m github.com/cometbft/cometbft | sed 's:.* ::') DOCKER := $(shell which docker) DOCKER_BUF := $(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace bufbuild/buf:1.0.0-rc8 BUILDDIR ?= $(CURDIR)/build -HTTPS_GIT := https://github.com/notional-labs/fee-abstraction.git +HTTPS_GIT := https://github.com/osmosis-labs/fee-abstraction.git export GO111MODULE = on diff --git a/README-v2.md b/README-v2.md index fd0bcfe8..62d4a8cc 100644 --- a/README-v2.md +++ b/README-v2.md @@ -112,5 +112,4 @@ feeappd query feeabs osmo-arithmetic-twap [ibc-denom] [flags] ## Resources -- Main repo: https://github.com/notional-labs/fee-abstraction -- Contract repo: https://github.com/notional-labs/feeabstraction-contract \ No newline at end of file +- Main repo: https://github.com/osmosis-labs/fee-abstraction diff --git a/README.md b/README.md index 5cfbfac0..441abef7 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,4 @@ # Fee Abstraction - ## Context The concrete use cases which motivated this module include: @@ -17,15 +16,13 @@ The implememtation also uses Osmosis swap router and async-icq module which are ## Prototype -Firstly, we narrow the feature of fee-abs from allowing general ibc token as tx fee to allowing only ibc-ed osmosis as tx fee. If thing goes smoothly , we'll work on developing the full feature of fee-abs. - Fee-abs mechanism in a nutshell: 1. Pulling `twap data` and update exchange rate: - Periodically pulling `twap data` from osmosis by ibc-ing to `async-icq` module on Osmosis, this `twap data` will update the exchange rate of osmosis to customer chain's native token. - 2. Handling txs with ibc-osmosis fee: - - The exchange rate is used to calculate the amount of ibc-osmosis needed for tx fee allowing users to pay ibc-osmosis for tx fee instead of chain's native token. - 3. Swap accumulated ibc-osmosis fee: - - The collected ibc-osmosis users use for tx fee is periodically swaped back to customer chain's native token using osmosis. + 2. Handling txs with ibc-token fee: + - The exchange rate is used to calculate the amount of ibc-token needed for tx fee allowing users to pay ibc-token for tx fee instead of chain's native token. + 3. Swap accumulated ibc-token fee: + - The collected ibc-token users use for tx fee is periodically swaped back to customer chain's native token using osmosis. We'll goes into all the details now: @@ -40,15 +37,29 @@ Description : For every `update exchange rate period`, at fee-abs `BeginBlocker()` we submit a `InterchainQueryPacketData` which wrapped `QueryArithmeticTwapToNowRequest` to the querying channel on the customer chain's end. Then relayers will submit `MsgReceivePacket` so that our `QueryTwapPacket` which will be routed to `async-icq` module to be processed. `async-icq` module then unpack `InterchainQueryPacketData` and send query to TWAP module. The correspone response will be wrapped in the ibc acknowledgement. Relayers then submit `MsgAcknowledgement` to the customer chain so that the ibc acknowledgement is routed to fee-abs to be processed. Fee-abs then update exchange rate according to the Twap wrapped in the ibc acknowledgement. #### Handling txs with ibc-token fee -We modified `MempoolFeeDecorator` so that it can handle ibc-osmosis as fee. If the tx has osmosis fee, we basically replace the ibc-osmosis amount with the equivalent native-token amount which is calculated by `exchange rate` * `ibc-osmosis amount`. +We modified `MempoolFeeDecorator` so that it can handle ibc-token as fee. If the tx has ibc-token fee, the AnteHandler will first check if that token is allowed (which is setup by Gov) we basically replace the amount of ibc-token with the equivalent native-token amount which is calculated by `exchange rate` * `ibc-token amount`. -We have an account to manage the ibc-osmosis user used to pay for tx fee. The collected osmosis fee is sent to that account instead of community pool account. +We have an account to manage the ibc-token user used to pay for tx fee. The collected ibc-token fee is sent to that account instead of community pool account. #### Swap accumulated ibc-tokens fee Fee-abstraction will use osmosis's Cross chain Swap (XCS) feature to do this. We basically ibc transfer to the osmosis crosschain swap contract with custom memo to swap the osmosis fee back to customer chain's native-token and ibc transfer back to the customer chain. -Current version of fee-abstraction working with XCSv2 +##### How XCS work +###### Reverse With Path-unwinding to get Ibc-token on Osmosis: +- Create a ibc transfer message with a specific MEMO to work with ibc [``packet-forward-middleware``](https://github.com/strangelove-ventures/packet-forward-middleware) which is path-unwinding (an ibc feature that allow to automatic define the path and ibc transfer multiple hop follow the defined path) +- Ibc transfer the created packet to get the fee Ibc-token on Osmosis + +Ex: When you sent STARS on Hub to Osmosis, you will get Osmosis(Hub(STARS)) which is different with STARS on Osmosis Osmosis(STARS). It will reverse back Osmosis(Hub(STARS)) to Osmosis(STARS): +![](https://i.imgur.com/D1wSrMm.png) + +###### Swap Ibc-token: +After reverse the ibc-token, XCS will : +- Swap with the specific pool (which is defined in the transfer packet from Feeabs-chain) to get Feeabs-chain native-token +- Transfer back Feeabs-chain native-token to Feeabs module account (will use to pay fee for other transaction) + +![](https://i.imgur.com/YKOK8mr.png) + +Current version of fee-abstraction working with XCSv2 ## Resources - - Main repo: https://github.com/notional-labs/fee-abstraction - - Contract repo: https://github.com/notional-labs/feeabstraction-contract + - Main repo: https://github.com/osmosis-labs/fee-abstraction diff --git a/ante/ante_test.go b/ante/ante_test.go index 91b770e0..ec8150e6 100644 --- a/ante/ante_test.go +++ b/ante/ante_test.go @@ -16,8 +16,8 @@ import ( xauthsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" "github.com/stretchr/testify/suite" - "github.com/notional-labs/fee-abstraction/v4/app" - apphelpers "github.com/notional-labs/fee-abstraction/v4/app/helpers" + "github.com/osmosis-labs/fee-abstraction/v4/app" + apphelpers "github.com/osmosis-labs/fee-abstraction/v4/app/helpers" ) type IntegrationTestSuite struct { diff --git a/ante/fee_test.go b/ante/fee_test.go index 452887d0..b2bc5242 100644 --- a/ante/fee_test.go +++ b/ante/fee_test.go @@ -7,7 +7,7 @@ import ( ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - "github.com/notional-labs/fee-abstraction/v4/ante" + "github.com/osmosis-labs/fee-abstraction/v4/ante" ) func (s *IntegrationTestSuite) TestMempoolFeeDecorator() { diff --git a/app/ante.go b/app/ante.go index e48d8a32..9a1e0f09 100644 --- a/app/ante.go +++ b/app/ante.go @@ -1,15 +1,15 @@ package app import ( - sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" errorstypes "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/ante" ibcante "github.com/cosmos/ibc-go/v7/modules/core/ante" ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" - feeabsante "github.com/notional-labs/fee-abstraction/v4/x/feeabs/ante" - feeabskeeper "github.com/notional-labs/fee-abstraction/v4/x/feeabs/keeper" + feeabsante "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/ante" + feeabskeeper "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" ) // HandlerOptions extends the SDK's AnteHandler options by requiring the IBC diff --git a/app/app.go b/app/app.go index 65614dcd..dfd003ef 100644 --- a/app/app.go +++ b/app/app.go @@ -111,15 +111,15 @@ import ( "github.com/rakyll/statik/fs" "github.com/spf13/cast" - feeabsmodule "github.com/notional-labs/fee-abstraction/v4/x/feeabs" - feeabskeeper "github.com/notional-labs/fee-abstraction/v4/x/feeabs/keeper" - feeabstypes "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + feeabsmodule "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs" + feeabskeeper "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" + feeabstypes "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router" routerkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/keeper" routertypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/types" - appparams "github.com/notional-labs/fee-abstraction/v4/app/params" + appparams "github.com/osmosis-labs/fee-abstraction/v4/app/params" // unnamed import of statik for swagger UI support _ "github.com/cosmos/cosmos-sdk/client/docs/statik" diff --git a/app/encoding.go b/app/encoding.go index 89597ecd..3d7907df 100644 --- a/app/encoding.go +++ b/app/encoding.go @@ -1,7 +1,7 @@ package app import ( - "github.com/notional-labs/fee-abstraction/v4/app/params" + "github.com/osmosis-labs/fee-abstraction/v4/app/params" "github.com/cosmos/cosmos-sdk/std" ) diff --git a/app/helpers/test_helpers.go b/app/helpers/test_helpers.go index 6fabf05e..881bf5c1 100644 --- a/app/helpers/test_helpers.go +++ b/app/helpers/test_helpers.go @@ -20,12 +20,12 @@ import ( tmrand "github.com/cometbft/cometbft/libs/rand" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" tmtypes "github.com/cometbft/cometbft/types" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" "github.com/stretchr/testify/require" "github.com/CosmWasm/wasmd/x/wasm" sdk "github.com/cosmos/cosmos-sdk/types" - feeapp "github.com/notional-labs/fee-abstraction/v4/app" + feeapp "github.com/osmosis-labs/fee-abstraction/v4/app" ) // SimAppChainID hardcoded chainID for simulation diff --git a/app/sim_test.go b/app/sim_test.go index 65a38b5f..acb5794e 100644 --- a/app/sim_test.go +++ b/app/sim_test.go @@ -6,12 +6,12 @@ import ( "os" "testing" - feeapp "github.com/notional-labs/fee-abstraction/v4/app" + feeapp "github.com/osmosis-labs/fee-abstraction/v4/app" dbm "github.com/cometbft/cometbft-db" "github.com/cometbft/cometbft/libs/log" "github.com/cometbft/cometbft/libs/rand" - "github.com/notional-labs/fee-abstraction/v4/app/helpers" + "github.com/osmosis-labs/fee-abstraction/v4/app/helpers" "github.com/stretchr/testify/require" "github.com/CosmWasm/wasmd/x/wasm" diff --git a/app/test_access.go b/app/test_access.go index 5ab2360d..fee995b2 100644 --- a/app/test_access.go +++ b/app/test_access.go @@ -5,7 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/keeper" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" "github.com/CosmWasm/wasmd/app/params" diff --git a/cmd/feeappd/cmd/root.go b/cmd/feeappd/cmd/root.go index 45967c94..5250be0e 100644 --- a/cmd/feeappd/cmd/root.go +++ b/cmd/feeappd/cmd/root.go @@ -43,8 +43,8 @@ import ( "github.com/CosmWasm/wasmd/x/wasm" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" - feeapp "github.com/notional-labs/fee-abstraction/v4/app" - "github.com/notional-labs/fee-abstraction/v4/app/params" + feeapp "github.com/osmosis-labs/fee-abstraction/v4/app" + "github.com/osmosis-labs/fee-abstraction/v4/app/params" ) // NewRootCmd creates a new root command for simd. It is called once in the diff --git a/cmd/feeappd/cmd/root_test.go b/cmd/feeappd/cmd/root_test.go index 63cdd34e..1d8f5136 100644 --- a/cmd/feeappd/cmd/root_test.go +++ b/cmd/feeappd/cmd/root_test.go @@ -6,8 +6,8 @@ import ( svrcmd "github.com/cosmos/cosmos-sdk/server/cmd" "github.com/stretchr/testify/require" - app "github.com/notional-labs/fee-abstraction/v4/app" - "github.com/notional-labs/fee-abstraction/v4/cmd/feeappd/cmd" + app "github.com/osmosis-labs/fee-abstraction/v4/app" + "github.com/osmosis-labs/fee-abstraction/v4/cmd/feeappd/cmd" ) func TestRootCmdConfig(t *testing.T) { diff --git a/cmd/feeappd/cmd/testnet.go b/cmd/feeappd/cmd/testnet.go index a732e011..0076ddc2 100644 --- a/cmd/feeappd/cmd/testnet.go +++ b/cmd/feeappd/cmd/testnet.go @@ -36,7 +36,7 @@ import ( ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - "github.com/notional-labs/fee-abstraction/v4/app/params" + "github.com/osmosis-labs/fee-abstraction/v4/app/params" ) var ( diff --git a/cmd/feeappd/main.go b/cmd/feeappd/main.go index 6b65a2e8..46f07ec8 100644 --- a/cmd/feeappd/main.go +++ b/cmd/feeappd/main.go @@ -6,9 +6,9 @@ import ( "github.com/cosmos/cosmos-sdk/server" svrcmd "github.com/cosmos/cosmos-sdk/server/cmd" - app "github.com/notional-labs/fee-abstraction/v4/app" - "github.com/notional-labs/fee-abstraction/v4/app/params" - "github.com/notional-labs/fee-abstraction/v4/cmd/feeappd/cmd" + app "github.com/osmosis-labs/fee-abstraction/v4/app" + "github.com/osmosis-labs/fee-abstraction/v4/app/params" + "github.com/osmosis-labs/fee-abstraction/v4/cmd/feeappd/cmd" ) func main() { diff --git a/go.mod b/go.mod index c887774d..7170d3c6 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/notional-labs/fee-abstraction/v4 +module github.com/osmosis-labs/fee-abstraction/v4 go 1.18 @@ -176,6 +176,5 @@ replace ( github.com/cosmos/iavl => github.com/cosmos/iavl v0.20.0 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 // use notional fork of packet forward middleware - // github.com/strangelove-ventures/packet-forward-middleware/v7 => github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79 github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 ) diff --git a/x/feeabs/ante/decorate.go b/x/feeabs/ante/decorate.go index 11d51445..b5aa3d1e 100644 --- a/x/feeabs/ante/decorate.go +++ b/x/feeabs/ante/decorate.go @@ -3,12 +3,12 @@ package ante import ( "fmt" - sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" errorstypes "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/types" - feeabskeeper "github.com/notional-labs/fee-abstraction/v4/x/feeabs/keeper" - feeabstypes "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + feeabskeeper "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" + feeabstypes "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" ) type FeeAbstractionDeductFeeDecorate struct { diff --git a/x/feeabs/client/cli/query.go b/x/feeabs/client/cli/query.go index 949aadf1..bf5bc213 100644 --- a/x/feeabs/client/cli/query.go +++ b/x/feeabs/client/cli/query.go @@ -5,7 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" "github.com/spf13/cobra" ) diff --git a/x/feeabs/client/cli/tx.go b/x/feeabs/client/cli/tx.go index c51f3b0d..10336e44 100644 --- a/x/feeabs/client/cli/tx.go +++ b/x/feeabs/client/cli/tx.go @@ -7,7 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" "github.com/spf13/cobra" ) diff --git a/x/feeabs/client/cli/tx_test.go b/x/feeabs/client/cli/tx_test.go index 711b674b..40dfca6a 100644 --- a/x/feeabs/client/cli/tx_test.go +++ b/x/feeabs/client/cli/tx_test.go @@ -5,7 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/testutil" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" "github.com/stretchr/testify/require" ) diff --git a/x/feeabs/client/cli/util.go b/x/feeabs/client/cli/util.go index 8c9f4b82..3a236a7f 100644 --- a/x/feeabs/client/cli/util.go +++ b/x/feeabs/client/cli/util.go @@ -4,7 +4,7 @@ import ( "io/ioutil" //nolint:staticcheck "github.com/cosmos/cosmos-sdk/codec" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" ) // ParseParamChangeProposalJSON reads and parses a ParamChangeProposalJSON from diff --git a/x/feeabs/ibc_module.go b/x/feeabs/ibc_module.go index 80953d47..a436207a 100644 --- a/x/feeabs/ibc_module.go +++ b/x/feeabs/ibc_module.go @@ -3,17 +3,17 @@ package feeabs import ( "fmt" + sdkerrors "cosmossdk.io/errors" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" errorstypes "github.com/cosmos/cosmos-sdk/types/errors" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" host "github.com/cosmos/ibc-go/v7/modules/core/24-host" ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/keeper" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" ) // IBCModule implements the ICS26 interface for transfer given the transfer keeper. diff --git a/x/feeabs/ibctesting/chain.go b/x/feeabs/ibctesting/chain.go index d9dddc6b..8015a6ac 100644 --- a/x/feeabs/ibctesting/chain.go +++ b/x/feeabs/ibctesting/chain.go @@ -41,7 +41,7 @@ import ( "github.com/stretchr/testify/require" "github.com/CosmWasm/wasmd/x/wasm" - feeabs "github.com/notional-labs/fee-abstraction/v4/app" + feeabs "github.com/osmosis-labs/fee-abstraction/v4/app" ) // TestChain is a testing struct that wraps a simapp with the last TM Header, the current ABCI diff --git a/x/feeabs/ibctesting/wasm.go b/x/feeabs/ibctesting/wasm.go index 2d17a77e..674fa82e 100644 --- a/x/feeabs/ibctesting/wasm.go +++ b/x/feeabs/ibctesting/wasm.go @@ -7,7 +7,7 @@ import ( "github.com/cometbft/cometbft/libs/rand" sdk "github.com/cosmos/cosmos-sdk/types" ibctesting "github.com/cosmos/ibc-go/v7/testing" - feeabs "github.com/notional-labs/fee-abstraction/v4/app" + feeabs "github.com/osmosis-labs/fee-abstraction/v4/app" "github.com/stretchr/testify/require" ) diff --git a/x/feeabs/keeper/abci.go b/x/feeabs/keeper/abci.go index ccf024ca..ce7ba905 100644 --- a/x/feeabs/keeper/abci.go +++ b/x/feeabs/keeper/abci.go @@ -6,7 +6,7 @@ import ( "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" ) // BeginBlocker of epochs module. diff --git a/x/feeabs/keeper/config.go b/x/feeabs/keeper/config.go index e8e2bda2..255cf209 100644 --- a/x/feeabs/keeper/config.go +++ b/x/feeabs/keeper/config.go @@ -3,7 +3,7 @@ package keeper import ( sdkerrors "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" ) func (keeper Keeper) HasHostZoneConfig(ctx sdk.Context, ibcDenom string) bool { diff --git a/x/feeabs/keeper/epoch.go b/x/feeabs/keeper/epoch.go index 359e75c8..5996b330 100644 --- a/x/feeabs/keeper/epoch.go +++ b/x/feeabs/keeper/epoch.go @@ -6,7 +6,7 @@ import ( proto "github.com/cosmos/gogoproto/proto" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" sdk "github.com/cosmos/cosmos-sdk/types" ) diff --git a/x/feeabs/keeper/exchange_rate.go b/x/feeabs/keeper/exchange_rate.go index 01f6997f..fd083149 100644 --- a/x/feeabs/keeper/exchange_rate.go +++ b/x/feeabs/keeper/exchange_rate.go @@ -1,9 +1,9 @@ package keeper import ( - sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "cosmossdk.io/errors" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" ) // GetTwapRate return Twap Price of ibcDenom diff --git a/x/feeabs/keeper/genesis.go b/x/feeabs/keeper/genesis.go index 977da0b4..e9a0152e 100644 --- a/x/feeabs/keeper/genesis.go +++ b/x/feeabs/keeper/genesis.go @@ -3,7 +3,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" ) // InitGenesis initializes the incentives module's state from a provided genesis state. diff --git a/x/feeabs/keeper/genesis_test.go b/x/feeabs/keeper/genesis_test.go index 4a1a7033..41d6b80f 100644 --- a/x/feeabs/keeper/genesis_test.go +++ b/x/feeabs/keeper/genesis_test.go @@ -6,8 +6,8 @@ import ( "github.com/stretchr/testify/require" - apphelpers "github.com/notional-labs/fee-abstraction/v4/app/helpers" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + apphelpers "github.com/osmosis-labs/fee-abstraction/v4/app/helpers" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" ) var now = time.Now().UTC() diff --git a/x/feeabs/keeper/grpc_query.go b/x/feeabs/keeper/grpc_query.go index d532d04e..249a1597 100644 --- a/x/feeabs/keeper/grpc_query.go +++ b/x/feeabs/keeper/grpc_query.go @@ -4,7 +4,7 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) diff --git a/x/feeabs/keeper/grpc_query_test.go b/x/feeabs/keeper/grpc_query_test.go index ebd13f39..0a3bbc00 100644 --- a/x/feeabs/keeper/grpc_query_test.go +++ b/x/feeabs/keeper/grpc_query_test.go @@ -5,7 +5,7 @@ import ( "time" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" ) var letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") diff --git a/x/feeabs/keeper/host_zone_test.go b/x/feeabs/keeper/host_zone_test.go index becd1b1a..dea4068f 100644 --- a/x/feeabs/keeper/host_zone_test.go +++ b/x/feeabs/keeper/host_zone_test.go @@ -6,9 +6,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - apphelpers "github.com/notional-labs/fee-abstraction/v4/app/helpers" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/keeper" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + apphelpers "github.com/osmosis-labs/fee-abstraction/v4/app/helpers" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" ) func createNHostZone(t *testing.T, keeper *keeper.Keeper, ctx sdk.Context, n int) []types.HostChainFeeAbsConfig { diff --git a/x/feeabs/keeper/ibc.go b/x/feeabs/keeper/ibc.go index f83acc68..aa41c092 100644 --- a/x/feeabs/keeper/ibc.go +++ b/x/feeabs/keeper/ibc.go @@ -12,7 +12,7 @@ import ( clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" host "github.com/cosmos/ibc-go/v7/modules/core/24-host" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" ) // GetPort returns the portID for the module. Used in ExportGenesis. diff --git a/x/feeabs/keeper/keeper.go b/x/feeabs/keeper/keeper.go index 6ec75cf3..9cb8a920 100644 --- a/x/feeabs/keeper/keeper.go +++ b/x/feeabs/keeper/keeper.go @@ -13,7 +13,7 @@ import ( ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" ) type Keeper struct { @@ -132,7 +132,7 @@ func (k Keeper) SetParams(ctx sdk.Context, params types.Params) { // OnTimeoutPacket resend packet when timeout func (k Keeper) OnTimeoutPacket(ctx sdk.Context, chanCap *capabilitytypes.Capability, sourcePort string, sourceChannel string, timeoutHeight clienttypes.Height, timeoutTimestamp uint64, packetData []byte) error { - _, err := k.channelKeeper.SendPacket(ctx, chanCap, sourcePort, sourceChannel, + _, err := k.channelKeeper.SendPacket(ctx, chanCap, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, packetData) return err } diff --git a/x/feeabs/keeper/keeper_test.go b/x/feeabs/keeper/keeper_test.go index 771f22bf..95b2c7b3 100644 --- a/x/feeabs/keeper/keeper_test.go +++ b/x/feeabs/keeper/keeper_test.go @@ -9,10 +9,10 @@ import ( "github.com/cosmos/cosmos-sdk/baseapp" sdk "github.com/cosmos/cosmos-sdk/types" govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" - "github.com/notional-labs/fee-abstraction/v4/app" - apphelpers "github.com/notional-labs/fee-abstraction/v4/app/helpers" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/keeper" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v4/app" + apphelpers "github.com/osmosis-labs/fee-abstraction/v4/app/helpers" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" "github.com/stretchr/testify/suite" ) diff --git a/x/feeabs/keeper/msgserver.go b/x/feeabs/keeper/msgserver.go index 292b9d14..a7494aff 100644 --- a/x/feeabs/keeper/msgserver.go +++ b/x/feeabs/keeper/msgserver.go @@ -5,7 +5,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" ) type msgServer struct { diff --git a/x/feeabs/keeper/proposal.go b/x/feeabs/keeper/proposal.go index 6a663b6f..3ff85f07 100644 --- a/x/feeabs/keeper/proposal.go +++ b/x/feeabs/keeper/proposal.go @@ -2,7 +2,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" ) func (k Keeper) AddHostZoneProposal(ctx sdk.Context, p *types.AddHostZoneProposal) error { diff --git a/x/feeabs/keeper/proposal_test.go b/x/feeabs/keeper/proposal_test.go index 97fcc26e..7c4a18a8 100644 --- a/x/feeabs/keeper/proposal_test.go +++ b/x/feeabs/keeper/proposal_test.go @@ -1,11 +1,11 @@ package keeper_test import ( - apphelpers "github.com/notional-labs/fee-abstraction/v4/app/helpers" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + apphelpers "github.com/osmosis-labs/fee-abstraction/v4/app/helpers" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" - sdk "github.com/cosmos/cosmos-sdk/types" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" + sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" govv1types "github.com/cosmos/cosmos-sdk/x/gov/types/v1" diff --git a/x/feeabs/module.go b/x/feeabs/module.go index 27759c6c..c4741d00 100644 --- a/x/feeabs/module.go +++ b/x/feeabs/module.go @@ -13,9 +13,9 @@ import ( "github.com/cosmos/cosmos-sdk/types/module" "github.com/gorilla/mux" "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/client/cli" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/keeper" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/client/cli" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" "github.com/spf13/cobra" ) diff --git a/x/feeabs/proposal_handler.go b/x/feeabs/proposal_handler.go index 1b790ed4..5653b80f 100644 --- a/x/feeabs/proposal_handler.go +++ b/x/feeabs/proposal_handler.go @@ -1,16 +1,16 @@ package feeabs import ( - sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" errorstypes "github.com/cosmos/cosmos-sdk/types/errors" govclient "github.com/cosmos/cosmos-sdk/x/gov/client" v1beta1types "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/keeper" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" - cli "github.com/notional-labs/fee-abstraction/v4/x/feeabs/client/cli" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + cli "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/client/cli" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" ) var ( diff --git a/x/feeabs/relay_test.go b/x/feeabs/relay_test.go index 5085defe..a92a92c9 100644 --- a/x/feeabs/relay_test.go +++ b/x/feeabs/relay_test.go @@ -7,7 +7,7 @@ import ( wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" - wasmibctesting "github.com/notional-labs/fee-abstraction/v4/x/feeabs/ibctesting" + wasmibctesting "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/ibctesting" sdkerrors "cosmossdk.io/errors" wasmvm "github.com/CosmWasm/wasmvm" diff --git a/x/feeabs/types/build_memo_test.go b/x/feeabs/types/build_memo_test.go index 403e988b..17e5eba0 100644 --- a/x/feeabs/types/build_memo_test.go +++ b/x/feeabs/types/build_memo_test.go @@ -5,7 +5,7 @@ import ( "github.com/stretchr/testify/require" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" ) // TODO: need to refactor this test, use driven table From 58aba6d1df65c4f689f818f9340e6d8b085b7934 Mon Sep 17 00:00:00 2001 From: GnaD13 Date: Thu, 10 Aug 2023 18:17:22 +0700 Subject: [PATCH 24/90] setup ict --- tests/interchaintest/go.mod | 4 ++-- tests/interchaintest/setup.go | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/interchaintest/go.mod b/tests/interchaintest/go.mod index 4f38c44d..8bbb6691 100644 --- a/tests/interchaintest/go.mod +++ b/tests/interchaintest/go.mod @@ -10,7 +10,7 @@ require ( github.com/golang/protobuf v1.5.3 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 - github.com/notional-labs/fee-abstraction/v4 v4.0.1 + github.com/osmosis-labs/fee-abstraction/v4 v4.0.0 github.com/strangelove-ventures/interchaintest/v7 v7.1.2 github.com/stretchr/testify v1.8.4 go.uber.org/zap v1.24.0 @@ -241,7 +241,7 @@ replace ( github.com/cosmos/iavl => github.com/cosmos/iavl v0.20.0 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 // For this nested module, you always want to replace the parent reference with the current worktree. - github.com/notional-labs/fee-abstraction/v4 => ../../ + github.com/osmosis-labs/fee-abstraction/v4 => ../../ github.com/strangelove-ventures/interchaintest/v7 => github.com/notional-labs/interchaintest/v7 v7.0.0-20230803100453-9e61f78e0e8c github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 diff --git a/tests/interchaintest/setup.go b/tests/interchaintest/setup.go index c0cd4750..df1d7aad 100644 --- a/tests/interchaintest/setup.go +++ b/tests/interchaintest/setup.go @@ -9,7 +9,7 @@ import ( "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/icza/dyno" - feeabstype "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + feeabstype "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos/wasm" @@ -32,8 +32,8 @@ const ( ) var ( - FeeabsMainRepo = "ghcr.io/notional-labs/fee-abstraction" - FeeabsICTestRepo = "ghcr.io/notional-labs/fee-abstraction-ictest" + FFeeabsMainRepo = "osmolabs/fee-abstraction" + FeeabsICTestRepo = "osmolabs/fee-abstraction-ictest" repo, version = GetDockerImageInfo() From 29eb4b290e8ccbdae2d8e82a3a519aa4a5332047 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 12 Aug 2023 05:59:02 +0000 Subject: [PATCH 25/90] Bump github.com/cometbft/cometbft from 0.37.0 to 0.37.2 Bumps [github.com/cometbft/cometbft](https://github.com/cometbft/cometbft) from 0.37.0 to 0.37.2. - [Release notes](https://github.com/cometbft/cometbft/releases) - [Changelog](https://github.com/cometbft/cometbft/blob/main/CHANGELOG.md) - [Commits](https://github.com/cometbft/cometbft/compare/v0.37.0...v0.37.2) --- updated-dependencies: - dependency-name: github.com/cometbft/cometbft dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 7170d3c6..27a25f36 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( cosmossdk.io/errors v1.0.0-beta.7 github.com/CosmWasm/wasmd v0.40.0-rc.0 github.com/CosmWasm/wasmvm v1.2.1 - github.com/cometbft/cometbft v0.37.0 + github.com/cometbft/cometbft v0.37.2 github.com/cometbft/cometbft-db v0.7.0 github.com/cosmos/cosmos-sdk v0.47.0 github.com/cosmos/gogoproto v1.4.6 diff --git a/go.sum b/go.sum index 6d2abaf8..6716814f 100644 --- a/go.sum +++ b/go.sum @@ -303,8 +303,8 @@ github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:z github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= -github.com/cometbft/cometbft v0.37.0 h1:M005vBaSaugvYYmNZwJOopynQSjwLoDTwflnQ/I/eYk= -github.com/cometbft/cometbft v0.37.0/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= +github.com/cometbft/cometbft v0.37.2 h1:XB0yyHGT0lwmJlFmM4+rsRnczPlHoAKFX6K8Zgc2/Jc= +github.com/cometbft/cometbft v0.37.2/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= github.com/cometbft/cometbft-db v0.7.0 h1:uBjbrBx4QzU0zOEnU8KxoDl18dMNgDh+zZRUE0ucsbo= github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= From 5c949343b71bf25f2a84eeb7ff7c8b249fc7f36f Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 12 Aug 2023 14:05:17 +0800 Subject: [PATCH 26/90] update readme --- README-v2.md | 115 --------------------------------------------------- README.md | 3 +- 2 files changed, 1 insertion(+), 117 deletions(-) delete mode 100644 README-v2.md diff --git a/README-v2.md b/README-v2.md deleted file mode 100644 index 62d4a8cc..00000000 --- a/README-v2.md +++ /dev/null @@ -1,115 +0,0 @@ -# Fee Abstraction - -## Context - -The concrete use cases which motivated this module include: - -- The desire to use IBC token as transaction fees on any chain instead of having to use native token as fee. -- To fully take advantage of the newly represented Osmosis [`swap router`](https://github.com/osmosis-labs/osmosis/tree/main/cosmwasm/contracts) with the [`ibc-hooks`](https://github.com/osmosis-labs/osmosis/tree/main/x/ibc-hooks) module. - -## Description - -Fee abstraction modules enable users on any Cosmos chain with IBC connections to pay fee using ibc token. - -Fee-abs implementation composes of 2 pieces of software : - -- Fee-abs module imported to the customer chain. -- A smart contract for querying TWAP deployed on Osmosis. - -Other than those two, the implememtation also uses Osmosis swap router which is already deployed on Osmosis testnet. - -## Prototype - -Firstly, we narrow the feature of fee-abs from allowing general ibc token as tx fee to allowing only ibc-ed osmosis as tx fee. If thing goes smoothly , we'll work on developing the full feature of fee-abs. - -Fee-abs mechanism in a nutshell: - -1. Pulling `twap data` and update exchange rate: - -- Periodically pulling `twap data` from osmosis by ibc-ing to our osmosis contract, this `twap data` will update the exchange rate of osmosis to customer chain's native token. - -2. Handling txs with ibc-osmosis fee: - -- The exchange rate is used to calculate the amount of ibc-osmosis needed for tx fee allowing users to pay ibc-osmosis for tx fee instead of chain's native token. - -3. Swap accumulated ibc-osmosis fee: - -- The collected ibc-osmosis users use for tx fee is periodically swaped back to customer chain's native token using osmosis. - -We'll goes into all the details now: - -#### Pulling `twap data` and update exchange rate - -For this to work, we first has to set up an ibc channel from fee-abs to our osmosis contract. This channel set-up process can be done by anyone, just like setting up an ibc transfer channel. Once that ibc channel is there, we'll use that channel to ibc-query Twap data. Let's call this the querying channel. - -The process of pulling Twap data and update exchange rate : - -![](https://i.imgur.com/sJA4yV7.png) - -Description : -For every `update exchange rate period`, at fee-abs `EndBlocker()` we submit a `query twap packet` to the querying channel on the customer chain's end. Then relayers will submit `MsgReceivePacket` so that our `QueryTwapPacket` which will be routed to our osmosis contract to be processed. Our osmosis contract then query twap price and put it in the ibc acknowledgement. Relayers then submit `MsgAcknowledgement` to the customer chain so that the ibc acknowledgement is routed to fee-abs to be processed. Fee-abs then update exchange rate according to the Twap wrapped in the ibc acknowledgement. - -#### Handling txs with ibc-token fee - -We modified `MempoolFeeDecorator` so that it can handle ibc-osmosis as fee. If the tx has osmosis fee, we basically replace the ibc-osmosis amount with the equivalent native-token amount which is calculated by `exchange rate` \* `ibc-osmosis amount`. - -We have an account to manage the ibc-osmosis user used to pay for tx fee. The collected osmosis fee is sent to that account instead of community pool account. - -#### Swap accumulated ibc-tokens fee - -We use osmosis's ibc hook feature to do this. We basically ibc transfer to the osmosis crosschain swap contract with custom memo to swap the osmosis fee back to customer chain's native-token and ibc transfer back to the customer chain. - -## State - -### OsmosisTwapExchangeRate - -OsmosisTwapExchangeRate is fetched at the end of every epoch. - -The process of pulling Twap data and update exchange rate : - -![](https://i.imgur.com/Osumjpv.png) - -### ChannelID - -### HostChainChainConfig - -## Client - -### CLI - -A user can query and interact with the ``feeabs`` module using the CLI. - -#### Query - -The ``query`` commands allow users to query ``feeabs`` module state - -``` -feeappd query feeabs -h -``` - -##### host-chain-config - -The ``host-chain-config`` command allow users to query host chain config for a given ibc denom. - -``` -feeappd query feeabs host-chain-config [ibc-denom] [flags] -``` - - -##### module-balances -The ``module-balances`` command allow users to query feeabs module balances. -``` -feeappd query feeabs module-balances [flags] -``` - -##### osmo-arithmetic-twap -The ``osmo-arithmetic-twap`` command allow users to query Osmosis twap for an ibc denom. -``` -feeappd query feeabs osmo-arithmetic-twap [ibc-denom] [flags] -``` - -### gRPC - -## Resources - -- Main repo: https://github.com/osmosis-labs/fee-abstraction diff --git a/README.md b/README.md index 441abef7..61f22020 100644 --- a/README.md +++ b/README.md @@ -61,5 +61,4 @@ After reverse the ibc-token, XCS will : ![](https://i.imgur.com/YKOK8mr.png) Current version of fee-abstraction working with XCSv2 -## Resources - - Main repo: https://github.com/osmosis-labs/fee-abstraction + From 66ec919d42d518272374d7cf5338c8e7d5cba4a7 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 12 Aug 2023 14:08:59 +0800 Subject: [PATCH 27/90] update readme --- README.md | 56 ++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 41 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 61f22020..956b82d4 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,53 @@ # Fee Abstraction -## Context + +## Context The concrete use cases which motivated this module include: - - The desire to use IBC token as transaction fees on any chain instead of having to use native token as fee. - - To fully take advantage of the newly represented Osmosis [``swap router``](https://github.com/osmosis-labs/osmosis/tree/main/cosmwasm/contracts) with the [``ibc-hooks``](https://github.com/osmosis-labs/osmosis/tree/main/x/ibc-hooks) module and the [``async-icq``](https://github.com/strangelove-ventures/async-icq) module. - -## Description + +- The desire to use IBC token as transaction fees on any chain instead of having to use native token as fee. +- To fully take advantage of the newly represented Osmosis [``swap router``](https://github.com/osmosis-labs/osmosis/tree/main/cosmwasm/contracts) with the [``ibc-hooks``](https://github.com/osmosis-labs/osmosis/tree/main/x/ibc-hooks) module and the [``async-icq``](https://github.com/strangelove-ventures/async-icq) module. + +## Repository Structure + +This repository is branched by the cosmos-sdk versions and ibc-go versions used. Currently fee abstraction supports: + +- SDK v0.47.x + - branch: release/v4.0.x +- SDK v0.46.x + - branch: release/v3.0.x +- SDK v0.45.x + - branch: release/v2.0.x + +## Description Fee abstraction modules enable users on any Cosmos chain with IBC connections to pay fee using ibc token. Fee-abs implementation: - - Fee-abs module imported to the customer chain. -The implememtation also uses Osmosis swap router and async-icq module which are already deployed on Osmosis testnet. +- Fee-abs module imported to the customer chain. + +The implememtation also uses Osmosis swap router and async-icq module which are already deployed on Osmosis testnet. ## Prototype Fee-abs mechanism in a nutshell: - 1. Pulling `twap data` and update exchange rate: - - Periodically pulling `twap data` from osmosis by ibc-ing to `async-icq` module on Osmosis, this `twap data` will update the exchange rate of osmosis to customer chain's native token. - 2. Handling txs with ibc-token fee: - - The exchange rate is used to calculate the amount of ibc-token needed for tx fee allowing users to pay ibc-token for tx fee instead of chain's native token. + + 1. Pulling `twap data` and update exchange rate: + +- Periodically pulling `twap data` from osmosis by ibc-ing to `async-icq` module on Osmosis, this `twap data` will update the exchange rate of osmosis to customer chain's native token. + + 2. Handling txs with ibc-token fee: + +- The exchange rate is used to calculate the amount of ibc-token needed for tx fee allowing users to pay ibc-token for tx fee instead of chain's native token. + 3. Swap accumulated ibc-token fee: - - The collected ibc-token users use for tx fee is periodically swaped back to customer chain's native token using osmosis. + +- The collected ibc-token users use for tx fee is periodically swaped back to customer chain's native token using osmosis. We'll goes into all the details now: #### Pulling `twap data` and update exchange rate + For this to work, we first has to set up an ibc channel from `feeabs` to `async-icq`. This channel set-up process can be done by anyone, just like setting up an ibc transfer channel. Once that ibc channel is there, we'll use that channel to ibc-query Twap data. Let's call this the querying channel. The process of pulling Twap data and update exchange rate : @@ -37,15 +58,19 @@ Description : For every `update exchange rate period`, at fee-abs `BeginBlocker()` we submit a `InterchainQueryPacketData` which wrapped `QueryArithmeticTwapToNowRequest` to the querying channel on the customer chain's end. Then relayers will submit `MsgReceivePacket` so that our `QueryTwapPacket` which will be routed to `async-icq` module to be processed. `async-icq` module then unpack `InterchainQueryPacketData` and send query to TWAP module. The correspone response will be wrapped in the ibc acknowledgement. Relayers then submit `MsgAcknowledgement` to the customer chain so that the ibc acknowledgement is routed to fee-abs to be processed. Fee-abs then update exchange rate according to the Twap wrapped in the ibc acknowledgement. #### Handling txs with ibc-token fee + We modified `MempoolFeeDecorator` so that it can handle ibc-token as fee. If the tx has ibc-token fee, the AnteHandler will first check if that token is allowed (which is setup by Gov) we basically replace the amount of ibc-token with the equivalent native-token amount which is calculated by `exchange rate` * `ibc-token amount`. We have an account to manage the ibc-token user used to pay for tx fee. The collected ibc-token fee is sent to that account instead of community pool account. #### Swap accumulated ibc-tokens fee + Fee-abstraction will use osmosis's Cross chain Swap (XCS) feature to do this. We basically ibc transfer to the osmosis crosschain swap contract with custom memo to swap the osmosis fee back to customer chain's native-token and ibc transfer back to the customer chain. ##### How XCS work -###### Reverse With Path-unwinding to get Ibc-token on Osmosis: + +###### Reverse With Path-unwinding to get Ibc-token on Osmosis + - Create a ibc transfer message with a specific MEMO to work with ibc [``packet-forward-middleware``](https://github.com/strangelove-ventures/packet-forward-middleware) which is path-unwinding (an ibc feature that allow to automatic define the path and ibc transfer multiple hop follow the defined path) - Ibc transfer the created packet to get the fee Ibc-token on Osmosis @@ -53,12 +78,13 @@ Ex: When you sent STARS on Hub to Osmosis, you will get Osmosis(Hub(STARS)) whic ![](https://i.imgur.com/D1wSrMm.png) -###### Swap Ibc-token: +###### Swap Ibc-token + After reverse the ibc-token, XCS will : + - Swap with the specific pool (which is defined in the transfer packet from Feeabs-chain) to get Feeabs-chain native-token - Transfer back Feeabs-chain native-token to Feeabs module account (will use to pay fee for other transaction) ![](https://i.imgur.com/YKOK8mr.png) Current version of fee-abstraction working with XCSv2 - From a437abb0870d19c95662a10af923967e056b8285 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 12 Aug 2023 14:12:17 +0800 Subject: [PATCH 28/90] linter autofixes --- ante/ante.go | 6 ++- ante/ante_test.go | 11 ++--- ante/fee.go | 6 ++- ante/fee_test.go | 8 ++-- app/ante.go | 11 ++--- app/app.go | 69 ++++++++++++++---------------- app/export.go | 4 +- app/helpers/test_helpers.go | 12 +++--- app/params/config.go | 3 +- app/sim_test.go | 10 ++--- app/test_access.go | 14 +++--- app/test_helpers.go | 22 +++++----- cmd/feeappd/cmd/root.go | 29 ++++++------- cmd/feeappd/cmd/root_test.go | 6 +-- cmd/feeappd/cmd/testnet.go | 16 +++---- cmd/feeappd/main.go | 6 +-- x/feeabs/ante/decorate.go | 11 ++--- x/feeabs/client/cli/query.go | 6 ++- x/feeabs/client/cli/tx.go | 10 ++--- x/feeabs/client/cli/tx_test.go | 5 ++- x/feeabs/client/cli/util.go | 4 +- x/feeabs/ibc_module.go | 12 +++--- x/feeabs/ibctesting/chain.go | 46 ++++++++++---------- x/feeabs/ibctesting/coordinator.go | 4 +- x/feeabs/ibctesting/endpoint.go | 5 +-- x/feeabs/ibctesting/event_utils.go | 7 +-- x/feeabs/ibctesting/wasm.go | 6 ++- x/feeabs/keeper/abci.go | 3 +- x/feeabs/keeper/config.go | 4 +- x/feeabs/keeper/epoch.go | 1 - x/feeabs/keeper/exchange_rate.go | 4 +- x/feeabs/keeper/genesis.go | 4 +- x/feeabs/keeper/genesis_test.go | 3 +- x/feeabs/keeper/grpc_query.go | 3 +- x/feeabs/keeper/grpc_query_test.go | 3 +- x/feeabs/keeper/host_zone_test.go | 7 +-- x/feeabs/keeper/ibc.go | 12 +++--- x/feeabs/keeper/keeper.go | 14 +++--- x/feeabs/keeper/keeper_test.go | 12 +++--- x/feeabs/keeper/msgserver.go | 4 +- x/feeabs/keeper/proposal.go | 3 +- x/feeabs/module.go | 14 +++--- x/feeabs/proposal_handler.go | 10 ++--- x/feeabs/relay_test.go | 12 +++--- x/feeabs/types/build_memo.go | 12 +++--- x/feeabs/types/build_memo_test.go | 13 +++--- x/feeabs/types/events.go | 8 ++-- x/feeabs/types/expected_keepers.go | 11 ++--- x/feeabs/types/genesis.go | 1 - x/feeabs/types/ibc.go | 3 +- x/feeabs/types/msg.go | 3 +- x/feeabs/types/params.go | 1 - 52 files changed, 266 insertions(+), 248 deletions(-) diff --git a/ante/ante.go b/ante/ante.go index 824649e0..5183bdf3 100644 --- a/ante/ante.go +++ b/ante/ante.go @@ -1,12 +1,14 @@ package ante import ( + ibcante "github.com/cosmos/ibc-go/v7/modules/core/ante" + ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" + sdkerrors "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" errorstypes "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/ante" - ibcante "github.com/cosmos/ibc-go/v7/modules/core/ante" - ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" ) // HandlerOptions extend the SDK's AnteHandler options by requiring the IBC diff --git a/ante/ante_test.go b/ante/ante_test.go index ec8150e6..9a97417f 100644 --- a/ante/ante_test.go +++ b/ante/ante_test.go @@ -4,8 +4,10 @@ import ( "fmt" "testing" - tmrand "github.com/cometbft/cometbft/libs/rand" - tmproto "github.com/cometbft/cometbft/proto/tendermint/types" + "github.com/osmosis-labs/fee-abstraction/v4/app" + apphelpers "github.com/osmosis-labs/fee-abstraction/v4/app/helpers" + "github.com/stretchr/testify/suite" + "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/tx" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" @@ -14,10 +16,9 @@ import ( moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/cosmos/cosmos-sdk/types/tx/signing" xauthsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" - "github.com/stretchr/testify/suite" - "github.com/osmosis-labs/fee-abstraction/v4/app" - apphelpers "github.com/osmosis-labs/fee-abstraction/v4/app/helpers" + tmrand "github.com/cometbft/cometbft/libs/rand" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" ) type IntegrationTestSuite struct { diff --git a/ante/fee.go b/ante/fee.go index d495f238..7014f159 100644 --- a/ante/fee.go +++ b/ante/fee.go @@ -1,10 +1,12 @@ package ante import ( - tmstrings "github.com/cometbft/cometbft/libs/strings" - sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "cosmossdk.io/errors" + + sdk "github.com/cosmos/cosmos-sdk/types" errorstypes "github.com/cosmos/cosmos-sdk/types/errors" + + tmstrings "github.com/cometbft/cometbft/libs/strings" ) const maxBypassMinFeeMsgGasUsage = uint64(200_000) diff --git a/ante/fee_test.go b/ante/fee_test.go index b2bc5242..22121886 100644 --- a/ante/fee_test.go +++ b/ante/fee_test.go @@ -1,13 +1,13 @@ package ante_test import ( - cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" - "github.com/cosmos/cosmos-sdk/testutil/testdata" - sdk "github.com/cosmos/cosmos-sdk/types" ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - "github.com/osmosis-labs/fee-abstraction/v4/ante" + + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" + "github.com/cosmos/cosmos-sdk/testutil/testdata" + sdk "github.com/cosmos/cosmos-sdk/types" ) func (s *IntegrationTestSuite) TestMempoolFeeDecorator() { diff --git a/app/ante.go b/app/ante.go index 9a1e0f09..a8ee1d06 100644 --- a/app/ante.go +++ b/app/ante.go @@ -1,15 +1,16 @@ package app import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - errorstypes "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/cosmos/cosmos-sdk/x/auth/ante" ibcante "github.com/cosmos/ibc-go/v7/modules/core/ante" ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" - feeabsante "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/ante" feeabskeeper "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" + + sdkerrors "cosmossdk.io/errors" + + sdk "github.com/cosmos/cosmos-sdk/types" + errorstypes "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/x/auth/ante" ) // HandlerOptions extends the SDK's AnteHandler options by requiring the IBC diff --git a/app/app.go b/app/app.go index dfd003ef..a670a64a 100644 --- a/app/app.go +++ b/app/app.go @@ -12,6 +12,39 @@ import ( "github.com/CosmWasm/wasmd/x/wasm" wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" + "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router" + routerkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/keeper" + routertypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/types" + ica "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts" + icacontrollerkeeper "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/keeper" + icacontrollertypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/types" + icahost "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host" + icahostkeeper "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/keeper" + icahosttypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/types" + icatypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/types" + "github.com/cosmos/ibc-go/v7/modules/apps/transfer" + ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" + ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + ibc "github.com/cosmos/ibc-go/v7/modules/core" + ibcclient "github.com/cosmos/ibc-go/v7/modules/core/02-client" + ibcclientclient "github.com/cosmos/ibc-go/v7/modules/core/02-client/client" + ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" + ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" + ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" + solomachine "github.com/cosmos/ibc-go/v7/modules/light-clients/06-solomachine" + ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" + "github.com/gorilla/mux" + appparams "github.com/osmosis-labs/fee-abstraction/v4/app/params" + feeabsmodule "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs" + feeabskeeper "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" + feeabstypes "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/rakyll/statik/fs" + "github.com/spf13/cast" + + // unnamed import of statik for swagger UI support + _ "github.com/cosmos/cosmos-sdk/client/docs/statik" + "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" nodeservice "github.com/cosmos/cosmos-sdk/client/grpc/node" @@ -82,47 +115,12 @@ import ( upgradeclient "github.com/cosmos/cosmos-sdk/x/upgrade/client" upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" - ica "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts" - icacontrollerkeeper "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/keeper" - icacontrollertypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/types" - icahost "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host" - icahostkeeper "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/keeper" - icahosttypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/types" - icatypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/types" - "github.com/cosmos/ibc-go/v7/modules/apps/transfer" - ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" - ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" - ibc "github.com/cosmos/ibc-go/v7/modules/core" - ibcclient "github.com/cosmos/ibc-go/v7/modules/core/02-client" - ibcclientclient "github.com/cosmos/ibc-go/v7/modules/core/02-client/client" - ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" - ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" - ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" - solomachine "github.com/cosmos/ibc-go/v7/modules/light-clients/06-solomachine" - ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" dbm "github.com/cometbft/cometbft-db" abci "github.com/cometbft/cometbft/abci/types" tmjson "github.com/cometbft/cometbft/libs/json" "github.com/cometbft/cometbft/libs/log" tmos "github.com/cometbft/cometbft/libs/os" - "github.com/gorilla/mux" - "github.com/rakyll/statik/fs" - "github.com/spf13/cast" - - feeabsmodule "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs" - feeabskeeper "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" - feeabstypes "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" - - "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router" - routerkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/keeper" - routertypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/types" - - appparams "github.com/osmosis-labs/fee-abstraction/v4/app/params" - - // unnamed import of statik for swagger UI support - _ "github.com/cosmos/cosmos-sdk/client/docs/statik" ) func getGovProposalHandlers() []govclient.ProposalHandler { @@ -463,7 +461,6 @@ func NewFeeAbs( app.FeeabsKeeper = feeabskeeper.NewKeeper( appCodec, keys[feeabstypes.StoreKey], - keys[feeabstypes.MemStoreKey], app.GetSubspace(feeabstypes.ModuleName), app.StakingKeeper, app.AccountKeeper, diff --git a/app/export.go b/app/export.go index f3d11fcb..f5dc563f 100644 --- a/app/export.go +++ b/app/export.go @@ -4,13 +4,13 @@ import ( "encoding/json" "log" - tmproto "github.com/cometbft/cometbft/proto/tendermint/types" - servertypes "github.com/cosmos/cosmos-sdk/server/types" sdk "github.com/cosmos/cosmos-sdk/types" slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" "github.com/cosmos/cosmos-sdk/x/staking" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" ) // ExportAppStateAndValidators exports the state of the application for a genesis diff --git a/app/helpers/test_helpers.go b/app/helpers/test_helpers.go index 881bf5c1..bdee0012 100644 --- a/app/helpers/test_helpers.go +++ b/app/helpers/test_helpers.go @@ -6,10 +6,16 @@ import ( "testing" "time" + "github.com/CosmWasm/wasmd/x/wasm" + feeapp "github.com/osmosis-labs/fee-abstraction/v4/app" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/stretchr/testify/require" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" "github.com/cosmos/cosmos-sdk/testutil/mock" + sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" @@ -20,12 +26,6 @@ import ( tmrand "github.com/cometbft/cometbft/libs/rand" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" tmtypes "github.com/cometbft/cometbft/types" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" - "github.com/stretchr/testify/require" - - "github.com/CosmWasm/wasmd/x/wasm" - sdk "github.com/cosmos/cosmos-sdk/types" - feeapp "github.com/osmosis-labs/fee-abstraction/v4/app" ) // SimAppChainID hardcoded chainID for simulation diff --git a/app/params/config.go b/app/params/config.go index 4cf5c9a4..efdf4445 100644 --- a/app/params/config.go +++ b/app/params/config.go @@ -1,10 +1,11 @@ package params import ( + sdkerrors "cosmossdk.io/errors" + serverconfig "github.com/cosmos/cosmos-sdk/server/config" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/address" - sdkerrors "cosmossdk.io/errors" errorstypes "github.com/cosmos/cosmos-sdk/types/errors" ) diff --git a/app/sim_test.go b/app/sim_test.go index acb5794e..768970d0 100644 --- a/app/sim_test.go +++ b/app/sim_test.go @@ -6,21 +6,21 @@ import ( "os" "testing" + "github.com/CosmWasm/wasmd/x/wasm" feeapp "github.com/osmosis-labs/fee-abstraction/v4/app" - - dbm "github.com/cometbft/cometbft-db" - "github.com/cometbft/cometbft/libs/log" - "github.com/cometbft/cometbft/libs/rand" "github.com/osmosis-labs/fee-abstraction/v4/app/helpers" "github.com/stretchr/testify/require" - "github.com/CosmWasm/wasmd/x/wasm" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/store" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" simulation2 "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/simulation" simcli "github.com/cosmos/cosmos-sdk/x/simulation/client/cli" + + dbm "github.com/cometbft/cometbft-db" + "github.com/cometbft/cometbft/libs/log" + "github.com/cometbft/cometbft/libs/rand" ) func init() { diff --git a/app/test_access.go b/app/test_access.go index fee995b2..62b807eb 100644 --- a/app/test_access.go +++ b/app/test_access.go @@ -3,20 +3,18 @@ package app import ( "testing" - "github.com/cosmos/cosmos-sdk/baseapp" - "github.com/cosmos/cosmos-sdk/client" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" - "github.com/CosmWasm/wasmd/app/params" + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" + ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" + ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" - ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" - ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" - - wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" ) type TestSupport struct { diff --git a/app/test_helpers.go b/app/test_helpers.go index 258391c2..ae319299 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -11,12 +11,15 @@ import ( "testing" "time" + "github.com/CosmWasm/wasmd/x/wasm" + "github.com/stretchr/testify/require" + + sdkerrors "cosmossdk.io/errors" "cosmossdk.io/math" - abci "github.com/cometbft/cometbft/abci/types" - "github.com/cometbft/cometbft/libs/log" - tmproto "github.com/cometbft/cometbft/proto/tendermint/types" + "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" @@ -24,19 +27,18 @@ import ( "github.com/cosmos/cosmos-sdk/snapshots/types" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" errorstypes "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/stretchr/testify/require" - - "github.com/CosmWasm/wasmd/x/wasm" - dbm "github.com/cometbft/cometbft-db" - tmtypes "github.com/cometbft/cometbft/types" - codectypes "github.com/cosmos/cosmos-sdk/codec/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + + dbm "github.com/cometbft/cometbft-db" + abci "github.com/cometbft/cometbft/abci/types" + "github.com/cometbft/cometbft/libs/log" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" + tmtypes "github.com/cometbft/cometbft/types" ) // DefaultConsensusParams defines the default Tendermint consensus params used in diff --git a/cmd/feeappd/cmd/root.go b/cmd/feeappd/cmd/root.go index 5250be0e..60f066be 100644 --- a/cmd/feeappd/cmd/root.go +++ b/cmd/feeappd/cmd/root.go @@ -6,12 +6,16 @@ import ( "os" "path/filepath" - tmcfg "github.com/cometbft/cometbft/config" - tmcli "github.com/cometbft/cometbft/libs/cli" - "github.com/cometbft/cometbft/libs/log" + "github.com/CosmWasm/wasmd/x/wasm" + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" + ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + feeapp "github.com/osmosis-labs/fee-abstraction/v4/app" + "github.com/osmosis-labs/fee-abstraction/v4/app/params" + "github.com/prometheus/client_golang/prometheus" + "github.com/spf13/cast" + "github.com/spf13/cobra" - dbm "github.com/cometbft/cometbft-db" - tmtypes "github.com/cometbft/cometbft/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/config" @@ -34,17 +38,12 @@ import ( "github.com/cosmos/cosmos-sdk/x/genutil" genutilcli "github.com/cosmos/cosmos-sdk/x/genutil/client/cli" genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" - ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - "github.com/prometheus/client_golang/prometheus" - "github.com/spf13/cast" - "github.com/spf13/cobra" - - "github.com/CosmWasm/wasmd/x/wasm" - wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" - feeapp "github.com/osmosis-labs/fee-abstraction/v4/app" - "github.com/osmosis-labs/fee-abstraction/v4/app/params" + dbm "github.com/cometbft/cometbft-db" + tmcfg "github.com/cometbft/cometbft/config" + tmcli "github.com/cometbft/cometbft/libs/cli" + "github.com/cometbft/cometbft/libs/log" + tmtypes "github.com/cometbft/cometbft/types" ) // NewRootCmd creates a new root command for simd. It is called once in the diff --git a/cmd/feeappd/cmd/root_test.go b/cmd/feeappd/cmd/root_test.go index 1d8f5136..028324a7 100644 --- a/cmd/feeappd/cmd/root_test.go +++ b/cmd/feeappd/cmd/root_test.go @@ -3,11 +3,11 @@ package cmd_test import ( "testing" - svrcmd "github.com/cosmos/cosmos-sdk/server/cmd" - "github.com/stretchr/testify/require" - app "github.com/osmosis-labs/fee-abstraction/v4/app" "github.com/osmosis-labs/fee-abstraction/v4/cmd/feeappd/cmd" + "github.com/stretchr/testify/require" + + svrcmd "github.com/cosmos/cosmos-sdk/server/cmd" ) func TestRootCmdConfig(t *testing.T) { diff --git a/cmd/feeappd/cmd/testnet.go b/cmd/feeappd/cmd/testnet.go index 0076ddc2..e75ee7be 100644 --- a/cmd/feeappd/cmd/testnet.go +++ b/cmd/feeappd/cmd/testnet.go @@ -10,11 +10,9 @@ import ( "os" "path/filepath" - tmconfig "github.com/cometbft/cometbft/config" - tmos "github.com/cometbft/cometbft/libs/os" - tmrand "github.com/cometbft/cometbft/libs/rand" - "github.com/cometbft/cometbft/types" - tmtime "github.com/cometbft/cometbft/types/time" + ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + "github.com/osmosis-labs/fee-abstraction/v4/app/params" "github.com/spf13/cobra" "github.com/cosmos/cosmos-sdk/client" @@ -33,10 +31,12 @@ import ( "github.com/cosmos/cosmos-sdk/x/genutil" genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - "github.com/osmosis-labs/fee-abstraction/v4/app/params" + tmconfig "github.com/cometbft/cometbft/config" + tmos "github.com/cometbft/cometbft/libs/os" + tmrand "github.com/cometbft/cometbft/libs/rand" + "github.com/cometbft/cometbft/types" + tmtime "github.com/cometbft/cometbft/types/time" ) var ( diff --git a/cmd/feeappd/main.go b/cmd/feeappd/main.go index 46f07ec8..4069327f 100644 --- a/cmd/feeappd/main.go +++ b/cmd/feeappd/main.go @@ -3,12 +3,12 @@ package main import ( "os" - "github.com/cosmos/cosmos-sdk/server" - svrcmd "github.com/cosmos/cosmos-sdk/server/cmd" - app "github.com/osmosis-labs/fee-abstraction/v4/app" "github.com/osmosis-labs/fee-abstraction/v4/app/params" "github.com/osmosis-labs/fee-abstraction/v4/cmd/feeappd/cmd" + + "github.com/cosmos/cosmos-sdk/server" + svrcmd "github.com/cosmos/cosmos-sdk/server/cmd" ) func main() { diff --git a/x/feeabs/ante/decorate.go b/x/feeabs/ante/decorate.go index b5aa3d1e..1fc9df8f 100644 --- a/x/feeabs/ante/decorate.go +++ b/x/feeabs/ante/decorate.go @@ -3,12 +3,14 @@ package ante import ( "fmt" + feeabskeeper "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" + feeabstypes "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + sdkerrors "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" errorstypes "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/types" - feeabskeeper "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" - feeabstypes "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" ) type FeeAbstractionDeductFeeDecorate struct { @@ -66,7 +68,6 @@ func (fadfd FeeAbstractionDeductFeeDecorate) normalDeductFeeAnteHandle(ctx sdk.C return ctx, sdkerrors.Wrap(errorstypes.ErrInvalidRequest, "fee grants are not enabled") } else if !feeGranter.Equals(feePayer) { err := fadfd.feegrantKeeper.UseGrantedFees(ctx, feeGranter, feePayer, fee, tx.GetMsgs()) - if err != nil { return ctx, sdkerrors.Wrapf(err, "%s not allowed to pay fees from %s", feeGranter, feePayer) } @@ -109,7 +110,6 @@ func (fadfd FeeAbstractionDeductFeeDecorate) abstractionDeductFeeHandler(ctx sdk return ctx, sdkerrors.Wrap(errorstypes.ErrInvalidRequest, "fee grants are not enabled") } else if !feeGranter.Equals(feePayer) { err := fadfd.feegrantKeeper.UseGrantedFees(ctx, feeGranter, feePayer, fee, tx.GetMsgs()) - if err != nil { return ctx, sdkerrors.Wrapf(err, "%s not allowed to pay fees from %s", feeGranter, feePayer) } @@ -118,7 +118,6 @@ func (fadfd FeeAbstractionDeductFeeDecorate) abstractionDeductFeeHandler(ctx sdk feeAbstractionPayer = feeGranter } - //fee abstraction deduct logic deductFeesFrom := fadfd.feeabsKeeper.GetFeeAbsModuleAddress() deductFeesFromAcc := fadfd.accountKeeper.GetAccount(ctx, deductFeesFrom) if deductFeesFromAcc == nil { @@ -155,7 +154,6 @@ func (fadfd FeeAbstractionDeductFeeDecorate) abstractionDeductFeeHandler(ctx sdk ctx.EventManager().EmitEvents(events) return next(ctx, tx, simulate) - } // DeductFees deducts fees from the given account. @@ -216,7 +214,6 @@ func (famfd FeeAbstrationMempoolFeeDecorator) AnteHandle(ctx sdk.Context, tx sdk nativeCoinsFees, err := famfd.feeabsKeeper.CalculateNativeFromIBCCoins(ctx, feeCoins, hostChainConfig) if err != nil { return ctx, sdkerrors.Wrapf(errorstypes.ErrInsufficientFee, "insufficient fees") - } feeCoins = nativeCoinsFees } diff --git a/x/feeabs/client/cli/query.go b/x/feeabs/client/cli/query.go index bf5bc213..da2a5c67 100644 --- a/x/feeabs/client/cli/query.go +++ b/x/feeabs/client/cli/query.go @@ -3,10 +3,11 @@ package cli import ( "fmt" - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" ) func GetQueryCmd() *cobra.Command { @@ -113,6 +114,7 @@ func GetCmdQueryHostChainConfig() *cobra.Command { return cmd } + func GetCmdQueryAllHostChainConfig() *cobra.Command { cmd := &cobra.Command{ Use: "all-host-chain-config [ibc-denom]", diff --git a/x/feeabs/client/cli/tx.go b/x/feeabs/client/cli/tx.go index 10336e44..c056624d 100644 --- a/x/feeabs/client/cli/tx.go +++ b/x/feeabs/client/cli/tx.go @@ -1,14 +1,14 @@ package cli import ( - sdk "github.com/cosmos/cosmos-sdk/types" - govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "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/osmosis-labs/fee-abstraction/v4/x/feeabs/types" - "github.com/spf13/cobra" + sdk "github.com/cosmos/cosmos-sdk/types" + govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" ) // NewTxCmd returns a root CLI command handler for all x/exp transaction commands. @@ -42,7 +42,6 @@ func NewQueryOsmosisTWAPCmd() *cobra.Command { msg := types.NewMsgSendQueryIbcDenomTWAP(clientCtx.GetFromAddress()) return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, } flags.AddTxFlagsToCmd(cmd) @@ -61,7 +60,6 @@ func NewSwapOverChainCmd() *cobra.Command { } msg := types.NewMsgSwapCrossChain(clientCtx.GetFromAddress(), args[0]) return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, } flags.AddTxFlagsToCmd(cmd) diff --git a/x/feeabs/client/cli/tx_test.go b/x/feeabs/client/cli/tx_test.go index 40dfca6a..9a37aec6 100644 --- a/x/feeabs/client/cli/tx_test.go +++ b/x/feeabs/client/cli/tx_test.go @@ -3,10 +3,11 @@ package cli import ( "testing" - "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/testutil" "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" "github.com/stretchr/testify/require" + + "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/testutil" ) func TestParseProposal(t *testing.T) { diff --git a/x/feeabs/client/cli/util.go b/x/feeabs/client/cli/util.go index 3a236a7f..b9ffddb1 100644 --- a/x/feeabs/client/cli/util.go +++ b/x/feeabs/client/cli/util.go @@ -1,10 +1,10 @@ package cli import ( - "io/ioutil" //nolint:staticcheck + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "io/ioutil" "github.com/cosmos/cosmos-sdk/codec" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" ) // ParseParamChangeProposalJSON reads and parses a ParamChangeProposalJSON from diff --git a/x/feeabs/ibc_module.go b/x/feeabs/ibc_module.go index a436207a..b77e5501 100644 --- a/x/feeabs/ibc_module.go +++ b/x/feeabs/ibc_module.go @@ -3,17 +3,19 @@ package feeabs import ( "fmt" - sdkerrors "cosmossdk.io/errors" - "github.com/cosmos/cosmos-sdk/codec" - sdk "github.com/cosmos/cosmos-sdk/types" - errorstypes "github.com/cosmos/cosmos-sdk/types/errors" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" host "github.com/cosmos/ibc-go/v7/modules/core/24-host" ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + + sdkerrors "cosmossdk.io/errors" + + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + errorstypes "github.com/cosmos/cosmos-sdk/types/errors" + capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" ) // IBCModule implements the ICS26 interface for transfer given the transfer keeper. diff --git a/x/feeabs/ibctesting/chain.go b/x/feeabs/ibctesting/chain.go index 8015a6ac..aeaf63b9 100644 --- a/x/feeabs/ibctesting/chain.go +++ b/x/feeabs/ibctesting/chain.go @@ -6,13 +6,23 @@ import ( "testing" "time" + "github.com/CosmWasm/wasmd/x/wasm" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + commitmenttypes "github.com/cosmos/ibc-go/v7/modules/core/23-commitment/types" + host "github.com/cosmos/ibc-go/v7/modules/core/24-host" + ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" + ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" + "github.com/cosmos/ibc-go/v7/modules/core/types" + ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" + ibctesting "github.com/cosmos/ibc-go/v7/testing" + "github.com/cosmos/ibc-go/v7/testing/mock" + ibctestingtypes "github.com/cosmos/ibc-go/v7/testing/types" + feeabs "github.com/osmosis-labs/fee-abstraction/v4/app" + "github.com/stretchr/testify/require" + sdkerrors "cosmossdk.io/errors" - abci "github.com/cometbft/cometbft/abci/types" - "github.com/cometbft/cometbft/crypto/tmhash" - tmproto "github.com/cometbft/cometbft/proto/tendermint/types" - tmprotoversion "github.com/cometbft/cometbft/proto/tendermint/version" - tmtypes "github.com/cometbft/cometbft/types" - tmversion "github.com/cometbft/cometbft/version" + "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" @@ -24,24 +34,14 @@ import ( capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" teststaking "github.com/cosmos/cosmos-sdk/x/staking/testutil" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - commitmenttypes "github.com/cosmos/ibc-go/v7/modules/core/23-commitment/types" - host "github.com/cosmos/ibc-go/v7/modules/core/24-host" - ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" - ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" - "github.com/cosmos/ibc-go/v7/modules/core/types" - ibctestingtypes "github.com/cosmos/ibc-go/v7/testing/types" - - ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" - ibctesting "github.com/cosmos/ibc-go/v7/testing" - "github.com/cosmos/ibc-go/v7/testing/mock" - "github.com/stretchr/testify/require" - "github.com/CosmWasm/wasmd/x/wasm" - feeabs "github.com/osmosis-labs/fee-abstraction/v4/app" + abci "github.com/cometbft/cometbft/abci/types" + "github.com/cometbft/cometbft/crypto/tmhash" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" + tmprotoversion "github.com/cometbft/cometbft/proto/tendermint/version" + tmtypes "github.com/cometbft/cometbft/types" + tmversion "github.com/cometbft/cometbft/version" ) // TestChain is a testing struct that wraps a simapp with the last TM Header, the current ABCI @@ -419,7 +419,7 @@ func (chain *TestChain) CreateTMClientHeader(chainID string, blockHeight int64, AppHash: chain.CurrentHeader.AppHash, LastResultsHash: tmhash.Sum([]byte("last_results_hash")), EvidenceHash: tmhash.Sum([]byte("evidence_hash")), - ProposerAddress: tmValSet.Proposer.Address, //nolint:staticcheck + ProposerAddress: tmValSet.Proposer.Address, } hhash := tmHeader.Hash() blockID := MakeBlockID(hhash, 3, tmhash.Sum([]byte("part_set"))) diff --git a/x/feeabs/ibctesting/coordinator.go b/x/feeabs/ibctesting/coordinator.go index 806fac87..7d6b18ec 100644 --- a/x/feeabs/ibctesting/coordinator.go +++ b/x/feeabs/ibctesting/coordinator.go @@ -6,13 +6,13 @@ import ( "testing" "time" - abci "github.com/cometbft/cometbft/abci/types" + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" host "github.com/cosmos/ibc-go/v7/modules/core/24-host" ibctesting "github.com/cosmos/ibc-go/v7/testing" "github.com/stretchr/testify/require" - wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" + abci "github.com/cometbft/cometbft/abci/types" ) const ChainIDPrefix = "testchain" diff --git a/x/feeabs/ibctesting/endpoint.go b/x/feeabs/ibctesting/endpoint.go index adf1daa5..98ffe4de 100644 --- a/x/feeabs/ibctesting/endpoint.go +++ b/x/feeabs/ibctesting/endpoint.go @@ -3,8 +3,6 @@ package ibctesting import ( "fmt" - "github.com/stretchr/testify/require" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" connectiontypes "github.com/cosmos/ibc-go/v7/modules/core/03-connection/types" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" @@ -13,6 +11,7 @@ import ( "github.com/cosmos/ibc-go/v7/modules/core/exported" ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" ibctesting "github.com/cosmos/ibc-go/v7/testing" + "github.com/stretchr/testify/require" ) // Endpoint is a which represents a channel endpoint and its associated @@ -68,7 +67,7 @@ func (endpoint *Endpoint) CreateClient() (err error) { height := endpoint.Counterparty.Chain.LastHeader.GetHeight().(clienttypes.Height) clientState = ibctm.NewClientState( endpoint.Counterparty.Chain.ChainID, tmConfig.TrustLevel, tmConfig.TrustingPeriod, tmConfig.UnbondingPeriod, tmConfig.MaxClockDrift, - height, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, + height, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, ) consensusState = endpoint.Counterparty.Chain.LastHeader.ConsensusState() case exported.Solomachine: diff --git a/x/feeabs/ibctesting/event_utils.go b/x/feeabs/ibctesting/event_utils.go index 1a09d1d5..b33e3968 100644 --- a/x/feeabs/ibctesting/event_utils.go +++ b/x/feeabs/ibctesting/event_utils.go @@ -4,9 +4,10 @@ import ( "strconv" "strings" - abci "github.com/cometbft/cometbft/abci/types" clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + + abci "github.com/cometbft/cometbft/abci/types" ) func getSendPackets(evts []abci.Event) []channeltypes.Packet { @@ -59,8 +60,8 @@ func parsePacketFromEvent(evt abci.Event) channeltypes.Packet { // return the value for the attribute with the given name func getField(evt abci.Event, key string) string { for _, attr := range evt.Attributes { - if string(attr.Key) == key { - return string(attr.Value) + if attr.Key == key { + return attr.Value } } return "" diff --git a/x/feeabs/ibctesting/wasm.go b/x/feeabs/ibctesting/wasm.go index 674fa82e..6d28a4c9 100644 --- a/x/feeabs/ibctesting/wasm.go +++ b/x/feeabs/ibctesting/wasm.go @@ -4,11 +4,13 @@ import ( "fmt" "github.com/CosmWasm/wasmd/x/wasm/types" - "github.com/cometbft/cometbft/libs/rand" - sdk "github.com/cosmos/cosmos-sdk/types" ibctesting "github.com/cosmos/ibc-go/v7/testing" feeabs "github.com/osmosis-labs/fee-abstraction/v4/app" "github.com/stretchr/testify/require" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/cometbft/cometbft/libs/rand" ) var wasmIdent = []byte("\x00\x61\x73\x6D") diff --git a/x/feeabs/keeper/abci.go b/x/feeabs/keeper/abci.go index ce7ba905..4e535e3c 100644 --- a/x/feeabs/keeper/abci.go +++ b/x/feeabs/keeper/abci.go @@ -4,9 +4,10 @@ import ( "fmt" "time" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" ) // BeginBlocker of epochs module. diff --git a/x/feeabs/keeper/config.go b/x/feeabs/keeper/config.go index 255cf209..67de2805 100644 --- a/x/feeabs/keeper/config.go +++ b/x/feeabs/keeper/config.go @@ -1,9 +1,11 @@ package keeper import ( + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + sdkerrors "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" ) func (keeper Keeper) HasHostZoneConfig(ctx sdk.Context, ibcDenom string) bool { diff --git a/x/feeabs/keeper/epoch.go b/x/feeabs/keeper/epoch.go index 5996b330..22f303da 100644 --- a/x/feeabs/keeper/epoch.go +++ b/x/feeabs/keeper/epoch.go @@ -5,7 +5,6 @@ import ( "time" proto "github.com/cosmos/gogoproto/proto" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/feeabs/keeper/exchange_rate.go b/x/feeabs/keeper/exchange_rate.go index fd083149..253d46f0 100644 --- a/x/feeabs/keeper/exchange_rate.go +++ b/x/feeabs/keeper/exchange_rate.go @@ -1,9 +1,11 @@ package keeper import ( + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + sdkerrors "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" ) // GetTwapRate return Twap Price of ibcDenom diff --git a/x/feeabs/keeper/genesis.go b/x/feeabs/keeper/genesis.go index e9a0152e..f3ca3d59 100644 --- a/x/feeabs/keeper/genesis.go +++ b/x/feeabs/keeper/genesis.go @@ -1,9 +1,9 @@ package keeper import ( - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + + sdk "github.com/cosmos/cosmos-sdk/types" ) // InitGenesis initializes the incentives module's state from a provided genesis state. diff --git a/x/feeabs/keeper/genesis_test.go b/x/feeabs/keeper/genesis_test.go index 41d6b80f..e9d9b243 100644 --- a/x/feeabs/keeper/genesis_test.go +++ b/x/feeabs/keeper/genesis_test.go @@ -4,10 +4,9 @@ import ( "testing" "time" - "github.com/stretchr/testify/require" - apphelpers "github.com/osmosis-labs/fee-abstraction/v4/app/helpers" "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/stretchr/testify/require" ) var now = time.Now().UTC() diff --git a/x/feeabs/keeper/grpc_query.go b/x/feeabs/keeper/grpc_query.go index 249a1597..130d84f0 100644 --- a/x/feeabs/keeper/grpc_query.go +++ b/x/feeabs/keeper/grpc_query.go @@ -3,10 +3,11 @@ package keeper import ( "context" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" + + sdk "github.com/cosmos/cosmos-sdk/types" ) var _ types.QueryServer = Querier{} diff --git a/x/feeabs/keeper/grpc_query_test.go b/x/feeabs/keeper/grpc_query_test.go index 0a3bbc00..595b7df7 100644 --- a/x/feeabs/keeper/grpc_query_test.go +++ b/x/feeabs/keeper/grpc_query_test.go @@ -4,8 +4,9 @@ import ( "math/rand" "time" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + + sdk "github.com/cosmos/cosmos-sdk/types" ) var letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") diff --git a/x/feeabs/keeper/host_zone_test.go b/x/feeabs/keeper/host_zone_test.go index dea4068f..1af18ed0 100644 --- a/x/feeabs/keeper/host_zone_test.go +++ b/x/feeabs/keeper/host_zone_test.go @@ -3,12 +3,12 @@ package keeper_test import ( "testing" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - apphelpers "github.com/osmosis-labs/fee-abstraction/v4/app/helpers" "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/stretchr/testify/require" + + sdk "github.com/cosmos/cosmos-sdk/types" ) func createNHostZone(t *testing.T, keeper *keeper.Keeper, ctx sdk.Context, n int) []types.HostChainFeeAbsConfig { @@ -26,6 +26,7 @@ func createNHostZone(t *testing.T, keeper *keeper.Keeper, ctx sdk.Context, n int } return expected } + func TestHostZoneGet(t *testing.T) { app := apphelpers.Setup(t, false, 1) ctx := apphelpers.NewContextForApp(*app) diff --git a/x/feeabs/keeper/ibc.go b/x/feeabs/keeper/ibc.go index aa41c092..49eefcae 100644 --- a/x/feeabs/keeper/ibc.go +++ b/x/feeabs/keeper/ibc.go @@ -4,15 +4,18 @@ import ( "fmt" "time" - sdkerrors "cosmossdk.io/errors" - abci "github.com/cometbft/cometbft/abci/types" - sdk "github.com/cosmos/cosmos-sdk/types" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" host "github.com/cosmos/ibc-go/v7/modules/core/24-host" "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + + sdkerrors "cosmossdk.io/errors" + + sdk "github.com/cosmos/cosmos-sdk/types" + capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" + + abci "github.com/cometbft/cometbft/abci/types" ) // GetPort returns the portID for the module. Used in ExportGenesis. @@ -258,7 +261,6 @@ func (k Keeper) executeTransferMsg(ctx sdk.Context, transferMsg *transfertypes.M return nil, fmt.Errorf("bad msg %v", err.Error()) } return k.transferKeeper.Transfer(sdk.WrapSDKContext(ctx), transferMsg) - } func (k Keeper) handleOsmosisIbcQuery(ctx sdk.Context) error { diff --git a/x/feeabs/keeper/keeper.go b/x/feeabs/keeper/keeper.go index 9cb8a920..c5a25300 100644 --- a/x/feeabs/keeper/keeper.go +++ b/x/feeabs/keeper/keeper.go @@ -3,17 +3,18 @@ package keeper import ( "fmt" - "github.com/cometbft/cometbft/libs/log" + ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/cosmos/cosmos-sdk/codec" storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/cometbft/cometbft/libs/log" ) type Keeper struct { @@ -34,7 +35,6 @@ type Keeper struct { func NewKeeper( cdc codec.BinaryCodec, storeKey storetypes.StoreKey, - memKey storetypes.StoreKey, ps paramtypes.Subspace, sk types.StakingKeeper, ak types.AccountKeeper, @@ -44,7 +44,6 @@ func NewKeeper( channelKeeper types.ChannelKeeper, portKeeper types.PortKeeper, scopedKeeper types.ScopedKeeper, - ) Keeper { // set KeyTable if it has not already been set if !ps.HasKeyTable() { @@ -131,7 +130,8 @@ func (k Keeper) SetParams(ctx sdk.Context, params types.Params) { // OnTimeoutPacket resend packet when timeout func (k Keeper) OnTimeoutPacket(ctx sdk.Context, chanCap *capabilitytypes.Capability, sourcePort string, - sourceChannel string, timeoutHeight clienttypes.Height, timeoutTimestamp uint64, packetData []byte) error { + sourceChannel string, timeoutHeight clienttypes.Height, timeoutTimestamp uint64, packetData []byte, +) error { _, err := k.channelKeeper.SendPacket(ctx, chanCap, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, packetData) return err diff --git a/x/feeabs/keeper/keeper_test.go b/x/feeabs/keeper/keeper_test.go index 95b2c7b3..46010396 100644 --- a/x/feeabs/keeper/keeper_test.go +++ b/x/feeabs/keeper/keeper_test.go @@ -4,16 +4,18 @@ import ( "fmt" "testing" - tmrand "github.com/cometbft/cometbft/libs/rand" - tmproto "github.com/cometbft/cometbft/proto/tendermint/types" - "github.com/cosmos/cosmos-sdk/baseapp" - sdk "github.com/cosmos/cosmos-sdk/types" - govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" "github.com/osmosis-labs/fee-abstraction/v4/app" apphelpers "github.com/osmosis-labs/fee-abstraction/v4/app/helpers" "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" "github.com/stretchr/testify/suite" + + "github.com/cosmos/cosmos-sdk/baseapp" + sdk "github.com/cosmos/cosmos-sdk/types" + govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" + + tmrand "github.com/cometbft/cometbft/libs/rand" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" ) type KeeperTestSuite struct { diff --git a/x/feeabs/keeper/msgserver.go b/x/feeabs/keeper/msgserver.go index a7494aff..8239d3cb 100644 --- a/x/feeabs/keeper/msgserver.go +++ b/x/feeabs/keeper/msgserver.go @@ -3,9 +3,9 @@ package keeper import ( "context" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + + sdk "github.com/cosmos/cosmos-sdk/types" ) type msgServer struct { diff --git a/x/feeabs/keeper/proposal.go b/x/feeabs/keeper/proposal.go index 3ff85f07..4bd4390b 100644 --- a/x/feeabs/keeper/proposal.go +++ b/x/feeabs/keeper/proposal.go @@ -1,8 +1,9 @@ package keeper import ( - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + + sdk "github.com/cosmos/cosmos-sdk/types" ) func (k Keeper) AddHostZoneProposal(ctx sdk.Context, p *types.AddHostZoneProposal) error { diff --git a/x/feeabs/module.go b/x/feeabs/module.go index c4741d00..7ead27bc 100644 --- a/x/feeabs/module.go +++ b/x/feeabs/module.go @@ -5,18 +5,20 @@ import ( "encoding/json" "fmt" - abci "github.com/cometbft/cometbft/abci/types" - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/codec" - cdctypes "github.com/cosmos/cosmos-sdk/codec/types" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" "github.com/gorilla/mux" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/client/cli" "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + + abci "github.com/cometbft/cometbft/abci/types" ) var ( diff --git a/x/feeabs/proposal_handler.go b/x/feeabs/proposal_handler.go index 5653b80f..f4b9b131 100644 --- a/x/feeabs/proposal_handler.go +++ b/x/feeabs/proposal_handler.go @@ -1,16 +1,16 @@ package feeabs import ( + cli "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/client/cli" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + sdkerrors "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" errorstypes "github.com/cosmos/cosmos-sdk/types/errors" - govclient "github.com/cosmos/cosmos-sdk/x/gov/client" v1beta1types "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" - - cli "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/client/cli" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" ) var ( diff --git a/x/feeabs/relay_test.go b/x/feeabs/relay_test.go index a92a92c9..73271fe2 100644 --- a/x/feeabs/relay_test.go +++ b/x/feeabs/relay_test.go @@ -3,22 +3,22 @@ package feeabs_test import ( "testing" - "cosmossdk.io/math" - wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" - wasmibctesting "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/ibctesting" - - sdkerrors "cosmossdk.io/errors" wasmvm "github.com/CosmWasm/wasmvm" wasmvmtypes "github.com/CosmWasm/wasmvm/types" - sdk "github.com/cosmos/cosmos-sdk/types" ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" ibctesting "github.com/cosmos/ibc-go/v7/testing" + wasmibctesting "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/ibctesting" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + + sdkerrors "cosmossdk.io/errors" + "cosmossdk.io/math" + + sdk "github.com/cosmos/cosmos-sdk/types" ) func TestFromIBCTransferToContract(t *testing.T) { diff --git a/x/feeabs/types/build_memo.go b/x/feeabs/types/build_memo.go index 8d340318..784ad006 100644 --- a/x/feeabs/types/build_memo.go +++ b/x/feeabs/types/build_memo.go @@ -4,8 +4,6 @@ import ( "encoding/json" fmt "fmt" "time" - - sdk "github.com/cosmos/cosmos-sdk/types" ) type OsmosisSpecialMemo struct { @@ -46,13 +44,15 @@ type ForwardMetadata struct { Next string `json:"next,omitempty"` } -func NewOsmosisSwapMsg(inputCoin sdk.Coin, outputDenom string, slippagePercentage string, windowSeconds uint64, receiver string) OsmosisSwapMsg { +func NewOsmosisSwapMsg(outputDenom string, slippagePercentage string, windowSeconds uint64, receiver string) OsmosisSwapMsg { swap := Swap{ OutPutDenom: outputDenom, Slippage: Twap{ - Twap: TwapRouter{SlippagePercentage: slippagePercentage, - WindowSeconds: windowSeconds, - }}, + Twap: TwapRouter{ + SlippagePercentage: slippagePercentage, + WindowSeconds: windowSeconds, + }, + }, Receiver: receiver, } diff --git a/x/feeabs/types/build_memo_test.go b/x/feeabs/types/build_memo_test.go index 17e5eba0..5bf61bab 100644 --- a/x/feeabs/types/build_memo_test.go +++ b/x/feeabs/types/build_memo_test.go @@ -3,9 +3,8 @@ package types_test import ( "testing" - "github.com/stretchr/testify/require" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/stretchr/testify/require" ) // TODO: need to refactor this test, use driven table @@ -27,7 +26,7 @@ func TestParseMsgToMemo(t *testing.T) { mockAddress := "cosmos123456789" - //TODO: need to check assert msg + // TODO: need to check assert msg _, err := types.ParseMsgToMemo(msgSwap, mockAddress) require.NoError(t, err) } @@ -39,10 +38,10 @@ func TestParseCrossChainSwapMsgToMemo(t *testing.T) { mockReceiver := "feeabs1efd63aw40lxf3n4mhf7dzhjkr453axurwrhrrw" chainName := "feeabs" - execepted_memo_str := `{"wasm":{"contract":"osmo1c3ljch9dfw5kf52nfwpxd2zmj2ese7agnx0p9tenkrryasrle5sqf3ftpg","msg":{"osmosis_swap":{"output_denom":"uosmo","slippage":{"twap":{"slippage_percentage":"20","window_seconds":10}},"receiver":"feeabs/feeabs1efd63aw40lxf3n4mhf7dzhjkr453axurwrhrrw","on_failed_delivery":"do_nothing"}}}}` - //TODO: need to check assert msg - memo_str, err := types.BuildCrossChainSwapMemo(outPutDenom, contractAddress, mockReceiver, chainName) + execeptedMemoStr := `{"wasm":{"contract":"osmo1c3ljch9dfw5kf52nfwpxd2zmj2ese7agnx0p9tenkrryasrle5sqf3ftpg","msg":{"osmosis_swap":{"output_denom":"uosmo","slippage":{"twap":{"slippage_percentage":"20","window_seconds":10}},"receiver":"feeabs/feeabs1efd63aw40lxf3n4mhf7dzhjkr453axurwrhrrw","on_failed_delivery":"do_nothing"}}}}` + // TODO: need to check assert msg + memoStr, err := types.BuildCrossChainSwapMemo(outPutDenom, contractAddress, mockReceiver, chainName) require.NoError(t, err) - require.Equal(t, execepted_memo_str, memo_str) + require.Equal(t, execeptedMemoStr, memoStr) } diff --git a/x/feeabs/types/events.go b/x/feeabs/types/events.go index 5e68fd0b..860b6e0a 100644 --- a/x/feeabs/types/events.go +++ b/x/feeabs/types/events.go @@ -1,10 +1,10 @@ package types const ( - EventTypeTimeout = "timeout" - EventTypePacket = "receive_feechain_verification_packet" - EventTypeEpochEnd = "epoch_end" // TODO: need to clean up (not use) - EventTypeEpochStart = "epoch_start" + EventTypeTimeout = "timeout" + EventTypePacket = "receive_feechain_verification_packet" + EventTypeEpochEnd = "epoch_end" // TODO: need to clean up (not use) + EventTypeEpochStart = "epoch_start" AttributeKeyAckSuccess = "success" AttributeKeyAck = "acknowledgement" AttributeKeyAckError = "ack_error" diff --git a/x/feeabs/types/expected_keepers.go b/x/feeabs/types/expected_keepers.go index bc0d87f8..488bc425 100644 --- a/x/feeabs/types/expected_keepers.go +++ b/x/feeabs/types/expected_keepers.go @@ -1,13 +1,14 @@ package types import ( - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/auth/types" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" connectiontypes "github.com/cosmos/ibc-go/v7/modules/core/03-connection/types" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/auth/types" + capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" ) // AccountKeeper defines the expected account keeper used for simulations (noalias) @@ -30,7 +31,7 @@ type FeegrantKeeper interface { UseGrantedFees(ctx sdk.Context, granter, grantee sdk.AccAddress, fee sdk.Coins, msgs []sdk.Msg) error } -// StakingKeeper define the expected interface to retrive staking denom +// StakingKeeper define the expected interface to retrieve staking denom type StakingKeeper interface { // BondDenom - Bondable coin denomination BondDenom(ctx sdk.Context) (res string) @@ -62,7 +63,7 @@ type ScopedKeeper interface { type ChannelKeeper interface { GetChannel(ctx sdk.Context, srcPort, srcChan string) (channel channeltypes.Channel, found bool) GetNextSequenceSend(ctx sdk.Context, portID, channelID string) (uint64, bool) - SendPacket(ctx sdk.Context, channelCap *capabilitytypes.Capability, sourcePort string, sourceChannel string, + SendPacket(ctx sdk.Context, channelCap *capabilitytypes.Capability, sourcePort string, sourceChannel string, timeoutHeight clienttypes.Height, timeoutTimestamp uint64, data []byte) (uint64, error) ChanCloseInit(ctx sdk.Context, portID, channelID string, chanCap *capabilitytypes.Capability) error } diff --git a/x/feeabs/types/genesis.go b/x/feeabs/types/genesis.go index 2c6b0dc4..08f3e50c 100644 --- a/x/feeabs/types/genesis.go +++ b/x/feeabs/types/genesis.go @@ -17,7 +17,6 @@ func DefaultGenesis() *GenesisState { // Validate performs basic genesis state validation, returning an error upon any failure. func (gs GenesisState) Validate() error { - //Validate params err := gs.Params.Validate() if err != nil { return fmt.Errorf("invalid params %s", err) diff --git a/x/feeabs/types/ibc.go b/x/feeabs/types/ibc.go index 2d83279b..e04889a7 100644 --- a/x/feeabs/types/ibc.go +++ b/x/feeabs/types/ibc.go @@ -3,10 +3,11 @@ package types import ( "time" - abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" + + abci "github.com/cometbft/cometbft/abci/types" ) const ( diff --git a/x/feeabs/types/msg.go b/x/feeabs/types/msg.go index fa72f001..d303a3a1 100644 --- a/x/feeabs/types/msg.go +++ b/x/feeabs/types/msg.go @@ -1,9 +1,10 @@ package types import ( + sdkerrors "cosmossdk.io/errors" + "github.com/cosmos/cosmos-sdk/codec/legacy" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "cosmossdk.io/errors" ) var _ sdk.Msg = &MsgSendQueryIbcDenomTWAP{} diff --git a/x/feeabs/types/params.go b/x/feeabs/types/params.go index 41b2020c..c5f37c96 100644 --- a/x/feeabs/types/params.go +++ b/x/feeabs/types/params.go @@ -44,7 +44,6 @@ func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { // Validate also validates params info. func (p Params) Validate() error { - if err := validateString(p.OsmosisQueryTwapPath); err != nil { return err } From 2b86ee58040a11b311e752bdc060f6d14c913c93 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 12 Aug 2023 14:28:47 +0800 Subject: [PATCH 29/90] update readme --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 956b82d4..23dd7fa0 100644 --- a/README.md +++ b/README.md @@ -11,12 +11,12 @@ The concrete use cases which motivated this module include: This repository is branched by the cosmos-sdk versions and ibc-go versions used. Currently fee abstraction supports: -- SDK v0.47.x - - branch: release/v4.0.x +- SDK v0.47.x & IBC-go v7.* + - branch: release/v7.0.x - SDK v0.46.x - - branch: release/v3.0.x + - branch: release/v6.0.x - SDK v0.45.x - - branch: release/v2.0.x + - branch: release/v4.0.x ## Description From 50b05348cdd65a32ffd29dea9518ea9075cc1f85 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 12 Aug 2023 14:35:25 +0800 Subject: [PATCH 30/90] update readme --- README.md | 57 +++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 441abef7..23dd7fa0 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,53 @@ # Fee Abstraction -## Context + +## Context The concrete use cases which motivated this module include: - - The desire to use IBC token as transaction fees on any chain instead of having to use native token as fee. - - To fully take advantage of the newly represented Osmosis [``swap router``](https://github.com/osmosis-labs/osmosis/tree/main/cosmwasm/contracts) with the [``ibc-hooks``](https://github.com/osmosis-labs/osmosis/tree/main/x/ibc-hooks) module and the [``async-icq``](https://github.com/strangelove-ventures/async-icq) module. - -## Description + +- The desire to use IBC token as transaction fees on any chain instead of having to use native token as fee. +- To fully take advantage of the newly represented Osmosis [``swap router``](https://github.com/osmosis-labs/osmosis/tree/main/cosmwasm/contracts) with the [``ibc-hooks``](https://github.com/osmosis-labs/osmosis/tree/main/x/ibc-hooks) module and the [``async-icq``](https://github.com/strangelove-ventures/async-icq) module. + +## Repository Structure + +This repository is branched by the cosmos-sdk versions and ibc-go versions used. Currently fee abstraction supports: + +- SDK v0.47.x & IBC-go v7.* + - branch: release/v7.0.x +- SDK v0.46.x + - branch: release/v6.0.x +- SDK v0.45.x + - branch: release/v4.0.x + +## Description Fee abstraction modules enable users on any Cosmos chain with IBC connections to pay fee using ibc token. Fee-abs implementation: - - Fee-abs module imported to the customer chain. -The implememtation also uses Osmosis swap router and async-icq module which are already deployed on Osmosis testnet. +- Fee-abs module imported to the customer chain. + +The implememtation also uses Osmosis swap router and async-icq module which are already deployed on Osmosis testnet. ## Prototype Fee-abs mechanism in a nutshell: - 1. Pulling `twap data` and update exchange rate: - - Periodically pulling `twap data` from osmosis by ibc-ing to `async-icq` module on Osmosis, this `twap data` will update the exchange rate of osmosis to customer chain's native token. - 2. Handling txs with ibc-token fee: - - The exchange rate is used to calculate the amount of ibc-token needed for tx fee allowing users to pay ibc-token for tx fee instead of chain's native token. + + 1. Pulling `twap data` and update exchange rate: + +- Periodically pulling `twap data` from osmosis by ibc-ing to `async-icq` module on Osmosis, this `twap data` will update the exchange rate of osmosis to customer chain's native token. + + 2. Handling txs with ibc-token fee: + +- The exchange rate is used to calculate the amount of ibc-token needed for tx fee allowing users to pay ibc-token for tx fee instead of chain's native token. + 3. Swap accumulated ibc-token fee: - - The collected ibc-token users use for tx fee is periodically swaped back to customer chain's native token using osmosis. + +- The collected ibc-token users use for tx fee is periodically swaped back to customer chain's native token using osmosis. We'll goes into all the details now: #### Pulling `twap data` and update exchange rate + For this to work, we first has to set up an ibc channel from `feeabs` to `async-icq`. This channel set-up process can be done by anyone, just like setting up an ibc transfer channel. Once that ibc channel is there, we'll use that channel to ibc-query Twap data. Let's call this the querying channel. The process of pulling Twap data and update exchange rate : @@ -37,15 +58,19 @@ Description : For every `update exchange rate period`, at fee-abs `BeginBlocker()` we submit a `InterchainQueryPacketData` which wrapped `QueryArithmeticTwapToNowRequest` to the querying channel on the customer chain's end. Then relayers will submit `MsgReceivePacket` so that our `QueryTwapPacket` which will be routed to `async-icq` module to be processed. `async-icq` module then unpack `InterchainQueryPacketData` and send query to TWAP module. The correspone response will be wrapped in the ibc acknowledgement. Relayers then submit `MsgAcknowledgement` to the customer chain so that the ibc acknowledgement is routed to fee-abs to be processed. Fee-abs then update exchange rate according to the Twap wrapped in the ibc acknowledgement. #### Handling txs with ibc-token fee + We modified `MempoolFeeDecorator` so that it can handle ibc-token as fee. If the tx has ibc-token fee, the AnteHandler will first check if that token is allowed (which is setup by Gov) we basically replace the amount of ibc-token with the equivalent native-token amount which is calculated by `exchange rate` * `ibc-token amount`. We have an account to manage the ibc-token user used to pay for tx fee. The collected ibc-token fee is sent to that account instead of community pool account. #### Swap accumulated ibc-tokens fee + Fee-abstraction will use osmosis's Cross chain Swap (XCS) feature to do this. We basically ibc transfer to the osmosis crosschain swap contract with custom memo to swap the osmosis fee back to customer chain's native-token and ibc transfer back to the customer chain. ##### How XCS work -###### Reverse With Path-unwinding to get Ibc-token on Osmosis: + +###### Reverse With Path-unwinding to get Ibc-token on Osmosis + - Create a ibc transfer message with a specific MEMO to work with ibc [``packet-forward-middleware``](https://github.com/strangelove-ventures/packet-forward-middleware) which is path-unwinding (an ibc feature that allow to automatic define the path and ibc transfer multiple hop follow the defined path) - Ibc transfer the created packet to get the fee Ibc-token on Osmosis @@ -53,13 +78,13 @@ Ex: When you sent STARS on Hub to Osmosis, you will get Osmosis(Hub(STARS)) whic ![](https://i.imgur.com/D1wSrMm.png) -###### Swap Ibc-token: +###### Swap Ibc-token + After reverse the ibc-token, XCS will : + - Swap with the specific pool (which is defined in the transfer packet from Feeabs-chain) to get Feeabs-chain native-token - Transfer back Feeabs-chain native-token to Feeabs module account (will use to pay fee for other transaction) ![](https://i.imgur.com/YKOK8mr.png) Current version of fee-abstraction working with XCSv2 -## Resources - - Main repo: https://github.com/osmosis-labs/fee-abstraction From b013f9559092bdb8ddb2e7ceb8d17844f92f7b1c Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 12 Aug 2023 14:36:15 +0800 Subject: [PATCH 31/90] revert changes to readme so they're in a separate pr --- README.md | 57 ++++++++++++++++--------------------------------------- 1 file changed, 16 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index 23dd7fa0..441abef7 100644 --- a/README.md +++ b/README.md @@ -1,53 +1,32 @@ # Fee Abstraction - -## Context +## Context The concrete use cases which motivated this module include: - -- The desire to use IBC token as transaction fees on any chain instead of having to use native token as fee. -- To fully take advantage of the newly represented Osmosis [``swap router``](https://github.com/osmosis-labs/osmosis/tree/main/cosmwasm/contracts) with the [``ibc-hooks``](https://github.com/osmosis-labs/osmosis/tree/main/x/ibc-hooks) module and the [``async-icq``](https://github.com/strangelove-ventures/async-icq) module. - -## Repository Structure - -This repository is branched by the cosmos-sdk versions and ibc-go versions used. Currently fee abstraction supports: - -- SDK v0.47.x & IBC-go v7.* - - branch: release/v7.0.x -- SDK v0.46.x - - branch: release/v6.0.x -- SDK v0.45.x - - branch: release/v4.0.x - -## Description + - The desire to use IBC token as transaction fees on any chain instead of having to use native token as fee. + - To fully take advantage of the newly represented Osmosis [``swap router``](https://github.com/osmosis-labs/osmosis/tree/main/cosmwasm/contracts) with the [``ibc-hooks``](https://github.com/osmosis-labs/osmosis/tree/main/x/ibc-hooks) module and the [``async-icq``](https://github.com/strangelove-ventures/async-icq) module. + +## Description Fee abstraction modules enable users on any Cosmos chain with IBC connections to pay fee using ibc token. Fee-abs implementation: + - Fee-abs module imported to the customer chain. -- Fee-abs module imported to the customer chain. - -The implememtation also uses Osmosis swap router and async-icq module which are already deployed on Osmosis testnet. +The implememtation also uses Osmosis swap router and async-icq module which are already deployed on Osmosis testnet. ## Prototype Fee-abs mechanism in a nutshell: - - 1. Pulling `twap data` and update exchange rate: - -- Periodically pulling `twap data` from osmosis by ibc-ing to `async-icq` module on Osmosis, this `twap data` will update the exchange rate of osmosis to customer chain's native token. - - 2. Handling txs with ibc-token fee: - -- The exchange rate is used to calculate the amount of ibc-token needed for tx fee allowing users to pay ibc-token for tx fee instead of chain's native token. - + 1. Pulling `twap data` and update exchange rate: + - Periodically pulling `twap data` from osmosis by ibc-ing to `async-icq` module on Osmosis, this `twap data` will update the exchange rate of osmosis to customer chain's native token. + 2. Handling txs with ibc-token fee: + - The exchange rate is used to calculate the amount of ibc-token needed for tx fee allowing users to pay ibc-token for tx fee instead of chain's native token. 3. Swap accumulated ibc-token fee: - -- The collected ibc-token users use for tx fee is periodically swaped back to customer chain's native token using osmosis. + - The collected ibc-token users use for tx fee is periodically swaped back to customer chain's native token using osmosis. We'll goes into all the details now: #### Pulling `twap data` and update exchange rate - For this to work, we first has to set up an ibc channel from `feeabs` to `async-icq`. This channel set-up process can be done by anyone, just like setting up an ibc transfer channel. Once that ibc channel is there, we'll use that channel to ibc-query Twap data. Let's call this the querying channel. The process of pulling Twap data and update exchange rate : @@ -58,19 +37,15 @@ Description : For every `update exchange rate period`, at fee-abs `BeginBlocker()` we submit a `InterchainQueryPacketData` which wrapped `QueryArithmeticTwapToNowRequest` to the querying channel on the customer chain's end. Then relayers will submit `MsgReceivePacket` so that our `QueryTwapPacket` which will be routed to `async-icq` module to be processed. `async-icq` module then unpack `InterchainQueryPacketData` and send query to TWAP module. The correspone response will be wrapped in the ibc acknowledgement. Relayers then submit `MsgAcknowledgement` to the customer chain so that the ibc acknowledgement is routed to fee-abs to be processed. Fee-abs then update exchange rate according to the Twap wrapped in the ibc acknowledgement. #### Handling txs with ibc-token fee - We modified `MempoolFeeDecorator` so that it can handle ibc-token as fee. If the tx has ibc-token fee, the AnteHandler will first check if that token is allowed (which is setup by Gov) we basically replace the amount of ibc-token with the equivalent native-token amount which is calculated by `exchange rate` * `ibc-token amount`. We have an account to manage the ibc-token user used to pay for tx fee. The collected ibc-token fee is sent to that account instead of community pool account. #### Swap accumulated ibc-tokens fee - Fee-abstraction will use osmosis's Cross chain Swap (XCS) feature to do this. We basically ibc transfer to the osmosis crosschain swap contract with custom memo to swap the osmosis fee back to customer chain's native-token and ibc transfer back to the customer chain. ##### How XCS work - -###### Reverse With Path-unwinding to get Ibc-token on Osmosis - +###### Reverse With Path-unwinding to get Ibc-token on Osmosis: - Create a ibc transfer message with a specific MEMO to work with ibc [``packet-forward-middleware``](https://github.com/strangelove-ventures/packet-forward-middleware) which is path-unwinding (an ibc feature that allow to automatic define the path and ibc transfer multiple hop follow the defined path) - Ibc transfer the created packet to get the fee Ibc-token on Osmosis @@ -78,13 +53,13 @@ Ex: When you sent STARS on Hub to Osmosis, you will get Osmosis(Hub(STARS)) whic ![](https://i.imgur.com/D1wSrMm.png) -###### Swap Ibc-token - +###### Swap Ibc-token: After reverse the ibc-token, XCS will : - - Swap with the specific pool (which is defined in the transfer packet from Feeabs-chain) to get Feeabs-chain native-token - Transfer back Feeabs-chain native-token to Feeabs module account (will use to pay fee for other transaction) ![](https://i.imgur.com/YKOK8mr.png) Current version of fee-abstraction working with XCSv2 +## Resources + - Main repo: https://github.com/osmosis-labs/fee-abstraction From 1474178e1a5ae5fa6d04997adececc1e38421429 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 12 Aug 2023 14:46:37 +0800 Subject: [PATCH 32/90] use formatting from ibc-go --- ante/ante.go | 6 ++--- ante/fee_test.go | 5 ++-- app/ante.go | 5 ++-- app/app.go | 39 +++++++++++++++--------------- app/test_access.go | 5 ++-- cmd/feeappd/cmd/root.go | 5 ++-- cmd/feeappd/cmd/testnet.go | 5 ++-- x/feeabs/client/cli/util.go | 4 ++- x/feeabs/ibc_module.go | 9 ++++--- x/feeabs/ibctesting/chain.go | 23 +++++++++--------- x/feeabs/ibctesting/coordinator.go | 7 +++--- x/feeabs/ibctesting/endpoint.go | 3 ++- x/feeabs/ibctesting/event_utils.go | 4 +-- x/feeabs/ibctesting/wasm.go | 3 ++- x/feeabs/keeper/ibc.go | 9 ++++--- x/feeabs/keeper/keeper.go | 5 ++-- x/feeabs/relay_test.go | 9 ++++--- x/feeabs/types/build_memo.go | 4 +-- x/feeabs/types/expected_keepers.go | 8 +++--- x/feeabs/types/proposal.go | 4 +-- 20 files changed, 89 insertions(+), 73 deletions(-) diff --git a/ante/ante.go b/ante/ante.go index 5183bdf3..d8de7658 100644 --- a/ante/ante.go +++ b/ante/ante.go @@ -1,14 +1,14 @@ package ante import ( - ibcante "github.com/cosmos/ibc-go/v7/modules/core/ante" - ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" - sdkerrors "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" errorstypes "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/ante" + + ibcante "github.com/cosmos/ibc-go/v7/modules/core/ante" + ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" ) // HandlerOptions extend the SDK's AnteHandler options by requiring the IBC diff --git a/ante/fee_test.go b/ante/fee_test.go index 22121886..d1385fd4 100644 --- a/ante/fee_test.go +++ b/ante/fee_test.go @@ -1,13 +1,14 @@ package ante_test import ( - ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" "github.com/osmosis-labs/fee-abstraction/v4/ante" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" + + ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" ) func (s *IntegrationTestSuite) TestMempoolFeeDecorator() { diff --git a/app/ante.go b/app/ante.go index a8ee1d06..2ce1870e 100644 --- a/app/ante.go +++ b/app/ante.go @@ -1,8 +1,6 @@ package app import ( - ibcante "github.com/cosmos/ibc-go/v7/modules/core/ante" - ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" feeabsante "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/ante" feeabskeeper "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" @@ -11,6 +9,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" errorstypes "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/ante" + + ibcante "github.com/cosmos/ibc-go/v7/modules/core/ante" + ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" ) // HandlerOptions extends the SDK's AnteHandler options by requiring the IBC diff --git a/app/app.go b/app/app.go index a670a64a..b6e37456 100644 --- a/app/app.go +++ b/app/app.go @@ -15,25 +15,6 @@ import ( "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router" routerkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/keeper" routertypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/types" - ica "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts" - icacontrollerkeeper "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/keeper" - icacontrollertypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/types" - icahost "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host" - icahostkeeper "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/keeper" - icahosttypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/types" - icatypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/types" - "github.com/cosmos/ibc-go/v7/modules/apps/transfer" - ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" - ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" - ibc "github.com/cosmos/ibc-go/v7/modules/core" - ibcclient "github.com/cosmos/ibc-go/v7/modules/core/02-client" - ibcclientclient "github.com/cosmos/ibc-go/v7/modules/core/02-client/client" - ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" - ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" - ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" - solomachine "github.com/cosmos/ibc-go/v7/modules/light-clients/06-solomachine" - ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" "github.com/gorilla/mux" appparams "github.com/osmosis-labs/fee-abstraction/v4/app/params" feeabsmodule "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs" @@ -121,6 +102,26 @@ import ( tmjson "github.com/cometbft/cometbft/libs/json" "github.com/cometbft/cometbft/libs/log" tmos "github.com/cometbft/cometbft/libs/os" + + ica "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts" + icacontrollerkeeper "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/keeper" + icacontrollertypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/types" + icahost "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host" + icahostkeeper "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/keeper" + icahosttypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/types" + icatypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/types" + "github.com/cosmos/ibc-go/v7/modules/apps/transfer" + ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" + ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + ibc "github.com/cosmos/ibc-go/v7/modules/core" + ibcclient "github.com/cosmos/ibc-go/v7/modules/core/02-client" + ibcclientclient "github.com/cosmos/ibc-go/v7/modules/core/02-client/client" + ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" + ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" + ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" + solomachine "github.com/cosmos/ibc-go/v7/modules/light-clients/06-solomachine" + ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" ) func getGovProposalHandlers() []govclient.ProposalHandler { diff --git a/app/test_access.go b/app/test_access.go index 62b807eb..9342b01c 100644 --- a/app/test_access.go +++ b/app/test_access.go @@ -5,8 +5,6 @@ import ( "github.com/CosmWasm/wasmd/app/params" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" - ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" - ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" "github.com/cosmos/cosmos-sdk/baseapp" @@ -15,6 +13,9 @@ import ( bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" + + ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" + ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" ) type TestSupport struct { diff --git a/cmd/feeappd/cmd/root.go b/cmd/feeappd/cmd/root.go index 60f066be..9e1c1c65 100644 --- a/cmd/feeappd/cmd/root.go +++ b/cmd/feeappd/cmd/root.go @@ -8,8 +8,6 @@ import ( "github.com/CosmWasm/wasmd/x/wasm" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" - ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" feeapp "github.com/osmosis-labs/fee-abstraction/v4/app" "github.com/osmosis-labs/fee-abstraction/v4/app/params" "github.com/prometheus/client_golang/prometheus" @@ -44,6 +42,9 @@ import ( tmcli "github.com/cometbft/cometbft/libs/cli" "github.com/cometbft/cometbft/libs/log" tmtypes "github.com/cometbft/cometbft/types" + + ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" ) // NewRootCmd creates a new root command for simd. It is called once in the diff --git a/cmd/feeappd/cmd/testnet.go b/cmd/feeappd/cmd/testnet.go index e75ee7be..8823246c 100644 --- a/cmd/feeappd/cmd/testnet.go +++ b/cmd/feeappd/cmd/testnet.go @@ -10,8 +10,6 @@ import ( "os" "path/filepath" - ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" "github.com/osmosis-labs/fee-abstraction/v4/app/params" "github.com/spf13/cobra" @@ -37,6 +35,9 @@ import ( tmrand "github.com/cometbft/cometbft/libs/rand" "github.com/cometbft/cometbft/types" tmtime "github.com/cometbft/cometbft/types/time" + + ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" ) var ( diff --git a/x/feeabs/client/cli/util.go b/x/feeabs/client/cli/util.go index b9ffddb1..1bdefbc9 100644 --- a/x/feeabs/client/cli/util.go +++ b/x/feeabs/client/cli/util.go @@ -1,9 +1,11 @@ package cli import ( - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" "io/ioutil" + + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/cosmos/cosmos-sdk/codec" ) diff --git a/x/feeabs/ibc_module.go b/x/feeabs/ibc_module.go index b77e5501..c14c0af0 100644 --- a/x/feeabs/ibc_module.go +++ b/x/feeabs/ibc_module.go @@ -3,10 +3,6 @@ package feeabs import ( "fmt" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" - host "github.com/cosmos/ibc-go/v7/modules/core/24-host" - ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" @@ -16,6 +12,11 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" errorstypes "github.com/cosmos/cosmos-sdk/types/errors" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" + + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" + host "github.com/cosmos/ibc-go/v7/modules/core/24-host" + ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" ) // IBCModule implements the ICS26 interface for transfer given the transfer keeper. diff --git a/x/feeabs/ibctesting/chain.go b/x/feeabs/ibctesting/chain.go index aeaf63b9..e5cd760c 100644 --- a/x/feeabs/ibctesting/chain.go +++ b/x/feeabs/ibctesting/chain.go @@ -7,17 +7,6 @@ import ( "time" "github.com/CosmWasm/wasmd/x/wasm" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - commitmenttypes "github.com/cosmos/ibc-go/v7/modules/core/23-commitment/types" - host "github.com/cosmos/ibc-go/v7/modules/core/24-host" - ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" - ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" - "github.com/cosmos/ibc-go/v7/modules/core/types" - ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" - ibctesting "github.com/cosmos/ibc-go/v7/testing" - "github.com/cosmos/ibc-go/v7/testing/mock" - ibctestingtypes "github.com/cosmos/ibc-go/v7/testing/types" feeabs "github.com/osmosis-labs/fee-abstraction/v4/app" "github.com/stretchr/testify/require" @@ -42,6 +31,18 @@ import ( tmprotoversion "github.com/cometbft/cometbft/proto/tendermint/version" tmtypes "github.com/cometbft/cometbft/types" tmversion "github.com/cometbft/cometbft/version" + + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + commitmenttypes "github.com/cosmos/ibc-go/v7/modules/core/23-commitment/types" + host "github.com/cosmos/ibc-go/v7/modules/core/24-host" + ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" + ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" + "github.com/cosmos/ibc-go/v7/modules/core/types" + ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" + ibctesting "github.com/cosmos/ibc-go/v7/testing" + "github.com/cosmos/ibc-go/v7/testing/mock" + ibctestingtypes "github.com/cosmos/ibc-go/v7/testing/types" ) // TestChain is a testing struct that wraps a simapp with the last TM Header, the current ABCI diff --git a/x/feeabs/ibctesting/coordinator.go b/x/feeabs/ibctesting/coordinator.go index 7d6b18ec..0dd62d72 100644 --- a/x/feeabs/ibctesting/coordinator.go +++ b/x/feeabs/ibctesting/coordinator.go @@ -7,12 +7,13 @@ import ( "time" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - host "github.com/cosmos/ibc-go/v7/modules/core/24-host" - ibctesting "github.com/cosmos/ibc-go/v7/testing" "github.com/stretchr/testify/require" abci "github.com/cometbft/cometbft/abci/types" + + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + host "github.com/cosmos/ibc-go/v7/modules/core/24-host" + ibctesting "github.com/cosmos/ibc-go/v7/testing" ) const ChainIDPrefix = "testchain" diff --git a/x/feeabs/ibctesting/endpoint.go b/x/feeabs/ibctesting/endpoint.go index 98ffe4de..b7f77942 100644 --- a/x/feeabs/ibctesting/endpoint.go +++ b/x/feeabs/ibctesting/endpoint.go @@ -3,6 +3,8 @@ package ibctesting import ( "fmt" + "github.com/stretchr/testify/require" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" connectiontypes "github.com/cosmos/ibc-go/v7/modules/core/03-connection/types" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" @@ -11,7 +13,6 @@ import ( "github.com/cosmos/ibc-go/v7/modules/core/exported" ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" ibctesting "github.com/cosmos/ibc-go/v7/testing" - "github.com/stretchr/testify/require" ) // Endpoint is a which represents a channel endpoint and its associated diff --git a/x/feeabs/ibctesting/event_utils.go b/x/feeabs/ibctesting/event_utils.go index b33e3968..2f1c82af 100644 --- a/x/feeabs/ibctesting/event_utils.go +++ b/x/feeabs/ibctesting/event_utils.go @@ -4,10 +4,10 @@ import ( "strconv" "strings" + abci "github.com/cometbft/cometbft/abci/types" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - - abci "github.com/cometbft/cometbft/abci/types" ) func getSendPackets(evts []abci.Event) []channeltypes.Packet { diff --git a/x/feeabs/ibctesting/wasm.go b/x/feeabs/ibctesting/wasm.go index 6d28a4c9..5543dfcf 100644 --- a/x/feeabs/ibctesting/wasm.go +++ b/x/feeabs/ibctesting/wasm.go @@ -4,13 +4,14 @@ import ( "fmt" "github.com/CosmWasm/wasmd/x/wasm/types" - ibctesting "github.com/cosmos/ibc-go/v7/testing" feeabs "github.com/osmosis-labs/fee-abstraction/v4/app" "github.com/stretchr/testify/require" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cometbft/cometbft/libs/rand" + + ibctesting "github.com/cosmos/ibc-go/v7/testing" ) var wasmIdent = []byte("\x00\x61\x73\x6D") diff --git a/x/feeabs/keeper/ibc.go b/x/feeabs/keeper/ibc.go index 49eefcae..26fb6b57 100644 --- a/x/feeabs/keeper/ibc.go +++ b/x/feeabs/keeper/ibc.go @@ -4,10 +4,6 @@ import ( "fmt" "time" - transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - host "github.com/cosmos/ibc-go/v7/modules/core/24-host" "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" sdkerrors "cosmossdk.io/errors" @@ -16,6 +12,11 @@ import ( capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" abci "github.com/cometbft/cometbft/abci/types" + + transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + host "github.com/cosmos/ibc-go/v7/modules/core/24-host" ) // GetPort returns the portID for the module. Used in ExportGenesis. diff --git a/x/feeabs/keeper/keeper.go b/x/feeabs/keeper/keeper.go index c5a25300..cbff3d30 100644 --- a/x/feeabs/keeper/keeper.go +++ b/x/feeabs/keeper/keeper.go @@ -3,8 +3,6 @@ package keeper import ( "fmt" - ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" "github.com/cosmos/cosmos-sdk/codec" @@ -15,6 +13,9 @@ import ( paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" "github.com/cometbft/cometbft/libs/log" + + ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" ) type Keeper struct { diff --git a/x/feeabs/relay_test.go b/x/feeabs/relay_test.go index 73271fe2..a3bd1fc3 100644 --- a/x/feeabs/relay_test.go +++ b/x/feeabs/relay_test.go @@ -7,10 +7,6 @@ import ( "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" wasmvm "github.com/CosmWasm/wasmvm" wasmvmtypes "github.com/CosmWasm/wasmvm/types" - ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - ibctesting "github.com/cosmos/ibc-go/v7/testing" wasmibctesting "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/ibctesting" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -19,6 +15,11 @@ import ( "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" + + ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v7/testing" ) func TestFromIBCTransferToContract(t *testing.T) { diff --git a/x/feeabs/types/build_memo.go b/x/feeabs/types/build_memo.go index 784ad006..6d452598 100644 --- a/x/feeabs/types/build_memo.go +++ b/x/feeabs/types/build_memo.go @@ -71,11 +71,11 @@ func ParseMsgToMemo(msg OsmosisSwapMsg, contractAddr string) (string, error) { memo.Wasm["contract"] = contractAddr memo.Wasm["msg"] = msg - memo_marshalled, err := json.Marshal(&memo) + memoMarshalled, err := json.Marshal(&memo) if err != nil { return "", err } - return string(memo_marshalled), nil + return string(memoMarshalled), nil } // TODO: write test for this diff --git a/x/feeabs/types/expected_keepers.go b/x/feeabs/types/expected_keepers.go index 488bc425..0a36989e 100644 --- a/x/feeabs/types/expected_keepers.go +++ b/x/feeabs/types/expected_keepers.go @@ -1,14 +1,14 @@ package types import ( + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/auth/types" + capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" connectiontypes "github.com/cosmos/ibc-go/v7/modules/core/03-connection/types" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/auth/types" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" ) // AccountKeeper defines the expected account keeper used for simulations (noalias) diff --git a/x/feeabs/types/proposal.go b/x/feeabs/types/proposal.go index 3e264444..b68691ee 100644 --- a/x/feeabs/types/proposal.go +++ b/x/feeabs/types/proposal.go @@ -32,11 +32,11 @@ func NewAddHostZoneProposal(title, description string, config HostChainFeeAbsCon } } -func NewDeleteHostZoneProposal(title, description, ibc_denom string) v1beta1types.Content { +func NewDeleteHostZoneProposal(title, description, ibcDenom string) v1beta1types.Content { return &DeleteHostZoneProposal{ Title: title, Description: description, - IbcDenom: ibc_denom, + IbcDenom: ibcDenom, } } From 8d30e98334faa8ff8ba2f0ffe8b256070840c6ff Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 12 Aug 2023 14:47:01 +0800 Subject: [PATCH 33/90] add .golangci.yml --- .golangci.yml | 109 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 .golangci.yml diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 00000000..aaa8a198 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,109 @@ +run: + tests: true + # # timeout for analysis, e.g. 30s, 5m, default is 1m + timeout: 5m + +linters: + disable-all: true + enable: + - exportloopref + - errcheck + - gci + - goconst + - gocritic + - gofumpt + - gosec + - gosimple + - govet + - ineffassign + - misspell + - nakedret + - staticcheck + - thelper + - typecheck + - stylecheck + - revive + - typecheck + - tenv + - unconvert + - unused + - misspell + +issues: + exclude-rules: + - text: 'differs only by capitalization to method' + linters: + - revive + - text: 'Use of weak random number generator' + linters: + - gosec + + max-issues-per-linter: 10000 + max-same-issues: 10000 + +linters-settings: + gci: + sections: + - standard # Standard section: captures all standard packages. + - default # Default section: contains all imports that could not be matched to another section type. + - blank # blank imports + - dot # dot imports + - prefix(cosmossdk.io) + - prefix(github.com/cosmos/cosmos-sdk) + - prefix(github.com/cometbft/cometbft) + - prefix(github.com/cosmos/ibc-go) + custom-order: true + revive: + enable-all-rules: true + # Do NOT whine about the following, full explanation found in: + # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#description-of-available-rules + rules: + - name: use-any + disabled: true + - name: if-return + disabled: true + - name: max-public-structs + disabled: true + - name: cognitive-complexity + disabled: true + - name: argument-limit + disabled: true + - name: cyclomatic + disabled: true + - name: file-header + disabled: true + - name: function-length + disabled: true + - name: function-result-limit + disabled: true + - name: line-length-limit + disabled: true + - name: flag-parameter + disabled: true + - name: add-constant + disabled: true + - name: empty-lines + disabled: true + - name: banned-characters + disabled: true + - name: deep-exit + disabled: true + - name: confusing-results + disabled: true + - name: unused-parameter + disabled: true + - name: modifies-value-receiver + disabled: true + - name: early-return + disabled: true + - name: confusing-naming + disabled: true + - name: defer + disabled: true + - name: unhandled-error + disabled: false + arguments: + - 'fmt.Printf' + - 'fmt.Print' + - 'fmt.Println' + - 'myFunction' From ed57bd135e6793a1e508d60b70e63aa617c67006 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 12 Aug 2023 14:53:10 +0800 Subject: [PATCH 34/90] update import paths to v7 --- .github/workflows/build.yml | 2 +- .github/workflows/codeql.yml | 14 +++++++------- .github/workflows/interchaintest.yaml | 25 ++++++++++--------------- .github/workflows/lint.yml | 4 ++-- .github/workflows/tests.yml | 5 ++--- ante/ante_test.go | 4 ++-- ante/fee_test.go | 2 +- app/ante.go | 4 ++-- app/app.go | 8 ++++---- app/encoding.go | 2 +- app/helpers/test_helpers.go | 4 ++-- app/sim_test.go | 4 ++-- app/test_access.go | 2 +- app/test_helpers.go | 2 ++ cmd/feeappd/cmd/root.go | 4 ++-- cmd/feeappd/cmd/root_test.go | 4 ++-- cmd/feeappd/cmd/testnet.go | 2 +- cmd/feeappd/main.go | 6 +++--- go.mod | 4 ++-- tests/interchaintest/go.mod | 4 ++-- tests/interchaintest/setup.go | 2 +- x/feeabs/ante/decorate.go | 4 ++-- x/feeabs/client/cli/query.go | 2 +- x/feeabs/client/cli/tx.go | 2 +- x/feeabs/client/cli/tx_test.go | 2 +- x/feeabs/client/cli/util.go | 3 +-- x/feeabs/ibc_module.go | 4 ++-- x/feeabs/ibctesting/chain.go | 2 +- x/feeabs/ibctesting/wasm.go | 2 +- x/feeabs/keeper/abci.go | 2 +- x/feeabs/keeper/config.go | 2 +- x/feeabs/keeper/epoch.go | 2 +- x/feeabs/keeper/exchange_rate.go | 2 +- x/feeabs/keeper/genesis.go | 2 +- x/feeabs/keeper/genesis_test.go | 4 ++-- x/feeabs/keeper/grpc_query.go | 2 +- x/feeabs/keeper/grpc_query_test.go | 2 +- x/feeabs/keeper/host_zone_test.go | 6 +++--- x/feeabs/keeper/ibc.go | 2 +- x/feeabs/keeper/keeper.go | 2 +- x/feeabs/keeper/keeper_test.go | 8 ++++---- x/feeabs/keeper/msgserver.go | 2 +- x/feeabs/keeper/proposal.go | 2 +- x/feeabs/keeper/proposal_test.go | 4 ++-- x/feeabs/module.go | 6 +++--- x/feeabs/proposal_handler.go | 6 +++--- x/feeabs/relay_test.go | 2 +- x/feeabs/types/build_memo_test.go | 2 +- 48 files changed, 92 insertions(+), 97 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5e99f007..e28b06da 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,5 +15,5 @@ jobs: - name: Setup go uses: actions/setup-go@v3 with: - go-version: 1.19 + go-version: 1.21 - run: go build ./... diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 66496f19..a4baf0df 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -1,15 +1,15 @@ -name: "CodeQL" +name: 'CodeQL' on: pull_request: paths: - - "**.go" + - '**.go' push: branches: - main - release/** paths: - - "**.go" + - '**.go' jobs: analyze: @@ -25,16 +25,16 @@ jobs: uses: actions/checkout@v3 - uses: actions/setup-go@v3 with: - go-version: 1.19 + go-version: 1.21 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v2 with: - languages: "go" + languages: 'go' queries: crypto-com/cosmos-sdk-codeql@main,security-and-quality - + - name: Build run: make build - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 \ No newline at end of file + uses: github/codeql-action/analyze@v2 diff --git a/.github/workflows/interchaintest.yaml b/.github/workflows/interchaintest.yaml index 3f6aebdc..03ccfb29 100644 --- a/.github/workflows/interchaintest.yaml +++ b/.github/workflows/interchaintest.yaml @@ -10,22 +10,18 @@ jobs: build-and-push-image: runs-on: ubuntu-latest steps: - - - name: Check out the repo + - name: Check out the repo uses: actions/checkout@v3 - - - name: Set up QEMU + - name: Set up QEMU uses: docker/setup-qemu-action@v2 - - - name: Set up Docker Buildx + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Login to DockerHub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Build and push + - name: Build and push id: build_push_image uses: docker/build-push-action@v3 with: @@ -42,14 +38,14 @@ jobs: - name: Set up Go 1.19 uses: actions/setup-go@v3 with: - go-version: 1.19 + go-version: 1.21 - name: checkout code uses: actions/checkout@v3 - run: make ictest-basic env: - BRANCH_CI: "latest" + BRANCH_CI: 'latest' test-ibc: runs-on: ubuntu-latest @@ -58,14 +54,14 @@ jobs: - name: Set up Go 1.19 uses: actions/setup-go@v3 with: - go-version: 1.19 + go-version: 1.21 - name: checkout code uses: actions/checkout@v3 - run: make ictest-ibc env: - BRANCH_CI: "latest" + BRANCH_CI: 'latest' test-packet-forward: runs-on: ubuntu-latest @@ -74,12 +70,11 @@ jobs: - name: Set up Go 1.19 uses: actions/setup-go@v3 with: - go-version: 1.19 + go-version: 1.21 - name: checkout code uses: actions/checkout@v3 - run: make ictest-packet-forward env: - BRANCH_CI: "latest" - + BRANCH_CI: 'latest' diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 370640f9..d9397082 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -15,10 +15,10 @@ jobs: steps: - uses: actions/setup-go@v3 with: - go-version: 1.19 + go-version: 1.21 - uses: actions/checkout@v3 - name: golangci-lint uses: golangci/golangci-lint-action@v3 with: version: latest - args: --timeout 15m \ No newline at end of file + args: --timeout 15m diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 86a24eac..e943401d 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -3,7 +3,7 @@ on: push: branches: - main - + name: Tests jobs: @@ -14,9 +14,8 @@ jobs: - name: Install Go uses: actions/setup-go@v3 with: - go-version: 1.19 + go-version: 1.21 - name: Checkout code uses: actions/checkout@v3 - name: Test run: go test ./... - diff --git a/ante/ante_test.go b/ante/ante_test.go index 9a97417f..2245b365 100644 --- a/ante/ante_test.go +++ b/ante/ante_test.go @@ -4,8 +4,8 @@ import ( "fmt" "testing" - "github.com/osmosis-labs/fee-abstraction/v4/app" - apphelpers "github.com/osmosis-labs/fee-abstraction/v4/app/helpers" + "github.com/osmosis-labs/fee-abstraction/v7/app" + apphelpers "github.com/osmosis-labs/fee-abstraction/v7/app/helpers" "github.com/stretchr/testify/suite" "github.com/cosmos/cosmos-sdk/client" diff --git a/ante/fee_test.go b/ante/fee_test.go index d1385fd4..a3f9d6be 100644 --- a/ante/fee_test.go +++ b/ante/fee_test.go @@ -1,7 +1,7 @@ package ante_test import ( - "github.com/osmosis-labs/fee-abstraction/v4/ante" + "github.com/osmosis-labs/fee-abstraction/v7/ante" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/testutil/testdata" diff --git a/app/ante.go b/app/ante.go index 2ce1870e..f9678aa2 100644 --- a/app/ante.go +++ b/app/ante.go @@ -1,8 +1,8 @@ package app import ( - feeabsante "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/ante" - feeabskeeper "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" + feeabsante "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/ante" + feeabskeeper "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" sdkerrors "cosmossdk.io/errors" diff --git a/app/app.go b/app/app.go index b6e37456..13376aaf 100644 --- a/app/app.go +++ b/app/app.go @@ -16,10 +16,10 @@ import ( routerkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/keeper" routertypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/types" "github.com/gorilla/mux" - appparams "github.com/osmosis-labs/fee-abstraction/v4/app/params" - feeabsmodule "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs" - feeabskeeper "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" - feeabstypes "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + appparams "github.com/osmosis-labs/fee-abstraction/v7/app/params" + feeabsmodule "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs" + feeabskeeper "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" + feeabstypes "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/rakyll/statik/fs" "github.com/spf13/cast" diff --git a/app/encoding.go b/app/encoding.go index 3d7907df..9027fd5e 100644 --- a/app/encoding.go +++ b/app/encoding.go @@ -1,7 +1,7 @@ package app import ( - "github.com/osmosis-labs/fee-abstraction/v4/app/params" + "github.com/osmosis-labs/fee-abstraction/v7/app/params" "github.com/cosmos/cosmos-sdk/std" ) diff --git a/app/helpers/test_helpers.go b/app/helpers/test_helpers.go index bdee0012..f8e6d629 100644 --- a/app/helpers/test_helpers.go +++ b/app/helpers/test_helpers.go @@ -7,8 +7,8 @@ import ( "time" "github.com/CosmWasm/wasmd/x/wasm" - feeapp "github.com/osmosis-labs/fee-abstraction/v4/app" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + feeapp "github.com/osmosis-labs/fee-abstraction/v7/app" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/stretchr/testify/require" codectypes "github.com/cosmos/cosmos-sdk/codec/types" diff --git a/app/sim_test.go b/app/sim_test.go index 768970d0..8b46daf0 100644 --- a/app/sim_test.go +++ b/app/sim_test.go @@ -7,8 +7,8 @@ import ( "testing" "github.com/CosmWasm/wasmd/x/wasm" - feeapp "github.com/osmosis-labs/fee-abstraction/v4/app" - "github.com/osmosis-labs/fee-abstraction/v4/app/helpers" + feeapp "github.com/osmosis-labs/fee-abstraction/v7/app" + "github.com/osmosis-labs/fee-abstraction/v7/app/helpers" "github.com/stretchr/testify/require" "github.com/cosmos/cosmos-sdk/baseapp" diff --git a/app/test_access.go b/app/test_access.go index 9342b01c..e3f945e2 100644 --- a/app/test_access.go +++ b/app/test_access.go @@ -5,7 +5,7 @@ import ( "github.com/CosmWasm/wasmd/app/params" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" diff --git a/app/test_helpers.go b/app/test_helpers.go index ae319299..a3e62579 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -342,6 +342,7 @@ func SignCheckDeliver( t *testing.T, txCfg client.TxConfig, app *baseapp.BaseApp, header tmproto.Header, msgs []sdk.Msg, chainID string, accNums, accSeqs []uint64, expSimPass, expPass bool, priv ...cryptotypes.PrivKey, ) (sdk.GasInfo, *sdk.Result, error) { + t.Helper() tx, err := simtestutil.GenSignedMockTx( rand.New(rand.NewSource(time.Now().UnixNano())), txCfg, @@ -392,6 +393,7 @@ func SignAndDeliver( t *testing.T, txCfg client.TxConfig, app *baseapp.BaseApp, header tmproto.Header, msgs []sdk.Msg, chainID string, accNums, accSeqs []uint64, expSimPass, expPass bool, priv ...cryptotypes.PrivKey, ) (sdk.GasInfo, *sdk.Result, error) { + t.Helper() tx, err := simtestutil.GenSignedMockTx( rand.New(rand.NewSource(time.Now().UnixNano())), txCfg, diff --git a/cmd/feeappd/cmd/root.go b/cmd/feeappd/cmd/root.go index 9e1c1c65..5d468711 100644 --- a/cmd/feeappd/cmd/root.go +++ b/cmd/feeappd/cmd/root.go @@ -8,8 +8,8 @@ import ( "github.com/CosmWasm/wasmd/x/wasm" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" - feeapp "github.com/osmosis-labs/fee-abstraction/v4/app" - "github.com/osmosis-labs/fee-abstraction/v4/app/params" + feeapp "github.com/osmosis-labs/fee-abstraction/v7/app" + "github.com/osmosis-labs/fee-abstraction/v7/app/params" "github.com/prometheus/client_golang/prometheus" "github.com/spf13/cast" "github.com/spf13/cobra" diff --git a/cmd/feeappd/cmd/root_test.go b/cmd/feeappd/cmd/root_test.go index 028324a7..78c1326b 100644 --- a/cmd/feeappd/cmd/root_test.go +++ b/cmd/feeappd/cmd/root_test.go @@ -3,8 +3,8 @@ package cmd_test import ( "testing" - app "github.com/osmosis-labs/fee-abstraction/v4/app" - "github.com/osmosis-labs/fee-abstraction/v4/cmd/feeappd/cmd" + app "github.com/osmosis-labs/fee-abstraction/v7/app" + "github.com/osmosis-labs/fee-abstraction/v7/cmd/feeappd/cmd" "github.com/stretchr/testify/require" svrcmd "github.com/cosmos/cosmos-sdk/server/cmd" diff --git a/cmd/feeappd/cmd/testnet.go b/cmd/feeappd/cmd/testnet.go index 8823246c..32661652 100644 --- a/cmd/feeappd/cmd/testnet.go +++ b/cmd/feeappd/cmd/testnet.go @@ -10,7 +10,7 @@ import ( "os" "path/filepath" - "github.com/osmosis-labs/fee-abstraction/v4/app/params" + "github.com/osmosis-labs/fee-abstraction/v7/app/params" "github.com/spf13/cobra" "github.com/cosmos/cosmos-sdk/client" diff --git a/cmd/feeappd/main.go b/cmd/feeappd/main.go index 4069327f..ed180889 100644 --- a/cmd/feeappd/main.go +++ b/cmd/feeappd/main.go @@ -3,9 +3,9 @@ package main import ( "os" - app "github.com/osmosis-labs/fee-abstraction/v4/app" - "github.com/osmosis-labs/fee-abstraction/v4/app/params" - "github.com/osmosis-labs/fee-abstraction/v4/cmd/feeappd/cmd" + app "github.com/osmosis-labs/fee-abstraction/v7/app" + "github.com/osmosis-labs/fee-abstraction/v7/app/params" + "github.com/osmosis-labs/fee-abstraction/v7/cmd/feeappd/cmd" "github.com/cosmos/cosmos-sdk/server" svrcmd "github.com/cosmos/cosmos-sdk/server/cmd" diff --git a/go.mod b/go.mod index 7170d3c6..5114bf70 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ -module github.com/osmosis-labs/fee-abstraction/v4 +module github.com/osmosis-labs/fee-abstraction/v7 -go 1.18 +go 1.21 require ( cosmossdk.io/errors v1.0.0-beta.7 diff --git a/tests/interchaintest/go.mod b/tests/interchaintest/go.mod index 8bbb6691..de0646f7 100644 --- a/tests/interchaintest/go.mod +++ b/tests/interchaintest/go.mod @@ -10,7 +10,7 @@ require ( github.com/golang/protobuf v1.5.3 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 - github.com/osmosis-labs/fee-abstraction/v4 v4.0.0 + github.com/osmosis-labs/fee-abstraction/v7 v4.0.0 github.com/strangelove-ventures/interchaintest/v7 v7.1.2 github.com/stretchr/testify v1.8.4 go.uber.org/zap v1.24.0 @@ -241,7 +241,7 @@ replace ( github.com/cosmos/iavl => github.com/cosmos/iavl v0.20.0 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 // For this nested module, you always want to replace the parent reference with the current worktree. - github.com/osmosis-labs/fee-abstraction/v4 => ../../ + github.com/osmosis-labs/fee-abstraction/v7 => ../../ github.com/strangelove-ventures/interchaintest/v7 => github.com/notional-labs/interchaintest/v7 v7.0.0-20230803100453-9e61f78e0e8c github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 diff --git a/tests/interchaintest/setup.go b/tests/interchaintest/setup.go index df1d7aad..6206d84a 100644 --- a/tests/interchaintest/setup.go +++ b/tests/interchaintest/setup.go @@ -9,7 +9,7 @@ import ( "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/icza/dyno" - feeabstype "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + feeabstype "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos/wasm" diff --git a/x/feeabs/ante/decorate.go b/x/feeabs/ante/decorate.go index 1fc9df8f..3c83be58 100644 --- a/x/feeabs/ante/decorate.go +++ b/x/feeabs/ante/decorate.go @@ -3,8 +3,8 @@ package ante import ( "fmt" - feeabskeeper "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" - feeabstypes "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + feeabskeeper "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" + feeabstypes "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" sdkerrors "cosmossdk.io/errors" diff --git a/x/feeabs/client/cli/query.go b/x/feeabs/client/cli/query.go index da2a5c67..522a005f 100644 --- a/x/feeabs/client/cli/query.go +++ b/x/feeabs/client/cli/query.go @@ -3,7 +3,7 @@ package cli import ( "fmt" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/spf13/cobra" "github.com/cosmos/cosmos-sdk/client" diff --git a/x/feeabs/client/cli/tx.go b/x/feeabs/client/cli/tx.go index c056624d..a7c65144 100644 --- a/x/feeabs/client/cli/tx.go +++ b/x/feeabs/client/cli/tx.go @@ -1,7 +1,7 @@ package cli import ( - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/spf13/cobra" "github.com/cosmos/cosmos-sdk/client" diff --git a/x/feeabs/client/cli/tx_test.go b/x/feeabs/client/cli/tx_test.go index 9a37aec6..2b9235ad 100644 --- a/x/feeabs/client/cli/tx_test.go +++ b/x/feeabs/client/cli/tx_test.go @@ -3,7 +3,7 @@ package cli import ( "testing" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/stretchr/testify/require" "github.com/cosmos/cosmos-sdk/codec" diff --git a/x/feeabs/client/cli/util.go b/x/feeabs/client/cli/util.go index 1bdefbc9..951940a1 100644 --- a/x/feeabs/client/cli/util.go +++ b/x/feeabs/client/cli/util.go @@ -3,8 +3,7 @@ package cli import ( "io/ioutil" - - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/cosmos/cosmos-sdk/codec" ) diff --git a/x/feeabs/ibc_module.go b/x/feeabs/ibc_module.go index c14c0af0..8d9d90af 100644 --- a/x/feeabs/ibc_module.go +++ b/x/feeabs/ibc_module.go @@ -3,8 +3,8 @@ package feeabs import ( "fmt" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" sdkerrors "cosmossdk.io/errors" diff --git a/x/feeabs/ibctesting/chain.go b/x/feeabs/ibctesting/chain.go index e5cd760c..3455939a 100644 --- a/x/feeabs/ibctesting/chain.go +++ b/x/feeabs/ibctesting/chain.go @@ -7,7 +7,7 @@ import ( "time" "github.com/CosmWasm/wasmd/x/wasm" - feeabs "github.com/osmosis-labs/fee-abstraction/v4/app" + feeabs "github.com/osmosis-labs/fee-abstraction/v7/app" "github.com/stretchr/testify/require" sdkerrors "cosmossdk.io/errors" diff --git a/x/feeabs/ibctesting/wasm.go b/x/feeabs/ibctesting/wasm.go index 5543dfcf..67f9c55e 100644 --- a/x/feeabs/ibctesting/wasm.go +++ b/x/feeabs/ibctesting/wasm.go @@ -4,7 +4,7 @@ import ( "fmt" "github.com/CosmWasm/wasmd/x/wasm/types" - feeabs "github.com/osmosis-labs/fee-abstraction/v4/app" + feeabs "github.com/osmosis-labs/fee-abstraction/v7/app" "github.com/stretchr/testify/require" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/feeabs/keeper/abci.go b/x/feeabs/keeper/abci.go index 4e535e3c..c2d76542 100644 --- a/x/feeabs/keeper/abci.go +++ b/x/feeabs/keeper/abci.go @@ -4,7 +4,7 @@ import ( "fmt" "time" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/feeabs/keeper/config.go b/x/feeabs/keeper/config.go index 67de2805..bf0e6a04 100644 --- a/x/feeabs/keeper/config.go +++ b/x/feeabs/keeper/config.go @@ -1,7 +1,7 @@ package keeper import ( - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" sdkerrors "cosmossdk.io/errors" diff --git a/x/feeabs/keeper/epoch.go b/x/feeabs/keeper/epoch.go index 22f303da..45da06a3 100644 --- a/x/feeabs/keeper/epoch.go +++ b/x/feeabs/keeper/epoch.go @@ -5,7 +5,7 @@ import ( "time" proto "github.com/cosmos/gogoproto/proto" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" sdk "github.com/cosmos/cosmos-sdk/types" ) diff --git a/x/feeabs/keeper/exchange_rate.go b/x/feeabs/keeper/exchange_rate.go index 253d46f0..ba0183f6 100644 --- a/x/feeabs/keeper/exchange_rate.go +++ b/x/feeabs/keeper/exchange_rate.go @@ -1,7 +1,7 @@ package keeper import ( - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" sdkerrors "cosmossdk.io/errors" diff --git a/x/feeabs/keeper/genesis.go b/x/feeabs/keeper/genesis.go index f3ca3d59..e5d39a37 100644 --- a/x/feeabs/keeper/genesis.go +++ b/x/feeabs/keeper/genesis.go @@ -1,7 +1,7 @@ package keeper import ( - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" sdk "github.com/cosmos/cosmos-sdk/types" ) diff --git a/x/feeabs/keeper/genesis_test.go b/x/feeabs/keeper/genesis_test.go index e9d9b243..3653df43 100644 --- a/x/feeabs/keeper/genesis_test.go +++ b/x/feeabs/keeper/genesis_test.go @@ -4,8 +4,8 @@ import ( "testing" "time" - apphelpers "github.com/osmosis-labs/fee-abstraction/v4/app/helpers" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + apphelpers "github.com/osmosis-labs/fee-abstraction/v7/app/helpers" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/stretchr/testify/require" ) diff --git a/x/feeabs/keeper/grpc_query.go b/x/feeabs/keeper/grpc_query.go index 130d84f0..0d60b010 100644 --- a/x/feeabs/keeper/grpc_query.go +++ b/x/feeabs/keeper/grpc_query.go @@ -3,7 +3,7 @@ package keeper import ( "context" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" diff --git a/x/feeabs/keeper/grpc_query_test.go b/x/feeabs/keeper/grpc_query_test.go index 595b7df7..ee0a71dd 100644 --- a/x/feeabs/keeper/grpc_query_test.go +++ b/x/feeabs/keeper/grpc_query_test.go @@ -4,7 +4,7 @@ import ( "math/rand" "time" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" sdk "github.com/cosmos/cosmos-sdk/types" ) diff --git a/x/feeabs/keeper/host_zone_test.go b/x/feeabs/keeper/host_zone_test.go index 1af18ed0..1386fd00 100644 --- a/x/feeabs/keeper/host_zone_test.go +++ b/x/feeabs/keeper/host_zone_test.go @@ -3,9 +3,9 @@ package keeper_test import ( "testing" - apphelpers "github.com/osmosis-labs/fee-abstraction/v4/app/helpers" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + apphelpers "github.com/osmosis-labs/fee-abstraction/v7/app/helpers" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/stretchr/testify/require" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/feeabs/keeper/ibc.go b/x/feeabs/keeper/ibc.go index 26fb6b57..64c8dfdd 100644 --- a/x/feeabs/keeper/ibc.go +++ b/x/feeabs/keeper/ibc.go @@ -4,7 +4,7 @@ import ( "fmt" "time" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" sdkerrors "cosmossdk.io/errors" diff --git a/x/feeabs/keeper/keeper.go b/x/feeabs/keeper/keeper.go index cbff3d30..168dff8b 100644 --- a/x/feeabs/keeper/keeper.go +++ b/x/feeabs/keeper/keeper.go @@ -3,7 +3,7 @@ package keeper import ( "fmt" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/cosmos/cosmos-sdk/codec" storetypes "github.com/cosmos/cosmos-sdk/store/types" diff --git a/x/feeabs/keeper/keeper_test.go b/x/feeabs/keeper/keeper_test.go index 46010396..74cdcde2 100644 --- a/x/feeabs/keeper/keeper_test.go +++ b/x/feeabs/keeper/keeper_test.go @@ -4,10 +4,10 @@ import ( "fmt" "testing" - "github.com/osmosis-labs/fee-abstraction/v4/app" - apphelpers "github.com/osmosis-labs/fee-abstraction/v4/app/helpers" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/app" + apphelpers "github.com/osmosis-labs/fee-abstraction/v7/app/helpers" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/stretchr/testify/suite" "github.com/cosmos/cosmos-sdk/baseapp" diff --git a/x/feeabs/keeper/msgserver.go b/x/feeabs/keeper/msgserver.go index 8239d3cb..2734f23c 100644 --- a/x/feeabs/keeper/msgserver.go +++ b/x/feeabs/keeper/msgserver.go @@ -3,7 +3,7 @@ package keeper import ( "context" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" sdk "github.com/cosmos/cosmos-sdk/types" ) diff --git a/x/feeabs/keeper/proposal.go b/x/feeabs/keeper/proposal.go index 4bd4390b..da7f6348 100644 --- a/x/feeabs/keeper/proposal.go +++ b/x/feeabs/keeper/proposal.go @@ -1,7 +1,7 @@ package keeper import ( - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" sdk "github.com/cosmos/cosmos-sdk/types" ) diff --git a/x/feeabs/keeper/proposal_test.go b/x/feeabs/keeper/proposal_test.go index 7c4a18a8..886c953d 100644 --- a/x/feeabs/keeper/proposal_test.go +++ b/x/feeabs/keeper/proposal_test.go @@ -1,8 +1,8 @@ package keeper_test import ( - apphelpers "github.com/osmosis-labs/fee-abstraction/v4/app/helpers" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + apphelpers "github.com/osmosis-labs/fee-abstraction/v7/app/helpers" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/feeabs/module.go b/x/feeabs/module.go index 7ead27bc..54abcaff 100644 --- a/x/feeabs/module.go +++ b/x/feeabs/module.go @@ -7,9 +7,9 @@ import ( "github.com/gorilla/mux" "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/client/cli" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/client/cli" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/spf13/cobra" "github.com/cosmos/cosmos-sdk/client" diff --git a/x/feeabs/proposal_handler.go b/x/feeabs/proposal_handler.go index f4b9b131..68d92924 100644 --- a/x/feeabs/proposal_handler.go +++ b/x/feeabs/proposal_handler.go @@ -1,9 +1,9 @@ package feeabs import ( - cli "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/client/cli" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + cli "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/client/cli" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" sdkerrors "cosmossdk.io/errors" diff --git a/x/feeabs/relay_test.go b/x/feeabs/relay_test.go index a3bd1fc3..842947ab 100644 --- a/x/feeabs/relay_test.go +++ b/x/feeabs/relay_test.go @@ -7,7 +7,7 @@ import ( "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" wasmvm "github.com/CosmWasm/wasmvm" wasmvmtypes "github.com/CosmWasm/wasmvm/types" - wasmibctesting "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/ibctesting" + wasmibctesting "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/ibctesting" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/x/feeabs/types/build_memo_test.go b/x/feeabs/types/build_memo_test.go index 5bf61bab..2e13be18 100644 --- a/x/feeabs/types/build_memo_test.go +++ b/x/feeabs/types/build_memo_test.go @@ -3,7 +3,7 @@ package types_test import ( "testing" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/stretchr/testify/require" ) From e9c8580974c22b5d6e7002cf3e04eeb0b2b4236f Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 12 Aug 2023 14:56:09 +0800 Subject: [PATCH 35/90] update import paths --- ante/ante_test.go | 4 ++-- ante/fee_test.go | 2 +- app/ante.go | 4 ++-- app/app.go | 8 ++++---- app/encoding.go | 2 +- app/helpers/test_helpers.go | 4 ++-- app/sim_test.go | 4 ++-- app/test_access.go | 2 +- cmd/feeappd/cmd/root.go | 4 ++-- cmd/feeappd/cmd/root_test.go | 4 ++-- cmd/feeappd/cmd/testnet.go | 2 +- cmd/feeappd/main.go | 6 +++--- go.mod | 2 +- tests/interchaintest/go.mod | 4 ++-- tests/interchaintest/setup.go | 2 +- x/feeabs/ante/decorate.go | 4 ++-- x/feeabs/client/cli/query.go | 2 +- x/feeabs/client/cli/tx.go | 2 +- x/feeabs/client/cli/tx_test.go | 2 +- x/feeabs/client/cli/util.go | 2 +- x/feeabs/ibc_module.go | 4 ++-- x/feeabs/ibctesting/chain.go | 2 +- x/feeabs/ibctesting/wasm.go | 2 +- x/feeabs/keeper/abci.go | 2 +- x/feeabs/keeper/config.go | 2 +- x/feeabs/keeper/epoch.go | 2 +- x/feeabs/keeper/exchange_rate.go | 2 +- x/feeabs/keeper/genesis.go | 2 +- x/feeabs/keeper/genesis_test.go | 4 ++-- x/feeabs/keeper/grpc_query.go | 2 +- x/feeabs/keeper/grpc_query_test.go | 2 +- x/feeabs/keeper/host_zone_test.go | 6 +++--- x/feeabs/keeper/ibc.go | 2 +- x/feeabs/keeper/keeper.go | 2 +- x/feeabs/keeper/keeper_test.go | 8 ++++---- x/feeabs/keeper/msgserver.go | 2 +- x/feeabs/keeper/proposal.go | 2 +- x/feeabs/keeper/proposal_test.go | 4 ++-- x/feeabs/module.go | 6 +++--- x/feeabs/proposal_handler.go | 6 +++--- x/feeabs/relay_test.go | 2 +- x/feeabs/types/build_memo_test.go | 2 +- 42 files changed, 67 insertions(+), 67 deletions(-) diff --git a/ante/ante_test.go b/ante/ante_test.go index ec8150e6..e264bd1b 100644 --- a/ante/ante_test.go +++ b/ante/ante_test.go @@ -16,8 +16,8 @@ import ( xauthsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" "github.com/stretchr/testify/suite" - "github.com/osmosis-labs/fee-abstraction/v4/app" - apphelpers "github.com/osmosis-labs/fee-abstraction/v4/app/helpers" + "github.com/osmosis-labs/fee-abstraction/v7/app" + apphelpers "github.com/osmosis-labs/fee-abstraction/v7/app/helpers" ) type IntegrationTestSuite struct { diff --git a/ante/fee_test.go b/ante/fee_test.go index b2bc5242..c12be4ad 100644 --- a/ante/fee_test.go +++ b/ante/fee_test.go @@ -7,7 +7,7 @@ import ( ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - "github.com/osmosis-labs/fee-abstraction/v4/ante" + "github.com/osmosis-labs/fee-abstraction/v7/ante" ) func (s *IntegrationTestSuite) TestMempoolFeeDecorator() { diff --git a/app/ante.go b/app/ante.go index 9a1e0f09..e9fe853e 100644 --- a/app/ante.go +++ b/app/ante.go @@ -8,8 +8,8 @@ import ( ibcante "github.com/cosmos/ibc-go/v7/modules/core/ante" ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" - feeabsante "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/ante" - feeabskeeper "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" + feeabsante "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/ante" + feeabskeeper "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" ) // HandlerOptions extends the SDK's AnteHandler options by requiring the IBC diff --git a/app/app.go b/app/app.go index dfd003ef..0a07611f 100644 --- a/app/app.go +++ b/app/app.go @@ -111,15 +111,15 @@ import ( "github.com/rakyll/statik/fs" "github.com/spf13/cast" - feeabsmodule "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs" - feeabskeeper "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" - feeabstypes "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + feeabsmodule "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs" + feeabskeeper "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" + feeabstypes "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router" routerkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/keeper" routertypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/types" - appparams "github.com/osmosis-labs/fee-abstraction/v4/app/params" + appparams "github.com/osmosis-labs/fee-abstraction/v7/app/params" // unnamed import of statik for swagger UI support _ "github.com/cosmos/cosmos-sdk/client/docs/statik" diff --git a/app/encoding.go b/app/encoding.go index 3d7907df..9027fd5e 100644 --- a/app/encoding.go +++ b/app/encoding.go @@ -1,7 +1,7 @@ package app import ( - "github.com/osmosis-labs/fee-abstraction/v4/app/params" + "github.com/osmosis-labs/fee-abstraction/v7/app/params" "github.com/cosmos/cosmos-sdk/std" ) diff --git a/app/helpers/test_helpers.go b/app/helpers/test_helpers.go index 881bf5c1..96fb7a11 100644 --- a/app/helpers/test_helpers.go +++ b/app/helpers/test_helpers.go @@ -20,12 +20,12 @@ import ( tmrand "github.com/cometbft/cometbft/libs/rand" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" tmtypes "github.com/cometbft/cometbft/types" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/stretchr/testify/require" "github.com/CosmWasm/wasmd/x/wasm" sdk "github.com/cosmos/cosmos-sdk/types" - feeapp "github.com/osmosis-labs/fee-abstraction/v4/app" + feeapp "github.com/osmosis-labs/fee-abstraction/v7/app" ) // SimAppChainID hardcoded chainID for simulation diff --git a/app/sim_test.go b/app/sim_test.go index acb5794e..161d225a 100644 --- a/app/sim_test.go +++ b/app/sim_test.go @@ -6,12 +6,12 @@ import ( "os" "testing" - feeapp "github.com/osmosis-labs/fee-abstraction/v4/app" + feeapp "github.com/osmosis-labs/fee-abstraction/v7/app" dbm "github.com/cometbft/cometbft-db" "github.com/cometbft/cometbft/libs/log" "github.com/cometbft/cometbft/libs/rand" - "github.com/osmosis-labs/fee-abstraction/v4/app/helpers" + "github.com/osmosis-labs/fee-abstraction/v7/app/helpers" "github.com/stretchr/testify/require" "github.com/CosmWasm/wasmd/x/wasm" diff --git a/app/test_access.go b/app/test_access.go index fee995b2..005cf377 100644 --- a/app/test_access.go +++ b/app/test_access.go @@ -5,7 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" "github.com/CosmWasm/wasmd/app/params" diff --git a/cmd/feeappd/cmd/root.go b/cmd/feeappd/cmd/root.go index 5250be0e..be79e931 100644 --- a/cmd/feeappd/cmd/root.go +++ b/cmd/feeappd/cmd/root.go @@ -43,8 +43,8 @@ import ( "github.com/CosmWasm/wasmd/x/wasm" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" - feeapp "github.com/osmosis-labs/fee-abstraction/v4/app" - "github.com/osmosis-labs/fee-abstraction/v4/app/params" + feeapp "github.com/osmosis-labs/fee-abstraction/v7/app" + "github.com/osmosis-labs/fee-abstraction/v7/app/params" ) // NewRootCmd creates a new root command for simd. It is called once in the diff --git a/cmd/feeappd/cmd/root_test.go b/cmd/feeappd/cmd/root_test.go index 1d8f5136..ad8ca28b 100644 --- a/cmd/feeappd/cmd/root_test.go +++ b/cmd/feeappd/cmd/root_test.go @@ -6,8 +6,8 @@ import ( svrcmd "github.com/cosmos/cosmos-sdk/server/cmd" "github.com/stretchr/testify/require" - app "github.com/osmosis-labs/fee-abstraction/v4/app" - "github.com/osmosis-labs/fee-abstraction/v4/cmd/feeappd/cmd" + app "github.com/osmosis-labs/fee-abstraction/v7/app" + "github.com/osmosis-labs/fee-abstraction/v7/cmd/feeappd/cmd" ) func TestRootCmdConfig(t *testing.T) { diff --git a/cmd/feeappd/cmd/testnet.go b/cmd/feeappd/cmd/testnet.go index 0076ddc2..83ec17d2 100644 --- a/cmd/feeappd/cmd/testnet.go +++ b/cmd/feeappd/cmd/testnet.go @@ -36,7 +36,7 @@ import ( ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - "github.com/osmosis-labs/fee-abstraction/v4/app/params" + "github.com/osmosis-labs/fee-abstraction/v7/app/params" ) var ( diff --git a/cmd/feeappd/main.go b/cmd/feeappd/main.go index 46f07ec8..1b301a78 100644 --- a/cmd/feeappd/main.go +++ b/cmd/feeappd/main.go @@ -6,9 +6,9 @@ import ( "github.com/cosmos/cosmos-sdk/server" svrcmd "github.com/cosmos/cosmos-sdk/server/cmd" - app "github.com/osmosis-labs/fee-abstraction/v4/app" - "github.com/osmosis-labs/fee-abstraction/v4/app/params" - "github.com/osmosis-labs/fee-abstraction/v4/cmd/feeappd/cmd" + app "github.com/osmosis-labs/fee-abstraction/v7/app" + "github.com/osmosis-labs/fee-abstraction/v7/app/params" + "github.com/osmosis-labs/fee-abstraction/v7/cmd/feeappd/cmd" ) func main() { diff --git a/go.mod b/go.mod index 27a25f36..056bf0ac 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/osmosis-labs/fee-abstraction/v4 +module github.com/osmosis-labs/fee-abstraction/v7 go 1.18 diff --git a/tests/interchaintest/go.mod b/tests/interchaintest/go.mod index 8bbb6691..de0646f7 100644 --- a/tests/interchaintest/go.mod +++ b/tests/interchaintest/go.mod @@ -10,7 +10,7 @@ require ( github.com/golang/protobuf v1.5.3 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 - github.com/osmosis-labs/fee-abstraction/v4 v4.0.0 + github.com/osmosis-labs/fee-abstraction/v7 v4.0.0 github.com/strangelove-ventures/interchaintest/v7 v7.1.2 github.com/stretchr/testify v1.8.4 go.uber.org/zap v1.24.0 @@ -241,7 +241,7 @@ replace ( github.com/cosmos/iavl => github.com/cosmos/iavl v0.20.0 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 // For this nested module, you always want to replace the parent reference with the current worktree. - github.com/osmosis-labs/fee-abstraction/v4 => ../../ + github.com/osmosis-labs/fee-abstraction/v7 => ../../ github.com/strangelove-ventures/interchaintest/v7 => github.com/notional-labs/interchaintest/v7 v7.0.0-20230803100453-9e61f78e0e8c github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 diff --git a/tests/interchaintest/setup.go b/tests/interchaintest/setup.go index df1d7aad..6206d84a 100644 --- a/tests/interchaintest/setup.go +++ b/tests/interchaintest/setup.go @@ -9,7 +9,7 @@ import ( "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/icza/dyno" - feeabstype "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + feeabstype "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos/wasm" diff --git a/x/feeabs/ante/decorate.go b/x/feeabs/ante/decorate.go index b5aa3d1e..c6bb0376 100644 --- a/x/feeabs/ante/decorate.go +++ b/x/feeabs/ante/decorate.go @@ -7,8 +7,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" errorstypes "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/types" - feeabskeeper "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" - feeabstypes "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + feeabskeeper "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" + feeabstypes "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) type FeeAbstractionDeductFeeDecorate struct { diff --git a/x/feeabs/client/cli/query.go b/x/feeabs/client/cli/query.go index bf5bc213..c4f18e9f 100644 --- a/x/feeabs/client/cli/query.go +++ b/x/feeabs/client/cli/query.go @@ -5,7 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/spf13/cobra" ) diff --git a/x/feeabs/client/cli/tx.go b/x/feeabs/client/cli/tx.go index 10336e44..249ef406 100644 --- a/x/feeabs/client/cli/tx.go +++ b/x/feeabs/client/cli/tx.go @@ -7,7 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/spf13/cobra" ) diff --git a/x/feeabs/client/cli/tx_test.go b/x/feeabs/client/cli/tx_test.go index 40dfca6a..4184c22c 100644 --- a/x/feeabs/client/cli/tx_test.go +++ b/x/feeabs/client/cli/tx_test.go @@ -5,7 +5,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/testutil" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/stretchr/testify/require" ) diff --git a/x/feeabs/client/cli/util.go b/x/feeabs/client/cli/util.go index 3a236a7f..660fecc0 100644 --- a/x/feeabs/client/cli/util.go +++ b/x/feeabs/client/cli/util.go @@ -4,7 +4,7 @@ import ( "io/ioutil" //nolint:staticcheck "github.com/cosmos/cosmos-sdk/codec" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) // ParseParamChangeProposalJSON reads and parses a ParamChangeProposalJSON from diff --git a/x/feeabs/ibc_module.go b/x/feeabs/ibc_module.go index a436207a..31927039 100644 --- a/x/feeabs/ibc_module.go +++ b/x/feeabs/ibc_module.go @@ -12,8 +12,8 @@ import ( porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" host "github.com/cosmos/ibc-go/v7/modules/core/24-host" ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) // IBCModule implements the ICS26 interface for transfer given the transfer keeper. diff --git a/x/feeabs/ibctesting/chain.go b/x/feeabs/ibctesting/chain.go index 8015a6ac..2a3eebf3 100644 --- a/x/feeabs/ibctesting/chain.go +++ b/x/feeabs/ibctesting/chain.go @@ -41,7 +41,7 @@ import ( "github.com/stretchr/testify/require" "github.com/CosmWasm/wasmd/x/wasm" - feeabs "github.com/osmosis-labs/fee-abstraction/v4/app" + feeabs "github.com/osmosis-labs/fee-abstraction/v7/app" ) // TestChain is a testing struct that wraps a simapp with the last TM Header, the current ABCI diff --git a/x/feeabs/ibctesting/wasm.go b/x/feeabs/ibctesting/wasm.go index 674fa82e..67cef510 100644 --- a/x/feeabs/ibctesting/wasm.go +++ b/x/feeabs/ibctesting/wasm.go @@ -7,7 +7,7 @@ import ( "github.com/cometbft/cometbft/libs/rand" sdk "github.com/cosmos/cosmos-sdk/types" ibctesting "github.com/cosmos/ibc-go/v7/testing" - feeabs "github.com/osmosis-labs/fee-abstraction/v4/app" + feeabs "github.com/osmosis-labs/fee-abstraction/v7/app" "github.com/stretchr/testify/require" ) diff --git a/x/feeabs/keeper/abci.go b/x/feeabs/keeper/abci.go index ce7ba905..98f88f0c 100644 --- a/x/feeabs/keeper/abci.go +++ b/x/feeabs/keeper/abci.go @@ -6,7 +6,7 @@ import ( "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) // BeginBlocker of epochs module. diff --git a/x/feeabs/keeper/config.go b/x/feeabs/keeper/config.go index 255cf209..75603251 100644 --- a/x/feeabs/keeper/config.go +++ b/x/feeabs/keeper/config.go @@ -3,7 +3,7 @@ package keeper import ( sdkerrors "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) func (keeper Keeper) HasHostZoneConfig(ctx sdk.Context, ibcDenom string) bool { diff --git a/x/feeabs/keeper/epoch.go b/x/feeabs/keeper/epoch.go index 5996b330..38db0899 100644 --- a/x/feeabs/keeper/epoch.go +++ b/x/feeabs/keeper/epoch.go @@ -6,7 +6,7 @@ import ( proto "github.com/cosmos/gogoproto/proto" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" sdk "github.com/cosmos/cosmos-sdk/types" ) diff --git a/x/feeabs/keeper/exchange_rate.go b/x/feeabs/keeper/exchange_rate.go index fd083149..c8e51f3b 100644 --- a/x/feeabs/keeper/exchange_rate.go +++ b/x/feeabs/keeper/exchange_rate.go @@ -3,7 +3,7 @@ package keeper import ( sdkerrors "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) // GetTwapRate return Twap Price of ibcDenom diff --git a/x/feeabs/keeper/genesis.go b/x/feeabs/keeper/genesis.go index e9a0152e..01363bcb 100644 --- a/x/feeabs/keeper/genesis.go +++ b/x/feeabs/keeper/genesis.go @@ -3,7 +3,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) // InitGenesis initializes the incentives module's state from a provided genesis state. diff --git a/x/feeabs/keeper/genesis_test.go b/x/feeabs/keeper/genesis_test.go index 41d6b80f..f2f71978 100644 --- a/x/feeabs/keeper/genesis_test.go +++ b/x/feeabs/keeper/genesis_test.go @@ -6,8 +6,8 @@ import ( "github.com/stretchr/testify/require" - apphelpers "github.com/osmosis-labs/fee-abstraction/v4/app/helpers" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + apphelpers "github.com/osmosis-labs/fee-abstraction/v7/app/helpers" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) var now = time.Now().UTC() diff --git a/x/feeabs/keeper/grpc_query.go b/x/feeabs/keeper/grpc_query.go index 249a1597..264f1f9d 100644 --- a/x/feeabs/keeper/grpc_query.go +++ b/x/feeabs/keeper/grpc_query.go @@ -4,7 +4,7 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) diff --git a/x/feeabs/keeper/grpc_query_test.go b/x/feeabs/keeper/grpc_query_test.go index 0a3bbc00..1827198c 100644 --- a/x/feeabs/keeper/grpc_query_test.go +++ b/x/feeabs/keeper/grpc_query_test.go @@ -5,7 +5,7 @@ import ( "time" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) var letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") diff --git a/x/feeabs/keeper/host_zone_test.go b/x/feeabs/keeper/host_zone_test.go index dea4068f..6cc56354 100644 --- a/x/feeabs/keeper/host_zone_test.go +++ b/x/feeabs/keeper/host_zone_test.go @@ -6,9 +6,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" - apphelpers "github.com/osmosis-labs/fee-abstraction/v4/app/helpers" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + apphelpers "github.com/osmosis-labs/fee-abstraction/v7/app/helpers" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) func createNHostZone(t *testing.T, keeper *keeper.Keeper, ctx sdk.Context, n int) []types.HostChainFeeAbsConfig { diff --git a/x/feeabs/keeper/ibc.go b/x/feeabs/keeper/ibc.go index aa41c092..04377fb8 100644 --- a/x/feeabs/keeper/ibc.go +++ b/x/feeabs/keeper/ibc.go @@ -12,7 +12,7 @@ import ( clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" host "github.com/cosmos/ibc-go/v7/modules/core/24-host" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) // GetPort returns the portID for the module. Used in ExportGenesis. diff --git a/x/feeabs/keeper/keeper.go b/x/feeabs/keeper/keeper.go index 9cb8a920..66825ac3 100644 --- a/x/feeabs/keeper/keeper.go +++ b/x/feeabs/keeper/keeper.go @@ -13,7 +13,7 @@ import ( ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) type Keeper struct { diff --git a/x/feeabs/keeper/keeper_test.go b/x/feeabs/keeper/keeper_test.go index 95b2c7b3..f476fcb0 100644 --- a/x/feeabs/keeper/keeper_test.go +++ b/x/feeabs/keeper/keeper_test.go @@ -9,10 +9,10 @@ import ( "github.com/cosmos/cosmos-sdk/baseapp" sdk "github.com/cosmos/cosmos-sdk/types" govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" - "github.com/osmosis-labs/fee-abstraction/v4/app" - apphelpers "github.com/osmosis-labs/fee-abstraction/v4/app/helpers" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/app" + apphelpers "github.com/osmosis-labs/fee-abstraction/v7/app/helpers" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/stretchr/testify/suite" ) diff --git a/x/feeabs/keeper/msgserver.go b/x/feeabs/keeper/msgserver.go index a7494aff..82fd5716 100644 --- a/x/feeabs/keeper/msgserver.go +++ b/x/feeabs/keeper/msgserver.go @@ -5,7 +5,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) type msgServer struct { diff --git a/x/feeabs/keeper/proposal.go b/x/feeabs/keeper/proposal.go index 3ff85f07..05e0cb31 100644 --- a/x/feeabs/keeper/proposal.go +++ b/x/feeabs/keeper/proposal.go @@ -2,7 +2,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) func (k Keeper) AddHostZoneProposal(ctx sdk.Context, p *types.AddHostZoneProposal) error { diff --git a/x/feeabs/keeper/proposal_test.go b/x/feeabs/keeper/proposal_test.go index 7c4a18a8..886c953d 100644 --- a/x/feeabs/keeper/proposal_test.go +++ b/x/feeabs/keeper/proposal_test.go @@ -1,8 +1,8 @@ package keeper_test import ( - apphelpers "github.com/osmosis-labs/fee-abstraction/v4/app/helpers" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + apphelpers "github.com/osmosis-labs/fee-abstraction/v7/app/helpers" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/feeabs/module.go b/x/feeabs/module.go index c4741d00..51952ed5 100644 --- a/x/feeabs/module.go +++ b/x/feeabs/module.go @@ -13,9 +13,9 @@ import ( "github.com/cosmos/cosmos-sdk/types/module" "github.com/gorilla/mux" "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/client/cli" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/client/cli" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/spf13/cobra" ) diff --git a/x/feeabs/proposal_handler.go b/x/feeabs/proposal_handler.go index 5653b80f..ad699f9a 100644 --- a/x/feeabs/proposal_handler.go +++ b/x/feeabs/proposal_handler.go @@ -7,10 +7,10 @@ import ( govclient "github.com/cosmos/cosmos-sdk/x/gov/client" v1beta1types "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" - cli "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/client/cli" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + cli "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/client/cli" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) var ( diff --git a/x/feeabs/relay_test.go b/x/feeabs/relay_test.go index a92a92c9..286d4a0d 100644 --- a/x/feeabs/relay_test.go +++ b/x/feeabs/relay_test.go @@ -7,7 +7,7 @@ import ( wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" - wasmibctesting "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/ibctesting" + wasmibctesting "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/ibctesting" sdkerrors "cosmossdk.io/errors" wasmvm "github.com/CosmWasm/wasmvm" diff --git a/x/feeabs/types/build_memo_test.go b/x/feeabs/types/build_memo_test.go index 17e5eba0..6826c32d 100644 --- a/x/feeabs/types/build_memo_test.go +++ b/x/feeabs/types/build_memo_test.go @@ -5,7 +5,7 @@ import ( "github.com/stretchr/testify/require" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) // TODO: need to refactor this test, use driven table From d3e40c23eb5278ffa5e62d9f52eedae865230a30 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 12 Aug 2023 15:34:50 +0800 Subject: [PATCH 36/90] enhance markdown and fix lints --- .golangci.yml | 2 +- README.md | 50 +++++++++++++++++++--------- ante/ante.go | 6 ++-- ante/ante_test.go | 11 ++++--- ante/fee_test.go | 6 ++-- app/README.md | 7 ++-- app/ante.go | 8 ++--- app/app.go | 52 +++++++++++++++--------------- app/encoding.go | 4 +-- app/helpers/test_helpers.go | 6 ++-- app/sim_test.go | 5 +-- app/test_access.go | 13 ++++---- app/test_helpers.go | 27 +++++++++------- cmd/feeappd/cmd/root.go | 8 ++--- cmd/feeappd/cmd/root_test.go | 5 +-- cmd/feeappd/cmd/testnet.go | 6 ++-- cmd/feeappd/main.go | 6 ++-- scripts/README.md | 7 ++-- x/feeabs/ante/decorate.go | 6 ++-- x/feeabs/client/cli/query.go | 3 +- x/feeabs/client/cli/tx.go | 3 +- x/feeabs/client/cli/tx_test.go | 3 +- x/feeabs/client/cli/util.go | 12 +++---- x/feeabs/ibc_module.go | 22 ++++++------- x/feeabs/ibctesting/README.md | 3 +- x/feeabs/ibctesting/chain.go | 25 +++++++------- x/feeabs/ibctesting/coordinator.go | 12 +++---- x/feeabs/ibctesting/endpoint.go | 3 +- x/feeabs/ibctesting/event_utils.go | 4 +-- x/feeabs/ibctesting/wasm.go | 4 +-- x/feeabs/keeper/abci.go | 4 +-- x/feeabs/keeper/config.go | 4 +-- x/feeabs/keeper/epoch.go | 3 +- x/feeabs/keeper/exchange_rate.go | 4 +-- x/feeabs/keeper/genesis.go | 4 +-- x/feeabs/keeper/genesis_test.go | 3 +- x/feeabs/keeper/grpc_query.go | 3 +- x/feeabs/keeper/grpc_query_test.go | 4 +-- x/feeabs/keeper/host_zone_test.go | 7 ++-- x/feeabs/keeper/ibc.go | 18 +++++------ x/feeabs/keeper/keeper.go | 8 ++--- x/feeabs/keeper/keeper_test.go | 27 ++++++++-------- x/feeabs/keeper/msgserver.go | 4 +-- x/feeabs/keeper/proposal.go | 4 +-- x/feeabs/keeper/proposal_test.go | 6 ++-- x/feeabs/module.go | 15 +++++---- x/feeabs/proposal_handler.go | 8 ++--- x/feeabs/relay_test.go | 23 ++++++------- x/feeabs/spec/01_concepts.md | 5 +-- x/feeabs/spec/02_state.md | 2 +- x/feeabs/spec/03_epoch.md | 2 +- x/feeabs/spec/07_ibc.md | 51 +++++++++++++++-------------- x/feeabs/spec/Integration.md | 3 -- x/feeabs/spec/README.md | 1 - x/feeabs/types/build_memo_test.go | 3 +- x/feeabs/types/expected_keepers.go | 8 ++--- x/feeabs/types/proposal.go | 12 +++---- 57 files changed, 305 insertions(+), 260 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index aaa8a198..c9686a60 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -51,7 +51,7 @@ linters-settings: - prefix(cosmossdk.io) - prefix(github.com/cosmos/cosmos-sdk) - prefix(github.com/cometbft/cometbft) - - prefix(github.com/cosmos/ibc-go) + - prefix(github.com/osmosis-labs/fee-abstraction) custom-order: true revive: enable-all-rules: true diff --git a/README.md b/README.md index 441abef7..eee5b8b7 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,42 @@ # Fee Abstraction -## Context + +## Context The concrete use cases which motivated this module include: - - The desire to use IBC token as transaction fees on any chain instead of having to use native token as fee. - - To fully take advantage of the newly represented Osmosis [``swap router``](https://github.com/osmosis-labs/osmosis/tree/main/cosmwasm/contracts) with the [``ibc-hooks``](https://github.com/osmosis-labs/osmosis/tree/main/x/ibc-hooks) module and the [``async-icq``](https://github.com/strangelove-ventures/async-icq) module. - -## Description + +- The desire to use IBC token as transaction fees on any chain instead of having to use native token as fee. +- To fully take advantage of the newly represented Osmosis [``swap router``](https://github.com/osmosis-labs/osmosis/tree/main/cosmwasm/contracts) with the [``ibc-hooks``](https://github.com/osmosis-labs/osmosis/tree/main/x/ibc-hooks) module and the [``async-icq``](https://github.com/strangelove-ventures/async-icq) module. + +## Description Fee abstraction modules enable users on any Cosmos chain with IBC connections to pay fee using ibc token. Fee-abs implementation: - - Fee-abs module imported to the customer chain. -The implememtation also uses Osmosis swap router and async-icq module which are already deployed on Osmosis testnet. +- Fee-abs module imported to the customer chain. + +The implememtation also uses Osmosis swap router and async-icq module which are already deployed on Osmosis testnet. ## Prototype Fee-abs mechanism in a nutshell: - 1. Pulling `twap data` and update exchange rate: - - Periodically pulling `twap data` from osmosis by ibc-ing to `async-icq` module on Osmosis, this `twap data` will update the exchange rate of osmosis to customer chain's native token. - 2. Handling txs with ibc-token fee: - - The exchange rate is used to calculate the amount of ibc-token needed for tx fee allowing users to pay ibc-token for tx fee instead of chain's native token. + + 1. Pulling `twap data` and update exchange rate: + +- Periodically pulling `twap data` from osmosis by ibc-ing to `async-icq` module on Osmosis, this `twap data` will update the exchange rate of osmosis to customer chain's native token. + + 2. Handling txs with ibc-token fee: + +- The exchange rate is used to calculate the amount of ibc-token needed for tx fee allowing users to pay ibc-token for tx fee instead of chain's native token. + 3. Swap accumulated ibc-token fee: - - The collected ibc-token users use for tx fee is periodically swaped back to customer chain's native token using osmosis. + +- The collected ibc-token users use for tx fee is periodically swaped back to customer chain's native token using osmosis. We'll goes into all the details now: -#### Pulling `twap data` and update exchange rate +### Pulling `twap data` and update exchange rate + For this to work, we first has to set up an ibc channel from `feeabs` to `async-icq`. This channel set-up process can be done by anyone, just like setting up an ibc transfer channel. Once that ibc channel is there, we'll use that channel to ibc-query Twap data. Let's call this the querying channel. The process of pulling Twap data and update exchange rate : @@ -37,15 +47,19 @@ Description : For every `update exchange rate period`, at fee-abs `BeginBlocker()` we submit a `InterchainQueryPacketData` which wrapped `QueryArithmeticTwapToNowRequest` to the querying channel on the customer chain's end. Then relayers will submit `MsgReceivePacket` so that our `QueryTwapPacket` which will be routed to `async-icq` module to be processed. `async-icq` module then unpack `InterchainQueryPacketData` and send query to TWAP module. The correspone response will be wrapped in the ibc acknowledgement. Relayers then submit `MsgAcknowledgement` to the customer chain so that the ibc acknowledgement is routed to fee-abs to be processed. Fee-abs then update exchange rate according to the Twap wrapped in the ibc acknowledgement. #### Handling txs with ibc-token fee + We modified `MempoolFeeDecorator` so that it can handle ibc-token as fee. If the tx has ibc-token fee, the AnteHandler will first check if that token is allowed (which is setup by Gov) we basically replace the amount of ibc-token with the equivalent native-token amount which is calculated by `exchange rate` * `ibc-token amount`. We have an account to manage the ibc-token user used to pay for tx fee. The collected ibc-token fee is sent to that account instead of community pool account. #### Swap accumulated ibc-tokens fee + Fee-abstraction will use osmosis's Cross chain Swap (XCS) feature to do this. We basically ibc transfer to the osmosis crosschain swap contract with custom memo to swap the osmosis fee back to customer chain's native-token and ibc transfer back to the customer chain. ##### How XCS work -###### Reverse With Path-unwinding to get Ibc-token on Osmosis: + +###### Reverse With Path-unwinding to get Ibc-token on Osmosis + - Create a ibc transfer message with a specific MEMO to work with ibc [``packet-forward-middleware``](https://github.com/strangelove-ventures/packet-forward-middleware) which is path-unwinding (an ibc feature that allow to automatic define the path and ibc transfer multiple hop follow the defined path) - Ibc transfer the created packet to get the fee Ibc-token on Osmosis @@ -53,13 +67,17 @@ Ex: When you sent STARS on Hub to Osmosis, you will get Osmosis(Hub(STARS)) whic ![](https://i.imgur.com/D1wSrMm.png) -###### Swap Ibc-token: +###### Swap Ibc-token + After reverse the ibc-token, XCS will : + - Swap with the specific pool (which is defined in the transfer packet from Feeabs-chain) to get Feeabs-chain native-token - Transfer back Feeabs-chain native-token to Feeabs module account (will use to pay fee for other transaction) ![](https://i.imgur.com/YKOK8mr.png) Current version of fee-abstraction working with XCSv2 + ## Resources - - Main repo: https://github.com/osmosis-labs/fee-abstraction + +- Main repo: diff --git a/ante/ante.go b/ante/ante.go index d8de7658..5183bdf3 100644 --- a/ante/ante.go +++ b/ante/ante.go @@ -1,14 +1,14 @@ package ante import ( + ibcante "github.com/cosmos/ibc-go/v7/modules/core/ante" + ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" + sdkerrors "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" errorstypes "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/ante" - - ibcante "github.com/cosmos/ibc-go/v7/modules/core/ante" - ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" ) // HandlerOptions extend the SDK's AnteHandler options by requiring the IBC diff --git a/ante/ante_test.go b/ante/ante_test.go index 2245b365..5ac968c8 100644 --- a/ante/ante_test.go +++ b/ante/ante_test.go @@ -4,8 +4,6 @@ import ( "fmt" "testing" - "github.com/osmosis-labs/fee-abstraction/v7/app" - apphelpers "github.com/osmosis-labs/fee-abstraction/v7/app/helpers" "github.com/stretchr/testify/suite" "github.com/cosmos/cosmos-sdk/client" @@ -19,6 +17,9 @@ import ( tmrand "github.com/cometbft/cometbft/libs/rand" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" + + "github.com/osmosis-labs/fee-abstraction/v7/app" + apphelpers "github.com/osmosis-labs/fee-abstraction/v7/app/helpers" ) type IntegrationTestSuite struct { @@ -36,8 +37,8 @@ func TestIntegrationTestSuite(t *testing.T) { } func (s *IntegrationTestSuite) SetupTest() { - app := apphelpers.Setup(s.T(), false, 1) - ctx := app.BaseApp.NewContext(false, tmproto.Header{ + feeapp := apphelpers.Setup(s.T(), false, 1) + ctx := feeapp.BaseApp.NewContext(false, tmproto.Header{ ChainID: fmt.Sprintf("test-chain-%s", tmrand.Str(4)), Height: 1, }) @@ -46,7 +47,7 @@ func (s *IntegrationTestSuite) SetupTest() { encodingConfig.Amino.RegisterConcrete(&testdata.TestMsg{}, "testdata.TestMsg", nil) testdata.RegisterInterfaces(encodingConfig.InterfaceRegistry) - s.app = app + s.app = feeapp s.ctx = ctx s.clientCtx = client.Context{}.WithTxConfig(encodingConfig.TxConfig) } diff --git a/ante/fee_test.go b/ante/fee_test.go index a3f9d6be..d3b9a69c 100644 --- a/ante/fee_test.go +++ b/ante/fee_test.go @@ -1,14 +1,14 @@ package ante_test import ( - "github.com/osmosis-labs/fee-abstraction/v7/ante" + ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" - ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + "github.com/osmosis-labs/fee-abstraction/v7/ante" ) func (s *IntegrationTestSuite) TestMempoolFeeDecorator() { diff --git a/app/README.md b/app/README.md index adb96fb8..1068b5ed 100644 --- a/app/README.md +++ b/app/README.md @@ -1,6 +1,7 @@ # Test feeabs and osmosis Interchain Query for spot price ## Setup + ``` # Deploy chains ./scripts/node_start/runnode_custom.sh c @@ -14,13 +15,15 @@ ``` ## Test + ``` feeappd tx feeabs queryomosis --from feeacc --keyring-backend test --chain-id feeappd-t1 --yes # Wait for about 10 sec feeappd q feeabs osmo-spot-price ``` -The result looks like this +The result looks like this + ``` base_asset: osmo quote_asset: stake @@ -53,4 +56,4 @@ feeappd tx gov vote 2 yes --from feeapp1 --keyring-backend test --chain-id feeap {ibc/ED07A3391A112B175915CD8FAF43A2DA8E4790EDE12566649D0C2F97716B8518 ibc/C053D637CCA2A2BA030E2C5EE1B28A16F71CCB0E45E8BE52766DC1B241B77878 channel-0 osmo1nc5tatafv6eyq7llkr2gv50ff9e22mnf70qgjlv737ktmt4eswrqvlx82r 1 true true channel-1} B834FA96EB41DB72C1DFA61DAE0000C76065ADAC 0ibc/ED07A3391A112B175915CD8FAF43A2DA8E4790EDE12566649D0C2F97716B8518 -``` \ No newline at end of file +``` diff --git a/app/ante.go b/app/ante.go index f9678aa2..7383fc06 100644 --- a/app/ante.go +++ b/app/ante.go @@ -1,8 +1,8 @@ package app import ( - feeabsante "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/ante" - feeabskeeper "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" + ibcante "github.com/cosmos/ibc-go/v7/modules/core/ante" + ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" sdkerrors "cosmossdk.io/errors" @@ -10,8 +10,8 @@ import ( errorstypes "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/ante" - ibcante "github.com/cosmos/ibc-go/v7/modules/core/ante" - ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" + feeabsante "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/ante" + feeabskeeper "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" ) // HandlerOptions extends the SDK's AnteHandler options by requiring the IBC diff --git a/app/app.go b/app/app.go index 13376aaf..8cae0fda 100644 --- a/app/app.go +++ b/app/app.go @@ -15,11 +15,26 @@ import ( "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router" routerkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/keeper" routertypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/types" + ica "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts" + icacontrollerkeeper "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/keeper" + icacontrollertypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/types" + icahost "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host" + icahostkeeper "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/keeper" + icahosttypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/types" + icatypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/types" + "github.com/cosmos/ibc-go/v7/modules/apps/transfer" + ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" + ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + ibc "github.com/cosmos/ibc-go/v7/modules/core" + ibcclient "github.com/cosmos/ibc-go/v7/modules/core/02-client" + ibcclientclient "github.com/cosmos/ibc-go/v7/modules/core/02-client/client" + ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" + ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" + ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" + solomachine "github.com/cosmos/ibc-go/v7/modules/light-clients/06-solomachine" + ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" "github.com/gorilla/mux" - appparams "github.com/osmosis-labs/fee-abstraction/v7/app/params" - feeabsmodule "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs" - feeabskeeper "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" - feeabstypes "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/rakyll/statik/fs" "github.com/spf13/cast" @@ -103,25 +118,10 @@ import ( "github.com/cometbft/cometbft/libs/log" tmos "github.com/cometbft/cometbft/libs/os" - ica "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts" - icacontrollerkeeper "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/keeper" - icacontrollertypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/types" - icahost "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host" - icahostkeeper "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/keeper" - icahosttypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/types" - icatypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/types" - "github.com/cosmos/ibc-go/v7/modules/apps/transfer" - ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" - ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" - ibc "github.com/cosmos/ibc-go/v7/modules/core" - ibcclient "github.com/cosmos/ibc-go/v7/modules/core/02-client" - ibcclientclient "github.com/cosmos/ibc-go/v7/modules/core/02-client/client" - ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" - ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" - ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" - solomachine "github.com/cosmos/ibc-go/v7/modules/light-clients/06-solomachine" - ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" + appparams "github.com/osmosis-labs/fee-abstraction/v7/app/params" + feeabsmodule "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs" + feeabskeeper "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" + feeabstypes "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) func getGovProposalHandlers() []govclient.ProposalHandler { @@ -585,7 +585,7 @@ func NewFeeAbs( // register the governance hooks ), ) - /**** Module Options ****/ + // **** Module Options ****/ // NOTE: we may consider parsing `appOpts` inside module constructors. For the moment // we prefer to be more strict in what arguments the modules expect. @@ -885,7 +885,7 @@ func (app *FeeAbs) LoadHeight(height int64) error { } // ModuleAccountAddrs returns all the app's module account addresses. -func (app *FeeAbs) ModuleAccountAddrs() map[string]bool { +func (*FeeAbs) ModuleAccountAddrs() map[string]bool { blockedAddrs := make(map[string]bool) accs := make([]string, 0, len(maccPerms)) @@ -968,7 +968,7 @@ func (app *FeeAbs) SimulationManager() *module.SimulationManager { // RegisterAPIRoutes registers all application module routes with the provided // API server. -func (app *FeeAbs) RegisterAPIRoutes(apiSvr *api.Server, apiConfig config.APIConfig) { +func (*FeeAbs) RegisterAPIRoutes(apiSvr *api.Server, apiConfig config.APIConfig) { clientCtx := apiSvr.ClientCtx // Register new tx routes from grpc-gateway. authtx.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) diff --git a/app/encoding.go b/app/encoding.go index 9027fd5e..83bee883 100644 --- a/app/encoding.go +++ b/app/encoding.go @@ -1,9 +1,9 @@ package app import ( - "github.com/osmosis-labs/fee-abstraction/v7/app/params" - "github.com/cosmos/cosmos-sdk/std" + + "github.com/osmosis-labs/fee-abstraction/v7/app/params" ) // MakeEncodingConfig creates an EncodingConfig for testing diff --git a/app/helpers/test_helpers.go b/app/helpers/test_helpers.go index f8e6d629..fb0862ad 100644 --- a/app/helpers/test_helpers.go +++ b/app/helpers/test_helpers.go @@ -7,8 +7,6 @@ import ( "time" "github.com/CosmWasm/wasmd/x/wasm" - feeapp "github.com/osmosis-labs/fee-abstraction/v7/app" - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/stretchr/testify/require" codectypes "github.com/cosmos/cosmos-sdk/codec/types" @@ -26,6 +24,9 @@ import ( tmrand "github.com/cometbft/cometbft/libs/rand" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" tmtypes "github.com/cometbft/cometbft/types" + + feeapp "github.com/osmosis-labs/fee-abstraction/v7/app" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) // SimAppChainID hardcoded chainID for simulation @@ -141,6 +142,7 @@ func genesisStateWithValSet(t *testing.T, valSet *tmtypes.ValidatorSet, genAccs []authtypes.GenesisAccount, balances ...banktypes.Balance, ) feeapp.GenesisState { + t.Helper() // set genesis accounts authGenesis := authtypes.NewGenesisState(authtypes.DefaultParams(), genAccs) genesisState[authtypes.ModuleName] = app.AppCodec().MustMarshalJSON(authGenesis) diff --git a/app/sim_test.go b/app/sim_test.go index 8b46daf0..2569dc2f 100644 --- a/app/sim_test.go +++ b/app/sim_test.go @@ -7,8 +7,6 @@ import ( "testing" "github.com/CosmWasm/wasmd/x/wasm" - feeapp "github.com/osmosis-labs/fee-abstraction/v7/app" - "github.com/osmosis-labs/fee-abstraction/v7/app/helpers" "github.com/stretchr/testify/require" "github.com/cosmos/cosmos-sdk/baseapp" @@ -21,6 +19,9 @@ import ( dbm "github.com/cometbft/cometbft-db" "github.com/cometbft/cometbft/libs/log" "github.com/cometbft/cometbft/libs/rand" + + feeapp "github.com/osmosis-labs/fee-abstraction/v7/app" + "github.com/osmosis-labs/fee-abstraction/v7/app/helpers" ) func init() { diff --git a/app/test_access.go b/app/test_access.go index e3f945e2..ef096a3e 100644 --- a/app/test_access.go +++ b/app/test_access.go @@ -5,7 +5,8 @@ import ( "github.com/CosmWasm/wasmd/app/params" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" + ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" + ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" @@ -14,8 +15,7 @@ import ( capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" - ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" - ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" ) type TestSupport struct { @@ -23,8 +23,9 @@ type TestSupport struct { app *FeeAbs } -func NewTestSupport(t testing.TB, app *FeeAbs) *TestSupport { - return &TestSupport{t: t, app: app} +func NewTestSupport(tb testing.TB, app *FeeAbs) *TestSupport { + tb.Helper() + return &TestSupport{t: tb, app: app} } func (s TestSupport) IBCKeeper() *ibckeeper.Keeper { @@ -71,6 +72,6 @@ func (s TestSupport) GetBaseApp() *baseapp.BaseApp { return s.app.BaseApp } -func (s TestSupport) GetTxConfig() client.TxConfig { +func (TestSupport) GetTxConfig() client.TxConfig { return params.MakeEncodingConfig().TxConfig } diff --git a/app/test_helpers.go b/app/test_helpers.go index a3e62579..4bc6e586 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -60,13 +60,14 @@ var DefaultConsensusParams = &tmproto.ConsensusParams{ }, } -func setup(t testing.TB, withGenesis bool, invCheckPeriod uint, opts ...wasm.Option) (*FeeAbs, GenesisState) { - nodeHome := t.TempDir() +func setup(tb testing.TB, withGenesis bool, invCheckPeriod uint, opts ...wasm.Option) (*FeeAbs, GenesisState) { + tb.Helper() + nodeHome := tb.TempDir() snapshotDir := filepath.Join(nodeHome, "data", "snapshots") snapshotDB, err := dbm.NewGoLevelDB("metadata", snapshotDir) - require.NoError(t, err) + require.NoError(tb, err) snapshotStore, err := snapshots.NewStore(snapshotDB, snapshotDir) - require.NoError(t, err) + require.NoError(tb, err) baseAppOpts := []func(*baseapp.BaseApp){baseapp.SetSnapshot(snapshotStore, types.SnapshotOptions{KeepRecent: 2})} db := dbm.NewMemDB() app := NewFeeAbs( @@ -84,13 +85,14 @@ func setup(t testing.TB, withGenesis bool, invCheckPeriod uint, opts ...wasm.Opt return app, GenesisState{} } -func setupWithChainID(t testing.TB, withGenesis bool, invCheckPeriod uint, chainID string, opts ...wasm.Option) (*FeeAbs, GenesisState) { - nodeHome := t.TempDir() +func setupWithChainID(tb testing.TB, withGenesis bool, invCheckPeriod uint, chainID string, opts ...wasm.Option) (*FeeAbs, GenesisState) { + tb.Helper() + nodeHome := tb.TempDir() snapshotDir := filepath.Join(nodeHome, "data", "snapshots") snapshotDB, err := dbm.NewGoLevelDB("metadata", snapshotDir) - require.NoError(t, err) + require.NoError(tb, err) snapshotStore, err := snapshots.NewStore(snapshotDB, snapshotDir) - require.NoError(t, err) + require.NoError(tb, err) baseAppOpts := []func(*baseapp.BaseApp){ baseapp.SetChainID(chainID), baseapp.SetSnapshot(snapshotStore, types.SnapshotOptions{KeepRecent: 2}), @@ -123,6 +125,7 @@ func SetupWithGenesisValSet( chainID string, balances ...banktypes.Balance, ) *FeeAbs { + t.Helper() app, genesisState := setupWithChainID(t, true, 5, chainID, opts...) // set genesis accounts authGenesis := authtypes.NewGenesisState(authtypes.DefaultParams(), genAccs) @@ -202,8 +205,9 @@ func SetupWithGenesisValSet( } // SetupWithEmptyStore setup a wasmd app instance with empty DB -func SetupWithEmptyStore(t testing.TB) *FeeAbs { - app, _ := setup(t, false, 0) +func SetupWithEmptyStore(tb testing.TB) *FeeAbs { + tb.Helper() + app, _ := setup(tb, false, 0) return app } @@ -328,6 +332,7 @@ func TestAddr(addr string, bech string) (sdk.AccAddress, error) { // CheckBalance checks the balance of an account. func CheckBalance(t *testing.T, app *FeeAbs, addr sdk.AccAddress, balances sdk.Coins) { + t.Helper() ctxCheck := app.BaseApp.NewContext(true, tmproto.Header{}) require.True(t, balances.IsEqual(app.BankKeeper.GetAllBalances(ctxCheck, addr))) } @@ -491,7 +496,7 @@ func NewPubKeyFromHex(pk string) (res cryptotypes.PubKey) { type EmptyBaseAppOptions struct{} // Get implements AppOptions -func (ao EmptyBaseAppOptions) Get(o string) interface{} { +func (EmptyBaseAppOptions) Get(o string) interface{} { return nil } diff --git a/cmd/feeappd/cmd/root.go b/cmd/feeappd/cmd/root.go index 5d468711..5cdea2ed 100644 --- a/cmd/feeappd/cmd/root.go +++ b/cmd/feeappd/cmd/root.go @@ -8,8 +8,8 @@ import ( "github.com/CosmWasm/wasmd/x/wasm" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" - feeapp "github.com/osmosis-labs/fee-abstraction/v7/app" - "github.com/osmosis-labs/fee-abstraction/v7/app/params" + ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" "github.com/prometheus/client_golang/prometheus" "github.com/spf13/cast" "github.com/spf13/cobra" @@ -43,8 +43,8 @@ import ( "github.com/cometbft/cometbft/libs/log" tmtypes "github.com/cometbft/cometbft/types" - ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + feeapp "github.com/osmosis-labs/fee-abstraction/v7/app" + "github.com/osmosis-labs/fee-abstraction/v7/app/params" ) // NewRootCmd creates a new root command for simd. It is called once in the diff --git a/cmd/feeappd/cmd/root_test.go b/cmd/feeappd/cmd/root_test.go index 78c1326b..708af88c 100644 --- a/cmd/feeappd/cmd/root_test.go +++ b/cmd/feeappd/cmd/root_test.go @@ -3,11 +3,12 @@ package cmd_test import ( "testing" - app "github.com/osmosis-labs/fee-abstraction/v7/app" - "github.com/osmosis-labs/fee-abstraction/v7/cmd/feeappd/cmd" "github.com/stretchr/testify/require" svrcmd "github.com/cosmos/cosmos-sdk/server/cmd" + + app "github.com/osmosis-labs/fee-abstraction/v7/app" + "github.com/osmosis-labs/fee-abstraction/v7/cmd/feeappd/cmd" ) func TestRootCmdConfig(t *testing.T) { diff --git a/cmd/feeappd/cmd/testnet.go b/cmd/feeappd/cmd/testnet.go index 32661652..c13dfe9f 100644 --- a/cmd/feeappd/cmd/testnet.go +++ b/cmd/feeappd/cmd/testnet.go @@ -10,7 +10,8 @@ import ( "os" "path/filepath" - "github.com/osmosis-labs/fee-abstraction/v7/app/params" + ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" "github.com/spf13/cobra" "github.com/cosmos/cosmos-sdk/client" @@ -36,8 +37,7 @@ import ( "github.com/cometbft/cometbft/types" tmtime "github.com/cometbft/cometbft/types/time" - ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + "github.com/osmosis-labs/fee-abstraction/v7/app/params" ) var ( diff --git a/cmd/feeappd/main.go b/cmd/feeappd/main.go index ed180889..1b301a78 100644 --- a/cmd/feeappd/main.go +++ b/cmd/feeappd/main.go @@ -3,12 +3,12 @@ package main import ( "os" + "github.com/cosmos/cosmos-sdk/server" + svrcmd "github.com/cosmos/cosmos-sdk/server/cmd" + app "github.com/osmosis-labs/fee-abstraction/v7/app" "github.com/osmosis-labs/fee-abstraction/v7/app/params" "github.com/osmosis-labs/fee-abstraction/v7/cmd/feeappd/cmd" - - "github.com/cosmos/cosmos-sdk/server" - svrcmd "github.com/cosmos/cosmos-sdk/server/cmd" ) func main() { diff --git a/scripts/README.md b/scripts/README.md index 38e0f76d..d52d25f3 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -1,6 +1,7 @@ # Test feeabs and osmosis Interchain Query for spot price ## Setup + ``` # Deploy chains ./scripts/node_start/runnode_custom.sh c @@ -14,13 +15,15 @@ ``` ## Test + ``` feeappd tx feeabs queryomosis --from feeacc --keyring-backend test --chain-id feeappd-t1 --yes # Wait for about 10 sec feeappd q feeabs osmo-spot-price ``` -The result looks like this +The result looks like this + ``` base_asset: osmo quote_asset: stake @@ -53,4 +56,4 @@ feeappd tx gov vote 2 yes --from feeapp1 --keyring-backend test --chain-id feeap {ibc/ED07A3391A112B175915CD8FAF43A2DA8E4790EDE12566649D0C2F97716B8518 ibc/C053D637CCA2A2BA030E2C5EE1B28A16F71CCB0E45E8BE52766DC1B241B77878 channel-0 osmo1nc5tatafv6eyq7llkr2gv50ff9e22mnf70qgjlv737ktmt4eswrqvlx82r 1 true true channel-1} B834FA96EB41DB72C1DFA61DAE0000C76065ADAC 0ibc/ED07A3391A112B175915CD8FAF43A2DA8E4790EDE12566649D0C2F97716B8518 -``` \ No newline at end of file +``` diff --git a/x/feeabs/ante/decorate.go b/x/feeabs/ante/decorate.go index 3c83be58..926556fb 100644 --- a/x/feeabs/ante/decorate.go +++ b/x/feeabs/ante/decorate.go @@ -3,14 +3,14 @@ package ante import ( "fmt" - feeabskeeper "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" - feeabstypes "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" - sdkerrors "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" errorstypes "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/types" + + feeabskeeper "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" + feeabstypes "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) type FeeAbstractionDeductFeeDecorate struct { diff --git a/x/feeabs/client/cli/query.go b/x/feeabs/client/cli/query.go index 522a005f..78aadeec 100644 --- a/x/feeabs/client/cli/query.go +++ b/x/feeabs/client/cli/query.go @@ -3,11 +3,12 @@ package cli import ( "fmt" - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/spf13/cobra" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" + + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) func GetQueryCmd() *cobra.Command { diff --git a/x/feeabs/client/cli/tx.go b/x/feeabs/client/cli/tx.go index a7c65144..d811c205 100644 --- a/x/feeabs/client/cli/tx.go +++ b/x/feeabs/client/cli/tx.go @@ -1,7 +1,6 @@ package cli import ( - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/spf13/cobra" "github.com/cosmos/cosmos-sdk/client" @@ -9,6 +8,8 @@ import ( "github.com/cosmos/cosmos-sdk/client/tx" sdk "github.com/cosmos/cosmos-sdk/types" govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" + + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) // NewTxCmd returns a root CLI command handler for all x/exp transaction commands. diff --git a/x/feeabs/client/cli/tx_test.go b/x/feeabs/client/cli/tx_test.go index 2b9235ad..b3f75f5b 100644 --- a/x/feeabs/client/cli/tx_test.go +++ b/x/feeabs/client/cli/tx_test.go @@ -3,11 +3,12 @@ package cli import ( "testing" - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/stretchr/testify/require" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/testutil" + + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) func TestParseProposal(t *testing.T) { diff --git a/x/feeabs/client/cli/util.go b/x/feeabs/client/cli/util.go index 951940a1..a55001e7 100644 --- a/x/feeabs/client/cli/util.go +++ b/x/feeabs/client/cli/util.go @@ -1,11 +1,11 @@ package cli import ( - "io/ioutil" - - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" + "os" "github.com/cosmos/cosmos-sdk/codec" + + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) // ParseParamChangeProposalJSON reads and parses a ParamChangeProposalJSON from @@ -13,7 +13,7 @@ import ( func ParseAddHostZoneProposalJSON(cdc *codec.LegacyAmino, proposalFile string) (AddHostZoneProposalJSON, error) { proposal := AddHostZoneProposalJSON{} - contents, err := ioutil.ReadFile(proposalFile) + contents, err := os.ReadFile(proposalFile) if err != nil { return proposal, err } @@ -28,7 +28,7 @@ func ParseAddHostZoneProposalJSON(cdc *codec.LegacyAmino, proposalFile string) ( func ParseDeleteHostZoneProposalJSON(cdc *codec.LegacyAmino, proposalFile string) (DeleteHostZoneProposalJSON, error) { proposal := DeleteHostZoneProposalJSON{} - contents, err := ioutil.ReadFile(proposalFile) + contents, err := os.ReadFile(proposalFile) if err != nil { return proposal, err } @@ -43,7 +43,7 @@ func ParseDeleteHostZoneProposalJSON(cdc *codec.LegacyAmino, proposalFile string func ParseSetHostZoneProposalJSON(cdc *codec.LegacyAmino, proposalFile string) (SetHostZoneProposalJSON, error) { proposal := SetHostZoneProposalJSON{} - contents, err := ioutil.ReadFile(proposalFile) + contents, err := os.ReadFile(proposalFile) if err != nil { return proposal, err } diff --git a/x/feeabs/ibc_module.go b/x/feeabs/ibc_module.go index 8d9d90af..0c8f2472 100644 --- a/x/feeabs/ibc_module.go +++ b/x/feeabs/ibc_module.go @@ -3,8 +3,10 @@ package feeabs import ( "fmt" - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" + host "github.com/cosmos/ibc-go/v7/modules/core/24-host" + ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" sdkerrors "cosmossdk.io/errors" @@ -13,10 +15,8 @@ import ( errorstypes "github.com/cosmos/cosmos-sdk/types/errors" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" - host "github.com/cosmos/ibc-go/v7/modules/core/24-host" - ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) // IBCModule implements the ICS26 interface for transfer given the transfer keeper. @@ -109,7 +109,7 @@ func (am IBCModule) OnChanOpenTry( } // OnChanOpenAck implements the IBCModule interface. -func (am IBCModule) OnChanOpenAck( +func (IBCModule) OnChanOpenAck( ctx sdk.Context, portID, channelID string, @@ -120,7 +120,7 @@ func (am IBCModule) OnChanOpenAck( } // OnChanOpenConfirm implements the IBCModule interface. -func (am IBCModule) OnChanOpenConfirm( +func (IBCModule) OnChanOpenConfirm( ctx sdk.Context, portID, channelID string, @@ -129,7 +129,7 @@ func (am IBCModule) OnChanOpenConfirm( } // OnChanCloseInit implements the IBCModule interface. -func (am IBCModule) OnChanCloseInit( +func (IBCModule) OnChanCloseInit( ctx sdk.Context, portID, channelID string, @@ -139,7 +139,7 @@ func (am IBCModule) OnChanCloseInit( } // OnChanCloseConfirm implements the IBCModule interface. -func (am IBCModule) OnChanCloseConfirm( +func (IBCModule) OnChanCloseConfirm( ctx sdk.Context, portID, channelID string, @@ -149,7 +149,7 @@ func (am IBCModule) OnChanCloseConfirm( } // OnRecvPacket implements the IBCModule interface. -func (am IBCModule) OnRecvPacket( +func (IBCModule) OnRecvPacket( ctx sdk.Context, packet channeltypes.Packet, relayer sdk.AccAddress, diff --git a/x/feeabs/ibctesting/README.md b/x/feeabs/ibctesting/README.md index b9d8aedc..5d966d7c 100644 --- a/x/feeabs/ibctesting/README.md +++ b/x/feeabs/ibctesting/README.md @@ -1,2 +1,3 @@ # testing package for ibc -Customized version of cosmos-sdk x/ibc/testing and CosmWasm wasmd x/wasm/ibctesting \ No newline at end of file + +Customized version of cosmos-sdk x/ibc/testing and CosmWasm wasmd x/wasm/ibctesting diff --git a/x/feeabs/ibctesting/chain.go b/x/feeabs/ibctesting/chain.go index 3455939a..f3fa8322 100644 --- a/x/feeabs/ibctesting/chain.go +++ b/x/feeabs/ibctesting/chain.go @@ -7,7 +7,17 @@ import ( "time" "github.com/CosmWasm/wasmd/x/wasm" - feeabs "github.com/osmosis-labs/fee-abstraction/v7/app" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + commitmenttypes "github.com/cosmos/ibc-go/v7/modules/core/23-commitment/types" + host "github.com/cosmos/ibc-go/v7/modules/core/24-host" + ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" + ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" + "github.com/cosmos/ibc-go/v7/modules/core/types" + ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" + ibctesting "github.com/cosmos/ibc-go/v7/testing" + "github.com/cosmos/ibc-go/v7/testing/mock" + ibctestingtypes "github.com/cosmos/ibc-go/v7/testing/types" "github.com/stretchr/testify/require" sdkerrors "cosmossdk.io/errors" @@ -32,17 +42,7 @@ import ( tmtypes "github.com/cometbft/cometbft/types" tmversion "github.com/cometbft/cometbft/version" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - commitmenttypes "github.com/cosmos/ibc-go/v7/modules/core/23-commitment/types" - host "github.com/cosmos/ibc-go/v7/modules/core/24-host" - ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" - ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" - "github.com/cosmos/ibc-go/v7/modules/core/types" - ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" - ibctesting "github.com/cosmos/ibc-go/v7/testing" - "github.com/cosmos/ibc-go/v7/testing/mock" - ibctestingtypes "github.com/cosmos/ibc-go/v7/testing/types" + feeabs "github.com/osmosis-labs/fee-abstraction/v7/app" ) // TestChain is a testing struct that wraps a simapp with the last TM Header, the current ABCI @@ -86,6 +86,7 @@ type PacketAck struct { // Time management is handled by the Coordinator in order to ensure synchrony between chains. // Each update of any chain increments the block header time for all chains by 5 seconds. func NewTestChain(t *testing.T, coord *Coordinator, chainID string, opts ...wasm.Option) *TestChain { + t.Helper() // generate validator private/public key privVal := mock.NewPV() pubKey, err := privVal.GetPubKey() diff --git a/x/feeabs/ibctesting/coordinator.go b/x/feeabs/ibctesting/coordinator.go index 0dd62d72..1a325095 100644 --- a/x/feeabs/ibctesting/coordinator.go +++ b/x/feeabs/ibctesting/coordinator.go @@ -7,13 +7,12 @@ import ( "time" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" - "github.com/stretchr/testify/require" - - abci "github.com/cometbft/cometbft/abci/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" host "github.com/cosmos/ibc-go/v7/modules/core/24-host" ibctesting "github.com/cosmos/ibc-go/v7/testing" + "github.com/stretchr/testify/require" + + abci "github.com/cometbft/cometbft/abci/types" ) const ChainIDPrefix = "testchain" @@ -34,6 +33,7 @@ type Coordinator struct { // NewCoordinator initializes Coordinator with N TestChain's func NewCoordinator(t *testing.T, n int, opts ...[]wasmkeeper.Option) *Coordinator { + t.Helper() chains := make(map[string]*TestChain) coord := &Coordinator{ t: t, @@ -210,7 +210,7 @@ func (coord *Coordinator) CommitNBlocks(chain *TestChain, n uint64) { // ConnOpenInitOnBothChains initializes a connection on both endpoints with the state INIT // using the OpenInit handshake call. -func (coord *Coordinator) ConnOpenInitOnBothChains(path *Path) error { +func (*Coordinator) ConnOpenInitOnBothChains(path *Path) error { if err := path.EndpointA.ConnOpenInit(); err != nil { return err } @@ -232,7 +232,7 @@ func (coord *Coordinator) ConnOpenInitOnBothChains(path *Path) error { // ChanOpenInitOnBothChains initializes a channel on the source chain and counterparty chain // with the state INIT using the OpenInit handshake call. -func (coord *Coordinator) ChanOpenInitOnBothChains(path *Path) error { +func (*Coordinator) ChanOpenInitOnBothChains(path *Path) error { // 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. diff --git a/x/feeabs/ibctesting/endpoint.go b/x/feeabs/ibctesting/endpoint.go index b7f77942..98ffe4de 100644 --- a/x/feeabs/ibctesting/endpoint.go +++ b/x/feeabs/ibctesting/endpoint.go @@ -3,8 +3,6 @@ package ibctesting import ( "fmt" - "github.com/stretchr/testify/require" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" connectiontypes "github.com/cosmos/ibc-go/v7/modules/core/03-connection/types" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" @@ -13,6 +11,7 @@ import ( "github.com/cosmos/ibc-go/v7/modules/core/exported" ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" ibctesting "github.com/cosmos/ibc-go/v7/testing" + "github.com/stretchr/testify/require" ) // Endpoint is a which represents a channel endpoint and its associated diff --git a/x/feeabs/ibctesting/event_utils.go b/x/feeabs/ibctesting/event_utils.go index 2f1c82af..b33e3968 100644 --- a/x/feeabs/ibctesting/event_utils.go +++ b/x/feeabs/ibctesting/event_utils.go @@ -4,10 +4,10 @@ import ( "strconv" "strings" - abci "github.com/cometbft/cometbft/abci/types" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + + abci "github.com/cometbft/cometbft/abci/types" ) func getSendPackets(evts []abci.Event) []channeltypes.Packet { diff --git a/x/feeabs/ibctesting/wasm.go b/x/feeabs/ibctesting/wasm.go index 67f9c55e..3ca05b9d 100644 --- a/x/feeabs/ibctesting/wasm.go +++ b/x/feeabs/ibctesting/wasm.go @@ -4,14 +4,14 @@ import ( "fmt" "github.com/CosmWasm/wasmd/x/wasm/types" - feeabs "github.com/osmosis-labs/fee-abstraction/v7/app" + ibctesting "github.com/cosmos/ibc-go/v7/testing" "github.com/stretchr/testify/require" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cometbft/cometbft/libs/rand" - ibctesting "github.com/cosmos/ibc-go/v7/testing" + feeabs "github.com/osmosis-labs/fee-abstraction/v7/app" ) var wasmIdent = []byte("\x00\x61\x73\x6D") diff --git a/x/feeabs/keeper/abci.go b/x/feeabs/keeper/abci.go index c2d76542..78995ed0 100644 --- a/x/feeabs/keeper/abci.go +++ b/x/feeabs/keeper/abci.go @@ -4,10 +4,10 @@ import ( "fmt" "time" - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" - "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) // BeginBlocker of epochs module. diff --git a/x/feeabs/keeper/config.go b/x/feeabs/keeper/config.go index bf0e6a04..50d70fdf 100644 --- a/x/feeabs/keeper/config.go +++ b/x/feeabs/keeper/config.go @@ -1,11 +1,11 @@ package keeper import ( - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" - sdkerrors "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) func (keeper Keeper) HasHostZoneConfig(ctx sdk.Context, ibcDenom string) bool { diff --git a/x/feeabs/keeper/epoch.go b/x/feeabs/keeper/epoch.go index 45da06a3..49426665 100644 --- a/x/feeabs/keeper/epoch.go +++ b/x/feeabs/keeper/epoch.go @@ -5,9 +5,10 @@ import ( "time" proto "github.com/cosmos/gogoproto/proto" - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) // HasEpochInfo return true if has epoch info diff --git a/x/feeabs/keeper/exchange_rate.go b/x/feeabs/keeper/exchange_rate.go index ba0183f6..6a26c67e 100644 --- a/x/feeabs/keeper/exchange_rate.go +++ b/x/feeabs/keeper/exchange_rate.go @@ -1,11 +1,11 @@ package keeper import ( - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" - sdkerrors "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) // GetTwapRate return Twap Price of ibcDenom diff --git a/x/feeabs/keeper/genesis.go b/x/feeabs/keeper/genesis.go index e5d39a37..01363bcb 100644 --- a/x/feeabs/keeper/genesis.go +++ b/x/feeabs/keeper/genesis.go @@ -1,9 +1,9 @@ package keeper import ( - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" - sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) // InitGenesis initializes the incentives module's state from a provided genesis state. diff --git a/x/feeabs/keeper/genesis_test.go b/x/feeabs/keeper/genesis_test.go index 3653df43..f2f71978 100644 --- a/x/feeabs/keeper/genesis_test.go +++ b/x/feeabs/keeper/genesis_test.go @@ -4,9 +4,10 @@ import ( "testing" "time" + "github.com/stretchr/testify/require" + apphelpers "github.com/osmosis-labs/fee-abstraction/v7/app/helpers" "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" - "github.com/stretchr/testify/require" ) var now = time.Now().UTC() diff --git a/x/feeabs/keeper/grpc_query.go b/x/feeabs/keeper/grpc_query.go index 0d60b010..1dbc9242 100644 --- a/x/feeabs/keeper/grpc_query.go +++ b/x/feeabs/keeper/grpc_query.go @@ -3,11 +3,12 @@ package keeper import ( "context" - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) var _ types.QueryServer = Querier{} diff --git a/x/feeabs/keeper/grpc_query_test.go b/x/feeabs/keeper/grpc_query_test.go index ee0a71dd..68415c33 100644 --- a/x/feeabs/keeper/grpc_query_test.go +++ b/x/feeabs/keeper/grpc_query_test.go @@ -4,9 +4,9 @@ import ( "math/rand" "time" - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" - sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) var letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") diff --git a/x/feeabs/keeper/host_zone_test.go b/x/feeabs/keeper/host_zone_test.go index 1386fd00..a0622add 100644 --- a/x/feeabs/keeper/host_zone_test.go +++ b/x/feeabs/keeper/host_zone_test.go @@ -3,12 +3,13 @@ package keeper_test import ( "testing" - apphelpers "github.com/osmosis-labs/fee-abstraction/v7/app/helpers" - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/stretchr/testify/require" sdk "github.com/cosmos/cosmos-sdk/types" + + apphelpers "github.com/osmosis-labs/fee-abstraction/v7/app/helpers" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) func createNHostZone(t *testing.T, keeper *keeper.Keeper, ctx sdk.Context, n int) []types.HostChainFeeAbsConfig { diff --git a/x/feeabs/keeper/ibc.go b/x/feeabs/keeper/ibc.go index 64c8dfdd..d913ad9a 100644 --- a/x/feeabs/keeper/ibc.go +++ b/x/feeabs/keeper/ibc.go @@ -4,7 +4,10 @@ import ( "fmt" "time" - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" + transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + host "github.com/cosmos/ibc-go/v7/modules/core/24-host" sdkerrors "cosmossdk.io/errors" @@ -13,10 +16,7 @@ import ( abci "github.com/cometbft/cometbft/abci/types" - transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - host "github.com/cosmos/ibc-go/v7/modules/core/24-host" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) // GetPort returns the portID for the module. Used in ExportGenesis. @@ -131,11 +131,11 @@ func (k Keeper) OnAcknowledgementPacket(ctx sdk.Context, ack channeltypes.Acknow return false } // Get icq QueryArithmeticTwapToNowRequest response - IcqRes := ICQResponses[index] + icqRes := ICQResponses[index] index++ - if IcqRes.Code != 0 { - k.Logger(ctx).Error(fmt.Sprintf("Failed to send interchain query code %d", IcqRes.Code)) + if icqRes.Code != 0 { + k.Logger(ctx).Error(fmt.Sprintf("Failed to send interchain query code %d", icqRes.Code)) err := k.FrozenHostZoneByIBCDenom(ctx, hostZoneConfig.IbcDenom) if err != nil { k.Logger(ctx).Error(fmt.Sprintf("Failed to frozen host zone %s", err.Error())) @@ -143,7 +143,7 @@ func (k Keeper) OnAcknowledgementPacket(ctx sdk.Context, ack channeltypes.Acknow return false } - twapRate, err := k.GetDecTWAPFromBytes(IcqRes.Value) + twapRate, err := k.GetDecTWAPFromBytes(icqRes.Value) if err != nil { k.Logger(ctx).Error("Failed to get twap") return false diff --git a/x/feeabs/keeper/keeper.go b/x/feeabs/keeper/keeper.go index 168dff8b..73a7f81d 100644 --- a/x/feeabs/keeper/keeper.go +++ b/x/feeabs/keeper/keeper.go @@ -3,7 +3,8 @@ package keeper import ( "fmt" - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" + ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" "github.com/cosmos/cosmos-sdk/codec" storetypes "github.com/cosmos/cosmos-sdk/store/types" @@ -14,8 +15,7 @@ import ( "github.com/cometbft/cometbft/libs/log" - ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) type Keeper struct { @@ -114,7 +114,7 @@ func (k Keeper) verifyIBCCoins(ctx sdk.Context, ibcCoins sdk.Coins) error { return fmt.Errorf("unallowed %s for tx fee", ibcCoins[0].Denom) } -func (k Keeper) Logger(ctx sdk.Context) log.Logger { +func (Keeper) Logger(ctx sdk.Context) log.Logger { return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) } diff --git a/x/feeabs/keeper/keeper_test.go b/x/feeabs/keeper/keeper_test.go index 74cdcde2..39bad28e 100644 --- a/x/feeabs/keeper/keeper_test.go +++ b/x/feeabs/keeper/keeper_test.go @@ -4,10 +4,6 @@ import ( "fmt" "testing" - "github.com/osmosis-labs/fee-abstraction/v7/app" - apphelpers "github.com/osmosis-labs/fee-abstraction/v7/app/helpers" - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/stretchr/testify/suite" "github.com/cosmos/cosmos-sdk/baseapp" @@ -16,6 +12,11 @@ import ( tmrand "github.com/cometbft/cometbft/libs/rand" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" + + "github.com/osmosis-labs/fee-abstraction/v7/app" + apphelpers "github.com/osmosis-labs/fee-abstraction/v7/app/helpers" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) type KeeperTestSuite struct { @@ -31,20 +32,20 @@ type KeeperTestSuite struct { var valTokens = sdk.TokensFromConsensusPower(42, sdk.DefaultPowerReduction) -func (suite *KeeperTestSuite) SetupTest() { - suite.feeAbsApp = apphelpers.Setup(suite.T(), false, 1) - suite.ctx = suite.feeAbsApp.BaseApp.NewContext(false, tmproto.Header{ +func (s *KeeperTestSuite) SetupTest() { + s.feeAbsApp = apphelpers.Setup(s.T(), false, 1) + s.ctx = s.feeAbsApp.BaseApp.NewContext(false, tmproto.Header{ ChainID: fmt.Sprintf("test-chain-%s", tmrand.Str(4)), Height: 1, }) - suite.feeAbsKeeper = suite.feeAbsApp.FeeabsKeeper - suite.govKeeper = suite.feeAbsApp.GovKeeper + s.feeAbsKeeper = s.feeAbsApp.FeeabsKeeper + s.govKeeper = s.feeAbsApp.GovKeeper - queryHelper := baseapp.NewQueryServerTestHelper(suite.ctx, suite.feeAbsApp.InterfaceRegistry()) - types.RegisterQueryServer(queryHelper, keeper.NewQuerier(suite.feeAbsKeeper)) - suite.queryClient = types.NewQueryClient(queryHelper) + queryHelper := baseapp.NewQueryServerTestHelper(s.ctx, s.feeAbsApp.InterfaceRegistry()) + types.RegisterQueryServer(queryHelper, keeper.NewQuerier(s.feeAbsKeeper)) + s.queryClient = types.NewQueryClient(queryHelper) - suite.msgServer = keeper.NewMsgServerImpl(suite.feeAbsKeeper) + s.msgServer = keeper.NewMsgServerImpl(s.feeAbsKeeper) } func TestKeeperTestSuite(t *testing.T) { diff --git a/x/feeabs/keeper/msgserver.go b/x/feeabs/keeper/msgserver.go index 2734f23c..82fd5716 100644 --- a/x/feeabs/keeper/msgserver.go +++ b/x/feeabs/keeper/msgserver.go @@ -3,9 +3,9 @@ package keeper import ( "context" - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" - sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) type msgServer struct { diff --git a/x/feeabs/keeper/proposal.go b/x/feeabs/keeper/proposal.go index da7f6348..49a7a464 100644 --- a/x/feeabs/keeper/proposal.go +++ b/x/feeabs/keeper/proposal.go @@ -1,9 +1,9 @@ package keeper import ( - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" - sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) func (k Keeper) AddHostZoneProposal(ctx sdk.Context, p *types.AddHostZoneProposal) error { diff --git a/x/feeabs/keeper/proposal_test.go b/x/feeabs/keeper/proposal_test.go index 886c953d..caeeea8e 100644 --- a/x/feeabs/keeper/proposal_test.go +++ b/x/feeabs/keeper/proposal_test.go @@ -1,14 +1,14 @@ package keeper_test import ( - apphelpers "github.com/osmosis-labs/fee-abstraction/v7/app/helpers" - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" - simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" govv1types "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + + apphelpers "github.com/osmosis-labs/fee-abstraction/v7/app/helpers" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) func (suite *KeeperTestSuite) TestAddHostZoneProposal() { diff --git a/x/feeabs/module.go b/x/feeabs/module.go index 54abcaff..ac5c9e32 100644 --- a/x/feeabs/module.go +++ b/x/feeabs/module.go @@ -7,9 +7,6 @@ import ( "github.com/gorilla/mux" "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/client/cli" - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/spf13/cobra" "github.com/cosmos/cosmos-sdk/client" @@ -19,6 +16,10 @@ import ( "github.com/cosmos/cosmos-sdk/types/module" abci "github.com/cometbft/cometbft/abci/types" + + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/client/cli" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) var ( @@ -51,7 +52,7 @@ func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { } // RegisterInterfaces registers the module interface -func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { +func (AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { types.RegisterInterfaces(reg) } @@ -82,7 +83,7 @@ func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, serveM } // GetTxCmd returns the feeabs module's root tx command. -func (a AppModuleBasic) GetTxCmd() *cobra.Command { +func (AppModuleBasic) GetTxCmd() *cobra.Command { return cli.NewTxCmd() } @@ -114,12 +115,12 @@ func NewAppModule( } // Name return the feeabs module name -func (am AppModule) Name() string { +func (AppModule) Name() string { return types.ModuleName } // RegisterInvariants registers the feeabs module invariants. -func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} +func (AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} // RegisterServices registers a GRPC query service to respond to the // module-specific GRPC queries. diff --git a/x/feeabs/proposal_handler.go b/x/feeabs/proposal_handler.go index 68d92924..a160c6b3 100644 --- a/x/feeabs/proposal_handler.go +++ b/x/feeabs/proposal_handler.go @@ -1,16 +1,16 @@ package feeabs import ( - cli "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/client/cli" - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" - sdkerrors "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" errorstypes "github.com/cosmos/cosmos-sdk/types/errors" govclient "github.com/cosmos/cosmos-sdk/x/gov/client" v1beta1types "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" + + cli "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/client/cli" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) var ( diff --git a/x/feeabs/relay_test.go b/x/feeabs/relay_test.go index 842947ab..5a5920b9 100644 --- a/x/feeabs/relay_test.go +++ b/x/feeabs/relay_test.go @@ -7,7 +7,10 @@ import ( "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" wasmvm "github.com/CosmWasm/wasmvm" wasmvmtypes "github.com/CosmWasm/wasmvm/types" - wasmibctesting "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/ibctesting" + ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v7/testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -16,10 +19,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" - ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - ibctesting "github.com/cosmos/ibc-go/v7/testing" + wasmibctesting "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/ibctesting" ) func TestFromIBCTransferToContract(t *testing.T) { @@ -38,6 +38,7 @@ func TestFromIBCTransferToContract(t *testing.T) { "ack": { contract: &ackReceiverContract{}, setupContract: func(t *testing.T, contract wasmtesting.IBCContractCallbacks, chain *wasmibctesting.TestChain) { + t.Helper() c := contract.(*ackReceiverContract) c.t = t c.chain = chain @@ -167,27 +168,27 @@ func (c *ackReceiverContract) IBCPacketAck(codeID wasmvm.Checksum, env wasmvmtyp // simple helper struct that implements connection setup methods. type contractStub struct{} -func (s *contractStub) IBCChannelOpen(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCChannelOpenMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBC3ChannelOpenResponse, uint64, error) { +func (*contractStub) IBCChannelOpen(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCChannelOpenMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBC3ChannelOpenResponse, uint64, error) { return &wasmvmtypes.IBC3ChannelOpenResponse{}, 0, nil } -func (s *contractStub) IBCChannelConnect(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCChannelConnectMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResponse, uint64, error) { +func (*contractStub) IBCChannelConnect(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCChannelConnectMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResponse, uint64, error) { return &wasmvmtypes.IBCBasicResponse{}, 0, nil } -func (s *contractStub) IBCChannelClose(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCChannelCloseMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResponse, uint64, error) { +func (*contractStub) IBCChannelClose(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCChannelCloseMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResponse, uint64, error) { panic("implement me") } -func (s *contractStub) IBCPacketReceive(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCPacketReceiveMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCReceiveResult, uint64, error) { +func (*contractStub) IBCPacketReceive(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCPacketReceiveMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCReceiveResult, uint64, error) { panic("implement me") } -func (s *contractStub) IBCPacketAck(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCPacketAckMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResponse, uint64, error) { +func (*contractStub) IBCPacketAck(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCPacketAckMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResponse, uint64, error) { return &wasmvmtypes.IBCBasicResponse{}, 0, nil } -func (s *contractStub) IBCPacketTimeout(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCPacketTimeoutMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResponse, uint64, error) { +func (*contractStub) IBCPacketTimeout(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCPacketTimeoutMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResponse, uint64, error) { panic("implement me") } diff --git a/x/feeabs/spec/01_concepts.md b/x/feeabs/spec/01_concepts.md index 6c7d067c..f137568f 100644 --- a/x/feeabs/spec/01_concepts.md +++ b/x/feeabs/spec/01_concepts.md @@ -10,6 +10,7 @@ The concrete use cases which motivated this module include: Fee abstraction modules enable users on any Cosmos chain with IBC connections to pay fee using ibc token. Fee-abs implementation: - - Fee-abs module imported to the customer chain. -The implememtation also uses Osmosis swap router and async-icq module which are already deployed on Osmosis testnet. +- Fee-abs module imported to the customer chain. + +The implememtation also uses Osmosis swap router and async-icq module which are already deployed on Osmosis testnet. diff --git a/x/feeabs/spec/02_state.md b/x/feeabs/spec/02_state.md index e205d13d..228b5b88 100644 --- a/x/feeabs/spec/02_state.md +++ b/x/feeabs/spec/02_state.md @@ -1,4 +1,4 @@ -# State +# State ## OsmosisTwapExchangeRate diff --git a/x/feeabs/spec/03_epoch.md b/x/feeabs/spec/03_epoch.md index 07e60572..3f784753 100644 --- a/x/feeabs/spec/03_epoch.md +++ b/x/feeabs/spec/03_epoch.md @@ -6,4 +6,4 @@ The `QueryArithmeticTwapToNowRequest` packet is used to request Time-Weighted Av The `SwapIBCToken` packet is for a feature of the fee abstraction module which allows for the transfer of IBC fees to the Osmosis cross-swap contract. The module account will then receive the native token associated with the fee.. -Both these packets are scheduled by the fee abstraction module in accordance with the Osmosis epoch. This allows for efficient and timely transfer of data and tokens. \ No newline at end of file +Both these packets are scheduled by the fee abstraction module in accordance with the Osmosis epoch. This allows for efficient and timely transfer of data and tokens. diff --git a/x/feeabs/spec/07_ibc.md b/x/feeabs/spec/07_ibc.md index 87e8efd4..ad46b77f 100644 --- a/x/feeabs/spec/07_ibc.md +++ b/x/feeabs/spec/07_ibc.md @@ -6,17 +6,17 @@ A Ibc-token/Native-token TWAP pair is achieved by using the `QueryArithmeticTwap ```go type QueryArithmeticTwapToNowRequest struct { - PoolId uint64 - BaseAsset string - QuoteAsset string - StartTime time.Time + PoolId uint64 + BaseAsset string + QuoteAsset string + StartTime time.Time } ``` ```go type InterchainQueryPacketData struct { - Data []byte - Memo string + Data []byte + Memo string } ``` @@ -32,14 +32,14 @@ Feeabs module exchange Ibc token to native token using the `SwapCrossChain` whic ```go type MsgTransfer struct { - SourcePort string - SourceChannel string - Token types.Coin - Sender string - Receiver string - TimeoutHeight types1.Height - TimeoutTimestamp uint64 - Memo string + SourcePort string + SourceChannel string + Token types.Coin + Sender string + Receiver string + TimeoutHeight types1.Height + TimeoutTimestamp uint64 + Memo string } ``` @@ -62,16 +62,17 @@ These 2 case are defined in the `IsOsmosis` field in `HostChainFeeAbsConfig` ```go type HostChainFeeAbsConfig struct { - IbcDenom string - OsmosisPoolTokenDenomIn string - MiddlewareAddress string - IbcTransferChannel string - HostZoneIbcTransferChannel string - CrosschainSwapAddress string - PoolId uint64 - IsOsmosis bool - Frozen bool - OsmosisQueryChannel string + IbcDenom string + OsmosisPoolTokenDenomIn string + MiddlewareAddress string + IbcTransferChannel string + HostZoneIbcTransferChannel string + CrosschainSwapAddress string + PoolId uint64 + IsOsmosis bool + Frozen bool + OsmosisQueryChannel string } ``` -Note: These 2 Ibc message only open for testing version. In the product version, user can't manual send these 2 message instead, feeabs module will automatic send every epoch to update the TWAP and swap ibc-token to native-token. \ No newline at end of file + +Note: These 2 Ibc message only open for testing version. In the product version, user can't manual send these 2 message instead, feeabs module will automatic send every epoch to update the TWAP and swap ibc-token to native-token. diff --git a/x/feeabs/spec/Integration.md b/x/feeabs/spec/Integration.md index 772ac3ad..ed60e05f 100644 --- a/x/feeabs/spec/Integration.md +++ b/x/feeabs/spec/Integration.md @@ -99,8 +99,6 @@ app.moduleManager.SetOrderInitGenesis( ) ``` - - ## Modified Fee Deduct Antehandler When making a transaction, usually users need to pay fees in the native token, but "fee abstraction" allows them to pay fees in other tokens. @@ -109,7 +107,6 @@ To allow for this, we use modified versions of `MempoolFeeDecorator` and `Deduct If a blockchain uses the Fee Abstraction module, it is necessary to replace the MempoolFeeDecorator and `DeductFeeDecorate` with the `FeeAbstrationMempoolFeeDecorator` and `FeeAbstractionDeductFeeDecorate`, respectively. - Example : ``` diff --git a/x/feeabs/spec/README.md b/x/feeabs/spec/README.md index f0539b08..f6149d54 100644 --- a/x/feeabs/spec/README.md +++ b/x/feeabs/spec/README.md @@ -14,4 +14,3 @@ The `Feeabs` module fetches Osmosis [twap](https://github.com/osmosis-labs/osmos 4. **[Events](04_events.md)** 5. **[Parameters](05_params.md)** 6. **[Integration](Integration.md)** - diff --git a/x/feeabs/types/build_memo_test.go b/x/feeabs/types/build_memo_test.go index 2e13be18..0ec42698 100644 --- a/x/feeabs/types/build_memo_test.go +++ b/x/feeabs/types/build_memo_test.go @@ -3,8 +3,9 @@ package types_test import ( "testing" - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) // TODO: need to refactor this test, use driven table diff --git a/x/feeabs/types/expected_keepers.go b/x/feeabs/types/expected_keepers.go index 0a36989e..488bc425 100644 --- a/x/feeabs/types/expected_keepers.go +++ b/x/feeabs/types/expected_keepers.go @@ -1,14 +1,14 @@ package types import ( - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/auth/types" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" connectiontypes "github.com/cosmos/ibc-go/v7/modules/core/03-connection/types" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/auth/types" + capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" ) // AccountKeeper defines the expected account keeper used for simulations (noalias) diff --git a/x/feeabs/types/proposal.go b/x/feeabs/types/proposal.go index b68691ee..713b93ec 100644 --- a/x/feeabs/types/proposal.go +++ b/x/feeabs/types/proposal.go @@ -55,10 +55,10 @@ func (ahzp *AddHostZoneProposal) GetTitle() string { return ahzp.Title } func (ahzp *AddHostZoneProposal) GetDescription() string { return ahzp.Description } // ProposalRoute returns the routing key of a client update proposal. -func (ahzp *AddHostZoneProposal) ProposalRoute() string { return RouterKey } +func (*AddHostZoneProposal) ProposalRoute() string { return RouterKey } // ProposalType returns the type of a client update proposal. -func (ahzp *AddHostZoneProposal) ProposalType() string { return ProposalTypeAddHostZone } +func (*AddHostZoneProposal) ProposalType() string { return ProposalTypeAddHostZone } // ValidateBasic runs basic stateless validity checks func (ahzp *AddHostZoneProposal) ValidateBasic() error { @@ -79,10 +79,10 @@ func (dhzp *DeleteHostZoneProposal) GetTitle() string { return dhzp.Title } func (dhzp *DeleteHostZoneProposal) GetDescription() string { return dhzp.Description } // ProposalRoute returns the routing key of a client update proposal. -func (dhzp *DeleteHostZoneProposal) ProposalRoute() string { return RouterKey } +func (*DeleteHostZoneProposal) ProposalRoute() string { return RouterKey } // ProposalType returns the type of a client update proposal. -func (dhzp *DeleteHostZoneProposal) ProposalType() string { return ProposalTypeDeleteHostZone } +func (*DeleteHostZoneProposal) ProposalType() string { return ProposalTypeDeleteHostZone } // ValidateBasic runs basic stateless validity checks func (dhzp *DeleteHostZoneProposal) ValidateBasic() error { @@ -103,10 +103,10 @@ func (shzp *SetHostZoneProposal) GetTitle() string { return shzp.Title } func (shzp *SetHostZoneProposal) GetDescription() string { return shzp.Description } // ProposalRoute returns the routing key of a client update proposal. -func (shzp *SetHostZoneProposal) ProposalRoute() string { return RouterKey } +func (*SetHostZoneProposal) ProposalRoute() string { return RouterKey } // ProposalType returns the type of a client update proposal. -func (shzp *SetHostZoneProposal) ProposalType() string { return ProposalTypeSetHostZone } +func (*SetHostZoneProposal) ProposalType() string { return ProposalTypeSetHostZone } // ValidateBasic runs basic stateless validity checks func (shzp *SetHostZoneProposal) ValidateBasic() error { From 1b9b0f2f867f0c511ea9853de5db540cd954155f Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 12 Aug 2023 15:45:24 +0800 Subject: [PATCH 37/90] bare returns --- README.md | 14 ++++++--- app/test_helpers.go | 23 +++++++++++--- x/feeabs/ibctesting/endpoint.go | 2 +- x/feeabs/keeper/config.go | 48 +++++++++++++++--------------- x/feeabs/keeper/grpc_query_test.go | 42 +++++++++++++------------- x/feeabs/keeper/ibc.go | 12 ++++---- x/feeabs/keeper/proposal_test.go | 30 +++++++++---------- 7 files changed, 96 insertions(+), 75 deletions(-) diff --git a/README.md b/README.md index eee5b8b7..de98c53f 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ For this to work, we first has to set up an ibc channel from `feeabs` to `async- The process of pulling Twap data and update exchange rate : -![](https://i.imgur.com/HJ9a26H.png) +![Diagram of the process of pulling Twap data and updating exchange rate](https://i.imgur.com/HJ9a26H.png "Diagram of the process of pulling Twap data and updating exchange rate") Description : For every `update exchange rate period`, at fee-abs `BeginBlocker()` we submit a `InterchainQueryPacketData` which wrapped `QueryArithmeticTwapToNowRequest` to the querying channel on the customer chain's end. Then relayers will submit `MsgReceivePacket` so that our `QueryTwapPacket` which will be routed to `async-icq` module to be processed. `async-icq` module then unpack `InterchainQueryPacketData` and send query to TWAP module. The correspone response will be wrapped in the ibc acknowledgement. Relayers then submit `MsgAcknowledgement` to the customer chain so that the ibc acknowledgement is routed to fee-abs to be processed. Fee-abs then update exchange rate according to the Twap wrapped in the ibc acknowledgement. @@ -65,7 +65,7 @@ Fee-abstraction will use osmosis's Cross chain Swap (XCS) feature to do this. We Ex: When you sent STARS on Hub to Osmosis, you will get Osmosis(Hub(STARS)) which is different with STARS on Osmosis Osmosis(STARS). It will reverse back Osmosis(Hub(STARS)) to Osmosis(STARS): -![](https://i.imgur.com/D1wSrMm.png) +![Diagram of the process of swapping accumulated ibc-tokens fee](https://i.imgur.com/D1wSrMm.png "Diagram of the process of swapping accumulated ibc-tokens fee") ###### Swap Ibc-token @@ -74,9 +74,15 @@ After reverse the ibc-token, XCS will : - Swap with the specific pool (which is defined in the transfer packet from Feeabs-chain) to get Feeabs-chain native-token - Transfer back Feeabs-chain native-token to Feeabs module account (will use to pay fee for other transaction) -![](https://i.imgur.com/YKOK8mr.png) +![Diagram of the process of swapping accumulated ibc-tokens fee](https://i.imgur.com/YKOK8mr.png "Diagram of the process of swapping accumulated ibc-tokens fee") -Current version of fee-abstraction working with XCSv2 +## Resources + +- Main repo: + +## Resources + +- Main repo: ## Resources diff --git a/app/test_helpers.go b/app/test_helpers.go index 4bc6e586..7d50f6a3 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -232,9 +232,16 @@ func createIncrementalAccounts(accNum int) []sdk.AccAddress { // start at 100 so we can make up to 999 test addresses with valid test addresses for i := 100; i < (accNum + 100); i++ { numString := strconv.Itoa(i) - buffer.WriteString("A58856F0FD53BF058B4909A21AEC019107BA6") // base address string + _, err := buffer.WriteString("A58856F0FD53BF058B4909A21AEC019107BA6") // base address string + if err != nil { + panic(err) + } + + _, err = buffer.WriteString(numString) // adding on final two digits to make addresses unique + if err != nil { + panic(err) + } - buffer.WriteString(numString) // adding on final two digits to make addresses unique res, err := sdk.AccAddressFromHexUnsafe(buffer.String()) if err != nil { panic(err) @@ -471,8 +478,16 @@ func CreateTestPubKeys(numPubKeys int) []cryptotypes.PubKey { // start at 10 to avoid changing 1 to 01, 2 to 02, etc for i := 100; i < (numPubKeys + 100); i++ { numString := strconv.Itoa(i) - buffer.WriteString("0B485CFC0EECC619440448436F8FC9DF40566F2369E72400281454CB552AF") // base pubkey string - buffer.WriteString(numString) // adding on final two digits to make pubkeys unique + _, err := buffer.WriteString("0B485CFC0EECC619440448436F8FC9DF40566F2369E72400281454CB552AF") // base pubkey string + if err != nil { + panic(err) + } + + _, err = buffer.WriteString(numString) // adding on final two digits to make pubkeys unique + if err != nil { + panic(err) + } + publicKeys = append(publicKeys, NewPubKeyFromHex(buffer.String())) buffer.Reset() } diff --git a/x/feeabs/ibctesting/endpoint.go b/x/feeabs/ibctesting/endpoint.go index 98ffe4de..9b47e815 100644 --- a/x/feeabs/ibctesting/endpoint.go +++ b/x/feeabs/ibctesting/endpoint.go @@ -236,7 +236,7 @@ func (endpoint *Endpoint) QueryConnectionHandshakeProof() ( connectionKey := host.ConnectionKey(endpoint.Counterparty.ConnectionID) proofConnection, _ = endpoint.Counterparty.QueryProofAtHeight(connectionKey, proofHeight.GetRevisionHeight()) - return + return clientState, proofClient, proofConsensus, consensusHeight, proofConnection, proofHeight } // ChanOpenInit will construct and execute a MsgChannelOpenInit on the associated endpoint. diff --git a/x/feeabs/keeper/config.go b/x/feeabs/keeper/config.go index 50d70fdf..e922e651 100644 --- a/x/feeabs/keeper/config.go +++ b/x/feeabs/keeper/config.go @@ -8,31 +8,31 @@ import ( "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) -func (keeper Keeper) HasHostZoneConfig(ctx sdk.Context, ibcDenom string) bool { - store := ctx.KVStore(keeper.storeKey) +func (k Keeper) HasHostZoneConfig(ctx sdk.Context, ibcDenom string) bool { + store := ctx.KVStore(k.storeKey) key := types.GetKeyHostZoneConfig(ibcDenom) return store.Has(key) } -func (keeper Keeper) GetHostZoneConfig(ctx sdk.Context, ibcDenom string) (chainConfig types.HostChainFeeAbsConfig, err error) { - store := ctx.KVStore(keeper.storeKey) +func (k Keeper) GetHostZoneConfig(ctx sdk.Context, ibcDenom string) (chainConfig types.HostChainFeeAbsConfig, err error) { + store := ctx.KVStore(k.storeKey) key := types.GetKeyHostZoneConfig(ibcDenom) bz := store.Get(key) - err = keeper.cdc.Unmarshal(bz, &chainConfig) + err = k.cdc.Unmarshal(bz, &chainConfig) if err != nil { return types.HostChainFeeAbsConfig{}, err } - return + return chainConfig, nil } -func (keeper Keeper) SetHostZoneConfig(ctx sdk.Context, ibcDenom string, chainConfig types.HostChainFeeAbsConfig) error { - store := ctx.KVStore(keeper.storeKey) +func (k Keeper) SetHostZoneConfig(ctx sdk.Context, ibcDenom string, chainConfig types.HostChainFeeAbsConfig) error { + store := ctx.KVStore(k.storeKey) key := types.GetKeyHostZoneConfig(ibcDenom) - bz, err := keeper.cdc.Marshal(&chainConfig) + bz, err := k.cdc.Marshal(&chainConfig) if err != nil { return err } @@ -41,16 +41,16 @@ func (keeper Keeper) SetHostZoneConfig(ctx sdk.Context, ibcDenom string, chainCo return nil } -func (keeper Keeper) DeleteHostZoneConfig(ctx sdk.Context, ibcDenom string) error { - store := ctx.KVStore(keeper.storeKey) +func (k Keeper) DeleteHostZoneConfig(ctx sdk.Context, ibcDenom string) error { + store := ctx.KVStore(k.storeKey) key := types.GetKeyHostZoneConfig(ibcDenom) store.Delete(key) return nil } // use iterator -func (keeper Keeper) GetAllHostZoneConfig(ctx sdk.Context) (allChainConfigs []types.HostChainFeeAbsConfig, err error) { - keeper.IterateHostZone(ctx, func(hostZoneConfig types.HostChainFeeAbsConfig) (stop bool) { +func (k Keeper) GetAllHostZoneConfig(ctx sdk.Context) (allChainConfigs []types.HostChainFeeAbsConfig, err error) { + k.IterateHostZone(ctx, func(hostZoneConfig types.HostChainFeeAbsConfig) (stop bool) { allChainConfigs = append(allChainConfigs, hostZoneConfig) return false }) @@ -58,34 +58,34 @@ func (keeper Keeper) GetAllHostZoneConfig(ctx sdk.Context) (allChainConfigs []ty return allChainConfigs, nil } -func (keeper Keeper) IteratorHostZone(ctx sdk.Context) sdk.Iterator { - store := ctx.KVStore(keeper.storeKey) +func (k Keeper) IteratorHostZone(ctx sdk.Context) sdk.Iterator { + store := ctx.KVStore(k.storeKey) return sdk.KVStorePrefixIterator(store, types.KeyHostChainChainConfig) } // IterateHostZone iterates over the hostzone . -func (keeper Keeper) IterateHostZone(ctx sdk.Context, cb func(hostZoneConfig types.HostChainFeeAbsConfig) (stop bool)) { - store := ctx.KVStore(keeper.storeKey) +func (k Keeper) IterateHostZone(ctx sdk.Context, cb func(hostZoneConfig types.HostChainFeeAbsConfig) (stop bool)) { + store := ctx.KVStore(k.storeKey) iterator := sdk.KVStorePrefixIterator(store, types.KeyHostChainChainConfig) defer iterator.Close() for ; iterator.Valid(); iterator.Next() { var hostZoneConfig types.HostChainFeeAbsConfig - keeper.cdc.MustUnmarshal(iterator.Value(), &hostZoneConfig) + k.cdc.MustUnmarshal(iterator.Value(), &hostZoneConfig) if cb(hostZoneConfig) { break } } } -func (keeper Keeper) FrozenHostZoneByIBCDenom(ctx sdk.Context, ibcDenom string) error { - hostChainConfig, err := keeper.GetHostZoneConfig(ctx, ibcDenom) +func (k Keeper) FrozenHostZoneByIBCDenom(ctx sdk.Context, ibcDenom string) error { + hostChainConfig, err := k.GetHostZoneConfig(ctx, ibcDenom) if err != nil { // TODO: registry the error here return sdkerrors.Wrapf(types.ErrHostZoneConfigNotFound, err.Error()) } hostChainConfig.Frozen = true - err = keeper.SetHostZoneConfig(ctx, ibcDenom, hostChainConfig) + err = k.SetHostZoneConfig(ctx, ibcDenom, hostChainConfig) if err != nil { return err } @@ -93,13 +93,13 @@ func (keeper Keeper) FrozenHostZoneByIBCDenom(ctx sdk.Context, ibcDenom string) return nil } -func (keeper Keeper) UnFrozenHostZoneByIBCDenom(ctx sdk.Context, ibcDenom string) error { - hostChainConfig, err := keeper.GetHostZoneConfig(ctx, ibcDenom) +func (k Keeper) UnFrozenHostZoneByIBCDenom(ctx sdk.Context, ibcDenom string) error { + hostChainConfig, err := k.GetHostZoneConfig(ctx, ibcDenom) if err != nil { return sdkerrors.Wrapf(types.ErrHostZoneConfigNotFound, err.Error()) } hostChainConfig.Frozen = false - err = keeper.SetHostZoneConfig(ctx, ibcDenom, hostChainConfig) + err = k.SetHostZoneConfig(ctx, ibcDenom, hostChainConfig) if err != nil { return err } diff --git a/x/feeabs/keeper/grpc_query_test.go b/x/feeabs/keeper/grpc_query_test.go index 68415c33..cef69a5c 100644 --- a/x/feeabs/keeper/grpc_query_test.go +++ b/x/feeabs/keeper/grpc_query_test.go @@ -11,10 +11,10 @@ import ( var letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") -func (suite *KeeperTestSuite) TestOsmosisArithmeticTwap() { - suite.SetupTest() +func (s *KeeperTestSuite) TestOsmosisArithmeticTwap() { + s.SetupTest() twapPrice := sdk.NewDec(1) - suite.feeAbsKeeper.SetTwapRate(suite.ctx, "denom", twapPrice) + s.feeAbsKeeper.SetTwapRate(s.ctx, "denom", twapPrice) for _, tc := range []struct { desc string @@ -41,22 +41,22 @@ func (suite *KeeperTestSuite) TestOsmosisArithmeticTwap() { }, } { tc := tc - suite.Run(tc.desc, func() { - goCtx := sdk.WrapSDKContext(suite.ctx) + s.Run(tc.desc, func() { + goCtx := sdk.WrapSDKContext(s.ctx) if !tc.shouldErr { - res, err := suite.queryClient.OsmosisArithmeticTwap(goCtx, tc.req) - suite.Require().NoError(err) - suite.Require().Equal(tc.res, res) + res, err := s.queryClient.OsmosisArithmeticTwap(goCtx, tc.req) + s.Require().NoError(err) + s.Require().Equal(tc.res, res) } else { - _, err := suite.queryClient.OsmosisArithmeticTwap(goCtx, tc.req) - suite.Require().Error(err) + _, err := s.queryClient.OsmosisArithmeticTwap(goCtx, tc.req) + s.Require().Error(err) } }) } } -func (suite *KeeperTestSuite) TestHostChainConfig() { - suite.SetupTest() +func (s *KeeperTestSuite) TestHostChainConfig() { + s.SetupTest() chainConfig := types.HostChainFeeAbsConfig{ IbcDenom: randStringRunes(10), @@ -64,8 +64,8 @@ func (suite *KeeperTestSuite) TestHostChainConfig() { PoolId: randUint64Num(), } - err := suite.feeAbsKeeper.SetHostZoneConfig(suite.ctx, chainConfig.IbcDenom, chainConfig) - suite.Require().NoError(err) + err := s.feeAbsKeeper.SetHostZoneConfig(s.ctx, chainConfig.IbcDenom, chainConfig) + s.Require().NoError(err) for _, tc := range []struct { desc string @@ -95,15 +95,15 @@ func (suite *KeeperTestSuite) TestHostChainConfig() { }, } { tc := tc - suite.Run(tc.desc, func() { - goCtx := sdk.WrapSDKContext(suite.ctx) + s.Run(tc.desc, func() { + goCtx := sdk.WrapSDKContext(s.ctx) if !tc.shouldErr { - res, err := suite.queryClient.HostChainConfig(goCtx, tc.req) - suite.Require().NoError(err) - suite.Require().Equal(tc.res, res) + res, err := s.queryClient.HostChainConfig(goCtx, tc.req) + s.Require().NoError(err) + s.Require().Equal(tc.res, res) } else { - _, err := suite.queryClient.HostChainConfig(goCtx, tc.req) - suite.Require().NoError(err) + _, err := s.queryClient.HostChainConfig(goCtx, tc.req) + s.Require().NoError(err) } }) } diff --git a/x/feeabs/keeper/ibc.go b/x/feeabs/keeper/ibc.go index d913ad9a..aed4d315 100644 --- a/x/feeabs/keeper/ibc.go +++ b/x/feeabs/keeper/ibc.go @@ -60,15 +60,15 @@ func (k Keeper) ClaimCapability(ctx sdk.Context, capability *capabilitytypes.Cap // Send request for query EstimateSwapExactAmountIn over IBC. Move to use TWAP. func (k Keeper) SendOsmosisQueryRequest(ctx sdk.Context, twapReqs []types.QueryArithmeticTwapToNowRequest, sourcePort, sourceChannel string) error { params := k.GetParams(ctx) - IcqReqs := make([]abci.RequestQuery, len(twapReqs)) + icqReqs := make([]abci.RequestQuery, len(twapReqs)) for i, req := range twapReqs { - IcqReqs[i] = abci.RequestQuery{ + icqReqs[i] = abci.RequestQuery{ Path: params.OsmosisQueryTwapPath, Data: k.cdc.MustMarshal(&req), } } - _, err := k.SendInterchainQuery(ctx, IcqReqs, sourcePort, sourceChannel) + _, err := k.SendInterchainQuery(ctx, icqReqs, sourcePort, sourceChannel) if err != nil { return err } @@ -111,7 +111,7 @@ func (k Keeper) OnAcknowledgementPacket(ctx sdk.Context, ack channeltypes.Acknow return sdkerrors.Wrap(err, "failed to unmarshal interchain query packet ack") } - ICQResponses, err := types.DeserializeCosmosResponse(ackData.Data) + icqResponses, err := types.DeserializeCosmosResponse(ackData.Data) if err != nil { return sdkerrors.Wrap(err, "could not deserialize data to cosmos response") } @@ -131,7 +131,7 @@ func (k Keeper) OnAcknowledgementPacket(ctx sdk.Context, ack channeltypes.Acknow return false } // Get icq QueryArithmeticTwapToNowRequest response - icqRes := ICQResponses[index] + icqRes := icqResponses[index] index++ if icqRes.Code != 0 { @@ -204,7 +204,7 @@ func (k Keeper) getQueryArithmeticTwapToNowRequest( return icqReqData, index, found } -func (k Keeper) GetChannelId(ctx sdk.Context) string { +func (k Keeper) GetChannelID(ctx sdk.Context) string { store := ctx.KVStore(k.storeKey) return string(store.Get(types.KeyChannelID)) } diff --git a/x/feeabs/keeper/proposal_test.go b/x/feeabs/keeper/proposal_test.go index caeeea8e..56c90941 100644 --- a/x/feeabs/keeper/proposal_test.go +++ b/x/feeabs/keeper/proposal_test.go @@ -11,9 +11,9 @@ import ( "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) -func (suite *KeeperTestSuite) TestAddHostZoneProposal() { - suite.SetupTest() - addrs := simtestutil.AddTestAddrs(suite.feeAbsApp.BankKeeper, suite.feeAbsApp.StakingKeeper, suite.ctx, 10, valTokens) +func (s *KeeperTestSuite) TestAddHostZoneProposal() { + s.SetupTest() + addrs := simtestutil.AddTestAddrs(s.feeAbsApp.BankKeeper, s.feeAbsApp.StakingKeeper, s.ctx, 10, valTokens) for _, tc := range []struct { desc string @@ -32,30 +32,30 @@ func (suite *KeeperTestSuite) TestAddHostZoneProposal() { }, } { tc := tc - suite.Run(tc.desc, func() { + s.Run(tc.desc, func() { proposal := apphelpers.AddHostZoneProposalFixture(func(p *types.AddHostZoneProposal) { p.HostChainConfig = &tc.hostChainConfig }) legacyProposal, err := govv1types.NewLegacyContent(proposal, authtypes.NewModuleAddress(govtypes.ModuleName).String()) - suite.Require().NoError(err) + s.Require().NoError(err) // store proposal - _, err = suite.govKeeper.SubmitProposal(suite.ctx, []sdk.Msg{legacyProposal}, "", "", "", addrs[0]) - suite.Require().NoError(err) + _, err = s.govKeeper.SubmitProposal(s.ctx, []sdk.Msg{legacyProposal}, "", "", "", addrs[0]) + s.Require().NoError(err) // execute proposal - handler := suite.govKeeper.LegacyRouter().GetRoute(proposal.ProposalRoute()) - err = handler(suite.ctx, proposal) - suite.Require().NoError(err) + handler := s.govKeeper.LegacyRouter().GetRoute(proposal.ProposalRoute()) + err = handler(s.ctx, proposal) + s.Require().NoError(err) - hostChainConfig, err := suite.feeAbsKeeper.GetHostZoneConfig(suite.ctx, tc.hostChainConfig.IbcDenom) - suite.Require().NoError(err) - suite.Require().Equal(tc.hostChainConfig, hostChainConfig) + hostChainConfig, err := s.feeAbsKeeper.GetHostZoneConfig(s.ctx, tc.hostChainConfig.IbcDenom) + s.Require().NoError(err) + s.Require().Equal(tc.hostChainConfig, hostChainConfig) // store proposal again and it should error - _, err = suite.govKeeper.SubmitProposal(suite.ctx, []sdk.Msg{legacyProposal}, "", "", "", addrs[0]) - suite.Require().Error(err) + _, err = s.govKeeper.SubmitProposal(s.ctx, []sdk.Msg{legacyProposal}, "", "", "", addrs[0]) + s.Require().Error(err) }) } } From cdaa3b7247686024c4c2c409b0421d9956f307bd Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 12 Aug 2023 15:51:37 +0800 Subject: [PATCH 38/90] fully lint fee abstraction --- x/feeabs/ibc_module.go | 16 ++++++++-------- x/feeabs/ibctesting/chain.go | 21 +++++++++++---------- x/feeabs/ibctesting/event_utils.go | 2 +- x/feeabs/keeper/abci.go | 4 ++-- x/feeabs/keeper/grpc_query_test.go | 4 ++-- x/feeabs/keeper/host_zone_test.go | 5 +++-- x/feeabs/keeper/ibc.go | 1 + x/feeabs/keeper/keeper.go | 9 +++++---- x/feeabs/module.go | 4 ++-- 9 files changed, 35 insertions(+), 31 deletions(-) diff --git a/x/feeabs/ibc_module.go b/x/feeabs/ibc_module.go index 0c8f2472..2dcff864 100644 --- a/x/feeabs/ibc_module.go +++ b/x/feeabs/ibc_module.go @@ -15,18 +15,18 @@ import ( errorstypes "github.com/cosmos/cosmos-sdk/types/errors" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" + feeabskeeper "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) // IBCModule implements the ICS26 interface for transfer given the transfer keeper. type IBCModule struct { cdc codec.Codec - keeper keeper.Keeper + keeper feeabskeeper.Keeper } // NewIBCModule creates a new IBCModule given the keeper -func NewIBCModule(cdc codec.Codec, k keeper.Keeper) IBCModule { +func NewIBCModule(cdc codec.Codec, k feeabskeeper.Keeper) IBCModule { return IBCModule{ cdc: cdc, keeper: k, @@ -60,7 +60,7 @@ func (am IBCModule) OnChanOpenInit( func ValidateChannelParams( ctx sdk.Context, - keeper keeper.Keeper, + keeper feeabskeeper.Keeper, order channeltypes.Order, portID string, channelID string, @@ -172,12 +172,12 @@ func (am IBCModule) OnAcknowledgementPacket( return sdkerrors.Wrapf(errorstypes.ErrUnknownRequest, "cannot unmarshal packet acknowledgement: %v", err) } - var IcqPacketData types.InterchainQueryPacketData - if err := types.ModuleCdc.UnmarshalJSON(packet.GetData(), &IcqPacketData); err != nil { + var icqPacketData types.InterchainQueryPacketData + if err := types.ModuleCdc.UnmarshalJSON(packet.GetData(), &icqPacketData); err != nil { return sdkerrors.Wrapf(errorstypes.ErrUnknownRequest, "cannot unmarshal packet data: %v", err) } - IcqReqs, err := types.DeserializeCosmosQuery(IcqPacketData.GetData()) + icqReqs, err := types.DeserializeCosmosQuery(icqPacketData.GetData()) if err != nil { am.keeper.Logger(ctx).Error(fmt.Sprintf("Failed to deserialize cosmos query %s", err.Error())) return err @@ -191,7 +191,7 @@ func (am IBCModule) OnAcknowledgementPacket( ), ) - if err := am.keeper.OnAcknowledgementPacket(ctx, ack, IcqReqs); err != nil { + if err := am.keeper.OnAcknowledgementPacket(ctx, ack, icqReqs); err != nil { return sdkerrors.Wrapf(errorstypes.ErrInvalidRequest, "error OnAcknowledgementPacket: %v", err) } return nil diff --git a/x/feeabs/ibctesting/chain.go b/x/feeabs/ibctesting/chain.go index f3fa8322..1a980714 100644 --- a/x/feeabs/ibctesting/chain.go +++ b/x/feeabs/ibctesting/chain.go @@ -497,11 +497,11 @@ func (chain *TestChain) CreatePortCapability(scopedKeeper capabilitykeeper.Scope _, ok := chain.App.GetScopedIBCKeeper().GetCapability(chain.GetContext(), host.PortPath(portID)) if !ok { // create capability using the IBC capability keeper - cap, err := chain.App.GetScopedIBCKeeper().NewCapability(chain.GetContext(), host.PortPath(portID)) + capability, err := chain.App.GetScopedIBCKeeper().NewCapability(chain.GetContext(), host.PortPath(portID)) require.NoError(chain.t, err) // claim capability using the scopedKeeper - err = scopedKeeper.ClaimCapability(chain.GetContext(), cap, host.PortPath(portID)) + err = scopedKeeper.ClaimCapability(chain.GetContext(), capability, host.PortPath(portID)) require.NoError(chain.t, err) } @@ -513,10 +513,10 @@ func (chain *TestChain) CreatePortCapability(scopedKeeper capabilitykeeper.Scope // GetPortCapability returns the port capability for the given portID. The capability must // exist, otherwise testing will fail. func (chain *TestChain) GetPortCapability(portID string) *capabilitytypes.Capability { - cap, ok := chain.App.GetScopedIBCKeeper().GetCapability(chain.GetContext(), host.PortPath(portID)) + capability, ok := chain.App.GetScopedIBCKeeper().GetCapability(chain.GetContext(), host.PortPath(portID)) require.True(chain.t, ok) - return cap + return capability } // CreateChannelCapability binds and claims a capability for the given portID and channelID @@ -527,9 +527,9 @@ func (chain *TestChain) CreateChannelCapability(scopedKeeper capabilitykeeper.Sc // check if the portId is already binded, if not bind it _, ok := chain.App.GetScopedIBCKeeper().GetCapability(chain.GetContext(), capName) if !ok { - cap, err := chain.App.GetScopedIBCKeeper().NewCapability(chain.GetContext(), capName) + capability, err := chain.App.GetScopedIBCKeeper().NewCapability(chain.GetContext(), capName) require.NoError(chain.t, err) - err = scopedKeeper.ClaimCapability(chain.GetContext(), cap, capName) + err = scopedKeeper.ClaimCapability(chain.GetContext(), capability, capName) require.NoError(chain.t, err) } @@ -541,10 +541,10 @@ func (chain *TestChain) CreateChannelCapability(scopedKeeper capabilitykeeper.Sc // GetChannelCapability returns the channel capability for the given portID and channelID. // The capability must exist, otherwise testing will fail. func (chain *TestChain) GetChannelCapability(portID, channelID string) *capabilitytypes.Capability { - cap, ok := chain.App.GetScopedIBCKeeper().GetCapability(chain.GetContext(), host.ChannelCapabilityPath(portID, channelID)) + capability, ok := chain.App.GetScopedIBCKeeper().GetCapability(chain.GetContext(), host.ChannelCapabilityPath(portID, channelID)) require.True(chain.t, ok) - return cap + return capability } func (chain *TestChain) Balance(acc sdk.AccAddress, denom string) sdk.Coin { @@ -566,8 +566,9 @@ type TestingAppDecorator struct { t *testing.T } -func NewTestingAppDecorator(t *testing.T, feeabs *feeabs.FeeAbs) *TestingAppDecorator { - return &TestingAppDecorator{FeeAbs: feeabs, t: t} +func NewTestingAppDecorator(t *testing.T, feeabstraction *feeabs.FeeAbs) *TestingAppDecorator { + t.Helper() + return &TestingAppDecorator{FeeAbs: feeabstraction, t: t} } func (a TestingAppDecorator) GetBaseApp() *baseapp.BaseApp { diff --git a/x/feeabs/ibctesting/event_utils.go b/x/feeabs/ibctesting/event_utils.go index b33e3968..6aa79bb4 100644 --- a/x/feeabs/ibctesting/event_utils.go +++ b/x/feeabs/ibctesting/event_utils.go @@ -42,7 +42,7 @@ func getAckPackets(evts []abci.Event) []PacketAck { // for _, attr := range evt.Attributes { // fmt.Printf(" %s = %s\n", string(attr.Key), string(attr.Value)) // } -//} +// } func parsePacketFromEvent(evt abci.Event) channeltypes.Packet { return channeltypes.Packet{ diff --git a/x/feeabs/keeper/abci.go b/x/feeabs/keeper/abci.go index 78995ed0..36759f73 100644 --- a/x/feeabs/keeper/abci.go +++ b/x/feeabs/keeper/abci.go @@ -18,7 +18,7 @@ func (k Keeper) BeginBlocker(ctx sdk.Context) { // If blocktime < initial epoch start time, return if ctx.BlockTime().Before(epochInfo.StartTime) { - return + return false } // if epoch counting hasn't started, signal we need to start. shouldInitialEpochStart := !epochInfo.EpochCountingStarted @@ -38,7 +38,7 @@ func (k Keeper) BeginBlocker(ctx sdk.Context) { logger.Info(fmt.Sprintf("Starting new epoch with identifier %s epoch number %d", epochInfo.Identifier, epochInfo.CurrentEpoch)) } else { k.AfterEpochEnd(ctx, epochInfo.Identifier) - epochInfo.CurrentEpoch += 1 + epochInfo.CurrentEpoch++ epochInfo.CurrentEpochStartTime = epochInfo.CurrentEpochStartTime.Add(epochInfo.Duration) logger.Info(fmt.Sprintf("Starting epoch with identifier %s epoch number %d", epochInfo.Identifier, epochInfo.CurrentEpoch)) } diff --git a/x/feeabs/keeper/grpc_query_test.go b/x/feeabs/keeper/grpc_query_test.go index cef69a5c..f8dd4816 100644 --- a/x/feeabs/keeper/grpc_query_test.go +++ b/x/feeabs/keeper/grpc_query_test.go @@ -110,7 +110,7 @@ func (s *KeeperTestSuite) TestHostChainConfig() { } func randStringRunes(n int) string { - rand.Seed(time.Now().UnixNano()) + rand.Seed(time.Now().UnixNano()) //nolint:staticcheck // this is for testing b := make([]rune, n) for i := range b { b[i] = letterRunes[rand.Intn(len(letterRunes))] @@ -119,6 +119,6 @@ func randStringRunes(n int) string { } func randUint64Num() uint64 { - rand.Seed(time.Now().UnixNano()) + rand.Seed(time.Now().UnixNano()) //nolint:staticcheck // this is for testing return rand.Uint64() } diff --git a/x/feeabs/keeper/host_zone_test.go b/x/feeabs/keeper/host_zone_test.go index a0622add..b93868ad 100644 --- a/x/feeabs/keeper/host_zone_test.go +++ b/x/feeabs/keeper/host_zone_test.go @@ -8,11 +8,12 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" apphelpers "github.com/osmosis-labs/fee-abstraction/v7/app/helpers" - "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" + feeabskeeper "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) -func createNHostZone(t *testing.T, keeper *keeper.Keeper, ctx sdk.Context, n int) []types.HostChainFeeAbsConfig { +func createNHostZone(t *testing.T, keeper *feeabskeeper.Keeper, ctx sdk.Context, n int) []types.HostChainFeeAbsConfig { + t.Helper() var expected []types.HostChainFeeAbsConfig expectedConfig := types.HostChainFeeAbsConfig{ IbcDenom: "ibc/123", diff --git a/x/feeabs/keeper/ibc.go b/x/feeabs/keeper/ibc.go index aed4d315..c6bb523b 100644 --- a/x/feeabs/keeper/ibc.go +++ b/x/feeabs/keeper/ibc.go @@ -62,6 +62,7 @@ func (k Keeper) SendOsmosisQueryRequest(ctx sdk.Context, twapReqs []types.QueryA params := k.GetParams(ctx) icqReqs := make([]abci.RequestQuery, len(twapReqs)) for i, req := range twapReqs { + req := req icqReqs[i] = abci.RequestQuery{ Path: params.OsmosisQueryTwapPath, Data: k.cdc.MustMarshal(&req), diff --git a/x/feeabs/keeper/keeper.go b/x/feeabs/keeper/keeper.go index 73a7f81d..e80939eb 100644 --- a/x/feeabs/keeper/keeper.go +++ b/x/feeabs/keeper/keeper.go @@ -93,8 +93,9 @@ func (k Keeper) CalculateNativeFromIBCCoins(ctx sdk.Context, ibcCoins sdk.Coins, return sdk.NewCoins(nativeFee), nil } -func (k Keeper) SendAbstractionFeeToModuleAccount(ctx sdk.Context, IBCcoins sdk.Coins, nativeCoins sdk.Coins, feePayer sdk.AccAddress) error { - err := k.bk.SendCoinsFromAccountToModule(ctx, feePayer, types.ModuleName, IBCcoins) +// SendAbstractionFeeToModuleAccount send IBC token to module account +func (k Keeper) SendAbstractionFeeToModuleAccount(ctx sdk.Context, ibcCoins sdk.Coins, nativeCoins sdk.Coins, feePayer sdk.AccAddress) error { + err := k.bk.SendCoinsFromAccountToModule(ctx, feePayer, types.ModuleName, ibcCoins) if err != nil { return err } @@ -139,10 +140,10 @@ func (k Keeper) OnTimeoutPacket(ctx sdk.Context, chanCap *capabilitytypes.Capabi } func (k Keeper) GetCapability(ctx sdk.Context, name string) *capabilitytypes.Capability { - cap, ok := k.scopedKeeper.GetCapability(ctx, name) + capability, ok := k.scopedKeeper.GetCapability(ctx, name) if !ok { k.Logger(ctx).Error("Error ErrChannelCapabilityNotFound ") return nil } - return cap + return capability } diff --git a/x/feeabs/module.go b/x/feeabs/module.go index ac5c9e32..a9b624ef 100644 --- a/x/feeabs/module.go +++ b/x/feeabs/module.go @@ -106,11 +106,11 @@ type AppModule struct { // NewAppModule instantiate AppModule object func NewAppModule( cdc codec.Codec, - keeper keeper.Keeper, + feeabskeeper keeper.Keeper, ) AppModule { return AppModule{ AppModuleBasic: NewAppModuleBasic(cdc), - keeper: keeper, + keeper: feeabskeeper, } } From a5ad66df46f5f3b64a785b365d2ef0050e2c1c06 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 12 Aug 2023 15:51:49 +0800 Subject: [PATCH 39/90] add markdownlint config --- .markdownlint.jsonc | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .markdownlint.jsonc diff --git a/.markdownlint.jsonc b/.markdownlint.jsonc new file mode 100644 index 00000000..e91db0f8 --- /dev/null +++ b/.markdownlint.jsonc @@ -0,0 +1,10 @@ +{ + "default": true, + "MD013": false, // https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md013---line-length + "MD024": false, // https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md024---multiple-headings-with-the-same-content + "MD025": false, // https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md025---multiple-top-level-headings-in-the-same-document + "MD029": false, // https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md029---ordered-list-item-prefix + "MD033": false, // https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md033---inline-html + "MD036": false, // https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md036---emphasis-used-instead-of-a-heading + "MD041": false // https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md041---first-line-in-a-file-should-be-a-top-level-heading +} \ No newline at end of file From 557874272de064e1c83787c74ec4fddf2952e9c7 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 12 Aug 2023 15:53:54 +0800 Subject: [PATCH 40/90] tidy --- go.sum | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/go.sum b/go.sum index 6d2abaf8..14c13a65 100644 --- a/go.sum +++ b/go.sum @@ -118,6 +118,7 @@ cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQn cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= cloud.google.com/go/longrunning v0.3.0 h1:NjljC+FYPV3uh5/OwWT6pVU+doBqMg2x/rZlE+CamDs= +cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= @@ -206,6 +207,7 @@ filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5E github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= @@ -217,7 +219,9 @@ github.com/CosmWasm/wasmvm v1.2.1/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8 github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= @@ -225,8 +229,10 @@ github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMx github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= +github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/alecthomas/participle/v2 v2.0.0-alpha7 h1:cK4vjj0VSgb3lN1nuKA5F7dw+1s1pWBe5bx7nNCnN+c= +github.com/alecthomas/participle/v2 v2.0.0-alpha7/go.mod h1:NumScqsC42o9x+dGj8/YqsIfhrIQjFEOFovxotbBirA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -260,7 +266,9 @@ github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsy github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= +github.com/btcsuite/btcd/btcutil v1.1.2/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -299,6 +307,7 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/apd/v3 v3.1.0 h1:MK3Ow7LH0W8zkd5GMKA1PvS9qG3bWFI95WaVNfyZJ/w= +github.com/cockroachdb/apd/v3 v3.1.0/go.mod h1:6qgPBMXjATAdD/VefbRP9NoSLKjbB4LCoA7gN4LpHs4= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= @@ -310,6 +319,7 @@ github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4 github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -350,13 +360,16 @@ github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJF github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/cucumber/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= +github.com/cucumber/common/gherkin/go/v22 v22.0.0/go.mod h1:3mJT10B2GGn3MvVPd3FwR7m2u4tLhSRhWUqJU4KN4Fg= github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= +github.com/cucumber/common/messages/go/v17 v17.1.1/go.mod h1:bpGxb57tDE385Rb2EohgUadLkAbhoC4IyCFi89u/JQI= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= @@ -373,7 +386,9 @@ github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUn github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= @@ -396,16 +411,21 @@ github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go. github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= +github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= +github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= +github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= @@ -415,6 +435,7 @@ github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= +github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -437,6 +458,7 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87 github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= +github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= @@ -446,9 +468,11 @@ github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6Wezm github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= +github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= +github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= @@ -526,6 +550,7 @@ github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIG github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -650,6 +675,7 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b h1:izTof8BKh/nE1wrKOrloNA5q4odOarjf+Xpe+4qow98= +github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -685,9 +711,11 @@ github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= @@ -755,6 +783,7 @@ github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OS github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= @@ -763,15 +792,19 @@ github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= +github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= +github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= +github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -781,6 +814,7 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= +github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= @@ -842,12 +876,14 @@ github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqn github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= +github.com/regen-network/gocuke v0.6.2/go.mod h1:zYaqIHZobHyd0xOrHGPQjbhGJsuZ1oElx150u2o1xuk= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= @@ -865,6 +901,7 @@ github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6Mwd github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= @@ -1025,6 +1062,7 @@ golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1308,6 +1346,7 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1555,6 +1594,7 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= @@ -1582,6 +1622,7 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= +gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= From 8e88a540af59874c1565584942af92991d31fc1a Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 12 Aug 2023 16:23:02 +0800 Subject: [PATCH 41/90] remove v2 readme --- README-v2.md | 115 --------------------------------------------------- 1 file changed, 115 deletions(-) delete mode 100644 README-v2.md diff --git a/README-v2.md b/README-v2.md deleted file mode 100644 index 62d4a8cc..00000000 --- a/README-v2.md +++ /dev/null @@ -1,115 +0,0 @@ -# Fee Abstraction - -## Context - -The concrete use cases which motivated this module include: - -- The desire to use IBC token as transaction fees on any chain instead of having to use native token as fee. -- To fully take advantage of the newly represented Osmosis [`swap router`](https://github.com/osmosis-labs/osmosis/tree/main/cosmwasm/contracts) with the [`ibc-hooks`](https://github.com/osmosis-labs/osmosis/tree/main/x/ibc-hooks) module. - -## Description - -Fee abstraction modules enable users on any Cosmos chain with IBC connections to pay fee using ibc token. - -Fee-abs implementation composes of 2 pieces of software : - -- Fee-abs module imported to the customer chain. -- A smart contract for querying TWAP deployed on Osmosis. - -Other than those two, the implememtation also uses Osmosis swap router which is already deployed on Osmosis testnet. - -## Prototype - -Firstly, we narrow the feature of fee-abs from allowing general ibc token as tx fee to allowing only ibc-ed osmosis as tx fee. If thing goes smoothly , we'll work on developing the full feature of fee-abs. - -Fee-abs mechanism in a nutshell: - -1. Pulling `twap data` and update exchange rate: - -- Periodically pulling `twap data` from osmosis by ibc-ing to our osmosis contract, this `twap data` will update the exchange rate of osmosis to customer chain's native token. - -2. Handling txs with ibc-osmosis fee: - -- The exchange rate is used to calculate the amount of ibc-osmosis needed for tx fee allowing users to pay ibc-osmosis for tx fee instead of chain's native token. - -3. Swap accumulated ibc-osmosis fee: - -- The collected ibc-osmosis users use for tx fee is periodically swaped back to customer chain's native token using osmosis. - -We'll goes into all the details now: - -#### Pulling `twap data` and update exchange rate - -For this to work, we first has to set up an ibc channel from fee-abs to our osmosis contract. This channel set-up process can be done by anyone, just like setting up an ibc transfer channel. Once that ibc channel is there, we'll use that channel to ibc-query Twap data. Let's call this the querying channel. - -The process of pulling Twap data and update exchange rate : - -![](https://i.imgur.com/sJA4yV7.png) - -Description : -For every `update exchange rate period`, at fee-abs `EndBlocker()` we submit a `query twap packet` to the querying channel on the customer chain's end. Then relayers will submit `MsgReceivePacket` so that our `QueryTwapPacket` which will be routed to our osmosis contract to be processed. Our osmosis contract then query twap price and put it in the ibc acknowledgement. Relayers then submit `MsgAcknowledgement` to the customer chain so that the ibc acknowledgement is routed to fee-abs to be processed. Fee-abs then update exchange rate according to the Twap wrapped in the ibc acknowledgement. - -#### Handling txs with ibc-token fee - -We modified `MempoolFeeDecorator` so that it can handle ibc-osmosis as fee. If the tx has osmosis fee, we basically replace the ibc-osmosis amount with the equivalent native-token amount which is calculated by `exchange rate` \* `ibc-osmosis amount`. - -We have an account to manage the ibc-osmosis user used to pay for tx fee. The collected osmosis fee is sent to that account instead of community pool account. - -#### Swap accumulated ibc-tokens fee - -We use osmosis's ibc hook feature to do this. We basically ibc transfer to the osmosis crosschain swap contract with custom memo to swap the osmosis fee back to customer chain's native-token and ibc transfer back to the customer chain. - -## State - -### OsmosisTwapExchangeRate - -OsmosisTwapExchangeRate is fetched at the end of every epoch. - -The process of pulling Twap data and update exchange rate : - -![](https://i.imgur.com/Osumjpv.png) - -### ChannelID - -### HostChainChainConfig - -## Client - -### CLI - -A user can query and interact with the ``feeabs`` module using the CLI. - -#### Query - -The ``query`` commands allow users to query ``feeabs`` module state - -``` -feeappd query feeabs -h -``` - -##### host-chain-config - -The ``host-chain-config`` command allow users to query host chain config for a given ibc denom. - -``` -feeappd query feeabs host-chain-config [ibc-denom] [flags] -``` - - -##### module-balances -The ``module-balances`` command allow users to query feeabs module balances. -``` -feeappd query feeabs module-balances [flags] -``` - -##### osmo-arithmetic-twap -The ``osmo-arithmetic-twap`` command allow users to query Osmosis twap for an ibc denom. -``` -feeappd query feeabs osmo-arithmetic-twap [ibc-denom] [flags] -``` - -### gRPC - -## Resources - -- Main repo: https://github.com/osmosis-labs/fee-abstraction From 3a56a8701d574e4aec0dd610ad597f74e78e227b Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 12 Aug 2023 17:05:49 +0800 Subject: [PATCH 42/90] update go.mod for tests --- tests/interchaintest/go.mod | 6 +++-- tests/interchaintest/go.sum | 48 +++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/tests/interchaintest/go.mod b/tests/interchaintest/go.mod index de0646f7..67a3b05f 100644 --- a/tests/interchaintest/go.mod +++ b/tests/interchaintest/go.mod @@ -1,6 +1,8 @@ module github.com/notional-labs/fee-abstraction/tests/interchaintest -go 1.19 +go 1.21 + +toolchain go1.21.0 require ( github.com/cosmos/cosmos-proto v1.0.0-beta.2 @@ -10,7 +12,7 @@ require ( github.com/golang/protobuf v1.5.3 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 - github.com/osmosis-labs/fee-abstraction/v7 v4.0.0 + github.com/osmosis-labs/fee-abstraction/v7 v7.0.0-20230812075354-557874272de0 github.com/strangelove-ventures/interchaintest/v7 v7.1.2 github.com/stretchr/testify v1.8.4 go.uber.org/zap v1.24.0 diff --git a/tests/interchaintest/go.sum b/tests/interchaintest/go.sum index 9cf1de6e..5e46fda9 100644 --- a/tests/interchaintest/go.sum +++ b/tests/interchaintest/go.sum @@ -205,6 +205,7 @@ filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5E github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= @@ -228,18 +229,22 @@ github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= +github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/StirlingMarketingGroup/go-namecase v1.0.0 h1:2CzaNtCzc4iNHirR+5ru9OzGg8rQp860gqLBFqRI02Y= github.com/StirlingMarketingGroup/go-namecase v1.0.0/go.mod h1:ZsoSKcafcAzuBx+sndbxHu/RjDcDTrEdT4UvhniHfio= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= +github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/alecthomas/participle/v2 v2.0.0-alpha7 h1:cK4vjj0VSgb3lN1nuKA5F7dw+1s1pWBe5bx7nNCnN+c= +github.com/alecthomas/participle/v2 v2.0.0-alpha7/go.mod h1:NumScqsC42o9x+dGj8/YqsIfhrIQjFEOFovxotbBirA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -277,8 +282,11 @@ github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsy github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= +github.com/btcsuite/btcd/btcutil v1.1.2/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -317,7 +325,9 @@ github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= +github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/apd/v3 v3.1.0 h1:MK3Ow7LH0W8zkd5GMKA1PvS9qG3bWFI95WaVNfyZJ/w= +github.com/cockroachdb/apd/v3 v3.1.0/go.mod h1:6qgPBMXjATAdD/VefbRP9NoSLKjbB4LCoA7gN4LpHs4= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= @@ -329,6 +339,7 @@ github.com/cometbft/cometbft-db v0.8.0/go.mod h1:6ASCP4pfhmrCBpfk01/9E1SI29nD3Hf github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -367,7 +378,9 @@ github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJF github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/cucumber/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= +github.com/cucumber/common/gherkin/go/v22 v22.0.0/go.mod h1:3mJT10B2GGn3MvVPd3FwR7m2u4tLhSRhWUqJU4KN4Fg= github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= +github.com/cucumber/common/messages/go/v17 v17.1.1/go.mod h1:bpGxb57tDE385Rb2EohgUadLkAbhoC4IyCFi89u/JQI= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -432,9 +445,11 @@ github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= +github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= @@ -461,11 +476,13 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= +github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= @@ -482,6 +499,7 @@ github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/E github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= +github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= @@ -552,12 +570,14 @@ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -577,6 +597,7 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ= +github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= @@ -687,6 +708,7 @@ github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod github.com/ipfs/go-cid v0.2.0 h1:01JTiihFq9en9Vz0lc0VDWvZe/uBonGpzo4THP0vcQ0= github.com/ipfs/go-cid v0.2.0/go.mod h1:P+HXFDF4CVhaVayiEb4wkAy7zBHxBwsJyt0Y5U6MLro= github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b h1:izTof8BKh/nE1wrKOrloNA5q4odOarjf+Xpe+4qow98= +github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -702,6 +724,7 @@ github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= @@ -727,11 +750,14 @@ github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= +github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= @@ -761,6 +787,7 @@ github.com/mattn/go-pointer v0.0.1/go.mod h1:2zXcozF6qYGgmsG+SeTZz3oAbFLdD3OWqnU github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= +github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= @@ -788,13 +815,16 @@ github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae h1:O4SWKdcHVCvYqyDV+9CJA1fcDN2L11Bule0iFy3YlAI= +github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= @@ -846,12 +876,14 @@ github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= +github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= +github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -861,6 +893,7 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= +github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= @@ -926,6 +959,7 @@ github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqn github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= +github.com/regen-network/gocuke v0.6.2/go.mod h1:zYaqIHZobHyd0xOrHGPQjbhGJsuZ1oElx150u2o1xuk= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= @@ -935,6 +969,7 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= @@ -947,12 +982,14 @@ github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71e github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= @@ -1013,7 +1050,9 @@ github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoM github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw= +github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o= +github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/tyler-smith/go-bip32 v1.0.0 h1:sDR9juArbUgX+bO/iblgZnMPeWY1KZMUC2AFUJdv5KE= @@ -1025,6 +1064,7 @@ github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVM github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= +github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= @@ -1064,6 +1104,7 @@ go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= +go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= @@ -1359,6 +1400,7 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.1.0 h1:xYY+Bajn2a7VBmTM5GikTmnK8ZuX8YgnQCqZpbBNtmA= +golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1673,6 +1715,7 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= @@ -1702,6 +1745,7 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= +gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1721,7 +1765,9 @@ modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0= modernc.org/ccgo/v3 v3.16.13 h1:Mkgdzl46i5F/CNR/Kj80Ri59hC8TKAhZrYSaqvkwzUw= modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk= +modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM= +modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= modernc.org/libc v1.22.5 h1:91BNch/e5B0uPbJFgqbxXuOnxBQjlS//icfQEGmvyjE= modernc.org/libc v1.22.5/go.mod h1:jj+Z7dTNX8fBScMVNRAYZ/jF91K8fdT2hYMThc3YjBY= modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= @@ -1735,9 +1781,11 @@ modernc.org/sqlite v1.24.0/go.mod h1:OrDj17Mggn6MhE+iPbBNf7RGKODDE9NFT0f3EwDzJqk modernc.org/strutil v1.1.3 h1:fNMm+oJklMGYfU9Ylcywl0CO5O6nTfaowNsh2wpPjzY= modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= modernc.org/tcl v1.15.2 h1:C4ybAYCGJw968e+Me18oW55kD/FexcHbqH2xak1ROSY= +modernc.org/tcl v1.15.2/go.mod h1:3+k/ZaEbKrC8ePv8zJWPtBSW0V7Gg9g8rkmhI1Kfs3c= modernc.org/token v1.0.1 h1:A3qvTqOwexpfZZeyI0FeGPDlSWX5pjZu9hF4lU+EKWg= modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= modernc.org/z v1.7.3 h1:zDJf6iHjrnB+WRD88stbXokugjyc0/pB91ri1gO6LZY= +modernc.org/z v1.7.3/go.mod h1:Ipv4tsdxZRbQyLq9Q1M6gdbkxYzdlrciF2Hi/lS7nWE= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= From 49192f5889fb3ad0f721e6269eead0deace04160 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 12 Aug 2023 17:06:42 +0800 Subject: [PATCH 43/90] update go.mod in tests --- tests/interchaintest/go.mod | 6 ++++++ tests/interchaintest/go.sum | 16 +++++++--------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/tests/interchaintest/go.mod b/tests/interchaintest/go.mod index 67a3b05f..162f8473 100644 --- a/tests/interchaintest/go.mod +++ b/tests/interchaintest/go.mod @@ -90,10 +90,13 @@ require ( github.com/ethereum/go-ethereum v1.10.20 // indirect github.com/felixge/httpsnoop v1.0.2 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/gin-gonic/gin v1.8.1 // indirect github.com/go-kit/kit v0.12.0 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect + github.com/go-playground/validator/v10 v10.11.1 // indirect github.com/go-stack/stack v1.8.1 // indirect + github.com/goccy/go-json v0.9.11 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/golang/glog v1.1.0 // indirect @@ -118,6 +121,7 @@ require ( github.com/hashicorp/go-getter v1.7.1 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect + github.com/hashicorp/go-uuid v1.0.2 // indirect github.com/hashicorp/go-version v1.6.0 // indirect github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect github.com/hashicorp/hcl v1.0.0 // indirect @@ -204,6 +208,7 @@ require ( golang.org/x/sys v0.10.0 // indirect golang.org/x/term v0.10.0 // indirect golang.org/x/text v0.11.0 // indirect + golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.11.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/api v0.126.0 // indirect @@ -215,6 +220,7 @@ require ( gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect + gotest.tools/v3 v3.5.0 // indirect lukechampine.com/blake3 v1.1.7 // indirect lukechampine.com/uint128 v1.2.0 // indirect modernc.org/cc/v3 v3.40.0 // indirect diff --git a/tests/interchaintest/go.sum b/tests/interchaintest/go.sum index 5e46fda9..990f619f 100644 --- a/tests/interchaintest/go.sum +++ b/tests/interchaintest/go.sum @@ -458,8 +458,8 @@ github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbS github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -478,13 +478,13 @@ github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KE github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= @@ -496,6 +496,7 @@ github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= @@ -671,8 +672,8 @@ github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoD github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= @@ -1399,8 +1400,7 @@ golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.1.0 h1:xYY+Bajn2a7VBmTM5GikTmnK8ZuX8YgnQCqZpbBNtmA= -golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1743,9 +1743,7 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= -gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= -gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= +gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= From d4e2031ed6adb37ca2fc7d4b6b9380332d0f6e37 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 12 Aug 2023 17:10:22 +0800 Subject: [PATCH 44/90] update fee abstraction version used in tests --- tests/interchaintest/go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/interchaintest/go.mod b/tests/interchaintest/go.mod index de0646f7..675d79ec 100644 --- a/tests/interchaintest/go.mod +++ b/tests/interchaintest/go.mod @@ -10,7 +10,7 @@ require ( github.com/golang/protobuf v1.5.3 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 - github.com/osmosis-labs/fee-abstraction/v7 v4.0.0 + github.com/osmosis-labs/fee-abstraction/v7 v7.0.0-20230812065609-e9c8580974c2 github.com/strangelove-ventures/interchaintest/v7 v7.1.2 github.com/stretchr/testify v1.8.4 go.uber.org/zap v1.24.0 From d614b45b0dead61aa0870d12e219e632c3dec350 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 12 Aug 2023 17:55:31 +0800 Subject: [PATCH 45/90] Create CODEOWNERS --- CODEOWNERS | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 CODEOWNERS diff --git a/CODEOWNERS b/CODEOWNERS new file mode 100644 index 00000000..fd378188 --- /dev/null +++ b/CODEOWNERS @@ -0,0 +1,5 @@ +@GNaD13 +@vuong177 +@anhductn2001 +@expertdicer +@faddat From 95bd99ab44cfcb004a1df80cf7b11c6400173717 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 12 Aug 2023 18:07:36 +0800 Subject: [PATCH 46/90] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 23dd7fa0..ab75c6e2 100644 --- a/README.md +++ b/README.md @@ -13,10 +13,13 @@ This repository is branched by the cosmos-sdk versions and ibc-go versions used. - SDK v0.47.x & IBC-go v7.* - branch: release/v7.0.x + - path: github.com/osmosis-labs/fee-abstraction/v7 - SDK v0.46.x - branch: release/v6.0.x + - path: github.com/osmosis-labs/fee-abstraction/v6 - SDK v0.45.x - branch: release/v4.0.x + - path: github.com/osmosis-labs/fee-abstraction/v4 ## Description From 256e1824bf58a402a9c56990991c4ac25b070ceb Mon Sep 17 00:00:00 2001 From: romelukaku Date: Sun, 13 Aug 2023 20:04:35 +0700 Subject: [PATCH 47/90] remove wasmd --- Dockerfile | 8 -- app/app.go | 52 +------ app/helpers/test_helpers.go | 4 +- app/sim_test.go | 7 +- app/test_access.go | 11 +- app/test_helpers.go | 10 +- cmd/feeappd/cmd/root.go | 11 -- go.mod | 8 +- go.sum | 6 - x/feeabs/ibctesting/chain.go | 5 +- x/feeabs/ibctesting/coordinator.go | 9 +- x/feeabs/ibctesting/wasm.go | 75 ----------- x/feeabs/relay_test.go | 209 +---------------------------- 13 files changed, 15 insertions(+), 400 deletions(-) delete mode 100644 x/feeabs/ibctesting/wasm.go diff --git a/Dockerfile b/Dockerfile index e4393420..8f4c4a0d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,14 +24,6 @@ RUN --mount=type=cache,target=/root/.cache/go-build \ --mount=type=cache,target=/root/go/pkg/mod \ go mod download -# Cosmwasm - Download correct libwasmvm version -RUN WASMVM_VERSION=$(go list -m github.com/CosmWasm/wasmvm | cut -d ' ' -f 2) && \ - wget https://github.com/CosmWasm/wasmvm/releases/download/$WASMVM_VERSION/libwasmvm_muslc.$(uname -m).a \ - -O /lib/libwasmvm_muslc.a && \ - # verify checksum - wget https://github.com/CosmWasm/wasmvm/releases/download/$WASMVM_VERSION/checksums.txt -O /tmp/checksums.txt && \ - sha256sum /lib/libwasmvm_muslc.a | grep $(cat /tmp/checksums.txt | grep $(uname -m) | cut -d ' ' -f 1) - # Copy the remaining files COPY . . diff --git a/app/app.go b/app/app.go index 8cae0fda..954c04da 100644 --- a/app/app.go +++ b/app/app.go @@ -10,8 +10,6 @@ import ( "path/filepath" "sort" - "github.com/CosmWasm/wasmd/x/wasm" - wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router" routerkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/keeper" routertypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/types" @@ -172,7 +170,6 @@ var ( vesting.AppModuleBasic{}, router.AppModuleBasic{}, ica.AppModuleBasic{}, - wasm.AppModuleBasic{}, solomachine.AppModuleBasic{}, feeabsmodule.AppModuleBasic{}, ) @@ -188,7 +185,6 @@ var ( stakingtypes.NotBondedPoolName: {authtypes.Burner, authtypes.Staking}, govtypes.ModuleName: {authtypes.Burner}, ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner}, - wasm.ModuleName: {authtypes.Burner}, } // module accounts that are allowed to receive tokens @@ -240,7 +236,6 @@ type FeeAbs struct { // nolint: golint AuthzKeeper authzkeeper.Keeper FeeabsKeeper feeabskeeper.Keeper ConsensusParamsKeeper consensusparamkeeper.Keeper - WasmKeeper wasm.Keeper RouterKeeper *routerkeeper.Keeper @@ -250,7 +245,6 @@ type FeeAbs struct { // nolint: golint ScopedICAHostKeeper capabilitykeeper.ScopedKeeper ScopedICAControllerKeeper capabilitykeeper.ScopedKeeper ScopedFeeabsKeeper capabilitykeeper.ScopedKeeper - ScopedWasmKeeper capabilitykeeper.ScopedKeeper // the module manager mm *module.Manager @@ -279,7 +273,6 @@ func NewFeeAbs( invCheckPeriod uint, encodingConfig appparams.EncodingConfig, appOpts servertypes.AppOptions, - wasmOpts []wasm.Option, baseAppOptions ...func(*baseapp.BaseApp), ) *FeeAbs { appCodec, legacyAmino, txConfig := encodingConfig.Marshaler, encodingConfig.Amino, encodingConfig.TxConfig @@ -295,7 +288,7 @@ func NewFeeAbs( authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey, minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey, govtypes.StoreKey, paramstypes.StoreKey, ibcexported.StoreKey, upgradetypes.StoreKey, - evidencetypes.StoreKey, ibctransfertypes.StoreKey, feeabstypes.StoreKey, wasm.StoreKey, + evidencetypes.StoreKey, ibctransfertypes.StoreKey, feeabstypes.StoreKey, capabilitytypes.StoreKey, feegrant.StoreKey, authzkeeper.StoreKey, routertypes.StoreKey, icahosttypes.StoreKey, icacontrollertypes.StoreKey, consensusparamtypes.StoreKey, crisistypes.StoreKey, ) @@ -336,7 +329,6 @@ func NewFeeAbs( scopedICAControllerKeeper := app.CapabilityKeeper.ScopeToModule(icacontrollertypes.SubModuleName) // scopedInterTxKeeper := app.CapabilityKeeper.ScopeToModule(intertxtypes.ModuleName) scopedTransferKeeper := app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName) - scopedWasmKeeper := app.CapabilityKeeper.ScopeToModule(wasm.ModuleName) scopedFeeabsKeeper := app.CapabilityKeeper.ScopeToModule(feeabstypes.ModuleName) app.CapabilityKeeper.Seal() @@ -527,40 +519,10 @@ func NewFeeAbs( ) app.EvidenceKeeper = *evidenceKeeper - wasmDir := filepath.Join(homePath, "wasm") - wasmConfig, err := wasm.ReadWasmConfig(appOpts) - if err != nil { - panic(fmt.Sprintf("error while reading wasm config: %s", err)) - } - - // The last arguments can contain custom message handlers, and custom query handlers, - // if we want to allow any custom callbacks - supportedFeatures := "iterator,staking,stargate,cosmwasm_1_1" - app.WasmKeeper = wasm.NewKeeper( - appCodec, - keys[wasm.StoreKey], - app.AccountKeeper, - app.BankKeeper, - app.StakingKeeper, - distrkeeper.NewQuerier(app.DistrKeeper), - app.IBCKeeper.ChannelKeeper, - &app.IBCKeeper.PortKeeper, - scopedWasmKeeper, - app.TransferKeeper, - app.MsgServiceRouter(), - app.GRPCQueryRouter(), - wasmDir, - wasmConfig, - supportedFeatures, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - wasmOpts..., - ) - // Create static IBC router, add app routes, then set and seal it ibcRouter := porttypes.NewRouter() ibcRouter. - AddRoute(wasm.ModuleName, wasm.NewIBCHandler(app.WasmKeeper, app.IBCKeeper.ChannelKeeper, app.IBCKeeper.ChannelKeeper)). AddRoute(ibctransfertypes.ModuleName, ibcStack). AddRoute(icahosttypes.SubModuleName, icaHostIBCModule). AddRoute(feeabstypes.ModuleName, feeabsIBCModule) @@ -610,7 +572,6 @@ func NewFeeAbs( distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper, app.GetSubspace(distrtypes.ModuleName)), staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.GetSubspace(stakingtypes.ModuleName)), upgrade.NewAppModule(&app.UpgradeKeeper), - wasm.NewAppModule(appCodec, &app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.MsgServiceRouter(), app.GetSubspace(wasmtypes.ModuleName)), evidence.NewAppModule(app.EvidenceKeeper), feegrantmodule.NewAppModule(appCodec, app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, app.interfaceRegistry), authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), @@ -652,7 +613,6 @@ func NewFeeAbs( icatypes.ModuleName, routertypes.ModuleName, // intertxtypes.ModuleName, - wasm.ModuleName, ) app.mm.SetOrderEndBlockers( @@ -679,7 +639,6 @@ func NewFeeAbs( icatypes.ModuleName, routertypes.ModuleName, // intertxtypes.ModuleName, - wasm.ModuleName, ) // NOTE: The genutils module must occur after staking so that pools are @@ -687,8 +646,6 @@ func NewFeeAbs( // NOTE: Capability module must occur first so that it can initialize any capabilities // so that other modules that want to create or claim capabilities afterwards in InitChain // can do so safely. - // NOTE: wasm module should be at the end as it can call other module functionality direct or via message dispatching during - // genesis phase. For example bank transfer, auth account check, staking, ... app.mm.SetOrderInitGenesis( capabilitytypes.ModuleName, authtypes.ModuleName, @@ -712,9 +669,6 @@ func NewFeeAbs( feeabstypes.ModuleName, icatypes.ModuleName, routertypes.ModuleName, - // intertxtypes.ModuleName, - // wasm after ibc transfer - wasm.ModuleName, ) // Uncomment if you want to set a custom migration order here. @@ -742,7 +696,6 @@ func NewFeeAbs( slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper, app.GetSubspace(slashingtypes.ModuleName)), params.NewAppModule(app.ParamsKeeper), evidence.NewAppModule(app.EvidenceKeeper), - wasm.NewAppModule(appCodec, &app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.MsgServiceRouter(), app.GetSubspace(wasmtypes.ModuleName)), ibc.NewAppModule(app.IBCKeeper), transferModule, ) @@ -846,7 +799,6 @@ func NewFeeAbs( app.ScopedIBCKeeper = scopedIBCKeeper app.ScopedTransferKeeper = scopedTransferKeeper - app.ScopedWasmKeeper = scopedWasmKeeper app.ScopedICAHostKeeper = scopedICAHostKeeper app.ScopedICAControllerKeeper = scopedICAControllerKeeper app.ScopedFeeabsKeeper = scopedFeeabsKeeper @@ -943,7 +895,6 @@ func (app *FeeAbs) GetMemKey(storeKey string) *storetypes.MemoryStoreKey { return app.memKeys[storeKey] } -// TxConfig returns WasmApp's TxConfig func (app *FeeAbs) TxConfig() client.TxConfig { return app.txConfig } @@ -1035,7 +986,6 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino paramsKeeper.Subspace(icahosttypes.SubModuleName) paramsKeeper.Subspace(icacontrollertypes.SubModuleName) paramsKeeper.Subspace(feeabstypes.ModuleName) - paramsKeeper.Subspace(wasm.ModuleName) return paramsKeeper } diff --git a/app/helpers/test_helpers.go b/app/helpers/test_helpers.go index fb0862ad..426fa204 100644 --- a/app/helpers/test_helpers.go +++ b/app/helpers/test_helpers.go @@ -6,7 +6,6 @@ import ( "testing" "time" - "github.com/CosmWasm/wasmd/x/wasm" "github.com/stretchr/testify/require" codectypes "github.com/cosmos/cosmos-sdk/codec/types" @@ -115,7 +114,7 @@ func SetupWithGenesisValSet(t *testing.T, return app } -func setup(withGenesis bool, invCheckPeriod uint, wasmOpts ...wasm.Option) (*feeapp.FeeAbs, feeapp.GenesisState) { +func setup(withGenesis bool, invCheckPeriod uint) (*feeapp.FeeAbs, feeapp.GenesisState) { db := dbm.NewMemDB() encCdc := feeapp.MakeEncodingConfig() app := feeapp.NewFeeAbs( @@ -128,7 +127,6 @@ func setup(withGenesis bool, invCheckPeriod uint, wasmOpts ...wasm.Option) (*fee invCheckPeriod, encCdc, EmptyAppOptions{}, - wasmOpts, ) if withGenesis { return app, feeapp.NewDefaultGenesisState() diff --git a/app/sim_test.go b/app/sim_test.go index 2569dc2f..44f6524b 100644 --- a/app/sim_test.go +++ b/app/sim_test.go @@ -6,7 +6,6 @@ import ( "os" "testing" - "github.com/CosmWasm/wasmd/x/wasm" "github.com/stretchr/testify/require" "github.com/cosmos/cosmos-sdk/baseapp" @@ -50,8 +49,7 @@ func BenchmarkFullAppSimulation(b *testing.B) { } }() - var emptyWasmOpts []wasm.Option - app := feeapp.NewFeeAbs(logger, db, nil, true, map[int64]bool{}, feeapp.DefaultNodeHome, simcli.FlagPeriodValue, feeapp.MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, emptyWasmOpts, interBlockCacheOpt()) + app := feeapp.NewFeeAbs(logger, db, nil, true, map[int64]bool{}, feeapp.DefaultNodeHome, simcli.FlagPeriodValue, feeapp.MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, interBlockCacheOpt()) // Run randomized simulation:w _, simParams, simErr := simulation.SimulateFromSeed( @@ -114,8 +112,7 @@ func TestAppStateDeterminism(t *testing.T) { } db := dbm.NewMemDB() - var emptyWasmOpts []wasm.Option - app := feeapp.NewFeeAbs(logger, db, nil, true, map[int64]bool{}, feeapp.DefaultNodeHome, simcli.FlagPeriodValue, feeapp.MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, emptyWasmOpts, interBlockCacheOpt()) + app := feeapp.NewFeeAbs(logger, db, nil, true, map[int64]bool{}, feeapp.DefaultNodeHome, simcli.FlagPeriodValue, feeapp.MakeEncodingConfig(), simtestutil.EmptyAppOptions{}, interBlockCacheOpt()) fmt.Printf( "running non-determinism simulation; seed %d: %d/%d, attempt: %d/%d\n", diff --git a/app/test_access.go b/app/test_access.go index ef096a3e..44b86a82 100644 --- a/app/test_access.go +++ b/app/test_access.go @@ -3,8 +3,6 @@ package app import ( "testing" - "github.com/CosmWasm/wasmd/app/params" - wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" @@ -15,6 +13,7 @@ import ( capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" + "github.com/osmosis-labs/fee-abstraction/v7/app/params" "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" ) @@ -32,18 +31,10 @@ func (s TestSupport) IBCKeeper() *ibckeeper.Keeper { return s.app.IBCKeeper } -func (s TestSupport) WasmKeeper() wasmkeeper.Keeper { - return s.app.WasmKeeper -} - func (s TestSupport) AppCodec() codec.Codec { return s.app.appCodec } -func (s TestSupport) ScopedWasmIBCKeeper() capabilitykeeper.ScopedKeeper { - return s.app.ScopedWasmKeeper -} - func (s TestSupport) ScopeIBCKeeper() capabilitykeeper.ScopedKeeper { return s.app.ScopedIBCKeeper } diff --git a/app/test_helpers.go b/app/test_helpers.go index 7d50f6a3..e0a52282 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -11,7 +11,6 @@ import ( "testing" "time" - "github.com/CosmWasm/wasmd/x/wasm" "github.com/stretchr/testify/require" sdkerrors "cosmossdk.io/errors" @@ -60,7 +59,7 @@ var DefaultConsensusParams = &tmproto.ConsensusParams{ }, } -func setup(tb testing.TB, withGenesis bool, invCheckPeriod uint, opts ...wasm.Option) (*FeeAbs, GenesisState) { +func setup(tb testing.TB, withGenesis bool, invCheckPeriod uint) (*FeeAbs, GenesisState) { tb.Helper() nodeHome := tb.TempDir() snapshotDir := filepath.Join(nodeHome, "data", "snapshots") @@ -77,7 +76,6 @@ func setup(tb testing.TB, withGenesis bool, invCheckPeriod uint, opts ...wasm.Op invCheckPeriod, MakeEncodingConfig(), EmptyBaseAppOptions{}, - opts, baseAppOpts...) if withGenesis { return app, NewDefaultGenesisState() @@ -85,7 +83,7 @@ func setup(tb testing.TB, withGenesis bool, invCheckPeriod uint, opts ...wasm.Op return app, GenesisState{} } -func setupWithChainID(tb testing.TB, withGenesis bool, invCheckPeriod uint, chainID string, opts ...wasm.Option) (*FeeAbs, GenesisState) { +func setupWithChainID(tb testing.TB, withGenesis bool, invCheckPeriod uint, chainID string) (*FeeAbs, GenesisState) { tb.Helper() nodeHome := tb.TempDir() snapshotDir := filepath.Join(nodeHome, "data", "snapshots") @@ -105,7 +103,6 @@ func setupWithChainID(tb testing.TB, withGenesis bool, invCheckPeriod uint, chai invCheckPeriod, MakeEncodingConfig(), EmptyBaseAppOptions{}, - opts, baseAppOpts...) if withGenesis { return app, NewDefaultGenesisState() @@ -121,12 +118,11 @@ func SetupWithGenesisValSet( t *testing.T, valSet *tmtypes.ValidatorSet, genAccs []authtypes.GenesisAccount, - opts []wasm.Option, chainID string, balances ...banktypes.Balance, ) *FeeAbs { t.Helper() - app, genesisState := setupWithChainID(t, true, 5, chainID, opts...) + app, genesisState := setupWithChainID(t, true, 5, chainID) // set genesis accounts authGenesis := authtypes.NewGenesisState(authtypes.DefaultParams(), genAccs) genesisState[authtypes.ModuleName] = app.appCodec.MustMarshalJSON(authGenesis) diff --git a/cmd/feeappd/cmd/root.go b/cmd/feeappd/cmd/root.go index 5cdea2ed..16e1909b 100644 --- a/cmd/feeappd/cmd/root.go +++ b/cmd/feeappd/cmd/root.go @@ -6,11 +6,8 @@ import ( "os" "path/filepath" - "github.com/CosmWasm/wasmd/x/wasm" - wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - "github.com/prometheus/client_golang/prometheus" "github.com/spf13/cast" "github.com/spf13/cobra" @@ -241,11 +238,6 @@ func (ac appCreator) newApp( panic(err) } - var wasmOpts []wasm.Option - if cast.ToBool(appOpts.Get("telemetry.enabled")) { - wasmOpts = append(wasmOpts, wasmkeeper.WithVMCacheMetrics(prometheus.DefaultRegisterer)) - } - homeDir := cast.ToString(appOpts.Get(flags.FlagHome)) chainID := cast.ToString(appOpts.Get(flags.FlagChainID)) if chainID == "" { @@ -263,7 +255,6 @@ func (ac appCreator) newApp( cast.ToUint(appOpts.Get(server.FlagInvCheckPeriod)), ac.encCfg, appOpts, - wasmOpts, baseapp.SetPruning(pruningOpts), baseapp.SetMinGasPrices(cast.ToString(appOpts.Get(server.FlagMinGasPrices))), baseapp.SetHaltHeight(cast.ToUint64(appOpts.Get(server.FlagHaltHeight))), @@ -308,7 +299,6 @@ func (ac appCreator) appExport( loadLatest = true } - var emptyWasmOpts []wasm.Option app := feeapp.NewFeeAbs( logger, db, @@ -319,7 +309,6 @@ func (ac appCreator) appExport( cast.ToUint(appOpts.Get(server.FlagInvCheckPeriod)), ac.encCfg, appOpts, - emptyWasmOpts, ) if height != -1 { diff --git a/go.mod b/go.mod index 268b4060..32c4d2e5 100644 --- a/go.mod +++ b/go.mod @@ -4,8 +4,6 @@ go 1.21 require ( cosmossdk.io/errors v1.0.0-beta.7 - github.com/CosmWasm/wasmd v0.40.0-rc.0 - github.com/CosmWasm/wasmvm v1.2.1 github.com/cometbft/cometbft v0.37.2 github.com/cometbft/cometbft-db v0.7.0 github.com/cosmos/cosmos-sdk v0.47.0 @@ -16,7 +14,6 @@ require ( github.com/golang/protobuf v1.5.3 github.com/gorilla/mux v1.8.0 github.com/grpc-ecosystem/grpc-gateway v1.16.0 - github.com/prometheus/client_golang v1.14.0 github.com/rakyll/statik v0.1.7 github.com/spf13/cast v1.5.0 github.com/spf13/cobra v1.6.1 @@ -25,6 +22,8 @@ require ( google.golang.org/grpc v1.54.0 ) +require github.com/prometheus/client_golang v1.14.0 // indirect + require ( cloud.google.com/go v0.110.0 // indirect cloud.google.com/go/compute v1.18.0 // indirect @@ -69,7 +68,6 @@ require ( github.com/dgraph-io/badger/v2 v2.2007.4 // indirect github.com/dgraph-io/ristretto v0.1.1 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect - github.com/docker/distribution v2.8.1+incompatible // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/dvsekhvalnov/jose2go v1.5.0 // indirect github.com/felixge/httpsnoop v1.0.2 // indirect @@ -85,7 +83,6 @@ require ( github.com/golang/snappy v0.0.4 // indirect github.com/google/btree v1.1.2 // indirect github.com/google/go-cmp v0.5.9 // indirect - github.com/google/gofuzz v1.2.0 // indirect github.com/google/orderedcode v0.0.1 // indirect github.com/google/uuid v1.3.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect @@ -126,7 +123,6 @@ require ( github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mtibben/percent v0.2.1 // indirect - github.com/opencontainers/go-digest v1.0.0 // indirect github.com/pelletier/go-toml/v2 v2.0.6 // indirect github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d // indirect github.com/pkg/errors v0.9.1 // indirect diff --git a/go.sum b/go.sum index a67be43f..3ebaf4bf 100644 --- a/go.sum +++ b/go.sum @@ -212,10 +212,6 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= -github.com/CosmWasm/wasmd v0.40.0-rc.0 h1:QhJzLSWQCjUjrEPO2dc61WgafnaxetuKZRBHUfKJR84= -github.com/CosmWasm/wasmd v0.40.0-rc.0/go.mod h1:9MispMuIWmjs6HlgRx+XPLfOD0y1k7iQx5KIE2cNGTc= -github.com/CosmWasm/wasmvm v1.2.1 h1:si0tRsRDdUShV0k51Wn6zRKlmj3/WWP9Yr4cLmDTf+8= -github.com/CosmWasm/wasmvm v1.2.1/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= @@ -383,8 +379,6 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= -github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= diff --git a/x/feeabs/ibctesting/chain.go b/x/feeabs/ibctesting/chain.go index 1a980714..a243ede0 100644 --- a/x/feeabs/ibctesting/chain.go +++ b/x/feeabs/ibctesting/chain.go @@ -6,7 +6,6 @@ import ( "testing" "time" - "github.com/CosmWasm/wasmd/x/wasm" clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" commitmenttypes "github.com/cosmos/ibc-go/v7/modules/core/23-commitment/types" @@ -85,7 +84,7 @@ type PacketAck struct { // // Time management is handled by the Coordinator in order to ensure synchrony between chains. // Each update of any chain increments the block header time for all chains by 5 seconds. -func NewTestChain(t *testing.T, coord *Coordinator, chainID string, opts ...wasm.Option) *TestChain { +func NewTestChain(t *testing.T, coord *Coordinator, chainID string) *TestChain { t.Helper() // generate validator private/public key privVal := mock.NewPV() @@ -108,7 +107,7 @@ func NewTestChain(t *testing.T, coord *Coordinator, chainID string, opts ...wasm Coins: sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, amount)), } - app := NewTestingAppDecorator(t, feeabs.SetupWithGenesisValSet(t, valSet, []authtypes.GenesisAccount{acc}, opts, chainID, balance)) + app := NewTestingAppDecorator(t, feeabs.SetupWithGenesisValSet(t, valSet, []authtypes.GenesisAccount{acc}, chainID, balance)) // create current header and call begin block header := tmproto.Header{ diff --git a/x/feeabs/ibctesting/coordinator.go b/x/feeabs/ibctesting/coordinator.go index 1a325095..c98aa6e6 100644 --- a/x/feeabs/ibctesting/coordinator.go +++ b/x/feeabs/ibctesting/coordinator.go @@ -6,7 +6,6 @@ import ( "testing" "time" - wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" host "github.com/cosmos/ibc-go/v7/modules/core/24-host" ibctesting "github.com/cosmos/ibc-go/v7/testing" @@ -32,7 +31,7 @@ type Coordinator struct { } // NewCoordinator initializes Coordinator with N TestChain's -func NewCoordinator(t *testing.T, n int, opts ...[]wasmkeeper.Option) *Coordinator { +func NewCoordinator(t *testing.T, n int) *Coordinator { t.Helper() chains := make(map[string]*TestChain) coord := &Coordinator{ @@ -42,11 +41,7 @@ func NewCoordinator(t *testing.T, n int, opts ...[]wasmkeeper.Option) *Coordinat for i := 0; i < n; i++ { chainID := GetChainID(i) - var x []wasmkeeper.Option - if len(opts) > i { - x = opts[i] - } - chains[chainID] = NewTestChain(t, coord, chainID, x...) + chains[chainID] = NewTestChain(t, coord, chainID) } coord.Chains = chains diff --git a/x/feeabs/ibctesting/wasm.go b/x/feeabs/ibctesting/wasm.go deleted file mode 100644 index 3ca05b9d..00000000 --- a/x/feeabs/ibctesting/wasm.go +++ /dev/null @@ -1,75 +0,0 @@ -package ibctesting - -import ( - "fmt" - - "github.com/CosmWasm/wasmd/x/wasm/types" - ibctesting "github.com/cosmos/ibc-go/v7/testing" - "github.com/stretchr/testify/require" - - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/cometbft/cometbft/libs/rand" - - feeabs "github.com/osmosis-labs/fee-abstraction/v7/app" -) - -var wasmIdent = []byte("\x00\x61\x73\x6D") - -// SeedNewContractInstance stores some wasm code and instantiates a new contract on this chain. -// This method can be called to prepare the store with some valid CodeInfo and ContractInfo. The returned -// Address is the contract address for this instance. Test should make use of this data and/or use NewIBCContractMockWasmer -// for using a contract mock in Go. -func (chain *TestChain) SeedNewContractInstance() sdk.AccAddress { - pInstResp := chain.StoreCode(append(wasmIdent, rand.Bytes(10)...)) - codeID := pInstResp.CodeID - - anyAddressStr := chain.SenderAccount.GetAddress().String() - initMsg := []byte(fmt.Sprintf(`{"verifier": %q, "beneficiary": %q}`, anyAddressStr, anyAddressStr)) - return chain.InstantiateContract(codeID, initMsg) -} - -func (chain *TestChain) StoreCode(byteCode []byte) types.MsgStoreCodeResponse { - storeMsg := &types.MsgStoreCode{ - Sender: chain.SenderAccount.GetAddress().String(), - WASMByteCode: byteCode, - } - r, err := chain.SendMsgs(storeMsg) - require.NoError(chain.t, err) - require.Len(chain.t, r.MsgResponses, 1) - require.NotEmpty(chain.t, r.MsgResponses[0].GetCachedValue()) - // unmarshal protobuf response from data - pInstResp := r.MsgResponses[0].GetCachedValue().(*types.MsgStoreCodeResponse) - require.NotEmpty(chain.t, pInstResp.CodeID) - require.NotEmpty(chain.t, pInstResp.Checksum) - return *pInstResp -} - -func (chain *TestChain) InstantiateContract(codeID uint64, initMsg []byte) sdk.AccAddress { - instantiateMsg := &types.MsgInstantiateContract{ - Sender: chain.SenderAccount.GetAddress().String(), - Admin: chain.SenderAccount.GetAddress().String(), - CodeID: codeID, - Label: "ibc-test", - Msg: initMsg, - Funds: sdk.Coins{ibctesting.TestCoin}, - } - - r, err := chain.SendMsgs(instantiateMsg) - require.NoError(chain.t, err) - require.Len(chain.t, r.MsgResponses, 1) - require.NotEmpty(chain.t, r.MsgResponses[0].GetCachedValue()) - pExecResp := r.MsgResponses[0].GetCachedValue().(*types.MsgInstantiateContractResponse) - a, err := sdk.AccAddressFromBech32(pExecResp.Address) - require.NoError(chain.t, err) - - return a -} - -// ContractInfo is a helper function to returns the ContractInfo for the given contract address -func (chain *TestChain) ContractInfo(contractAddr sdk.AccAddress) *types.ContractInfo { - type testSupporter interface { - TestSupport() *feeabs.TestSupport - } - return chain.App.(testSupporter).TestSupport().WasmKeeper().GetContractInfo(chain.GetContext(), contractAddr) -} diff --git a/x/feeabs/relay_test.go b/x/feeabs/relay_test.go index 5a5920b9..4e160bee 100644 --- a/x/feeabs/relay_test.go +++ b/x/feeabs/relay_test.go @@ -1,210 +1,3 @@ package feeabs_test -import ( - "testing" - - wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" - "github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting" - wasmvm "github.com/CosmWasm/wasmvm" - wasmvmtypes "github.com/CosmWasm/wasmvm/types" - ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - ibctesting "github.com/cosmos/ibc-go/v7/testing" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - sdkerrors "cosmossdk.io/errors" - "cosmossdk.io/math" - - sdk "github.com/cosmos/cosmos-sdk/types" - - wasmibctesting "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/ibctesting" -) - -func TestFromIBCTransferToContract(t *testing.T) { - // scenario: given two chains, - // with a contract on chain B - // then the contract can handle the receiving side of an ics20 transfer - // that was started on chain A via ibc transfer module - - transferAmount := math.NewInt(1) - specs := map[string]struct { - contract wasmtesting.IBCContractCallbacks - setupContract func(t *testing.T, contract wasmtesting.IBCContractCallbacks, chain *wasmibctesting.TestChain) - expChainABalanceDiff math.Int - expChainBBalanceDiff math.Int - }{ - "ack": { - contract: &ackReceiverContract{}, - setupContract: func(t *testing.T, contract wasmtesting.IBCContractCallbacks, chain *wasmibctesting.TestChain) { - t.Helper() - c := contract.(*ackReceiverContract) - c.t = t - c.chain = chain - }, - expChainABalanceDiff: transferAmount.Neg(), - expChainBBalanceDiff: transferAmount, - }, - } - for name, spec := range specs { - t.Run(name, func(t *testing.T) { - var ( - chainAOpts = []wasmkeeper.Option{wasmkeeper.WithWasmEngine( - wasmtesting.NewIBCContractMockWasmer(spec.contract), - )} - coordinator = wasmibctesting.NewCoordinator(t, 2, []wasmkeeper.Option{}, chainAOpts) - chainA = coordinator.GetChain(wasmibctesting.GetChainID(0)) - chainB = coordinator.GetChain(wasmibctesting.GetChainID(1)) - ) - coordinator.CommitBlock(chainA, chainB) - myContractAddr := chainB.SeedNewContractInstance() - contractBPortID := chainB.ContractInfo(myContractAddr).IBCPortID - - spec.setupContract(t, spec.contract, chainB) - - path := wasmibctesting.NewPath(chainA, chainB) - path.EndpointA.ChannelConfig = &ibctesting.ChannelConfig{ - PortID: "transfer", - Version: ibctransfertypes.Version, - Order: channeltypes.UNORDERED, - } - path.EndpointB.ChannelConfig = &ibctesting.ChannelConfig{ - PortID: contractBPortID, - Version: ibctransfertypes.Version, - Order: channeltypes.UNORDERED, - } - - coordinator.SetupConnections(path) - coordinator.CreateChannels(path) - - originalChainABalance := chainA.Balance(chainA.SenderAccount.GetAddress(), sdk.DefaultBondDenom) - // when transfer via sdk transfer from A (module) -> B (contract) - coinToSendToB := sdk.NewCoin(sdk.DefaultBondDenom, transferAmount) - timeoutHeight := clienttypes.NewHeight(1, 110) - msg := ibctransfertypes.NewMsgTransfer(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID, coinToSendToB, chainA.SenderAccount.GetAddress().String(), chainB.SenderAccount.GetAddress().String(), timeoutHeight, 0, "") - _, err := chainA.SendMsgs(msg) - require.NoError(t, err) - require.NoError(t, path.EndpointB.UpdateClient()) - - // then - require.Equal(t, 1, len(chainA.PendingSendPackets)) - require.Equal(t, 0, len(chainB.PendingSendPackets)) - - // and when relay to chain B and handle Ack on chain A - err = coordinator.RelayAndAckPendingPackets(path) - require.NoError(t, err) - - // then - require.Equal(t, 0, len(chainA.PendingSendPackets)) - require.Equal(t, 0, len(chainB.PendingSendPackets)) - - // and source chain balance was decreased - newChainABalance := chainA.Balance(chainA.SenderAccount.GetAddress(), sdk.DefaultBondDenom) - assert.Equal(t, originalChainABalance.Amount.Add(spec.expChainABalanceDiff), newChainABalance.Amount) - - // and dest chain balance contains voucher - expBalance := ibctransfertypes.GetTransferCoin(path.EndpointB.ChannelConfig.PortID, path.EndpointB.ChannelID, coinToSendToB.Denom, spec.expChainBBalanceDiff) - gotBalance := chainB.Balance(chainB.SenderAccount.GetAddress(), expBalance.Denom) - assert.Equal(t, expBalance, gotBalance, "got total balance: %s", chainB.AllBalances(chainB.SenderAccount.GetAddress())) - }) - } -} - -var _ wasmtesting.IBCContractCallbacks = &ackReceiverContract{} - -// contract that acts as the receiving side for an ics-20 transfer. -type ackReceiverContract struct { - contractStub - t *testing.T - chain *wasmibctesting.TestChain -} - -func (c *ackReceiverContract) IBCPacketReceive(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCPacketReceiveMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCReceiveResult, uint64, error) { - packet := msg.Packet - - var src ibctransfertypes.FungibleTokenPacketData - if err := ibctransfertypes.ModuleCdc.UnmarshalJSON(packet.Data, &src); err != nil { - return nil, 0, err - } - require.NoError(c.t, src.ValidateBasic()) - - // call original ibctransfer keeper to not copy all code into this - ibcPacket := toIBCPacket(packet) - ctx := c.chain.GetContext() // HACK: please note that this is not reverted after checkTX - err := c.chain.GetTestSupport().TransferKeeper().OnRecvPacket(ctx, ibcPacket, src) - if err != nil { - return nil, 0, sdkerrors.Wrap(err, "within our smart contract") - } - - var log []wasmvmtypes.EventAttribute // note: all events are under `wasm` event type - ack := channeltypes.NewResultAcknowledgement([]byte{byte(1)}).Acknowledgement() - return &wasmvmtypes.IBCReceiveResult{Ok: &wasmvmtypes.IBCReceiveResponse{Acknowledgement: ack, Attributes: log}}, 0, nil -} - -func (c *ackReceiverContract) IBCPacketAck(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCPacketAckMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResponse, uint64, error) { - var data ibctransfertypes.FungibleTokenPacketData - if err := ibctransfertypes.ModuleCdc.UnmarshalJSON(msg.OriginalPacket.Data, &data); err != nil { - return nil, 0, err - } - // call original ibctransfer keeper to not copy all code into this - - var ack channeltypes.Acknowledgement - if err := ibctransfertypes.ModuleCdc.UnmarshalJSON(msg.Acknowledgement.Data, &ack); err != nil { - return nil, 0, err - } - - // call original ibctransfer keeper to not copy all code into this - ctx := c.chain.GetContext() // HACK: please note that this is not reverted after checkTX - ibcPacket := toIBCPacket(msg.OriginalPacket) - err := c.chain.GetTestSupport().TransferKeeper().OnAcknowledgementPacket(ctx, ibcPacket, data, ack) - if err != nil { - return nil, 0, sdkerrors.Wrap(err, "within our smart contract") - } - - return &wasmvmtypes.IBCBasicResponse{}, 0, nil -} - -// simple helper struct that implements connection setup methods. -type contractStub struct{} - -func (*contractStub) IBCChannelOpen(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCChannelOpenMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBC3ChannelOpenResponse, uint64, error) { - return &wasmvmtypes.IBC3ChannelOpenResponse{}, 0, nil -} - -func (*contractStub) IBCChannelConnect(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCChannelConnectMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResponse, uint64, error) { - return &wasmvmtypes.IBCBasicResponse{}, 0, nil -} - -func (*contractStub) IBCChannelClose(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCChannelCloseMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResponse, uint64, error) { - panic("implement me") -} - -func (*contractStub) IBCPacketReceive(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCPacketReceiveMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCReceiveResult, uint64, error) { - panic("implement me") -} - -func (*contractStub) IBCPacketAck(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCPacketAckMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResponse, uint64, error) { - return &wasmvmtypes.IBCBasicResponse{}, 0, nil -} - -func (*contractStub) IBCPacketTimeout(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCPacketTimeoutMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResponse, uint64, error) { - panic("implement me") -} - -func toIBCPacket(p wasmvmtypes.IBCPacket) channeltypes.Packet { - var height clienttypes.Height - if p.Timeout.Block != nil { - height = clienttypes.NewHeight(p.Timeout.Block.Revision, p.Timeout.Block.Height) - } - return channeltypes.Packet{ - Sequence: p.Sequence, - SourcePort: p.Src.PortID, - SourceChannel: p.Src.ChannelID, - DestinationPort: p.Dest.PortID, - DestinationChannel: p.Dest.ChannelID, - Data: p.Data, - TimeoutHeight: height, - TimeoutTimestamp: p.Timeout.Timestamp, - } -} +// TO DO: put relay test in here From 95245246a7901839c0d011e3a4167c1c7c9d05bd Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Mon, 14 Aug 2023 12:18:34 +0800 Subject: [PATCH 48/90] install the cosmic condom (#55) * install the cosmic condom * update interchaintest * update interchaintest --- go.mod | 10 +++-- go.sum | 80 +++++++++++++++++++++++++------------ tests/interchaintest/go.mod | 10 ++--- tests/interchaintest/go.sum | 39 ++++++++++++++++-- 4 files changed, 102 insertions(+), 37 deletions(-) diff --git a/go.mod b/go.mod index 32c4d2e5..461478a1 100644 --- a/go.mod +++ b/go.mod @@ -169,8 +169,12 @@ require ( replace ( // use cosmos fork of keyring github.com/99designs/keyring => github.com/cosmos/keyring v1.2.0 - github.com/cosmos/iavl => github.com/cosmos/iavl v0.20.0 - github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 - // use notional fork of packet forward middleware + // dgrijalva/jwt-go is deprecated and doesn't receive security updates. + // TODO: remove it: https://github.com/cosmos/cosmos-sdk/issues/13134 + github.com/dgrijalva/jwt-go => github.com/golang-jwt/jwt/v4 v4.4.2 + // Fix upstream GHSA-h395-qcrw-5vmq and GHSA-3vp4-m3rf-835h vulnerabilities. + // TODO Remove it: https://github.com/cosmos/cosmos-sdk/issues/10409 + github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.9.0 + // replace broken goleveldb github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 ) diff --git a/go.sum b/go.sum index 3ebaf4bf..216154fe 100644 --- a/go.sum +++ b/go.sum @@ -265,6 +265,9 @@ github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJ github.com/btcsuite/btcd/btcutil v1.1.2/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= +github.com/bytedance/sonic v1.8.0 h1:ea0Xadu+sHlu7x5O3gKhRpQ1IKiMrSiHttPF0ybECuA= +github.com/bytedance/sonic v1.8.0/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -278,6 +281,9 @@ github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= +github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM= github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= @@ -355,6 +361,7 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cucumber/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= github.com/cucumber/common/gherkin/go/v22 v22.0.0/go.mod h1:3mJT10B2GGn3MvVPd3FwR7m2u4tLhSRhWUqJU4KN4Fg= github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= @@ -375,7 +382,6 @@ github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= @@ -427,9 +433,8 @@ github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbS github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= -github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= -github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= +github.com/gin-gonic/gin v1.9.0 h1:OjyFBKICoexlu99ctXNR2gg+c5pKrKMuyjgARg9qeY8= +github.com/gin-gonic/gin v1.9.0/go.mod h1:W1Me9+hsUSyj3CePGrd1/QrKJMSJ1Tu/0hFEH89961k= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -445,14 +450,13 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= -github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= -github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= -github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= -github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= -github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= -github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= +github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.11.2 h1:q3SHpufmypg+erIExEKUmsgmhDTyhcJ38oeKGACXohU= +github.com/go-playground/validator/v10 v10.11.2/go.mod h1:NieE624vt4SCTJtD87arVLvdmjPAeV8BQlHtMnw9D7s= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= @@ -461,8 +465,8 @@ github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= -github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA= +github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= @@ -471,6 +475,13 @@ github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFG github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= @@ -691,6 +702,8 @@ github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/X github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= @@ -699,19 +712,23 @@ github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8 github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= -github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= +github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= @@ -727,7 +744,6 @@ github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GW github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= @@ -823,6 +839,7 @@ github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d h1:htwtWgtQo8YS6J github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -871,11 +888,11 @@ github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5X github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= github.com/regen-network/gocuke v0.6.2/go.mod h1:zYaqIHZobHyd0xOrHGPQjbhGJsuZ1oElx150u2o1xuk= -github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= -github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= @@ -954,11 +971,11 @@ github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= -github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= -github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/ugorji/go/codec v1.2.9 h1:rmenucSohSTiyL09Y+l2OCk+FrMxGMzho2+tjr5ticU= +github.com/ugorji/go/codec v1.2.9/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= @@ -1000,6 +1017,8 @@ go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+ go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670 h1:18EFjUmQOcUvxNYSkA6jO9VAiXCnxFY6NyDX0bHDmkU= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1014,6 +1033,7 @@ golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1117,6 +1137,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1191,7 +1213,6 @@ golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1256,11 +1277,15 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1272,15 +1297,20 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -1432,7 +1462,6 @@ google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200324203455-a04cca1dde73/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= @@ -1630,6 +1659,7 @@ nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0 pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= diff --git a/tests/interchaintest/go.mod b/tests/interchaintest/go.mod index 162f8473..81645e7b 100644 --- a/tests/interchaintest/go.mod +++ b/tests/interchaintest/go.mod @@ -12,8 +12,8 @@ require ( github.com/golang/protobuf v1.5.3 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 - github.com/osmosis-labs/fee-abstraction/v7 v7.0.0-20230812075354-557874272de0 - github.com/strangelove-ventures/interchaintest/v7 v7.1.2 + github.com/osmosis-labs/fee-abstraction/v7 v7.0.0-20230813134946-d84bbd63ad17 + github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230810233557-5fdb1e8a62e5 github.com/stretchr/testify v1.8.4 go.uber.org/zap v1.24.0 google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 @@ -30,6 +30,7 @@ require ( cosmossdk.io/core v0.5.1 // indirect cosmossdk.io/depinject v1.0.0-alpha.3 // indirect cosmossdk.io/errors v1.0.0 // indirect + cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca // indirect cosmossdk.io/math v1.0.1 // indirect cosmossdk.io/tools/rosetta v0.2.1 // indirect filippo.io/edwards25519 v1.0.0 // indirect @@ -142,6 +143,7 @@ require ( github.com/linxGnu/grocksdb v1.7.16 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.19 // indirect github.com/mattn/go-pointer v0.0.1 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect @@ -177,6 +179,7 @@ require ( github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/rs/cors v1.8.3 // indirect + github.com/rs/zerolog v1.29.1 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect @@ -220,7 +223,6 @@ require ( gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - gotest.tools/v3 v3.5.0 // indirect lukechampine.com/blake3 v1.1.7 // indirect lukechampine.com/uint128 v1.2.0 // indirect modernc.org/cc/v3 v3.40.0 // indirect @@ -245,8 +247,6 @@ replace ( github.com/btcsuite/btcd => github.com/btcsuite/btcd v0.22.2 //indirect // interchaintest supports ICS features so we need this for now - github.com/cosmos/cosmos-sdk => github.com/cosmos/cosmos-sdk v0.47.0 - github.com/cosmos/iavl => github.com/cosmos/iavl v0.20.0 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 // For this nested module, you always want to replace the parent reference with the current worktree. github.com/osmosis-labs/fee-abstraction/v7 => ../../ diff --git a/tests/interchaintest/go.sum b/tests/interchaintest/go.sum index 990f619f..56f59026 100644 --- a/tests/interchaintest/go.sum +++ b/tests/interchaintest/go.sum @@ -195,6 +195,8 @@ cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04= cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0= +cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca h1:msenprh2BLLRwNT7zN56TbBHOGk/7ARQckXHxXyvjoQ= +cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca/go.mod h1:PkIAKXZvaxrTRc++z53XMRvFk8AcGGWYHcMIPzVYX9c= cosmossdk.io/math v1.0.1 h1:Qx3ifyOPaMLNH/89WeZFH268yCvU4xEcnPLu3sJqPPg= cosmossdk.io/math v1.0.1/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= @@ -287,6 +289,8 @@ github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOF github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= +github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= +github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -344,13 +348,14 @@ github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= github.com/cosmos/cosmos-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= -github.com/cosmos/cosmos-sdk v0.47.0 h1:GKYtBpvjwuDEVix1vdnQpq7PuEOnItuEK0vdAL2cZ5g= -github.com/cosmos/cosmos-sdk v0.47.0/go.mod h1:FTtZbqiHCZ2vun9WrPq6qLQafNKkAuIhLAxzLjr2TiI= +github.com/cosmos/cosmos-sdk v0.47.4 h1:FVUpEprm58nMmBX4xkRdMDaIG5Nr4yy92HZAfGAw9bg= +github.com/cosmos/cosmos-sdk v0.47.4/go.mod h1:R5n+uM7vguVPFap4pgkdvQCT1nVo/OtPwrlAU40rvok= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= @@ -377,6 +382,7 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cucumber/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= github.com/cucumber/common/gherkin/go/v22 v22.0.0/go.mod h1:3mJT10B2GGn3MvVPd3FwR7m2u4tLhSRhWUqJU4KN4Fg= github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= @@ -460,6 +466,7 @@ github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= +github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -480,11 +487,13 @@ github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiU github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= +github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= +github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= @@ -497,8 +506,10 @@ github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6Wezm github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= +github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= @@ -674,6 +685,7 @@ github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdv github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= @@ -708,8 +720,8 @@ github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLf github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/ipfs/go-cid v0.2.0 h1:01JTiihFq9en9Vz0lc0VDWvZe/uBonGpzo4THP0vcQ0= github.com/ipfs/go-cid v0.2.0/go.mod h1:P+HXFDF4CVhaVayiEb4wkAy7zBHxBwsJyt0Y5U6MLro= -github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b h1:izTof8BKh/nE1wrKOrloNA5q4odOarjf+Xpe+4qow98= -github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= +github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= +github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -750,6 +762,8 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxv github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -778,9 +792,14 @@ github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3v github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-pointer v0.0.1 h1:n+XhsuGeVO6MEAp7xyEukFINEa+Quek5psIR/ylA6o0= @@ -913,6 +932,7 @@ github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0 github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo= github.com/pierrec/xxHash v0.1.5/go.mod h1:w2waW5Zoa/Wc4Yqe0wgrIYAGKqRMf7czn2HNKXmuL+I= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -969,11 +989,16 @@ github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qq github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc= +github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -1129,6 +1154,7 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= @@ -1353,6 +1379,7 @@ golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1372,6 +1399,7 @@ golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1401,6 +1429,7 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1743,7 +1772,9 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY= +gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= From 3c77d74a169cebb5822c2445b016495a2429c4f1 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Mon, 14 Aug 2023 21:22:56 +0800 Subject: [PATCH 49/90] ci: speed up interchaintest by skipping arm builds (#65) * Update push_docker_image.yml * Update push_docker_image.yml * Update interchaintest.yaml * correct issues in pr --- .github/workflows/interchaintest.yaml | 12 ++++-------- .github/workflows/push_docker_image.yml | 22 +++++++++------------- 2 files changed, 13 insertions(+), 21 deletions(-) diff --git a/.github/workflows/interchaintest.yaml b/.github/workflows/interchaintest.yaml index 03ccfb29..d268c305 100644 --- a/.github/workflows/interchaintest.yaml +++ b/.github/workflows/interchaintest.yaml @@ -12,10 +12,6 @@ jobs: steps: - name: Check out the repo uses: actions/checkout@v3 - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - name: Login to DockerHub uses: docker/login-action@v2 with: @@ -28,14 +24,14 @@ jobs: file: Dockerfile context: . push: true - platforms: linux/amd64,linux/arm64 + platforms: linux/amd64 tags: | osmolabs/fee-abstraction-ictest:latest test-basic: runs-on: ubuntu-latest needs: build-and-push-image steps: - - name: Set up Go 1.19 + - name: Set up Go 1.21 uses: actions/setup-go@v3 with: go-version: 1.21 @@ -51,7 +47,7 @@ jobs: runs-on: ubuntu-latest needs: build-and-push-image steps: - - name: Set up Go 1.19 + - name: Set up Go 1.21 uses: actions/setup-go@v3 with: go-version: 1.21 @@ -67,7 +63,7 @@ jobs: runs-on: ubuntu-latest needs: build-and-push-image steps: - - name: Set up Go 1.19 + - name: Set up Go 1.21 uses: actions/setup-go@v3 with: go-version: 1.21 diff --git a/.github/workflows/push_docker_image.yml b/.github/workflows/push_docker_image.yml index 8bf0e393..aaf92839 100644 --- a/.github/workflows/push_docker_image.yml +++ b/.github/workflows/push_docker_image.yml @@ -6,7 +6,7 @@ # osmosis-labs/fee-abstraction:X.Y # is updated to X.Y.Z # osmosis-labs/fee-abstraction:X # is updated to X.Y.Z # osmosis-labs/fee-abstraction:latest # is updated to X.Y.Z -# +# # All the images above have support for linux/amd64 and linux/arm64. # # Due to QEMU virtualization used to build multi-platform docker images @@ -19,27 +19,24 @@ on: types: [published, created, edited] push: tags: - - 'v[0-9]+.[0-9]+.[0-9]+' # ignore rc + - 'v[0-9]+.[0-9]+.[0-9]+' # ignore rc jobs: feeapp-images: runs-on: ubuntu-latest steps: - - - name: Check out the repo + - name: Check out the repo uses: actions/checkout@v3 - - - name: Set up QEMU + - name: Set up QEMU uses: docker/setup-qemu-action@v2 - - - name: Set up Docker Buildx + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 + - name: Login to DockerHub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Parse tag + - name: Parse tag id: tag run: | VERSION=$(echo ${{ github.ref_name }} | sed "s/v//") @@ -50,8 +47,7 @@ jobs: echo "MAJOR_VERSION=$MAJOR_VERSION" >> $GITHUB_ENV echo "MINOR_VERSION=$MINOR_VERSION" >> $GITHUB_ENV echo "PATCH_VERSION=$PATCH_VERSION" >> $GITHUB_ENV - - - name: Build and push + - name: Build and push id: build_push_image uses: docker/build-push-action@v3 with: @@ -62,4 +58,4 @@ jobs: tags: | osmolabs/fee-abstraction:${{ env.MAJOR_VERSION }} osmolabs/fee-abstraction:${{ env.MAJOR_VERSION }}.${{ env.MINOR_VERSION }} - osmolabs/fee-abstraction:${{ env.MAJOR_VERSION }}.${{ env.MINOR_VERSION }}.${{ env.PATCH_VERSION }} \ No newline at end of file + osmolabs/fee-abstraction:${{ env.MAJOR_VERSION }}.${{ env.MINOR_VERSION }}.${{ env.PATCH_VERSION }} From 64cadee9c7f522cc87fc6ae04f6290d7e547119b Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Mon, 14 Aug 2023 21:25:01 +0800 Subject: [PATCH 50/90] Create mergify.yml (#63) * Create mergify.yml * update mergify.yml * update mergify configuration --- .github/mergify.yml | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 .github/mergify.yml diff --git a/.github/mergify.yml b/.github/mergify.yml new file mode 100644 index 00000000..e1b21558 --- /dev/null +++ b/.github/mergify.yml @@ -0,0 +1,44 @@ +queue_rules: + - name: default + conditions: + - '#approved-reviews-by>=1' + - base=main + - label=automerge + +pull_request_rules: + - name: automerge to main with label automerge and branch protection passing + conditions: + - '#approved-reviews-by>=1' + - base=main + - label=automerge + actions: + queue: + name: default + method: squash + commit_message_template: | + {{ title }} (#{{ number }}) + {{ body }} + - name: backport patches to v4.0.x branch + conditions: + - base=main + - label=backport-to-v4.0.x + actions: + backport: + branches: + - release/v4.0.x + - name: backport patches to v6.0.x branch + conditions: + - base=main + - label=backport-to-v6.0.x + actions: + backport: + branches: + - release/v6.0.x + - name: backport patches to v7.0.x branch + conditions: + - base=main + - label=backport-to-v7.0.x + actions: + backport: + branches: + - release/v7.0.x From c2aba57cad788ae0942174d88370ca183780e1ac Mon Sep 17 00:00:00 2001 From: ducnt131 <62016666+anhductn2001@users.noreply.github.com> Date: Tue, 15 Aug 2023 01:35:19 +0700 Subject: [PATCH 51/90] Push protogen image (#68) --- .github/workflows/push_protobuf_image.yml | 45 +++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 .github/workflows/push_protobuf_image.yml diff --git a/.github/workflows/push_protobuf_image.yml b/.github/workflows/push_protobuf_image.yml new file mode 100644 index 00000000..649c7256 --- /dev/null +++ b/.github/workflows/push_protobuf_image.yml @@ -0,0 +1,45 @@ +# This workflow pushes new protobuf docker images on every change of Dockerfile. +# +# Images are pushed: +# +# osmolabs/fa-proto-gen:commit-hash # is pushed +# osmolabs/fa-proto-gen:latest # is updated +# +# All the images above have support for linux/amd64 and linux/arm64. + +name: Push Protogen Images + +on: + push: + paths: + - "proto/Dockerfile" +jobs: + feeapp-images: + runs-on: ubuntu-latest + steps: + - + name: Check out the repo + uses: actions/checkout@v3 + - + name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - + name: Login to DockerHub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - + name: Build and push + id: build_push_image + uses: docker/build-push-action@v3 + with: + file: proto/Dockerfile + context: . + push: true + platforms: linux/amd64,linux/arm64 + tags: | + osmolabs/fa-proto-gen:${{ github.sha }} \ No newline at end of file From f6a76b3298aa09afb5c5d65d51e1c0eeafb7a4b2 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Tue, 15 Aug 2023 09:50:10 +0800 Subject: [PATCH 52/90] update protos (#66) --- Makefile | 4 +- go.mod | 10 +- go.sum | 38 -------- proto/buf.gen.gogo.yaml | 4 +- proto/buf.lock | 13 ++- proto/buf.yaml | 13 +-- .../feeabstraction/absfee/v1beta1/epoch.proto | 2 +- .../absfee/v1beta1/feepool.proto | 2 +- .../absfee/v1beta1/genesis.proto | 2 +- .../absfee/v1beta1/osmosisibc.proto | 2 +- .../absfee/v1beta1/params.proto | 2 +- .../absfee/v1beta1/proposal.proto | 2 +- .../feeabstraction/absfee/v1beta1/query.proto | 2 +- proto/feeabstraction/absfee/v1beta1/tx.proto | 2 +- scripts/protocgen.sh | 4 +- tests/interchaintest/go.mod | 4 +- x/feeabs/types/epoch.pb.go | 59 ++++++------ x/feeabs/types/feepool.pb.go | 28 +++--- x/feeabs/types/genesis.pb.go | 46 ++++----- x/feeabs/types/osmosisibc.pb.go | 90 ++++++++--------- x/feeabs/types/params.pb.go | 56 +++++------ x/feeabs/types/proposal.pb.go | 58 +++++------ x/feeabs/types/query.pb.go | 96 +++++++++---------- x/feeabs/types/query.pb.gw.go | 8 +- x/feeabs/types/tx.pb.go | 72 +++++++------- 25 files changed, 296 insertions(+), 323 deletions(-) diff --git a/Makefile b/Makefile index 09543f0d..80676c85 100644 --- a/Makefile +++ b/Makefile @@ -120,7 +120,7 @@ ictest-all: ictest-basic ictest-ibc ictest-packet-forward ############################################################################### ### Proto ### ############################################################################### -PROTO_BUILDER_IMAGE=ghcr.io/cosmos/proto-builder +PROTO_BUILDER_IMAGE=ghcr.io/cosmos/proto-builder:0.13.5 proto-all: proto-format proto-gen @@ -152,4 +152,4 @@ proto-image-push: ############################################################################### run-querygen: - @go run cmd/querygen/main.go \ No newline at end of file + @go run cmd/querygen/main.go diff --git a/go.mod b/go.mod index 461478a1..1cf43a9a 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/osmosis-labs/fee-abstraction/v7 -go 1.21 +go 1.20 require ( cosmossdk.io/errors v1.0.0-beta.7 @@ -10,7 +10,6 @@ require ( github.com/cosmos/gogoproto v1.4.6 github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79 github.com/cosmos/ibc-go/v7 v7.0.0 - github.com/gogo/protobuf v1.3.2 github.com/golang/protobuf v1.5.3 github.com/gorilla/mux v1.8.0 github.com/grpc-ecosystem/grpc-gateway v1.16.0 @@ -22,7 +21,10 @@ require ( google.golang.org/grpc v1.54.0 ) -require github.com/prometheus/client_golang v1.14.0 // indirect +require ( + github.com/gogo/protobuf v1.3.2 // indirect + github.com/prometheus/client_golang v1.14.0 // indirect +) require ( cloud.google.com/go v0.110.0 // indirect @@ -157,7 +159,7 @@ require ( golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/api v0.110.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.30.0 // indirect + google.golang.org/protobuf v1.30.0 gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 216154fe..4df3ee15 100644 --- a/go.sum +++ b/go.sum @@ -118,7 +118,6 @@ cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQn cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= cloud.google.com/go/longrunning v0.3.0 h1:NjljC+FYPV3uh5/OwWT6pVU+doBqMg2x/rZlE+CamDs= -cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= @@ -207,7 +206,6 @@ filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5E github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= @@ -215,9 +213,7 @@ github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1: github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= -github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= @@ -225,10 +221,8 @@ github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMx github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= -github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/alecthomas/participle/v2 v2.0.0-alpha7 h1:cK4vjj0VSgb3lN1nuKA5F7dw+1s1pWBe5bx7nNCnN+c= -github.com/alecthomas/participle/v2 v2.0.0-alpha7/go.mod h1:NumScqsC42o9x+dGj8/YqsIfhrIQjFEOFovxotbBirA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -262,9 +256,7 @@ github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsy github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= -github.com/btcsuite/btcd/btcutil v1.1.2/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= github.com/bytedance/sonic v1.8.0 h1:ea0Xadu+sHlu7x5O3gKhRpQ1IKiMrSiHttPF0ybECuA= github.com/bytedance/sonic v1.8.0/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= @@ -309,7 +301,6 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/apd/v3 v3.1.0 h1:MK3Ow7LH0W8zkd5GMKA1PvS9qG3bWFI95WaVNfyZJ/w= -github.com/cockroachdb/apd/v3 v3.1.0/go.mod h1:6qgPBMXjATAdD/VefbRP9NoSLKjbB4LCoA7gN4LpHs4= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= @@ -321,7 +312,6 @@ github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4 github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= -github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -363,16 +353,13 @@ github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcX github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cucumber/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= -github.com/cucumber/common/gherkin/go/v22 v22.0.0/go.mod h1:3mJT10B2GGn3MvVPd3FwR7m2u4tLhSRhWUqJU4KN4Fg= github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= -github.com/cucumber/common/messages/go/v17 v17.1.1/go.mod h1:bpGxb57tDE385Rb2EohgUadLkAbhoC4IyCFi89u/JQI= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= -github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= @@ -386,9 +373,7 @@ github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUn github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= -github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= @@ -411,21 +396,16 @@ github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go. github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= -github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= -github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= @@ -470,7 +450,6 @@ github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MG github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= -github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= @@ -548,14 +527,12 @@ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= -github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= -github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -680,7 +657,6 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b h1:izTof8BKh/nE1wrKOrloNA5q4odOarjf+Xpe+4qow98= -github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -722,7 +698,6 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -793,7 +768,6 @@ github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OS github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= @@ -802,19 +776,14 @@ github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= -github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= -github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= -github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= -github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -824,7 +793,6 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= -github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= @@ -887,14 +855,12 @@ github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqn github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= -github.com/regen-network/gocuke v0.6.2/go.mod h1:zYaqIHZobHyd0xOrHGPQjbhGJsuZ1oElx150u2o1xuk= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= @@ -912,7 +878,6 @@ github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6Mwd github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= @@ -1076,7 +1041,6 @@ golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1370,7 +1334,6 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1645,7 +1608,6 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= -gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/proto/buf.gen.gogo.yaml b/proto/buf.gen.gogo.yaml index acee6127..9c8ba0a4 100644 --- a/proto/buf.gen.gogo.yaml +++ b/proto/buf.gen.gogo.yaml @@ -2,7 +2,7 @@ version: v1 plugins: - name: gocosmos out: .. - opt: plugins=grpc,Mgoogle/protobuf/duration.proto=github.com/gogo/protobuf/types,Mgoogle/protobuf/struct.proto=github.com/gogo/protobuf/types,Mgoogle/protobuf/timestamp.proto=github.com/gogo/protobuf/types,Mgoogle/protobuf/wrappers.proto=github.com/gogo/protobuf/types,Mgoogle/protobuf/any.proto=github.com/cosmos/cosmos-sdk/codec/types,Mcosmos/orm/v1alpha1/orm.proto=github.com/cosmos/cosmos-sdk/api/cosmos/orm/v1alpha1 + opt: plugins=grpc,Mgoogle/protobuf/any.proto=github.com/cosmos/cosmos-sdk/codec/types - name: grpc-gateway out: .. - opt: logtostderr=true + opt: logtostderr=true,allow_colon_final_segments=true diff --git a/proto/buf.lock b/proto/buf.lock index b6c2e172..7906031c 100644 --- a/proto/buf.lock +++ b/proto/buf.lock @@ -5,15 +5,24 @@ deps: owner: cosmos repository: cosmos-proto commit: 1935555c206d4afb9e94615dfd0fad31 + digest: shake256:c74d91a3ac7ae07d579e90eee33abf9b29664047ac8816500cf22c081fec0d72d62c89ce0bebafc1f6fec7aa5315be72606717740ca95007248425102c365377 - remote: buf.build owner: cosmos repository: cosmos-sdk - commit: fe5ddc8e345e4caf919a9a120fc1b017 + commit: 954f7b05f38440fc8250134b15adec47 + digest: shake256:2ab4404fd04a7d1d52df0e2d0f2d477a3d83ffd88d876957bf3fedfd702c8e52833d65b3ce1d89a3c5adf2aab512616b0e4f51d8463f07eda9a8a3317ee3ac54 - remote: buf.build owner: cosmos repository: gogo-proto commit: 34d970b699f84aa382f3c29773a60836 + digest: shake256:3d3bee5229ba579e7d19ffe6e140986a228b48a8c7fe74348f308537ab95e9135210e81812489d42cd8941d33ff71f11583174ccc5972e86e6112924b6ce9f04 + - remote: buf.build + owner: cosmos + repository: ics23 + commit: 55085f7c710a45f58fa09947208eb70b + digest: shake256:9bf0bc495b5a11c88d163d39ef521bc4b00bc1374a05758c91d82821bdc61f09e8c2c51dda8452529bf80137f34d852561eacbe9550a59015d51cecb0dacb628 - remote: buf.build owner: googleapis repository: googleapis - commit: 75b4300737fb4efca0831636be94e517 + commit: 8d7204855ec14631a499bd7393ce1970 + digest: shake256:40bf4112960cad01281930beed85829910768e32e80e986791596853eccd42c0cbd9d96690b918f658020d2d427e16f8b6514e2ac7f4a10306fd32e77be44329 diff --git a/proto/buf.yaml b/proto/buf.yaml index 62e7738b..096fc5d3 100644 --- a/proto/buf.yaml +++ b/proto/buf.yaml @@ -1,10 +1,11 @@ version: v1 -name: buf.build/notional-labs/fee-abstraction +name: buf.build/osmosis-labs/fee-abstraction deps: - - buf.build/cosmos/cosmos-sdk - - buf.build/cosmos/cosmos-proto - - buf.build/cosmos/gogo-proto - - buf.build/googleapis/googleapis + - buf.build/cosmos/cosmos-sdk:v0.47.0 + - buf.build/cosmos/cosmos-proto:1935555c206d4afb9e94615dfd0fad31 + - buf.build/cosmos/gogo-proto:a14993478f40695898ed8a86931094b6656e8a5d + - buf.build/googleapis/googleapis:8d7204855ec14631a499bd7393ce1970 + - buf.build/cosmos/ics23:b1abd8678aab07165efd453c96796a179eb3131f breaking: use: - FILE @@ -20,4 +21,4 @@ lint: - PACKAGE_VERSION_SUFFIX - RPC_REQUEST_STANDARD_NAME ignore: - - tendermint \ No newline at end of file + - tendermint diff --git a/proto/feeabstraction/absfee/v1beta1/epoch.proto b/proto/feeabstraction/absfee/v1beta1/epoch.proto index 57d27157..42d78682 100644 --- a/proto/feeabstraction/absfee/v1beta1/epoch.proto +++ b/proto/feeabstraction/absfee/v1beta1/epoch.proto @@ -5,7 +5,7 @@ import "gogoproto/gogo.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; -option go_package = "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types"; +option go_package = "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types"; message EpochInfo { // identifier is a unique reference to this particular timer. diff --git a/proto/feeabstraction/absfee/v1beta1/feepool.proto b/proto/feeabstraction/absfee/v1beta1/feepool.proto index 0f61b453..6bd3a634 100644 --- a/proto/feeabstraction/absfee/v1beta1/feepool.proto +++ b/proto/feeabstraction/absfee/v1beta1/feepool.proto @@ -6,4 +6,4 @@ import "google/api/annotations.proto"; import "cosmos/base/query/v1beta1/pagination.proto"; import "feeabstraction/absfee/v1beta1/params.proto"; -option go_package = "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types"; +option go_package = "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types"; diff --git a/proto/feeabstraction/absfee/v1beta1/genesis.proto b/proto/feeabstraction/absfee/v1beta1/genesis.proto index 0bc50fc9..252b220c 100644 --- a/proto/feeabstraction/absfee/v1beta1/genesis.proto +++ b/proto/feeabstraction/absfee/v1beta1/genesis.proto @@ -7,7 +7,7 @@ import "cosmos/base/query/v1beta1/pagination.proto"; import "feeabstraction/absfee/v1beta1/params.proto"; import "feeabstraction/absfee/v1beta1/epoch.proto"; -option go_package = "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types"; +option go_package = "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types"; // Params defines the parameters for the feeabs module. message GenesisState { diff --git a/proto/feeabstraction/absfee/v1beta1/osmosisibc.proto b/proto/feeabstraction/absfee/v1beta1/osmosisibc.proto index 87ce84bd..d119bb5c 100644 --- a/proto/feeabstraction/absfee/v1beta1/osmosisibc.proto +++ b/proto/feeabstraction/absfee/v1beta1/osmosisibc.proto @@ -6,7 +6,7 @@ import "google/protobuf/timestamp.proto"; import "google/api/annotations.proto"; import "tendermint/abci/types.proto"; -option go_package = "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types"; +option go_package = "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types"; message QueryArithmeticTwapToNowRequest { uint64 pool_id = 1; diff --git a/proto/feeabstraction/absfee/v1beta1/params.proto b/proto/feeabstraction/absfee/v1beta1/params.proto index 4437ee85..88b4b7f0 100644 --- a/proto/feeabstraction/absfee/v1beta1/params.proto +++ b/proto/feeabstraction/absfee/v1beta1/params.proto @@ -6,7 +6,7 @@ import "google/api/annotations.proto"; import "cosmos/base/query/v1beta1/pagination.proto"; import "google/protobuf/duration.proto"; -option go_package = "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types"; +option go_package = "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types"; // Params defines the parameters for the feeabs module. message Params { diff --git a/proto/feeabstraction/absfee/v1beta1/proposal.proto b/proto/feeabstraction/absfee/v1beta1/proposal.proto index 4170ea89..b4226c57 100644 --- a/proto/feeabstraction/absfee/v1beta1/proposal.proto +++ b/proto/feeabstraction/absfee/v1beta1/proposal.proto @@ -5,7 +5,7 @@ import "gogoproto/gogo.proto"; import "google/protobuf/timestamp.proto"; import "google/api/annotations.proto"; -option go_package = "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types"; +option go_package = "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types"; message HostChainFeeAbsConfig { // ibc token is allowed to be used as fee token diff --git a/proto/feeabstraction/absfee/v1beta1/query.proto b/proto/feeabstraction/absfee/v1beta1/query.proto index 4e9707fb..7fcab196 100644 --- a/proto/feeabstraction/absfee/v1beta1/query.proto +++ b/proto/feeabstraction/absfee/v1beta1/query.proto @@ -8,7 +8,7 @@ import "feeabstraction/absfee/v1beta1/osmosisibc.proto"; import "feeabstraction/absfee/v1beta1/proposal.proto"; import "cosmos/base/v1beta1/coin.proto"; -option go_package = "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types"; +option go_package = "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types"; // Query defines the gRPC querier service. service Query { diff --git a/proto/feeabstraction/absfee/v1beta1/tx.proto b/proto/feeabstraction/absfee/v1beta1/tx.proto index 8f9e6f5c..f401fd81 100644 --- a/proto/feeabstraction/absfee/v1beta1/tx.proto +++ b/proto/feeabstraction/absfee/v1beta1/tx.proto @@ -9,7 +9,7 @@ import "feeabstraction/absfee/v1beta1/epoch.proto"; import "cosmos/base/v1beta1/coin.proto"; import "google/protobuf/timestamp.proto"; -option go_package = "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types"; +option go_package = "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types"; // Msg is the cosmos.group.v1 Msg service. service Msg { diff --git a/scripts/protocgen.sh b/scripts/protocgen.sh index c760e8e1..b744b289 100644 --- a/scripts/protocgen.sh +++ b/scripts/protocgen.sh @@ -19,7 +19,7 @@ cd .. # move proto files to the right places # # Note: Proto files are suffixed with the current binary version. -cp -r github.com/notional-labs/fee-abstraction/v4/x/feeabs/types/* ./x/feeabs/types/ +cp -r github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types/* ./x/feeabs/types/ rm -rf github.com -go mod tidy -compat=1.18 +go mod tidy diff --git a/tests/interchaintest/go.mod b/tests/interchaintest/go.mod index 81645e7b..e31c797c 100644 --- a/tests/interchaintest/go.mod +++ b/tests/interchaintest/go.mod @@ -1,8 +1,6 @@ module github.com/notional-labs/fee-abstraction/tests/interchaintest -go 1.21 - -toolchain go1.21.0 +go 1.20 require ( github.com/cosmos/cosmos-proto v1.0.0-beta.2 diff --git a/x/feeabs/types/epoch.pb.go b/x/feeabs/types/epoch.pb.go index 17fd669a..a9b380b8 100644 --- a/x/feeabs/types/epoch.pb.go +++ b/x/feeabs/types/epoch.pb.go @@ -8,7 +8,8 @@ import ( _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" - _ "github.com/gogo/protobuf/types" + _ "google.golang.org/protobuf/types/known/durationpb" + _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -163,34 +164,34 @@ func init() { var fileDescriptor_4a30326e6468dfa9 = []byte{ // 452 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x3f, 0x6f, 0xd3, 0x40, - 0x14, 0xcf, 0xd1, 0x50, 0x9c, 0x03, 0x04, 0x58, 0x05, 0x4c, 0xa4, 0x9e, 0xa3, 0xb0, 0x04, 0x41, - 0x7d, 0x0a, 0x74, 0x2a, 0x5b, 0x00, 0x09, 0x18, 0xd3, 0x0e, 0x88, 0x25, 0x3a, 0x3b, 0xcf, 0xf6, - 0x49, 0xb1, 0xcf, 0xb2, 0x9f, 0x2b, 0xb2, 0xf1, 0x11, 0x32, 0xf2, 0x91, 0x3a, 0x76, 0x64, 0x0a, - 0x28, 0xd9, 0x18, 0xfb, 0x09, 0x90, 0xef, 0xec, 0x92, 0x12, 0x50, 0x37, 0xfb, 0xfd, 0xfe, 0xbd, - 0xf7, 0xd3, 0xd1, 0x67, 0x21, 0x80, 0xf0, 0x0b, 0xcc, 0x45, 0x80, 0x52, 0xa5, 0x5c, 0xf8, 0x45, - 0x08, 0xc0, 0x4f, 0x87, 0x3e, 0xa0, 0x18, 0x72, 0xc8, 0x54, 0x10, 0x7b, 0x59, 0xae, 0x50, 0xd9, - 0xfb, 0x57, 0xa9, 0x9e, 0xa1, 0x7a, 0x35, 0xb5, 0xbb, 0x17, 0xa9, 0x48, 0x69, 0x26, 0xaf, 0xbe, - 0x8c, 0xa8, 0xcb, 0x22, 0xa5, 0xa2, 0x19, 0x70, 0xfd, 0xe7, 0x97, 0x21, 0x9f, 0x96, 0xb9, 0xd0, - 0x72, 0x83, 0xbb, 0x7f, 0xe3, 0x28, 0x13, 0x28, 0x50, 0x24, 0x99, 0x21, 0xf4, 0x17, 0x6d, 0xda, - 0x79, 0x57, 0x6d, 0xf1, 0x21, 0x0d, 0x95, 0xcd, 0x28, 0x95, 0x53, 0x48, 0x51, 0x86, 0x12, 0x72, - 0x87, 0xf4, 0xc8, 0xa0, 0x33, 0xde, 0x98, 0xd8, 0x9f, 0x28, 0x2d, 0x50, 0xe4, 0x38, 0xa9, 0x6c, - 0x9c, 0x1b, 0x3d, 0x32, 0xb8, 0xfd, 0xb2, 0xeb, 0x99, 0x0c, 0xaf, 0xc9, 0xf0, 0x4e, 0x9a, 0x8c, - 0xd1, 0xfe, 0xd9, 0xd2, 0x6d, 0x5d, 0x2c, 0xdd, 0x07, 0x73, 0x91, 0xcc, 0x8e, 0xfa, 0x7f, 0xb4, - 0xfd, 0xc5, 0x0f, 0x97, 0x8c, 0x3b, 0x7a, 0x50, 0xd1, 0xed, 0x98, 0x5a, 0xcd, 0xea, 0xce, 0x8e, - 0xf6, 0x7d, 0xb2, 0xe5, 0xfb, 0xb6, 0x26, 0x8c, 0x86, 0x95, 0xed, 0xaf, 0xa5, 0x6b, 0x37, 0x92, - 0x17, 0x2a, 0x91, 0x08, 0x49, 0x86, 0xf3, 0x8b, 0xa5, 0x7b, 0xcf, 0x84, 0x35, 0x58, 0xff, 0x5b, - 0x15, 0x75, 0xe9, 0x6e, 0x3f, 0xa5, 0x77, 0x83, 0x32, 0xcf, 0x21, 0xc5, 0x89, 0xae, 0xdf, 0x69, - 0xf7, 0xc8, 0x60, 0x67, 0x7c, 0xa7, 0x1e, 0xea, 0x32, 0xec, 0xaf, 0x84, 0x3a, 0x57, 0x58, 0x93, - 0x8d, 0xbb, 0x6f, 0x5e, 0x7b, 0xf7, 0xf3, 0xfa, 0x6e, 0xd7, 0xac, 0xf2, 0x3f, 0x27, 0xd3, 0xc2, - 0xc3, 0xcd, 0xe4, 0xe3, 0xcb, 0x46, 0x0e, 0xe9, 0x23, 0xc3, 0x0f, 0x54, 0x99, 0xa2, 0x4c, 0x23, - 0x23, 0x84, 0xa9, 0xb3, 0xdb, 0x23, 0x03, 0x6b, 0xbc, 0xa7, 0xd1, 0x37, 0x35, 0x78, 0x6c, 0x30, - 0xfb, 0x35, 0xed, 0xfe, 0x2b, 0x2d, 0x06, 0x19, 0xc5, 0xe8, 0x58, 0xfa, 0xd4, 0xc7, 0x5b, 0x81, - 0xef, 0x35, 0xfc, 0xb1, 0x6d, 0xdd, 0xba, 0x6f, 0x8d, 0x4e, 0xce, 0x56, 0x8c, 0x9c, 0xaf, 0x18, - 0xf9, 0xb9, 0x62, 0x64, 0xb1, 0x66, 0xad, 0xf3, 0x35, 0x6b, 0x7d, 0x5f, 0xb3, 0xd6, 0xe7, 0xa3, - 0x48, 0x62, 0x5c, 0xfa, 0x5e, 0xa0, 0x12, 0x9e, 0xaa, 0xaa, 0x4d, 0x31, 0x3b, 0x98, 0x09, 0xbf, - 0xe0, 0x21, 0xc0, 0xc1, 0xe6, 0x3b, 0x3f, 0x3d, 0xe4, 0x5f, 0xb8, 0x79, 0xd0, 0x1c, 0xe7, 0x19, - 0x14, 0xfe, 0xae, 0xae, 0xe9, 0xd5, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0c, 0xc1, 0xc8, 0xe4, - 0x12, 0x03, 0x00, 0x00, + 0x14, 0xcf, 0xd1, 0x50, 0x9c, 0x03, 0x04, 0x58, 0x05, 0x4c, 0xa4, 0xda, 0x51, 0x58, 0x82, 0xa0, + 0x3e, 0x05, 0x90, 0x10, 0xb0, 0x05, 0x90, 0x80, 0x31, 0x61, 0x40, 0x2c, 0xd1, 0xd9, 0x79, 0xb6, + 0x4f, 0x8a, 0x7d, 0x96, 0xef, 0xb9, 0x22, 0x1b, 0x1f, 0x21, 0x23, 0x1f, 0xa9, 0x63, 0x47, 0xa6, + 0x80, 0x92, 0x8d, 0xb1, 0x9f, 0x00, 0xf9, 0xce, 0x2e, 0x29, 0x01, 0xb1, 0xd9, 0xef, 0xf7, 0xef, + 0xbd, 0x9f, 0x8e, 0x3e, 0x88, 0x00, 0x78, 0xa0, 0xb0, 0xe0, 0x21, 0x0a, 0x99, 0x31, 0x1e, 0xa8, + 0x08, 0x80, 0x1d, 0x0f, 0x03, 0x40, 0x3e, 0x64, 0x90, 0xcb, 0x30, 0xf1, 0xf3, 0x42, 0xa2, 0xb4, + 0x0f, 0x2f, 0x52, 0x7d, 0x43, 0xf5, 0x6b, 0x6a, 0xf7, 0x20, 0x96, 0xb1, 0xd4, 0x4c, 0x56, 0x7d, + 0x19, 0x51, 0xd7, 0x8d, 0xa5, 0x8c, 0xe7, 0xc0, 0xf4, 0x5f, 0x50, 0x46, 0x6c, 0x56, 0x16, 0x5c, + 0xcb, 0x0d, 0xee, 0xfd, 0x89, 0xa3, 0x48, 0x41, 0x21, 0x4f, 0x73, 0x43, 0xe8, 0x2f, 0xdb, 0xb4, + 0xf3, 0xa6, 0xda, 0xe2, 0x5d, 0x16, 0x49, 0xdb, 0xa5, 0x54, 0xcc, 0x20, 0x43, 0x11, 0x09, 0x28, + 0x1c, 0xd2, 0x23, 0x83, 0xce, 0x78, 0x6b, 0x62, 0x7f, 0xa4, 0x54, 0x21, 0x2f, 0x70, 0x5a, 0xd9, + 0x38, 0x97, 0x7a, 0x64, 0x70, 0xf5, 0x71, 0xd7, 0x37, 0x19, 0x7e, 0x93, 0xe1, 0x7f, 0x68, 0x32, + 0x46, 0x87, 0x27, 0x2b, 0xaf, 0x75, 0xb6, 0xf2, 0x6e, 0x2d, 0x78, 0x3a, 0x7f, 0xd1, 0xff, 0xad, + 0xed, 0x2f, 0xbf, 0x7b, 0x64, 0xdc, 0xd1, 0x83, 0x8a, 0x6e, 0x27, 0xd4, 0x6a, 0x56, 0x77, 0xf6, + 0xb4, 0xef, 0xbd, 0x1d, 0xdf, 0xd7, 0x35, 0x61, 0x34, 0xac, 0x6c, 0x7f, 0xae, 0x3c, 0xbb, 0x91, + 0x3c, 0x92, 0xa9, 0x40, 0x48, 0x73, 0x5c, 0x9c, 0xad, 0xbc, 0x1b, 0x26, 0xac, 0xc1, 0xfa, 0x5f, + 0xab, 0xa8, 0x73, 0x77, 0xfb, 0x3e, 0xbd, 0x1e, 0x96, 0x45, 0x01, 0x19, 0x4e, 0x75, 0xfd, 0x4e, + 0xbb, 0x47, 0x06, 0x7b, 0xe3, 0x6b, 0xf5, 0x50, 0x97, 0x61, 0x7f, 0x21, 0xd4, 0xb9, 0xc0, 0x9a, + 0x6e, 0xdd, 0x7d, 0xf9, 0xbf, 0x77, 0x3f, 0xac, 0xef, 0xf6, 0xcc, 0x2a, 0xff, 0x72, 0x32, 0x2d, + 0xdc, 0xde, 0x4e, 0x9e, 0x9c, 0x37, 0xf2, 0x94, 0xde, 0x31, 0xfc, 0x50, 0x96, 0x19, 0x8a, 0x2c, + 0x36, 0x42, 0x98, 0x39, 0xfb, 0x3d, 0x32, 0xb0, 0xc6, 0x07, 0x1a, 0x7d, 0x55, 0x83, 0x13, 0x83, + 0xd9, 0x2f, 0x69, 0xf7, 0x6f, 0x69, 0x09, 0x88, 0x38, 0x41, 0xc7, 0xd2, 0xa7, 0xde, 0xdd, 0x09, + 0x7c, 0xab, 0xe1, 0xf7, 0x6d, 0xeb, 0xca, 0x4d, 0x6b, 0x34, 0x39, 0x59, 0xbb, 0xe4, 0x74, 0xed, + 0x92, 0x1f, 0x6b, 0x97, 0x2c, 0x37, 0x6e, 0xeb, 0x74, 0xe3, 0xb6, 0xbe, 0x6d, 0xdc, 0xd6, 0xa7, + 0xe7, 0xb1, 0xc0, 0xa4, 0x0c, 0xfc, 0x50, 0xa6, 0x4c, 0xaa, 0x54, 0x2a, 0xa1, 0x8e, 0xe6, 0x3c, + 0x50, 0x2c, 0x02, 0x38, 0xda, 0x7e, 0xe6, 0xc7, 0xcf, 0xd8, 0x67, 0x66, 0xde, 0x33, 0xc3, 0x45, + 0x0e, 0x2a, 0xd8, 0xd7, 0x2d, 0x3d, 0xf9, 0x15, 0x00, 0x00, 0xff, 0xff, 0xf9, 0xde, 0x16, 0x6a, + 0x11, 0x03, 0x00, 0x00, } func (m *EpochInfo) Marshal() (dAtA []byte, err error) { diff --git a/x/feeabs/types/feepool.pb.go b/x/feeabs/types/feepool.pb.go index d9f4f8a2..0f33e7ae 100644 --- a/x/feeabs/types/feepool.pb.go +++ b/x/feeabs/types/feepool.pb.go @@ -28,19 +28,19 @@ func init() { } var fileDescriptor_aeac12e01fe4cbff = []byte{ - // 220 bytes of a gzipped FileDescriptorProto + // 218 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x8f, 0x31, 0x4e, 0xc5, 0x30, - 0x0c, 0x86, 0xdb, 0x85, 0x81, 0x11, 0x31, 0x3d, 0x41, 0x0e, 0x00, 0x7a, 0xb1, 0x9e, 0x60, 0x62, - 0xe4, 0x0c, 0x4c, 0x6c, 0x4e, 0xe5, 0x86, 0x48, 0x69, 0x1c, 0xe2, 0xbc, 0x8a, 0xde, 0x82, 0x63, - 0x31, 0x76, 0x64, 0x44, 0xed, 0x45, 0x50, 0xda, 0x82, 0x60, 0x79, 0x9b, 0x25, 0x7f, 0xff, 0xf7, - 0xdb, 0xe7, 0xb7, 0x2d, 0x11, 0x1a, 0xc9, 0x09, 0x9b, 0xec, 0x38, 0x00, 0x1a, 0x69, 0x89, 0xa0, - 0x3f, 0x18, 0xca, 0x78, 0x80, 0x96, 0x28, 0x32, 0x7b, 0x1d, 0x13, 0x67, 0xbe, 0xb8, 0xfe, 0x0f, - 0xeb, 0x15, 0xd6, 0x1b, 0xbc, 0xbb, 0xb4, 0x6c, 0x79, 0x21, 0xa1, 0x4c, 0x6b, 0x68, 0x77, 0x65, - 0x99, 0xad, 0x27, 0xc0, 0xe8, 0x00, 0x43, 0xe0, 0x8c, 0x25, 0x2b, 0xdb, 0xf6, 0xa6, 0x61, 0xe9, - 0x58, 0xc0, 0xa0, 0x10, 0xbc, 0x1e, 0x29, 0x0d, 0xbf, 0xdd, 0x11, 0xad, 0x0b, 0x0b, 0xfc, 0xc3, - 0x9e, 0xbe, 0x35, 0x62, 0xc2, 0x6e, 0xf3, 0x3e, 0x3e, 0x7d, 0x4c, 0xaa, 0x1e, 0x27, 0x55, 0x7f, - 0x4d, 0xaa, 0x7e, 0x9f, 0x55, 0x35, 0xce, 0xaa, 0xfa, 0x9c, 0x55, 0xf5, 0xfc, 0x60, 0x5d, 0x7e, - 0x39, 0x1a, 0xdd, 0x70, 0x07, 0x81, 0x8b, 0x08, 0xfd, 0xde, 0xa3, 0x91, 0xf2, 0xec, 0xfe, 0xaf, - 0xbf, 0xbf, 0x87, 0x37, 0x58, 0x3b, 0x21, 0x0f, 0x91, 0xc4, 0x9c, 0x2d, 0xf2, 0xbb, 0xef, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x3a, 0x65, 0x55, 0x03, 0x36, 0x01, 0x00, 0x00, + 0x0c, 0x86, 0xdb, 0x85, 0x81, 0x11, 0x31, 0x3d, 0x41, 0x0e, 0x00, 0x7a, 0xb1, 0x2a, 0x06, 0xc4, + 0xca, 0x15, 0xd8, 0xd8, 0x9c, 0xca, 0x0d, 0x91, 0xda, 0x38, 0xc4, 0x69, 0x45, 0x6f, 0xc1, 0xb1, + 0x18, 0x3b, 0x32, 0xa2, 0xf6, 0x22, 0xa8, 0x69, 0x41, 0xb0, 0xbc, 0xcd, 0x92, 0xbf, 0xff, 0xff, + 0xec, 0xf3, 0xdb, 0x86, 0x08, 0x8d, 0xa4, 0x88, 0x75, 0x72, 0xec, 0x01, 0x8d, 0x34, 0x44, 0x30, + 0x54, 0x86, 0x12, 0x56, 0xd0, 0x10, 0x05, 0xe6, 0x56, 0x87, 0xc8, 0x89, 0x2f, 0xae, 0xff, 0xc3, + 0x7a, 0x83, 0xf5, 0x0e, 0x1f, 0x2e, 0x2d, 0x5b, 0xce, 0x24, 0xac, 0xd3, 0x16, 0x3a, 0x5c, 0x59, + 0x66, 0xdb, 0x12, 0x60, 0x70, 0x80, 0xde, 0x73, 0xc2, 0x35, 0x2b, 0xfb, 0xf6, 0xa6, 0x66, 0xe9, + 0x58, 0xc0, 0xa0, 0x10, 0xbc, 0xf6, 0x14, 0xc7, 0x5f, 0x77, 0x40, 0xeb, 0x7c, 0x86, 0x7f, 0xd8, + 0xd3, 0xb7, 0x06, 0x8c, 0xd8, 0xed, 0xbd, 0x8f, 0x4f, 0x1f, 0xb3, 0x2a, 0xa7, 0x59, 0x95, 0x5f, + 0xb3, 0x2a, 0xdf, 0x17, 0x55, 0x4c, 0x8b, 0x2a, 0x3e, 0x17, 0x55, 0x3c, 0x3f, 0x58, 0x97, 0x5e, + 0x7a, 0xa3, 0x6b, 0xee, 0x20, 0xbb, 0x9d, 0x1c, 0x5b, 0x34, 0xb2, 0xfe, 0x7a, 0xfc, 0x5b, 0x3f, + 0xdc, 0xc3, 0x1b, 0x6c, 0x4a, 0x48, 0x63, 0x20, 0x31, 0x67, 0xb9, 0xfb, 0xee, 0x3b, 0x00, 0x00, + 0xff, 0xff, 0xf7, 0xef, 0x9f, 0x4f, 0x35, 0x01, 0x00, 0x00, } diff --git a/x/feeabs/types/genesis.pb.go b/x/feeabs/types/genesis.pb.go index c638c518..979d05eb 100644 --- a/x/feeabs/types/genesis.pb.go +++ b/x/feeabs/types/genesis.pb.go @@ -95,29 +95,29 @@ func init() { } var fileDescriptor_c85d049bd82004cc = []byte{ - // 344 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x90, 0xc1, 0x4a, 0xeb, 0x40, - 0x14, 0x86, 0x93, 0xdb, 0x4b, 0x2e, 0x37, 0xd5, 0x4d, 0x50, 0x2c, 0x45, 0xd3, 0x52, 0x10, 0xa2, - 0xd2, 0x0c, 0xad, 0xae, 0xba, 0x2c, 0xa8, 0x74, 0x27, 0xb5, 0x2b, 0x37, 0x72, 0x92, 0x9e, 0xa4, - 0x81, 0x24, 0x67, 0xcc, 0x4c, 0x8b, 0x7d, 0x0b, 0x5f, 0x4a, 0xe8, 0xb2, 0x4b, 0x57, 0x45, 0xda, - 0x37, 0xf0, 0x09, 0x24, 0x99, 0x54, 0x74, 0x53, 0x77, 0x33, 0xf0, 0xfd, 0xdf, 0x7f, 0xce, 0x31, - 0x2f, 0x02, 0x44, 0xf0, 0x84, 0xcc, 0xc0, 0x97, 0x11, 0xa5, 0x0c, 0x3c, 0x11, 0x20, 0xb2, 0x59, - 0xc7, 0x43, 0x09, 0x1d, 0x16, 0x62, 0x8a, 0x22, 0x12, 0x2e, 0xcf, 0x48, 0x92, 0x75, 0xf2, 0x13, - 0x76, 0x15, 0xec, 0x96, 0x70, 0xfd, 0x20, 0xa4, 0x90, 0x0a, 0x92, 0xe5, 0x2f, 0x15, 0xaa, 0x1f, - 0x87, 0x44, 0x61, 0x8c, 0x0c, 0x78, 0xc4, 0x20, 0x4d, 0x49, 0x42, 0x9e, 0x2d, 0x95, 0xf5, 0x73, - 0x9f, 0x44, 0x42, 0x82, 0x79, 0x20, 0x90, 0x3d, 0x4d, 0x31, 0x9b, 0x7f, 0x75, 0x73, 0x08, 0xa3, - 0xb4, 0x80, 0xb7, 0xec, 0xee, 0x59, 0x39, 0x64, 0x90, 0x6c, 0xbd, 0x67, 0xbb, 0x59, 0xe4, 0xe4, - 0x4f, 0x14, 0xda, 0x7a, 0xd5, 0xcd, 0xbd, 0x5b, 0xb5, 0xe7, 0xbd, 0x04, 0x89, 0xd6, 0xc8, 0x34, - 0x94, 0xab, 0xa6, 0x37, 0x75, 0xa7, 0xda, 0x3d, 0x75, 0x77, 0xee, 0xed, 0xde, 0x15, 0x70, 0xff, - 0x70, 0xb1, 0x6a, 0x68, 0x1f, 0xab, 0xc6, 0xfe, 0x1c, 0x92, 0xb8, 0xd7, 0x52, 0x8a, 0xd6, 0xb0, - 0x74, 0x59, 0x37, 0xa6, 0x51, 0xb4, 0x8a, 0xda, 0x9f, 0x66, 0xc5, 0xa9, 0x76, 0x9d, 0x5f, 0xac, - 0xd7, 0x39, 0x3c, 0x48, 0x03, 0xea, 0xff, 0xcd, 0xc5, 0xc3, 0x32, 0x6d, 0x1d, 0x99, 0xff, 0x38, - 0x65, 0xf2, 0x31, 0x1a, 0xd7, 0x2a, 0x4d, 0xdd, 0xf9, 0x3f, 0x34, 0xf2, 0xef, 0x60, 0xdc, 0x1f, - 0x2d, 0xd6, 0xb6, 0xbe, 0x5c, 0xdb, 0xfa, 0xfb, 0xda, 0xd6, 0x5f, 0x36, 0xb6, 0xb6, 0xdc, 0xd8, - 0xda, 0xdb, 0xc6, 0xd6, 0x1e, 0x7a, 0x61, 0x24, 0x27, 0x53, 0xcf, 0xf5, 0x29, 0x61, 0x29, 0xe5, - 0x65, 0x10, 0xb7, 0x63, 0xf0, 0x04, 0x0b, 0x10, 0xdb, 0xdf, 0xcf, 0x34, 0xbb, 0x62, 0xcf, 0x4c, - 0xcd, 0xc5, 0xe4, 0x9c, 0xa3, 0xf0, 0x8c, 0xe2, 0x48, 0x97, 0x9f, 0x01, 0x00, 0x00, 0xff, 0xff, - 0x1c, 0x20, 0xb0, 0x15, 0x29, 0x02, 0x00, 0x00, + // 341 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x90, 0xc1, 0x4a, 0xc3, 0x40, + 0x10, 0x86, 0x13, 0x2b, 0x11, 0x53, 0xbd, 0x04, 0xc5, 0x52, 0x34, 0x2d, 0x05, 0x21, 0x2a, 0xcd, + 0xd2, 0x7a, 0x10, 0x3d, 0x16, 0x54, 0x7a, 0x93, 0xd6, 0x93, 0x17, 0x99, 0xa4, 0x93, 0x34, 0xd0, + 0x64, 0xd6, 0xec, 0xb6, 0xd8, 0xb7, 0xf0, 0xa5, 0x84, 0x1e, 0x7b, 0xf4, 0x54, 0xa4, 0x7d, 0x03, + 0x9f, 0x40, 0x92, 0x4d, 0x45, 0x2f, 0xf5, 0xb6, 0x0b, 0xdf, 0xff, 0xcd, 0xcc, 0x6f, 0x5e, 0x04, + 0x88, 0xe0, 0x09, 0x99, 0x82, 0x2f, 0x23, 0x4a, 0x18, 0x78, 0x22, 0x40, 0x64, 0x93, 0x96, 0x87, + 0x12, 0x5a, 0x2c, 0xc4, 0x04, 0x45, 0x24, 0x5c, 0x9e, 0x92, 0x24, 0xeb, 0xe4, 0x2f, 0xec, 0x2a, + 0xd8, 0x2d, 0xe0, 0xea, 0x41, 0x48, 0x21, 0xe5, 0x24, 0xcb, 0x5e, 0x2a, 0x54, 0x3d, 0x0e, 0x89, + 0xc2, 0x11, 0x32, 0xe0, 0x11, 0x83, 0x24, 0x21, 0x09, 0x59, 0xb6, 0x50, 0x56, 0xcf, 0x7d, 0x12, + 0x31, 0x09, 0xe6, 0x81, 0x40, 0xf6, 0x32, 0xc6, 0x74, 0xfa, 0x33, 0x9b, 0x43, 0x18, 0x25, 0x39, + 0xbc, 0x66, 0x37, 0xef, 0xca, 0x21, 0x85, 0x78, 0xed, 0x3d, 0xdb, 0xcc, 0x22, 0x27, 0x7f, 0xa8, + 0xd0, 0xc6, 0xbb, 0x6e, 0xee, 0xdd, 0xab, 0x3b, 0xfb, 0x12, 0x24, 0x5a, 0x8f, 0xa6, 0xa1, 0x5c, + 0x15, 0xbd, 0xae, 0x3b, 0xe5, 0xf6, 0xa9, 0xbb, 0xf1, 0x6e, 0xf7, 0x21, 0x87, 0x3b, 0x87, 0xb3, + 0x45, 0x4d, 0xfb, 0x5a, 0xd4, 0xf6, 0xa7, 0x10, 0x8f, 0x6e, 0x1a, 0x4a, 0xd1, 0xe8, 0x15, 0x2e, + 0xeb, 0xce, 0x34, 0xf2, 0xa9, 0xa2, 0xb2, 0x55, 0x2f, 0x39, 0xe5, 0xb6, 0xf3, 0x8f, 0xf5, 0x36, + 0x83, 0xbb, 0x49, 0x40, 0x9d, 0xed, 0x4c, 0xdc, 0x2b, 0xd2, 0xd6, 0x91, 0xb9, 0xc3, 0x29, 0x95, + 0xcf, 0xd1, 0xa0, 0x52, 0xaa, 0xeb, 0xce, 0x6e, 0xcf, 0xc8, 0xbe, 0xdd, 0x41, 0xa7, 0x3f, 0x5b, + 0xda, 0xfa, 0x7c, 0x69, 0xeb, 0x9f, 0x4b, 0x5b, 0x7f, 0x5b, 0xd9, 0xda, 0x7c, 0x65, 0x6b, 0x1f, + 0x2b, 0x5b, 0x7b, 0xba, 0x0e, 0x23, 0x39, 0x1c, 0x7b, 0xae, 0x4f, 0x31, 0xcb, 0xeb, 0x8e, 0x44, + 0x73, 0x04, 0x9e, 0x60, 0x01, 0x62, 0xf3, 0x77, 0x4b, 0x93, 0x2b, 0xf6, 0xca, 0xd4, 0x5a, 0x4c, + 0x4e, 0x39, 0x0a, 0xcf, 0xc8, 0x3b, 0xba, 0xfc, 0x0e, 0x00, 0x00, 0xff, 0xff, 0x28, 0x8c, 0x15, + 0xc6, 0x28, 0x02, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/x/feeabs/types/osmosisibc.pb.go b/x/feeabs/types/osmosisibc.pb.go index d1b18396..23c870d1 100644 --- a/x/feeabs/types/osmosisibc.pb.go +++ b/x/feeabs/types/osmosisibc.pb.go @@ -5,13 +5,13 @@ package types import ( fmt "fmt" + types "github.com/cometbft/cometbft/abci/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" - _ "github.com/gogo/protobuf/types" - types1 "github.com/cometbft/cometbft/abci/types" _ "google.golang.org/genproto/googleapis/api/annotations" + _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -334,7 +334,7 @@ func (m *InterchainQueryRequestPacket) GetRequests() []InterchainQueryRequest { // CosmosQuery contains a list of tendermint ABCI query requests. It should be // used when sending queries to an SDK host chain. type CosmosQuery struct { - Requests []types1.RequestQuery `protobuf:"bytes,1,rep,name=requests,proto3" json:"requests"` + Requests []types.RequestQuery `protobuf:"bytes,1,rep,name=requests,proto3" json:"requests"` } func (m *CosmosQuery) Reset() { *m = CosmosQuery{} } @@ -370,7 +370,7 @@ func (m *CosmosQuery) XXX_DiscardUnknown() { var xxx_messageInfo_CosmosQuery proto.InternalMessageInfo -func (m *CosmosQuery) GetRequests() []types1.RequestQuery { +func (m *CosmosQuery) GetRequests() []types.RequestQuery { if m != nil { return m.Requests } @@ -380,7 +380,7 @@ func (m *CosmosQuery) GetRequests() []types1.RequestQuery { // CosmosResponse contains a list of tendermint ABCI query responses. It should // be used when receiving responses from an SDK host chain. type CosmosResponse struct { - Responses []types1.ResponseQuery `protobuf:"bytes,1,rep,name=responses,proto3" json:"responses"` + Responses []types.ResponseQuery `protobuf:"bytes,1,rep,name=responses,proto3" json:"responses"` } func (m *CosmosResponse) Reset() { *m = CosmosResponse{} } @@ -416,7 +416,7 @@ func (m *CosmosResponse) XXX_DiscardUnknown() { var xxx_messageInfo_CosmosResponse proto.InternalMessageInfo -func (m *CosmosResponse) GetResponses() []types1.ResponseQuery { +func (m *CosmosResponse) GetResponses() []types.ResponseQuery { if m != nil { return m.Responses } @@ -440,43 +440,43 @@ func init() { var fileDescriptor_d7e956854d14a746 = []byte{ // 591 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x94, 0xc1, 0x6e, 0xd3, 0x40, - 0x10, 0x86, 0x63, 0x1a, 0x15, 0xb2, 0x41, 0x45, 0x58, 0xa8, 0x84, 0xd0, 0xd8, 0x91, 0x0f, 0x28, - 0x97, 0xec, 0xaa, 0x05, 0x2e, 0xbd, 0x40, 0xd2, 0x1e, 0xe8, 0xa5, 0x02, 0x2b, 0x12, 0x88, 0x4b, - 0x34, 0x76, 0x36, 0xc9, 0x2a, 0xb1, 0xd7, 0xf1, 0x6e, 0x1a, 0xf2, 0x16, 0xbd, 0xf0, 0x4e, 0x3d, - 0xf6, 0xc0, 0x01, 0x71, 0x08, 0x28, 0x79, 0x83, 0x3e, 0x01, 0xda, 0xb5, 0x9d, 0xa4, 0xad, 0xe1, - 0xe4, 0xd9, 0x99, 0x7f, 0xbe, 0x9d, 0x19, 0x8f, 0x8d, 0x70, 0x9f, 0x52, 0xf0, 0x84, 0x8c, 0xc1, - 0x97, 0x8c, 0x87, 0x04, 0x3c, 0xd1, 0xa7, 0x94, 0x5c, 0x1c, 0x7a, 0x54, 0xc2, 0x21, 0xe1, 0x22, - 0xe0, 0x82, 0x09, 0xe6, 0xf9, 0x38, 0x8a, 0xb9, 0xe4, 0x66, 0xed, 0xb6, 0x1e, 0x27, 0x7a, 0x9c, - 0xea, 0xab, 0xcf, 0x06, 0x7c, 0xc0, 0xb5, 0x92, 0x28, 0x2b, 0x49, 0xaa, 0xda, 0x03, 0xce, 0x07, - 0x63, 0x4a, 0xf4, 0xc9, 0x9b, 0xf6, 0x89, 0x64, 0x01, 0x15, 0x12, 0x82, 0x28, 0x15, 0x1c, 0xa4, - 0x02, 0x88, 0x18, 0x81, 0x30, 0xe4, 0x12, 0x14, 0x5c, 0xa4, 0xd1, 0x97, 0x92, 0x86, 0x3d, 0x1a, - 0x07, 0x2c, 0x94, 0x04, 0x3c, 0x9f, 0x11, 0x39, 0x8f, 0x68, 0x1a, 0x74, 0x7e, 0x18, 0xc8, 0xfe, - 0x34, 0xa5, 0xf1, 0xbc, 0x15, 0x33, 0x39, 0x0c, 0xa8, 0x64, 0x7e, 0x67, 0x06, 0x51, 0x87, 0x9f, - 0xf3, 0x99, 0x4b, 0x27, 0x53, 0x2a, 0xa4, 0xf9, 0x1c, 0x3d, 0x8c, 0x38, 0x1f, 0x77, 0x59, 0xaf, - 0x62, 0xd4, 0x8d, 0x46, 0xd1, 0xdd, 0x55, 0xc7, 0xb3, 0x9e, 0x59, 0x43, 0xc8, 0x03, 0x41, 0xbb, - 0x20, 0x04, 0x95, 0x95, 0x07, 0x75, 0xa3, 0x51, 0x72, 0x4b, 0xca, 0xd3, 0x52, 0x0e, 0xd3, 0x46, - 0xe5, 0xc9, 0x94, 0xcb, 0x2c, 0xbe, 0xa3, 0xe3, 0x48, 0xbb, 0x12, 0xc1, 0x17, 0x84, 0x84, 0x84, - 0x58, 0x76, 0x55, 0x43, 0x95, 0x62, 0xdd, 0x68, 0x94, 0x8f, 0xaa, 0x38, 0x69, 0x06, 0x67, 0xdd, - 0xe2, 0x4e, 0xd6, 0x6d, 0xbb, 0x76, 0xb5, 0xb0, 0x0b, 0x37, 0x0b, 0xfb, 0xe9, 0x1c, 0x82, 0xf1, - 0xb1, 0xb3, 0xc9, 0x75, 0x2e, 0x7f, 0xdb, 0x86, 0x5b, 0xd2, 0x0e, 0x25, 0x77, 0xbe, 0x1b, 0xa8, - 0xfe, 0xef, 0xb6, 0x44, 0xc4, 0x43, 0x41, 0xcd, 0x09, 0x7a, 0x02, 0xeb, 0x70, 0x57, 0xce, 0x20, - 0xd2, 0xfd, 0x95, 0xda, 0x1f, 0xd4, 0x3d, 0xbf, 0x16, 0xf6, 0xab, 0x01, 0x93, 0xc3, 0xa9, 0x87, - 0x7d, 0x1e, 0x10, 0x5f, 0xbf, 0xcb, 0xf4, 0xd1, 0x14, 0xbd, 0x51, 0x3a, 0xc6, 0x53, 0xea, 0xdf, - 0x2c, 0xec, 0xfd, 0xa4, 0xa2, 0x3b, 0x38, 0xc7, 0xdd, 0x83, 0x5b, 0xf7, 0x3b, 0xef, 0xd1, 0xfe, - 0x59, 0x28, 0x69, 0xec, 0x0f, 0x81, 0x85, 0xba, 0xc0, 0x6c, 0xc8, 0x26, 0x2a, 0xf6, 0x40, 0x82, - 0xae, 0xe0, 0xb1, 0xab, 0x6d, 0xe5, 0x8b, 0x40, 0x0e, 0xd3, 0xc9, 0x6a, 0xdb, 0x39, 0x41, 0x2f, - 0xee, 0x10, 0x3e, 0x82, 0x3f, 0xa2, 0xf2, 0x34, 0x4d, 0xc8, 0x83, 0x04, 0x34, 0xe0, 0x19, 0x44, - 0xd9, 0x0e, 0x46, 0x95, 0x5c, 0x48, 0xcb, 0x1f, 0xe5, 0x31, 0x9c, 0x19, 0x3a, 0xc8, 0x2f, 0x3b, - 0x49, 0x33, 0x3f, 0xa3, 0x47, 0x71, 0xe2, 0x10, 0x15, 0xa3, 0xbe, 0xd3, 0x28, 0x1f, 0xbd, 0xc5, - 0xff, 0xdd, 0x74, 0x9c, 0x8f, 0x6b, 0x17, 0xd5, 0xe4, 0xdd, 0x35, 0xcc, 0x39, 0x47, 0xe5, 0x13, - 0x3d, 0x71, 0xad, 0x32, 0xdf, 0xdd, 0xbb, 0xa7, 0x86, 0x37, 0xdb, 0x8d, 0xd5, 0x76, 0xe3, 0x14, - 0xa5, 0x13, 0xee, 0xf1, 0x3a, 0x68, 0x2f, 0xe1, 0xad, 0x97, 0xa0, 0x8d, 0x4a, 0x71, 0x6a, 0x67, - 0x4c, 0x2b, 0x87, 0x99, 0x28, 0xb6, 0xa1, 0x9b, 0xb4, 0x76, 0xe7, 0x6a, 0x69, 0x19, 0xd7, 0x4b, - 0xcb, 0xf8, 0xb3, 0xb4, 0x8c, 0xcb, 0x95, 0x55, 0xb8, 0x5e, 0x59, 0x85, 0x9f, 0x2b, 0xab, 0xf0, - 0xf5, 0x78, 0x6b, 0x83, 0x42, 0xae, 0x06, 0x01, 0xe3, 0xe6, 0x18, 0x3c, 0x41, 0xfa, 0x94, 0x36, - 0xb7, 0xff, 0x1c, 0x17, 0x6f, 0xc8, 0x37, 0x92, 0xcc, 0x2c, 0xd9, 0x2c, 0x6f, 0x57, 0x7f, 0x01, - 0xaf, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x10, 0xd9, 0x75, 0x86, 0x64, 0x04, 0x00, 0x00, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x94, 0xc1, 0x6e, 0xd3, 0x4c, + 0x10, 0xc7, 0xe3, 0xaf, 0x51, 0x3f, 0xb2, 0x41, 0x45, 0x58, 0xa8, 0x84, 0xd2, 0xd8, 0x91, 0x0f, + 0x28, 0x97, 0xee, 0xaa, 0x45, 0x08, 0xc1, 0x05, 0x9a, 0xf6, 0x40, 0x2f, 0x15, 0x98, 0x48, 0x20, + 0x2e, 0xd1, 0xda, 0xd9, 0x24, 0xab, 0xc6, 0x5e, 0xc7, 0x3b, 0x69, 0xc8, 0x5b, 0xf4, 0xc2, 0x3b, + 0xf5, 0xd8, 0x03, 0x07, 0xc4, 0x21, 0xa0, 0xe4, 0x0d, 0xfa, 0x04, 0x68, 0xd7, 0xeb, 0x24, 0x6d, + 0x0d, 0xa7, 0xcc, 0xce, 0xfc, 0xe7, 0xb7, 0x33, 0x93, 0xf1, 0x22, 0xdc, 0x63, 0x8c, 0x06, 0x12, + 0x52, 0x1a, 0x02, 0x17, 0x31, 0xa1, 0x81, 0xec, 0x31, 0x46, 0xce, 0xf7, 0x03, 0x06, 0x74, 0x9f, + 0x08, 0x19, 0x09, 0xc9, 0x25, 0x0f, 0x42, 0x9c, 0xa4, 0x02, 0x84, 0x5d, 0xbf, 0xa9, 0xc7, 0x99, + 0x1e, 0x1b, 0xfd, 0xce, 0xa3, 0xbe, 0xe8, 0x0b, 0xad, 0x24, 0xca, 0xca, 0x92, 0x76, 0xdc, 0xbe, + 0x10, 0xfd, 0x21, 0x23, 0xfa, 0x14, 0x8c, 0x7b, 0x04, 0x78, 0xc4, 0x24, 0xd0, 0x28, 0x31, 0x82, + 0x5d, 0x23, 0xa0, 0x09, 0x27, 0x34, 0x8e, 0x05, 0x50, 0x05, 0x97, 0x26, 0xfa, 0x14, 0x58, 0xdc, + 0x65, 0x69, 0xc4, 0x63, 0x20, 0x34, 0x08, 0x39, 0x81, 0x69, 0xc2, 0x4c, 0xd0, 0xfb, 0x6e, 0x21, + 0xf7, 0xc3, 0x98, 0xa5, 0xd3, 0xc3, 0x94, 0xc3, 0x20, 0x62, 0xc0, 0xc3, 0xf6, 0x84, 0x26, 0x6d, + 0x71, 0x2a, 0x26, 0x3e, 0x1b, 0x8d, 0x99, 0x04, 0xfb, 0x31, 0xfa, 0x3f, 0x11, 0x62, 0xd8, 0xe1, + 0xdd, 0x9a, 0xd5, 0xb0, 0x9a, 0x65, 0x7f, 0x53, 0x1d, 0x4f, 0xba, 0x76, 0x1d, 0xa1, 0x80, 0x4a, + 0xd6, 0xa1, 0x52, 0x32, 0xa8, 0xfd, 0xd7, 0xb0, 0x9a, 0x15, 0xbf, 0xa2, 0x3c, 0x87, 0xca, 0x61, + 0xbb, 0xa8, 0x3a, 0x1a, 0x0b, 0xc8, 0xe3, 0x1b, 0x3a, 0x8e, 0xb4, 0x2b, 0x13, 0x7c, 0x46, 0x48, + 0x02, 0x4d, 0xa1, 0xa3, 0x1a, 0xaa, 0x95, 0x1b, 0x56, 0xb3, 0x7a, 0xb0, 0x83, 0xb3, 0x66, 0x70, + 0xde, 0x2d, 0x6e, 0xe7, 0xdd, 0xb6, 0xea, 0x97, 0x33, 0xb7, 0x74, 0x3d, 0x73, 0x1f, 0x4e, 0x69, + 0x34, 0x7c, 0xed, 0xad, 0x72, 0xbd, 0x8b, 0x5f, 0xae, 0xe5, 0x57, 0xb4, 0x43, 0xc9, 0xbd, 0x6f, + 0x16, 0x6a, 0xfc, 0xbd, 0x2d, 0x99, 0x88, 0x58, 0x32, 0x7b, 0x84, 0x1e, 0xd0, 0x65, 0xb8, 0x03, + 0x13, 0x9a, 0xe8, 0xfe, 0x2a, 0xad, 0x77, 0xea, 0x9e, 0x9f, 0x33, 0xf7, 0x59, 0x9f, 0xc3, 0x60, + 0x1c, 0xe0, 0x50, 0x44, 0x24, 0xd4, 0xff, 0xa5, 0xf9, 0xd9, 0x93, 0xdd, 0x33, 0x33, 0xc6, 0x63, + 0x16, 0x5e, 0xcf, 0xdc, 0xed, 0xac, 0xa2, 0x5b, 0x38, 0xcf, 0xdf, 0xa2, 0x37, 0xee, 0xf7, 0xde, + 0xa2, 0xed, 0x93, 0x18, 0x58, 0x1a, 0x0e, 0x28, 0x8f, 0x75, 0x81, 0xf9, 0x90, 0x6d, 0x54, 0xee, + 0x52, 0xa0, 0xba, 0x82, 0xfb, 0xbe, 0xb6, 0x95, 0x2f, 0xa1, 0x30, 0x30, 0x93, 0xd5, 0xb6, 0x77, + 0x84, 0x9e, 0xdc, 0x22, 0xbc, 0xa7, 0xe1, 0x19, 0x83, 0x63, 0x93, 0x50, 0x04, 0x89, 0x58, 0x24, + 0x72, 0x88, 0xb2, 0x3d, 0x8c, 0x6a, 0x85, 0x90, 0xc3, 0xf0, 0xac, 0x88, 0xe1, 0x4d, 0xd0, 0x6e, + 0x71, 0xd9, 0x59, 0x9a, 0xfd, 0x09, 0xdd, 0x4b, 0x33, 0x87, 0xac, 0x59, 0x8d, 0x8d, 0x66, 0xf5, + 0xe0, 0x05, 0xfe, 0xe7, 0xa6, 0xe3, 0x62, 0x5c, 0xab, 0xac, 0x26, 0xef, 0x2f, 0x61, 0xde, 0x29, + 0xaa, 0x1e, 0xe9, 0x89, 0x6b, 0x95, 0xfd, 0xe6, 0xce, 0x3d, 0x75, 0xbc, 0xda, 0x6e, 0xac, 0xb6, + 0x1b, 0x1b, 0x94, 0x4e, 0xb8, 0xc3, 0x6b, 0xa3, 0xad, 0x8c, 0xb7, 0x5c, 0x82, 0x16, 0xaa, 0xa4, + 0xc6, 0xce, 0x99, 0x4e, 0x01, 0x33, 0x53, 0xac, 0x43, 0x57, 0x69, 0xad, 0x8f, 0x97, 0x73, 0xc7, + 0xba, 0x9a, 0x3b, 0xd6, 0xef, 0xb9, 0x63, 0x5d, 0x2c, 0x9c, 0xd2, 0xd5, 0xc2, 0x29, 0xfd, 0x58, + 0x38, 0xa5, 0x2f, 0xaf, 0xd6, 0x36, 0xc8, 0x3c, 0x06, 0x7b, 0x43, 0x1a, 0x48, 0xd2, 0x63, 0x6c, + 0x6f, 0xfd, 0xe1, 0x38, 0x7f, 0x49, 0xbe, 0x92, 0x6c, 0x64, 0xd9, 0x62, 0x05, 0x9b, 0xfa, 0x03, + 0x78, 0xfe, 0x27, 0x00, 0x00, 0xff, 0xff, 0xa5, 0x1d, 0x13, 0x0a, 0x63, 0x04, 0x00, 0x00, } func (m *QueryArithmeticTwapToNowRequest) Marshal() (dAtA []byte, err error) { @@ -1627,7 +1627,7 @@ func (m *CosmosQuery) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Requests = append(m.Requests, types1.RequestQuery{}) + m.Requests = append(m.Requests, types.RequestQuery{}) if err := m.Requests[len(m.Requests)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -1711,7 +1711,7 @@ func (m *CosmosResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Responses = append(m.Responses, types1.ResponseQuery{}) + m.Responses = append(m.Responses, types.ResponseQuery{}) if err := m.Responses[len(m.Responses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } diff --git a/x/feeabs/types/params.pb.go b/x/feeabs/types/params.pb.go index 96ab219f..4c548340 100644 --- a/x/feeabs/types/params.pb.go +++ b/x/feeabs/types/params.pb.go @@ -8,8 +8,8 @@ import ( _ "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - _ "github.com/gogo/protobuf/types" _ "google.golang.org/genproto/googleapis/api/annotations" + _ "google.golang.org/protobuf/types/known/durationpb" io "io" math "math" math_bits "math/bits" @@ -126,33 +126,33 @@ func init() { } var fileDescriptor_64e66a0978c84086 = []byte{ - // 403 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x92, 0x3f, 0x8f, 0xd3, 0x30, - 0x18, 0xc6, 0x9b, 0x03, 0x2a, 0x9d, 0xc7, 0xa8, 0x88, 0xa8, 0xba, 0x0b, 0x88, 0x09, 0x9d, 0x74, - 0x35, 0x15, 0xb0, 0xb0, 0xc1, 0x89, 0xa1, 0x0b, 0x1c, 0xd0, 0x89, 0xc5, 0x7a, 0xed, 0xbe, 0x49, - 0x2c, 0x35, 0xb6, 0x6b, 0xbb, 0x2d, 0xf7, 0x2d, 0xf8, 0x4a, 0x6c, 0x8c, 0x37, 0x32, 0xa2, 0xf6, - 0x8b, 0x20, 0xff, 0x69, 0xd5, 0xdb, 0x92, 0x3c, 0xbf, 0x9f, 0xdf, 0x47, 0xf1, 0x4b, 0xae, 0x1a, - 0x44, 0xe0, 0xce, 0x5b, 0x10, 0x5e, 0x6a, 0x45, 0x81, 0xbb, 0x06, 0x91, 0x6e, 0xa6, 0x1c, 0x3d, - 0x4c, 0xa9, 0x01, 0x0b, 0xbd, 0x9b, 0x18, 0xab, 0xbd, 0x2e, 0x2f, 0x1f, 0xb2, 0x93, 0xc4, 0x4e, - 0x32, 0x3b, 0x1e, 0xb5, 0xba, 0xd5, 0x91, 0xa4, 0xe1, 0x29, 0x49, 0xe3, 0x8b, 0x56, 0xeb, 0x76, - 0x89, 0x14, 0x8c, 0xa4, 0xa0, 0x94, 0xf6, 0x10, 0xdc, 0x7c, 0xe4, 0xf8, 0x4a, 0x68, 0xd7, 0x6b, - 0x47, 0x39, 0x38, 0xa4, 0xab, 0x35, 0xda, 0xbb, 0x93, 0xd1, 0xad, 0x54, 0x11, 0xce, 0x6c, 0x9d, - 0x4f, 0x8a, 0x6f, 0x7c, 0xdd, 0xd0, 0xc5, 0xda, 0x9e, 0xe4, 0x2f, 0x7f, 0x9f, 0x91, 0xe1, 0x6d, - 0xec, 0x5b, 0xbe, 0x23, 0xcf, 0x82, 0xba, 0x41, 0x26, 0xb9, 0xc0, 0x05, 0x93, 0x8a, 0xc5, 0x39, - 0xd2, 0x55, 0xc5, 0x8b, 0xe2, 0xd5, 0xf9, 0xb7, 0x51, 0x8a, 0x67, 0x21, 0x9d, 0xa9, 0x2f, 0x29, - 0x0b, 0x5a, 0xc6, 0x58, 0xec, 0xc2, 0xfc, 0x16, 0x0c, 0x33, 0xe0, 0xbb, 0xea, 0x2c, 0x69, 0x39, - 0xfe, 0x1a, 0xd2, 0xf9, 0x16, 0xcc, 0x2d, 0xf8, 0xae, 0xbc, 0x24, 0x44, 0x74, 0x20, 0x15, 0x53, - 0xd0, 0x63, 0xf5, 0x28, 0x92, 0xe7, 0xf1, 0xcb, 0x67, 0xe8, 0xb1, 0x7c, 0x4d, 0x46, 0x92, 0x0b, - 0xe6, 0x2d, 0x28, 0xd7, 0xa0, 0x65, 0xa2, 0x03, 0xa5, 0x70, 0x59, 0x3d, 0x8e, 0x60, 0x29, 0xb9, - 0x98, 0xe7, 0xe8, 0x26, 0x25, 0xe5, 0x94, 0x3c, 0x0d, 0x46, 0xea, 0x20, 0xc5, 0xea, 0xa8, 0x3c, - 0x39, 0x2a, 0xb1, 0xc1, 0x4c, 0xac, 0x0e, 0xca, 0x27, 0xf2, 0xfc, 0x50, 0x5d, 0x58, 0xed, 0x5c, - 0x2a, 0xe4, 0x42, 0x7f, 0x58, 0x2c, 0x2c, 0x3a, 0x57, 0x0d, 0xa3, 0x7c, 0x91, 0xb1, 0x9b, 0x23, - 0xf5, 0x7d, 0x0b, 0xe6, 0x43, 0x62, 0x3e, 0xce, 0xff, 0xec, 0xea, 0xe2, 0x7e, 0x57, 0x17, 0xff, - 0x76, 0x75, 0xf1, 0x6b, 0x5f, 0x0f, 0xee, 0xf7, 0xf5, 0xe0, 0xef, 0xbe, 0x1e, 0xfc, 0x78, 0xdf, - 0x4a, 0xdf, 0xad, 0xf9, 0x44, 0xe8, 0x9e, 0x2a, 0x1d, 0x7e, 0x3b, 0x2c, 0xaf, 0x97, 0xc0, 0x1d, - 0x6d, 0x10, 0xaf, 0x4f, 0x57, 0x68, 0xf3, 0x96, 0xfe, 0xa4, 0x69, 0x55, 0xa8, 0xbf, 0x33, 0xe8, - 0xf8, 0x30, 0x5e, 0xd0, 0x9b, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x66, 0x6e, 0x75, 0x99, 0x6d, - 0x02, 0x00, 0x00, + // 401 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x92, 0xcf, 0x6f, 0xd3, 0x30, + 0x14, 0xc7, 0x9b, 0x01, 0x95, 0xe6, 0x63, 0x54, 0x44, 0x54, 0x6d, 0x01, 0x71, 0x42, 0x93, 0x56, + 0x53, 0x21, 0x84, 0x38, 0xc2, 0xc4, 0xa1, 0x17, 0x18, 0x6c, 0x27, 0x2e, 0xd6, 0xb3, 0xfb, 0x92, + 0x58, 0x6a, 0x6c, 0xd7, 0x76, 0x5a, 0xf6, 0x5f, 0xf0, 0x2f, 0x71, 0xe3, 0xb8, 0x23, 0x47, 0xd4, + 0xfe, 0x23, 0xc8, 0x3f, 0x56, 0x95, 0x5b, 0x92, 0xef, 0xe7, 0xf3, 0xde, 0x57, 0xca, 0x23, 0x17, + 0x0d, 0x22, 0x70, 0xe7, 0x2d, 0x08, 0x2f, 0xb5, 0xa2, 0xc0, 0x5d, 0x83, 0x48, 0x37, 0x73, 0x8e, + 0x1e, 0xe6, 0xd4, 0x80, 0x85, 0xde, 0xcd, 0x8c, 0xd5, 0x5e, 0x97, 0xe7, 0xff, 0xb3, 0xb3, 0xc4, + 0xce, 0x32, 0x3b, 0x9d, 0xb4, 0xba, 0xd5, 0x91, 0xa4, 0xe1, 0x29, 0x49, 0xd3, 0xb3, 0x56, 0xeb, + 0x76, 0x85, 0x14, 0x8c, 0xa4, 0xa0, 0x94, 0xf6, 0x10, 0xdc, 0x3c, 0x72, 0x7a, 0x21, 0xb4, 0xeb, + 0xb5, 0xa3, 0x1c, 0x1c, 0xd2, 0xf5, 0x80, 0xf6, 0xee, 0x68, 0x75, 0x2b, 0x55, 0x84, 0x33, 0x5b, + 0xe7, 0x49, 0xf1, 0x8d, 0x0f, 0x0d, 0x5d, 0x0e, 0xf6, 0x28, 0x7f, 0xf9, 0xeb, 0x84, 0x8c, 0xaf, + 0x63, 0xdf, 0xf2, 0x2d, 0x79, 0x16, 0xd4, 0x0d, 0x32, 0xc9, 0x05, 0x2e, 0x99, 0x54, 0x2c, 0xee, + 0x91, 0xae, 0x2a, 0x5e, 0x14, 0xaf, 0x4e, 0xbf, 0x4d, 0x52, 0xbc, 0x08, 0xe9, 0x42, 0x7d, 0x49, + 0x59, 0xd0, 0x32, 0xc6, 0x62, 0x17, 0xe6, 0xb7, 0x60, 0x98, 0x01, 0xdf, 0x55, 0x27, 0x49, 0xcb, + 0xf1, 0xd7, 0x90, 0xde, 0x6e, 0xc1, 0x5c, 0x83, 0xef, 0xca, 0x73, 0x42, 0x44, 0x07, 0x52, 0x31, + 0x05, 0x3d, 0x56, 0x8f, 0x22, 0x79, 0x1a, 0xbf, 0x7c, 0x86, 0x1e, 0xcb, 0xd7, 0x64, 0x22, 0xb9, + 0x60, 0xde, 0x82, 0x72, 0x0d, 0x5a, 0x26, 0x3a, 0x50, 0x0a, 0x57, 0xd5, 0xe3, 0x08, 0x96, 0x92, + 0x8b, 0xdb, 0x1c, 0x5d, 0xa5, 0xa4, 0x9c, 0x93, 0xa7, 0xc1, 0x48, 0x1d, 0xa4, 0x58, 0x1f, 0x94, + 0x27, 0x07, 0x25, 0x36, 0x58, 0x88, 0xf5, 0x83, 0xf2, 0x89, 0x3c, 0x7f, 0xa8, 0x2e, 0xac, 0x76, + 0x2e, 0x15, 0x72, 0xa1, 0x3f, 0x2c, 0x97, 0x16, 0x9d, 0xab, 0xc6, 0x51, 0x3e, 0xcb, 0xd8, 0xd5, + 0x81, 0xba, 0xd9, 0x82, 0xf9, 0x90, 0x98, 0x8f, 0x37, 0xbf, 0x77, 0x75, 0x71, 0xbf, 0xab, 0x8b, + 0xbf, 0xbb, 0xba, 0xf8, 0xb9, 0xaf, 0x47, 0xf7, 0xfb, 0x7a, 0xf4, 0x67, 0x5f, 0x8f, 0xbe, 0xbf, + 0x6f, 0xa5, 0xef, 0x06, 0x3e, 0x13, 0xba, 0xa7, 0x79, 0xc4, 0xe5, 0x0a, 0xb8, 0xa3, 0x0d, 0xe2, + 0xe5, 0xf1, 0x05, 0x6d, 0xde, 0xd1, 0x1f, 0x34, 0x5d, 0x0a, 0xf5, 0x77, 0x06, 0x1d, 0x1f, 0xc7, + 0xff, 0xf3, 0xe6, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x76, 0x05, 0x27, 0xd0, 0x6c, 0x02, 0x00, + 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { diff --git a/x/feeabs/types/proposal.pb.go b/x/feeabs/types/proposal.pb.go index 91bdb786..076b4482 100644 --- a/x/feeabs/types/proposal.pb.go +++ b/x/feeabs/types/proposal.pb.go @@ -7,8 +7,8 @@ import ( fmt "fmt" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - _ "github.com/gogo/protobuf/types" _ "google.golang.org/genproto/googleapis/api/annotations" + _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -238,34 +238,34 @@ var fileDescriptor_b23c77c2b5aa1f89 = []byte{ // 470 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x93, 0xbf, 0x6e, 0xd4, 0x40, 0x10, 0xc6, 0xcf, 0xe4, 0x38, 0x92, 0x4d, 0x81, 0x30, 0x47, 0x62, 0x25, 0xe0, 0x3b, 0xb9, 0xba, - 0x82, 0x78, 0x15, 0x08, 0xcd, 0x89, 0x26, 0x7f, 0x84, 0x48, 0x17, 0x99, 0x54, 0x69, 0xcc, 0xae, - 0x3d, 0xf6, 0xad, 0x58, 0xef, 0x58, 0xde, 0x4d, 0x20, 0x3c, 0x01, 0x25, 0x8f, 0xc0, 0x4b, 0x50, - 0xd2, 0x53, 0x5e, 0x49, 0x85, 0xd0, 0xdd, 0x1b, 0xf0, 0x04, 0x68, 0xbd, 0x06, 0x1d, 0x12, 0xa2, - 0xa2, 0xa1, 0xf3, 0x37, 0xfb, 0x9b, 0xd9, 0xcf, 0xdf, 0x68, 0xc9, 0xc3, 0x02, 0x80, 0x71, 0x6d, - 0x1a, 0x96, 0x19, 0x81, 0x8a, 0x32, 0xae, 0x0b, 0x00, 0x7a, 0xb5, 0xcf, 0xc1, 0xb0, 0x7d, 0x5a, - 0x37, 0x58, 0xa3, 0x66, 0x32, 0xae, 0x1b, 0x34, 0xe8, 0x3f, 0xf8, 0x9d, 0x8e, 0x1d, 0x1d, 0x77, - 0xf4, 0xce, 0xb0, 0xc4, 0x12, 0x5b, 0x92, 0xda, 0x2f, 0xd7, 0xb4, 0x33, 0x2a, 0x11, 0x4b, 0x09, - 0xb4, 0x55, 0xfc, 0xb2, 0xa0, 0x46, 0x54, 0xa0, 0x0d, 0xab, 0xea, 0x0e, 0xb8, 0xdf, 0x01, 0xac, - 0x16, 0x94, 0x29, 0x85, 0x86, 0xd9, 0xe1, 0xda, 0x9d, 0x46, 0x9f, 0x3c, 0x72, 0xef, 0x39, 0x6a, - 0x73, 0x3c, 0x63, 0x42, 0x3d, 0x03, 0x38, 0xe4, 0xfa, 0x18, 0x55, 0x21, 0x4a, 0xff, 0x09, 0xd9, - 0x10, 0x3c, 0x4b, 0x73, 0x50, 0x58, 0x05, 0xde, 0xd8, 0x9b, 0x6c, 0x1c, 0x05, 0xdf, 0xbf, 0x8e, - 0x86, 0xd7, 0xac, 0x92, 0xd3, 0x88, 0x49, 0x89, 0xaf, 0x21, 0x4f, 0x0d, 0xbe, 0x02, 0x15, 0x25, - 0xeb, 0x82, 0x67, 0x27, 0x96, 0xf4, 0x9f, 0x92, 0x5d, 0xd4, 0x15, 0x6a, 0xa1, 0xd3, 0x1a, 0x51, - 0x3a, 0xc0, 0x4d, 0x49, 0x85, 0x0a, 0x6e, 0xd8, 0x41, 0xc9, 0x76, 0x87, 0x9c, 0x21, 0xca, 0x73, - 0x0b, 0xb4, 0xbd, 0xa7, 0xca, 0xdf, 0x26, 0xb7, 0xda, 0x2e, 0x91, 0x07, 0x6b, 0x63, 0x6f, 0xd2, - 0x4f, 0x06, 0x56, 0x9e, 0xe6, 0xfe, 0x16, 0x19, 0x14, 0x0d, 0xbe, 0x05, 0x15, 0xf4, 0xc7, 0xde, - 0x64, 0x3d, 0xe9, 0x54, 0xf4, 0xd1, 0x23, 0x77, 0x0f, 0xf3, 0xdc, 0xfe, 0xc2, 0x05, 0x2a, 0x38, - 0xeb, 0x12, 0xf5, 0x87, 0xe4, 0xa6, 0x11, 0x46, 0x82, 0x73, 0x9e, 0x38, 0xe1, 0x8f, 0xc9, 0x66, - 0x0e, 0x3a, 0x6b, 0x44, 0x6d, 0x33, 0xe8, 0xcc, 0xac, 0x96, 0xfc, 0x97, 0xe4, 0xce, 0x0c, 0xb5, - 0x49, 0x33, 0x9b, 0x47, 0x9a, 0xb5, 0x51, 0xb4, 0x56, 0x36, 0x1f, 0x1d, 0xc4, 0x7f, 0xdd, 0x4f, - 0xfc, 0xc7, 0x18, 0x93, 0xdb, 0xb3, 0x9f, 0x65, 0x57, 0x98, 0xf6, 0xdf, 0x7d, 0x18, 0xf5, 0x22, - 0x4d, 0xb6, 0x4e, 0x40, 0x82, 0x81, 0x7f, 0xe6, 0x7c, 0x77, 0x75, 0x5f, 0x6b, 0xed, 0xf9, 0xaf, - 0xad, 0x74, 0x97, 0xda, 0xb0, 0x5e, 0x80, 0xf9, 0xdf, 0xc2, 0x3a, 0x3a, 0xff, 0xbc, 0x08, 0xbd, - 0xf9, 0x22, 0xf4, 0xbe, 0x2d, 0x42, 0xef, 0xfd, 0x32, 0xec, 0xcd, 0x97, 0x61, 0xef, 0xcb, 0x32, - 0xec, 0x5d, 0x4c, 0x4b, 0x61, 0x66, 0x97, 0x3c, 0xce, 0xb0, 0xa2, 0x0a, 0xed, 0x45, 0x4c, 0xee, - 0x49, 0xc6, 0x35, 0x2d, 0x00, 0xf6, 0x56, 0x9f, 0xde, 0xd5, 0x01, 0x7d, 0x43, 0x9d, 0x27, 0x6a, - 0xae, 0x6b, 0xd0, 0x7c, 0xd0, 0xbe, 0x80, 0xc7, 0x3f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xbe, 0xdd, - 0x36, 0x55, 0xa5, 0x03, 0x00, 0x00, + 0x82, 0x78, 0x15, 0xfe, 0x08, 0x11, 0xd1, 0xe4, 0x8f, 0x10, 0xe9, 0x22, 0x87, 0x2a, 0x8d, 0xd9, + 0xb5, 0xc7, 0xbe, 0x15, 0xeb, 0x1d, 0xcb, 0xbb, 0x09, 0x84, 0x27, 0xa0, 0xe4, 0x11, 0x78, 0x09, + 0x4a, 0x7a, 0xca, 0x2b, 0xa9, 0x10, 0xba, 0x7b, 0x03, 0x9e, 0x00, 0xad, 0xbd, 0xa0, 0x43, 0x42, + 0x54, 0x34, 0xe9, 0xfc, 0xcd, 0xfe, 0x66, 0xfc, 0xf9, 0x1b, 0x2f, 0xb9, 0x5f, 0x00, 0x30, 0xae, + 0x4d, 0xc3, 0x32, 0x23, 0x50, 0x51, 0xc6, 0x75, 0x01, 0x40, 0x2f, 0x76, 0x39, 0x18, 0xb6, 0x4b, + 0xeb, 0x06, 0x6b, 0xd4, 0x4c, 0xc6, 0x75, 0x83, 0x06, 0xfd, 0x7b, 0x7f, 0xd2, 0x71, 0x47, 0xc7, + 0x8e, 0xde, 0x1a, 0x96, 0x58, 0x62, 0x4b, 0x52, 0xfb, 0xd4, 0x35, 0x6d, 0x8d, 0x4a, 0xc4, 0x52, + 0x02, 0x6d, 0x15, 0x3f, 0x2f, 0xa8, 0x11, 0x15, 0x68, 0xc3, 0xaa, 0xda, 0x01, 0x77, 0x1d, 0xc0, + 0x6a, 0x41, 0x99, 0x52, 0x68, 0x98, 0x1d, 0xae, 0xbb, 0xd3, 0xe8, 0xb3, 0x47, 0xee, 0xbc, 0x40, + 0x6d, 0x0e, 0xa7, 0x4c, 0xa8, 0xe7, 0x00, 0xfb, 0x5c, 0x1f, 0xa2, 0x2a, 0x44, 0xe9, 0x3f, 0x26, + 0x6b, 0x82, 0x67, 0x69, 0x0e, 0x0a, 0xab, 0xc0, 0x1b, 0x7b, 0x93, 0xb5, 0x83, 0xe0, 0xc7, 0xb7, + 0xd1, 0xf0, 0x92, 0x55, 0x72, 0x2f, 0x62, 0x52, 0xe2, 0x1b, 0xc8, 0x53, 0x83, 0xaf, 0x41, 0x45, + 0xc9, 0xaa, 0xe0, 0xd9, 0x91, 0x25, 0xfd, 0x67, 0x64, 0x1b, 0x75, 0x85, 0x5a, 0xe8, 0xb4, 0x46, + 0x94, 0x1d, 0xd0, 0x4d, 0x49, 0x85, 0x0a, 0xae, 0xd9, 0x41, 0xc9, 0xa6, 0x43, 0x4e, 0x10, 0xe5, + 0x4b, 0x0b, 0xb4, 0xbd, 0xc7, 0xca, 0xdf, 0x24, 0x37, 0xda, 0x2e, 0x91, 0x07, 0x2b, 0x63, 0x6f, + 0xd2, 0x4f, 0x06, 0x56, 0x1e, 0xe7, 0xfe, 0x06, 0x19, 0x14, 0x0d, 0xbe, 0x03, 0x15, 0xf4, 0xc7, + 0xde, 0x64, 0x35, 0x71, 0x2a, 0xfa, 0xe4, 0x91, 0xdb, 0xfb, 0x79, 0x6e, 0x3f, 0xe1, 0x0c, 0x15, + 0x9c, 0xb8, 0x44, 0xfd, 0x21, 0xb9, 0x6e, 0x84, 0x91, 0xd0, 0x39, 0x4f, 0x3a, 0xe1, 0x8f, 0xc9, + 0x7a, 0x0e, 0x3a, 0x6b, 0x44, 0x6d, 0x33, 0x70, 0x66, 0x96, 0x4b, 0xfe, 0x2b, 0x72, 0x6b, 0x8a, + 0xda, 0xa4, 0x99, 0xcd, 0x23, 0xcd, 0xda, 0x28, 0x5a, 0x2b, 0xeb, 0x0f, 0x1e, 0xc5, 0xff, 0xdc, + 0x4f, 0xfc, 0xd7, 0x18, 0x93, 0x9b, 0xd3, 0x5f, 0xe5, 0xae, 0xb0, 0xd7, 0x7f, 0xff, 0x71, 0xd4, + 0x8b, 0x34, 0xd9, 0x38, 0x02, 0x09, 0x06, 0xfe, 0x9b, 0xf3, 0xed, 0xe5, 0x7d, 0xad, 0xb4, 0xe7, + 0xbf, 0xb7, 0xe2, 0x5e, 0x6a, 0xc3, 0x3a, 0x05, 0x73, 0xd5, 0xc2, 0x3a, 0x38, 0xfd, 0x32, 0x0f, + 0xbd, 0xd9, 0x3c, 0xf4, 0xbe, 0xcf, 0x43, 0xef, 0xc3, 0x22, 0xec, 0xcd, 0x16, 0x61, 0xef, 0xeb, + 0x22, 0xec, 0x9d, 0x3d, 0x2d, 0x85, 0x99, 0x9e, 0xf3, 0x38, 0xc3, 0x8a, 0xba, 0x7f, 0x6a, 0x47, + 0x32, 0xae, 0x69, 0x01, 0xb0, 0xb3, 0x7c, 0xf3, 0x2e, 0x9e, 0xd0, 0xb7, 0xb4, 0xb3, 0x44, 0xcd, + 0x65, 0x0d, 0x9a, 0x0f, 0xda, 0x0b, 0xf0, 0xf0, 0x67, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc2, 0x48, + 0xe3, 0x9f, 0xa4, 0x03, 0x00, 0x00, } func (m *HostChainFeeAbsConfig) Marshal() (dAtA []byte, err error) { diff --git a/x/feeabs/types/query.pb.go b/x/feeabs/types/query.pb.go index 9b897a29..b5814748 100644 --- a/x/feeabs/types/query.pb.go +++ b/x/feeabs/types/query.pb.go @@ -388,55 +388,55 @@ func init() { } var fileDescriptor_0a3dde61db3cbb0e = []byte{ - // 757 bytes of a gzipped FileDescriptorProto + // 756 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0xcf, 0x4f, 0xdb, 0x48, - 0x18, 0xcd, 0x80, 0x96, 0x85, 0x41, 0xda, 0x68, 0x47, 0xb0, 0xca, 0x06, 0xd6, 0x09, 0xa3, 0x55, - 0x45, 0x11, 0xb6, 0x4b, 0xca, 0x01, 0x45, 0x2a, 0xcd, 0x0f, 0x84, 0xb8, 0x54, 0x55, 0x23, 0x4e, - 0xbd, 0x44, 0x63, 0x67, 0x92, 0x58, 0x9d, 0x78, 0x4c, 0xc6, 0x81, 0xd2, 0xaa, 0x17, 0xee, 0x95, - 0x2a, 0xf5, 0xd0, 0x7b, 0x8f, 0x3d, 0xf5, 0xd8, 0x3f, 0x01, 0x89, 0x1e, 0x90, 0x7a, 0x69, 0x7b, - 0x48, 0x2b, 0xe0, 0x2f, 0xe0, 0x2f, 0xa8, 0x3c, 0xe3, 0x04, 0x12, 0x82, 0x13, 0xa5, 0xa7, 0xc4, - 0x9a, 0xf7, 0xbd, 0xef, 0xbd, 0xef, 0x7b, 0x1e, 0xc3, 0xbb, 0x55, 0x4a, 0x89, 0x25, 0xfc, 0x26, - 0xb1, 0x7d, 0x87, 0xbb, 0x26, 0xb1, 0x44, 0x95, 0x52, 0x73, 0x7f, 0xcd, 0xa2, 0x3e, 0x59, 0x33, - 0xf7, 0x5a, 0xb4, 0x79, 0x68, 0x78, 0x4d, 0xee, 0x73, 0xf4, 0x5f, 0x2f, 0xd4, 0x50, 0x50, 0x23, - 0x84, 0x26, 0xe7, 0x6a, 0xbc, 0xc6, 0x25, 0xd2, 0x0c, 0xfe, 0xa9, 0xa2, 0xe4, 0x62, 0x8d, 0xf3, - 0x1a, 0xa3, 0x26, 0xf1, 0x1c, 0x93, 0xb8, 0x2e, 0xf7, 0x49, 0x50, 0x2b, 0xc2, 0xd3, 0x95, 0xe8, - 0xee, 0x1e, 0x69, 0x92, 0x46, 0x07, 0x6b, 0x44, 0x63, 0xb9, 0x68, 0x70, 0xe1, 0x08, 0xc7, 0xb2, - 0x43, 0xfc, 0xea, 0x10, 0xee, 0x26, 0xf7, 0xb8, 0x20, 0x2c, 0x44, 0x6b, 0xb6, 0x24, 0x30, 0x2d, - 0x22, 0xae, 0x30, 0x36, 0x77, 0x5c, 0x75, 0x8e, 0xb3, 0x70, 0xe1, 0x49, 0x30, 0x8b, 0x1d, 0x2e, - 0xfc, 0x62, 0x9d, 0x38, 0x6e, 0x91, 0xbb, 0x55, 0xa7, 0x56, 0xa2, 0x7b, 0x2d, 0x2a, 0x7c, 0xb4, - 0x00, 0x67, 0x1c, 0xcb, 0x2e, 0x57, 0xa8, 0xcb, 0x1b, 0x09, 0x90, 0x06, 0xcb, 0x33, 0xa5, 0x69, - 0xc7, 0xb2, 0xb7, 0x82, 0x67, 0xfc, 0x1e, 0xdc, 0x56, 0x2c, 0x3c, 0xee, 0x52, 0x74, 0x04, 0xe0, - 0xdf, 0x75, 0x2e, 0xfc, 0xb2, 0x1d, 0x9c, 0x95, 0x6d, 0x79, 0x28, 0x59, 0x66, 0x33, 0xeb, 0x46, - 0xe4, 0xd4, 0x8d, 0x2e, 0xe5, 0x36, 0xa5, 0x79, 0x4b, 0x28, 0xe2, 0x42, 0xfa, 0xb8, 0x9d, 0x8a, - 0x5d, 0xb6, 0x53, 0x89, 0x43, 0xd2, 0x60, 0x59, 0x7c, 0x83, 0x1c, 0x97, 0xe2, 0xf5, 0x5e, 0x2d, - 0x38, 0x07, 0x97, 0xa4, 0xc6, 0xc7, 0x6a, 0x8e, 0xf9, 0xa6, 0xe3, 0xd7, 0x1b, 0xd4, 0x77, 0xec, - 0xdd, 0x03, 0xe2, 0x8d, 0x64, 0xf3, 0x1d, 0x80, 0x38, 0x8a, 0x22, 0x30, 0x2b, 0x28, 0xda, 0x83, - 0x71, 0xd2, 0x3d, 0x29, 0xfb, 0x07, 0xc4, 0x53, 0x4c, 0x85, 0x9d, 0x40, 0xf4, 0xf7, 0x76, 0xea, - 0x4e, 0xcd, 0xf1, 0xeb, 0x2d, 0xcb, 0xb0, 0x79, 0xc3, 0x0c, 0xb7, 0xa2, 0x7e, 0x74, 0x51, 0x79, - 0x66, 0xfa, 0x87, 0x1e, 0x15, 0xc6, 0x16, 0xb5, 0x2f, 0xdb, 0xa9, 0x7f, 0x94, 0xbd, 0x3e, 0x3a, - 0x5c, 0xfa, 0x8b, 0xf4, 0xb4, 0xc6, 0x4b, 0x30, 0x25, 0x85, 0x6d, 0xcb, 0x51, 0x3e, 0xe2, 0x95, - 0x16, 0xa3, 0x05, 0xc2, 0x88, 0x4d, 0x45, 0xe8, 0x0c, 0x7f, 0x02, 0x30, 0x7d, 0x3b, 0x26, 0x94, - 0xfe, 0x02, 0x4e, 0x5b, 0x84, 0x11, 0xd7, 0xa6, 0x22, 0x01, 0xd2, 0x93, 0xcb, 0xb3, 0x99, 0x7f, - 0x0d, 0x25, 0xcd, 0x08, 0x72, 0xd3, 0x5d, 0x4a, 0x91, 0x3b, 0x6e, 0xa1, 0x18, 0xee, 0x20, 0xae, - 0x44, 0x76, 0x0a, 0xf1, 0x87, 0x1f, 0xa9, 0xe5, 0x11, 0x1c, 0x06, 0x1c, 0xa2, 0xd4, 0xed, 0x87, - 0x12, 0xf0, 0x4f, 0x52, 0xa9, 0x34, 0xa9, 0x10, 0x89, 0x09, 0x39, 0xf8, 0xce, 0x23, 0x4e, 0x43, - 0x2d, 0xcf, 0x58, 0x44, 0x3a, 0xf1, 0x47, 0x10, 0x01, 0x51, 0x19, 0x7c, 0x0d, 0xe0, 0x3c, 0x61, - 0xac, 0x3c, 0x28, 0x87, 0x93, 0x63, 0xe7, 0xf0, 0xff, 0x70, 0x06, 0x8b, 0xe1, 0xa2, 0x06, 0x35, - 0xc0, 0x25, 0x44, 0x18, 0xeb, 0x93, 0x95, 0xf9, 0x36, 0x05, 0xff, 0x90, 0x7a, 0xd1, 0x05, 0x80, - 0xf3, 0x03, 0x13, 0x85, 0x72, 0x43, 0x34, 0x0d, 0xcd, 0x73, 0x32, 0xff, 0x1b, 0x0c, 0x2a, 0x13, - 0x78, 0xfb, 0xe8, 0xcb, 0xc5, 0xdb, 0x89, 0x1c, 0xda, 0x34, 0xab, 0x94, 0xea, 0xd7, 0x2f, 0x1c, - 0x45, 0x6d, 0xee, 0x77, 0xef, 0x26, 0xfd, 0x2a, 0x96, 0x7a, 0x10, 0x54, 0xf3, 0x65, 0xf7, 0x65, - 0x7a, 0x85, 0x4e, 0x00, 0x9c, 0xeb, 0xcf, 0x9e, 0x5c, 0xfc, 0xe6, 0x28, 0x1a, 0x6f, 0x4f, 0x76, - 0xf2, 0xe1, 0xd8, 0xf5, 0xa1, 0xc3, 0x8c, 0x74, 0xb8, 0x8a, 0x56, 0x22, 0x1c, 0x36, 0x64, 0xa5, - 0xde, 0x4d, 0xeb, 0x09, 0x80, 0xf1, 0xbe, 0x95, 0xa2, 0xec, 0x28, 0x42, 0x06, 0x27, 0x38, 0x39, - 0x5e, 0xad, 0x8c, 0x36, 0xce, 0x49, 0xfd, 0x59, 0xb4, 0x11, 0xa1, 0x3f, 0x48, 0xa5, 0x2e, 0x53, - 0xa9, 0xab, 0x54, 0xf6, 0xec, 0xe6, 0x33, 0x80, 0x28, 0x7f, 0x23, 0xa3, 0xe8, 0xc1, 0x10, 0x51, - 0xd1, 0x6f, 0x65, 0x72, 0xec, 0x72, 0x65, 0x6b, 0x43, 0xda, 0xca, 0xa0, 0x7b, 0x11, 0xb6, 0x08, - 0x63, 0xfa, 0x0d, 0x6b, 0x85, 0xdd, 0xe3, 0x33, 0x0d, 0x9c, 0x9e, 0x69, 0xe0, 0xe7, 0x99, 0x06, - 0xde, 0x9c, 0x6b, 0xb1, 0xd3, 0x73, 0x2d, 0xf6, 0xf5, 0x5c, 0x8b, 0x3d, 0xcd, 0x5e, 0xbb, 0x98, - 0x5c, 0x1e, 0x90, 0x11, 0xa6, 0xb3, 0x80, 0xac, 0xbf, 0xc7, 0xfe, 0xba, 0xf9, 0xbc, 0xd3, 0x48, - 0x5e, 0x58, 0xd6, 0x94, 0xfc, 0x50, 0xde, 0xff, 0x15, 0x00, 0x00, 0xff, 0xff, 0x05, 0xa7, 0x17, - 0x5c, 0x52, 0x08, 0x00, 0x00, + 0x18, 0xcd, 0x80, 0x96, 0x85, 0x41, 0xda, 0x68, 0x47, 0xb0, 0xca, 0x06, 0xd6, 0x09, 0xa3, 0xd5, + 0x8a, 0x45, 0xd8, 0x2e, 0x69, 0xa5, 0xd2, 0x48, 0xa5, 0xf9, 0x81, 0x10, 0x97, 0xaa, 0x6a, 0xda, + 0x53, 0x2f, 0xd1, 0xd8, 0x99, 0x24, 0x56, 0x27, 0x1e, 0x93, 0x71, 0xa0, 0xb4, 0xea, 0x85, 0x7b, + 0xa5, 0x4a, 0x3d, 0xf4, 0xde, 0x63, 0x4f, 0x3d, 0xf6, 0x4f, 0x40, 0xa2, 0x07, 0xa4, 0x5e, 0xda, + 0x1e, 0xd2, 0x0a, 0xf8, 0x0b, 0xf8, 0x0b, 0x2a, 0xcf, 0x38, 0x81, 0x84, 0xe0, 0x44, 0xe9, 0x29, + 0xb1, 0xe6, 0x7d, 0xef, 0x7b, 0xef, 0xfb, 0x9e, 0xc7, 0xf0, 0xff, 0x2a, 0xa5, 0xc4, 0x12, 0x7e, + 0x93, 0xd8, 0xbe, 0xc3, 0x5d, 0x93, 0x58, 0xa2, 0x4a, 0xa9, 0xb9, 0xbb, 0x66, 0x51, 0x9f, 0xac, + 0x99, 0x3b, 0x2d, 0xda, 0xdc, 0x37, 0xbc, 0x26, 0xf7, 0x39, 0xfa, 0xa7, 0x17, 0x6a, 0x28, 0xa8, + 0x11, 0x42, 0x93, 0x73, 0x35, 0x5e, 0xe3, 0x12, 0x69, 0x06, 0xff, 0x54, 0x51, 0x72, 0xb1, 0xc6, + 0x79, 0x8d, 0x51, 0x93, 0x78, 0x8e, 0x49, 0x5c, 0x97, 0xfb, 0x24, 0xa8, 0x15, 0xe1, 0xe9, 0x4a, + 0x74, 0x77, 0x8f, 0x34, 0x49, 0xa3, 0x83, 0x35, 0xa2, 0xb1, 0x5c, 0x34, 0xb8, 0x70, 0x84, 0x63, + 0xd9, 0x21, 0x7e, 0x75, 0x08, 0x77, 0x93, 0x7b, 0x5c, 0x10, 0x16, 0xa2, 0x35, 0x5b, 0x12, 0x98, + 0x16, 0x11, 0x17, 0x18, 0x9b, 0x3b, 0xae, 0x3a, 0xc7, 0x59, 0xb8, 0xf0, 0x30, 0x98, 0xc5, 0x36, + 0x17, 0x7e, 0xb1, 0x4e, 0x1c, 0xb7, 0xc8, 0xdd, 0xaa, 0x53, 0x2b, 0xd1, 0x9d, 0x16, 0x15, 0x3e, + 0x5a, 0x80, 0x33, 0x8e, 0x65, 0x97, 0x2b, 0xd4, 0xe5, 0x8d, 0x04, 0x48, 0x83, 0xe5, 0x99, 0xd2, + 0xb4, 0x63, 0xd9, 0x9b, 0xc1, 0x33, 0x7e, 0x07, 0xae, 0x2b, 0x16, 0x1e, 0x77, 0x29, 0x3a, 0x00, + 0xf0, 0xcf, 0x3a, 0x17, 0x7e, 0xd9, 0x0e, 0xce, 0xca, 0xb6, 0x3c, 0x94, 0x2c, 0xb3, 0x99, 0x5b, + 0x46, 0xe4, 0xd4, 0x8d, 0x2e, 0xe5, 0x16, 0xa5, 0x79, 0x4b, 0x28, 0xe2, 0x42, 0xfa, 0xb0, 0x9d, + 0x8a, 0x9d, 0xb7, 0x53, 0x89, 0x7d, 0xd2, 0x60, 0x59, 0x7c, 0x85, 0x1c, 0x97, 0xe2, 0xf5, 0x5e, + 0x2d, 0x38, 0x07, 0x97, 0xa4, 0xc6, 0x07, 0x6a, 0x8e, 0xf9, 0xa6, 0xe3, 0xd7, 0x1b, 0xd4, 0x77, + 0xec, 0xc7, 0x7b, 0xc4, 0x1b, 0xc9, 0xe6, 0x5b, 0x00, 0x71, 0x14, 0x45, 0x60, 0x56, 0x50, 0xb4, + 0x03, 0xe3, 0xa4, 0x7b, 0x52, 0xf6, 0xf7, 0x88, 0xa7, 0x98, 0x0a, 0xdb, 0x81, 0xe8, 0x6f, 0xed, + 0xd4, 0x7f, 0x35, 0xc7, 0xaf, 0xb7, 0x2c, 0xc3, 0xe6, 0x0d, 0x33, 0xdc, 0x8a, 0xfa, 0xd1, 0x45, + 0xe5, 0xa9, 0xe9, 0xef, 0x7b, 0x54, 0x18, 0x9b, 0xd4, 0x3e, 0x6f, 0xa7, 0xfe, 0x52, 0xf6, 0xfa, + 0xe8, 0x70, 0xe9, 0x0f, 0xd2, 0xd3, 0x1a, 0x2f, 0xc1, 0x94, 0x14, 0xb6, 0x25, 0x47, 0x79, 0x9f, + 0x57, 0x5a, 0x8c, 0x16, 0x08, 0x23, 0x36, 0x15, 0xa1, 0x33, 0xfc, 0x11, 0xc0, 0xf4, 0xf5, 0x98, + 0x50, 0xfa, 0x73, 0x38, 0x6d, 0x11, 0x46, 0x5c, 0x9b, 0x8a, 0x04, 0x48, 0x4f, 0x2e, 0xcf, 0x66, + 0xfe, 0x36, 0x94, 0x34, 0x23, 0xc8, 0x4d, 0x77, 0x29, 0x45, 0xee, 0xb8, 0x85, 0x62, 0xb8, 0x83, + 0xb8, 0x12, 0xd9, 0x29, 0xc4, 0xef, 0xbf, 0xa7, 0x96, 0x47, 0x70, 0x18, 0x70, 0x88, 0x52, 0xb7, + 0x1f, 0x4a, 0xc0, 0xdf, 0x49, 0xa5, 0xd2, 0xa4, 0x42, 0x24, 0x26, 0xe4, 0xe0, 0x3b, 0x8f, 0x38, + 0x0d, 0xb5, 0x3c, 0x63, 0x11, 0xe9, 0xc4, 0x1f, 0x40, 0x04, 0x44, 0x65, 0xf0, 0x15, 0x80, 0xf3, + 0x84, 0xb1, 0xf2, 0xa0, 0x1c, 0x4e, 0x8e, 0x9d, 0xc3, 0x7f, 0xc3, 0x19, 0x2c, 0x86, 0x8b, 0x1a, + 0xd4, 0x00, 0x97, 0x10, 0x61, 0xac, 0x4f, 0x56, 0xe6, 0xeb, 0x14, 0xfc, 0x4d, 0xea, 0x45, 0x67, + 0x00, 0xce, 0x0f, 0x4c, 0x14, 0xca, 0x0d, 0xd1, 0x34, 0x34, 0xcf, 0xc9, 0xfc, 0x2f, 0x30, 0xa8, + 0x4c, 0xe0, 0xad, 0x83, 0xcf, 0x67, 0x6f, 0x26, 0x72, 0x68, 0xc3, 0xac, 0x52, 0xaa, 0x5f, 0xbe, + 0x70, 0x14, 0xb5, 0xb9, 0xdb, 0xbd, 0x9b, 0xf4, 0x8b, 0x58, 0xea, 0x41, 0x50, 0xcd, 0x17, 0xdd, + 0x97, 0xe9, 0x25, 0x3a, 0x02, 0x70, 0xae, 0x3f, 0x7b, 0x72, 0xf1, 0x1b, 0xa3, 0x68, 0xbc, 0x3e, + 0xd9, 0xc9, 0x7b, 0x63, 0xd7, 0x87, 0x0e, 0x33, 0xd2, 0xe1, 0x2a, 0x5a, 0x89, 0x70, 0xd8, 0x90, + 0x95, 0x7a, 0x37, 0xad, 0x47, 0x00, 0xc6, 0xfb, 0x56, 0x8a, 0xb2, 0xa3, 0x08, 0x19, 0x9c, 0xe0, + 0xe4, 0x78, 0xb5, 0x32, 0xda, 0x38, 0x27, 0xf5, 0x67, 0xd1, 0x7a, 0x84, 0xfe, 0x20, 0x95, 0xba, + 0x4c, 0xa5, 0xae, 0x52, 0xd9, 0xb3, 0x9b, 0x4f, 0x00, 0xa2, 0xfc, 0x95, 0x8c, 0xa2, 0xbb, 0x43, + 0x44, 0x45, 0xbf, 0x95, 0xc9, 0xb1, 0xcb, 0x95, 0xad, 0x75, 0x69, 0x2b, 0x83, 0x6e, 0x44, 0xd8, + 0x22, 0x8c, 0xe9, 0x57, 0xac, 0x15, 0x1e, 0x1d, 0x9e, 0x68, 0xe0, 0xf8, 0x44, 0x03, 0x3f, 0x4e, + 0x34, 0xf0, 0xfa, 0x54, 0x8b, 0x1d, 0x9f, 0x6a, 0xb1, 0x2f, 0xa7, 0x5a, 0xec, 0xc9, 0x9d, 0x4b, + 0x17, 0x53, 0x27, 0xb4, 0x2c, 0xe0, 0xea, 0x6f, 0xb1, 0x7b, 0xdb, 0x7c, 0xd6, 0xe9, 0x23, 0xef, + 0x2b, 0x6b, 0x4a, 0x7e, 0x27, 0x6f, 0xfe, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xce, 0xd8, 0xd5, 0x08, + 0x51, 0x08, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/feeabs/types/query.pb.gw.go b/x/feeabs/types/query.pb.gw.go index 0bee9211..c02e4df1 100644 --- a/x/feeabs/types/query.pb.gw.go +++ b/x/feeabs/types/query.pb.gw.go @@ -400,13 +400,13 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } var ( - pattern_Query_OsmosisArithmeticTwap_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"fee-abstraction", "feeabs", "v1", "osmosis-arithmetic-twap", "ibc_denom"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_Query_OsmosisArithmeticTwap_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"fee-abstraction", "feeabs", "v1", "osmosis-arithmetic-twap", "ibc_denom"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_FeeabsModuleBalances_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"fee-abstraction", "feeabs", "v1", "module-balances"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_Query_FeeabsModuleBalances_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"fee-abstraction", "feeabs", "v1", "module-balances"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_HostChainConfig_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"fee-abstraction", "feeabs", "v1", "host-chain-config", "ibc_denom"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_Query_HostChainConfig_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"fee-abstraction", "feeabs", "v1", "host-chain-config", "ibc_denom"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_AllHostChainConfig_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"fee-abstraction", "feeabs", "v1", "all-host-chain-config"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_Query_AllHostChainConfig_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"fee-abstraction", "feeabs", "v1", "all-host-chain-config"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( diff --git a/x/feeabs/types/tx.pb.go b/x/feeabs/types/tx.pb.go index 1255e5bd..b3274447 100644 --- a/x/feeabs/types/tx.pb.go +++ b/x/feeabs/types/tx.pb.go @@ -12,11 +12,11 @@ import ( _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" - _ "github.com/gogo/protobuf/types" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" + _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -306,41 +306,41 @@ func init() { } var fileDescriptor_84c172c34645b936 = []byte{ - // 542 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xdf, 0x6a, 0xd3, 0x50, - 0x18, 0x6f, 0x56, 0x18, 0xee, 0x4c, 0x05, 0x8b, 0x62, 0x97, 0x69, 0x5a, 0x83, 0x48, 0x15, 0x9a, - 0xe3, 0xa6, 0xa0, 0x0e, 0x44, 0xb2, 0xca, 0xc0, 0x8b, 0x82, 0x76, 0x03, 0xc1, 0x9b, 0x71, 0x4e, - 0x72, 0x9a, 0x06, 0x9b, 0xf3, 0xc5, 0x7c, 0x27, 0x73, 0x05, 0x1f, 0x42, 0xaf, 0x7c, 0x07, 0xef, - 0xbc, 0xf0, 0x1d, 0x76, 0xb9, 0x4b, 0xaf, 0xa6, 0xb4, 0x6f, 0xe0, 0x13, 0x48, 0xfe, 0x95, 0x4e, - 0x4d, 0xed, 0x76, 0x95, 0xe4, 0x9c, 0xdf, 0xbf, 0xef, 0xcb, 0x77, 0x0e, 0xb9, 0xd3, 0x17, 0x82, - 0x71, 0x54, 0x11, 0x73, 0x94, 0x0f, 0x92, 0x32, 0x8e, 0x7d, 0x21, 0xe8, 0xc1, 0x06, 0x17, 0x8a, - 0x6d, 0x50, 0x75, 0x68, 0x85, 0x11, 0x28, 0xa8, 0xdd, 0x3c, 0x8d, 0xb3, 0x32, 0x9c, 0x95, 0xe3, - 0xf4, 0xab, 0x1e, 0x78, 0x90, 0x22, 0x69, 0xf2, 0x96, 0x91, 0xf4, 0x1b, 0x1e, 0x80, 0x37, 0x14, - 0x94, 0x85, 0x3e, 0x65, 0x52, 0x82, 0x62, 0x09, 0x17, 0xf3, 0xdd, 0x7b, 0x0e, 0x60, 0x00, 0x48, - 0x39, 0x43, 0x41, 0xdf, 0xc5, 0x22, 0x1a, 0x4d, 0x6d, 0x43, 0xe6, 0xf9, 0x32, 0x05, 0x17, 0xd8, - 0xf9, 0x31, 0x43, 0x16, 0xb1, 0xa0, 0xd0, 0xbd, 0x3b, 0x1f, 0x2b, 0x42, 0x70, 0x06, 0x39, 0xd4, - 0x98, 0x8d, 0x50, 0x00, 0x1c, 0xf0, 0x0b, 0xdb, 0x46, 0x5e, 0x40, 0xfa, 0xc5, 0xe3, 0x3e, 0x55, - 0x7e, 0x20, 0x50, 0xb1, 0x20, 0xcc, 0x00, 0xe6, 0x37, 0x8d, 0xe8, 0x5d, 0xf4, 0x76, 0x62, 0xe9, - 0xee, 0x08, 0x61, 0x73, 0xec, 0x82, 0x1b, 0x0f, 0x85, 0xed, 0x38, 0x10, 0x4b, 0x55, 0xbb, 0x45, - 0x2e, 0xf6, 0x23, 0x08, 0xf6, 0x99, 0xeb, 0x46, 0x02, 0xb1, 0xae, 0x35, 0xb5, 0xd6, 0x4a, 0x6f, - 0x35, 0x59, 0xb3, 0xb3, 0xa5, 0x9a, 0x22, 0xcb, 0x2c, 0x48, 0xc0, 0xf5, 0xa5, 0x66, 0xb5, 0xb5, - 0xba, 0xb9, 0x66, 0x65, 0x99, 0xac, 0x24, 0x53, 0xd1, 0x5f, 0xab, 0x03, 0xbe, 0xdc, 0xb6, 0x8f, - 0x4e, 0x1a, 0x95, 0x5f, 0x27, 0x8d, 0x4b, 0x23, 0x16, 0x0c, 0xb7, 0xcc, 0x8c, 0x66, 0x7e, 0xf9, - 0xd1, 0x68, 0x79, 0xbe, 0x1a, 0xc4, 0xdc, 0x72, 0x20, 0xa0, 0x79, 0x45, 0xd9, 0xa3, 0x8d, 0xee, - 0x5b, 0xaa, 0x46, 0xa1, 0xc0, 0x54, 0x01, 0x7b, 0xb9, 0x97, 0x79, 0x9b, 0x98, 0xe5, 0xb1, 0x7b, - 0x02, 0x43, 0x90, 0x28, 0xcc, 0xa7, 0xa4, 0xde, 0x45, 0x6f, 0x57, 0x48, 0xf7, 0x55, 0xf2, 0x7b, - 0x5e, 0x70, 0xe7, 0xb9, 0x90, 0x10, 0xec, 0xbd, 0xb6, 0x5f, 0x2e, 0x50, 0x9a, 0x69, 0x92, 0x66, - 0x19, 0x7d, 0x6a, 0xb1, 0x4b, 0xae, 0x24, 0x98, 0xf7, 0x2c, 0xec, 0x44, 0x80, 0xd8, 0x19, 0x30, - 0x5f, 0x2e, 0xd2, 0xb6, 0x75, 0xb2, 0xe2, 0x73, 0x67, 0xdf, 0x4d, 0x04, 0xeb, 0x4b, 0xe9, 0xfe, - 0x05, 0x3f, 0x37, 0x30, 0xd7, 0xc9, 0xda, 0x5f, 0xa2, 0x85, 0xe3, 0xe6, 0xd7, 0x2a, 0xa9, 0x76, - 0xd1, 0xab, 0x7d, 0xd2, 0xc8, 0xb5, 0x7f, 0x97, 0xf6, 0xc8, 0x9a, 0x3b, 0xec, 0x56, 0x59, 0x51, - 0xfa, 0xb3, 0x73, 0x12, 0x8b, 0x6c, 0xb5, 0x0f, 0xe4, 0xf2, 0x1f, 0xad, 0xb8, 0xbf, 0x80, 0xe4, - 0x29, 0x86, 0xfe, 0xf8, 0xac, 0x8c, 0xa9, 0xfb, 0x67, 0x8d, 0x5c, 0x2f, 0x9b, 0xe4, 0x27, 0xff, - 0x57, 0x2d, 0xa1, 0xea, 0xf6, 0xb9, 0xa9, 0x45, 0xb2, 0xed, 0xbd, 0xa3, 0xb1, 0xa1, 0x1d, 0x8f, - 0x0d, 0xed, 0xe7, 0xd8, 0xd0, 0x3e, 0x4e, 0x8c, 0xca, 0xf1, 0xc4, 0xa8, 0x7c, 0x9f, 0x18, 0x95, - 0x37, 0x5b, 0x33, 0xa3, 0x2f, 0x21, 0x91, 0x67, 0xc3, 0xf6, 0x90, 0x71, 0xa4, 0x7d, 0x21, 0xda, - 0xb3, 0xd7, 0xc0, 0xc1, 0x43, 0x7a, 0x48, 0xb3, 0x24, 0xd9, 0x91, 0xe0, 0xcb, 0xe9, 0x19, 0x7e, - 0xf0, 0x3b, 0x00, 0x00, 0xff, 0xff, 0xce, 0xee, 0x1c, 0x57, 0x04, 0x05, 0x00, 0x00, + // 544 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0x4f, 0x6b, 0x13, 0x41, + 0x18, 0xc6, 0xb3, 0x2d, 0x14, 0x3b, 0x55, 0xc1, 0xa0, 0x98, 0x6e, 0x75, 0x53, 0x17, 0x91, 0x28, + 0x64, 0xc7, 0xd6, 0x43, 0xad, 0x20, 0xb2, 0x8d, 0x14, 0x3c, 0x04, 0x34, 0x11, 0x04, 0x2f, 0x65, + 0x66, 0xf7, 0xcd, 0x66, 0x30, 0x3b, 0xb3, 0xee, 0x3b, 0x5b, 0x1b, 0xf0, 0x43, 0xe8, 0xc9, 0xef, + 0xe0, 0xcd, 0x83, 0xdf, 0xa1, 0xc7, 0x1e, 0x3d, 0x55, 0x49, 0xbe, 0x81, 0x9f, 0x40, 0xf6, 0x5f, + 0x48, 0xd5, 0xc4, 0xd8, 0x53, 0xb2, 0x33, 0xbf, 0xe7, 0x7d, 0x9e, 0x77, 0xf6, 0x9d, 0x25, 0x77, + 0x7a, 0x00, 0x8c, 0xa3, 0x8e, 0x99, 0xa7, 0x85, 0x92, 0x94, 0x71, 0xec, 0x01, 0xd0, 0xc3, 0x2d, + 0x0e, 0x9a, 0x6d, 0x51, 0x7d, 0xe4, 0x44, 0xb1, 0xd2, 0xaa, 0x7a, 0xf3, 0x2c, 0xe7, 0xe4, 0x9c, + 0x53, 0x70, 0xe6, 0xd5, 0x40, 0x05, 0x2a, 0x23, 0x69, 0xfa, 0x2f, 0x17, 0x99, 0x37, 0x02, 0xa5, + 0x82, 0x01, 0x50, 0x16, 0x09, 0xca, 0xa4, 0x54, 0x9a, 0xa5, 0x5a, 0x2c, 0x76, 0xef, 0x79, 0x0a, + 0x43, 0x85, 0x94, 0x33, 0x04, 0xfa, 0x36, 0x81, 0x78, 0x38, 0xb1, 0x8d, 0x58, 0x20, 0x64, 0x06, + 0x97, 0xec, 0xfc, 0x98, 0x11, 0x8b, 0x59, 0x58, 0xd6, 0xbd, 0x3b, 0x9f, 0x85, 0x48, 0x79, 0xfd, + 0x02, 0xb5, 0xa6, 0x23, 0x94, 0x80, 0xa7, 0x44, 0x69, 0x5b, 0x2f, 0x1a, 0xc8, 0x9e, 0x78, 0xd2, + 0xa3, 0x5a, 0x84, 0x80, 0x9a, 0x85, 0x51, 0x0e, 0xd8, 0x5f, 0x0d, 0x62, 0xb6, 0x31, 0xd8, 0x4f, + 0xa4, 0xbf, 0x0f, 0xe0, 0x72, 0x6c, 0x2b, 0x3f, 0x19, 0x80, 0xeb, 0x79, 0x2a, 0x91, 0xba, 0x7a, + 0x8b, 0x5c, 0xec, 0xc5, 0x2a, 0x3c, 0x60, 0xbe, 0x1f, 0x03, 0x62, 0xcd, 0xd8, 0x34, 0x1a, 0xab, + 0x9d, 0xb5, 0x74, 0xcd, 0xcd, 0x97, 0xaa, 0x9a, 0xac, 0xb0, 0x30, 0x85, 0x6b, 0x4b, 0x9b, 0xcb, + 0x8d, 0xb5, 0xed, 0x75, 0x27, 0xcf, 0xe4, 0xa4, 0x99, 0xca, 0xf3, 0x75, 0x5a, 0x4a, 0xc8, 0x3d, + 0xf7, 0xf8, 0xb4, 0x5e, 0xf9, 0x79, 0x5a, 0xbf, 0x34, 0x64, 0xe1, 0xe0, 0x91, 0x9d, 0xcb, 0xec, + 0xcf, 0xdf, 0xeb, 0x8d, 0x40, 0xe8, 0x7e, 0xc2, 0x1d, 0x4f, 0x85, 0xb4, 0xe8, 0x28, 0xff, 0x69, + 0xa2, 0xff, 0x86, 0xea, 0x61, 0x04, 0x98, 0x55, 0xc0, 0x4e, 0xe1, 0x65, 0xdf, 0x26, 0xf6, 0xec, + 0xd8, 0x1d, 0xc0, 0x48, 0x49, 0x04, 0xfb, 0x31, 0xa9, 0xb5, 0x31, 0xe8, 0x82, 0xf4, 0x5f, 0xa4, + 0xaf, 0xe7, 0x19, 0xf7, 0x9e, 0x82, 0x54, 0xe1, 0xcb, 0x57, 0xee, 0xf3, 0x05, 0x5a, 0xb3, 0x6d, + 0xb2, 0x39, 0x4b, 0x3e, 0xb1, 0xe8, 0x92, 0x2b, 0x29, 0xf3, 0x8e, 0x45, 0xad, 0x58, 0x21, 0xb6, + 0xfa, 0x4c, 0xc8, 0x45, 0x8e, 0x6d, 0x83, 0xac, 0x0a, 0xee, 0x1d, 0xf8, 0x69, 0xc1, 0xda, 0x52, + 0xb6, 0x7f, 0x41, 0x14, 0x06, 0xf6, 0x06, 0x59, 0xff, 0xa3, 0x68, 0xe9, 0xb8, 0xfd, 0x65, 0x99, + 0x2c, 0xb7, 0x31, 0xa8, 0x7e, 0x34, 0xc8, 0xb5, 0xbf, 0xb7, 0xb6, 0xe3, 0xcc, 0x1d, 0x76, 0x67, + 0x56, 0x53, 0xe6, 0x93, 0x73, 0x0a, 0xcb, 0x6c, 0xd5, 0xf7, 0xe4, 0xf2, 0x6f, 0x47, 0x71, 0x7f, + 0x81, 0x92, 0x67, 0x14, 0xe6, 0xc3, 0xff, 0x55, 0x4c, 0xdc, 0x3f, 0x19, 0xe4, 0xfa, 0xac, 0x49, + 0xde, 0xfd, 0x77, 0xd5, 0x19, 0x52, 0xd3, 0x3d, 0xb7, 0xb4, 0x4c, 0xb6, 0xd7, 0x3d, 0x1e, 0x59, + 0xc6, 0xc9, 0xc8, 0x32, 0x7e, 0x8c, 0x2c, 0xe3, 0xc3, 0xd8, 0xaa, 0x9c, 0x8c, 0xad, 0xca, 0xb7, + 0xb1, 0x55, 0x79, 0xbd, 0x3b, 0x35, 0xfa, 0xd9, 0xc8, 0x0b, 0x6c, 0x0e, 0x18, 0x47, 0xda, 0x03, + 0x68, 0x4e, 0x7f, 0x05, 0x0e, 0x77, 0xe8, 0x11, 0xcd, 0x83, 0xe4, 0x37, 0x82, 0xaf, 0x64, 0x57, + 0xf8, 0xc1, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0x32, 0x43, 0xd8, 0x03, 0x05, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. From 4d9881e3a37e660c22be30f109d63503eeecc083 Mon Sep 17 00:00:00 2001 From: vuong <56973102+vuong177@users.noreply.github.com> Date: Mon, 21 Aug 2023 13:49:36 +0700 Subject: [PATCH 53/90] Unfrozen host zone when receive valid ICQ response from Osmosis (#70) * unfrozen host zone when receive valid ICQ response from Osmosis * linting --- x/feeabs/keeper/config.go | 1 - x/feeabs/keeper/ibc.go | 5 +++++ x/feeabs/keeper/module.go | 1 - x/feeabs/keeper/swap.go | 1 - 4 files changed, 5 insertions(+), 3 deletions(-) delete mode 100644 x/feeabs/keeper/module.go delete mode 100644 x/feeabs/keeper/swap.go diff --git a/x/feeabs/keeper/config.go b/x/feeabs/keeper/config.go index e922e651..003ed5e2 100644 --- a/x/feeabs/keeper/config.go +++ b/x/feeabs/keeper/config.go @@ -81,7 +81,6 @@ func (k Keeper) IterateHostZone(ctx sdk.Context, cb func(hostZoneConfig types.Ho func (k Keeper) FrozenHostZoneByIBCDenom(ctx sdk.Context, ibcDenom string) error { hostChainConfig, err := k.GetHostZoneConfig(ctx, ibcDenom) if err != nil { - // TODO: registry the error here return sdkerrors.Wrapf(types.ErrHostZoneConfigNotFound, err.Error()) } hostChainConfig.Frozen = true diff --git a/x/feeabs/keeper/ibc.go b/x/feeabs/keeper/ibc.go index c6bb523b..224033ee 100644 --- a/x/feeabs/keeper/ibc.go +++ b/x/feeabs/keeper/ibc.go @@ -152,6 +152,11 @@ func (k Keeper) OnAcknowledgementPacket(ctx sdk.Context, ack channeltypes.Acknow k.Logger(ctx).Info(fmt.Sprintf("TwapRate %v", twapRate)) k.SetTwapRate(ctx, hostZoneConfig.IbcDenom, twapRate) + err = k.UnFrozenHostZoneByIBCDenom(ctx, hostZoneConfig.IbcDenom) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Failed to frozen host zone %s", err.Error())) + return false + } return false }) diff --git a/x/feeabs/keeper/module.go b/x/feeabs/keeper/module.go deleted file mode 100644 index b55569d4..00000000 --- a/x/feeabs/keeper/module.go +++ /dev/null @@ -1 +0,0 @@ -package keeper diff --git a/x/feeabs/keeper/swap.go b/x/feeabs/keeper/swap.go deleted file mode 100644 index b55569d4..00000000 --- a/x/feeabs/keeper/swap.go +++ /dev/null @@ -1 +0,0 @@ -package keeper From b693fc0bfa57e77179b9ac118d88bc5eab2add60 Mon Sep 17 00:00:00 2001 From: vuong177 Date: Mon, 21 Aug 2023 13:57:22 +0700 Subject: [PATCH 54/90] remove msg in proto file --- proto/feeabstraction/absfee/v1beta1/tx.proto | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/proto/feeabstraction/absfee/v1beta1/tx.proto b/proto/feeabstraction/absfee/v1beta1/tx.proto index f401fd81..4d70989b 100644 --- a/proto/feeabstraction/absfee/v1beta1/tx.proto +++ b/proto/feeabstraction/absfee/v1beta1/tx.proto @@ -2,8 +2,6 @@ syntax = "proto3"; package feeabstraction.absfee.v1beta1; import "gogoproto/gogo.proto"; -import "google/api/annotations.proto"; -import "cosmos/base/query/v1beta1/pagination.proto"; import "feeabstraction/absfee/v1beta1/params.proto"; import "feeabstraction/absfee/v1beta1/epoch.proto"; import "cosmos/base/v1beta1/coin.proto"; @@ -13,9 +11,6 @@ option go_package = "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types"; // Msg is the cosmos.group.v1 Msg service. service Msg { - rpc SendQueryIbcDenomTWAP(MsgSendQueryIbcDenomTWAP) - returns (MsgSendQueryIbcDenomTWAPResponse); - rpc SwapCrossChain(MsgSwapCrossChain) returns (MsgSwapCrossChainResponse); rpc FundFeeAbsModuleAccount(MsgFundFeeAbsModuleAccount) returns (MsgFundFeeAbsModuleAccountResponse); } @@ -31,15 +26,3 @@ message MsgFundFeeAbsModuleAccount { } message MsgFundFeeAbsModuleAccountResponse {} - -// Params defines the parameters for the feeabs module. -message MsgSendQueryIbcDenomTWAP { string from_address = 1; } - -message MsgSendQueryIbcDenomTWAPResponse {} - -// Params defines the parameters for the feeabs module. -message MsgSwapCrossChain { - string from_address = 1; - string ibc_denom = 2; -} -message MsgSwapCrossChainResponse {} From 5bfb3272c31038d27a4a82977c3af580d84c63df Mon Sep 17 00:00:00 2001 From: vuong177 Date: Mon, 21 Aug 2023 13:57:42 +0700 Subject: [PATCH 55/90] remove msg service --- x/feeabs/keeper/msgserver.go | 36 -- x/feeabs/types/codec.go | 5 +- x/feeabs/types/msg.go | 75 ---- x/feeabs/types/tx.pb.go | 770 ++--------------------------------- x/feeabs/types/tx.pb.gw.go | 337 --------------- 5 files changed, 29 insertions(+), 1194 deletions(-) delete mode 100644 x/feeabs/types/tx.pb.gw.go diff --git a/x/feeabs/keeper/msgserver.go b/x/feeabs/keeper/msgserver.go index 82fd5716..14380c1e 100644 --- a/x/feeabs/keeper/msgserver.go +++ b/x/feeabs/keeper/msgserver.go @@ -22,42 +22,6 @@ func NewMsgServerImpl(keeper Keeper) types.MsgServer { var _ types.MsgServer = msgServer{} -// Need to remove this -func (k Keeper) SendQueryIbcDenomTWAP(goCtx context.Context, msg *types.MsgSendQueryIbcDenomTWAP) (*types.MsgSendQueryIbcDenomTWAPResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - _, err := sdk.AccAddressFromBech32(msg.FromAddress) - if err != nil { - return nil, err - } - err = k.handleOsmosisIbcQuery(ctx) - if err != nil { - return nil, err - } - - return &types.MsgSendQueryIbcDenomTWAPResponse{}, nil -} - -// Need to remove this -func (k Keeper) SwapCrossChain(goCtx context.Context, msg *types.MsgSwapCrossChain) (*types.MsgSwapCrossChainResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - hostChainConfig, err := k.GetHostZoneConfig(ctx, msg.IbcDenom) - if err != nil { - return &types.MsgSwapCrossChainResponse{}, nil - } - _, err = sdk.AccAddressFromBech32(msg.FromAddress) - if err != nil { - return nil, err - } - - err = k.transferOsmosisCrosschainSwap(ctx, hostChainConfig) - - if err != nil { - return nil, err - } - - return &types.MsgSwapCrossChainResponse{}, nil -} - func (k Keeper) FundFeeAbsModuleAccount( goCtx context.Context, msg *types.MsgFundFeeAbsModuleAccount, diff --git a/x/feeabs/types/codec.go b/x/feeabs/types/codec.go index 06b5fffc..f8ea1bb9 100644 --- a/x/feeabs/types/codec.go +++ b/x/feeabs/types/codec.go @@ -22,8 +22,6 @@ var ( ) func RegisterCodec(cdc *codec.LegacyAmino) { - cdc.RegisterConcrete(&MsgSendQueryIbcDenomTWAP{}, "feeabs/SendQueryIbcDenomTWAP", nil) - cdc.RegisterConcrete(&MsgSwapCrossChain{}, "feeabs/SwapCrossChain", nil) cdc.RegisterConcrete(&AddHostZoneProposal{}, "feeabs/AddHostZoneProposal", nil) cdc.RegisterConcrete(&DeleteHostZoneProposal{}, "feeabs/DeleteHostZoneProposal", nil) cdc.RegisterConcrete(&SetHostZoneProposal{}, "feeabs/SetHostZoneProposal", nil) @@ -32,8 +30,7 @@ func RegisterCodec(cdc *codec.LegacyAmino) { func RegisterInterfaces(registry types.InterfaceRegistry) { registry.RegisterImplementations((*sdk.Msg)(nil), - &MsgSendQueryIbcDenomTWAP{}, - &MsgSwapCrossChain{}, + &MsgFundFeeAbsModuleAccount{}, ) registry.RegisterImplementations( diff --git a/x/feeabs/types/msg.go b/x/feeabs/types/msg.go index d303a3a1..07e1ea20 100644 --- a/x/feeabs/types/msg.go +++ b/x/feeabs/types/msg.go @@ -7,81 +7,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" ) -var _ sdk.Msg = &MsgSendQueryIbcDenomTWAP{} - -// Route Implements Msg. -func (m MsgSendQueryIbcDenomTWAP) Route() string { return sdk.MsgTypeURL(&m) } - -// Type Implements Msg. -func (m MsgSendQueryIbcDenomTWAP) Type() string { return sdk.MsgTypeURL(&m) } - -// GetSigners returns the expected signers for a MsgMintAndAllocateExp . -func (m MsgSendQueryIbcDenomTWAP) GetSigners() []sdk.AccAddress { - daoAccount, err := sdk.AccAddressFromBech32(m.FromAddress) - if err != nil { - panic(err) - } - return []sdk.AccAddress{daoAccount} -} - -// GetSignBytes Implements Msg. -func (m MsgSendQueryIbcDenomTWAP) GetSignBytes() []byte { - return sdk.MustSortJSON(legacy.Cdc.MustMarshalJSON(&m)) -} - -// ValidateBasic does a sanity check on the provided data. -func (m MsgSendQueryIbcDenomTWAP) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(m.FromAddress) - if err != nil { - return sdkerrors.Wrap(err, "from address must be valid address") - } - return nil -} - -func NewMsgSendQueryIbcDenomTWAP(fromAddr sdk.AccAddress) *MsgSendQueryIbcDenomTWAP { - return &MsgSendQueryIbcDenomTWAP{ - FromAddress: fromAddr.String(), - } -} - -var _ sdk.Msg = &MsgSwapCrossChain{} - -// Route Implements Msg. -func (m MsgSwapCrossChain) Route() string { return sdk.MsgTypeURL(&m) } - -// Type Implements Msg. -func (m MsgSwapCrossChain) Type() string { return sdk.MsgTypeURL(&m) } - -// GetSigners returns the expected signers for a MsgMintAndAllocateExp . -func (m MsgSwapCrossChain) GetSigners() []sdk.AccAddress { - daoAccount, err := sdk.AccAddressFromBech32(m.FromAddress) - if err != nil { - panic(err) - } - return []sdk.AccAddress{daoAccount} -} - -// GetSignBytes Implements Msg. -func (m MsgSwapCrossChain) GetSignBytes() []byte { - return sdk.MustSortJSON(legacy.Cdc.MustMarshalJSON(&m)) -} - -// ValidateBasic does a sanity check on the provided data. -func (m MsgSwapCrossChain) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(m.FromAddress) - if err != nil { - return sdkerrors.Wrap(err, "from address must be valid address") - } - return nil -} - -func NewMsgSwapCrossChain(fromAddr sdk.AccAddress, ibcDenom string) *MsgSwapCrossChain { - return &MsgSwapCrossChain{ - FromAddress: fromAddr.String(), - IbcDenom: ibcDenom, - } -} - var _ sdk.Msg = &MsgFundFeeAbsModuleAccount{} // Route Implements Msg. diff --git a/x/feeabs/types/tx.pb.go b/x/feeabs/types/tx.pb.go index b3274447..156f4ebc 100644 --- a/x/feeabs/types/tx.pb.go +++ b/x/feeabs/types/tx.pb.go @@ -8,11 +8,9 @@ import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" - _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" @@ -122,183 +120,9 @@ func (m *MsgFundFeeAbsModuleAccountResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgFundFeeAbsModuleAccountResponse proto.InternalMessageInfo -// Params defines the parameters for the feeabs module. -type MsgSendQueryIbcDenomTWAP struct { - FromAddress string `protobuf:"bytes,1,opt,name=from_address,json=fromAddress,proto3" json:"from_address,omitempty"` -} - -func (m *MsgSendQueryIbcDenomTWAP) Reset() { *m = MsgSendQueryIbcDenomTWAP{} } -func (m *MsgSendQueryIbcDenomTWAP) String() string { return proto.CompactTextString(m) } -func (*MsgSendQueryIbcDenomTWAP) ProtoMessage() {} -func (*MsgSendQueryIbcDenomTWAP) Descriptor() ([]byte, []int) { - return fileDescriptor_84c172c34645b936, []int{2} -} -func (m *MsgSendQueryIbcDenomTWAP) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgSendQueryIbcDenomTWAP) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgSendQueryIbcDenomTWAP.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 *MsgSendQueryIbcDenomTWAP) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgSendQueryIbcDenomTWAP.Merge(m, src) -} -func (m *MsgSendQueryIbcDenomTWAP) XXX_Size() int { - return m.Size() -} -func (m *MsgSendQueryIbcDenomTWAP) XXX_DiscardUnknown() { - xxx_messageInfo_MsgSendQueryIbcDenomTWAP.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgSendQueryIbcDenomTWAP proto.InternalMessageInfo - -func (m *MsgSendQueryIbcDenomTWAP) GetFromAddress() string { - if m != nil { - return m.FromAddress - } - return "" -} - -type MsgSendQueryIbcDenomTWAPResponse struct { -} - -func (m *MsgSendQueryIbcDenomTWAPResponse) Reset() { *m = MsgSendQueryIbcDenomTWAPResponse{} } -func (m *MsgSendQueryIbcDenomTWAPResponse) String() string { return proto.CompactTextString(m) } -func (*MsgSendQueryIbcDenomTWAPResponse) ProtoMessage() {} -func (*MsgSendQueryIbcDenomTWAPResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_84c172c34645b936, []int{3} -} -func (m *MsgSendQueryIbcDenomTWAPResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgSendQueryIbcDenomTWAPResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgSendQueryIbcDenomTWAPResponse.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 *MsgSendQueryIbcDenomTWAPResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgSendQueryIbcDenomTWAPResponse.Merge(m, src) -} -func (m *MsgSendQueryIbcDenomTWAPResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgSendQueryIbcDenomTWAPResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgSendQueryIbcDenomTWAPResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgSendQueryIbcDenomTWAPResponse proto.InternalMessageInfo - -// Params defines the parameters for the feeabs module. -type MsgSwapCrossChain struct { - FromAddress string `protobuf:"bytes,1,opt,name=from_address,json=fromAddress,proto3" json:"from_address,omitempty"` - IbcDenom string `protobuf:"bytes,2,opt,name=ibc_denom,json=ibcDenom,proto3" json:"ibc_denom,omitempty"` -} - -func (m *MsgSwapCrossChain) Reset() { *m = MsgSwapCrossChain{} } -func (m *MsgSwapCrossChain) String() string { return proto.CompactTextString(m) } -func (*MsgSwapCrossChain) ProtoMessage() {} -func (*MsgSwapCrossChain) Descriptor() ([]byte, []int) { - return fileDescriptor_84c172c34645b936, []int{4} -} -func (m *MsgSwapCrossChain) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgSwapCrossChain) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgSwapCrossChain.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 *MsgSwapCrossChain) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgSwapCrossChain.Merge(m, src) -} -func (m *MsgSwapCrossChain) XXX_Size() int { - return m.Size() -} -func (m *MsgSwapCrossChain) XXX_DiscardUnknown() { - xxx_messageInfo_MsgSwapCrossChain.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgSwapCrossChain proto.InternalMessageInfo - -func (m *MsgSwapCrossChain) GetFromAddress() string { - if m != nil { - return m.FromAddress - } - return "" -} - -func (m *MsgSwapCrossChain) GetIbcDenom() string { - if m != nil { - return m.IbcDenom - } - return "" -} - -type MsgSwapCrossChainResponse struct { -} - -func (m *MsgSwapCrossChainResponse) Reset() { *m = MsgSwapCrossChainResponse{} } -func (m *MsgSwapCrossChainResponse) String() string { return proto.CompactTextString(m) } -func (*MsgSwapCrossChainResponse) ProtoMessage() {} -func (*MsgSwapCrossChainResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_84c172c34645b936, []int{5} -} -func (m *MsgSwapCrossChainResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgSwapCrossChainResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgSwapCrossChainResponse.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 *MsgSwapCrossChainResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgSwapCrossChainResponse.Merge(m, src) -} -func (m *MsgSwapCrossChainResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgSwapCrossChainResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgSwapCrossChainResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgSwapCrossChainResponse proto.InternalMessageInfo - func init() { proto.RegisterType((*MsgFundFeeAbsModuleAccount)(nil), "feeabstraction.absfee.v1beta1.MsgFundFeeAbsModuleAccount") proto.RegisterType((*MsgFundFeeAbsModuleAccountResponse)(nil), "feeabstraction.absfee.v1beta1.MsgFundFeeAbsModuleAccountResponse") - proto.RegisterType((*MsgSendQueryIbcDenomTWAP)(nil), "feeabstraction.absfee.v1beta1.MsgSendQueryIbcDenomTWAP") - proto.RegisterType((*MsgSendQueryIbcDenomTWAPResponse)(nil), "feeabstraction.absfee.v1beta1.MsgSendQueryIbcDenomTWAPResponse") - proto.RegisterType((*MsgSwapCrossChain)(nil), "feeabstraction.absfee.v1beta1.MsgSwapCrossChain") - proto.RegisterType((*MsgSwapCrossChainResponse)(nil), "feeabstraction.absfee.v1beta1.MsgSwapCrossChainResponse") } func init() { @@ -306,41 +130,32 @@ func init() { } var fileDescriptor_84c172c34645b936 = []byte{ - // 544 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0x4f, 0x6b, 0x13, 0x41, - 0x18, 0xc6, 0xb3, 0x2d, 0x14, 0x3b, 0x55, 0xc1, 0xa0, 0x98, 0x6e, 0x75, 0x53, 0x17, 0x91, 0x28, - 0x64, 0xc7, 0xd6, 0x43, 0xad, 0x20, 0xb2, 0x8d, 0x14, 0x3c, 0x04, 0x34, 0x11, 0x04, 0x2f, 0x65, - 0x66, 0xf7, 0xcd, 0x66, 0x30, 0x3b, 0xb3, 0xee, 0x3b, 0x5b, 0x1b, 0xf0, 0x43, 0xe8, 0xc9, 0xef, - 0xe0, 0xcd, 0x83, 0xdf, 0xa1, 0xc7, 0x1e, 0x3d, 0x55, 0x49, 0xbe, 0x81, 0x9f, 0x40, 0xf6, 0x5f, - 0x48, 0xd5, 0xc4, 0xd8, 0x53, 0xb2, 0x33, 0xbf, 0xe7, 0x7d, 0x9e, 0x77, 0xf6, 0x9d, 0x25, 0x77, - 0x7a, 0x00, 0x8c, 0xa3, 0x8e, 0x99, 0xa7, 0x85, 0x92, 0x94, 0x71, 0xec, 0x01, 0xd0, 0xc3, 0x2d, - 0x0e, 0x9a, 0x6d, 0x51, 0x7d, 0xe4, 0x44, 0xb1, 0xd2, 0xaa, 0x7a, 0xf3, 0x2c, 0xe7, 0xe4, 0x9c, - 0x53, 0x70, 0xe6, 0xd5, 0x40, 0x05, 0x2a, 0x23, 0x69, 0xfa, 0x2f, 0x17, 0x99, 0x37, 0x02, 0xa5, - 0x82, 0x01, 0x50, 0x16, 0x09, 0xca, 0xa4, 0x54, 0x9a, 0xa5, 0x5a, 0x2c, 0x76, 0xef, 0x79, 0x0a, - 0x43, 0x85, 0x94, 0x33, 0x04, 0xfa, 0x36, 0x81, 0x78, 0x38, 0xb1, 0x8d, 0x58, 0x20, 0x64, 0x06, - 0x97, 0xec, 0xfc, 0x98, 0x11, 0x8b, 0x59, 0x58, 0xd6, 0xbd, 0x3b, 0x9f, 0x85, 0x48, 0x79, 0xfd, - 0x02, 0xb5, 0xa6, 0x23, 0x94, 0x80, 0xa7, 0x44, 0x69, 0x5b, 0x2f, 0x1a, 0xc8, 0x9e, 0x78, 0xd2, - 0xa3, 0x5a, 0x84, 0x80, 0x9a, 0x85, 0x51, 0x0e, 0xd8, 0x5f, 0x0d, 0x62, 0xb6, 0x31, 0xd8, 0x4f, - 0xa4, 0xbf, 0x0f, 0xe0, 0x72, 0x6c, 0x2b, 0x3f, 0x19, 0x80, 0xeb, 0x79, 0x2a, 0x91, 0xba, 0x7a, - 0x8b, 0x5c, 0xec, 0xc5, 0x2a, 0x3c, 0x60, 0xbe, 0x1f, 0x03, 0x62, 0xcd, 0xd8, 0x34, 0x1a, 0xab, - 0x9d, 0xb5, 0x74, 0xcd, 0xcd, 0x97, 0xaa, 0x9a, 0xac, 0xb0, 0x30, 0x85, 0x6b, 0x4b, 0x9b, 0xcb, - 0x8d, 0xb5, 0xed, 0x75, 0x27, 0xcf, 0xe4, 0xa4, 0x99, 0xca, 0xf3, 0x75, 0x5a, 0x4a, 0xc8, 0x3d, - 0xf7, 0xf8, 0xb4, 0x5e, 0xf9, 0x79, 0x5a, 0xbf, 0x34, 0x64, 0xe1, 0xe0, 0x91, 0x9d, 0xcb, 0xec, - 0xcf, 0xdf, 0xeb, 0x8d, 0x40, 0xe8, 0x7e, 0xc2, 0x1d, 0x4f, 0x85, 0xb4, 0xe8, 0x28, 0xff, 0x69, - 0xa2, 0xff, 0x86, 0xea, 0x61, 0x04, 0x98, 0x55, 0xc0, 0x4e, 0xe1, 0x65, 0xdf, 0x26, 0xf6, 0xec, - 0xd8, 0x1d, 0xc0, 0x48, 0x49, 0x04, 0xfb, 0x31, 0xa9, 0xb5, 0x31, 0xe8, 0x82, 0xf4, 0x5f, 0xa4, - 0xaf, 0xe7, 0x19, 0xf7, 0x9e, 0x82, 0x54, 0xe1, 0xcb, 0x57, 0xee, 0xf3, 0x05, 0x5a, 0xb3, 0x6d, - 0xb2, 0x39, 0x4b, 0x3e, 0xb1, 0xe8, 0x92, 0x2b, 0x29, 0xf3, 0x8e, 0x45, 0xad, 0x58, 0x21, 0xb6, - 0xfa, 0x4c, 0xc8, 0x45, 0x8e, 0x6d, 0x83, 0xac, 0x0a, 0xee, 0x1d, 0xf8, 0x69, 0xc1, 0xda, 0x52, - 0xb6, 0x7f, 0x41, 0x14, 0x06, 0xf6, 0x06, 0x59, 0xff, 0xa3, 0x68, 0xe9, 0xb8, 0xfd, 0x65, 0x99, - 0x2c, 0xb7, 0x31, 0xa8, 0x7e, 0x34, 0xc8, 0xb5, 0xbf, 0xb7, 0xb6, 0xe3, 0xcc, 0x1d, 0x76, 0x67, - 0x56, 0x53, 0xe6, 0x93, 0x73, 0x0a, 0xcb, 0x6c, 0xd5, 0xf7, 0xe4, 0xf2, 0x6f, 0x47, 0x71, 0x7f, - 0x81, 0x92, 0x67, 0x14, 0xe6, 0xc3, 0xff, 0x55, 0x4c, 0xdc, 0x3f, 0x19, 0xe4, 0xfa, 0xac, 0x49, - 0xde, 0xfd, 0x77, 0xd5, 0x19, 0x52, 0xd3, 0x3d, 0xb7, 0xb4, 0x4c, 0xb6, 0xd7, 0x3d, 0x1e, 0x59, - 0xc6, 0xc9, 0xc8, 0x32, 0x7e, 0x8c, 0x2c, 0xe3, 0xc3, 0xd8, 0xaa, 0x9c, 0x8c, 0xad, 0xca, 0xb7, - 0xb1, 0x55, 0x79, 0xbd, 0x3b, 0x35, 0xfa, 0xd9, 0xc8, 0x0b, 0x6c, 0x0e, 0x18, 0x47, 0xda, 0x03, - 0x68, 0x4e, 0x7f, 0x05, 0x0e, 0x77, 0xe8, 0x11, 0xcd, 0x83, 0xe4, 0x37, 0x82, 0xaf, 0x64, 0x57, - 0xf8, 0xc1, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0x32, 0x43, 0xd8, 0x03, 0x05, 0x00, 0x00, + // 394 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x92, 0xb1, 0x8e, 0xd3, 0x40, + 0x10, 0x86, 0xbd, 0x9c, 0x74, 0x12, 0x3e, 0x68, 0x2c, 0x24, 0x0e, 0x4b, 0xd8, 0x87, 0x85, 0x50, + 0x40, 0xca, 0xae, 0xee, 0x28, 0xd0, 0xd1, 0xf9, 0x90, 0xae, 0x4b, 0x13, 0x3a, 0x1a, 0xb4, 0x6b, + 0x8f, 0x7d, 0x16, 0x5e, 0x8f, 0xe5, 0x59, 0x47, 0xc9, 0x5b, 0xd0, 0x51, 0xd2, 0xd3, 0xf3, 0x0e, + 0x29, 0x53, 0x52, 0x05, 0x94, 0xbc, 0x01, 0x4f, 0x80, 0xec, 0x75, 0x44, 0x28, 0x92, 0x82, 0xca, + 0xde, 0xd9, 0x6f, 0x66, 0xfe, 0xf9, 0x67, 0xdd, 0x17, 0x19, 0x80, 0x54, 0x64, 0x1a, 0x99, 0x98, + 0x02, 0x2b, 0x21, 0x15, 0x65, 0x00, 0x62, 0x76, 0xa9, 0xc0, 0xc8, 0x4b, 0x61, 0xe6, 0xbc, 0x6e, + 0xd0, 0xa0, 0xf7, 0xf4, 0x5f, 0x8e, 0x5b, 0x8e, 0x0f, 0x9c, 0xff, 0x28, 0xc7, 0x1c, 0x7b, 0x52, + 0x74, 0x7f, 0x36, 0xc9, 0x7f, 0x75, 0xbc, 0x78, 0x2d, 0x1b, 0xa9, 0x69, 0x60, 0x5f, 0x1e, 0x67, + 0xa1, 0xc6, 0xe4, 0x6e, 0x40, 0x83, 0x04, 0x49, 0x23, 0x09, 0x25, 0xe9, 0x2f, 0x90, 0x60, 0x51, + 0x0d, 0xf7, 0x61, 0x8e, 0x98, 0x97, 0x20, 0xfa, 0x93, 0x6a, 0x33, 0x61, 0x0a, 0x0d, 0x64, 0xa4, + 0xae, 0x2d, 0x10, 0x7d, 0x67, 0xae, 0x3f, 0xa1, 0xfc, 0xb6, 0xad, 0xd2, 0x5b, 0x80, 0x58, 0xd1, + 0x04, 0xd3, 0xb6, 0x84, 0x38, 0x49, 0xb0, 0xad, 0x8c, 0xf7, 0xcc, 0x7d, 0x90, 0x35, 0xa8, 0x3f, + 0xca, 0x34, 0x6d, 0x80, 0xe8, 0x9c, 0x5d, 0xb0, 0xd1, 0xfd, 0xe9, 0x59, 0x17, 0x8b, 0x6d, 0xc8, + 0x33, 0xee, 0xa9, 0xd4, 0x1d, 0x7c, 0x7e, 0xef, 0xe2, 0x64, 0x74, 0x76, 0xf5, 0x84, 0x5b, 0x4d, + 0xbc, 0xd3, 0xb4, 0x73, 0x85, 0xbf, 0xc3, 0xa2, 0xba, 0x89, 0x97, 0xeb, 0xd0, 0xf9, 0xbd, 0x0e, + 0x1f, 0x2e, 0xa4, 0x2e, 0xdf, 0x46, 0x36, 0x2d, 0xfa, 0xf6, 0x33, 0x1c, 0xe5, 0x85, 0xb9, 0x6b, + 0x15, 0x4f, 0x50, 0x8b, 0x61, 0x22, 0xfb, 0x19, 0x53, 0xfa, 0x49, 0x98, 0x45, 0x0d, 0xd4, 0x57, + 0xa0, 0xe9, 0xd0, 0x2b, 0x7a, 0xee, 0x46, 0x87, 0x65, 0x4f, 0x81, 0x6a, 0xac, 0x08, 0xae, 0xbe, + 0x32, 0xf7, 0x64, 0x42, 0xb9, 0xf7, 0x85, 0xb9, 0x8f, 0x0f, 0x8d, 0x78, 0xcd, 0x8f, 0xee, 0x93, + 0x1f, 0x6e, 0xe3, 0xc7, 0xff, 0x9d, 0xba, 0x53, 0x78, 0xf3, 0x7e, 0xb9, 0x09, 0xd8, 0x6a, 0x13, + 0xb0, 0x5f, 0x9b, 0x80, 0x7d, 0xde, 0x06, 0xce, 0x6a, 0x1b, 0x38, 0x3f, 0xb6, 0x81, 0xf3, 0xe1, + 0x7a, 0xcf, 0x93, 0xde, 0x8b, 0x82, 0xc6, 0xa5, 0x54, 0x24, 0x32, 0x80, 0xf1, 0xfe, 0xf3, 0x98, + 0xbd, 0x11, 0x73, 0x61, 0x85, 0x58, 0xab, 0xd4, 0x69, 0xbf, 0xdb, 0xd7, 0x7f, 0x02, 0x00, 0x00, + 0xff, 0xff, 0xe0, 0x55, 0xdd, 0x68, 0xd2, 0x02, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -355,8 +170,6 @@ const _ = grpc.SupportPackageIsVersion4 // // 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 { - SendQueryIbcDenomTWAP(ctx context.Context, in *MsgSendQueryIbcDenomTWAP, opts ...grpc.CallOption) (*MsgSendQueryIbcDenomTWAPResponse, error) - SwapCrossChain(ctx context.Context, in *MsgSwapCrossChain, opts ...grpc.CallOption) (*MsgSwapCrossChainResponse, error) FundFeeAbsModuleAccount(ctx context.Context, in *MsgFundFeeAbsModuleAccount, opts ...grpc.CallOption) (*MsgFundFeeAbsModuleAccountResponse, error) } @@ -368,24 +181,6 @@ func NewMsgClient(cc grpc1.ClientConn) MsgClient { return &msgClient{cc} } -func (c *msgClient) SendQueryIbcDenomTWAP(ctx context.Context, in *MsgSendQueryIbcDenomTWAP, opts ...grpc.CallOption) (*MsgSendQueryIbcDenomTWAPResponse, error) { - out := new(MsgSendQueryIbcDenomTWAPResponse) - err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Msg/SendQueryIbcDenomTWAP", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) SwapCrossChain(ctx context.Context, in *MsgSwapCrossChain, opts ...grpc.CallOption) (*MsgSwapCrossChainResponse, error) { - out := new(MsgSwapCrossChainResponse) - err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Msg/SwapCrossChain", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *msgClient) FundFeeAbsModuleAccount(ctx context.Context, in *MsgFundFeeAbsModuleAccount, opts ...grpc.CallOption) (*MsgFundFeeAbsModuleAccountResponse, error) { out := new(MsgFundFeeAbsModuleAccountResponse) err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Msg/FundFeeAbsModuleAccount", in, out, opts...) @@ -397,8 +192,6 @@ func (c *msgClient) FundFeeAbsModuleAccount(ctx context.Context, in *MsgFundFeeA // MsgServer is the server API for Msg service. type MsgServer interface { - SendQueryIbcDenomTWAP(context.Context, *MsgSendQueryIbcDenomTWAP) (*MsgSendQueryIbcDenomTWAPResponse, error) - SwapCrossChain(context.Context, *MsgSwapCrossChain) (*MsgSwapCrossChainResponse, error) FundFeeAbsModuleAccount(context.Context, *MsgFundFeeAbsModuleAccount) (*MsgFundFeeAbsModuleAccountResponse, error) } @@ -406,12 +199,6 @@ type MsgServer interface { type UnimplementedMsgServer struct { } -func (*UnimplementedMsgServer) SendQueryIbcDenomTWAP(ctx context.Context, req *MsgSendQueryIbcDenomTWAP) (*MsgSendQueryIbcDenomTWAPResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SendQueryIbcDenomTWAP not implemented") -} -func (*UnimplementedMsgServer) SwapCrossChain(ctx context.Context, req *MsgSwapCrossChain) (*MsgSwapCrossChainResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SwapCrossChain not implemented") -} func (*UnimplementedMsgServer) FundFeeAbsModuleAccount(ctx context.Context, req *MsgFundFeeAbsModuleAccount) (*MsgFundFeeAbsModuleAccountResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method FundFeeAbsModuleAccount not implemented") } @@ -420,42 +207,6 @@ func RegisterMsgServer(s grpc1.Server, srv MsgServer) { s.RegisterService(&_Msg_serviceDesc, srv) } -func _Msg_SendQueryIbcDenomTWAP_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgSendQueryIbcDenomTWAP) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).SendQueryIbcDenomTWAP(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/feeabstraction.absfee.v1beta1.Msg/SendQueryIbcDenomTWAP", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).SendQueryIbcDenomTWAP(ctx, req.(*MsgSendQueryIbcDenomTWAP)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_SwapCrossChain_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgSwapCrossChain) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).SwapCrossChain(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/feeabstraction.absfee.v1beta1.Msg/SwapCrossChain", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).SwapCrossChain(ctx, req.(*MsgSwapCrossChain)) - } - return interceptor(ctx, in, info, handler) -} - func _Msg_FundFeeAbsModuleAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(MsgFundFeeAbsModuleAccount) if err := dec(in); err != nil { @@ -478,14 +229,6 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ ServiceName: "feeabstraction.absfee.v1beta1.Msg", HandlerType: (*MsgServer)(nil), Methods: []grpc.MethodDesc{ - { - MethodName: "SendQueryIbcDenomTWAP", - Handler: _Msg_SendQueryIbcDenomTWAP_Handler, - }, - { - MethodName: "SwapCrossChain", - Handler: _Msg_SwapCrossChain_Handler, - }, { MethodName: "FundFeeAbsModuleAccount", Handler: _Msg_FundFeeAbsModuleAccount_Handler, @@ -562,119 +305,6 @@ func (m *MsgFundFeeAbsModuleAccountResponse) MarshalToSizedBuffer(dAtA []byte) ( return len(dAtA) - i, nil } -func (m *MsgSendQueryIbcDenomTWAP) 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 *MsgSendQueryIbcDenomTWAP) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgSendQueryIbcDenomTWAP) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.FromAddress) > 0 { - i -= len(m.FromAddress) - copy(dAtA[i:], m.FromAddress) - i = encodeVarintTx(dAtA, i, uint64(len(m.FromAddress))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgSendQueryIbcDenomTWAPResponse) 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 *MsgSendQueryIbcDenomTWAPResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgSendQueryIbcDenomTWAPResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *MsgSwapCrossChain) 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 *MsgSwapCrossChain) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgSwapCrossChain) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.IbcDenom) > 0 { - i -= len(m.IbcDenom) - copy(dAtA[i:], m.IbcDenom) - i = encodeVarintTx(dAtA, i, uint64(len(m.IbcDenom))) - i-- - dAtA[i] = 0x12 - } - if len(m.FromAddress) > 0 { - i -= len(m.FromAddress) - copy(dAtA[i:], m.FromAddress) - i = encodeVarintTx(dAtA, i, uint64(len(m.FromAddress))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgSwapCrossChainResponse) 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 *MsgSwapCrossChainResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgSwapCrossChainResponse) 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 @@ -714,56 +344,8 @@ func (m *MsgFundFeeAbsModuleAccountResponse) Size() (n int) { return n } -func (m *MsgSendQueryIbcDenomTWAP) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.FromAddress) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - return n -} - -func (m *MsgSendQueryIbcDenomTWAPResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *MsgSwapCrossChain) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.FromAddress) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - l = len(m.IbcDenom) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - return n -} - -func (m *MsgSwapCrossChainResponse) 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 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)))) @@ -934,302 +516,6 @@ func (m *MsgFundFeeAbsModuleAccountResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgSendQueryIbcDenomTWAP) 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: MsgSendQueryIbcDenomTWAP: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgSendQueryIbcDenomTWAP: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FromAddress", 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.FromAddress = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgSendQueryIbcDenomTWAPResponse) 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: MsgSendQueryIbcDenomTWAPResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgSendQueryIbcDenomTWAPResponse: 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) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgSwapCrossChain) 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: MsgSwapCrossChain: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgSwapCrossChain: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FromAddress", 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.FromAddress = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IbcDenom", 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.IbcDenom = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgSwapCrossChainResponse) 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: MsgSwapCrossChainResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgSwapCrossChainResponse: 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) || (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 diff --git a/x/feeabs/types/tx.pb.gw.go b/x/feeabs/types/tx.pb.gw.go deleted file mode 100644 index c374b335..00000000 --- a/x/feeabs/types/tx.pb.gw.go +++ /dev/null @@ -1,337 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: feeabstraction/absfee/v1beta1/tx.proto - -/* -Package types is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ -package types - -import ( - "context" - "io" - "net/http" - - "github.com/golang/protobuf/descriptor" - "github.com/golang/protobuf/proto" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/grpc-ecosystem/grpc-gateway/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = descriptor.ForMessage -var _ = metadata.Join - -var ( - filter_Msg_SendQueryIbcDenomTWAP_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_Msg_SendQueryIbcDenomTWAP_0(ctx context.Context, marshaler runtime.Marshaler, client MsgClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq MsgSendQueryIbcDenomTWAP - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Msg_SendQueryIbcDenomTWAP_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.SendQueryIbcDenomTWAP(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Msg_SendQueryIbcDenomTWAP_0(ctx context.Context, marshaler runtime.Marshaler, server MsgServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq MsgSendQueryIbcDenomTWAP - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Msg_SendQueryIbcDenomTWAP_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.SendQueryIbcDenomTWAP(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_Msg_SwapCrossChain_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_Msg_SwapCrossChain_0(ctx context.Context, marshaler runtime.Marshaler, client MsgClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq MsgSwapCrossChain - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Msg_SwapCrossChain_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.SwapCrossChain(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Msg_SwapCrossChain_0(ctx context.Context, marshaler runtime.Marshaler, server MsgServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq MsgSwapCrossChain - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Msg_SwapCrossChain_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.SwapCrossChain(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_Msg_FundFeeAbsModuleAccount_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_Msg_FundFeeAbsModuleAccount_0(ctx context.Context, marshaler runtime.Marshaler, client MsgClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq MsgFundFeeAbsModuleAccount - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Msg_FundFeeAbsModuleAccount_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.FundFeeAbsModuleAccount(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Msg_FundFeeAbsModuleAccount_0(ctx context.Context, marshaler runtime.Marshaler, server MsgServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq MsgFundFeeAbsModuleAccount - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Msg_FundFeeAbsModuleAccount_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.FundFeeAbsModuleAccount(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterMsgHandlerServer registers the http handlers for service Msg to "mux". -// UnaryRPC :call MsgServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterMsgHandlerFromEndpoint instead. -func RegisterMsgHandlerServer(ctx context.Context, mux *runtime.ServeMux, server MsgServer) error { - - mux.Handle("GET", pattern_Msg_SendQueryIbcDenomTWAP_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Msg_SendQueryIbcDenomTWAP_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Msg_SendQueryIbcDenomTWAP_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Msg_SwapCrossChain_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Msg_SwapCrossChain_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Msg_SwapCrossChain_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Msg_FundFeeAbsModuleAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Msg_FundFeeAbsModuleAccount_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Msg_FundFeeAbsModuleAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterMsgHandlerFromEndpoint is same as RegisterMsgHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterMsgHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterMsgHandler(ctx, mux, conn) -} - -// RegisterMsgHandler registers the http handlers for service Msg to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterMsgHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterMsgHandlerClient(ctx, mux, NewMsgClient(conn)) -} - -// RegisterMsgHandlerClient registers the http handlers for service Msg -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "MsgClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "MsgClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "MsgClient" to call the correct interceptors. -func RegisterMsgHandlerClient(ctx context.Context, mux *runtime.ServeMux, client MsgClient) error { - - mux.Handle("GET", pattern_Msg_SendQueryIbcDenomTWAP_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Msg_SendQueryIbcDenomTWAP_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Msg_SendQueryIbcDenomTWAP_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Msg_SwapCrossChain_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Msg_SwapCrossChain_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Msg_SwapCrossChain_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Msg_FundFeeAbsModuleAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Msg_FundFeeAbsModuleAccount_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Msg_FundFeeAbsModuleAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_Msg_SendQueryIbcDenomTWAP_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"feeabs", "ibc_denom_twap"}, "", runtime.AssumeColonVerbOpt(true))) - - pattern_Msg_SwapCrossChain_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"feeabs", "swap_crosschain"}, "", runtime.AssumeColonVerbOpt(true))) - - pattern_Msg_FundFeeAbsModuleAccount_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"feeabs", "fund_feeabs_moduleacc"}, "", runtime.AssumeColonVerbOpt(true))) -) - -var ( - forward_Msg_SendQueryIbcDenomTWAP_0 = runtime.ForwardResponseMessage - - forward_Msg_SwapCrossChain_0 = runtime.ForwardResponseMessage - - forward_Msg_FundFeeAbsModuleAccount_0 = runtime.ForwardResponseMessage -) From 6aa51dda933ed49fe726322b8d2e3eac41427de7 Mon Sep 17 00:00:00 2001 From: vuong177 Date: Tue, 22 Aug 2023 08:26:14 +0700 Subject: [PATCH 56/90] remove in tx.go --- x/feeabs/client/cli/tx.go | 43 +-------------------------------------- 1 file changed, 1 insertion(+), 42 deletions(-) diff --git a/x/feeabs/client/cli/tx.go b/x/feeabs/client/cli/tx.go index d811c205..6e522de8 100644 --- a/x/feeabs/client/cli/tx.go +++ b/x/feeabs/client/cli/tx.go @@ -22,52 +22,11 @@ func NewTxCmd() *cobra.Command { RunE: client.ValidateCmd, } - txCmd.AddCommand(NewQueryOsmosisTWAPCmd()) - txCmd.AddCommand(NewSwapOverChainCmd()) + txCmd.AddCommand(NewFundFeeAbsModuleAccount()) return txCmd } -func NewQueryOsmosisTWAPCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "query-osmosis-twap", - Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - if err != nil { - return err - } - - msg := types.NewMsgSendQueryIbcDenomTWAP(clientCtx.GetFromAddress()) - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - flags.AddTxFlagsToCmd(cmd) - - return cmd -} - -func NewSwapOverChainCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "swap [ibc-denom]", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - msg := types.NewMsgSwapCrossChain(clientCtx.GetFromAddress(), args[0]) - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - flags.AddTxFlagsToCmd(cmd) - - return cmd -} - func NewFundFeeAbsModuleAccount() *cobra.Command { cmd := &cobra.Command{ Use: "fund [amount]", From 5a29dc06bb5d7050133f59ed7b77011ac03f0b3b Mon Sep 17 00:00:00 2001 From: ducnt131 <62016666+anhductn2001@users.noreply.github.com> Date: Fri, 25 Aug 2023 12:55:37 +0700 Subject: [PATCH 57/90] make lint (#69) --- Makefile | 6 + go.mod | 133 +++++++ go.sum | 357 ++++++++++++++++++ .../osmosistypes/gamm/balancer/msgs.go | 6 +- .../osmosistypes/gamm/balancer/pool.go | 2 +- .../osmosistypes/gamm/types/msgs.go | 3 +- tests/interchaintest/packet_foward_test.go | 6 +- tests/interchaintest/setup.go | 3 +- tools/tools.go | 17 + 9 files changed, 523 insertions(+), 10 deletions(-) create mode 100644 tools/tools.go diff --git a/Makefile b/Makefile index 80676c85..7d70d5b5 100644 --- a/Makefile +++ b/Makefile @@ -96,6 +96,12 @@ build: docker-build-debug: @DOCKER_BUILDKIT=1 docker build -t feeapp:debug -f Dockerfile . +lint: + @find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -name '*.pb.go' -not -name '*.gw.go' | xargs go run mvdan.cc/gofumpt -w . + @find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -name '*.pb.go' -not -name '*.gw.go' | xargs go run github.com/client9/misspell/cmd/misspell -w + @find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -name '*.pb.go' -not -name '*.gw.go' | xargs go run golang.org/x/tools/cmd/goimports -w -local github.com/osmosis-labs/fee-abstraction +.PHONY: lint + ############################################################################### ### Interchain test ### ############################################################################### diff --git a/go.mod b/go.mod index 1cf43a9a..db15e11f 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.20 require ( cosmossdk.io/errors v1.0.0-beta.7 + github.com/client9/misspell v0.3.4 github.com/cometbft/cometbft v0.37.2 github.com/cometbft/cometbft-db v0.7.0 github.com/cosmos/cosmos-sdk v0.47.0 @@ -11,19 +12,151 @@ require ( github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79 github.com/cosmos/ibc-go/v7 v7.0.0 github.com/golang/protobuf v1.5.3 + github.com/golangci/golangci-lint v1.50.1 github.com/gorilla/mux v1.8.0 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/rakyll/statik v0.1.7 github.com/spf13/cast v1.5.0 github.com/spf13/cobra v1.6.1 github.com/stretchr/testify v1.8.2 + golang.org/x/tools v0.6.0 google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 google.golang.org/grpc v1.54.0 + mvdan.cc/gofumpt v0.4.0 ) require ( + 4d63.com/gochecknoglobals v0.1.0 // indirect + github.com/Abirdcfly/dupword v0.0.7 // indirect + github.com/Antonboom/errname v0.1.7 // indirect + github.com/Antonboom/nilnil v0.1.1 // indirect + github.com/BurntSushi/toml v1.2.1 // indirect + github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 // indirect + github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0 // indirect + github.com/Masterminds/semver v1.5.0 // indirect + github.com/OpenPeeDeeP/depguard v1.1.1 // indirect + github.com/alexkohler/prealloc v1.0.0 // indirect + github.com/alingse/asasalint v0.0.11 // indirect + github.com/ashanbrown/forbidigo v1.3.0 // indirect + github.com/ashanbrown/makezero v1.1.1 // indirect + github.com/bkielbasa/cyclop v1.2.0 // indirect + github.com/blizzy78/varnamelen v0.8.0 // indirect + github.com/bombsimon/wsl/v3 v3.3.0 // indirect + github.com/breml/bidichk v0.2.3 // indirect + github.com/breml/errchkjson v0.3.0 // indirect + github.com/butuzov/ireturn v0.1.1 // indirect + github.com/charithe/durationcheck v0.0.9 // indirect + github.com/chavacava/garif v0.0.0-20220630083739-93517212f375 // indirect + github.com/curioswitch/go-reassign v0.2.0 // indirect + github.com/daixiang0/gci v0.8.1 // indirect + github.com/denis-tingaikin/go-header v0.4.3 // indirect + github.com/esimonov/ifshort v1.0.4 // indirect + github.com/ettle/strcase v0.1.1 // indirect + github.com/fatih/color v1.13.0 // indirect + github.com/fatih/structtag v1.2.0 // indirect + github.com/firefart/nonamedreturns v1.0.4 // indirect + github.com/fzipp/gocyclo v0.6.0 // indirect + github.com/go-critic/go-critic v0.6.5 // indirect + github.com/go-toolsmith/astcast v1.0.0 // indirect + github.com/go-toolsmith/astcopy v1.0.2 // indirect + github.com/go-toolsmith/astequal v1.0.3 // indirect + github.com/go-toolsmith/astfmt v1.0.0 // indirect + github.com/go-toolsmith/astp v1.0.0 // indirect + github.com/go-toolsmith/strparse v1.0.0 // indirect + github.com/go-toolsmith/typep v1.0.2 // indirect + github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b // indirect + github.com/gobwas/glob v0.2.3 // indirect + github.com/gofrs/flock v0.8.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect + github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 // indirect + github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a // indirect + github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe // indirect + github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2 // indirect + github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 // indirect + github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca // indirect + github.com/golangci/misspell v0.3.5 // indirect + github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6 // indirect + github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 // indirect + github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8 // indirect + github.com/gostaticanalysis/analysisutil v0.7.1 // indirect + github.com/gostaticanalysis/comment v1.4.2 // indirect + github.com/gostaticanalysis/forcetypeassert v0.1.0 // indirect + github.com/gostaticanalysis/nilerr v0.1.1 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hexops/gotextdiff v1.0.3 // indirect + github.com/jgautheron/goconst v1.5.1 // indirect + github.com/jingyugao/rowserrcheck v1.1.1 // indirect + github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af // indirect + github.com/julz/importas v0.1.0 // indirect + github.com/kisielk/errcheck v1.6.2 // indirect + github.com/kisielk/gotool v1.0.0 // indirect + github.com/kkHAIKE/contextcheck v1.1.3 // indirect + github.com/kulti/thelper v0.6.3 // indirect + github.com/kunwardeep/paralleltest v1.0.6 // indirect + github.com/kyoh86/exportloopref v0.1.8 // indirect + github.com/ldez/gomoddirectives v0.2.3 // indirect + github.com/ldez/tagliatelle v0.3.1 // indirect + github.com/leonklingele/grouper v1.1.0 // indirect + github.com/lufeee/execinquery v1.2.1 // indirect + github.com/maratori/testableexamples v1.0.0 // indirect + github.com/maratori/testpackage v1.1.0 // indirect + github.com/matoous/godox v0.0.0-20210227103229-6504466cf951 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-runewidth v0.0.9 // indirect + github.com/mbilski/exhaustivestruct v1.2.0 // indirect + github.com/mgechev/revive v1.2.4 // indirect + github.com/moricho/tparallel v0.2.1 // indirect + github.com/nakabonne/nestif v0.3.1 // indirect + github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 // indirect + github.com/nishanths/exhaustive v0.8.3 // indirect + github.com/nishanths/predeclared v0.2.2 // indirect + github.com/olekukonko/tablewriter v0.0.5 // indirect + github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d // indirect + github.com/polyfloyd/go-errorlint v1.0.5 // indirect github.com/prometheus/client_golang v1.14.0 // indirect + github.com/quasilyte/go-ruleguard v0.3.18 // indirect + github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f // indirect + github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95 // indirect + github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 // indirect + github.com/ryancurrah/gomodguard v1.2.4 // indirect + github.com/ryanrolds/sqlclosecheck v0.3.0 // indirect + github.com/sanposhiho/wastedassign/v2 v2.0.6 // indirect + github.com/sashamelentyev/interfacebloat v1.1.0 // indirect + github.com/sashamelentyev/usestdlibvars v1.20.0 // indirect + github.com/securego/gosec/v2 v2.13.1 // indirect + github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c // indirect + github.com/sirupsen/logrus v1.9.0 // indirect + github.com/sivchari/containedctx v1.0.2 // indirect + github.com/sivchari/nosnakecase v1.7.0 // indirect + github.com/sivchari/tenv v1.7.0 // indirect + github.com/sonatard/noctx v0.0.1 // indirect + github.com/sourcegraph/go-diff v0.6.1 // indirect + github.com/ssgreg/nlreturn/v2 v2.2.1 // indirect + github.com/stbenjam/no-sprintf-host-port v0.1.1 // indirect + github.com/stretchr/objx v0.5.0 // indirect + github.com/tdakkota/asciicheck v0.1.1 // indirect + github.com/tetafro/godot v1.4.11 // indirect + github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144 // indirect + github.com/timonwong/loggercheck v0.9.3 // indirect + github.com/tomarrell/wrapcheck/v2 v2.7.0 // indirect + github.com/tommy-muehle/go-mnd/v2 v2.5.1 // indirect + github.com/ultraware/funlen v0.0.3 // indirect + github.com/ultraware/whitespace v0.0.5 // indirect + github.com/uudashr/gocognit v1.0.6 // indirect + github.com/yagipy/maintidx v1.0.0 // indirect + github.com/yeya24/promlinter v0.2.0 // indirect + gitlab.com/bosi/decorder v0.2.3 // indirect + go.uber.org/atomic v1.10.0 // indirect + go.uber.org/multierr v1.8.0 // indirect + go.uber.org/zap v1.23.0 // indirect + golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91 // indirect + golang.org/x/mod v0.8.0 // indirect + golang.org/x/sync v0.1.0 // indirect + honnef.co/go/tools v0.3.3 // indirect + mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed // indirect + mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b // indirect + mvdan.cc/unparam v0.0.0-20220706161116-678bad134442 // indirect ) require ( diff --git a/go.sum b/go.sum index 4df3ee15..eef2739b 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +4d63.com/gochecknoglobals v0.1.0 h1:zeZSRqj5yCg28tCkIV/z/lWbwvNm5qnKVS15PI8nhD0= +4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -205,17 +207,33 @@ filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= +github.com/Abirdcfly/dupword v0.0.7 h1:z14n0yytA3wNO2gpCD/jVtp/acEXPGmYu0esewpBt6Q= +github.com/Abirdcfly/dupword v0.0.7/go.mod h1:K/4M1kj+Zh39d2aotRwypvasonOyAMH1c/IZJzE0dmk= +github.com/Antonboom/errname v0.1.7 h1:mBBDKvEYwPl4WFFNwec1CZO096G6vzK9vvDQzAwkako= +github.com/Antonboom/errname v0.1.7/go.mod h1:g0ONh16msHIPgJSGsecu1G/dcF2hlYR/0SddnIAGavU= +github.com/Antonboom/nilnil v0.1.1 h1:PHhrh5ANKFWRBh7TdYmyyq2gyT2lotnvFvvFbylF81Q= +github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= +github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rWPdisA5ynNEsoARbiCBOyGcJM4/OzsM= +github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= +github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0 h1:+r1rSv4gvYn0wmRjC8X7IAzX8QezqtFV9m0MUHFJgts= +github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0/go.mod h1:b3g59n2Y+T5xmcxJL+UEG2f8cQploZm1mR/v6BW0mU0= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/OpenPeeDeeP/depguard v1.1.1 h1:TSUznLjvp/4IUP+OQ0t/4jF4QUyxIcVX8YnghZdunyA= +github.com/OpenPeeDeeP/depguard v1.1.1/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= @@ -228,6 +246,10 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/alexkohler/prealloc v1.0.0 h1:Hbq0/3fJPQhNkN0dR95AVrr6R7tou91y0uHG5pOcUuw= +github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= +github.com/alingse/asasalint v0.0.11 h1:SFwnQXJ49Kx/1GghOFz1XGqHYKp21Kq1nHad/0WQRnw= +github.com/alingse/asasalint v0.0.11/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= @@ -238,12 +260,17 @@ github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJ github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +github.com/ashanbrown/forbidigo v1.3.0 h1:VkYIwb/xxdireGAdJNZoo24O4lmnEWkactplBlWTShc= +github.com/ashanbrown/forbidigo v1.3.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= +github.com/ashanbrown/makezero v1.1.1 h1:iCQ87C0V0vSyO+M9E/FZYbu65auqH0lnsOkf5FcB28s= +github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/aws/aws-sdk-go v1.44.203 h1:pcsP805b9acL3wUqa4JR2vg1k2wnItkDYNvfmcy6F+U= github.com/aws/aws-sdk-go v1.44.203/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= +github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -253,10 +280,22 @@ github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s= github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bkielbasa/cyclop v1.2.0 h1:7Jmnh0yL2DjKfw28p86YTd/B4lRGcNuu12sKE35sM7A= +github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= +github.com/blizzy78/varnamelen v0.8.0 h1:oqSblyuQvFsW1hbBHh1zfwrKe3kcSj0rnXkKzsQ089M= +github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= +github.com/bombsimon/wsl/v3 v3.3.0 h1:Mka/+kRLoQJq7g2rggtgQsjuI/K5Efd87WX96EWFxjM= +github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= +github.com/breml/bidichk v0.2.3 h1:qe6ggxpTfA8E75hdjWPZ581sY3a2lnl0IRxLQFelECI= +github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A= +github.com/breml/errchkjson v0.3.0 h1:YdDqhfqMT+I1vIxPSas44P+9Z9HzJwCeAzjB8PxP1xw= +github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/butuzov/ireturn v0.1.1 h1:QvrO2QF2+/Cx1WA/vETCIYBKtRjc30vesdoPUNo1EbY= +github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= github.com/bytedance/sonic v1.8.0 h1:ea0Xadu+sHlu7x5O3gKhRpQ1IKiMrSiHttPF0ybECuA= github.com/bytedance/sonic v1.8.0/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= @@ -270,8 +309,13 @@ github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/charithe/durationcheck v0.0.9 h1:mPP4ucLrf/rKZiIG/a9IPXHGlh8p4CzgpyTy6EEutYk= +github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= +github.com/chavacava/garif v0.0.0-20220630083739-93517212f375 h1:E7LT642ysztPWE0dfz43cWOvMiF42DyTRC+eZIaO4yI= +github.com/chavacava/garif v0.0.0-20220630083739-93517212f375/go.mod h1:4m1Rv7xfuwWPNKXlThldNuJvutYM6J95wNuuVmn55To= github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= @@ -288,6 +332,7 @@ github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38 github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= +github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -352,8 +397,13 @@ github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJF github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cristalhq/acmd v0.8.1/go.mod h1:LG5oa43pE/BbxtfMoImHCQN++0Su7dzipdgBjMCBVDQ= github.com/cucumber/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= +github.com/curioswitch/go-reassign v0.2.0 h1:G9UZyOcpk/d7Gd6mqYgd8XYWFMw/znxwGDUstnC9DIo= +github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc= +github.com/daixiang0/gci v0.8.1 h1:T4xpSC+hmsi4CSyuYfIJdMZAr9o7xZmHpQVygMghGZ4= +github.com/daixiang0/gci v0.8.1/go.mod h1:EpVfrztufwVgQRXjnX4zuNinEpLj5OmMjtu/+MB0V0c= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -362,6 +412,8 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= +github.com/denis-tingaikin/go-header v0.4.3 h1:tEaZKAlqql6SKCY++utLmkPLd6K8IBM20Ha7UVm+mtU= +github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= @@ -395,13 +447,23 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/esimonov/ifshort v1.0.4 h1:6SID4yGWfRae/M7hkVDVVyppy8q/v9OuxNdmjLQStBA= +github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= +github.com/ettle/strcase v0.1.1 h1:htFueZyVeE1XNnMEfbqp5r67qAN/4r6ya1ysq8Q+Zcw= +github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= +github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/firefart/nonamedreturns v1.0.4 h1:abzI1p7mAEPYuR4A+VLKn4eNDOycjYo2phmY9sfv40Y= +github.com/firefart/nonamedreturns v1.0.4/go.mod h1:TDhe/tjI1BXo48CmYbUduTV7BdIga8MAO/xbKdcVsGI= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= @@ -410,11 +472,15 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo= +github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.9.0 h1:OjyFBKICoexlu99ctXNR2gg+c5pKrKMuyjgARg9qeY8= github.com/gin-gonic/gin v1.9.0/go.mod h1:W1Me9+hsUSyj3CePGrd1/QrKJMSJ1Tu/0hFEH89961k= +github.com/go-critic/go-critic v0.6.5 h1:fDaR/5GWURljXwF8Eh31T2GZNz9X4jeboS912mWF8Uo= +github.com/go-critic/go-critic v0.6.5/go.mod h1:ezfP/Lh7MA6dBNn4c6ab5ALv3sKnZVLx37tr00uuaOY= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -423,6 +489,7 @@ github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= @@ -439,6 +506,28 @@ github.com/go-playground/validator/v10 v10.11.2 h1:q3SHpufmypg+erIExEKUmsgmhDTyh github.com/go-playground/validator/v10 v10.11.2/go.mod h1:NieE624vt4SCTJtD87arVLvdmjPAeV8BQlHtMnw9D7s= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-toolsmith/astcast v1.0.0 h1:JojxlmI6STnFVG9yOImLeGREv8W2ocNUM+iOhR6jE7g= +github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= +github.com/go-toolsmith/astcopy v1.0.2 h1:YnWf5Rnh1hUudj11kei53kI57quN/VH6Hp1n+erozn0= +github.com/go-toolsmith/astcopy v1.0.2/go.mod h1:4TcEdbElGc9twQEYpVo/aieIXfHhiuLh4aLAck6dO7Y= +github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astequal v1.0.2/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= +github.com/go-toolsmith/astequal v1.0.3 h1:+LVdyRatFS+XO78SGV4I3TCEA0AC7fKEGma+fH+674o= +github.com/go-toolsmith/astequal v1.0.3/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= +github.com/go-toolsmith/astfmt v1.0.0 h1:A0vDDXt+vsvLEdbMFJAUBI/uTbRw1ffOPnxsILnFL6k= +github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= +github.com/go-toolsmith/astp v1.0.0 h1:alXE75TXgcmupDsMK1fRAy0YUzLzqPVvBKoyWV+KPXg= +github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= +github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5 h1:eD9POs68PHkwrx7hAB78z1cb6PfGq/jyWn3wJywsH1o= +github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5/go.mod h1:3NAwwmD4uY/yggRxoEjk/S00MIV3A+H7rrE3i87eYxM= +github.com/go-toolsmith/strparse v1.0.0 h1:Vcw78DnpCAKlM20kSbAyO4mPfJn/lyYA4BJUDxe2Jb4= +github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= +github.com/go-toolsmith/typep v1.0.2 h1:8xdsa1+FSIH/RhEkgnD1j2CJOy5mNllW1Q9tRiYwvlk= +github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b h1:khEcpUM4yFcxg4/FHQWkvVRmgijNXRfzkIDHh23ggEo= +github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= +github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= @@ -449,6 +538,8 @@ github.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA= github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= +github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= +github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= @@ -504,6 +595,26 @@ github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8l github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5DB4XJkc6BU31uODLD1o1gKvZmD0= +github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= +github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM= +github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= +github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe h1:6RGUuS7EGotKx6J5HIP8ZtyMdiDscjMLfRBSPuzVVeo= +github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ= +github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2 h1:amWTbTGqOZ71ruzrdA+Nx5WA3tV1N0goTspwmKCQvBY= +github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2/go.mod h1:9wOXstvyDRshQ9LggQuzBCGysxs3b6Uo/1MvYCR2NMs= +github.com/golangci/golangci-lint v1.50.1 h1:C829clMcZXEORakZlwpk7M4iDw2XiwxxKaG504SZ9zY= +github.com/golangci/golangci-lint v1.50.1/go.mod h1:AQjHBopYS//oB8xs0y0M/dtxdKHkdhl0RvmjUct0/4w= +github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA= +github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= +github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA= +github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= +github.com/golangci/misspell v0.3.5 h1:pLzmVdl3VxTOncgzHcvLOKirdvcx/TydsClUQXTehjo= +github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6 h1:DIPQnGy2Gv2FSA4B/hh8Q7xx3B7AIDk3DAMeHclH1vQ= +github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6/go.mod h1:0AKcRCkMoKvUvlf89F6O7H2LYdhr1zBh736mBItOdRs= +github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys= +github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= @@ -574,6 +685,8 @@ github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57Q github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8 h1:PVRE9d4AQKmbelZ7emNig1+NT27DUmKZn5qXxfio54U= +github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= @@ -585,6 +698,21 @@ github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= +github.com/gostaticanalysis/analysisutil v0.7.1 h1:ZMCjoue3DtDWQ5WyU16YbjbQEQ3VuzwxALrpYd+HeKk= +github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= +github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= +github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= +github.com/gostaticanalysis/comment v1.4.2 h1:hlnx5+S2fY9Zo9ePo4AhgYsYHbM2+eAv8m/s1JiCd6Q= +github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= +github.com/gostaticanalysis/forcetypeassert v0.1.0 h1:6eUflI3DiGusXGK6X7cCcIgVCpZ2CiZ1Q7jl6ZxNV70= +github.com/gostaticanalysis/forcetypeassert v0.1.0/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= +github.com/gostaticanalysis/nilerr v0.1.1 h1:ThE+hJP0fEp4zWLkWHWcRyI2Od0p7DlgYG3Uqrmrcpk= +github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= +github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= +github.com/gostaticanalysis/testutil v0.4.0 h1:nhdCmubdmDF6VEatUNjgUZBJKWRqugoISdUv3PPQgHY= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= @@ -603,6 +731,8 @@ github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIv github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= @@ -614,6 +744,8 @@ github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJ github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= @@ -624,6 +756,7 @@ github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= @@ -639,6 +772,8 @@ github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2p github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c= github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= @@ -656,7 +791,13 @@ github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLf github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/jgautheron/goconst v1.5.1 h1:HxVbL1MhydKs8R8n/HE5NPvzfaYmQJA3o879lE4+WcM= +github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b h1:izTof8BKh/nE1wrKOrloNA5q4odOarjf+Xpe+4qow98= +github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs= +github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= +github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af h1:KA9BjwUk7KlCh6S9EAGWBt1oExIUv9WyNCiRz5amv48= +github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -664,6 +805,7 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGw github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= +github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= @@ -671,6 +813,7 @@ github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= @@ -678,10 +821,17 @@ github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/X github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/julz/importas v0.1.0 h1:F78HnrsjY3cR7j0etXy5+TU1Zuy7Xt08X/1aJnH5xXY= +github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/errcheck v1.6.2 h1:uGQ9xI8/pgc9iOoCe7kWQgRE6SBTrCGmTSf0LrEtY7c= +github.com/kisielk/errcheck v1.6.2/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= +github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kkHAIKE/contextcheck v1.1.3 h1:l4pNvrb8JSwRd51ojtcOxOeHJzHek+MtOyXbaR0uvmw= +github.com/kkHAIKE/contextcheck v1.1.3/go.mod h1:PG/cwd6c0705/LM0KTr1acO2gORUxkSVWyLJOFW5qoo= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= @@ -702,30 +852,66 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kulti/thelper v0.6.3 h1:ElhKf+AlItIu+xGnI990no4cE2+XaSu1ULymV2Yulxs= +github.com/kulti/thelper v0.6.3/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= +github.com/kunwardeep/paralleltest v1.0.6 h1:FCKYMF1OF2+RveWlABsdnmsvJrei5aoyZoaGS+Ugg8g= +github.com/kunwardeep/paralleltest v1.0.6/go.mod h1:Y0Y0XISdZM5IKm3TREQMZ6iteqn1YuwCsJO/0kL9Zes= +github.com/kyoh86/exportloopref v0.1.8 h1:5Ry/at+eFdkX9Vsdw3qU4YkvGtzuVfzT4X7S77LoN/M= +github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= +github.com/ldez/gomoddirectives v0.2.3 h1:y7MBaisZVDYmKvt9/l1mjNCiSA1BVn34U0ObUcJwlhA= +github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= +github.com/ldez/tagliatelle v0.3.1 h1:3BqVVlReVUZwafJUwQ+oxbx2BEX2vUG4Yu/NOfMiKiM= +github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/leonklingele/grouper v1.1.0 h1:tC2y/ygPbMFSBOs3DcyaEMKnnwH7eYKzohOtRrf0SAg= +github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/lufeee/execinquery v1.2.1 h1:hf0Ems4SHcUGBxpGN7Jz78z1ppVkP/837ZlETPCEtOM= +github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= +github.com/maratori/testableexamples v1.0.0 h1:dU5alXRrD8WKSjOUnmJZuzdxWOEQ57+7s93SLMxb2vI= +github.com/maratori/testableexamples v1.0.0/go.mod h1:4rhjL1n20TUTT4vdh3RDqSizKLyXp7K2u6HgraZCGzE= +github.com/maratori/testpackage v1.1.0 h1:GJY4wlzQhuBusMF1oahQCBtUV/AQ/k69IZ68vxaac2Q= +github.com/maratori/testpackage v1.1.0/go.mod h1:PeAhzU8qkCwdGEMTEupsHJNlQu2gZopMC6RjbhmHeDc= +github.com/matoous/godox v0.0.0-20210227103229-6504466cf951 h1:pWxk9e//NbPwfxat7RXkts09K+dEBJWakUWwICVqYbA= +github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= +github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= +github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/mbilski/exhaustivestruct v1.2.0 h1:wCBmUnSYufAHO6J4AVWY6ff+oxWxsVFrwgOdMUQePUo= +github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= +github.com/mgechev/revive v1.2.4 h1:+2Hd/S8oO2H0Ikq2+egtNwQsVhAeELHjxjIUFX5ajLI= +github.com/mgechev/revive v1.2.4/go.mod h1:iAWlQishqCuj4yhV24FTnKSXGpbAA+0SckXB8GQMX/Q= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 h1:QRUSJEgZn2Snx0EmT/QLXibWjSUDjKWvXIT19NBVp94= @@ -752,12 +938,16 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/moricho/tparallel v0.2.1 h1:95FytivzT6rYzdJLdtfn6m1bfFJylOJK41+lgv/EHf4= +github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= +github.com/nakabonne/nestif v0.3.1 h1:wm28nZjhQY5HyYPx+weN3Q65k6ilSBxDb8v5S81B81U= +github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= @@ -765,17 +955,26 @@ github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzE github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 h1:4kuARK6Y6FxaNu/BnU2OAaLF86eTVhP2hjTB6iMvItA= +github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nishanths/exhaustive v0.8.3 h1:pw5O09vwg8ZaditDp/nQRqVnrMczSJDxRDJMowvhsrM= +github.com/nishanths/exhaustive v0.8.3/go.mod h1:qj+zJJUgJ76tR92+25+03oYUhzF4R7/2Wk7fGTfCHmg= +github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk= +github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= +github.com/onsi/ginkgo/v2 v2.1.4 h1:GNapqRSid3zijZ9H77KrgVG4/8KqiyRsxcSxe+7ApXY= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= @@ -793,6 +992,12 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= +github.com/otiai10/copy v1.2.0 h1:HvG945u96iNadPoG2/Ja2+AUJeW5YuFQMixq9yirC+k= +github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= +github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= +github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= +github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= +github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= @@ -805,8 +1010,11 @@ github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9 github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d h1:htwtWgtQo8YS6JFWWi2DNgY0RwSGJ1ruMoxY6CUUclk= github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d h1:CdDQnGF8Nq9ocOS/xlSptM1N3BbrA6/kmaep5ggwaIA= +github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -816,6 +1024,8 @@ github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6J github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/polyfloyd/go-errorlint v1.0.5 h1:AHB5JRCjlmelh9RrLxT9sgzpalIwwq4hqE8EkwIwKdY= +github.com/polyfloyd/go-errorlint v1.0.5/go.mod h1:APVvOesVSAnne5SClsPxPdfvZTVDojXh1/G3qb5wjGI= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= @@ -823,6 +1033,8 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -839,6 +1051,8 @@ github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt2 github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.40.0 h1:Afz7EVRqGg2Mqqf4JuF9vdvp1pi220m55Pi9T2JnO4Q= github.com/prometheus/common v0.40.0/go.mod h1:L65ZJPSmfn/UBWLQIHV7dBrKFidB/wPlF1y5TlSt9OE= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -847,8 +1061,23 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= +github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= +github.com/quasilyte/go-ruleguard v0.3.18 h1:sd+abO1PEI9fkYennwzHn9kl3nqP6M5vE7FiOzZ+5CE= +github.com/quasilyte/go-ruleguard v0.3.18/go.mod h1:lOIzcYlgxrQ2sGJ735EHXmf/e9MJ516j16K/Ifcttvs= +github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/dsl v0.3.21/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= +github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f h1:6Gtn2i04RD0gVyYf2/IUMTIs+qYleBt4zxDqkLTcu4U= +github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= +github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95 h1:L8QM9bvf68pVdQ3bCFZMDmnt9yqcMBro1pC7F+IPYMY= +github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= +github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 h1:M8mH9eK4OUR4lu7Gd+PU1fV2/qnDNfzT635KRSObncs= +github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -867,21 +1096,48 @@ github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryancurrah/gomodguard v1.2.4 h1:CpMSDKan0LtNGGhPrvupAoLeObRFjND8/tU1rEOtBp4= +github.com/ryancurrah/gomodguard v1.2.4/go.mod h1:+Kem4VjWwvFpUJRJSwa16s1tBJe+vbv02+naTow2f6M= +github.com/ryanrolds/sqlclosecheck v0.3.0 h1:AZx+Bixh8zdUBxUA1NxbxVAS78vTPq4rCb8OUZI9xFw= +github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/sanposhiho/wastedassign/v2 v2.0.6 h1:+6/hQIHKNJAUixEj6EmOngGIisyeI+T3335lYTyxRoA= +github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= +github.com/sashamelentyev/interfacebloat v1.1.0 h1:xdRdJp0irL086OyW1H/RTZTr1h/tMEOsumirXcOJqAw= +github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ= +github.com/sashamelentyev/usestdlibvars v1.20.0 h1:K6CXjqqtSYSsuyRDDC7Sjn6vTMLiSJa4ZmDkiokoqtw= +github.com/sashamelentyev/usestdlibvars v1.20.0/go.mod h1:0GaP+ecfZMXShS0A94CJn6aEuPRILv8h/VuWI9n1ygg= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/securego/gosec/v2 v2.13.1 h1:7mU32qn2dyC81MH9L2kefnQyRMUarfDER3iQyMHcjYM= +github.com/securego/gosec/v2 v2.13.1/go.mod h1:EO1sImBMBWFjOTFzMWfTRrZW6M15gm60ljzrmy/wtHo= +github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqPQ0YvHYKwcMEMVWIzWC5iNQQfBTU= +github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= +github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= +github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sivchari/containedctx v1.0.2 h1:0hLQKpgC53OVF1VT7CeoFHk9YKstur1XOgfYIc1yrHI= +github.com/sivchari/containedctx v1.0.2/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= +github.com/sivchari/nosnakecase v1.7.0 h1:7QkpWIRMe8x25gckkFd2A5Pi6Ymo0qgr4JrhGt95do8= +github.com/sivchari/nosnakecase v1.7.0/go.mod h1:CwDzrzPea40/GB6uynrNLiorAlgFRvRbFSgJx2Gs+QY= +github.com/sivchari/tenv v1.7.0 h1:d4laZMBK6jpe5PWepxlV9S+LC0yXqvYHiq8E6ceoVVE= +github.com/sivchari/tenv v1.7.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/sonatard/noctx v0.0.1 h1:VC1Qhl6Oxx9vvWo3UDgrGXYCeKCe3Wbw7qAWL6FrmTY= +github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/sourcegraph/go-diff v0.6.1 h1:hmA1LzxW0n1c3Q4YbrFgg4P99GSnebYa3x8gr0HZqLQ= +github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= @@ -905,6 +1161,10 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU= github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= +github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0= +github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= +github.com/stbenjam/no-sprintf-host-port v0.1.1 h1:tYugd/yrm1O0dV+ThCbaKZh195Dfm07ysF0U6JQXczc= +github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= @@ -913,6 +1173,7 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -928,13 +1189,29 @@ github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8 github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= +github.com/tdakkota/asciicheck v0.1.1 h1:PKzG7JUTUmVspQTDqtkX9eSiLGossXTybutHwTXuO0A= +github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= +github.com/tenntenn/modver v1.0.1 h1:2klLppGhDgzJrScMpkj9Ujy3rXPUspSjAcev9tSEBgA= +github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= +github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3 h1:f+jULpRQGxTSkNYKJ51yaw6ChIqO+Je8UqsTKN/cDag= +github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= +github.com/tetafro/godot v1.4.11 h1:BVoBIqAf/2QdbFmSwAWnaIqDivZdOV0ZRwEm6jivLKw= +github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= +github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144 h1:kl4KhGNsJIbDHS9/4U9yQo1UcPQM0kOMJHn29EoH/Ro= +github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= +github.com/timonwong/loggercheck v0.9.3 h1:ecACo9fNiHxX4/Bc02rW2+kaJIAMAes7qJ7JKxt0EZI= +github.com/timonwong/loggercheck v0.9.3/go.mod h1:wUqnk9yAOIKtGA39l1KLE9Iz0QiTocu/YZoOf+OzFdw= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tomarrell/wrapcheck/v2 v2.7.0 h1:J/F8DbSKJC83bAvC6FoZaRjZiZ/iKoueSdrEkmGeacA= +github.com/tomarrell/wrapcheck/v2 v2.7.0/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= +github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw= +github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= @@ -944,20 +1221,33 @@ github.com/ugorji/go/codec v1.2.9/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZg github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ultraware/funlen v0.0.3 h1:5ylVWm8wsNwH5aWo9438pwvsK0QiqVuUrt9bn7S/iLA= +github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= +github.com/ultraware/whitespace v0.0.5 h1:hh+/cpIcopyMYbZNVov9iSxvJU3OYQg78Sfaqzi/CzI= +github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/uudashr/gocognit v1.0.6 h1:2Cgi6MweCsdB6kpcVQp7EW4U23iBFQWfTXiWlyp842Y= +github.com/uudashr/gocognit v1.0.6/go.mod h1:nAIUuVBnYU7pcninia3BHOvQkpQCeO76Uscky5BOwcY= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yagipy/maintidx v1.0.0 h1:h5NvIsCz+nRDapQ0exNv4aJ0yXSI0420omVANTv3GJM= +github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= +github.com/yeya24/promlinter v0.2.0 h1:xFKDQ82orCU5jQujdaD8stOHiv8UN68BSdn2a8u8Y3o= +github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo= github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= github.com/zondax/ledger-go v0.14.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c= github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= +gitlab.com/bosi/decorder v0.2.3 h1:gX4/RgK16ijY8V+BRQHAySfQAb354T7/xQpDB2n10P0= +gitlab.com/bosi/decorder v0.2.3/go.mod h1:9K1RB5+VPNQYtXtTDAzd2OEftsZb1oV0IrJrzChSdGE= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= @@ -977,11 +1267,19 @@ go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqe go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= +go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= golang.org/x/arch v0.0.0-20210923205945-b76863e36670 h1:18EFjUmQOcUvxNYSkA6jO9VAiXCnxFY6NyDX0bHDmkU= golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1014,6 +1312,9 @@ golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMk golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 h1:LGJsf5LRplCck6jUCH3dBL2dmycNruWNF5xugkSlfXw= golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91 h1:Ic/qN6TEifvObMGQy72k0n1LlJr7DjWWEi+MOsDOiSk= +golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1039,8 +1340,11 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1088,7 +1392,9 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1146,6 +1452,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1177,6 +1485,7 @@ golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1200,6 +1509,7 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1210,6 +1520,7 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1219,9 +1530,12 @@ golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1235,6 +1549,8 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1272,14 +1588,19 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -1288,10 +1609,13 @@ golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1301,6 +1625,7 @@ golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1310,30 +1635,51 @@ golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= +golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.9-0.20211228192929-ee1ca4ffc4da/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= +golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1578,6 +1924,7 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= @@ -1616,6 +1963,16 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.3.3 h1:oDx7VAwstgpYpb3wv0oxiZlxY+foCpRAwY7Vk6XpAgA= +honnef.co/go/tools v0.3.3/go.mod h1:jzwdWgg7Jdq75wlfblQxO4neNaFFSvgc1tD5Wv8U0Yw= +mvdan.cc/gofumpt v0.4.0 h1:JVf4NN1mIpHogBj7ABpgOyZc65/UUOkKQFkoURsz4MM= +mvdan.cc/gofumpt v0.4.0/go.mod h1:PljLOHDeZqgS8opHRKLzp2It2VBuSdteAgqUfzMTxlQ= +mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= +mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= +mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo= +mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= +mvdan.cc/unparam v0.0.0-20220706161116-678bad134442 h1:seuXWbRB1qPrS3NQnHmFKLJLtskWyueeIzmLXghMGgk= +mvdan.cc/unparam v0.0.0-20220706161116-678bad134442/go.mod h1:F/Cxw/6mVrNKqrR2YjFf5CaW0Bw4RL8RfbEf4GRggJk= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= diff --git a/tests/interchaintest/osmosistypes/gamm/balancer/msgs.go b/tests/interchaintest/osmosistypes/gamm/balancer/msgs.go index dafc79a5..a616616f 100644 --- a/tests/interchaintest/osmosistypes/gamm/balancer/msgs.go +++ b/tests/interchaintest/osmosistypes/gamm/balancer/msgs.go @@ -10,9 +10,7 @@ const ( TypeMsgMigrateShares = "migrate_shares" ) -var ( - _ sdk.Msg = &MsgCreateBalancerPool{} -) +var _ sdk.Msg = &MsgCreateBalancerPool{} func (msg MsgCreateBalancerPool) Route() string { return types.RouterKey } func (msg MsgCreateBalancerPool) Type() string { return TypeMsgCreateBalancerPool } @@ -46,4 +44,4 @@ func (msg MsgMigrateSharesToFullRangeConcentratedPosition) GetSigners() []sdk.Ac panic(err) } return []sdk.AccAddress{sender} -} \ No newline at end of file +} diff --git a/tests/interchaintest/osmosistypes/gamm/balancer/pool.go b/tests/interchaintest/osmosistypes/gamm/balancer/pool.go index 09026a6c..9f8c5898 100644 --- a/tests/interchaintest/osmosistypes/gamm/balancer/pool.go +++ b/tests/interchaintest/osmosistypes/gamm/balancer/pool.go @@ -42,4 +42,4 @@ func (p Pool) MarshalJSON() ([]byte, error) { TotalShares: p.TotalShares, PoolAssets: p.PoolAssets, }) -} \ No newline at end of file +} diff --git a/tests/interchaintest/osmosistypes/gamm/types/msgs.go b/tests/interchaintest/osmosistypes/gamm/types/msgs.go index c394d2f3..8b03021c 100644 --- a/tests/interchaintest/osmosistypes/gamm/types/msgs.go +++ b/tests/interchaintest/osmosistypes/gamm/types/msgs.go @@ -107,6 +107,7 @@ func (msg MsgJoinPool) ValidateBasic() error { return nil } func (msg MsgJoinPool) GetSignBytes() []byte { return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg)) } + func (msg MsgJoinPool) GetSigners() []sdk.AccAddress { sender, err := sdk.AccAddressFromBech32(msg.Sender) if err != nil { @@ -203,4 +204,4 @@ func (msg MsgExitSwapShareAmountIn) GetSigners() []sdk.AccAddress { panic(err) } return []sdk.AccAddress{sender} -} \ No newline at end of file +} diff --git a/tests/interchaintest/packet_foward_test.go b/tests/interchaintest/packet_foward_test.go index acbe31b7..87601459 100644 --- a/tests/interchaintest/packet_foward_test.go +++ b/tests/interchaintest/packet_foward_test.go @@ -191,7 +191,7 @@ func TestPacketForwardMiddleware(t *testing.T) { err = testutil.WaitForBlocks(ctx, 5, feeabs, gaia) require.NoError(t, err) - //Create channel + // Create channel err = r.CreateChannel(ctx, eRep, pathFeeabsGaia, ibc.CreateChannelOptions{ SourcePortName: "transfer", DestPortName: "transfer", @@ -222,7 +222,7 @@ func TestPacketForwardMiddleware(t *testing.T) { channGaiaFeeabs := channsGaia[0] require.NotEmpty(t, channGaiaFeeabs.ChannelID) - //rly osmo-gaia + // rly osmo-gaia // Generate new path err = r.GeneratePath(ctx, eRep, osmosis.Config().ChainID, gaia.Config().ChainID, pathOsmosisGaia) require.NoError(t, err) @@ -293,7 +293,7 @@ func TestPacketForwardMiddleware(t *testing.T) { func() { err := r.StopRelayer(ctx, eRep) if err != nil { - t.Logf("an error occured while stopping the relayer: %s", err) + t.Logf("an error occurred while stopping the relayer: %s", err) } }, ) diff --git a/tests/interchaintest/setup.go b/tests/interchaintest/setup.go index 6206d84a..08516c2d 100644 --- a/tests/interchaintest/setup.go +++ b/tests/interchaintest/setup.go @@ -9,10 +9,11 @@ import ( "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/icza/dyno" - feeabstype "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos/wasm" + feeabstype "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" + // "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos/wasm" "github.com/strangelove-ventures/interchaintest/v7/ibc" ) diff --git a/tools/tools.go b/tools/tools.go new file mode 100644 index 00000000..157bbe7e --- /dev/null +++ b/tools/tools.go @@ -0,0 +1,17 @@ +//go:build tools +// +build tools + +package tools + +// Manage tool dependencies via go.mod. +// +// https://github.com/golang/go/wiki/Modules#how-can-i-track-tool-dependencies-for-a-module +// https://github.com/golang/go/issues/25922 + +//nolint:all +import ( + _ "github.com/client9/misspell/cmd/misspell" + _ "github.com/golangci/golangci-lint/cmd/golangci-lint" + _ "golang.org/x/tools/cmd/goimports" + _ "mvdan.cc/gofumpt" +) From 6030fc9d4591afe2c0d429d846ecc50e71a318d3 Mon Sep 17 00:00:00 2001 From: GnaD | Notional <89174180+GNaD13@users.noreply.github.com> Date: Fri, 25 Aug 2023 16:10:24 +0700 Subject: [PATCH 58/90] Update with new Osmosis XCSv2 (#77) * add back msg * add new contract * scripts test * scripts test * add new contract to local test * nit * ict * nit * fix ict ibc --------- Co-authored-by: vuong <56973102+vuong177@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 +- proto/feeabstraction/absfee/v1beta1/tx.proto | 15 + sample_pool.json | 2 +- scripts/README.md | 12 +- scripts/bytecode/crosschain_registry.wasm | Bin 377257 -> 408964 bytes scripts/bytecode/crosschain_swaps.wasm | Bin 437302 -> 442223 bytes scripts/bytecode/fee_abstraction.wasm | Bin 249874 -> 0 bytes scripts/bytecode/ibc_stargate-aarch64.wasm | Bin 221094 -> 0 bytes scripts/bytecode/ibc_stargate.wasm | Bin 229242 -> 0 bytes scripts/bytecode/ibc_stargate2.wasm | Bin 222846 -> 0 bytes scripts/bytecode/swaprouter.wasm | Bin 244913 -> 244908 bytes scripts/ibc_swap/setup.sh | 28 +- scripts/node_start/runnode_custom.sh | 2 +- scripts/proposal.json | 2 +- .../relayer_hermes/config_feeabs_gaia.toml | 4 +- .../relayer_hermes/config_feeabs_osmosis.toml | 4 +- .../relayer_hermes/config_osmosis_gaia.toml | 4 +- .../bytecode/crosschain_registry.wasm | Bin 377257 -> 433206 bytes .../bytecode/crosschain_swaps.wasm | Bin 437733 -> 446429 bytes tests/interchaintest/bytecode/swaprouter.wasm | Bin 244913 -> 244908 bytes tests/interchaintest/go.mod | 4 +- tests/interchaintest/go.sum | 48 +- tests/interchaintest/ibc_transfer_test.go | 11 +- tests/interchaintest/packet_foward_test.go | 40 +- tests/interchaintest/setup.go | 12 + x/feeabs/client/cli/tx.go | 42 + x/feeabs/keeper/msgserver.go | 34 + x/feeabs/types/codec.go | 4 + x/feeabs/types/msg.go | 75 ++ x/feeabs/types/tx.pb.go | 773 +++++++++++++++++- 31 files changed, 1006 insertions(+), 116 deletions(-) delete mode 100755 scripts/bytecode/fee_abstraction.wasm delete mode 100644 scripts/bytecode/ibc_stargate-aarch64.wasm delete mode 100755 scripts/bytecode/ibc_stargate.wasm delete mode 100644 scripts/bytecode/ibc_stargate2.wasm diff --git a/go.mod b/go.mod index db15e11f..ebaba149 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/cometbft/cometbft-db v0.7.0 github.com/cosmos/cosmos-sdk v0.47.0 github.com/cosmos/gogoproto v1.4.6 - github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79 + github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0 github.com/cosmos/ibc-go/v7 v7.0.0 github.com/golang/protobuf v1.5.3 github.com/golangci/golangci-lint v1.50.1 diff --git a/go.sum b/go.sum index eef2739b..d43f2b1c 100644 --- a/go.sum +++ b/go.sum @@ -378,8 +378,8 @@ github.com/cosmos/gogoproto v1.4.6 h1:Ee7z15dWJaGlgM2rWrK8N2IX7PQcuccu8oG68jp5RL github.com/cosmos/gogoproto v1.4.6/go.mod h1:VS/ASYmPgv6zkPKLjR9EB91lwbLHOzaGCirmKKhncfI= github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= -github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79 h1:n+PjYB3JnbKN+sGmX6khST4xMP+D0UdrMNj7O91fuOg= -github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79/go.mod h1:fctjEnz9xaBFOlmYYPdKL8Hs1Y3GUKilSwsJdqBb5QU= +github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0 h1:i9esYyZ5ExpZOgxrLMQhY2jDTVYiaD8yUeqXN9QBgbk= +github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0/go.mod h1:fctjEnz9xaBFOlmYYPdKL8Hs1Y3GUKilSwsJdqBb5QU= github.com/cosmos/ibc-go/v7 v7.0.0 h1:j4kyywlG0hhDmT9FmSaR5iCIka7Pz7kJTxGWY1nlV9Q= github.com/cosmos/ibc-go/v7 v7.0.0/go.mod h1:BFh8nKWjr5zeR2OZfhkzdgDzj1+KjRn3aJLpwapStj8= github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab h1:I9ialKTQo7248V827Bba4OuKPmk+FPzmTVHsLXaIJWw= diff --git a/proto/feeabstraction/absfee/v1beta1/tx.proto b/proto/feeabstraction/absfee/v1beta1/tx.proto index 4d70989b..bf415cc6 100644 --- a/proto/feeabstraction/absfee/v1beta1/tx.proto +++ b/proto/feeabstraction/absfee/v1beta1/tx.proto @@ -11,6 +11,9 @@ option go_package = "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types"; // Msg is the cosmos.group.v1 Msg service. service Msg { + rpc SendQueryIbcDenomTWAP(MsgSendQueryIbcDenomTWAP) + returns (MsgSendQueryIbcDenomTWAPResponse); + rpc SwapCrossChain(MsgSwapCrossChain) returns (MsgSwapCrossChainResponse); rpc FundFeeAbsModuleAccount(MsgFundFeeAbsModuleAccount) returns (MsgFundFeeAbsModuleAccountResponse); } @@ -26,3 +29,15 @@ message MsgFundFeeAbsModuleAccount { } message MsgFundFeeAbsModuleAccountResponse {} + +// Params defines the parameters for the feeabs module. +message MsgSendQueryIbcDenomTWAP { string from_address = 1; } + +message MsgSendQueryIbcDenomTWAPResponse {} + +// Params defines the parameters for the feeabs module. +message MsgSwapCrossChain { + string from_address = 1; + string ibc_denom = 2; +} +message MsgSwapCrossChainResponse {} \ No newline at end of file diff --git a/sample_pool.json b/sample_pool.json index 3a63999a..ea20e31c 100644 --- a/sample_pool.json +++ b/sample_pool.json @@ -1,6 +1,6 @@ { "weights": "1ibc/9117A26BA81E29FA4F78F57DC2BD90CD3D26848101BA880445F119B22A1E254E,1ibc/C053D637CCA2A2BA030E2C5EE1B28A16F71CCB0E45E8BE52766DC1B241B77878", - "initial-deposit": "500000000000ibc/9117A26BA81E29FA4F78F57DC2BD90CD3D26848101BA880445F119B22A1E254E,100000000000ibc/C053D637CCA2A2BA030E2C5EE1B28A16F71CCB0E45E8BE52766DC1B241B77878", + "initial-deposit": "500000000000ibc/9117A26BA81E29FA4F78F57DC2BD90CD3D26848101BA880445F119B22A1E254E,1000000000000ibc/C053D637CCA2A2BA030E2C5EE1B28A16F71CCB0E45E8BE52766DC1B241B77878", "swap-fee": "0.01", "exit-fee": "0", "future-governor": "168h" diff --git a/scripts/README.md b/scripts/README.md index d52d25f3..7e3c2348 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -33,21 +33,21 @@ spot_price: "2.000000000000000000" ## Gov proposal ``` -feeappd tx gov submit-proposal param-change scripts/proposal.json --from feeacc --keyring-backend test --chain-id feeappd-t1 --yes +feeappd tx gov submit-legacy-proposal param-change scripts/proposal.json --from myaccount --keyring-backend test --chain-id feeappd-t1 --yes --gas 400000 -feeappd tx gov vote 1 yes --from feeapp1 --keyring-backend test --chain-id feeappd-t1 --yes +feeappd tx gov vote 1 yes --from test --keyring-backend test --chain-id feeappd-t1 --yes -feeappd tx gov submit-proposal add-hostzone-config scripts/host_zone_gaia.json --from feeacc --keyring-backend test --chain-id feeappd-t1 --yes +feeappd tx gov submit-legacy-proposal add-hostzone-config scripts/host_zone_gaia.json --from myaccount --keyring-backend test --chain-id feeappd-t1 --yes -feeappd tx gov vote 2 yes --from feeapp1 --keyring-backend test --chain-id feeappd-t1 --yes +feeappd tx gov vote 2 yes --from test --keyring-backend test --chain-id feeappd-t1 --yes ``` ``` -feeappd tx gov submit-proposal param-change scripts/proposal_query.json --from feeacc --keyring-backend test --chain-id feeappd-t1 --yes +feeappd tx gov submit-proposal param-change scripts/proposal_query.json --from myaccount --keyring-backend test --chain-id feeappd-t1 --yes feeappd tx gov vote 1 yes --from feeapp1 --keyring-backend test --chain-id feeappd-t1 --yes -feeappd tx gov submit-proposal add-hostzone-config scripts/host_zone_query.json --from feeacc --keyring-backend test --chain-id feeappd-t1 --yes +feeappd tx gov submit-proposal add-hostzone-config scripts/host_zone_query.json --from myaccount --keyring-backend test --chain-id feeappd-t1 --yes feeappd tx gov vote 2 yes --from feeapp1 --keyring-backend test --chain-id feeappd-t1 --yes ``` diff --git a/scripts/bytecode/crosschain_registry.wasm b/scripts/bytecode/crosschain_registry.wasm index 4248452bd5a6e3a509f1e01d5104c917eaa31cfc..3433152088e35fe13fb822248fed99d95a385532 100644 GIT binary patch literal 408964 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 OQ0vD!m$R_zeZIU~4k)E*%X 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 sPYH4Asd`VS#p@o&eQu1oH`Grse>^v*l)jC38@ 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⪚Y?q*@Y!&CVKD4lD)CvXWfXm6k8)is13` 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 diff --git a/scripts/bytecode/crosschain_swaps.wasm b/scripts/bytecode/crosschain_swaps.wasm index 7d32608b8b598faccac5bcd16d5b1e777590c443..1a87f6548c4b823d346b4cc952ec1266f9aef309 100644 GIT binary patch delta 157294 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 delta 152586 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� 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

Bzf+g!N{AD)~a9WQkYL`HVvlXf2*=_`z~Id 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 diff --git a/scripts/bytecode/ibc_stargate-aarch64.wasm b/scripts/bytecode/ibc_stargate-aarch64.wasm deleted file mode 100644 index 4379497ea8bfd5c5e35fd6d46ea58d02eea37b28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 221094 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˚)Y=fxTL=)29amA&}!L9{}n7pczN|m5$umqD@eU&D>Z)_<;P=kU>QN zeEN)S;WDDLs{wm3qXEoFSBzALo%KUtfmU1B$G!J0tboH<;!$T~c}pcx?Ks-^c3zme zIb`lWDGqZ72LFBJC@Qs&I}Ej(L~4{B6bcL4!XvDAxK%k>g8`|+w{l)gedyVA9RWXP zYrv9r%)|#5S71+e+L?KD!wIXvfq#3_*WQ_K*AlsXQgEItrmL{`dx{+nJv$79GJfQ{ zrXW^+3r`@(o4wl-)YBgF{$?=@Ti>?NUhtz#Lruao`7EIX>~l(J*EHVP)qC^a-BVq= ztkI65?1xBzdpP}QBv_rkyG}ULvr3T$pWA9`!tE(e`3YM`+JJV3A_%5Ix$`@Y?yMQn|;4NlC==nkP`MGSu6|!^Y3&8-IxR*WWxz}rikaK)!#SFQr|td}Mds48ZTZE} zblXF&r<{Yp$TAm-|{lWG(GM^H+9;@k(x` zKLjy+4V5D=;F5lx>?&J5vaE<=wt9f2mX_vuRjT%WoA^-KCS?ZTWR)J{Pig2jfLiSov)##kXaF$?xgL zI7c6nVCsUR4!QVA>w$Q+&~NpdvoS!wl(@jJ79ZTR{SscVT?(~{dP!)O&(zY7uE3XD zT%DDFLuCo=tQL%SRe{>ynCswOjRMs%Kl>^tFGKTlaN`xtjrM0ncgO=;q3yZILtJP0PAHh+AJ4HZ{x z?5@~YdlQWTENhI8=&Rl(l(pE$bD@vb=T%;Tsv-c6OX1)sctGZz38$vSD-mp(br{NY z+DZ_Ci4@oGu=(N2q0(-I4z~e`F)1668NW+h`cgI?37&}B)_Q{>MXh%Ztqw1?@+-%% z+=YG$sPLm+l?LT~Rr;+YL$-0z!f9FS@LHo1Md5M?$l%9)n!6#S7>(5VLh?%>huQ>= zhxmwaWl{81krecP;i;A8aZbvH-_UTi7_9D5Zv>T7) zFpj_nVps>m;VmA1WM8bP)xN3jTYu^QQBu_ZWpz;f7pq%t^dAt3$M`~h7{k%gF)WXc zf%3TfZ)K`{dT-Nw=W*6Fg-o6=S^F$<7MbVT>L}x@m#isp(E|Q$e!<4ZQ8UIw%nziw zK=+885YLd*eN>wOHQT-4hq3 zmB_kD^waRq1tv`5#js>8e;oF4$xIgYije$qGC7(5Vj>IzOP*A`Cc?2Q?GR~VVPINg z$y&ZREpCJ3BTLo*#+IzX3|fdw)|ep8HEZ0gg|2#3wt|JUw2Q||hr{@qwcH}|(XrPr z_9FoJ9#N9-mUzN_beS#43^kYlmHobGJ@1Rwj7PvQPmK$93Nn3TYZtBICY4ynkHT9W zRrL&S@vyzI#-jBSs3=P-wl-XtKS3$K^3-q__|^;7V6KFCP{$DK=B!|O8?rTL z$PxWI`I^(%#kyQQHr#TB2D)J^Pt-!)^koV)7MrD?lfq)Z(SRmZ3!(Lb^?A#8KWXez z`W!4{1?X~ksqgtiihDntdK3$( zSEDb`#%PEYOt9I-LpY0?U96U(#igsIXcM&cQZ%Z%ErzU}3V}yc@%bNMDp-cLNf0j8 z3(&%~D&j=G-_ZqV0pFm_@U+OT;n{HG@EA}fSZywRc;aL>0|2c#ybGfdYN7#XhBJV0{+gdZ1MJOC4v7;DDxUeK?_meGZ;py61^N5mF%3*-ux%Y23RPGt}PA=8)JNt(6U5Y<$2vGk-d zANi@MG58#u~kR-8Yuj)`)uf%_f|vjz!u^8+ zgoNq-JJQ{V5rmLj@hKLQ3=}=x&QqQzJYlS3h0wtbT3WpRmeh_6ipdXWEI8SH>$=dK zWyc&MwjC-)4h%`@cHIhnP*(=aiD8a3<3cwqvS4qU=U8s<4|S&rEFfHTD)L~(4dzzb zVLolG$@lNfW+}kn=kWf)T5{e9fj~J&+%*)_TsM)h$?XE8>^g z2=U}c!99~hI#^tq!dH=U)a*3cDe1>Q1#-3->5lY%J?h?QZ7)O%%yg;IkHByYgt}uI z1Ji&!m%bc^MnCo$3u6Qtkis$)i^Mvu+@X_;ShHbKlC;)$wdd7&_*$6^ZT$>WP&Yjj z&;ywuhtRd3O)YD11UtCwdVVTKD=@Q0lA@FaI}peVvW4Ocb-TV#oFHZ^qLO>*Jtf9ybIOe@~A0a_PrcTBUFl z0PnYIQwfa{jHG*mRHVR>){+~cH_Ws(w(a7>1X`Zy99Kd2pNVnyIyvAL2R%^Uepd^= zXsHag5On1HA}|Q>zzwX~tJE*n*OyBVTsT;c-OHr#)pBg`J@$og**KX8%J*tSY+%Is zWkvkk424@GrICb=A1ssCg;vrHTKUlPtykCpKxKGN517o;lGuSLqUXk`-oO)i-k=gt3Whr4k>>3o6&=7 zX-}5FlknKy8$bHa0_5ft?ROTve3I9^$G;@pg{P&zJ=y*5%*V;0HT=%Fh7oYe~t%ZkefLtq? zPrQ>a{1M|xba&g}V=1&u;idb{8}rxT68sQMaN^^Y=cIfQ+1Xu)nR&Yys<}sd6 z^2fL{Tukf;a^oTRC@q9a!CYh*w}-x1ykMyl3={bVE?`dt2Zo?HX%3Pa7KRl#tUQ;{ zNQ}nPYC_C0(!q6J1;treA-I25Gk&f1Sk?lU;oSdLoZA_UWGM66!-m(EQyLR9K{~=r zl#W;2I4zSB4~3?rWmVCR(gZr;IA{&mbPH=#c+zMztr~UqO`{g-xURjCiBgM5h)p)= zp?A#|OQO^blvU_mfODL(3U+1?tjQEuEppsL?5T4Xjut@rq-=JLK@2)cLhX&u&#hG@2-GEo`K&lY9W%_(mpnhkltjw2K{D}-hWpO8ah~N4BoUb zM_|($A{LLvM_UZ^SPXy`&CrlVPFn!9SbPkCmQE8hEdY8<*5wrgpuuAnMy?(J4T)88 z8*04C>(>TA!#%Ir9#e3wGSX<9!Ofe5y_0Ga_;A>+@Uc^ISQCn)!Od69RJ}F9&C=9C zk^1y{+ylZNn@BWTc_+*+GQUogfo{zyJ4#i{j^b1eSbzd3Eiw#tS?W~q%j3z!S}MTk z+<*$YFPI7@zBW{l7!{9D0dxQ*8~BU|+CBlEYHP%-ShHDIKd=HvhYnOjY)X@1Ip-|L z>A*52-(%(P<-DuQz8j`B$dR8DD+=^^xG~YfAAA`4@ckkDmmY!Lh;j3GG5>zd#~MUz5%r zmmViw*Z)CAt$U_g5Jhkwjj3P3eWdg7wf{w`8vY@j5~jj=XDTU^p<*D+n?$mCoA4$v zlQ@K69~-%oy5Q*xbSIh8WXAx6t)#F%dxA$oottnc;X4$|t=vm^7KFl1I@o$N=%=yWg91ASzsDjcP|P6P63#`&pDBY|CDNNoC0?ylijVu%Iw2L&2?r$g zZz+q2w6fs1*f37BJiDuvO#b*4I-4Dw9!uzIJ2S(w#rfvH@|!<6#!YQ?=YHoW=tI`* z8~|3yPygD7yBv{Jrrx(qPBRViFFyUNANlN=&;RTnwZ2>3t~&TZ4TfD28qC@b{=Xua z+cNXFLxRO0wN3%@DLM6UeM;h-p$v zNzPNu3=k@KMKtda*lNz*BDtG_akmlCQ6813_|+m|w-J)mI?&RNDBEmg7^vRqN=9eK zwgeTrJo(rE@CR#?5n)n6R*_wW-pmpWpdT6fcng$F27i@IzORd+6ZsDFHU4@gL_G4Z zIAKlr2Wgaxi|;HsG;#3#5W4*wC2QXuua@r$)tOU^dV+0XYTK1^U>>QLf81R z3K_CH2lMQ{o2@A81g*jUkrqtU;L)_`41OpbwwrVe3MPa1dH_b=p)JJ8>8C!f&^VoF z)-F%Q7oryi?@6bSM`{Uvh}J_7NZ{un>J(uLyy9yf{F!aO)E6z-LCNefq*VFHV((r+ zz#41&bq}y#MIginq`sT=SKf92P_zMq_5u`eRdHa27K*d7Awb?~bF*V8F&O#PVF@5# z|Dayc1={5qx@>=FoN8kSS%yYXvPet1{^+AjfOz|TH!EjVIr^gMCBBvJ6JerDgJaRRUkVokV7>t2{S#Q#O}QVcZoZ#gEYjiH<+~o>!;?0> zCQa;P{$=S&&M$BbYZ*XLv5i*5+G^30RFp~ayJtQO;Pi(g<-0(E?Ct-8hFN8CTm+@8 ziw3af=mjvzN&tq;O}Gv2eS9|2l1(VH9F|Y=Gk6+6N+rK{Dz&cgXncS*FF-Y_ zhw!FVFW`ot)hu@r@@6<7XY=+X-!l~J^Mgjw(iC7zCkh47Bn|N11X(qpx2XJ(yK_di1SF~2-Al@A%+1}Bh&iWUm>Jr=Ur z3dPd`F?;l{Jp0JUt*MsMcT=-P4=hfVC#|-#)SXiz=aqG==O}I;W3GIu?58uaTxQR} zmX_H=#TZ79VFL{a_QMV`6O+t5$E@z$XWWhhT*1ncsp^D{xL@Kw%^{jX>J`uf9)hr$ zNNXLvQ1jt>p>&rKy^y0QJCh<#y6R&RwF&G%qm^TG=|Gl*BR%O(kR#yI2ykl>h|cPTvX^jnkA`}vQoFsJ1yehhDCNIK?8zYvnj zWtAD0OR)@)_WAlJ(ur)0(glH2E1l1!=NP4AqEsO_H$EqTEb#w;JUSVj0)8&tnFfsTH0byV(KosWo^H%w&N>1?5KTsa#dGK@ar`F&k&4>(H zDfvIsk*+xfUAb#UOoAHqBVD$fE?edEbVGERkm-RFrjtfW-k`?0bv3MKSE+GgT@ArN zBJA}X&gp!fIEsPqAeIG_7!--`{26tWxD)SrT0R3Vt4XNhKzW=O zXE;}_^Sm_@>Rjf<>jcuLkHLkah%FknHM0M(EuGSFQ1jkRouzGb(FdVi5O)h~qyH5i zQE?{dUpxtzpj4FE+YT}+$y%|KBDwFuArgW47bx(7v)jk$i{Z-!6}T9WZ5nQ{vhm2u zC@4BbTeTb46ZA zuOMAy@XW&gM~lJ2U5B3bURcv?+t1iBeztOFf-j{wBxohx9_me{3h zV$jxD^11-D&1$U!kZED-G3W-B{<1LWMzydG3_GmdjW7uBkpQ&yiU7Jv1vZ62J7dY~ z0?^G?YaM{tleG~B-4eg?!ZGMpH30^VttGzOl!3pzNqh+w)&!hv77gn4Y%s;jFun%A zI~loGDi+6OtfXb%TTC7-CgcNX=M(pe&zU!|T>NVo+^~EuGPrae7TGS@wSd*2a;WsC zbHW&nv!~MK&{$S^p%phXD#{FvaCRDD%a!sB{uNq^_jID_*rk7f;W8q5y#WETw6N7ODjyhCVmIo$nh$_xxNX_LL zDr}ZhCq&=obyTrkLy~w@F-wOOnnNki%2OM!TEm1j-;-N(~!(TYrQ%9uy7D@i!p4tc4thOUw-j86Vj8Rrcj;ob9$Z7t5yce zPwCZ+JX^5%dA*vEXExumUbj^?-(z}h+I$y&o`j8TzCX8&+-$zfJg>L;ejytf&{~`C ziUVpIf0u2V*v}gcuJe3KR0Gm8L5iAZ%vY^(W?c=ya@88g*VO=WSFLemU5zy+>AG=T z`nk2^SYwi|t8sQ+jg3vx$3wXnYLd#wV2lN6BPM=Ko1*n|M2eV_j2UJQ17v-OV>;M`)~T>QvR#XE)yzqGy8vKJ!AF;xHZUxFTR#tjk(8 zyI;`Ju67QnTCjaLnDfO z7t$1z-E1lj^@TJA$r~s&khP$c7pnov3;$;QsILQ*a#m~7Hu0sEFYimRm?n4vDLqj& z`g;{7_FZwjVlO$9)o#aC(s97+A6CCt{yr}E|t`=A6Mtc9%! zuohz!X` zUyPJW?^UJ2H7Y$3D~V-N=}Z5XN>M*(e(5n~V94l8m-(uFNz9Q-f3Cc#4ZgHtC9y#& z{d-kvj!7&~@cu1j2;6wh2*}{gbP;t%bgLrIsR(vOmCLC~*61%OW7FLiZ=;c)R;9_! zc3)hKN*_|C-UgL^N*Th}CZNQxsPscus`LTtLL761FLmlM2Uy~^kI)xuqR}r32l^ZI z`?tR&9Dmkz1Y)(yJfth5{| zQH5m)hGeS{-!nqN01LIo5d?N(_CYE(h0rXWZ^0nAlsHoFT*V&5M&^u#vD3^rgi-JN z0|#^JtyqLQeUeT$F<$IPnE9`ip%VoRd6#*M$m{vXl#jYw&7w_*zOULR*5@{cd*$w| zsNRh=4866{`9Ig_i>Vv>V8A;zQ8jZTnO#t`L=iMP+vv{go2;z~oX269SSS^@^4|QU zQo9D3joa%YBVcTkKi+PsSUSrx z!J!}cI5dG>Y(dTisr@bNEof1K)e6oqH_sGeNI+NyRZOvB(hwqQiPTqCD1@SNI|)Z< zGfEagXg@v;(fQng!83{muvIoNkjM?K3hI-+rbYM$RwP&s@NfRaSKyo4W5SpELn(e> zysc5&f{#BjaT<^$pw?zwA^%YLFh8OOM(M&>QdXlpzjT#R+EzxBo-(Xu^_!2vDR0OI zmyu;qlv^2g{AjVqK9dYkQ?;5T7l&7mv15|StjV5bUfE>U(k8Pn%DeFxfBeW7wXW5( zhnU9NQZdY%?qHO3I#?q@AuWGGWwLVo8-8+|a7UALr7XZ{2w3PZbus>}arpx#|1fc^ z3~{7@w7yC-m1$)c#PXDs1xxW{|DL8rzLLRz(38c+$^YlR5yP=6MozPchYZxjk<>B3 z3S@&H@|z%eCRB!m=Jf`xc*q~II2x6`a>yUA8cA5jcRr}0TkH%Ylz&Egl)xZYl9_O} zw)abOtnH0!-!2@lk2yHM(Ld0MMLfKNa_`FJ$ckQpFXtW$_?RN8Z2@HXq~4trQ?|>Q z^Y(=WeH}g9;#wgiX|>apo0FB%l|No-mH((b{U=PeIp!3pQ;dCdVeDP3Y2}BW#UWiL!JA=1wKu9pyi|oRra9^z6o*jP5s<^ zb1|W){^@*z!R2Gap5n9!GR=T!@J(5O28D64`nu>7A7|{glz4FkVC*U%Q-Zn2$61EV zC-0jYqjT@V2Q2Svk%4tZ@4&b6cd+oK^iru)j*uJV*w^3}C zVs8MV1`3UI|I#E&q{Bg<`5p&3ieA2T;pLCA_IcN%OZm2iZ{hED7GIb09Sa42Z&=vH z-y0Wh;P33h;8Crq?pN{A)in~DYea*QWmq!n#T^P(E2vtB^%YbaWd(KV&Q?ovs*bL( z0&Q+e&1<`!*QwS{WuNx!aT}{=+pLD{RnMMiWZP_p>~o$y*~qq84B6*B+m|G~ahtu6 zeZjM*8ntcKLiR<^o^E8@Y>{n4nrUQ&`O%0j!Fjgi?T;=kRTI?Hb=Y5@)3eBO0Mj#Q zjK#<Xr)Sx-w>Pqz({t3bcQmq_({s$TZ)jwX zOwWytjK=hwK#HuJ9)!o&=k%=jAZ-`!M%3fkH#LUZoSs$B-r2}*PR}{dzPXXzoSyTZ zy{nPkoSqAweM=*|IXxFW`_@MG$n@OS$Y@N@rH!VC1^%zE>0z}Hec)ixlS(j-62!i@ zEh7HK^qm}H-eb{kI`0(Oy;BofcP$tHZ$#g)JXwjpl;yv%$?_+Z{*v+uB%|pE9>a)` z^OHxOk;MF#^4XZprzA1UXQE8a6J$9mflIrj{I*vsK8P4pm~Hu`t=zSUwwZvJ86OnTYH$;klTgK=$%6)jldU9YpcBrj~fQ zDy%qLc0uLiIw77VVf{}eTMwLLekagSvxCDi@a*9lVK?^#TH9D{p;!9t6qje@*=we@ zpwy1>|MWr&T2Z*8bm^8|*wW@V;eSqo8E)y{EN_ohoX}>Gwnzf|`QE7+2nqb(2KK8- z5H{$y76sC&^dKQf1{Drar1^L56i^AV05mmT5-6~ps*KtArB^g6F$!dt12@2s?Ihya zE&_lUamNs%vYkFW+eJW!?Dp#*S7keKc(#jxF4=^*^eo#c!?RrkjFUa~I)X4%+sVSS zT?ByIW%qSceam*5@N5?WvZi`W8gU9}uA=qpr-Cc0shCyY*1}F?J~pkeemfN=M933n z#)#Fuj(ClTxzE;^PG8}9+3TnJG4qn9O!iEf^6${E#tF>C60PV&EP6zlR+L>0<-&LNdiZVOp=|)k4ORd$hSoB;~6mC^sXcUF#TG4hadZ{W(XkvNj6LnvW zmD2$hB)kJhlxcnKa&*_xMo}5J!g>76Ff)V;_N)t+eg(0U6~q$4UAS6Ew%u?%(39v# zbR?RZ=KmB*M2^LsO-{Y}xWokkH6k8Lz7|X;SjqybEPhL0U0D3jEs3=m2{GXRfR(j5 z>R`Fcla+UFhJ*BoJYn+zcuD4XKJyywf`abwHWNzW<;vE7r+qGR03bE%#-Yssl*@5g zG2yX)AE6XVJP{L!$C`NcR97KaM(k0tnI#>*0^k6jeM^IwuD)}!YGn)U(BtXy``%W5 z`vV`vVxuG@No+**XwWjmkN~C(|CIkn7}h95%%`Wv2Q7R{Eep=TGlEs`UP+d*&MpS5XMcE>f03czN9@6xOE*W)~4?W-`Jk^o6Q?1TIR8ni7*Vt)hvVQJST`xbLmcLoNACx5OboDeMO?Om+$M=Mb1sK- zN&IO4p;xxVYf{CBv3Vue))hKF9q<|t9BxgibW$x%Z4-TcDS0=jvb2y2PuSTKI(R}u zP=9EFkLmyWZZ2$-2*jZ8?F-+N-zXD#A9{WEGMP29K8483ADtuc72BAQ9V3HDv`ZmNn71hoN)OrwfzdRjhB^1o@k7ekx zY{tX^DGwmdHX$Z9n;pDm4nJ+y2Im#!NC~zis{|p?5#X#|=w;4C1KxkV^bW!HK^@>h z=ff2rRCZsUEya8y@znrbV36Up2c_ib1|D((XL3&)wPcEL&~Zu6epl?}n=Vnq%dIEf$>UHwZ=b^Cd4N57`qq{bS2o<=UD-MZ zI{31e{E}s+|J9;w50KH7x?bw&{VahmKs}8DJM;?`^$9ylrpme*-Vnm~CbZ z_;3VCDyeYDW>>9=4Kmj{VJO3yrP)S_-|-s1`p&yWR-Q-LqV51qUtb9R6#6(*#;4iRbRGcJA10p(Zm$B=Br8unX00=nP9xELoFw-TMR9J z=Ic@n{YrMl)ka~Z{}Z+ZF2hqIW}QST5%`(;uX7If7zxSAfE zZnwtA6L2AU86SD>r&n71z8b#@gU3LDsCP2hA=6L#PV+zLHl zq?wMNwo*5fg=SRNafU{PM=)Q*2*bcSO)K0UDjd?_eF5_j?5aWCfP>bGX)6I6fek$O zd5s|*JSCan>X0#ZVJT`6C@Gd;2lyK{!b~L$s#>(FPn#ZP6-f{Tgp9VD`lo*{E5>IU zE5>J#9V08o)?)*Q1Jwq$2B;#qSPq~DP)b|c0H`Kj;(-4ybscaK-Km3!0q3LxqClVn zI%2_uJLSs{l-wXnzO+J$@Z?${SCj>#qk={dFXp8y`rw|vK=lO$`x@bpHN?l}T`D(>gIQC8W!XVi?V$sngXlAX8rnpvJ zTpsD-tE>a_2c@{iuIS@*g}$jP>R9Z`T&=m*U4eAel{sf{&93YV(nbA1_BP`qIudbf zwA`gM$*{00BQ>2bkA{;kv=z6DI+8wIUVQ4~E%*is^Ch0(qjxhIVpg)rJ^|!dXt)!w&95(GodO%>~jz z@j!Y)&M_#d9yYebI0FY&=ny%B2~SHu;{!{4U`ZLbWh-c>thZ%fwNBjrZFQ>c-~Ub+ zVLigBlMFs($LJ)3Pus6jekvv8rZsFa2vM!HW^@<#GrKkc^UU=H6Iq(POD9SC?J3o`SaKry+v>sW8qS)A0CXQi0TFw*4fE%<2 z35-B2!ARX~1a$p-44&f>h}5A zZ7!ccHmavR|G_#mODq<^REI%G{E8Lw)8@xi0Ll%-JLsrx1Y&gFTOJ})<642wtl`#Y zRvX;<*lz}IU5&7M_-_%z8=shAeFa`_aF|eT4bU3}x04zy1eR!=j8y)h&`eh&C2~Up zu^+ATXoj$e>r!F3=rbBFKN_xdAFZq6tdqZG&>lj6-Z{A~-Q0u^FvS7~MS1GlQ>$EI zjNVm!tTCC@P^~QmG=3mUdw#8p$Fed2NytH`u%-jffES<&3oi!xG@sDUNArH{g9B@K zH$Uv5>ZIIx}NOu_cE!Z>i}(p?OjAG?oGXjbFA!N!kfHH_2c)21(WfG{*i+=E?HvKUphJ+K?D&xU)b2BvpW1!K)ws3%ylNe%p-`uipMT2HIuh{g zjx(YcZq@%JwzS7RVj3ev1$0caAJLR1ALy~UoW*}maVh1yPbbT~Qa`Yw!%BjNY~@)b z27C6jT7-u&4Ag)xHs3jE_PORe!+gGe7YrAc6=DHjfy1b}T9xd{{HrKkvdf*U%}z4P z27&O-=`7!tD<{xm(ECN{nmAoLAniuvVO@nv0s{-I>-OO3O?*0%^6}pa`c3)g%-D7+ z>exqV>^#W@Y+uo#kG?TCOn>OL>4+jQK5Ufbw~*;_*%2053ZNn;8>2lW+5%-r5|u1I z8G98cT;HwF%lWZ(nm8qHH05h2958A@Y(4WYSC~?1m#}(Hs;gKA=&-P2#{(PPG65)t zT|eAMfTcLRNmNcrMhj@LVc9?}LBVI_Hn9QO{cB*+?yFw?f?r7tDXd@bU|Met3V35afB2|hKLk6B~7Y{_L=W>NbxK!+m@`a3{rT2 z_j;tTc@Q$xOjjU#q3H2L)%{zJ9^!gL1nURJ=$xUNZZSp24f_#siHnt=3%CLH5TNh4 zVJbnk@HxW`aEfxNRUh;UW2XjUk*(alLJtFM6FsOSZ2C`f4x2l}NL2{PtQdKZk}8Y{ zugvEVpM%K>Q-glE00B!lsj=%u{sfH(T^(b>UYXgxy#`6)OW=zP(c)j2~ z+W;>>m&^us0InUu3dGqEkl50y0Z^J>1waG9TKtasag;}FN&U(j{f}l}M>H|{)uxHd zXB#xJ^gEFzu1ZJC%{oVUY0%MEj&Qyd=3$j3@dWRHs1^**2JZn&Ske>wmH6mYv|?;) zt<11Hk)@@W7VdR(v~cRq61p_MtX z5rH?!gylyjte?5M0jr~X7`FXlY(rLOM#H9A-5H!qf!{l?yT|F_m2}$Ybw5x0xzoNe zuUD(&6B{Z$URAn2j_7(Um(^CroGUSI=eYW5^bQzxWQ?B|lgP;{jkM;R*J;X5<)+}i z_igFUhdbJYr5FSdCrX)`>E6UwZ*rzTEjUe@}C zB6~&hS}M<3kb$CJZa=^Z?C@635~S>Ig|E!y*(+L|e1_oR+^WvVYPt1JaDPT5XE-@y zCYA(XU(3jB^lNnHADV2beKX4N%)RssU=$8X#miGC+GD9iVX!o7Q@O8njB8ki<(bBxFvVY{c?r zMKqCT^}^seD9#au&*Dkj6%9tc*zDSwaw1U?s0J-g&Z9=n?H-Qg(}KEnYFfBvotmz2 zZQ4aYp~9L2MqDKr+qr6G(b2S#v0M}otv)Z&r?E{dHU#1Y36-P-wWx6#Bbrt$4F|`G zBZ<8Obxx?HUoPOql4%C8E0sf*@;Y}O$NsR;wF;$%L)9gJ^>K%#DGfQ^3- z=Q~0-`5lkNU}8HE2t|li+5xIWCe~I?U$o2#ULBdJUBIg}N{gXUpz6FT8bgykW{9(< z&xUmj%=lVcd<{F6UNcLP=~^J3E*EY{j5>-^{Js&>C=~+CGA=GW|7_we736|SVsa7c z_gX2>TH&|AF8;DoKR9jf4i&oJWOjK0of1^MfqWu5hc{*ou&LO07qi62^0C?JG)ogj z!|N~zTO~+wFXy%ZuY(bMue$ldMd%)^<;|DpKe5sx{^cj=CmIQVp6C8z$Kq5F%hmBc z>D%s1ckA%V7BJljOhCD(n6=O}J-@ZM+2hhuT~6%1VBSPk z@$*acFz2F>MWf=hWKlAo4Iyfaiqo^(7<>#wbt$|r)Xo-hr|+gw4M$xFAi^!!elQN? z!vcU6AS}oZ)quq*KLBVX-@k5Skibou8I58wDYp19ZWPRx_-re`(Rl&Gss^;>j`VG! z5C=szV2S|&OiD>i!VMMY2z_GYH`t`?7B{jZg624de2eOR?-0k&T>3V5l{I?S9qrln z&GZbEY4ofsiFZ9+>&hWSg@=ZmLZYrsdDoOGtAf9d>W=0iJkZeY*&6KxyEisw4CddC zN*O9P(RcppERS3y<7{D<4pfNR`FexSm9`l$N%#;Vn8veJHd8^e{%Bav^N?zEDu-3H=4Gne{a zi2H=>a?qYUkwC<1S|SK7u#cwt(u+)WEx(xvws6&GAJ#fz)V2!1wmnx+l4&BkXJcTm zHcJIOTuZ+S$D+Z)Tm}lNa^MmTZ8JDU0n=`o)eg`;k22?CR@woN+;&zgCu0@V#{~5t z+JL$X3_;xv0I?e#4b~=DOph{QXfrWZX)i?E?gC+~kaWm^Fk_A|L1-e!8p53Z0z_%> z+X1O~jQ-_4n}tqCc(0D5gIFQmry@lo1F)ls%z`=eMpBJVb*Gjsgo!s(Y|M2d`><4a zKAgr6SD!Wns6MS?eA;g2s6JgKj(j?%)(8MKIs!NVq}JLM?VZ0L5&W62nFvOG-1-#} z!_R#JG2HtvKn#b0jELD6#jxp0UoA2GndC(={Gu3sQ4Gs+H@)peF>H!!C5GD@iQ(1C z60Y2^vVJP>9Zy?qpHmX7U^o2T5VjBl74DlM{1_Za8uB52eaDjaX$?MIISEwsaNnI1p$KAi;{K= zTh4A#2*bO`e4m1>nLCj) zLo_koQkfW1@ki_nX4~zH!3VXy8$%@I%VS1ZpBp-uJX^y@&DNQ!UO>7n{^AoOc>2UN zE%6oZd-X0cpgl~2I<(a-ai*%8B%t(6m>A7)FvX7&Ly6|f#&QNZ)iB2MDMOF97|iF= zRr0u;6nCuvgwPX7NeVU&bMYG2>&6;H9^Fe($n5y#OSReQ(3o4o- z4dyK@sAT&A9JZ&e4YgTNsjW`1ylEcOT*G+QpjNg2LZkv|RPJ~*Z}Z&0XlngeW@=@V z3oH)t|84H|RP?_{&X&o(OkR&mWeu-~-q!H?Pr~a1jo`O&rrymAI|Gh7L+5OlilJ-Y zL15^&KCM-v$k8u-qIOC;scp#7%^g*9^iGqb_cq7TG4Goky>q=B{Z<_uk(M?0syhMi z3Y`Fck#}|1^Des3>I=T9b^XU^%>nQ>!n*O{@8#r!dGA&TCJ zx7VJ`wal0>M_WCU1JRi=VK3Wry}I8ExD4#I;rCLm`@KxEwky9^yYhR$zUR_n;mTwZ5mRy@U z2|KWXhTp3zua*0~q;cT+M(B0%dyOUnZQIr{k_ym)h4d*!+Ku|X?8B^_Ud8WKeOkq$ z->dp`l{oV0n9Ahar(4zqb9_d>SKIwwX;8TR%ml%MYIAA>Oj1wt zgjfV!kA)>}fUn4x*7u~ZVk?J;u8lGY^gm>E_E{aBrLp#7rWOUfkUw3E$(ngXSgrea zbryJAPgd8QOze`!#!p9TZ`rCD)E47m;J)oa6R zomJGERn#j+r|DBPoKbI9Q!kHKqu#4~tv5lvL}*vkt5I!+dc}U3LtUJ`t=6D_gr1TqP|9Fu7IwI9&KcaU#XWotn&7CkeVhwq1$bP*xH23jJ_KyeI zuahfX_7mUevR~(82F;zv5!pXYS&tK#){3=h?%WR?H1}zwqHF1EBIis;u&_JR2kLmc zahLrTo2O9)*+1>Bau1r5-dzRSVJ42d>>rm1t~K{=y<$Cv>>qd8KVE6>W60FeLB_D>sLd?h}OjuK^mj2av_*&l-i3G+LL&v24?mH`UWoHS4A zq))CVDE?`ZYN3S17FzU$q6Fu>;{5~{qJ>WGNnfiTmcp5Wrist z;fsxg+m%q8*E1fBz?2bjZebuqoZCmhw=lbPaJfIJDDy-dRDmmk0fj1cY@_;2c$$-f z&Tq8vnmz&ej@w}VF2eHr007V_IAhjc=MU-?EFIV@_u%S%LV+=T1qlHh41#_L)9LbL zq(cO3pY9d}XKLqm-{}i|Qvv@3w|_3NJ`^(;Dd5^R_Z)1anA65Kfr+oQ$fAN#$u_~# zuz#D`C!PzyEjV?Xj0y|Z-d0(<+klDL03v|C#{yZd`W8UB%?V{&6$@mQR9F*gt!fbd zF`NEvIfn^hmMMUV<0+w(V4n8r77<8&`dPp69^;`XFLsp}Skd?Nr zkEU*5mG<4R$=MdNU!BozRQ{Z|S#eLa?Zx4;El)BZQ6hla<`L$u$mKS&%|1z(&SGdu zBpT`$#hsaUOjF5x+d5d*olUlN-s;<~P^;F;Dc;I=>B8-u0t-H@M2J_k`2~9fb$wAs z3%v5q?5(5%h>Rb|&En|i?e<1-Y+UoDZE7B8aO0&ev?Yn{;))Fy#^C8Pqb|cP1NaT*=ud@-G0$g?^ z;Om^N^1E^L>EQ8%NPL^NTQn>km67lA zCkD9FpI}`ye8`qv>`a72ez$<`NH8x2*z^>oc=K1d_txqD%uJHbSd4FP9HDEY8w#&3 zGpU&(XbcG~iFsDMY^GxxH%MjuWrI{!pf*U=VR068t4~$!+IexH9K#S%5OZl(pm#siWwI17A#q*(+wqC&E z(f>L86)m>>E1LiJ_pG(wch6*!AmTagIURVj_uA|BtYL$$fLz+ zLbiTMUHV%c--Iu#W~->_Xzc}2Z@R;kAiWL+Yq~*7M0fUX;zoJ`{L6$&dvKH!>PU^T z=_nh{^weHBDqXLGjhHgqA`mKUxN)#RfZDIae|+UQZ3eZNB9%(C{14AMx5~tuZJH z`A_EatkgN(gR)Us_0Mb;zVguaKer(e{~$gYg6{Yiym1IpP>1h}MpGy42;AljXkG(3 zhPlwkyP5|*3INs19t(VlVvo7n*`$egs98H}?_KT2^{7@7N-fkf19J~j3!n?(wAh;O zE4;e7JJ?p{Cq%kw1Nw#i0!|ySw)h0;TUbb|eW?$86Jf}pgC&n<@V^DXkw zn?oH3Ju(7f4t2(6!FFx9J&ShkHT*AMMNL&`!MilTusOV878&S(ix-$Y*%8eYCMGHf zY~)2cJXI59G+1LDOG0nj^HQ@nSSBM-E?W?$*;G`%6hAjwNm=XAIiT_H9?@Qpzl*fa z-k7M42TiC&$4Bev08(>h#EVER#g^^d(%|57s9{!+MxqQ+$Dv!_>}*uSmH$S^nWC=y zK%IJSd(q8D7gCBT<(e?mK+fhf5_>y3ceE=QmGsbrg-smTxjnh*DbNXAg3!HL>eSA& zruq4Anig}c$skmz))IA@wv$zFE;VV-&FW;dSIB6O?#t00A?;!{+KXNk?Ug3eUZL6Z zszJn&(H^gDm5xdKZC!ULGd)0=5) zMhT)uN7JV0wZ0im=hHzDW@s8sdrB70pezOmR4R%W6EKe9F6Z^<``VX)YgXwx$F@!x`R)cFjpXJElR z55|69MB@MJxbJ^Z-bZsqV<&rW^_hH{z5h~2E}5*6rz8A z0==z<-X?o1y;W9+LL3zsNYTn2H|N~H?^6m+!HLWx$yEooh%rn*qVLlG%wQ`xBZU&b zukvT|9T$XCl|H7FhbyHNAa0du9yFJPfcdbZOI)l#q%=6rYsCjaD)(rHgX*amwdn+! zw$927WkFfM9CX3DiHaSGZ|;)n3t?1nCv)PfarWp@^50=mX&n~s9NZKIJ+xpiTGxK_ zN7HV+UvtyLnN+(`U#)`{ZF9;*YvpFa>cM9c%cEwdr`<0|;)!~>Sq7%*x~GFH zl5&@HWAo}f_79H)X;=C@4|mNOcUleT1Q_|w&BMmi+|%`V7;^kjrujbzmZ}MS{lRAk(qJz>R^cvUMwtaJC@8)8>xPx3eB-Uqm6I0y9|7 z-mL{z>G8Xn0*KR1oQ2E8Kxr(g;7}%Il%CzNrEgIZ@cW}Ujy_%b7TUOA0mgIi z>>%S=?oKT1F|n~9%REG8)~JlY&{lDn#9V{i51m6I)ZI1YxwHHR`5x=EP<|o@&YMp# z(?YE|m?>R4!=fk8!8jr1n&TxCi#3rKsuK~-vrvH|_q!s->g;~%qW+2-6Av4~22$DNjm%6~9A zCAl2yz8XzAnHEEVO714bs#l@8yx3xY_Tr1ZGja#cGvil~oEO~13^z_t6`OE-6=DZV z*CDwy#EX}Q(Wbr}4v_S=3|H7}p~BGY3Y`WSJtE^~dG5FnbwLsxFw2yNPKP+wkDJ#K zx$92|_g>@#AZ${O@$j7p8WPBxL1oUv!+udiLAiwj6yVAAvQ$H-4(^BT{XTfe)R&qxklA2M zjjI1ev$PpzniOo9YjzGAYZG7Y7WR_ISE&?~_WR3!($PFqV0OL60fFMkC4a=tG)Qrz zX$Fo1dH+WFHoQL!D>tTbSDfB4@d$j@nt?(q8dJ9$iPg)6wK7Vye5hG8_}*AABGj2+ zgG?N9nMLD39+ULk!=$}3nt!HmI5(5&3R1F*8%sqlZSsr0ETik?c8}gvFV)Y6%s~si z2SIJolcJ$kh+P^4am@cy|EBrmlN=1qSy#76FJ^v!e`KQJwCJ?@{==h=8zUW+%Q3DT za;i3D|GBnscgv(P40^gc8Cy4Er*-;KWrjft*RlB*Rt(srV8mkCCa2 zFhJ!Gmu^m!_+LHP-Ov)Qj%EBbNkO8RkN|R0rDNed# zYM*gvOSdZ7+yd6DpWRbF0YJW@eEx;7Fd;N2L|nStnIo$!4GR-8V{HOVIh_E$aNUlz|;j4y=hH5Ue3H06mZ z+BB22gNw9Sbz!q%vjG-tv}KiPI|>z9u%s@C)2FiF#?Dy;zYz=orOnD>mx5LRZ?(=~ z=Z@wpf|-6xy%p?JN0`=Yz|Tt;tZ%Ce`MP-YhC?7&HuE~i`YA!ioZ zk&p}zZ*edN&EkN_Dzb=pqOZc~+0u!9A#zd*Ijx)_ZcZhNRBMvrT)}9XCQr<9^#-7C z6yM@C1F{K)ndAEbISX?f<%1kOTInFd$ma%R%F0Z`8f*OIl*<+Ga6ls`w6@MAKQKm8 zj(C>y(v2&Dcfh5KOv#XN5pni$gf*W`Oea;c3U?zK*Ft4>KA&ap>E8pC(uLBlxd z05htOR~}jrke1{ZMe3rKB#bMQOQg`fH%g+(dTwFA^IMO|`TBx}@<%n4CDi0JuHCIr zG+C~>((Gd<*SNK#E@vr%mmXBnHrr1@su4i_LISPgH*3U{fusn*yNlkcy1^E`z|?vw z)P%it04v#5JG?Y~0w{IMRm9q0yO-=S`{3^wQ>?pog5$MEy29Kk&|2$4#k5x|{W-eb z7T?up$hD1EoWB}+L1MbX4ELrUA*qPO4tiI97VIfcGyhD>ueP~N$xL&v8+ru0Q(&Ie z>f`KKXCxCERC?QYfb{`GH0`p`?<=IZ7i2s&<1D1Oome`sLbR`zmDAGI5w6aXXld%x zSQ02ER5!_jLD7P?7#1w~wh0B}^wni%xJ{}p-XOOwI7}kxc@m~B17l<9o#qL%4q`e zqMS1auKN$8=|)1LTcTmz92ujru0@>YJu~K}NE|Te+Uh7xXYvN?lY53figiPCls@p^ z)$Lj{e6#Pvi0LeMrZ0J5jYO5L^FrRN%N&Jd7bQjM-Bt!nQ(RPq-suZ%7D*bRuq}sJ9kiIW3c`$vs3`1@5hixwgu7w$}#g0iL`dz31l+8G)V6z=zxIgArrU z6+IQdHccUs%T2Rs5d$7sI?!c@1~3^bT|u0~Ydsbdm8;CB zE$kx2jAumPRr-Sz9%d|2FmDN&^F{|kKNOn4it6O%SR;(gi8&J=jwP3ZbF8te06Uw0 zpPI6Id_X0BAZTJ&NU7WY5<7XJ+Qm3m3Xv!^tFGn_D${GKf5M`X+BGPOsM}$x&f!w9+FLlJUf!lCreHef z)(Bt<6wC^Pf&dHUY9v14?qcvLlnNhi`8@HgYXEPh^w>RVVK?nGEjKuyo6WJCU`Y6J zs38ep0d}82++|8FJWGn7@LwLQ-4bOj-7WHlx@vo)?UMoKb2SD;jbVX_b+VCnfP@@2 z?5|OGuJ;M|G=It6a2P`r-QxmG$6a(g>Lw<<+8q+8t3BrPh8NMr(biB%$W1 z6n7i7K_Rzm&`(6N%N6{IUw$0Rj*rLE&(KXQ4u?1&bRC8v484!lV=V=j&J00WoY2Dc z8WbY)3_!$-Xm3*_bWj1brVIeUfZS1gr!2+VU6C;t=r+}UQE0>yP;np$E}ZKr#^}S3 zl@>5GA5g8!g7JtSt48Dg@mt=sD66d|ZCF!t8!tYUgY5?s5R{?dek zilQ?B^{$9vp!M@qAF^7e9*TxV8e_YKyZvg79AB=3rhKggU9GUdX02J{a&>zwIW#ip z1c@+Tn1nPDr*M`d$rjG?#L1X!5~m@pMVuug&OpRTYaDU%=uq?BL&RCNu5gC5#+6&8 zFB%0eSp6CWtb!_Mg)#n(sI@Z6HP{NX3t0CrO!8n_@`p!z`d*toTa=7QgY`ZFH0owR z!maGNFoS3+BbNULh738>_N)yU{}l-_E|*Pdwivir=Z)*@Ay=))u^$kujU@__)(A;F zndY`RWbmmgyM{uhE*xd%TL|9C}Oe_%~?{VI`f*3NY zy^qRt^O(rP_^9~K4_r!^L;~a&j&#~C-=OxMNHU`KUW5emY|2A5S-JJn#Tf2Z60*K@ zVKHSsA5~C=wMqnK6lp;58nbubLn9D@$nx8QFAtHe+N083-R#_{X0_(>H**{JR?C=l zfu%N^MmI|7wpMduf)m;G83XB2sQO?TCM4mVlwh>B;34B+(GIkwlKP1QbPNkR z=A&F5B1=4zt_?g0W1k2|u18Sr=w)d->L0p6A(l_7qyeop@C|K>ESMSJ)vCe{**cs< z0Ai?xjgpzHN|?4KhN^UMYj}QVF#>1OUvMEieFBjvZs(mP#@(ILT+)V1TC; zo>AvS1k8SqmrzU^YswfBGD?(V)lr;!PqdYBN76ZSNWErMW%`B5G)IK+7#NuHsf4Uu zv{g8ecS5ZWecs6o3HJX3@))I&mhEA?Ca zgb&bfE`@1Yc?p~&A*&)O6qR>Y{@W)<=-VrgK^Bk16m)AERe8*%JzU#mDH`O!lM#kNX%so5_Blz&Cx2p3P*>D)6+A(X*NCc?F*F zF?u$WP25M|IUl2EGuaCYWHE13GJR3w_T~e3Dxfclxh)^KTLFDh%zN^Idlk?Z#oUt* zJfMKSDCWL=;2{O{MKKTN1D{hsUljA1eBcoU^hGgWR^VYD(6brym;zt)F?u$WJ)yu? ze2kvWWKSyaxR24Znd}D&eACD1*-ZAV0#ExGJ)6m%SKt{Rqh~YO1XgAGoR877ne1(f zdBMl%*-Un)V)pWnnyqIu+1(1<=4141Cc9UG_xKn+o5>zf;2s~NXEWJD3f$*o^lT>k zoB|K}7(JWGK9i5}^0vuhxE0Ea2G3pd(nH)U6pOTGiRU_bj{IZ&KfVLxxe4NzhlR<6 z4l|}&hi_fn>DealIkuT&wTEQjZo)}x6}7yrXv^*9xFbwqys)hf?Z(6bU}orSTuI{L z@m#a6aH9w$IakEsq->HwP418&bs~&6G-W2Z@DHFt#F{Qd5vM45jq2KX4}*8d7U^1b znZME|&>SHa*>}3(oQHukujwYJ%Nrz_$x6c%$0vCazjM8VDYT6q5?d64mnblsH#2-? zY;o$YNm3@sVC(XV@~KugC!b)~j4qkE3pR6qU@fa7S-K*~fXAY%zZbFois?5rDj+}r zC{fd06SmwnoasW0+%=JN*F;Ts4fV;H8F`j!DVRabavHHNKf=aBc@=Th;o!vidr;pZxa}gZ?u zx4&o7-HVlZCe4E9zD0E!6_{r-5+s^*BY)&QlOhsmB=Q!yd~4=BM6SyrYwxmtbDl|{ zN8ibNCjY)*J8U zVNniVr!Rq1qz{eAY+CtQY*bMU`VtFqrP^8N8*|DyR6bp%JLXHbGOcu>$VNLDknc%8 zJ~`MRRj+u-lVnZ;H^&H(WIgJj&QRcaj%m!(tIZB*FsMq!LEvG6#JZxYF7Q<<;ZH*Q zfR}|$PSZL5pjeH{Xg|jv^l7F_s9jG`gN6dcs*bX%^boMs+sejuYrh4pKvQycippsG zL8*-Lb>Q@LRHiA4$y7!~l&x{$s7#rEeN+~$r5;abu1b2&HK$2yp=gaG?Cx*&fnFUA zO`j~`nO#Eh`S>JDy?fnW32 zv>N5dxUetlV;Xwr=t_qHIo{0?^218-jG)$1@4 z+Gf>eKG?1(4H)mzQ(RMxGR<15N75yH87LXfH)OsT>L7K~o5EC5Chp~MNB)cDd&i7J z;xQfiUi;^8K!eLym$md_KB>{^ji5#2o#Cc6RzlxTLTBj6+M!M@JQ9DjthbRz z&a0xh1r9yuRG3UDn6>yw=O*ERrk$Xg15Yc|o0AQk4Zr$Fjv1qcvr-ccfq0_lVLkwf>+^z9XG&>e2{6-klP&pIRCVg@ArV1A-#O zyG(p)Qx3~D?Kn%&g(Hq@%k0d=TSB)#yLEn|3Y;S!p!l6l;Mzz__X31)O@ux~ZoR}O zy!w{Mh0%Nq7j&?20o_@?X>lPvKaUI5orM#3MBTKw5YB81l!^xF87?puo8Wr2&6anp zhby>&Y2%ZQf+_kLdj^=^P5T38M^}~^GqPEl8ecse)-(0n9Z^$}Epi$m!#sUJZVCNE ze=zZ?RYd`O_SyR%)fyb?d!9Gq#0|8}*kWu`TGgWLB&29<#OZ@fbTfw<;cT}l*`8pI zTw0x@&i1E60~XW#XudYsZR*KmO7j$CwA>w!q?+~jJEvkP7Ud77=5 z-oX5@RkB~2vSr;-bqy30#0^R zk8yzA?FV;|zB5dMxeVN(y0+P)3=~SuR^J6s?xXbW9GnxOR^P$Q?1Nv3b`Jqt!~Elz z&20=dXrdrjkb{eDIi}Qs zG2^S0CC)RKpCWyp)G=pHpft)AWCR40d83Q;ZP+Ndot6j3eVTpAIj&w5?ypY(NCP|y5dTd7p(qJwbg#m(j9!PLD z+s zEH0R1qxzIToo+3<1YK?dR?PV8Vk>ZGmZ{*%^Fb3AT;qf;AY|;Q{kI5yZ2u`)cfBOk zagkIPikdsTUX#g^Yj$REMu-L4ZF65VQG|;0k(`A_R9F+4SO~&p)Z7n{Ayj=JoF%}B zvxB32B^2i+0IuVNZQUB=E2aoEb5Ol`B-#Rkb3_NVIIala)SM4lDF`vzBTEplIe1>D_7sK&cT9`7gQ|NfZ2J zD%isBe$Z-+(3!LceG&3ZO))en6GKcUJ|xoZ=ytQv9HC!>66T3SgiAX3gxkr;yGEjQ zw2brC2r)&K@kJMrK&R7()J-cjPIwsWg=TW~Y2G*$^sUOruHfbxFeXfo5#&Vd?Xdoz?FgSTTv#LJ#|?CbDat`e4JM zrK22L_G>Oxx`_-e$9v_6hk#y$(jwMEy-iKRLfKX$DMT8BxdbmknPDxeMxBF<=f5e{ z#F(LA${lb0*;e1t^x9uIS8eSt?Wr%1;mAY;PRO=B0p`T0?g}J0v7EZ!{a(2$RiA_x=wMw~p-B^Er>Erp;UX5HERV45SL^fPaT;O;ZqHT@#*DRiZ> zNtja5KCWJHSeF2$>edw5}N)+1EFt}t4w^Q0uq ziPE0Ouq%{)D25W!O{_%q2Kk(H->nn@_sm1#JQN1xFBBb4jTT56;J*0a{OZ5P5&NIC zGu?9)tIT`d5i5oc0N)P_Z&k-mslZ{uF?~qIaT=~IDN#J)H#94<;96gu|TlR#$DDZ?<+xtJlg5_g2dP&mm}1N_>X$E~zxi>Z=_vMa`xGfQu#R8mMV%yj$XyNDy zr`-v5-5o+-VrHXEHT64DPXSvvB&BGE+UBHpJB;x@&(#6DbzFXiBdufNwYV|06E5@{ zMNChU!UEFOjfh04+7P$i*qC6uXJTz~U}{*r5Z?i~lN&8o2qU#{BT^Ujx0+mB1OsnDqekUO}q)Y%e$zTRqZ(C~b}TA9gA z>1ep>S)J^Rk-BcOfOm6PvAMli3~ylkft*!fE6 zW-JkdJ>WQDFS_YXth(nUkEDq*a7?bU;H%`BRmtmqReFWFNC~La z{$7qEDl8#XW1Q0kH|ycTbq2={AV}9THhM@AU`ui%jN>k4(Lf4(N=(t&ZlS{HXlG28mRY56F_Vh!ddO_1O z;EX(+%${*Q2iMgahghBg@F>1Ej|U%RR>=}FzV@r~r7yn}PI02}A`Og5E|jRf_&h|9 zp#9m8xYyeK5ia{ASi#q@_IOl%q~(^i;}dL zVz1_Q7zXO~%yI&Y_f3~-q8PU4C0%-gv(BLfjxa!cn7%hrFrhCxk>GOVqDPIE@SihU z+Qr&5ry+TpZP*ez5WuxAFeGN-d`AqZdfAwE=3^?7S0=A{pCEkRPw*oIOI~=TVkD+~ zI|QUSXhhmRMCle(qw?$MQZ_zh@CgoEzJmog)+L3{0RUHLK--x!fXCR&fY73m77*0f z0z%ybdfPScGj9h}YS>{^7c`f#E_u6itvBy|P?P2IYU3ApEEOGYfPxO!1rOT!l0bpn zC0Iy**H-iJYDB~m+t7UG@~7BlJP|Vs)6}Y5iPp+iiGeRsPAp%dP7Sm?Dv|vMHrzGp zS#&;!a|-Mj!*~qCg;XBNG!Qa467tnP86iQvN-rH%;@>tdLv}%PEc4BI zIivK!y&C3rkT5`F1(ILXVr7}P-<)7cT>VqeHe~kU`gFZRwSu^g=re^RN)v4!Ycd;F z=XgTw3h2`avXN`XTZx%%7MqzEPcjp+4h0C7BG?1+rje-O-LeWPD`yo_9VF*EZvX1M zQTlS$CKU?+au(~9Aj_d;rqX3ho8I)fkH7n;|Mb0QW>+UlHf5SVhZsxI6*6pknrC)< zV8-z!PQd2;>;3;?eJUU(ze#qm@l8}KIaJf15Z3dDdV&eirqlWmmvuhKFP2U)8I7;^ zWE0z}j&Hhp$X4UQe#5jnhSwEWAV0_|CJBiU&&YN8_LylHOCQAS)R-c%wy`Ll4Gnay z6|1y3jx}l`t^Y@L!oNfPrY9)ISA4v(MifYme^#U|QF^?s(@G!8DmVhQ!f6_EE{XP} zV*#8FnVAd=Trxn1qHroMwqQI$Ym#mp-9aN0cExdk5heW@8Xf7}B(?ZWi0-iuj$YWlnHW`-h&j?+<;jI*{(Za6}Ok&+`7{ zH5cl2qGKTa;FzVKxOw$J`j_`zK_Ua~*;`hl`%_11_OI(|%;1r0(r8aw9(8Vx$AZ0G zFf?%=@ei1z6R1wq!(@`OCg<@GmUTj8naa#hJlciyc_gGV*in3R0@09_sj3v;WIUMRdk)H9Ig^C*y@y94HIb zqw-6s6xt8nhDoRT7yi+vBR{5;rn6uw>1|-&odu&=1q<0ZG2C8-J08K|PKjUyIqf}geik>0 zWVJn~DP#J>DRL3{mg+gIao6B7Kv#^eZ;H}r*f#(`X&RU z#+!4D%z}=c?nmzyr2fASzhqNefXEHcP^ecAXp+%^TzlCJw(u)OF$*WQ4^B=j2FxUP z@sU||P8G`PoDE>ml>^0Nta|mK0eMLf7gKj0p(stB@B$fn&8vnJI!R4=RoKOMyA6ql+Z$CGOMj`uw9STLI2bo1WIfUa9`Gwu~dRwhT{c_P(y zrkskN>x>*$zS%ULHiZaN=|gw~-FyQfF=8IlTU4)`fzBgQ3JUsxp>c;v7?X0a{Awgz zmo%FJj@jG2LF{pZRwywLTo-_L^nIqBuVbd9rATk$JX^t9)}$cc!%sr#%9%cWt1tcTHkMz*MxG@Z@`Q1~xY8(-NuQCZp6==j_{>eJmt7tcl(Zn2 zh~&)D$sGHDazU^!%)-C0@GqL-pNCbjXUF_A0Pt{%i8D~Ow2R?cGnWKPhS~ct^<2yo zw?B$}NsAm;Cobgrr-oxP*;Oee zyDCLl?Wz=M=DI4yo$=W6FO%H-%a(iu4a&I%fz5h`LdiG*#Xw!M6Lc6Qued`Mm|%;H zreTd@#mZ?Atb75Cl$+sGZRh6o8D1q__5O73{hPes=f6MB`|o>^QCt-vAksVUkjUuf zjme9PD7>iq>{mt%170PXx7(Y9$7XxeA#Sg>w-b1~)ZR4Tae)q;+rRD%Ce>~8CJt)T zr;F^9E6%~?G;NE`bqO#8>-O!t9#4cA-bVvG^)9c&04Hg{9szXKMWjZ6cKM+S3OC z-ow3?ZKB?Kzv0dG%DSh6iFzCVa^q7tmVW82n5QhV(Gr_DEe#}m^eUuMe&d9 zJ@Y{E?TVlHFW*=^@lnWs*ZviBSb{Hq>fRF%lwyXZxc5E3fBUf{k@YiON%SChhtSCX z=ax@@`$#2ZCTW@)xi*QW-0Szj+`&r0SEu0}^HM=HEPGo9`MS!4xv`R6@U8Pu* zzETdrpicceCeztCAD8I0geQXUr4KciDg_6v*ImH8L{Ua?jC4F zKcX&ORfjW869QS;Ms$fbgGp#}e0;(K_XXJ*f<=BR&2>iJt5SVBY&sy^+#jk-2YEH| zZ?@#n@EtH!9eC(xZUa+Omlnb_y=6vl5SgS1sP$^o=?0ou1bYQn% zW|vPe(~`IL4EW?({$}mj2lfn9anaBWTYY%7YowbUp(q+DJ@A)WwEr-YhCGv89e%wF zeIXA~_4|{N3CfkjF#3NMK3}GN5YwS_IrOhdQwVt7g#OTH`6O!(-{&}qZ zL9SHym05&u9F)BBgw*L{nPK6D$kKvs31YlRlG=%ljQZU&7v=U%>>|imUvycCtQDpP zY&k{(FOUR@B|%_gHeE$uH|0c>mmpDIf?x(V#Yq=gBtbMifds+ZiUeV?NWiGhm1fBp z+**u}1kqxA4QBQ#2f$^E>Sf%&X*cr?9s*bq;y|V#s`-Mz>}Bz%a*FBdKbn!vN6nK) zT9P5X#3qetz8a5CpFYAH|6sD>NZ5?I6<7Pf!$%VvW&zoH3YoL zAESAdw9LE^qkqKwF}rtwQRk02KxDSQdD@bQ-LM9D!}hu_I{C94!87KGsjqnQlV zJ?XxiUMTP8)t)=jn0VkC?*{+ufpP0$ zye0YqY1p%YedH%G|2H)sz?pYvGC(LmXYjxeXqw?*onqJn56TX;S@uKV3@Kt4)tWO% zWP&uc+=d!cCpA!1F@vQ!NP_$zVH%)0F6h48AR&teNxnIz*-b7@!%z}109I+0*71ev zg#n|VjX@?^@yDg16L>r_aVJrUeu3c8Vj*pZrpL6*1xcHwk?*zYPE4O>mE06>b*2P3 zNew(NR-EkTF=wcns#nt;jMXfZ>`se&swWZW=Fw{FcooR-jL9I+-CO-?Ih-k99QI@T z31CR`WAqNz=bU;+S_e8)@ai+s8R|2Hia?#mh*rOW^c@^=7r1$6VZ3V==(Lr0k>93c z_OqL>RhEKx^0ZMjP97FAxJz)$a`Lo|bSb5~1ecWN+0pg5BPimL^X#<2rR3RBLU##n zx#iv=kGXd&&j?;#r!mPBt;=v(L4wnl(Oi278g&09?T-JjEF_M?01)|5N!k|%?C^z0 z@&W6N=|I|TEFYHV+X%=H;WYtA263CWA;PxX!x8}a@#y)!qShao8djQ=rvTl}Z9X=`8jbDIvi;aE4LJz#Rhd-s@<2A32awm62T{bZW63jac9C|xdBPxBi!g#jV^KKn z;zFW!Q%;jku_CJq_N9pjRaJ$->8obzz7scZz%HKP{Z|^-rSxPto}VMF)yp=jF`&dH z0(|WZ4*I7<(+prslb3vF?AUFmp>-v%1%$gO1FlJjhg}?FMn9xsm!+^&@DtbJ@)R2% z2!sXtF%)t7At=TSXjssyyy?MY9>or3P`?RsjUF>kzFLgR9FYzna%C_cb>BVOE3#<=Ba=>c z(|gPhw1G2Y264s^ATaeX)Zi8opw`OQ$btaeAiEibH?C)rgR&XzoKP+_k;9IzqJC4% zvN^F%Vl*X2O1$N0Q~pqJFItvaAEGb5@O&FG|>q73i!}fLzD*rEI=ZSZ^6*KCH z7*4>=EwM6Ver@PvzND+TF6e6K2AAx$8NIQy14s+vwNlp7C*@Vq`ixTA$;u*;lFyyX zB7M$h$pFy+7F~ux5NJxQoX%vq8GRL9NKXZqjPUQ;jU%0%GD-_fX1UmI>Nh!;-oYFd zxQG#F0(&DP*H>cGRm_0XJ^RO8)LC2?JIv?`8Wzp(PVc?({LVI4&%HNZ(rMnSa(cY0 zu|saPGMl8+q4Os}X2}XxnGL`U4*3_Xu@>e1d94p{XDAU4r)CK0;&t?>jz%d|tLq{U zT-fYE@gcW3C#|ylP&15dD%z2>pJ{Kb)G4}en(%O3%iJ%}jM-tN#xM)2T3x(^EVjDX zHnwA>p}5J23#z|cfSt*=Q?R|SywJfSX9uJ<9!M!G7*&@&RkH|G8xXQibx*K0mA(*T z48R@fvo}A=Fk-HCE@K1BhD*~}7+SVov}=4OClZm#Y!Z=SX<uOI=E%IU8v?HG{M9ijy{-VQCgC355cW1zjq5oLe}LBWDHzEi3>#8snaAEqx^dL}B3dDQbIFkUA)-_?H+a-~@X zg3`R`2nVglPlF5r2p6{@vS4e2tMfo4+CuugHW|wK=oJRDbu>~Lf1vu4QT5TNd3Z>G zDKYK3Ube8?Tv_bb^=8A|+h8W6e+}-WXXzh&*PJjW5mo5w{qEC6uNpBU|yPKNCi5xIE+$;+t zTBKsD{cd^dqtKLA`ypkxq$Cfm{PfyV_#V=bA6-Vp+IdD+z)gHl8RYpqra21$(5Xu0 zkpgaQnGEtP`Q+2#i(AQu56i7-o3v#THm;R?cmSJQCV8V#TH}H8sFi#e4O+<;P?W9B zq7``SvC(rt`$^#DiapxmSL|_No)9ki=_H(Oj}$7qg2*AW?yjota%XK}v}>lXw6(Cd)ueB=bP!v>F zFSlwSEI{% zxD9zIEZsnom^t%(`)1z4ezP!pE!|Mpd{MYAd0V}5LtWESvEEBJys2JXm)!cMI;%Ko z4t8VvRi7ZXas$cRuJ{CTEbU9)w)ahMLL?P#P)lxj)0^0IQvIBkA4g!68PJ)s_ye;` zCgX+mA}%HgyGq~(xd+On6ZvTwFpZ4nh9Xm+O={!G6{c`aVkc3nIT-D>8#MKcI!%aj za%(zAla%r_%SlbIrJ!y=Ur~NVS*lNyfNgukCeZg2?ynVswe6-0r>^jf8(39qG+OE4 zuPd~S%5#9!(hTtC(do7l8WN$A;^5YeupQsV7B#7jtZkBs!0)k-gk>1y#3MoVuG4n) zZXIZhZ5r&~))?#G*%%)j9BJ$xZ;XzO?&=-e-q$LrvARI z+k1zG8iTxT864g^pnRiay*qa`hWd65_YaM2RoceLuHKQc>o;W|he!GvBYPSnqy57} zTZhTNb&NO47-{V3*T?OR{%f|6jgD;XQ|$s`Xsf|AJU-@YoK&zc%Qax6G1z;3V}!;G z4PQIh=)0z|voSO_Jkozn|4{GXCYNYzq<3hv*XjiVLc9+3HLgq z-)L_iu#JxP5AEq4?C(piq-9H%u1-!qIa!zl^{^&B8Z6^k;F(Xga(Qy{1$?jN;(G@{ zRZq|8*hv4-H9b9-+jHyi=+0|VLfxi39E=XfMuW+~2?oGq(!UGHfBR#NO59vW?&H93uM@p(ggCVzj4 zRc@iLN3QSbS!d5Fb!G5499%({Lsu_XW19f;Vh!!-IY5&kYk_E}zRZoZDTr&9)!4af zjHKu3anQzG*4WzU-y@oMS$Ww^muy+pyJgLmzAe4ITN|skE*|XPGQyZzZ0u_>%z3fnV2egZgWyNST5ut- zY-VxfS)$#{7$ zlA&*OtQCOW`!ub1{{b{NfuOW&`;m$xz1ME?8HPt-hu8K}98$Cy>4ET%t7#)yw+=RX zM}TiS<0W-Roj#!xWgmpF_ z=;^pp3%cmH5AZvKpOdCdogr9G{7k+}-sw;MFWGn)zr*?Ezt1Lo1ivHsT{+aG-A3QW zp~35u(eYiv@pXbdKKg)N^N&p9@LLLFB!R9N;Km%6QWp-jC+@EAXb^$FwKUPc+009dMsbTY3k3Q3x}w z%m+<5-Qc;lS5F5Sv70io$D@K|l+6je6PCI8ypfU3 ziLsyH7}6*Fly5G-@gZrKL&VZuLt~KEf@ExaW2BMv@*5h?B4CZdf~up($WLtk@5YU3XeAjr&=(TTr*I@rvctkTr5Zvd>&(dTP165qw<7n@g z<64c;#vU}`QEBp*HFgbNzYz-87#ZIRGDl59^bTIzd;RF;<6Gb!#%r$W9c6Uy>>nFZ zj!nZuPR~Dp`s@_<11Qn+XovnZ?vCXrIzFCX{(C~Wi(h@p_g4@;f!~Q!zMn++WPbCf zd_RTosr*ix@_hkeY@%S%lSEPfhj*OfuIg*qj3g^aE_X?A-G%+jQk6_B`)g z7xaN3ct_3A$NPD9f|pjE>*Ryj&xtUMkOx)$WA-vOay@yTAg}b$r+A8vo02`}uJGzZ z@B(S18^p6}fpnHEOuf@7>Q)Q#)}Hjvw*HZw!TID>JsWw7hd7)ID35)gZjgBC#(Q|G zZJ9iO5iSkDnPgxei2ajpiaFP;r>Vzfjvv^Fc^tfXnhk0A^I^`{agu+Y1J7`B)Jv0` zF*o83VJBe-A#E3rkB%&+w|WN`Z>5Ui#cmX1UdXVx2F-eW%c8BrI~Oi#Y~8wY>6$ft zTh=tTu3oxqab|s?o%StUvS{g|C6)z=Ds555$RIGimNrTDN^WQ2yQYLcHYNPSDPhe! z=kp&oCA?}%_*GNF15?7c`tSzo$>hi@d6%B^Z$*xL_VCGai$$*}vBz=g*6ejDF49xf-C>>NhN z8pGLuqSi=^W#Z4iW}s(zq#}vUUg_0k6a76&u$^>LYd3g@Dh7+B_w@;m;@+JNr1_%c za%TY2Zziiody;OXdtb5y-ED&WQo*wPqy5)F0OOFww&9VTyXpg8m*;DEs$T_%Pc5S# zs~eR}iL=bacg(4o+MeZ;x}$vkz7I3?>|D}0MGJGfMY;RYU&hFt$J>boT+2@DYC4uL zHzn+{>D2eK~|TdWviKtf{nFIQmzk&3WX{)8?-6EtqTxdRaz+LGU`#h^1uo zIhB4Vh(8eh-byzJXj12cA&+}cmHj+aO6&4lL<~mgj&@oXE3QfO^ zRO&=Yf)hw1*T?BRWvaNeFflXYnI#%dEb*npt3R`JNIqm9zN)?!yw~~qJb&$j=K$iB zSFB$RoOmoTktojjTvhpdNPiM#W;C?Daa}X^i^NG)&EllMC!@HidYZ0>GZDRGi{D%Y2Diy~ zA)e%82Zm1Emh`_~H^*ZH?|!SLlEIP>fT zlgi&h`3~JaxkGMika*;|fd&Mm&%?Ksa2|h3k&lOrg3GrLUcP8%9QoaWH zOoC^G?Z#d<_=26s)ojY(jXXtv`95yJGt~D|`3D;7Fmn}?<}0>QPo{!j!#k==(9f^; zrA?&-4+4AMU8%m&pZJm5^bg?q34VXW@4xZ;8o#gb%gM*-^)JT-`n-abU@vVQA9O=# z*z>BFu0J@5y|8=Hl4ahCa@9G$`o-fNUllFNB+Y0fxpq5>aT5~!EVz<)jpJb---ctL zsS9TLKj`!G$hUVteIQHU4$`DI=EEoC!d2o=$%W?=mg_%Dzhp|h!s0(!{E8{@3eV5Q zFDESZJ4@d~IA8t+gf+#L#a~ERW9%K z68}G^#Q%6o{Bu*{|8+|I&!@!42Z&`Jv}(s4eEMagAa$VSp@7i7&;kt|WWUXzT1W=jJW-7gpb zC6{+}QF6s_!tDJRJ{HStEgTye#-41zycrFY0qbt4*}D?WKB`e8xKXxYv8ZrcUcf9s zzZTGSC093+?EobAQDYGAYQxG!Hkbvi}YQ))I< zY-zTS@9Z5SLoU9Lc-7+<`CTzQY&347TST(GcNY^EP=S!o|Gf;IYv@ty*sCsHw3qy= z$)Dk*0+W&6k%dq6VL$v^o~hO#JyaFJ)6{W#uFSK2nWmQ;_f3|@&0}FT+&6>|4?2 z8~KS|^+!`oPUY$MO?-PZzZ>{nne$rj)-pkJBQW)Onv+AB&niDf`8ncL7p`;WV7519 z@1!0+!>{KtrDl6rEUdXMXW{=#9DG=F6dUcui>S2&W)dyat-xKzV6{E-_5Q5`97ZN z(~s~h^ZXc3>DyAap5a}6;q|ZJd7nmOw6f5}d7aIHM%vkYSG$kqDgD7WqWOI}-&M~= zJoUHEnL&)$Z8%UFk9-&YUpimJ_te)|xMLK7qd9gAwiS!IokfdBZ0B&FGuWu(koM%Z z-oa6X_#iOJpYkn!rWd~C>9_;K*4J3fa>LQBy}O()T3J*Jwou=R{A9mm;bpv^!cTvP zg#Qw7AV*hv`8gXlXo6oWw-JQim-cDuIF@pjZvn%)We^ z*_TfroofvQHhE$t%b^ip=a+?V;(YO~v3?2ry49f?t)R5&AT)%&7M zHyuZ!%H3)I*n~whN?y1u8OF^PRE;d?s0-gLYz5)7=sdr;)hR43>Hrd()}UU4*R`^h z8a>N6UxP_CklUMV9vc~NpzLq9@xqIghh(#6L^dC+7HPfBGEQD_GE2!UJ6IhRj} zy|#tdWd6D5ba#Ju;@#)2U%&p8U$%I_I{EdJOP7u}src2d_;rUaUZwS@w2kZ4+bEiu zGkY@Xriu1FI!#XIX^jG=EmceO7U4%ku^pT`phaL)2*rqg^!lA!NKLnF+a{Z0Q4l=1 z)JeZbc#5O_1y4!Y^D<&&Z%0O><`d~nRxaGqFI{|Ruh!j+EDD|`&uQez$V+bbgz%hY zZf0d_*$4KBIXaa_Z~hhe?)e|@%S#sm2XWSo0-r3pKjSA)U03}TC!BcF$@5P+^|S>G zyO%6owtU6PRjb#mP1l`s?s@CazhJ{FFTCjDOD=uYWtU%Zq+uH~nh)Pg|^QZwLJgIPtMiER`#5?bVKb`#NXLtj#*?@YzQk>2e)4=jdbR&O7$F z;}h%2eZDLAEd()2;d*r6KKiuh^fUJDJM*lwUB-WZ{~F|uJZZ|Az5$c))4~pTaS8I+ z$>`h>&A&ek>KDd1?>l&t+OaTd|epm8I0qg0ttbTs}AZV3tdk?Ejw$goeYiCr*U~Zj&U9L8miJWB%4d>=PxpD7?r3vH zuxR5Tb07Co=Bbo12MT*)c`dk`->dn};r9fZ;bs|eXrliw>Ex$akg(Q+cU-l>Gd!uX z`80cFb1OXOEVoV|OZU>%SLY{KvPf>hrRKY6+RrSRV1X2>_%2+eTZ7fqDQ)%{oGtQA z-O4YU(|IfJZ{zp&+_!h|jyKk}^0?h?Q@8RYn{gX7{8k=sr((MIZ^NyI9c|Sn+lPk- z+$2J;`=U(?#538{7yJyEG+&bKfn@EmwZXC~As(33XS;PYvgk!GS$I8&)|_J&KA-S$ zgm2>~Kb8DZxAS`!zpR~i@O~#h`2ZAu7e9^ee42L?evkjAH2S@l-~0IeHopwk*4&-; zD(-1$8y`-YUNDZcz%L>oeX!QeMLq4?p}A4{y?W(3XHBI|x!CfnL+&%(zv^u}$K<5i zL>=M*S5mgd@Q=RmpHJC8F)(`9$|=d{_Th1MLSa~+ai*A7G9MSh=H9W*30q#F8JTX^ z*~c$Xw){#D@RVQuojgU`xA9b6?}zv`XRw}$A}!%D&!nxa3WB@&p5aiO(1sn){P*AS zVIEel`YIp)fhpm82!D{@hxqBw+l1FgV1SNJZrSvwQA zD#<*-xm1H%t2BM8em|Mt$I%CVxmnAi_T#`gKC(GLn__a4P~Prd6r8fo@rqw!jP;DA z&U>|qyy}DOdB0)8;qRloyYa*10aJ4)pS&P>k5B(zo-y%RIj)ykXCg+nMeDIx4s1R! zC<218Sw)3iLcRpSLzKZIc#Nm`i0aPz_yOKGa=l2Kv68dv*7kCEZJwELpl_ z*^=c;RxDY$WYv<@OV%vyUbH0>B^<6mabm9W?A>LCCipBTefWZvK7l# zE?c#1^|Cd~yO%FnzI6Gr<;$0^SiW-ks^zPfuUXN(0*1X}*^1>WR;*aLV%3V(E7q*+ zUb$rD(v{0rE?>D~<;s<-R<2&TW>xp9C99UQmwfrE6{}XRTD5BRsx_;-S1(z;boH{; z%U7>hy>j)c)vH&pSp$e`sD2GauOZtSKJ{wzp)CvChHp}naHnp?>6o0AELp?2_3i#1 zgd~2H$Jr+cf0Ey)_)UvC@1cGCT!*_`8MNZPS@?FslE3@q9YrGH-)-#Nx_t!P*Uoc& z`&!Zp2DU#k=$uc{k(?Gmi8x)1CL65?eR8T+vX(ML2bb}zH_OnL16RUczH8KE@h-oM zYc0w)N+*-8&<^e+kKq42Pw}?!fAe3E{?6@>2GwQJLI2_@e+B&osqXu#e&LAME?Ttc z_2zo>m}N9i8u`NMX67!|yS2?f;3*swpc6EY|rWEt>5s4|n);a4GK5e-AwXb^v z8&7Y)>tkg3^S}7c)8BixbJlqq`Wh2^|M1~I{ledTe&8lb^crPaZzG%(K^> zcjsM~Uo-yYzj*BHPyF5Yf3Yt}Hq~$bPT}TrD{~8_SvNg6W8x2r$G6=yH$J)&78Vzl z7s?zATq@6MzjWqdvaa-Z$ z-#)r}#M|CeTwFZ89L<>1Hu0zRv5twqJ*J~Lv9CDsosOS;FkaPm)9YqWe6BL_SH<=@ zr^oH3)s^*?j?!55xcD`N-)Nh-WzM|zBik-2OuVD?2lsUxRao-j!cBjFQn{m8oVdSs z(@)D`a%zd#+Y1wa8qbYqb_S&|q;XNPT#hQ0wy3>Wjb;>T;jHMe;^DJqhet$5MMrne zD;`@pA>2_Ih&~lR9DObNdh~e5-?aU0^o{86!zYVRMc*&{Ao^kQY~lF`LJd1kKK-mq zHs0}}5B=^N-}&zMedG^6f9t19<+hb)o^{nfJ@)m&>^Un}U3K-1AOGa1{_~0_4}0s| z-}Rv;C5jL)+1S^3-5-5+?!0oPy*m4-m1}w)_}CMF*S6};yB;XFpMKW1{yTnac+(et z_@mcsdG3XMzw?1bi%*_^9`G>z)s&*W4Y|q)}z3Tpte&w(4EgyYM z{lv4*{{AyR+V|&QDkQHs@ud07R`*=+%8M?&9QQj!w|Q%0+ra2`Z@%#z_kH|R4?XhO zCqFeb{O&i@-&l+b3*&8ZxOmaT&Bw+|X3i^|&~{w$wBosi8K+KsymUh0gu?vF^6Dk$ z+_b9g$o9&d)6ZKIZ>_X-AIZ&}bBp2H)rAX-iwo`Lw({EK8YjDi|wUXmBL~z zE>662%W)S}+9&RRL;bvJd#UsAo>KeD1%;y~{`ic(%R4S;YhQof+zTp~cW$_;yuSU| z`1}p4;u)3p(wcJnO)HO{_-r_HY3D5;*fw6B_~JV*+S<8y@f}~k`TP(6@y%<>rxspU zI;nkq`~2eJH$U{+#)XA79)5Q28x|=TeJ7eOX+ea(Aj#xkOJF`2kZaaG7tv8(?zh&LbBlcc;{KQkIP5jNm_?SX;)7s-_ z^%TRsPfq;HDHj#m3(+mJ&b{c&iT`p&DJ)!BoVz@_X~u#=U&mGL6Q5jtZ0CYP8+2cq z_?=sxpwXT2SjTUa8AUTY3ae?%{7U_jo37|MA}+?|wqxUJvDDsPs=!qz{_4c`y`=*( zY|pqiX(xu`+3&sBZA;gBk@@_x@YTFao@L?7ct4AumaEB*HM^y0z%Z5B-?wRe*QT*y zGg>yGZA{jY9wM)l>01g(a9442@cP5=4GudhIld#=eEg3V+$2dwXgwWi=wdbitxC(udVj9wS{vEVHYnX5`?p(BVi|`rtC^sj@zT-!qdsyLC*OU zPpNcXSSUwTD^(y-X{7MHXbtdXwHzB>5EhuK3ByYGDvrYMsB8(Nwrc5>(Ok+4!&Ngv zYAja66WYRUg|Gxr(a}*Mt`#`7J1T{Eg5n@PHad>~)^bQ;C5)r28J<)*y1FRtrfpGla(E7ykGKw{5-tvx zQ7R|(((Y5EO87&eEku#3vFn{uz8k)`7{s))Fh4GYT#Q}_qW4#q6y6xFoOueZY>$^v zVmUlBKA{*^&f<*FY7SPjD?!x`nc_-7S0BMwGB zMln`KexON$U{hFuDVEWeg@HYnogty&0|U5C2Wpdn+IBF^4D4Gz1NL=Ud+t4V{xBC9$UY|&?^JkBe1sVZ#o6~|fHYA_%6pHeyfOqP z!o33w!z7ZvJeZgiEiwXt7=uEm5q~ij`+bokX-4V?|3_toZ2X z`}?iE&pvnV++iTFj-n|3XuN4xa`)Zw-TE8t zO7FI`exh9s{^~cj|5GF@pX0lBMbWOdy|*G(@2*`<%egD^lGJF0B4uM_c^U7El2NS` z$@DJunA|0Z8h78tzbN^UWGdZ#>-!qlzx%d*`=f@^tsCEc-M-z|-xxLZ)aL0s_T9XH zcNFV!%wFDd+xvD83*T|W^|wYzS@qW4ckcJ9-Rp0>ao=_CyME8jH(pPDYi`=|sBqh@ zH{ZaUzqdPzRMX4e^xj*pzqQKi-Ld-TQX$yZJru_fBSp+52|i03`da z+xy;kFYJDQ)KN>5yKnsZH^2E!-!M{VLz(&R>-XPq)5xpFjl19d-f#EObZ&p|?tSmS z?uMJLzxh_+{cQ4?q`|*<WOq- zfINdhWejlUEruK$)2+Cb#w|vZDj!hD=6`fX(Kv22(zK~Jjdf8w9@FbgEj9h0o&|vY z<24ZZKk6rHBBpRVT|cGP7)_EjH%vu>g>fX*>m&(Ds%_N!Bt0X^TJhfa=lHKd?sW6a z^zOJga9}a&+#MB5<$$ zx81Qj+P_YDd#}G?VfTKx;fCEeL-FsOtYz{ldSAWN{+n;vecOBYN8hpj=3Dpg-uIsC zZ`dtDyW{5DZoO`MbR=$Hzh}>FHwdzi#^X2cuAV*?_xA0+{k=Eu+kMA%jBMfNTfd#s z)AhW4->z!)Oc;_u-nNg-@$0UGzplS-_pLXkap$`0ZrXkQ-s|3d{T;j0WbAt#`J3N({^yg~PsH!}RPurz&)-qZ{aF0N@mpuN|1W><|9bb&B%|N-dG*K5Dkm&U3+b6 zK3UZ)p0H%7{dAQ-n_M08o~`nVnIWNkSVs<`{dtZo)xSu9F%K!4@ z!f3XLZ--7uZ5gD+g$t7zqBluJFxkaPHjydSRSF`Cd%qv^*q)z@wxv-K^;6}h#hVt2 zm*d-uv2PK@6_Y9*htf%rtLs0GDYkXt;klRN5A`z#K%M4vFW5=;>3{3nDE19+-`9=O z9o}04-R9X`G&epM^`1-eWJ@|T7rm>SD%Be_hRuFpkmZf5yA%OH?~+#A)jdfpSQEgM8Bb*HbZIb6h?DE?tNEmb3r;Iou@lN zLCkbd2)?-w9+1Y_mPDEme>@)RQA5ca%m^cjH3$iUoT*i6V%`U4c+lGpkmMTU@xPWa zUOF7&r6(C-IyyogU*QOUC8=gHg++u+j4-%+E?a_*Q4E^Luo-y1%O3rd9s=kfcjqQyWDn_QU2WVA2 zgw{Zq6Ux8n#7!~7k+>8!+r@k(LzKuI{S`NEH#V^`@bnFXwD?T4F!{zTZpuVE>AyzY zWO!*YSeWc!l!bo{qg)M7k|wY{Xc5=0w;+e>}M{?j0Z#@N%34XKWHJL22JOPhB~1exIogBUPz4% z8pQ=yWXf-VP*Qp8!YG5jGmMX-rExSmMT9KNis+Ik<|%I}WtyZZIMclBVF|DG8xmvI zkf9uEv4h8;B;X zF-c0JbAUygToRRZE(G2w-Ev{{e#kkQ6^;^Q_h=s;Syg(-bY4 zqOq$WmFHq35}ppnFxo~@1Ss5+NGpL{FyG)0bj2_3I=nt8~Uu^Xr6-JscAM{#$^n;60(dfN}?jTn1AP|dtJPE%9is?^?L=GbSQF7VD z8NyL$;h8 zcco6&2hcR?U4zWHSLp*4?mmAmr0s2#Icb535~7QyKDj`3sZVI3}hVJy3_^2XS;T5EHWqF`el|C~l@1 z@gsdmrHE~3lY8PmHbj41=|i!MG7|U2&b{}>eeh?6Hr4P*3Qqya?RU?Dd4s!S(;mR zpglCVB%9TLTO8SR-6%c9XD*|BiJ0xMkJkxO_{sH2^BW;8a8K3Y(j`x(E!0; z7j@rav)|(3!f473WncH=lDRON=(D6T{{rjc5gSnG5Y^;Oryr4#OqnJ9FFTuHd!!iC zfQ}ywjZCm7Bhxz+x<`sHKPu6vAr}+l01K|VXur=9*(Fc)D8bFOjU7tc*aPW{t zPf-+_%vu4UN*Z=uVAz_#GEImgK_G9FAYGAZsV2<+aWlD(QkBa0#VCRpo%+`{ipekv z!C<36C7K*G`vN&AVSj=hiSMu@Ca-(IWPO`M%spU8iuJH}N3PL)TF%CGmOO*ZaZ7b} zB6K(C%|?43FQO|PWh^#IOU50$jE6J9SLJm?aR_5-@?5-)<|& zBoX3{n!*2bWATK%H3uqlA8}Rp*2vD5Lj&kZO-tC53|<9W8hp<9qg^f~89WxwrPwWi zvz?B1EbwRheD80gr@_*N(GH;^DV~mO{U|$*WkA23)@*(iD+Zk+l_u*pyR&_=5wBG7@FTV0a}3I|4z>Bodjjr!YLO-9|NA@r7z%RJHN7RFkuA%zZD$ z7BnD&+&<`3#_~0T318D^4B@i!Jr=JJCAYF(2gKB08>u?*Y0Y@pi%z#?dRwU4@9K*= zw$W7MXkMIL>(C1WY0t#cHOz{r3fNnfybS;`f|gCiW>J6)a?o}o`hcHZZpK|pzSS2( z45@XAxpy$O2DrvX;L1)BuFO^hf(xlExW@H!ZQo|3B4H=r;9#(MVw0*QGa>D*wRu7X z)Wr@h)rAsoQv^XD^Do;8XPYR zv(0dkBSzEeVi3-?P@LWthftn zDEy~+3$991Yjajy1l@v*tsv1@9i;XyS3}p>A`=GfqiD6*>`%`n{d0o+s<}wY-pgNA z{y%U;n$My!^jU-|dF8j5kTb1+6|2^B=8|`re;LLQGyje+g^_Yw(mVU-c>m0`F9|}S zex zR1J5b48amA0ahy0LCn`N{k}E5UXF?lOusuS=vZa84t(vS^xi@6F_wM`BrvUsrcCxC z&gyQ8#>w3jbgvbvd=sGmon0h>;V0l;o(9b*6J%2Mh_81Y7C~|(xIW?>`Y6}BU9AvG zPlyAB3fu2ih42_qVona1&yAj~`1bC^ck2id1|3P#VNi*@9jY8=z}y-*L4q+-gz3CY ziz66_fm!K5AD8*scXocDW{$bSv87_}&TAYY=B@^V@cBUggB=THjwo>Zwp5-8%|_{& z*egLHtzB}tsgc0t!zmf{OKhaPTVAqk+%Vfj%3}~tLIu|5IqcPXSLb;Oc?4iRe-L0( z4}1EHq|GrCnaybam`DoReLYcu5#rvQsCb5?xo#q3ee?T7<}ET8QDojCa~xTeLVmVO zE;)|y*$5yxj^qs{iSl5rrxY$E`GrYsuViJ8tPCiPv?u7HZ3xvI?zWGx2<2o@P+G&Ny z7Am9g*m^|30EB>%L(!H2<}P6wVAj)txNpmY53pc2Ak8Y-kFNyMua+>SynuNroI_2>(Fenz++FJp20-#)uN==gr0azRPmwmA=i)UMY7h zGT-G{g7MLzn1Eo!?s65ine@ZqmflIyWKKx{eY_X_CjTFsi~4Wi|2ew!`DkH~;aSMA zE^vs{LqziILW|FU%t-Zv%ir87nGAu3y#AT*FlH*^JB%0P?0n0=nTe(|sJ!=0%mDAV zvJyabo?BC&60E#=6VhD9zX+V1bTUa|mMxj_BVEi6T5ffdzJ{_Uax!DltY&osh1vY? zko}X{mQV}9Po*nW2`{p;aRW<9;-J`)yrX}P3~Uqp)V5X1UrL{j;eWfq-D+^2O>Cw>hQH?VPq2KZ6WXtZgOKunN8J}K*%Kx+>4~y zY%?u$QGSj=c(%W5E9YDTO*u?xswS5r%ghW1PGi?BN-4FNW1(F35%W=G5Zk$6K`qEu z`j58aYsqQmEw+m9*0|H&e+WYr`n%~|)IZmqejuXX)Fb~FSq=FA8v|)o+sf(|`(vz} z;mSbMUUDEU>of&I=t_HCShT5}Ni42eV_v`mc$zhL4S%4kZx*dMU6FxG>yM>@hP)rA zCehcVFD@s2ahabhYwHbH?d(FUq7xZgza%TAi8Z86Vg5iT!PW-~NM&2HL0Gc#f^T*( z=|oBT%0bTwAT6YMtTH3e6qc25B*o^!F41OMNc~Jgo7CMEC^K~XoU7qbGu@?bg9-8m znIK-b>fc&W@AA%qur0}rA}e#Y8!#0Zbp8&JuDpk}@tO(ZgPOzy(O|GNRP3Z!XuCyp z?r8<*=iErNot>rN*y`z|;K0?@B!*U2oJ4elchD01+U&J__L|}lpKJMuS=rQQvMIkx zCV64624Y96@kVFEF}*^gU)6sjg8f{ZXgv*hdV~5z9y;AR)!M=`p!w1fTDyozSA`i_ zWc_mmWm=ci zFdwpHCoP;H)?G@0_EJh&a7~a>Ie-C_YmDi&3aS`sbk4BXR&S#ZUSS1{Bxk7SnEx5g zp>au_yg7-~mxgg-t_Gl*B@Uu(8S5#5SGR}m%3kx$Acs)KM0Rd(a_4D*ogyZ6Sab^ zZ=TnUdiM3ec;$Hor9xM%0YPYVio^t*PXC;8DO>PBC@Bjge0B1Zj;tIaTR$#wv<@Mu z0kKj3m^^d;i^GA`Ug}&8Zq_hA!iBq3|7BXm5n8D2h^LUIK}m0LAlF)mcAGmjg{Ek3(`~5qg~^1|6bku!_M<4UvECmhcrN94i?`6}pODG#yVyYo0=CZh z(MDRSQ`j%D79jSK78>x3Op7J0q@fithqV{+L%^5q_i5^V8_Dv@2$(7l#vb~pgU<+r z2GnLqM@ZUR=0O1+FKS3h?{6{Zav2&x20u!aNwO^@k-bI2!Yt~Sidj`L03=!L_58=?Z ztPUx60<`;hu~gVMnm0TW7B-}(0SVjOFzXvn6nD~7u?N93WizyC8 zexFSVCsdMdRiPc&>l@o8$K-_wVcIT&Z6Z!QOkM4a*owzq!r?>dAgO#wk7fgf!%-zI9#gcHXpdEZjYi%H(cB}1 zS!sYr8{%##fr5$qlaA`_gJKIx$RBMOeF$4dJPna7Z;gxvM^jq@OkrZAA4YyzRYDO4 zViGnd4X98qu*hgR1EfA83>6-aHp(%<5?g>?Yg~m6&a)UC?0u>)O(kChln)tkc6h_RdePO z{?2?%E9?zR3dhijQjtNB-+N*%qx13mxR(-@w3RVy*TE=UxDMqx^(9tvk++4I|meCkW+bP zzBesOTx{TP1EILP?n_vgqI38^PK>OJ~mECFQH z&=TN)sD`s06yw-R6>|1=y|r*NL(5TXIgy#e8N#w2U9N8x4!%vaU^wW{g#Nm{H@Er;mGO@p{C0sP{M z?Sr_|3peRdo2vzUlnz8CIAMNzzZN)H1zqDjAZK0dI^mj1B^Vs;OA{TNMz}^{OeQpD z$bKbf~>WozbIfj2+ua#Hr{K!M)k8f-%JRIEEQTzva~LQRUG0Fq~2$<-x`!HO&#t z>NvQ0?(Nu=BGEDb2sUr`8>%5gw?9s!JBY!Mt3DrB=sDs|y=UV29w*}4+tM~q$hoZd z;n>{*k{2^TKOr6_-YUy!OtmH?Dl=%%iPm{PpYKm`nvXhLrOEj14aW5|AqLcDVZR3$ z9CL3-f`Os&e7xYKWB2XI=N_ImCStI@i1$;i%ggTD&mN2yz*}UNdimv-zw!2b{PH5* zk6}ArH1_v5(2AmQ8=@|=&l>r9Ug+pcBkvhG_XM8FT_O=0`3Blnr1|3Gs&MFh(NGH-19VYY``n4Tk=PVnJVvU%An<1%@Kqljw zm2ux#V7>-~5UM_2aMKxW*_R+u-RoS0=)la!KnE764_!!%?^uAw!ifdq4V!d8XCg&K z85&{EKpl2qBJTY`I2IAqWlLs!hK*&dw~Wd}Z)VwBv`W(ln*a&okJYUR0T7F`bU?%+ zBf#g?@C2i_*2+T|HwAkXX=7U|e#q5D3?g;f*le?z_>ymCFYaXn&*Ym~=1X)|FzQS= z4`WOvoIS=gG>v37$3lBFzTF@F{s$ZpoWjUe#8Vw%N8)!`2IU zAD-t4V-jr;HDNzat_etW1e`|nrkG3Gq8+R7H|B@bLD(3B7V6mP*N$*%Qki5=hUHi_ z31eXr+T@wV^{iFs4YbXTh(PTN)seGpWO7TxvZ!8@%4R~^@?=T4u!b+TvVNl+!H)7lCdCX9J*^rUqywQG!n}}v3q=7bgzyNP*R~sP>ux&-NvC(XM zCleKDR%`7Jc(AKm{`_ww8}7~&Lwp#Mv<;Ru+k?r{YHfQE308v4)?<|M*eH-VIbybI zXE&&JQlCWgf%^A`i6$LWv@BM$o5Xno1Tfkg~# zLXCSIk46Z(dawUgoewJVG&75Ek}KOd51o$_&|+4-Ot%oP^cHfSz}msi=RyKR6|N(< z@>vG%Q1Dt<2iP(ED$eS@xU@I3;z?g7Sir7ktgN0quHhl*7wr^hRxDC5^^mJYJF+Ts zGW7mLxDLUqr;BCpc8phwsQ9VxT!c^vup$OJE|SaH2($bLl;0sA2aN@`T5cGg9UrC* zSwj}d%I2Sk(1dYvnj)PEW1I{DTMTZ}P0=xD0*jYHTh0hOV~W_^V3DL_T-W42C6SQ1 ziFkcMSi6hm3P{hOwXjfeZNAAHAz;OvP2yU&M~od=T5Aq8n9yr-e>fluo!Klw;X?D6 zOPev7v{^n4f%x_`;n9e9DR~wfj&w|pn?jHrCKgYN7M3jHz*^kGM9JFk$(Xh23_T#Q zFQ#`1R3iclNDcEAl7iU+g(&f6D!fFN3wj@{gH>n>eUXU`1Fa!m7Gx!+~zp4Wv za0~=l@Tx)==B(Wwd{x!Jx1>9~^%6v3V+%O2F0Hr6gs=>*Q@oVQpE*a^Eek+H{ieCt zy@47?g$1R;a1;+ui&u;8EF8WZT+kraM?kXo;qaPM8F(R0n-gJWH~|i~IcgbQ8NlUZ zhT6&iF7Pa?7Je$nCw^)=KQ%>fSeQGztV+a1aFam;m4rbrPbKCnb$QVgv92=_(Nv(E zxwFkkHvgV=eWt{KL3Eb*U5){Pe->!mBpq6UR-xXe4=QAhZQ+cL*KwmRQG39xn0f`= znsEej#(jAWDs5p6d8^qasD!mGvYWQwN`NvyJA5TS~KizVloBG@iKJnJ{{8?DwgHcnvF|q zJiBX0a<5vi^(?hlLh@+rORh(B3?J$LXqcIrLbRK0*zGc+rwW=QEPhxlA^)U^qbim* z&J%6#kr#&mHM{A^+iQ+S(t1mT(gJI&Id=)%Ldq&Cy9%8xFG(U)7ilY*XR*6ou9)dF zvt|4&q-H)dem-XtPOC0whw-!69`*RytGzkJWdp;=H7siPP1-8Ey+|+bMifkn*aC$h z+=e^8J#6-8BqrR)wQ7W>=xesN)p2Ecf|9)(6PF&FEnYQoNzCnyq+qUE*lgJ5u&`NM zOIf$iEfY42;IbR^jC7Xvy-V|G#*>}zKvdl*ehr=>!BYut&}Jd!#y$OYOpr`XtjAcI zJ%I`e?x0|P8sI7BJ^|4K^V3y^XPr6d+U<%-97m9D!c+<6{C@&{z)Us}lGQzm_ybge z_F;rXcbawau%)f)vYJ3l`><$YFERosH6>f}N`6?2y_Fv*afi8R&C;gW=`s31 zppZDRRP>YvUMX~BRh06kH0>(8PEI4U>xS|MEY;=B-w`($M`%V|=!p84l|9{>?CCC* zJ$P?LL%${2y_WZc-WD? z(k(VLC!4rtDqdN+)2&-fAnBAKwbCoqt;rr~-azgF)XQ{hQOis!1FE!OuCcW__$@6M zV3+Y=G(Uu_RFJ+@rm1nxpkTqE=_(a!ONXX>alt5o!Q~zI9p?%YI>!!ldGO6&V@9Z% zjVjV{iEVI?Z7_L>}fX(2Q2TKNvIc+>o9JIlh zwqn%3vo=P>*VmD!6X9-ad**5b$H8pG;_pBK&3s0lPsf-TtTId-=*lp0oyojyaaFHt4fj>&6f%-zOL)e@`?ad9nTyS5&0Gub%X+p^`%48sG% z6Ueux8GC~M>}i%aPGpG6cF@QO#kQO$BDYDB;c87e4!PBYdWcVRGw*ux4umhZi3SHh@9(G5)m{-!gS;M27vxpKO znP{%f0+TYeEKb zZyTMO_GP1oq>3?vp)c0O!VryU#3cZozxe7OtW8FVlX74TmV?`RvXxIj{m9T$?8=QI zm8A~S&acJd%VlpWFfZyPOVc>%q*6S}jE!Z#$gMCF zA`^Dw!W{PIwFz^wSJ3LoUK#Oc^PPd34-;HEdpmzy#GF{qys|b12;OLrF1%g+qp_3T zw@DUrc7Z-rh+s0v)^4tYS9pYjh=hDPiBp9x^z7#15i0nQ zE!e|Y$Hh0^PN995L|j_L)5QCV<9gyWFi*|*Rj)B&3ehSXu(!9rXuTD-$5$`F@nZ_CdtdSVvfxzEmf&}btkY*`C1}f{ zGhPOriR6~wAdOAx7*+Io4}k+_f4vzu0%n_9C24+`5jp-?Sy*_ct^m{AG=vUZ$e=?d z8o5@_yqGU8u)`get4(Lj1t^h4lWm4m+qhwc`hyee8zgySp%{M~6Rd!taUUFzdAGU3 z=*ZRG*!JE#M!f}a7mE0sLft@T^}5B!UWn{sG@4Ezv$m6$mWtR-GLYpjC)s8Z{7jr6 zC&@N(j4-<}!Y4^yQ@PndavfTixaCmnPOS!jLLsdt@P)1c@ohBVI7})WN)arBLt)U@ zuKrN~Y|E_oS)ia#4i?!alAR#K=H(6wbuE~Tuw{rQz*s!?PZv21%!F}a3U%NNO}oGQ z1-)Ymp^os{hGwUh6!bpP`?FX?O&!|`f_B^^Cv8C!&iqChr?CE(6la3twJd!x3-5-fXK!CIQ$Hx2AoAt!lc6aSE7;EaM;j{pqiC zW@?tq)LfRCniVrOUuUKz%=B?FjHKT(%=F{Db5{D=iaQ~6xc+rkdWEd?g}27NpqIKM zdWqZ8m*}Oo%hYxyQ?-!^>z<&O*e+jAFP*&p61}AQu9w;iMcY{k=~l8*=r)&=j$GGE zwrOn@OT9$hpqJVlX)^n#-5=H+>Lp$e_0m|Wmk1On^-}D5iJ$`0OWL87UP{mrT}2&a z?3M$tmJ5jCD-dOt*4b34s7a})^+82VN=3!_dfE~?*=7fw%0v%x6Z8ja$zpBBdMhsTO`?fwqbt4A76EXO}9BNe$MvA=-#DG70 z+*j`jXdeD&G%x2{D^AiD3j|gNW`#7}vQc=1n#T|c_&O=J{t~>fyv0XU4OyfwRDI76 zNDTJ=KQ~3hW@b06t=&sx=hd66Oq|*STK~Cy03&pN?`Ze1&T8FP?bE%tuhE>?0Xf04!U-!! zfnCB|v#eOHty%^PZPhYRanS)ZXap&0`28gKQL(Eg}|JI7vqG3-f&A;^hP)zGpr1_Hi&EgabCvgOV z0ttS~=($&N00g)i2`;KecZ35V+=>H!qkIhq1Z#%LuU?CQsmoo|Z!-2+hJ2;2RwG}W z5McnnJ2C)ghLuTQbypkYvubs$KFGDUymX|XA&it5lvT$CiG^|fi6Cf~6SJ1yRrl2y zR|%CZ{K5>@#$^(2Wt?kSz1p0fUXg^-aQhgE>jJ2jBP`oqQ9H8*E}#O3)l4jlhxI25vx`n z^7&7z^Hb7)s{86-rG(1#-_Mp5P#HLD!OBPzzf2R38aEA2wE^nxSm>2#l`DA_Yk%#Q zd|l{%wWv*v?zBs#rzDkL&9!K0m+QBZPKw@-N?M7FUy!n^L<6C)s}lIHsm6$PzKncQ zJmhL5!?s_LPrsukCr(8^sqSi=cp{){;erw>s1BeDbA+BBWOx8S9HMvgg!5 z>r_Ujy06a2N~mmPe=5MVr@%Uio9Ndlc}JS~Z)$=sYYv6C?hRiRIm3n3Ul|Oif}FK1 ztg1P~*!%i5kF12skaI|PrpaF9sQ22DGt$I~$XN^VjWqECfFSzp)mYHPdO*yDJ&x|`?CE#R4 zJ1@eY(zD`kR_~RWi?>2AFmsrr= zjur8~844Q~`rtwUJZ$l(h`jnsTM1r$do8d2(9W#NBuzKvQu1!a0b-G`c)!8Y5)rq^%&YiKkn$1sM ze+jFrzKti37m6`w^_ZJ@1Cxesb8h_kw07>sZ0AlpW@AJ#sjlr!va=XiomOlEPem$L zueDOKI1C@Rlm(3V3qODmC*9UC9-V z!NKQ1lXgZWbn9i5$E%T|!ik9<-Za!JI^GiSO6fWR08I-(-x&k!kHR!Ws-1h1#&9HK&rOKK%Tt5$*Ix$+G3^4g`y=n zMX%7`w^uzg4ax(=K|tx91e6bKSUm_Rdp(RWs0_cfj5;hW zg5@nfmpTg4Fslxl4nZ1(LoNx@NImR8QMKAawy0VSG+1@9Q5h2@l9?PctBnrKOdvHh6Ldg{XUv4( z`X~@{JOQ&>b+C_y?>?hgI1tyF4nsT1S;k(`u^ezFwnH$KmW(xD7c{nI zUlTN@vQ}09gzVbO?=!y{E>PLa+z z*Bu^+OirNIGK^OWV07J4zA-YXQ)`F`uGAvbx>|eH`h#_-kAg&9p{Pw>z$in7B3B*+ z{)dSlSAfSA8>bl`V5Vw~TPl=rVVJK`S=k~DRl?S|vS@=eBto0q;Tkt66xDWxVr%4O z>zgzjt&a{d>TB8o3~F(<;oGc-K1*wL%Nm!3t;ee|eLULY8aXh!vZb!cKtWflTgI!| zYso+}P*9iLPYJJ^iAt0qLU~4H#qS2l%FjdDs=?!}F@T2g){+cM@$8mH=ZS!4q`+$) z&$duVBNh+&sbSJ6_E(0O{K`BA@@0!$7gIp6-y<}hGUGoxMB{6mAWjYOjN_ z4ia=ZnvmV+w663TLn_ZK$r8~FD3qF2Zy)b1vqA3g%o3Njp%$t$OY!KLCFu(p?5udf zp_;a+YIPTIXbS?VC?3M9k?Qc!_MLS4nWl{LER)s z16t^{sx_de1bsPM0JoiECgly13FEtu1`z~{>JO~9;ejcHpL1!uFMmhQHmm?-S%Kxm&WGiao04I(e8NrO&u?DT= zX+;zr&LxwotWq6D#@P`0m5KwqbCz|TT}ntTH4@P)+ZbvjKopL^j^0Zsk3)H+nhT6D z;k+4!&^v`@@L_siz(RX=%^~bV=k&^j3d4iGytU)lME>fIgV6VIm;uW3O2Ao2c`GWr zV?lnNP)A#E0XOPoI1mkE_(J8k)(`G-pgq8aZy}UZJWv2kZCNMfsqrus0We!L>aK|Z zg^DND_{v7A(Q#&(mCz}VayXb1Fq7BE0tUiZV!Hv&39Eu46I~6ltozG`h_TOnvAm># z6FONQ{THdMQMgfwaBzXLL@1J`!GAz&5~hZ*nEC6otkUH~U<_x#Fvl_G<*wsob%Smfc}zCqmeD~)9VQk6jY^^P{R@df<`9~J z%cUG2j@nWf8TnK%jC-u5vVe`KeBa?#;MA|>3vy^OYeumS>x3??0T*+|Pi0N#7<;l7 zt&c!Wl5FBPL@2$6ab&U4xHUBj17++|2kwe8o@O6b81cJ^W8U?xrnO_3_em9qMz=al zzyW}mmcUe;aQR4u=R>JPX;9l&$yb|HIiZBAfTy`9! zkPX8I6sR6IkX0<%$nLLD=O(87wv5^Z4HI51PaX0zBJ05hZv&9yB0V=h0xybnI zeUYoDj7rKoO>}fnHV-54TYvHQaifdfR|N6dE4ZpOpm_!^Ia!Jgx*$xhK^`<^Wcuw6 zx_|Y&NZ)1$&IeE~rOQSiH(lbgxhHkM1x}+^JaFvK6$cJpx7v+t{v{XF`F06@3&2-;qMfJtfFlPRK>l%jy)da#d*w!h}K#pbpff| z@-k8v3>y_~Z^d_W(g`8PKx$%SLhM^c5_2a`h^!Ay$dHGO^iE|qekG1$kzsYiplE|@ zn?xJ>F4cMSz5$=|buI4X=kv$kD@^rB0oVl;)SYS?uTpJNy5Nfve27CtiR&2Jz#XIe z*M@YdA;!I5fiX);@o!{|diNkv?#|ij7vbQkhGvnIG-Vn<&*7@I&TpjLjgaUf=juY* z`asBM38S3@xc~>5?hKKBfr>7P;51Z2#eq1_qT*{UGQ!VC#at95xtI_y0kboC)IhUR z1;OJPssqI}i*a2Ef)8pgnj4>sde8B|ZtGRvS>l}`e7yy05@S-g1r1nLJ^XyB?l z=KxtKOvhTu<}G}xh3!&tlF!<)FH45KaK7FtueMnxyd?S>hR<#C zg|WX~zgmnN7B#tiK&5#8kS15(P+@YpCyxYonQ`NpCBKH$HPt*{#Y^2m!_Riabng>{ zy0BzoS|8G09MeTR=x@->&ul3ax1`&BK5ZiHx?OHGD&lZ6*zrid&6g6V$^&3rvxYq@ zs)ReCN>f1c6gRkisjzwt(W#B9;dI(49tm{Xa5_aQUd#|#EekH)N#Rth)ON*;ajc$9Sh>M}%;YH7;xOJBd@0ns4wDWsIhkyW;Ins|H za=V}jSYN+>2s~G}IlY4GhrV?wA%Nl2L<UxX!kdgON!#Dj=4b^71 ztW(707h;!V<#z+hr)g;F0>6g#uOj_wGskRnzYj`ODU-nO-8#^IOKjgawo;GCe(qxP+CeF{;lRK;8NWAvxoYSN$9uz*$l z3sHOV?UL}i;CP@L^$Y^B1F1ifa0QQ-;hRglGQN@STCZ+*`mCZ1a(8lI0T?8jPknww7Dhc!cL_>yRCy>Iy8_$p zJF<_M$W--zmblKT2X&iQa@zlU(L{jn~^d|ocfbu zE!00TO8xcE#X|kGj?0*vm(BheGrDjJFzQd7`qk6Ps9)6E57h5Uqy!yslZyID1?o2l zq%ZJKL;VUNaGEc_l8z-4s2^vymZUBHi27Ty5n)*<c3aRW-QyL^+wTJn9L$}7BI`R;?oNL zF&uma|yVo?<7erG}{lxkH@QQB^<+IF*QTkiSMw%PGl zi)^zKKB*L2TPIkuyshWi3aDO=70~LItXaZD4@}6C@mZI=T1_2UJvG4JHWU zcjd-MCGcqDuS?)HN#NHl@mK1-9kD^0L=Ysg86nz*&{;a|LY%}B_v3VHwZvCzdz1@C z+kTx3*2D#``$Ar!9nx}N$f1vgwdcydkhPS4%~>L^@0-2CeX|eM_RT)@+S@lj8}=4VFwLY^Q+g{YmV|?w>Q5ud-MB#G!X8Z?9CNRzfOCKZC0GtX^T?)A2i~C zgWuY8d#2n%Sef?LQu;MVd%vKgb%d7^A!`A4Rg7Rtj9?M>Gk2+E!PZlrWbYy;8dz5!B9T2ofY?(lY`K#G`W+il8~qVg>!&o5#lz z8o0U7E3PuJ=)j$M%ArkN6+kecZI^DmoFjt?hZ!u)P{EkxE~y`tQIww@2(idN#ckRL zt+oGZL7WQgB#5@3dBkTK*2!?}wMC`^yhZo1iK;un2q|R;mrgBM?~!59$g33OIsVtU zabM0Od>-b{Hjqo=`BH*BzjYYn`K_xeaUZHrtwF(4>=Qv3e(?Zs*ZXUUxgM$?g1l0LbaueBsox1%MpUigu*{ zkZQ@hrX5JOURG#%lmkXvew_o>!~staT|lprJ+Z`z`DG0Rd^PL|EM#tQE-a=aQvk>h z{-6hdAht1~?M47)|8U6ea<6=d@U!zIijebIxp^Hp&-von)+>jme{`x)4cmBl$k7H@Iyd*eaM z4Krq!^9vVnhVdh0Djiw9JfVu#db*Prd~%GGR(w%ZEwyyayYt)3=H0PwB=7^spbb2W z9Y^q-F2%FPki8v@KRh>c*PuC*5%tI)4>pII!|h(12%ppJfsCk@2IdVQ^fsuNE&06PuO z09Jrr#B(~K|B1|@*KHRur&(j2sJ9-%@$Xot_6NBHWl;xrHrUDYxOfgAbeT&9#Bs~0PN@^bY_F~X9~jcJ=WLo*l3D4Bq7;6MN~IE0&F!%_|2G>5f4|*8r(`VB>a6eM6=3 zpux+eE03EdH%w%A2Th zS;m zElzZ;n!4nrHDf862Y#p9@&K8G)xgwynlj``w9<^B={(4aAUsL6Ly4M_b8; z@$8gQ7qHR!85vLTbMUsS23YnUC zic3Gml+ge!!4do38-umDWB98Vhwb*@RG(}aV9^y%#HDUd3ogsSs7#B+S|0c1AQ;l( z(OMqlI}jL0YkBDKfy}dqEN`$;)DG~^_H&Tjz0dI@P_SzCp1ZPcza+YV2X-=MX%Ceui>LQCZ)vN{g~&Bx zS|<$ZzG=`Z(%Xyl@@_=oR>9ZOl2~CC8y~d$SeP`hSbXHbq84Cpp&7(;R6G?`@>pnk z2iK-)<0&%B64+)3t=@C7x}Qz19E=wmbp=bL3HHiBZ^AxQz7g2RFHUy3LPC8x_$GtjwF7q8HHG(tFCh1Cc?`-giX4z2%AwYd2h~O?wR#`fhXywEv zT5>6aab5*Q#r=(frkYw!{8r>1=3#*G(vc~-2;AtESq%M+8qo#_CiHCge`*G-yN$w2 z072_MExR&X0T!H3WP6dVGqMFEcy~SK@!vN%K_k2bC zfCvc+U-MVhvrTr2Xd*JFSyPG4FwEaZj(h65#%j;v0ehXnf^I$*D z&w9|=^DygU_!i+a&jt~d?a~_H1>>RWO!0g?AVs_jfga#x;QzaUr_y`ei`6#{W7DE>X#Z%@GG%UJcHMa zBwB&Lh*JI@=kLbiiF+3zoM@UWpy)E0&)0|58pU{8S3TXwlL_!D=ZNLJ0LHZRQ~if5 z=cQqej6iJT1E3ZIT9+eHO7QR`tNFp(&%%=n~bK-*=8W+TXSuX4X-_zJ<= zVEl#`N%d{Xy>?-%k0~uE>>vIToPz3J?xGV|veApb{P9Kjh=&6>kfPot$}*arYqq7w)h^IH%CGLcJDMQdJY0MSUq9X@Fq zg|2S&wqD5ybSsu-W38h=)If@cy!(@C7{#LH+*`{5DU`ftn4_6Hm>5P4!%qhc9}5^A zXn4oK^ON_Ncn0f^XBBZMpB}~av8A}CN^jQ8t@BVj8_cGKe)av8>GC1dRoES#WG&aI zteTXiH1^q_U{?AR)vP41290TefWCyr6497s;wj8fu5WbuT5F8dn7kVLN}bI5REoHC zX-ISglOLCclnpM8#B^4?6De=kxW{~Z3q0uyNX!afKmuKSN$i+n-Jbg=%#%KWluyvn zl(p5Bu|H`^u&ycKCoi8h3q1Rpj06)A*+gg>jNh}MH3mNq4z{Hs6 zc0HF{Txq^9`GL`{q#QVOD?Vn9^`~a%Td!u~KTfBmfj{Z$;8LGhll|28X`R}ZTttgI z7SuM*as9AvnYGJdx9VPb(s>{DkYzuP&Ax-a&1A<%!^!)6To%0<@Eu+E#?D7+xGAaGQ=h%&pZ=s$yxVP^C93G4P-^)*CEeP_30HHvX|tJ9FCbA*Om=pTuPLZ3mp(0^hXp^rj1_+i+5DDB@t~uL=SfNZ(nL0k6I($k+&Z#4&1#DA39Rc zd?Z)sD>V(w_^2qaui zIKw`qs1-Azwlu8?lFPe4A+MUguxO5SZM)$~okWjJiU#yutcJASr2JSt-s*$I`bJy$ z@MXC3mygvd(wJ!=ReG@6QgPh=E)SMIfd^bu-?G~cOP9zORxfeA^+Z$!O=h~ zczFt{NMW|Ldnog59Z9&Tzd>)(9W}2f72Y{$)SO#521@5vQ&*9OCW>E^Z>x=OtA(=V zPgt^o4q)4o?7>KoAI8cH>MI8g_id5BY0!1|POG>F{WaJ?}Vt&ez;R+euQgj@*6DiYdhj1NE?2F;z6(icX$d>`8__=&L&ee*Hao{XHH zbftjQ6|atDpO*u|yyj)v<|TpTgj+Vz%=5NE<2wj0qkMynR#R0?5+mDFQB=R<)IJV5 zj|&;ovg(Yg^6@e_U#aQhGv<<=7D11z)oIc6xOk$QkBfhp2)+;uVfUwK6vI)UgKXwg zmqZg{A$@tGsS(ZOP4=Ccp(YLv2o|EALIiNt<9zSCt#ctXmk+mzX*XEU3!LEV0k1!k z>=5Qrg@ZFiAEaiW0Dd+|h6?{M>;Gx_eWKxc(X$y7otP^Jyf*SPg;)Cy@upxPYfm|! z2}rVU^UWZ>3|OEnfm3@qI+>4(JE3&*DQh6}kBUzLYG}|PW9i1eHZXvkuIQ!<^x=c3 zfU8M$)2^bM@Ezlj3v#XE!k|m1vU0lGB{1sfI(68`%%P(&!B%D!*bFTj2&6I0Kz~e= z)1NMKGYfj0{YZd=YR4JAQZ~t(HOZiyQEBF(fj@u-GzZf#HY36*DaPS^hA`X_t zK{0aY$vt2X^$3rmk=VP_G&l=ss3m<)|fE< z!PjI(ZM5ru6AXznX^$lMSMj>FAX91!Z z6lzz~xlFNPLk2zIS__kbSVIe?3!axotP{Fz8?&M$R>BNk5wX_r-`=1}biVU6ixpNYw|Q)S``rX7R`7?|-&Ojf=@ZQFbA!0aLG&ODPG-pghIMh?1^ zk8ZK0fMXhBlsVLrgtbovOt{dE23?oR(r4Pu5I53j|19v<^bi5@FkLYNqEe(h4erm! zBpfm`T;x??X^H`5Q#*z`4Lfo2?MR_U`CLP2x8$>9!fL@ zu}Bs^&4m1#u5W6Zgjc?k?J;TY7 z+{5lz@#qh08|jde965t089{Medhl%A-CL#wFEJ}9NnHbK`;o-_7B<$G&Q;m z1>4jlxYte%^6A*&*V;1C(jg5P{f5PhRUwPl2J3OT*&Mqr8^{0)*g7OI+vvf3#V|KZ z3(@9aOdmmUo@i7&(agsnAn`<~029CyqTN>BA#|6oT7V+)M5`P|%a}qkHQV2xfGOmw z2BU!~8sZ^i3cmGg1ZPZPo0Kp`0~Y45GldKjt6XCW@+ziKnz#VL=AW-Br9LKF@lElaOeXM8FZk$t@GvE3#zwe45rXhzJ(V;T_z^fB@i>TT!+4V zyJNwC%^X-mOe8aMr8+i15LBvj(UWjE1_zj)Vuc{FZ5zxIO%m1`hl?mtCo^U1Y%!-l zyBIV2m0wD8W12}qYp`J_M^?3*mVO!|rL7l|lO!KcSUB^G+K@+>tr3>o1v{7uXpx7n zKh3Y)fK+G|oBP<0ra-M_Xyu!_i8EyR*X3+S%ZJT!W-~Uz$%rOvNK_UZ78EIG2PkIr zTKo^W>KkTQ3PpQ?R1s-po=a$*n3Nd0N-T?dBn3f=3G9jL0fC(jjfhOsbU2ndXRJ=r z&Q};|8+pTmC5V|o1VXFSlPx@E&gr3`kB)a&97H_bL2 zz$lnY#!wrbwG7mBjN}DYH3-iLW*3NjK(Uz6V}ABcbWIN(Xi#$1*sKLiFj)M7@rp9wO5&zbzxf0 za|M-;ObX+KD+Pr)(3k5&Q@>gt<I3CW^t58FgzRp6Z>Oxfq$ zqzF{<{<@$zn!x@xpV+zP(-RVHl5;G3tkmPwpT(q6xmoNP7i(r}tqaOB&>54f_=WM} z(1RFRzbZOG&<&>WYG-C%VZ&F}lUY}Cs|0gu9rX~k9$Ua(nx$yXSpR;0CDP5Xy8phq zVfBbuhmNox)&0V(O>u7?V7+O@21fw)W!-o`{O;l@^HuQ~m5-BgnI8sjPU(@{W1lIbIH-sNEf3ze*FaSd|H_we4n4ZJp20v6NJyCPTk6 zZQYP#2v5aMC&%JICrpeRu`V=9t{*_9fou*X>Jl;=lN7N0F;}&;H-rDn$rn7>f@uQ* zo4nX8#B3nCd%8tCTaw2TCYAh06JMx3g8cC_AV+OKpY0-`bP0&yVF_jHbW|)4*hxm~ z8toBqE=OpEb|A8$A`2wpq|=^b$f6DLhG;`SP+LVCMs-;4KWy}2l!pP}lvi?}=|2EI zluSzXNjY0J>G_T{4(|>Jg1Dz72-X?>G1GJ>eOa=;wS#nI9I{9{{Ax;ysM8m?>@vae zjsqdx_y~z4@|WFiRHkK(!s{syWfeMC!@v>e#)!`oC>C(Cd6^ZCF{R^*`tZn#D;^oZ zPCAd2q+{}NO2DrR#Dp2tyIzPn6b}NS9f(Js2{C82J0Q6YS4NDP663g z!}giG^$vdx!5g7v!XP`cLWKxN_XaI7SZr&lEmMxxeQhDP{UWQ}-chMxJsqn(wTt8B zQ*Z+W#ImtbA&kKv5Fd%J=#3S5kfLSJLt=@5{W#LNWF>fdIzF*wS;zyxY7nUpxU{@j}+2 z74g1p_$(DFz!!>GJF_aH53eq5c_0H#D54CszWeF*TN(v!KCsVIg&_HCt%VZ*aZ|U z+F8NR)dm5gNu@t#%BHogluawCCDW?iM{^N$Y22r^nRk~=YtyH-Sxqa><7KB6 zQOC5hVNgx0n$1sMf626}e(qHkik43+Uydm!By^iM=ZjBiT3caSDFREWu7%2Vt7&ak z)53+1`R;sHeQ(%AN~BI zzN2t)L?%;Oe4J-vC|eGegg4T5TDF}nXIGN_Sd9 zX&Nb7L}-SNuGhky(|g{|SHo!m590z*J$t9}>j1a<_LP{i4y2VI0;%B`zIwJo1H~jl z)3y_#@=H-HLmU*BQguQpL~1}IC?Y2eyY%Y|%CR9D0k3>xlBy1&Z6?$q95WO_x~MF< zr%l`P_XN9GR>&+1L6yHP+t|F#SutW8 z2YY$MHV*bOhHo%|F@}R#jDZ|X$WhB#YV`!$*bUFe3~r#W!>!mhTYNzEw)kMhVix65 z06%~Nk|l>#CR5RHrN#FUn;0jYf(Q$>urB!b8vEa5%owFMc3>@+1(i*2YcdS}%Cu*F zV+#V$2!rwmGsVnk1ajN@m<488Ow40-x$cG-=_E~mP-5OBiShIlS#h3zRwW5L2~_+Y+`U(6xdMqzT= zezZYur#G}GUa$=-OARnBh5wn#?irMB)vQoJ=%MY(kEn04^Xvzh?LBaGs=^SMw)U%M zrcMq?T0&IW@a5RG;hKlHoE2x0(s-Uto=XM|&pVzlHQ1h~W+FeEcoaq!j+jG#$IE4i zLe(x7Meg@9<$+jo_8N;uKKl^|B^iG;nux7Tp7U~ac34Sg;KFEic9r)PYV0t*@K?Tf zQs+F9ua6jG5Dhj)Gf-C87dc@Wz!-M|WWbrkNsIruZE?Hn-lPrjX}*``~0ZLU{gO9=Q>ht1b4Zq_EGT!6BphnS=_k z6MK*@rLBb^WEC7Yt78TiX{KQNGx#x1RFtS^5hQzQ$ns!%idkgxuqeBmRoSaUS&z22 zvQYf6ERk_lS!apx#czrdL+OVubW++&k>v;B+3VA(h$$^FrN;xIInlZ%I~<6P@XJb* zm0FxRtx#0Dst#Koc*JlsznAU&8mjGRA6~B%rcsP+{~YGXRC(fhob!NAAvm@mzhgfF zReUWyz*)shdU$|SZ+7g&NYiAmk(mi!)-$#iE)M=9if*GGd|522-XZ>2y`N7bmOIDT zZ;COo%KKJa#sO%|1my|~m5j4z)Ww(mQVkbXI6=^uI*&}0X9~0_;><<4ZhS$H17NDi zh@79G%86r0QQ=&u5wU16(1T(wen&jEuJ@fWuZ&WYia?=*YBsQ3C^nQ3Bcva7lbI$=Bp%5V9R~Il{mdu;`cUAdPd}2gXebR1`8q#Df|}nwqvc zMw%7GO;emWXf##gdZL!MB+$<_v?YNcu~>hFd;D+=NgfA^>ighLX=K8^RH z`94g#zC2ut4q^XRae%fvJIhwNjMCwMfZ_LqbZCjA()+%>c*AHz9NlGWmg@uF#^>Ku z5qX5c$vHo*q{9+u(C)^942w_UzDSv68e%1?V+^gg>9Q`QTaNrAEJBVQHjbDiq9Q0j zj(6ih1l*ia#C;udajzWqsx&5Fqr;@KfCn6fITIsO*L=T*6*(ut=|J0{!P$cW&Qen` z>EUG`P?a1I^Cgd&%`O$J-u#?}<%_-sy*ZD`S5y7T6rB6nfhm@m#Jf>GoE-oV?|`g+ z%VL2#kXhL_aocRS$j#RC^8-DdALy~dR$%-HprIWfg(lOyt>l`ULLlZ4Z0}OJC_3Gg z?dRg?cO$$u7f;Lj`()CNH+)Q1{uVi*}@CKM^C zqQgq98o{A3B!GL~B*4}o!!Sd$x<4sH=0ILpH!zxA*(Drlm_z;&VHLSkkQN&jQS;~b zEJjA%qS+xES_3=@oaXybTXo|ML8qxsNwg6)V6Z)9}ZvOPTAi)0PR zW5a%o)S0bRm0*~TgnLWEf*`CE!9M?;y|;m~?7HeZ-@Es{`mXBN>Xy`!TK0X<0+m1t z%8X-oY(>=VW!dt`9t)NyLoy`ewI(ye>SoQ@j+c`)%VU>Op)^K;_C$a}6xYx}ZS*yO=41RHjyr%VMcZbd5zx1~vlPj(3GVNp&X##DXn zG-8eglE6e4F-L>OwjxI8ILZ1863KIjZg&C8rb^WVOR08k2LT{2E##bNO;l3+6vRc{UX_dug2{=fW)^&2yM4i z4Eh@Joxq)lUyxZdHRg0x=9FGGNKy8yNabNf9Zu?5lw{#-v3su;guZvWOznV?rFzC(`3ayQA3w&1MWZ(2Q?~ z`pu3y@5kpu^mNS(B)2`WUShowWkP(Z)R$da(#K*DpU(PZqYlO^W)3r&5b*BbQV7NV z&>UghWniP_+tSi`+Oq9ZD4OYTZt3}nc_Xgvu>fM_DBvdsav_)^MGJXlybvp6Oa5 zh>i8y*PQd|VX?3o0lb-KF8+Q&x;*Gt3zEL!kbv*3JHC(>)2Dh`OqYOrs>h50+;a5y zN!c6S6X#cMLQM-gk(b8@gf>uFXpzm7%cv{K8L36~DjHoOG>7TCepGhu`B-7I_%7;? zs$c<)VAxr9m++g>E>>w7v-tdsS&FiOh9XfRO9`#$j9d@);!pO!;O!S$nzBOf^8@Vg z&27@%tY>OELw|*6DF+U?) z%u0tStTiEhm|aj}SV#tqeTJetll097M2f;bGidEIRqP$F>m~4VRcQ7E9**!uVuv=ZCEXR6R>oNT7c4+czaG#|!njbS0ZF@_0^?+=(YDZC6?ff0z7Ga|m#> z1)5^VG*z6G);SJoNGh#UT)o?Q3|5_#ma1zW4kx^l5Nqm{cSfQcZT-!`hyE&((+lcs z)1qCi{rFzkw0v(HSlG05uicvBb&`8d^078qQc_xpDZYueg2$T-4@xPMtbh*o=_aKe zrlho`R)$iG+J7=a-#IBGJ*|0K=CNysJ3RK@4v#$$JQh|P%Ut$XCpPDpobGE7u*Er3cAYatcFvGvSRI~gTr(gJ zyONXwduIHUT<&IiLVNu!5@56SxAB8t#-KAT3~@Mdg|e^@3uk0;2!!1)gvkK%3J@lJ zTtlHmI4wdCWPB!!N6MD?0A_`RY>{}^@!JbBgIO}QEqBrJw7#=L2tx|V7^N1W!sUKw z8rm6D)MP8tLe>QkLlJvQ#O_)Oo@E!w3)A$UK(Ej@HDk(G9yvE5ofzbc5?AjQB@XI`#U*z8lqqPjWQaq%E)_DXiF}F*+E`H51QFcM z&v6&5ivKYg-%wORB_cQsI5OE)G3EGH$rsoc^$@Ql79(SGz0tjA{=7`m;pX{;_C`y) zY+EyVv0_r9C=q5uSrP54o{q&Oq&0#h2M`w>`pQ_j41H;FlhjIeB}Hf$ZBVWd+)I;1 z9eIq7+@bJIQ8gWTwA(SEHuXv~;NZt$s7Jl8jepMpLGQ(To&w+Z zrNx&tY0}84f-F~tX7OEC)_*3`@@e9Fm(3N8L7LjHMv zZw?X39oo`FO`hZTHBBidp2@Y8q6$r3+mtesC)ZIbTj%vn={ZU(O3{cX`zW2<=7okN z=VVOzvy@L%eruGYL`_~-#SM=)d3-~9jQrArHHu%P)-9r!8@WNb_>$_{{Ke`zU)|}& z@%YPl9;UqUO+s{UEJ=f|luKKL(CvS!PdSqLBE7Nq~jrNG(NHrU`#36ADYj)O!{^+&PI`%Y- z^3K@6v6WU%Y}+S52kk_p$?z`5Ldvtpdmkvb&qTURpEMxANUWc2EZo1=ADGO9(F7+- zB!qz8$WdbZM=m0SifMuMqQHfrm?3bd=t!9XL{?!V68C2dx@v~KL33O90CsUQewW58 z34?On$woAur9g_Lp;BurfxM3tA1>DPuVVVek)yiWof1v2L?${wSxLF36-JG~ii9R_ z>h0$SGyFcFgWk2?AN@r=t>9QayUN%LMpBsg$j*ONe>^Gcp;AMaE12j?9cFgx{mV0k zOz9hzZ02;-Wbrmqq4pp*j70U1uW#z)pEpwg$%?S#PO-2a-zx0hMM5QSz|j#IA&KM7 zV|sJt(r?!N@$%9hG0Ax6AM2e+etpre5ej(^4#M5{EbnIXE#G7tnBEsK`#3owC&NBK zk5e*ijFePC`UAg)mw&evcad&f6s4&^uw`VyzF#lBb$MCEyp{S(?%X9dwE4`|x_B#l z8Vqp4&D~0#1O8^CH1*+bWz1nKvCu{55;pF}<7k}Uda(c1pglg`K(0O{5c&k~0wq~C z7;DpNd)7sR=D#a^&5ryn<6u5AY9CNi)EFG~q{ZcJ<=WCp!WYLsd43pCn$FG?5SURU zuct(dv?h)h{b*3_26$ng%{})l<66`}5Ow0dLN*DoX|f4oNz}8nq*z)H$1Ktr70DJ*H^ zRGIZGGe~{sZ_E-#B<9iqPJnCGDWqk zUU@4XVz4f=nzL$XTa0g%{z5&N7t{0#c)niO3>b`lmjWpO^C4T zojfh@*u0&2fm(LdslM55c|$FiQ!O*}SJsyDxbKQiup6ikbuc$b6fOcELe`)Lo_rBn z0;%S&9+EqHe_rXNwsL>gA>PI|Ysnj;mTGZ()`FOhFAxDALv9yzjQA}Yab_Iq!{Yc> zap0PZdFC-ptXjV3{XX+34m{d@4=k*jkD{3FY#C1pGgo$+ip=XL=;HqHyWdk(&RKGrJ1X}kF#Q~Q0Jh=|AFlpWTvNF z>7gEJl_3b2!Ynjh+Y1ln#6sU!o_DW(<*j6KB0WFW!cx#gkrqp+jvg$94Nqh*3tNC- z?{k+H&T4wW>Cl2|vKX0^*!-o>%r(QL zZ6uLxSDTb#Nan=riD^|mhRK8I91$L-ISmt0igwM+X_#cPptca)`F;$JTS)Lli+ONR ze}rhFKlCoR^d|_PyhYMDy=T*Yyk|tuDK#Kr_RW}hVK?yb*mBOKzwL1l=G6%5+qIPz z6?s8`6MHhKv_uehE#wQrHm9XT+#lzDwrUp~SPF;?NDBxp9qf2x6+npOxyQ5;Rx50` zXbxE@v>~H8WZ{PDbxqsP;nBWPFYF5|4FFtUeMx%!n(E5}f)}Xe^*QS$VnSI<<%1Cl zC7G6T%_r5unm2yqn{?bnQL%ybY@bKeIL~i=oY&`?uWL^*nFmup6@r>m#rQ3F^U*-%$O=Rm`Es5y0Nn*@g3q4U6*@d7z-b2mky=PvVJ_>^Nzy~}4+qLhWRF~q);+@1QIO9;4cO3u3E>9#~&KFRL- zGXe+j)-eYPyqCJ*y##pqxBw7C8wOETU|0}cDaPM`_|i0p)K`!;qjU>1@Jl`IxFI`C z>5~J*pG^@Hp?!zpFsd{h-}}9rz4|69fiF^pYdAzCvECLQMMPB^n0__RLnQKK2;2@} zo&|9A(S3$M{av7Jh5&{c*``zfz*@I|XQulHFa#LgNZ-Qnc#{;-{UI50K7UWit@->D zM);{ZNFhUK+-V|>wWLO6>%pRAm%?wV=!IfU=&YYohwzxxSL!+L-8VR6M&_%MYO zeFzrY30#1{gcvwt%9Wlc3hQs))#C_UNRJzZjOjbj7x}UvY!>0xn!H^LAeoB-%kv93 z+;*HJ5c5x5)pG&EN@h$Hk&eRCK?eyG@s?WQiwPOcnF3QS2hDk2H?1nV;rqeHX`u1^ zcoV-&PyU{1qtG-(DZwg~sU+Fru?OXnKva2u&MqCyW%EHAKli|93Xe}m3d9I+=-GvD zOwSho)-?oCV`q@_{wzldWLp`7XhRu8mked=Vj>_GNy1O(Ac0~{|5Ui13}rHYscTSf z2Gl_vLL9QEDWl8wv%s;MGCGYcvkYs>m|2v-4k?+e1UH8CD1+;%%tsN}xe`}AIl`=2 zOwVv7RXmXUC@svfY-!<0D*RyXie%)fGCr{oAn#%YKOYvc1xlRKie8Q;OCgE(W!iV} zbA>u1TbT4VZ;qEqC)~s61_Lc*2IC%xDzl!6iGzl?jl|2E2>*gr0zaSO2UP2+o};0$ zzP*JTctgcHLZGATjQ$&Ao*JuAbm^vVv+dh<37V*o2{LNvvs#T|KeHi6x*1J03ow1h z27|X~g2{79XE?)+WvFd#@?$t&rR->Re&;QuON@n51C&5s)heTT$GV+ng3ReDSRP~h zYH_xXKsKQ=#5g-9=(DrEHcu+S%-O;Sy4K-DCJBj$(<@DR457I1$JF#s%DKQ@)Nv9I!mF_=4k#RjS|z80Xp+Z zn!^*VZU{r-qFN#y*DvaTS?Jo~(7ntaXow!xPbJNZj4@_`{DnYUoj`!f%h8mab4gb_ zJMWUNcJ`7>FoWl}q)9-or+|iWfU?AA0B8Cft3o;6DrB19bB_s0rU18VH~^W3%<*(n zIHh>IB%(=r9vEj(%nR?kVd` zaKv1qVZFCiC#3XBomgj7XmY)yNEFgkVD{GMK#UY&IFCnKt*oO-Y^a>!%hXBQAk*O^ z{_Kme;H)Aab;%2z5}M=X=i3qu!s&p;m^z+dJ0@LCT9Y6=Hl@x1Z$PLjAdtVur=dKy z6-r)78l8?B3WEfLZfBjB#MbD7icrup-s-b%eX~7Jw2nBECeQLnTs^U&8&_e8z@V=G<6NROmsu zAsBH!TghWju!{X?YNRFRG$>tyk3s1YycI^qq@xJISF8w~*{%qkVSF|o-0UhsAN`8r zwb^NSjI@pp1j~1b1LSsfaR5ods0nnKV1xo8U0_m1@pANN2 z{o}0Em>TVh{#i~o+>+L)lxz8M%=9{WU6e9rll@iP@bD2{lK)bV#gg?z z1Nj^;zeZ}uHQeAad~MQ-pqFa5$v=4vU&nJMxvK67{YZf#AZ5HDd{mPvWZmkxk6L*G zwQ`GwM5p|Sb%VWNmDHnRP5)$u>xH|Jt3D($d$X}3enoG2Qogw_-NM05_&k*p8jdy|S2hGLIsZ&mzPTrx z7Mphbs#hLknRL9>m=t8X(vnwNffYFcV}mwZHnlpE1mVd|^brHDQ-kw+17A!}&h@o& z;b?&HLL#U2=`w5sHXbW1K>hR$bID0C6q7&`w`9IeaEPEOWm_ExnzYvPVcnDQ8~cEw z71aL8}QF`av zQKhGt#B|UIS5pU#U=&O4OYI~BvaIj2_Z+^()*626;!VAE$zAM5{6$WT-W7N}Qfi!g z^|3M%v6j$K{-?ISsl>2fHfQIuDtU6*X) z65rQSn3uISIUnC=!$pEVT5`&0;z@!qxnv0W`D;td8#izxK<9aJI^8f%~szX}3dY#$f4Z!0d8VtG)Akn@Ox#Ko?mO*1VP4&>Bn7`_ux_Y|L1SS){7bj*#Lnbh2 z&u8muHfjcgS$1s1q|nMLL_J4{A{JQ5oM@SXblp-An2Hxqh}my@ zk&@;`T{kZZQrHQ8k3z}MB&?=6+GfMim>Vre6FN2W+v75f8L3bWW77^$hAhWrkW$Bt z4MVFL+YvD~tVjG6P5igG{HT9N?`UFeXM?qA_M9up1K4G88H|sY$^ot!y0lW13ehlC zGP{d#zefA$8<`t$Py#d5%2iKmid^2SPeSWH#n_BCPA!5HY6eKKAe~8i(T`YwfGu+# z@l6y1{=V2w097Yvt7-NHCIYW&8*t65nt@LhlkjNk=4?4x2}aYapEf_Bp=Jt0K5F13 zaO*sS6G^(ApyE=*V4UC_@3$_CJtjDw;;e@b|2#p+&hx+$FbNLOAoRm5#Roqt{=av0 zcT+Sa#b)RWU(J?b=ag~;GN#s*Hn20IY0PIr(}KxD|6L5mhhK=bG% z+fXzX=S?@@s=*SNc_A@6p?E16-Pz3OG(OrbnHgO(Jme8W&@eg#pO_-377Q-2T^^-qS^u2AyD@<%sB~E zcte)r&zn~!DGq#Tw6;lcg^>qu{yuE^Iahcg>mT^{^-51ha%gQQn_XL01z> zFhU{YTC=ILNCM%CFLqV_7(&khWdzaMv?)J#j_18TEvaj~l}c2u z7tV0W3Y%RETB~t+ih{UQ3v0NRuwu!Aa!kMMbVm!oD~7k5L)XGGst92g)BHWlUs>r< z&g)ZM@AR`U_M(2eHLKO9T=Gn(}5h57kHo>1ZghLQ^CMM%g zKp*Jw$fH?`GHiLAsKrOIF{IYj*2CDu?x*-EBxyQ;H^wEr(r^hLLWm7+QNbv|l95W( z=4Nvz_^?hyn}G2wV9JImaD^R%uvxZtHpqX8i;~lw5=mL8q%Bd8pJAbA*mSH2UjgzUggN;*udRdyns%cj}`7`29F2)>;-gu>P1a0?9XX{K~))|GD%M{}= zQIcXACjP3+N#Wx0_%(?L~GBdk*5@R(C4NY9(DjU@OY~#>`S90aFcCL#;j1O zY%X);!HgmgbmR^namoYX6Um|Z>xOh0GYR{z)UbwK=TDiZC-#s& z19$i*Pi*#BtkVnzb(`Sf$=sc2eI9o4+1i|0gV;QE!p>|7lbFScjtQQL7$*3a9@yL( zi=cVE@gQHm@Qvx&;>W(MHNk7u-I(C-1X*E%Upq_}9hd-g!oi&!|H03Jo%Zd-`4V<% zSz4S!YP2T!b?(5WWNgO-{}K#yNGWo>>FRmPF!W25dw)&{R2lYVf|p^xYl4?)Uncm? zDHA;6uWN#5o!^+?SsU8~{~lh#nHDB^nfxIVZ1CRBXudu&ME4ufp^>Yw z!8@3DIC@P*Bc9<~Z1A(P!SgKH;K_;B*x(hRubyzUaK{F()77rT25nR->EncvXWDq_Ywyfs2+TazjY(7ZSnoF0q!K2u{3O0Cc z7Z>B`Am}1Ccx}R(vREmCUa~0usn^>rRt{YkJHjgZ86!X^Y4%i^)Zv7l*kTn)pf6^z zqW(6EmBcCf!PQx;<}PZn;&5$gI!rMBGQFo;0-oWGq&o0YxiYqW&|nSSgA+ zR>E{0(P)Dr3IDfPtmZCav6{(IP)u%&X|Kd$HM4`o>XJ~Qp!iI9KDmR%$~MZQ=-tWa zo2JjzS*)7Ce^?S0tGEr%0TwIGr14%X2aUyQ#u_pc)dtOK?<=)fS^M$&pRn`LmZYw< z7Aq-qXOLwaNz-vI!C`0edYnTHl5+`*6=%T9Vx?XAyx3Z-24RqZn|rG#+%_y$wr|+P zi@1_^*S!!OM86NbZ_mCX}a70Ad8EbbwLW96v4{v=i~96+ri_jC2AHc zX>Ho|_-f0U9OJA)UsaE9mv773Y6tL@dweg#eg$QCe80%fu7I6&t?ybV$YdcCx8&J2 z>-+3B>-#WU-#OESg&JyemJ9Z$G}d>ov{+eSefKM@rdsQ}s^-^P>-%uK?;Jlppk0~u zo$aa}>pLF(#^^h3eFq#JKAoKFNPuC-MLz5r--qEM-)ek65yp3QUuICT79D_;F+ooo z6lyNyKM{gIvgk)-_Lc8?<{Hf3|JMh*kCMX<&e0hL?-0c z_#P%^w$LSYMc`eC>rKYC4j-{`2fIgO1Ca~Uv6-nvZL$!{&tHy`bS~OYvDO#U!Y*&5<7f%f@;PTNDu2lY1jy z3ndpiC79JINf8LPoX}$e2f{cHcqfvv{sqbT*JjrGSd)^|Xp zelpg-1(Dgrp!}5q3F0&i5-g_XJE>9`!|5k2E`ugYj5fz2iNB9<% zWh=c=w#`y+eAB@xZ$$2(yb*Z|AA?6@jkVq#+`${s=^*v7)+=>G*ch*owSJF!*0t6% z_ja(>3nj8ig?)at04qIXMK}@HQ19q6cG$*Jn&XinVB?ILGqp(zyQqi_Lt4jDir(k} z&3m*)c6zk7&`x7rTWD&C0r-W-8Gv6mvXd%k}9rAUtkjZ~l zm~$Ah;xx9I+mpRb2aaerE?tmKv&j-9254JoXP%42;w1@sU1{DwZ^o;U+(p^MM-kJS zOP{4wR#%<%BE+7BBVC_Qda=iEqGRgy_^h}wzskagh?wkS(8-Pt`g!MujwLiU0N)#y zP-QE6$ozwh8McHfe)&v}Mm`|JD8x7Ju~s=scvl>5NlLMqibNaQvNb1bb~c8FnRKQx znmBvs9TFi`YcFqb}@U|F3IlBz2V`B{EkkiH(D#5J&>x8ffNcO3tmo$d@ z@H~5VZ1-x7p)-;8Vh3X=z{RSmHHK=ztEGBl3{7c~*qOG~7^=@)xiM5hp&b`Y1SH?s z2}r)F2}pKn$w@%l1Cmi&Yz*xns4<4FH{pB7lN0bP3Bbbgt94F0s;o}88$yjH8$xFq zLnxtmts#`7sxXzqVEI){G8Bu66FL`ZH8IKO9Q%(lj>N19tEQvfnB?_Nlq_EEXaLF*2W%QR zU2;u`?5Pwvc8ZEACizqwlN{g2cdVJ8UN29@_ai1*&_|>kQ;N=K=u=GcraSOR*LDjW zPooZK|EmL?cn|FGrqeVlY8hIb&37E~lFUX=H8II~fy%~sU`h*AKuvvY7N`-EEc240 zO%!w78l2L{24QgW3REcQ;!j8rTY(l7H^>E{8wsHrnG|!pob;zjmEJLAfqo1a+LdE^X*oice0CT#E%1T(Yhpzg{4pR-%u!D3 zHvXDcybuIQULG=l@++sZaAUJIqO8~3kl`=#oauR@S@H$Wb65d>k>?~19{U`=$aDT< z;W=HimDEcZ?ZwSj!)ddXj^mD%z?|i++uE%h`-xL71hHd3=OjatJe;;Zxd{tmdPExPw9aef4bJ1lyuXfbW^uC+%sZOW zd#GJ)ROro*k6FeLcpZi*sT5kQNTncGn+#L#Uxxh3GafBY({9- z<=3W_jkh1zcvVPN00hhLY?gY77Fx3ud0)H>6Q=Ym(94*0R=?CZ&#zW8VVWXQvD%@v zxzvyKM>k=%Ib#tT21cmX(4%laN-(d1$XI+mOUb_GP8trzl&QVc9A}D|%w{RDsPEq* zO`v0zvKgw`3~%emlv#?Q%0>>dIV$$%V8VGD|HtW+?@-Fx4|%#883X zrTUZKyVZMu~XZHNS{UtNj=VFjY0NRh1U>K}G79tWxTi`w2CBSK-43H4!(BBN`+x@N02N*1qE-$f73{r$~!Xd0atCipqfK?Z43 z<4%)J;7ysL&ZMo}nMDEDlqm{xhX_n-8|E-?SCnWZTfDf*=7Zqmk&T3ty3G%?-46Bf z>%c|I4|HPKiOCbqg!PH#S+YZ&()U@NPv|?og`MnBrxGsViL3+QX4sh8bZ#(4tTJ#+ zN*8h`oNs%U(wEwaZA+DAFKBU^pP)i4Rg-y2VF6)O+7soVO|~)d6@&W0oay#hB0m@(C-CYd%c*xD2iUe#D&L#A&dY`;^&A)76Hzp22Z>TE?C;POC zUjfVGYR}_r@8kMZ2&rdbZ-SYD)Ve~4%fw&29`&Qll6KDmyGlEI7BB-edlt&h#6$w% zju6gg&cZ z>^?8)m&!*pWudu{QFH2v$?zBrkYm;Td88|+j@vxXPK3;Fyyrr#ho zvMG7iB{)=aiFoOA@R(x|)hconcA)VRT+)w}KT_gHB*Qwnl0a(;5Reo!60PK>lio%C zrOX}uK7BSWLZF>?;%b{HX`9LrQG#1AoksfHE1Yy4EgJI3?xKF$?Aj1JZU#yq z)tUJk5FK=>zKXvdp{L@n>o^H1Ss!*es~jfD*P?+sGMr+o>qGXlGmsK#>XZV9vrIc@ zNZ47J`%|BF$;nR18J9fKmZ;B<4WO0;+e`ckw)46NGBMZsJbb3z7jY^>sP7Bg%=BrY zb{=2L6qLM@#M*wC`R>fgNu*6QxTJu+ErB=`u41`BcfP~fARx3puevxc3H7SgIfDyYlOBlU=5a`yngZ@Kmfa{!RRae4p?rV z{W{OEWGx*U-4PFU2v~mcU&KR_>VJ7WRO;IN@b}{3Er&+8`=QXub2_T+7E9W0q0H3U zO5yDUW$2V?M@8OMATwZo;>N|x*jpz(ng{4fGJOUeiR3Ta9@^h!>oAU&tAoib)|DDT zFm{E6vEv?&SuF@=l;X|1pHc?5rQ9o^x#&YZLLe#BL#HfsJPY33;k1&&&gKr-qoyvn zbIJrU^}tVl!#t`BE==f%@{tcl(LP|RES+D-ib!6okmvp7) zDVKDmXYlrWTa_4=7%K7cjcqEiIPAuQeE7mQre}-4iKn%3&7u;+8g;ykvocyG)>&@w zTb#6{mOu+)maKB@3qKv#tZq*@!2^d4!GcA_tQnglWXk%O7&E1;gqkB{N?GtH`WWk{ zB!^1bKyayYiV-!drW8ZLWK1c`wm3fKcB#EKU2}X)DeC}rCtn_=;Bs{GiLZ% zvr~2x7hTTy&oMmv(N}(3N%~LV!X>l!xDTU06>AR$orTBVaN~U>b9?<(MH6nyRn9Q9 zSAI{n*~*&-;q{;=xM~XR9M>uP}H84*gj#EhW?MfS~X7$d@S0t2y;9dD^x(P zk5R0PkCc3N`#-((g9GSw;KUm%Wt^BI1_G|0<;bb8V%~Hbt-tLXpf8?4h=R(tdPAyP!E;Ur=BP_sM#2yi5yX_%=oY z+n|hBk{?g#mpxC%^~-wfG5r$Kc1*vl>K@ham%WiZ7yNP*%2E9;y`gwWzqiG@O(VOZ zdn}df`n~lH#mfMu^ei~1!+Dj{=4^`&I>(C^J@UAT*VHrz`O zV)1HootPW?<@@8@)cC7NhQ0FR(zD}*6TLD$oGD-L=1P&)U!)R`ZUbu?3}?}o)Do$p zU;0Nl(ISHb+D0OvpjAEq(J$r@Vs1Bw%uNS2Yjq5PtHmX;6;FfIs`dBo7IRy`~W{8>FTdPn9cYVXd$ z8lRjA%|>Dh7NqcMSnqhZo^)A|UihHGma>TChA{VXA%ya<;=$1lvx!# z@b9+b9h`|L?|3?<#eqe^HNg43lWPNeP69$5UQRg6FaI@~fk569U`t3ZN2vRI#4zmI z_GiyUj>q)b@;&-2Q3UL70%alth$ex0xAOGN>S+MAn1TTA%?ZGA3;?hHFPhXRA)fMh*y#=f<5fMG9IY)ZqB0N=YCimKkpd3{|%*>LUIg%F?v_q z5CCzWW$gZ$Me&j%9ZDWbF1*D()%Vk<2jUgkk1w6P8zI2Uofvh&jRli+7t`rkF>1{= zq;<8Dy5gnwidsf+L8k*9t3>6~1KGsTat9HV_1u6*GD%ym@SqV;#hU6dS5w}(OV3rt zsWVp*P}t74fOavd%2sr~j<(YqUBh54(KC6#LfRp1)lh;e+9Wu|@!Mt#e2Q!x?ifL5 z?wGMc$B-ie0lt=3`;O`u2eP&*86c6oOM(UUg83wC;wqhz!XkZuB53!dc&%iBej!*1 z5z7D}d0x|FF2^!(ejZ7Y;+CBS-14;1ACefpjLK2n4D^a#U948Py4F|ATrK))maDM6 zaE=$Kb0JwAm^{85q$7l~e$X)`iSsIh)o~^1ANT6sB7`x2Pt}iQ%)H)*1bTJb1s8l7^qh~QY_iCY!k2U5L&jPZ9tnuD$`FMQ=fcNaQ-IUxu_)bh4=PAC6UP_j zipMO`pmgN(B#t%_c!;n&-dH};M;5UrXC5Jysyj5DLO6L?wbY?YM6boZ^dZ&=lw6vG z&vEe-+L4bI&(hBdFb~29>-QwN!UqeNQ3JW|79T7-0EqAg4Etb*ivCVKdfEr8CXkkp zNT{(+J(O;m&~FV zrxT4;8=c@-bH+KkkCxBoeqJ`~-VvMvxnEbh55DXBRo&mx);E9eq~L&)GgIb5FOVFt z(X0%C1^BGvn*e~4hA3&gwPkD?Xl>hyW$&1`ZA5CV+oFUx=3Z$%njUBk-S2{k9zj8; z4{L|HZ~G{_){@*OeL?wkL|DOr-oqVY1ET0_<(@6T;4Tv67M=ARRY*V#&BFl>uMGM{ zIdDeW+Yg1d*Q3FLg<}20w{7wT@AiBH@%Y-qGRJYf$XFig3f+pUyK~oR9eylzxa|vLcF8v`JRB%$ z-cWsIL(w#4q@;MsoES4hv%Ig#8w?{+9V_?)D`k&y5P^{KdsSlFhkA(~X(=7*1>-gm z;byJ-_rX!yI=c43UltC1aXuUEa;~4g4kXxW&W4}JU#r7vuuCS-^>zA+?4713*)&?O zx~8_h>R(4OyeG#I1Vd6Bft+lb%2-Vr-l8}HSVdEk>?HZQ*u_hbu-arej_?st^g6%d z3lmp|ZRPD1=&xbw_xz&a#+fbfcy9{hARBx#jE;ufu`~LBI`ccw z7v145pC{xmHivZin*!hP0{`&@|FI0e`1P?4{GdpzG6D@!AC6D=;n;K^sE@zm28Jq3 zi8o4`-jqj8L&)HT%RNT1S7{VIhT^kysoDKOh4U#~6n+7*cJk!F?xT&i^P_|(Sc^wtl)vE9CSa=CT6AM3i@B`CIT{WvfCg4QKoOLy#x zY2r#tN-lTV6ItWe4CJKsXvve2`dM}>An_Dclsk_*xDrJL{KB++5Egd?R1BkG|CCKAnw{kflqLE z>@hJ^R_-0A`v#QgL{nO*gmSWj%l%Pm`FKc&7V&+2joIN2AF13dI=z(>8(eVXGiz@9USw9b3uX-ww ziWlJ^n_!p3tFd1ZRU-hghrQ7`(niHb=lJ|0#PA?wAO*yQ6wSrJWzG%^jOL6(l*HLl z&l*0Ci46|I0--4p1w)&es)g(G=In(y`?K^BFGb{x5wZ^RW9*@2)mZXvpi zBi<8dFG7|Yu zVj-)=$}or-(}RF- zJ8?lh7OgcAGp5BU2fC1NY|}jj38;JSZtfl(YUHZNBDyC|<`DpC-R_;69s$MS-r{Pw`12Pvv_?ZqA%YJmcPQrdGwLCAv1Gr6UF>k@#1lIU^;(Eaee#M&pArO22^}rY4qwbIGJ3zr4eXKtj z5~IO#6P8k9XYr%aKg76Eb1JZ&v#F&oeutBQ#{+am=kxQbVZ=0NthEC62K{36SL9pT zJC-iGijrO6+|&XC^EWqQwNm?rnEVW zXOpw?PYOeSRRlOUtUwtTo!|->kRRpzlXU0kCm4`HN^cp~-UTb{$;NZ8ADi zb~|GEsy5|sr^S=s$p>dgzlpX*w1rm_TsYW5nphKT;p*N*^Q7NkaG8~_kGJThTJz%{ z)8iqJvEir3EKpRBV@eb@@oyq*B0m4!s=d^Fo=>Xg)qP&Q+5Q1aQY1iZ5(;Y5S~@t5 zmXDXMqm|O-+7aDeu8x-Em#HISjO5V3r|F|H7mx3Z`JkaCfDc-Vc#Q6#V?~_N!p@Vx zj8v8kcR%%9i%rdtogV5D-VB~IKrHQa_BcR%47wcs@5UJbIWz04M)MDd=4bx|X+BS2 z{hI!5k0^_N&#^h42OA18o^J?|we;l(@o(#m+3q~pfe>*{TyEgyn@E%KVKupufxub9 zD0pc^8w>|F#wK#eyt5NIq%5g1rM^dvEaXOFZd`gM=-tcp_6g&s+uJK`Sx}iX1d6+y zK`!OXq6Z6j>e&wqhFw?FGrfEDJ#z%&Wu~hv@d>PF1Xjbt!j5uYh21dalX=U6!-~)kci^s$M|?FSCNpH zqr)H58w=eT#wypXdG`F28;sfWU#P7V8aX9cq4&$uQ%ktdsmbN5nNNE6a{XukML$S@ zlJfJiU@4R`7+5rr!O~HTb!-w<=Nmod3v@Dx6TIq^=|xSZKS{-ON;pqV zrC+|CO37Gf`fN>~n1JWt7?NfL>|Kja2xZ(O!#t>*IwYG8OZJ=43F;{va&XBjGUynnw#&-$0|*_G?;ovHjE&E!U?D`yHS z`R{8+&S~6mv1u0_ezT8RxEHmA+U^m2;9@0$KrYsksrjo#0u!=}gw)!RSJ)a;vx|h|C$=ErtP46w@H$q5 z0J22S+unF;+Z$UDz3q)-Ti<99{iCveg)v7*-D2&T!+#=C3VvnGVWzPFS2>dh=|OS3 zQ${NpJxazLX*>mN_1F51V6zNTqf%%(jTTL#lH6|8mYi+vAxv;!(E_bn>%>f;PhLTT zVJ7Idh?!s*W&$>&w3Yycl<^tREtW_W(9RF_$h#9|=YdH7FyRin8Rn*dN_M|aH)XsK zwAhAnH}gR(LRJTN)&qsUnS?&0kdBASdu2V|j>2eGN3OUj*}7yHQL$FmvJytmk#1o> zbX*%KZ`i7g&^K*5vy;ti2ZzqO>;7~e3ro=|L+$03c+{V zGtUYMBTZjvR;Ayi%-Nvh5#x|jm= z;IfLG_s`9+c}|nYb0*t!ym?N0z1TeGhg~!9?`iYgj6~_}&9^YB(T}hKvw03WrXS66Y}Zs6^`kShFEWmgW)B5^q#b7 z4tvpu($(zQ2o5W5ENbIVd+Je-jd6fywg~abS%h2AYG2WCvpR8d+>qX;m>y>os{seN z(pyc#x=)NMjRkA@{(i_r_s{b9m-cjVcqAn zSI@?o#%SyDM_&>n?d(FPWCup7@Xlz;%r;hqQp-Z)f%lqWn2~D9o$8|3T(&(k+sk~@ z%=XfCP)4F_uL84OkOaUXlaM(pWKJ{Ni$2tQ3u1daGuuBU{&iA%T(Oq_L7BaKmwV8e zwwTua*h3_j^~X5Zfpe6!cUr0%K6WLTRpn~9jIngAd=~b|Q=C2WAP1*9Gjb=F{47KN z3SIJ6nj9bG1%ZW>uV6b6ymgyPyX2L822G)H*;l%6LXi~dOz?^Q`5l+NdnT7XBC7w9 zdN?jK-t>z&8XjKRji0_Z7dB9Sr4A0CkpZfk^eeTzP@Uy+I64(uZ->1&Z?hN4X4cHXh|1g~XY%kVwNKhxx zbht|@m#*v0Red`8ow39f1DQa;TA4bxFB5SI$&fsi`9#MGtsgBVv=Wp!2bu4qHQPf5 z3LUDrBT0_}NUB5i3qOzR`BS=qPKwd*D{hTXRAY?`q(KX}L{L8S9Z-7|lM_NAdP$cV z&=>i#LBPv2R=<(9*koRx`2}uH@@MqZ&=Eu$5ihmwAzA#M6{4>O zncSpeN^uqA=uKwxrc5?tV^+~ghFr~0%KCP8WgE@E(bN8H2km zw|Zc|U|YMlWQ-U1C75!&yIgCDMOS*Io($?zI2)`KWziSW54pSMe!Jp5E7-94TkA}W z8TOV+f#A;zZ1RkFDtqEa0`9irYuTEp&DKn4##DI8u+*Pc1H&t6Kvv$~+r~=}alEen zAD9ecuPWDHlaDa!*Dn)DXJEh(1KL3G0j`ij?+p+XZZ}}BD(}8mdsSudh;9%@>LpUV zS-w~BM~9Xczy!Fs=6+*TO&AOvTjYj78%^~qkb7J4f!LMh$TDDRpka)@R2I@=9_K5k>XA!9nDedlbj4OVCU z)_ZH61E#}2gVq^+4Vq~E@`ILX7fQZP4FSE2p#Hoa)*po%i}<}O7S%>3 zRJq(&i@!!50)F1ZQi-3hjc7@o&CMQJ?amqRJ=h;#BT%=@VCP~$pVNBHhsn<0U{*}kVN&ji);lgh}4zT4)CnU97QX+ zih^L;A8Grpbi=$`O%J_6KoY;&E7>by5h>}sScZA!#t+-3E#L5JKZV?TtHQ8?@^!46ZsV$3-Efp&tDJ3IMp^}B_B?N*! zBIbj6h;^i+5V+bsp|>F;3$pF(BqNcB40-RMqGYEfqjR*I;iz#noa7Z(^IloB!jX3w z+@48sq?X*>Ey6L1rPA4d*9u2Ek>StsDfIzKwVPwwMRh4xt!w7a{)eS+>$_b z`VRLdv4y^b%GWk}1^Afa&7gh}2Gmtdg!x4m>=y<2`{K=*O2nH9rxb7YVGb9S8OjVm zmo5pHwEGsWA=w~kILnO7!qv(Q3yb$iW3$ZAh-C5bmx6qgcrcl57Z1%iApnXj4`M#Y zE&40BJcW0^ZA|JNWW+*j&kq?fdk@BiY9+)**rghYVET}30DUk$T^WP>HMcNnh4y)8 zBS=D|ESLwRc>Q4Ptx3S!J-o%rYQF5-fk!x`&jeAs`6O9P8B0(qJaZt@N=z)NRdt^uPGNlnBQn2BLtjpBvfwT_^NilRS3at20 zVsf19c8Lhv?0z2{ogLfakHPGB`${}t%sz{Wfdor#A{vb*XiiNaC8CLn_gg73ko-bQ zeAA#9wks()VYe>alg25DIZ;YIZz)9k#x7CIc-iHMz52@!uate(o{~d-6j3pHuJ8kd zy2jBwFng(^jWj>{k`RgqDsW+OSmp=I+URr!NxrP_`r`!3zC|&n2-z0dE zpG^}$ZZG7##zi42)f`u0fxtfI?<~qlqagrs@>H-@Axr_P&Mrj{h)q$_YXG%rfu%iy z@lCy3nPg1S+9n8{Ie4fxk&-Ozjm2F&Jo*o19XP-hWc+Sh2N=3H6!-e_R<1A*h~_aD zKw!2Lu++PVo#1xSE1O0|r^(JyO1eP`|8zc+LSAGD^VyRiDo$2pt{e*_Us|)%!^0%` zU;n|Ao7&1DLMIkTuQ9@Uoc$;A1gNGr`A_6Yfi)1mV^2VGf>z~4_rcf`(0D*6^c;C& zf{c9+ZuS!I+Y>PTzC6lM{^5E?o&Y%{XE5alWYDi49;*MnIyPfZfUB^l*1L?7?}FFu z3D7fn0=B-MJOO^psLi37t&7mqfk zf?G-J#RTG=;=@dn_4Vp6(*-Ynm_P@A|A)?e^1Ht4$DjMQkHl;eORn_bmp=1-pZ>ka zf97xfTa-CXGoAks^KAPoNEc1O?XQHw%e$+BjNb$LWr6{6#mr(>GQki~x0P!#@1Fb+ zlTDH#G-|vUJiGrx)jSoc@fTJ7;N3@9Vk{mk9^|ukAK4JEpF4QRgTTG#$i~4R|DJF7 z2jBAjgY`weGf#)lp7@bZ{K%t!&^!1M_k&4SEqsVCe3t(7>xam%`LhL!bSiJ$4~y>C z{~vSgPRXK&*kN{f^taes*34eOKN^hsDt0L9=N`a|`tc&A1`$5uHCj%r;(KZX(|w&0sA znLP@LU{1>&%TKnHtsM^A<#DJ8+odv7)=&Qc*H7@rrc1mR$(O`M*Zr}xFG&$Q4Hxhg z+&5*kMOUDtaTRMNQd#y4n)RAh{*axT{waFKYFBbTONs%1lJ1vlFPjY(=lN9CA3abk zer%TDi){9U@z1|YD1n7NP)ufJ6KBa%udjcoCa2u!TTux7bEqZ_7q^EF*MH-Eb;+K* z8jc+`iVq;UAdBMd)Elu{%E46uIj zAAvaip-TN>NTB@S-=JZ3&ju|*QU=io>-JsN#{&|IHen2BF?0Qef=wy9tR0ZHLuwHYzp`IHb=i@2nf=HS#--zN=VVd}$DYP{iF% z+a8K-wufS^SQ97NJqa5jU4GvL${3@k*7CT!8C?H}`FgKzSU%Ym3I>sV}HK z86ae_VeD`!&REU@YH6H-?xo5 zUf~afz|cEI`Kru`+n2Abq>89lY5dUHg-gYy)sU7AG2Jq!~N2N{)Q~BISMFl(+uRu7dI|TKPXa%KL^C{0Yx9!$8!A+#O_|2eSxU zrFkBA+2)F0&%jlrv5|&u&#D zTjqHJ*89aS1kOgUbVY?HR6$V*_Pu!V-jfB-D|98o>@+=dxu$2DrqQCd zG(98Jf@Kd*EnV67v4xx3YuJ{Vn|A9#5Q&GvO(Wbz+*JI_JlVWf%+jM~>q%TS62OMl zl*J@!+2(KV%b+Lj%hgWYm-vL1`57m<5+?d}lqdarWSn5Rio$L)MGpn>cco@dh|It;7;79- z0)2xQ9Ey@d+q~)R%cyf)+{hvsxMuIWX}nPK1YmAF#A2ITEP7A{C$@yq53O_gsUQ6u zMu#8La^>tF!?5?)52@g!)HbsJI$bPXT~bcCUT?DN;DHAxql0fc@_3xugLV(+M*|;K zyAG~Ch%H9{ZGNuzzy{S`f8_D{E8o}FEOO0#spi?Qe1P}n;_m!wAK1`ae`d>DrQbTZ zx}_MMmCqiWY$={mF>M|ZEHCX+`}=hL^6Uc}f|2V#E>(Kq2w&Uv_++uZ?t@cM&Z-4g zZ_}kZDyrI5jW!PM-||Hnl)>%Hp^G7CUKOqgK?}L&RUv56Z*4;mf@~)QE$44sDT=oD zctuU@gt}dNunl#{Rw0P=yBDFL-5I3IQqVQI=2anRkKfvcAe=ZmA?P|4e_j-Hy;|6Y zhHKsKP85Wq6oS{6|RVaZp<~W3PCsdt!)S*c48+4-JHMi$|>kIY61$H**f`N zs|Q3SbtfN@(s+cl>YohWWzUrqP>j5+6d%mIug_QXkgW!Kw9;WXQk{9UTn|3L^S+L-x?otP=; z{=0~*E+h%*DgZAa6x5ggR5u47sPBBAr6hYnX6{?=-v}hb`WYeWgoKLQQwBKNBTwdZ zTc|J%%1C7{jLyD`gCQhj=p3&w^6?7x7{v)@7`EZ70M#uYVXX8A}gY zZy7+$YVuZkuSdn0Vfh^@Ze)Q0d8|Q$$mwKrClo#W(TpNJdq{-+gMqNw`c!^aKPn;p zW%aXqys5`(_H@&bUVWjt1AFy_=8i7Z8@Zv%r?#?M^NE#?G$p-^ zPx6^x*p%i1-bUZ7?r495b^)MAaX=(7+k3eJtWo?d@q?vtuKpAsthrMgFP`Q4ECqI+ zEUuSDKSJIWnv@KL0uwu`U@Tb=G5iteE<2xN0Avc}(OtImhMPoDA(b@@@yTpl|@bfoVL@#bqPa ztr;s00C4uoP}zpu%eb*6;-0TKMsM+MZ5#05n-qFu;zS6r`dEL`lQ~t_9^*_1p*f>V zs-L~Z?`C<`?)xiX#~{gWk`hpq$~MNJs2_62_f>^3p;VL4oeaV(1l?(FMo)>DF8R*G z-FF^s-T~tVry}mdG@vY_w4??7;*Yf;LSO=se=r=USC>7NdB6gq{{gs`9u3}plQyKo zh2~Jr`@B%3flouJzLOD5SYrr%{DbL;bCw`mFpJOr+dK|EzZf0~XL)CAn1X>(U2Eb2 zK@fXFYH6@{#d7021$?nK_3tBfAAb-g4K^M5pcdR68hA`WgNgDpvoeumXAD&1z6||+ zEl2v6tng&|%DUy7@mfS^2~sU*4#gs@-VJ!sp;|o;H?J~lGLjiC!z;v=(_;@%5(M|L z9Lk6-FNIhIu*u35h{cdE#F`gn#18B7Yy3x=XvFdw9tgd16UBsF^ ziY{V*h(i$sJkbN#=(_mzxJsx}qa27L-ITbJUP)H%L%E#?=l-ckew7vhh||<4QaTigSoOw{lw5I))h`!gT2iDJ?l=L?_k6ip zD3`yiTdy8io38{c^o$G^mkBJCkPH@`5+cm~3e9;T;L-dgV`jhmz0dv57*HHxgMkQq zqLqZ$=YClD<5cn7-g;`U`wpafNf=&mBMico!9Z&W0EyDY<=(+h{o_ZT`MVGN(7)UG z$l}lSr^rTpqMkjxvfLlUe-P=Qv=#DO@j=xi%&Smszy3tNV`O^{wF+Mx7SC`**FT^d zGRI2L*V?=m*35O4@3NUTS*8D}O7^IxXPj!H90lbA&U1P^9DQG(A{kWK!`E}rS^PBj zy~Q70#nLjbKxY((rRfRLP7aTkbZ{x#QUI~9OyDy2+D5WW(ZJCH!BCd*nJp5{39Vz5 zh;0N*8p@#eSt*@}n2p~9$p5l_=>J6mY)S&iEjyWc^5D#eu`pCe9*3ii9-k-&H5(@s zTSOyxU>`=KWL6OU&ky^cQAny~NCibhx`aYfmU&}%h%#w^sWSVe*-kCE*g?VG=P`Db zKiU*8S1?`sPow$1Nx3r9Bj<2A#9K&&mE7D5{J>6OuM)9KV~Uun1U}hGUm`sg5 z52KPJSl~f-pv})6`m_8U9sFGXtN76FYVJu#`N&loOOvQ@O}Bz9Eptt^Sm8vqJzJ}d znrha*)93bXt+ubJHt-rFTDx{@wW_H$>{PpMYqiy;+Dxa~^;@gm*;JeDRNF_juLh$= zg?f5mV-bthc%&Up^AN{muDa&n>mS4v^`-|msyzq)41f1x3)`r!Jvia-bqDwJ_xgj^ z@ps?B(StH^9Z>aYV+RG@CHrW~D#pWhtxd(ophYXmphcq?v^L(@>uF2{=q3h1hHcKB z8MNbyfY;+^G7F(yx4i{QB04|#^YF>#kW0r>G8REyxe)) zqm~|@kH;&W#~v*nyGy$|57PLkM=vqYcUOZaH#V99n!_yj1v)(Itj-voQKv7Sb_oYZ z;_>dzYrjmOt?9(RZ5k$AkP^SC=a$Kvtc&g1Uz9FND>b{=4$rB0d}HTvcX-ak^14C6V~L`h_1&3PNO8K*+`U z0T(E*|4jXuB&PL;keKy`+L27H`p9xrf{=Fo`Y*gy?wZPyqyC%%)~o)Lu%W7W@?iDg z2I8VvJlG!-W56l`t${-~k^2bmg?cXJIx>6ZUGJZAxfg3Cz9Kj{TEOt_ibksF7^X(J z8n&%@!r`Pb$uu?-@r4u-eJIgBL=3E1v=f52AkjWW#5|FKtu5c3#32TlKPK}V`Q6r0c+-IE{A;P0Zmh?*367d51N=Wahk%c_b2AvuqxT8jv??bTAwh=Nr zYKYt=vxoI8H82@^B!+n;Fvdx6LpP1szQ$sEkHz+0i|uPIwy(3;zWz@`Y|G+h>!A(T zW1`LpqnLrbOXy;GzDvy)8fw;p>13wKI_Y_j<;S_;nOvZ-#rg%^{jg{lLW#SsmUz0U zjP0%>4@WhxGj6fa>3^&jb5f=`Gae1KJUo^Pxz(5eqgAW&ZOcAD z8O3(xV2`=d8yEbK&vZP`{{#NVKrtrbeY|_=CauVr4c93vFR#*P&ysl2vxFCU{7&Yh z9>)}k#~}j1SWQeadyse>^CKRI2pIBs@J=kqdK{A@9)}2+5syOz%=38W zo!G?nc1(+S93lYHu4mu5yyV9*C*pC404=BH7&OerXs(*;S3e6bs;088`U^d*$Bf4n zE39|(!h$C9f|oI3b??M{o+vXsCI&nw@xyp$iF(vaz4UGVR0Gk~R7qN^_C zs^^=kWsQ|`GmkZQsp?#=dQ=bHDx*^$>r}-fwIH9Jtc z+c+8GU_arMex=T;`?orztv0Np$ z0bBS~u=Uxl)sr1cR-9u$CBu|#FtY0J=l3Om^TDcI%fhA2=If$t8MzP60Yo2r?9$@F zQCxC6WSM$!Uwg~WKnkjE0n8QumWo%m7xSo(_v+xCJ3r#FOc9JD8{#zpc3J6eqq&0} z*N^GWQU+^oy_u(K9?YX6a?iP>uWjUE$TePgCfDdKj^`aaSS?EM;1=KgpwfI;3=r0c zomxJ}MI3*@k+`W#eEW zVjngN<x7yDCLvcvPZRnf53o*^UG7FKmlC`ND{N@3&A>B3Hm`rrPa z+%D+W;hvw>?QY%Liu#MXy-v4S75nwmy4|B&0P5Grb-P!$?tZ`CP{G3Jj4}iPa9G-x zs$Tsqe!#`jq52W7NBc>B9WQ)SI{9HOC6?aI0Dne^FQ2Oz53;! zQ~_=!zQU2@9HNY-cF8x+ZF>W>T=I=m+ui_kmwe;owl_fTCEs{>+Z#sQC3=3|sOa`w zLnK_aOjHANBGv2FzXqmmX$I|fu6kHaGdsPVtE$DL+H%zFtf~zTEq-DU2g%{u33hF~ zi&u*h7~;u*pBH|fq5qV!+J_5BG+q#6qFwOA`q^*(q90@D zbv+JW&HQV=`F*d#H=SrlVdSVE#4*?V!+piT#1+#@9jf@M;w^>$qW=E$VSeyn$;D${ zP#okyW4U;aU8LufmCmg$TlV`mjtcHNo#?FaQ7$}>bq&TE|Ha}~E- z+OerqO;f*daPOe<^bYM`1uBuRSNf$VKEE%Sb8eeTN18@|tD%HAVFht?v8jZ> z?qZrXjEL&OPi0J>z4E4z&xT4N)9%|6B&E7n#a zP&5JZ03w{yC6htRsn=_IMkoMsM^g0ppA-0M;WPa5ZE8w--Nlu7h)12PySM^Ct`2Zj z`RestIq(2R!vjf@#s8tp`C9O@*5bJ+;eY-)eV2)52ydZ1ZV`kOgvz3;tg;lL`cYyW zJU?jW~99I2S3ZR z(Pdsbl3xdFJ+~=`=yukC9Ng-(mAgEB{4@{`c1vGyu+7vd`WDOmwrGmb^9b1 zs6PFK9thp+bLiL4a%Tlzz-Zp8${AH560~`$y=-dqAL_vsgD>93OW&!N7Oxb1aWP){ z7QHmL!%N?;2cp+5qQtLw=?{g(onCstAml!0{PIrQ=Y&i0k7n$PHPPrPHM+C|B+u&s zbpnz3waYXrE<~eGT@2DL#cgIt#BX@%(ThRSed&09Nt}h3E+9(lYjyy?`_e<{C0=12 zN0+=V{qLt{Fvvo;4g!IlpuWN@#HJ9Mb?`0ev%lTU-c_h6*n`-}Y9$s%0Gc_3XYYL| ziAGnX-ItWsLIM5#up&QLBm)jnDk_uWtM6mgQbW#vBe`ADbg%9$e!2)vu;Bz&wdntP z-zE;Jl-l*QKC)F$Stpd_Nf`Rd_fd&dC@a2O`e1!lcgzEx%_ufM9+PHI3ul1PdDh|) zfTR3Cz%=^yz90CYY=H@oZ|e1Ur0ST~U~qc5`?=-(flYs|_QJbcVV5gh^Fa={-wB=u z+!jDW7W-f)!N%`)g!Xqrs7RPqfle3jLP0nMSW^MG{o^7CK_SLN0=b5gj7$7L19M`t zl~xkN`t^ru+e(I73t9CVO5xheqZ7X#m+?O?xvsh&7rrq2@vg4Y zVXh>_OUwn62nM%Cj|gV@ah1+8ojMY0iqHP-G`_*Rx(!~CV$zlTQo|&nKZ?>+v!x_t z&qLg0As){k)pOSVjWh$kQ0MgaW80s0*#5=Ac|z}9zqNnUa`2fBEG9L5Fv;J3J@quJ z8>iJQ+@u3+2b>>B*dZjauQh%)6^Q4s&q1oAe-sNKrXzMVQbrkx5D|G#6P^HDa?g8?=1s8$VRFRvZ z;4AQDf)doIwpQa_^otOUDzhpfW*i#lXPnH1B;RkrUJuH$#=M>>I_s_==Nz zDw`3sBncWi!eNEZm}pn>+J;wtQBtOcb7YOxx2GZ{JAlF-`Cx(nQG@5CHR z?=*I^e?|VzWH@{>@{ZM`0`rQ9%Mp6=eWKk1q7J>7h+y%!D-9#ec4duW7GURSHq{L1($ z{xA6;gjLzlwVhg@wI*x*s~5;+E~ZD$nFIr~Vhr(XdKgq@Nn&7$b={uS0GlzDUiU>n z^SZpgz%Pk@DHG3?Do(%UQI+1uV8u46go^~VZRpUKCxqshAd%rzx_ft438CKNq(1sW zDcYkS*|^FlgGl;m+Y;6S5lJ)Pe}9lSvSBLSHso6e95l+C?g5`-{`Dq9DyuTAo}^|C z%YYmXDxt6uoiIL{op_IxCMwn8O`7G@q@OW19QML620^8Pancj0=$7~l1F|C(U1+Jo zRP=K99xB@Sl@67GhljfN)uH-f?pJ%gH$a7^s>dLz%`H>~QLqKdS@Vz#nJCy<=N(*{ z``~yRQJkdZSCJ@$kDZ9Z;~-*anXXXwO3C9}%Y3v?kcYUQ61MUKV+_vF47ZqK(1w3B z=E`kTe>%~IHhbmDRtd_3pEhkkQ`9T``e=?#VYFlvYuakhqR7LD_0&z|;khiLsgr9s z*03>EJ-w%=DvSu#ef!9qzRHog*gOq=CaF2wr>n6rH8KGVRMF!qGw93A*UuE81cz3Z zvB@42utzwbII(|}Bt+~g*I>fHSYz|8f11%rla&DhbfqBT{d6os5?0&YCu*DlnV$?+ z7Q=1Q@&ldHj@+MfHq4!nQ{*yU5F{C&N+h9`Fwy{tnS2eKMG{HvNY(x*ZC zquj(+OE>M_^=%r^mo(r6o-ir=)P(2b^?WN9OU7f_224lhH9E|MrbC%)C(I9&nI&e` zS9G2cISXxCtJw$8p0ER=t8H#5sbxvgTA0jf#}M0gX8S$j40=Q3l1_ERm7)vg zs6#faW_rw5Q$o#5DEbJhuL`|SbkGaZ;~Znj=|M&-7+3B=+Zv2OX?_g?jexE6eF-H# zl$JcU&6e0MJ#2Fj?yUGfsIZ6Ep_N;L<$?GQG$$7Sr02xxGo3l{JU1~Xx_H|*k6!A| zqxI$;PmNb^;(RWRgN__QmGG=JpZF#89x{Q8{YreybOIUuigms?F zZBsPBV_~~Anc0!md8J`IUJ0vHuJ^?6V~p+%{p>D)j&VJ})qz9x%gq>}xLx9<7})gE zi_J?{H?X0{t`W>Zj*BXk4O>_@)>)Ryb*-E$6(-rR;KA%HChx5T_8N z#O9$^beZlxzPc}@n|}t}SsC9qT8WSYDI}8{yhc?7+D)OTus8}9bykO)!6HPO%aGMkk%ZKW#T++#NfyAPBVw#OA~ikqc4>-4FR+ys|0A+-G5MXt!` z-y;3f{d0XG7)QV&{gcAQuM{LbWAl%Wsim(RU{(;e7rEzemZGI612w5%YOH_weJbSZ z0ir7N?jo};KEE?$AP@sXRVpvDS|ctA_^<{n0pAib+2{Vi(f4w{7nqvy*xQT;S1dSU zJjyg4#q@Z@Z8IL^{MLB7=r2fs4HR;}{*DENQi^Gyn=$gvL}vd0@*s=ZeA@vz`5oGBo13i9etNUV9`x^5J&x_<@56o3xTY9E=yr|ZXCQ_D z8+p@7M+2DpvwCy(3g1+0E!!+$Q__ceVrq(8YaP8b^2Pq3T9kT7%- zcAzXkcnmnJ8{beIv(o$jv-d9Gc3ow?_ndRBeaqTAS%E^+CfK=_g{F{OFSO~VKxW#e z4e8BZfCC(poxN9*oqbEzUOQ<#wcSAFB1MW+EypT7QnW|QvHJB$eLzjMDn~hppFAH` zixjMi+T)3y@_l`@kni_@#~5?Xwf5dg8wy??ce^s@m~+f=dB;26`xv7qyN`^gSO36Z zdta=Hj9)eMhozI+k_X}*IWI(0r~|ruvgN# zYas49Yv3~9K()LB>m9zcWF_>yN9S6G&I^znFPRS@y({bJCL73bbd&6mXb)Flt4#ac z(M`^T&_no#=zzc^Jl8Fd($vr`7QMB})wModu5we3lRfoDPDR+NZfUsAuF-9;fGZ0D zix1O2Km9ew?#YA57 z&8`73h@z{wIFhQdkDUC$9j8i1I^omk=Kwwu8Xvrxw1-WdPBMG`zE-yhn)>n~d17s2n14pr@}ch(Yr*Qo_a6FWn|BY8I;8g%Gv!^ z`BS-;LL<*jot5n5XU~NK;M$T|@&cYw9}#JenM__L zGLCcPq+C$Iv7lUp20WW97y7<*%ryX^)&djC**(_#&~oTL>PDX_73u-YcTMqRSu_b` zNNWh5RIfv`7+z{2b~}@5Cg~OhIth~2+!NP1dRht}-Q}BsVpr}Z=IVN0NSFNmSUOu- zl9)X}#9=vdu2Pf{-LTEuah=jptlCvptyGLP+zEj+wq82pPSa-_RU6J|KS(~yr87l{ zlg_0xGZ2*9(iwy5rL)9IXSPJcWF~D(ESbsM4-{$K7TYM(-n#B+WZV$vYK@Ii-JhL{ zka=$MjHz9we%qkuFhUM}!VfVx%JHf%S7DDkwabmKL|w0WAV=CA=p~hKZSs_qEUr&# zH)XC*Ao~c$N7X1lE8J|j!njSqn9p^h>|=&8!WU4ZDUHurCEbXYGql&d#fB!r1P$z3 zFx}O-Wr7NwVxx1+94eQtufO8r(q_OYgN2@&X~r38glPE0yi|(0B#~5_X!*3_FCE#? zCfeT6p?<8&%^YrGbM8iN=CCK8c$j_Ut2SGzf{eaBjcYN;KVx^zbNpv2!K-hE5m&R6+dc#QDeq95!ZadW zS4LKvF|f!q%7YsHG_qsoH8K4(YELUoqtqe}+%&S4E`A!N#c6~NleDLiYZg!heo|jW zBy?-d<~V3F7g3}GiBJQLW*It3mlI&-O|6Lyfxe4;=g#jA-+A_5E#L7if5CjGz;G~U zz=6I?e22>Zo$tWNzb(FVr*Z0|Fftj@{>AehjP?iygl^+&&=rq}$r0GO2N6shT^dA| z&|SawQaC$o0;)tRLmeBJYdP7VNYg4VgRB!EyV&7rmNb%D2feDivpvZPh#VA2mbWDx z#PuNlh82ff(c~*(LUJVG?LoA$@Wl$UhqItpB;FWPI z*${~wvLodW%(`~Mk42*^ZIVr6*_*AzWex5kaZTf#&JNf^(Ysgumq?AkM+I`xJS_ zj$Pw=2Gdi*I3f)`I^-dOkDUkAi}~iGBM**sQv|t^LykFpXvbmVXgj_8su9^KO8rMobw#Oo>Z%kObbBA8IBMK#l zt&|+boM*fBtRi$%9bICLN@58xSKP`G7dR*+7e@+g zs9vjs#LXFv2_3X_X9rDA?CPL~Rk_Sh;LkB-0(io2QxsSYLSO|=u>gnPP(E#fp;6^O zC2XP$=JY#i({E?l$>}$sww4%$_Ox1{5-EThc2j8opiQBd`na1ygE4YeI1hlQp4t^c zkBVf?`s&D0Y5L+#_Gh`p&Rz?(7DMvsZy5PL&g>C3K6SEH5Ne3Gi(%q zkB4Y9!!ZQ8DX`xaxf@PQaEMM=94!q$cw)S+{ypvq0Q8)!ewIBkq^YAQ4yIa}??Pv6HHLj*ajcdzO34(Z zt92gF8Ny_29g5MaL&7|NEm5aKLY9sw)}J0L0Jzo*=LjoYk}U))xajp2GhrPhXE&+nF5EYg_dQH|1q(Re@I{r zL0li_$a2PsakU+OY{YbMJkJ=}Gu$21AU?Nry*lrf)p!e#y*071$~#9bJO5RH;HKq+ zD^|qG3PsJZ2@DjOb@(`#)fYLMOM@H?rGd96tk*;aD```L1<%kh7Cgh4x8NCeyams& zGw2zkBGg`+Txf&hTHv5cr5M#tp2?%>iA%Bw;jS(b6Jog z9+7R~0sgVGmQtNgY^i>9)rb`Bj zj9ow+U4?JS1E1N30|S+@O3^~V<3xQ=Oh`Mkt*d~DKLN6E#s^+m<(oP1JJ<;Y0%NA_IsE(z!K!`y~ zz;ldc|Gry5y}kXysq7Z;wr*TtIE-(9`{?j;##N}Ge{=^iul{jT`LqVr-XN65)&IvN zgt+=8yXwiO64t9lwFoX4j!BbBTT7S|%)kBFaU#q%G4GRX#X&+8mu+92miJ31Lvo#f z&hmT*|CA5aG!b};Q58M%ogQ1}*=FN|kNOQk**Wn?*!zx2ppwa$QOrd3_nB%++1k02 zx8+M#>36;{l`{;I0j7SA8CZX(l*G4be+z+1Q@<0idh#TI^+1(Y8o^C#3B4q{8J=rB znpdSQsTZTo&_WQ(goC#B+yvmg2Jl`3c(S$nHW5Jf6=fGejfri`NyhtPMg<~p$PWyA zn*yV)^T|#8+yB0rM0^oPKW4hVGnRCr(OP_bpgQxh9~^HeKlT1-#GXfo$oAds5u3=_ z5ZXK_B%Vwvvk}8%q))?Sxh&kuE&3_%mu@Km6a-*Qzyl|mNvM$sz0@n?52!|Uh5z%d zn4FMEOtbQvrJOlAUJ-jomYNX$OOy2xQ%`;v?&7R2O(mAeFL4a?uXX1%QUyCZjZ|(k zr;+kj8mX-h)M<~}DN$vEl?egK(ZE0~p=TqNeD0TzMqIbC>%7T4pC?VY?O!HD!_oxS zhjC$+AEoOJ4 zXkX!B3t#!F+aK~k5Ww)_*z*65mmI?vGIAO(H*ySA=g2XrkatF|N2(R122K5=c8Zto z%iJ@jh~m}>!&0~3P7YK<&-OC|s^O)722edHQD04c?*ghoo_F|b|12H;aG}E=?(T5g z{A`10NoSO_adxZx&3ee_ouIdQAAhY9_eyNNPvV}WIK+S88^Y;@`wRcmaBsGWYIB3s zCG}GFr_sdn?=8o@@rnL=V(npE%IXu#D@hdoM0)%j|Jzuldn*}t1MWOp86Bx(-8R1c zaFNjs7x$%1GkivSDZ6iPZGz z&X#8OiYl|YwXZ>C3*wZ*9aRcDtsn!r87nDO#7l2fqk3yOUaE&+ubB@lNB~j3O7mXk zvUn=$i=>CF$UaS4wzD6jmD5)NTcsJzl%0;&674Htu4L3p5WGdk*7ea5@WPQmqYs7; z1o5!FS0V+_mnLn5u{KM=T{aT8A|qlvlP})m#$VX;Ti8&~+Uf>fL(M!oH@Veqj$~d8 zhd^p2NTCiRu_V}Na(vii_<+%6eRQ6pI9O!sabay67uE(`SZBC^2qav%-nS=_g-Y=o z)>lzb!v$FiL~~JCb=xD%0SLBOO%H`+*SD7;kh)9jnp_ln^bKp%^jy{$eXusRfkA~mH;&lGOEbg4&bQUI)aI%CYN-*R&1;ietyx1BndBzt zUoJWTrn8=G04Rlh{4^BE1b*ZgT2CafaS)5AxA5f9DCPp_8maIM+TYvLvbxN={~bRoJCm(XlnNUtUu$1 zjH@+BpwFKqmESJKecmd8gUrZ)baCDT%M$zTnV|yt8V3^-29powzwKY-Ma=n}ZtL zvirICV@^^|a!RZz5D?btx_zQCFY=*e6L(M*DZfv<I$2R`Woby(m0B9QrCF_8=GR zWykr`7$RFI?t_HQyxrNFRyy&Z*D|I(HXb@b!i@*|o8Mu@*n&{b^+_aG zU>9P_y?byyF2oG$|*NxZ1!Dl1YxuLg7}ErAXRpg$3Hc zsUFMOsAAz>Q6;KmPk#9*1C~9;#V{9Z!Z8WUYqHP$cmF86PkCzDogojfb|dy?*|4ma zG8O`b z;X&94meDZW6@tG1djpLrXW!rjwvXnPFx|Ze~W=Gc-dZ z%Xl+z+T~nBp3mh)zIc4W7e;Wy>|f-IM;3g+T(dfy1{T`#tfvyEdiuhv0ZTTIxU0z( zGp;US=I?0he7|u4!-L9maZ+~MmLc!CaDdZAzCdA#LYSdT-04D$WSVSU_O74HHnE53 z>g=VQ(ZHUoTbJF$WGQE>nVn`#PPRCj0Z!CQGJ(2~NCiHVdA{D4m%(6feJZ*sg}i%% zOE&+tqeA@$xVVFD*n@IHVFM*l$L2j($7*`aWQ&f9Ed2KHR3e&inWKi8f~Dd&nK{;V!BkPr zH=-=OBY^_SPJtYym3c->9XSv=70lMb3QLY6ngK@=7=@VpBOApV4?@OD*;xmPUMgif zMU4is-d5U=dxo4z$eEBc?dMI?@*mKF%>9b6;DIuhEaO1-67kz(5d?aDRLZ|`dE|G7 zVzy^Zvc>&J&HWS0SF>|VAKs%y{$gf(iA9nU^Gj6l7y@P=haSoC285S{+!HbYbc62s zedB;_>v>=NI^2l*Dv;2gUz0j9;3VIC&2`<^0j{1T|EYlLnT|TZ*Y7|bf7ek5gz`I3 z$6t2T0crgX)bS4;b;NcumarduPDQ#vYwW(TQrqmA2@RUF*)u^f+=k7Pms_g6*|XmD zc5e3kof(C1xYoZQ4BYg>=iXwUn6Z5TV>^WB#Nz@mj&T-N`H-=V7dY>sWt*D(b20MT zYHPWlIwu9Fvrc;IELL6|u^~$_M#cTIiy2l}hW38hT|=6WctC+6g-3}=Iaqkkr1dm! zx6!G2wjsfjJ$v9o#+gt#Fl`&_U`aKH-=bs&HdmmZp5t{hpU5OYK0wYyq;ZfDbL)d~ z;_b}-?r(nS&wCLFDzd%944DSi zKaMLmS&n{-Z7|O42z~;qghTdYb`7lZPYqAWZt|yVwdo{gK#eWC+t|GFW(joq{CO1n zPtU*DyArntD15#wKCcQe$vKI_wYw*8w-+JyV=)2cGR!`7TA#Q!N~85KfKU*3D8aed z=DHxdBrt}B#(8;lv^!WmAEe2WpLBH;Wo`lBWK)y)0N=I!(xgd&X6#$(Z7X_ZMg>WA zKE}Yzi56{OR*4GdIniA^ip~j#r|W@9#Wb(2JXAJF50P4go-OZXYR*f`(~m+k{})H4 z&>VZp3voNmr|MLf{r7hV@Xr3MUnhh{S+37nngsxWh5y|jLLxWGOM8h3at~!+3DkE%GL|y+Oe^Hs`ME!Rs)Kca0 zv!kf5kN>;>ijPV@R*%uQUaKWOkfN7~YZgzLeEsVkri9t}I!h3?fkoa?0t^L_x!4{S z9T^Dv+8{sx?yMJoq(W5}KzqRh-!hG*%%VE{%Jk~WZz{UP!KE8=`QRY2=J0Z->h^kg z_4Y=+3;v3av~5LKo871pRVs?y>*Mbi0ZITrUWes^YS%~L2a^Q6TBgy|!xDOnm&cKd*>jR*p|vtOS+t7XLNf27 zB?{H7C_~VU@*JdPII4U~P9H%!rxS*s9Z=@TXx<}=3o8ZV^P{L#;{WcyMIQMqCxUnw z^)?pDQnwJU2s^F^@-3DbWZU=L*Ux6ZWmOPPYs_D zs>uE-Oa6uTOiMHK*;-%LBWUL@s$dDT2BSA4a14in!u(Ygp})Q|g=$ifC9%aK3}s&p z$?JwzlKfIMK`XW0CYz$rGBrH(O;@tuz`H40QTXdf6rL}7>oUi@OZ@v1*Yb)UPFq%! zIYUxB7KtT9hI~s`DEW@{hi;)jdRj(*j%kx4_<+jf3vLf z8~G1TTF+4DH;6SS|7M``8^qQj@Np&h_aawv3 zid%Ka;doE6bp9&nEx#;8bd zHh-+d2|*9p=5DB(KDEsbdeDqkt%4yXW9c4<&ggjkC9#@aTC*&5-_zYrHLzcM{_5xLIn{*0kP#a_~C*Duo^ zS7rXRrFQWS4D@qer!BecO9LgSj&5?A>gWJr+T#L1h@%y>N8?Z;2Xg*#?mLWtA4WKK z@_-Se<6wr3VV}ke9Ouw{PKV$is*+m)8JA>+yC*DQNts;|_?1H&mMe=Q4sg>PWhQ5} z>_JUvojtB9%#Gk&I!PzXbFuXHFtEHVuGD2xg(qWhQPHV5HwCFiTfSo|u`RHa&SG*x z+Cv`2=%|TW8bC3UP$1_zMF51zofB!4&7*rbG3FJfw`52UMM{=!s35P^Vu4w>$YXUg`i~{%Vjag*v_9q z^sTUTxw|7!gnBG$A^+ZgW6KJ3zrwzk66ZcjS2*7-Ei>`Q2}9b6ghurn4B&D|W7&hK zU)BF^BLi?Or6c6+-Mt;}ETwl-<_TO%IE7I=1*NS3ETW(wF7)eD#zmw?M zYte7UASxG_KG;!PX}j#~rUpx96jyd1Fx9rhlPZ5x!ZOenz;d;vC_pTJZ$r*3SbiD~ zDz^}V({P8Duc)qk$xBZ&1p0Z#7=LM2A3RO?^kJVoWALR)e&cW4+ckqPQSwiGa`oU! zB|q(xXAM@B{4t+=mB}30|N3k9?OMeOCE2g|ZZcUWTTn>;C0r zvFVpa%vDXTBo={T(49riFhMUdCZQ|{J0J?eju6F=xF`nBpMF}n24Z9%@Q4%80t6A7 z2~YYAV{$xkXc_#h95-uaz+M8jebE=%{=#AI3vS(Ar_eghC`04-mZ5WtkSv=)9E(um zRD@2h^~Ad$HDFkj5ICIuPkUg zL+0l1&=@`+GS`{2auy>=i#vkp>n^NbvQ?$VJXa3cr?j<*^$x)4)}*h>r(M4*EiQ))s3!hf8* z$NZX?q3z7SI7I{C{zL@gOp#fh_bEr?0Y`yU@F1d2pvPcEMg+#}6^F9& zLHcQrqbpglllH8JAYq82hBSf%XpjB0R5M8$nk8vd@b7C??@B^X4+_1(uIh)AeVq;F zaiv5PHHXzqnc}&pk)Xr&gLP^{`~(HLiOF(bQnyMOY_t$|CVS98S&yzEkAQid%yJY^ zy*H^*YW16Ovc(Td8ecJOjq2ZE1A)Amb&Qvx;IcXzEWVOoKjZqWYM~pL#4D7HYH(3U&)>O?<6@ zsaPvXS1YtNuQhb8P`8JY10$18EfM6)9Y7OucA;b&W<}&=PUgsIKx-psuOVk7fkT2oH6jh6RO*(JYGo z&}fg}Tf()C$*?q$UWX!eCOF}*o(eOGx(TriP0(l1p?YXb#Qg6U6XWc%jBbm7i*(+; ztsWCDEYCzlvf4_OB(EWoXfoX$aP8+&Ezop;#o$}{o@dyzTl)$ zPmD^u&%FS6cXL;ZN}y5oRz;dNmGxVD@rjBp&53>^at7gIqh>JZNpBqoN;dyJTf9<2WF`lSeZ$&s^|9#{U5GEo-$!VF^g>Yvz;BF0X03>pYMuUTcS z{HOyhW~*8iLo-&hd&xpl=B~a}_OI+dp1A3KkM5YXgs|&QrC5H8u`hutSb$-m44+mE zmD3ezTo-pj91-2`-3CA5k|w}Xqe$lJPjdC#R8Qchw(LSIszB}w+_aPdwN~9$7irjX zZVIXd8Y2W^nkXiii~M&+W58n`+FDCZQ3)#s35F4b1k==L8xa&2Mp=@M#)n~0icnCM zG@-Z&-_e|9LCkorUX}Mt*I_diKtwIXSO#8|;)&)BRl#|)n6+gIFq8a(t=q{HutZTi zg@9<{h`Ku#)vH)d%>L?)9a@q1yTBrlKMr{gr2r*01BFpzaZy+)iCMpB`ZlQa>G{67$CHBqqu=)3_;aJJeY zn|jPp2;vU@z`CAT`&~-_f1xEBQ?iGu!(X`l6G8#yR3@{WPNN zX><`j68$`5L+*vJ(^&9V;1{|vpuB5{r-)vdA3KCc+kJmHP3cbiHH3gUGr?8DZcrv5_+O8JXTD6K?yz4 zo6i*!k1L@kdh^9%;z=d+L~oubCcdtOp6Ja}#l$fs^h9r-E+(E;LQnMOnPOu87kHy5 zdhk&$|3=q5+cU*Cp5NvqhRq#4Yw*;y$UQ{8Vv$H2 zCed8S&*6WB3bA|*e(u?ir=H&y36to8w3^e=@-?XFR_mz~aQUYcbclvZs9ukS4z6-X zEkk%ATZ3AZivhsY(9|HOu4yr6SXLgW@Y?i!d4Eq$W(LBI+`LS=)VR&?@n2XZ}E2rYI6QU*fAu z<>LtfWVjQNsAz$iYh*p}=9;)|u8A?%ppas&Nu0SR$;~yuO2*8@+iVnW=Kc#Uu4AZ5 zlUBXQmR!?wz?ERnkrhOWIkE=Qku9gRPvBgR$(XgloJab;R@M*zvfO}ER~$B@fJRLf zWMFhci3;oj%7l^z>53u2bLvDcU|}hZ(<-0{6V`z78Ub>ZhRbEC*s$QL;=5N$kUdWm3jN__{5* z(!I1_WY{1nO8n(}Ekg2^$v-LE2s8DOw31|t{-b~&15d4fiw=ycKkjf@`b;b+RDVih zjyGdyd{mhP!xCE?J5Ad90w5X7pJbCAZrDtSxnNearDR4L?`6gw;XkH3O*jVJO*j)5 z7nd1Xa4Gx_6*6&?EkQ6#6BU*e+Uw*cU<&t<5*y?t4Vz#@F~~~<6`R~?`9zHZg_1oc z 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 H)~o*kyB)Pg diff --git a/scripts/bytecode/ibc_stargate2.wasm b/scripts/bytecode/ibc_stargate2.wasm deleted file mode 100644 index 1cb2135a2febf5748e1641a61058ba1f0890acac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222846 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 sample_pool.json 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 T(P`T-l(%lYUC7&!owofy7CP=O literal 377257 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⪚Y?q*@Y!&CVKD4lD)CvXWfXm6k8)is13` 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 diff --git a/tests/interchaintest/bytecode/crosschain_swaps.wasm b/tests/interchaintest/bytecode/crosschain_swaps.wasm index 910814081e31ee658db135a1b70ff5d8dbd74121..bea2852da76c684d3fd711d27992e3a683620b82 100644 GIT binary patch literal 446429 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 YAD6z**?0MJ81Fmt{%+o1v+wf%58hf6TL1t6 literal 437733 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�-^nx?e;e8q$(Bh9L&et*5D zfbLhJshPCtAVI_m-UT_fZ6_Dt=$MFuS#u$8ezKv6dsDDb+?bDr9U+ylD395SfasI= zUvKMy&}E5}uxbqFLm07#sy!h1u?z}&>lh2t+P9YK0~usvU{@KTVUis=$p7(tkc%sb z!<`iirR+G8*Y$|{QM#flzb(+vL#@1G$B19vq%LHoK8@H&K`|*VA*T33`uYr4alJk` zPMYdw@h9V@H8td~EK(O|Q@jBeO6Nwg#@8Iz4tJq(IbWgl2z0G%HfJqElYs4&GALk1 z;50dwbGV0862=wT^_s@uMrw>UX-raD-Nc&CsUI*k=&Pts6xvby?XOU=SC8o;xfhqS z^C|XiCtrlwThMXx#X@WR*Lq9s(=zo8x73gchX2Y8`E90;l{5X9ceQIK&I6F>s1A>i z4H2V}QLrurvZ+*NEpBCx6+XYNc_2YZ?+i<9wX$8*IXLtbgksl@L~ELBUez?atj~6y zWw)jyc~i5bYwtL_i$e@A1Eu@I9i|r8%1Y$kf#GcS3DJdz?t`?9!Y_j1M1`$1Hwdk_}}`3>N( z@J@6BCto3n=ahWiP`t5sAdcsQJ}MfWn?myLhW822k0{A$oAVg7v|BAvJ^7eUW8g4n zSph}>$o@9~M4y$$cm~)?NyN$s*D5(Y7xt$qUC~chlI7e%<>(|zRIIsXXI(1<{Uk^X zg&fZ1_9(w|KlXJ5*i4A zb^&C#(*nyvK0DD2fCHJxt(tlc;61-Bbl?ZRo3vlK|@tozK+DEtBeOVp{UH)DrV8@yK>E+^kKy^)lw(j;l7qg-KJ zWzVGo>cT!V&Zwn?)54EZpmu=PV5@Rh(LHywUHv6GmW!Ci?R0H-_8xT)2cU9y_I`EG zT9|+`m^8FSDKIblIo@Fb>0P`rD_K z@6VWkJx24+;nJF6l7DI5XJRsE>dBlDnsBs7UJ9SF1bZco{`S?n$Vh}ha~$VA&OC46 zmtb}?(>xwckt0t{jYm`C(bV{wrpBA5f-$V$9CVfD0DWLwjUA4OcsCh#zuK({o<NxoW*t^>NE5H^q6vsXICBVKPnR3r?+z7ybtl9) zE991eP&lb3)VNTB(sTOUGWs@so*@5N^qG;#^+s;OpkzJs@~N?d8z|Y7eU>s&GRSR; zGqc;?I;fP5P7f^es4!?ZovPnpUGU)-f|QA}Th}M#-nSdm7+k{#q52F$T((Q>q+<2$ z>iw{6@x^NoSsUq9&lZQS%}IW5Ueg(Ljql^5+-BO`M!BNUz=N}z<-ltCrQe^Ou8zUD z#52dWe}(*JW(oefx(+rjv7D)(Wwvzsno*?%Yq(2rzQlG~;za@s03`2t*T@9^uFG`} zVh)1qOu$O8HbDJ{%c(b!$Ai{`+rV|E+@843RN^`usv}24(wLWhcMGTp@-UsvaJF(r zK;?&7%m~M*S#2c`(A_UK(cmE0Zgl z=E`N_^yLJc$jc=t1HUrMY!Cy~8fcP-{0=^3j;O?z z#up7Tcpm#)<;JTAo65@to9RR3y}VrD>y(>3w2k66cs5 zS|L;{x2PkDw}}{LC%^W{RbH3Oo}A_l}=SChzV)0SI!OEb=V z!m*i4v59UOxUD|b6OEHm2LC{JIrL@@T1Z{Q;@`S^&|~}pir#$=Q$C0w%>uiT7CaEZ z$)Q)6cLX*gn8C@GX?=zRI~g}q>jbO8Y*D?V99MEWHC}cPRnJpphbmJ5Fts9W99~s1 ztGp5}`BAap%gfEWdzzpx3$FnC zrs2d*BaImLml-!|48P2HldznmwwgKw!^@R~aLiWfSYmZ%hNdt{qtU%In{}CIaFay= zv50~>Dm&i}J!&lM3=HQ|RCLZN=;an!Md1Nj(Xf9)O%5%B#Fg+IRROQ;a z6qwUo))m)tsYhuphmT?|^(f6{^GI_^`Kmt3OP#s2tN_ZVxfD~;S_OtR%qG^ep{S)b zk1dN)M&orXg2`CNkWaOajWso_UB^O*Oe|OHSlI;*Q>Y9raGT&Dj`r?YG4qP))pU2W za7xyr16b0B>nqC#1tCvzx?rlhM7C@l+ zC&9ift{xCLuhYW0z{{I85S54S%5UI|SPe!OGy<+h0-i`<#Erpl_bw&4;rYQCL2T!W zHz_-^nQ&1}+``HxE0oBXMs2<1BArmb4j; zk>x(UROqCI%t}7E5FY~YB>T|_6pJh&+t~1q1z@sTIff(tFRI+qhOK8)qvZf*syf@e z^~*oJoK@dcJ@q4e_Dicit3LaqJla()>Rms2hL@_cI#w6Z;UOqwlGq5WHGV`y1r1ck zd9#|UPSqcLH_pS7p~NIcwjB$(t6=NN2$3Oc*hgOfhK{cIst z6$5{QP=yp_PTWqjraj{_kE7P5PKx&?69vn$0LJ-4# z!lfNJ5Lt9sZUF{Vs>GJ1s)sVq3+Dw;4LI9X02C*3(qFeUMe`%=>f}|rgt0OR(uORM zlxvTV=&-km1%(=@D<5cpYCqrv04z32{|BMOSz!7Sgus+>m_N;+^qcuxZ&0YNZVykl zOB)+bQ*m@i-AyJhPangU3QZmDVU`O7n|!)gv?B!PY{Xhb--Xuo-TK!uN2SmJ`}xo} ze`acWW1ryyP(9E4e^O{4srmW&Lhkndd2L?wzd*Q0`YGe$*}~49`j%};Lf(}@qWSjU zS$A!|{r82~r+@0(=L%(L@=tyHr-jbS0)N~6KP&7Es9M8T$JI7N0w-CxQ)ip_V1;>b5EYN+WS!7ado)bpwgG5PG%%s1G9edoci<2(OY=w-WMHRpGwbx zRF&~TGU;AD=qi3$U=vHA4}ujW$KgqI&rlq&bA3$+>3W0C?%~3Uf1Q5ar1%$>`Caj7 zE*@>;LSacAY_JGU{VVIaAQFt3prOs40M~dY@6+nrcvaqFKAg&jlyOT$Xn$VsAHYPZ zRhB=hPeoGzn#))~1XcPP`5AEXtU%5b5Yqgc29e`@_%IGt2>%m9{0>2U|9K%!Eg+D> zJV$pqn4L6tNHJbD7 z!>@#iJV#lpF%f1>VA*PR(7FJd2n9^mV)Kb?$S5{UPHpT%+_ts=MX`$CHE*a(#2$Xn z?4d59tNq_Mhp0EIF=Jh{Y zM2KWS&h#?}hg}2TKTL_E0+LANs~`z;DTd6YSOr!M^9=(|0pYkCK0}ED$b;?;*ACRBD1Y}AJVMb z<4;Zzq4l(NFeBWBFYaRk6i%D!Q_<8cpJ-|&@#$_4GtWNEUgsbH!_W=TbF#o z#>2}~b3aoQ2K zGzuro?^ib#Q$yyb$ioZpsP&$$E86rGcWBW@g3S$CuCb!R$f=99t|`+Fn>?W?gZJE+ z%OR*x89qpqK@8GX@w-qNUL%x=|D4T3P#RXG&GnF$h82OvS%^%-ih3$j^n@!4hXUCF zLwFj#H?A`I0G+dv|A*Y7l>8lhqGkB=hzI_|@aWlyH&TUHrPM8?W0n!=^?R&!3h6bT zX+HLn4~C=@bzB*w+8kjdm5*0h*ovw-$;g6QVwuz&yb_vFF9xl7w&54BuYzY(p#%6IqfHcFqV$q_pQnb*OvuCm)A?DN@>4LGXBw^rSDA)k@;26Lg0-;Aa z5X9y(r}`tZ+!KTdAxi}_2D)Ty`sGXreQ>meZ5Wyl7Lb_LG-K|h0MAH?{SCQJQN~t+ zrF#m@0QY>`{^l;}eRPmXiR88DD2>DmBy4>sGg^QK13H>=4v@6HAkYyHSTQN0vNicK zn~m3|5ZEPRP2v5biKb8@e1nw65h1UFqanrvT)^SmxZqK6tA2Sw;L-kg#0={Z^Q-sw zP!|h=(8vn{lPzJBm$V=V*I;}?HX$hDnDLI=t-g~H*>3#0XvCDl$r21f12hg>x&6&dBXSAAN)m|#^sTItwRRq>k2$!>NA9MVvN%n7e#GaBh7W|> z-o+Ltq+%_6>I8kf*xT*K&UWNOjY;UDU!k`T+vxupvr{Bd=8^GQl-UL6--cxq*H9K= z8$@;Qeiar(ygm-v^Y3K6>`S1sTq+ukSUiGR*Z&yJ8|VwK*8Lc$K@WqO`91G0XXfYL z9V_y}^50|+9-&}sDp+~_gZvtcUuR$O;1N9>Th!YxY|x{vx_`0fkLI}l>y}FQEFL*> zM5_>@WQmW{=C>jJa*r*5MHGz{-xr8if8er*ZxQ9tqxx{=B;7%K1Rt^<+=57(lE6VF z7!9Cv{*99~12-&e_)3~FrdD`R{qa*D_~x6jOL`O4EWA#d0fnW=Jp^({YK@2Ac&RxW zCe48R@S4>+k#Y1v`b8##U#+XOheqsLWM@uW>nxQT zCQh4u0AY{GnhJe=pd1$s60{jqj%&-kz`;0UoB6ng?p@@=)!*=6>+TYhSBZg}bqNO9 z|4~8GI}40Lt1(ZNGXoRI1S!M^6S6hshbA>kI*WP-m*+mJ0Q0#pg45Mokj;EyfH3{m zz1pRIpp@@~f|a6co$8N({w~rpLmNG#2b48p~wW3d`|2A0X9f>RgY2 zv6-wD!AN%KNq_hR)iyox3ep6s=GETj337_tM`mS3w(~2_44MRNc7mt^?RsxUv`L1k zIk`FD?*wMmaFk5`BfQ7t>ljzDB<5?z5E%y{0lt(Vke)HGwMF%bk;_YlVI1H z%P4QK@6DpjUWy@a@}kZsz?A+DL_M-j8QvZMm@n&JGkxX;6UDxfe>U%xILH{Sw9Nt8 zjAA?)vT_Q*csPKtL%;^(JAis3FrMihLHaQPay8P!D-I9FYNUr53F-H8IsTZCeviy9 zSYXSpklq(fBQkzMdLK`0-xT$(-5@>OxIy~%kP!ia)kse;w$cu+Mfx5?=zzy+T}VH6 zDM-&gWQ^tS6w))iKzi`KC8G(O!GZJ%jtS`{?DU36KR1H(yGD^d{K&zVYxsZ|4ydHX zqQ4sH1=CALdcE8r{mHRn=7F}7;Vlta9qz+tBtnZ*)VsE^HM=7I*REDD{=9)JN&^K# zcbtge?jXC>o{jCSfL1NAfy+=bEArkz7xtY{G;!QwG3-Aj+Yz-voiFDOSAG6Ix7rZ& zEdG9{+{_C51ELn$k{&4r_zOww#3DwO!bCndrDf{mc0TectnKQ9)-~`EK(zny0*|!z zw-m<;Qr^>thl!-t^{9gHxIR>bvn*l5J`L|k0jW{GP~fA)^+iGtbbTRb(V>yEIZjbA z25XAjt=M%RbBDn6TmZ0TkM&<4k49y;S3{_hc;)$j1Z6`Ype8fDH2}xEt z20jtXvvdf~U}o@A*9H@E57Q646i~P@AL<920%aFb@@vR!%=LU%tECbOd*=4GQ>v0;%dq^o4y1R)amB&w@f9*2fX*I*9&Pr*u;#= zT8ogh%Ck~~#nYtZZOBo)S!0j}(6~vmQx9lTTN$fPqeMAZL$7%P(luh>H@lBA8PdE`>zM@q7iH`{NHUXVrH7fcQ$T48(R> zIyUgR+;VH72s}_xLInm@Ln2aRy5@t5Hxx7w2;xj{(Q<%RV~Ql24z=VZ>~?!?Uft}i zels9&T)H>$Q>u_6o6(z5&zLd#qI75i8N&i%jjU^NxUK;s z0Y$(hZnqB6??~}aEyIPlB?J^uI23~`wjpmc9?55|AT5yf6F$kHBwfYOS)0ZV&vY|# zv=+IDXnU5;|MBnr)=z)**MH|1{w({B>0HL)cJ;|8K&t8f`%nWg0(+wnx?y2cdC}jG zYOf0G>J&nhvlEoBuI??8MUGb^cmgf`Uj_{{!yE>d1&w{9 zAO?xqr~rwf8pPBd$x*m@R)11lrL9Uso1M!V<+qjN(@4@t84&N9n)LffE>$l43JkfJ zS%a=+8>Zo8u;1Z&ln2E00s5(-L?YWnX(k#E1`WFD+Z$_g;z>OmcLq)&H+W;}Vve-X zd;$cnLN=N)NA>ud5A@RFNUuGk(d+1{d+ntp^%{H(&@k)bbTrA-keFA*5t(|WGKql` zn5R|h3G_t?cKNC~yTz=dTD5;b}X#6qM|hf9XYNR-U9PH0&`1Ro>eju1`li8(M#F$V+- zF$YNF0LZQNuzCg6FhhN8Khs{?=Zd|$P6yg1lihzTB6aNoYkCK*xTC6+JO@yYnH`1$ z2D!u|M?puKBDKM>@Ih&mI=7Ek-@q3gBs|%6br;EMSwrLm(@~1&IZ7oVq6o5}Hff$C zD|Y{1x8Pc|PWXCkt`b!xGKF9}EZ%@c1g!$K9IKK9%qGa7WLmMO{_rXkmYJbsxX#uHq4~{166&XJq(+kq{`#Gh34aPdh9G5WLVgD+tk8gCtG!@ARL&1jAT{O-qA3u}MMZ*8(pBp}RC3Qz*8&#ob>0AOfg3fKAO2@nD z(;_|kiCgX@JtHle>3Anm(h&{W6_MfOGjSFwiiT9^beZ(C8?j&Z*CC z22mZxKc{wAT@nCZdSy*s_by4GS%LN@WWuo4-CkS=-C1oE9=5A5sq+(@8l%qlwfbbj zVViKz`#nmhmOeda&O_C7<(mg%)^0>`=Av1Nc}X(4e(5vWBqsm&Hqp;5nG?h?!ki#I zuhTyx(G~SXlZ5+RJwu))AaR!=BA5`0ekZtO^=7B`<=&P)v?`NU6Y)K`Dt+b3Q6Q=T zva16+&p=2aS@Djo5?pPYOYa&j#J$_qi#18A(e1^(h%({QBk75H>CDdTZ8{x?9|s8e z6^z?v{p)`$sr3SnMXInS{=h@%y*QNhvi)S(4KoRvFuXc3`TBWr2V3Im!>xfk`;+zs z(=asZ_p}$xR-`s)6Q4I!`mfcuTL-Obnzd7Xux%9rO!^s5uYvojZ-Om)^5%`bjJD(& zEab5S*qJY>ou0Vant~ z!=4oTBxxO<=@hLT)KoXl2qUM?hmpUhrxPO>DK+$qr$6%Gdp>sh6Q4t?Js(;=`#wHw z^;h-AXn7@HK&AuzDW$IHn)m-*YjO_)o1e`Vuwfi%GQ@@~#5PhdtWcpg*2%(s^bZhR z&b0WUUHi$YsFGTKt(ZJd{eRk;+?ZaYn9GW_rh`Q#@zu4*5#h4$+(k|A+l?9O&N z4E!@!4Bc!~uKZ1xZQgSE6>yDAvR*7kO1Hj^g6IFWB)pQlJ(0MTc|v~M3jj1q$#lBg z%N?%j+~E{W(tHwwU9hrmtt(T$@QYO@54sEW?1q<8nOyHKRN0L$r84>Kom<(;@76He z`%)^CvmatY#YX}uQ(<8nOhY;{kC)i3N%_>d4QMLXgX30D&(xafQOw1;{eJx1YARhZ|I=9+OAr>c0za%0*^;=(I zztK`_-mxwgooE_34|0w&blLh6BU-nz#g|eUx@=vUB-cwKrIV*?aGa;N>!T!=oJ()2 z73_8K%WFz9{g78*WK>^SQ_?*zG#jTrdl6ubPOT)h5&TX(=Fz5#hHNeYzg3m>)}aXV zd~5P^vUv?fD16n{h%k+C(w1;yNu)j^#Juzxs(tcFjfq*V{y``_!621PUgDZ;O1jhW zJ#r3_q9jQ~2+*7j(p2`)msgq9HhN|qGpnBcgt|n#aX1YHzYu*KHg7Az1-|&yIbV1> zF7U;pYroI{<+L**HvVxj^5d6_$^SfTj%7;qUearMAG4dKy*@cGwSo-!9S%+U&E}4t z$PuA^s5;G-DR(%3E@S>g&ZEUvmQQXG)YtlNPo6=mAjqPYO3RGh-1*k`4qEdVZRU&H zuYQckS81x6F+^>Y4dmZAxG+o3|H=kN;Xc%5ujFn-K0A`p>%twwuji6py=Pc-T`CGQ z;XpebIJ$Bq8SU;<&JD&Bxd)pe$OPxF);o#pGqy0us+&4CIr&I#o+HGtZAe=Jc^G^Kwi;I*j#h&#l$nn{h+^U^xkqSpCK>Rq<3lp#Sx5yo3bF&s zQZ4sEUUjm>R@6p^r(RNpa+^;5y=hu|U(q)EL_>YCej$-xa{Cq%MhD#2JZx4jE!C}5 zTBE=GPWK&-s9&F}a?barhI(Wdc*Xt9;a~E^p%wA#)RRanVCd_CtpfF2q==BzErU^5 zn?|G8i)PGas~M|5m&csG*G|`PcGs!VgL2m2Sg-f{|1HMd zQkFA`%MG3+p4KqLK<=Ot(1ww{&5UYY%&Ngsho1(%agd@vjEH~LT)#(SK1h)wPj70> zV_nr)|C_NfTiEj_yH7AtOtr^?oPqdm;9YKs{;ABv**LqX4riJ=M z=jJ*tj5fkgb={T1wpDjO7tx5XyK|zO970Ud2%5?v8kam1J*F%gH54?n^xzuzAcjPg zdkiUcF%5|?)>*Z_nth3Zt1Fr}FLH@3Yn8hofYJ)N`p~3x0GSx8*WAhX=XvK`#%g}D zjdN_o(#jSaS`EIAfV0M`5fVyl6p-s2TA&uQqTBGll=!g?U$*m+!Q>1J0H1?G{~f1A zO#Yi9&WgnR7C!yj&L;_Pt|Xm>1TuxNEcD;3HHN#_-_5goZpg^U&advTLAF$xBAN*?hF(7uMD}UA5#iprzF7N*aN~9q2DW+BodLphmC73wWTg0H8<- za&bf@5GRsN{+DY-LO%N{NrnGN0+B^G%&F^lSi6o5z*C2rxYS#r8oi~LH>Ik+vReMD zhX3FZfU{MKK>}^oOBIBaYv(v`r3kpge$lD5DS@7l_*Z~~I9zenKc+wX$KVyqFQ;oU z81PKFY!r7^I=o#1Oza)Xg+t?q9+<3u771XWlGtaVKp)*dA?FLAA*)X@-`))^(HrSe%wiw~7dkch4@W+? z2Y>T9W7g++e4Zm{D!hWesl!QNQyux_dph-&Cbn#LGy#}W0aYtMwwzU0^vQI@2PJinUZA^3&Jm?5Q@)O*q530))-h)!Lf#M|8e7uegB?2h;#RdJk%6m#Cuo4n` z{r^GPs&bqb{Tye~TjYcDl%{dBr%@Ity-X^1gdYcSwC0r_t2J5urC!_W*V>cwg#Ab= z(kqDQ?L*&EWE>iZ@5ujvR!vBw6PxUeWQ!vO}*qM)G+cw_>&c|4f6u*81M zlL}NBwkE*HLQ%FRe`Ja*C@pkU%LW9OnYSu=Sen{V)T{5c`A;8rWT*$kB+1Q^8c7;Q zjU{Swewatlf7B5*r&SZZV?yr|Y=%D}Z6vog+NGH7ecStC69EM+LR6}ja4F61eqy$# zP5^(^j)MUCzTqb!X1WR;Un(vFX-=i8e--`pgby5Jv z_cLq1Z>{~lJ@UPbMgG23f4^nz_wBXccSgSN)Ze%3@2^?=eP`|W-I4FR_4l3n`&X|0 zzPtAO-pKd8`ulGE{j1l0-&^}VxwRVjiF`f&Uj6-R*M2{?_WSXX@5k%!$LjBiuUtKU z<7>a4fEwVi%>G3E^*AD%Bj<>AggndKM+eQnKI+oqVJCyktAsdER{gn%Zl-U_id6%8 zs+LF$SG}rQf^40@Z`~Jla;MW;32k!-MBKV}?;&Kd!x6r2lA((bryN>}n}x!9n>=!U zdxpTMoJzp)c6u+phrwZ#Tdu0K!=w;;hSc}uRg+uq_0!fIMk2|rG zAMbV6_BDDSL*lTfWMNmG-E(_7QFkDQ1Q7IM@7$hRNKO4LnGjs&cVxtz$AL~#t0g($ zhi)142U_&Zrm^#;h`;-gK71_n#GYXeT%te?X zw`p?~(kZ6Uy-)pkJ)f?tMO_ok!>3k1Z1ZredHBr8!}%Jn1Y63%J5~PNdan?grUkDK z9bE5~F{6dbD!&d)FmclM#ufG){k=^&f(EbZ7?DA&qBfRh_p2y?@7^5z{-7SQ% zEaA+5L-s1bj^(7XizPFlom!q%uYyRafjcn^@|kJF7q3$79^T5Yr@Yqh_ZxDbJU|)I zIHGU4fE8NqF$dg(;P?sELjAmq_@l)UX(*IObqr6ajE*6RIR#m`noIUsaXPRMbCOwP z#HlUBdUbdJnwFjTr#ud0DcuzAyaXzUrzkd}Kn&q7&Zr_3JK_+E(E9+f%m}P&Xq0k< zVv*I#$?)@P0w0uYJpGr;X}Wf`Q!v7~BspAlpIDaXAP!2s1Ys^HW^KHzN9)mn&iXHx zkT+USN0uc#-kN$4m1@5v*P~4-o#ocyf*Y&gg-<8GA(_NPIHG11DTTP<&6xU-hA|by zPDIC!dqR(Nb`PAZTEqtv&%9g1+9{l%61$op?n+K&dO}bEu`cv>fuM)2{jn{@!~-39 z0xpZoAi)&!Zw2OY(xIV1pYC%^0w_?}JFq^U>n??>Oy@wHDZHC^1`+P}C55N3gF#%7 zIyiyU?@^|@@6j;ti|J(Qc4qfq6|ex&{f(sQgaGc%pxwVmjij%nU+XK)yQ|c}jKimv z3#-2Xn^AyvW)A>ucqhjxe(#O>z0HSmxtDb{#eVS0wfVg_qT8Eb>z>fB&3IY{pg~3? zX^jXi*lBxlYC_D~>BJ=JG?Osw(|4CnoZBq8X^i=+{!6KwwyL|fVNwKMrs2w*LCB#oSK^}?w^$6 z)l3LOnpU`<2Qmd63y=K+L?o@3p72gl4Kse#-^v?%EY@`J8fXcxN2=bC&|4OffVp1+ zOwCki=A>FO3_~K21duu@#47L$&kHdWLrEyGGdq}Kq_SB=VB~VWvNQXxCiKfC_4%Xz zGEVZn!{~xLr{??s&aQDPu|B@7sSRN83oqfw8e}_vsKt zonVMCX>J2!_NQ)Z4do36a&v?(MKi4+$5s<9#wwHERLoypix1DE9cqbaG3xo&I$A7O zz)5OaVWgeJj33nrxWIAACyvf>++r}{V|mS`9* zPpd$j*nwgOt?b#=)9<5vBv35XR0oQ+hBaaHHvtZ-Lewk7j8EiT;l`h|6mc04K**W7 z%_JGKT7NU(MF@z$k3u_X15>>D5kemp+|`=j#KDpG4G1X`%M)`E{2%aH$~0&ShtiGf zo*WcJBeBZ%Y2x6J+*X<$YDlCFolMQoEj|VmBPIoM2&S~bdFV>cox!ZgOXcF;Y)W_E zX7W=uqv`qLEmw;b$a|`0zM_10Kv5>2qD^tLCv|0M5o}}w`lK+uj=s7eT?4zA9->x; z(_=ENVaSnZ4I!`dD7 zY9yK9Lo_Gm`G`bUZsFH8B5sp>!a<>a2q*O%9p`<`-J`lPcT2i5r+g2zIr%sl$HpaR z5soCuNUN1!e#A2*eSp`mgQLOdd)GnH^WT{1XV4Xd1hgnnspqSYc@9Y>JvR@r?e3vzl9D*-s)Ywr}`a@ z%RyM&>VV!|H$x=fddoeOBzywUtkv`Np`AY6eS51vkFRj6oZ=rJ#ksoo52kd8tynrB zWo2j1{6q7iKzTLtLDNH!!%`v#7^`8Ssq>=mMY&W`MrM{HWZ%W7)q8jfcXt$<=bI@- z?-t@aP|lNL1V>f@lo2S`;KWO+*d4B0RdqT(UY($eN#Ky&z!O$^P-Vf!zJ`y%ZB~g3 ztci)!4doiiR}uz<1k28^`Bu0N*k1q0Gugtaydz z6|X?nxv&f`Y8BgfK7Ar;>QGassi~`)S|c@CqadERsp%`yD7qy`(r6UjwHk$Vgk`m~ zzDB`f42Crth4haLye)D?qxb?FuoqJMgy&y1Wsl)8hW`I7E`_yPw;_UC53=D2Mmx@8 z_)hF2%l1gpF{7b@NksL76_$4^*R>jE(bRCuN^7_%W88`BN^q4gW~8Qo_)Xjo^lq(;I8P8U1^WUJR)Uo3E){}`QPU4MZ^MV~&e#TeFoHvN81 zSL!;Gem|R@ujqQ(l)pm8iT4-ci);T$Y1iq_M&QN5E7u%{wf6rC?p%P?JF`W_-`TG4 z{lrlGih73DuZ#=a{fcb9Csjrdbfl3s4U{sWT3-A#om9*^KThhk6%`++4GaPtHjO2L z#*ZUVV=mwrY=mZv1I3|v&jSJSyIZIAH5I!;hJLE3E+cSP=_O#{x_u&Ic%Sqzj}=aw zF%HjNSUCDi|J!dqah5<>Z1vSiJ>T9sS_~%7d8jNZuw?bh9BP1pO!CJ4No z?y$n3i;|^uSowU`{~-;E^VL{QxuN?qILPRAI+e}Qd#q>Eso&wsL6G8!_k23r?(C)z z&QCW#fVDl7xJDd*XZ{D6f2G3VsG&eHqVI${id8kRl*1uM)vO+)8n}frwmK$rsi~IV z$A&**0tlC_Yak}}hiK)5j|g7XiX+Omw@ykSZAqumD2+~T{?&AE!d`_qGyRU{I@~XwR^Uorkg!;0?1PH&M#c@f9 zecUKJulX)Gy5(xrO=@4t5%~BqK7aJr`ILw3qv`dd`n;S_aeR-o#iGm!W~^hw?~gX$ zFZ_$oUh4|_QNcp0K;=u!e;rfBn(l`-6?HrHon>LaJ^oq-Uy$)g!yv zaKffj_o+|nlr*Nh_=5ZK`QQ1zpZoX!&yVLQ)B^m`v%mD4?|Q)CsTTfxIjd%?g};H=G>SWz|%8$e`MbNJt=byOmR(P*5P zMq1liw>Fnr+hfj(#ESf?KP8P#lvC%hN76?zPm{qGmkmLVzJn)XGLKP(EW)s;A!l>8yH&KmA`9NY9yTbM0M&DFI>n_5n2X1V}kU zKgY|N+v(KITduBjz&G_Vwc_SdiaFwyjBMuOj|B4;ia@IL*?jzH+&W7Gxy6Q@99+f! z>%5HI`7_MQ<)`rym^o&>8gb|eI>ac$b=DcwNF$)5dCkPNSV}~xu536PxH|s<5y-i$ ziGCAUd;~m23YVr}9{3`#Z5AYaMV=r1{ao`ymhrPn7F9PV3@@-y;CW)fwM3`^OKf_K z4I$g|hDX-&A!3j09f(L!x(s|N8`kg;-3Z>tQM}GyN1gaM;5|^`nH*MhJ1X2^e}Xxv z_Mq;xWkGIgr$5uCh62wY{Ruf9-02tbcUEedI&+!h(bsNkkO?50@@*Bk46WdMB4qMufMcgJ@kDLO~xKTE%Y`e>&U(x#sJ79#?~7T5_@CgLHgeX zHy#=x_w?6)oc-@<2H5|euieN#mS>|PGg5u;@XQohJKAm1r?uOy95CnAr#}YJds6Mz zC}i3JteRMM6sBeaC`GR4)k%G;sAKdgkp_~QN~|bqV$wDa8w$fn_p^GVy-uY22mV&K z)qqV$+iJ0+cI*V56i}KSwGXOf@_ZUFOoSuIR7JCyHc~~}OdD3Q2GWv`K>V-XX4>QG z?E0$jI-6-1c)JKq@Na`iZW$8EEnhn#`FQblRO*c-m&>%sI;1JO+!zMou(E?di$6nI z4*xSghuvp?^eXvP+WN2UAiz?ap%Qe}O&LZIXY2v+ z^~ajYz?zdE2Sdb#w0)4U=4q9k2W$Kp0>hfmgf-1)Uk|ML+h8E?7&4G|eC_DrvC&nQ zHI|eyW4W@$6s-(1U0(gw&!#D}(Ea)P*XU|nXM(BMOF39*^_|Pe8}n*-=xt0Q;V_ zDQdT0IZ8@pQJjqc6q*hdlsHLdS5a*tcTLb5zCbzm`BjwRg2}q35;UDurY|bL1q(@K zxJm*9y$5GXWw<|*O;%+n!l?|GMyG~VDTc2%4!T#VpsQRFD5X2knkGHQj&FKkSZY?l*)D>;ritef2oB16}K zpN8H5PhA3d5eb3WN`3tM0K9w+@C3DQ7r@@EY_RJAMB6*q0xA-4;n3wY`qV*!Og0X) zNRP=uds0zOck7)Kxt_Ig@c~7F3lo$x^Hh)Xamr4oy8$P^0YY(7fJqFCAG3d{{rEbi z9A&u2t;tR&x4@C?blN3LU$avC3zX@B)KMNaRjD^h9ycxcVT|CgH3qlW#~1lx3*ejAop8-Rff4qP+th6_VhWsS`ld zj{rvv+2|FfKb>W&{y=Bwz&o=8H)OZ!j&8_7FW$4xTm2A_fz;XeVe<#}!Zq@#-6mnj z!;BY?y@wYe9v1L;*WqXBU5^_FL%w*%LBUcYX>faS`|e_|c2+~9Cm>h-xizI;+cV8T zfPnT>2W(d>6sv-l5R_n#79IAeUT;-ko{a|*jAtp8+Q^xI*F>y^1shC>VpNd_Ep7a?lYH}Ux;W1j z+WBEmlGVaqSW2(O5_&ykiHZ17^=JG}gyoOEk~EJ(XtAN$DS#yQ z(*;WE0;IDlJ!9Ty+sS>?gwhekm?L zUd_Fke2>+uw1uE#_{_0S4nUM}3?2&~E9DOZDduXH^;76F=F8CKr&Q=efz$E)i*Z}GBtKyf! zUsyj_YQs-C2$_m4&h)}RHz=xC_AoIG<`qbekd!g5!u5c8^a-JEQK!0IPu_47wqu)c|B<)P|X-GA!C$UfdJcsXuv3>{7vX$2(LL{KowhI-BK zaMWr6am1ou+fej_c^_q8z5`!U=3`+CB$ay7;a2-Ebg(J$2^Z>OQ-b&Wg!|N#lsXS` zWP}|ph8lP?M(xX@M2w75`%bcivj-el$2{VI-;q}h8`kv^8_q{O*wh@z!OCj0`F&zK z%4I*HOW((I!Ys!1ixWkudiHXis=JL{Ixagn|B=geoTS2KFI$!!ZymP!H*vQDM}h5e z+J{S)q?4*6rcvTyBoeGzL(RxqFM-#1Qd+T^UIlD#Q zKblJ@o8yEIWsMy&l4b= zqudb3(@(^~^ql*$gF@EIIW9O1ZsXEda3&6D*Xu+(DFa)B{9OEud7%>Fk0b3rMWj}PbK=-1v zJdWd#y0GuwBwN67qOXC7MxhZhN7~U=e-M#0*scywVC{~RID z3cO}mWMZ%pXAlRdcR3#bBMOAqwdkK5owRZfEXyS6Z>*O76i|#uW{Cb;=S%kGcG&Z+ z?m@f%F4H1CK>UD5&9>+deFEdTY zmJ;VDYqU zn&`1QaPLy5??|OiU*pnU&AVDTSaw>{lVnnX%z49(K_FyXTl{q7;RL&*h8@T!f5e`v zqDv;Vx=Sf32G53hYbA}9QYy4R2t)e`Cx{$>g8DCl2HRe&k87x z7}nf)B&E((#Ro|<)dOj!(WT}q0+f$_w9!mE(o7%bcYPp%K1#Kz5AH!afIt<>VM+EhsjrlF&ciX8Of_7VIltWlt|uX$w*BZqf754Q#EBsF{v!spZ~l_ zZWG42Zlfg0Ba~O2QfS2NfZ5nfpwt&DNvwiWk}wW{{i<9_lJP=TDc^y>JF_WlFAgV^ z(S+mSM4+K%sj5~qB>F`7;HwM2gJyZrckFm@k$SM|U$h>ec+q!&>c!rXWNrQNuXhw% z<6MIkvJSuq`VWc1R^Uik|I?yH@%=n*5xKxtm%hL)ggV2g#c%C5b>2(xS z-7YRbtG{Oo<2ZfZ-UJ0o_~fAnt1uK{48x1_;EltX{)CQV^=L|jGV68+Y+bQ0Zw9+007eP8eE z$hMIl#K~{b12aHtjl-51E%-x`Mf_oRgf7Ajwzu}oUag|*I2=xS1-O&rK_Z4Bu0Tw2JRC%W2a0BpIou9{ z2>xn-=*|wFJO)G~|HbowG)6Gnr$hOP14j~YhECEy9+@-no zXCiu;eXh`D569zjxo&nt<)AUC^qzCISRV@~xCkkOjRt2>JfOae;RqcrVK{~~;2-TV zazH(2>-1P^5pqsyANj;xH*xO4e&wz!t(ypeY8~&!w6Gs8l0dYF-$lGzS27y%fLCbN zuV&>s?GmuCDS<9{6AY|NymGN}pJa^ZtXxdbKp4AvGBd3ISGTo*3OUY22L zgTx}daErysatUwHEl@W-vvkJEb?7g|`XP&&@XWd}#$X0BJ(_i)zA27L%W(CR{|g$+ zH|PfgD^;1K7IUtz`y_Z(xYRi)H-pSu3_2N-$$EA#D~F7>vsr5&;*de{>@$4wij;f4h`lPPc zC>((6Cc>L_Z;0dM6$_@BO+EG|EWd=9S0k#$N25- zAq*C>8+>r|_m4I|Dt2WRkJQ)n_od7J9M51)a)#(vKf{l-1?$7Q2ORjrcBuCDaO6o_ z|9cSjz2Q&l{Nrp2@_gT6SMj(uQ+d~?R9Eji0?}dluda%n{5{_FZyx{jLp<)$XeT{3 ze(%uN=kAeji+z4XWo(mbbZ7Q>o_6|6a_h2pZxG2u=rQVsn$BCD_2%-a-8mo=g#r*c1JNIKlu_myt!Lt+A=t4oCeuuH0ou5X%q}F4SLvCYGL&N1E=Y(Aw1ANYJzb9l#zimf{N>F zW3i26kbRUq>{2k`B|#m=y@Pi(ty{2)%U;y~M}ZKUOXJcDwWEaNV!~6RO?p)wMmVo< zI|WG}ZY-#`lIP!9Q6T_r_61hH*M6&trR=$>N$v)$q4Kg!V@Z!4Y3YnPY4b>OLL8< zQNmp?F-`X>oJg3Ma3W@OEhr^6tc9g$bPYHuifrqDS0E~tM_`_FM@cHH0I5>)2P#c1 z$y8W}D0yb21Pc-+&o(8JPS}=ezF6|}=bQCFs*F@7gbOiCNtIGSnB!y~LIyx{!Lupy zoIoMYl!t7FZM_IxSKbs9z)9)?j>eGmHY~uOi~{fEh{{@;WT~3DKe;XhxMQfOt%|t9 zrn{&Wlsr6A5@s>>*qV2w*jmW0ODy1NNRnY_=Qx9uS!{`G*sQoNtz#Cu9xk7TeSEc5 zZ0TI9*lw#%N3=j*6Ji=|25^l^5_Ls-#WJ0;g3i^Z<-DXrVn>ZpxlmFW#)DB=vjU6eXxWCrP_!LY%L&U>ky5_# zet!=r=tJKn=}EB*ARTu{hN7Ok$tPzT;V%+M6_UW}?yHFd-Ue9PSGT3>Jb)jbGmU0F-5Ob7G7`qcLSOQZ-bky#my z*!ski+%H*`IMKu9i|Rhvo4r!klf7AzMPhpHA*Axvsov~P4M%Bv;V8x68+BbQ*hI7Hn4!$L&^bkH+og+&&byFXwhKZm&@dN7}P5qv))+lK4#;mRG6#SRv+w zsA-V0v4R451`{NkA5)x}>IV7y!lzvRJcam*k zWa5gIxuN$Mx#=D7R4;Z^Ayy9HU>`NuAw)ILoBW>TCq-k)6au9|qX2j8q8VzA=kuuX;^zz$JJ$9rd;azpH$K>^r^K1Hv~9lMK9 z>N*vpD93Nien!7B(6G#WqEjjH^|s0MC30L$gjA{o!#NF9`Z7C)(#E4QlrAF)!LQl&R&Zj_oV6+(HJhmY7OSA?9=FtcXlXuypG9(npbc#`+_5 zfB_L}+DTZD%@A=YZs8wZe9^!9`wxxprA-dIr1tQ$3HBAUdBaJ~eDU-UXU;<771Oay3B8a`i|` zVnE<`KSm{+Mj1dIz_4Y7hz^$JysU!Lk=!VNn$rV4&^%31UDYK0#& zA)(FBx%!?>=aMy%E(W0wGcF^9cdU$TJ)wdGhUm0gdXk89%FAxTSb~H zT1C$A5|>u!{&$KYUl1*8tkZ`pooeG7r;%v1*7RRDb=4$@#6Uzz@Xl`<5+Z14E(-pb zi}I4WD4xdJ7Q;99o_o9j2bOKVG5dviFWe1Ki1I(ae#T%H=H4gBKik0XC|7-cPuo ziA90WxnS4ujb#_auDTdz+BaJi)FBEH>420f|54QRH=?E#B4C1lky0^&7j%X2B^Qe! zEQkS=5+*|iEiFG4tIp0M%ot*7hsFmBt9}5aV z<8vD4y2vAeg?HF3WieZaIB=Ia&zI}GZ51K(19eAittR2WbKl2>HSxCSw#7}X1Ubjj9`Jo74<&XnMEcd ztfxcF5!YusvtzNt65RX$4@0f_h*TYGU>>%`IEFouhMio5n_=5uP|q6S9#CrMD3O)j z{d~Fxw6rlL(N5ZnD;Y_m-PD3GT9Jw|Hg2P-8>0u%aQ^wxq1;Do{BH&8?hg{ zq^=-_YGBu9{}Phjnf(eofl4|LGc@+X&vg4Zh>Qkl7I`BA5=96`Bm5Am87>&YZOKwC z1$22^(u%V(ztaQ?r!I1|WLxUok)B^wMJK8iWvSd8xi_^*4X{}77xPTR0#CaHYe`db z$|YD!>Jp88fvr8uYisQ!7_ru|lVCjo{laDGQVk`1gP~;0q-`ZKx_ezfPXz=kGWLLY zF@@LJR2Kd5cdGmMd?J5S0WN@T4QgQIAje7 z>N(LHB>iVyeTSAVS>M57Q%=Z==eo(di!_Kdq;2RW(-V4DFQ^PBL|B|CHkOyF6oL!d`wr^ z<0Bmi1b<`47A6^M>dMLT+FB-z5jN|eaEPgj)lU)*N<}T<=#+|Pc0w40K?tl!cC{r=Mpe^~V4M-mM+jHcC5ZftxCqx10v22xc5Dg*EBM;_ zEMMap8B?}%xQZl2n$50e6^R`$tu26yRitB0RJM?GaJ5u&Y6?}n)||CGfdw|*vplha zHd;Ji?o7h=PK51PB#x&!4$g3V$TC$Bb^e;c;pM}zeqqX-x+t;c$g)s?Si zy&w47V!cO4W>B+swCurA( zSuf!dL)NQE^JFhuPviRAV!imIH8PW^OBDA%1?Ro*?*rqNj_dvFdU3t0k@Mj}ypq;1voB8IA`B#9tHJdc&+GrC9XS=I(fEoG3&aIGdN zMbJ8;*K~A79ngeAPgZrA_+=_$lEToL(N7xw?5$Wxtk z2{yG_eyo;VvM^Heq)V`>HSe5o31+pXXL4#;{0 zAOz3TaKU5TNltuNR|KD?H56b-%5 zX4qS>n8x7gWES6_nFtll=JsP4~Ew6t>U3-jo5`2Kk<9Z}vP*-5`sII_dNmpQEUxsDk699&N z8BS-B;;VWNy`hf(z-gFYpLuXO{1~cd_*KV$c#mQ*%jd*p)KgY1qxQ3m%ekZ}JA$a~ zm^|ReE#9e2V)Y`{4+r8wu-v{pN}uPJ18VgG+gtoany>w4S15>%2m^G~jQ7Z{5>G^vnN&dGMp`RMSMP`>($V(u2&HkqAS&%<|?la&9`>=%t9coS>ZqXZL;xH zi}YLmKfnmHJt>d)f1Lk0mYxG0Fv}44adg5l;o@|w{td%+bvOLA`mHbPm#yvdt?wP| zc#Px+RffjZx}8HRnq&i+n5+2Wl@L&5_`-oAOQ9HcZr*oT&tFNQeID_%$RceAZaM@u z?8kV=WiQ56F1r-VXYVQFIL@sYw^~|Q2pOn7VqG)`BO20$g9zn4oshygx=5BX{JjsC zlc5P7Pfu~OAyME->4JtRlA|n64$u%1#gb7Ai>Sk1r2fI+Tn&4<(y)jZlr&DR$`Xcvs0YN>ra;@dV$G!6ni^=+6>E-raKyPn1$IjMhm^c4ub(Nc7e4~H`g&D$@>o6X zI)_nRJPbF?sBz50S#b`P?X83C z6Q^4o8&4@<69d*DfqO97|26#k0RpL!`oG=)U*IRGd~DFKw#xWKz04^N;toa`IH{XG zg`XxKVTBsBV4{oPf(fN|^JS!Gf;qOlImP?pC-N#51AAD%wfg9)STtRUT3pnXfRH6! zVSkV4N<1>0w^eDCScQ99O;+LF2^XA$d&l+l3*&m3EN~033<bRsrD^{CL)=q0r@Oh4ND6iZXzL z2HW(5lo@PljNy?8pb_3!OEPYs=GO5)IGD4lfIph;Q@Vl`NREzBJSn^qf6x^x90pnE zke(f51zEtWJKL76T0Qn%=$A~SWcjZC?T44Ma>h1Q@ONe|%c?*5%n$rq5^UQ)r_kwL za0P?zS`uVC893}5au>HKZXyALU)!L3I}Ww!2edhhwC1sh+lVbnIYz9fY_k4QQ8-?i}3?m=Ln<( zdB8+X_-1M!H+*=q**udq{~r&waF{gwW{V;($u}p%dr4+Q%TW{MW*UX#ASt9bC*n=w zcCqS>^Cn)_6M9*$@VrEu+!3Wmb(`h4u-QXJ;vj96cyR=uDba0xE18FZRHeqyrL`Es z?!Xyh_nbwZB%#^-AD(*G7ysyq5B&Vj@9@Y3$Z?u)0I8^HhIfZ5!OPzE^GqwfW5%NN ztuD2LeZ8PYZ$?)BECN`Zii;eSR4S-)Koa~}Up@t@R(NUxr+?)Z4=m^ASe$M zphw;!=0H(@*vJ*>H-%IzTI3LTVQ_k9 z!&@D#m{mwFiMI}+u%EYqLVTB?5HQg=g^pY`P}wBaY;iA%sQGA{u=_vw}05`ya}Seahd(3IG=Z z840>-M=mUDCtc%O#0_fdEm27#tyMj$%q@}Ds-6o(R1W$=_oIMKLjgMvZH*S)&faK8 z$Sg5j;;7#Rg`tj-0%H6)A7rF}Nz8}I(k0|MdW-=ulx?QXT+9K82;`zGjcyfPsYCpO zs-P*llcLndz?0G z4KczBaa|RJ40er7kk2T}KIw$CrLeCLW236Ks7qpg%PE_|G*Q$_@EJSk=u0ki3 zA%jZ<)vEG_Z(L(c-(2=N4yDRbza_b_n#!hFBoroMEKnFOwqNV=OvzBpx_c&drh8YDLCKql5oA@!^oqF5~K!*kJc;Cy+SVrp;$&Xo0+(C$c_FH|J86= z=-|@0tg5AYGgnv7-mOHDCltUTNy9giCgO(WZuO0Zt&;O}N{e;P`mr!xTBlHCBOSOP z95KeQ5E!9nER%NbQy*QoyHg9|uhwQe3Kte03F2Y#X_X}_pjQ7y%)ipvLK@#%S`K%T zIppv@&+tkK(@>~rZRALHLX@57?6`b;cc2RK+S&0#|7x7_RE*TlUu5`n05zh$6C9nycx%m~Q%d&$1SzJ~^8SP# zJ=wOUNbA-ZT$L|ztFn<&AQSMh`b(sz?ISAo7e;@h7ya?* z@82K(7*mkwhW>BlOgE_>_Mka>Z5XR9K^zJY9Gjedyg)}%q3MA=sfhlwHY9w+6n?-t18?|BCuciWWXp}juM({;D zlJSmqS#yn` zO%8KJCh0Ue)oj!G(du|rQ(^4F$d^c7MXV@eS}as#2Z+=t_G`u|l-WPHRtPvDdCm1q zVB9t$q;hHnspyz0a~**raN=n#5in-R8M@Abnrm-YQH4F+>8rLP7Av*xZBD&mD z8k$!1yzxY1=m~LK)pHnaLa0;vW(u$3PLqP2p(m{&8yvnC`((wFyLszbg zc}hbjKo7vA;_hM9(kSag^+0ZX z4bb>Rp(HF5Tu+9dPOoA!L-R14IY>42l{u8aJ+*`OH9$1V6|YU(*E5c?Ll=FLh~-uB zNxcjSoY0l^?g zu!rv;eLzix+kXp^XsxCS=n8rOrn-HYTPL(>RS$71SW>z;yj|cnEO-v#O=%=o3`jN$ z64f!0E@8KzDG6d_yPzr2uC6x;>JoV)AMFBRhI>R;jDy5IcqWxHN`^tr>T&MRbV3qH z@&KhLJL~WA6nVyCz$n<5ONah`k?G!28!7Vq@5MLoPCEvoBB#HnE*xmm=qxWJ@+6l9g>fn5|bVtUP z(R!a`8`rW|WXquT{`2|NH)u#CG?9=i;!9BK`6P^%Lj4v*aP*@8Ia4GtlK-@$6y9@DG)(}s}WRF7JtQYY=FkDzGzR&F0RUt53csM|6 zP$@XhUtzeYLGpuU+BiPo^d+#IZB!NJ+9!w8l<5^7o{Opkw+1exL%2tKHo>FV6@m6@ ztXD!q%AvcaB=$wrqnch)f8YwD;GnsaaNaWul4DUfHbQ8{KA}R8+UQFW2gfLiAvGdj z21R+~=Ten|bmIkC#nzA{>X#x`Pk`Cd@j?0P~MQ5Uqp&nfO!d; z)bPCap^&D}j;o*IV1pg=h2jeXULVj<+Wr5JyLXTFlcxjh2NsA1fhbKgobvGbbGRqd)zht^yNiwEpNF#MYENNxmN;Y`LOwTgp zU@=QB-D(xS4y5!taXMYj#E=*KZ#odwKtkHc%4apV6+QK=5l z?;Vj?(e9M}Jf{^|RxOPmjA#p=1SZPIPTc~^Q<91R#XZ+z7wxUzAcDZO%2w#WGOP+L zK@ASZ#=V%&o$BM_Wa^{BDRdZDr}~uZ!e=P3X-ZVr!Ol(D$Hlf5UCR%Fa$Y)C>owMD z{jHgOn4RrNi<`2)Diljy&%m?&H8XI!?-@{nWXA-V*ct>zm{8tE>4wPacY?q|h~R-H z0=$}QK#SR$(-x|q9z!pyeq#LK6jcj92q;gE@rwW#gYsYp{JQQQSb|YY>p`3ogvxMJ$qymoGCE?oGdE4onYX>H)D1Is@GRO^3bFXb3t;Nr zlvms^&lq`Du#*9U!Q%5jElGBd#8kjd+m9r7uKd7Z{lG$y@>hjEJ{gZ zE1__tEN;s_rYluyp2fB-<521>MgN&cY`Imy{SmPX``OMO7gKA&|fk8>z( zO7T$3p$opK7bYsAwpxqP@j8(ekXB|h^Y}hsbS$B`$ZglD<|E9fks1-^Q}RpX|07l9 zE*>OG>5Vf8G1bZ-gq_CuA${(gik2o=NWdX(ZSYE_+lUw^6uxFkKA9G)zxbnHpSZi~yw^ved#Dxb z*v+_<3cVw%A?7&a#z347WuKqra^gHXo`|Nxd?ZvVfDbpCfAl{u5!DZ;M2#=QDwtOv zVleMlm_j~#a~Qqlx25-eo#JKOlI2*iik=ec(E&!~9EvCBjG#kQ9FShnMSLdax&^XF zcRMJ%S-^EHgirO7VGyIK%4WHn_dFHVHkWLq#F2CuUX%~ezLFGrf(q-96Cu8r)`Q1* zA!HvWFphzd^<_tS-QaO%7#l3yU*wu1^W>W_ufZE2h?0y=&@8l?mEE0%ua}X?OM{om zt7Yj?nKm}s@}E~kwSh9i1nJeZL+X}d1|%Xhbuo`$?&Bh;4rKE+@Hg`U)GwE@bitg- z1d2>J7kTI9WE_z^NvTidIdBuQ&>ZpV9v-Tl1h<20lS~AbX=F??XA5~{ zXr!U!svz)z2bU9hF)oixt}e%8Uze*-bY;?A;m0_!5Rt54yRde_pwN@URL59sglcSe zE|C3Cp-7-We8R*y2B|49HAW<#*q~*0m>%M@wD3{0Sidm!XzFeKl0{Co$a&0k0;MfX z$s$KH1}`SQ;JcW|l8KH^Clj6C0Lb{6cg^}tgi@wc0x6^v0|w@Um5J}{f}F%|V;;@4 znXq)>C~`~!n4Hlt94|!~X{AHY2hAKbh1_(|6vXGCDOxrLOI=P$q~n8N@m7|DPswl; zD$aw}@ZnZ-6`m!9GU^SIdzD}zZ8p4~S5i*Gh7kfX$9iEDC(bvR8{`*Nu&9br4&K&q z(x!s2^LlV6%_g8#)dE78MH;o7d;U0$$hhEvPNjiDSsJM5O@MHhwfqdS{jZhv0&+F; zR+BRBIC2x3v(?pV+sR30f^u6rxt=g1H$(5)@fmKpwdVx9)N14siFz8GNf?A7Hr;J& zPzQ8MI0purrP`Q``#j+xfY2RyXjJIWZqR;1GZ+5;JyF|LHr;$a)Gqt817Y*nak-IM z(?JUA$eGFA!MaS2>9!GXu&i^$S_$QA`l>^ZtthW`vJ>5+qg@AzBdUo8Qb|NJC0o}d z0hypD!tfuJXeQSZ%_WLkxd_qtd_F`~i)P({-__7u7>jDZ(&C zIts(&*F-&tp=U%TP>b0Gg2>dwJe!(u4w`LX={4I(%~K8Rfpq0`ED?R1fE@a4!ohuk z=A+=~5aJM$`5lC06^QO}Y%Ki>(Pr0ObKpizNH4KED#;SEHJExHLBWd?89`c!ctGbw zJdl=6*Cwq*WD=cgNo#6$y|DZrmb9j3=d@#{1+!Ozv{K6Wr$k{JNf|%2i?Oi@UQz0H z<>_b*-J}D`ZBKro<%!oKcSy;r}kW56rkwL>ZS}FTRO9#fX z=HJ(aC}kG@DV#t}j>Pl-1)Bj0ap~ecB}tle0JM-e1So}9L(J*y2;1Y^dG>qgT{>wK zY6b;F`6g;9&JdgR|IEsqws6Et5kip?_wy0^1R^A8I`ZuAn!U<<2hTi{VwpQ++tBIe$~MtT}&G z$eOb_CFa4=hwvz}qjandgf)z){dRk2$aE|_;0s!Fpl}-!7Gb3D*ypndhBb$mYHJR5 z0@_mt+#&Uw_?KkODRx!_9N44_RBgU_=I2|MP34}em!GmxE_@6rr}WoUBN2aE{2oi@ zY9A++_cYmhN+P{5wZwX36_)#7>4$JfvDAr`2Z2|kSO>_lB+cGqYpibddsycXkx~n= z%2%^k&alII=VEw&!q|7XOA^-&3U##6wHfqNT}4VT4J+M%!c$$%WT*N$!Ei_RD|m+* zW84?In!bZ5Rmnqe0mH1PtM>xNH-Pivrc0V#Oc$hNyL{90eG~RSg;@ye8=>V);(>mM zp#6PTF&oqD>HHEKrvHo?OQ+X*I=?!e!K_lkxMn&r6EFNQ)2Ur@X*$Q&I8COH*9&6_ z>oA+v>M10srJ2I=VpHgKKZMXS8%|(&md1nW@S9JpH65PeIrWb);qikfW8oarVcUw{ z`13%HmfbvP_{G}Ip%l1HV>drrB)d5%z{E6mbMCR3%i;)9*=GJVCtR`lZkQFMzK==C zK}FJFFpNq8{%}NYZp>!l!b*u=XToR*NXs~XXYl}5uJ(y9+VD2Q0&C|$An$4K#JDh? zBr7dD3;0M!V2tg9dkYSHGp(zE8FC_C;0=yh5F&3EE1AJ`&*I){XB`%)<=1hLqy%4oXn5P<>QaRPSZ3*6jHEzcy}NgAhR=SI0A>L(#H&6xQ8RI}l#YWoKw-*~Sx5|BheLZ>0nw-lw-6{t!i*(Kuc#-t0_fy4HrPj3 zHl<9@NYlgwjkeUKnnTQ4c1r91EcbvLQ4IRXi*by%x7Kev|FQPS9i? zrB^ql3Qp1HyTg%F4fp1!`ad~LehQogRPQIL^Ne0H+jT5e9Io64)w-PPr#>8>oVNq6(* zwsfaiYP2~qr|_>X%Z?V|Q>@F`BXL{^i3xMzGg2=}DhB#Wz0?xE!ok53UR5y}%^qAi zbjaUvtEkA>Cv2Y*y{?n7AIy)*G9T;LpJmC?>>uwd2^+?U9E)R^1&9~<3T%jCRqa42 zKVX%0B5gm&M5Ph>0f2iV^q>KPI>|=*C@I)136_0~3(*Baju7xpAI+#SL!{WYqrFh} zuz18?(z3OWRE`scirMo+ke)n0I_Xlg>a#2WA1ePB1;+#C#PDDT&n;kXw^5&8!l>NY zFT)8vg}jyoU;w?w?TWr+s&Bbn>wE>gEtXyo>L=fbzg?maa@oo!t@sP`kwq|f9EWj6 zr+4CcB0vy#0qnyIB1x3P8VHL0le*H8L#hNBYvPm9rXF6%7rMkA4>1`UD5X~%@;fxU zM!J00NXi#1!t#EtdIk7&9zKtJfl<6H`BLS>g5Xh-#lXKkQOVSA zjvX`sUr+R7qTo%adK`#nnXY+@u8n!5NF;_3W#Xm+XACvU#CNAC3y=h%X+p%$6IzI$ zTlqO^y%%oY^hRl(&B>b*Wr8*rZ%Pii1PZs7siAN=6n-d|$pEb# zp-@*{t-9p!STn57xMZbOf`LI6TM$%6Y1X2 z?^b0jsbaH2{cVO6u}f%w)2!Bcw8dajU(MrM&;wg~5schW2gG+JD?0eip-EE)iy9N^ zQ?{z6{%?m4Blbd(AEBZw)_TcdC{4zi`dtSpnO@Nws~^_+T1qcKlN@qNLpacTa!`mT zf#e#{0Wb4yNv9C}Y=BLGG%uj!i>cb|%infv0Ok*vAIGRlC!=RTJ#7j@Z7MIPq?`sGa-Awf|h$N}i_=W*x{kvqpxlp*u>TiHua#NG-N1bZ%hr=#u zaXixp?;p~*AJ@z_-F%d%T3B;xB2VTQMy!WQBB9*ne_=-!~oc$;z4Oi1>#03sbs)e*h z>NR1KRCboBI-By3q_{9zY3OIa>!+2b7ggjl>T;ZSAgqy=^YE6vH;p&QPn(Zm zr}y$Qxm<}rVg4X;#Y$q?(H&F5MJYS*miGsP_!;vfPbkbRiCO)MFO>b=)pcRLqBfmn zT2zm(IpUDUZYsVpIz&Hd=n0@!MB90FBwmpwuEXIh0nU`PsZ?BC-{8*!tkk4|K%Vq-GLDVM1+RA zdlUh_NJ9Wj z1??{7LpaqA8sphv4t*&%y5le`F6K81DIqz4*b#f#c@hi2e~s=Z;#!yZO;;$q*FC-f zzxjaDVP2G`Ug&$%1o8}i-&p*9 zET$aY%5Q{mrm}n7p2CZ?C6SIupz`+i&d!^PO%iT3PSB^;&&3B2QTkDvspFmYuWW9= zK|Oej#ywx`^g5#u@pyWhMld5Ui;ytl{mLhypx1H_QL!50s{xwxESp=@j6-I}N+!Q< zLVYd>&7;|pBiA==n6OZGOH-A!kC33KY(+IM^(n079$Xo_qB%Hs6QQ5fwslC5msXAT z|4eDOXKOPy>zR6sygEY$Lj~Jv^QpS1SX74vvVM5lrvRmWwJfU=P$nv`Sy)arYZk9+ zNPX56oEJ^#xdFY@*piY%$5bkjt~+ge$qv`U^u zZ)WM!+gjkNr(couQ?kO%~d2TldmI#U7r;{kzz9Lw$|T5%&-BZ z1-zbZCWvROz8Qfi4I_1$kLvxbe9dDTsoCdW z6ADG3VO63ohut{{PpB!A=|49G!jtIZ+M C#>QPbkfe?zat~2tCM$!H5@=KJ?5=X-E+2)Mf+%-n92k*;LtvoVwsyIkUy318YYuad z7H&vIk*_w&?n-4%{53sM-Wz=yJl%fS6m0~iTMP(@FFNQ5R%GFz<5Q^p1Jo`xCH#6} zzE$!Pep>6+tMZa`ec6@d+WCP_m6KY#9HRql?rms4`7TC#Kf|qURp%oKLKe4ysPtJ| zCu7`a0)Z|7&PZ&d_s=M*XPWN;J%`>eM+?14`YD$!+`gHR|5@`QE-uc*7s`saTHZ8#I zA}EP+03P+hRhY>!qCwWkq+kr)N<6p4W;oH@1r49!;Byx=jHX*X;)3~F$aduw!IVvW zh--Z|Wolo>;@qu{U^=Zwc)%r3wMy{k^Ujm466_0^-{iFT-g)#IqZa_Q#pv4l z=~=K~WBF z)J0mRWN{6Sf;-^ouNL@SYa|_;){LZ_RJRsMg>E;uShZXUmrDlc^f|x8KNQICs%FL&0~$Avh&OfXXVg&93)fq-Wwk^-P}4pQq(@gO7Jv1vPK8IW2x& zWrK&aD--rCkmU}jB<`H|Rc)%Rn`$qmfi8cJZ+e5f+Rb4H?M{DrRLnlm`JnQb7PjIJ zNEt3eE(rWbj@b1_F8;xA436i&)2nCms!$|up**tuMf9eLDP-JH z`M5+2z_tw5hZ(K)j@O!*bSAa*7PuUxnv(to9j)3gx48TI^=z6KE zH;lUqFYFOKsjj}Eb-oTIsb!W3y}^I*2-!7>R<2s-N4ZYdQBq1iEK_x2tHrRRRUM_n zVTbZzSKL++7M&KF1DlR>#GP~U4(BIxP+ZO@T~%JKqc%X{Vif{E6%V2~57=M|X!mAw zGdO=sPp%kRh1PkI-IxS*yxW`?$$_y{$o|R#mgu_Ff1eyngWX|AO{d(JIz-mW_|o@>3IURS>j| z78vFG)k#rT>#WH1ez*0$CR;`h_~V-QDTQ7S@w1at#sZE$9Lh)Zfqiv+cYXGY(D07z z-x2T3G4oxWESRy8&}daXqsF^~QS_W|OlYUPdeFE;ZE)w|L>giiSS`EJ8cM9`Zdr%E zRhIxYa7*haUR%Z-o7&l?GcDH{6D5nE;%99II;<-jYY*v4zT+oz=8fYKyIQpb{^w)- z=a4pKSgFgeRo9pe&%#L^DC*e=I)>i-dT}N1Yu%d=T5~O^fO@*H4>z4$=p&6TSfLh= z?(O61B@tZ*bwxTontILHZIZ=xLStvfOv$Hjz^qy&OV0F`ME8lPe?bNgrhZ7ZN{;?x_5@ZI_ z<$53c!47GT+2M7~i9Rd4w`D)$Yv@NgQ)?9w%!`FQ5L?a@YonR4XB&Y)l?H(x&81}4 z3{68EGc-RijV7X#x#lJKnox!YrCW;*(D%|y2h&T`s#v5a%I*^j;0bDV6hV_ zWPTyA_Xx9<{6Ef*ogNYb%UYks89E~9&?_f+!=sS_pl+|lnGJuPxwN*|Yq_v`iyXDK zWO$ww+;CMsqbt*Jf~%&XdXBUR)inVPR7)yd^k!J}t+-@=tK_gtK&1K| zO}Nq)iHgocA>_~nP)Iz*x~52-N#pMeVGy67YmRr9I_`Hm#yekpkD!eBte@Y)bC^v6 zdaFg4u!a8cISE$sBRxzz?$Op#tt3v7xZm37fuGel_mMrv2bSwe7nm6S-Ku_@@CD175^ z5dCl;dD4-8v%|CtAJLD|WWIR+;Hu(-x+!f^XC6CYwHI{}?V~18j1nAe9L0HXuZ*Pg z)3N_`8}gS5Nba1$cx~Yd46$BbK%4cyQdWC6LDyMnttyU(o{+#*XSY^3d$x?$4gMb} z>M;~HT(J~D!Rj8&K|O=WhgqRso>bS^-p`2Fbsxa{Miz@HI2Mv2A7-7M*ul&V>~`ja z*(OS0qW0or&4(S>@|t1<(DvnD)yUng-rystbt&09_n;F=@=TGMVKl{3s>*sLe^ExT znhn0naPWRBk~R{2;;u>vVZhyUQ?X65gV-g5^}6=2#kQM@cZ+J2%7QM}3rgQ9UI_-hS;o2_o5J{R+;d-H$8dN>I04?;4%s1q6o9 zws{Ex!-8A56Q)rHdA?+THQ`-^r(u~VI!)K7bwm#>q4*%DSfS}B>k!xxfWdASGqQ7u z2<0cy2*yjU>Zd;j3KoMurc{cCwDFfz`K{;GEq)prZTJ4c&#Y-pRo@rget&B6y)>9q zftS_(-<~r#uel@_=|kw~wM;?1Af>3(8GgFh3-A%k9sUZa^x66$Qz^W)k9d)jQT3K^ z>Vo>flL_f0sDb_S32IGWK>TP}hC(3M>;mASfFcU55usL8f3Eo37-~N078jtRXs8m6`uGMJ|?d>b%dkGK5(9F_%t+3mef{+ z&B&TOwL?&i&ai68th7qhcA;b3>UT7_Ly*~tytWy6RADpP|Io@>n-RaExU97q{n$Ol z6%TY}TshWj8CMof3bw8w`e8o4l_`zh6V-WzuEcN-HR^Nzd3WUjxI}|p!hw5;Io18LoVnbwIjl<}5U!7OIsJp{p)P6lxjxzDBr?r^ zcX%~*vC|_cXMZtbrN(zfSYE`&YSYV6?9A_xu0jHPF?MCqM5F)B{Cwj}{LT*1!bV0n zF!dhN1GI*U>OS2oc+N5poR8dCg#;A$KeZ*Yn@Faie?|q;ErH`ZM^mws_K5CDGgGi+ zzr?fhU9#=GhgB8a1}8bfZ39-Lb)9q3?HrUuHp_sM#Zk>!EY|Q3*9N0rwT>oUg?<*g z)vyPA22nH>^M?Xcs&5+BT@A+gBTDWbcBe%FsiB_DJk+LDVXkGMYuhHw!IW0lGd87l z^$r~nddQfTtVCU@EU5#>nD(h;CBiV53tT7iVW#WxWHmaL>=IMd)3;pmeh%r$`x18r zY)V(db2yA54LTwTgkHgmORkv4+7W7>ke znVw#448t^PR8JP8`39wWQ~+)E0u{Db|5ru|H%a_zjv8l*-b|?jFWOj9o%l3^=nj6@ z%&}<&oLWa>8KwPL^Y$}(yR-If%=TNo`Q3C5VO0q*+bCxdvQ8#W7Uh_`#ryO^g8Vj^ z2z}l9Se1u8{hSeF{0~T!&4`U#Wiw*?vRNsH2oZ)2(NuTrnd|nlEN85F^@cqr%ypd7 z2y8N~YBZ#Ue7JQX8*Y*L&_m=<=siy?d@Fx&xCI4W@nn>L$?vINn|C<`j@v6nnv5In zhDdLD`~8$95V0`cvXCus=oWLky)!x7qRU_*`)(NB7XCF&d|Sm(?TbUjDMCisRe+2j0$ylpMJMOZc4Ls4NzF;uucGx1n_@f_Y>Kg6c~MtZ z!+W&{06E>$JiI8b5ol2pjD{*EhMc-oq_lzdVeP_=4Pmeewie1LxUkrZ3dGZ=2DVr) ziouwNC$2>}VVi3$5^1)tD=)UFdP35lHuq_#ttPlPw1aAIZ#aE!-(I=i!Gde(T(Ea* zJ7ykE$4KIdW34yzEF{(m;IX}i%{>D}WFnEWuyK0kGBt7lz_6|wtCR}BQ+ca|E>O}^ zL^bPDJ2kCZ7qcRSfv~jYTCJwV35%4r&73;MHgjf)H(3WEZ|ap4U$X-a9$^!zu1p#> z^DWcxS5HB$1=6R;Gnn+v35_=)`5}K2UN^77S(vDW zL-}Ynlq=Ujv{~rA#jvk-Lx)hZXwhFY~u z-_$ELzg+jIOON=9qMwonp=s!XYE`^yXGmSq{#Hd*Cf5{IeKN1Ls=ho$seRGj>{zQZ zPitvarUodoZ{@z6LrV!@py*BPnJcm!bt$Vg9-Q6z4Ck3<+wr;o|krkC@eD{mxsR?hx+_)x!>?Gyp)>b7UWbd4j6X*Qi9=11hv%VsP zW`=#&_yXEkP8Ao^#^}?Qi|S)kVDTo*y?}sFptP8ZvQBB)qKAjO;exTeASh{@1%*xu zncgMRzNn7H`HQH1MOaZm*I3R2Y;qjyL)5y!WRrX(0$*qskEzu1;r^nR6 z7bmn3RNT}knnd-Tj)GwnNVv+KxJC@X{w)T`F^3qKW8C3n)TGa~C*8~s_iAt#O(6Ip zQ+8v*LJI0*#FQk9*t@W=s#Jg6P z8vV;&d+A?W$NCpO%8dEFu>QsDqJIH$aSx3P<#VgXC}BA*9IM-CR5CFiEj0M#_ZpKC zvyo)HNGZv9=Xk3r^MW#dwk_jdNQxRW)`)hz^Om5(a#%~mxmYA5MEG7U$#!J_vXP|T zhE!C)ZzT!ksZpDbx&-B^tu~$R+?F3tYSRhSrWNt3n?rsDLMhB8DDjp=h)HJsFIZ~C z1!$>hgV;CJRRrnUR*uukQ>m2|S~;jzq@{*ACLF1?A;t7Ewxhs{WUpAGByKLdUQn2L zd}!>NpCNUA2H0=}{#w0FrlN_NOC_6LTlO{X%8iE9f7UH(#%Wziy|=0>N-D=5;MS_W*F^U5Tw#3# zq^V*#C%b7mAph(LT&&JUnink*q`_c5n;uUw(V-YtS5(t+)_`MgDaT8-yroBY8hcC8 ztVUWyWALkMl97*mNOnLrWyd^)Czy0Roo=3jxD|kOG6u`+LR*U;(UqJp2Xy5(<>~Vx z=4xk@D71_JN&TiU7G0@kg==+|Dw~yulU5Le=Wu9%5uf&QitU~7Pm zKv?PS9;%z5-ms@wweYP9jn@9-9m0i2InyO0hcdRy5HZJ{9WaQ$GYsIFH5))7swd2sN)3Q&plgS?&A}5 zL#CO~bGhTHkMBhjnXG>MF)jmA#CGUN%ElB%awPp7(3 zez?zh|FxKLM@zwa*6c}a=7~B9|0S{Bo9G#iJ(2pAje+J^2|6MWV5SkjH%6R5M^^yc;4O@vm(i!`9LFXR@)54T zbk@U@TK&d4*oLZ@9z2iof;P}GtUS27NF%t}^Hg4PD-fY=5SMtMj*uRQN=FF2tSdnQ zkLU`bAJ7$d=fk=}`1^Gwe-H+~jyB&56$DNG-dHnN!7YCiG2HqMoJiBj;80BWQs~j; zN^{Mt$t(YqrV~sQbqd<}NWv>Cb!+S>-xI!%M zp_DB!{1px>!N)>6Kgn~>Ak~EN`Qiw)Y6K(X4EHa&wSb+X zI{;Bi*~&C)L@uy{8B$FJio}+C@kq`_QS5>Aw)t%m@TqgH0=uj6T%@n#klN+}yOrs% zE>J%p2fW^>D{Mu3sdHqc<-=y4Ox+Y*V6NE3Cc>!aX;JfZ6}&?kt;0oq8Fvw|L(u;^ zPT$5XgJu+SVA>W^X`@omHcuRQtG$47ZVR1N0E|Fr-8D$)F}{})@(qHLhP+(lFmHB& z_+9oVPB#zR1SZh2Mu)+>v>2>8G0ZjMSa2_y_pT4#I|$wjd)5IU7vQ}!uO#pNWx)?T zhZ+*^Mb?S;!jQy!2OQI|miG!lFT{Hrt{GSfu!ObnUUNfuFWk_)_p+)Nhhbib_trA< z#qi$CA}sYE7U6zV0NVnmi+LkhaDJqF*od~l0QaP`>+09ks4c_!lL`DL0@BpKMy z>&uX7KHbM3u9a!5RV&fT6N*^_Ea@nM4HCI5VCNw2@cDAY4adIQUDIol$Mx!S z|EWr*uB!u7tjf!93qFsj3t@ww2$wGgTJ2QV#?2IuEoX`NM{V7eJB8<=R>w4<+uA3% z&Ko<<@s9GI&Bs?I>zqww>YKTVeKF;_FvGD!pmBo|pqbpDI`9D>mi$+?W9i!$@Xy=M zJR$1~b1s-D%wdfw)w^fTfzU;bfieN3zz+%Q-MCADVgtLNMYD$6}S_UNn{0u}Mrf*C$j9uh_pIL+eL7Ybj>{kWr6D8okZc_rD;`1rt=5iB6 z5IGYr6NA%IV@w^uI_)q`6q1=jL>zD!{v!6+Ps)$0MZ}IXYLkAw-9Old*_9-s$0A~~ zOf00Z8*YGV;QgdjbxihvsQO*OUs&fc5_ONCk4F$YFZAlzz~G;4U_xS4(E_G}1w21B zzy)5}=a#zT*g(1wv4M*Zt(+Gd2;*5B8~E8gD`3C%KN{@pnd|4BPA4k>V&3*nVWX-; zM4o3)Xo?S!Qw)5wki+klc8sodYdJL{OJ+ey-m&i5U7=|cYEubu1l{TX^+aCW`oM%D z8MUop{kDv4qCD*H*LxgJFr(fviZaVBu~CX@WaR`b(cVuue4f+}!+OB&tKK-1q7|`d zV3b9Bg0%;}qusmY%(z5LtYb30VZ+eYh$jjHx+cSzC(&YbBEZ`PZO zz2Tdwebv#5lw-nGOT*0nfI3Dme&P2>0O zGJc{V7)GngL$1;Q&ta*3zp*3xd{O(7{Y~l%P@ymE;{?J_D_}v8#z&{?kzTAjS9<6$ z1d3k9pcSD$9txZ7SmO z>Fe?LMN!Bl-Cz5?-sJoKn(t{v9LUNbV|zn@88W|rWSB4=9Zf@juILr{G;Q2ruW(HN zQT2q}T^ig9K_~L6g3FBecEb5=HViDO+vLsa8Bt#KG$ARWkcm(L4Sd{DP4x>$o0t_- z(n`EQgoB#~#`2^^!?hocd@MlUbtf6o)P0&QN@CBej+QaTQUz!Xr8!#0XDLS4&a7>D zHCje_!pj%=nq!iQ=kvH@8z@ax2U}Qkut;Q@4KD?+x;oJiocv5N+L(xS3ar=&4iULj zkLiu$8d-qjUF|A%k7$B5*u`5rGLXqf?tx4S*<_CDO4jykj<_L(xMK0}{xcB@GtIX< zvIBJ==^tg6>I6E9e{{@Fn&Q-f{T^X3lZP39wL}3>Ah>#?DlWpBv{YA|4d`vAaUbH;OmVYhoJ*<_=xB1Bm}dKsTVA(1eY_Ar#rJ z{%LfJ?ptt(54AW%7Uax_rGkUsHoJw8ic8}xptES<_4gzVsQK@u9+yrF+L8TLUb6## zlNuJLY#g%#o0%XF`wo~v)`p@SV-N!ZN_ZOeJ*e&DwdtQZ!%WpB);8~C@P&2NQ#A)* z2bh>cmr+;bGAP&0!!l0&```U||E*i>kY++$0rjOSiVO&47pMaMpenL8RnVIFLwG#1 z;Tr?caE<#%1GDSbR~^yB>*tDYhl*V|9Dwkb!dGe4J7a=dq+X9=%!yl=OENF!l16C2 z!uqQtEfg(^)e>Dbzi&t^^f2oH^1-(On$7a*^{dT$Mtx$*rppby7V4Qb@=MF<*{);& z@(`m6+#xHkXGu!)4bKv8ORhwZHvav2)y6ijB9h2$i!(KCH(ZOZ8D-|>Xl!?Y*=WF` z%~06uTWEd8XiaW`2ZYUkkyn3iH%A+ft3UkoN(vfoRa8`Vjl)x0wXH^NOvH}tYYk;| zwGwRCm?$Gr08RnwWr}=-OtR?m5eOs(gQ8L5cO1M)Ds*u1t{x+LCXy6T#cEKL&NODV z(Hq{WdQWqL$ZN_w9rW|2^3KPYP8IAn^z@Fsqq-vT3(#IQh#Nxe~dg&20o z`qN1c2Y-y97-8+X{}RTsuO=iM#wRmkfkMMSSu^8ocxB}X918y^ufFU(7jp{Ql5u|u z>Sv2W3;kGqQBepo_RoVKC-UKT1_91!9tbPw$cfH^*dDlYyTn`0#vXJ;wah*PDVm@v z`ZtaQo`$#Z{S^PfawXN+c`1#yky>BzOx=QX%7(XyWlsCkVJ=Q z(XUbbn>2(KL)BK)MopLSn=uwgd-PE@7+zheArr=fnIwLHZEeh`i&OiDT|6admI9JEdV-Jo4@xZ`ut9AUT zMv7a<|2FCPR|Rkm(mC}(jYQOHNN~bc8yz1B9y)%=@6hqrG5Is1-YG#XK@%eERLiX@ zm+K+b(9#a|Gi7yO2+kz91}aQ-pzeplKXYy!N#&neQ-}Fa z78WYz=-U7cD=QX5=g}UEjr&Ii+h``10W)(2`+cU%k@`?xIhtx@O!b^}5~X_qUz)Xm zxw(CBz@-+v+9gF6NAWK&BGUjb@FjC#z2I_PCBi8vIi=&QI0*(oa}+#eBm%^bPW+Ru z1gET$;CI*TB~d?A(I^DsBaK3U1a$xE`6EP=K7}z{aeUKK4agum>~^#`wNaDeE^7B44IPyT{3xb zec0KJFuc&4*$B2^(q7!Sjd&|&duMkD0c!gWQ@y~^50pbeBYXW~sFuisRQ|Ra-F!hAC;5ubC z55jiCnSHc7G{qe04zCPtDA*FRbj?C4^>uSCK@TLZS4&VwMvF6L!z&sIN{n_k6}fktevv4Re@wgtY9l@*P>b?bcmCE8sGEgDuT87I)TEkQtQowAIrM83 ze`qW|8iBew1S+u<(P6rv8s1N*1gGwBvtZ?yc4Yr!V|i;zQ|tKD`99#Il*Op4lmMjr zMr8<7z!HJB0sdL4RV6(;F?VF&E9N6e2tN8@b_|IcBAP|;F*jVU39)*OROrGHIt4QFx8v@(9~?z+MMNv1pL<} z;InCEy4<{r*}h1{T6_(>LbkeZ;ZcrdPcwBp%2y@XvqN2z0BU3pi~2)J_FzEMD zkM2S%7wN9lNSfi0bRza!J8d~_R8qZNNreWU>`Yik5#0FO^#Mm_J8uOoqqlrzGbp4Jr^eNwSufzd`CmS6#;{r=HJnq2tPXM8B2y zh;GBL_yTnT?Lz`j@x7KCg45mVZ{!L9T;dMEd$akwMuP^y-YEABt4FPe+Fx$a7-Sr| zWssrI7-VQNM_3+7PLlBab!1b9E&0j%=XJXvSky+lp*Oq8uxho%nW}D!HfzmVwkq=M zX#?*osrpjqqf)9v@6|*iQD)H(!uNcIe9zj@6mx#n;CB!`R;|{|xkW-7K(A;Y(;Sdz zf5QC~h1$@EF{7if^Lp7?#boXj?kh6@$Rdph0;A9DZJRTP^}Nn#UO6+(>x&v$`=&D? zlGiVI*S&rr!qw}R7D%+Bu};^#45ImE!u`D1;bT7P#nd}s)~gUef3#w9_Gi>81W1j6n3xs*nb0KwEl)AS|JBmWh6H_iRJr9 zamJdcvlEGl%N!dlFK&heBO8{X+mN|atdReKF0!Q56on0`K^?F0U?XN1?i{Go%z@Jj zx=pBen9*j-=-V=sr5T))L=k_{bkt=^XzBIm64dQY-?}m-&%yJ=AjSD?qn?rQFR#>i zWyQ9hq@~EJRb7Ho~wEsAmEgRChqdPE`Vm!TL zVRC7ByCC|E?3k0xg<`oc)68uxCx?BY*k{_XneQIdm6qIoEr<~K+4Hq$?i z-~EdE#KNO?!jn9fIjN5Gu%)~@9**&lYr}bz==UBd$S{4 zI_1q^qn>X9xpk$QC9!TDK3Z>@Vr)D$2X|Hnd1}s|RINJXce%Ha4e#W?J0KUWdN%Oi ztNHIWgl-&L7l$^oVk9`O4#j7Cl+QdXF+viZ#1=&wURLxRo#3ewgDlE|P@>`#*XsDs z32-O5HVr?3`R2NJd zsrw(Shw}n=>6VhF^V|=cc{QyQ}}$ex`r_q5Vw%e!cyyQ`6GN#R3^p z7Qx_!pCfjCnFnwA1mlhTxK2-|^XWkKGE*Ntji#C@TJ{084nP~#C(J@q+dC%}a0U?)#nc(y&Ka`c2vstHkX{F<$1zq;bZ4T8 zXu)H=Q1cB(ZZ@2v5Jx;o4^-z8$0MvD@W;S+icQVUwYx^!r0Qah-dRlq@bOoZoVB9a zXW0&bMf}DLk74x}%|o?qIO%PXXJ9}J6HdJ$)1fzsUUwrWJ<;y9R^}N5%DnT@4L&RO z0Tw8^+g#>5D zidS%oBnYPCbzMHde+~a2^ck`qbkLF2A=-Ve05_rWrGC&sB-M} z%hy9YRR;syt=U}j_`VT4j@PG=W3STsO6Mw|>AUmSmy=ePdAfaf^#)bm*X2#rzy-{m)M;Ei`u24n4OnI#@hmIXZpC!uQk#r7;2 zspl$ArWi<@-*jE3K;>^`?|EYQW`HEKTJ{~FOg@~F`VQdUN-8B@W0w5d!o)-6oA>f^ zf%dAG1-z(ca=G~uQ$cBlF+<;PIR7Ph9hQh4Bn!>&cC!(-l_l?y5XyZ{hQ5R0Ca9tD%AsB^0{}zMudccX|rul9G{MeHQxR&)7 zoUplO!ZdZ~PuP*a?}X9tWI46R$^vL5K|5Yrhq3vYv-Pz%{J&nmdFvI5xq0vL!HH&lv27sU);c|tgro?(o06> zI@AR9j?g$u=$E}kE}cUKRnJY(F%CNFb16cO^a+vuwlVU`IC3 z!baXCo_c^O$KQa}Bm-YuO<0iFwZ?xs%#Nugy za>Z$HMVg`vj_xTU)c+)oNnuL}ZHe-ec2o-57VrEWhb&v5IzU-EGefyUOYAdVOW2re^RrnRj{Ygqoqt2jD*abHc)ZsD)6;VxSw;jq)utlbgG09j~|U? zC#*wtj7BGPTsRGi2O8PAI95p-)J0CHB3(=sw2d>>|T z3@YtPad$pXrAL1J#a9ZyXR49*??9?N&4<;d0g_Rkf;&iE#W)FheIGAa>tY8RxnGoL z6&7PC+;NX&5@^!jT}Ad7U5q0jnYy@NOX&my;|%JT7t(Ao^IGE3pJ;V=j5BD$=fc4L zn>F)fH1S-y8=9rzPH7gDohk_GbCN=txlX1Twj_v+h!8+p;f6*DK6VHHK9{uEq?jM5 z5#>}idP*?OSKas0r3$7!!-vZ6Bs|V5_HnDGXIuas33Xz=sDYt_QPrtz@ZT%C1RY%x zyY8SKHLa|t60U%{&oiydkG0?gbP~e^VpI^A!gTdKK-oPT+!i<2_9X0bLU!hhmty~z z%n$1DQhx}_vX8Kj8E!%%6KaVh5O9VGR+bbTZ55Cv0-A^ozZ24z%|cAmmM{&Gi-Kjg zE^HZ@seTm>QEe*EUEr?dCbnuvtg+BU;Md}o3s12AJjVJHz-sqr2y770!_TW%@2-B} zhnr<JzdC;Kw47}%a{-YIID_rF9-)slWO+Oz zZh^)fD_)TZyLm<^Ap(FXAZ%f#fK?|c!qUihdpj^Xu8SQk4qTtpf`IG89Sk*mbfCkG za0R7cL)<|;H*s_*_W*iXSNP6hUGF6A4Obta%CQZthPA+*V1e5JzggfyA?hoeX!)z- z34Z~6s5og5(V-5K-eZD>CCpdqUs<%P&3Zy^w+L11HW5H;Y)CSPc!avjoh-C@o~N(E zF}z?CTH2}{TbK`}!baxNtZ)^RR%7gtdyC#a=C`pfOknsm8yV#~V#PK${>uE24?g0W zm)LkIw864t)&Wy$fdS+e>sFuiOz)v>!I5yYf+>g#1`kkm$L=arc6PUCp)c`6iD=r5VY23Owyh?Q+uLWR1~I9 z1TRR0#Ch5h^-SYR_wZIZEd7W%7fgY!F|-*LRUYV(T*o9`QdeT`>(G(a7lB%7po@9A^>qN7&BhJf)DDa1Gsr1A=b9D2EGkD{IZb=?dmO-CD<@#$P{cl%?3%CScF<2d-3U7 zS#70Skv3fxdR{S$Cmw*mpbv>!P=V1kNLgii`ff|N9;s+x?k*t zO&fc4mD5w@uobT(PUgE8Pzu!|f-K!CR!nDWG)c?Eft0n(oM%Ng^x!QAp=l0+AAFN4 z<+oS-yY3#BCL!)sREN5e=jxRBr{0GbAx!@6bMOjLt|T&@|nQ+iQDWCQp3MUnmZ#lQJkUZfwQ2mL)Teo+Ep{Nl$B@gj|B zi}b*D#)Ddbu=m-^ttZDTJKkZm?3tT%X4~qRUO=;>7K2G6;LGG;O z5i9VBXL|Zt*k*nvgz}9rC2_cmwQQC5VlRMa7wUVjM9q2*>DTB{_f?3$X0}~VS_OP-3@ZIf1J z)d80QX4)T_MFW1c-JTX5i}XSLd8Ri)2=CX@3TBrWIV=vRZ(?zY?TsZs5()Ft-~3XH z&f@o7n(ybl?L(MqRz}HECzxB!kEN9HWM4!LA?Tq2-L>9uNr z4zB6aTCLhI3hY-uqRS=Zh_ZsJr4ROwMv?G>V`bk;Hh88}?2LcBc}QnA55Ck9PsLc8 zEO9vuh)}w3e5i5ouw#mcscGdy3r#hVe7(V#30} zqJQBb6zY@MJ(}>MqC&d!UCWA7Ev{3^YP0d2ak}J8t7N}R&W=lHLhB{`yvQc1to=Pa zhw(&YP6*E%+F6+pgRZdrC(xiQ3N$|pAH^^v(^p=JsWzZ_ z&YZ}gp&u>KJWH<=IzrlpJ&k zuxd&Uxdd3Hk^})p+T=N8TcrW_oKRYR${KJ%J8dQ-naz5d!2?N;b01_(M=xH&1hZ6VH>KB;VHV z6)Eb{7rcUk3TvN>9S3vXgetzT9S6C3h}*HJ%>FJ?0n&32MQQvy_cQ?9nMSF!MSR1! zE099HN$up`I6!6E>>Bl}vR4bF&}2Okpmy4#5m4Gj9ja|zz3;$Ll{Ng4!5_H_2+!Du*!Q56`PdXp`!BP5M|>gEOiRBk1jqdBqd>WbKBu zBXlI0J^0p^eP}}li35BrJr{S5R4Ps<(!wGwqSGfW9mcFPUQM6ld)zgYLvA>dA$DZD z=*-At0sgl?Rv#`U=TpW819ciWvok~~2=K2ZXU=892~Ob|OJlTCvWs}NfkIdhW!sEq zT~MaF?+*Yci?38vMOoAXEC;?@>d#z5JOOe-<~|ab5sChV=h``eiqnf<~N+!If> z;t#M#0ql`RL?2QuDHHz7s>Oabt9i;f1q%!v-`2?FOu!hx(hG-?a6tBg*TgNBA>!#Q zf91u4_bAYZ3`dFu972c)^G>gfbvX7anlxh*8B-g7bR7TZ6l9*mxVPXt|C%BP)Re_ssOKw#6 z>g(n|rwWbJX3{&f2SNQ7x{~ZCcW?bwUZLM8kG4J%l4DIoFh<>9r%QimE~<~0W0aJ* zt{+WIcDubG^DGAck7SsH*ks7bD`;lb!Jl1o!cr zfRRPS%HZfVeofH1PXi%LeW>|Zit##4IQNN+|Fz~_jVFsGjx+t9aw!oX$$s|6{Dm(pdV{sid9L926jyqu|S@;yQ zucILJh*!{aH&KnkZLKGxl(KSF-}>nl0x_#&Q19SZY_qSuX#!{*u!vbs{ISq%f{T*t z`Sn>={mozNFhf)>u*k)zF|Im7NW`QlvBoHd4PO?Smaht|5`vMmSy+HUM@CPXux%tI z4W6(}#%*I+G5~^EUleR_0E=*pGwF&0048Bhb_7y*n{JR0@S3Zr9s#@^wD= z>0(wcn1g}1ek*Q;TvTy_tEw>LQy-=%$70Y7vB0pt> zcN){=pw=IBuJdFc%_w!U! zC?n))&4T}s1N&3oapkc^zykOTS1jbo1iM(9V6}k>2+%(2*O&*biQ!)|4>~DQ@$_B5 zr5=niV))UOfW4^Mk=vqXD-wkr)rlD~r!8-TEc}hPL9{7vgBlcr<1g3+XE@(_NbghR zlzVT!4hLP+`{1Cd_n>C#J!lBG|9q!H>6dJRflrm3KD)d66^7d|@F#gl+#4FVr&K!> zgkeaA5UMDIWiKp=kHE_iL9FQevJU7FiiMAhO(ye*xMB%(EX{2$JIMrEm^Mg+O`8(X zwJAC45|FhiSu|J5a#=tq3{N?>hz@fM}WEYX8DN0HzOP}R?KJ1JN|54KB-ujVW2*D__6hr| ziIVr5!2;#Ayrz=u*1?z&DVSWx6FN~OIh^NHAnZi74XdLF#R`Z?#@ff=iL&>^Liy0% zfPgHEPn3CG;s$&sp&~E92<%1<(~x?vGh3Pd&;vH4H6$--Z53J+$IcWoR)VkRiF|-V zs*-UH)gu&ODKbh$ojTqa>Jsp+TTsnFP&eP1jRx%XQ>V)OSICwJJo*I zO3a5$FjOOg8CNrQ&Ms*fL5NK?asxE)Y78DLKvTc&R>7*}P}0j13axGNOtAkFwyrDsNvxhM*HCufhn+{kt{1a>pgwBk zpvQr}a;J#^IM=OSHlDMnyznYgh{HlLt@vU!sg;{_6(%j1jMfn9i`>fu`3Z!3B;0`jOR&v5b zKmqR(KH!Y!Nf1Thb9G_JtSDS^+>Uf&QH!(@@n$$Rjp#n4ko_l=BmQeqUY)VFjf&8e zgj)$UqA8JE2uy61gfj}|qkcz7cLGB|y*B23bgF7eAum@}+Z(Btqa@Amu6}?8op}*m zQ#9d+d2Uv@L=*n?r(4fN6Mm!p4A1)0_VXW)A41oI>3DXcbspp=%?HO-&U`L>20^$# zq8+s|kp`>aP$*w-FqLc=Q@;hx6BAO{6iC(Bk;>lS*7zxDYYe)_P?f!k4Nr(b$zo~} z)zvjsfDFYp)GEC}`t(JhAvN~C65Oj@P!@@NJ9bY+oY~m1Wx2*kT5rs&xwdmm1J>Mt zV|4yVvdOK~>-+Gr1n%sw3yH!T{B!C#ZV3=S9;>nK@mAqM7sdg-Cp^+nHh(9fhP_zp>03+|Q*?wog~|&*g-js{S=w) z-}E31{GltbLRp<0yDhRfNftwv?B|K=@Ck_CCQh0Eme^;8_bE?qEL7yl;j1;QGm{Y- z$Nr9~sQDkIb89;Gn$$7J=+QAb-hdZQwQLBP?#S>s>XJo<1o_kmXz}hRk5H0<2rPE2 z=q)NxJh&p<94kM4Yv%ZQ1iqH%Wqw=s3159O$qx}BG9)x~!!G;*D z0Ni1KDMkG<+@K)PEk(=1? zFa@Wt(71WCmZ?XYI%=63;U2-04%A}&$@Z}zhoZD%-@PdG^5%%9%j+YWE{`Lc)HTZH z-7WaeI_(#OC!HXisk(^?ha;VH&_}8K5l6s-0zr~-FQeBL%@e^zkt>ql%5rN{ewOl1 zb;=5Y*otyR6i+#iM6nZyk-OtCdIY1w@2(e=-5whgE@_U1r7glW*4u0=gRq`?MR6Ni zmNw6@eD9E|f8VC(<_xFxTD?gf0K7CIw4wVL8#n==aY~XT!zHI%CC6MsXjU_vqb?b{ zGCdr*Fjth?g4$V>b!50yJ{M^+BZ2BH<5>Z;M2hjWLLJ#a=QS}_5@)bd))-^-8fvFn zv{Tja((3~bYXVTG6~4!HHDo1s&v0Oq^9G$z5s@7HpUiFQP@Tay!@Eb`T_Af zl4CSFqJt4sC;2Jm7*zuR&iSLEBnGo1D;qa?4&x*CJJ-DJ$cCeh^-1poc-Y2sPI}kN z&g#rBH|%+0;amBG!`nNm9|F8&@TCGz=pCwOv+5_pgWD@c8}Uuua5s@v#ubf$mR5`h~Raf~m z`FyCNt?Hsqs+a;>A@$je!|1f<6Xa6 zC{V=QONR=a%e`3A1*he6aj%=%A)|PvkQw%J1t=Va7of1Vo@mKOr+8(%1}D4a;o>6DZ+By_7pjU5N3Yo2yFFj6Msx4vT@G-64(z+nIc5Ve#+S8~UIQ z19)if-XRj(Ges0`N851N>(`O&!WF}KVfDZLgDcu$WIjA%hqzkxY@BF(C-wXsYn8B}`0tBlGy}hRn^Pf|~+J&nIeVm4#}OK2k>4XblV=xwH0o zFyz|KJ>`1NM_WH%?2J7@>y<)zef4w}>P`s#_1lZLXjyjyzbK1JNJFX7_fkTLT^x-@ zE!Gt{x|4}rAI47goF8I&xxQM|iIZ5})@w@*e~GszO+uP@hc z@1QB(TN}09dUa|qbGrNxGF(QjU(7SH>iQpCrnhH~WUbvS@23BCShMAr8d_1T-%Utw zb08UeZ@Y>ytd9RYHLoMTEHl^qTAz7V{p9EQRoQ11N6(P+>MMGGqu$TP?~}VkwZX^e z%cJ_{ob%AI-F2rAw!6)XlN{AnkO8-&b7J!9%t!fd_MDzH{rrk*RbqKiCa?aaeror+ z?!^U9Zu|3(JowGee)$W3l36#6o<940J^gySrvc^w^14pZ%X?X`*M&>w$)>C>cgMh} zyDaGcOEvV9_2jt-cFj= zcTgRtQ!D&Febd`hcHT}ZU{$46@TWU^d+;NjQE%{*)E>R6|MJU^YNG?|+8%YG6CL{I z5g9R+XS-WHUO&Jt2mf=2gqdB{)GtwsSzz8x0T(u?V|`fUk(lqnM|EJETa*^#;y(Q^ z_EaBQoWv$iU(4=0NVo1CIhf4Uccl?5s%v&L*lq&C2+dgQY$b)``yMIMssX3`d3QHw z-2P-omN)?>t7i7-5suTXo}|nE!yx#qzXu@*gQ||HTz@DZ*+C*W>6gR$MSt`QAmd+g zw|+sDNl-0W_;I4j+ZiD9AUM){ZhnlckPJCp9_naf4@OPuH($MD{7HPvy9`Fv6~tkw z$NE5r9%Y8T1KXvgKf0!#yJtJa&U1PrGRDIAV~ku_gH=Q9#r+dl)lGt{#@+l0a#xmY zf$mlxd=CvzdwLx{@5Z8K5I>!6K$yNZ@dzr;IKq|{h2c}mBAuqHho1#-`ok;L2SI_( z`~DRb;}!^91f|?X1FSuI0Sq7v0GN9`NdY}qwwuo2BOT2=-8MP>NT+&#^#P;l79j#8 zUUu%@g3T4&X2HZK6MC`r14-d51SecM_3?vv1(yHhYIH(K}Z(NrfOWT8gedSCfurhhrl7%xh- zNAB^%F_jrhYJt)d<+ETVT6=docGBK;OnU}~RGsyAu)-cg)`bp(JwZG57j;=#3q}(aLj~Dk1n}JH-6L4<-88@_VxHQTzYcX^v`#r- zJN&=~eX*lMUs%bit<^JJA|S3)ZTdciFSPaqxS?`#2WgEkXL2HCFE2V>>On|Zsdh~S zO^7dbx!@`z3#@p+K)G?14@$jzJ3@mkH0oVnq_1=1=~sWKojjZ98@qz|sOi*mb*JiH zK7DS%>AGMHkT^k8i%_NtGxc2tfU6s<3@k7~96}bjghz!MFHp35cAz{MjF}_tV;dawXh+K9QA>wJHA3~E( z$1_&L#J25v=1^ccw%4=7>}!^IVwQxTMNDT58RUV+F@|e}{tAt`=Bd%MWOE0fgiby4 z(u7ZR#n4ApfUQXO=evci4$RSg3?a$`+u}Y@&i6X&s}P2fcd#D83xFCNxB#fZ%p5oa zp&(FbApG4ugF9eT*W7zPY>+^UX~cSM=09aZhpA2B(F$fZRUJJXvSUi@nv~ep;a^q( ziSL-4YK4cvFTpAv$n!>pOwi1sPg7?NO(BWU5}yRTDL~161Il!7P^No>GTj@LaX&o- zvl6#9H=F+3E;?**ryjBra=`#?Ss=2@H355+C!b;xuhOW;5GxA@b`cGcW2~(EE^NoY zVAiSL(qK_N0C7rpaec9xlnyD}7^3dz9}n!4($}amV)Sr4Wt!CIECTs~w3+%vpFQJ( zvak0LjG5vgP*Dq3up=6EOEC{D7F5F#e?V820$%)n@S|u{(LFAFATdaCcsWfG13%_p zC*yQNKyYjJZuQ?Uk;BJ>3XKW5LN#xLSr-_Dsft+{d1H2o20O!7Ru+#j-*D%B$7=3e zcbmnG=;6s<=XY|4BFL*Fx_?S8U1}$Xr}>w=3;^&dHTq1`sPY@3 z&;7Vzwh7n(QO=Qp4XG9Zgm%2lvMyltlaX3D9_!|l55)Ydnfc0HcxmVAqrk%JD@S7W%nIm1sM;VHVP)sEQ&$TXqP{dQ}$qKZ!8)#|7f|I ze`%z2p#Qe}v9N-UMo5Nl9SR}BP^gBk^(B|#-`@$uVEt|+%{)*xPUx^?Hb3yOm^$~Q zIjy1g$nVw&kjiNqL8lt4{C#)d4|-2%W~JoQr^#VKAe1pBqCjx|N{1uj!VsVK%EI83|!>bILT^`G47a_b9us>dy1` zxUagm9=G&zVF~=Z7lBJbisZzx6x*xOuNLxSAVH)_4>K!k#N^n2{6Wrj0`F!_2=XYq zXJ|W;mx!N;fsGidY%olb!f1)P`n6m2-pRL5J{`Z^Vx`)=C}#WP^ka?{aZpLU1HI;Y z8I`rm8tMacG`1sQ&J@R5wuHUxkS2y#NY(u?FjeEsF=!~ZDpi}lqttL$A{T*oP6Y*N zVUsJVma%IV0I#0waB3n?O48IOvRif}Sj*uVNomR4t7m!jj1;t}4|)d5hH|R8wAwgb zB0MACEFKkbo06FNH}xBv)gL-mWF1C{d~_C!7039Ac1IG>J5tQB?o*7i?gQ*~i>^LP z{!aOv9MmSPoYDcooIC`ATt_Yg2OggpDDf3TupoOPW$gkmE`gzX1`N%y|4#{qDO_L} zh63JC2yU;|uGW-m#seiKWySll-YCu6C~dHuOlJLU8F!GFkUFDS0y$kHpBt95;vy>wOZ(Ey z0obfJa;?jqJq1~=UHwrKYXGaP)^x&$ul+=HkmSR@3XAw_#NmVK8orcmoKgV>EQ=Wd zNa`3_VK+GpKYImr7ay}5UD*33j0W0$pj}w_j9AP zj9DSujG1=-2#aTEA92pLlm@|zDN^l(diUC*esk?mQRmcNhWK0xF z%`IU#Hqli}GYi<-i-Z->0;tJb^MjeBb)T>>9SIRM7o1DfE9^jZ>6ly;WQr#22GcaE zRZ%uY)OmdQgQw#I0B^XdzAnMOR}5j^BSWPv1F;Y#V072qRRn)JL0Uw5?t0L>@~n0! zeTysNN)JyXD4d#WxH!;5OKG{|PghcNAbiah3PYD;tn?b?mb(BvxGYs*p_JRn)S@Yr z_gZQZN}b-+{p))C8qREAu!`8{3#yWA*F3-(?1Q<|tbM&`b|<~f!B==*{_7))$#i0g z`7I&JbAx;PDAcAtgbL00*1PP&3d>)6CXuaeuR$>BdFG_DMDexmGq%j)Hy~Z!{bDBK zz>CrqS53?U5aGym!XFptrVlF}b+(~T09-;j0y*p{YNM7&k-JhP_`+1w!!`UjMqxmq za9-lvM%ZQMQNe2~Lh}OEc%Edbkxek%{5g!;FoADin#}_`Gz0?7xkuWf$Put5Z+sdK z^)7J&C8AKhx!C`Fg$jib7G^Wk>OUN@hJKNC%1_Ilcv*S>sY>+(9`us0=&WK8g6`7+ zt+Jizmov1@BExV=C6Z~GeaQ422?jz)l$TFsvpZ8M+xT$x!KU0jJ>bbhgFFN!rnMg#cntrinZA*g7Tk-O7h>x|!FPas$UkM-9Sm*Uis`Qb8 zBCac&X*+1-H~xS|nq5z*w;y}JT6?VycHl}91hw}1CwuN1JcG)z($MHjEROA zf-&*}-af!0ILC4<`mC_10Tu}l^noXy7Amcw;($sk)SHAHkNYbJ&B|kTcjnfWA+p86 z>Uf}3JC1K5Ng{C)1}Xd4JwVmekh*S5NLl}U>FkdLp=L#A*iO%b&ID!PEWRv$P|LG4 zG0VO}>u(6HM=G?IUP*&%MQdaHk(dK5t&G-}fr?e%zN@~C$G&;mlvVN6H&IpJ{_FSi zZ99Hzl(y=p%(M}eP<#!e|9@09X>eWaEgSvXTMDd2T*)Uv(?pn@D;5!$mK5faJ=dPF z0js)C9h|tlvHPyFOV0d7$G&fDBi*=UXED}>I{P2g*^0038(V*|Ds&*=8d_i*=US=e zA`NzL*DD`M>4OsYfeI$3%N;GJjD!qR2Ybj#g zXN)!^{9i8f)~^Y^oCH2JgYzQOvCBg@)o|%SUNE}YcO40GX+*OVLMkZBni%L7p5bj( zT=mmMR((zD#xYo=Su0Xp1koN=&jzX$2I=!awAIn<{Y&OaD01l;C_io=T`&=r>39_! zvSfLe1f6ZzttRJ;n#nH@hg8G!9l_ez^-y2Mu0Lm;1tuG2yToruiLnxw95W}057EsR zR89Tz#;h8CFk>F-tH%7~3S-tf>LtglO;H2U^Z}uIYsr{bQ^uUeri|r>A>&BnX|w{Q z3_AktnJqtRG{l^&WCYkOuce(qeIJkYv3wWj7{*y%sum8ZUA>SeLzqJQoW>7`opB>} zhHj?DHu}3ug40;Qaz3+Ym0^P?~{tIb1G}EIiEpuBfL>6dUgWN)0 zoQ3?n_XBvXv>6L`@mDgO1J)b!-}shl;aVd9og6oo#t1hE>b^bK2Br|($UTM?-q^(V z?Nuw5d~P7C0R%;(du)ih`5>z<M> za^13T+n42$zW~N&3lTctPqfnEN4eK^8Ixj+fQ zt(aw2kBr>9PK(j4D%z18P31I#E!E4X^t`;^c4!K5Xl5Hta*%@Bpy@N|C~`42#|X<4 zYOW{2X!Tq5YprH&1NuX?KuGl}1418MTgTbMHQez(`aV0ZYSz~A^J<~JddFG4UlYW& z!)ypMzN2b?^ztFDYSz~A2hY-iywfY9(3+=ssNX`&-&3uMwl@CCZ**ijVhY381P-L! zFgO-f?dHn|hpJf{IG+7HE!Y8UVi|PY0-Pd6tr;9c{T4VDzCf+49<2rrv5>V8l0vzL zu;X(A$EM2%hed=j6PIQ%f1?)0>G+D+AwTBYI&P6>YZ;+&#uZo=4#5>!8QRW@&rw}g ze2&hu(sPUE6Na2o@K;@Xvsj9-v4I8^dwd*0{YDjAuwv}T^qrZ;piR)mqWK$1+bifi z%=EwSQJ{DQHynh3`k@LQPW!n|VNnrzKkDJYkbYaL09~|aC;bcsn6dNc{8ZZS>}G)q zY-Xc6=OwvX!Rijt%~XFTE*Ma{w~E&8IWj$_6{$R1G!Ejc*I~u z6=W~n<-ICYbWc=w>(ctHAGR{BeeCtpyKJrLTzAFyF>3x|qx`#6YLc2irXy$!(nvNS z%=(y@GvM5p644xGlj(VrHEA;bp+z8Yc^}(o2jJtlhrvuqUfLcyzA1l{W1A?)mCp5@ z*CznJT^Sk3@SZrqQktUcL9zwd?=j|xYx_GgO*t( z*P0=n+bj4Qa-O!)KUAGP!F=13!TA*Ra*;)6H5j{1BWmUt=%!AU*H%NIGlMZa%{z_3 zB=%_=!xZV)6wsa}N9fu?jZM!q zhtmMj)X91{iA_i2*)WA+7b&GxZh#?W+3Od{F+$P8Wmw7&ch_F4uifN!()}?Jotor(g4!=(t-T0S^hM~;KRG*Qa zKw;kg4a>u#Fw1Yl;D_u8Th4S0^5`V9D2xVIt_e;h9seXvD7=4BzXab4VYONdVkG4! z#920aKfA|8u!e%xD?>q};WeTl)vShqY-SHM#PrBqie$6|1&@9}WOPv!OuKu8*?S4n z0m)g(R1giPb~`qT!h{VLMKTg_3dZqn8^(EUo$YLZ2AL%WADqhFzs@`7*e4pI5!@03 zgH;LyW)CUbJtAi7X>FWH1#nuELm5vx-I~=@ghxzosNVV@Mrs9{Jl(jUbK|3py!x+c049WIq)2A8 zQHtO#&d|Y2_5FCviHshS0ZO}*fAY~ zMrAvbC%98jb|j!X$A#GX)Vb7$`&5e9r^>S_+<=cBhmBfQ_MO6F?Hj@#RHjdk`kOrX z`|0oj71`1=71>EA3k2LstH{dvOlK}xCMaM8I7pOBB3vCUIbs1Y0PBWCoU|Kg>%ast$QZKKv@M|x$B72XS|rj&*daLrNOQJ*5WImJ z@s$!m@(sL9rK_4Z9d6=;{se`VXqtc7OTN696rW|zn#4!qeM z>R=h$kjNcn=ZETfqhOdSe37{MP}))aKs@=zyTQZI4Pjm_oPGl?7&4tTBW6jG-@>!@qD@oHS^w;_l$m5F zA@nUW<6Kn^D7YadFXcqJ?j~)N&dQHKXFB$Zvay&c$*gjy4M5-kAQJD>=?&>g>R0x+ zQ?4+thfP59J9&NsEsWAwF%j!2nl~iBkrnH}M%WNwaY7T^UB*lb*%oX{_GcfX>2 zsrg~lY~slU)Ft0O4Oh=8s$@Pf6%Y2*f=(i2pON*ey)Io~r>>;R36r|cufEM=&1vn7p zn4W=L@3LP*u3y$Gai=sKfdm(_6P|?ICk#_y-y&$U&s8NPD~diY9f<+jbLnAD)Y0oN zng&SbP=ExLv0FQW414L;yv}W>wsJgRHp1>#xewy(-FoHS`XeqSuDx55BZn{6t@*We z3nCC_08xXoczB@*r`<$^ z2P2a7~tbudQKy(GYr$n zt^ti)b0LikHSNPT8W~JQ0V+W#FMr1jc{^e2+wy7sDf*jurZYrVrWGm}?pYsF`{&Tk z#$ppx^V95(S&eK6a2ZB|^4upDv4*;Tyae&k1D`)VDBJmxrk++)`Ld=Yxt=%aDR26c zroO&XQ$Y70psDe&JSTPJL0KIa<=HIRT=YFl8oYNpBmJu#xm`V&&u&OtT7RydAedX) zL9Ed6wEJ?Yg7BSf@F$&9P!)qy*-$-km3F*YDLJr~m#SP0+P+EDI*NmBmmxuG+D|2< zq{f^V6NM$5K>s2)weEO&R=?bvTH~$;W5_6B<~Lx!phU81Wm!jDLR|6L@HPIhVfp+X zZl__BY7|jqcPD&{PYU-c(()lZe_X8mk%j-uu&WdacAl8whc-uEH5L!9OGW{ayi-zi z$bn!hw#K{VY@l@+aCSh3tP*Wr=%v;b^3u_8jXuapV7o!B{6YqR{E)e-wcJ~yQCb^r zgSLlzr;flKL7=RBD3dGY9(hfC5j)+QWT?S|e@Y#bjCUK=f96P0qJ!WS5UUJs0h@2C zhaGDJQhdt%>ax$SBvfz>D87;6A&p{A`cBZ7lD7MYjzTVGJ;8Swo!nS2NuYv>*)R57oEUX6~q z_spkdqU=bWcPQ7pzop$r;DP4Oww^IuwqtA6sn@Os0NCq*-Fpt?ZGzcMPEH`w)>ucI z+|};t<24`zKx-}XYy%h_j0g&Iw=IEFAD0R;Eq(^$(?QnE&@lX9`@pZj3L1Si9wfCv zxol3UTqfD;h#{k9NG3^+mb>~n)-n}PR{@V>)Rsb|R{mQas2ytSPwfWmbkDk3E5D6l zWRF0HZFFsS@(y*65SL z{q3rC(UB;D=J39bWZDoag6i9Dvk`B~a`!0pn4#E+H#M@XDPlZAQ_dMyZVtK%bAS#% zqQ>TYBJN@1`9E}Pf~O&h>;u(5%BNW;O8;0l5#v z>U~T7STSk+CW%_@A9g|vXNBDI>Sjd&yE-U}Im zO-7CMZMoJd>Nuywaz>q&N$l^Y}3A&wDQ&!~+|Yz|eRtqw>qjuq%1?3Q0o4tw5QLBs6yw2lOs z2P4exqTwDVbZNu6=E|O#t&cdpA$o{M=g!15!41`8WS_7Bx885Bw6XO@o-q>aNT4} zgGpGGDrDprTf;(!pEaWBq6(@c@=k4t)m)-#B)1`yaVJubA)fV-1X?v9+QerRAluL+ zQf$l=7fNZynNK)2b162_C>*!dr#R6QvZMrpZ1&Y-6S0f9>hlBrCgT@SRF=c4Jo5m; zToT6+fV>Ef0KPhCc-Driq69WgKV%8wR%&e{4N%qIQjE;W4M>GWV^-(0_UiDEIw?ZE zRw5M(z!iwl-(M|SW!mv8`jeKA>VGS=M` ztiLb30_^Js6E}u7Vz6ItxDhdYz2Qy8me*5yUYO0G zq82uT>r538ivV?@OyyHjVO;uyxfB&$Fqf~k6P=ApTq&|LbelFjAh z96c87RORxy6qv(Y#){)y>Q$J_!7HCjy$W+#z0zFrd`TY_jKf@-t}vKOF%`)wFsx!W zF3$$4mSi4l4a1DanN3j`laGOL1Y`m`<@|(mo zX}a50RY^i|KjjP9HIT2a61qP5f=U4^&@J=ZC@FOl{nq)sxTf3}urSpoBP)DD>G`y> zov;d;+`u0;_ggYW!F(Xe#6=m1&7(AkIx0`B20sZF0l$U>ys?EuJvK(~bZ+xQ{Epbp z6*nV8U2!&MQj78CH;6a4oDL-L`&k%c%P7SZ zcOSGVm|!L$Rn{9uNpK8J$#^lY=SV15Nuto%IJm`Kj0>z?B$elH~LI8BiXFfuxxpMzFq|M& zQ7%db!TMyxu(T6{j2M`!pdMer?XAE?6JwwVDi=fs5!q)*QI;?*uLU222s$N?GE!

hy9fZp6S&}Z0WDxVD#KrSzFaw$1v6Gsqd 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 z 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 github.com/regen-network/protobuf v1.3.3-alpha.regen.1 // For this nested module, you always want to replace the parent reference with the current worktree. github.com/osmosis-labs/fee-abstraction/v7 => ../../ - github.com/strangelove-ventures/interchaintest/v7 => github.com/notional-labs/interchaintest/v7 v7.0.0-20230803100453-9e61f78e0e8c + github.com/strangelove-ventures/interchaintest/v7 => github.com/notional-labs/interchaintest/v7 v7.0.0-20230824065823-c2068fe54573 github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 ) diff --git a/tests/interchaintest/go.sum b/tests/interchaintest/go.sum index 56f59026..8d8c770b 100644 --- a/tests/interchaintest/go.sum +++ b/tests/interchaintest/go.sum @@ -207,7 +207,6 @@ filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5E github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= @@ -231,22 +230,18 @@ github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/StirlingMarketingGroup/go-namecase v1.0.0 h1:2CzaNtCzc4iNHirR+5ru9OzGg8rQp860gqLBFqRI02Y= github.com/StirlingMarketingGroup/go-namecase v1.0.0/go.mod h1:ZsoSKcafcAzuBx+sndbxHu/RjDcDTrEdT4UvhniHfio= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= -github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/alecthomas/participle/v2 v2.0.0-alpha7 h1:cK4vjj0VSgb3lN1nuKA5F7dw+1s1pWBe5bx7nNCnN+c= -github.com/alecthomas/participle/v2 v2.0.0-alpha7/go.mod h1:NumScqsC42o9x+dGj8/YqsIfhrIQjFEOFovxotbBirA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -284,13 +279,9 @@ github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsy github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= -github.com/btcsuite/btcd/btcutil v1.1.2/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= -github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -329,9 +320,7 @@ github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= -github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/apd/v3 v3.1.0 h1:MK3Ow7LH0W8zkd5GMKA1PvS9qG3bWFI95WaVNfyZJ/w= -github.com/cockroachdb/apd/v3 v3.1.0/go.mod h1:6qgPBMXjATAdD/VefbRP9NoSLKjbB4LCoA7gN4LpHs4= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= @@ -343,7 +332,6 @@ github.com/cometbft/cometbft-db v0.8.0/go.mod h1:6ASCP4pfhmrCBpfk01/9E1SI29nD3Hf github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= -github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -384,9 +372,7 @@ github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcX github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cucumber/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= -github.com/cucumber/common/gherkin/go/v22 v22.0.0/go.mod h1:3mJT10B2GGn3MvVPd3FwR7m2u4tLhSRhWUqJU4KN4Fg= github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= -github.com/cucumber/common/messages/go/v17 v17.1.1/go.mod h1:bpGxb57tDE385Rb2EohgUadLkAbhoC4IyCFi89u/JQI= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -451,11 +437,9 @@ github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= -github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= -github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= @@ -483,7 +467,6 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= -github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= @@ -511,7 +494,6 @@ github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+ github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= -github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= @@ -582,14 +564,12 @@ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= -github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= -github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -609,7 +589,6 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ= -github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= @@ -721,7 +700,6 @@ github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod github.com/ipfs/go-cid v0.2.0 h1:01JTiihFq9en9Vz0lc0VDWvZe/uBonGpzo4THP0vcQ0= github.com/ipfs/go-cid v0.2.0/go.mod h1:P+HXFDF4CVhaVayiEb4wkAy7zBHxBwsJyt0Y5U6MLro= github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= -github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -737,7 +715,6 @@ github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= @@ -765,7 +742,6 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -807,7 +783,6 @@ github.com/mattn/go-pointer v0.0.1/go.mod h1:2zXcozF6qYGgmsG+SeTZz3oAbFLdD3OWqnU github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= -github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= @@ -835,16 +810,13 @@ github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae h1:O4SWKdcHVCvYqyDV+9CJA1fcDN2L11Bule0iFy3YlAI= -github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= -github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= @@ -875,8 +847,8 @@ github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxzi github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/notional-labs/interchaintest/v7 v7.0.0-20230803100453-9e61f78e0e8c h1:Hb2ZrD6g5SR/xG8bHvEO43D579sm+BA1LPDi71SDHMs= -github.com/notional-labs/interchaintest/v7 v7.0.0-20230803100453-9e61f78e0e8c/go.mod h1:tx6Ou/S8XjDMqTLM9vVCuoTU3VMVAQZTBH0Bwk70lQo= +github.com/notional-labs/interchaintest/v7 v7.0.0-20230824065823-c2068fe54573 h1:c1F0nmIOFvn6m1SbBW3VG4PRz8ir3197j25tZ69Ms6w= +github.com/notional-labs/interchaintest/v7 v7.0.0-20230824065823-c2068fe54573/go.mod h1:SNOsTMsNsAzyeRgKS+kKwKCpg8R08WW0wSOiR32rb+E= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= @@ -896,14 +868,12 @@ github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= -github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= -github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -913,7 +883,6 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= -github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= @@ -980,7 +949,6 @@ github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqn github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= -github.com/regen-network/gocuke v0.6.2/go.mod h1:zYaqIHZobHyd0xOrHGPQjbhGJsuZ1oElx150u2o1xuk= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= @@ -992,7 +960,6 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= @@ -1008,14 +975,12 @@ github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71e github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= @@ -1076,9 +1041,7 @@ github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoM github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw= -github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o= -github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/tyler-smith/go-bip32 v1.0.0 h1:sDR9juArbUgX+bO/iblgZnMPeWY1KZMUC2AFUJdv5KE= @@ -1090,7 +1053,6 @@ github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVM github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= -github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= @@ -1130,7 +1092,6 @@ go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= -go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= @@ -1774,7 +1735,6 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY= -gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1794,9 +1754,7 @@ modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0= modernc.org/ccgo/v3 v3.16.13 h1:Mkgdzl46i5F/CNR/Kj80Ri59hC8TKAhZrYSaqvkwzUw= modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk= -modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM= -modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= modernc.org/libc v1.22.5 h1:91BNch/e5B0uPbJFgqbxXuOnxBQjlS//icfQEGmvyjE= modernc.org/libc v1.22.5/go.mod h1:jj+Z7dTNX8fBScMVNRAYZ/jF91K8fdT2hYMThc3YjBY= modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= @@ -1810,11 +1768,9 @@ modernc.org/sqlite v1.24.0/go.mod h1:OrDj17Mggn6MhE+iPbBNf7RGKODDE9NFT0f3EwDzJqk modernc.org/strutil v1.1.3 h1:fNMm+oJklMGYfU9Ylcywl0CO5O6nTfaowNsh2wpPjzY= modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= modernc.org/tcl v1.15.2 h1:C4ybAYCGJw968e+Me18oW55kD/FexcHbqH2xak1ROSY= -modernc.org/tcl v1.15.2/go.mod h1:3+k/ZaEbKrC8ePv8zJWPtBSW0V7Gg9g8rkmhI1Kfs3c= modernc.org/token v1.0.1 h1:A3qvTqOwexpfZZeyI0FeGPDlSWX5pjZu9hF4lU+EKWg= modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= modernc.org/z v1.7.3 h1:zDJf6iHjrnB+WRD88stbXokugjyc0/pB91ri1gO6LZY= -modernc.org/z v1.7.3/go.mod h1:Ipv4tsdxZRbQyLq9Q1M6gdbkxYzdlrciF2Hi/lS7nWE= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= diff --git a/tests/interchaintest/ibc_transfer_test.go b/tests/interchaintest/ibc_transfer_test.go index b4dba2a7..8f2fe8c2 100644 --- a/tests/interchaintest/ibc_transfer_test.go +++ b/tests/interchaintest/ibc_transfer_test.go @@ -5,6 +5,7 @@ import ( "fmt" "testing" + "cosmossdk.io/math" sdktypes "github.com/cosmos/cosmos-sdk/types" transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" @@ -115,14 +116,14 @@ func TestFeeabsGaiaIBCTransfer(t *testing.T) { // Get original account balances feeabsOrigBal, err := feeabs.GetBalance(ctx, feeabsUserAddr, feeabs.Config().Denom) require.NoError(t, err) - require.Equal(t, genesisWalletAmount, feeabsOrigBal) + require.Equal(t, math.NewInt(genesisWalletAmount), feeabsOrigBal) gaiaOrigBal, err := gaia.GetBalance(ctx, gaiaUserAddr, gaia.Config().Denom) require.NoError(t, err) - require.Equal(t, genesisWalletAmount, gaiaOrigBal) + require.Equal(t, math.NewInt(genesisWalletAmount), gaiaOrigBal) // Compose an IBC transfer and send from feeabs -> Gaia - const transferAmount = int64(1_000) + transferAmount := math.NewInt(1_000) transfer := ibc.WalletAmount{ Address: gaiaUserAddr, Denom: feeabs.Config().Denom, @@ -149,7 +150,7 @@ func TestFeeabsGaiaIBCTransfer(t *testing.T) { // Assert that the funds are no longer present in user acc on feeabs and are in the user acc on Gaia feeabsUpdateBal, err := feeabs.GetBalance(ctx, feeabsUserAddr, feeabs.Config().Denom) require.NoError(t, err) - require.Equal(t, feeabsOrigBal-transferAmount, feeabsUpdateBal) + require.Equal(t, feeabsOrigBal.Sub(transferAmount), feeabsUpdateBal) gaiaUpdateBal, err := gaia.GetBalance(ctx, gaiaUserAddr, feeabsIBCDenom) require.NoError(t, err) @@ -179,5 +180,5 @@ func TestFeeabsGaiaIBCTransfer(t *testing.T) { gaiaUpdateBal, err = gaia.GetBalance(ctx, gaiaUserAddr, feeabsIBCDenom) require.NoError(t, err) - require.Equal(t, int64(0), gaiaUpdateBal) + require.Equal(t, math.ZeroInt(), gaiaUpdateBal) } diff --git a/tests/interchaintest/packet_foward_test.go b/tests/interchaintest/packet_foward_test.go index 87601459..e40f8059 100644 --- a/tests/interchaintest/packet_foward_test.go +++ b/tests/interchaintest/packet_foward_test.go @@ -9,6 +9,7 @@ import ( "testing" "time" + "cosmossdk.io/math" sdktypes "github.com/cosmos/cosmos-sdk/types" paramsutils "github.com/cosmos/cosmos-sdk/x/params/client/utils" @@ -62,7 +63,7 @@ func TestPacketForwardMiddleware(t *testing.T) { }, { Name: "gaia", - Version: "v9.0.2", + Version: "v12.0.0-rc0", ChainConfig: ibc.ChainConfig{ GasPrices: "0.0uatom", }, @@ -71,7 +72,7 @@ func TestPacketForwardMiddleware(t *testing.T) { }, { Name: "osmosis", - Version: "v15.0.0", + Version: "v17.0.0", ChainConfig: ibc.ChainConfig{ GasPrices: "0.005uosmo", EncodingConfig: osmosisEncoding(), @@ -304,7 +305,7 @@ func TestPacketForwardMiddleware(t *testing.T) { _ = gaiaUser _ = osmosisUser - const amountToSend = int64(1_000_000_000) + amountToSend := math.NewInt(1_000_000_000) t.Run("xcs", func(t *testing.T) { // Send Gaia uatom to Osmosis @@ -413,7 +414,7 @@ func TestPacketForwardMiddleware(t *testing.T) { poolID, err := cosmos.OsmosisCreatePool(osmosis, ctx, osmosisUser.KeyName(), cosmos.OsmosisPoolParams{ Weights: fmt.Sprintf("5%s,5%s", stakeOnOsmosis, uatomOnOsmosis), - InitialDeposit: fmt.Sprintf("1000000000%s,1000000000%s", stakeOnOsmosis, uatomOnOsmosis), + InitialDeposit: fmt.Sprintf("95000000%s,950000000%s", stakeOnOsmosis, uatomOnOsmosis), SwapFee: "0.01", ExitFee: "0", FutureGovernor: "", @@ -421,6 +422,31 @@ func TestPacketForwardMiddleware(t *testing.T) { require.NoError(t, err) require.Equal(t, poolID, "1") + // Setup propose_pfm + // propose_pfm for feeabs + _, err = cosmos.OsmosisSetupProposePFM(osmosis, ctx, osmosisUser.KeyName(), registryContractAddress, `{"propose_pfm":{"chain": "feeabs"}}`, stakeOnOsmosis) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, 15, feeabs, gaia, osmosis) + require.NoError(t, err) + queryMsg := QuerySmartMsg{ + Packet: HasPacketForwarding{ + ChainID: "feeabs", + }, + } + res := QuerySmartMsgResponse{} + osmosis.QueryContract(ctx, registryContractAddress, queryMsg, res) + // propose_pfm for gaia + _, err = cosmos.OsmosisSetupProposePFM(osmosis, ctx, osmosisUser.KeyName(), registryContractAddress, `{"propose_pfm":{"chain": "gaia"}}`, uatomOnOsmosis) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, 15, feeabs, gaia, osmosis) + require.NoError(t, err) + queryMsg = QuerySmartMsg{ + Packet: HasPacketForwarding{ + ChainID: "gaia", + }, + } + res = QuerySmartMsgResponse{} + osmosis.QueryContract(ctx, registryContractAddress, queryMsg, res) // store swaprouter swapRouterContractID, err := osmosis.StoreContract(ctx, osmosisUser.KeyName(), "./bytecode/swaprouter.wasm") require.NoError(t, err) @@ -456,7 +482,7 @@ func TestPacketForwardMiddleware(t *testing.T) { transfer = ibc.WalletAmount{ Address: dstAddress, Denom: gaia.Config().Denom, - Amount: 1_000_000, + Amount: math.NewInt(1_000_000), } tx, err = gaia.SendIBCTransfer(ctx, channGaiaFeeabs.ChannelID, gaiaUser.KeyName(), transfer, ibc.TransferOptions{}) @@ -511,7 +537,7 @@ func TestPacketForwardMiddleware(t *testing.T) { require.NoError(t, err) _, err = testutil.PollForAck(ctx, feeabs, feeabsHeight, feeabsHeight+25, transferTx.Packet) require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, 25, feeabs, gaia, osmosis) + err = testutil.WaitForBlocks(ctx, 50, feeabs, gaia, osmosis) require.NoError(t, err) feeabsModule, err = QueryFeeabsModuleAccountBalances(feeabs, ctx) @@ -520,7 +546,7 @@ func TestPacketForwardMiddleware(t *testing.T) { balance, err := feeabs.GetBalance(ctx, feeabsModule.Address, feeabs.Config().Denom) require.NoError(t, err) - require.Greater(t, balance, int64(1)) + require.True(t, balance.GT(math.NewInt(1))) }) } diff --git a/tests/interchaintest/setup.go b/tests/interchaintest/setup.go index 08516c2d..5532a068 100644 --- a/tests/interchaintest/setup.go +++ b/tests/interchaintest/setup.go @@ -27,6 +27,18 @@ type QueryHostChainConfigRespone struct { HostChainConfig cosmos.HostChainFeeAbsConfig `protobuf:"bytes,1,opt,name=host_chain_config,json=hostChainConfig,proto3" json:"host_chain_config" yaml:"host_chain_config"` } +type HasPacketForwarding struct { + ChainID string `json:"chain"` +} + +type QuerySmartMsg struct { + Packet HasPacketForwarding `json:"has_packet_forwarding"` +} + +type QuerySmartMsgResponse struct { + Response bool `json:"data"` +} + const ( votingPeriod = "10s" maxDepositPeriod = "10s" diff --git a/x/feeabs/client/cli/tx.go b/x/feeabs/client/cli/tx.go index 6e522de8..5805e1bd 100644 --- a/x/feeabs/client/cli/tx.go +++ b/x/feeabs/client/cli/tx.go @@ -22,11 +22,53 @@ func NewTxCmd() *cobra.Command { RunE: client.ValidateCmd, } + txCmd.AddCommand(NewQueryOsmosisTWAPCmd()) + txCmd.AddCommand(NewSwapOverChainCmd()) txCmd.AddCommand(NewFundFeeAbsModuleAccount()) return txCmd } +func NewQueryOsmosisTWAPCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "query-osmosis-twap", + Args: cobra.ExactArgs(0), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + if err != nil { + return err + } + + msg := types.NewMsgSendQueryIbcDenomTWAP(clientCtx.GetFromAddress()) + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +func NewSwapOverChainCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "swap [ibc-denom]", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + msg := types.NewMsgSwapCrossChain(clientCtx.GetFromAddress(), args[0]) + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + func NewFundFeeAbsModuleAccount() *cobra.Command { cmd := &cobra.Command{ Use: "fund [amount]", diff --git a/x/feeabs/keeper/msgserver.go b/x/feeabs/keeper/msgserver.go index 14380c1e..c4f5ec7d 100644 --- a/x/feeabs/keeper/msgserver.go +++ b/x/feeabs/keeper/msgserver.go @@ -22,6 +22,40 @@ func NewMsgServerImpl(keeper Keeper) types.MsgServer { var _ types.MsgServer = msgServer{} +func (k Keeper) SendQueryIbcDenomTWAP(goCtx context.Context, msg *types.MsgSendQueryIbcDenomTWAP) (*types.MsgSendQueryIbcDenomTWAPResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + _, err := sdk.AccAddressFromBech32(msg.FromAddress) + if err != nil { + return nil, err + } + err = k.handleOsmosisIbcQuery(ctx) + if err != nil { + return nil, err + } + + return &types.MsgSendQueryIbcDenomTWAPResponse{}, nil +} + +func (k Keeper) SwapCrossChain(goCtx context.Context, msg *types.MsgSwapCrossChain) (*types.MsgSwapCrossChainResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + hostChainConfig, err := k.GetHostZoneConfig(ctx, msg.IbcDenom) + if err != nil { + return &types.MsgSwapCrossChainResponse{}, nil + } + _, err = sdk.AccAddressFromBech32(msg.FromAddress) + if err != nil { + return nil, err + } + + err = k.transferOsmosisCrosschainSwap(ctx, hostChainConfig) + + if err != nil { + return nil, err + } + + return &types.MsgSwapCrossChainResponse{}, nil +} + func (k Keeper) FundFeeAbsModuleAccount( goCtx context.Context, msg *types.MsgFundFeeAbsModuleAccount, diff --git a/x/feeabs/types/codec.go b/x/feeabs/types/codec.go index f8ea1bb9..ed73106a 100644 --- a/x/feeabs/types/codec.go +++ b/x/feeabs/types/codec.go @@ -22,6 +22,8 @@ var ( ) func RegisterCodec(cdc *codec.LegacyAmino) { + cdc.RegisterConcrete(&MsgSendQueryIbcDenomTWAP{}, "feeabs/SendQueryIbcDenomTWAP", nil) + cdc.RegisterConcrete(&MsgSwapCrossChain{}, "feeabs/SwapCrossChain", nil) cdc.RegisterConcrete(&AddHostZoneProposal{}, "feeabs/AddHostZoneProposal", nil) cdc.RegisterConcrete(&DeleteHostZoneProposal{}, "feeabs/DeleteHostZoneProposal", nil) cdc.RegisterConcrete(&SetHostZoneProposal{}, "feeabs/SetHostZoneProposal", nil) @@ -30,6 +32,8 @@ func RegisterCodec(cdc *codec.LegacyAmino) { func RegisterInterfaces(registry types.InterfaceRegistry) { registry.RegisterImplementations((*sdk.Msg)(nil), + &MsgSendQueryIbcDenomTWAP{}, + &MsgSwapCrossChain{}, &MsgFundFeeAbsModuleAccount{}, ) diff --git a/x/feeabs/types/msg.go b/x/feeabs/types/msg.go index 07e1ea20..d303a3a1 100644 --- a/x/feeabs/types/msg.go +++ b/x/feeabs/types/msg.go @@ -7,6 +7,81 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" ) +var _ sdk.Msg = &MsgSendQueryIbcDenomTWAP{} + +// Route Implements Msg. +func (m MsgSendQueryIbcDenomTWAP) Route() string { return sdk.MsgTypeURL(&m) } + +// Type Implements Msg. +func (m MsgSendQueryIbcDenomTWAP) Type() string { return sdk.MsgTypeURL(&m) } + +// GetSigners returns the expected signers for a MsgMintAndAllocateExp . +func (m MsgSendQueryIbcDenomTWAP) GetSigners() []sdk.AccAddress { + daoAccount, err := sdk.AccAddressFromBech32(m.FromAddress) + if err != nil { + panic(err) + } + return []sdk.AccAddress{daoAccount} +} + +// GetSignBytes Implements Msg. +func (m MsgSendQueryIbcDenomTWAP) GetSignBytes() []byte { + return sdk.MustSortJSON(legacy.Cdc.MustMarshalJSON(&m)) +} + +// ValidateBasic does a sanity check on the provided data. +func (m MsgSendQueryIbcDenomTWAP) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(m.FromAddress) + if err != nil { + return sdkerrors.Wrap(err, "from address must be valid address") + } + return nil +} + +func NewMsgSendQueryIbcDenomTWAP(fromAddr sdk.AccAddress) *MsgSendQueryIbcDenomTWAP { + return &MsgSendQueryIbcDenomTWAP{ + FromAddress: fromAddr.String(), + } +} + +var _ sdk.Msg = &MsgSwapCrossChain{} + +// Route Implements Msg. +func (m MsgSwapCrossChain) Route() string { return sdk.MsgTypeURL(&m) } + +// Type Implements Msg. +func (m MsgSwapCrossChain) Type() string { return sdk.MsgTypeURL(&m) } + +// GetSigners returns the expected signers for a MsgMintAndAllocateExp . +func (m MsgSwapCrossChain) GetSigners() []sdk.AccAddress { + daoAccount, err := sdk.AccAddressFromBech32(m.FromAddress) + if err != nil { + panic(err) + } + return []sdk.AccAddress{daoAccount} +} + +// GetSignBytes Implements Msg. +func (m MsgSwapCrossChain) GetSignBytes() []byte { + return sdk.MustSortJSON(legacy.Cdc.MustMarshalJSON(&m)) +} + +// ValidateBasic does a sanity check on the provided data. +func (m MsgSwapCrossChain) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(m.FromAddress) + if err != nil { + return sdkerrors.Wrap(err, "from address must be valid address") + } + return nil +} + +func NewMsgSwapCrossChain(fromAddr sdk.AccAddress, ibcDenom string) *MsgSwapCrossChain { + return &MsgSwapCrossChain{ + FromAddress: fromAddr.String(), + IbcDenom: ibcDenom, + } +} + var _ sdk.Msg = &MsgFundFeeAbsModuleAccount{} // Route Implements Msg. diff --git a/x/feeabs/types/tx.pb.go b/x/feeabs/types/tx.pb.go index 156f4ebc..bac87cfa 100644 --- a/x/feeabs/types/tx.pb.go +++ b/x/feeabs/types/tx.pb.go @@ -120,9 +120,183 @@ func (m *MsgFundFeeAbsModuleAccountResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgFundFeeAbsModuleAccountResponse proto.InternalMessageInfo +// Params defines the parameters for the feeabs module. +type MsgSendQueryIbcDenomTWAP struct { + FromAddress string `protobuf:"bytes,1,opt,name=from_address,json=fromAddress,proto3" json:"from_address,omitempty"` +} + +func (m *MsgSendQueryIbcDenomTWAP) Reset() { *m = MsgSendQueryIbcDenomTWAP{} } +func (m *MsgSendQueryIbcDenomTWAP) String() string { return proto.CompactTextString(m) } +func (*MsgSendQueryIbcDenomTWAP) ProtoMessage() {} +func (*MsgSendQueryIbcDenomTWAP) Descriptor() ([]byte, []int) { + return fileDescriptor_84c172c34645b936, []int{2} +} +func (m *MsgSendQueryIbcDenomTWAP) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSendQueryIbcDenomTWAP) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSendQueryIbcDenomTWAP.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 *MsgSendQueryIbcDenomTWAP) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSendQueryIbcDenomTWAP.Merge(m, src) +} +func (m *MsgSendQueryIbcDenomTWAP) XXX_Size() int { + return m.Size() +} +func (m *MsgSendQueryIbcDenomTWAP) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSendQueryIbcDenomTWAP.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSendQueryIbcDenomTWAP proto.InternalMessageInfo + +func (m *MsgSendQueryIbcDenomTWAP) GetFromAddress() string { + if m != nil { + return m.FromAddress + } + return "" +} + +type MsgSendQueryIbcDenomTWAPResponse struct { +} + +func (m *MsgSendQueryIbcDenomTWAPResponse) Reset() { *m = MsgSendQueryIbcDenomTWAPResponse{} } +func (m *MsgSendQueryIbcDenomTWAPResponse) String() string { return proto.CompactTextString(m) } +func (*MsgSendQueryIbcDenomTWAPResponse) ProtoMessage() {} +func (*MsgSendQueryIbcDenomTWAPResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_84c172c34645b936, []int{3} +} +func (m *MsgSendQueryIbcDenomTWAPResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSendQueryIbcDenomTWAPResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSendQueryIbcDenomTWAPResponse.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 *MsgSendQueryIbcDenomTWAPResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSendQueryIbcDenomTWAPResponse.Merge(m, src) +} +func (m *MsgSendQueryIbcDenomTWAPResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgSendQueryIbcDenomTWAPResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSendQueryIbcDenomTWAPResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSendQueryIbcDenomTWAPResponse proto.InternalMessageInfo + +// Params defines the parameters for the feeabs module. +type MsgSwapCrossChain struct { + FromAddress string `protobuf:"bytes,1,opt,name=from_address,json=fromAddress,proto3" json:"from_address,omitempty"` + IbcDenom string `protobuf:"bytes,2,opt,name=ibc_denom,json=ibcDenom,proto3" json:"ibc_denom,omitempty"` +} + +func (m *MsgSwapCrossChain) Reset() { *m = MsgSwapCrossChain{} } +func (m *MsgSwapCrossChain) String() string { return proto.CompactTextString(m) } +func (*MsgSwapCrossChain) ProtoMessage() {} +func (*MsgSwapCrossChain) Descriptor() ([]byte, []int) { + return fileDescriptor_84c172c34645b936, []int{4} +} +func (m *MsgSwapCrossChain) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSwapCrossChain) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSwapCrossChain.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 *MsgSwapCrossChain) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSwapCrossChain.Merge(m, src) +} +func (m *MsgSwapCrossChain) XXX_Size() int { + return m.Size() +} +func (m *MsgSwapCrossChain) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSwapCrossChain.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSwapCrossChain proto.InternalMessageInfo + +func (m *MsgSwapCrossChain) GetFromAddress() string { + if m != nil { + return m.FromAddress + } + return "" +} + +func (m *MsgSwapCrossChain) GetIbcDenom() string { + if m != nil { + return m.IbcDenom + } + return "" +} + +type MsgSwapCrossChainResponse struct { +} + +func (m *MsgSwapCrossChainResponse) Reset() { *m = MsgSwapCrossChainResponse{} } +func (m *MsgSwapCrossChainResponse) String() string { return proto.CompactTextString(m) } +func (*MsgSwapCrossChainResponse) ProtoMessage() {} +func (*MsgSwapCrossChainResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_84c172c34645b936, []int{5} +} +func (m *MsgSwapCrossChainResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSwapCrossChainResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSwapCrossChainResponse.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 *MsgSwapCrossChainResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSwapCrossChainResponse.Merge(m, src) +} +func (m *MsgSwapCrossChainResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgSwapCrossChainResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSwapCrossChainResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSwapCrossChainResponse proto.InternalMessageInfo + func init() { proto.RegisterType((*MsgFundFeeAbsModuleAccount)(nil), "feeabstraction.absfee.v1beta1.MsgFundFeeAbsModuleAccount") proto.RegisterType((*MsgFundFeeAbsModuleAccountResponse)(nil), "feeabstraction.absfee.v1beta1.MsgFundFeeAbsModuleAccountResponse") + proto.RegisterType((*MsgSendQueryIbcDenomTWAP)(nil), "feeabstraction.absfee.v1beta1.MsgSendQueryIbcDenomTWAP") + proto.RegisterType((*MsgSendQueryIbcDenomTWAPResponse)(nil), "feeabstraction.absfee.v1beta1.MsgSendQueryIbcDenomTWAPResponse") + proto.RegisterType((*MsgSwapCrossChain)(nil), "feeabstraction.absfee.v1beta1.MsgSwapCrossChain") + proto.RegisterType((*MsgSwapCrossChainResponse)(nil), "feeabstraction.absfee.v1beta1.MsgSwapCrossChainResponse") } func init() { @@ -130,32 +304,40 @@ func init() { } var fileDescriptor_84c172c34645b936 = []byte{ - // 394 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x92, 0xb1, 0x8e, 0xd3, 0x40, - 0x10, 0x86, 0xbd, 0x9c, 0x74, 0x12, 0x3e, 0x68, 0x2c, 0x24, 0x0e, 0x4b, 0xd8, 0x87, 0x85, 0x50, - 0x40, 0xca, 0xae, 0xee, 0x28, 0xd0, 0xd1, 0xf9, 0x90, 0xae, 0x4b, 0x13, 0x3a, 0x1a, 0xb4, 0x6b, - 0x8f, 0x7d, 0x16, 0x5e, 0x8f, 0xe5, 0x59, 0x47, 0xc9, 0x5b, 0xd0, 0x51, 0xd2, 0xd3, 0xf3, 0x0e, - 0x29, 0x53, 0x52, 0x05, 0x94, 0xbc, 0x01, 0x4f, 0x80, 0xec, 0x75, 0x44, 0x28, 0x92, 0x82, 0xca, - 0xde, 0xd9, 0x6f, 0x66, 0xfe, 0xf9, 0x67, 0xdd, 0x17, 0x19, 0x80, 0x54, 0x64, 0x1a, 0x99, 0x98, - 0x02, 0x2b, 0x21, 0x15, 0x65, 0x00, 0x62, 0x76, 0xa9, 0xc0, 0xc8, 0x4b, 0x61, 0xe6, 0xbc, 0x6e, - 0xd0, 0xa0, 0xf7, 0xf4, 0x5f, 0x8e, 0x5b, 0x8e, 0x0f, 0x9c, 0xff, 0x28, 0xc7, 0x1c, 0x7b, 0x52, - 0x74, 0x7f, 0x36, 0xc9, 0x7f, 0x75, 0xbc, 0x78, 0x2d, 0x1b, 0xa9, 0x69, 0x60, 0x5f, 0x1e, 0x67, - 0xa1, 0xc6, 0xe4, 0x6e, 0x40, 0x83, 0x04, 0x49, 0x23, 0x09, 0x25, 0xe9, 0x2f, 0x90, 0x60, 0x51, - 0x0d, 0xf7, 0x61, 0x8e, 0x98, 0x97, 0x20, 0xfa, 0x93, 0x6a, 0x33, 0x61, 0x0a, 0x0d, 0x64, 0xa4, - 0xae, 0x2d, 0x10, 0x7d, 0x67, 0xae, 0x3f, 0xa1, 0xfc, 0xb6, 0xad, 0xd2, 0x5b, 0x80, 0x58, 0xd1, - 0x04, 0xd3, 0xb6, 0x84, 0x38, 0x49, 0xb0, 0xad, 0x8c, 0xf7, 0xcc, 0x7d, 0x90, 0x35, 0xa8, 0x3f, - 0xca, 0x34, 0x6d, 0x80, 0xe8, 0x9c, 0x5d, 0xb0, 0xd1, 0xfd, 0xe9, 0x59, 0x17, 0x8b, 0x6d, 0xc8, - 0x33, 0xee, 0xa9, 0xd4, 0x1d, 0x7c, 0x7e, 0xef, 0xe2, 0x64, 0x74, 0x76, 0xf5, 0x84, 0x5b, 0x4d, - 0xbc, 0xd3, 0xb4, 0x73, 0x85, 0xbf, 0xc3, 0xa2, 0xba, 0x89, 0x97, 0xeb, 0xd0, 0xf9, 0xbd, 0x0e, - 0x1f, 0x2e, 0xa4, 0x2e, 0xdf, 0x46, 0x36, 0x2d, 0xfa, 0xf6, 0x33, 0x1c, 0xe5, 0x85, 0xb9, 0x6b, - 0x15, 0x4f, 0x50, 0x8b, 0x61, 0x22, 0xfb, 0x19, 0x53, 0xfa, 0x49, 0x98, 0x45, 0x0d, 0xd4, 0x57, - 0xa0, 0xe9, 0xd0, 0x2b, 0x7a, 0xee, 0x46, 0x87, 0x65, 0x4f, 0x81, 0x6a, 0xac, 0x08, 0xae, 0xbe, - 0x32, 0xf7, 0x64, 0x42, 0xb9, 0xf7, 0x85, 0xb9, 0x8f, 0x0f, 0x8d, 0x78, 0xcd, 0x8f, 0xee, 0x93, - 0x1f, 0x6e, 0xe3, 0xc7, 0xff, 0x9d, 0xba, 0x53, 0x78, 0xf3, 0x7e, 0xb9, 0x09, 0xd8, 0x6a, 0x13, - 0xb0, 0x5f, 0x9b, 0x80, 0x7d, 0xde, 0x06, 0xce, 0x6a, 0x1b, 0x38, 0x3f, 0xb6, 0x81, 0xf3, 0xe1, - 0x7a, 0xcf, 0x93, 0xde, 0x8b, 0x82, 0xc6, 0xa5, 0x54, 0x24, 0x32, 0x80, 0xf1, 0xfe, 0xf3, 0x98, - 0xbd, 0x11, 0x73, 0x61, 0x85, 0x58, 0xab, 0xd4, 0x69, 0xbf, 0xdb, 0xd7, 0x7f, 0x02, 0x00, 0x00, - 0xff, 0xff, 0xe0, 0x55, 0xdd, 0x68, 0xd2, 0x02, 0x00, 0x00, + // 516 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0xcf, 0x6e, 0xd3, 0x40, + 0x10, 0xc6, 0xe3, 0x46, 0xaa, 0xe8, 0x16, 0x90, 0x88, 0x40, 0xa4, 0xae, 0x70, 0x82, 0x85, 0x50, + 0x40, 0x8a, 0x97, 0x96, 0x43, 0x29, 0x12, 0x42, 0x6e, 0x50, 0x25, 0x0e, 0x91, 0x20, 0x41, 0x42, + 0xe2, 0x52, 0xed, 0xda, 0x13, 0xc7, 0x22, 0xf6, 0x58, 0x9e, 0x75, 0x69, 0x24, 0x1e, 0x02, 0x4e, + 0xbc, 0x03, 0x37, 0x0e, 0xbc, 0x43, 0x8f, 0x3d, 0x72, 0x2a, 0x28, 0x79, 0x03, 0x9e, 0x00, 0xf9, + 0x4f, 0x4a, 0x0b, 0x38, 0xa4, 0x3d, 0xd9, 0xde, 0xfd, 0x7d, 0xdf, 0x7c, 0xb3, 0x9a, 0x35, 0xbb, + 0x3b, 0x00, 0x10, 0x92, 0x54, 0x2c, 0x1c, 0xe5, 0x63, 0xc8, 0x85, 0xa4, 0x01, 0x00, 0xdf, 0xdf, + 0x90, 0xa0, 0xc4, 0x06, 0x57, 0x07, 0x56, 0x14, 0xa3, 0xc2, 0xda, 0xad, 0xb3, 0x9c, 0x95, 0x73, + 0x56, 0xc1, 0xe9, 0xd7, 0x3d, 0xf4, 0x30, 0x23, 0x79, 0xfa, 0x96, 0x8b, 0xf4, 0xfb, 0xf3, 0xcd, + 0x23, 0x11, 0x8b, 0x80, 0x0a, 0xf6, 0xde, 0x7c, 0x16, 0x22, 0x74, 0x86, 0x05, 0x6a, 0x38, 0x48, + 0x01, 0x12, 0x97, 0x82, 0x7e, 0x03, 0x0e, 0xfa, 0x61, 0xb1, 0xdf, 0xf0, 0x10, 0xbd, 0x11, 0xf0, + 0xec, 0x4b, 0x26, 0x03, 0xae, 0xfc, 0x00, 0x48, 0x89, 0x20, 0xca, 0x01, 0xf3, 0xab, 0xc6, 0xf4, + 0x2e, 0x79, 0xbb, 0x49, 0xe8, 0xee, 0x02, 0xd8, 0x92, 0xba, 0xe8, 0x26, 0x23, 0xb0, 0x1d, 0x07, + 0x93, 0x50, 0xd5, 0x6e, 0xb3, 0xcb, 0x83, 0x18, 0x83, 0x3d, 0xe1, 0xba, 0x31, 0x10, 0xd5, 0xb5, + 0xa6, 0xd6, 0x5a, 0xe9, 0xad, 0xa6, 0x6b, 0x76, 0xbe, 0x54, 0x53, 0x6c, 0x59, 0x04, 0x29, 0x5c, + 0x5f, 0x6a, 0x56, 0x5b, 0xab, 0x9b, 0x6b, 0x56, 0x9e, 0xc9, 0x4a, 0x33, 0xcd, 0x4e, 0xc5, 0xea, + 0xa0, 0x1f, 0xee, 0xd8, 0x87, 0xc7, 0x8d, 0xca, 0xcf, 0xe3, 0xc6, 0x95, 0xb1, 0x08, 0x46, 0x8f, + 0xcd, 0x5c, 0x66, 0x7e, 0xfe, 0xde, 0x68, 0x79, 0xbe, 0x1a, 0x26, 0xd2, 0x72, 0x30, 0xe0, 0x45, + 0x47, 0xf9, 0xa3, 0x4d, 0xee, 0x5b, 0xae, 0xc6, 0x11, 0x50, 0xe6, 0x40, 0xbd, 0xa2, 0x96, 0x79, + 0x87, 0x99, 0xe5, 0xb1, 0x7b, 0x40, 0x11, 0x86, 0x04, 0xe6, 0x13, 0x56, 0xef, 0x92, 0xd7, 0x87, + 0xd0, 0x7d, 0x99, 0x40, 0x3c, 0x7e, 0x2e, 0x9d, 0x67, 0x10, 0x62, 0xf0, 0xea, 0xb5, 0xfd, 0x62, + 0x81, 0xd6, 0x4c, 0x93, 0x35, 0xcb, 0xe4, 0x27, 0x25, 0xfa, 0xec, 0x5a, 0xca, 0xbc, 0x13, 0x51, + 0x27, 0x46, 0xa2, 0xce, 0x50, 0xf8, 0xe1, 0x22, 0xc7, 0xb6, 0xce, 0x56, 0x7c, 0xe9, 0xec, 0xb9, + 0xa9, 0x61, 0x7d, 0x29, 0xdb, 0xbf, 0xe4, 0x17, 0x05, 0xcc, 0x75, 0xb6, 0xf6, 0x97, 0xe9, 0xac, + 0xe2, 0xe6, 0x97, 0x2a, 0xab, 0x76, 0xc9, 0xab, 0x7d, 0xd4, 0xd8, 0x8d, 0x7f, 0xb7, 0xb6, 0x65, + 0xcd, 0x1d, 0x51, 0xab, 0xac, 0x29, 0xfd, 0xe9, 0x05, 0x85, 0xb3, 0x6c, 0xb5, 0xf7, 0xec, 0xea, + 0x1f, 0x47, 0xf1, 0x60, 0x01, 0xcb, 0x33, 0x0a, 0xfd, 0xd1, 0x79, 0x15, 0x27, 0xd5, 0x3f, 0x69, + 0xec, 0x66, 0xd9, 0x24, 0x6f, 0xff, 0xdf, 0xb5, 0x44, 0xaa, 0xdb, 0x17, 0x96, 0xce, 0x92, 0xed, + 0xf4, 0x0f, 0x27, 0x86, 0x76, 0x34, 0x31, 0xb4, 0x1f, 0x13, 0x43, 0xfb, 0x30, 0x35, 0x2a, 0x47, + 0x53, 0xa3, 0xf2, 0x6d, 0x6a, 0x54, 0xde, 0x6c, 0x9f, 0x1a, 0xfd, 0x6c, 0xe4, 0x7d, 0x6a, 0x8f, + 0x84, 0x24, 0x3e, 0x00, 0x68, 0x9f, 0xfe, 0x0b, 0xec, 0x6f, 0xf1, 0x03, 0x9e, 0x07, 0xc9, 0x6f, + 0x84, 0x5c, 0xce, 0xae, 0xf0, 0xc3, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x0c, 0x77, 0x4e, 0x61, + 0xb9, 0x04, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -170,6 +352,8 @@ const _ = grpc.SupportPackageIsVersion4 // // 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 { + SendQueryIbcDenomTWAP(ctx context.Context, in *MsgSendQueryIbcDenomTWAP, opts ...grpc.CallOption) (*MsgSendQueryIbcDenomTWAPResponse, error) + SwapCrossChain(ctx context.Context, in *MsgSwapCrossChain, opts ...grpc.CallOption) (*MsgSwapCrossChainResponse, error) FundFeeAbsModuleAccount(ctx context.Context, in *MsgFundFeeAbsModuleAccount, opts ...grpc.CallOption) (*MsgFundFeeAbsModuleAccountResponse, error) } @@ -181,6 +365,24 @@ func NewMsgClient(cc grpc1.ClientConn) MsgClient { return &msgClient{cc} } +func (c *msgClient) SendQueryIbcDenomTWAP(ctx context.Context, in *MsgSendQueryIbcDenomTWAP, opts ...grpc.CallOption) (*MsgSendQueryIbcDenomTWAPResponse, error) { + out := new(MsgSendQueryIbcDenomTWAPResponse) + err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Msg/SendQueryIbcDenomTWAP", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) SwapCrossChain(ctx context.Context, in *MsgSwapCrossChain, opts ...grpc.CallOption) (*MsgSwapCrossChainResponse, error) { + out := new(MsgSwapCrossChainResponse) + err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Msg/SwapCrossChain", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *msgClient) FundFeeAbsModuleAccount(ctx context.Context, in *MsgFundFeeAbsModuleAccount, opts ...grpc.CallOption) (*MsgFundFeeAbsModuleAccountResponse, error) { out := new(MsgFundFeeAbsModuleAccountResponse) err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Msg/FundFeeAbsModuleAccount", in, out, opts...) @@ -192,6 +394,8 @@ func (c *msgClient) FundFeeAbsModuleAccount(ctx context.Context, in *MsgFundFeeA // MsgServer is the server API for Msg service. type MsgServer interface { + SendQueryIbcDenomTWAP(context.Context, *MsgSendQueryIbcDenomTWAP) (*MsgSendQueryIbcDenomTWAPResponse, error) + SwapCrossChain(context.Context, *MsgSwapCrossChain) (*MsgSwapCrossChainResponse, error) FundFeeAbsModuleAccount(context.Context, *MsgFundFeeAbsModuleAccount) (*MsgFundFeeAbsModuleAccountResponse, error) } @@ -199,6 +403,12 @@ type MsgServer interface { type UnimplementedMsgServer struct { } +func (*UnimplementedMsgServer) SendQueryIbcDenomTWAP(ctx context.Context, req *MsgSendQueryIbcDenomTWAP) (*MsgSendQueryIbcDenomTWAPResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SendQueryIbcDenomTWAP not implemented") +} +func (*UnimplementedMsgServer) SwapCrossChain(ctx context.Context, req *MsgSwapCrossChain) (*MsgSwapCrossChainResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SwapCrossChain not implemented") +} func (*UnimplementedMsgServer) FundFeeAbsModuleAccount(ctx context.Context, req *MsgFundFeeAbsModuleAccount) (*MsgFundFeeAbsModuleAccountResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method FundFeeAbsModuleAccount not implemented") } @@ -207,6 +417,42 @@ func RegisterMsgServer(s grpc1.Server, srv MsgServer) { s.RegisterService(&_Msg_serviceDesc, srv) } +func _Msg_SendQueryIbcDenomTWAP_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgSendQueryIbcDenomTWAP) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).SendQueryIbcDenomTWAP(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/feeabstraction.absfee.v1beta1.Msg/SendQueryIbcDenomTWAP", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).SendQueryIbcDenomTWAP(ctx, req.(*MsgSendQueryIbcDenomTWAP)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_SwapCrossChain_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgSwapCrossChain) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).SwapCrossChain(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/feeabstraction.absfee.v1beta1.Msg/SwapCrossChain", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).SwapCrossChain(ctx, req.(*MsgSwapCrossChain)) + } + return interceptor(ctx, in, info, handler) +} + func _Msg_FundFeeAbsModuleAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(MsgFundFeeAbsModuleAccount) if err := dec(in); err != nil { @@ -229,6 +475,14 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ ServiceName: "feeabstraction.absfee.v1beta1.Msg", HandlerType: (*MsgServer)(nil), Methods: []grpc.MethodDesc{ + { + MethodName: "SendQueryIbcDenomTWAP", + Handler: _Msg_SendQueryIbcDenomTWAP_Handler, + }, + { + MethodName: "SwapCrossChain", + Handler: _Msg_SwapCrossChain_Handler, + }, { MethodName: "FundFeeAbsModuleAccount", Handler: _Msg_FundFeeAbsModuleAccount_Handler, @@ -305,6 +559,119 @@ func (m *MsgFundFeeAbsModuleAccountResponse) MarshalToSizedBuffer(dAtA []byte) ( return len(dAtA) - i, nil } +func (m *MsgSendQueryIbcDenomTWAP) 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 *MsgSendQueryIbcDenomTWAP) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSendQueryIbcDenomTWAP) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.FromAddress) > 0 { + i -= len(m.FromAddress) + copy(dAtA[i:], m.FromAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.FromAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgSendQueryIbcDenomTWAPResponse) 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 *MsgSendQueryIbcDenomTWAPResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSendQueryIbcDenomTWAPResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgSwapCrossChain) 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 *MsgSwapCrossChain) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSwapCrossChain) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.IbcDenom) > 0 { + i -= len(m.IbcDenom) + copy(dAtA[i:], m.IbcDenom) + i = encodeVarintTx(dAtA, i, uint64(len(m.IbcDenom))) + i-- + dAtA[i] = 0x12 + } + if len(m.FromAddress) > 0 { + i -= len(m.FromAddress) + copy(dAtA[i:], m.FromAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.FromAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgSwapCrossChainResponse) 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 *MsgSwapCrossChainResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSwapCrossChainResponse) 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 @@ -344,11 +711,59 @@ func (m *MsgFundFeeAbsModuleAccountResponse) Size() (n int) { 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 *MsgSendQueryIbcDenomTWAP) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.FromAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgSendQueryIbcDenomTWAPResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgSwapCrossChain) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.FromAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.IbcDenom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgSwapCrossChainResponse) 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 *MsgFundFeeAbsModuleAccount) Unmarshal(dAtA []byte) error { l := len(dAtA) @@ -516,6 +931,302 @@ func (m *MsgFundFeeAbsModuleAccountResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *MsgSendQueryIbcDenomTWAP) 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: MsgSendQueryIbcDenomTWAP: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSendQueryIbcDenomTWAP: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FromAddress", 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.FromAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgSendQueryIbcDenomTWAPResponse) 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: MsgSendQueryIbcDenomTWAPResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSendQueryIbcDenomTWAPResponse: 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) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgSwapCrossChain) 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: MsgSwapCrossChain: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSwapCrossChain: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FromAddress", 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.FromAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IbcDenom", 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.IbcDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgSwapCrossChainResponse) 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: MsgSwapCrossChainResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSwapCrossChainResponse: 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) || (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 From 4dc3a4af7ddf6cc2092a67ef4cd7849d75e5e6c5 Mon Sep 17 00:00:00 2001 From: GnaD | Notional <89174180+GNaD13@users.noreply.github.com> Date: Tue, 29 Aug 2023 12:40:16 +0700 Subject: [PATCH 59/90] Update Integration docs (#79) * update docs * update operation * more detail * nit * nit --- x/feeabs/spec/Integration.md | 393 +++++++++++++++++++++++++---------- 1 file changed, 279 insertions(+), 114 deletions(-) diff --git a/x/feeabs/spec/Integration.md b/x/feeabs/spec/Integration.md index ed60e05f..6841027d 100644 --- a/x/feeabs/spec/Integration.md +++ b/x/feeabs/spec/Integration.md @@ -1,132 +1,297 @@ -## Example integration of the Fee Abstraction module +# Integrate the Fee-abstraction module -``` -// app.go -import ( +## Overview +A problem that regularly arises for new users of a Cosmos appchain is that they can't make their first transaction without having the native token. This can be a fairly serious barrier for new users, as it adds many steps to their experience with the application. Notional's fee abstraction module is an open-source Cosmos-SDK module that allows users to pay the fees on a host blockchain with IBC tokens from other blockchains, signifcantly reducing the number of steps required for a large class of new users. + +## Prerequisites +Projects that want to integrate the fee-abstraction module onto their Cosmos SDK chain must enable the following modules: +- [packet-forward-middleware](https://github.com/cosmos/ibc-apps/tree/main/middleware/packet-forward-middleware): Middleware for forwarding IBC packets. This middleware allows for the transfer ICS20 packet using Osmosis Path Unwinding +- [x/staking](https://github.com/cosmos/cosmos-sdk/tree/main/x/staking): The fee-abstraction module must know what token it will swap for, and it retrieves this information from the staking module under the token bond denom. +- [x/auth](https://github.com/cosmos/cosmos-sdk/tree/main/x/auth): the Fee-abstraction module will send the swapped tokens to its own module account to process the original transaction. In order to access its module account address, it needs access to the auth module. +- [x/bank](https://github.com/cosmos/cosmos-sdk/tree/main/x/bank): Allows Fee-abstraction to manage the balances on its own module account. +- [ibc-transfer](https://github.com/cosmos/ibc-go): Allows the fee-abstraction module to transfer and receive ibc packets. + +## Configuring and Adding Fee-abstraction +1. Add the Fee-abstraction package to the go.mod and install it. + ``` + require ( + ... + github.com/osmosis-labs/fee-abstraction v + ... + ) + ``` + **Note:** The version of the fee-abstraction module will depend on which version of the Cosmos SDK your chain is using. If in doubt about which version to use, please consult the documentation: https://github.com/osmosis-labs/fee-abstraction + +2. Add the following modules to `app.go` + ``` + import ( ... - feeabsmodule "github.com/notional-labs/fee-abstraction/v2/x/feeabs" - feeabskeeper "github.com/notional-labs/fee-abstraction/v2/x/feeabs/keeper" - feeabstypes "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" + feeabsmodule "github.com/notional-labs/fee-abstraction/v2/x/feeabs" + feeabskeeper "github.com/notional-labs/fee-abstraction/v2/x/feeabs/keeper" + feeabstypes "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" + ... + ) + ``` +3. In `app.go`: Register the AppModule for the fee middleware module. + ``` + ModuleBasics = module.NewBasicManager( + ... + feeabsmodule.AppModuleBasic{}, + ... + ) + ``` +4. In `app.go`: Add module account permissions for the fee abstractions. + ``` + maccPerms = map[string][]string{ + ... + feeabsmodule.ModuleName: nil, + } + // module accounts that are allowed to receive tokens + allowedReceivingModAcc = map[string]bool{ + feeabstypes.ModuleName: true, + } + ``` +5. In `app.go`: Add fee abstraction keeper. + ``` + type App struct { + ... + FeeabsKeeper feeabskeeper.Keeper + ... + } + ``` +6. In `app.go`: Add fee abstraction store key. + ``` + keys := sdk.NewKVStoreKeys( + ... + feeabstypes.StoreKey, + ... + ) + ``` +7. In `app.go`: Instantiate Fee abstraction keeper + ``` + app.FeeabsKeeper = feeabskeeper.NewKeeper( + appCodec, + keys[feeabstypes.StoreKey], + keys[feeabstypes.MemStoreKey], + app.GetSubspace(feeabstypes.ModuleName), + app.StakingKeeper, + app.AccountKeeper, + app.BankKeeper, + app.TransferKeeper, + app.IBCKeeper.ChannelKeeper, + &app.IBCKeeper.PortKeeper, + scopedFeeabsKeeper, + ) + ``` +8. In `app.go`: Add the IBC router. + ``` + feeabsIBCModule := feeabsmodule.NewIBCModule(appCodec, app.FeeabsKeeper) + + ibcRouter := porttypes.NewRouter() + ibcRouter. ... + AddRoute(feeabstypes.ModuleName, feeabsIBCModule) + ... + ``` +9. In `app.go`: Add the fee-abstraction module to the app manager and simulation manager instantiations. + ``` + app.mm = module.NewManager( + ... + feeabsModule := feeabsmodule.NewAppModule(appCodec, app.FeeabsKeeper), + ... + ) + ``` + ``` + app.sm = module.NewSimulationManager( + ... + transferModule, + feeabsModule := feeabsmodule.NewAppModule(appCodec, app.FeeabsKeeper), + ... + ) + ``` +10. In `app.go`: Add the module as the final element to the following: +- SetOrderBeginBlockers +- SetOrderEndBlockers +- SetOrderInitGenesis + ``` + // Add fee abstraction to begin blocker logic + app.moduleManager.SetOrderBeginBlockers( + ... + feeabstypes.ModuleName, + ... + ) -) -// Register the AppModule for the fee middleware module -ModuleBasics = module.NewBasicManager( - ... - feeabsmodule.AppModuleBasic{}, - ... -) + // Add fee abstraction to end blocker logic + app.moduleManager.SetOrderEndBlockers( + ... + feeabstypes.ModuleName, + ... + ) -... + // Add fee abstraction to init genesis logic + app.moduleManager.SetOrderInitGenesis( + ... + feeabstypes.ModuleName, + ... + ) + ``` +11. In `app.go`: Allow module account address. + ``` + func (app *FeeAbs) ModuleAccountAddrs() map[string]bool { + blockedAddrs := make(map[string]bool) -// Add module account permissions for the fee abstractions -maccPerms = map[string][]string{ - ... - feeabsmodule.ModuleName: nil, -} + accs := make([]string, 0, len(maccPerms)) + for k := range maccPerms { + accs = append(accs, k) + } + sort.Strings(accs) -... + for _, acc := range accs { + blockedAddrs[authtypes.NewModuleAddress(acc).String()] = !allowedReceivingModAcc[acc] + } -// Add fee abstractions Keeper -type App struct { - ... + return blockedAddrs + } + ``` +12. In `app.go`: Add to Param keeper. + ``` + func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino, key, tkey sdk.StoreKey) paramskeeper.Keeper { + paramsKeeper := paramskeeper.NewKeeper(appCodec, legacyAmino, key, tkey) + ... + paramsKeeper.Subspace(feeabstypes.ModuleName) + ... + return paramsKeeper + } + ``` +13. Modified Fee Antehandler - FeeabsKeeper feeabskeeper.Keeper + To allow for this, we use modified versions of `MempoolFeeDecorator` and `DeductFeeDecorate`. In these ante handlers, IBC tokens are swapped to the native token before the next fee handler logic is executed. - ... -} + If a blockchain uses the Fee Abstraction module, it is necessary to replace the `MempoolFeeDecorator` and `DeductFeeDecorate` with the `FeeAbstrationMempoolFeeDecorator` and `FeeAbstractionDeductFeeDecorate`, respectively. These can be found in `app/ante.go`, and should be implemented as below: + + Example: + ``` + anteDecorators := []sdk.AnteDecorator{ + ante.NewSetUpContextDecorator(), // outermost AnteDecorator. SetUpContext must be called first + ante.NewRejectExtensionOptionsDecorator(), + feeabsante.NewFeeAbstrationMempoolFeeDecorator(options.FeeAbskeeper), + ante.NewValidateBasicDecorator(), + ante.NewTxTimeoutHeightDecorator(), + ante.NewValidateMemoDecorator(options.AccountKeeper), + ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper), + feeabsante.NewFeeAbstractionDeductFeeDecorate(options.AccountKeeper, options.BankKeeper, options.FeeAbskeeper, options.FeegrantKeeper), + // SetPubKeyDecorator must be called before all signature verification decorators + ante.NewSetPubKeyDecorator(options.AccountKeeper), + ante.NewValidateSigCountDecorator(options.AccountKeeper), + ante.NewSigGasConsumeDecorator(options.AccountKeeper, sigGasConsumer), + ante.NewSigVerificationDecorator(options.AccountKeeper, options.SignModeHandler), + ante.NewIncrementSequenceDecorator(options.AccountKeeper), + ibcante.NewAnteDecorator(options.IBCKeeper), + } + ``` + +## Fee-abstraction Operation +### Create IBC interchain-query channel between Feeabs and Osmosis -... - -// Create store keys -keys := sdk.NewKVStoreKeys( - ... - feeabstypes.StoreKey, - ... -) - -... - -app.FeeabsKeeper = feeabskeeper.NewKeeper( - appCodec, - keys[feeabstypes.StoreKey], - keys[feeabstypes.MemStoreKey], - app.GetSubspace(feeabstypes.ModuleName), - app.StakingKeeper, - app.AccountKeeper, - app.BankKeeper, - app.TransferKeeper, - app.IBCKeeper.ChannelKeeper, - &app.IBCKeeper.PortKeeper, - scopedFeeabsKeeper, -) - -.... -// IBC module to fee abstraction - feeabsIBCModule := feeabsmodule.NewIBCModule(appCodec, app.FeeabsKeeper) - // Create static IBC router, add app routes, then set and seal it - ibcRouter := porttypes.NewRouter() - - ibcRouter. - AddRoute(wasm.ModuleName, wasm.NewIBCHandler(app.WasmKeeper, app.IBCKeeper.ChannelKeeper, app.IBCKeeper.ChannelKeeper)). - AddRoute(ibctransfertypes.ModuleName, transferIBCModule). - AddRoute(icahosttypes.SubModuleName, icaHostIBCModule). - AddRoute(feeabstypes.ModuleName, feeabsIBCModule) - - app.IBCKeeper.SetRouter(ibcRouter) -... - -// Add fee abstraction to begin blocker logic - -app.moduleManager.SetOrderBeginBlockers( - ... - feeabstypes.ModuleName, - ... -) - -// Add fee abstraction to end blocker logic -app.moduleManager.SetOrderEndBlockers( - ... - feeabstypes.ModuleName, - ... -) - -// Add fee abstraction to init genesis logic -app.moduleManager.SetOrderInitGenesis( - ... - feeabstypes.ModuleName, - ... -) -``` +To allow feeabs retrieve TWAP prices from Osmosis, we need to create a channel between feeabs and icq module on Osmosis. -## Modified Fee Deduct Antehandler + hermes create channel --a-chain osmosis --b-chain feeabs --a-port icqhost --b-port feeabs --new-client-connection --yes -When making a transaction, usually users need to pay fees in the native token, but "fee abstraction" allows them to pay fees in other tokens. +### Register chain connection information on Crosschain Registry contract on Osmosis +In this step, we setup everything that is required for XCSv2 on Osmosis: +- IBC Channel links: All Ibc channel on feeabs chain. Osmosis will use this information for `path unwinding` +``` +{ + "modify_chain_channel_links": { + "operations": [ + {"operation": "set","source_chain": "chainB","destination_chain": "osmosis","channel_id": "channel-0"}, + {"operation": "set","source_chain": "osmosis","destination_chain": "chainB","channel_id": "channel-0"}, + {"operation": "set","source_chain": "chainB","destination_chain": "chainC","channel_id": "channel-1"}, + {"operation": "set","source_chain": "chainC","destination_chain": "chainB","channel_id": "channel-0"}, + {"operation": "set","source_chain": "osmosis","destination_chain": "chainC","channel_id": "channel-1"}, + {"operation": "set","source_chain": "chainC","destination_chain": "osmosis","channel_id": "channel-1"}, + {"operation": "set","source_chain": "osmosis","destination_chain": "chainB-cw20","channel_id": "channel-2"}, + {"operation": "set","source_chain": "chainB-cw20","destination_chain": "osmosis","channel_id": "channel-2"} + ] + } +} +``` +- Chain - Address perfix pair: Osmosis will use this information to find where the receiver is +``` +{ + "modify_bech32_prefixes": { + "operations": [ + {"operation": "set", "chain_name": "osmosis", "prefix": "osmo"}, + {"operation": "set", "chain_name": "chainB", "prefix": "feeabs"}, + {"operation": "set", "chain_name": "chainC", "prefix": "cosmos"} + ] + } +} +``` +- Propose PFM: Confirm that the propose chain has imported PFM this is necessary for `path unwinding` +``` +{ + "propose_pfm": { + "chain": "chainB" + } +} -To allow for this, we use modified versions of `MempoolFeeDecorator` and `DeductFeeDecorate`. In these ante handlers, IBC tokens are swapped to the native token before the next fee handler logic is executed. +{ + "propose_pfm": { + "chain": "chainC" + } +} +``` +- Set swap router: Declare the swap route for XCS +``` +{ + "set_route": { + "input_denom":"ibc/9117A26BA81E29FA4F78F57DC2BD90CD3D26848101BA880445F119B22A1E254E", + "output_denom":"ibc/C053D637CCA2A2BA030E2C5EE1B28A16F71CCB0E45E8BE52766DC1B241B77878", + "pool_route":[ + { + "pool_id":"1", + "token_out_denom":"ibc/C053D637CCA2A2BA030E2C5EE1B28A16F71CCB0E45E8BE52766DC1B241B77878" + } + ] + } +} +``` -If a blockchain uses the Fee Abstraction module, it is necessary to replace the MempoolFeeDecorator and `DeductFeeDecorate` with the `FeeAbstrationMempoolFeeDecorator` and `FeeAbstractionDeductFeeDecorate`, respectively. +These setup should be supported by Osmosis team -Example : +### Update Feeabs Params via Param-change Gov +``` +type Params struct { + NativeIbcedInOsmosis string + OsmosisQueryTwapPath string + ChainName string + IbcTransferChannel string + IbcQueryIcqChannel string + OsmosisCrosschainSwapAddress string +} +``` +- `NativeIbcedInOsmosis` is the denom of feeabs's native token on Osmosis. Which feeabs module will swap for +- `OsmosisQueryTwapPath` is the `ArithmeticTwapToNow` query path on Osmosis. Default `/osmosis.twap.v1beta1.Query/ArithmeticTwapToNow` +- `ChainName` is the feeabs module chain name. It must be same with the chain name that declare on Osmosis Crosschain Registry Contract +- `IbcTransferChannel` Transfer channel with Osmosis using for swap ibc-token for native-token +- `IbcTransferChannel` Interchain query channel with Osmosis +- `OsmosisCrosschainSwapAddress` XCS contract on Osmosis +### Add HostZone proposal Gov +Add hostzone proposal will allow feeabs to paid fee in ibc denom which is defined ``` -anteDecorators := []sdk.AnteDecorator{ - ante.NewSetUpContextDecorator(), // outermost AnteDecorator. SetUpContext must be called first - ante.NewRejectExtensionOptionsDecorator(), - feeabsante.NewFeeAbstrationMempoolFeeDecorator(options.FeeAbskeeper), - ante.NewValidateBasicDecorator(), - ante.NewTxTimeoutHeightDecorator(), - ante.NewValidateMemoDecorator(options.AccountKeeper), - ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper), - feeabsante.NewFeeAbstractionDeductFeeDecorate(options.AccountKeeper, options.BankKeeper, options.FeeAbskeeper, options.FeegrantKeeper), - // SetPubKeyDecorator must be called before all signature verification decorators - ante.NewSetPubKeyDecorator(options.AccountKeeper), - ante.NewValidateSigCountDecorator(options.AccountKeeper), - ante.NewSigGasConsumeDecorator(options.AccountKeeper, sigGasConsumer), - ante.NewSigVerificationDecorator(options.AccountKeeper, options.SignModeHandler), - ante.NewIncrementSequenceDecorator(options.AccountKeeper), - ibcante.NewAnteDecorator(options.IBCKeeper), - } - -## Configuring with Fee Abtraction param and HostZoneConfig -In order to use Fee Abstraction, we need to add the HostZoneConfig as specified in the government proposals. +type HostChainFeeAbsConfig struct { + IbcDenom string + OsmosisPoolTokenDenomIn string + PoolId uint64 + Frozen bool +} +``` +- `IbcDenom` denom of the ibc token that allow to pay fee +- `OsmosisPoolTokenDenomIn` denom of `IbcDenom` on Osmosis +- `PoolId` pool swap between `IbcDenom` and `params.NativeIbcedInOsmosis` +- `Frozen` this is lock flag for update TWAP price. When Add HostZone proposal, it must be `false` + +### Fund Fee-abstraction module account +Fee-abstraction module account must have an initial amount of native token for pay fee so it's need to be funded. Normally, we will use gov and fund from Community Pool \ No newline at end of file From bdec57bc814d6c54e3d5fc8e6fdf76e68d543ddd Mon Sep 17 00:00:00 2001 From: vuong <56973102+vuong177@users.noreply.github.com> Date: Sun, 10 Sep 2023 15:39:42 +0700 Subject: [PATCH 60/90] Update README.md --- README.md | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 3023ef1c..f411e38c 100644 --- a/README.md +++ b/README.md @@ -7,19 +7,6 @@ The concrete use cases which motivated this module include: - The desire to use IBC token as transaction fees on any chain instead of having to use native token as fee. - To fully take advantage of the newly represented Osmosis [``swap router``](https://github.com/osmosis-labs/osmosis/tree/main/cosmwasm/contracts) with the [``ibc-hooks``](https://github.com/osmosis-labs/osmosis/tree/main/x/ibc-hooks) module and the [``async-icq``](https://github.com/strangelove-ventures/async-icq) module. -## Repository Structure - -This repository is branched by the cosmos-sdk versions and ibc-go versions used. Currently fee abstraction supports: - -- SDK v0.47.x & IBC-go v7.* - - branch: release/v7.0.x - - path: github.com/osmosis-labs/fee-abstraction/v7 -- SDK v0.46.x - - branch: release/v6.0.x - - path: github.com/osmosis-labs/fee-abstraction/v6 -- SDK v0.45.x - - branch: release/v4.0.x - - path: github.com/osmosis-labs/fee-abstraction/v4 ## Description @@ -93,3 +80,19 @@ After reverse the ibc-token, XCS will : ![Diagram of the process of swapping accumulated ibc-tokens fee](https://i.imgur.com/YKOK8mr.png "Diagram of the process of swapping accumulated ibc-tokens fee") Current version of fee-abstraction working with XCSv2 + + +## Repository Structure + +This repository is branched by the cosmos-sdk versions and ibc-go versions used. Currently fee abstraction supports: + +- SDK v0.47.x & IBC-go v7.* + - branch: release/v7.0.x + - path: github.com/osmosis-labs/fee-abstraction/v7 +- SDK v0.46.x + - branch: release/v6.0.x + - path: github.com/osmosis-labs/fee-abstraction/v6 +- SDK v0.45.x + - branch: release/v4.0.x + - path: github.com/osmosis-labs/fee-abstraction/v4 + From 8275992fc021580a04cb3dd012fb1d55f6bcfbce Mon Sep 17 00:00:00 2001 From: GnaD | Notional <89174180+GNaD13@users.noreply.github.com> Date: Sun, 17 Sep 2023 09:56:51 +0700 Subject: [PATCH 61/90] fix bug ack when adding new hostzone right after send ibc query (#87) * fix bug ack when adding new hostzone between send ibc query: * delete OsmosisIBCDenom * correct some check * nit --- scripts/host_zone_uosmo.json | 12 ++++++ x/feeabs/ibc_module.go | 9 ++-- x/feeabs/keeper/config.go | 67 ++++++++++++++++++++---------- x/feeabs/keeper/grpc_query.go | 6 +-- x/feeabs/keeper/grpc_query_test.go | 4 +- x/feeabs/keeper/host_zone_test.go | 23 +++++++--- x/feeabs/keeper/ibc.go | 60 ++++++++++---------------- x/feeabs/keeper/keeper.go | 10 ----- x/feeabs/keeper/msgserver.go | 8 ++-- x/feeabs/keeper/proposal.go | 18 ++++---- x/feeabs/keeper/proposal_test.go | 4 +- x/feeabs/types/keys.go | 18 +++++--- 12 files changed, 133 insertions(+), 106 deletions(-) create mode 100644 scripts/host_zone_uosmo.json diff --git a/scripts/host_zone_uosmo.json b/scripts/host_zone_uosmo.json new file mode 100644 index 00000000..47f46546 --- /dev/null +++ b/scripts/host_zone_uosmo.json @@ -0,0 +1,12 @@ +{ + "title": "Add Fee Abbtraction Host Zone Proposal", + "description": "Add Fee Abbtraction Host Zone", + "host_chain_fee_abs_config": + { + "ibc_denom": "ibc/ED07A3391A112B175915CD8FAF43A2DA8E4790EDE12566649D0C2F97716B8518", + "osmosis_pool_token_denom_in": "uosmo", + "pool_id": "1", + "frozen": false + }, + "deposit": "100000000stake" +} \ No newline at end of file diff --git a/x/feeabs/ibc_module.go b/x/feeabs/ibc_module.go index 2dcff864..fed4ed64 100644 --- a/x/feeabs/ibc_module.go +++ b/x/feeabs/ibc_module.go @@ -205,11 +205,12 @@ func (am IBCModule) OnTimeoutPacket( packet channeltypes.Packet, relayer sdk.AccAddress, ) error { - params := am.keeper.GetParams(ctx) - chancap := am.keeper.GetCapability(ctx, host.ChannelCapabilityPath(types.IBCPortID, params.IbcQueryIcqChannel)) + var icqPacketData types.InterchainQueryPacketData + if err := types.ModuleCdc.UnmarshalJSON(packet.GetData(), &icqPacketData); err != nil { + return sdkerrors.Wrapf(errorstypes.ErrUnknownRequest, "cannot unmarshal packet data: %v", err) + } // Resend request if timeout - err := am.keeper.OnTimeoutPacket(ctx, chancap, packet.SourcePort, packet.SourceChannel, - packet.TimeoutHeight, packet.TimeoutTimestamp, packet.Data) // If there is an error here we should still handle the timeout + err := am.keeper.OnTimeoutPacket(ctx) if err != nil { am.keeper.Logger(ctx).Error(fmt.Sprintf("Error OnTimeoutPacket %s", err.Error())) ctx.EventManager().EmitEvent( diff --git a/x/feeabs/keeper/config.go b/x/feeabs/keeper/config.go index 003ed5e2..13a7a49d 100644 --- a/x/feeabs/keeper/config.go +++ b/x/feeabs/keeper/config.go @@ -1,8 +1,6 @@ package keeper import ( - sdkerrors "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" @@ -10,27 +8,43 @@ import ( func (k Keeper) HasHostZoneConfig(ctx sdk.Context, ibcDenom string) bool { store := ctx.KVStore(k.storeKey) - key := types.GetKeyHostZoneConfig(ibcDenom) + key := types.GetKeyHostZoneConfigByFeeabsIBCDenom(ibcDenom) return store.Has(key) } -func (k Keeper) GetHostZoneConfig(ctx sdk.Context, ibcDenom string) (chainConfig types.HostChainFeeAbsConfig, err error) { +func (k Keeper) GetHostZoneConfig(ctx sdk.Context, ibcDenom string) (types.HostChainFeeAbsConfig, bool) { store := ctx.KVStore(k.storeKey) - key := types.GetKeyHostZoneConfig(ibcDenom) + key := types.GetKeyHostZoneConfigByFeeabsIBCDenom(ibcDenom) + var chainConfig types.HostChainFeeAbsConfig bz := store.Get(key) - err = k.cdc.Unmarshal(bz, &chainConfig) + if bz == nil { + return types.HostChainFeeAbsConfig{}, false + } - if err != nil { - return types.HostChainFeeAbsConfig{}, err + k.cdc.MustUnmarshal(bz, &chainConfig) + + return chainConfig, true +} + +func (k Keeper) GetHostZoneConfigByOsmosisTokenDenom(ctx sdk.Context, osmosisIbcDenom string) (types.HostChainFeeAbsConfig, bool) { + store := ctx.KVStore(k.storeKey) + key := types.GetKeyHostZoneConfigByOsmosisIBCDenom(osmosisIbcDenom) + + var chainConfig types.HostChainFeeAbsConfig + bz := store.Get(key) + if bz == nil { + return types.HostChainFeeAbsConfig{}, false } - return chainConfig, nil + k.cdc.MustUnmarshal(bz, &chainConfig) + + return chainConfig, true } -func (k Keeper) SetHostZoneConfig(ctx sdk.Context, ibcDenom string, chainConfig types.HostChainFeeAbsConfig) error { +func (k Keeper) SetHostZoneConfig(ctx sdk.Context, chainConfig types.HostChainFeeAbsConfig) error { store := ctx.KVStore(k.storeKey) - key := types.GetKeyHostZoneConfig(ibcDenom) + key := types.GetKeyHostZoneConfigByFeeabsIBCDenom(chainConfig.IbcDenom) bz, err := k.cdc.Marshal(&chainConfig) if err != nil { @@ -38,13 +52,22 @@ func (k Keeper) SetHostZoneConfig(ctx sdk.Context, ibcDenom string, chainConfig } store.Set(key, bz) + key = types.GetKeyHostZoneConfigByOsmosisIBCDenom(chainConfig.OsmosisPoolTokenDenomIn) + store.Set(key, bz) + return nil } func (k Keeper) DeleteHostZoneConfig(ctx sdk.Context, ibcDenom string) error { + hostZoneConfig, _ := k.GetHostZoneConfig(ctx, ibcDenom) store := ctx.KVStore(k.storeKey) - key := types.GetKeyHostZoneConfig(ibcDenom) + + key := types.GetKeyHostZoneConfigByFeeabsIBCDenom(ibcDenom) store.Delete(key) + + key = types.GetKeyHostZoneConfigByOsmosisIBCDenom(hostZoneConfig.OsmosisPoolTokenDenomIn) + store.Delete(key) + return nil } @@ -60,13 +83,13 @@ func (k Keeper) GetAllHostZoneConfig(ctx sdk.Context) (allChainConfigs []types.H func (k Keeper) IteratorHostZone(ctx sdk.Context) sdk.Iterator { store := ctx.KVStore(k.storeKey) - return sdk.KVStorePrefixIterator(store, types.KeyHostChainChainConfig) + return sdk.KVStorePrefixIterator(store, types.KeyHostChainChainConfigByFeeAbs) } // IterateHostZone iterates over the hostzone . func (k Keeper) IterateHostZone(ctx sdk.Context, cb func(hostZoneConfig types.HostChainFeeAbsConfig) (stop bool)) { store := ctx.KVStore(k.storeKey) - iterator := sdk.KVStorePrefixIterator(store, types.KeyHostChainChainConfig) + iterator := sdk.KVStorePrefixIterator(store, types.KeyHostChainChainConfigByFeeAbs) defer iterator.Close() for ; iterator.Valid(); iterator.Next() { @@ -79,12 +102,12 @@ func (k Keeper) IterateHostZone(ctx sdk.Context, cb func(hostZoneConfig types.Ho } func (k Keeper) FrozenHostZoneByIBCDenom(ctx sdk.Context, ibcDenom string) error { - hostChainConfig, err := k.GetHostZoneConfig(ctx, ibcDenom) - if err != nil { - return sdkerrors.Wrapf(types.ErrHostZoneConfigNotFound, err.Error()) + hostChainConfig, found := k.GetHostZoneConfig(ctx, ibcDenom) + if !found { + return types.ErrHostZoneConfigNotFound } hostChainConfig.Frozen = true - err = k.SetHostZoneConfig(ctx, ibcDenom, hostChainConfig) + err := k.SetHostZoneConfig(ctx, hostChainConfig) if err != nil { return err } @@ -93,12 +116,12 @@ func (k Keeper) FrozenHostZoneByIBCDenom(ctx sdk.Context, ibcDenom string) error } func (k Keeper) UnFrozenHostZoneByIBCDenom(ctx sdk.Context, ibcDenom string) error { - hostChainConfig, err := k.GetHostZoneConfig(ctx, ibcDenom) - if err != nil { - return sdkerrors.Wrapf(types.ErrHostZoneConfigNotFound, err.Error()) + hostChainConfig, found := k.GetHostZoneConfig(ctx, ibcDenom) + if !found { + return types.ErrHostZoneConfigNotFound } hostChainConfig.Frozen = false - err = k.SetHostZoneConfig(ctx, ibcDenom, hostChainConfig) + err := k.SetHostZoneConfig(ctx, hostChainConfig) if err != nil { return err } diff --git a/x/feeabs/keeper/grpc_query.go b/x/feeabs/keeper/grpc_query.go index 1dbc9242..6dddb780 100644 --- a/x/feeabs/keeper/grpc_query.go +++ b/x/feeabs/keeper/grpc_query.go @@ -65,9 +65,9 @@ func (q Querier) HostChainConfig(goCtx context.Context, req *types.QueryHostChai ctx := sdk.UnwrapSDKContext(goCtx) - hostChainConfig, err := q.GetHostZoneConfig(ctx, req.IbcDenom) - if err != nil { - return nil, err + hostChainConfig, found := q.GetHostZoneConfig(ctx, req.IbcDenom) + if !found { + return nil, types.ErrHostZoneConfigNotFound } return &types.QueryHostChainConfigRespone{ diff --git a/x/feeabs/keeper/grpc_query_test.go b/x/feeabs/keeper/grpc_query_test.go index f8dd4816..30478370 100644 --- a/x/feeabs/keeper/grpc_query_test.go +++ b/x/feeabs/keeper/grpc_query_test.go @@ -64,7 +64,7 @@ func (s *KeeperTestSuite) TestHostChainConfig() { PoolId: randUint64Num(), } - err := s.feeAbsKeeper.SetHostZoneConfig(s.ctx, chainConfig.IbcDenom, chainConfig) + err := s.feeAbsKeeper.SetHostZoneConfig(s.ctx, chainConfig) s.Require().NoError(err) for _, tc := range []struct { @@ -103,7 +103,7 @@ func (s *KeeperTestSuite) TestHostChainConfig() { s.Require().Equal(tc.res, res) } else { _, err := s.queryClient.HostChainConfig(goCtx, tc.req) - s.Require().NoError(err) + s.Require().Error(err) } }) } diff --git a/x/feeabs/keeper/host_zone_test.go b/x/feeabs/keeper/host_zone_test.go index b93868ad..fba5b384 100644 --- a/x/feeabs/keeper/host_zone_test.go +++ b/x/feeabs/keeper/host_zone_test.go @@ -23,7 +23,7 @@ func createNHostZone(t *testing.T, keeper *feeabskeeper.Keeper, ctx sdk.Context, } for i := 0; i < n; i++ { expected = append(expected, expectedConfig) - err := keeper.SetHostZoneConfig(ctx, expectedConfig.IbcDenom, expectedConfig) + err := keeper.SetHostZoneConfig(ctx, expectedConfig) require.NoError(t, err) } return expected @@ -34,8 +34,19 @@ func TestHostZoneGet(t *testing.T) { ctx := apphelpers.NewContextForApp(*app) expected := createNHostZone(t, &app.FeeabsKeeper, ctx, 1) for _, item := range expected { - got, err := app.FeeabsKeeper.GetHostZoneConfig(ctx, item.IbcDenom) - require.NoError(t, err) + got, found := app.FeeabsKeeper.GetHostZoneConfig(ctx, item.IbcDenom) + require.True(t, found) + require.Equal(t, item, got) + } +} + +func TestHostZoneGetByOsmosisDenom(t *testing.T) { + app := apphelpers.Setup(t, false, 1) + ctx := apphelpers.NewContextForApp(*app) + expected := createNHostZone(t, &app.FeeabsKeeper, ctx, 1) + for _, item := range expected { + got, found := app.FeeabsKeeper.GetHostZoneConfigByOsmosisTokenDenom(ctx, item.OsmosisPoolTokenDenomIn) + require.True(t, found) require.Equal(t, item, got) } } @@ -47,8 +58,10 @@ func TestHostZoneRemove(t *testing.T) { for _, item := range expected { err := app.FeeabsKeeper.DeleteHostZoneConfig(ctx, item.IbcDenom) require.NoError(t, err) - got, _ := app.FeeabsKeeper.GetHostZoneConfig(ctx, item.IbcDenom) - require.NotEqual(t, item, got) + _, found := app.FeeabsKeeper.GetHostZoneConfig(ctx, item.IbcDenom) + require.False(t, found) + _, found = app.FeeabsKeeper.GetHostZoneConfigByOsmosisTokenDenom(ctx, item.OsmosisPoolTokenDenomIn) + require.False(t, found) } } diff --git a/x/feeabs/keeper/ibc.go b/x/feeabs/keeper/ibc.go index 224033ee..b633a43e 100644 --- a/x/feeabs/keeper/ibc.go +++ b/x/feeabs/keeper/ibc.go @@ -117,48 +117,46 @@ func (k Keeper) OnAcknowledgementPacket(ctx sdk.Context, ack channeltypes.Acknow return sdkerrors.Wrap(err, "could not deserialize data to cosmos response") } - index := 0 - k.IterateHostZone(ctx, func(hostZoneConfig types.HostChainFeeAbsConfig) (stop bool) { - // Get icq data - icqReqData, reqPosition, found := k.getQueryArithmeticTwapToNowRequest(ctx, icqReqs, index) - // update the index - index = reqPosition - if !found { - // if not found any request, end the iterator - return true + for i, icqReq := range icqReqs { + var icqReqData types.QueryArithmeticTwapToNowRequest + if err := k.cdc.Unmarshal(icqReq.GetData(), &icqReqData); err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Failed to unmarshal icqReqData %s", err.Error())) + continue } - // Check if icq TWAP denom match with hostzone denom store - if icqReqData.QuoteAsset != hostZoneConfig.OsmosisPoolTokenDenomIn { - return false + + // get chain config + hostZoneConfig, found := k.GetHostZoneConfigByOsmosisTokenDenom(ctx, icqReqData.QuoteAsset) + if !found { + k.Logger(ctx).Error(fmt.Sprintf("Error when get host zone by Osmosis denom %s %v not found", icqReqData.QuoteAsset, err)) + continue } - // Get icq QueryArithmeticTwapToNowRequest response - icqRes := icqResponses[index] - index++ + + icqRes := icqResponses[i] if icqRes.Code != 0 { k.Logger(ctx).Error(fmt.Sprintf("Failed to send interchain query code %d", icqRes.Code)) err := k.FrozenHostZoneByIBCDenom(ctx, hostZoneConfig.IbcDenom) if err != nil { + // should never happen k.Logger(ctx).Error(fmt.Sprintf("Failed to frozen host zone %s", err.Error())) } - return false + continue } twapRate, err := k.GetDecTWAPFromBytes(icqRes.Value) if err != nil { k.Logger(ctx).Error("Failed to get twap") - return false + continue } k.Logger(ctx).Info(fmt.Sprintf("TwapRate %v", twapRate)) k.SetTwapRate(ctx, hostZoneConfig.IbcDenom, twapRate) err = k.UnFrozenHostZoneByIBCDenom(ctx, hostZoneConfig.IbcDenom) if err != nil { + // should never happen k.Logger(ctx).Error(fmt.Sprintf("Failed to frozen host zone %s", err.Error())) - return false } - return false - }) + } k.Logger(ctx).Info("packet ICQ request successfully") @@ -189,25 +187,9 @@ func (k Keeper) OnAcknowledgementPacket(ctx sdk.Context, ack channeltypes.Acknow return nil } -func (k Keeper) getQueryArithmeticTwapToNowRequest( - ctx sdk.Context, - icqReqs []abci.RequestQuery, - index int, -) (types.QueryArithmeticTwapToNowRequest, int, bool) { - packetLen := len(icqReqs) - found := false - var icqReqData types.QueryArithmeticTwapToNowRequest - for (index < packetLen) && (!found) { - icqReq := icqReqs[index] - if err := k.cdc.Unmarshal(icqReq.GetData(), &icqReqData); err != nil { - k.Logger(ctx).Error(fmt.Sprintf("Failed to unmarshal icqReqData %s", err.Error())) - index++ - } else { - found = true - } - } - - return icqReqData, index, found +// OnTimeoutPacket resend packet when timeout +func (k Keeper) OnTimeoutPacket(ctx sdk.Context) error { + return k.handleOsmosisIbcQuery(ctx) } func (k Keeper) GetChannelID(ctx sdk.Context) string { diff --git a/x/feeabs/keeper/keeper.go b/x/feeabs/keeper/keeper.go index e80939eb..fd74c1ac 100644 --- a/x/feeabs/keeper/keeper.go +++ b/x/feeabs/keeper/keeper.go @@ -4,7 +4,6 @@ import ( "fmt" ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" "github.com/cosmos/cosmos-sdk/codec" storetypes "github.com/cosmos/cosmos-sdk/store/types" @@ -130,15 +129,6 @@ func (k Keeper) SetParams(ctx sdk.Context, params types.Params) { k.paramSpace.SetParamSet(ctx, ¶ms) } -// OnTimeoutPacket resend packet when timeout -func (k Keeper) OnTimeoutPacket(ctx sdk.Context, chanCap *capabilitytypes.Capability, sourcePort string, - sourceChannel string, timeoutHeight clienttypes.Height, timeoutTimestamp uint64, packetData []byte, -) error { - _, err := k.channelKeeper.SendPacket(ctx, chanCap, sourcePort, sourceChannel, - timeoutHeight, timeoutTimestamp, packetData) - return err -} - func (k Keeper) GetCapability(ctx sdk.Context, name string) *capabilitytypes.Capability { capability, ok := k.scopedKeeper.GetCapability(ctx, name) if !ok { diff --git a/x/feeabs/keeper/msgserver.go b/x/feeabs/keeper/msgserver.go index c4f5ec7d..0b8af384 100644 --- a/x/feeabs/keeper/msgserver.go +++ b/x/feeabs/keeper/msgserver.go @@ -38,11 +38,11 @@ func (k Keeper) SendQueryIbcDenomTWAP(goCtx context.Context, msg *types.MsgSendQ func (k Keeper) SwapCrossChain(goCtx context.Context, msg *types.MsgSwapCrossChain) (*types.MsgSwapCrossChainResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - hostChainConfig, err := k.GetHostZoneConfig(ctx, msg.IbcDenom) - if err != nil { - return &types.MsgSwapCrossChainResponse{}, nil + hostChainConfig, found := k.GetHostZoneConfig(ctx, msg.IbcDenom) + if !found { + return &types.MsgSwapCrossChainResponse{}, types.ErrHostZoneConfigNotFound } - _, err = sdk.AccAddressFromBech32(msg.FromAddress) + _, err := sdk.AccAddressFromBech32(msg.FromAddress) if err != nil { return nil, err } diff --git a/x/feeabs/keeper/proposal.go b/x/feeabs/keeper/proposal.go index 49a7a464..aa5bec67 100644 --- a/x/feeabs/keeper/proposal.go +++ b/x/feeabs/keeper/proposal.go @@ -7,12 +7,12 @@ import ( ) func (k Keeper) AddHostZoneProposal(ctx sdk.Context, p *types.AddHostZoneProposal) error { - config, _ := k.GetHostZoneConfig(ctx, p.HostChainConfig.IbcDenom) - if (config != types.HostChainFeeAbsConfig{}) { + _, found := k.GetHostZoneConfig(ctx, p.HostChainConfig.IbcDenom) + if found { return types.ErrDuplicateHostZoneConfig } - err := k.SetHostZoneConfig(ctx, p.HostChainConfig.IbcDenom, *p.HostChainConfig) + err := k.SetHostZoneConfig(ctx, *p.HostChainConfig) if err != nil { return err } @@ -21,12 +21,12 @@ func (k Keeper) AddHostZoneProposal(ctx sdk.Context, p *types.AddHostZoneProposa } func (k Keeper) DeleteHostZoneProposal(ctx sdk.Context, p *types.DeleteHostZoneProposal) error { - _, err := k.GetHostZoneConfig(ctx, p.IbcDenom) - if err == nil { + _, found := k.GetHostZoneConfig(ctx, p.IbcDenom) + if !found { return types.ErrHostZoneConfigNotFound } - err = k.DeleteHostZoneConfig(ctx, p.IbcDenom) + err := k.DeleteHostZoneConfig(ctx, p.IbcDenom) if err != nil { return err } @@ -35,12 +35,12 @@ func (k Keeper) DeleteHostZoneProposal(ctx sdk.Context, p *types.DeleteHostZoneP } func (k Keeper) SetHostZoneProposal(ctx sdk.Context, p *types.SetHostZoneProposal) error { - _, err := k.GetHostZoneConfig(ctx, p.HostChainConfig.IbcDenom) - if err == nil { + _, found := k.GetHostZoneConfig(ctx, p.HostChainConfig.IbcDenom) + if !found { return types.ErrHostZoneConfigNotFound } - err = k.SetHostZoneConfig(ctx, p.HostChainConfig.IbcDenom, *p.HostChainConfig) + err := k.SetHostZoneConfig(ctx, *p.HostChainConfig) if err != nil { return err } diff --git a/x/feeabs/keeper/proposal_test.go b/x/feeabs/keeper/proposal_test.go index 56c90941..6ed11fc9 100644 --- a/x/feeabs/keeper/proposal_test.go +++ b/x/feeabs/keeper/proposal_test.go @@ -49,8 +49,8 @@ func (s *KeeperTestSuite) TestAddHostZoneProposal() { err = handler(s.ctx, proposal) s.Require().NoError(err) - hostChainConfig, err := s.feeAbsKeeper.GetHostZoneConfig(s.ctx, tc.hostChainConfig.IbcDenom) - s.Require().NoError(err) + hostChainConfig, found := s.feeAbsKeeper.GetHostZoneConfig(s.ctx, tc.hostChainConfig.IbcDenom) + s.Require().True(found) s.Require().Equal(tc.hostChainConfig, hostChainConfig) // store proposal again and it should error diff --git a/x/feeabs/types/keys.go b/x/feeabs/types/keys.go index 21bea43c..8300b29d 100644 --- a/x/feeabs/types/keys.go +++ b/x/feeabs/types/keys.go @@ -21,14 +21,20 @@ const ( ) var ( - OsmosisTwapExchangeRate = []byte{0x01} // Key for the exchange rate of osmosis (to native token) - KeyChannelID = []byte{0x02} // Key for IBC channel to osmosis - KeyHostChainChainConfig = []byte{0x03} // Key for IBC channel to osmosis - KeyPrefixEpoch = []byte{0x04} // KeyPrefixEpoch defines prefix key for storing epochs. + OsmosisTwapExchangeRate = []byte{0x01} // Key for the exchange rate of osmosis (to native token) + KeyChannelID = []byte{0x02} // Key for IBC channel to osmosis + KeyHostChainChainConfigByFeeAbs = []byte{0x03} // Key for IBC channel to osmosis + KeyHostChainChainConfigByOsmosis = []byte{0x04} // Key for IBC channel to osmosis + KeyPrefixEpoch = []byte{0x05} // KeyPrefixEpoch defines prefix key for storing epochs. + KeyTokenDenomPair = []byte{0x06} // Key store token denom pair on feeabs and osmosis ) -func GetKeyHostZoneConfig(ibcDenom string) []byte { - return append(KeyHostChainChainConfig, []byte(ibcDenom)...) +func GetKeyHostZoneConfigByFeeabsIBCDenom(feeabsIbcDenom string) []byte { + return append(KeyHostChainChainConfigByFeeAbs, []byte(feeabsIbcDenom)...) +} + +func GetKeyHostZoneConfigByOsmosisIBCDenom(osmosisIbcDenom string) []byte { + return append(KeyHostChainChainConfigByOsmosis, []byte(osmosisIbcDenom)...) } func GetKeyTwapExchangeRate(ibcDenom string) []byte { From 3ef7b78d034d93632fa363519da9b77ff59c9805 Mon Sep 17 00:00:00 2001 From: GnaD | Notional <89174180+GNaD13@users.noreply.github.com> Date: Fri, 22 Sep 2023 19:53:57 +0700 Subject: [PATCH 62/90] Add check if msg is bypass (#76) * add bypass * add more check fee * lint * nit * nit * add check subset denom * nit * ante * ictest * lint * update docs * nit * nit * nit * nit * nit * nit --------- Co-authored-by: vuong <56973102+vuong177@users.noreply.github.com> --- sample_pool.json | 2 +- scripts/README.md | 106 +++++++++---- scripts/check-generated.sh | 5 - scripts/deploy_and_channel.sh | 30 ---- scripts/deploy_local.sh | 29 ---- scripts/fee_abstraction.wasm | Bin 249874 -> 0 bytes scripts/host_zone.json | 12 -- scripts/host_zone_query.json | 18 --- scripts/host_zone_uosmo.json | 12 -- scripts/ibc_swap/deploy_osmosis_contract.sh | 60 ++++++++ scripts/ibc_swap/test.json | 51 ------- scripts/node_start/runnode_custom.sh | 8 +- scripts/pool.json | 7 - scripts/proposal_query.json | 13 -- tests/interchaintest/setup.go | 2 +- x/feeabs/ante/decorate.go | 156 ++++++++++++++++---- x/feeabs/ante/fee_utils.go | 40 +++++ x/feeabs/keeper/keeper.go | 4 + x/feeabs/types/keys.go | 6 + 19 files changed, 324 insertions(+), 237 deletions(-) delete mode 100755 scripts/check-generated.sh delete mode 100755 scripts/deploy_and_channel.sh delete mode 100755 scripts/deploy_local.sh delete mode 100755 scripts/fee_abstraction.wasm delete mode 100644 scripts/host_zone.json delete mode 100644 scripts/host_zone_query.json delete mode 100644 scripts/host_zone_uosmo.json create mode 100644 scripts/ibc_swap/deploy_osmosis_contract.sh delete mode 100644 scripts/ibc_swap/test.json delete mode 100644 scripts/pool.json delete mode 100644 scripts/proposal_query.json create mode 100644 x/feeabs/ante/fee_utils.go diff --git a/sample_pool.json b/sample_pool.json index ea20e31c..3a63999a 100644 --- a/sample_pool.json +++ b/sample_pool.json @@ -1,6 +1,6 @@ { "weights": "1ibc/9117A26BA81E29FA4F78F57DC2BD90CD3D26848101BA880445F119B22A1E254E,1ibc/C053D637CCA2A2BA030E2C5EE1B28A16F71CCB0E45E8BE52766DC1B241B77878", - "initial-deposit": "500000000000ibc/9117A26BA81E29FA4F78F57DC2BD90CD3D26848101BA880445F119B22A1E254E,1000000000000ibc/C053D637CCA2A2BA030E2C5EE1B28A16F71CCB0E45E8BE52766DC1B241B77878", + "initial-deposit": "500000000000ibc/9117A26BA81E29FA4F78F57DC2BD90CD3D26848101BA880445F119B22A1E254E,100000000000ibc/C053D637CCA2A2BA030E2C5EE1B28A16F71CCB0E45E8BE52766DC1B241B77878", "swap-fee": "0.01", "exit-fee": "0", "future-governor": "168h" diff --git a/scripts/README.md b/scripts/README.md index 7e3c2348..17628733 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -2,58 +2,106 @@ ## Setup -``` # Deploy chains +Run Feeabs node +``` ./scripts/node_start/runnode_custom.sh c -./scripts/node_start/runnode_osmosis.sh +``` +Run Osmosis node +``` +./scripts/node_start/runnode_osmosis.sh c +``` +Run Gaia node +``` +./scripts/node_start/runnode_gaia.sh c +``` # Run relayer -./scripts/run_relayer.sh -# Create an osmosis pool -./scripts/create_pool.sh -# Deploy contract and create relayer channel -./scripts/deploy_and_channel.sh +Run Feeabs - Osmosis relayer +``` +./scripts/run_relayer_feeabs_osmo.sh +``` +Run Feeabs - Gaia relayer +``` +./scripts/run_relayer_feeabs_gaia.sh +``` +Run Osmosis - Gaia relayer +``` +./scripts/run_relayer_osmo_gaia.sh +``` +# Setup IBC channel +Run the following command to setup IBC channel +``` +hermes --config scripts/relayer_hermes/config_feeabs_osmosis.toml create channel --a-chain testing --b-chain feeappd-t1 --a-port transfer --b-port transfer --new-client-connection --yes +hermes --config scripts/relayer_hermes/config_feeabs_osmosis.toml create channel --a-chain testing --b-chain feeappd-t1 --a-port icqhost --b-port feeabs --new-client-connection --yes +hermes --config scripts/relayer_hermes/config_feeabs_gaia.toml create channel --a-chain gaiad-t1 --b-chain feeappd-t1 --a-port transfer --b-port transfer --new-client-connection --yes +hermes --config scripts/relayer_hermes/config_osmosis_gaia.toml create channel --a-chain gaiad-t1 --b-chain testing --a-port transfer --b-port transfer --new-client-connection --yes ``` -## Test +After running, the channel map should like this +``` +feeabs - osmo: channel-0 channel-0 +feeabs - osmo: (feeabs - icqhost) channel-1 channel-1 +feeabs - gaia: channel-2 channel-0 +osmo - gaia: channel-2 channel-1 +``` +# Create an osmosis pool +Get Osmosis testing address ``` -feeappd tx feeabs queryomosis --from feeacc --keyring-backend test --chain-id feeappd-t1 --yes -# Wait for about 10 sec -feeappd q feeabs osmo-spot-price +export VALIDATOR=$(osmosisd keys show validator1 -a --keyring-backend test) +export OWNER=$(osmosisd keys show deployer -a --keyring-backend test) ``` -The result looks like this +Transfer token from Feeabs and Gaia to Osmosis +``` +feeappd tx ibc-transfer transfer transfer channel-0 "$VALIDATOR" 1000000000000stake --from feeacc --keyring-backend test --chain-id feeappd-t1 --yes --fees 5000stake +gaiad tx ibc-transfer transfer transfer channel-1 "$VALIDATOR" 1000000000000uatom --from gnad --keyring-backend test --chain-id gaiad-t1 --yes --fees 5000stake +``` +Create pool ``` -base_asset: osmo -quote_asset: stake -spot_price: "2.000000000000000000" +cat > sample_pool.json <F)m=kdMH_Z_`#$&#&ojs^adSOX=)krcHLm1bzT>SX~7QqCEIAFjOB{y@Er*3&9AY9sayoo(JODe>W1sCxr*-%+y;Bb2RGe#-POGLXGfB@zVx!!zW%jW-B>;AzwXG@ zH-Go{?7RNEuDtEY(d+)n8@!UO_2Z*Qt_G8%SKj>k*Ia+(4atNc%^tbtyT9jqzUzBO zzS$ffzUHc1ufBHVRr{JFuX+6sdTXX{dHs>2Z@BX6Yp=TQM)3W;{CD%od~$MXa(a3? zo#d9k$z-1A@J0eb@;ps>KiSrwtop-`Rx8Pqlme7)>x(>}nc^X@lE&ZmWUrmuw|SPe zTPir&p5-H+`JXIPr2yn_yPGBHk71Ru%A5P)#RpLivofwFq26>OA(6k zKuEN#;#RwpOm5;<-?T-zwAGqybvL)SoFxi@;HFe?&fdB$Z*{vZ@SSW6%4FI;o7a== zbNJ5wv|8I+`qNEsPT$7gcAh31I@|I)(sFU}WHNn6Qaw;#Fs_1wL>ZTyq`vsH5*2r-f+|FjwJtNqn_P-)z#M@xfO}L`p9)i-L%5?gN(u*F{=hfV{rkS>fB6^bkEb6< zkEb6@A5MQV{ZRTy`e^!7=})I0PRnnmf9K^dJ@8-hm;JAYj^3C4diwVChtk{sTlz=o z8~*t}`{DGT-krWTy+3_V`e6Ew^xf%?rSD4LnLd#INcy96<44oCq@PWHEB(#%RQkjD zv+1v;f13Vr`iJSyrhk%tCH)`i|4jcZ{c8GL`la;C>9O?Q^k>p9q;E|h%HET`CqI>c zAbTWxH2ZLNBKz6wXR^n#U(0?W`$YEf?3c1%%s!g^eD-*DD*J5qo7rz=KbL(gyE|XZ z@5;ZKeIxse>>c@|`A_8^%s-qzlz%3_KYxGzGx;y(kLQ1oe?0$}`7hEAC9UZ^vzCuO=YZ12k^^eibl3+06uC&_e?mdV8lkc)QFDq9Of)#NbRO&D!p z=)3kpIpjM4wj)5k)kj79`m+7^t@d`=>HkPwfBo%{+UAo#x%1>=vJW6B6_&|MlK-Ix z-xr{E98I7Kp8z|D8g_D3{M?eeg@lWM7s*ILb^c zSiy2e6%AWFFY+Saooya=_vb1)vryR6r0DL?T0BT8qc4jE@0#g9M9tq(_gLnSy{kl` zRGpQ0Q-*n&-a2d*DfCPK{&vVQ0TCwb?vB@$J8uhpoa>uRb#0{$`Mzv3mjo2|Wql!@ zsR>)T8l;S-_Mb3%XK=tEhj!c~s#hO-^@T8>$@KArwKgg5sQKF?R+*(vqn1uXL>t}Y+(p4uV}P1^_J2DMMnFmR2AD@v!zBIsG^qULUFV3 zs9Tzcmgee9>#NXGI0}Qnk+rU1Xu9>R;Xt$6HE+m$WpmTl!V(N-c%YCAApl z<;euDD&P8M7`AMcS^v#<1@4L*cBxSkq+V)V2+B_+3wsiTY=(P%F09J88-zB!-!~pl z%dNWh-{st@Rv9D-d8StGNoI^G^q@79OX}(4iD6q8llrWP5~~*jq>d-zKo}U}16|T9 zsTUW}-@CJy);ta6;B~{$r6JI8UFA%c)I_kNzokdo)F(Y65p-Q-Shc`Pm>~G3M|d4k zVnu=;LDUWu`N4F5 zzPIYZy$j{DZ-)o^pOBywslVvI4~a^UCovN(rxW>PK0DCA)7eBnE^>`v?+}vyAFIdJ zojfTdK;WD7->(l`M{QNN6bnH|iML%x?HYFW=Y8)tdx}=C`%^mVxg;p5x#@E8hfl(? z`+53ovQR#5zaDr8&-x#6S$`-`TMhYcH!V-c#XMM^j@YZ~mPhx)iGqvqV5gV}y={di zrVE~^gS+BEo+Sm$KW2Hl7^jBi=@i{2j4m+rT{mzHuOmQ+W|pUWeUbkINXM%p4+g^O zufJ7q^#7Y$dX5)!lz^bR4SwJb!H?WA1|)Ka6*2B;%gSJQ`-@Qzh=)h5Oj}k)1w#*Z z)PwD!Ei2Qitc*Q{`I|l1rrU#+d20{PAd8;CVp{8@zag$cCtC3C@)q1(gQxCm!21#JEt;@5Sxs;c= zMW>Gg1K^pBnDk60++Oy7^-dVZth)GBoM5bRnOk-Je(A7n9<<&-))AY&*WS4Lk9+{F zD>HtPgx$CaQ__m2Ur_r!oPHmy}hSdJ^}z)ASX(Bfdgc`f|dRneK;^1sC%by2WJBmsV(U8tXkNeK{dtfoDlE zxx`oCMblU4R{n;;z~8X%;4Jelc^v`LGsaRA!B^l_Kzn4<&))h)axg0CR> z(N`D)5`6_LV!lF0Y6RZ}H~pUIEdUcA10hBn4oGVa%uBjx;8ZlOYM1R>2RSu;E4}5= zU?LZH)2v(IE1@K!8o2^dqXSmqV>GBpTDf0_P77^k17t@-Zf~(Lz$FKdyga-x%zMdn z3062^a2GvfXq3sz`|nd5^w|iTS}`d_fv?S4r|9g?jMLF@g0xBz6@X7eDabA7k(vZz z^Kh!-Q+t{eQ%yeYl*n;#nU0SKQ~s7s>9C3|jE@(VV^iyA>_Z&2z-89WNz_KxhiBeJ zl~eoizwMzjP$Z^bTc$G9Q?>sTB(&-|T!a^_>;BzH*X_N2*lyZ@za1~4uo$q0sAO}z zh*#0-f74vhFnDCZSPZ)wH_k_i(+`IC@*Ffct{n>c^R&j7la;m%%YUaeqJ8qw>|B@TTd_%M5+9*yyRmHd~WFxA{!9# zC0=DwYM#F}l@%+$p1h2gv(?K0>iz&6Un4yEA%C(bxhEa8d4}sF&uB3nre1NZw66Mg zuQ?lJ)QrnH=<-h2gEW@$Z(ZLkAi<#ZZMbguWg@K}VPo@il9@npM zoehvWvcJp!W!OUFh)rEc>(o=_H`Pv@8Xotua&nN(%uZuL7vFRX*yV8?Y47RlvQL2? zA^CnJ#B($^G*sB%Y*wF0#-0QKh<8=vQ1s+;tMlc(nR1hZvS?2PL3zHsHuj9@GchwG zFg(7_I>zA4^6g9$jVILk{daj^%x6!ggE{rWDeIH@>@%qkljpN1QUbkO)aDkTd#->` zRVBS4niX^9KVO*5(gc6EU4G-^Od4D!*<GZenUAGoAhjx+|^Cyz6~;SRzv)CNQH?EeVo3{fGa1w^h_U$AL3nJK4w@$LIMW+GYC&OJAWeG zuLgozuZfyuYSk|!+C`@~HAC%AkhK3}B8K%VZLj&-^@9!i)zda_R1M`mL;YVAfeFVx zo0`gzIze{c7dhcsBdmHUG~v0?COqp+urVrq)agymOyLk8>M6Ey+!R*D&JQ_IjS!Eg zGaCCGG9C-XA{UMn17cT2oBjSH-c)sR?0E<}+T(!}G!?O~o^M&thZ#KYd7D3M^t=x> znmtdK&y06DiYQ@jq}U`XC*|e^akuX9ecYyLC;^A-89pgI&Yf6XvvoawNtdnCs|tF= z*YA(r1hXTeBPx#2a%2RFa(l4BM(swXC1q9P33}e}@~$QdsEQutsf}EWOCFYa1hV%b zoztE%-jGl>cu;&e`Zpl6MS4YGpQ$YcU4%YAY_0nFAe3a_A+$zMb?n%Di3{iTEncqzmI9uER zDoq24hW{N9YNIJIj{|AmPSNhAWp}Vef_PSC1(`tOm-!jqoXgyV$-K9`FqOWdVG)50 zSp*S7xJ44=Q*RONWU$#GT^fzy7PPrPDvegrL(%gFDhGr~MXF0gDvj#lj03|g&?Fmd zbx3<7n%ls{J9bac<38eW0B1JKGo03K@ECZ4+%^+* z$W~!ic?Pm7FL!ed9d`senv*6vP8a7qf&tkk(>YZk9=5IwY1+R=+f7R$3ob5?X}@A_U$!Vm4j8!H^nYa-7tL{u zs#+hqS8fvljuaMtG24%oFH^j)O=?w{zN{zp>A(yjHGVM@%e=fN^@Z&S>@RlOlWa8s zppko$ZO)#eT+Npbs&aPk%LeBPQo)31znDrhZ98Pm zf1<$@X6}tb8z6I0h+tfI?8~0fl^%FnSIp5TOW1&rl=qfrp-J`hyr6 zxxx8vT-D(@2a98mAf`RJvS-l^Xl@u~(+H!`KL$u$IU_I47>hb^aX<-Qj{d-dozFgz zx($1rS~vAS5N+_|>ELX=KA8@Hb+$Q{N;3gt(izmSgv&YmbLGg;Eak}1Dm+s46vYW8 z<29TFYvB-dzxthlm@fDtxAZ0u&d!WTRn8h!$xz6PbN6Lm6Lq%i%f6~B;Gfg=JS&2t znJK0vA~5-kfQ!?cOiu5hL%jV_+-cl4WxQv5*2$dg8o3SJ*P;J~( zxL}AZpumx4e$=XS8g9=R?F=*6T@DUx?Y;d8hRyl}AdS(^G+F;g_i0r`8FCW-cfS_F*@vo4UDZAUj??>pu29dp}|%*I`e$9FoHF@NJYv^q!qfg zo_aVP(5q(dA^F6uN5!+o$i~>T+ZdZB8e=nwj0#W6fBnvri%D4k44&;Dm!1@ol*!^vmW2%VaF_gBkOWJUjLtfTKORWx7+h7xF<~&NFvK zmE28mH_w$Lt`H$os4D<3Q?^u{Uzm;|%?#h4K zX~#O_A1};KXG#3i<{2HV@zsN2kPTqj9pfZfqC6L|ye8s?a%MCv(pAyJE}wcd5V3S1 zLN#SVkV}vp4Uv`SDKnPHNoaHNX6>WqKgyeNlnN~vzYcR-xNM($L_0FOM@ff%D6 zJ$9zWj#H|3FvU2%<2<6#a5ssTiB{PF_d;?(CsZaM5tyyopHY3_@GX3~x5kbVC#e_vXDZ7KGHRGZz73s!2Jm zI;=KR0$6T(a#{6*qel!t#qsM*!iX9{PW(=2HN$OFzHlU00z_{GKrrCa288YymtlKc z)nU34XJn;1JW2UJDcSA-%<+708(2IyXgm51?Pd){J&@TAlkH0;xJc{@Z8R|dFnh8U!YN@TXnZ_kXT8!N^lCBFBb*(k2nX<|@_1!d~ zyye_jR9>>AA10=8O#~UYnwrZlEpTsf>ROV{w7lc*DS@k9Fc9v4Nfu?u5*zpnf0`;S zZ5UoKYv7zz$v7U1N19Cl_yi`aAB=yp4#o@2%@7kF-i(l&kT7}|lX-r(+n}sor6IJ# z$_?6FrC0nyR=b1GG*>am9kixNOWEKUTJ@inpJuedC!dgMmp9heXd6LMQ46}OJaqLD zy$uj;NPTf~0iX_u_$98697w?qzT_q5L0*6dd8zKqgDk<~)$V}4l9FF|?@4`hnUy?1 z$yf1EI!_BI`fn3*eviqsH~ssm5aU_(Hg6=I|nh6c_6 zOb}@il6X|c+1E9ZZ^%a#H?-t%dF$qC8B#-n3{?Y_miT#@r4k?7-`zkme#$>B6snd@ zJTsCq@s!+Wh!ImJPRVU4c^cgx(N(f@3J1APmQZ-qpMN$r#TTa{!i1s##QXrpfdOPS zC&B0+(JoKwjn7v#t5cP++LNK$%;#R@3GvS~B1nBQMS+qCc#CBMp3KbYRMx~Pzn$Xt zxZi5zJ`+C22h`s@)Z@QK|3@S=-08(MiC##Pu&H(PP}?&bH9S_D1hNE5mg`{e-Aiqo zM^uqPfx|}3>2WnI%yE32W{8|#XDU}!ZZ2$U(;R)~hYXmr>eD-JtHMu^V4dj+`cRa&!HkWc1*c-r+=d*5{?7pX2 zjV`OJStYHhjkL5B{g@B|p^`xl|D6}Vb1$m1oc1{nT=A3_`eJvI9Q^(N{P7Py@-t6; z^s7p_r=xnB3(2{NEb(tKUfJxjl>u{h*~$?7+2t!EbV6m|BCR(It_?9%|F)=FBZQRJ z;Pt_BaUNu@Y$@VAH_MuDWnTCk6f??nm@-S;x9>1x?2P!V5n-ZVO^O_6M&ac?^`A)_ z3>4cC%eqHEyxaQ2++}|e2^?oeo{gbX|H@6C?9=Z2I1>@iS_s}grO!uZL+D-ev89S6 zFc!rSl+lENhY7wsNeoOX?o^l;p*Ya0d682#FM`+WGX!Wwhd4Sfa>~%*6)N+XB@u;` z0W~2~#sknBdOZybX3ES0`Zn(n87PLR9g2njYy{Pj4OH7Ei>At=2AJMl#dP?F z_of~UBPt8=9Uo5Hr!`t)xESVvhEHdn`tTHXK{S05o#Fj>DjS~VDvQuH)w`N%sH~0U z8y9BVX`Z07)S$4UCg`OMj5bPPwda$h{OWK1-yiPa(xa?4ijHm5AE(~@>woyA&wcC* zL0N5dWwmisS&dfHTecb?_LfvbZ}gV0#?%x>$3g|YW~jjXw_RAbLV4QIP@FZRLn6LA zI+O zxq8q3DYornD*{x?Is3AY=}NN630=4D&mYzG?ENS&pT&2zhV%%hr3!^&L=FAzSFQSn zc6Gg^$oAS$Y<6w!VrV6+3~sD6i8v6x3#JmkCMr{*JgQ8eM45g{Eo8FbWKgCQ2U?{} zPnt5-%u%$Irig@kB!DZwa}M=pLw+M2zs2UEgRYO*H!-JUPXlw< z)a#6W9u+Rm^a;bupi$9JSo9MTdBZfnvUbBLOnyC?X>rF={uJdk541afJkxBhT7}ZD zW~8Hioh|a0BtJ=wdy+>oi=dH;wHrn!k%ectTTJHxin*F|qU+&VeriP&L!&RYN1r~y zr?hp8hB=Wc6*or847;ue@rQTQ22BGi9>@nzo2y}CUrF95A6C<|-d$EhMa`2d@u6l_ zNyB71R#)(2hJGGSSK!hI?;%1v;DzgPykFsJZUrz=MK+s$*2RgXOXB@Ji-;5(zc2ZcT`gwzWuGt% zUEk<~sB|4P8rS*MlEX)wi`%2^Cj)gbYtDswkTh_a(ejTiIA8k}#$)Bz6^AJE{sS75 zHmi_}I#cX;WU$>iNXgluI=ykoH%I%cd~vB+e|(Eo7)NsPUBjobKy2;Q+@O9`s9y+N z8@(EbbvU*P7mij*==UU7G0w0lg6-6MZqt)-2OBDdtn}G1+}bXb7;~S)*liLxaKSmj zml0T-7_c((+*PR0QzW`}92!$>Lcyoc=s%{;VVRX0;{^7>s?6 z`7<-2duTE%X{n)+>vwtG+SrGx;rorCVGO3OZQ!MTY&bNG!7RG~rC?(*l)`pV(#Bvg zj|}zp!AxY2?YK|r;5<$6%Ody6dz*Raq^S?iLpP`hK&%j-FH;Bth;rM3P>p$}Qm?%D6;g$4?Qq**r;W8k1fczqgHvxBZhpjk z=FLhd5rm$VD|!rF5!W7rFRz=Fk)p@W70W<^H+J%m;ycL@peCw6iWH`UbJYs#P~0Nb zA1vOEv7#aE)yzuZk5NBIW7w1G46`PTqvc0PoxZHsGHa;mzs88=dnG?U3n-MM?7FrH z7|oap@je#MK{s3N;^x#etXpxBxG90&phoGLkB}mpqB1rYI}YNOEZ%(gJwwyJZm1FG z9iqIMsL#k$!Jbd(I?@jh1LfutXF!3zShvgpT=j(ebE+CEA|I zc`=YKYfXdvoQMmKO!>g@DWqv5=^&4kr~Bm1-p9T*)(niZH;FO!vIF-@}pu^Jy4Y{0{{ zWg-^sqS+N1W(Z;5;x14;W0r%MM>8&inQ%2WY~l|q+wGnVPPA!NETgKfS!=o9CJLT4YG zC+T-1S0(?RRh<0@1CnzFg+2~$u;`U4(7h)?c9fTZx*~a;05=<05NR{ZWf8|!m<&Z+ zXx!Z`is(6+RuGC0(w^Pa1EmrS8rUbPJk z$%}9C1vM#=uc}GbIU^rW#9~cYO)Td*!l}?+Q!tH1Q!iwdC>&N1c@9C5XoS?}g4x>3 zg}%Cw3tctOW&6HtSAi`cH(9}5eil64qWtKjC^X4POO@f5XaF|Bh4Ggr)`%D-G*2A~ zlNuK=BC`>iC7ScxxL{?bWpqdtOGs&C7dKcxh^lnnbE%Kb)dAw_XWd!~wK~WDb$X+Sx#DfcM zl0i8{^L8hZqr@(y9Pm()S`v6ZstAkZz@9(>f1(KzCPV895*gx5se5PZ@_oq`F7!s< zpX0CeWr<06VAgwIwnKNjvt7#NBvFvJyklz)SNYlt2RRH`dE~0l{c^}aOB4LnbSpRp zrLQURtX>`d^Lb0DmfFbre7RytIYLY$No@^`ES8L?c3b}5NQ#HjJ3RW$dsbl#E&tJ6 zcQyl7=ol_uHj4mW-ECLjuA&zp`vpIG7%nO(ym7C#@7Ga9yvp$C_qIq5a@83k$Y>2tc}ea`vY+?+s|k-$FJK8 z7409BlDg5Su!0x*r2MEhN@Sayum_?8K786WT&yK9%U1AdtAI7xz8j}-I*hwyvT=^BSAE}j%D z4B{gyST$InFEgtHSG`i)r5)r3Il7lJx@S1Z#WwQME*_0Nd~v01xjH-YSVjf-R=as( zzcbIgab#+)Fr{$K{_GN2FNvZvj%ZQE&SRM!UdA$bR)zx}CeohO9JWJB9a{g$Gr9PB3GZ4(YR=W~Y z1hD{%fQN~b_@-5F-(sny^!hiQipEwZeK!wb=K1XQu-_QBx0;9+*puiXiG#%VrnA;! z2BRord(v}!H#>cLz{aWEkV~iEwalY6W5@Q@I$pAE@d5)m7fC#1$$aQaJUbJ6&%l9b zl3J-gZC850b(cMr8Z>2Q3eIqf3~EeBcg2shOZI0B;Eh!#=n3w2Nx-W2I7A1W0y9e8 zGbu(dRn*}FF+I3x6R`MMe!!EwKVkmF@9~vN^?ypORc$01d!Eqry??JYHEIA)pif)= z)?kM0t~BhC3bV0B2DR-SKH(d@m}E2c90+QKkW8D5UKrxXO*og5v_G~-s!W7<5bULk zSvB2+fd(+{?gYlyqG}jl0IA>hJ?mUwcE$L5H4zx!k*vNw_@z((#{1s=#ozw9uh<5C zRZ!Z{j%~@Ow~_6~;6%2!B4T?w;y8{o@oD7s9>vu&1VMi#DaT30^b)S1T?7e$ zxVU(}9GreEyW+b}JgpwCVuX_j;H1WSdCn5)pyNLT3tDC!QD^HjTh z@GVdSUNoO7@L?C2qUDf{Usmj(Zh4KiTk)=G!k2p$=>VJFEMa#m6YKm}Z&RJ*2$sKQ zciKezEq5(0BD^NVmrb%hggPRm~nIHw~xQ*uq5BN8Jx z8y*n665o|DVf8>*C_J_re&#!-8LqDMa`$R4=U01qfm*Mrxpx0C5sL*q-zKxY&6uq_ z!faFY$hC0NdU$R%W;0HhB}XPPP366I{66E7GAn;N+~p&^Ho1;o``5dO5O{6$c=LsCS6MYq9}dvT{$KAHlZE*zUCacaZ|#?pTBD z!s?LLSPO%lhl7g%k+42SPZV4)u1eg5+>%bCdEZYp(WEHHET1Gz94{ zqq!BvvERp=J6xr?gKt;(-fwzqW<>bN!7w!roz_(NYYJaWxB# zdLst>^u8^Ng;C<4vkLLIeY;}+H52<$k6+%+^WlWa?{`N`OD)obxNdZyeReP|>^%M7 z4Oaz#mUlW2^|r0j{4GnHPZTk9*=cD(LHf&Reuc3&|IeMNXuc&Ij7CLPC*&BUx0+w; z14Y-T(HlK`6#}vo!Z`n=o=YobKNH&p5}k1;khJJj2< zN++{?X1tS=@;y$t)AJPsY0XZ49+X6dv3K&BcFh==Rl6oi%cfNb$pRVKUMA5VW*zXK|+N!&M%3!mBSNXGcw@S$BJ_}!Y?DiP< zVSq~}TKV%qNzIN*mqrfk3&<`J5|lm3eYVCiS3Fs}6Y@~^L)-Dmg3fFs7s9qyh&^a{ zq6jIO3uN%hL!Jv^TU-CisARRc?HhfStV%Jj(JFn1DV;V2VjkQb&hF1|CmV$K_IRe4 z)oefWA}p_;d6DGe9)fLC6rgth&?8cB)Y6|QHTM_+COPo%Tjqr{2I@^6F;hjeti~Fu zX0I!`d82Nf&bNmeJb-_{)uIDlRv9fwbF5xZ=s1z(L4zpG5q<2)<)q-Qgshrv)BBPIrEKEh~Rh)_*|Mt)R^JhP7bI?}EHAUlloAuDEIO{R~eVBl@ zB5?xRqx`H*Y-u_o5$7oEO5&86#3{7px9l$O-+dS1P35+X7h(0h70E)8Y-y3K{4+PP zp@?+ASVejH->k@t7m>;|-7g_`(OYHO>W!vVERK{jk8PoUeSSM1kJybZ+S1AmsYx;# z5Arwk>qW$p}o`jFuroT}ywZ~(;=t}HLy?WTOjW}a+*7l~l@HRf!%PiBcRN_&A1 z<;nHAWl`I@oVozcjuLD@qt~jb;*}>MBQmBL8($;;aX!}$6V$7Cn4qiRYKB>}#JiIp z(zLn`6SRyIW{Kaa2XU5|!vsU>PlS4Uv&491=8w+$IfAae+I7NCcu@5H^jBEc=0UZ8 z>SAhM^7^L7UT9i|ybsojELPjh-X@eWQ?pirg!vb2UBN~$Az_NH z-pkgRU9wWhMj^MoO|NrbOyUfXN^N@`DW`1)W7dG zlS;L#*x#@us7X&h>6BAVVW<?^OY5))vhaK zMJZ9ZrRA_7paD0BOzS-2b`Ys5D{3oAQ7jD-pB+*m`-B9jJXcVcG%%$xb7wBm+9^a; zN=Qf`QtvyKpEUWI#MONBU5kq#r^9iX$& z@70rmmn-SrD)7>A#FoK}Qj1y0xNU^^FL&?I^HjaLqd85So_vX?G%3ZAlv`o=%35v@ z^dLE;QXVVY$!qg@+vZzMC0Sh^JTA0b5%nOnrV2hqze!0}QkI*gy+kSbwrQA2t2%EP z)J#}C({Tm#cep^uGR_ zrVDgC3Up^>fu2wPMDkl7Z~c4TU^Z!SIe%uY>=?e5O+h>-T?0(m30*#Q33i5~Q zNcZ0g^7AUl_vM+^=$vn2U9!t+FwE$F5`eX|fQ!W;wOy!(D)d6huUg)!9B$IOrFBVu zjWJrSjHw*3Y6S-{&6Sa1IRoIfl*80lN^W=~m7#Ar=xaiBRlE$=mXYpCc+}Zp9EQb` z?%b?2^x*8+Q*vc%XU7%qnSCqOU+um6$Y14lnt!3CJ?r02b5g`veml*ugQm~r_~xn- z`f5XqZ+|b%4|bbt^yE-B7wIjxO38Ti`B|eR&&Gz1OV%jC*mx{BVScmjbx=!IDOFW` zP6nssILUgIlKdzB;@8DhN^%(*tCalX6;>%-uC4pccgo~xA*Zftm#k8{yr%@@8dmBP zXnfFErDV;u9bK!{BSNO~Uu>CBbgk;8M9Y@hA@@s*H3XF9SGD`a?*qM7q$$#W2J1{B zaCtY@tmTj-BDcPEN?Mw1xULEgpRHb}v}~I%@d_PE(_=HjJrC&r^*Ag89bJ#puGiz}r+-C!Jw&W^9s`w}iU~@)Tz}3>K+-sUA zii)%38eDL?{Z&bNL_RNn+?v5oYYqNA)H`QQKA15ESOPFBf7Sp_ML`ZNP%vV>tR;R~ zAMHMFbxlIEm1%dnH8=D`Tmt|PY^IJKjhKws>`;%L>DTZAC}2WJLgg~Nla{|?Ezq%% zF^9?_ub*0i{5()gAZXE9>uwPf&C9eXDL-p1VxRL7hGM&gH7GS>0N1C|wDGGDem>O4 zXr8#J5KnGeH}sW^o>WIzveO{dLuN6^4JjX9&gRjX>+8;#YrQP+8&zCAch?2Q~_}MF25pGIL%Psf@y+SHt3(6~2b{)!89mi&78k?e?NsFalVn9gs18&neHzZxnv+9WEy)taJ_ z!5EdM)=ec2`f5<=io)f>X4QMG1xAtt~fYGK#yy3G^!inq%P&x2ar8&*D5+gCf|A) z(=62LHP5i3V7=hj#%)dPPQxe?IbIW-Sp}xmUeMgUSDZV!d~x3bX*8u zj6V+!(t$cKm#WB`o0X8gXY3nkNpFvGg(5WC@;xGR1$Pw}hK1!T;be_F1B^zPWqFK9 zv1(%Efr5Ze2waVm$o2(WgQRL*6Be~7GFL@A*G*I=JZlzMz6rL2#TkM(im%>hV4$N? zmGq;`oAqr)!`51(p)Wsu(0AmjBWG*uG~<)-7JsTk;*o7Enl&D&`~7#yRsA>eM`5md zr*Vl%K1?Vkb%dKe0bwQ7smDc&ajDaWb2tizPrK5u`nL%#^f zU@MrY2q#5Kfm?2>ZQlle?E=8OY(~AOQQ!90RQNL@p^0(>gO$-_5Wq(#g90NMaNE6S zO`;^0&9e;gjVUD`d*fvL|C^;*Jg)fE$W+JP#)fRhIp+JFv;H`A zP(8jI3oJ2+wiOr3Qhz1em%4)mfy4eupGji&f>Gk7`-u-)$%{fTlLRLOtD5P_bZVLi z2|elnbg|#|&-*VHfc`F;N+IWJRmxs{I%5cKC#TQ}ZQZ<8Ifnk5`9<|#_1k(XZanLp zVUf54O>FImXy3jtYY470NtkhlIYfG-Y?sZ5PXEHVV72`Pt+p3SMg@$Pv0s+rWb&R`S@P04I?To1z2g=t14vpYJI%J$@|eLE_6jc>{FtYzjQ z$xO*^yiQzNWokFCjv!>ao3SGZ)gOLnXGV@;+IU-Nd$+_ALE7vh#Efme;J-yJPc~x9 zLpgxeE=LNx(-|iub>flD+V@Z^gv1e>3!a4yUU} zCPn-gKGQ__!Fz%JoQ|S|p72!1-!;xBR4e28glbc`f4} zv9l`Kca(@A9Jcj_zZPdz9?w=e*pz+jWhitcf(vK=^LNv8;vQ{9i(t}a>_h8&;QHz1 zSbPquVXIF+#gz1}k{q|y&oHF}mpjJvIKVroCrc*r%8c4O{dpi)zzz z;bGeU%Hrtnua5oxhVnF~Z>gD?teq z(p(~>3izyY5|E|J@Yw5-2~h*kD8c7j*)d?O7EFre^8Z|mUjbT71#rBgYATk{nf@d0V!M40OMOJ%eWX? zsV+zVvXP;BHqbUiHHH%+1lEKjZKJ61&Sv?5aCT2~=u! zT>^+`;{alUUni3V+fIIM;1s^dzpUwFE61HFmSR(X;D>+XgUHlF!3IXY2+Z~Y796E7 zTa#;?(JqEuMK(q(?mX3H#7v>{bf|;aX|$HCqH2*kHDg7pl}tAAVmKH#U=W+-GFOw( zkf|yYGGmnqnM)##)u00c9T@gBTd@qm1StLmxHCvgLS<_Yt1eNajIK4AAokk*Y$aA@ zA}bMi!9**FMtPxHea6zE#T$V$p&I+JgLp$Q0vlAUQc>Q;U!uHzIe1~3U{I?@fZ%u| zMp#39dSDqo<#E-CYUEfa3P#mE@|(wGJaXE)VW^HV7!37_+*aPuBrJC97i^o$6`DV4 ztm*0dv$Vakk)l&A#6D8B94ZJ8aUGiAS!e_R@4+adA7l< z0YIu>4CJqaj;KrU9%Cth7)uTjU|Erw&(!MnPvd6CKJch*W-24QI!PKPcKRFc5dipa zoKGN(cPTYBrQ_#g$EO|)bXpT*md7koFY7d5tIo#>Q|p&uo!DX1A5LSThAyG@y`yZA z$VRCyV;kOIGXCCUFX6p%Hll*AuG12$NV=b4l$E+c4JnqKF_&$xto%oosN8@ojJ~q46cmZ{6h)_vC z1uMhQ;s+j@f|=GMqn@jV<*~z>UuhYkeI-|c`}KX5#jk82R(&JcQR`{V7$1GDWn+aV z?Va-Nv|}bbzOfbtS4Gj<&F(JULkISH z=Ig4};t(STj%DMqSil|!7O2Xv)mU+XQR#HKfDmPkx5ibXgpkhi)Li!lb}JxJF|a7= z{RRzXcaq4l4b2O^^uk+4xpchT2qovHr#DiqJ?no;V?WNboBmVA6)}F^ug1z12Ws85 zj%djgk(VZ0?EeGm(a7)b-om@17bl$V#IMe69%oC@)xq;vWV}OC7^tldE=Rv0ZV~lks-ZvP0lRdTRVH-0scGJ=*(`h2jDAuP!Nzr zN{Wmh1!0ywNim!((_2FUwX>c`pbOb-BGP#{rDNau6@u(g3s#pU6VbS^?+>a!2J;6q zMVrIoD1_RpL@gOi8Ostp?9{Dz_Q6Igsq*^#IHdz~KYyb8-=YDFyJ1x43V z+uk85rnEoN1ZqrOL02!P96eRE20fUDC|T=~a`BF%gRZ@uHm#vUiF1pG7The~-lcUE zT}{uo4u0!f$^Qk4< zw37a(B`JELC|YUL<(muou6{Ae3*M_z_+v(w% zVj}d9YE;Rv)72PE#L?jnS`R@bR5EXZUA1CnSASQ-ne$=K#RO7ZKWw{=r8e|5I>e@}L@Fbf zP7Snq*UbyAcG?Fs9q-pJ@9`<7KDSIDXqM`weB3S>cIwPW-D+;?Qm(w)TeJ_R`}28z zF&WPP^9$v(%GBt8Lb`(oOfT5G{$qN8w&daNeBS4BH@hyuQ_!3&#N)Sk(csK1lzigz zWD!@J9 zo_Mab&c2N&9A?@oj9-4BG^HL$rEfLqA>j7|ydO_j=WRS+nd4e9B`uxz%G0-Mn+)c; zZ?R9G)lN5#JDoGoT+{FJX!0PI?qD{U=0jFT*lEVIdEnyMptY~Q>&9@d)Y;T*i}_8| zm;#P$#epx74(7_q0ULRO8!OiAvHye~W&u>9&xu>S#dEhEN~Ca@CiQj-gwt*ja5^*_ z1*g)q^G=qRT zMZ!7NIv1>grI;b_zsqr+&z?@%iHkmZD&=%uu1{Le8AEh*o~J=A{7}&cIR$tF8&Lh6 zq)TKyq^T1J;?_$j>dA0UxPx4SU+%Vhj z*a9(3FTK5S(5ERg;yJNzOqT825z~SS!y10r#qw#}V~^9bNi+0YYZ6VF2t)x^PYgWE zNRa!fM=HP{zDt5Qu@o>K+3p;wkfAz#F#7>Z)&zPr*&Hx=N%A`>^}?Hb62|swR6yDC zj0QSM75sSV^aWx^Gs51i*3oJbyn^@Jg7^7RctBwC)qsIR1&kKr_zvcbj7BE_K4L9u z#TLCJIZc4tQIn4P51_Fp`5a!hx5YxX46x&gWt7D%2&g;fEgv$TQu*~MA$iLXX- zjvG0#)q78}XDp@otDC-x)6`O&~i|(3GFtv&ZSP{Zm;uU>;JsJ zQk|CMyR=T+CV`}99G2C}3P!7Sd#IIEcB}Q=qQlwsI)rgq_S!8BjaQ^rq^8-;6!I*w@RBO$@`LqBWDx` zvETsUdZOk$J?j7t5t{l|J$>x~5eFzuU zZQ?c*u`=h^B&y7w2{N@ouUKE23tW(I4#y!a`X2`#;K~_17d$bel z;_n+4{aFK8`Cd23pqJ0^5Ol8{wt`2J4TcW$uveE1`U(zF$yET>3DkoDj@9}6+mf3n zk=g&jRoZE;5)gKpvjk1eS;}yfQq6hv%f&a{f;GwwEamJyT#FZzYW9P(oP(dlWD~#4 zA5`_PqG|ejg$E?wO90THW-L}$Fo79>qFUKr-0PnOhRAu(SpK3gerE@)GQ1> z2PH{m?Ih3h6jNW6zicWwWQDOoBY`1Ug>X|=ro8?Ydp+qXVB2{^{#O76-~cSkGUlEj z|MI}}3BYzP0Y?4O9XqKf>X^`3eW)`qLM7Yx z=g;z+z`1E-?S0wM#9jOTWLiwh6^j1rK%I=?p~rUT&zJ#{cQ)7w9JeG*eQiGJGD^=6 zrgnZ9@mZoDtLC31l4U*%<$RK%@>w2Y-2ADaW={s+h2n5%<-45B1`Yg)2**r`<9i(>=#B=cTDGI){sk9(5cFv5#?IJiJq2)o><5kA?e z+K2N|&CLfjcYz+0hB`TTu{h&Jrsj5*Ibdzt)!w_Bd$H6J$^1dh6(m;ITCOmHrlRd& zz(CNe+Znaoi-TSzV~L7jjTfoj!HdvxFZSUAYZ(GK@06`o`$8Fiyv>LhhJN;Gjgi=} zQ!Ba8WP{xz;1k*40$o3q4dw-8K0BEWcZx-&EHhKU-+5-#KyiqAO*KGD!2>E57?UdPE>F^UBMZc8c?P~Ip>!J6qMWi z51Fdmy=AeAC^7 zDRl<6D4p4$&mX4$*nKMtN!X}OU`u^4MzWEFckqbTs=G2PPtY#YT590vNb6HT`IxlU z&VAX5ptUFtyHr~1glR2gAR_YkC?Y2u5tP>XHkOhH?Fco-QYVdyC>fc3pA)k6AK%G~qlu2KEgrOCKG>bbrm05bW(LHt#+W zilGHit-%7ezT%mb@f80!WQ&;MzU+Yt6u+kqF8;;0zBPAuF?|nG@vZdkd-iAdK?Jj% z!mqNOP4t(w;-N2~{`PN6TJ4(x$<*Kq0ypNhem`yu#=3yK>qt{5L-3Lgd8 zs&Tv4O{arlM1X-CR4R&ngg&@3#(P@Vp%5}~%LLzStY)?23vN&a&rpG!shv2!ie||n z^szmAbo$yrI1W{c=XyeL8C==$gua-g`%wCO5<+ddB;F$V=TcmW1d7qE7~Pj= zGvUshnM?tGN-}(2=Q;y|9B&hBLm)w8Pi&lA9AF_^6F} zkqa$4jAsbc`O!&{!u5{Ni74)`eg0c!9OW`HjYR>Q2VuO6kr_;eGR(_njlYGR0>GSt zrZ&J|^9l0gCWM|jvUbSGlsU32OQa6#HG5A}a6sGADD}Jso@bB;HB)}4g(deS+q9c+ ztPYnm)3;V3;|hlEyqy9(k~gKw2Q56+ws@R^6-<#hT0*_IR@>Ny#~X~M!JD;DYqS*M zXiQ|>fY$_7uN8^rvui}?`RwqpEw61t1kxl1V%xU+>GBN=oD<;#^oh6)kvphifG#SO z8dFb{VUwunze-FZB;W>EK0a@)04un#ttGIqWMZHe)l}ni?;Nc+t0ypG9~V&g=+FpC zCz}JSG&;uUMHj)J@%env>WVED2dXftT+_oMO3K?WS|%^&>t!WTB)JVnwriAv#za@@ z;Vf-HZv~_*O(CO74r}9k+vP%4L<(6I>QZR0N`ykFgv_#73CU{eqK>w}=t^g0<%)F_ zB%Ny((ZQv)ok|VG@EzK6CV(9L?nK)7X@x#B!anpXwg|XNF8AcB9sXmUd6b#1G34bu@(g) zihJy@<;dgRXmVV@T;; zMdoh6zhRf5S)OWGINa@T$$LkE-3n*KOw@alZlfD`~7dS=C0k% zWvlA8CFWcF!mfi+{lF~2WJfLu(dJ1vE~EC^09Lc(eeWI(Wo>B!3Ra6^Y>0sbq zq=)GM%9;WL5&{6o`HX22F^%u6tdW!vGOop){y^A(px$uM&t{nMJQIauS4?)XB?-n~T@s zGR^mpxd1BQF)n#zLm;qLr07j0<^K@4MC zNGyE&pETc)dvsi2wBOmD?Wi5a6J$+gfkZ)aD|;idjQ$nu~f3?%tmDTio8cl2BG)i-^tE}bDsJy-#b09~X)%-;e9ye~-^Q@VkIhLA0 zlw+By;&KwZ!49OJF=Gxa_(~t(8QPoLeXG4nZ&HY7w!9o|+&0kQM}I@TT?I=Me#oKq z`UKTBg+*+GMQ~^ySt)@gyhv#IEqeW*Hx*zOSC3lpktYSTirJb);g{nE3C9_I_mbo%Q+4elA>)E};X-$9 z|F%8J!|8Cg&XAcp)SFV}{-^w>+>=li=Ou1w z5Q>)%dM1rr!w38p&p>%zQhsKW0nrsps>f0Bw+!%yCU79EnULSt|fMv9aYF=*MG0z8=+-It~cF zv{+2wV`sZ3P1*aJAC9-1Q?bQ}G-sehj<#fmLDf_M7Wr=}F!{JaZanv=DL2a$H+SBo z&C!f9vushX9a{W`bb=a;BC+%x`l+k#H~Km_Lba(9*a!%ca;7Vd+){K0XNxjtRW#$R z`RTkxkyjC2BZ5_BDx-Czn@xrj1O~VN0fbNbGc~ zWFsAX-Z+q zLmb=MyssDC3dKOn8cEYS%T%K+xQ12wh{B(M_8HBe=isb-mn8tE-5>9%{6K5E2> zjGY^d?fBQr7L*zt`#uq(p#O=KK21T|d+3XTUg?RBrH zri03v2!nGpIEH&3`SaoV!(`mL75FPduQmb_eKRt61%{%z1fVE!f>S-hk7$as(a5?a zxG~IE$f>Sk2yF&iu7}3QVTvNyh_<1?n!A$5?|j@2pT!40c(Wkq*;1yH#o5smPZyi@ zWJ|HRdIHn#(6gyxNA(OxQu+mx>8$hA zRw#kPcHY6_*dy4K^Bx(@*jSz}X7@LZ>^&IYX$0fJ#DbMJC&1{RsB#@dkh{i^;^jp= z1ay5(W5n|EA`j<=E^X&F)zWB7O+>{;X6S$!50Rk$HFiet-wJW?g^v>bprXXt{z%I|zw_i` zQqFm#ne78)OVjc#X3l&5)E57Rv9~rgBRbUt)J{;&t#LqY%_g?S04ZCw2`EO*#PMSx z2Man`$U)MxYRJI^$Gpo24DGD{>t?iJsH!?#aPT2Cg1K&lMikg6w6E-1UuI<$)Hs`7 zXGj9I#J zRQw&rp9%!QWCnmnFdpqXFf~8&Megybxby|6)womwscJT$j;PyDf&Cq&STX8rskd_4 z2qeqD5O&&;v*p3y{3XeY^zj8YooQ>-E*wBNCY6|_V6Vr36s3iJIFPeZlyVwd#rTg>4yywB?T$u87K>ZI3RqcOzv*z8@4Bi1^s7)6%K(n%83lx>Rb=V4pEPRIA zunm*gk9C6(O03-uup_miPk_s&`8IA+WVcf;T6EtBQXQ>Kx6B9gMmt7nYm6|dHr4m% z^s8f7ZLaUn=@}OH+eX6H+?zw6+#{6sWuMZ_v6bAHom3+U^pW7#(G1~dtkEL&zU&Dv zcTzhdk%`z*ke~mbNaHLa1M7hG?)?5bo@fOt!h6r_f3^O2I@@Mj(1{7=NIT`D)^Z&{ z&7LvVR3^)`@w5sz-WuT^7Tv0;#!mUM>SMKr@g`qdsQ5I#Y*$~RhMV81TgBwU2gU3| zoj8|_1&nRvrtUuB;S6Kczh5+a^9aqMU`_Ln@m@5iVSMK_Kh8bBjOHiw9BT7FsDzo> zCe5E{(wu@7%|+=4Qqh&^6h**m%0VKN!no~?H}ecQY^14lkmM>d+FM2%4f1uPM;Psa zht|hvPJmAes;VKPPrKBz2Vq^p(d38*GQyC@)AGJ!z%9Si30FRDzn&0*<311Ymnope zY>fK!6cgaTqFRjqeD5sxaM9iob>?=u6Dg(qMd)W^R9MIR44&}wzbWW_!`v-4m!{CLNp9#&uuw;hwI(S zbG}vQTE!Z`)LZ^aHN{O~?KM$OW!6;iGT(7n-`XZ$ZGuq{l1vC7RcSI4(@0kGEs=DMLdcGjx3i@v4Vy3%FztW=TgA?=! z-~LUfCVCiJ&o^n^MxGX2nx>!H(dm#yGR42Nkxi0UL8$&+kP$x8H*6L4d*K%fn|M$B zwTQaSs$WR4`0g-Pp3AlUA9vjlWpU-JiZ5nmrrDI-3<<(U&8DM+Y0hO&C4>ybd`%C6 zL*9-u=gnZ-z1DT2zk&B0vkZcN1;3r*_8GsGWIgS-+KmfvZdQm^1LVn!EQGxLnpd)z4(Igr zSlWMwO$Ft)lv}T>KtFmjEDL0(nHLTkdS4jFCWRH-~0e{LSDs8xA35tC59S};=) z?39{=fGzR_tD1jJzwrwAA9O~x5;9o+wr}S%;F9HRj~#08YzKmxZ`ZHQFoQh@%z7gO@tE+%m}ZH4CwF(ytgiK)j!ZCatvl*mR+ zm-BENt11-79Bew63^sd+)ESVSUx;++c&%!rr42 z$r9SAE=ekEA%8$fHLF%la&xrHQs2is>4N|Wb-)Iq6vH3_7 z6$lMYY*D-A!UI1<`4Jly-rJ`&QW8cs2XsE0&%UUcdT95omYZ<>0yFs{pLWg|ZuE%l zrmzm3=bHeT4mK8B$~k%V8=}7TK_;^yRA*_GYK|3RkAr0j(R^8vO+cu0uv2yeQ#OiC zYk~Ks=~_1w{bEB{-t7v(qS0xw*%sG{OTA?ujDq@%<)0Yy(YUi%0k>IU<;{<p>Yb=!_PQK;?bV!Spx}lO^R^{BmTV{>Rg!?PgXAn< zgfEo9bHWl)T;h_je38C5L0bshH<3Xm!73_2A*200_A0~HFpiD0^bRr8+U-zKKk}E@ z)L3FqLXX=zsK|{HCfwh+$5&oH%JF&2>;guOLei9z^j||c>A5K6o zTxnQ)p{JI3Gesd`p^FX-ID*tU)%DnqMma>KwDBEl7SI1+q}4_`P_g> zn;|Yo5m6N}A#l(?G7j1>5LbH@19rg4i?eL60>k{5|QpQ`&$q#^a# zRxnB-qU20J=}Xq=XhzcFRzib!tWDE8gXSX~a;;u#J|ZNRV5BSIqLZ-pA`#iqMPfxS zaz>RmQK^PT6ZE`N4UH!2x$%f-Qj>_T!J7(x3e0vK!pm=YP#xf;eh~H4+{V$w!`}wQ zpe{1M<@l&#crYJvT0kKrUON%*NquNDN28+^^EbEpi?s1VRKG@#Spro*cC#*;SG4%c zRFkxux<_aMi?7p%<4Y$8ZT1c7ie8frc7R0Y!$|f693Mv7Ya2#p)mO$nBg04~2C~Bn zi}32fs_d2`*hrm(HYH6K)SNJVoF zGJRO`?=Ud&wn!n`K8k%Jgyu|LiP1lnDlT9ydQh3JUL|19sN;Cre@5CE8cJ;Yp9l)( zM7|KhC7cZA1)bxZ^`fB_0GB>JZy4rKom=#!ZU??r3>Fy@FB?KO$c? z_Iu;NhJLqe(kv5?KG#hH)-GPYhk<-Ccc*W5O+9#PcXmO}I z?CCekMY+Q^;FAJlJ(&JG9LIVTXG*|#l)~wPQM4eTWsA49X?_4_`hjMHLe*Qs$aJNi zH+oCYO;_sqXm4HXV`7cN2uz!*JgLTN?sEze`3!ee2iJDGT36bhLS+fjCiiA_a_S#<-$u zgK<^f7+23n8Ta|4n20+XoEYQWifGeN$QA@n5Lt{=)7GJQh=dly6Ii!lY_zA?GJ~P# zqXgKXI9~0(h3OHLMF_z9yH{54E^AmEe|L$$8#6_;6;49p8m8z}Ws1BTDBznwYA19I zi%ijz=@7{|E*6F<)oI}!Pmv%Kk=hagKUyM!bR(8XU%T%E;TpP4&)pB?d4oklZKkot zSmYE!b#22Csi@CdJlZrw|Fe^2cjR#@;eMuhTLB}KLovWYz^51p9pNSvG*KzfmAIlk zqOFYsMO)-$>E!`l`m7bLx45@xg}U6G5jnn@w~NMiytR;Y^_CqS7nSm_xeCFDwG5Jf zQMCKN?M^}rg%mC9(=c~$p`|^_L8uibFNRFU3QeYaB}ZNf6VO)-JKETs`8aJOX}E+* zl2|ca^i5N@hJ%#|HRL6`?T;b<&vE;I1Kb1M4=vE{GdyvNSC@Ul`fe!E@Me&?X z^KeVsn_xt9VIFiEt50n{Ow@%yr|{*zmj*25UsNom z;Y)Z{v6HPu_Ht3%$Pm?3Rh<^C8QL-q9pC5V)(ZnI!m6K*$Q<)6B7?@^A-&E_f(BLg zDQo{M)4JffW;#I7zC@lN5M+tdAvRNH(;<0H-Z&k?OOiJgzpq|8!pvQP_OZ$s7!r$E z*I5P}ky=w3VZ6k!r9rR5>qdUk-ImXY>;qswX_^Op0z$i4$tG+vtxl@=$sWgam zZ7@-`f?GXJ3U)QCKuWac2TWe={!#8(UB`Sp=g;V>?ap+4JR@I~>nB*xua8c$;|`#X zaTo_r4-d)LpJyV(qy3rf<798EaQ}oDVo!3J$9G%4JeJi|{`eK;I686bbc!Yh;}P)|>3xIL7ILNd;yn zsswhF=0v@};w8A`8G|3;b6_|bXv%URhqTu#$b9>K2sUR#Q))Q-;0!d>RQMSXm?~v1 zXb$>VZ&pr3Y`~7rf zNw)kWS|5eyMM4v5BSl*TC@;GT%a(CR7CQ9w*Tro}{n>Cp_HMhpVx^IdE2efGKUzGumC zel@Ym@7%M`KKtyw_S$Q$y?$*4pL)6!otZt4uum85x!V(#6bv|*hPi^688!-Zb%kz* zTs8+tSIV3I!39T#A(o~EvnSkwQ?|8K%6<}Ba9C6k*h>Zj%X3ZBmj2e8S+?}oStm9T z80MNhjMxt>;t#!|85S>fEcrd4-|P@A%@Q7ed0o9vk9_eUdGIs>s z?gC+M9?dgJN}=U%MVL>#rPz=cjMXTWdwtn|vg*u!MC{TsyWstX2+GanZN+JtXbZX- z+aeG%wq=o7;1Z}!e*p9>AeY2Dh;!Gc#7JTed(=JZ>mZ|J(lyNR55yj)bqKGCn2 zsHS+$m##(~;ta?>X$gK_vej5!xz2`coiJvF3>(TzuNh;JHO3@gP7A)AoG>9*I9wwK zCoYWG78#R{@k^TU)sPDlI!0?L7v^fIb|RDT(TmizfwT&5L$93;D@?>2Z6Y+nI1wR& zH~@eFkoq4EXF!Xy-mb&Wn+Pmeqt%I6)~-W**G<8;7Xf0nJy9-E7dO-e^u@Yo#@8E} zDe!cUNWJkP#sd#AbBuq$nViLO9xQ&iME8J}hzQCbDm`3~EOf@jPja4%IL8Ud4sTj~ z@sfB*^o-e6%|6PjO!V&7L>rs92Iu1=TA#0G<0ET`5A3amu}E3@k9Tq_m;a_|{5%?4S6QFuHrcw$`gv|oL|a#e zpQ|mpWD5cI90kw#+4_RP9vg;_{9Nl+)C?it7OJ)xc2olUiFHu`o;~tF_mqCJ)7a1z zd)BkM5({-kSCYP}VeDBD6@=3S8*@#WPo22JR})C(_>$CHyy>>FO|>Dqg*a<{bfnqD zX7YP3dKw>+C#VqJ*DwjfOzBUWai4_UE!C%e%bzAIQAT->CrgoiXAMh{$gZ4# z)oo#HV=IDQz0EhgGju&t1_wgeOc&V$eU;b$+FYv)LWo$Qo5Jv)*O_D-;m-=d z4L^&#zD-Z(8!eSh`!p>TO-`_$G*f~3C?}~gnF7}h+aI|gVA#2p>3lfuI#!M8*c<|H zfAb}o4&F3?4$mw*Fa}R8%Rq4q3M{?&mqcF?Lt{WW{j^jP^wUyH(9dPZ+AT26p(=-V z<>i7!$EfZlJx>lyJwzH*jLSO2z#n*?^ndc+qszNocs2=|KOF?rX1`#ctzWbx_dQQ? zKk;Fx{~pWIc~9{NERBQ3XFW;6lHfbp(ACLo`J0`wVFin5%ln$?$wG=u*yLaylhjPI zGO39LdYc`*KyI4X!b-VEev$Z5ExitwtE=haf4IcK1(@5b=yS6D&~E3$<`z^a3Vx}= zc~*M|TTX(oEh2s-x~A1cD_)+oLSEmH+i^A4H(DpT2v~`XT;?h=vZ;GkJb!_CPDTW8 zEoOfn2#Mxf^v-KHG*8VVo3;swD8aAT`p&#jc38meU3Z%^%TsCB*TeZq!Hc?H$=xzh z1@9;ztApvttp`?vbGp?}Mb}!sAkN&eslltkGXL0Ap;J1p{TQv=@llpJZ@>06%N3ci z8V$8a-Rl8|ZILaoIc&>N1CeWRWQB-+ovW$He%o2L1T7Q?_~3CI$78T-+aMuZu>+#W zykJBzz*tyJ1n01Ih%x&NsY>= zOuQ+d4H=?D5T;>>%BNw7%6GsJ)=e~=TgQXF;>-sbO*EV{q}7OL^bZiY9Y%elUs6D? ziU5UA1prZM+c!$1OF#+xa7eF~#&nzktHBQGa*d^CMV3axr?wGV_zq4o(SoyZY*#5| zZdBqnCwC?#E=HJ4iAz{kvgxyw9dBEwLC0 z7JEd4nWg~T&RP|dwH#$B%eB-qO&>I|^No`5ct>!uR8&S5$joNj_dZ`Y{g>qtL*hux z!UxRB<;IWTKGq>qcN*5rN9Bl`_2z7=F7uITM(BYXZX&s`R9&wZ2efpU^Nl_vq_JiH zs+F3JlGDKiH+Qm*eE=vZ`Mn*(U&9FZ<4k=~fIvWRd+ffL`D1TjgI*dnQFk-BMCC?J zRG#r0l^Zotd7Iy?!EZL`?-selR>GuQLOt5zuh2O<@5ijho7VUQsZE)q{na3oz>FCc z>7wSV1u&=IqOy>_DVFf`0xxEWA$dcO-au1a4m-xY-h>ZiUy)y7BX#8Od4iEDN1-G! z^SsoRz1Nx`ASivp422bUfGYBL4hJ%J(3#@13Mv|#%nbWtlUw84N(BdzDN&(94{_n{ zO&K4bGsj%K<#sa55JTLPq(-ov zG#3nq?F>PfNF1w3AorJSWa|%Tph{N-!rsrZ>XP*Q$Z`GJi~fjEI)3d(1brV>N6O;B z{Z4JJWo;5xc%99PLhRV=cfYJ=P4J<&j7}38hQ87OWBtPc7!$)3HBx`JeesG%=I)<> zk6w$JhpJ-Xlf-hz>DwT(HMpac+5D06?SGXz2$L`ph5S1x`IJg3+3Lrvxe{cT1;5@c zjRK*P>U6z3rhfo-9Pi-pxr?6{eM}WUnfcdOJ&tZE@8<55i=PZRHl2t>~Slg!j02MQne7BNXJ9?hcpY6V zpP-$$0{O~l|F*Z0&|DZiWo(PNrFp;_NvkrYY6Y>>n?ljsP5gIGF~jKR3`E!Iyx4kfFDhlWBvm7G&m41845fVNg* z?Ai@4(?V1U2CyzVv<)fb$kP0)_}-&nICJ4^S`$bo0PNa~d;+x1^5LD+qR@j2Jdiga z(%wMphR0d*ajAnRUQT@t4h8j-zTRexU`QmeRgU}KiN2p6?q6(~=a0{f7o&OpNqeq@4{!&<}k_kBZOya;uYQz)_?;M#S6eiq8n0 z&QVL94hOVZe=qVt{k@YX>0LdaEz}Q4OJSTUWwC2wniwKz&x{h(@yVAR?(3S?K z84b#YoAO;F!JN~z3lz&BiH6P}&1owqrueAw6y zy%XCxBR!+SlEPd-0s}*TYoyW3%;=&iHgrC`h^P1uuR)rkYvB&=gg%!$F{e(W9PHG< z3pE1xmMaKJus{bRE5L0zc2_v_kfA8_jRWTWEJasIE=3#XYr5eCG@VogN1|opNPa-TjHN@M1hQ(O?;Ng3)4LcP!@CKN zgbvPr+xd0NI;}qar(^4v63M%)Eh$_|r#ef=U6-{6^}m@7eXsA1Zs!RsEVO9=#4&NX z;Mn@~pU$tpX`5E{F0J0QrBym2o_7-;Ogt~Ba)A{pMdNQ#1mQe9y0%=JQ=b*0{RC@m z86O1SU~J=|@jPd3S0L5tTnz(2pz|UTo&)*+>lGU5&^x*Rr|-|y6VL*3g@5$lbl276vb5f_A>bfgF4nXiwnk5 zJH&0Z4^Ihm>FZ$!9?a`RKpSkBu)vg-mlh?S0WK5ECZ&jg?oJ|1l|5aGcn<0#jpxR| zr3hg}CPi!vB#p?aIfyf72Q4XLV_;H*n`{HImZT8TCi#x2|DtTk6Wh=bq>hM^)`SZe zP|-Lv6Um(YxlpE;Kq{}$V6Ll+c7UU~D3~A@1(|I{wFvM=WJ7?RwQ~ZEJ->qdAK)9C zdr+Lh<2Rk#H9k%UiwBLunuPLo#&0A7bTURWDFP5EDxZbG?*Y|Qo^^}JaXSNGy@zNL z5fHIvLRM&AK*P+u5}VM2jl>sBgEoP9nxUN1nv0JF)#T#i1j8*UTTm{!_&Ca$Nb7Ss z73B<3?qE1PGl&&ZKG>C;a5FF;%0|)sk_#YFEhrzw4vsx4f(! z0b4gHrg18X2+TLS21L3fm;yz`cmBL~2*1FdU4q_tZxB&~UmO;OXLv4=@3gLnd{65N z#gji>kZiQ6&K)8fF_lf0iN~-s6HBLxtEdT-l7dy2#ML<$SLH?lwW+U}t$d7i%xKS5 zOde?_ZG>$8mGD*F*@qZ^8usw_T>&GG>;Ht!r+dkpk-(px3yf!A-+K6r_Ug7Y#3YTZOQH^m zHe74UxAf4Yay@LMa*aq_L?hWig}Scao=xL~81JOu?H$)fCKJ59dH(XWG5KvPcGDFX zyOFsxf+sj+MY7CX77FW6-s2C*d=imUEC7JDJQ%(1MrTZiflo&()zPXyJnnmUndfxw zGSBhf1QdUvog)MTIwt28rg{TtY5@Lf^n~=_M7_5;V|s9Y@g*aF`Ik81C;O6Up?wKB zz1G)%H++Q7N}C)|!N&4kN~hzTs`>tgB_-DRC-1jxJKh8OsFp8*V^?g}>dP~JblZ!X zEq@(8SpUg)nI@$ws>R`l9H+t{(zj7R^3K8H#s2WaO%H?~hD5YAp<%cL;kNCx2}Nzc zm+kjV*WaKau~2J=@1O6oPxT2u%@KoX>e=kxtMlJ1^Zwq8+F8Ho)nV9U{2}^ zYXOV~P9s_H6e*;Q&At{bjV}On3H9ZWUdqT`G|`&^$4FqNo43NGm1yXql_#x4qpc8~ zynI7i33>%O@mFNet>5%?TjEIFwz)fZuJe=ugNz*d0)T>=X`E)UD5vxRVWGUoA1YgH zL^`^YsHjjF%=e;71jD@SmnW z3Sei7>0@u3laBY*>CAkuw%vSxIXB<`%u+enCLw`aeGx1y zi!yenK6H0H1JJNVS>|JG@4B1AR)?!y3hHNytf1;wgBZInfaU+pbS$dYlNw8CVMh;U z97R#&R45XO-LnwAE z3vx&`pd@3qvd8l=puT%}yzoHx-Ri@A&`&=5dPZHy)MIrlh@Kh+WeB_oN%|%6wv`4M zMhFWMuFyY5+t`Tt*;s{1WkEbS4aB_?DAiQ8RqC_gCS+Ez!uYebdbik!yqq@7l;Jo=%+bsBf zJHmUVI2E3Q0mXshCv@j$2o%H9w$dUx7zEOauu>M5l_nByrOc<5ro?fYX-zkIx9k1y z1QfaPri-_dY z@~HHF@LDHAMv1&ZD~7h0Z)#|C@j&<8!dJ@%?q71CSs5h9%X|=&1+aSK8F+2|cxeV+ zN)5b>uK}-c2tX-~hJnZ5YJY4g!A=U8bs2GO3|EL`vZukyt zjZV>XOQa$|)3pY~4++G)s8ck+4l-COU`zuJfk%s1!@N_`kSv}uKLC)$*y;D8H?3Pd*!t?~FNb1-P`Nq=dsxMe7|f@4+Mml=jmbZz4AUDCP(4pfe8`;ZPtA~@bN$vF&_`fH;s>n z$?!Mqb@_VCVFbh0CM&e0O;obG zRHus^F#R8Vm=Td*_ilPf(?j#gkSl`?w4MX@r0YP4BroqAwzdVgwb^roC>%NFl&&Kl zpJ-QY>Ke*{!xs|4UjJ%{PH`F(G;>Z85X7N$JqGv@P*9gnlIYXfoN}(uT@8 zTH5TGbf9h)AQl~%$-`FjY?etLE$gx@ZqMk-Ci}GZM2LEuwu9zHx3sZ#(KPins|SnA z=Bsg_e4#Ie`aQ)T_C1dcwM`GM@8v!ka^P6CrYa5LzRyK&5#67Jo31Vph9=B){pAjDbi;|>iQkHrwkBuB3E$wz4-8vf! znIMu~LcT&|xv}Wtap!f#&xo9>7M?Z~l4Voa2i85!17Y1MUBSAiR1vIO*L`DV)2q;Q zr%d1$!cL5}YCLTw&1_9~F2YfR` zl8=~~+01f?na!vVW;UZfd^6)u@HZ_|wotei%E~rZ4U-4a1phbNlh&~*N?c=-6eTJ* zMTyGOp27)@4O8W5-(ofmc@P;{VWMSklLwL6*}!|?B4tfx$Pge!w)o5Q#)GJS+BA5o z-HufuO$`L|EPgc1Uwb*`g zCz?yHL>4QDc+-V5$A9kjvy%j4VQX_if{}liPTO<|$0ZnZf@&lfc?)GI;@(1#YIzHx zRCjK=6n$BjEgsPwXa}-kn?!}I)N_-zyAHKR7F>r=UrC+p-J$gf*CBi%n?Cuf%3X&{ zkinVNkX@`bt+ZtqXqI5?IvRy?xHcT9}__gDDKRvh){e17;xK}wKFt&t_PpHGwT+*-Oy|IikKi% zfk>rXQxZ*fV2<*HlwIXq*Y(R{IvI03*VPo5Gpl#xLN{)gZRMXMZwky&{s23%cP*sE zI3s6rE|@)`ik5KVcHxyTilBr}$S9g9Sj(9;ib@dqmnkaww7tSCmi~&xqLrM=Wrd5u zl|`%TV9_|U;AETJ3+2p`bJ-4DmdT%Bo}yx*$b}eGmpPrOwUm>?Mr zyS2N0#9OVQ2QaBGQft1d;?u&(;vMcHG(8DrKx7hP41TPCn+qHg(TMNJ*VQrQ0uLRnf3OJ zVw~y|X2$lmT-u^gH5)icwmrrWY~j$olk5m3)g6}>jp^pEHW`^zM+t5D)5bj|$aLIf@s98z<>G0>YX(3!HyoK?&k*gE48C|Wr7?yAUS``yO_I>=kblvOcK{ZH&K01&H?R z*&1~$ZnhhSr)hhV3?+`gap`B<7UR-4v^}8{tcB1OcO`(kyo}8WjJBrys zPkj*NiOF_;XwaF7L9FMRSZt!L&weKw`3Xxruwkk8u8MgiMilwjKvcd=TDugEHGws#a4GJ?$?QI!30Gscp4OUBsw%oxjY#n3{i6qZdy zH<{hANn?ra}GQzc;oFW&`9;2Ma)i z`1ULEi-#aI^h12sPoSQ+UYPHM+h*C-%r{m;a>WI!q1lufwGK3K6D?B1UfSg{e9fCe^&=?{JS=AD7zS{#c(*Ae&9-u|_@B(|FxB`+25`8o1*+11F#cW8WNBV;KpW)7Kh?gc z_-z!92a8V+eBa=apn5qP|0bHl_&2RVwQ+u6#y`E#GXD8j4aQqOrWN)o5n+GBN_khlOB>&Gfgcf;GhpBmuZ zK_#RN&O>eB8l~8R@8_VwEuEMQg@7>X#H2$~UA8q$<#)&OyW8dW#q#^w<(#JJ?YzES?&+k|X?|(*nZEG6(NI0%SKyGM z)8!=~dI{Ckf%4+OQ?Em{Y?3b+e&17k#_-+7g*nN;Yf8WIvTJyVJpYXBM~dLqm95cv zU5P}$$W@}-IbEF&W|8L^9ps?Yf!j6tJj+US(e0X_9++KIV9m5T^MN{BrrOm6a(?W^ zkx0xcj$RMVMaj451`(A3^SG5yWx!io{?@y|x&w7=l?l!roV!|u0&&Ov4t=|7Cs&mx z1d1hSl%n9-V|}+kp$@ccbHM5eRRo4>x&p&vstD{>b!8{enCJAio9DC`Wm7_M5ebTC zlTQZ1Z=hv{m-u%9&|KEdS`T3ob74HD!%!IF{II=TLWZnQGml1erkCd z1TebkxSOPL2M5i2d6J#IobGyg66lkRV>80coTS9mE~1toD1VhDG*i21QZ(8AJTs;d zdlqW9jcH0t^rD)h`765eaxkXt$#-?o=535=N{7>m&ws=@UKAQ;1IK%palA%oz(~*t z4fs0eQo}o4YIyq=sbNz%?_!zb-@}Q$nlb!f@!!2{u>qyU&SC>SZp4PntS9`CQBT`A zetxTtIhm3eCdv&nhH(Lplo-a$%b9V`M<(-JCOF9ArPjZ>EjYj*n?5<8OUAV86&wa% z5ggoi6#VA^1{WOIKC&2068qu`4$`I7I|&YEZJR1MWKU>AOE@>CeMNAX6dbUcecl8I z$0zuL%WC}iPfKu+g;avWM#B!YfLfBnVIz`3a;S}veR)X^A(}sm3z^~5WONy~GST79 zE;_hZL|b$qe|g9TL<;|H!rp@g^a>o_rD>O{qA*?SfeYX+Q3Zt)b`2hw#O_j6tK1}f zl_PZqqG$DON1*bg-|}{B2cdG8R!nkL`-a6TPx>)a=>NGy2t5zN=6L8LJ9KqJXR64( z0DI)BuGj^xQC%YFRb5$)l0;yQ^WcsQgTXU(pW2cE*VE^Wu$DM0pu#)t^k1 z4+dJ_t{;zMQ6-a9Gf`d-0YH>2ZSX1sSWyB^WdJrxs;P`gh!Slo(~L#YHx+7ra~auX zRX_g+5&lO6Recz!27m&@bpZQ_Ca$RYY&| zXnz&GJ`4Dd0xO?z-JNjCgmTra^l8`KrE*MvD(s^uMJAWkFuN7|B`gTN9wWj2dr4R9 zzni-9j0m0XW&M`T0v(=IxYu-#j{2(A@s=%vpvlKHPEY)=9m#7D;g@Tahkqc|9FIk( zTma`sWB0Uj7ubzp+YTbucLAUB%%ZAxY}jJ1ceOUY=LzFl?MX!=K@L?Qq11d?c$eOo zGy&@&pNacMgRIK5Maj22Dx>>xA8OkjKgak=IBCg^u}}7zEfR^2`TU8j?J4i9& zYyoOokO7#DquK>&+yD%DN(SJiDj0yPFPXl$VRsr$oiOYIvWr@6(4GsrLVM2Z3earj zLb0UN7K&on{WL#~cwyiAnIDv1>#HeXRVKr()`~5r)6Lnurv9;&C#=l2(5h@JRpreV zTIAs*hmV;2CL~1`F(j2t;v_(8vyG%iBCIQoVK*SDeI>G5HBPSMHj?tPBPq-Ix(&M# zlUe`AI{+w|b)?rdY~Eto^-f-4NhHhexn8pDMrd3NX@y)9#EL!NGs|umzCZ?4z;w}0 z&5{j!Q%2BHAVbNrdu8V6U1nga+LqnzR+F{mGpO0gCyTY7$Y(QI`nFG^>QCr9pfu+O zS(LTvdX)9mJj(jXd&@md*xDvXm4rOo*ys+CPMbf&zcT9Hvurn505REO{0w<~Wxk}U zBJ$%oUBN#`1ls>qJwKP%OdtdFMl-AgO*htwmNp|k3k|wyAsAov1viKA+Fh8S+)lev zR^xt(e$puvA%-UZcrqT$OV!T*I?l;5gwfWmP!;Td??MJ5=n@kdDmu$h80yZKhr4Mg zYLyfQD6htY7!x%JF;Pn@wgXDcBYBs36c4ca%$T1oE`U7$dVrvqD5wM(UMxL|nSsL? z1QW$G$>ht=-6I@1>BckjiG48XxIvbGlXFC?BvXaY#$uXcHiF zgI@7sH!=hRioM!&ODd^;h>~K;-y;aElS^D@Gl%cdO{THRb6Eg?MZnGYBr^|;$3PLm&|LN2qhp&d zaHuD9;$XQ;cEb+pE@pSP@?`?UMIKm~eCoR!Y6Nnf@~W%^*UTs|x=EPpKZiayAco>G z_UOD(Yi%L57SBQ4wl%_$V{61AYo^WGHlJFEkZHF7!p8n6t3l|`&E5jrb^_6f7NVAR zCeP}scrIP>aC$~p7~g5w-`6jx2QV@IYSnu@6&*RvNoYbf!@p;A(kz7>CcjHp4wqj7 zY8LNCkVaw&l;J=@#3C*fiA~JZv)_(2oAcK8RrAexYdS2lS3hfCrvG7Q*He7+BjgXF zkJ9gQoH1h0_0-ds=kqV?5ayj;1l#fJAlL~Uv$<#eHEJ_P`N)`jl|mUORf~cV%d|1K zsk7x{50uw*vcVrgfNnU>h2;hnHP+| z1P?c_M89M5SOM`R=(V{i+A{b?(GT7Sq@=9S41+~`hrcTq6kpJjf5j~xAvlxf2*w}X z;%`a65IQX^p<|)bx}!JY`;I~3`!#M;2vzvuV9U~#Wl6S?>Xrw(kI?E#cEZ-9;jag= zK$AxA?GZnc9}gW-f;pCSuO^)xf2leAYrR$DAJDibDVL6)cJZMfg)7KUE1q`okDCJd zbsZ=kZwk2kD;>V+eqB%sK7M4K=5?Niz^WpKY+uhi#x|EDZw=4oCVf_z$M%?&4K?OeJ%;%+e#|kNrlH$4X)4S}>O9~2%7`9TLrJJY#N=(P{ zNt;PWgbb@0&xkUUIpHDa*?QB40maEVUal{Avr9A^v=Y5)m;Jgd6j`#L7x-x$22dI? zvHR0-9Idts23lO7N<$J&r1fzOoJ@A{=`c*ZYA6}hI9|>&^yy84y_b`CNW@leB+)+7 zW?xjtH1kZTI%@B*k>s~B4-=x%W8WsF7K>GD#>}3o$A~R-gG5NSD1}4c(_*n z19-Z_A=cVH5Lc2T7_DIz67m3{42l|`*b0DQWJ$4l^>d!6lNXnHaicuSTb7CYI^Pln z^tWJP@f|Xxq&^^~Y4N3xI$!n)pjx()xXS>kHC4aA1wCGBpl7Qfa=-vRkulyf=t+tR z&=W~B=m};|vI52N`N=1mZW-5a;e|?6pJfz;62&jcPnOB%3id}N5sGcFB`04|i?Ky1 z2r*p${G%orppw#rE&1t{y*l2Tx4VC~$-FI2W8W4Bd6%g_d-ZoYY@A9ezek{sU{(t@ z&uhJ!)F#-R5oQ@|fHn6m*j(*s&n9x`a@#6$8!~*q8ZPzN9~nmoZk7J3lWxsg+6nv2 zZ@*x8QT4Z3E=r9=XYsrB5BM2QlZ)kqA5Im>?t^iyTxhSAFuGq+lSTtNBCi_XCJh?( zyd_9bMBqa`<7s6+1mB3C7xbcwb;}1;)H4Dj7iL*>nlHgE#}+y_G3X2MHA9#y9T$&Z z2w=a=G-%;kpyuv8P}7C&U)6|szD17q!-+FtS*>i5tSPh52|LL+udG;$T@|Mrn`f^i zQ}Tp~9xrl%(adrIay>4lN;IfG_y9+(6-XYIxCfETPF`}cTrqMk8D%1JY0Dr9$&eir zhLQe#S^0j+nZOp|*kj3=LKlurZ1%mt>NMe4aymUQ^f!rD(zK5J)piW0!g7Q-VEC@{ z2fpZiRS%lJqE_&}vemM_?g@R>sWo5ZzQ!Gd2%^E0?WFb5_L9&K5znaH5Y;l&K3Eje zaOf}tZ6_cs3p&#qJnoX^B<%;Qc_TL(;|BXY!!_Rnfe#>EeTLE?CLs7egNA|r*wzQY zY(Z-f&Q_8w1Pdfu$O4IcEx-r<2k7!{?LrrcP)xf}rv)x6gdM5%3gWFrtBt6Bn$`vR z4Gp@ff+Ra}hLtFQmXi@1#$lowD@ofnjlkq?g@#%@;Cu@oVPYS0kbEN-AjFnR-F{F9miFqms;vV|xJ* z%Mc8p!qvL8m!eE0@gVyaStdL}b*5*+Lo}9ZKpW5D(U=O4wn-d#1X)z6@H8PzmL?;i zMt$O#5P47^*L0*@c<1%m5VT^9dOb&Yd)L^F z>Ln9DR7jg94CYcqc@PYD^pP^u|+7Vv$ z%Yhwt>laPGmkw%tgtsFhfe3wWp)i~AuvXJ_s6R#)G&>U%z{caV7MEFoFXL2sTlRXy zc8=3zpACswN%j#Q#h9BsvEGMXGuy{H(dGZ${NHQx!JZy$4YPUhXclF|O2&!g_hp#@ zIw$4Jxl%qj=4Pcle7y%Ls`447y<&k8kZR-e)|!FZX-C|Ka>o`k9m|%6D&p-}i}-n( zpB#|PaqT@1ta-ZUfi)XFRygI)^*pfVEEWSAy9y(s^i3XD^H4fB@sPg6!=&8Dta>O{ z?kk^(P-1I#Idf#wt1)O}CAO6UP41SWdx zY|Z?IWbKjt1OVJBSs{Kd*iY2YXg}fUE}Dn4y8T26SLQ8PLMyj5dRb-6ej*!E=n-FN zWtp>An{ELH+DLw+&vcb{jGZ+m1YMtIWV)W}j_0M&M?(p4=FGH#(TU%~`X3!#E(<@p zDUd$5n1rL71c$n;b#&9Oy-$=eoIiLwqrg_dR5{R7OMs2cx=utVT2g&ln%mM+IId}q zk3@xKUd9f0s3M8CBfZ&lfC z)vc+lx*hFMbw_o3EJt`AHKYLq%Z72*b>Jy*Q(-dTMaq z0q#rV`M}*o9lPVy0CD=Fr`of{`A{+dElI*L+GU{0a>JzXdb2ka8b=O{?&wuQ1dhzJ zqr5J5J=ND{cl1>%ztkPwtn20O$g-Qg&>g*6_gA_j%eD7nmrXtQSG%K1*K6GoC&{oC z>5XpH^;mB-(sivj;&5=n&3mKU_1)vW(O4ABq1+5Z7@L3_yK2a+qnHezEpLwlX9^BD zHv8k0`3$lGVjEdWSgm^}E7**+qvL*BJ@xS!aDTT%RPU~t1UxW5B%lYMPW3$35VMjI z+Bs-GB+xC(Mr}lvVNNDD@Wa<}nnRT{hhCn|qskNiZ01~`6#slTZy>8)VNT_WVquSx z2rWZI?ur5u+Q;=5k=mV6!uk)jlRR!K{4$4zKCR?~G=EB0dg8JdEHsP7UxUC*Pl2}4 zQ~qP`NkgdWGZc%DI@TrtI6THc&7QP}N@r~GX)=y8RvBk3+a%Mlru#9zV!Garw;qeM zx&!N;t|J^ib-fiB>3SOpBXq4u7@_MecmV3U|Ne4Q*HxyB>;=V8mS=`rGx!bnV zYd){%*s#v(N-p_zU0=n~&s^)1Km+CUF0!KpH%0s`_3NZS_;WpT+5#x|6d&us>E?Mh zx>JaPz{Ai@0D=*+PWq#})SeMvi6vQ#*~y+Fe2wTGEPmY13%aNHa8IFbI53)obg+1m z2AT9%mM&w`;Y>uDg+LcMfksHEI**Px(NM_^7dc-l(07kK5t4w#yAn`@zOaxrL8TdE zG+6?NFTXLaOD460!!q1m!k!X>D+VW2`aE##&{VjpfHM8+Ei{_J*!tHrf!wY_uVzjGb&& z%L>d!8)AuLF^m{ypVIYC_r|Q|Ut2t(dknB^x`Oemx`Od+(=(biRP(@fl)o*Rz$QhqRHMfZYxsxrY#e&%xU$7)~&$&c3+?J_SqqWDz`zayzTIN&1imUTL@8)tDUj=2{Np8`G7=OD16L( zf5FZeM|z57xz`Y~U4~^m`U4y9Q@y)XRz;N!TYYB>=Ih5Q_HBY6cBTc<$=lEk}nlqvN)9vKN9l-$Bb#AkhUdc+z^`a zq?Qh25?53jrVrcIymfz^pSC83N9#`>*Us#3QNU~_Z{4&Kps8t%tI$wK%b?LDw3k^U zXBcs1cVZ$DsB;n&66zQ#IqC@M+Ni@fLRYRyIiiiSHb^RKC0nDF3Dn_DM;#{Tx?Obx zegVNZO+&GwDq6)NM1EY4qvt6dW#m7PcU^n)MAzkDYNGEs?vw~e;O+=hHQ#~ZLaOYP zJmv*88I-D-}ofbo}QqGP#?lP+1V{Bq8Wlv*9w;9H3mGGC8#iD}Q8966B{n4H(Y<@MLQr!4anG`ASqv6 zr$FMr3@lRX&?f#eC!q>VSNiejDc!x$cb%>v5ecv`QvdW^Sm|@a-wP-;DSJlP{HziB z;ZH^Ury|V6;);V>zRG0LD=Nf{cw%PGB{)j@~@WHk`#KC+`1YeX3 z%DUzKemeBqmS;R>B8p|he<5^I#ej%uj2m4-Cgiv^>U4$dVdc4WXY0Pn@Mn+B)h;}C zawh5*KPW4XHTZVcGC3xslPc@yY}(S{WGo2ky%T!unmKAb&szN@_0gp|mM)M6&gmU! zU9&WK;q>6>UDRL2eZg|;3TR2DZJ4tGGcof_-4TH7@&4O z`2It;(~k+q4&@;mB(k%4Rd58(eR6};xn~s@br~1G?vURcV>K%RlR5R_xFjPMW5HyX z&OU4B+FJ(NZtlZ=*TIm5Z~-O#u#9mct+)UlD1JEJDaBmdEQezu%uK6aF%Ob@K*2&z zs&>$o!_JD3#1&Z*&>c#@SLFT!2cKXE(8@U{Ab}q{n$=q7w^duTjuV`S_a54em}hwA+4NpsCb~lbpC%H~3EIIZ z_G9P*;J^gw8Z6P z`;tf`Y1=eB;-=?BdU@KBHjP8uo8)rFxAZ(WgDHDRve6XD4EC+EH~AS;92R9K%39OO z40cXz)f!87uy3(&E*TN|?nC2+{4*Yjj_sq6g@wqwFsIagwTXyGksf+f&^cwj!?yE` zM8))gjWQ1qQuZZtNPMH@0Twygm716&z`pfs#ni9SXfgF`$U4Q;uUSMAp&4d}Dl$7% znE!d7bWnrQ0O00dMT+`I$2M_eCQho>BE}&NF^Jqe+6&Bv6g%=p=maBO16&CgPZ*n( zxkNhz$hKQtn1_A#(P}rl`tcr<7;Z{UMr+cRCMBPSCb7iCCf(@L9a#>zD|jiOg;wv# z_MFioBRc3)q-oTuwtujqIuVFvz%wl&k2q+2sZ9!+o-acu8Tk0D<_ zA5Lec8jC$yG0*nL*vsFzB;gB>oW9TCxxUZf^L-;sQY?uQtL2Dh!5BFmB2F$wMsGx_ zoE!;lnI>;1k^yT+zUGc!3&ZD~feQ21y5sbY<0WSEhEWnwAWMmCSunfq=&N--*&U%B z;_&nC=xcOk?pD;+YIk%%_ousVU&MlkeG!k8?&xpp`fRXcZUj5$bKTM3QTf^KsM7WM zV9z|)9o?<_^WD){SL~r9U9pEA)OE8vx=YtfUD;_kf1^A4TC+x57j1peMOz*0Z+Q-Y z>T5i)VYTA|`Q&mJLQ`BEk5an@G^T<|YysGHKVv z&InNZOr`I+*qO@DMCjZ8Rq9*nfONi{1+#I$wC-wya7@EP!@sI4&lC!_rr&Ii3$lne75Fki{AO4|80*^%EOkj2r7h;UO+%|_Q&x{1BZ<|S# zXGR5;+mN3!A|FRYDj-Zccn)d(u6B)7ZKD0Os%iprNWop$NC6EV(!Ms!sV^#{FLI4+ zl}X_s+Jz~FjU=j6`}MG^14Z1dqv~1KQI*@kRGtki5JMk%+xqdmxV6XzyRxf5RVr-b z-VR-H`nC$2wjB1uO@Z0;UW(6TOKm=|5jwQ;K>0R-<_cWFKk%?iKsC}%{TO-MtNE&U z%k9hEqEjkGiG&GPa+?O$D^tutBv=K2<#!ydO{vT~Wv7(Jxh7LB@ExN{cQ1)_-w6uV z@Z1uy(-|`1BB{Fu0$}PJ>f?)j`Ffcu?OJ-H=Z++?z)rZR7GZh&Mz;mg_$IRRW;$09 z+3C&--mm7{d|BUpvg6y@x$KF`pRn>hRi`Nrd4NIsz|~bR3fThip(O76sN6MCk`8kJ zy=foT(LRim^dyxI#cGCO{{Tx-kv1)1bh{Mj(Fp!4`as&H-EDG@kX_!2A$=yBvU}8s z&t3CZU8sDASd8|Wwny2i_f!D#U86&KrOQ-I{=?r(?uz%u?bp3w`*ldgmhRym$pZUq zyS0yx?_mo7WbHX4CuPGu@}g?8bh2zhSJkDKyW$?b=^xzVXCd=81=@4X)qA|9QVT4! zpec-LRe_oYzR&%!C~i3?-XqVerV|hc?(!Yfy@DcwupNhpAbiNtgXw*Zdtw}7SMVC^ zf?!k~Vr-q!YpQ!|j1!$|&q`6$mwxr%e9zz;My~<7dPXgKT2zPfr^HAIB@QvLs6+|y z+f%*9Fkv6#I0R6uJ&%s}1^DBI+tCI`Io1gp1KWHIzvZM>h$x3YxY1NmVJN>&YiqPm zkkZ;560B#<)aSobTfE-TB;b1`h*HWTT+L(QY$gTI=TflVHdT4*gGg?>4`(5*4?7h~wZs1BR zs704_uq)*|U5J0XOPOzTN7;uZ=Yv|Jv4Y@2?jW?CWJqPyN{Ff8A4^*njO=5grnil5 z1|s$t3S=t$sWWUXh)gVuZj-w+9>AuG@QlUNU(v@`we>PbKJTWC%eCjfXy5`%X!AS}H-ZGm)r~?Ao}%dyWf$+$Jd4;Ld~xhi^1y7_qrhaWS09%J>UD+eQJys9W6>mK2CAQmcRL%Xc-5&J6ZNue zR6oEBuCoETAsZE6%`9VvC10p0ux-px0&*}z{pMHSNH`W)oEf1A4$F*Cwqsr?A0D#^ zR?4@(vj6$yXU|Wax@-VpiVxPKgX{K!!+Z12G|62ftVOt<0e#C?aaH5QlX+ z#9_S<;;^oG9M-x>)e4!HFi5SG?{3Fo@i4ax-AEjkUTwu;sUX|gVDYNs&ZZTKRQVp} zI^wX-*^2)gABP1PK)tlpLG5XASg1jlZ2m(W*15mYaafz+N{rfxW(KV=<0L|)hLdO+ zZ6fNOn~1|wt*C3y_E9?R+CBCzx`9G*SQq@KMXaEg4slo)Op(U3C~fFdoQADWm5ReU z+kiHJ&REWVMrevh@ z(;)`ynGl0@rWa$d1mR{3O$?T)%{^Sq5V;+Lwe9>nCi~;GeS@S}3>G9MVYGS`Q6|P< zO{<5LUK1%0W3bfS5Q9a)KuD%6m+5mi6oaLF;kI;r4afCldBjZ!RCy)@s=n>&+FVsr zDDJrq$JD;-0vuDjx^rCX^-{vRRzN1ivp#uZ)&QPoyE@OYuiEV(EFE_LdT$+!(W}#T zb*Fi6x>l3u1bMOuH5(FDZ-xjgL)bKW2L?)CtKQzck`6*^PV;bvt%@e$8C?ldIj!p$ z-xXbDDbZDy5?!&tJgF<;S0{C4r*%TtDui)q2c~;0KWn;TnK`B_s*zP)2~xSH?_!a; zswU!C#rD`3KV z5Qf>7>R*QNtFs~eihy-_guJrk_~nLQ2|+;MR`?ZXC3H^o+v*YqBkEwhX;`$b*BY?)`ITd*)LFx$eo!0byZm+ewlFx$ep!0ZdU2eU1l3(P*J z`#bRr)0I#P3)3QK-4^05AiaIBXonT&E;ZM8Ca(t-;EF|bNj!yqz%k;#zg zX?j3X2ynD5`Y{U+npLKWtWwXij!NpXfvG$jn96M~Ro(!CS;6O_iL5#cQj2*Rp>*hO z@IuDC=q_#Xm#0}|m9sAQqmR&`l@{OPJ?C4}0RpVYrpHyi?Iq%>PSc?&d@c$JA+Ab7 zLWrx9kkG_cfpAK#@Wqa+`fYGJu%Z-KMMqIjiv`tmpLOMNRqVoJT$Qmoh{1DO5sXRf zPH|QL(ykU)^(i$h#6#2bgFh^tC7v@jTkF}PFeHaqro}6~NGqbz4cJOC#8H!t^q}QT z3L%$rka}8iRbg3za&5%n8=)(W>e3NsN?cVY@bF$zU0!!oRlqLr>=D*cuDCP=Lu1t{ zcACPvYt)wOWjy>KiGELe0x1T}y4B)&s#IWr$$pGlODsI2)Mb$r8Q?2DX)RB0qqW=y zy&Z53acZW*=y965OkfQia%^Zzawy&CUZ%BFUDsNk%)RLMbUN=9poafSu~{RAylY{X zfvzftzoD{S3%7(i0Hiy7-s<(L-mZo8?r%2lLLJrGzx6lo;127>*diI^N5KtGe?zHO z7k;oyyTO4Q2mbOduy?g^QtN;1<>fwZ3EiG~8QgueCd>;svk%6ny{s?&#D-Fmu}!K! zqPOJ+FV}<~EQ-Ar#k2gvlZ;<``9+8)zxIP|>H;Pt3&+{g?3vHCS+hyftm8`k^tyGE zen5Mz<@kP;<$N?!$Px-fHWUi_Jdt!H9)zeUUoV!!cECF*dXQ zJ|A1{*~hc5k+Q?T7C%oo1OzP+A#SAE61#Fo=!!K|J1+NM>RY;~#bj^uQ2 zy|)gJyYHwv-(*yoaJu2usUs<+#|x76ZB8 z%DP&G@Okybm-CqX#s2l~${0-$IROMQD<#ItBf2DuYPy=&)g2=T+53mLeV_GaA7AYR zkS{EPb4<&>6(AOFwHt5Ga|Cx-9ePJhHl$_XmwGNb5*~iGY-r9VbR&UTz3*wJZD{t^ zR-n(0wcRnWFFw%S&)E3lii5r4?vS8VO#&U!Q;!_xn6H_=Y6L-9DepqS=+-|eS|UzO z!=g1XlKaaySgYlI++7rLxSunYcuvRe7Xt7V{?Mo=8W(Y}!r>E|HHOWG8f>wTqzJW& z@`ffkbt_|u=E|T2PAysxo`a;Q*}L0JY-Tj9K^vm3>M3aRZ^#rsg+Mz3$G=89mIo%# z^!Y{LPI^UB)do=xPDJcNIHee$ObbT07h z2Xtt;D3&+`li-)Y`C!%I*GdwCM9BAx&i3`|jxp&5`cz?Bf`6v`G3k_AdBu8q<)=QE zp3;rbQ}L*#rxNEvPbCuqsz!bge4bBV&48D{A^-_!E+sYqaz`T}i;J3Dnmye#Ya!+? zhDK;_+pNhrG^S;&&N<$r0fwykbjEhu6XsmOCuHg{uX#(L!Ho=4^d6cO2ywA6WcAdi zgi*ua68T*Cn<9jKuSiM$55N$J-8-w}M`Azt$6?9_jh7qOI_ zqHrl+Td-|v?vWsL->LsUdt)&~-64D!4dT*`H6H({J`++~LQ_+XUaavO)<%fjQx*#7 zTc`eBdv8yS=WE{UhrY0U%6i>u4TirhR+IOT6cxRN_jfxf(zZ&%7Ox>}c80&y@M-8T z%TgNzH+CK@_Krj_tX^^fwCCjHCeju<0arahAwwO$+M4j*@}RHt$O>qm z=JdQls588v(aIH6g|=YpV)#2&2<=hfrBL(ttWfeIg;zr1?^>ZE87W*lr8zB!7p+k2 zh{E+y_!$)n5>*rj{tJc#R~Uhtfc;m+8_d0~GyFCGt@npNqTiZAe*e4d_hKcdx6aVMV2TF6w_Y#o4bQ0rSr2N0Z9eBZgm*R4 zO^%rr6jg|4o+lCO?-FBXb#{(PO~Q2w_A1}Gek_hH)&3wq z%?(e#qjtWRsn2GJ^lt>8s*k}|AF}UtXstgo6f_YK0amM}n+CaXsoO0P&Qo@UY`V13xn0!9-Mo&$c3&cjTjV& zos*rc&|2^NHv3H&5s; zzIl2oh6+ncAY-1pQ?b&<4HoVvTfr2p>}Oa>L*Ot#!3!~hmNC5dsJ0dCmgP=zJ)oekkEq__~&IKY&Y9~BQ7Im%m0CfU(o_ITlH5+3-H)>6qmL2 zc_X?HCDnuJlAA%jT>ZmW^haOb`lDMQ1t6Tsc)CVmA*f8AFR{MVVf7WUt{ z3vRh;l&P}(IO=@p0J08@4Z$=fWTLCaZKNtmRI`)FplulL2;8Dm2X28qK-^*xq8GSD zP$##!MF&%|^OogRX0ri>zWgzqXNv_oCyHpOhH3rI{Ncm`p*g&GPO)2VeEm~i%8bAxabc>>zy4C*|H!{a1QXQTT`^<;p-80O571AQeJ zwuX1PJ-mK1JUT9sDjTKeeNt!1yW~2ffgwg#$B{>pm5_%E(x?Ce_XlCvOs_K9Y(#_X zcRw2)!;T~B*T??ph6IECRo_R{ub=o?D zWUn&ebb)syLlA5_Jf?nNw%}h_xDBjXV16w1jP=0Nn^9)s@@!Vday#~O20963>P{Px za)8*E8tcT*_8LPBR?BQ5L=gBDP_33EPt0J!^5|E#E|{=_ zU^>y8Kk<%OoVLlT`XCZ|L|#n5ezT>Mo|f!{1Sgi z6g2CdPCkn^&xwf_$irj<)8=Hwq!X*k~<@FiUK{dRSm?LY_i@0JEv`7nltbT zHSbEF-wri5Bc4UnyxbHxYF=py95t^t1sD}LN_X|NW*+o5Tz!fW;E3yH7ItigU4sU@ z@YXQCkrURJ#;$ey#uo;=Y}Td_WdmnKyO)h>V0GLJ-XN0xXs^`yQVo(uGm-Y^0Gd6$ z;4KA1{Fl)+5D;9MV0Kcs)xXnVskV*TJMdKAIPyD&rFO`fOGgwA*9=qpVGZjz*}e|3 z6s9_&8)0u@s&B2GAZ61pGGvG5@;TOkF%vHRfG8PGvj!3wGPBfB%U@(jHb!>gSQjIr z$SjqSq3#qi#1iXymQF1;x}C^S);n!(w;@9YxG9Lj8*z%eQNmeix|ryY`qZXFFaOOC zcUz+0>|IRHs?An;IGa(^qs%#{w+pAH8*9z#Kr0|W&f)DM3MKVZR)^^(DZdmc;*wmz z4%3-L%xkWEfL4azZTK>?ydXcJ{-EH$88joNj1l*eHdw*v=+F7ZMS6E71V{x^b4#f^ zo20GTM%tQnX=}D#{drL%2{NpTdQEpx+M+2jAQ_5K+Uu7TY_*2w$_#0z+CpqjbmwgR zj@Gl8_-Dma&>%0r(#;tRviVFtL1jKgE(iG(wS=(@{M$}Z19ttAFc&1U4;uLAj#O(O z9ru@KI)%KoWZf)|2va!5(CN2n;05J5>JgvsD-+@&-I$=qWy;Ewi`GnW_(^| znt9;>(WCXr_Pm(F$Y#TOGYss*`&MzMRhaf(Ol|Xf<~nAg)wQ(cNL@>NG3#1;FP0B# z>ziq_VsExKE5G@rz97Hn3$!3N{#m{t&+0BM$eow+rPfk@p^Y+M;064r*^c5|@s4pI zutsIHYaG5{s`6PZYq(EvnH|mfVr(y4HUU~jT9{l!SB*KG4;7wuT*wJK-jku#`fng$Lb57590TR*LqKe6c!bQ_Wu#5Z^JhEP2@v{bHARFfF}>~^FdseC-7v)R|BGiS1+_) zy-rFmV!2Y@Et)4)c$SkPlLfre9b=QF=Ftr#fgz(#UTIOADozxHZly}Ia&mIIKe3_7 z)FU=oft$QsHNf|3&T@*m@c+(~z4!K_?06hku3nn~X~x@lVjB|26L_WY#K?bt_>T=E zoCQg~2O2B@X~@jhFpJeE0|#Q&CVpS&42Dl@i2xopeGk_&ici!I4|aejpVewYBG^P8 zDBmV4k*R^;7{Bt*AsqFZ4kN}e^%u6`==J+PS?&!q=8qk3R|^y7JZAYeZ{CKe08>s4zr2QBCK$!Cc5%Dl5Y!oT6ie5DFU zwXzS7%X&uf{6-&XSW>~~y3zE_UDKEa|f$}c@^@aynBgXi&akEbj zEzZ$D(z7I5tR7PKuqq{xGM(0VinFkJwW73&UGt@$#pnu2lEJOiJ4E!>m;_^?LvI*! zeCQ!sr^{sLkw}X!MVk?$t#CzOes@`cfA^ThBPrPe$H7cyBW);&iDSJkSkDeMCz$^IkDRw%5G6%aSOl)2Atss zgiymzLI|+w+Nk-) zP+ENXNH7A=N+QFOfA#;+SJjhfd06;Zr?G@KHt0B8%!%1}^k=zOFmb$%x7afqt3|zg zxFHoPw3eCd)X!Pr&8d(Pck0ttxHlEjE5Kwvm@@J_VUOqQ5BXKbgroJkZidf!+j1(1 z-rH4?`P!Vep?sojx{p?}oaEWo{nYa^5iYzDT;jYdTc zpk&YZ$r7O_Da_b(2l!EO$^s~x1;9^R0QFe;A|sw@rnpJzSpr(CXGRIl^Tm9EM;$N= zUEJO=9ut@|ds_T1@pS5o9|fGzNs!~QajpPmd*R`F%yPFMhzV>3=?I>4QZ(>#K%_efK#< zy(5I`9Ua+`k^YNHCrvB~4z27x#nSMP)rlqilG`RKyKO$vyPi)VVQu#b9ma zQwJIL{oG z`sgw{fue(B?=s>+ul}Z^RzCMlh|`T+LD*Dhc+z%az51b}A3O5bo%fB{qaG|OYrUhN zqjA@SayHR#7WJyX?k!6loIjgp5KsC?iX-z!is2thyi{M1qmO|4*oPtQa^qCda4d6j z_|SXCSZ@BCRD)rfaOBK<8@{WGhPQRc?n);K!+>T zPg^HTj}dXBmP?k#2^of2bTh^$-dMq2Uh>Vd5e!#f>22lX?QNxQr*A7$7|ScUt@JpQ z9k!M4-?FXzk`fG#wFLva{d@=pUq%b}ldXlTyO+0cy`8vlTkX8k3)dQdSqt|i-pm&6 zXUneS*`yA9$<4`)5nWM0qk`-$qs|9*f-21tPmVf% zkykJ(T%`AE5Ug5q9D%f=S`6{=?yCz|wOzF_H2WoHBt4&KqQ{3xdDoC~G*8Vd<{@Ca z2&2d5HDL6(Y&?tAhhVH>aB1uO`?I~i0Xk_P)-ky>`nN`qh%ke9p#KWOgnk|{2KN^n zr_qVr)f8LYc5+=aSqARQ@6wrV_^68!Q=hjqZy%h8-P0TkRinnRJt`5}l0qlIpm zs_gTw@>{giLpY1?FHPlVCpt1cbF{M{>A?!vrIL1DCDm+D!kPB3)dNl;@G~y09zEDi z{v=xP@61cJXsyts4h@;-(2zMDKQfU1ns)!0$eMb7qN8DQ+E`~ir=ui*Ir_okhtNYl zqM!AXWHB%BK>LRwujogm!&EEv`#!FvKQsK--j>>sCKBcUf$qu92qVg%T6&=SR;nK| zLln-!X7xdbJr`1b>0{`yQ5f4J;BV;%)uV@8u~~vZLY9ip9_ZpqA&df*W@U^5(dISm z8O^6@SHt+4l&#s=)NyhPm^oNxg49!XY(pP-W0kQd5$YjS@Oi)5*wQ15UNKZG1O4k>E&fclY46QNqM|8FX?ebp0 z+FB{UKsQib7m2+J$kPgvkYva9x>O=c;HUVSD%{4bV_v1FrpZl#eWmz^a*4E=`WA=$ zBM%hcs!!^y)`(>?Ot?|Xx<3XP4?FTKxM5<+u}Oo_yX(oc^QnbWB<4MYijylZ=hn;bkRS`IaH4pBAQ=?8O zl!PTOjz;4Oo+^1x19|oNL5H$!|G4!dV}BQVHTtf zsuaaKN!#xl z`URn{^;2Y_wP@AVH#z#mMfzqm9LmLL4+XlG)SC-G_6m`3H_P+SBvYL`mtG?U%;X z5b{5oEf*R>t}IJC%ZY{yFsN5TRup$D4~yLec@Z9H@}iiS4B+q_t(Qd?9hV>-^WDSh zLH^HAZXPc?xmgaP!VfgIu7hJ#qn_Y5zWW1OO zj^N5e;>dNxmA}t9g>x=D&YLJiEAv<0CuxnPn>iVr72@%0i&E*CA?>R}QBh_B8|V`SnnB3%TE ziF6f5I?b!ffD}Ib0T{V(_DE>JJSYIjeaVAD^(VzMg7AB4aIWIG#bm^^#wP$Ee9b_> z=MR(&73Urab3Uss`)wWjC!^$PV>h5|J9dekE1dVnJg<~*_c?x>&2d|3Tymjtu@M?s zK`ix5V3c|;6Br>P0|^R2UKII8Ui|w>UcArc#fKg!zRuv^5n$+S1{oXmeV~|oOKA7v z>4a?;0&)qRqRSLyI%WjqrlUD5l8#Hn2`0(o{0du|Jd#k27Z zd=K7rSd!|X7Ac=;bTNnZIY}C=uBd%F;?k?sch0v=0VM{Co1&CGD3ZGSO-WfJzFOqd zbOn?&Vv)(xBkfv&u&GQUmv!St6kfIaV`JBGNiTk1?@ zlB18P2jns3xv5M|ya;UO7Z=N2Hzv|*LS89>Rzj-dPZDaCS7}jO0qdm%TU$xDj+R}p z-KFRJKSeKUxVUV}k)aE?!yw@9$^=~0Acrd}hypI&+SjEUrJgW-WG(o2mKyb%- ztKe+P88+qBKBYJB)>dEvXyo;>WLli_vsZ z^vRB5wl1#O-kDc-GTi`DKp^8lM2A1it4{$$^F`;$+8g>fj%=kv!n{`r?M zBjQLb2sZ!8r@{`mWU@ZVv{++W)Yt%)E>A7M{Bw7tDHg zBY?wd=PALAxxl4E+$a93bb~m6)+SGSwls;Mt z>T$pR&)=3fD;-w8|f=%Y`CLdv(gWFDGKe|P$#@)X`oN=(N48|bUe?8$Ni)C@^^@z z@Ha2XfYZZ?rlT%}C%bv_U-7|ZB^+LM2NcyQvpP4WI%TU)H>OjTYFO- z<}3S_fhg43m+JIebq3kDZccRutvWMVom*0!8LtD%EF2y0uXZ1~@9}DQh~R^ zo!K=#ySnRr{NAtM*JiAIh2MYGRq2Ck$BrFSPB(#dHtV8KN+(RpT=t}yl)2Ub=d(J^ zq|CSKEM#?>Nm*#sS=Z3%idO< zeOaAmTK2W-+?>^ErsZa@W8=LgtKpLZ#i(yl4Yr3m3)|Kw(}RZMi$6X4v+lO1=ho~= zGd;Jqz;RnvrNL}Hd#lbJS)FEj?r7C{RaU2&o>#T%d{tJbnVzrmIyOD8 z&T2H%^J>+w>DjMeh}-)?z3ZQzVIXL8ErJFK%Lv+BM$o922-@6{NYLgIL1Tr?x_mHO zzvt*^7A{1`7OExm4NKLo|DV10fwSu>>wfp2bI$xZGs$TQ5J5*8vzMM`BwB18ehTJLc!CNHfe$7j?@<3iG9Pz}gJEaS`)7(MDF~^)i_PHDD zV$vq|h#T~xbi`c-=SR(mIzYaykPC@Rvq#Ti&3YJNj4BC+UH13p>td!hQ?8h zm(@!doYEx$oo_RV8ZyQ@xcrCxS>odC+z`|7E9#+reA zemUxI#LbLK*~LkxzjHT?tw-4$-YuYP>>}y*{z`L%3!rtbrx!-Yis%|9as<_~$sc>V z#)kN9@TWBS4;7pvt#y!Z9mH5DXhgrpy%wU^OaMwzJ_`Zpm8ukdwnovzC2Uoq_R`Rmx!2 zttit7W!9}yrsGvuSk48xuxJU{_M!q6H(%8j2RY9#fL}J?XI4Fqy_AoBR~q& z_|Y&~*M?8euomC?|4CQ{ zD$G<_W;+Zt0}*lUmolROq-bv#ga2?WT~l&gA4iK3EljV)2qrd(x|Pc%FWX>ku)VbH zesqkzq*%6{s*4ZSyI4YTs15~eOB@AYWFto-6{$!Hj4V{o1tHYT8ECO5xAfG}p%#E# z@3!u7&)@%^tBaw7*uPC8vDAsG18{OG>VQi51y=CFI!bAN{hFapq9a~(`e?iJNqNGP z_V^$ba6*U11Ex9N39l)yRKLD@C0AQXMQ;+x#(DK=Q=d;M>+Hkr@h$y7QF_p#>=?ZJ z486Y?c?2mp_N3_GpW7`Z>L<8cmdz@n(U+w}MeW8qic7>_BQ-9P5I8_K21$YkBmT!J zcAcxo6Yo%XEjJkHOn9iN7&s5g)LiWjGh3NcXCHcABCo@h(~4mqWtXyfTNwKF@4i5o*CjqFT~EwGg;0ec5-48LfPSeez|>*9rMh%Iw-XP7#!- zHD{XQ#&xWf_5+!7ugGB~xVE%L&3P|zBJ}oO8tH9@ksvv!#UG$Zf8H}*TwOG6uQ5Ac;3k5!ErgNZa687d;-CksKFW`mSn!D;H+N}PL2}1YudFM9i2!{MTv_KGz7hvI z`-CnLXrrKAo-nDk6@{mjSJuU?7vN7Nxbw{;T4?TANRr2nyvWo|`24yujwc*0YM+=5%pi?)fCodl%^+kq_9ol zrcGh7WMj*^5w2OE&P_j^x%KA5%qvajW}MD1q>iShtIlrIqvkVfMVilB?7EzM6K^cd z@$aUd`AmX1t-kr$j4nXK&&)S@##Bw!CY&IMRhXC6!v30ek0w1 zadB7{W9+wh)u`f`yzubqghpROn3b{zCf#rO#17m0R_-O>doa z9#N?MjPRp#wcT|hT*oUAx*P4~TB|TzJ^%5V*3xr25E~7J!fsyQd8?gl3PTM@Q%BiQ z<&Ou#Bf}n8b-rmKrF0EVN~G;{D7e4;pmuzVY&FY)Dp~H`l$7%gs^c&R<9AUk!o4b|}sq2n70n(T9M?tC+mMpDMm7%5SH~}T=WNX5-H~J?# z5*M{ybf|NInGt>qvlS;$nSHzQ;3LebhoVK7t%Pp>gw1L;g&E zjjX>cvql$h8O|G5<<%Yrd6=`{b;)EnGfT?5W2|q?k_+*)u#p~2Y)*FC;b=aiKdUfi z(7JEtp2BL_=46*v=XgCmnf#G-ort#o7t&QFINOw6qMEfsv?-jQp02ZXPW4MO$KO3; z9$f2aZM{!U8^0Q8D}NTJ%X@HXXp^{xC-lx8{w=u|aaP`--&W@jqM%XZ>Z$pZ3)W#=9iq6pUo4!*g`4eLg9!!wSa%AAuPxL zgpP0qgC70)3vv@O&(}0lyV%HFi7F60Ji)g@yJvg%9$wwbqnFA1Wu8b196gU*C*Heb z^o%nIqAqJP7i7y^kdJpuZM>Sew4!%S99fvt;eNO?{hegoAf++&hbPEk&iZS2z!Hm8 z&)h<$JwKlD#@Rt4{z_G5S

!n&f_qmDzb`^j%~oiiXyG^{P;#J0?e$ctnjZp+Oz> zURyOb$b2=P{wv?24IaZ=`gY~MkBRQ{=TJ8i*{9eg{u1J z&**a)u?zhiVDS`~G~wL+{*k3&t;QOhCh3uIsd)Q!Tkwo4Wj>xg9a7cJjg~BJX@dF6#PKQGaV_K9crS z5}2yTO7*YFpEUzGX6+JYE!y1oiNj0Cr}7RfP9R9#7cFtPOw`JQ`?Mui_hR9RPu=@1 zvAP!vB1zplE%8ZZam^-ottGB{S=Rlx3yxv;P5%pmSh!nKnPXm-^>>DWuhv#BtA&}W z@BV282I}JS*4t=K_c>-!T;3~aG~6iw)o#twnfx_5yRzUNs}$6t#!(C2vPwa)ee{CY zty0jYZKV>d1ofeh_wOU4cJvnSTBV@L+Z7jly*1{3%r5x)fh0rufpv@~osVf*k$IK4 z&_SlAtq8R*mIh{vn=lJgj6?}V7L+DJmmE7D!Ujl0Ps&)E)Mv>3^j%it+IDQs3Wi0+ zU&_;g7+2M+pILKpQI*KvSNH`~V942G(Pf3jD{oC5UCHsL>lfJQKDgkt?QH*?o);b4 z&i3=PesOND+frB=9cr*WlK4AL2zO$hO#){J2mwzmL|k_cy6Zp2$ht9in|@=MAFPB@ ztae#6o}efiyTd}RHg|v|7II;hfW^YsSH*7>qYCBPrNPqC{+Cv5pI&fQtJogruGH8f z+)ucN7mD>sTwtU9(FyH{;MXiP)$>8?&6@=R0}gBKyvaY; z)_U`})(cl?T}8QkAzsj;;h@)m;13>k5A#2UC1V7r5b@=*h3Rgq(Dqtuqh+h()<#Q6WjR~{lg;|M^)%ZAPu4xo zTJp$~j1Y`QqXiL#gFuxA^=KJEKn2TbhE+o&_?$XyOL22|(bA4whJ|Htza!U75k^Wo za>bR30bO_r9oaa=A+{293hc+qTDx6-u2t4z-jtOMj=>b^0Z>W-MM8o@p%86HXB%n; zbkkxGO}^b`xqeB*=uUF?{vp4SINf23(K^W;vAC=d3F;0j4}|>gdfsxlh0!nzU)fIz z(l@~(Dox$}f1;{RaNn`t0R{~@bLVFT!)+p?F;QlWmMoGs@2M4+W|1wpgMUg^=_`&! zVHIeOq-%z!%gpuHS2=mNnTbne%*^Tkgp zG5tKARJRZH$T)mdVT4Lk98Y0SXYjP1an9nkn0!4PmvJG2#cG5r)j}-ac?WU{d#A_w#LTYr<}L-dc<9u!RY7B(bb7wF_h7W^jJ&Do3>M&Ob}hvk&2JDfS6O zP6L-TJKPthr6oJ%px)Hl*i>wLjU|jME(7MoMa~g$M?5?_C{GGa4dk-eJ^%KRjbBcy zV-RM0p z&{OTVlQCHKRB`oVDO9QRD6FSJtD&bBV?<9wNdJnSrhR&vS3Ny9Ofy;#DA4@wBJ;u; zFzWJE$`;KVrSl~yVM1l5Y2eIBs5uLqQXTZ*|6|ybmkQ|?WycuP7?;zg?0TTET@42+ z;q45x-HfAd3YX}5Ul;eX!~boMgmOzs1OQVFnTbM+hLrkEeW9YL^r=47J9tL*%pEJyRwSJB{3S+*oWRocSFtfwCSS`fd|dTAd;HJaNviENE(A~)y81aP}n#< zlU~|zN6fsmka3Wx#LnAfM_3FVMtjiz$N6v1401RSa_=|~q!#|<4q2k3L_ zM4%;67|q)lm)w&wrI5j>c%#>1ts_C5afdz$M|Zjy{_JUY*j}!aV2KgyUmEHsB0QS< z|7#?)W;D0}1_p{S5#3Qehee!+kysoMasq^5Ys*^3yrWXB{@1o=% zm@pa=0;PJP7byH#IJx`NC7we855M#>apE34OJ$S7&bhbN#znF)GO+|r>gUh9(kS8nluWM0XzkT7?u&4!R@j7Ue=*vHBI#QTNR7L zJ(?|-23e4C)$eL7F7Phtp$E;%TI>E%^W3o$UWUe7lo+i*V_>xsU%Ep%JG~_yP-0m^ z?5S4bb5>&5-D}1Za<;ORf~BeBKI$btX(dLFRzj?WHdb11zhY(Ax_8;HsXx>1W_!8K z{tcb9q|P6D%TWhc)d6_3Tb2_Mrsx>D$p^j)BLOT=bZtj9#VR@5=+9+ z?5dSG6q@ZR@s^$vW^s57h+OY6GCi@E_#RYZY=aiSlAjw`jvuL6-Ic|vDPofY#iZ_W zyG}k0lk}RJvLtWzDJ%Tm9xn4C$ct@Ca25-NYD9Z?d3LdperGG}PNj(>pK3Zo zrpN7=^;|z%VadjaUw?z!f;GCqJt;1UD)j;yBq7JUXE*2SP!8DzgVU&l`pDe3{G?PnRY!wKg|xnzL*|s<=Zm;E3#8@YUl2% zmmAHo*_y9fmh)zWEzCrM9A( zb77(Oe&ken8+$PZ{26=4gTA}%bi-c!(UC_`6ekD;BqUvFE4A;nA79j=07fL(+3+EbAW?+ zBUx@jZ3UBm(7Rruk8ac)F?Ii7P9(x{QtzXfY~S!ue>Zbx%SsM;obdK32~yVX?+&=( zbF{wa&YI>dlmTRwvCJccH#8RYmLH>q0Z#E4+(4ng#&zG}ayEX9Dq=}H^nsVag^qVH zLW^ZNBRw%t^V3SI#vxy8Lyi~LyI>;$#LsIiq3*RMg2S9r^-9WI!AYxcP*JRe6Q{iA zijJ`6wY$i@JSGyPE{`j@hbUDTM-;~7g9XbEW&#k2Z|hpehe9tylPJ#vF3mqxDsk-} zGxbN~6*Pw|th=QWUv(f+FUz{TW`*7+Eh3wCU;AIb`!_Aro^}U6m7v8-_BzS+_D`1e z52Dkk887!6b-Aw?57op<&|lhwpbqcJGpo*gh8F!+3N(7rQ}yvMmw!3_sy~rsQt^TY zgMv5cbzTq;po86^T2F@RJ;89Yo(xSB+tfq*!uue2uVcr!(;yML@}eGp&0Bja?h+v+ zjpq1aIv(sw5gL?kD43y1hNo+KIK3dQw>vBcr^OsuD(6@E4d$jHQz+_;?FQM}L&~eT zVE@EXFP>Cv3$7?e37=2F0v+jfDhn}{TiKk+nM+Z=AQ~eKkqEn($!Gp%ytXQ0zFW(r zb)>IK6Qv9^Y(8gdD1FYR#?>-m9}u2F<#LIk^a}~Tk2aHf{mkAr@h;_MUj&yxw7z|h zEU5gP>DvDp7F2vsMG=qFg38xVNQa||gY8>eIua4r|BFE&hz4lFEI|kh8n#{OP>KJb zGims~&Jn5+)*N2Wxq?|FUmbm3o{^4mA>w2?p z`v(*I-{`9U3*TjF5#k|Bji{XgPPc-u(S#19!sHuphzhX9R&LHPI9~~hv!pSdi9tj5 zO6Uw{U%7Y0R~;7Cbid7^T?1_GS8ak!fY-YSq}(cgL2^Rve?2d?^uCWibIP|Ye9!r9 zoX{LSL7a$@36hQx3i5%JL7gkWuOyxIRxhUDG`wkd9Oc}gxPMhH9H>fyN!C@{b0fXw z29Fa?H{4s!%)#SbICn~7*&+M{6qM-8qj+5{Ss<9LDzAGeaDoAcXTJDxV zlLsRnmf3XYh+<&-dFf2f-JSAs*l|$anVh@p|J+ho*JTyT-Ke*C!vYWy!nMdLb&dt;F+*s4|1u`rh zfy9<>%H?w5BLoNES-R;%EbT8{d+Sx_bO+E2#7&I-G2At(3#tviJ%Neln|1;R*|}D2U9GjtDxT% zpo8qZJwt%xJ>r9SbZ<9)7!Son)Gv>ld8%}HQ(&TI?A3PfK$pW`k}QM<>C+&!-}E`v zev*5uextv5SK9R9BW6nx{h^+C%UF18 zyk=vP3=Hu9<^QWEaqNp40iIm&5S>BO>>6V!&zA{&*V3$s@_5aJA6_ zabdhl#I;&UYsLTSNeyVe?;vV!^Q~p~l4>1C!|X9^*A>a_#tt_K1f+^LRJD$8vqoQ9l@^ACHPt=G_&3?ZEk+}Lskq?IT9h= zUkpe!GH5wA@>?GL1B!zKu&fpJh_Xe*~kQ@w~t7p*=!N%EZk zFaKYkq>$xk0}yA?TJ^z?0OF?aeAXcPewc~>GmUJp$9a-@X5+~y{_A_Td`6nT%X#ai zv|IoHhmuXoA-^O-%8=6mV`Lqao&f8CC&=!RFk(7tttOoxW969{Lg9dFUB=8PvhXE; zpqQzJ1xw-b`MP3abVgt@Gt3CW2$7Y+tUi}{tQAnf<9WI^%XLOm>QVewJX3X?%O@=^ z(TYMBDyk^vQ1s_zhYPRTo!tuiPOXN@+oBy`TG;IMwpeQEZ4tiJ{cKrT3y@q<)`v|7 zPmMMK*tR-!2oW81M4ydV66m|zcy_#JfG&iTa4@vx`P7O$J|*Ni00Z^|-b={f-cWAr zp3!P*?bEY+V;|Uhf#DAvi{Zn>MXIf>34z$U_-Xdi6gzzlxC-X-ox$jAD%O4mF&@w?%CDBS3pwVe}Ae9}5Y`{%!aY{bfN z-LYh3od)8=G39BbJV`0P8Bu$_Ob6;c$N%Q`9epHgmVsQ?TAL_m#UsJ)cd;q(}+( zo|yDJQfx*%Akq|CpGyk!+s8&Qz%uBhV~O}|0Ll;p_ZRXLo|$b_W{YQ!K?nEy$`sg< zg~NjN}b=mNRYg1a;BQb z)h4pg$kXP8^#g6gVXURx@I=hm=lyW=rY#;LBtG~>BO1Bg{<5NlIM58ah({wofRHE{ zp!&#rx}yafyv#l1r)X`X=RL9dWd%KX!gn4axYxz{z8i2gZEBRdISjgPB0=Ghae3`u zferT@cilbwmbWIc&26!5*1-A&xBh^(E4};cWDqqT|3#KZR7BlP+}$42y2$eIKUr$; zMV7ZKF}hjadqR#(xiY^>S^_-)hNm2G_bH3bXyP@*``rfb;52oBN#ZU>chedP_u~vx zR2SRe5=8E_bOB<@ElyT&h&kOIEQVyVVyf%PCVt%A{~!?Jl?d1C4Xfr;mKtrQMlqx| z1`4DRH{3iE8)9Vq?5n$@<695iAnipndx+Ug7VgI2?m)BsmX;1boV?*6+0Hn014ew6 zlLP;K&iXBaBlSzSRO+;4rP!fDDXt~xtxPdKBzKo3Yu_BORCf`M)UNIV#&8!Q9pNs* z?#K<@HSQ@|->jg-aXV0O?^|yw`}+*`gX1SHYY{zZfO|k%)2kt9C=@+5f`((xM}!~_ z(CCLCjP8C28jWonFN#+7c#W#)hq|@;umW}Hh(ZvDxvoM%Cq$5rNkQE4W~0z^ZQC&^ z=t)*;1qI1T--m)Y4CPT$&{I{z3N$>~nkz}!#8E2!5cGYqjqjd9LG9&}?__;w_fEb+VmH{Ut3ATQcunLF2u#l1T4!U% z?^;qaT)wZnc6ZnObaGwFooAde7eix-1>R`9Gq|(a$*xPj?2bIVoMMu4c3$_7{g~u6 zmRd1M_U95};+bR%t_VlT79%?ubjH3~;r_1S8mAc~jdHTzREjJM_;Xu}b3J*CyRN~- zOGaW=*6y!=9ztTYvE{jH2LB4(Y^zu9p*mJvWbXIZnY(bc+JD7b`~YjRBt?zuNO0!D z1`AR6DDf2NmO6FUUld9&VrRiAmZ~sp?n;ol;IqmZ_XIGCI=LIbbK;!R>?Sms-o#sJeQ?+FK^8g8lEXuhA99^-C zXeG;Z0iVCjM?sRATM9Qr6;0X6YaPyN2x~}wNG^)nE#&KB9C`M*Pj}G$D3v&w>O;=1 zkY;H0)jp&k4-0{{nrYpi*u;7P1Mb~DI1$m^+LI!@U1#b-#GCTmaYTd}FFk6}ue<7b z+&%j4e#l*8LmuvtwD#`qsa^8`elQ1`qu8^iGE&)CbKI{bSG66HphmF0P{A6;Xw2GL2MyV!O_}uPQ`PYmRlg-vy{uYk zvN)V66L&jZ7c*w=3tqd#y-;cIEBBJY!sNmkOTd(Fd;(I=U|>A75MaJ{dgB#*`mUIc zzKwmcYD|6f>bw~Zbwp5;G=4<93k8Bf;!P77BigccbJdAu^>#ze0$HB7(6!z+di487 z`)R1!fE0|!x{sr;rFC{?Xc57kdKVsK3=>hSp>tqON6zPH*qwKI>e$-9V902DgQwkX zMpp(A4!6#oz9{rLnvDPbn}6|r-@NPhfBk{vk)2ue+hrv`kU&easC$lVxl3)@0*ha` zc=SiMEUU5qku4+1_>pVg@XLq(_@CbNBz5n-pLpZVAN$3x{9k{!ytDVE)h_pHPeHa# zeZg(@Z?_rw145)<%97yMVitUfA@=6lqu-1?!qnfC-S&SnP(8i2$cQkP7U}2LmF)i2EL0J zHm5kP;@J6~J2e35A;<)9H{WgcK0}PlrgL*|PXhenR(y=RM3htg6O-vodknjz{bdQe zDr_>KKHwX@W1QPU#pIZ(k;0H;U`s3}gE-~vx0C!lgR~^Lr&ws_~$EafFS<%_ia>T(Le#g~m=Z7+ZS@uRN#;Qep4m;WIhza%2_ z|AAupZ`ejT*tyGyS?(PP@1*k~y;~$`^%;e!^Y=>c=CK5E4eQEh?o=wD75@gus8Uek z*k;9akgDIDp5E;qeE7dlyG!@$YS|ohIX`DZk?t-M4&)L!z^EANvO@RYk*DWwi1l~t z-=;aZ%LA-~vY4Em`wjX;-J~wXBNVy9^dJ@Q;>LqaE4%lHoXpKw^H@&rzhKw^{vwrE zba#=T%WbSFPu*;{MfWG2zg8Y&sd?vbEI%|^dpfK%wdVOLHJOS@B?u|0m~aVSN6M46 z2(^}QuyiVWQ9%*+sU}-EZ-n}RNxRm#SIHXYwNo~iVFJK^tPJq`HlB`){r7$_>s0HF zm9i3uA#vZ(As%6bnT4Jv#`4+-b0|ZZZc!h7Mp$=|vckS>ggMZv$QWUU7icxKv3{_; zDLZ(bWSpIyrWkE>T3I^oWQ@>E#sC*&YsSlwIk>p1o9td>$x*UwVYhoe2Xdi(7K{v@ zN*i;m#|3xo+o@B`+lxLf%;Y6;%CJ?g4vP*ky^Y~N=6qXs`F%{yf#ZRmkc@j66g?>zw=?$VVG`J6rqyJ_P6?|7CT?| z*{~yRI4$iXN)wN1xy$yuLmGF215}s5SkgODQ3P+`Jzway?6_VuE6y`xE-}iiD9@eg z^A%=o(>du6uobB%K<9sSMw-n&zGTy#d)2HMn@tQwGlWfVDKBp$U-i9hc}F?P?s;VZkPus-OyHfl_xP1##TI1q3-c-SfA(%=nP_z{Qq4H7b{jY%2w z>If5L>f-s=F@Q*tYmEeK#sp23gZ~0ybS=n`ca15c!;dLc&~R54*`@mfAuz5Qjs-u; zagd=H1>r(iqNbDgcUxhGk-N39Ka2+sGQeo`0Ryx~FdDYKv_@fmxuong(6oA?3A3P_ zHkynyq~UAEc~PO(i>(@J5uXvYMuKHatoX~nA@t@pH(I7i`?-M-E$2o{>NTXVxnWW8 zEZYfz`T?EBF_|$oe418gdKOSa9ydX2ZD*jYvMEm!%w1K|lphlcYG??^SzaZL8CN;V zEFAR#k@YF&`G99ffN!f)o3gh=_M|v?Oc2owtj232$Y+ckFRr-Dwt6h7T!%I*IMnCq ze8V`D4Bu|cWKN5f_zL3*bV}2^A&s&IgF_ZjKv>|IV;K^VRD&0~%2tpdOZ+7fXqspY zEH{s!(5e$@d!n$so`D8d1r;keN25$=tbn{;xKIjrOHa$gVF~`*I}K0p0;)t^Iy18b zk6)F&PTyfG?nXU~CAoTeh0b>0cC657VovPQA z8>g{)q&I~A71~5WMWI%TDy$)Vgaed>(;eFFrsU!h9;3t;~(?a77){=WOV5 zGJtwbyc>?%AS0icUp6zg5$487tcljj4$@lHaz|x+6S#8MXq9L8GzuyT5>sXg zXT~ie0_&Agro)xx$>#(X7IaM6GqanNMF*Y_7boxoh@8cBvl4lPMZ7yaLi|>g)ZsII zshlAvhT1E+BF4LgMj3~#F>r#a=wr~ta$bxeNbA2cFM z$9fXRwPaIL$wC^NA%dojx~b|QFSt)Yi0q|Gr6L;Nh!0Laz1!k-!Ecz=5>fVMEak<> z>ZJ1}n}<#HnKy4^==N7r)w~u*Ukz`5>td5C{0V^rs*m>6RYKL(M`5Kz9U`v*;%ZV4 zl}PcOATGeJxFqlhwgTO%uqRX8bfC>Y(`8Sxk^D_?QxLuh4-VOU(^gTpWT=Xuu_W-u zs)*=brK0c+GqOd*6xC7Fts+Cy-D{&$Vz2_QIoV17MyxQ-X*}-4+V-#MO!mItBnO)QSdMLcwFXJ0tuhlQ(+xyj0!Nyzt*LU`2 zwp6}e@4vn~d<~f`m9IDYuQ!LUA+x3O^(O!I*6=lCwp6~};=kS&zJ|<}%GbmG>!-rk zkl9lCdb|I6XZRX2TPk1g@L%r^Uqfa~%HM?$ZV;6y~lsOKYR_DEtRkL`L7Rz zuOYLg^7V-S`cU{9GFvKNAM{@j%8^lJwp3o1l+1vJuOYLgR$mY4>ruUS12tU$4YQ_& zl+sFmuVK&B#kK=ChpnK6Xb;B#TF5Y3NaWRUp}>ug+H&1rC<%`7?Lo+oCf^&#S})%TFpx7PI86}qE9JY)%u2pz+kowhzIlOFf{HXToB&fz z6|uM2V~tR0Iw_m)uNFFLefL6?o?GrfWy7%22ga8e>9GXi^c~LHY3m zW8g+Samu(l<@F$~-Y}qDbeVvsOnBlD9O*%%9ve?WO*H0uVJiok1NXCSGGo0WMt;*( z<+!b>0Y+=8!3d$7yOhsT1Hv6vQUm1923>TkR09ZrpufVmHskO!0z|;AAFw^x{#?d> zCDHBru~e7h#U`)ozU_A}C6%F|Jym)s&;_5UWRuL34IG;)38F9GaK z1cIil`|h>bROI4U2m))>8A7DFbg}cT$k!UBZ=j8=2lcjX7rY%}%bs%gp#H8I$K_#xrYd4IUCYqANE{ zFqp|U7%bmtu6ZHRj6#Be78hewC8OXU1?M%1xOs*4G;$6yz&x;jVW8Ad&wHQ}eNvk~q!8!vFmRB8Vsj zqS@K~L^q_kDfpiV)J(&aD-~1bdgav0YEv#}o|F?1PO8N)IGcFdvV}?W^PIE6)*eg$ z=+PUhIsR-J5q>W)O*845>PkDfanRSanB8O^T{SQN^A()4Sq?w22Pdpz`?774J7A>l zu;fK@LF`lOb>eIKM{b4SfsIOHA5KOw*ek3hG?V5ufvVwsv*;44mh+!VMN`eIP?v8g zot=Mg8^mePIX%{VftKtiMA>R|N;CX=l>d z7~80^i5qVUP86aHn7y7=GFrakr>{lVqZ8FqC&c2(7}oGa z7uxE`Mp=s^2ja_lr6p}J;gRj>zAv&l+bl`ik33NFb`4F^{^PWYm8zl^M5>5>zXtCO zFq5IOtwNAFi|cObn}-oq475L!(5~dQg3<|~Hl9TZP@a5;;6^%7>TY|GVtzJcop&n8 zNG}8xdpeb;f)u>-52{Su6-H9r%Em<#HhdoxmfOR;bZ)c9FAvtD zgeYKpyg*gQa&oi>ohF3Suf3to2JNS|fI@&pMI@_50|7oR#M*I@5+}l8FA4(6 zR|EkOiBmNR%w88s8M+um(+swHOY~6xj~vlJhgx;@k+~9rFvh2@$!y~H#l&5-yeMbI zp%s)I{1TilqtyuWQ0yi+h0}202#R&^Mx@T54EiA%?IU1_577~M-Fe#0-8*av!6)r4 zd>|J^ws!N84fvS(M3lIb5g2j+bpAzy;&CiZzw=GK%RUkMSVl*k*9C&P+lRddG5YnB zF{qd!^K&!MXzmuKeTq@7XI`F*f@L6$v;ba&KCWCpz z6J^6{ibZrc#L@HK8UwUa(fsAKTz1i&1Y!ra4s(6YXPYkC`##tb$DnW!L*8v+0 z2xhZL6(Cl25?a-9I(dklgQO^HJi%6q+-2^HIAw@_3xj>m1|J@2MyWB3B1goblhCph zEaLde0Ls8o3LleZlaG5U{jyB^MF}&5Qh~2{D?bqZw}nSB!PHOi7%3-NDo*ux;=)ho zt^I}^xpxW+l}m}MLQMU%7cD&`b}9q>VTGe4o%i{gWgKnF?$^h$9AqQq?L}UL{)Oc~ z*pxkJB}8o~DfXh&2Vy;vruKqe<(pEl+3^?CX+$2hzHpllgB{vO)E+(1JT|bwq>mvn zEB6HYxRfvujLJN%y)o*I3%tq(MM5&@QVS3&SO@%VC2$+wC`{NoPDWwuy?uXryBx*bnsZ2d$ z0EEqQznf)^DzLGVr_c)L&oJ99SVF`kX%91#SY&&h_b?S1edOW+2~h14;gTPnS%=F? zS5UDN^tUF$~C@}^lvx&!olAn(3qJXY0RmWhI&&;_U0mqhAPxEN! z^lenbdmn zW9(tD@s*=Z^ zqWtYS+XlfQJh~~P2G`}TRoPGx*5{Qm^eB#WGx%Q zC1j0UMYpU8fHvEdd+OSvI$G%bnV+jV*(`8i^z&?^VF$_up(w4I-%?mP`QvlS|8z?K z03}p|n!8WD3`PE4!CGV+0wm;WB>dw~%AO{OTReC7{`Okak?e1u zD2zW%pBH!Y@5wLTKpk$tlw0(DtgtrNLC0pxDW_yEmLF1IZ2>q$7UC3cSVq0sahmOR zC`Qa(`x!j@oWwDvb51MpHpegkL%LGh->-al?5oeI5vtc$g8J=0x1Zwk#s~&>=NdJh z0z&+1kpX4(EzdJxMW@^Tcenk5Z1sH5zg#xmJ_&?p+XP)l`~&1z?6PfvBxjLW&P~}! z_#F(W86j4)dR%P(AQJ(-2qRW?u{Pix7P<8spwBh4Iv|f~!QgcJxf<<^&DYzQoiuF( zp;61sCju#7_2O=Z5(ySb#l1qDB(I_X*YBUS-AWYB*M5CkP0SkU8EAB0%vCMwN0>yq zh-U)4gk`?X6Q^j@_82aG>oB6`ca?>BdG8MeHov_QzTNpfeNs*Exj^Mf`vulblBqWB zd_-AB{qslta{(1}?$9$*R?m0Vo$a(VMj#T5wu0gLJ9@zD zz`}7~WgL+B57IW0_AM=zYy%dL5ap5wH0B&$R%kN)nXrTQozIt&@M{to=l%+FR-wx+vvhF@lsW)O~_4Dtwe zQF+~Q$u)Xt&Fnt4btDOjPx~DWyu_z?{!>|ykr<62F+n)5SQ8@{-cqK_6_f7on*Gw` zYInaRPu;qM58V>0DBK_9o~L7Dn`{)-A>(#KgATxCcr-GXsVDsI3%{3y-wVU>B9dT~j@O?o~ z;Tmq!QvlN4C5hplLxxS$?i$ThceDPD7hv9&&#q5w;`cd~_30i`PcXX?8K*>+17#l0dQkAKs8KY9Zj&Z!C4l*amJy>b7#UWAqc(jye(O7bW#5t{d$7n%EotK7ZCx58GmYT*i& z9uUftu&D&$wcr=x%px*n@k>B;J}t51ttET^jDP>~KssmvZJoFdD1>m2md;5Ma0+_T zq_!ukN>e%5z_Rn?>&K-(#@=IQI~Grv;PO+#f!G;k3@z8~nL~b(QWyJ^2CJeZzKachz`k+6T83Y!6lKe*ZN1)SiBVCvBUp-dNe2re(M7 zrQ&(aeu2uO0&#)B2A((Iji3UtNrrDdNt!4piMisKIN_jaY%-z!3W{zVB|B5WuYhEo z4~QHLyGl1Bw5JoVP==@BK7gZDNBoXAA<;z`RFkQ`6MWl;0~P+{51k?O9XrWdy8%k z$w~OrhFE}R=NQ4aAcbl@RpEWMVIW@|0EHfhjq^~N_WiLX>l}t9_wDzomQPo4Aeu5A zePCA|brDP6zMzM%m7GZ4_rQe$2V>pXd(WXO#ZnrV;w~BhSr31K(EBi#&w6I^L*fsN zKtj|Iw#6OtPMYSBxLf0M=a-b%Tr~eBL+M6A{Gz4YpH&MXOKIr~73ul^OcO%)>F6|y z+!eYsD(R_%a{*8nz*90NB9->R{6KBOve@E22X*KM$_Dp4alF8^j+Ya5ZQ$3QiwS{^ zv^d7nk5^}w&_^+l6gwpmiz;<^iJti?`3SWU>GS{C#PJ)WR%!UG$Fp7JeS-JO-6!bE z^XK{`;V?|6H=5E}B<wB3H&$VyWS;mxfdd5G!MgN8M1w4_Z$c zAS}+oZj;dop(WbApUMZ@8Dpr}!marP#)BR!qDQYVtmV|fH^1g4b|_V~u(4#4@Vv1$ zjTmHU#WZhvm=y|B5oRvM%-XY~);KD`n2Yi87@}^AdZ}wJh;0RcVAwTy=w+)1Cch3? z!enM=9VX2(R8s{Nz(tq?hCOO;NJ|_qenuEf16vvLNExOT<4lpjy*j)mPZOQLHzbUW zkY|8!*OBQi3s;&=?pq89(dKC}!ke(i25gQv6aXxQuj7X;hdRm74%3Ltk#}1?kF~Qd zz5u5iwiAVy*9_CLng>*~2|%h8GiYnrhYkIdr?X@X;{cv@;1#*h)H82Oksd4 zc3-+8l&eVb!1hq?yrYL3-@n65k}8KaMTY2Wq!#Z(@s*0LX7nw9A^ZS5DhG@LX|_ zs}F28CNc>W3~|SSRluYFG_1oIFj?5?g&M~;_m;b!(reQCJt`UYFU`_ds}3H4a%R9hMuy@@zS0bVwI1 z47>kKSC9YdP$oS_bvJ(Ux6VR6=2X3KdYV)Nuyhbj!D^vL{ljn zqAk1WiE|~C3-t4lcq7s(l1WdMFs-D0U!K8ut~^CjJ8_5c%QiiW0+Lp?%~o(BeY7-= zB+)yZq09ZiGR_)kR?1fJzTUmZ^qu$WUj`qt>JDsha5BziLdjibTiBrcf?$U8qHw*| zB(_K*RQoNNv#3$abI>)mtEh}us&NRJO=C^h;kwb_lA^r=22~owAr2xL?N8UHOLg1E5=fzZ)1QSLZg)U_^(1#QZ8 z{r4(KMIw3o^2(&Dd9$K2gsLoM$SXO(DCqGo@)Z4=(6<;>A6KV#mT8Ehb~L7eD7B$f zCjqCvK2@rxNMAqEV~GYTqA-@II3fM@!CUT#?=LA4HRx+1V>#j!2xdq^$qTD+>#dp4 zZf%ya6rDx4=IU4w{Pb2>Scw2}*@%;ZBU=;?ME`maAUI0|B<){JtA5tFFkHjtBXioT zn2d2Pe(BV3bxafgz59+Q2$+OFa=Pgr@+g6SMUf{AX#gBi=^OV0cJssd$EROOb5>__|G#?{F1;!?(=nqP}XRy~hNP z3}vN~;yTK=W&DRVg9tG<7hc?RgQUYq7`Cs-15V;`cHDpNhA}bPowtii$sA~m*$;{n zB7sU1s%s+>e1hsHzt_ozQ6%9WcEPN%Pi%PUmdabS$81mRu=j0B$;i-c5Ic!1eZ=gb z3{MYUk=ARJ$}%`M!k@Vq$YP2xEpbjh=@}3*kK`*Ad{!?t51=Nh%9eYlv3OW`jUmD> z2rK1y`+~x|?aG)@3h^TCSvwptO{HiKzjzGQje8%YI*c$TI^}-2UY8njd<(QXr!x z$<{4}x|Ud}8W#)yT3zo8!f!=sDg1y0KJ8F+0fLdMB|`|WDD|5%d8E>kFPu0S~{Z~=Yj$c0-pOOyjZ zKsmS;$_I{#az^1OD7TaDWyaM;$!_0^$`hfYJ%bPeBT?9HG8U7xe-vg-H`5yWh3eo2 zcApCPT;WppL4bF*ni)aVDSuhb=vNJF|3Y6^wc`&z{Dy!1tuKD*gdb<{c>D0@PXBRj z1ZT{!{bk)q*JmRN$brPP8ZO5;WR&28J7`6hy3O+W%GY+2@q3e{?g0P3{szK2-M0ni z^yx{Wpn#V9DGHBY`(j=9<+%O5*Z;t( zS>`Ou^>6vjH+>&@?2`3Knov=JjWinWF(~9vC2QIS@$BRe;6lp_M%x zPAc0Cr}334vTUr{#*Ldd0MY;WOoD7grof5J0)hjn8{J&T#S9u)fDd$B%_Dnm^;9Q^7Fq)1pEfp6Coj47ltz`V4e($aizy0kW_|z|5HJ)_7Vw1n&2rJUJ zKl#$TKL6DlKJmtH@=|_NyiB@U!NcKW-;#XvfYW+WJ#Gn)MDjGAnHN`dVO$ry=L)(HhULKIl&*NXDOZh{VlT9~}R{ zufP5`e*S+pmd5CTJZsvN!Dxtw+;h|W-|_zIzESJyGjq<*xPm-?ORpO4nsmDJ`$7=B ziy{ZlH#G81iux8=vDc(-&ve*LM1gfeyDT!b-&FfdxClWPDp;jezVvC88bVn=eqW~H z*y>ePt3`5y+cLK`nFIh-(Q8ntq?DUe*J<3XGlI1{FzuefPQ9>TBfsOd<$6fo{___1 zH+!Oy-of6PrQ0AqFK=;uq#F=s;2|t3%NdJU(|7!}o6$?GtQXB_Eb_}*3d>btI)o+G zA+G@0kt$*BTT8573)W1CORV_+{D9_KVwGBHDLI;Sk;*@0%c(qtC03ro5-U$(iB(qz zp z9~80RvC_p+O<^V){yMNH{zoalg^!!P6$!G zy=(N?t#fLBQ0yI>d}ywW}+-lN8t{)}Z!bG9BUVY5VG| zGK1^UJesW|HbX+}eWsR|G+F%9k}l5%gBD4#lrqQH+FMI^KsrlUV+kWw!l)&jxJYE2 zJE9`2n1Lj%)YR%Ji``>cme)G!az6_7GQMWoKJ2RvQlY`>}hSQryiP5;S;=1VkpDH#LPJXARUy_~L!jF`_(8Z}jajr_`xge&AupULYYT}G4(^-6c9rFh zi{GiC$hD!{rj52rYSWGsJ6R!CLdBW54Yyi|sSa2+3?5EU0#Jgjg$`8S z{X_$YhGB0ATscK>CPWY{(Uwy!(L*COn+<9T?@@TQt)t2(MKGxJ%)=mwf3)Um7*bvq z!3`k|_YiU(;YZ(XS(U3T`RZ3z3FaA7KP;dj$}oh&yc<}AwdjUOt-0!24T}=Si`ws- zEl>6TCQYMXAH7P91(>>?rL%#xCW!$^G`vV*5M7R^2Ux`zh#gIfEYCa}M;hizj7 zj>!rKt6r41R`w5fh13ph^Tr6!*kD*dC#j(YFSHN&GMo&$hio^v`Svm)B*=3#7sEx~ z2N(Und0h1U<_+hS71nVv1}-WxQ*?%)QAxt{3>2aS%VF`SD~mdrC??Adjd0JSAkLpO zD1=Fr2_>1KL={A=44}^O4Gm4=T+8+YMN-Zep2B?LDa;q1!h9iTgoyc)dWd{SYLzg2 zNOC{S%ok$wG_Be%L!by6=1dmU4zkG$D}h!iC|Z?ZUp~NL0O*QK`4-U9D@COJq=dwj zVtnZQxzxC%{e7h2NwVai8`Vnm_ozo5Dz~Cw8uYG=o<7Qwf?ceM zUDm%9`(1OfeP0SXPB9D6p=JyOxx0E7jQtR!Gb%L=8LnXy)8)K6;ucN0X?3m_E|ha~ zGGg3`hf!ltviBMBRODnDiy~RN2A(^BDhM$M`0_rYG} zW$p3wd#&#`ilh3y*7uwH0gl>l@Wb5z#hMZeYaThiVOKi{o+^unts7idyF_8_>jK@TaivQ02dDy zkOIN6VG_1XNwREvDZ60EPzH@#KD-kzvHPaU=Yz!+PGcG2$J%X01G|0n!9f_MElgR^ za&v4Hu{Aojwiq7EtOG1X-JOh$MEuw|OUT?Rxd+WW{P0J)i)2lM7`KFOB;1ej9r71h z#BQ-x1hA&n7-%Lb+xdy38Fl|c7Ts!)^ZX4xliuK2O$jR+G8XC9P|?~kCZHwIC#^pq zctNRc(x$FV&oUJqy04xw772xynTNWQ$(O#?rNx>J)NXOV8MS2#x~dyORrK%hG_96N*5skPHo{}+&kWa;izyw%E*Rz32;ayCX;*+EINrMa}ziZlcaSa>Fe@fWYRkM z!Qe17gfD8w{|9vxvPLpmLZ7YLdh#L*9ef0V?sH9y6HfP~3X;a$yA>SX`2~+eI(TOZ zA*EQ>u_$5&%Z9kO3uvPWdKnO_^O_d&oN{EOiRl0@4U+h|CLx2k@Kljj6;WRWbAi)R zrUem-?#^ElYTzj7S%r>K)4UVB%Rp3hsL2+!D1^!A;IM~ZlZ>Lq#1*D9+m3+L8bOY6 z1yI5#5vxBZ$zHVLZAI?5g>x?N_=6t~B`xiJe?gjVZkGybDS!QQ3)Ake+x4V(+(^

Bzf+g!N{AD)~a9WQkYL`HVvlXf2*=_`z~Id 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 diff --git a/scripts/host_zone.json b/scripts/host_zone.json deleted file mode 100644 index e9c66af5..00000000 --- a/scripts/host_zone.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "title": "Add Fee Abbtraction Host Zone Proposal", - "description": "Add Fee Abbtraction Host Zone", - "host_chain_fee_abs_config": - { - "ibc_denom": "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9", - "osmosis_pool_token_denom_in": "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9", - "pool_id": "1", - "frozen": false - }, - "deposit": "100000000stake" -} \ No newline at end of file diff --git a/scripts/host_zone_query.json b/scripts/host_zone_query.json deleted file mode 100644 index b786938d..00000000 --- a/scripts/host_zone_query.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "title": "Add Fee Abbtraction Host Zone Proposal", - "description": "Add Fee Abbtraction Host Zone", - "host_chain_fee_abs_config": - { - "ibc_denom": "uatom", - "osmosis_pool_token_denom_in": "ibc/C053D637CCA2A2BA030E2C5EE1B28A16F71CCB0E45E8BE52766DC1B241B77878", - "middleware_address": "", - "ibc_transfer_channel":"channel-1", - "host_zone_ibc_transfer_channel":"", - "crosschain_swap_address":"osmo1nc5tatafv6eyq7llkr2gv50ff9e22mnf70qgjlv737ktmt4eswrqvlx82r", - "pool_id": "1", - "is_osmosis": true, - "frozen": false, - "osmosis_query_channel": "channel-0" - }, - "deposit": "100000000stake" -} \ No newline at end of file diff --git a/scripts/host_zone_uosmo.json b/scripts/host_zone_uosmo.json deleted file mode 100644 index 47f46546..00000000 --- a/scripts/host_zone_uosmo.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "title": "Add Fee Abbtraction Host Zone Proposal", - "description": "Add Fee Abbtraction Host Zone", - "host_chain_fee_abs_config": - { - "ibc_denom": "ibc/ED07A3391A112B175915CD8FAF43A2DA8E4790EDE12566649D0C2F97716B8518", - "osmosis_pool_token_denom_in": "uosmo", - "pool_id": "1", - "frozen": false - }, - "deposit": "100000000stake" -} \ No newline at end of file diff --git a/scripts/ibc_swap/deploy_osmosis_contract.sh b/scripts/ibc_swap/deploy_osmosis_contract.sh new file mode 100644 index 00000000..910dbf17 --- /dev/null +++ b/scripts/ibc_swap/deploy_osmosis_contract.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash + +CHANNEL_ID="channel-0" +export VALIDATOR=$(osmosisd keys show validator1 -a --keyring-backend test ) +echo $VALIDATOR=$(osmosisd keys show validator1 -a --keyring-backend test ) + +export OWNER=$(osmosisd keys show deployer -a --keyring-backend test ) +echo $OWNER=$(osmosisd keys show deployer -a --keyring-backend test ) + + +#store the SetupCrosschainRegistry +osmosisd tx wasm store scripts/bytecode/crosschain_registry.wasm --keyring-backend=test --home=$HOME/.osmosisd --from deployer --chain-id testing --gas 10000000 --fees 25000stake --yes +sleep 5 + +# instantiate +INIT_SWAPREGISTRY='{"owner":"'$OWNER'"}' +osmosisd tx wasm instantiate 1 "$INIT_SWAPREGISTRY" --keyring-backend=test --home=$HOME/.osmosisd --from deployer --chain-id testing --label "test" --no-admin --yes --fees 5000stake +SWAPREGISTRY_ADDRESS=osmo14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sq2r9g9 +sleep 5 + +# execute +EXE_MSG='{"modify_chain_channel_links": {"operations": [{"operation": "set","source_chain": "feeappd-t1","destination_chain": "osmosis","channel_id": "channel-0"},{"operation": "set","source_chain": "osmosis","destination_chain": "feeappd-t1","channel_id": "channel-0"},{"operation": "set","source_chain": "feeappd-t1","destination_chain": "gaiad-t1","channel_id": "channel-2"},{"operation": "set","source_chain": "gaiad-t1","destination_chain": "feeappd-t1","channel_id": "channel-0"},{"operation": "set","source_chain": "osmosis","destination_chain": "gaiad-t1","channel_id": "channel-2"},{"operation": "set","source_chain": "gaiad-t1","destination_chain": "osmosis","channel_id": "channel-1"}]}}' +osmosisd tx wasm execute osmo14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sq2r9g9 "$EXE_MSG" --keyring-backend=test --home=$HOME/.osmosisd --from deployer --chain-id testing --yes --fees 5000stake +sleep 5 +PREFIX='{"modify_bech32_prefixes": {"operations": [{"operation": "set", "chain_name": "feeappd-t1", "prefix": "feeabs"},{"operation": "set", "chain_name": "osmosis", "prefix": "osmo"},{"operation": "set", "chain_name": "gaiad-t1", "prefix": "cosmos"}]}}' +osmosisd tx wasm execute osmo14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sq2r9g9 "$PREFIX" --keyring-backend=test --home=$HOME/.osmosisd --from deployer --chain-id testing --yes --fees 5000stake +sleep 5 +FEEABS_PFM='{"propose_pfm":{"chain": "feeappd-t1"}}' +osmosisd tx wasm execute osmo14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sq2r9g9 "$FEEABS_PFM" --keyring-backend=test --home=$HOME/.osmosisd --from deployer --chain-id testing --yes --fees 5000stake +sleep 5 +GAIA_PFM='{"propose_pfm":{"chain": "gaiad-t1"}}' +osmosisd tx wasm execute osmo14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sq2r9g9 "$GAIA_PFM" --keyring-backend=test --home=$HOME/.osmosisd --from deployer --chain-id testing --yes --fees 5000stake +sleep 5 + +# Store the swaprouter contract +osmosisd tx wasm store scripts/bytecode/swaprouter.wasm --keyring-backend=test --home=$HOME/.osmosisd --from deployer --chain-id testing --gas 10000000 --fees 25000stake --yes +sleep 5 + +# Instantiate the swaprouter contract +INIT_SWAPROUTER='{"owner":"'$OWNER'"}' +osmosisd tx wasm instantiate 2 "$INIT_SWAPROUTER" --keyring-backend=test --home=$HOME/.osmosisd --from deployer --chain-id testing --label "test" --no-admin --yes --fees 5000stake +sleep 5 +SWAPROUTER_ADDRESS=osmo1nc5tatafv6eyq7llkr2gv50ff9e22mnf70qgjlv737ktmt4eswrqvlx82r +echo $SWAPROUTER_ADDRESS + +# Configure the swaprouter +CONFIG_SWAPROUTER='{"set_route":{"input_denom":"ibc/9117A26BA81E29FA4F78F57DC2BD90CD3D26848101BA880445F119B22A1E254E","output_denom":"ibc/C053D637CCA2A2BA030E2C5EE1B28A16F71CCB0E45E8BE52766DC1B241B77878","pool_route":[{"pool_id":"1","token_out_denom":"ibc/C053D637CCA2A2BA030E2C5EE1B28A16F71CCB0E45E8BE52766DC1B241B77878"}]}}' +osmosisd tx wasm execute $SWAPROUTER_ADDRESS "$CONFIG_SWAPROUTER" --keyring-backend=test --home=$HOME/.osmosisd --from deployer --chain-id testing -y --fees 5000stake +sleep 5 + +# Store the crosschainswap contract +osmosisd tx wasm store scripts/bytecode/crosschain_swaps.wasm --keyring-backend=test --home=$HOME/.osmosisd --from deployer --chain-id testing --gas 10000000 --fees 25000stake --yes +sleep 10 + +# Instantiate the crosschainswap contract +INIT_CROSSCHAIN_SWAPS='{"swap_contract":"'$SWAPROUTER_ADDRESS'","governor": "'$OWNER'"}' +osmosisd tx wasm instantiate 3 "$INIT_CROSSCHAIN_SWAPS" --keyring-backend=test --home=$HOME/.osmosisd --from deployer --chain-id testing --label "test" --no-admin --yes --fees 5000stake +sleep 5 +CROSSCHAIN_SWAPS_ADDRESS=osmo17p9rzwnnfxcjp32un9ug7yhhzgtkhvl9jfksztgw5uh69wac2pgs5yczr8 +1 \ No newline at end of file diff --git a/scripts/ibc_swap/test.json b/scripts/ibc_swap/test.json deleted file mode 100644 index 39fc2ba2..00000000 --- a/scripts/ibc_swap/test.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "modify_chain_channel_links": - { - "operations": - [ - {"operation": "set","source_chain": "feeappd-t1","destination_chain": "osmosis","channel_id": "channel-0"}, - {"operation": "set","source_chain": "osmosis","destination_chain": "feeappd-t1","channel_id": "channel-0"}, - {"operation": "set","source_chain": "feeappd-t1","destination_chain": "gaiad-t1","channel_id": "channel-2"}, - {"operation": "set","source_chain": "gaiad-t1","destination_chain": "feeappd-t1","channel_id": "channel-0"}, - {"operation": "set","source_chain": "osmosis","destination_chain": "gaiad-t1","channel_id": "channel-2"}, - {"operation": "set","source_chain": "gaiad-t1","destination_chain": "osmosis","channel_id": "channel-1"} - ] - } -} - -{ - "modify_bech32_prefixes": - { - "operations": - [ - {"operation": "set", "chain_name": "feeappd-t1", "prefix": "feeabs"}, - {"operation": "set", "chain_name": "osmosis", "prefix": "osmo"}, - {"operation": "set", "chain_name": "gaiad-t1", "prefix": "cosmos"} - ] - } -} - -{ - "wasm": - { - "contract":"'$CROSSCHAIN_SWAPS_ADDRESS'", - "msg": - { - "osmosis_swap": - { - "output_denom":"ibc/C053D637CCA2A2BA030E2C5EE1B28A16F71CCB0E45E8BE52766DC1B241B77878", - "slippage": - { - "twap": - { - "slippage_percentage":"20", - "window_seconds":10 - } - }, - "receiver":"feeappd-t1/feeabs1efd63aw40lxf3n4mhf7dzhjkr453axurwrhrrw", - "on_failed_delivery":"do_nothing", - "next_memo":{} - } - } - } -} \ No newline at end of file diff --git a/scripts/node_start/runnode_custom.sh b/scripts/node_start/runnode_custom.sh index 2f938a99..ec16992e 100755 --- a/scripts/node_start/runnode_custom.sh +++ b/scripts/node_start/runnode_custom.sh @@ -2,7 +2,7 @@ # Run this script to quickly install, setup, and run the current version of juno without docker. # ./scripts/test_node.sh [clean|c] -KEY="test" +KEY="feeapp1" CHAINID="feeappd-t1" MONIKER="localfeeappd" KEYALGO="secp256k1" @@ -25,7 +25,7 @@ from_scratch () { # juno1efd63aw40lxf3n4mhf7dzhjkr453axurv2zdzk echo "decorate bright ozone fork gallery riot bus exhaust worth way bone indoor calm squirrel merry zero scheme cotton until shop any excess stage laundry" | feeappd keys add $KEY --keyring-backend $KEYRING --algo $KEYALGO --recover # juno1hj5fveer5cjtn4wd6wstzugjfdxzl0xps73ftl - echo "wealth flavor believe regret funny network recall kiss grape useless pepper cram hint member few certain unveil rather brick bargain curious require crowd raise" | feeappd keys add myaccount --keyring-backend $KEYRING --algo $KEYALGO --recover + echo "wealth flavor believe regret funny network recall kiss grape useless pepper cram hint member few certain unveil rather brick bargain curious require crowd raise" | feeappd keys add feeacc --keyring-backend $KEYRING --algo $KEYALGO --recover feeappd init $MONIKER --chain-id $CHAINID @@ -53,9 +53,9 @@ from_scratch () { # Allocate genesis accounts feeappd add-genesis-account $KEY 10000000000000000000stake,100000000000000utest --keyring-backend $KEYRING - feeappd add-genesis-account myaccount 10000000000000000000stake,100000000000000utest --keyring-backend $KEYRING + feeappd add-genesis-account feeacc 10000000000000000000stake,100000000000000utest --keyring-backend $KEYRING - feeappd gentx $KEY 10000000000000000000stake --keyring-backend $KEYRING --chain-id $CHAINID + feeappd gentx $KEY 1000000000000000000stake --keyring-backend $KEYRING --chain-id $CHAINID # Collect genesis tx feeappd collect-gentxs diff --git a/scripts/pool.json b/scripts/pool.json deleted file mode 100644 index 481387f8..00000000 --- a/scripts/pool.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "weights": "100uatom,10uosmo", - "initial-deposit": "100uatom,5uosmo", - "swap-fee": "0.01", - "exit-fee": "0.01", - "future-governor": "168h" -} diff --git a/scripts/proposal_query.json b/scripts/proposal_query.json deleted file mode 100644 index 17de3bc0..00000000 --- a/scripts/proposal_query.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "title": "Enable Fee Abtraction", - "description": "Change params for enable fee abstraction", - "changes": [ - - { - "subspace": "feeabs", - "key": "nativeibcedinosmosis", - "value": "uatom" - } - ], - "deposit": "10000000000stake" - } \ No newline at end of file diff --git a/tests/interchaintest/setup.go b/tests/interchaintest/setup.go index 5532a068..bb2b4671 100644 --- a/tests/interchaintest/setup.go +++ b/tests/interchaintest/setup.go @@ -65,7 +65,7 @@ var ( Bech32Prefix: "feeabs", Denom: "stake", CoinType: "118", - GasPrices: "0.0stake", + GasPrices: "0.00stake", GasAdjustment: 1.1, TrustingPeriod: "112h", NoHostMount: false, diff --git a/x/feeabs/ante/decorate.go b/x/feeabs/ante/decorate.go index 926556fb..c8fe4552 100644 --- a/x/feeabs/ante/decorate.go +++ b/x/feeabs/ante/decorate.go @@ -1,6 +1,7 @@ package ante import ( + "errors" "fmt" sdkerrors "cosmossdk.io/errors" @@ -192,47 +193,152 @@ func (famfd FeeAbstrationMempoolFeeDecorator) AnteHandle(ctx sdk.Context, tx sdk return ctx, sdkerrors.Wrap(errorstypes.ErrTxDecode, "Tx must be a FeeTx") } + // Do not check minimum-gas-prices and global fees during simulations + if simulate { + return next(ctx, tx, simulate) + } + + // Check if this is bypass msg or bypass but not exceed gas usage + var byPass, byPassExceedMaxGasUsage, isGlobalFee bool + goCtx := ctx.Context() + bp := goCtx.Value(feeabstypes.ByPassMsgKey{}) + bpemgu := goCtx.Value(feeabstypes.ByPassExceedMaxGasUsageKey{}) + iglbf := goCtx.Value(feeabstypes.GlobalFeeKey{}) + if bp != nil { + if bpb, ok := bp.(bool); ok { + byPass = bpb + } + } + if bpemgu != nil { + if bpemgub, ok := bpemgu.(bool); ok { + byPassExceedMaxGasUsage = bpemgub + } + } + if iglbf != nil { + if iglbfb, ok := iglbf.(bool); ok { + isGlobalFee = iglbfb + } + } + feeCoins := feeTx.GetFee() gas := feeTx.GetGas() + // Ensure that the provided fees meet a minimum threshold for the validator, // if this is a CheckTx. This is only for local mempool purposes, and thus // is only ran on check tx. - if ctx.IsCheckTx() && !simulate { - minGasPrices := ctx.MinGasPrices() - if minGasPrices.IsZero() { - return next(ctx, tx, simulate) + if ctx.IsCheckTx() || isGlobalFee { + feeRequired, err := famfd.GetTxFeeRequired(ctx, int64(gas)) + if err != nil { + return ctx, err } + + // split feeRequired into zero and non-zero coins(nonZeroCoinFeesReq, zeroCoinFeesDenomReq), split feeCoins according to + // nonZeroCoinFeesReq, zeroCoinFeesDenomReq, + // so that feeCoins can be checked separately against them. + nonZeroCoinFeesReq, zeroCoinFeesDenomReq := getNonZeroFees(feeRequired) + + // feeCoinsNonZeroDenom contains non-zero denominations from the feeRequired + // feeCoinsNonZeroDenom is used to check if the fees meets the requirement imposed by nonZeroCoinFeesReq + // when feeCoins does not contain zero coins' denoms in feeRequired + feeCoinsNonZeroDenom, feeCoinsZeroDenom := splitCoinsByDenoms(feeCoins, zeroCoinFeesDenomReq) + feeCoinsLen := feeCoins.Len() - if feeCoinsLen == 0 { - return ctx, sdkerrors.Wrapf(errorstypes.ErrInsufficientFee, "insufficient fees") - } - feeDenom := feeCoins.GetDenomByIndex(0) - hasHostChainConfig := famfd.feeabsKeeper.HasHostZoneConfig(ctx, feeDenom) - if hasHostChainConfig && feeCoinsLen == 1 { - hostChainConfig, _ := famfd.feeabsKeeper.GetHostZoneConfig(ctx, feeDenom) - nativeCoinsFees, err := famfd.feeabsKeeper.CalculateNativeFromIBCCoins(ctx, feeCoins, hostChainConfig) - if err != nil { - return ctx, sdkerrors.Wrapf(errorstypes.ErrInsufficientFee, "insufficient fees") + // Check if feeDenom is defined in feeabs + // If so, replace the amount of feeDenom in feeCoins with the + // corresponding amount of native denom that allow to pay fee + // TODO: Support more fee token in feeRequired for fee-abstraction + if feeCoinsNonZeroDenom.Len() == 1 { + feeDenom := feeCoinsNonZeroDenom.GetDenomByIndex(0) + hasHostChainConfig := famfd.feeabsKeeper.HasHostZoneConfig(ctx, feeDenom) + if hasHostChainConfig { + hostChainConfig, _ := famfd.feeabsKeeper.GetHostZoneConfig(ctx, feeDenom) + nativeCoinsFees, err := famfd.feeabsKeeper.CalculateNativeFromIBCCoins(ctx, feeCoins, hostChainConfig) + if err != nil { + return ctx, sdkerrors.Wrapf(errorstypes.ErrInsufficientFee, "insufficient fees") + } + feeCoinsNonZeroDenom = nativeCoinsFees } - feeCoins = nativeCoinsFees } - requiredFees := make(sdk.Coins, len(minGasPrices)) - - // Determine the required fees by multiplying each required minimum gas - // price by the gas limit, where fee = ceil(minGasPrice * gasLimit). - glDec := sdk.NewDec(int64(gas)) - for i, gp := range minGasPrices { - fee := gp.Amount.Mul(glDec) - requiredFees[i] = sdk.NewCoin(gp.Denom, fee.Ceil().RoundInt()) + // After replace the feeCoinsNonZeroDenom, feeCoinsNonZeroDenom must be in denom subset of nonZeroCoinFeesReq + if !feeCoinsNonZeroDenom.DenomsSubsetOf(nonZeroCoinFeesReq) { + return ctx, sdkerrors.Wrapf(errorstypes.ErrInsufficientFee, "fee is not a subset of required fees; got %s, required: %s", feeCoins.String(), feeRequired.String()) } - if !feeCoins.IsAnyGTE(requiredFees) { - return ctx, sdkerrors.Wrapf(errorstypes.ErrInsufficientFee, "insufficient fees; got: %s required: %s", feeCoins, requiredFees) + if byPass { + return next(ctx, tx, simulate) } + // if the msg does not satisfy bypass condition and the feeCoins denoms are subset of fezeRequired, + // check the feeCoins amount against feeRequired + // + // when feeCoins=[] + // special case: and there is zero coin in fee requirement, pass, + // otherwise, err + if feeCoinsLen == 0 { + if len(zeroCoinFeesDenomReq) != 0 { + return next(ctx, tx, simulate) + } + return ctx, sdkerrors.Wrapf(errorstypes.ErrInsufficientFee, "insufficient fees; got: %s required 12: %s", feeCoins, feeRequired) + } + // when feeCoins != [] + // special case: if TX has at least one of the zeroCoinFeesDenomReq, then it should pass + if len(feeCoinsZeroDenom) > 0 { + return next(ctx, tx, simulate) + } + // After all the checks, the tx is confirmed: + // feeCoins denoms subset off feeRequired (or replaced with fee-abstraction) + // Not bypass + // feeCoins != [] + // Not contain zeroCoinFeesDenomReq's denoms + // + // check if the feeCoins has coins' amount higher/equal to nonZeroCoinFeesReq + if !feeCoins.IsAnyGTE(nonZeroCoinFeesReq) { + err := sdkerrors.Wrapf(errorstypes.ErrInsufficientFee, "insufficient fees; got: %s required: %s", feeCoins, feeRequired) + if byPassExceedMaxGasUsage { + err = sdkerrors.Wrapf(errorstypes.ErrInsufficientFee, "Insufficient fees; bypass-min-fee-msg-types with gas consumption exceeds the maximum allowed gas value.") + } + return ctx, err + } } return next(ctx, tx, simulate) } + +func (famfd FeeAbstrationMempoolFeeDecorator) DefaultZeroFee(ctx sdk.Context) ([]sdk.DecCoin, error) { + bondDenom := famfd.feeabsKeeper.GetDefaultBondDenom(ctx) + if bondDenom == "" { + return nil, errors.New("empty staking bond denomination") + } + + return []sdk.DecCoin{sdk.NewDecCoinFromDec(bondDenom, sdk.NewDec(0))}, nil +} + +// GetTxFeeRequired returns the required fees for the given FeeTx. +func (famfd FeeAbstrationMempoolFeeDecorator) GetTxFeeRequired(ctx sdk.Context, gasLimit int64) (sdk.Coins, error) { + var ( + minGasPrices sdk.DecCoins + err error + ) + + minGasPrices = ctx.MinGasPrices() + // if min_gas_prices is empty set, set to 0(bond_denom) + if len(minGasPrices) == 0 { + minGasPrices, err = famfd.DefaultZeroFee(ctx) + if err != nil { + return sdk.Coins{}, err + } + } + + requiredFees := make(sdk.Coins, len(minGasPrices)) + // Determine the required fees by multiplying each required minimum gas + // price by the gas limit, where fee = ceil(minGasPrice * gasLimit). + glDec := sdk.NewDec(gasLimit) + for i, gp := range minGasPrices { + fee := gp.Amount.Mul(glDec) + requiredFees[i] = sdk.NewCoin(gp.Denom, fee.Ceil().RoundInt()) + } + + return requiredFees.Sort(), nil +} diff --git a/x/feeabs/ante/fee_utils.go b/x/feeabs/ante/fee_utils.go new file mode 100644 index 00000000..40f13534 --- /dev/null +++ b/x/feeabs/ante/fee_utils.go @@ -0,0 +1,40 @@ +// Reference: https://github.com/cosmos/gaia/blob/main/x/globalfee/ante/fee_utils.go +package ante + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// splitCoinsByDenoms returns the given coins split in two whether +// their demon is or isn't found in the given denom map. +func splitCoinsByDenoms(feeCoins sdk.Coins, denomMap map[string]struct{}) (sdk.Coins, sdk.Coins) { + feeCoinsNonZeroDenom, feeCoinsZeroDenom := sdk.Coins{}, sdk.Coins{} + + for _, fc := range feeCoins { + _, found := denomMap[fc.Denom] + if found { + feeCoinsZeroDenom = append(feeCoinsZeroDenom, fc) + } else { + feeCoinsNonZeroDenom = append(feeCoinsNonZeroDenom, fc) + } + } + + return feeCoinsNonZeroDenom.Sort(), feeCoinsZeroDenom.Sort() +} + +// getNonZeroFees returns the given fees nonzero coins +// and a map storing the zero coins's denoms +func getNonZeroFees(fees sdk.Coins) (sdk.Coins, map[string]struct{}) { + requiredFeesNonZero := sdk.Coins{} + requiredFeesZeroDenom := map[string]struct{}{} + + for _, gf := range fees { + if gf.IsZero() { + requiredFeesZeroDenom[gf.Denom] = struct{}{} + } else { + requiredFeesNonZero = append(requiredFeesNonZero, gf) + } + } + + return requiredFeesNonZero.Sort(), requiredFeesZeroDenom +} diff --git a/x/feeabs/keeper/keeper.go b/x/feeabs/keeper/keeper.go index fd74c1ac..eebe9a5f 100644 --- a/x/feeabs/keeper/keeper.go +++ b/x/feeabs/keeper/keeper.go @@ -72,6 +72,10 @@ func (k Keeper) GetFeeAbsModuleAddress() sdk.AccAddress { return k.ak.GetModuleAddress(types.ModuleName) } +func (k Keeper) GetDefaultBondDenom(ctx sdk.Context) string { + return k.sk.BondDenom(ctx) +} + // need to implement func (k Keeper) CalculateNativeFromIBCCoins(ctx sdk.Context, ibcCoins sdk.Coins, chainConfig types.HostChainFeeAbsConfig) (coins sdk.Coins, err error) { err = k.verifyIBCCoins(ctx, ibcCoins) diff --git a/x/feeabs/types/keys.go b/x/feeabs/types/keys.go index 8300b29d..ecbb7659 100644 --- a/x/feeabs/types/keys.go +++ b/x/feeabs/types/keys.go @@ -20,6 +20,12 @@ const ( KeySeparator = "|" ) +type ( + ByPassMsgKey struct{} + ByPassExceedMaxGasUsageKey struct{} + GlobalFeeKey struct{} +) + var ( OsmosisTwapExchangeRate = []byte{0x01} // Key for the exchange rate of osmosis (to native token) KeyChannelID = []byte{0x02} // Key for IBC channel to osmosis From f171b216961c0cc6755c8b90b0d101ab7e9bab6f Mon Sep 17 00:00:00 2001 From: GnaD | Notional <89174180+GNaD13@users.noreply.github.com> Date: Sun, 19 Nov 2023 23:25:53 +0700 Subject: [PATCH 63/90] check fee-collector-address (#104) --- x/feeabs/ante/decorate.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/x/feeabs/ante/decorate.go b/x/feeabs/ante/decorate.go index c8fe4552..bd78f10f 100644 --- a/x/feeabs/ante/decorate.go +++ b/x/feeabs/ante/decorate.go @@ -36,6 +36,10 @@ func (fadfd FeeAbstractionDeductFeeDecorate) AnteHandle(ctx sdk.Context, tx sdk. return ctx, sdkerrors.Wrap(errorstypes.ErrTxDecode, "Tx must be a FeeTx") } + if addr := fadfd.accountKeeper.GetModuleAddress(types.FeeCollectorName); addr == nil { + return ctx, fmt.Errorf("fee collector module account (%s) has not been set", types.FeeCollectorName) + } + fee := feeTx.GetFee() if len(fee) == 0 { return fadfd.normalDeductFeeAnteHandle(ctx, tx, simulate, next, feeTx) @@ -52,10 +56,6 @@ func (fadfd FeeAbstractionDeductFeeDecorate) AnteHandle(ctx sdk.Context, tx sdk. } func (fadfd FeeAbstractionDeductFeeDecorate) normalDeductFeeAnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler, feeTx sdk.FeeTx) (newCtx sdk.Context, err error) { - if addr := fadfd.accountKeeper.GetModuleAddress(types.FeeCollectorName); addr == nil { - return ctx, fmt.Errorf("fee collector module account (%s) has not been set", types.FeeCollectorName) - } - fee := feeTx.GetFee() feePayer := feeTx.FeePayer() feeGranter := feeTx.FeeGranter() From e8fe5365ee06866ae3341f4c5eccae257b55d45e Mon Sep 17 00:00:00 2001 From: nghuyenthevinh2000 Date: Wed, 10 Jan 2024 16:31:40 +0700 Subject: [PATCH 64/90] Update docker-login action CI --- .github/workflows/push_docker_image.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push_docker_image.yml b/.github/workflows/push_docker_image.yml index aaf92839..2b96e885 100644 --- a/.github/workflows/push_docker_image.yml +++ b/.github/workflows/push_docker_image.yml @@ -32,7 +32,7 @@ jobs: uses: docker/setup-buildx-action@v2 - name: Login to DockerHub - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} From 4d1abe7274a3a5089d8b40cc4df66bcf0f9b5a15 Mon Sep 17 00:00:00 2001 From: Tien Nguyen Date: Thu, 11 Jan 2024 14:02:40 +0700 Subject: [PATCH 65/90] Add test for Makefile and add fix lints. (#118) * Add test for Makefile and add some ignores. * Disable goconst lint * Disable revive lint --- .gitignore | 8 +++++++- .golangci.yml | 2 -- Makefile | 5 ++++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index ea4e1146..9e02b1f2 100644 --- a/.gitignore +++ b/.gitignore @@ -15,4 +15,10 @@ # vendor/ # Go go.work -go.work.sum \ No newline at end of file +go.work.sum + +bin/ + +# IDE config +.vscode/ +.idea/ \ No newline at end of file diff --git a/.golangci.yml b/.golangci.yml index c9686a60..a02ced68 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -9,7 +9,6 @@ linters: - exportloopref - errcheck - gci - - goconst - gocritic - gofumpt - gosec @@ -22,7 +21,6 @@ linters: - thelper - typecheck - stylecheck - - revive - typecheck - tenv - unconvert diff --git a/Makefile b/Makefile index 7d70d5b5..b208c3c9 100644 --- a/Makefile +++ b/Makefile @@ -93,6 +93,9 @@ install: go.sum build: go build $(BUILD_FLAGS) -o bin/feeappd ./cmd/feeappd +test: + go test -race -v ./... + docker-build-debug: @DOCKER_BUILDKIT=1 docker build -t feeapp:debug -f Dockerfile . @@ -100,7 +103,7 @@ lint: @find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -name '*.pb.go' -not -name '*.gw.go' | xargs go run mvdan.cc/gofumpt -w . @find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -name '*.pb.go' -not -name '*.gw.go' | xargs go run github.com/client9/misspell/cmd/misspell -w @find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -name '*.pb.go' -not -name '*.gw.go' | xargs go run golang.org/x/tools/cmd/goimports -w -local github.com/osmosis-labs/fee-abstraction -.PHONY: lint +.PHONY: lint test ############################################################################### ### Interchain test ### From 4e33a53b2d004b8e5615ff76cf6171e190f96aee Mon Sep 17 00:00:00 2001 From: Duong Minh Ngoc <153509244+minhngoc274@users.noreply.github.com> Date: Fri, 12 Jan 2024 10:34:13 +0700 Subject: [PATCH 66/90] Minor code improvements (#119) * refactor: minor code improvements * refactor: namming and remove unused code --------- Co-authored-by: Duong Minh Ngoc <153509244+Ngoc-Notional@users.noreply.github.com> --- .../feeabstraction/absfee/v1beta1/query.proto | 8 +- tests/interchaintest/packet_foward_test.go | 8 +- tests/interchaintest/setup.go | 2 +- x/feeabs/ante/decorate.go | 41 ++-- x/feeabs/keeper/config.go | 11 +- x/feeabs/keeper/epoch.go | 18 -- x/feeabs/keeper/grpc_query.go | 8 +- x/feeabs/keeper/grpc_query_test.go | 6 +- x/feeabs/keeper/ibc.go | 16 +- x/feeabs/keeper/keeper.go | 4 - x/feeabs/types/keys.go | 16 +- x/feeabs/types/query.pb.go | 210 +++++++++--------- 12 files changed, 158 insertions(+), 190 deletions(-) diff --git a/proto/feeabstraction/absfee/v1beta1/query.proto b/proto/feeabstraction/absfee/v1beta1/query.proto index 7fcab196..93bb68f4 100644 --- a/proto/feeabstraction/absfee/v1beta1/query.proto +++ b/proto/feeabstraction/absfee/v1beta1/query.proto @@ -25,13 +25,13 @@ service Query { } rpc HostChainConfig(QueryHostChainConfigRequest) - returns (QueryHostChainConfigRespone) { + returns (QueryHostChainConfigResponse) { option (google.api.http).get = "/fee-abstraction/feeabs/v1/host-chain-config/{ibc_denom}"; } rpc AllHostChainConfig(AllQueryHostChainConfigRequest) - returns (AllQueryHostChainConfigRespone) { + returns (AllQueryHostChainConfigResponse) { option (google.api.http).get = "/fee-abstraction/feeabs/v1/all-host-chain-config"; } @@ -39,7 +39,7 @@ service Query { message QueryHostChainConfigRequest { string ibc_denom = 1; } -message QueryHostChainConfigRespone { +message QueryHostChainConfigResponse { HostChainFeeAbsConfig host_chain_config = 1 [ (gogoproto.moretags) = "yaml:\"host_chain_config\"", (gogoproto.nullable) = false @@ -73,7 +73,7 @@ message QueryFeeabsModuleBalacesResponse { message AllQueryHostChainConfigRequest {} -message AllQueryHostChainConfigRespone { +message AllQueryHostChainConfigResponse { repeated HostChainFeeAbsConfig all_host_chain_config = 1 [ (gogoproto.moretags) = "yaml:\"all_host_chain_config\"", (gogoproto.nullable) = false diff --git a/tests/interchaintest/packet_foward_test.go b/tests/interchaintest/packet_foward_test.go index e40f8059..6dfaf2ec 100644 --- a/tests/interchaintest/packet_foward_test.go +++ b/tests/interchaintest/packet_foward_test.go @@ -550,17 +550,17 @@ func TestPacketForwardMiddleware(t *testing.T) { }) } -func QueryFeeabsHostZoneConfig(c *cosmos.CosmosChain, ctx context.Context) (*QueryHostChainConfigRespone, error) { +func QueryFeeabsHostZoneConfig(c *cosmos.CosmosChain, ctx context.Context) (*QueryHostChainConfigResponse, error) { cmd := []string{"feeabs", "all-host-chain-config"} stdout, _, err := c.ExecQuery(ctx, cmd) if err != nil { - return &QueryHostChainConfigRespone{}, err + return &QueryHostChainConfigResponse{}, err } - var hostZoneConfig QueryHostChainConfigRespone + var hostZoneConfig QueryHostChainConfigResponse err = json.Unmarshal(stdout, &hostZoneConfig) if err != nil { - return &QueryHostChainConfigRespone{}, err + return &QueryHostChainConfigResponse{}, err } return &hostZoneConfig, nil diff --git a/tests/interchaintest/setup.go b/tests/interchaintest/setup.go index bb2b4671..a8bc4ff2 100644 --- a/tests/interchaintest/setup.go +++ b/tests/interchaintest/setup.go @@ -23,7 +23,7 @@ type QueryFeeabsModuleBalacesResponse struct { Address string } -type QueryHostChainConfigRespone struct { +type QueryHostChainConfigResponse struct { HostChainConfig cosmos.HostChainFeeAbsConfig `protobuf:"bytes,1,opt,name=host_chain_config,json=hostChainConfig,proto3" json:"host_chain_config" yaml:"host_chain_config"` } diff --git a/x/feeabs/ante/decorate.go b/x/feeabs/ante/decorate.go index bd78f10f..f2fcd8b1 100644 --- a/x/feeabs/ante/decorate.go +++ b/x/feeabs/ante/decorate.go @@ -83,15 +83,15 @@ func (fadfd FeeAbstractionDeductFeeDecorate) normalDeductFeeAnteHandle(ctx sdk.C } // deduct the fees - if !feeTx.GetFee().IsZero() { - err = DeductFees(fadfd.bankKeeper, ctx, deductFeesFrom, feeTx.GetFee()) + if !fee.IsZero() { + err = DeductFees(fadfd.bankKeeper, ctx, deductFeesFrom, fee) if err != nil { return ctx, err } } events := sdk.Events{sdk.NewEvent(sdk.EventTypeTx, - sdk.NewAttribute(sdk.AttributeKeyFee, feeTx.GetFee().String()), + sdk.NewAttribute(sdk.AttributeKeyFee, fee.String()), )} ctx.EventManager().EmitEvents(events) @@ -126,19 +126,18 @@ func (fadfd FeeAbstractionDeductFeeDecorate) abstractionDeductFeeHandler(ctx sdk } // calculate the native token can be swapped from ibc token - ibcFees := feeTx.GetFee() - if len(ibcFees) != 1 { - return ctx, sdkerrors.Wrapf(errorstypes.ErrInvalidCoins, "invalid ibc token: %s", ibcFees) + if len(fee) != 1 { + return ctx, sdkerrors.Wrapf(errorstypes.ErrInvalidCoins, "invalid ibc token: %s", fee) } - nativeFees, err := fadfd.feeabsKeeper.CalculateNativeFromIBCCoins(ctx, ibcFees, hostChainConfig) + nativeFees, err := fadfd.feeabsKeeper.CalculateNativeFromIBCCoins(ctx, fee, hostChainConfig) if err != nil { return ctx, err } // deduct the fees if !feeTx.GetFee().IsZero() { - err = fadfd.bankKeeper.SendCoinsFromAccountToModule(ctx, feeAbstractionPayer, feeabstypes.ModuleName, ibcFees) + err = fadfd.bankKeeper.SendCoinsFromAccountToModule(ctx, feeAbstractionPayer, feeabstypes.ModuleName, fee) if err != nil { return ctx, err } @@ -150,7 +149,7 @@ func (fadfd FeeAbstractionDeductFeeDecorate) abstractionDeductFeeHandler(ctx sdk } events := sdk.Events{sdk.NewEvent(sdk.EventTypeTx, - sdk.NewAttribute(sdk.AttributeKeyFee, feeTx.GetFee().String()), + sdk.NewAttribute(sdk.AttributeKeyFee, fee.String()), )} ctx.EventManager().EmitEvents(events) @@ -159,12 +158,11 @@ func (fadfd FeeAbstractionDeductFeeDecorate) abstractionDeductFeeHandler(ctx sdk // DeductFees deducts fees from the given account. func DeductFees(bankKeeper types.BankKeeper, ctx sdk.Context, accAddress sdk.AccAddress, fees sdk.Coins) error { - if !fees.IsValid() { + if err := fees.Validate(); err != nil { return sdkerrors.Wrapf(errorstypes.ErrInsufficientFee, "invalid fee amount: %s", fees) } - err := bankKeeper.SendCoinsFromAccountToModule(ctx, accAddress, types.FeeCollectorName, fees) - if err != nil { + if err := bankKeeper.SendCoinsFromAccountToModule(ctx, accAddress, types.FeeCollectorName, fees); err != nil { return sdkerrors.Wrapf(errorstypes.ErrInsufficientFunds, err.Error()) } @@ -266,27 +264,20 @@ func (famfd FeeAbstrationMempoolFeeDecorator) AnteHandle(ctx sdk.Context, tx sdk return ctx, sdkerrors.Wrapf(errorstypes.ErrInsufficientFee, "fee is not a subset of required fees; got %s, required: %s", feeCoins.String(), feeRequired.String()) } - if byPass { - return next(ctx, tx, simulate) - } - // if the msg does not satisfy bypass condition and the feeCoins denoms are subset of fezeRequired, // check the feeCoins amount against feeRequired // // when feeCoins=[] - // special case: and there is zero coin in fee requirement, pass, - // otherwise, err - if feeCoinsLen == 0 { - if len(zeroCoinFeesDenomReq) != 0 { - return next(ctx, tx, simulate) - } - return ctx, sdkerrors.Wrapf(errorstypes.ErrInsufficientFee, "insufficient fees; got: %s required 12: %s", feeCoins, feeRequired) - } + // special case: and there is zero coin in fee requirement, pass, otherwise, err // when feeCoins != [] // special case: if TX has at least one of the zeroCoinFeesDenomReq, then it should pass - if len(feeCoinsZeroDenom) > 0 { + if byPass || (feeCoinsLen == 0 && len(zeroCoinFeesDenomReq) != 0) || len(feeCoinsZeroDenom) > 0 { return next(ctx, tx, simulate) } + + if feeCoinsLen == 0 { + return ctx, sdkerrors.Wrapf(errorstypes.ErrInsufficientFee, "insufficient fees; got: %s required 12: %s", feeCoins, feeRequired) + } // After all the checks, the tx is confirmed: // feeCoins denoms subset off feeRequired (or replaced with fee-abstraction) // Not bypass diff --git a/x/feeabs/keeper/config.go b/x/feeabs/keeper/config.go index 13a7a49d..88bda0ab 100644 --- a/x/feeabs/keeper/config.go +++ b/x/feeabs/keeper/config.go @@ -81,15 +81,10 @@ func (k Keeper) GetAllHostZoneConfig(ctx sdk.Context) (allChainConfigs []types.H return allChainConfigs, nil } -func (k Keeper) IteratorHostZone(ctx sdk.Context) sdk.Iterator { - store := ctx.KVStore(k.storeKey) - return sdk.KVStorePrefixIterator(store, types.KeyHostChainChainConfigByFeeAbs) -} - // IterateHostZone iterates over the hostzone . func (k Keeper) IterateHostZone(ctx sdk.Context, cb func(hostZoneConfig types.HostChainFeeAbsConfig) (stop bool)) { store := ctx.KVStore(k.storeKey) - iterator := sdk.KVStorePrefixIterator(store, types.KeyHostChainChainConfigByFeeAbs) + iterator := sdk.KVStorePrefixIterator(store, types.KeyHostChainConfigByFeeAbs) defer iterator.Close() for ; iterator.Valid(); iterator.Next() { @@ -101,7 +96,7 @@ func (k Keeper) IterateHostZone(ctx sdk.Context, cb func(hostZoneConfig types.Ho } } -func (k Keeper) FrozenHostZoneByIBCDenom(ctx sdk.Context, ibcDenom string) error { +func (k Keeper) FreezeHostZoneByIBCDenom(ctx sdk.Context, ibcDenom string) error { hostChainConfig, found := k.GetHostZoneConfig(ctx, ibcDenom) if !found { return types.ErrHostZoneConfigNotFound @@ -115,7 +110,7 @@ func (k Keeper) FrozenHostZoneByIBCDenom(ctx sdk.Context, ibcDenom string) error return nil } -func (k Keeper) UnFrozenHostZoneByIBCDenom(ctx sdk.Context, ibcDenom string) error { +func (k Keeper) UnFreezeHostZoneByIBCDenom(ctx sdk.Context, ibcDenom string) error { hostChainConfig, found := k.GetHostZoneConfig(ctx, ibcDenom) if !found { return types.ErrHostZoneConfigNotFound diff --git a/x/feeabs/keeper/epoch.go b/x/feeabs/keeper/epoch.go index 49426665..9614ebfd 100644 --- a/x/feeabs/keeper/epoch.go +++ b/x/feeabs/keeper/epoch.go @@ -64,12 +64,6 @@ func (k Keeper) setEpochInfo(ctx sdk.Context, epoch types.EpochInfo) { store.Set(append(types.KeyPrefixEpoch, []byte(epoch.Identifier)...), value) } -// DeleteEpochInfo delete epoch info. -func (k Keeper) DeleteEpochInfo(ctx sdk.Context, identifier string) { - store := ctx.KVStore(k.storeKey) - store.Delete(append(types.KeyPrefixEpoch, []byte(identifier)...)) -} - // IterateEpochInfo iterate through epochs. func (k Keeper) IterateEpochInfo(ctx sdk.Context, fn func(index int64, epochInfo types.EpochInfo) (stop bool)) { store := ctx.KVStore(k.storeKey) @@ -104,18 +98,6 @@ func (k Keeper) AllEpochInfos(ctx sdk.Context) []types.EpochInfo { return epochs } -// NumBlocksSinceEpochStart returns the number of blocks since the epoch started. -// if the epoch started on block N, then calling this during block N (after BeforeEpochStart) -// would return 0. -// Calling it any point in block N+1 (assuming the epoch doesn't increment) would return 1. -func (k Keeper) NumBlocksSinceEpochStart(ctx sdk.Context, identifier string) (int64, error) { - epoch := k.GetEpochInfo(ctx, identifier) - if (epoch == types.EpochInfo{}) { - return 0, fmt.Errorf("epoch with identifier %s not found", identifier) - } - return ctx.BlockHeight() - epoch.CurrentEpochStartHeight, nil -} - func (k Keeper) AfterEpochEnd(ctx sdk.Context, epochIdentifier string) { switch epochIdentifier { case types.DefaultQueryEpochIdentifier: diff --git a/x/feeabs/keeper/grpc_query.go b/x/feeabs/keeper/grpc_query.go index 6dddb780..bfb39f78 100644 --- a/x/feeabs/keeper/grpc_query.go +++ b/x/feeabs/keeper/grpc_query.go @@ -58,7 +58,7 @@ func (q Querier) FeeabsModuleBalances(goCtx context.Context, req *types.QueryFee }, nil } -func (q Querier) HostChainConfig(goCtx context.Context, req *types.QueryHostChainConfigRequest) (*types.QueryHostChainConfigRespone, error) { +func (q Querier) HostChainConfig(goCtx context.Context, req *types.QueryHostChainConfigRequest) (*types.QueryHostChainConfigResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -70,12 +70,12 @@ func (q Querier) HostChainConfig(goCtx context.Context, req *types.QueryHostChai return nil, types.ErrHostZoneConfigNotFound } - return &types.QueryHostChainConfigRespone{ + return &types.QueryHostChainConfigResponse{ HostChainConfig: hostChainConfig, }, nil } -func (q Querier) AllHostChainConfig(goCtx context.Context, req *types.AllQueryHostChainConfigRequest) (*types.AllQueryHostChainConfigRespone, error) { +func (q Querier) AllHostChainConfig(goCtx context.Context, req *types.AllQueryHostChainConfigRequest) (*types.AllQueryHostChainConfigResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -87,7 +87,7 @@ func (q Querier) AllHostChainConfig(goCtx context.Context, req *types.AllQueryHo return nil, err } - return &types.AllQueryHostChainConfigRespone{ + return &types.AllQueryHostChainConfigResponse{ AllHostChainConfig: allHostChainConfig, }, nil } diff --git a/x/feeabs/keeper/grpc_query_test.go b/x/feeabs/keeper/grpc_query_test.go index 30478370..4781ece1 100644 --- a/x/feeabs/keeper/grpc_query_test.go +++ b/x/feeabs/keeper/grpc_query_test.go @@ -70,7 +70,7 @@ func (s *KeeperTestSuite) TestHostChainConfig() { for _, tc := range []struct { desc string req *types.QueryHostChainConfigRequest - res *types.QueryHostChainConfigRespone + res *types.QueryHostChainConfigResponse shouldErr bool }{ { @@ -78,7 +78,7 @@ func (s *KeeperTestSuite) TestHostChainConfig() { req: &types.QueryHostChainConfigRequest{ IbcDenom: chainConfig.IbcDenom, }, - res: &types.QueryHostChainConfigRespone{ + res: &types.QueryHostChainConfigResponse{ HostChainConfig: chainConfig, }, shouldErr: false, @@ -88,7 +88,7 @@ func (s *KeeperTestSuite) TestHostChainConfig() { req: &types.QueryHostChainConfigRequest{ IbcDenom: "Invalid", }, - res: &types.QueryHostChainConfigRespone{ + res: &types.QueryHostChainConfigResponse{ HostChainConfig: chainConfig, }, shouldErr: true, diff --git a/x/feeabs/keeper/ibc.go b/x/feeabs/keeper/ibc.go index b633a43e..55a5414a 100644 --- a/x/feeabs/keeper/ibc.go +++ b/x/feeabs/keeper/ibc.go @@ -19,6 +19,10 @@ import ( "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" ) +const ( + timeoutDuration = 5 * time.Minute +) + // GetPort returns the portID for the module. Used in ExportGenesis. func (k Keeper) GetPort(ctx sdk.Context) string { store := ctx.KVStore(k.storeKey) @@ -84,7 +88,7 @@ func (k Keeper) SendInterchainQuery( sourcePort string, sourceChannel string, ) (uint64, error) { - timeoutTimestamp := ctx.BlockTime().Add(time.Minute * 5).UnixNano() + timeoutTimestamp := ctx.BlockTime().Add(timeoutDuration).UnixNano() channelCap, ok := k.scopedKeeper.GetCapability(ctx, host.ChannelCapabilityPath(sourcePort, sourceChannel)) if !ok { return 0, sdkerrors.Wrap(channeltypes.ErrChannelCapabilityNotFound, "module does not own channel capability") @@ -135,7 +139,7 @@ func (k Keeper) OnAcknowledgementPacket(ctx sdk.Context, ack channeltypes.Acknow if icqRes.Code != 0 { k.Logger(ctx).Error(fmt.Sprintf("Failed to send interchain query code %d", icqRes.Code)) - err := k.FrozenHostZoneByIBCDenom(ctx, hostZoneConfig.IbcDenom) + err := k.FreezeHostZoneByIBCDenom(ctx, hostZoneConfig.IbcDenom) if err != nil { // should never happen k.Logger(ctx).Error(fmt.Sprintf("Failed to frozen host zone %s", err.Error())) @@ -151,7 +155,7 @@ func (k Keeper) OnAcknowledgementPacket(ctx sdk.Context, ack channeltypes.Acknow k.Logger(ctx).Info(fmt.Sprintf("TwapRate %v", twapRate)) k.SetTwapRate(ctx, hostZoneConfig.IbcDenom, twapRate) - err = k.UnFrozenHostZoneByIBCDenom(ctx, hostZoneConfig.IbcDenom) + err = k.UnFreezeHostZoneByIBCDenom(ctx, hostZoneConfig.IbcDenom) if err != nil { // should never happen k.Logger(ctx).Error(fmt.Sprintf("Failed to frozen host zone %s", err.Error())) @@ -168,7 +172,7 @@ func (k Keeper) OnAcknowledgementPacket(ctx sdk.Context, ack channeltypes.Acknow ) case *channeltypes.Acknowledgement_Error: k.IterateHostZone(ctx, func(hostZoneConfig types.HostChainFeeAbsConfig) (stop bool) { - err := k.FrozenHostZoneByIBCDenom(ctx, hostZoneConfig.IbcDenom) + err := k.FreezeHostZoneByIBCDenom(ctx, hostZoneConfig.IbcDenom) if err != nil { k.Logger(ctx).Error(fmt.Sprintf("Failed to frozen host zone %s", err.Error())) } @@ -224,7 +228,7 @@ func (k Keeper) transferOsmosisCrosschainSwap(ctx sdk.Context, hostChainConfig t return err } - timeoutTimestamp := ctx.BlockTime().Add(time.Minute * 5).UnixNano() + timeoutTimestamp := ctx.BlockTime().Add(timeoutDuration).UnixNano() transferMsg := transfertypes.MsgTransfer{ SourcePort: transfertypes.PortID, @@ -306,7 +310,7 @@ func (k Keeper) executeAllHostChainSwap(ctx sdk.Context) { if err != nil { k.Logger(ctx).Error(fmt.Sprintf("Failed to transfer IBC token %s", err.Error())) - err = k.FrozenHostZoneByIBCDenom(ctx, hostZoneConfig.IbcDenom) + err = k.FreezeHostZoneByIBCDenom(ctx, hostZoneConfig.IbcDenom) if err != nil { k.Logger(ctx).Error(fmt.Sprintf("Failed to frozem host zone %s", err.Error())) } diff --git a/x/feeabs/keeper/keeper.go b/x/feeabs/keeper/keeper.go index eebe9a5f..93eaddf5 100644 --- a/x/feeabs/keeper/keeper.go +++ b/x/feeabs/keeper/keeper.go @@ -107,10 +107,6 @@ func (k Keeper) SendAbstractionFeeToModuleAccount(ctx sdk.Context, ibcCoins sdk. // return err if IBC token isn't in allowed_list func (k Keeper) verifyIBCCoins(ctx sdk.Context, ibcCoins sdk.Coins) error { - if ibcCoins.Len() != 1 { - return types.ErrInvalidIBCFees - } - if k.HasHostZoneConfig(ctx, ibcCoins[0].Denom) { return nil } diff --git a/x/feeabs/types/keys.go b/x/feeabs/types/keys.go index ecbb7659..e1a3ac0b 100644 --- a/x/feeabs/types/keys.go +++ b/x/feeabs/types/keys.go @@ -27,20 +27,20 @@ type ( ) var ( - OsmosisTwapExchangeRate = []byte{0x01} // Key for the exchange rate of osmosis (to native token) - KeyChannelID = []byte{0x02} // Key for IBC channel to osmosis - KeyHostChainChainConfigByFeeAbs = []byte{0x03} // Key for IBC channel to osmosis - KeyHostChainChainConfigByOsmosis = []byte{0x04} // Key for IBC channel to osmosis - KeyPrefixEpoch = []byte{0x05} // KeyPrefixEpoch defines prefix key for storing epochs. - KeyTokenDenomPair = []byte{0x06} // Key store token denom pair on feeabs and osmosis + OsmosisTwapExchangeRate = []byte{0x01} // Key for the exchange rate of osmosis (to native token) + KeyChannelID = []byte{0x02} // Key for IBC channel to osmosis + KeyHostChainConfigByFeeAbs = []byte{0x03} // Key for IBC channel to osmosis + KeyHostChainConfigByOsmosis = []byte{0x04} // Key for IBC channel to osmosis + KeyPrefixEpoch = []byte{0x05} // KeyPrefixEpoch defines prefix key for storing epochs. + KeyTokenDenomPair = []byte{0x06} // Key store token denom pair on feeabs and osmosis ) func GetKeyHostZoneConfigByFeeabsIBCDenom(feeabsIbcDenom string) []byte { - return append(KeyHostChainChainConfigByFeeAbs, []byte(feeabsIbcDenom)...) + return append(KeyHostChainConfigByFeeAbs, []byte(feeabsIbcDenom)...) } func GetKeyHostZoneConfigByOsmosisIBCDenom(osmosisIbcDenom string) []byte { - return append(KeyHostChainChainConfigByOsmosis, []byte(osmosisIbcDenom)...) + return append(KeyHostChainConfigByOsmosis, []byte(osmosisIbcDenom)...) } func GetKeyTwapExchangeRate(ibcDenom string) []byte { diff --git a/x/feeabs/types/query.pb.go b/x/feeabs/types/query.pb.go index b5814748..7b213661 100644 --- a/x/feeabs/types/query.pb.go +++ b/x/feeabs/types/query.pb.go @@ -75,22 +75,22 @@ func (m *QueryHostChainConfigRequest) GetIbcDenom() string { return "" } -type QueryHostChainConfigRespone struct { +type QueryHostChainConfigResponse struct { HostChainConfig HostChainFeeAbsConfig `protobuf:"bytes,1,opt,name=host_chain_config,json=hostChainConfig,proto3" json:"host_chain_config" yaml:"host_chain_config"` } -func (m *QueryHostChainConfigRespone) Reset() { *m = QueryHostChainConfigRespone{} } -func (m *QueryHostChainConfigRespone) String() string { return proto.CompactTextString(m) } -func (*QueryHostChainConfigRespone) ProtoMessage() {} -func (*QueryHostChainConfigRespone) Descriptor() ([]byte, []int) { +func (m *QueryHostChainConfigResponse) Reset() { *m = QueryHostChainConfigResponse{} } +func (m *QueryHostChainConfigResponse) String() string { return proto.CompactTextString(m) } +func (*QueryHostChainConfigResponse) ProtoMessage() {} +func (*QueryHostChainConfigResponse) Descriptor() ([]byte, []int) { return fileDescriptor_0a3dde61db3cbb0e, []int{1} } -func (m *QueryHostChainConfigRespone) XXX_Unmarshal(b []byte) error { +func (m *QueryHostChainConfigResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *QueryHostChainConfigRespone) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *QueryHostChainConfigResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_QueryHostChainConfigRespone.Marshal(b, m, deterministic) + return xxx_messageInfo_QueryHostChainConfigResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -100,19 +100,19 @@ func (m *QueryHostChainConfigRespone) XXX_Marshal(b []byte, deterministic bool) return b[:n], nil } } -func (m *QueryHostChainConfigRespone) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryHostChainConfigRespone.Merge(m, src) +func (m *QueryHostChainConfigResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryHostChainConfigResponse.Merge(m, src) } -func (m *QueryHostChainConfigRespone) XXX_Size() int { +func (m *QueryHostChainConfigResponse) XXX_Size() int { return m.Size() } -func (m *QueryHostChainConfigRespone) XXX_DiscardUnknown() { - xxx_messageInfo_QueryHostChainConfigRespone.DiscardUnknown(m) +func (m *QueryHostChainConfigResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryHostChainConfigResponse.DiscardUnknown(m) } -var xxx_messageInfo_QueryHostChainConfigRespone proto.InternalMessageInfo +var xxx_messageInfo_QueryHostChainConfigResponse proto.InternalMessageInfo -func (m *QueryHostChainConfigRespone) GetHostChainConfig() HostChainFeeAbsConfig { +func (m *QueryHostChainConfigResponse) GetHostChainConfig() HostChainFeeAbsConfig { if m != nil { return m.HostChainConfig } @@ -328,22 +328,22 @@ func (m *AllQueryHostChainConfigRequest) XXX_DiscardUnknown() { var xxx_messageInfo_AllQueryHostChainConfigRequest proto.InternalMessageInfo -type AllQueryHostChainConfigRespone struct { +type AllQueryHostChainConfigResponse struct { AllHostChainConfig []HostChainFeeAbsConfig `protobuf:"bytes,1,rep,name=all_host_chain_config,json=allHostChainConfig,proto3" json:"all_host_chain_config" yaml:"all_host_chain_config"` } -func (m *AllQueryHostChainConfigRespone) Reset() { *m = AllQueryHostChainConfigRespone{} } -func (m *AllQueryHostChainConfigRespone) String() string { return proto.CompactTextString(m) } -func (*AllQueryHostChainConfigRespone) ProtoMessage() {} -func (*AllQueryHostChainConfigRespone) Descriptor() ([]byte, []int) { +func (m *AllQueryHostChainConfigResponse) Reset() { *m = AllQueryHostChainConfigResponse{} } +func (m *AllQueryHostChainConfigResponse) String() string { return proto.CompactTextString(m) } +func (*AllQueryHostChainConfigResponse) ProtoMessage() {} +func (*AllQueryHostChainConfigResponse) Descriptor() ([]byte, []int) { return fileDescriptor_0a3dde61db3cbb0e, []int{7} } -func (m *AllQueryHostChainConfigRespone) XXX_Unmarshal(b []byte) error { +func (m *AllQueryHostChainConfigResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *AllQueryHostChainConfigRespone) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *AllQueryHostChainConfigResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_AllQueryHostChainConfigRespone.Marshal(b, m, deterministic) + return xxx_messageInfo_AllQueryHostChainConfigResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -353,19 +353,19 @@ func (m *AllQueryHostChainConfigRespone) XXX_Marshal(b []byte, deterministic boo return b[:n], nil } } -func (m *AllQueryHostChainConfigRespone) XXX_Merge(src proto.Message) { - xxx_messageInfo_AllQueryHostChainConfigRespone.Merge(m, src) +func (m *AllQueryHostChainConfigResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_AllQueryHostChainConfigResponse.Merge(m, src) } -func (m *AllQueryHostChainConfigRespone) XXX_Size() int { +func (m *AllQueryHostChainConfigResponse) XXX_Size() int { return m.Size() } -func (m *AllQueryHostChainConfigRespone) XXX_DiscardUnknown() { - xxx_messageInfo_AllQueryHostChainConfigRespone.DiscardUnknown(m) +func (m *AllQueryHostChainConfigResponse) XXX_DiscardUnknown() { + xxx_messageInfo_AllQueryHostChainConfigResponse.DiscardUnknown(m) } -var xxx_messageInfo_AllQueryHostChainConfigRespone proto.InternalMessageInfo +var xxx_messageInfo_AllQueryHostChainConfigResponse proto.InternalMessageInfo -func (m *AllQueryHostChainConfigRespone) GetAllHostChainConfig() []HostChainFeeAbsConfig { +func (m *AllQueryHostChainConfigResponse) GetAllHostChainConfig() []HostChainFeeAbsConfig { if m != nil { return m.AllHostChainConfig } @@ -374,13 +374,13 @@ func (m *AllQueryHostChainConfigRespone) GetAllHostChainConfig() []HostChainFeeA func init() { proto.RegisterType((*QueryHostChainConfigRequest)(nil), "feeabstraction.absfee.v1beta1.QueryHostChainConfigRequest") - proto.RegisterType((*QueryHostChainConfigRespone)(nil), "feeabstraction.absfee.v1beta1.QueryHostChainConfigRespone") + proto.RegisterType((*QueryHostChainConfigResponse)(nil), "feeabstraction.absfee.v1beta1.QueryHostChainConfigResponse") proto.RegisterType((*QueryOsmosisArithmeticTwapRequest)(nil), "feeabstraction.absfee.v1beta1.QueryOsmosisArithmeticTwapRequest") proto.RegisterType((*QueryOsmosisArithmeticTwapResponse)(nil), "feeabstraction.absfee.v1beta1.QueryOsmosisArithmeticTwapResponse") proto.RegisterType((*QueryFeeabsModuleBalacesRequest)(nil), "feeabstraction.absfee.v1beta1.QueryFeeabsModuleBalacesRequest") proto.RegisterType((*QueryFeeabsModuleBalacesResponse)(nil), "feeabstraction.absfee.v1beta1.QueryFeeabsModuleBalacesResponse") proto.RegisterType((*AllQueryHostChainConfigRequest)(nil), "feeabstraction.absfee.v1beta1.AllQueryHostChainConfigRequest") - proto.RegisterType((*AllQueryHostChainConfigRespone)(nil), "feeabstraction.absfee.v1beta1.AllQueryHostChainConfigRespone") + proto.RegisterType((*AllQueryHostChainConfigResponse)(nil), "feeabstraction.absfee.v1beta1.AllQueryHostChainConfigResponse") } func init() { @@ -388,55 +388,55 @@ func init() { } var fileDescriptor_0a3dde61db3cbb0e = []byte{ - // 756 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0xcf, 0x4f, 0xdb, 0x48, - 0x18, 0xcd, 0x80, 0x96, 0x85, 0x41, 0xda, 0x68, 0x47, 0xb0, 0xca, 0x06, 0xd6, 0x09, 0xa3, 0xd5, - 0x8a, 0x45, 0xd8, 0x2e, 0x69, 0xa5, 0xd2, 0x48, 0xa5, 0xf9, 0x81, 0x10, 0x97, 0xaa, 0x6a, 0xda, - 0x53, 0x2f, 0xd1, 0xd8, 0x99, 0x24, 0x56, 0x27, 0x1e, 0x93, 0x71, 0xa0, 0xb4, 0xea, 0x85, 0x7b, - 0xa5, 0x4a, 0x3d, 0xf4, 0xde, 0x63, 0x4f, 0x3d, 0xf6, 0x4f, 0x40, 0xa2, 0x07, 0xa4, 0x5e, 0xda, - 0x1e, 0xd2, 0x0a, 0xf8, 0x0b, 0xf8, 0x0b, 0x2a, 0xcf, 0x38, 0x81, 0x84, 0xe0, 0x44, 0xe9, 0x29, - 0xb1, 0xe6, 0x7d, 0xef, 0x7b, 0xef, 0xfb, 0x9e, 0xc7, 0xf0, 0xff, 0x2a, 0xa5, 0xc4, 0x12, 0x7e, - 0x93, 0xd8, 0xbe, 0xc3, 0x5d, 0x93, 0x58, 0xa2, 0x4a, 0xa9, 0xb9, 0xbb, 0x66, 0x51, 0x9f, 0xac, - 0x99, 0x3b, 0x2d, 0xda, 0xdc, 0x37, 0xbc, 0x26, 0xf7, 0x39, 0xfa, 0xa7, 0x17, 0x6a, 0x28, 0xa8, - 0x11, 0x42, 0x93, 0x73, 0x35, 0x5e, 0xe3, 0x12, 0x69, 0x06, 0xff, 0x54, 0x51, 0x72, 0xb1, 0xc6, - 0x79, 0x8d, 0x51, 0x93, 0x78, 0x8e, 0x49, 0x5c, 0x97, 0xfb, 0x24, 0xa8, 0x15, 0xe1, 0xe9, 0x4a, - 0x74, 0x77, 0x8f, 0x34, 0x49, 0xa3, 0x83, 0x35, 0xa2, 0xb1, 0x5c, 0x34, 0xb8, 0x70, 0x84, 0x63, - 0xd9, 0x21, 0x7e, 0x75, 0x08, 0x77, 0x93, 0x7b, 0x5c, 0x10, 0x16, 0xa2, 0x35, 0x5b, 0x12, 0x98, - 0x16, 0x11, 0x17, 0x18, 0x9b, 0x3b, 0xae, 0x3a, 0xc7, 0x59, 0xb8, 0xf0, 0x30, 0x98, 0xc5, 0x36, - 0x17, 0x7e, 0xb1, 0x4e, 0x1c, 0xb7, 0xc8, 0xdd, 0xaa, 0x53, 0x2b, 0xd1, 0x9d, 0x16, 0x15, 0x3e, - 0x5a, 0x80, 0x33, 0x8e, 0x65, 0x97, 0x2b, 0xd4, 0xe5, 0x8d, 0x04, 0x48, 0x83, 0xe5, 0x99, 0xd2, - 0xb4, 0x63, 0xd9, 0x9b, 0xc1, 0x33, 0x7e, 0x07, 0xae, 0x2b, 0x16, 0x1e, 0x77, 0x29, 0x3a, 0x00, - 0xf0, 0xcf, 0x3a, 0x17, 0x7e, 0xd9, 0x0e, 0xce, 0xca, 0xb6, 0x3c, 0x94, 0x2c, 0xb3, 0x99, 0x5b, - 0x46, 0xe4, 0xd4, 0x8d, 0x2e, 0xe5, 0x16, 0xa5, 0x79, 0x4b, 0x28, 0xe2, 0x42, 0xfa, 0xb0, 0x9d, - 0x8a, 0x9d, 0xb7, 0x53, 0x89, 0x7d, 0xd2, 0x60, 0x59, 0x7c, 0x85, 0x1c, 0x97, 0xe2, 0xf5, 0x5e, - 0x2d, 0x38, 0x07, 0x97, 0xa4, 0xc6, 0x07, 0x6a, 0x8e, 0xf9, 0xa6, 0xe3, 0xd7, 0x1b, 0xd4, 0x77, - 0xec, 0xc7, 0x7b, 0xc4, 0x1b, 0xc9, 0xe6, 0x5b, 0x00, 0x71, 0x14, 0x45, 0x60, 0x56, 0x50, 0xb4, - 0x03, 0xe3, 0xa4, 0x7b, 0x52, 0xf6, 0xf7, 0x88, 0xa7, 0x98, 0x0a, 0xdb, 0x81, 0xe8, 0x6f, 0xed, - 0xd4, 0x7f, 0x35, 0xc7, 0xaf, 0xb7, 0x2c, 0xc3, 0xe6, 0x0d, 0x33, 0xdc, 0x8a, 0xfa, 0xd1, 0x45, - 0xe5, 0xa9, 0xe9, 0xef, 0x7b, 0x54, 0x18, 0x9b, 0xd4, 0x3e, 0x6f, 0xa7, 0xfe, 0x52, 0xf6, 0xfa, - 0xe8, 0x70, 0xe9, 0x0f, 0xd2, 0xd3, 0x1a, 0x2f, 0xc1, 0x94, 0x14, 0xb6, 0x25, 0x47, 0x79, 0x9f, - 0x57, 0x5a, 0x8c, 0x16, 0x08, 0x23, 0x36, 0x15, 0xa1, 0x33, 0xfc, 0x11, 0xc0, 0xf4, 0xf5, 0x98, - 0x50, 0xfa, 0x73, 0x38, 0x6d, 0x11, 0x46, 0x5c, 0x9b, 0x8a, 0x04, 0x48, 0x4f, 0x2e, 0xcf, 0x66, - 0xfe, 0x36, 0x94, 0x34, 0x23, 0xc8, 0x4d, 0x77, 0x29, 0x45, 0xee, 0xb8, 0x85, 0x62, 0xb8, 0x83, - 0xb8, 0x12, 0xd9, 0x29, 0xc4, 0xef, 0xbf, 0xa7, 0x96, 0x47, 0x70, 0x18, 0x70, 0x88, 0x52, 0xb7, - 0x1f, 0x4a, 0xc0, 0xdf, 0x49, 0xa5, 0xd2, 0xa4, 0x42, 0x24, 0x26, 0xe4, 0xe0, 0x3b, 0x8f, 0x38, - 0x0d, 0xb5, 0x3c, 0x63, 0x11, 0xe9, 0xc4, 0x1f, 0x40, 0x04, 0x44, 0x65, 0xf0, 0x15, 0x80, 0xf3, - 0x84, 0xb1, 0xf2, 0xa0, 0x1c, 0x4e, 0x8e, 0x9d, 0xc3, 0x7f, 0xc3, 0x19, 0x2c, 0x86, 0x8b, 0x1a, - 0xd4, 0x00, 0x97, 0x10, 0x61, 0xac, 0x4f, 0x56, 0xe6, 0xeb, 0x14, 0xfc, 0x4d, 0xea, 0x45, 0x67, - 0x00, 0xce, 0x0f, 0x4c, 0x14, 0xca, 0x0d, 0xd1, 0x34, 0x34, 0xcf, 0xc9, 0xfc, 0x2f, 0x30, 0xa8, - 0x4c, 0xe0, 0xad, 0x83, 0xcf, 0x67, 0x6f, 0x26, 0x72, 0x68, 0xc3, 0xac, 0x52, 0xaa, 0x5f, 0xbe, - 0x70, 0x14, 0xb5, 0xb9, 0xdb, 0xbd, 0x9b, 0xf4, 0x8b, 0x58, 0xea, 0x41, 0x50, 0xcd, 0x17, 0xdd, - 0x97, 0xe9, 0x25, 0x3a, 0x02, 0x70, 0xae, 0x3f, 0x7b, 0x72, 0xf1, 0x1b, 0xa3, 0x68, 0xbc, 0x3e, - 0xd9, 0xc9, 0x7b, 0x63, 0xd7, 0x87, 0x0e, 0x33, 0xd2, 0xe1, 0x2a, 0x5a, 0x89, 0x70, 0xd8, 0x90, - 0x95, 0x7a, 0x37, 0xad, 0x47, 0x00, 0xc6, 0xfb, 0x56, 0x8a, 0xb2, 0xa3, 0x08, 0x19, 0x9c, 0xe0, - 0xe4, 0x78, 0xb5, 0x32, 0xda, 0x38, 0x27, 0xf5, 0x67, 0xd1, 0x7a, 0x84, 0xfe, 0x20, 0x95, 0xba, - 0x4c, 0xa5, 0xae, 0x52, 0xd9, 0xb3, 0x9b, 0x4f, 0x00, 0xa2, 0xfc, 0x95, 0x8c, 0xa2, 0xbb, 0x43, - 0x44, 0x45, 0xbf, 0x95, 0xc9, 0xb1, 0xcb, 0x95, 0xad, 0x75, 0x69, 0x2b, 0x83, 0x6e, 0x44, 0xd8, - 0x22, 0x8c, 0xe9, 0x57, 0xac, 0x15, 0x1e, 0x1d, 0x9e, 0x68, 0xe0, 0xf8, 0x44, 0x03, 0x3f, 0x4e, - 0x34, 0xf0, 0xfa, 0x54, 0x8b, 0x1d, 0x9f, 0x6a, 0xb1, 0x2f, 0xa7, 0x5a, 0xec, 0xc9, 0x9d, 0x4b, - 0x17, 0x53, 0x27, 0xb4, 0x2c, 0xe0, 0xea, 0x6f, 0xb1, 0x7b, 0xdb, 0x7c, 0xd6, 0xe9, 0x23, 0xef, - 0x2b, 0x6b, 0x4a, 0x7e, 0x27, 0x6f, 0xfe, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xce, 0xd8, 0xd5, 0x08, - 0x51, 0x08, 0x00, 0x00, + // 758 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0x4f, 0x6b, 0x13, 0x4d, + 0x1c, 0xce, 0xb4, 0xbc, 0x7d, 0xdb, 0x29, 0xbc, 0xe1, 0x1d, 0x5a, 0x89, 0x69, 0xdd, 0xa4, 0x8b, + 0x48, 0x2d, 0xdd, 0x5d, 0x1b, 0x05, 0x6b, 0xc4, 0x9a, 0x3f, 0xa5, 0xf4, 0x22, 0x62, 0xf4, 0xe4, + 0x25, 0xcc, 0x6e, 0x26, 0xc9, 0xe2, 0x64, 0x67, 0x9b, 0xd9, 0xb4, 0x56, 0xf1, 0xd2, 0xbb, 0x20, + 0x78, 0xf0, 0x03, 0x78, 0xf3, 0xe6, 0xcd, 0x8f, 0x50, 0x50, 0xa1, 0xe0, 0x45, 0x14, 0xa2, 0xb4, + 0xfd, 0x04, 0xfd, 0x04, 0xb2, 0xb3, 0x93, 0x6d, 0x93, 0xa6, 0x9b, 0x10, 0x4f, 0xc9, 0x32, 0xcf, + 0xef, 0xf9, 0x3d, 0xcf, 0xef, 0xf7, 0xec, 0x2c, 0xbc, 0x5e, 0x25, 0x04, 0x9b, 0xdc, 0x6b, 0x62, + 0xcb, 0xb3, 0x99, 0x63, 0x60, 0x93, 0x57, 0x09, 0x31, 0xb6, 0x57, 0x4c, 0xe2, 0xe1, 0x15, 0x63, + 0xab, 0x45, 0x9a, 0xbb, 0xba, 0xdb, 0x64, 0x1e, 0x43, 0x57, 0xba, 0xa1, 0x7a, 0x00, 0xd5, 0x25, + 0x34, 0x39, 0x53, 0x63, 0x35, 0x26, 0x90, 0x86, 0xff, 0x2f, 0x28, 0x4a, 0xce, 0xd7, 0x18, 0xab, + 0x51, 0x62, 0x60, 0xd7, 0x36, 0xb0, 0xe3, 0x30, 0x0f, 0xfb, 0xb5, 0x5c, 0x9e, 0x2e, 0x45, 0x77, + 0x77, 0x71, 0x13, 0x37, 0x3a, 0x58, 0x3d, 0x1a, 0xcb, 0x78, 0x83, 0x71, 0x9b, 0xdb, 0xa6, 0x25, + 0xf1, 0xcb, 0x03, 0xb8, 0x9b, 0xcc, 0x65, 0x1c, 0x53, 0x89, 0x56, 0x2c, 0x41, 0x60, 0x98, 0x98, + 0x9f, 0x62, 0x2c, 0x66, 0x3b, 0xc1, 0xb9, 0x9a, 0x85, 0x73, 0x8f, 0xfc, 0x59, 0x6c, 0x32, 0xee, + 0x15, 0xeb, 0xd8, 0x76, 0x8a, 0xcc, 0xa9, 0xda, 0xb5, 0x12, 0xd9, 0x6a, 0x11, 0xee, 0xa1, 0x39, + 0x38, 0x65, 0x9b, 0x56, 0xb9, 0x42, 0x1c, 0xd6, 0x48, 0x80, 0x34, 0x58, 0x9c, 0x2a, 0x4d, 0xda, + 0xa6, 0xb5, 0xee, 0x3f, 0xab, 0xef, 0x01, 0x9c, 0xef, 0x5f, 0xcc, 0x5d, 0xe6, 0x70, 0x82, 0xf6, + 0x00, 0xfc, 0xbf, 0xce, 0xb8, 0x57, 0xb6, 0xfc, 0xc3, 0xb2, 0x25, 0x4e, 0x05, 0xcd, 0x74, 0xe6, + 0x96, 0x1e, 0x39, 0x76, 0x3d, 0xe4, 0xdc, 0x20, 0x24, 0x6f, 0xf2, 0x80, 0xb9, 0x90, 0xde, 0x6f, + 0xa7, 0x62, 0x27, 0xed, 0x54, 0x62, 0x17, 0x37, 0x68, 0x56, 0x3d, 0x47, 0xae, 0x96, 0xe2, 0xf5, + 0x6e, 0x31, 0x6a, 0x0e, 0x2e, 0x08, 0x91, 0x0f, 0x83, 0x41, 0xe6, 0x9b, 0xb6, 0x57, 0x6f, 0x10, + 0xcf, 0xb6, 0x9e, 0xec, 0x60, 0x77, 0x28, 0x9f, 0xef, 0x00, 0x54, 0xa3, 0x28, 0xa4, 0xdb, 0x2d, + 0x18, 0xc7, 0xe1, 0x49, 0xd9, 0xdb, 0xc1, 0x6e, 0xc0, 0x54, 0xd8, 0xf4, 0x45, 0xff, 0x68, 0xa7, + 0xae, 0xd5, 0x6c, 0xaf, 0xde, 0x32, 0x75, 0x8b, 0x35, 0x0c, 0xb9, 0x96, 0xe0, 0x47, 0xe3, 0x95, + 0x67, 0x86, 0xb7, 0xeb, 0x12, 0xae, 0xaf, 0x13, 0xeb, 0xa4, 0x9d, 0xba, 0x14, 0xd8, 0xeb, 0xa1, + 0x53, 0x4b, 0xff, 0xe1, 0xae, 0xd6, 0xea, 0x02, 0x4c, 0x09, 0x61, 0x1b, 0x62, 0x94, 0x0f, 0x58, + 0xa5, 0x45, 0x49, 0x01, 0x53, 0x6c, 0x11, 0x2e, 0x9d, 0xa9, 0x9f, 0x00, 0x4c, 0x5f, 0x8c, 0x91, + 0xd2, 0x5f, 0xc0, 0x49, 0x13, 0x53, 0xec, 0x58, 0x84, 0x27, 0x40, 0x7a, 0x7c, 0x71, 0x3a, 0x73, + 0x59, 0x0f, 0xa4, 0xe9, 0x7e, 0x70, 0xc2, 0xa5, 0x14, 0x99, 0xed, 0x14, 0x8a, 0x72, 0x07, 0xf1, + 0x40, 0x64, 0xa7, 0x50, 0xfd, 0xf0, 0x2b, 0xb5, 0x38, 0x84, 0x43, 0x9f, 0x83, 0x97, 0xc2, 0x7e, + 0x28, 0x01, 0xff, 0xc5, 0x95, 0x4a, 0x93, 0x70, 0x9e, 0x18, 0x13, 0x83, 0xef, 0x3c, 0xaa, 0x69, + 0xa8, 0xe4, 0x29, 0x8d, 0x88, 0xa7, 0xfa, 0x11, 0xc0, 0xd4, 0x85, 0x10, 0xe9, 0xed, 0x35, 0x80, + 0xb3, 0x98, 0xd2, 0x72, 0xbf, 0x20, 0x8e, 0x8f, 0x1c, 0xc4, 0xab, 0x72, 0x08, 0xf3, 0x72, 0x53, + 0xfd, 0x1a, 0xa8, 0x25, 0x84, 0x29, 0xed, 0xd1, 0x95, 0xf9, 0x39, 0x01, 0xff, 0x11, 0x82, 0xd1, + 0x31, 0x80, 0xb3, 0x7d, 0x23, 0x85, 0x72, 0x03, 0x34, 0x0d, 0x0c, 0x74, 0x32, 0xff, 0x17, 0x0c, + 0xc1, 0xe0, 0xd4, 0x8d, 0xbd, 0x6f, 0xc7, 0x6f, 0xc7, 0x72, 0x68, 0xcd, 0xa8, 0x12, 0xa2, 0x9d, + 0xbd, 0x72, 0x02, 0x6a, 0x63, 0x3b, 0xbc, 0x9d, 0xb4, 0xd3, 0x5c, 0x6a, 0x7e, 0x52, 0x8d, 0x97, + 0xe1, 0xdb, 0xf4, 0x0a, 0x7d, 0x06, 0x70, 0xa6, 0x37, 0x7c, 0x62, 0xf3, 0x6b, 0xc3, 0x68, 0xbc, + 0x38, 0xda, 0xc9, 0xfb, 0x23, 0xd7, 0x4b, 0x87, 0x19, 0xe1, 0x70, 0x19, 0x2d, 0x45, 0x38, 0x6c, + 0x88, 0x4a, 0x2d, 0x8c, 0xeb, 0x17, 0x00, 0xe3, 0x3d, 0x2b, 0x45, 0xd9, 0x61, 0x84, 0xf4, 0x8f, + 0x70, 0xf2, 0xee, 0x48, 0xb5, 0xd2, 0x40, 0x4e, 0x18, 0xc8, 0xa2, 0xd5, 0x08, 0x03, 0x7e, 0x2c, + 0x35, 0x11, 0x4b, 0x2d, 0x88, 0x65, 0xd7, 0x72, 0xbe, 0x02, 0x88, 0xf2, 0xe7, 0x42, 0x8a, 0xee, + 0x0d, 0x50, 0x15, 0xfd, 0x5e, 0x26, 0xd7, 0x46, 0x2d, 0x97, 0xbe, 0x56, 0x85, 0xaf, 0x0c, 0xba, + 0x11, 0xe1, 0x0b, 0x53, 0xaa, 0x9d, 0xf3, 0x56, 0x78, 0xbc, 0x7f, 0xa8, 0x80, 0x83, 0x43, 0x05, + 0xfc, 0x3e, 0x54, 0xc0, 0x9b, 0x23, 0x25, 0x76, 0x70, 0xa4, 0xc4, 0xbe, 0x1f, 0x29, 0xb1, 0xa7, + 0x77, 0xce, 0xdc, 0x4d, 0x9d, 0xd8, 0x52, 0x9f, 0xab, 0xb7, 0xc5, 0xf6, 0x6d, 0xe3, 0x79, 0xa7, + 0x8f, 0xb8, 0xb2, 0xcc, 0x09, 0xf1, 0xad, 0xbc, 0xf9, 0x27, 0x00, 0x00, 0xff, 0xff, 0x61, 0xcb, + 0xd5, 0x08, 0x55, 0x08, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -455,8 +455,8 @@ type QueryClient interface { OsmosisArithmeticTwap(ctx context.Context, in *QueryOsmosisArithmeticTwapRequest, opts ...grpc.CallOption) (*QueryOsmosisArithmeticTwapResponse, error) // FeeabsModuleBalances return total balances of feeabs module FeeabsModuleBalances(ctx context.Context, in *QueryFeeabsModuleBalacesRequest, opts ...grpc.CallOption) (*QueryFeeabsModuleBalacesResponse, error) - HostChainConfig(ctx context.Context, in *QueryHostChainConfigRequest, opts ...grpc.CallOption) (*QueryHostChainConfigRespone, error) - AllHostChainConfig(ctx context.Context, in *AllQueryHostChainConfigRequest, opts ...grpc.CallOption) (*AllQueryHostChainConfigRespone, error) + HostChainConfig(ctx context.Context, in *QueryHostChainConfigRequest, opts ...grpc.CallOption) (*QueryHostChainConfigResponse, error) + AllHostChainConfig(ctx context.Context, in *AllQueryHostChainConfigRequest, opts ...grpc.CallOption) (*AllQueryHostChainConfigResponse, error) } type queryClient struct { @@ -485,8 +485,8 @@ func (c *queryClient) FeeabsModuleBalances(ctx context.Context, in *QueryFeeabsM return out, nil } -func (c *queryClient) HostChainConfig(ctx context.Context, in *QueryHostChainConfigRequest, opts ...grpc.CallOption) (*QueryHostChainConfigRespone, error) { - out := new(QueryHostChainConfigRespone) +func (c *queryClient) HostChainConfig(ctx context.Context, in *QueryHostChainConfigRequest, opts ...grpc.CallOption) (*QueryHostChainConfigResponse, error) { + out := new(QueryHostChainConfigResponse) err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Query/HostChainConfig", in, out, opts...) if err != nil { return nil, err @@ -494,8 +494,8 @@ func (c *queryClient) HostChainConfig(ctx context.Context, in *QueryHostChainCon return out, nil } -func (c *queryClient) AllHostChainConfig(ctx context.Context, in *AllQueryHostChainConfigRequest, opts ...grpc.CallOption) (*AllQueryHostChainConfigRespone, error) { - out := new(AllQueryHostChainConfigRespone) +func (c *queryClient) AllHostChainConfig(ctx context.Context, in *AllQueryHostChainConfigRequest, opts ...grpc.CallOption) (*AllQueryHostChainConfigResponse, error) { + out := new(AllQueryHostChainConfigResponse) err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Query/AllHostChainConfig", in, out, opts...) if err != nil { return nil, err @@ -509,8 +509,8 @@ type QueryServer interface { OsmosisArithmeticTwap(context.Context, *QueryOsmosisArithmeticTwapRequest) (*QueryOsmosisArithmeticTwapResponse, error) // FeeabsModuleBalances return total balances of feeabs module FeeabsModuleBalances(context.Context, *QueryFeeabsModuleBalacesRequest) (*QueryFeeabsModuleBalacesResponse, error) - HostChainConfig(context.Context, *QueryHostChainConfigRequest) (*QueryHostChainConfigRespone, error) - AllHostChainConfig(context.Context, *AllQueryHostChainConfigRequest) (*AllQueryHostChainConfigRespone, error) + HostChainConfig(context.Context, *QueryHostChainConfigRequest) (*QueryHostChainConfigResponse, error) + AllHostChainConfig(context.Context, *AllQueryHostChainConfigRequest) (*AllQueryHostChainConfigResponse, error) } // UnimplementedQueryServer can be embedded to have forward compatible implementations. @@ -523,10 +523,10 @@ func (*UnimplementedQueryServer) OsmosisArithmeticTwap(ctx context.Context, req func (*UnimplementedQueryServer) FeeabsModuleBalances(ctx context.Context, req *QueryFeeabsModuleBalacesRequest) (*QueryFeeabsModuleBalacesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method FeeabsModuleBalances not implemented") } -func (*UnimplementedQueryServer) HostChainConfig(ctx context.Context, req *QueryHostChainConfigRequest) (*QueryHostChainConfigRespone, error) { +func (*UnimplementedQueryServer) HostChainConfig(ctx context.Context, req *QueryHostChainConfigRequest) (*QueryHostChainConfigResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method HostChainConfig not implemented") } -func (*UnimplementedQueryServer) AllHostChainConfig(ctx context.Context, req *AllQueryHostChainConfigRequest) (*AllQueryHostChainConfigRespone, error) { +func (*UnimplementedQueryServer) AllHostChainConfig(ctx context.Context, req *AllQueryHostChainConfigRequest) (*AllQueryHostChainConfigResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AllHostChainConfig not implemented") } @@ -661,7 +661,7 @@ func (m *QueryHostChainConfigRequest) MarshalToSizedBuffer(dAtA []byte) (int, er return len(dAtA) - i, nil } -func (m *QueryHostChainConfigRespone) Marshal() (dAtA []byte, err error) { +func (m *QueryHostChainConfigResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -671,12 +671,12 @@ func (m *QueryHostChainConfigRespone) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryHostChainConfigRespone) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryHostChainConfigResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryHostChainConfigRespone) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryHostChainConfigResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -847,7 +847,7 @@ func (m *AllQueryHostChainConfigRequest) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } -func (m *AllQueryHostChainConfigRespone) Marshal() (dAtA []byte, err error) { +func (m *AllQueryHostChainConfigResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -857,12 +857,12 @@ func (m *AllQueryHostChainConfigRespone) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *AllQueryHostChainConfigRespone) MarshalTo(dAtA []byte) (int, error) { +func (m *AllQueryHostChainConfigResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *AllQueryHostChainConfigRespone) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *AllQueryHostChainConfigResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -908,7 +908,7 @@ func (m *QueryHostChainConfigRequest) Size() (n int) { return n } -func (m *QueryHostChainConfigRespone) Size() (n int) { +func (m *QueryHostChainConfigResponse) Size() (n int) { if m == nil { return 0 } @@ -980,7 +980,7 @@ func (m *AllQueryHostChainConfigRequest) Size() (n int) { return n } -func (m *AllQueryHostChainConfigRespone) Size() (n int) { +func (m *AllQueryHostChainConfigResponse) Size() (n int) { if m == nil { return 0 } @@ -1083,7 +1083,7 @@ func (m *QueryHostChainConfigRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *QueryHostChainConfigRespone) Unmarshal(dAtA []byte) error { +func (m *QueryHostChainConfigResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1106,10 +1106,10 @@ func (m *QueryHostChainConfigRespone) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: QueryHostChainConfigRespone: wiretype end group for non-group") + return fmt.Errorf("proto: QueryHostChainConfigResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: QueryHostChainConfigRespone: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: QueryHostChainConfigResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -1548,7 +1548,7 @@ func (m *AllQueryHostChainConfigRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *AllQueryHostChainConfigRespone) Unmarshal(dAtA []byte) error { +func (m *AllQueryHostChainConfigResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -1571,10 +1571,10 @@ func (m *AllQueryHostChainConfigRespone) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: AllQueryHostChainConfigRespone: wiretype end group for non-group") + return fmt.Errorf("proto: AllQueryHostChainConfigResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: AllQueryHostChainConfigRespone: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: AllQueryHostChainConfigResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: From 8b0c62c0350b36dc9629c588bffc4babca388643 Mon Sep 17 00:00:00 2001 From: Tien Nguyen Date: Tue, 16 Jan 2024 21:01:16 +0700 Subject: [PATCH 67/90] Add unit test for delete proposal. (#121) * Add unit test for delete proposal. * Add testcase delete not exists host zone config for TestDeleteHostZoneProposal. --- x/feeabs/keeper/proposal_test.go | 80 ++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/x/feeabs/keeper/proposal_test.go b/x/feeabs/keeper/proposal_test.go index 6ed11fc9..446beadf 100644 --- a/x/feeabs/keeper/proposal_test.go +++ b/x/feeabs/keeper/proposal_test.go @@ -59,3 +59,83 @@ func (s *KeeperTestSuite) TestAddHostZoneProposal() { }) } } + +func (s *KeeperTestSuite) TestDeleteHostZoneProposal() { + s.SetupTest() + addrs := simtestutil.AddTestAddrs(s.feeAbsApp.BankKeeper, s.feeAbsApp.StakingKeeper, s.ctx, 10, valTokens) + + hostChainConfig := types.HostChainFeeAbsConfig{ + IbcDenom: "ibc/ED07A3391A112B175915CD8FAF43A2DA8E4790EDE12566649D0C2F97716B8518", + OsmosisPoolTokenDenomIn: "ibc/9117A26BA81E29FA4F78F57DC2BD90CD3D26848101BA880445F119B22A1E254E", + PoolId: 1, + Frozen: false, + } + + addProposal := &types.AddHostZoneProposal{ + Title: "AddHostZoneProposal Title", + Description: "AddHostZoneProposal Description", + HostChainConfig: &hostChainConfig, + } + + legacyProposal, err := govv1types.NewLegacyContent(addProposal, authtypes.NewModuleAddress(govtypes.ModuleName).String()) + s.Require().NoError(err) + + // Store proposal + _, err = s.govKeeper.SubmitProposal(s.ctx, []sdk.Msg{legacyProposal}, "", "", "", addrs[0]) + s.Require().NoError(err) + + // Execute proposal + handler := s.govKeeper.LegacyRouter().GetRoute(addProposal.ProposalRoute()) + err = handler(s.ctx, addProposal) + s.Require().NoError(err) + + hostChainConfig, found := s.feeAbsKeeper.GetHostZoneConfig(s.ctx, hostChainConfig.IbcDenom) + s.Require().True(found) + s.Require().Equal(hostChainConfig, hostChainConfig) + + testCases := []struct { + desc string + deleteProposal *types.DeleteHostZoneProposal + shouldError bool + }{ + { + desc: "should success when delete an exists host zone config.", + deleteProposal: &types.DeleteHostZoneProposal{ + Title: "DeleteHostZoneProposal Title", + Description: "DeleteHostZoneProposal Description", + IbcDenom: "ibc/ED07A3391A112B175915CD8FAF43A2DA8E4790EDE12566649D0C2F97716B8518", + }, + shouldError: false, + }, + { + deleteProposal: &types.DeleteHostZoneProposal{ + Title: "DeleteHostZoneProposal Title", + Description: "DeleteHostZoneProposal Description", + IbcDenom: "ibc/00000", + }, + desc: "should error when delete a not exists host zone config.", + shouldError: true, + }, + } + + for _, tc := range testCases { + s.Run(tc.desc, func() { + legacyProposal, err := govv1types.NewLegacyContent(tc.deleteProposal, authtypes.NewModuleAddress(govtypes.ModuleName).String()) + s.Require().NoError(err) + + // Store proposal + _, err = s.govKeeper.SubmitProposal(s.ctx, []sdk.Msg{legacyProposal}, "", "", "", addrs[0]) + if !tc.shouldError { + s.Require().NoError(err) + } else { + s.Require().Error(err) + return + } + + // Execute proposal + handler = s.govKeeper.LegacyRouter().GetRoute(addProposal.ProposalRoute()) + err = handler(s.ctx, tc.deleteProposal) + s.Require().NoError(err) + }) + } +} From 3a24c8e44acdb9a08ce1334b4512f8caa04ce615 Mon Sep 17 00:00:00 2001 From: Tien Nguyen Date: Wed, 17 Jan 2024 14:05:18 +0700 Subject: [PATCH 68/90] Add error handling and some refactor. (#120) * Add error handling and some refactor. * Fix lints * Fix logic delete host zone config * Change proposal keys. --- scripts/proposal.json | 12 ++++++------ tests/interchaintest/proposal/proposal.json | 10 +++++----- x/feeabs/keeper/config.go | 9 +++++---- x/feeabs/keeper/exchange_rate.go | 7 +++++-- x/feeabs/keeper/keeper.go | 16 ++++++++++------ x/feeabs/keeper/msgserver.go | 2 +- x/feeabs/types/build_memo.go | 6 +++--- x/feeabs/types/build_memo_test.go | 2 +- x/feeabs/types/epoch.go | 8 ++++---- x/feeabs/types/errors.go | 7 ++++--- x/feeabs/types/genesis.go | 2 +- x/feeabs/types/msg.go | 8 +++----- x/feeabs/types/params.go | 12 ++++++------ 13 files changed, 54 insertions(+), 47 deletions(-) diff --git a/scripts/proposal.json b/scripts/proposal.json index 90de6dad..4bb768f4 100644 --- a/scripts/proposal.json +++ b/scripts/proposal.json @@ -4,32 +4,32 @@ "changes": [ { "subspace": "feeabs", - "key": "chainname", + "key": "ChainName", "value": "feeabs" }, { "subspace": "feeabs", - "key": "nativeibcedinosmosis", + "key": "NativeIbcedInOsmosis", "value": "ibc/C053D637CCA2A2BA030E2C5EE1B28A16F71CCB0E45E8BE52766DC1B241B77878" }, { "subspace": "feeabs", - "key": "chainname", + "key": "ChainName", "value": "feeappd-t1" }, { "subspace": "feeabs", - "key": "ibctransferchannel", + "key": "IbcTransferChannel", "value": "channel-0" }, { "subspace": "feeabs", - "key": "ibcqueryicqchannel", + "key": "IbcQueryIcqChannel", "value": "channel-1" }, { "subspace": "feeabs", - "key": "osmosiscrosschainswapaddress", + "key": "OsmosisCrosschainSwapAddress", "value": "osmo17p9rzwnnfxcjp32un9ug7yhhzgtkhvl9jfksztgw5uh69wac2pgs5yczr8" } ], diff --git a/tests/interchaintest/proposal/proposal.json b/tests/interchaintest/proposal/proposal.json index f3ebee32..33dd9232 100644 --- a/tests/interchaintest/proposal/proposal.json +++ b/tests/interchaintest/proposal/proposal.json @@ -4,27 +4,27 @@ "changes": [ { "subspace": "feeabs", - "key": "nativeibcedinosmosis", + "key": "NativeIbcedInOsmosis", "value": "ibc/C053D637CCA2A2BA030E2C5EE1B28A16F71CCB0E45E8BE52766DC1B241B77878" }, { "subspace": "feeabs", - "key": "chainname", + "key": "ChainName", "value": "feeabs" }, { "subspace": "feeabs", - "key": "ibctransferchannel", + "key": "IbcTransferChannel", "value": "channel-0" }, { "subspace": "feeabs", - "key": "ibcqueryicqchannel", + "key": "IbcQueryIcqChannel", "value": "channel-1" }, { "subspace": "feeabs", - "key": "osmosiscrosschainswapaddress", + "key": "OsmosisCrosschainSwapAddress", "value": "osmo17p9rzwnnfxcjp32un9ug7yhhzgtkhvl9jfksztgw5uh69wac2pgs5yczr8" } ], diff --git a/x/feeabs/keeper/config.go b/x/feeabs/keeper/config.go index 88bda0ab..7fc9e472 100644 --- a/x/feeabs/keeper/config.go +++ b/x/feeabs/keeper/config.go @@ -59,15 +59,16 @@ func (k Keeper) SetHostZoneConfig(ctx sdk.Context, chainConfig types.HostChainFe } func (k Keeper) DeleteHostZoneConfig(ctx sdk.Context, ibcDenom string) error { - hostZoneConfig, _ := k.GetHostZoneConfig(ctx, ibcDenom) store := ctx.KVStore(k.storeKey) + hostZoneConfig, ok := k.GetHostZoneConfig(ctx, ibcDenom) + if ok { + key := types.GetKeyHostZoneConfigByOsmosisIBCDenom(hostZoneConfig.OsmosisPoolTokenDenomIn) + store.Delete(key) + } key := types.GetKeyHostZoneConfigByFeeabsIBCDenom(ibcDenom) store.Delete(key) - key = types.GetKeyHostZoneConfigByOsmosisIBCDenom(hostZoneConfig.OsmosisPoolTokenDenomIn) - store.Delete(key) - return nil } diff --git a/x/feeabs/keeper/exchange_rate.go b/x/feeabs/keeper/exchange_rate.go index 6a26c67e..72e84a69 100644 --- a/x/feeabs/keeper/exchange_rate.go +++ b/x/feeabs/keeper/exchange_rate.go @@ -14,7 +14,7 @@ func (k Keeper) GetTwapRate(ctx sdk.Context, ibcDenom string) (sdk.Dec, error) { key := types.GetKeyTwapExchangeRate(ibcDenom) bz := store.Get(key) if bz == nil { - return sdk.ZeroDec(), sdkerrors.Wrapf(types.ErrInvalidExchangeRate, "Osmosis does not have exchange rate data") + return sdk.Dec{}, sdkerrors.Wrapf(types.ErrInvalidExchangeRate, "Osmosis does not have exchange rate data") } var osmosisExchangeRate sdk.Dec @@ -27,7 +27,10 @@ func (k Keeper) GetTwapRate(ctx sdk.Context, ibcDenom string) (sdk.Dec, error) { func (k Keeper) SetTwapRate(ctx sdk.Context, ibcDenom string, osmosisTWAPExchangeRate sdk.Dec) { store := ctx.KVStore(k.storeKey) - bz, _ := osmosisTWAPExchangeRate.Marshal() + bz, err := osmosisTWAPExchangeRate.Marshal() + if err != nil { + panic(err) + } key := types.GetKeyTwapExchangeRate(ibcDenom) store.Set(key, bz) } diff --git a/x/feeabs/keeper/keeper.go b/x/feeabs/keeper/keeper.go index 93eaddf5..5829cec9 100644 --- a/x/feeabs/keeper/keeper.go +++ b/x/feeabs/keeper/keeper.go @@ -80,12 +80,12 @@ func (k Keeper) GetDefaultBondDenom(ctx sdk.Context) string { func (k Keeper) CalculateNativeFromIBCCoins(ctx sdk.Context, ibcCoins sdk.Coins, chainConfig types.HostChainFeeAbsConfig) (coins sdk.Coins, err error) { err = k.verifyIBCCoins(ctx, ibcCoins) if err != nil { - return sdk.Coins{}, nil + return sdk.Coins{}, err } twapRate, err := k.GetTwapRate(ctx, chainConfig.IbcDenom) if err != nil { - return sdk.Coins{}, nil + return sdk.Coins{}, err } // mul @@ -107,11 +107,15 @@ func (k Keeper) SendAbstractionFeeToModuleAccount(ctx sdk.Context, ibcCoins sdk. // return err if IBC token isn't in allowed_list func (k Keeper) verifyIBCCoins(ctx sdk.Context, ibcCoins sdk.Coins) error { - if k.HasHostZoneConfig(ctx, ibcCoins[0].Denom) { + if ibcCoins.Len() != 1 { + return types.ErrInvalidIBCFees + } + + ibcDenom := ibcCoins[0].Denom + if k.HasHostZoneConfig(ctx, ibcDenom) { return nil } - // TODO: we should register error for this - return fmt.Errorf("unallowed %s for tx fee", ibcCoins[0].Denom) + return types.ErrUnsupportedDenom.Wrapf("unsupported denom: %s", ibcDenom) } func (Keeper) Logger(ctx sdk.Context) log.Logger { @@ -132,7 +136,7 @@ func (k Keeper) SetParams(ctx sdk.Context, params types.Params) { func (k Keeper) GetCapability(ctx sdk.Context, name string) *capabilitytypes.Capability { capability, ok := k.scopedKeeper.GetCapability(ctx, name) if !ok { - k.Logger(ctx).Error("Error ErrChannelCapabilityNotFound ") + k.Logger(ctx).Error(fmt.Sprintf("not found capability with given name: %s", name)) return nil } return capability diff --git a/x/feeabs/keeper/msgserver.go b/x/feeabs/keeper/msgserver.go index 0b8af384..08f92489 100644 --- a/x/feeabs/keeper/msgserver.go +++ b/x/feeabs/keeper/msgserver.go @@ -40,7 +40,7 @@ func (k Keeper) SwapCrossChain(goCtx context.Context, msg *types.MsgSwapCrossCha ctx := sdk.UnwrapSDKContext(goCtx) hostChainConfig, found := k.GetHostZoneConfig(ctx, msg.IbcDenom) if !found { - return &types.MsgSwapCrossChainResponse{}, types.ErrHostZoneConfigNotFound + return nil, types.ErrHostZoneConfigNotFound } _, err := sdk.AccAddressFromBech32(msg.FromAddress) if err != nil { diff --git a/x/feeabs/types/build_memo.go b/x/feeabs/types/build_memo.go index 6d452598..c4ebab4b 100644 --- a/x/feeabs/types/build_memo.go +++ b/x/feeabs/types/build_memo.go @@ -14,7 +14,7 @@ type OsmosisSwapMsg struct { OsmosisSwap Swap `json:"osmosis_swap"` } type Swap struct { - OutPutDenom string `json:"output_denom"` + OutputDenom string `json:"output_denom"` Slippage Twap `json:"slippage"` Receiver string `json:"receiver"` OnFailedDelivery string `json:"on_failed_delivery"` @@ -46,7 +46,7 @@ type ForwardMetadata struct { func NewOsmosisSwapMsg(outputDenom string, slippagePercentage string, windowSeconds uint64, receiver string) OsmosisSwapMsg { swap := Swap{ - OutPutDenom: outputDenom, + OutputDenom: outputDenom, Slippage: Twap{ Twap: TwapRouter{ SlippagePercentage: slippagePercentage, @@ -83,7 +83,7 @@ func ParseMsgToMemo(msg OsmosisSwapMsg, contractAddr string) (string, error) { func BuildCrossChainSwapMemo(outputDenom string, contractAddress string, receiverAddress string, chainName string) (string, error) { receiver := fmt.Sprintf("%s/%s", chainName, receiverAddress) swap := Swap{ - OutPutDenom: outputDenom, + OutputDenom: outputDenom, Slippage: Twap{ Twap: TwapRouter{ SlippagePercentage: "20", diff --git a/x/feeabs/types/build_memo_test.go b/x/feeabs/types/build_memo_test.go index 0ec42698..261a3b95 100644 --- a/x/feeabs/types/build_memo_test.go +++ b/x/feeabs/types/build_memo_test.go @@ -16,7 +16,7 @@ func TestParseMsgToMemo(t *testing.T) { } swap := types.Swap{ - OutPutDenom: "khanhyeuchau", + OutputDenom: "denom", Slippage: types.Twap{Twap: twapRouter}, Receiver: "123456", } diff --git a/x/feeabs/types/epoch.go b/x/feeabs/types/epoch.go index 2c99f6cf..d4b28bc4 100644 --- a/x/feeabs/types/epoch.go +++ b/x/feeabs/types/epoch.go @@ -6,10 +6,10 @@ import ( ) const ( - DefaultSwapPeriod time.Duration = time.Minute * 180 - DefaultQueryPeriod time.Duration = time.Minute * 60 - DefaultSwapEpochIdentifier string = "swap" - DefaultQueryEpochIdentifier string = "query" + DefaultSwapPeriod = time.Minute * 180 + DefaultQueryPeriod = time.Minute * 60 + DefaultSwapEpochIdentifier = "swap" + DefaultQueryEpochIdentifier = "query" ) func KeyPrefix(p string) []byte { diff --git a/x/feeabs/types/errors.go b/x/feeabs/types/errors.go index d941329b..cd456af4 100644 --- a/x/feeabs/types/errors.go +++ b/x/feeabs/types/errors.go @@ -7,7 +7,8 @@ import ( var ( ErrInvalidExchangeRate = sdkerrors.Register(ModuleName, 1, "invalid exchange rate") ErrInvalidIBCFees = sdkerrors.Register(ModuleName, 2, "invalid ibc fees") - ErrHostZoneConfigNotFound = sdkerrors.Register(ModuleName, 3, "host chain config not found") - ErrDuplicateHostZoneConfig = sdkerrors.Register(ModuleName, 4, "duplicate config") - ErrNotEnoughFundInModuleAddress = sdkerrors.Register(ModuleName, 6, "not have funding yet") + ErrHostZoneConfigNotFound = sdkerrors.Register(ModuleName, 3, "host zone config not found") + ErrDuplicateHostZoneConfig = sdkerrors.Register(ModuleName, 4, "duplicate host zone config") + ErrNotEnoughFundInModuleAddress = sdkerrors.Register(ModuleName, 5, "not have funding yet") + ErrUnsupportedDenom = sdkerrors.Register(ModuleName, 6, "unsupported denom") ) diff --git a/x/feeabs/types/genesis.go b/x/feeabs/types/genesis.go index 08f3e50c..df33c685 100644 --- a/x/feeabs/types/genesis.go +++ b/x/feeabs/types/genesis.go @@ -1,6 +1,6 @@ package types -import fmt "fmt" +import "fmt" // DefaultGenesis returns the incentive module's default genesis state. func DefaultGenesis() *GenesisState { diff --git a/x/feeabs/types/msg.go b/x/feeabs/types/msg.go index d303a3a1..36b034a9 100644 --- a/x/feeabs/types/msg.go +++ b/x/feeabs/types/msg.go @@ -1,8 +1,6 @@ package types import ( - sdkerrors "cosmossdk.io/errors" - "github.com/cosmos/cosmos-sdk/codec/legacy" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -33,7 +31,7 @@ func (m MsgSendQueryIbcDenomTWAP) GetSignBytes() []byte { func (m MsgSendQueryIbcDenomTWAP) ValidateBasic() error { _, err := sdk.AccAddressFromBech32(m.FromAddress) if err != nil { - return sdkerrors.Wrap(err, "from address must be valid address") + return err } return nil } @@ -70,7 +68,7 @@ func (m MsgSwapCrossChain) GetSignBytes() []byte { func (m MsgSwapCrossChain) ValidateBasic() error { _, err := sdk.AccAddressFromBech32(m.FromAddress) if err != nil { - return sdkerrors.Wrap(err, "from address must be valid address") + return err } return nil } @@ -108,7 +106,7 @@ func (m MsgFundFeeAbsModuleAccount) GetSignBytes() []byte { func (m MsgFundFeeAbsModuleAccount) ValidateBasic() error { _, err := sdk.AccAddressFromBech32(m.FromAddress) if err != nil { - return sdkerrors.Wrap(err, "from address must be valid address") + return err } return nil } diff --git a/x/feeabs/types/params.go b/x/feeabs/types/params.go index c5f37c96..3c85733c 100644 --- a/x/feeabs/types/params.go +++ b/x/feeabs/types/params.go @@ -15,12 +15,12 @@ const ( // Parameter keys store keys. var ( - KeyOsmosisQueryTwapPath = []byte("osmosisquerytwappath") - KeyNativeIbcedInOsmosis = []byte("nativeibcedinosmosis") - KeyChainName = []byte("chainname") - KeyIbcTransferChannel = []byte("ibctransferchannel") - KeyIbcQueryIcqChannel = []byte("ibcqueryicqchannel") - KeyOsmosisCrosschainSwapAddress = []byte("osmosiscrosschainswapaddress") + KeyOsmosisQueryTwapPath = []byte("OsmosisQueryTwapPath") + KeyNativeIbcedInOsmosis = []byte("NativeIbcedInOsmosis") + KeyChainName = []byte("ChainName") + KeyIbcTransferChannel = []byte("IbcTransferChannel") + KeyIbcQueryIcqChannel = []byte("IbcQueryIcqChannel") + KeyOsmosisCrosschainSwapAddress = []byte("OsmosisCrosschainSwapAddress") _ paramtypes.ParamSet = &Params{} ) From affd690c2a2e8545b6d5ee2e502c7f734c5380ea Mon Sep 17 00:00:00 2001 From: Duong Minh Ngoc <153509244+minhngoc274@users.noreply.github.com> Date: Wed, 17 Jan 2024 14:53:36 +0700 Subject: [PATCH 69/90] Add host zone proposal interchain test (#122) * test: add host zone proposal interchain test * test: add workflow config --------- Co-authored-by: Tien Nguyen --- .github/workflows/interchaintest.yaml | 16 + Makefile | 3 + tests/interchaintest/feeabs/proposal.go | 61 ++ tests/interchaintest/feeabs/query.go | 34 ++ .../interchaintest/host_zone_proposal_test.go | 538 ++++++++++++++++++ tests/interchaintest/packet_foward_test.go | 2 +- .../{host_zone.json => add_host_zone.json} | 0 .../proposal/delete_host_zone.json | 6 + .../proposal/set_host_zone.json | 12 + 9 files changed, 671 insertions(+), 1 deletion(-) create mode 100644 tests/interchaintest/feeabs/proposal.go create mode 100644 tests/interchaintest/feeabs/query.go create mode 100644 tests/interchaintest/host_zone_proposal_test.go rename tests/interchaintest/proposal/{host_zone.json => add_host_zone.json} (100%) create mode 100644 tests/interchaintest/proposal/delete_host_zone.json create mode 100644 tests/interchaintest/proposal/set_host_zone.json diff --git a/.github/workflows/interchaintest.yaml b/.github/workflows/interchaintest.yaml index d268c305..57435e45 100644 --- a/.github/workflows/interchaintest.yaml +++ b/.github/workflows/interchaintest.yaml @@ -74,3 +74,19 @@ jobs: - run: make ictest-packet-forward env: BRANCH_CI: 'latest' + + test-host-zone-proposal: + runs-on: ubuntu-latest + needs: build-and-push-image + steps: + - name: Set up Go 1.21 + uses: actions/setup-go@v3 + with: + go-version: 1.21 + + - name: checkout code + uses: actions/checkout@v3 + + - run: make ictest-host-zone-proposal + env: + BRANCH_CI: 'latest' diff --git a/Makefile b/Makefile index b208c3c9..a384855b 100644 --- a/Makefile +++ b/Makefile @@ -121,6 +121,9 @@ ictest-ibc: ictest-packet-forward: cd tests/interchaintest && go test -timeout=25m -race -v -run TestPacketForwardMiddleware . +ictest-host-zone-proposal: + cd tests/interchaintest && go test -timeout=25m -race -v -run TestHostZoneProposal . + # Executes all tests via interchaintest after compling a local image as juno:local ictest-all: ictest-basic ictest-ibc ictest-packet-forward diff --git a/tests/interchaintest/feeabs/proposal.go b/tests/interchaintest/feeabs/proposal.go new file mode 100644 index 00000000..e4de1379 --- /dev/null +++ b/tests/interchaintest/feeabs/proposal.go @@ -0,0 +1,61 @@ +package feeabs + +import ( + "context" + "fmt" + "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" + "os" + "path/filepath" +) + +func DeleteHostZoneProposal(c *cosmos.CosmosChain, ctx context.Context, keyName string, fileLocation string) (string, error) { + tn := c.Validators[0] + if len(c.FullNodes) > 0 { + tn = c.FullNodes[0] + } + dat, err := os.ReadFile(fileLocation) + if err != nil { + return "", fmt.Errorf("failed to read file: %w", err) + } + + fileName := "delete-hostzone.json" + + err = tn.WriteFile(ctx, dat, fileName) + if err != nil { + return "", fmt.Errorf("writing delete host zone proposal: %w", err) + } + + filePath := filepath.Join(tn.HomeDir(), fileName) + + command := []string{ + "gov", "submit-legacy-proposal", + "delete-hostzone-config", filePath, + } + return tn.ExecTx(ctx, keyName, command...) +} + +func SetHostZoneProposal(c *cosmos.CosmosChain, ctx context.Context, keyName string, fileLocation string) (string, error) { + tn := c.Validators[0] + if len(c.FullNodes) > 0 { + tn = c.FullNodes[0] + } + dat, err := os.ReadFile(fileLocation) + if err != nil { + return "", fmt.Errorf("failed to read file: %w", err) + } + + fileName := "set-hostzone.json" + + err = tn.WriteFile(ctx, dat, fileName) + if err != nil { + return "", fmt.Errorf("writing set host zone proposal: %w", err) + } + + filePath := filepath.Join(tn.HomeDir(), fileName) + + command := []string{ + "gov", "submit-legacy-proposal", + "set-hostzone-config", filePath, + } + return tn.ExecTx(ctx, keyName, command...) +} diff --git a/tests/interchaintest/feeabs/query.go b/tests/interchaintest/feeabs/query.go new file mode 100644 index 00000000..6f9e89ea --- /dev/null +++ b/tests/interchaintest/feeabs/query.go @@ -0,0 +1,34 @@ +package feeabs + +import ( + "context" + "encoding/json" + "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" +) + +type HostChainFeeAbsConfigResponse struct { + HostChainConfig HostChainFeeAbsConfig `json:"host_chain_config"` +} + +type HostChainFeeAbsConfig struct { + IbcDenom string `json:"ibc_denom"` + OsmosisPoolTokenDenomIn string `json:"osmosis_pool_token_denom_in"` + PoolId string `json:"pool_id"` + Frozen bool `json:"frozen"` +} + +func QueryFeeabsHostZoneConfigWithDenom(c *cosmos.CosmosChain, ctx context.Context, denom string) (*HostChainFeeAbsConfigResponse, error) { + cmd := []string{"feeabs", "host-chain-config", denom} + stdout, _, err := c.ExecQuery(ctx, cmd) + if err != nil { + return &HostChainFeeAbsConfigResponse{}, err + } + + var hostZoneConfig HostChainFeeAbsConfigResponse + err = json.Unmarshal(stdout, &hostZoneConfig) + if err != nil { + return &HostChainFeeAbsConfigResponse{}, err + } + + return &hostZoneConfig, nil +} diff --git a/tests/interchaintest/host_zone_proposal_test.go b/tests/interchaintest/host_zone_proposal_test.go new file mode 100644 index 00000000..e01ec0c7 --- /dev/null +++ b/tests/interchaintest/host_zone_proposal_test.go @@ -0,0 +1,538 @@ +package interchaintest + +import ( + "context" + "cosmossdk.io/math" + "fmt" + sdktypes "github.com/cosmos/cosmos-sdk/types" + feeabsCli "github.com/notional-labs/fee-abstraction/tests/interchaintest/feeabs" + "testing" + + transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + "github.com/strangelove-ventures/interchaintest/v7" + "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v7/ibc" + "github.com/strangelove-ventures/interchaintest/v7/testreporter" + "github.com/strangelove-ventures/interchaintest/v7/testutil" + "github.com/stretchr/testify/require" + "go.uber.org/zap/zaptest" +) + +func TestHostZoneProposal(t *testing.T) { + if testing.Short() { + t.Skip("skipping in short mode") + } + + client, network := interchaintest.DockerSetup(t) + + rep := testreporter.NewNopReporter() + eRep := rep.RelayerExecReporter(t) + + ctx := context.Background() + + // Create chain factory with Feeabs and Gaia + numVals := 1 + numFullNodes := 1 + gasAdjustment := 2.0 + + cf := interchaintest.NewBuiltinChainFactory(zaptest.NewLogger(t), []*interchaintest.ChainSpec{ + { + Name: "feeabs", + ChainConfig: feeabsConfig, + NumValidators: &numVals, + NumFullNodes: &numFullNodes, + }, + { + Name: "gaia", + Version: "v12.0.0-rc0", + ChainConfig: ibc.ChainConfig{ + GasPrices: "0.0uatom", + }, + NumValidators: &numVals, + NumFullNodes: &numFullNodes, + }, + { + Name: "osmosis", + Version: "v17.0.0", + ChainConfig: ibc.ChainConfig{ + GasPrices: "0.005uosmo", + EncodingConfig: osmosisEncoding(), + }, + GasAdjustment: &gasAdjustment, + NumValidators: &numVals, + NumFullNodes: &numFullNodes, + }, + }) + + chains, err := cf.Chains(t.Name()) + require.NoError(t, err) + + feeabs, gaia, osmosis := chains[0].(*cosmos.CosmosChain), chains[1].(*cosmos.CosmosChain), chains[2].(*cosmos.CosmosChain) + + r := interchaintest.NewBuiltinRelayerFactory( + ibc.CosmosRly, + zaptest.NewLogger(t), + ).Build(t, client, network) + + ic := interchaintest.NewInterchain(). + AddChain(feeabs). + AddChain(gaia). + AddChain(osmosis). + AddRelayer(r, "relayer"). + AddLink(interchaintest.InterchainLink{ + Chain1: feeabs, + Chain2: gaia, + Relayer: r, + Path: pathFeeabsGaia, + }). + AddLink(interchaintest.InterchainLink{ + Chain1: feeabs, + Chain2: osmosis, + Relayer: r, + Path: pathFeeabsOsmosis, + }). + AddLink(interchaintest.InterchainLink{ + Chain1: osmosis, + Chain2: gaia, + Relayer: r, + Path: pathOsmosisGaia, + }) + + require.NoError(t, ic.Build(ctx, eRep, interchaintest.InterchainBuildOptions{ + TestName: t.Name(), + Client: client, + NetworkID: network, + BlockDatabaseFile: interchaintest.DefaultBlockDatabaseFilepath(), + + SkipPathCreation: true, + })) + t.Cleanup(func() { + _ = ic.Close() + }) + + const userFunds = int64(10_000_000_000) + users := interchaintest.GetAndFundTestUsers(t, ctx, t.Name(), userFunds, feeabs, gaia, osmosis) + + // rly feeabs-osmo + // Generate new path + err = r.GeneratePath(ctx, eRep, feeabs.Config().ChainID, osmosis.Config().ChainID, pathFeeabsOsmosis) + require.NoError(t, err) + // Create client + err = r.CreateClients(ctx, eRep, pathFeeabsOsmosis, ibc.DefaultClientOpts()) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 5, feeabs, osmosis) + require.NoError(t, err) + + // Create connection + err = r.CreateConnections(ctx, eRep, pathFeeabsOsmosis) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 5, feeabs, osmosis) + require.NoError(t, err) + // Create channel + err = r.CreateChannel(ctx, eRep, pathFeeabsOsmosis, ibc.CreateChannelOptions{ + SourcePortName: "transfer", + DestPortName: "transfer", + Order: ibc.Unordered, + Version: "ics20-1", + }) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 5, feeabs, osmosis) + require.NoError(t, err) + + channsFeeabs, err := r.GetChannels(ctx, eRep, feeabs.Config().ChainID) + require.NoError(t, err) + + channsOsmosis, err := r.GetChannels(ctx, eRep, osmosis.Config().ChainID) + require.NoError(t, err) + + require.Len(t, channsFeeabs, 1) + require.Len(t, channsOsmosis, 1) + + channFeeabsOsmosis := channsFeeabs[0] + require.NotEmpty(t, channFeeabsOsmosis.ChannelID) + channOsmosisFeeabs := channsOsmosis[0] + require.NotEmpty(t, channOsmosisFeeabs.ChannelID) + // rly feeabs-gaia + // Generate new path + err = r.GeneratePath(ctx, eRep, feeabs.Config().ChainID, gaia.Config().ChainID, pathFeeabsGaia) + require.NoError(t, err) + // Create clients + err = r.CreateClients(ctx, eRep, pathFeeabsGaia, ibc.DefaultClientOpts()) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 5, feeabs, gaia) + require.NoError(t, err) + + // Create connection + err = r.CreateConnections(ctx, eRep, pathFeeabsGaia) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 5, feeabs, gaia) + require.NoError(t, err) + + // Create channel + err = r.CreateChannel(ctx, eRep, pathFeeabsGaia, ibc.CreateChannelOptions{ + SourcePortName: "transfer", + DestPortName: "transfer", + Order: ibc.Unordered, + Version: "ics20-1", + }) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 5, feeabs, gaia) + require.NoError(t, err) + + channsFeeabs, err = r.GetChannels(ctx, eRep, feeabs.Config().ChainID) + require.NoError(t, err) + + channsGaia, err := r.GetChannels(ctx, eRep, gaia.Config().ChainID) + require.NoError(t, err) + + require.Len(t, channsFeeabs, 2) + require.Len(t, channsGaia, 1) + + var channFeeabsGaia ibc.ChannelOutput + for _, chann := range channsFeeabs { + if chann.ChannelID != channFeeabsOsmosis.ChannelID { + channFeeabsGaia = chann + } + } + require.NotEmpty(t, channFeeabsGaia.ChannelID) + + channGaiaFeeabs := channsGaia[0] + require.NotEmpty(t, channGaiaFeeabs.ChannelID) + // rly osmo-gaia + // Generate new path + err = r.GeneratePath(ctx, eRep, osmosis.Config().ChainID, gaia.Config().ChainID, pathOsmosisGaia) + require.NoError(t, err) + // Create clients + err = r.CreateClients(ctx, eRep, pathOsmosisGaia, ibc.DefaultClientOpts()) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 5, osmosis, gaia) + require.NoError(t, err) + // Create connection + err = r.CreateConnections(ctx, eRep, pathOsmosisGaia) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 5, osmosis, gaia) + require.NoError(t, err) + // Create channel + err = r.CreateChannel(ctx, eRep, pathOsmosisGaia, ibc.CreateChannelOptions{ + SourcePortName: "transfer", + DestPortName: "transfer", + Order: ibc.Unordered, + Version: "ics20-1", + }) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 5, osmosis, gaia) + require.NoError(t, err) + + channsOsmosis, err = r.GetChannels(ctx, eRep, osmosis.Config().ChainID) + require.NoError(t, err) + + channsGaia, err = r.GetChannels(ctx, eRep, gaia.Config().ChainID) + require.NoError(t, err) + + require.Len(t, channsOsmosis, 2) + require.Len(t, channsGaia, 2) + + var channOsmosisGaia ibc.ChannelOutput + var channGaiaOsmosis ibc.ChannelOutput + + for _, chann := range channsOsmosis { + if chann.ChannelID != channOsmosisFeeabs.ChannelID { + channOsmosisGaia = chann + } + } + require.NotEmpty(t, channOsmosisGaia) + + for _, chann := range channsGaia { + if chann.ChannelID != channGaiaFeeabs.ChannelID { + channGaiaOsmosis = chann + } + } + require.NotEmpty(t, channGaiaOsmosis) + + fmt.Println("-----------------------------------") + fmt.Printf("channFeeabsOsmosis: %s - %s\n", channFeeabsOsmosis.ChannelID, channFeeabsOsmosis.Counterparty.ChannelID) + fmt.Printf("channOsmosisFeeabs: %s - %s\n", channOsmosisFeeabs.ChannelID, channOsmosisFeeabs.Counterparty.ChannelID) + fmt.Printf("channFeeabsGaia: %s - %s\n", channFeeabsGaia.ChannelID, channFeeabsGaia.Counterparty.ChannelID) + fmt.Printf("channGaiaFeeabs: %s - %s\n", channGaiaFeeabs.ChannelID, channGaiaFeeabs.Counterparty.ChannelID) + fmt.Printf("channOsmosisGaia: %s - %s\n", channOsmosisGaia.ChannelID, channOsmosisGaia.Counterparty.ChannelID) + fmt.Printf("channGaiaOsmosis: %s - %s\n", channGaiaOsmosis.ChannelID, channGaiaOsmosis.Counterparty.ChannelID) + fmt.Println("-----------------------------------") + + // Start the relayer on both paths + err = r.StartRelayer(ctx, eRep, pathFeeabsGaia, pathFeeabsOsmosis, pathOsmosisGaia) + require.NoError(t, err) + + t.Cleanup( + func() { + err := r.StopRelayer(ctx, eRep) + if err != nil { + t.Logf("an error occurred while stopping the relayer: %s", err) + } + }, + ) + + // Get original account balances + feeabsUser, gaiaUser, osmosisUser := users[0], users[1], users[2] + _ = feeabsUser + _ = gaiaUser + _ = osmosisUser + + amountToSend := math.NewInt(1_000_000_000) + + // Send Gaia uatom to Osmosis + gaiaHeight, err := gaia.Height(ctx) + require.NoError(t, err) + dstAddress := sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()) + transfer := ibc.WalletAmount{ + Address: dstAddress, + Denom: gaia.Config().Denom, + Amount: amountToSend, + } + + tx, err := gaia.SendIBCTransfer(ctx, channGaiaOsmosis.ChannelID, gaiaUser.KeyName(), transfer, ibc.TransferOptions{}) + require.NoError(t, err) + require.NoError(t, tx.Validate()) + + _, err = testutil.PollForAck(ctx, gaia, gaiaHeight, gaiaHeight+30, tx.Packet) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, 1, feeabs, gaia, osmosis) + require.NoError(t, err) + + // Send Feeabs stake to Osmosis + feeabsHeight, err := feeabs.Height(ctx) + require.NoError(t, err) + dstAddress = sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()) + transfer = ibc.WalletAmount{ + Address: dstAddress, + Denom: feeabs.Config().Denom, + Amount: amountToSend, + } + + tx, err = feeabs.SendIBCTransfer(ctx, channFeeabsOsmosis.ChannelID, feeabsUser.KeyName(), transfer, ibc.TransferOptions{}) + require.NoError(t, err) + require.NoError(t, tx.Validate()) + + _, err = testutil.PollForAck(ctx, feeabs, feeabsHeight, feeabsHeight+30, tx.Packet) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, 1, feeabs, gaia, osmosis) + require.NoError(t, err) + + // Send Gaia uatom to Feeabs + gaiaHeight, err = gaia.Height(ctx) + require.NoError(t, err) + dstAddress = sdktypes.MustBech32ifyAddressBytes(feeabs.Config().Bech32Prefix, feeabsUser.Address()) + transfer = ibc.WalletAmount{ + Address: dstAddress, + Denom: gaia.Config().Denom, + Amount: amountToSend, + } + + tx, err = gaia.SendIBCTransfer(ctx, channGaiaFeeabs.ChannelID, gaiaUser.KeyName(), transfer, ibc.TransferOptions{}) + require.NoError(t, err) + require.NoError(t, tx.Validate()) + + _, err = testutil.PollForAck(ctx, gaia, gaiaHeight, gaiaHeight+30, tx.Packet) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, 1, feeabs, gaia, osmosis) + require.NoError(t, err) + // Setup contract on Osmosis + // Store code crosschain Registry + crossChainRegistryContractID, err := osmosis.StoreContract(ctx, osmosisUser.KeyName(), "./bytecode/crosschain_registry.wasm") + require.NoError(t, err) + _ = crossChainRegistryContractID + // // Instatiate + owner := sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()) + initMsg := fmt.Sprintf("{\"owner\":\"%s\"}", owner) + registryContractAddress, err := osmosis.InstantiateContract(ctx, osmosisUser.KeyName(), crossChainRegistryContractID, initMsg, true) + require.NoError(t, err) + // Execute + msg := fmt.Sprintf("{\"modify_chain_channel_links\": {\"operations\": [{\"operation\": \"set\",\"source_chain\": \"feeabs\",\"destination_chain\": \"osmosis\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"osmosis\",\"destination_chain\": \"feeabs\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"feeabs\",\"destination_chain\": \"gaia\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"gaia\",\"destination_chain\": \"feeabs\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"osmosis\",\"destination_chain\": \"gaia\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"gaia\",\"destination_chain\": \"osmosis\",\"channel_id\": \"%s\"}]}}", + channFeeabsOsmosis.ChannelID, + channOsmosisFeeabs.ChannelID, + channFeeabsGaia.ChannelID, + channGaiaFeeabs.ChannelID, + channOsmosisGaia.ChannelID, + channGaiaOsmosis.ChannelID) + _, err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName(), registryContractAddress, msg) + require.NoError(t, err) + // Execute + msg = `{ + "modify_bech32_prefixes": + { + "operations": + [ + {"operation": "set", "chain_name": "feeabs", "prefix": "feeabs"}, + {"operation": "set", "chain_name": "osmosis", "prefix": "osmo"}, + {"operation": "set", "chain_name": "gaia", "prefix": "cosmos"} + ] + } + }` + _, err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName(), registryContractAddress, msg) + require.NoError(t, err) + + // Create pool Osmosis(uatom)/Osmosis(stake) on Osmosis + denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(channOsmosisGaia.PortID, channOsmosisGaia.ChannelID, gaia.Config().Denom)) + uatomOnOsmosis := denomTrace.IBCDenom() + osmosisUserBalance, err := osmosis.GetBalance(ctx, sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()), uatomOnOsmosis) + require.NoError(t, err) + require.Equal(t, amountToSend, osmosisUserBalance) + + denomTrace = transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(channOsmosisFeeabs.PortID, channOsmosisFeeabs.ChannelID, feeabs.Config().Denom)) + stakeOnOsmosis := denomTrace.IBCDenom() + osmosisUserBalance, err = osmosis.GetBalance(ctx, sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()), stakeOnOsmosis) + require.NoError(t, err) + require.Equal(t, amountToSend, osmosisUserBalance) + + poolID, err := cosmos.OsmosisCreatePool(osmosis, ctx, osmosisUser.KeyName(), cosmos.OsmosisPoolParams{ + Weights: fmt.Sprintf("5%s,5%s", stakeOnOsmosis, uatomOnOsmosis), + InitialDeposit: fmt.Sprintf("95000000%s,950000000%s", stakeOnOsmosis, uatomOnOsmosis), + SwapFee: "0.01", + ExitFee: "0", + FutureGovernor: "", + }) + require.NoError(t, err) + require.Equal(t, poolID, "1") + + // Setup propose_pfm + // propose_pfm for feeabs + _, err = cosmos.OsmosisSetupProposePFM(osmosis, ctx, osmosisUser.KeyName(), registryContractAddress, `{"propose_pfm":{"chain": "feeabs"}}`, stakeOnOsmosis) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, 15, feeabs, gaia, osmosis) + require.NoError(t, err) + queryMsg := QuerySmartMsg{ + Packet: HasPacketForwarding{ + ChainID: "feeabs", + }, + } + res := QuerySmartMsgResponse{} + osmosis.QueryContract(ctx, registryContractAddress, queryMsg, res) + // propose_pfm for gaia + _, err = cosmos.OsmosisSetupProposePFM(osmosis, ctx, osmosisUser.KeyName(), registryContractAddress, `{"propose_pfm":{"chain": "gaia"}}`, uatomOnOsmosis) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, 15, feeabs, gaia, osmosis) + require.NoError(t, err) + queryMsg = QuerySmartMsg{ + Packet: HasPacketForwarding{ + ChainID: "gaia", + }, + } + res = QuerySmartMsgResponse{} + osmosis.QueryContract(ctx, registryContractAddress, queryMsg, res) + // store swaprouter + swapRouterContractID, err := osmosis.StoreContract(ctx, osmosisUser.KeyName(), "./bytecode/swaprouter.wasm") + require.NoError(t, err) + // instantiate + swapRouterContractAddress, err := osmosis.InstantiateContract(ctx, osmosisUser.KeyName(), swapRouterContractID, initMsg, true) + require.NoError(t, err) + + // execute + msg = fmt.Sprintf("{\"set_route\":{\"input_denom\":\"%s\",\"output_denom\":\"%s\",\"pool_route\":[{\"pool_id\":\"%s\",\"token_out_denom\":\"%s\"}]}}", + uatomOnOsmosis, + stakeOnOsmosis, + poolID, + stakeOnOsmosis, + ) + _, err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName(), swapRouterContractAddress, msg) + require.NoError(t, err) + + // store xcs + xcsContractID, err := osmosis.StoreContract(ctx, osmosisUser.KeyName(), "./bytecode/crosschain_swaps.wasm") + require.NoError(t, err) + // instantiate + initMsg = fmt.Sprintf("{\"swap_contract\":\"%s\",\"governor\": \"%s\"}", swapRouterContractAddress, owner) + xcsContractAddress, err := osmosis.InstantiateContract(ctx, osmosisUser.KeyName(), xcsContractID, initMsg, true) + _ = xcsContractAddress + require.NoError(t, err) + // Swap Feeabs(uatom) to Osmosis + // send ibc token to feeabs module account + gaiaHeight, err = gaia.Height(ctx) + require.NoError(t, err) + feeabsModule, err := QueryFeeabsModuleAccountBalances(feeabs, ctx) + require.NoError(t, err) + dstAddress = feeabsModule.Address + transfer = ibc.WalletAmount{ + Address: dstAddress, + Denom: gaia.Config().Denom, + Amount: math.NewInt(1_000_000), + } + + tx, err = gaia.SendIBCTransfer(ctx, channGaiaFeeabs.ChannelID, gaiaUser.KeyName(), transfer, ibc.TransferOptions{}) + require.NoError(t, err) + require.NoError(t, tx.Validate()) + + _, err = testutil.PollForAck(ctx, gaia, gaiaHeight, gaiaHeight+30, tx.Packet) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, 1, feeabs, gaia, osmosis) + require.NoError(t, err) + + denomTrace = transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(channFeeabsGaia.PortID, channFeeabsGaia.ChannelID, gaia.Config().Denom)) + + // Start testing for add host zone proposal + _, err = cosmos.FeeabsAddHostZoneProposal(feeabs, ctx, feeabsUser.KeyName(), "./proposal/add_host_zone.json") + require.NoError(t, err) + + err = feeabs.VoteOnProposalAllValidators(ctx, "1", cosmos.ProposalVoteYes) + require.NoError(t, err, "failed to submit votes") + + height, _ := feeabs.Height(ctx) + _, err = cosmos.PollForProposalStatus(ctx, feeabs, height, height+10, "1", cosmos.ProposalStatusPassed) + require.NoError(t, err, "proposal status did not change to passed in expected number of blocks") + + config, err := feeabsCli.QueryFeeabsHostZoneConfigWithDenom(feeabs, ctx, "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9") + require.NoError(t, err) + require.Equal(t, config, &feeabsCli.HostChainFeeAbsConfigResponse{HostChainConfig: feeabsCli.HostChainFeeAbsConfig{ + IbcDenom: "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9", + OsmosisPoolTokenDenomIn: "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9", + PoolId: "1", + Frozen: false, + }}) + + // Start testing for set host zone proposal + _, err = feeabsCli.SetHostZoneProposal(feeabs, ctx, feeabsUser.KeyName(), "./proposal/set_host_zone.json") + require.NoError(t, err) + + err = feeabs.VoteOnProposalAllValidators(ctx, "2", cosmos.ProposalVoteYes) + require.NoError(t, err, "failed to submit votes") + + height, _ = feeabs.Height(ctx) + _, err = cosmos.PollForProposalStatus(ctx, feeabs, height, height+10, "2", cosmos.ProposalStatusPassed) + require.NoError(t, err, "proposal status did not change to passed in expected number of blocks") + + config, err = feeabsCli.QueryFeeabsHostZoneConfigWithDenom(feeabs, ctx, "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9") + require.NoError(t, err) + require.Equal(t, config, &feeabsCli.HostChainFeeAbsConfigResponse{HostChainConfig: feeabsCli.HostChainFeeAbsConfig{ + IbcDenom: "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9", + OsmosisPoolTokenDenomIn: "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9", + PoolId: "1", + Frozen: true, + }}) + + // Start testing for delete host zone proposal + _, err = feeabsCli.DeleteHostZoneProposal(feeabs, ctx, feeabsUser.KeyName(), "./proposal/delete_host_zone.json") + require.NoError(t, err) + + err = feeabs.VoteOnProposalAllValidators(ctx, "3", cosmos.ProposalVoteYes) + require.NoError(t, err, "failed to submit votes") + + height, _ = feeabs.Height(ctx) + response, err := cosmos.PollForProposalStatus(ctx, feeabs, height, height+10, "3", cosmos.ProposalStatusPassed) + require.NoError(t, err, "proposal status did not change to passed in expected number of blocks") + fmt.Printf("response: %s\n", response) + + config, err = feeabsCli.QueryFeeabsHostZoneConfigWithDenom(feeabs, ctx, "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9") + require.Equal(t, config, &feeabsCli.HostChainFeeAbsConfigResponse{HostChainConfig: feeabsCli.HostChainFeeAbsConfig{ + IbcDenom: "", + OsmosisPoolTokenDenomIn: "", + PoolId: "", + Frozen: false, + }}) +} diff --git a/tests/interchaintest/packet_foward_test.go b/tests/interchaintest/packet_foward_test.go index 6dfaf2ec..c1a2f729 100644 --- a/tests/interchaintest/packet_foward_test.go +++ b/tests/interchaintest/packet_foward_test.go @@ -513,7 +513,7 @@ func TestPacketForwardMiddleware(t *testing.T) { _, err = cosmos.PollForProposalStatus(ctx, feeabs, height, height+10, paramTx.ProposalID, cosmos.ProposalStatusPassed) require.NoError(t, err, "proposal status did not change to passed in expected number of blocks") - _, err = cosmos.FeeabsAddHostZoneProposal(feeabs, ctx, feeabsUser.KeyName(), "./proposal/host_zone.json") + _, err = cosmos.FeeabsAddHostZoneProposal(feeabs, ctx, feeabsUser.KeyName(), "./proposal/add_host_zone.json") require.NoError(t, err) err = feeabs.VoteOnProposalAllValidators(ctx, "2", cosmos.ProposalVoteYes) diff --git a/tests/interchaintest/proposal/host_zone.json b/tests/interchaintest/proposal/add_host_zone.json similarity index 100% rename from tests/interchaintest/proposal/host_zone.json rename to tests/interchaintest/proposal/add_host_zone.json diff --git a/tests/interchaintest/proposal/delete_host_zone.json b/tests/interchaintest/proposal/delete_host_zone.json new file mode 100644 index 00000000..0d2f3a7c --- /dev/null +++ b/tests/interchaintest/proposal/delete_host_zone.json @@ -0,0 +1,6 @@ +{ + "title": "Delete Fee Abbtraction Host Zone Proposal", + "description": "Delete Fee Abbtraction Host Zone", + "ibc_denom": "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9", + "deposit": "100000000stake" +} \ No newline at end of file diff --git a/tests/interchaintest/proposal/set_host_zone.json b/tests/interchaintest/proposal/set_host_zone.json new file mode 100644 index 00000000..eef2c6fb --- /dev/null +++ b/tests/interchaintest/proposal/set_host_zone.json @@ -0,0 +1,12 @@ +{ + "title": "Set Fee Abbtraction Host Zone Proposal", + "description": "Set Fee Abbtraction Host Zone", + "host_chain_fee_abs_config": + { + "ibc_denom": "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9", + "osmosis_pool_token_denom_in": "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9", + "pool_id": "1", + "frozen": true + }, + "deposit": "100000000stake" +} \ No newline at end of file From cb0ea81e96b18ce1c59812ac392bc07f50678833 Mon Sep 17 00:00:00 2001 From: Tien Nguyen Date: Thu, 18 Jan 2024 15:42:13 +0700 Subject: [PATCH 70/90] Handle host chain is frozen. (#126) --- x/feeabs/keeper/msgserver.go | 12 +++++++++--- x/feeabs/types/errors.go | 1 + 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/x/feeabs/keeper/msgserver.go b/x/feeabs/keeper/msgserver.go index 08f92489..eeecd281 100644 --- a/x/feeabs/keeper/msgserver.go +++ b/x/feeabs/keeper/msgserver.go @@ -38,13 +38,19 @@ func (k Keeper) SendQueryIbcDenomTWAP(goCtx context.Context, msg *types.MsgSendQ func (k Keeper) SwapCrossChain(goCtx context.Context, msg *types.MsgSwapCrossChain) (*types.MsgSwapCrossChainResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) + + _, err := sdk.AccAddressFromBech32(msg.FromAddress) + if err != nil { + return nil, err + } + hostChainConfig, found := k.GetHostZoneConfig(ctx, msg.IbcDenom) if !found { return nil, types.ErrHostZoneConfigNotFound } - _, err := sdk.AccAddressFromBech32(msg.FromAddress) - if err != nil { - return nil, err + + if hostChainConfig.Frozen { + return nil, types.ErrHostZoneFrozen } err = k.transferOsmosisCrosschainSwap(ctx, hostChainConfig) diff --git a/x/feeabs/types/errors.go b/x/feeabs/types/errors.go index cd456af4..ce593e52 100644 --- a/x/feeabs/types/errors.go +++ b/x/feeabs/types/errors.go @@ -11,4 +11,5 @@ var ( ErrDuplicateHostZoneConfig = sdkerrors.Register(ModuleName, 4, "duplicate host zone config") ErrNotEnoughFundInModuleAddress = sdkerrors.Register(ModuleName, 5, "not have funding yet") ErrUnsupportedDenom = sdkerrors.Register(ModuleName, 6, "unsupported denom") + ErrHostZoneFrozen = sdkerrors.Register(ModuleName, 7, "host zone frozen") ) From bb4b8375aa3bb717837418134e0fd0a8d39b7c52 Mon Sep 17 00:00:00 2001 From: Duong Minh Ngoc <153509244+minhngoc274@users.noreply.github.com> Date: Fri, 19 Jan 2024 10:12:16 +0700 Subject: [PATCH 71/90] refactor: add frozen host zone check (#124) Co-authored-by: Duong Minh Ngoc <153509244+Ngoc-Notional@users.noreply.github.com> --- x/feeabs/ante/decorate.go | 6 ++++++ x/feeabs/types/errors.go | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/x/feeabs/ante/decorate.go b/x/feeabs/ante/decorate.go index f2fcd8b1..d22ca119 100644 --- a/x/feeabs/ante/decorate.go +++ b/x/feeabs/ante/decorate.go @@ -99,6 +99,9 @@ func (fadfd FeeAbstractionDeductFeeDecorate) normalDeductFeeAnteHandle(ctx sdk.C } func (fadfd FeeAbstractionDeductFeeDecorate) abstractionDeductFeeHandler(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler, feeTx sdk.FeeTx, hostChainConfig feeabstypes.HostChainFeeAbsConfig) (newCtx sdk.Context, err error) { + if hostChainConfig.Frozen { + return ctx, sdkerrors.Wrap(feeabstypes.ErrHostZoneFrozen, "cannot deduct fee as host zone is frozen") + } fee := feeTx.GetFee() feePayer := feeTx.FeePayer() feeGranter := feeTx.FeeGranter() @@ -251,6 +254,9 @@ func (famfd FeeAbstrationMempoolFeeDecorator) AnteHandle(ctx sdk.Context, tx sdk hasHostChainConfig := famfd.feeabsKeeper.HasHostZoneConfig(ctx, feeDenom) if hasHostChainConfig { hostChainConfig, _ := famfd.feeabsKeeper.GetHostZoneConfig(ctx, feeDenom) + if hostChainConfig.Frozen { + return ctx, sdkerrors.Wrapf(feeabstypes.ErrHostZoneFrozen, "cannot deduct fee as host zone is frozen") + } nativeCoinsFees, err := famfd.feeabsKeeper.CalculateNativeFromIBCCoins(ctx, feeCoins, hostChainConfig) if err != nil { return ctx, sdkerrors.Wrapf(errorstypes.ErrInsufficientFee, "insufficient fees") diff --git a/x/feeabs/types/errors.go b/x/feeabs/types/errors.go index ce593e52..806e31f0 100644 --- a/x/feeabs/types/errors.go +++ b/x/feeabs/types/errors.go @@ -11,5 +11,5 @@ var ( ErrDuplicateHostZoneConfig = sdkerrors.Register(ModuleName, 4, "duplicate host zone config") ErrNotEnoughFundInModuleAddress = sdkerrors.Register(ModuleName, 5, "not have funding yet") ErrUnsupportedDenom = sdkerrors.Register(ModuleName, 6, "unsupported denom") - ErrHostZoneFrozen = sdkerrors.Register(ModuleName, 7, "host zone frozen") + ErrHostZoneFrozen = sdkerrors.Register(ModuleName, 7, "host zone is frozen") ) From da63198e0bf52543d1c6b64837764be593f433db Mon Sep 17 00:00:00 2001 From: Duong Minh Ngoc <153509244+minhngoc274@users.noreply.github.com> Date: Tue, 23 Jan 2024 12:44:35 +0700 Subject: [PATCH 72/90] Optimize kvstore calls (#123) * refactor: optimize kvstore calls * refactor: optimize epoch info kvstore calls * refactor: optimize kv store calls * add test for epoch info --- x/feeabs/ante/decorate.go | 10 +++---- x/feeabs/keeper/config.go | 13 +++++---- x/feeabs/keeper/epoch.go | 8 +++--- x/feeabs/keeper/epoch_test.go | 53 +++++++++++++++++++++++++++++++++++ x/feeabs/keeper/ibc.go | 8 ++---- x/feeabs/keeper/proposal.go | 24 ++++------------ x/feeabs/types/build_memo.go | 2 +- 7 files changed, 78 insertions(+), 40 deletions(-) create mode 100644 x/feeabs/keeper/epoch_test.go diff --git a/x/feeabs/ante/decorate.go b/x/feeabs/ante/decorate.go index d22ca119..5201ef3a 100644 --- a/x/feeabs/ante/decorate.go +++ b/x/feeabs/ante/decorate.go @@ -46,12 +46,11 @@ func (fadfd FeeAbstractionDeductFeeDecorate) AnteHandle(ctx sdk.Context, tx sdk. } feeDenom := fee.GetDenomByIndex(0) - hasHostChainConfig := fadfd.feeabsKeeper.HasHostZoneConfig(ctx, feeDenom) - if !hasHostChainConfig { + hostChainConfig, found := fadfd.feeabsKeeper.GetHostZoneConfig(ctx, feeDenom) + if !found { return fadfd.normalDeductFeeAnteHandle(ctx, tx, simulate, next, feeTx) } - hostChainConfig, _ := fadfd.feeabsKeeper.GetHostZoneConfig(ctx, feeDenom) return fadfd.abstractionDeductFeeHandler(ctx, tx, simulate, next, feeTx, hostChainConfig) } @@ -251,9 +250,8 @@ func (famfd FeeAbstrationMempoolFeeDecorator) AnteHandle(ctx sdk.Context, tx sdk // TODO: Support more fee token in feeRequired for fee-abstraction if feeCoinsNonZeroDenom.Len() == 1 { feeDenom := feeCoinsNonZeroDenom.GetDenomByIndex(0) - hasHostChainConfig := famfd.feeabsKeeper.HasHostZoneConfig(ctx, feeDenom) - if hasHostChainConfig { - hostChainConfig, _ := famfd.feeabsKeeper.GetHostZoneConfig(ctx, feeDenom) + hostChainConfig, found := famfd.feeabsKeeper.GetHostZoneConfig(ctx, feeDenom) + if found { if hostChainConfig.Frozen { return ctx, sdkerrors.Wrapf(feeabstypes.ErrHostZoneFrozen, "cannot deduct fee as host zone is frozen") } diff --git a/x/feeabs/keeper/config.go b/x/feeabs/keeper/config.go index 7fc9e472..a45cf313 100644 --- a/x/feeabs/keeper/config.go +++ b/x/feeabs/keeper/config.go @@ -59,14 +59,17 @@ func (k Keeper) SetHostZoneConfig(ctx sdk.Context, chainConfig types.HostChainFe } func (k Keeper) DeleteHostZoneConfig(ctx sdk.Context, ibcDenom string) error { - store := ctx.KVStore(k.storeKey) hostZoneConfig, ok := k.GetHostZoneConfig(ctx, ibcDenom) - if ok { - key := types.GetKeyHostZoneConfigByOsmosisIBCDenom(hostZoneConfig.OsmosisPoolTokenDenomIn) - store.Delete(key) + if !ok { + return types.ErrHostZoneConfigNotFound } - key := types.GetKeyHostZoneConfigByFeeabsIBCDenom(ibcDenom) + store := ctx.KVStore(k.storeKey) + + key := types.GetKeyHostZoneConfigByOsmosisIBCDenom(hostZoneConfig.OsmosisPoolTokenDenomIn) + store.Delete(key) + + key = types.GetKeyHostZoneConfigByFeeabsIBCDenom(ibcDenom) store.Delete(key) return nil diff --git a/x/feeabs/keeper/epoch.go b/x/feeabs/keeper/epoch.go index 9614ebfd..342b726b 100644 --- a/x/feeabs/keeper/epoch.go +++ b/x/feeabs/keeper/epoch.go @@ -18,18 +18,18 @@ func (k Keeper) HasEpochInfo(ctx sdk.Context, identifier string) bool { } // GetEpochInfo returns epoch info by identifier. -func (k Keeper) GetEpochInfo(ctx sdk.Context, identifier string) types.EpochInfo { +func (k Keeper) GetEpochInfo(ctx sdk.Context, identifier string) (types.EpochInfo, bool) { epoch := types.EpochInfo{} store := ctx.KVStore(k.storeKey) b := store.Get(append(types.KeyPrefixEpoch, []byte(identifier)...)) if b == nil { - return epoch + return epoch, false } err := proto.Unmarshal(b, &epoch) if err != nil { panic(err) } - return epoch + return epoch, true } // AddEpochInfo adds a new epoch info. Will return an error if the epoch fails validation, @@ -41,7 +41,7 @@ func (k Keeper) AddEpochInfo(ctx sdk.Context, epoch types.EpochInfo) error { return err } // Check if identifier already exists - if (k.GetEpochInfo(ctx, epoch.Identifier) != types.EpochInfo{}) { + if k.HasEpochInfo(ctx, epoch.Identifier) { return fmt.Errorf("epoch with identifier %s already exists", epoch.Identifier) } diff --git a/x/feeabs/keeper/epoch_test.go b/x/feeabs/keeper/epoch_test.go new file mode 100644 index 00000000..5181c157 --- /dev/null +++ b/x/feeabs/keeper/epoch_test.go @@ -0,0 +1,53 @@ +package keeper_test + +import ( + "testing" + "time" + + "github.com/stretchr/testify/require" + + sdk "github.com/cosmos/cosmos-sdk/types" + + apphelpers "github.com/osmosis-labs/fee-abstraction/v7/app/helpers" + feeabskeeper "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" +) + +func createEpoch(t *testing.T, keeper *feeabskeeper.Keeper, ctx sdk.Context) types.EpochInfo { + t.Helper() + expected := types.EpochInfo{ + Identifier: "Test", + StartTime: time.Now().UTC(), + Duration: 10, + CurrentEpoch: 0, + CurrentEpochStartTime: time.Now().UTC(), + EpochCountingStarted: false, + CurrentEpochStartHeight: 0, + } + err := keeper.AddEpochInfo(ctx, expected) + require.NoError(t, err) + + err = keeper.AddEpochInfo(ctx, expected) + require.Error(t, err, "epoch with identifier Test already exists") + + return expected +} + +func TestGetEpochInfo(t *testing.T) { + app := apphelpers.Setup(t, false, 1) + ctx := apphelpers.NewContextForApp(*app) + expected := createEpoch(t, &app.FeeabsKeeper, ctx) + got, found := app.FeeabsKeeper.GetEpochInfo(ctx, expected.Identifier) + require.True(t, found) + require.Equal(t, expected.StartTime, got.StartTime) + require.Equal(t, expected.Duration, got.Duration) + require.Equal(t, expected.EpochCountingStarted, got.EpochCountingStarted) +} + +func TestHasEpochInfo(t *testing.T) { + app := apphelpers.Setup(t, false, 1) + ctx := apphelpers.NewContextForApp(*app) + expected := createEpoch(t, &app.FeeabsKeeper, ctx) + found := app.FeeabsKeeper.HasEpochInfo(ctx, expected.Identifier) + require.True(t, found) +} diff --git a/x/feeabs/keeper/ibc.go b/x/feeabs/keeper/ibc.go index 55a5414a..76ccbc35 100644 --- a/x/feeabs/keeper/ibc.go +++ b/x/feeabs/keeper/ibc.go @@ -257,14 +257,12 @@ func (k Keeper) executeTransferMsg(ctx sdk.Context, transferMsg *transfertypes.M } func (k Keeper) handleOsmosisIbcQuery(ctx sdk.Context) error { - hasQueryEpochInfo := k.HasEpochInfo(ctx, types.DefaultQueryEpochIdentifier) - if !hasQueryEpochInfo { + // set startTime for query twap + queryTwapEpochInfo, found := k.GetEpochInfo(ctx, types.DefaultQueryEpochIdentifier) + if !found { k.Logger(ctx).Error(fmt.Sprintf("Don't have query epoch information: %s", types.DefaultQueryEpochIdentifier)) return nil } - - // set startTime for query twap - queryTwapEpochInfo := k.GetEpochInfo(ctx, types.DefaultQueryEpochIdentifier) startTime := ctx.BlockTime().Add(-queryTwapEpochInfo.Duration) k.Logger(ctx).Info(fmt.Sprintf("Start time: %v", startTime.Unix())) diff --git a/x/feeabs/keeper/proposal.go b/x/feeabs/keeper/proposal.go index aa5bec67..76e8e48c 100644 --- a/x/feeabs/keeper/proposal.go +++ b/x/feeabs/keeper/proposal.go @@ -7,13 +7,11 @@ import ( ) func (k Keeper) AddHostZoneProposal(ctx sdk.Context, p *types.AddHostZoneProposal) error { - _, found := k.GetHostZoneConfig(ctx, p.HostChainConfig.IbcDenom) - if found { + if k.HasHostZoneConfig(ctx, p.HostChainConfig.IbcDenom) { return types.ErrDuplicateHostZoneConfig } - err := k.SetHostZoneConfig(ctx, *p.HostChainConfig) - if err != nil { + if err := k.SetHostZoneConfig(ctx, *p.HostChainConfig); err != nil { return err } @@ -21,27 +19,15 @@ func (k Keeper) AddHostZoneProposal(ctx sdk.Context, p *types.AddHostZoneProposa } func (k Keeper) DeleteHostZoneProposal(ctx sdk.Context, p *types.DeleteHostZoneProposal) error { - _, found := k.GetHostZoneConfig(ctx, p.IbcDenom) - if !found { - return types.ErrHostZoneConfigNotFound - } - - err := k.DeleteHostZoneConfig(ctx, p.IbcDenom) - if err != nil { - return err - } - - return nil + return k.DeleteHostZoneConfig(ctx, p.IbcDenom) } func (k Keeper) SetHostZoneProposal(ctx sdk.Context, p *types.SetHostZoneProposal) error { - _, found := k.GetHostZoneConfig(ctx, p.HostChainConfig.IbcDenom) - if !found { + if !k.HasHostZoneConfig(ctx, p.HostChainConfig.IbcDenom) { return types.ErrHostZoneConfigNotFound } - err := k.SetHostZoneConfig(ctx, *p.HostChainConfig) - if err != nil { + if err := k.SetHostZoneConfig(ctx, *p.HostChainConfig); err != nil { return err } diff --git a/x/feeabs/types/build_memo.go b/x/feeabs/types/build_memo.go index c4ebab4b..d2416cd1 100644 --- a/x/feeabs/types/build_memo.go +++ b/x/feeabs/types/build_memo.go @@ -2,7 +2,7 @@ package types import ( "encoding/json" - fmt "fmt" + "fmt" "time" ) From 9bb6b71d5c49c1c6eb33d0c6bdcef1d1e8d3810b Mon Sep 17 00:00:00 2001 From: Tien Nguyen Date: Tue, 23 Jan 2024 19:09:31 +0700 Subject: [PATCH 73/90] Fix make file for proto (#134) --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index a384855b..76219f22 100644 --- a/Makefile +++ b/Makefile @@ -138,12 +138,12 @@ proto-all: proto-format proto-gen proto-gen: @echo "Generating Protobuf files" - $(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace $(PROTO_BUILDER_IMAGE) sh ./scripts/protocgen.sh + @$(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace $(PROTO_BUILDER_IMAGE) sh ./scripts/protocgen.sh proto-format: @echo "Formatting Protobuf files" - @if docker ps -a --format '{{.Names}}' | grep -Eq "^${containerProtoFmt}$$"; then docker start -a $(containerProtoFmt); else docker run --name $(containerProtoFmt) -v $(CURDIR):/workspace --workdir /workspace tendermintdev/docker-build-proto \ - find ./ -not -path "./third_party/*" -name "*.proto" -exec clang-format -i {} \; ; fi + @$(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace tendermintdev/docker-build-proto \ + find ./proto -name "*.proto" -exec clang-format -i {} \; proto-lint: @$(DOCKER_BUF) lint --error-format=json From 7f8685b410790bd4f94afbfac035013d080b5113 Mon Sep 17 00:00:00 2001 From: Tien Nguyen Date: Wed, 24 Jan 2024 10:13:45 +0700 Subject: [PATCH 74/90] Optimize fee calculation process. (#127) --- x/feeabs/ante/decorate.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/feeabs/ante/decorate.go b/x/feeabs/ante/decorate.go index 5201ef3a..a08ed644 100644 --- a/x/feeabs/ante/decorate.go +++ b/x/feeabs/ante/decorate.go @@ -255,7 +255,7 @@ func (famfd FeeAbstrationMempoolFeeDecorator) AnteHandle(ctx sdk.Context, tx sdk if hostChainConfig.Frozen { return ctx, sdkerrors.Wrapf(feeabstypes.ErrHostZoneFrozen, "cannot deduct fee as host zone is frozen") } - nativeCoinsFees, err := famfd.feeabsKeeper.CalculateNativeFromIBCCoins(ctx, feeCoins, hostChainConfig) + nativeCoinsFees, err := famfd.feeabsKeeper.CalculateNativeFromIBCCoins(ctx, nonZeroCoinFeesReq, hostChainConfig) if err != nil { return ctx, sdkerrors.Wrapf(errorstypes.ErrInsufficientFee, "insufficient fees") } From fb6075a837d03f7608c8d69dff89177d880dad44 Mon Sep 17 00:00:00 2001 From: Duong Minh Ngoc <153509244+minhngoc274@users.noreply.github.com> Date: Wed, 24 Jan 2024 11:05:44 +0700 Subject: [PATCH 75/90] Refactor interchain test (#133) * refactor: move custom interchaintest logic from notional repo * refactor: refactor interchain test --------- Co-authored-by: Tien Nguyen --- tests/interchaintest/chain_start_test.go | 322 +++++++++ tests/interchaintest/feeabs/events.go | 33 + tests/interchaintest/feeabs/osmosis.go | 56 ++ tests/interchaintest/feeabs/proposal.go | 172 ++++- tests/interchaintest/feeabs/query.go | 46 +- tests/interchaintest/feeabs/types.go | 26 + tests/interchaintest/go.mod | 5 +- tests/interchaintest/go.sum | 4 +- .../interchaintest/host_zone_proposal_test.go | 469 +------------ tests/interchaintest/packet_foward_test.go | 662 ++++-------------- tests/interchaintest/setup.go | 13 +- 11 files changed, 798 insertions(+), 1010 deletions(-) create mode 100644 tests/interchaintest/feeabs/events.go create mode 100644 tests/interchaintest/feeabs/osmosis.go create mode 100644 tests/interchaintest/feeabs/types.go diff --git a/tests/interchaintest/chain_start_test.go b/tests/interchaintest/chain_start_test.go index 67c4ac8f..634d4f45 100644 --- a/tests/interchaintest/chain_start_test.go +++ b/tests/interchaintest/chain_start_test.go @@ -2,6 +2,10 @@ package interchaintest import ( "context" + "fmt" + sdktypes "github.com/cosmos/cosmos-sdk/types" + "github.com/strangelove-ventures/interchaintest/v7/ibc" + "github.com/strangelove-ventures/interchaintest/v7/testutil" "testing" "github.com/strangelove-ventures/interchaintest/v7" @@ -64,3 +68,321 @@ func TestStartFeeabs(t *testing.T) { _ = ic.Close() }) } + +func SetupChain(t *testing.T, ctx context.Context) ([]ibc.Chain, []ibc.Wallet, []ibc.ChannelOutput) { + client, network := interchaintest.DockerSetup(t) + + rep := testreporter.NewNopReporter() + eRep := rep.RelayerExecReporter(t) + + // Create chain factory with Feeabs and Gaia + numVals := 1 + numFullNodes := 1 + gasAdjustment := 2.0 + + cf := interchaintest.NewBuiltinChainFactory(zaptest.NewLogger(t), []*interchaintest.ChainSpec{ + { + Name: "feeabs", + ChainConfig: feeabsConfig, + NumValidators: &numVals, + NumFullNodes: &numFullNodes, + }, + { + Name: "gaia", + Version: "v12.0.0-rc0", + ChainConfig: ibc.ChainConfig{ + GasPrices: "0.0uatom", + }, + NumValidators: &numVals, + NumFullNodes: &numFullNodes, + }, + { + Name: "osmosis", + Version: "v17.0.0", + ChainConfig: ibc.ChainConfig{ + GasPrices: "0.005uosmo", + EncodingConfig: osmosisEncoding(), + }, + GasAdjustment: &gasAdjustment, + NumValidators: &numVals, + NumFullNodes: &numFullNodes, + }, + }) + + chains, err := cf.Chains(t.Name()) + require.NoError(t, err) + + feeabs, gaia, osmosis := chains[0].(*cosmos.CosmosChain), chains[1].(*cosmos.CosmosChain), chains[2].(*cosmos.CosmosChain) + + r := interchaintest.NewBuiltinRelayerFactory( + ibc.CosmosRly, + zaptest.NewLogger(t), + ).Build(t, client, network) + + ic := interchaintest.NewInterchain(). + AddChain(feeabs). + AddChain(gaia). + AddChain(osmosis). + AddRelayer(r, "relayer"). + AddLink(interchaintest.InterchainLink{ + Chain1: feeabs, + Chain2: gaia, + Relayer: r, + Path: pathFeeabsGaia, + }). + AddLink(interchaintest.InterchainLink{ + Chain1: feeabs, + Chain2: osmosis, + Relayer: r, + Path: pathFeeabsOsmosis, + }). + AddLink(interchaintest.InterchainLink{ + Chain1: osmosis, + Chain2: gaia, + Relayer: r, + Path: pathOsmosisGaia, + }) + + require.NoError(t, ic.Build(ctx, eRep, interchaintest.InterchainBuildOptions{ + TestName: t.Name(), + Client: client, + NetworkID: network, + BlockDatabaseFile: interchaintest.DefaultBlockDatabaseFilepath(), + + SkipPathCreation: true, + })) + t.Cleanup(func() { + _ = ic.Close() + }) + + const userFunds = int64(10_000_000_000) + users := interchaintest.GetAndFundTestUsers(t, ctx, t.Name(), userFunds, feeabs, gaia, osmosis) + + // rly feeabs-osmo + // Generate new path + err = r.GeneratePath(ctx, eRep, feeabs.Config().ChainID, osmosis.Config().ChainID, pathFeeabsOsmosis) + require.NoError(t, err) + // Create client + err = r.CreateClients(ctx, eRep, pathFeeabsOsmosis, ibc.DefaultClientOpts()) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 5, feeabs, osmosis) + require.NoError(t, err) + + // Create connection + err = r.CreateConnections(ctx, eRep, pathFeeabsOsmosis) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 5, feeabs, osmosis) + require.NoError(t, err) + // Create channel + err = r.CreateChannel(ctx, eRep, pathFeeabsOsmosis, ibc.CreateChannelOptions{ + SourcePortName: "transfer", + DestPortName: "transfer", + Order: ibc.Unordered, + Version: "ics20-1", + }) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 5, feeabs, osmosis) + require.NoError(t, err) + var chanels []ibc.ChannelOutput + channsFeeabs, err := r.GetChannels(ctx, eRep, feeabs.Config().ChainID) + require.NoError(t, err) + + channsOsmosis, err := r.GetChannels(ctx, eRep, osmosis.Config().ChainID) + require.NoError(t, err) + + require.Len(t, channsFeeabs, 1) + require.Len(t, channsOsmosis, 1) + + channFeeabsOsmosis := channsFeeabs[0] + require.NotEmpty(t, channFeeabsOsmosis.ChannelID) + channOsmosisFeeabs := channsOsmosis[0] + require.NotEmpty(t, channOsmosisFeeabs.ChannelID) + // rly feeabs-gaia + // Generate new path + err = r.GeneratePath(ctx, eRep, feeabs.Config().ChainID, gaia.Config().ChainID, pathFeeabsGaia) + require.NoError(t, err) + // Create clients + err = r.CreateClients(ctx, eRep, pathFeeabsGaia, ibc.DefaultClientOpts()) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 5, feeabs, gaia) + require.NoError(t, err) + + // Create connection + err = r.CreateConnections(ctx, eRep, pathFeeabsGaia) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 5, feeabs, gaia) + require.NoError(t, err) + + // Create channel + err = r.CreateChannel(ctx, eRep, pathFeeabsGaia, ibc.CreateChannelOptions{ + SourcePortName: "transfer", + DestPortName: "transfer", + Order: ibc.Unordered, + Version: "ics20-1", + }) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 5, feeabs, gaia) + require.NoError(t, err) + + channsFeeabs, err = r.GetChannels(ctx, eRep, feeabs.Config().ChainID) + require.NoError(t, err) + + channsGaia, err := r.GetChannels(ctx, eRep, gaia.Config().ChainID) + require.NoError(t, err) + + require.Len(t, channsFeeabs, 2) + require.Len(t, channsGaia, 1) + + var channFeeabsGaia ibc.ChannelOutput + for _, chann := range channsFeeabs { + if chann.ChannelID != channFeeabsOsmosis.ChannelID { + channFeeabsGaia = chann + } + } + require.NotEmpty(t, channFeeabsGaia.ChannelID) + + channGaiaFeeabs := channsGaia[0] + require.NotEmpty(t, channGaiaFeeabs.ChannelID) + // rly osmo-gaia + // Generate new path + err = r.GeneratePath(ctx, eRep, osmosis.Config().ChainID, gaia.Config().ChainID, pathOsmosisGaia) + require.NoError(t, err) + // Create clients + err = r.CreateClients(ctx, eRep, pathOsmosisGaia, ibc.DefaultClientOpts()) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 5, osmosis, gaia) + require.NoError(t, err) + // Create connection + err = r.CreateConnections(ctx, eRep, pathOsmosisGaia) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 5, osmosis, gaia) + require.NoError(t, err) + // Create channel + err = r.CreateChannel(ctx, eRep, pathOsmosisGaia, ibc.CreateChannelOptions{ + SourcePortName: "transfer", + DestPortName: "transfer", + Order: ibc.Unordered, + Version: "ics20-1", + }) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 5, osmosis, gaia) + require.NoError(t, err) + + channsOsmosis, err = r.GetChannels(ctx, eRep, osmosis.Config().ChainID) + require.NoError(t, err) + + channsGaia, err = r.GetChannels(ctx, eRep, gaia.Config().ChainID) + require.NoError(t, err) + + require.Len(t, channsOsmosis, 2) + require.Len(t, channsGaia, 2) + + var channOsmosisGaia ibc.ChannelOutput + var channGaiaOsmosis ibc.ChannelOutput + + for _, chann := range channsOsmosis { + if chann.ChannelID != channOsmosisFeeabs.ChannelID { + channOsmosisGaia = chann + } + } + require.NotEmpty(t, channOsmosisGaia) + + for _, chann := range channsGaia { + if chann.ChannelID != channGaiaFeeabs.ChannelID { + channGaiaOsmosis = chann + } + } + require.NotEmpty(t, channGaiaOsmosis) + + fmt.Println("-----------------------------------") + fmt.Printf("channFeeabsOsmosis: %s - %s\n", channFeeabsOsmosis.ChannelID, channFeeabsOsmosis.Counterparty.ChannelID) + fmt.Printf("channOsmosisFeeabs: %s - %s\n", channOsmosisFeeabs.ChannelID, channOsmosisFeeabs.Counterparty.ChannelID) + fmt.Printf("channFeeabsGaia: %s - %s\n", channFeeabsGaia.ChannelID, channFeeabsGaia.Counterparty.ChannelID) + fmt.Printf("channGaiaFeeabs: %s - %s\n", channGaiaFeeabs.ChannelID, channGaiaFeeabs.Counterparty.ChannelID) + fmt.Printf("channOsmosisGaia: %s - %s\n", channOsmosisGaia.ChannelID, channOsmosisGaia.Counterparty.ChannelID) + fmt.Printf("channGaiaOsmosis: %s - %s\n", channGaiaOsmosis.ChannelID, channGaiaOsmosis.Counterparty.ChannelID) + fmt.Println("-----------------------------------") + + // Start the relayer on both paths + err = r.StartRelayer(ctx, eRep, pathFeeabsGaia, pathFeeabsOsmosis, pathOsmosisGaia) + require.NoError(t, err) + + t.Cleanup( + func() { + err := r.StopRelayer(ctx, eRep) + if err != nil { + t.Logf("an error occurred while stopping the relayer: %s", err) + } + }, + ) + chanels = append(chanels, channFeeabsOsmosis, channOsmosisFeeabs, channFeeabsGaia, channGaiaFeeabs, channOsmosisGaia, channGaiaOsmosis) + feeabsUser, gaiaUser, osmosisUser := users[0], users[1], users[2] + + // Send Gaia uatom to Osmosis + gaiaHeight, err := gaia.Height(ctx) + require.NoError(t, err) + dstAddress := sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()) + transfer := ibc.WalletAmount{ + Address: dstAddress, + Denom: gaia.Config().Denom, + Amount: amountToSend, + } + + tx, err := gaia.SendIBCTransfer(ctx, channGaiaOsmosis.ChannelID, gaiaUser.KeyName(), transfer, ibc.TransferOptions{}) + require.NoError(t, err) + require.NoError(t, tx.Validate()) + + _, err = testutil.PollForAck(ctx, gaia, gaiaHeight, gaiaHeight+30, tx.Packet) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, 1, feeabs, gaia, osmosis) + require.NoError(t, err) + + // Send Feeabs stake to Osmosis + feeabsHeight, err := feeabs.Height(ctx) + require.NoError(t, err) + dstAddress = sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()) + transfer = ibc.WalletAmount{ + Address: dstAddress, + Denom: feeabs.Config().Denom, + Amount: amountToSend, + } + + tx, err = feeabs.SendIBCTransfer(ctx, channFeeabsOsmosis.ChannelID, feeabsUser.KeyName(), transfer, ibc.TransferOptions{}) + require.NoError(t, err) + require.NoError(t, tx.Validate()) + + _, err = testutil.PollForAck(ctx, feeabs, feeabsHeight, feeabsHeight+30, tx.Packet) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, 1, feeabs, gaia, osmosis) + require.NoError(t, err) + + // Send Gaia uatom to Feeabs + gaiaHeight, err = gaia.Height(ctx) + require.NoError(t, err) + dstAddress = sdktypes.MustBech32ifyAddressBytes(feeabs.Config().Bech32Prefix, feeabsUser.Address()) + transfer = ibc.WalletAmount{ + Address: dstAddress, + Denom: gaia.Config().Denom, + Amount: amountToSend, + } + + tx, err = gaia.SendIBCTransfer(ctx, channGaiaFeeabs.ChannelID, gaiaUser.KeyName(), transfer, ibc.TransferOptions{}) + require.NoError(t, err) + require.NoError(t, tx.Validate()) + + _, err = testutil.PollForAck(ctx, gaia, gaiaHeight, gaiaHeight+30, tx.Packet) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, 1, feeabs, gaia, osmosis) + require.NoError(t, err) + + return chains, users, chanels +} diff --git a/tests/interchaintest/feeabs/events.go b/tests/interchaintest/feeabs/events.go new file mode 100644 index 00000000..4686a440 --- /dev/null +++ b/tests/interchaintest/feeabs/events.go @@ -0,0 +1,33 @@ +package feeabs + +import ( + "encoding/base64" + abcitypes "github.com/cometbft/cometbft/abci/types" +) + +func AttributeValue(events []abcitypes.Event, eventType, attrKey string) (string, bool) { + for _, event := range events { + if event.Type != eventType { + continue + } + for _, attr := range event.Attributes { + if attr.Key == attrKey { + return attr.Value, true + } + + // tendermint < v0.37-alpha returns base64 encoded strings in events. + key, err := base64.StdEncoding.DecodeString(attr.Key) + if err != nil { + continue + } + if string(key) == attrKey { + value, err := base64.StdEncoding.DecodeString(attr.Value) + if err != nil { + continue + } + return string(value), true + } + } + } + return "", false +} diff --git a/tests/interchaintest/feeabs/osmosis.go b/tests/interchaintest/feeabs/osmosis.go new file mode 100644 index 00000000..acf85c9c --- /dev/null +++ b/tests/interchaintest/feeabs/osmosis.go @@ -0,0 +1,56 @@ +package feeabs + +import ( + "context" + "encoding/json" + "fmt" + "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" + "path/filepath" + "strconv" +) + +func CreatePool(c *cosmos.CosmosChain, ctx context.Context, keyName string, params cosmos.OsmosisPoolParams) (string, error) { + tn := getFullNode(c) + poolbz, err := json.Marshal(params) + if err != nil { + return "", err + } + + poolFile := "pool.json" + + err = tn.WriteFile(ctx, poolbz, poolFile) + if err != nil { + return "", fmt.Errorf("writing add host zone proposal: %w", err) + } + + if _, err := tn.ExecTx(ctx, keyName, + "gamm", "create-pool", + "--pool-file", filepath.Join(tn.HomeDir(), poolFile), "--gas", "auto", + ); err != nil { + return "", fmt.Errorf("failed to create pool: %w", err) + } + + stdout, _, err := tn.ExecQuery(ctx, "gamm", "num-pools") + if err != nil { + return "", fmt.Errorf("failed to query num pools: %w", err) + } + var res map[string]string + if err := json.Unmarshal(stdout, &res); err != nil { + return "", fmt.Errorf("failed to unmarshal query response: %w", err) + } + + numPools, ok := res["num_pools"] + if !ok { + return "", fmt.Errorf("could not find number of pools in query response: %w", err) + } + return numPools, nil +} + +func SetupProposePFM(c *cosmos.CosmosChain, ctx context.Context, keyName string, contractAddress string, message string, ibcdenom string) (txHash string, err error) { + oneCoin := strconv.FormatInt(1, 10) + amount := oneCoin + ibcdenom + tn := getFullNode(c) + return tn.ExecTx(ctx, keyName, + "wasm", "execute", contractAddress, message, "--amount", amount, "--gas", "1000000", + ) +} diff --git a/tests/interchaintest/feeabs/proposal.go b/tests/interchaintest/feeabs/proposal.go index e4de1379..51e885df 100644 --- a/tests/interchaintest/feeabs/proposal.go +++ b/tests/interchaintest/feeabs/proposal.go @@ -2,17 +2,127 @@ package feeabs import ( "context" + "crypto/sha256" + "encoding/json" "fmt" + "github.com/avast/retry-go/v4" + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/types" + authTx "github.com/cosmos/cosmos-sdk/x/auth/tx" + paramsutils "github.com/cosmos/cosmos-sdk/x/params/client/utils" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v7/ibc" + "github.com/strangelove-ventures/interchaintest/v7/testutil" "os" "path/filepath" + "strconv" + "time" ) -func DeleteHostZoneProposal(c *cosmos.CosmosChain, ctx context.Context, keyName string, fileLocation string) (string, error) { - tn := c.Validators[0] +func getFullNode(c *cosmos.CosmosChain) *cosmos.ChainNode { if len(c.FullNodes) > 0 { - tn = c.FullNodes[0] + return c.FullNodes[0] + } + return c.Validators[0] +} + +func getTransaction(ctx client.Context, txHash string) (*types.TxResponse, error) { + var txResp *types.TxResponse + err := retry.Do(func() error { + var err error + txResp, err = authTx.QueryTx(ctx, txHash) + return err + }, + retry.Attempts(15), + retry.Delay(200*time.Millisecond), + retry.DelayType(retry.FixedDelay), + retry.LastErrorOnly(true), + ) + return txResp, err +} + +func CrossChainSwap(c *cosmos.CosmosChain, ctx context.Context, keyName string, ibcDenom string) (tx ibc.Tx, _ error) { + tn := getFullNode(c) + + txHash, _ := tn.ExecTx(ctx, keyName, + "feeabs", "swap", ibcDenom, + "--gas", "auto", + ) + + if err := testutil.WaitForBlocks(ctx, 2, tn); err != nil { + return tx, err + } + + txResp, err := getTransaction(tn.CliContext(), txHash) + if err != nil { + return tx, fmt.Errorf("failed to get transaction %s: %w", txHash, err) + } + tx.Height = uint64(txResp.Height) + tx.TxHash = txHash + + tx.GasSpent = txResp.GasWanted + + const evType = "send_packet" + events := txResp.Events + + var ( + seq, _ = AttributeValue(events, evType, "packet_sequence") + srcPort, _ = AttributeValue(events, evType, "packet_src_port") + srcChan, _ = AttributeValue(events, evType, "packet_src_channel") + dstPort, _ = AttributeValue(events, evType, "packet_dst_port") + dstChan, _ = AttributeValue(events, evType, "packet_dst_channel") + timeoutHeight, _ = AttributeValue(events, evType, "packet_timeout_height") + timeoutTs, _ = AttributeValue(events, evType, "packet_timeout_timestamp") + data, _ = AttributeValue(events, evType, "packet_data") + ) + + tx.Packet.SourcePort = srcPort + tx.Packet.SourceChannel = srcChan + tx.Packet.DestPort = dstPort + tx.Packet.DestChannel = dstChan + tx.Packet.TimeoutHeight = timeoutHeight + tx.Packet.Data = []byte(data) + + seqNum, err := strconv.Atoi(seq) + if err != nil { + return tx, fmt.Errorf("invalid packet sequence from events %s: %w", seq, err) } + tx.Packet.Sequence = uint64(seqNum) + + timeoutNano, err := strconv.ParseUint(timeoutTs, 10, 64) + if err != nil { + return tx, fmt.Errorf("invalid packet timestamp timeout %s: %w", timeoutTs, err) + } + tx.Packet.TimeoutTimestamp = ibc.Nanoseconds(timeoutNano) + + return tx, err +} + +func AddHostZoneProposal(c *cosmos.CosmosChain, ctx context.Context, keyName string, fileLocation string) (string, error) { + tn := getFullNode(c) + dat, err := os.ReadFile(fileLocation) + if err != nil { + return "", fmt.Errorf("failed to read file: %w", err) + } + + fileName := "add-hostzone.json" + + err = tn.WriteFile(ctx, dat, fileName) + if err != nil { + return "", fmt.Errorf("writing add host zone proposal: %w", err) + } + + filePath := filepath.Join(tn.HomeDir(), fileName) + + command := []string{ + "gov", "submit-legacy-proposal", + "add-hostzone-config", filePath, + } + return tn.ExecTx(ctx, keyName, command...) +} + +func DeleteHostZoneProposal(c *cosmos.CosmosChain, ctx context.Context, keyName string, fileLocation string) (string, error) { + tn := getFullNode(c) dat, err := os.ReadFile(fileLocation) if err != nil { return "", fmt.Errorf("failed to read file: %w", err) @@ -35,10 +145,7 @@ func DeleteHostZoneProposal(c *cosmos.CosmosChain, ctx context.Context, keyName } func SetHostZoneProposal(c *cosmos.CosmosChain, ctx context.Context, keyName string, fileLocation string) (string, error) { - tn := c.Validators[0] - if len(c.FullNodes) > 0 { - tn = c.FullNodes[0] - } + tn := getFullNode(c) dat, err := os.ReadFile(fileLocation) if err != nil { return "", fmt.Errorf("failed to read file: %w", err) @@ -59,3 +166,54 @@ func SetHostZoneProposal(c *cosmos.CosmosChain, ctx context.Context, keyName str } return tn.ExecTx(ctx, keyName, command...) } + +func ParamChangeProposal(c *cosmos.CosmosChain, ctx context.Context, keyName string, prop *paramsutils.ParamChangeProposalJSON) (tx cosmos.TxProposal, _ error) { + tn := getFullNode(c) + content, err := json.Marshal(prop) + if err != nil { + return tx, err + } + + hash := sha256.Sum256(content) + proposalFilename := fmt.Sprintf("%x.json", hash) + err = tn.WriteFile(ctx, content, proposalFilename) + if err != nil { + return tx, fmt.Errorf("writing param change proposal: %w", err) + } + + proposalPath := filepath.Join(tn.HomeDir(), proposalFilename) + + command := []string{ + "gov", "submit-legacy-proposal", + "param-change", + proposalPath, + "--gas", "auto", + } + + txHash, err := tn.ExecTx(ctx, keyName, command...) + if err != nil { + return tx, fmt.Errorf("executing transaction failed: %w", err) + } + return txProposal(c, txHash) +} + +func txProposal(c *cosmos.CosmosChain, txHash string) (tx cosmos.TxProposal, _ error) { + fn := getFullNode(c) + txResp, err := getTransaction(fn.CliContext(), txHash) + if err != nil { + return tx, fmt.Errorf("failed to get transaction %s: %w", txHash, err) + } + tx.Height = uint64(txResp.Height) + tx.TxHash = txHash + // In cosmos, user is charged for entire gas requested, not the actual gas used. + tx.GasSpent = txResp.GasWanted + events := txResp.Events + + tx.DepositAmount, _ = AttributeValue(events, "proposal_deposit", "amount") + + evtSubmitProp := "submit_proposal" + tx.ProposalID, _ = AttributeValue(events, evtSubmitProp, "proposal_id") + tx.ProposalType, _ = AttributeValue(events, evtSubmitProp, "proposal_type") + + return tx, nil +} diff --git a/tests/interchaintest/feeabs/query.go b/tests/interchaintest/feeabs/query.go index 6f9e89ea..5137159d 100644 --- a/tests/interchaintest/feeabs/query.go +++ b/tests/interchaintest/feeabs/query.go @@ -6,20 +6,27 @@ import ( "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" ) -type HostChainFeeAbsConfigResponse struct { - HostChainConfig HostChainFeeAbsConfig `json:"host_chain_config"` -} +func QueryHostZoneConfigWithDenom(c *cosmos.CosmosChain, ctx context.Context, denom string) (*HostChainFeeAbsConfigResponse, error) { + tn := getFullNode(c) + cmd := []string{"feeabs", "host-chain-config", denom} + stdout, _, err := tn.ExecQuery(ctx, cmd...) + if err != nil { + return &HostChainFeeAbsConfigResponse{}, err + } + + var hostZoneConfig HostChainFeeAbsConfigResponse + err = json.Unmarshal(stdout, &hostZoneConfig) + if err != nil { + return &HostChainFeeAbsConfigResponse{}, err + } -type HostChainFeeAbsConfig struct { - IbcDenom string `json:"ibc_denom"` - OsmosisPoolTokenDenomIn string `json:"osmosis_pool_token_denom_in"` - PoolId string `json:"pool_id"` - Frozen bool `json:"frozen"` + return &hostZoneConfig, nil } -func QueryFeeabsHostZoneConfigWithDenom(c *cosmos.CosmosChain, ctx context.Context, denom string) (*HostChainFeeAbsConfigResponse, error) { - cmd := []string{"feeabs", "host-chain-config", denom} - stdout, _, err := c.ExecQuery(ctx, cmd) +func QueryHostZoneConfig(c *cosmos.CosmosChain, ctx context.Context) (*HostChainFeeAbsConfigResponse, error) { + tn := getFullNode(c) + cmd := []string{"feeabs", "all-host-chain-config"} + stdout, _, err := tn.ExecQuery(ctx, cmd...) if err != nil { return &HostChainFeeAbsConfigResponse{}, err } @@ -32,3 +39,20 @@ func QueryFeeabsHostZoneConfigWithDenom(c *cosmos.CosmosChain, ctx context.Conte return &hostZoneConfig, nil } + +func QueryModuleAccountBalances(c *cosmos.CosmosChain, ctx context.Context) (*QueryFeeabsModuleBalacesResponse, error) { + tn := getFullNode(c) + cmd := []string{"feeabs", "module-balances"} + stdout, _, err := tn.ExecQuery(ctx, cmd...) + if err != nil { + return &QueryFeeabsModuleBalacesResponse{}, err + } + + var feeabsModule QueryFeeabsModuleBalacesResponse + err = json.Unmarshal(stdout, &feeabsModule) + if err != nil { + return &QueryFeeabsModuleBalacesResponse{}, err + } + + return &feeabsModule, nil +} diff --git a/tests/interchaintest/feeabs/types.go b/tests/interchaintest/feeabs/types.go new file mode 100644 index 00000000..87d5b040 --- /dev/null +++ b/tests/interchaintest/feeabs/types.go @@ -0,0 +1,26 @@ +package feeabs + +import "github.com/cosmos/cosmos-sdk/types" + +type HostChainFeeAbsConfigResponse struct { + HostChainConfig HostChainFeeAbsConfig `json:"host_chain_config"` +} + +type HostChainFeeAbsConfig struct { + IbcDenom string `json:"ibc_denom"` + OsmosisPoolTokenDenomIn string `json:"osmosis_pool_token_denom_in"` + PoolId string `json:"pool_id"` + Frozen bool `json:"frozen"` +} + +type AddHostZoneProposalType struct { + Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + HostChainConfig HostChainFeeAbsConfig `protobuf:"bytes,3,opt,name=host_chain_config,json=hostChainConfig,proto3" json:"host_chain_config,omitempty"` + Deposit string `json:"deposit"` +} + +type QueryFeeabsModuleBalacesResponse struct { + Balances types.Coins + Address string +} diff --git a/tests/interchaintest/go.mod b/tests/interchaintest/go.mod index 294e175d..e697e1a8 100644 --- a/tests/interchaintest/go.mod +++ b/tests/interchaintest/go.mod @@ -4,6 +4,8 @@ go 1.20 require ( cosmossdk.io/math v1.0.1 + github.com/avast/retry-go/v4 v4.3.4 + github.com/cometbft/cometbft v0.37.2 github.com/cosmos/cosmos-proto v1.0.0-beta.2 github.com/cosmos/cosmos-sdk v0.47.4 github.com/cosmos/ibc-go/v7 v7.2.0 @@ -45,7 +47,6 @@ require ( github.com/Microsoft/go-winio v0.6.0 // indirect github.com/StirlingMarketingGroup/go-namecase v1.0.0 // indirect github.com/armon/go-metrics v0.4.1 // indirect - github.com/avast/retry-go/v4 v4.3.4 // indirect github.com/aws/aws-sdk-go v1.44.203 // indirect github.com/benbjohnson/clock v1.3.0 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -57,7 +58,6 @@ require ( github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chzyer/readline v1.5.1 // indirect github.com/coinbase/rosetta-sdk-go/types v1.0.0 // indirect - github.com/cometbft/cometbft v0.37.2 // indirect github.com/cometbft/cometbft-db v0.8.0 // indirect github.com/confio/ics23/go v0.9.0 // indirect github.com/cosmos/btcutil v1.0.5 // indirect @@ -248,7 +248,6 @@ replace ( github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 // For this nested module, you always want to replace the parent reference with the current worktree. github.com/osmosis-labs/fee-abstraction/v7 => ../../ - github.com/strangelove-ventures/interchaintest/v7 => github.com/notional-labs/interchaintest/v7 v7.0.0-20230824065823-c2068fe54573 github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 ) diff --git a/tests/interchaintest/go.sum b/tests/interchaintest/go.sum index 8d8c770b..bc3a5eb6 100644 --- a/tests/interchaintest/go.sum +++ b/tests/interchaintest/go.sum @@ -847,8 +847,6 @@ github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxzi github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/notional-labs/interchaintest/v7 v7.0.0-20230824065823-c2068fe54573 h1:c1F0nmIOFvn6m1SbBW3VG4PRz8ir3197j25tZ69Ms6w= -github.com/notional-labs/interchaintest/v7 v7.0.0-20230824065823-c2068fe54573/go.mod h1:SNOsTMsNsAzyeRgKS+kKwKCpg8R08WW0wSOiR32rb+E= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= @@ -1010,6 +1008,8 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= +github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230810233557-5fdb1e8a62e5 h1:CxxuOi9avhKixPG1zzgnC0RfPXr8FVtYeuiaymJY8cQ= +github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230810233557-5fdb1e8a62e5/go.mod h1:SNOsTMsNsAzyeRgKS+kKwKCpg8R08WW0wSOiR32rb+E= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= diff --git a/tests/interchaintest/host_zone_proposal_test.go b/tests/interchaintest/host_zone_proposal_test.go index e01ec0c7..d751ba48 100644 --- a/tests/interchaintest/host_zone_proposal_test.go +++ b/tests/interchaintest/host_zone_proposal_test.go @@ -2,482 +2,27 @@ package interchaintest import ( "context" - "cosmossdk.io/math" "fmt" - sdktypes "github.com/cosmos/cosmos-sdk/types" feeabsCli "github.com/notional-labs/fee-abstraction/tests/interchaintest/feeabs" "testing" - transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" - "github.com/strangelove-ventures/interchaintest/v7" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v7/ibc" - "github.com/strangelove-ventures/interchaintest/v7/testreporter" - "github.com/strangelove-ventures/interchaintest/v7/testutil" "github.com/stretchr/testify/require" - "go.uber.org/zap/zaptest" ) func TestHostZoneProposal(t *testing.T) { if testing.Short() { t.Skip("skipping in short mode") } - - client, network := interchaintest.DockerSetup(t) - - rep := testreporter.NewNopReporter() - eRep := rep.RelayerExecReporter(t) - ctx := context.Background() - // Create chain factory with Feeabs and Gaia - numVals := 1 - numFullNodes := 1 - gasAdjustment := 2.0 - - cf := interchaintest.NewBuiltinChainFactory(zaptest.NewLogger(t), []*interchaintest.ChainSpec{ - { - Name: "feeabs", - ChainConfig: feeabsConfig, - NumValidators: &numVals, - NumFullNodes: &numFullNodes, - }, - { - Name: "gaia", - Version: "v12.0.0-rc0", - ChainConfig: ibc.ChainConfig{ - GasPrices: "0.0uatom", - }, - NumValidators: &numVals, - NumFullNodes: &numFullNodes, - }, - { - Name: "osmosis", - Version: "v17.0.0", - ChainConfig: ibc.ChainConfig{ - GasPrices: "0.005uosmo", - EncodingConfig: osmosisEncoding(), - }, - GasAdjustment: &gasAdjustment, - NumValidators: &numVals, - NumFullNodes: &numFullNodes, - }, - }) - - chains, err := cf.Chains(t.Name()) - require.NoError(t, err) - - feeabs, gaia, osmosis := chains[0].(*cosmos.CosmosChain), chains[1].(*cosmos.CosmosChain), chains[2].(*cosmos.CosmosChain) - - r := interchaintest.NewBuiltinRelayerFactory( - ibc.CosmosRly, - zaptest.NewLogger(t), - ).Build(t, client, network) - - ic := interchaintest.NewInterchain(). - AddChain(feeabs). - AddChain(gaia). - AddChain(osmosis). - AddRelayer(r, "relayer"). - AddLink(interchaintest.InterchainLink{ - Chain1: feeabs, - Chain2: gaia, - Relayer: r, - Path: pathFeeabsGaia, - }). - AddLink(interchaintest.InterchainLink{ - Chain1: feeabs, - Chain2: osmosis, - Relayer: r, - Path: pathFeeabsOsmosis, - }). - AddLink(interchaintest.InterchainLink{ - Chain1: osmosis, - Chain2: gaia, - Relayer: r, - Path: pathOsmosisGaia, - }) - - require.NoError(t, ic.Build(ctx, eRep, interchaintest.InterchainBuildOptions{ - TestName: t.Name(), - Client: client, - NetworkID: network, - BlockDatabaseFile: interchaintest.DefaultBlockDatabaseFilepath(), - - SkipPathCreation: true, - })) - t.Cleanup(func() { - _ = ic.Close() - }) - - const userFunds = int64(10_000_000_000) - users := interchaintest.GetAndFundTestUsers(t, ctx, t.Name(), userFunds, feeabs, gaia, osmosis) - - // rly feeabs-osmo - // Generate new path - err = r.GeneratePath(ctx, eRep, feeabs.Config().ChainID, osmosis.Config().ChainID, pathFeeabsOsmosis) - require.NoError(t, err) - // Create client - err = r.CreateClients(ctx, eRep, pathFeeabsOsmosis, ibc.DefaultClientOpts()) - require.NoError(t, err) - - err = testutil.WaitForBlocks(ctx, 5, feeabs, osmosis) - require.NoError(t, err) - - // Create connection - err = r.CreateConnections(ctx, eRep, pathFeeabsOsmosis) - require.NoError(t, err) - - err = testutil.WaitForBlocks(ctx, 5, feeabs, osmosis) - require.NoError(t, err) - // Create channel - err = r.CreateChannel(ctx, eRep, pathFeeabsOsmosis, ibc.CreateChannelOptions{ - SourcePortName: "transfer", - DestPortName: "transfer", - Order: ibc.Unordered, - Version: "ics20-1", - }) - require.NoError(t, err) - - err = testutil.WaitForBlocks(ctx, 5, feeabs, osmosis) - require.NoError(t, err) - - channsFeeabs, err := r.GetChannels(ctx, eRep, feeabs.Config().ChainID) - require.NoError(t, err) - - channsOsmosis, err := r.GetChannels(ctx, eRep, osmosis.Config().ChainID) - require.NoError(t, err) - - require.Len(t, channsFeeabs, 1) - require.Len(t, channsOsmosis, 1) - - channFeeabsOsmosis := channsFeeabs[0] - require.NotEmpty(t, channFeeabsOsmosis.ChannelID) - channOsmosisFeeabs := channsOsmosis[0] - require.NotEmpty(t, channOsmosisFeeabs.ChannelID) - // rly feeabs-gaia - // Generate new path - err = r.GeneratePath(ctx, eRep, feeabs.Config().ChainID, gaia.Config().ChainID, pathFeeabsGaia) - require.NoError(t, err) - // Create clients - err = r.CreateClients(ctx, eRep, pathFeeabsGaia, ibc.DefaultClientOpts()) - require.NoError(t, err) - - err = testutil.WaitForBlocks(ctx, 5, feeabs, gaia) - require.NoError(t, err) - - // Create connection - err = r.CreateConnections(ctx, eRep, pathFeeabsGaia) - require.NoError(t, err) - - err = testutil.WaitForBlocks(ctx, 5, feeabs, gaia) - require.NoError(t, err) - - // Create channel - err = r.CreateChannel(ctx, eRep, pathFeeabsGaia, ibc.CreateChannelOptions{ - SourcePortName: "transfer", - DestPortName: "transfer", - Order: ibc.Unordered, - Version: "ics20-1", - }) - require.NoError(t, err) - - err = testutil.WaitForBlocks(ctx, 5, feeabs, gaia) - require.NoError(t, err) - - channsFeeabs, err = r.GetChannels(ctx, eRep, feeabs.Config().ChainID) - require.NoError(t, err) - - channsGaia, err := r.GetChannels(ctx, eRep, gaia.Config().ChainID) - require.NoError(t, err) - - require.Len(t, channsFeeabs, 2) - require.Len(t, channsGaia, 1) - - var channFeeabsGaia ibc.ChannelOutput - for _, chann := range channsFeeabs { - if chann.ChannelID != channFeeabsOsmosis.ChannelID { - channFeeabsGaia = chann - } - } - require.NotEmpty(t, channFeeabsGaia.ChannelID) - - channGaiaFeeabs := channsGaia[0] - require.NotEmpty(t, channGaiaFeeabs.ChannelID) - // rly osmo-gaia - // Generate new path - err = r.GeneratePath(ctx, eRep, osmosis.Config().ChainID, gaia.Config().ChainID, pathOsmosisGaia) - require.NoError(t, err) - // Create clients - err = r.CreateClients(ctx, eRep, pathOsmosisGaia, ibc.DefaultClientOpts()) - require.NoError(t, err) - - err = testutil.WaitForBlocks(ctx, 5, osmosis, gaia) - require.NoError(t, err) - // Create connection - err = r.CreateConnections(ctx, eRep, pathOsmosisGaia) - require.NoError(t, err) - - err = testutil.WaitForBlocks(ctx, 5, osmosis, gaia) - require.NoError(t, err) - // Create channel - err = r.CreateChannel(ctx, eRep, pathOsmosisGaia, ibc.CreateChannelOptions{ - SourcePortName: "transfer", - DestPortName: "transfer", - Order: ibc.Unordered, - Version: "ics20-1", - }) - require.NoError(t, err) - - err = testutil.WaitForBlocks(ctx, 5, osmosis, gaia) - require.NoError(t, err) - - channsOsmosis, err = r.GetChannels(ctx, eRep, osmosis.Config().ChainID) - require.NoError(t, err) - - channsGaia, err = r.GetChannels(ctx, eRep, gaia.Config().ChainID) - require.NoError(t, err) - - require.Len(t, channsOsmosis, 2) - require.Len(t, channsGaia, 2) - - var channOsmosisGaia ibc.ChannelOutput - var channGaiaOsmosis ibc.ChannelOutput - - for _, chann := range channsOsmosis { - if chann.ChannelID != channOsmosisFeeabs.ChannelID { - channOsmosisGaia = chann - } - } - require.NotEmpty(t, channOsmosisGaia) - - for _, chann := range channsGaia { - if chann.ChannelID != channGaiaFeeabs.ChannelID { - channGaiaOsmosis = chann - } - } - require.NotEmpty(t, channGaiaOsmosis) - - fmt.Println("-----------------------------------") - fmt.Printf("channFeeabsOsmosis: %s - %s\n", channFeeabsOsmosis.ChannelID, channFeeabsOsmosis.Counterparty.ChannelID) - fmt.Printf("channOsmosisFeeabs: %s - %s\n", channOsmosisFeeabs.ChannelID, channOsmosisFeeabs.Counterparty.ChannelID) - fmt.Printf("channFeeabsGaia: %s - %s\n", channFeeabsGaia.ChannelID, channFeeabsGaia.Counterparty.ChannelID) - fmt.Printf("channGaiaFeeabs: %s - %s\n", channGaiaFeeabs.ChannelID, channGaiaFeeabs.Counterparty.ChannelID) - fmt.Printf("channOsmosisGaia: %s - %s\n", channOsmosisGaia.ChannelID, channOsmosisGaia.Counterparty.ChannelID) - fmt.Printf("channGaiaOsmosis: %s - %s\n", channGaiaOsmosis.ChannelID, channGaiaOsmosis.Counterparty.ChannelID) - fmt.Println("-----------------------------------") - - // Start the relayer on both paths - err = r.StartRelayer(ctx, eRep, pathFeeabsGaia, pathFeeabsOsmosis, pathOsmosisGaia) - require.NoError(t, err) - - t.Cleanup( - func() { - err := r.StopRelayer(ctx, eRep) - if err != nil { - t.Logf("an error occurred while stopping the relayer: %s", err) - } - }, - ) - - // Get original account balances - feeabsUser, gaiaUser, osmosisUser := users[0], users[1], users[2] - _ = feeabsUser - _ = gaiaUser - _ = osmosisUser - - amountToSend := math.NewInt(1_000_000_000) - - // Send Gaia uatom to Osmosis - gaiaHeight, err := gaia.Height(ctx) - require.NoError(t, err) - dstAddress := sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()) - transfer := ibc.WalletAmount{ - Address: dstAddress, - Denom: gaia.Config().Denom, - Amount: amountToSend, - } - - tx, err := gaia.SendIBCTransfer(ctx, channGaiaOsmosis.ChannelID, gaiaUser.KeyName(), transfer, ibc.TransferOptions{}) - require.NoError(t, err) - require.NoError(t, tx.Validate()) - - _, err = testutil.PollForAck(ctx, gaia, gaiaHeight, gaiaHeight+30, tx.Packet) - require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, 1, feeabs, gaia, osmosis) - require.NoError(t, err) - - // Send Feeabs stake to Osmosis - feeabsHeight, err := feeabs.Height(ctx) - require.NoError(t, err) - dstAddress = sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()) - transfer = ibc.WalletAmount{ - Address: dstAddress, - Denom: feeabs.Config().Denom, - Amount: amountToSend, - } - - tx, err = feeabs.SendIBCTransfer(ctx, channFeeabsOsmosis.ChannelID, feeabsUser.KeyName(), transfer, ibc.TransferOptions{}) - require.NoError(t, err) - require.NoError(t, tx.Validate()) - - _, err = testutil.PollForAck(ctx, feeabs, feeabsHeight, feeabsHeight+30, tx.Packet) - require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, 1, feeabs, gaia, osmosis) - require.NoError(t, err) - - // Send Gaia uatom to Feeabs - gaiaHeight, err = gaia.Height(ctx) - require.NoError(t, err) - dstAddress = sdktypes.MustBech32ifyAddressBytes(feeabs.Config().Bech32Prefix, feeabsUser.Address()) - transfer = ibc.WalletAmount{ - Address: dstAddress, - Denom: gaia.Config().Denom, - Amount: amountToSend, - } - - tx, err = gaia.SendIBCTransfer(ctx, channGaiaFeeabs.ChannelID, gaiaUser.KeyName(), transfer, ibc.TransferOptions{}) - require.NoError(t, err) - require.NoError(t, tx.Validate()) - - _, err = testutil.PollForAck(ctx, gaia, gaiaHeight, gaiaHeight+30, tx.Packet) - require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, 1, feeabs, gaia, osmosis) - require.NoError(t, err) - // Setup contract on Osmosis - // Store code crosschain Registry - crossChainRegistryContractID, err := osmosis.StoreContract(ctx, osmosisUser.KeyName(), "./bytecode/crosschain_registry.wasm") - require.NoError(t, err) - _ = crossChainRegistryContractID - // // Instatiate - owner := sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()) - initMsg := fmt.Sprintf("{\"owner\":\"%s\"}", owner) - registryContractAddress, err := osmosis.InstantiateContract(ctx, osmosisUser.KeyName(), crossChainRegistryContractID, initMsg, true) - require.NoError(t, err) - // Execute - msg := fmt.Sprintf("{\"modify_chain_channel_links\": {\"operations\": [{\"operation\": \"set\",\"source_chain\": \"feeabs\",\"destination_chain\": \"osmosis\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"osmosis\",\"destination_chain\": \"feeabs\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"feeabs\",\"destination_chain\": \"gaia\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"gaia\",\"destination_chain\": \"feeabs\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"osmosis\",\"destination_chain\": \"gaia\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"gaia\",\"destination_chain\": \"osmosis\",\"channel_id\": \"%s\"}]}}", - channFeeabsOsmosis.ChannelID, - channOsmosisFeeabs.ChannelID, - channFeeabsGaia.ChannelID, - channGaiaFeeabs.ChannelID, - channOsmosisGaia.ChannelID, - channGaiaOsmosis.ChannelID) - _, err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName(), registryContractAddress, msg) - require.NoError(t, err) - // Execute - msg = `{ - "modify_bech32_prefixes": - { - "operations": - [ - {"operation": "set", "chain_name": "feeabs", "prefix": "feeabs"}, - {"operation": "set", "chain_name": "osmosis", "prefix": "osmo"}, - {"operation": "set", "chain_name": "gaia", "prefix": "cosmos"} - ] - } - }` - _, err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName(), registryContractAddress, msg) - require.NoError(t, err) - - // Create pool Osmosis(uatom)/Osmosis(stake) on Osmosis - denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(channOsmosisGaia.PortID, channOsmosisGaia.ChannelID, gaia.Config().Denom)) - uatomOnOsmosis := denomTrace.IBCDenom() - osmosisUserBalance, err := osmosis.GetBalance(ctx, sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()), uatomOnOsmosis) - require.NoError(t, err) - require.Equal(t, amountToSend, osmosisUserBalance) - - denomTrace = transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(channOsmosisFeeabs.PortID, channOsmosisFeeabs.ChannelID, feeabs.Config().Denom)) - stakeOnOsmosis := denomTrace.IBCDenom() - osmosisUserBalance, err = osmosis.GetBalance(ctx, sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()), stakeOnOsmosis) - require.NoError(t, err) - require.Equal(t, amountToSend, osmosisUserBalance) - - poolID, err := cosmos.OsmosisCreatePool(osmosis, ctx, osmosisUser.KeyName(), cosmos.OsmosisPoolParams{ - Weights: fmt.Sprintf("5%s,5%s", stakeOnOsmosis, uatomOnOsmosis), - InitialDeposit: fmt.Sprintf("95000000%s,950000000%s", stakeOnOsmosis, uatomOnOsmosis), - SwapFee: "0.01", - ExitFee: "0", - FutureGovernor: "", - }) - require.NoError(t, err) - require.Equal(t, poolID, "1") - - // Setup propose_pfm - // propose_pfm for feeabs - _, err = cosmos.OsmosisSetupProposePFM(osmosis, ctx, osmosisUser.KeyName(), registryContractAddress, `{"propose_pfm":{"chain": "feeabs"}}`, stakeOnOsmosis) - require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, 15, feeabs, gaia, osmosis) - require.NoError(t, err) - queryMsg := QuerySmartMsg{ - Packet: HasPacketForwarding{ - ChainID: "feeabs", - }, - } - res := QuerySmartMsgResponse{} - osmosis.QueryContract(ctx, registryContractAddress, queryMsg, res) - // propose_pfm for gaia - _, err = cosmos.OsmosisSetupProposePFM(osmosis, ctx, osmosisUser.KeyName(), registryContractAddress, `{"propose_pfm":{"chain": "gaia"}}`, uatomOnOsmosis) - require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, 15, feeabs, gaia, osmosis) - require.NoError(t, err) - queryMsg = QuerySmartMsg{ - Packet: HasPacketForwarding{ - ChainID: "gaia", - }, - } - res = QuerySmartMsgResponse{} - osmosis.QueryContract(ctx, registryContractAddress, queryMsg, res) - // store swaprouter - swapRouterContractID, err := osmosis.StoreContract(ctx, osmosisUser.KeyName(), "./bytecode/swaprouter.wasm") - require.NoError(t, err) - // instantiate - swapRouterContractAddress, err := osmosis.InstantiateContract(ctx, osmosisUser.KeyName(), swapRouterContractID, initMsg, true) - require.NoError(t, err) - - // execute - msg = fmt.Sprintf("{\"set_route\":{\"input_denom\":\"%s\",\"output_denom\":\"%s\",\"pool_route\":[{\"pool_id\":\"%s\",\"token_out_denom\":\"%s\"}]}}", - uatomOnOsmosis, - stakeOnOsmosis, - poolID, - stakeOnOsmosis, - ) - _, err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName(), swapRouterContractAddress, msg) - require.NoError(t, err) - - // store xcs - xcsContractID, err := osmosis.StoreContract(ctx, osmosisUser.KeyName(), "./bytecode/crosschain_swaps.wasm") - require.NoError(t, err) - // instantiate - initMsg = fmt.Sprintf("{\"swap_contract\":\"%s\",\"governor\": \"%s\"}", swapRouterContractAddress, owner) - xcsContractAddress, err := osmosis.InstantiateContract(ctx, osmosisUser.KeyName(), xcsContractID, initMsg, true) - _ = xcsContractAddress - require.NoError(t, err) - // Swap Feeabs(uatom) to Osmosis - // send ibc token to feeabs module account - gaiaHeight, err = gaia.Height(ctx) - require.NoError(t, err) - feeabsModule, err := QueryFeeabsModuleAccountBalances(feeabs, ctx) - require.NoError(t, err) - dstAddress = feeabsModule.Address - transfer = ibc.WalletAmount{ - Address: dstAddress, - Denom: gaia.Config().Denom, - Amount: math.NewInt(1_000_000), - } - - tx, err = gaia.SendIBCTransfer(ctx, channGaiaFeeabs.ChannelID, gaiaUser.KeyName(), transfer, ibc.TransferOptions{}) - require.NoError(t, err) - require.NoError(t, tx.Validate()) - - _, err = testutil.PollForAck(ctx, gaia, gaiaHeight, gaiaHeight+30, tx.Packet) - require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, 1, feeabs, gaia, osmosis) - require.NoError(t, err) + chains, users, _ := SetupChain(t, ctx) + feeabs, _, _ := chains[0].(*cosmos.CosmosChain), chains[1].(*cosmos.CosmosChain), chains[2].(*cosmos.CosmosChain) - denomTrace = transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(channFeeabsGaia.PortID, channFeeabsGaia.ChannelID, gaia.Config().Denom)) + feeabsUser, _, _ := users[0], users[1], users[2] // Start testing for add host zone proposal - _, err = cosmos.FeeabsAddHostZoneProposal(feeabs, ctx, feeabsUser.KeyName(), "./proposal/add_host_zone.json") + _, err := feeabsCli.AddHostZoneProposal(feeabs, ctx, feeabsUser.KeyName(), "./proposal/add_host_zone.json") require.NoError(t, err) err = feeabs.VoteOnProposalAllValidators(ctx, "1", cosmos.ProposalVoteYes) @@ -487,7 +32,7 @@ func TestHostZoneProposal(t *testing.T) { _, err = cosmos.PollForProposalStatus(ctx, feeabs, height, height+10, "1", cosmos.ProposalStatusPassed) require.NoError(t, err, "proposal status did not change to passed in expected number of blocks") - config, err := feeabsCli.QueryFeeabsHostZoneConfigWithDenom(feeabs, ctx, "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9") + config, err := feeabsCli.QueryHostZoneConfigWithDenom(feeabs, ctx, "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9") require.NoError(t, err) require.Equal(t, config, &feeabsCli.HostChainFeeAbsConfigResponse{HostChainConfig: feeabsCli.HostChainFeeAbsConfig{ IbcDenom: "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9", @@ -507,7 +52,7 @@ func TestHostZoneProposal(t *testing.T) { _, err = cosmos.PollForProposalStatus(ctx, feeabs, height, height+10, "2", cosmos.ProposalStatusPassed) require.NoError(t, err, "proposal status did not change to passed in expected number of blocks") - config, err = feeabsCli.QueryFeeabsHostZoneConfigWithDenom(feeabs, ctx, "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9") + config, err = feeabsCli.QueryHostZoneConfigWithDenom(feeabs, ctx, "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9") require.NoError(t, err) require.Equal(t, config, &feeabsCli.HostChainFeeAbsConfigResponse{HostChainConfig: feeabsCli.HostChainFeeAbsConfig{ IbcDenom: "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9", @@ -528,7 +73,7 @@ func TestHostZoneProposal(t *testing.T) { require.NoError(t, err, "proposal status did not change to passed in expected number of blocks") fmt.Printf("response: %s\n", response) - config, err = feeabsCli.QueryFeeabsHostZoneConfigWithDenom(feeabs, ctx, "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9") + config, err = feeabsCli.QueryHostZoneConfigWithDenom(feeabs, ctx, "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9") require.Equal(t, config, &feeabsCli.HostChainFeeAbsConfigResponse{HostChainConfig: feeabsCli.HostChainFeeAbsConfig{ IbcDenom: "", OsmosisPoolTokenDenomIn: "", diff --git a/tests/interchaintest/packet_foward_test.go b/tests/interchaintest/packet_foward_test.go index c1a2f729..22751613 100644 --- a/tests/interchaintest/packet_foward_test.go +++ b/tests/interchaintest/packet_foward_test.go @@ -2,582 +2,216 @@ package interchaintest import ( "context" - "encoding/json" + "cosmossdk.io/math" "fmt" + sdktypes "github.com/cosmos/cosmos-sdk/types" + paramsutils "github.com/cosmos/cosmos-sdk/x/params/client/utils" + feeabsCli "github.com/notional-labs/fee-abstraction/tests/interchaintest/feeabs" "os" "path" "testing" - "time" - - "cosmossdk.io/math" - sdktypes "github.com/cosmos/cosmos-sdk/types" - paramsutils "github.com/cosmos/cosmos-sdk/x/params/client/utils" transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" - interchaintest "github.com/strangelove-ventures/interchaintest/v7" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v7/ibc" - "github.com/strangelove-ventures/interchaintest/v7/testreporter" "github.com/strangelove-ventures/interchaintest/v7/testutil" "github.com/stretchr/testify/require" - "go.uber.org/zap/zaptest" ) -type PacketMetadata struct { - Forward *ForwardMetadata `json:"forward"` -} - -type ForwardMetadata struct { - Receiver string `json:"receiver"` - Port string `json:"port"` - Channel string `json:"channel"` - Timeout time.Duration `json:"timeout"` - Retries *uint8 `json:"retries,omitempty"` - Next *string `json:"next,omitempty"` - RefundSequence *uint64 `json:"refund_sequence,omitempty"` -} - func TestPacketForwardMiddleware(t *testing.T) { if testing.Short() { t.Skip("skipping in short mode") } - - client, network := interchaintest.DockerSetup(t) - - rep := testreporter.NewNopReporter() - eRep := rep.RelayerExecReporter(t) - + // Set up chains, users and channels ctx := context.Background() - - // Create chain factory with Feeabs and Gaia - numVals := 1 - numFullNodes := 1 - gasAdjustment := 2.0 - - cf := interchaintest.NewBuiltinChainFactory(zaptest.NewLogger(t), []*interchaintest.ChainSpec{ - { - Name: "feeabs", - ChainConfig: feeabsConfig, - NumValidators: &numVals, - NumFullNodes: &numFullNodes, - }, - { - Name: "gaia", - Version: "v12.0.0-rc0", - ChainConfig: ibc.ChainConfig{ - GasPrices: "0.0uatom", - }, - NumValidators: &numVals, - NumFullNodes: &numFullNodes, - }, - { - Name: "osmosis", - Version: "v17.0.0", - ChainConfig: ibc.ChainConfig{ - GasPrices: "0.005uosmo", - EncodingConfig: osmosisEncoding(), - }, - GasAdjustment: &gasAdjustment, - NumValidators: &numVals, - NumFullNodes: &numFullNodes, - }, - }) - - chains, err := cf.Chains(t.Name()) - require.NoError(t, err) - + chains, users, channels := SetupChain(t, ctx) feeabs, gaia, osmosis := chains[0].(*cosmos.CosmosChain), chains[1].(*cosmos.CosmosChain), chains[2].(*cosmos.CosmosChain) - r := interchaintest.NewBuiltinRelayerFactory( - ibc.CosmosRly, - zaptest.NewLogger(t), - ).Build(t, client, network) - - ic := interchaintest.NewInterchain(). - AddChain(feeabs). - AddChain(gaia). - AddChain(osmosis). - AddRelayer(r, "relayer"). - AddLink(interchaintest.InterchainLink{ - Chain1: feeabs, - Chain2: gaia, - Relayer: r, - Path: pathFeeabsGaia, - }). - AddLink(interchaintest.InterchainLink{ - Chain1: feeabs, - Chain2: osmosis, - Relayer: r, - Path: pathFeeabsOsmosis, - }). - AddLink(interchaintest.InterchainLink{ - Chain1: osmosis, - Chain2: gaia, - Relayer: r, - Path: pathOsmosisGaia, - }) - - require.NoError(t, ic.Build(ctx, eRep, interchaintest.InterchainBuildOptions{ - TestName: t.Name(), - Client: client, - NetworkID: network, - BlockDatabaseFile: interchaintest.DefaultBlockDatabaseFilepath(), - - SkipPathCreation: true, - })) - t.Cleanup(func() { - _ = ic.Close() - }) - - const userFunds = int64(10_000_000_000) - users := interchaintest.GetAndFundTestUsers(t, ctx, t.Name(), userFunds, feeabs, gaia, osmosis) + feeabsUser, gaiaUser, osmosisUser := users[0], users[1], users[2] - // rly feeabs-osmo - // Generate new path - err = r.GeneratePath(ctx, eRep, feeabs.Config().ChainID, osmosis.Config().ChainID, pathFeeabsOsmosis) - require.NoError(t, err) - // Create client - err = r.CreateClients(ctx, eRep, pathFeeabsOsmosis, ibc.DefaultClientOpts()) + channFeeabsOsmosis, channOsmosisFeeabs, channFeeabsGaia, channGaiaFeeabs, channOsmosisGaia, channGaiaOsmosis := channels[0], channels[1], channels[2], channels[3], channels[4], channels[5] + + // Setup contract on Osmosis + // Store code crosschain Registry + crossChainRegistryContractID, err := osmosis.StoreContract(ctx, osmosisUser.KeyName(), "./bytecode/crosschain_registry.wasm") + require.NoError(t, err) + _ = crossChainRegistryContractID + // // Instatiate + owner := sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()) + initMsg := fmt.Sprintf("{\"owner\":\"%s\"}", owner) + registryContractAddress, err := osmosis.InstantiateContract(ctx, osmosisUser.KeyName(), crossChainRegistryContractID, initMsg, true) + require.NoError(t, err) + // Execute + msg := fmt.Sprintf("{\"modify_chain_channel_links\": {\"operations\": [{\"operation\": \"set\",\"source_chain\": \"feeabs\",\"destination_chain\": \"osmosis\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"osmosis\",\"destination_chain\": \"feeabs\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"feeabs\",\"destination_chain\": \"gaia\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"gaia\",\"destination_chain\": \"feeabs\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"osmosis\",\"destination_chain\": \"gaia\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"gaia\",\"destination_chain\": \"osmosis\",\"channel_id\": \"%s\"}]}}", + channFeeabsOsmosis.ChannelID, + channOsmosisFeeabs.ChannelID, + channFeeabsGaia.ChannelID, + channGaiaFeeabs.ChannelID, + channOsmosisGaia.ChannelID, + channGaiaOsmosis.ChannelID) + _, err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName(), registryContractAddress, msg) + require.NoError(t, err) + // Execute + msg = `{ + "modify_bech32_prefixes": + { + "operations": + [ + {"operation": "set", "chain_name": "feeabs", "prefix": "feeabs"}, + {"operation": "set", "chain_name": "osmosis", "prefix": "osmo"}, + {"operation": "set", "chain_name": "gaia", "prefix": "cosmos"} + ] + } + }` + _, err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName(), registryContractAddress, msg) require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, 5, feeabs, osmosis) + // Create pool Osmosis(uatom)/Osmosis(stake) on Osmosis + denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(channOsmosisGaia.PortID, channOsmosisGaia.ChannelID, gaia.Config().Denom)) + uatomOnOsmosis := denomTrace.IBCDenom() + osmosisUserBalance, err := osmosis.GetBalance(ctx, sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()), uatomOnOsmosis) require.NoError(t, err) + require.Equal(t, amountToSend, osmosisUserBalance) - // Create connection - err = r.CreateConnections(ctx, eRep, pathFeeabsOsmosis) + denomTrace = transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(channOsmosisFeeabs.PortID, channOsmosisFeeabs.ChannelID, feeabs.Config().Denom)) + stakeOnOsmosis := denomTrace.IBCDenom() + osmosisUserBalance, err = osmosis.GetBalance(ctx, sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()), stakeOnOsmosis) require.NoError(t, err) + require.Equal(t, amountToSend, osmosisUserBalance) - err = testutil.WaitForBlocks(ctx, 5, feeabs, osmosis) - require.NoError(t, err) - // Create channel - err = r.CreateChannel(ctx, eRep, pathFeeabsOsmosis, ibc.CreateChannelOptions{ - SourcePortName: "transfer", - DestPortName: "transfer", - Order: ibc.Unordered, - Version: "ics20-1", + poolID, err := feeabsCli.CreatePool(osmosis, ctx, osmosisUser.KeyName(), cosmos.OsmosisPoolParams{ + Weights: fmt.Sprintf("5%s,5%s", stakeOnOsmosis, uatomOnOsmosis), + InitialDeposit: fmt.Sprintf("95000000%s,950000000%s", stakeOnOsmosis, uatomOnOsmosis), + SwapFee: "0.01", + ExitFee: "0", + FutureGovernor: "", }) require.NoError(t, err) + require.Equal(t, poolID, "1") - err = testutil.WaitForBlocks(ctx, 5, feeabs, osmosis) + // Setup propose_pfm + // propose_pfm for feeabs + _, err = feeabsCli.SetupProposePFM(osmosis, ctx, osmosisUser.KeyName(), registryContractAddress, `{"propose_pfm":{"chain": "feeabs"}}`, stakeOnOsmosis) require.NoError(t, err) - - channsFeeabs, err := r.GetChannels(ctx, eRep, feeabs.Config().ChainID) + err = testutil.WaitForBlocks(ctx, 15, feeabs, gaia, osmosis) require.NoError(t, err) - - channsOsmosis, err := r.GetChannels(ctx, eRep, osmosis.Config().ChainID) - require.NoError(t, err) - - require.Len(t, channsFeeabs, 1) - require.Len(t, channsOsmosis, 1) - - channFeeabsOsmosis := channsFeeabs[0] - require.NotEmpty(t, channFeeabsOsmosis.ChannelID) - channOsmosisFeeabs := channsOsmosis[0] - require.NotEmpty(t, channOsmosisFeeabs.ChannelID) - // rly feeabs-gaia - // Generate new path - err = r.GeneratePath(ctx, eRep, feeabs.Config().ChainID, gaia.Config().ChainID, pathFeeabsGaia) + queryMsg := QuerySmartMsg{ + Packet: HasPacketForwarding{ + ChainID: "feeabs", + }, + } + res := QuerySmartMsgResponse{} + osmosis.QueryContract(ctx, registryContractAddress, queryMsg, res) + // propose_pfm for gaia + _, err = feeabsCli.SetupProposePFM(osmosis, ctx, osmosisUser.KeyName(), registryContractAddress, `{"propose_pfm":{"chain": "gaia"}}`, uatomOnOsmosis) require.NoError(t, err) - // Create clients - err = r.CreateClients(ctx, eRep, pathFeeabsGaia, ibc.DefaultClientOpts()) + err = testutil.WaitForBlocks(ctx, 15, feeabs, gaia, osmosis) require.NoError(t, err) - - err = testutil.WaitForBlocks(ctx, 5, feeabs, gaia) + queryMsg = QuerySmartMsg{ + Packet: HasPacketForwarding{ + ChainID: "gaia", + }, + } + res = QuerySmartMsgResponse{} + osmosis.QueryContract(ctx, registryContractAddress, queryMsg, res) + // store swaprouter + swapRouterContractID, err := osmosis.StoreContract(ctx, osmosisUser.KeyName(), "./bytecode/swaprouter.wasm") require.NoError(t, err) - - // Create connection - err = r.CreateConnections(ctx, eRep, pathFeeabsGaia) + // instantiate + swapRouterContractAddress, err := osmosis.InstantiateContract(ctx, osmosisUser.KeyName(), swapRouterContractID, initMsg, true) require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, 5, feeabs, gaia) + // execute + msg = fmt.Sprintf("{\"set_route\":{\"input_denom\":\"%s\",\"output_denom\":\"%s\",\"pool_route\":[{\"pool_id\":\"%s\",\"token_out_denom\":\"%s\"}]}}", + uatomOnOsmosis, + stakeOnOsmosis, + poolID, + stakeOnOsmosis, + ) + _, err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName(), swapRouterContractAddress, msg) require.NoError(t, err) - // Create channel - err = r.CreateChannel(ctx, eRep, pathFeeabsGaia, ibc.CreateChannelOptions{ - SourcePortName: "transfer", - DestPortName: "transfer", - Order: ibc.Unordered, - Version: "ics20-1", - }) + // store xcs + xcsContractID, err := osmosis.StoreContract(ctx, osmosisUser.KeyName(), "./bytecode/crosschain_swaps.wasm") require.NoError(t, err) - - err = testutil.WaitForBlocks(ctx, 5, feeabs, gaia) + // instantiate + initMsg = fmt.Sprintf("{\"swap_contract\":\"%s\",\"governor\": \"%s\"}", swapRouterContractAddress, owner) + xcsContractAddress, err := osmosis.InstantiateContract(ctx, osmosisUser.KeyName(), xcsContractID, initMsg, true) + _ = xcsContractAddress require.NoError(t, err) - - channsFeeabs, err = r.GetChannels(ctx, eRep, feeabs.Config().ChainID) + // Swap Feeabs(uatom) to Osmosis + // send ibc token to feeabs module account + gaiaHeight, err := gaia.Height(ctx) require.NoError(t, err) - - channsGaia, err := r.GetChannels(ctx, eRep, gaia.Config().ChainID) + feeabsModule, err := feeabsCli.QueryModuleAccountBalances(feeabs, ctx) require.NoError(t, err) - - require.Len(t, channsFeeabs, 2) - require.Len(t, channsGaia, 1) - - var channFeeabsGaia ibc.ChannelOutput - for _, chann := range channsFeeabs { - if chann.ChannelID != channFeeabsOsmosis.ChannelID { - channFeeabsGaia = chann - } + dstAddress := feeabsModule.Address + transfer := ibc.WalletAmount{ + Address: dstAddress, + Denom: gaia.Config().Denom, + Amount: math.NewInt(1_000_000), } - require.NotEmpty(t, channFeeabsGaia.ChannelID) - - channGaiaFeeabs := channsGaia[0] - require.NotEmpty(t, channGaiaFeeabs.ChannelID) - // rly osmo-gaia - // Generate new path - err = r.GeneratePath(ctx, eRep, osmosis.Config().ChainID, gaia.Config().ChainID, pathOsmosisGaia) - require.NoError(t, err) - // Create clients - err = r.CreateClients(ctx, eRep, pathOsmosisGaia, ibc.DefaultClientOpts()) - require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, 5, osmosis, gaia) - require.NoError(t, err) - // Create connection - err = r.CreateConnections(ctx, eRep, pathOsmosisGaia) + tx, err := gaia.SendIBCTransfer(ctx, channGaiaFeeabs.ChannelID, gaiaUser.KeyName(), transfer, ibc.TransferOptions{}) require.NoError(t, err) + require.NoError(t, tx.Validate()) - err = testutil.WaitForBlocks(ctx, 5, osmosis, gaia) + _, err = testutil.PollForAck(ctx, gaia, gaiaHeight, gaiaHeight+30, tx.Packet) require.NoError(t, err) - // Create channel - err = r.CreateChannel(ctx, eRep, pathOsmosisGaia, ibc.CreateChannelOptions{ - SourcePortName: "transfer", - DestPortName: "transfer", - Order: ibc.Unordered, - Version: "ics20-1", - }) + err = testutil.WaitForBlocks(ctx, 1, feeabs, gaia, osmosis) require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, 5, osmosis, gaia) - require.NoError(t, err) + denomTrace = transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(channFeeabsGaia.PortID, channFeeabsGaia.ChannelID, gaia.Config().Denom)) + uatomOnFeeabs := denomTrace.IBCDenom() - channsOsmosis, err = r.GetChannels(ctx, eRep, osmosis.Config().ChainID) - require.NoError(t, err) + current_directory, _ := os.Getwd() + param_change_path := path.Join(current_directory, "proposal", "proposal.json") - channsGaia, err = r.GetChannels(ctx, eRep, gaia.Config().ChainID) + changeParamProposal, err := paramsutils.ParseParamChangeProposalJSON(feeabs.Config().EncodingConfig.Amino, param_change_path) require.NoError(t, err) - require.Len(t, channsOsmosis, 2) - require.Len(t, channsGaia, 2) + paramTx, err := feeabsCli.ParamChangeProposal(feeabs, ctx, feeabsUser.KeyName(), &changeParamProposal) + require.NoError(t, err, "error submitting param change proposal tx") - var channOsmosisGaia ibc.ChannelOutput - var channGaiaOsmosis ibc.ChannelOutput + err = feeabs.VoteOnProposalAllValidators(ctx, paramTx.ProposalID, cosmos.ProposalVoteYes) + require.NoError(t, err, "failed to submit votes") - for _, chann := range channsOsmosis { - if chann.ChannelID != channOsmosisFeeabs.ChannelID { - channOsmosisGaia = chann - } - } - require.NotEmpty(t, channOsmosisGaia) - - for _, chann := range channsGaia { - if chann.ChannelID != channGaiaFeeabs.ChannelID { - channGaiaOsmosis = chann - } - } - require.NotEmpty(t, channGaiaOsmosis) + height, _ := feeabs.Height(ctx) + _, err = cosmos.PollForProposalStatus(ctx, feeabs, height, height+10, paramTx.ProposalID, cosmos.ProposalStatusPassed) + require.NoError(t, err, "proposal status did not change to passed in expected number of blocks") - fmt.Println("-----------------------------------") - fmt.Printf("channFeeabsOsmosis: %s - %s\n", channFeeabsOsmosis.ChannelID, channFeeabsOsmosis.Counterparty.ChannelID) - fmt.Printf("channOsmosisFeeabs: %s - %s\n", channOsmosisFeeabs.ChannelID, channOsmosisFeeabs.Counterparty.ChannelID) - fmt.Printf("channFeeabsGaia: %s - %s\n", channFeeabsGaia.ChannelID, channFeeabsGaia.Counterparty.ChannelID) - fmt.Printf("channGaiaFeeabs: %s - %s\n", channGaiaFeeabs.ChannelID, channGaiaFeeabs.Counterparty.ChannelID) - fmt.Printf("channOsmosisGaia: %s - %s\n", channOsmosisGaia.ChannelID, channOsmosisGaia.Counterparty.ChannelID) - fmt.Printf("channGaiaOsmosis: %s - %s\n", channGaiaOsmosis.ChannelID, channGaiaOsmosis.Counterparty.ChannelID) - fmt.Println("-----------------------------------") - - // Start the relayer on both paths - err = r.StartRelayer(ctx, eRep, pathFeeabsGaia, pathFeeabsOsmosis, pathOsmosisGaia) + _, err = feeabsCli.AddHostZoneProposal(feeabs, ctx, feeabsUser.KeyName(), "./proposal/add_host_zone.json") require.NoError(t, err) - t.Cleanup( - func() { - err := r.StopRelayer(ctx, eRep) - if err != nil { - t.Logf("an error occurred while stopping the relayer: %s", err) - } - }, - ) - - // Get original account balances - feeabsUser, gaiaUser, osmosisUser := users[0], users[1], users[2] - _ = feeabsUser - _ = gaiaUser - _ = osmosisUser - - amountToSend := math.NewInt(1_000_000_000) - - t.Run("xcs", func(t *testing.T) { - // Send Gaia uatom to Osmosis - gaiaHeight, err := gaia.Height(ctx) - require.NoError(t, err) - dstAddress := sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()) - transfer := ibc.WalletAmount{ - Address: dstAddress, - Denom: gaia.Config().Denom, - Amount: amountToSend, - } - - tx, err := gaia.SendIBCTransfer(ctx, channGaiaOsmosis.ChannelID, gaiaUser.KeyName(), transfer, ibc.TransferOptions{}) - require.NoError(t, err) - require.NoError(t, tx.Validate()) - - _, err = testutil.PollForAck(ctx, gaia, gaiaHeight, gaiaHeight+30, tx.Packet) - require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, 1, feeabs, gaia, osmosis) - require.NoError(t, err) - - // Send Feeabs stake to Osmosis - feeabsHeight, err := feeabs.Height(ctx) - require.NoError(t, err) - dstAddress = sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()) - transfer = ibc.WalletAmount{ - Address: dstAddress, - Denom: feeabs.Config().Denom, - Amount: amountToSend, - } - - tx, err = feeabs.SendIBCTransfer(ctx, channFeeabsOsmosis.ChannelID, feeabsUser.KeyName(), transfer, ibc.TransferOptions{}) - require.NoError(t, err) - require.NoError(t, tx.Validate()) - - _, err = testutil.PollForAck(ctx, feeabs, feeabsHeight, feeabsHeight+30, tx.Packet) - require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, 1, feeabs, gaia, osmosis) - require.NoError(t, err) - - // Send Gaia uatom to Feeabs - gaiaHeight, err = gaia.Height(ctx) - require.NoError(t, err) - dstAddress = sdktypes.MustBech32ifyAddressBytes(feeabs.Config().Bech32Prefix, feeabsUser.Address()) - transfer = ibc.WalletAmount{ - Address: dstAddress, - Denom: gaia.Config().Denom, - Amount: amountToSend, - } - - tx, err = gaia.SendIBCTransfer(ctx, channGaiaFeeabs.ChannelID, gaiaUser.KeyName(), transfer, ibc.TransferOptions{}) - require.NoError(t, err) - require.NoError(t, tx.Validate()) - - _, err = testutil.PollForAck(ctx, gaia, gaiaHeight, gaiaHeight+30, tx.Packet) - require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, 1, feeabs, gaia, osmosis) - require.NoError(t, err) - // Setup contract on Osmosis - // Store code crosschain Registry - crossChainRegistryContractID, err := osmosis.StoreContract(ctx, osmosisUser.KeyName(), "./bytecode/crosschain_registry.wasm") - require.NoError(t, err) - _ = crossChainRegistryContractID - // // Instatiate - owner := sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()) - initMsg := fmt.Sprintf("{\"owner\":\"%s\"}", owner) - registryContractAddress, err := osmosis.InstantiateContract(ctx, osmosisUser.KeyName(), crossChainRegistryContractID, initMsg, true) - require.NoError(t, err) - // Execute - msg := fmt.Sprintf("{\"modify_chain_channel_links\": {\"operations\": [{\"operation\": \"set\",\"source_chain\": \"feeabs\",\"destination_chain\": \"osmosis\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"osmosis\",\"destination_chain\": \"feeabs\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"feeabs\",\"destination_chain\": \"gaia\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"gaia\",\"destination_chain\": \"feeabs\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"osmosis\",\"destination_chain\": \"gaia\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"gaia\",\"destination_chain\": \"osmosis\",\"channel_id\": \"%s\"}]}}", - channFeeabsOsmosis.ChannelID, - channOsmosisFeeabs.ChannelID, - channFeeabsGaia.ChannelID, - channGaiaFeeabs.ChannelID, - channOsmosisGaia.ChannelID, - channGaiaOsmosis.ChannelID) - _, err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName(), registryContractAddress, msg) - require.NoError(t, err) - // Execute - msg = `{ - "modify_bech32_prefixes": - { - "operations": - [ - {"operation": "set", "chain_name": "feeabs", "prefix": "feeabs"}, - {"operation": "set", "chain_name": "osmosis", "prefix": "osmo"}, - {"operation": "set", "chain_name": "gaia", "prefix": "cosmos"} - ] - } - }` - _, err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName(), registryContractAddress, msg) - require.NoError(t, err) - - // Create pool Osmosis(uatom)/Osmosis(stake) on Osmosis - denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(channOsmosisGaia.PortID, channOsmosisGaia.ChannelID, gaia.Config().Denom)) - uatomOnOsmosis := denomTrace.IBCDenom() - osmosisUserBalance, err := osmosis.GetBalance(ctx, sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()), uatomOnOsmosis) - require.NoError(t, err) - require.Equal(t, amountToSend, osmosisUserBalance) - - denomTrace = transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(channOsmosisFeeabs.PortID, channOsmosisFeeabs.ChannelID, feeabs.Config().Denom)) - stakeOnOsmosis := denomTrace.IBCDenom() - osmosisUserBalance, err = osmosis.GetBalance(ctx, sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()), stakeOnOsmosis) - require.NoError(t, err) - require.Equal(t, amountToSend, osmosisUserBalance) - - poolID, err := cosmos.OsmosisCreatePool(osmosis, ctx, osmosisUser.KeyName(), cosmos.OsmosisPoolParams{ - Weights: fmt.Sprintf("5%s,5%s", stakeOnOsmosis, uatomOnOsmosis), - InitialDeposit: fmt.Sprintf("95000000%s,950000000%s", stakeOnOsmosis, uatomOnOsmosis), - SwapFee: "0.01", - ExitFee: "0", - FutureGovernor: "", - }) - require.NoError(t, err) - require.Equal(t, poolID, "1") - - // Setup propose_pfm - // propose_pfm for feeabs - _, err = cosmos.OsmosisSetupProposePFM(osmosis, ctx, osmosisUser.KeyName(), registryContractAddress, `{"propose_pfm":{"chain": "feeabs"}}`, stakeOnOsmosis) - require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, 15, feeabs, gaia, osmosis) - require.NoError(t, err) - queryMsg := QuerySmartMsg{ - Packet: HasPacketForwarding{ - ChainID: "feeabs", - }, - } - res := QuerySmartMsgResponse{} - osmosis.QueryContract(ctx, registryContractAddress, queryMsg, res) - // propose_pfm for gaia - _, err = cosmos.OsmosisSetupProposePFM(osmosis, ctx, osmosisUser.KeyName(), registryContractAddress, `{"propose_pfm":{"chain": "gaia"}}`, uatomOnOsmosis) - require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, 15, feeabs, gaia, osmosis) - require.NoError(t, err) - queryMsg = QuerySmartMsg{ - Packet: HasPacketForwarding{ - ChainID: "gaia", - }, - } - res = QuerySmartMsgResponse{} - osmosis.QueryContract(ctx, registryContractAddress, queryMsg, res) - // store swaprouter - swapRouterContractID, err := osmosis.StoreContract(ctx, osmosisUser.KeyName(), "./bytecode/swaprouter.wasm") - require.NoError(t, err) - // instantiate - swapRouterContractAddress, err := osmosis.InstantiateContract(ctx, osmosisUser.KeyName(), swapRouterContractID, initMsg, true) - require.NoError(t, err) + err = feeabs.VoteOnProposalAllValidators(ctx, "2", cosmos.ProposalVoteYes) + require.NoError(t, err, "failed to submit votes") - // execute - msg = fmt.Sprintf("{\"set_route\":{\"input_denom\":\"%s\",\"output_denom\":\"%s\",\"pool_route\":[{\"pool_id\":\"%s\",\"token_out_denom\":\"%s\"}]}}", - uatomOnOsmosis, - stakeOnOsmosis, - poolID, - stakeOnOsmosis, - ) - _, err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName(), swapRouterContractAddress, msg) - require.NoError(t, err) + height, _ = feeabs.Height(ctx) + _, err = cosmos.PollForProposalStatus(ctx, feeabs, height, height+10, "2", cosmos.ProposalStatusPassed) + require.NoError(t, err, "proposal status did not change to passed in expected number of blocks") - // store xcs - xcsContractID, err := osmosis.StoreContract(ctx, osmosisUser.KeyName(), "./bytecode/crosschain_swaps.wasm") - require.NoError(t, err) - // instantiate - initMsg = fmt.Sprintf("{\"swap_contract\":\"%s\",\"governor\": \"%s\"}", swapRouterContractAddress, owner) - xcsContractAddress, err := osmosis.InstantiateContract(ctx, osmosisUser.KeyName(), xcsContractID, initMsg, true) - _ = xcsContractAddress - require.NoError(t, err) - // Swap Feeabs(uatom) to Osmosis - // send ibc token to feeabs module account - gaiaHeight, err = gaia.Height(ctx) - require.NoError(t, err) - feeabsModule, err := QueryFeeabsModuleAccountBalances(feeabs, ctx) - require.NoError(t, err) - dstAddress = feeabsModule.Address - transfer = ibc.WalletAmount{ - Address: dstAddress, - Denom: gaia.Config().Denom, - Amount: math.NewInt(1_000_000), - } - - tx, err = gaia.SendIBCTransfer(ctx, channGaiaFeeabs.ChannelID, gaiaUser.KeyName(), transfer, ibc.TransferOptions{}) - require.NoError(t, err) - require.NoError(t, tx.Validate()) - - _, err = testutil.PollForAck(ctx, gaia, gaiaHeight, gaiaHeight+30, tx.Packet) - require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, 1, feeabs, gaia, osmosis) - require.NoError(t, err) - - denomTrace = transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(channFeeabsGaia.PortID, channFeeabsGaia.ChannelID, gaia.Config().Denom)) - uatomOnFeeabs := denomTrace.IBCDenom() - - current_directory, _ := os.Getwd() - param_change_path := path.Join(current_directory, "proposal", "proposal.json") - - changeParamProposal, err := paramsutils.ParseParamChangeProposalJSON(feeabs.Config().EncodingConfig.Amino, param_change_path) - require.NoError(t, err) - - paramTx, err := feeabs.ParamChangeProposal(ctx, feeabsUser.KeyName(), &changeParamProposal) - require.NoError(t, err, "error submitting param change proposal tx") - - err = feeabs.VoteOnProposalAllValidators(ctx, paramTx.ProposalID, cosmos.ProposalVoteYes) - require.NoError(t, err, "failed to submit votes") - - height, _ := feeabs.Height(ctx) - _, err = cosmos.PollForProposalStatus(ctx, feeabs, height, height+10, paramTx.ProposalID, cosmos.ProposalStatusPassed) - require.NoError(t, err, "proposal status did not change to passed in expected number of blocks") - - _, err = cosmos.FeeabsAddHostZoneProposal(feeabs, ctx, feeabsUser.KeyName(), "./proposal/add_host_zone.json") - require.NoError(t, err) - - err = feeabs.VoteOnProposalAllValidators(ctx, "2", cosmos.ProposalVoteYes) - require.NoError(t, err, "failed to submit votes") - - height, _ = feeabs.Height(ctx) - _, err = cosmos.PollForProposalStatus(ctx, feeabs, height, height+10, "2", cosmos.ProposalStatusPassed) - require.NoError(t, err, "proposal status did not change to passed in expected number of blocks") - - _, err = QueryFeeabsHostZoneConfig(feeabs, ctx) - require.NoError(t, err) - // xcs - feeabsHeight, err = feeabs.Height(ctx) - require.NoError(t, err) - - feeabsModule, err = QueryFeeabsModuleAccountBalances(feeabs, ctx) - require.NoError(t, err) - fmt.Printf("Module Account Balances before swap: %v\n", feeabsModule.Balances) - - transferTx, err := cosmos.FeeabsCrossChainSwap(feeabs, ctx, feeabsUser.KeyName(), uatomOnFeeabs) - require.NoError(t, err) - _, err = testutil.PollForAck(ctx, feeabs, feeabsHeight, feeabsHeight+25, transferTx.Packet) - require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, 50, feeabs, gaia, osmosis) - require.NoError(t, err) - - feeabsModule, err = QueryFeeabsModuleAccountBalances(feeabs, ctx) - require.NoError(t, err) - fmt.Printf("Module Account Balances after swap: %v\n", feeabsModule.Balances) - - balance, err := feeabs.GetBalance(ctx, feeabsModule.Address, feeabs.Config().Denom) - require.NoError(t, err) - require.True(t, balance.GT(math.NewInt(1))) - }) -} - -func QueryFeeabsHostZoneConfig(c *cosmos.CosmosChain, ctx context.Context) (*QueryHostChainConfigResponse, error) { - cmd := []string{"feeabs", "all-host-chain-config"} - stdout, _, err := c.ExecQuery(ctx, cmd) - if err != nil { - return &QueryHostChainConfigResponse{}, err - } - - var hostZoneConfig QueryHostChainConfigResponse - err = json.Unmarshal(stdout, &hostZoneConfig) - if err != nil { - return &QueryHostChainConfigResponse{}, err - } + _, err = feeabsCli.QueryHostZoneConfig(feeabs, ctx) + require.NoError(t, err) + // xcs + feeabsHeight, err := feeabs.Height(ctx) + require.NoError(t, err) - return &hostZoneConfig, nil -} + feeabsModule, err = feeabsCli.QueryModuleAccountBalances(feeabs, ctx) + require.NoError(t, err) + fmt.Printf("Module Account Balances before swap: %v\n", feeabsModule.Balances) -func QueryFeeabsModuleAccountBalances(c *cosmos.CosmosChain, ctx context.Context) (*QueryFeeabsModuleBalacesResponse, error) { - cmd := []string{"feeabs", "module-balances"} - stdout, _, err := c.ExecQuery(ctx, cmd) - if err != nil { - return &QueryFeeabsModuleBalacesResponse{}, err - } + transferTx, err := feeabsCli.CrossChainSwap(feeabs, ctx, feeabsUser.KeyName(), uatomOnFeeabs) + require.NoError(t, err) + _, err = testutil.PollForAck(ctx, feeabs, feeabsHeight, feeabsHeight+25, transferTx.Packet) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, 50, feeabs, gaia, osmosis) + require.NoError(t, err) - var feeabsModule QueryFeeabsModuleBalacesResponse - err = json.Unmarshal(stdout, &feeabsModule) - if err != nil { - return &QueryFeeabsModuleBalacesResponse{}, err - } + feeabsModule, err = feeabsCli.QueryModuleAccountBalances(feeabs, ctx) + require.NoError(t, err) + fmt.Printf("Module Account Balances after swap: %v\n", feeabsModule.Balances) - return &feeabsModule, nil + balance, err := feeabs.GetBalance(ctx, feeabsModule.Address, feeabs.Config().Denom) + require.NoError(t, err) + require.True(t, balance.GT(math.NewInt(1))) } diff --git a/tests/interchaintest/setup.go b/tests/interchaintest/setup.go index a8bc4ff2..a0c6a88c 100644 --- a/tests/interchaintest/setup.go +++ b/tests/interchaintest/setup.go @@ -1,15 +1,14 @@ package interchaintest import ( + "cosmossdk.io/math" "encoding/json" "fmt" "os" "strings" - "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/icza/dyno" - "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos/wasm" feeabstype "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" @@ -18,15 +17,6 @@ import ( "github.com/strangelove-ventures/interchaintest/v7/ibc" ) -type QueryFeeabsModuleBalacesResponse struct { - Balances types.Coins - Address string -} - -type QueryHostChainConfigResponse struct { - HostChainConfig cosmos.HostChainFeeAbsConfig `protobuf:"bytes,1,opt,name=host_chain_config,json=hostChainConfig,proto3" json:"host_chain_config" yaml:"host_chain_config"` -} - type HasPacketForwarding struct { ChainID string `json:"chain"` } @@ -78,6 +68,7 @@ var ( pathFeeabsOsmosis = "feeabs-osmosis" pathOsmosisGaia = "osmosis-gaia" genesisWalletAmount = int64(10_000_000) + amountToSend = math.NewInt(1_000_000_000) ) // feeabsEncoding registers the feeabs specific module codecs so that the associated types and msgs From aaab69ddd3464aa6fc2366ac04888ca46f5e0d74 Mon Sep 17 00:00:00 2001 From: Tien Nguyen Date: Wed, 24 Jan 2024 12:06:00 +0700 Subject: [PATCH 76/90] Handle error on interchaintest. (#135) * Handle error on interchaintest. * Fix query not found host zone config. * Refactor import by goimports. --- tests/interchaintest/chain_start_test.go | 3 ++- tests/interchaintest/feeabs/events.go | 1 + tests/interchaintest/feeabs/osmosis.go | 3 ++- tests/interchaintest/feeabs/proposal.go | 9 ++++---- tests/interchaintest/feeabs/query.go | 1 + tests/interchaintest/feeabs/types.go | 6 +++-- .../interchaintest/host_zone_proposal_test.go | 23 ++++++++++--------- tests/interchaintest/ibc_transfer_test.go | 1 - tests/interchaintest/packet_foward_test.go | 17 +++++++++----- tests/interchaintest/setup.go | 7 ++---- x/feeabs/keeper/grpc_query.go | 2 +- 11 files changed, 41 insertions(+), 32 deletions(-) diff --git a/tests/interchaintest/chain_start_test.go b/tests/interchaintest/chain_start_test.go index 634d4f45..2c970a9b 100644 --- a/tests/interchaintest/chain_start_test.go +++ b/tests/interchaintest/chain_start_test.go @@ -3,10 +3,11 @@ package interchaintest import ( "context" "fmt" + "testing" + sdktypes "github.com/cosmos/cosmos-sdk/types" "github.com/strangelove-ventures/interchaintest/v7/ibc" "github.com/strangelove-ventures/interchaintest/v7/testutil" - "testing" "github.com/strangelove-ventures/interchaintest/v7" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" diff --git a/tests/interchaintest/feeabs/events.go b/tests/interchaintest/feeabs/events.go index 4686a440..2ab41bba 100644 --- a/tests/interchaintest/feeabs/events.go +++ b/tests/interchaintest/feeabs/events.go @@ -2,6 +2,7 @@ package feeabs import ( "encoding/base64" + abcitypes "github.com/cometbft/cometbft/abci/types" ) diff --git a/tests/interchaintest/feeabs/osmosis.go b/tests/interchaintest/feeabs/osmosis.go index acf85c9c..26d0be18 100644 --- a/tests/interchaintest/feeabs/osmosis.go +++ b/tests/interchaintest/feeabs/osmosis.go @@ -4,9 +4,10 @@ import ( "context" "encoding/json" "fmt" - "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "path/filepath" "strconv" + + "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" ) func CreatePool(c *cosmos.CosmosChain, ctx context.Context, keyName string, params cosmos.OsmosisPoolParams) (string, error) { diff --git a/tests/interchaintest/feeabs/proposal.go b/tests/interchaintest/feeabs/proposal.go index 51e885df..86ba9989 100644 --- a/tests/interchaintest/feeabs/proposal.go +++ b/tests/interchaintest/feeabs/proposal.go @@ -5,6 +5,11 @@ import ( "crypto/sha256" "encoding/json" "fmt" + "os" + "path/filepath" + "strconv" + "time" + "github.com/avast/retry-go/v4" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/types" @@ -13,10 +18,6 @@ import ( "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v7/ibc" "github.com/strangelove-ventures/interchaintest/v7/testutil" - "os" - "path/filepath" - "strconv" - "time" ) func getFullNode(c *cosmos.CosmosChain) *cosmos.ChainNode { diff --git a/tests/interchaintest/feeabs/query.go b/tests/interchaintest/feeabs/query.go index 5137159d..b48e4730 100644 --- a/tests/interchaintest/feeabs/query.go +++ b/tests/interchaintest/feeabs/query.go @@ -3,6 +3,7 @@ package feeabs import ( "context" "encoding/json" + "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" ) diff --git a/tests/interchaintest/feeabs/types.go b/tests/interchaintest/feeabs/types.go index 87d5b040..a21328ae 100644 --- a/tests/interchaintest/feeabs/types.go +++ b/tests/interchaintest/feeabs/types.go @@ -1,6 +1,8 @@ package feeabs -import "github.com/cosmos/cosmos-sdk/types" +import ( + sdk "github.com/cosmos/cosmos-sdk/types" +) type HostChainFeeAbsConfigResponse struct { HostChainConfig HostChainFeeAbsConfig `json:"host_chain_config"` @@ -21,6 +23,6 @@ type AddHostZoneProposalType struct { } type QueryFeeabsModuleBalacesResponse struct { - Balances types.Coins + Balances sdk.Coins Address string } diff --git a/tests/interchaintest/host_zone_proposal_test.go b/tests/interchaintest/host_zone_proposal_test.go index d751ba48..ba9853da 100644 --- a/tests/interchaintest/host_zone_proposal_test.go +++ b/tests/interchaintest/host_zone_proposal_test.go @@ -3,9 +3,9 @@ package interchaintest import ( "context" "fmt" - feeabsCli "github.com/notional-labs/fee-abstraction/tests/interchaintest/feeabs" "testing" + feeabsCli "github.com/notional-labs/fee-abstraction/tests/interchaintest/feeabs" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/stretchr/testify/require" ) @@ -28,7 +28,9 @@ func TestHostZoneProposal(t *testing.T) { err = feeabs.VoteOnProposalAllValidators(ctx, "1", cosmos.ProposalVoteYes) require.NoError(t, err, "failed to submit votes") - height, _ := feeabs.Height(ctx) + height, err := feeabs.Height(ctx) + require.NoError(t, err) + _, err = cosmos.PollForProposalStatus(ctx, feeabs, height, height+10, "1", cosmos.ProposalStatusPassed) require.NoError(t, err, "proposal status did not change to passed in expected number of blocks") @@ -48,7 +50,9 @@ func TestHostZoneProposal(t *testing.T) { err = feeabs.VoteOnProposalAllValidators(ctx, "2", cosmos.ProposalVoteYes) require.NoError(t, err, "failed to submit votes") - height, _ = feeabs.Height(ctx) + height, err = feeabs.Height(ctx) + require.NoError(t, err) + _, err = cosmos.PollForProposalStatus(ctx, feeabs, height, height+10, "2", cosmos.ProposalStatusPassed) require.NoError(t, err, "proposal status did not change to passed in expected number of blocks") @@ -68,16 +72,13 @@ func TestHostZoneProposal(t *testing.T) { err = feeabs.VoteOnProposalAllValidators(ctx, "3", cosmos.ProposalVoteYes) require.NoError(t, err, "failed to submit votes") - height, _ = feeabs.Height(ctx) + height, err = feeabs.Height(ctx) + require.NoError(t, err) + response, err := cosmos.PollForProposalStatus(ctx, feeabs, height, height+10, "3", cosmos.ProposalStatusPassed) require.NoError(t, err, "proposal status did not change to passed in expected number of blocks") fmt.Printf("response: %s\n", response) - config, err = feeabsCli.QueryHostZoneConfigWithDenom(feeabs, ctx, "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9") - require.Equal(t, config, &feeabsCli.HostChainFeeAbsConfigResponse{HostChainConfig: feeabsCli.HostChainFeeAbsConfig{ - IbcDenom: "", - OsmosisPoolTokenDenomIn: "", - PoolId: "", - Frozen: false, - }}) + _, err = feeabsCli.QueryHostZoneConfigWithDenom(feeabs, ctx, "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9") + require.Error(t, err) // not found } diff --git a/tests/interchaintest/ibc_transfer_test.go b/tests/interchaintest/ibc_transfer_test.go index 8f2fe8c2..4307e95c 100644 --- a/tests/interchaintest/ibc_transfer_test.go +++ b/tests/interchaintest/ibc_transfer_test.go @@ -7,7 +7,6 @@ import ( "cosmossdk.io/math" sdktypes "github.com/cosmos/cosmos-sdk/types" - transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" "github.com/strangelove-ventures/interchaintest/v7" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" diff --git a/tests/interchaintest/packet_foward_test.go b/tests/interchaintest/packet_foward_test.go index 22751613..f15dfee1 100644 --- a/tests/interchaintest/packet_foward_test.go +++ b/tests/interchaintest/packet_foward_test.go @@ -2,16 +2,16 @@ package interchaintest import ( "context" - "cosmossdk.io/math" "fmt" - sdktypes "github.com/cosmos/cosmos-sdk/types" - paramsutils "github.com/cosmos/cosmos-sdk/x/params/client/utils" - feeabsCli "github.com/notional-labs/fee-abstraction/tests/interchaintest/feeabs" "os" "path" "testing" + "cosmossdk.io/math" + sdktypes "github.com/cosmos/cosmos-sdk/types" + paramsutils "github.com/cosmos/cosmos-sdk/x/params/client/utils" transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + feeabsCli "github.com/notional-labs/fee-abstraction/tests/interchaintest/feeabs" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v7/ibc" "github.com/strangelove-ventures/interchaintest/v7/testutil" @@ -143,6 +143,7 @@ func TestPacketForwardMiddleware(t *testing.T) { // send ibc token to feeabs module account gaiaHeight, err := gaia.Height(ctx) require.NoError(t, err) + feeabsModule, err := feeabsCli.QueryModuleAccountBalances(feeabs, ctx) require.NoError(t, err) dstAddress := feeabsModule.Address @@ -176,7 +177,9 @@ func TestPacketForwardMiddleware(t *testing.T) { err = feeabs.VoteOnProposalAllValidators(ctx, paramTx.ProposalID, cosmos.ProposalVoteYes) require.NoError(t, err, "failed to submit votes") - height, _ := feeabs.Height(ctx) + height, err := feeabs.Height(ctx) + require.NoError(t, err) + _, err = cosmos.PollForProposalStatus(ctx, feeabs, height, height+10, paramTx.ProposalID, cosmos.ProposalStatusPassed) require.NoError(t, err, "proposal status did not change to passed in expected number of blocks") @@ -186,7 +189,9 @@ func TestPacketForwardMiddleware(t *testing.T) { err = feeabs.VoteOnProposalAllValidators(ctx, "2", cosmos.ProposalVoteYes) require.NoError(t, err, "failed to submit votes") - height, _ = feeabs.Height(ctx) + height, err = feeabs.Height(ctx) + require.NoError(t, err) + _, err = cosmos.PollForProposalStatus(ctx, feeabs, height, height+10, "2", cosmos.ProposalStatusPassed) require.NoError(t, err, "proposal status did not change to passed in expected number of blocks") diff --git a/tests/interchaintest/setup.go b/tests/interchaintest/setup.go index a0c6a88c..5c772c35 100644 --- a/tests/interchaintest/setup.go +++ b/tests/interchaintest/setup.go @@ -1,19 +1,16 @@ package interchaintest import ( - "cosmossdk.io/math" "encoding/json" "fmt" "os" "strings" + "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/icza/dyno" - "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos/wasm" - feeabstype "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" - - // "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos/wasm" + "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos/wasm" "github.com/strangelove-ventures/interchaintest/v7/ibc" ) diff --git a/x/feeabs/keeper/grpc_query.go b/x/feeabs/keeper/grpc_query.go index bfb39f78..47760517 100644 --- a/x/feeabs/keeper/grpc_query.go +++ b/x/feeabs/keeper/grpc_query.go @@ -23,7 +23,7 @@ func NewQuerier(k Keeper) Querier { return Querier{Keeper: k} } -// OsmosisSpotPrice return spot price of pair Osmo/nativeToken +// OsmosisArithmeticTwap return spot price of pair Osmo/nativeToken func (q Querier) OsmosisArithmeticTwap(goCtx context.Context, req *types.QueryOsmosisArithmeticTwapRequest) (*types.QueryOsmosisArithmeticTwapResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") From 61a8d053ddf6b1b39df2c52feaf265c86f8aa332 Mon Sep 17 00:00:00 2001 From: Tien Nguyen Date: Wed, 24 Jan 2024 13:41:47 +0700 Subject: [PATCH 77/90] Turn off go work when run go test (#137) --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 76219f22..c2e89ec3 100644 --- a/Makefile +++ b/Makefile @@ -94,7 +94,7 @@ build: go build $(BUILD_FLAGS) -o bin/feeappd ./cmd/feeappd test: - go test -race -v ./... + @GOWORK=off go test -race -v ./... docker-build-debug: @DOCKER_BUILDKIT=1 docker build -t feeapp:debug -f Dockerfile . From bc5ac95db7523cc45e3cb2127523bbdbd2876581 Mon Sep 17 00:00:00 2001 From: Tien Nguyen Date: Wed, 24 Jan 2024 13:42:31 +0700 Subject: [PATCH 78/90] Fix some replace go. (#138) --- go.mod | 14 ++------ go.sum | 66 +++++++++++-------------------------- tests/interchaintest/go.mod | 7 +--- tests/interchaintest/go.sum | 4 +-- 4 files changed, 24 insertions(+), 67 deletions(-) diff --git a/go.mod b/go.mod index ebaba149..f93ad609 100644 --- a/go.mod +++ b/go.mod @@ -301,15 +301,5 @@ require ( sigs.k8s.io/yaml v1.3.0 // indirect ) -replace ( - // use cosmos fork of keyring - github.com/99designs/keyring => github.com/cosmos/keyring v1.2.0 - // dgrijalva/jwt-go is deprecated and doesn't receive security updates. - // TODO: remove it: https://github.com/cosmos/cosmos-sdk/issues/13134 - github.com/dgrijalva/jwt-go => github.com/golang-jwt/jwt/v4 v4.4.2 - // Fix upstream GHSA-h395-qcrw-5vmq and GHSA-3vp4-m3rf-835h vulnerabilities. - // TODO Remove it: https://github.com/cosmos/cosmos-sdk/issues/10409 - github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.9.0 - // replace broken goleveldb - github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 -) +// replace broken goleveldb +replace github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 diff --git a/go.sum b/go.sum index d43f2b1c..44c65f65 100644 --- a/go.sum +++ b/go.sum @@ -207,6 +207,8 @@ filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= +github.com/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o= +github.com/99designs/keyring v1.2.1/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= github.com/Abirdcfly/dupword v0.0.7 h1:z14n0yytA3wNO2gpCD/jVtp/acEXPGmYu0esewpBt6Q= github.com/Abirdcfly/dupword v0.0.7/go.mod h1:K/4M1kj+Zh39d2aotRwypvasonOyAMH1c/IZJzE0dmk= github.com/Antonboom/errname v0.1.7 h1:mBBDKvEYwPl4WFFNwec1CZO096G6vzK9vvDQzAwkako= @@ -296,9 +298,6 @@ github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJ github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/butuzov/ireturn v0.1.1 h1:QvrO2QF2+/Cx1WA/vETCIYBKtRjc30vesdoPUNo1EbY= github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= -github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= -github.com/bytedance/sonic v1.8.0 h1:ea0Xadu+sHlu7x5O3gKhRpQ1IKiMrSiHttPF0ybECuA= -github.com/bytedance/sonic v1.8.0/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -317,9 +316,6 @@ github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6pr github.com/chavacava/garif v0.0.0-20220630083739-93517212f375 h1:E7LT642ysztPWE0dfz43cWOvMiF42DyTRC+eZIaO4yI= github.com/chavacava/garif v0.0.0-20220630083739-93517212f375/go.mod h1:4m1Rv7xfuwWPNKXlThldNuJvutYM6J95wNuuVmn55To= github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= -github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= -github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= -github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM= github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= @@ -384,8 +380,6 @@ github.com/cosmos/ibc-go/v7 v7.0.0 h1:j4kyywlG0hhDmT9FmSaR5iCIka7Pz7kJTxGWY1nlV9 github.com/cosmos/ibc-go/v7 v7.0.0/go.mod h1:BFh8nKWjr5zeR2OZfhkzdgDzj1+KjRn3aJLpwapStj8= github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab h1:I9ialKTQo7248V827Bba4OuKPmk+FPzmTVHsLXaIJWw= github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab/go.mod h1:2CwqasX5dSD7Hbp/9b6lhK6BwoBDCBldx7gPKRukR60= -github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= -github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= github.com/cosmos/ledger-cosmos-go v0.12.2 h1:/XYaBlE2BJxtvpkHiBm97gFGSGmYGKunKyF3nNqAXZA= github.com/cosmos/ledger-cosmos-go v0.12.2/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI= github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= @@ -421,6 +415,7 @@ github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= @@ -477,8 +472,8 @@ github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlya github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.9.0 h1:OjyFBKICoexlu99ctXNR2gg+c5pKrKMuyjgARg9qeY8= -github.com/gin-gonic/gin v1.9.0/go.mod h1:W1Me9+hsUSyj3CePGrd1/QrKJMSJ1Tu/0hFEH89961k= +github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= github.com/go-critic/go-critic v0.6.5 h1:fDaR/5GWURljXwF8Eh31T2GZNz9X4jeboS912mWF8Uo= github.com/go-critic/go-critic v0.6.5/go.mod h1:ezfP/Lh7MA6dBNn4c6ab5ALv3sKnZVLx37tr00uuaOY= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= @@ -497,13 +492,13 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= -github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= -github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= -github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.11.2 h1:q3SHpufmypg+erIExEKUmsgmhDTyhcJ38oeKGACXohU= -github.com/go-playground/validator/v10 v10.11.2/go.mod h1:NieE624vt4SCTJtD87arVLvdmjPAeV8BQlHtMnw9D7s= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= +github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= +github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-toolsmith/astcast v1.0.0 h1:JojxlmI6STnFVG9yOImLeGREv8W2ocNUM+iOhR6jE7g= @@ -534,8 +529,7 @@ github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA= -github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= @@ -551,7 +545,6 @@ github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zV github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= @@ -838,15 +831,11 @@ github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8 github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= -github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= @@ -862,8 +851,8 @@ github.com/ldez/gomoddirectives v0.2.3 h1:y7MBaisZVDYmKvt9/l1mjNCiSA1BVn34U0ObUc github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= github.com/ldez/tagliatelle v0.3.1 h1:3BqVVlReVUZwafJUwQ+oxbx2BEX2vUG4Yu/NOfMiKiM= github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= -github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= -github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= +github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leonklingele/grouper v1.1.0 h1:tC2y/ygPbMFSBOs3DcyaEMKnnwH7eYKzohOtRrf0SAg= github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= @@ -1015,7 +1004,6 @@ github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7 github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -1087,8 +1075,6 @@ github.com/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGn github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= @@ -1213,11 +1199,11 @@ github.com/tomarrell/wrapcheck/v2 v2.7.0/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0 github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw= github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= -github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= +github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ugorji/go/codec v1.2.9 h1:rmenucSohSTiyL09Y+l2OCk+FrMxGMzho2+tjr5ticU= -github.com/ugorji/go/codec v1.2.9/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= @@ -1280,8 +1266,6 @@ go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= -golang.org/x/arch v0.0.0-20210923205945-b76863e36670 h1:18EFjUmQOcUvxNYSkA6jO9VAiXCnxFY6NyDX0bHDmkU= -golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1296,7 +1280,6 @@ golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1407,8 +1390,6 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1557,15 +1538,11 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1577,10 +1554,7 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1927,7 +1901,6 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= @@ -1978,7 +1951,6 @@ nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0 pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= diff --git a/tests/interchaintest/go.mod b/tests/interchaintest/go.mod index e697e1a8..4e1e016c 100644 --- a/tests/interchaintest/go.mod +++ b/tests/interchaintest/go.mod @@ -238,16 +238,11 @@ require ( ) replace ( - github.com/99designs/keyring => github.com/cosmos/keyring v1.2.0 - github.com/ChainSafe/go-schnorrkel => github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d github.com/ChainSafe/go-schnorrkel/1 => github.com/ChainSafe/go-schnorrkel v1.0.0 - github.com/btcsuite/btcd => github.com/btcsuite/btcd v0.22.2 //indirect - - // interchaintest supports ICS features so we need this for now github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 + // For this nested module, you always want to replace the parent reference with the current worktree. github.com/osmosis-labs/fee-abstraction/v7 => ../../ - github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 ) diff --git a/tests/interchaintest/go.sum b/tests/interchaintest/go.sum index bc3a5eb6..648d89a6 100644 --- a/tests/interchaintest/go.sum +++ b/tests/interchaintest/go.sum @@ -206,6 +206,8 @@ filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= +github.com/99designs/keyring v1.2.2 h1:pZd3neh/EmUzWONb35LxQfvuY7kiSXAq3HQd97+XBn0= +github.com/99designs/keyring v1.2.2/go.mod h1:wes/FrByc8j7lFOAGLGSNEg8f/PaI3cgTBqhFkHUrPk= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= @@ -358,8 +360,6 @@ github.com/cosmos/ibc-go/v7 v7.2.0 h1:dx0DLUl7rxdyZ8NiT6UsrbzKOJx/w7s+BOaewFRH6c github.com/cosmos/ibc-go/v7 v7.2.0/go.mod h1:OOcjKIRku/j1Xs1RgKK0yvKRrJ5iFuZYMetR1n3yMlc= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= -github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= -github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= github.com/cosmos/ledger-cosmos-go v0.12.2 h1:/XYaBlE2BJxtvpkHiBm97gFGSGmYGKunKyF3nNqAXZA= github.com/cosmos/ledger-cosmos-go v0.12.2/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI= github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= From 48c01fc8d51319caffb5aebe869b66f1a21f2803 Mon Sep 17 00:00:00 2001 From: Tien Nguyen Date: Wed, 24 Jan 2024 14:00:06 +0700 Subject: [PATCH 79/90] Using rand.New() instead of rand.Seed because it is deprecated. (#136) Co-authored-by: Duong Minh Ngoc <153509244+minhngoc274@users.noreply.github.com> --- x/feeabs/keeper/grpc_query_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/x/feeabs/keeper/grpc_query_test.go b/x/feeabs/keeper/grpc_query_test.go index 4781ece1..7ec09f3c 100644 --- a/x/feeabs/keeper/grpc_query_test.go +++ b/x/feeabs/keeper/grpc_query_test.go @@ -110,15 +110,15 @@ func (s *KeeperTestSuite) TestHostChainConfig() { } func randStringRunes(n int) string { - rand.Seed(time.Now().UnixNano()) //nolint:staticcheck // this is for testing + r := rand.New(rand.NewSource(time.Now().UnixNano())) b := make([]rune, n) for i := range b { - b[i] = letterRunes[rand.Intn(len(letterRunes))] + b[i] = letterRunes[r.Intn(len(letterRunes))] } return string(b) } func randUint64Num() uint64 { - rand.Seed(time.Now().UnixNano()) //nolint:staticcheck // this is for testing - return rand.Uint64() + r := rand.New(rand.NewSource(time.Now().UnixNano())) + return r.Uint64() } From f4e167fb1008a28a6e76fb49af069255138f87c7 Mon Sep 17 00:00:00 2001 From: Tien Nguyen Date: Wed, 24 Jan 2024 14:14:21 +0700 Subject: [PATCH 80/90] Add query osmosis arithmetic twap for interchaintest. (#139) --- tests/interchaintest/feeabs/query.go | 27 +++++++++++++++++++++------ tests/interchaintest/feeabs/types.go | 16 ---------------- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/tests/interchaintest/feeabs/query.go b/tests/interchaintest/feeabs/query.go index b48e4730..b4f79500 100644 --- a/tests/interchaintest/feeabs/query.go +++ b/tests/interchaintest/feeabs/query.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" + feeabstypes "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" ) @@ -41,19 +42,33 @@ func QueryHostZoneConfig(c *cosmos.CosmosChain, ctx context.Context) (*HostChain return &hostZoneConfig, nil } -func QueryModuleAccountBalances(c *cosmos.CosmosChain, ctx context.Context) (*QueryFeeabsModuleBalacesResponse, error) { +func QueryModuleAccountBalances(c *cosmos.CosmosChain, ctx context.Context) (*feeabstypes.QueryFeeabsModuleBalacesResponse, error) { tn := getFullNode(c) cmd := []string{"feeabs", "module-balances"} stdout, _, err := tn.ExecQuery(ctx, cmd...) if err != nil { - return &QueryFeeabsModuleBalacesResponse{}, err + return &feeabstypes.QueryFeeabsModuleBalacesResponse{}, err } - var feeabsModule QueryFeeabsModuleBalacesResponse - err = json.Unmarshal(stdout, &feeabsModule) + var response feeabstypes.QueryFeeabsModuleBalacesResponse + if err = json.Unmarshal(stdout, &response); err != nil { + return &feeabstypes.QueryFeeabsModuleBalacesResponse{}, err + } + + return &response, nil +} + +func QueryOsmosisArithmeticTwap(c *cosmos.CosmosChain, ctx context.Context, ibcDenom string) (*feeabstypes.QueryOsmosisArithmeticTwapResponse, error) { + node := getFullNode(c) + cmd := []string{"feeabs", "osmo-arithmetic-twap", ibcDenom} + stdout, _, err := node.ExecQuery(ctx, cmd...) if err != nil { - return &QueryFeeabsModuleBalacesResponse{}, err + return &feeabstypes.QueryOsmosisArithmeticTwapResponse{}, err } - return &feeabsModule, nil + var response feeabstypes.QueryOsmosisArithmeticTwapResponse + if err = json.Unmarshal(stdout, &response); err != nil { + return &feeabstypes.QueryOsmosisArithmeticTwapResponse{}, err + } + return &response, nil } diff --git a/tests/interchaintest/feeabs/types.go b/tests/interchaintest/feeabs/types.go index a21328ae..c7c255fa 100644 --- a/tests/interchaintest/feeabs/types.go +++ b/tests/interchaintest/feeabs/types.go @@ -1,9 +1,5 @@ package feeabs -import ( - sdk "github.com/cosmos/cosmos-sdk/types" -) - type HostChainFeeAbsConfigResponse struct { HostChainConfig HostChainFeeAbsConfig `json:"host_chain_config"` } @@ -14,15 +10,3 @@ type HostChainFeeAbsConfig struct { PoolId string `json:"pool_id"` Frozen bool `json:"frozen"` } - -type AddHostZoneProposalType struct { - Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - HostChainConfig HostChainFeeAbsConfig `protobuf:"bytes,3,opt,name=host_chain_config,json=hostChainConfig,proto3" json:"host_chain_config,omitempty"` - Deposit string `json:"deposit"` -} - -type QueryFeeabsModuleBalacesResponse struct { - Balances sdk.Coins - Address string -} From 49f968cb82370aef0580c85c027cce309eaf48b6 Mon Sep 17 00:00:00 2001 From: Tien Nguyen Date: Wed, 24 Jan 2024 17:27:33 +0700 Subject: [PATCH 81/90] Remove unused code and some refactor. (#140) * Remove unused code. * Refactor code in app and cmd * Correct proto name and doc. --- app/params/params.go | 7 - app/params/weights.go | 23 - app/sim_test.go | 2 - cmd/feeappd/cmd/root.go | 2 +- cmd/feeappd/cmd/testnet.go | 5 +- .../absfee/v1beta1/feepool.proto | 9 - .../{absfee => feeabs}/v1beta1/epoch.proto | 2 +- .../{absfee => feeabs}/v1beta1/genesis.proto | 8 +- .../v1beta1/osmosisibc.proto | 2 +- .../{absfee => feeabs}/v1beta1/params.proto | 2 +- .../{absfee => feeabs}/v1beta1/proposal.proto | 2 +- .../{absfee => feeabs}/v1beta1/query.proto | 14 +- .../{absfee => feeabs}/v1beta1/tx.proto | 10 +- scripts/protocgen.sh | 2 +- x/feeabs/ibctesting/README.md | 3 - x/feeabs/ibctesting/chain.go | 595 ------------------ x/feeabs/ibctesting/coordinator.go | 337 ---------- x/feeabs/ibctesting/endpoint.go | 375 ----------- x/feeabs/ibctesting/event_utils.go | 92 --- x/feeabs/ibctesting/path.go | 38 -- x/feeabs/types/epoch.pb.go | 70 +-- x/feeabs/types/feepool.pb.go | 46 -- x/feeabs/types/genesis.pb.go | 58 +- x/feeabs/types/osmosisibc.pb.go | 112 ++-- x/feeabs/types/params.pb.go | 63 +- x/feeabs/types/proposal.pb.go | 84 +-- x/feeabs/types/query.pb.go | 157 +++-- x/feeabs/types/query.pb.gw.go | 2 +- x/feeabs/types/tx.pb.go | 121 ++-- 29 files changed, 354 insertions(+), 1889 deletions(-) delete mode 100644 app/params/params.go delete mode 100644 app/params/weights.go delete mode 100644 proto/feeabstraction/absfee/v1beta1/feepool.proto rename proto/feeabstraction/{absfee => feeabs}/v1beta1/epoch.proto (98%) rename proto/feeabstraction/{absfee => feeabs}/v1beta1/genesis.proto (68%) rename proto/feeabstraction/{absfee => feeabs}/v1beta1/osmosisibc.proto (97%) rename proto/feeabstraction/{absfee => feeabs}/v1beta1/params.proto (95%) rename proto/feeabstraction/{absfee => feeabs}/v1beta1/proposal.proto (97%) rename proto/feeabstraction/{absfee => feeabs}/v1beta1/query.proto (86%) rename proto/feeabstraction/{absfee => feeabs}/v1beta1/tx.proto (76%) delete mode 100644 x/feeabs/ibctesting/README.md delete mode 100644 x/feeabs/ibctesting/chain.go delete mode 100644 x/feeabs/ibctesting/coordinator.go delete mode 100644 x/feeabs/ibctesting/endpoint.go delete mode 100644 x/feeabs/ibctesting/event_utils.go delete mode 100644 x/feeabs/ibctesting/path.go delete mode 100644 x/feeabs/types/feepool.pb.go diff --git a/app/params/params.go b/app/params/params.go deleted file mode 100644 index b6aa5fb5..00000000 --- a/app/params/params.go +++ /dev/null @@ -1,7 +0,0 @@ -package params - -// Simulation parameter constants -const ( - StakePerAccount = "stake_per_account" - InitiallyBondedValidators = "initially_bonded_validators" -) diff --git a/app/params/weights.go b/app/params/weights.go deleted file mode 100644 index 0ba377b0..00000000 --- a/app/params/weights.go +++ /dev/null @@ -1,23 +0,0 @@ -package params - -// Default simulation operation weights for messages and gov proposals -const ( - DefaultWeightMsgSend int = 100 - DefaultWeightMsgMultiSend int = 10 - DefaultWeightMsgSetWithdrawAddress int = 50 - DefaultWeightMsgWithdrawDelegationReward int = 50 - DefaultWeightMsgWithdrawValidatorCommission int = 50 - DefaultWeightMsgFundCommunityPool int = 50 - DefaultWeightMsgDeposit int = 100 - DefaultWeightMsgVote int = 67 - DefaultWeightMsgUnjail int = 100 - DefaultWeightMsgCreateValidator int = 100 - DefaultWeightMsgEditValidator int = 5 - DefaultWeightMsgDelegate int = 100 - DefaultWeightMsgUndelegate int = 100 - DefaultWeightMsgBeginRedelegate int = 100 - - DefaultWeightCommunitySpendProposal int = 5 - DefaultWeightTextProposal int = 5 - DefaultWeightParamChangeProposal int = 5 -) diff --git a/app/sim_test.go b/app/sim_test.go index 44f6524b..d15c98d3 100644 --- a/app/sim_test.go +++ b/app/sim_test.go @@ -27,8 +27,6 @@ func init() { simcli.GetSimulatorFlags() } -// Profile with: -// /usr/local/go/bin/go test -benchmem -run=^$ github.com/cosmos/cosmos-sdk/feeappApp -bench ^BenchmarkFullAppSimulation$ -Commit=true -cpuprofile cpu.out func BenchmarkFullAppSimulation(b *testing.B) { config := simcli.NewConfigFromFlags() diff --git a/cmd/feeappd/cmd/root.go b/cmd/feeappd/cmd/root.go index 16e1909b..423ace58 100644 --- a/cmd/feeappd/cmd/root.go +++ b/cmd/feeappd/cmd/root.go @@ -60,7 +60,7 @@ func NewRootCmd() (*cobra.Command, params.EncodingConfig) { rootCmd := &cobra.Command{ Use: "feeappd", - Short: "Stargate Cosmos Hub App", + Short: "Fee Abstraction App", PersistentPreRunE: func(cmd *cobra.Command, _ []string) error { initClientCtx, err := client.ReadPersistentCommandFlags(initClientCtx, cmd.Flags()) if err != nil { diff --git a/cmd/feeappd/cmd/testnet.go b/cmd/feeappd/cmd/testnet.go index c13dfe9f..95b65af5 100644 --- a/cmd/feeappd/cmd/testnet.go +++ b/cmd/feeappd/cmd/testnet.go @@ -46,6 +46,7 @@ var ( flagOutputDir = "output-dir" flagNodeDaemonHome = "node-daemon-home" flagStartingIPAddress = "starting-ip-address" + flagKeyAlgorithm = "key-algorithm" ) // get cmd to initialize all files for tendermint testnet and application @@ -77,7 +78,7 @@ Example: nodeDaemonHome, _ := cmd.Flags().GetString(flagNodeDaemonHome) startingIPAddress, _ := cmd.Flags().GetString(flagStartingIPAddress) numValidators, _ := cmd.Flags().GetInt(flagNumValidators) - algo, _ := cmd.Flags().GetString(flags.FlagKeyAlgorithm) + algo, _ := cmd.Flags().GetString(flagKeyAlgorithm) return InitTestnet( clientCtx, cmd, config, mbm, genBalIterator, outputDir, chainID, minGasPrices, @@ -94,7 +95,7 @@ Example: cmd.Flags().String(flags.FlagChainID, "", "genesis file chain-id, if left blank will be randomly created") cmd.Flags().String(server.FlagMinGasPrices, fmt.Sprintf("0.000006%s", sdk.DefaultBondDenom), "Minimum gas prices to accept for transactions; All fees in a tx must meet this minimum (e.g. 0.01photino,0.001stake)") cmd.Flags().String(flags.FlagKeyringBackend, flags.DefaultKeyringBackend, "Select keyring's backend (os|file|test)") - cmd.Flags().String(flags.FlagKeyAlgorithm, string(hd.Secp256k1Type), "Key signing algorithm to generate keys for") + cmd.Flags().String(flagKeyAlgorithm, string(hd.Secp256k1Type), "Key signing algorithm to generate keys for") return cmd } diff --git a/proto/feeabstraction/absfee/v1beta1/feepool.proto b/proto/feeabstraction/absfee/v1beta1/feepool.proto deleted file mode 100644 index 6bd3a634..00000000 --- a/proto/feeabstraction/absfee/v1beta1/feepool.proto +++ /dev/null @@ -1,9 +0,0 @@ -syntax = "proto3"; -package feeabstraction.absfee.v1beta1; - -import "gogoproto/gogo.proto"; -import "google/api/annotations.proto"; -import "cosmos/base/query/v1beta1/pagination.proto"; -import "feeabstraction/absfee/v1beta1/params.proto"; - -option go_package = "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types"; diff --git a/proto/feeabstraction/absfee/v1beta1/epoch.proto b/proto/feeabstraction/feeabs/v1beta1/epoch.proto similarity index 98% rename from proto/feeabstraction/absfee/v1beta1/epoch.proto rename to proto/feeabstraction/feeabs/v1beta1/epoch.proto index 42d78682..e3aea896 100644 --- a/proto/feeabstraction/absfee/v1beta1/epoch.proto +++ b/proto/feeabstraction/feeabs/v1beta1/epoch.proto @@ -1,5 +1,5 @@ syntax = "proto3"; -package feeabstraction.absfee.v1beta1; +package feeabstraction.feeabs.v1beta1; import "gogoproto/gogo.proto"; import "google/protobuf/duration.proto"; diff --git a/proto/feeabstraction/absfee/v1beta1/genesis.proto b/proto/feeabstraction/feeabs/v1beta1/genesis.proto similarity index 68% rename from proto/feeabstraction/absfee/v1beta1/genesis.proto rename to proto/feeabstraction/feeabs/v1beta1/genesis.proto index 252b220c..a31e4a00 100644 --- a/proto/feeabstraction/absfee/v1beta1/genesis.proto +++ b/proto/feeabstraction/feeabs/v1beta1/genesis.proto @@ -1,15 +1,15 @@ syntax = "proto3"; -package feeabstraction.absfee.v1beta1; +package feeabstraction.feeabs.v1beta1; import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; import "cosmos/base/query/v1beta1/pagination.proto"; -import "feeabstraction/absfee/v1beta1/params.proto"; -import "feeabstraction/absfee/v1beta1/epoch.proto"; +import "feeabstraction/feeabs/v1beta1/params.proto"; +import "feeabstraction/feeabs/v1beta1/epoch.proto"; option go_package = "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types"; -// Params defines the parameters for the feeabs module. +// GenesisState defines the feeabs module's genesis state. message GenesisState { Params params = 1 [ (gogoproto.moretags) = "yaml:\"params\"", diff --git a/proto/feeabstraction/absfee/v1beta1/osmosisibc.proto b/proto/feeabstraction/feeabs/v1beta1/osmosisibc.proto similarity index 97% rename from proto/feeabstraction/absfee/v1beta1/osmosisibc.proto rename to proto/feeabstraction/feeabs/v1beta1/osmosisibc.proto index d119bb5c..5b86eeec 100644 --- a/proto/feeabstraction/absfee/v1beta1/osmosisibc.proto +++ b/proto/feeabstraction/feeabs/v1beta1/osmosisibc.proto @@ -1,5 +1,5 @@ syntax = "proto3"; -package feeabstraction.absfee.v1beta1; +package feeabstraction.feeabs.v1beta1; import "gogoproto/gogo.proto"; import "google/protobuf/timestamp.proto"; diff --git a/proto/feeabstraction/absfee/v1beta1/params.proto b/proto/feeabstraction/feeabs/v1beta1/params.proto similarity index 95% rename from proto/feeabstraction/absfee/v1beta1/params.proto rename to proto/feeabstraction/feeabs/v1beta1/params.proto index 88b4b7f0..b6f03305 100644 --- a/proto/feeabstraction/absfee/v1beta1/params.proto +++ b/proto/feeabstraction/feeabs/v1beta1/params.proto @@ -1,5 +1,5 @@ syntax = "proto3"; -package feeabstraction.absfee.v1beta1; +package feeabstraction.feeabs.v1beta1; import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; diff --git a/proto/feeabstraction/absfee/v1beta1/proposal.proto b/proto/feeabstraction/feeabs/v1beta1/proposal.proto similarity index 97% rename from proto/feeabstraction/absfee/v1beta1/proposal.proto rename to proto/feeabstraction/feeabs/v1beta1/proposal.proto index b4226c57..390f3b42 100644 --- a/proto/feeabstraction/absfee/v1beta1/proposal.proto +++ b/proto/feeabstraction/feeabs/v1beta1/proposal.proto @@ -1,5 +1,5 @@ syntax = "proto3"; -package feeabstraction.absfee.v1beta1; +package feeabstraction.feeabs.v1beta1; import "gogoproto/gogo.proto"; import "google/protobuf/timestamp.proto"; diff --git a/proto/feeabstraction/absfee/v1beta1/query.proto b/proto/feeabstraction/feeabs/v1beta1/query.proto similarity index 86% rename from proto/feeabstraction/absfee/v1beta1/query.proto rename to proto/feeabstraction/feeabs/v1beta1/query.proto index 93bb68f4..b51fe011 100644 --- a/proto/feeabstraction/absfee/v1beta1/query.proto +++ b/proto/feeabstraction/feeabs/v1beta1/query.proto @@ -1,18 +1,18 @@ syntax = "proto3"; -package feeabstraction.absfee.v1beta1; +package feeabstraction.feeabs.v1beta1; import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; -import "feeabstraction/absfee/v1beta1/params.proto"; -import "feeabstraction/absfee/v1beta1/osmosisibc.proto"; -import "feeabstraction/absfee/v1beta1/proposal.proto"; +import "feeabstraction/feeabs/v1beta1/params.proto"; +import "feeabstraction/feeabs/v1beta1/osmosisibc.proto"; +import "feeabstraction/feeabs/v1beta1/proposal.proto"; import "cosmos/base/v1beta1/coin.proto"; option go_package = "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types"; // Query defines the gRPC querier service. service Query { - // OsmosisSpotPrice return spot price of pair Osmo/nativeToken + // OsmosisArithmeticTwap return spot price of pair Osmo/nativeToken rpc OsmosisArithmeticTwap(QueryOsmosisArithmeticTwapRequest) returns (QueryOsmosisArithmeticTwapResponse) { option (google.api.http).get = @@ -46,8 +46,8 @@ message QueryHostChainConfigResponse { ]; } -// QueryOsmosisSpotPriceRequest is the request type for the Query/Feeabs RPC -// method. +// QueryOsmosisArithmeticTwapRequest is the request type for the Query/Feeabs +// RPC method. message QueryOsmosisArithmeticTwapRequest { string ibc_denom = 1; } message QueryOsmosisArithmeticTwapResponse { diff --git a/proto/feeabstraction/absfee/v1beta1/tx.proto b/proto/feeabstraction/feeabs/v1beta1/tx.proto similarity index 76% rename from proto/feeabstraction/absfee/v1beta1/tx.proto rename to proto/feeabstraction/feeabs/v1beta1/tx.proto index bf415cc6..62795e61 100644 --- a/proto/feeabstraction/absfee/v1beta1/tx.proto +++ b/proto/feeabstraction/feeabs/v1beta1/tx.proto @@ -1,15 +1,14 @@ syntax = "proto3"; -package feeabstraction.absfee.v1beta1; +package feeabstraction.feeabs.v1beta1; import "gogoproto/gogo.proto"; -import "feeabstraction/absfee/v1beta1/params.proto"; -import "feeabstraction/absfee/v1beta1/epoch.proto"; +import "feeabstraction/feeabs/v1beta1/params.proto"; +import "feeabstraction/feeabs/v1beta1/epoch.proto"; import "cosmos/base/v1beta1/coin.proto"; import "google/protobuf/timestamp.proto"; option go_package = "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types"; -// Msg is the cosmos.group.v1 Msg service. service Msg { rpc SendQueryIbcDenomTWAP(MsgSendQueryIbcDenomTWAP) returns (MsgSendQueryIbcDenomTWAPResponse); @@ -18,7 +17,6 @@ service Msg { returns (MsgFundFeeAbsModuleAccountResponse); } -// Msg fund module account message MsgFundFeeAbsModuleAccount { string from_address = 1; repeated cosmos.base.v1beta1.Coin amount = 2 [ @@ -30,12 +28,10 @@ message MsgFundFeeAbsModuleAccount { message MsgFundFeeAbsModuleAccountResponse {} -// Params defines the parameters for the feeabs module. message MsgSendQueryIbcDenomTWAP { string from_address = 1; } message MsgSendQueryIbcDenomTWAPResponse {} -// Params defines the parameters for the feeabs module. message MsgSwapCrossChain { string from_address = 1; string ibc_denom = 2; diff --git a/scripts/protocgen.sh b/scripts/protocgen.sh index b744b289..1953f9f5 100644 --- a/scripts/protocgen.sh +++ b/scripts/protocgen.sh @@ -5,7 +5,7 @@ set -eo pipefail # get protoc executions echo "Generating gogo proto code" cd proto -proto_dirs=$(find ./feeabstraction/absfee/v1beta1/ -path -prune -o -name '*.proto' -print0 | xargs -0 -n1 dirname | sort | uniq) +proto_dirs=$(find ./feeabstraction/feeabs/v1beta1/ -path -prune -o -name '*.proto' -print0 | xargs -0 -n1 dirname | sort | uniq) for dir in $proto_dirs; do for file in $(find "${dir}" -maxdepth 1 -name '*.proto'); do if grep go_package $file &>/dev/null; then diff --git a/x/feeabs/ibctesting/README.md b/x/feeabs/ibctesting/README.md deleted file mode 100644 index 5d966d7c..00000000 --- a/x/feeabs/ibctesting/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# testing package for ibc - -Customized version of cosmos-sdk x/ibc/testing and CosmWasm wasmd x/wasm/ibctesting diff --git a/x/feeabs/ibctesting/chain.go b/x/feeabs/ibctesting/chain.go deleted file mode 100644 index a243ede0..00000000 --- a/x/feeabs/ibctesting/chain.go +++ /dev/null @@ -1,595 +0,0 @@ -package ibctesting - -import ( - "bytes" - "fmt" - "testing" - "time" - - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - commitmenttypes "github.com/cosmos/ibc-go/v7/modules/core/23-commitment/types" - host "github.com/cosmos/ibc-go/v7/modules/core/24-host" - ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" - ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" - "github.com/cosmos/ibc-go/v7/modules/core/types" - ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" - ibctesting "github.com/cosmos/ibc-go/v7/testing" - "github.com/cosmos/ibc-go/v7/testing/mock" - ibctestingtypes "github.com/cosmos/ibc-go/v7/testing/types" - "github.com/stretchr/testify/require" - - sdkerrors "cosmossdk.io/errors" - - "github.com/cosmos/cosmos-sdk/baseapp" - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" - cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" - sdk "github.com/cosmos/cosmos-sdk/types" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper" - capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" - teststaking "github.com/cosmos/cosmos-sdk/x/staking/testutil" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - - abci "github.com/cometbft/cometbft/abci/types" - "github.com/cometbft/cometbft/crypto/tmhash" - tmproto "github.com/cometbft/cometbft/proto/tendermint/types" - tmprotoversion "github.com/cometbft/cometbft/proto/tendermint/version" - tmtypes "github.com/cometbft/cometbft/types" - tmversion "github.com/cometbft/cometbft/version" - - feeabs "github.com/osmosis-labs/fee-abstraction/v7/app" -) - -// TestChain is a testing struct that wraps a simapp with the last TM Header, the current ABCI -// header and the validators of the TestChain. It also contains a field called ChainID. This -// is the clientID that *other* chains use to refer to this TestChain. The SenderAccount -// is used for delivering transactions through the application state. -// NOTE: the actual application uses an empty chain-id for ease of testing. -type TestChain struct { - t *testing.T - - Coordinator *Coordinator - App ibctesting.TestingApp - ChainID string - LastHeader *ibctm.Header // header for last block height committed - CurrentHeader tmproto.Header // header for current block height - QueryServer types.QueryServer - TxConfig client.TxConfig - Codec codec.BinaryCodec - - Vals *tmtypes.ValidatorSet - Signers []tmtypes.PrivValidator - - senderPrivKey cryptotypes.PrivKey - SenderAccount authtypes.AccountI - - PendingSendPackets []channeltypes.Packet - PendingAckPackets []PacketAck -} - -type PacketAck struct { - Packet channeltypes.Packet - Ack []byte -} - -// NewTestChain initializes a new TestChain instance with a single validator set using a -// generated private key. It also creates a sender account to be used for delivering transactions. -// -// The first block height is committed to state in order to allow for client creations on -// counterparty chains. The TestChain will return with a block height starting at 2. -// -// Time management is handled by the Coordinator in order to ensure synchrony between chains. -// Each update of any chain increments the block header time for all chains by 5 seconds. -func NewTestChain(t *testing.T, coord *Coordinator, chainID string) *TestChain { - t.Helper() - // generate validator private/public key - privVal := mock.NewPV() - pubKey, err := privVal.GetPubKey() - require.NoError(t, err) - - // create validator set with single validator - validator := tmtypes.NewValidator(pubKey, 1) - valSet := tmtypes.NewValidatorSet([]*tmtypes.Validator{validator}) - signers := []tmtypes.PrivValidator{privVal} - - // generate genesis account - senderPrivKey := secp256k1.GenPrivKey() - acc := authtypes.NewBaseAccount(senderPrivKey.PubKey().Address().Bytes(), senderPrivKey.PubKey(), 0, 0) - amount, ok := sdk.NewIntFromString("10000000000000000000") - require.True(t, ok) - - balance := banktypes.Balance{ - Address: acc.GetAddress().String(), - Coins: sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, amount)), - } - - app := NewTestingAppDecorator(t, feeabs.SetupWithGenesisValSet(t, valSet, []authtypes.GenesisAccount{acc}, chainID, balance)) - - // create current header and call begin block - header := tmproto.Header{ - ChainID: chainID, - Height: 1, - Time: coord.CurrentTime.UTC(), - } - - txConfig := app.GetTxConfig() - - // create an account to send transactions from - chain := &TestChain{ - t: t, - Coordinator: coord, - ChainID: chainID, - App: app, - CurrentHeader: header, - QueryServer: app.GetIBCKeeper(), - TxConfig: txConfig, - Codec: app.AppCodec(), - Vals: valSet, - Signers: signers, - senderPrivKey: senderPrivKey, - SenderAccount: acc, - } - - coord.CommitBlock(chain) - - return chain -} - -// GetContext returns the current context for the application. -func (chain *TestChain) GetContext() sdk.Context { - return chain.App.GetBaseApp().NewContext(false, chain.CurrentHeader) -} - -// QueryProof performs an abci query with the given key and returns the proto encoded merkle proof -// for the query and the height at which the proof will succeed on a tendermint verifier. -func (chain *TestChain) QueryProof(key []byte) ([]byte, clienttypes.Height) { - return chain.QueryProofAtHeight(key, chain.App.LastBlockHeight()) -} - -// QueryProof performs an abci query with the given key and returns the proto encoded merkle proof -// for the query and the height at which the proof will succeed on a tendermint verifier. -func (chain *TestChain) QueryProofAtHeight(key []byte, height int64) ([]byte, clienttypes.Height) { - res := chain.App.Query(abci.RequestQuery{ - Path: fmt.Sprintf("store/%s/key", ibcexported.StoreKey), - Height: height - 1, - Data: key, - Prove: true, - }) - - merkleProof, err := commitmenttypes.ConvertProofs(res.ProofOps) - require.NoError(chain.t, err) - - proof, err := chain.App.AppCodec().Marshal(&merkleProof) - require.NoError(chain.t, err) - - revision := clienttypes.ParseChainID(chain.ChainID) - - // proof height + 1 is returned as the proof created corresponds to the height the proof - // was created in the IAVL tree. Tendermint and subsequently the clients that rely on it - // have heights 1 above the IAVL tree. Thus we return proof height + 1 - return proof, clienttypes.NewHeight(revision, uint64(res.Height)+1) -} - -// QueryUpgradeProof performs an abci query with the given key and returns the proto encoded merkle proof -// for the query and the height at which the proof will succeed on a tendermint verifier. -func (chain *TestChain) QueryUpgradeProof(key []byte, height uint64) ([]byte, clienttypes.Height) { - res := chain.App.Query(abci.RequestQuery{ - Path: "store/upgrade/key", - Height: int64(height - 1), - Data: key, - Prove: true, - }) - - merkleProof, err := commitmenttypes.ConvertProofs(res.ProofOps) - require.NoError(chain.t, err) - - proof, err := chain.App.AppCodec().Marshal(&merkleProof) - require.NoError(chain.t, err) - - revision := clienttypes.ParseChainID(chain.ChainID) - - // proof height + 1 is returned as the proof created corresponds to the height the proof - // was created in the IAVL tree. Tendermint and subsequently the clients that rely on it - // have heights 1 above the IAVL tree. Thus we return proof height + 1 - return proof, clienttypes.NewHeight(revision, uint64(res.Height+1)) -} - -// QueryConsensusStateProof performs an abci query for a consensus state -// stored on the given clientID. The proof and consensusHeight are returned. -func (chain *TestChain) QueryConsensusStateProof(clientID string) ([]byte, clienttypes.Height) { - clientState := chain.GetClientState(clientID) - - consensusHeight := clientState.GetLatestHeight().(clienttypes.Height) - consensusKey := host.FullConsensusStateKey(clientID, consensusHeight) - proofConsensus, _ := chain.QueryProof(consensusKey) - - return proofConsensus, consensusHeight -} - -// NextBlock sets the last header to the current header and increments the current header to be -// at the next block height. It does not update the time as that is handled by the Coordinator. -// -// CONTRACT: this function must only be called after app.Commit() occurs -func (chain *TestChain) NextBlock() { - // set the last header to the current header - // use nil trusted fields - chain.LastHeader = chain.CurrentTMClientHeader() - - // increment the current header - chain.CurrentHeader = tmproto.Header{ - ChainID: chain.ChainID, - Height: chain.App.LastBlockHeight() + 1, - AppHash: chain.App.LastCommitID().Hash, - // NOTE: the time is increased by the coordinator to maintain time synchrony amongst - // chains. - Time: chain.CurrentHeader.Time, - ValidatorsHash: chain.Vals.Hash(), - NextValidatorsHash: chain.Vals.Hash(), - } - - chain.App.BeginBlock(abci.RequestBeginBlock{Header: chain.CurrentHeader}) -} - -// sendMsgs delivers a transaction through the application without returning the result. -func (chain *TestChain) sendMsgs(msgs ...sdk.Msg) error { - _, err := chain.SendMsgs(msgs...) - return err -} - -// SendMsgs delivers a transaction through the application. It updates the senders sequence -// number and updates the TestChain's headers. It returns the result and error if one -// occurred. -func (chain *TestChain) SendMsgs(msgs ...sdk.Msg) (*sdk.Result, error) { - // ensure the chain has the latest time - chain.Coordinator.UpdateTimeForChain(chain) - - _, r, err := feeabs.SignAndDeliver( - chain.t, - chain.TxConfig, - chain.App.GetBaseApp(), - chain.GetContext().BlockHeader(), - msgs, - chain.ChainID, - []uint64{chain.SenderAccount.GetAccountNumber()}, - []uint64{chain.SenderAccount.GetSequence()}, - true, true, chain.senderPrivKey, - ) - if err != nil { - return nil, err - } - - // SignAndDeliver calls app.Commit() - chain.NextBlock() - - // increment sequence for successful transaction execution - err = chain.SenderAccount.SetSequence(chain.SenderAccount.GetSequence() + 1) - if err != nil { - return nil, err - } - - chain.Coordinator.IncrementTime() - - chain.captureIBCEvents(r) - - return r, nil -} - -func (chain *TestChain) captureIBCEvents(r *sdk.Result) { - toSend := getSendPackets(r.Events) - if len(toSend) > 0 { - // Keep a queue on the chain that we can relay in tests - chain.PendingSendPackets = append(chain.PendingSendPackets, toSend...) - } - toAck := getAckPackets(r.Events) - if len(toAck) > 0 { - // Keep a queue on the chain that we can relay in tests - chain.PendingAckPackets = append(chain.PendingAckPackets, toAck...) - } -} - -// GetClientState retrieves the client state for the provided clientID. The client is -// expected to exist otherwise testing will fail. -func (chain *TestChain) GetClientState(clientID string) ibcexported.ClientState { - clientState, found := chain.App.GetIBCKeeper().ClientKeeper.GetClientState(chain.GetContext(), clientID) - require.True(chain.t, found) - - return clientState -} - -// GetConsensusState retrieves the consensus state for the provided clientID and height. -// It will return a success boolean depending on if consensus state exists or not. -func (chain *TestChain) GetConsensusState(clientID string, height ibcexported.Height) (ibcexported.ConsensusState, bool) { - return chain.App.GetIBCKeeper().ClientKeeper.GetClientConsensusState(chain.GetContext(), clientID, height) -} - -// GetValsAtHeight will return the validator set of the chain at a given height. It will return -// a success boolean depending on if the validator set exists or not at that height. -func (chain *TestChain) GetValsAtHeight(height int64) (*tmtypes.ValidatorSet, bool) { - histInfo, ok := chain.App.GetStakingKeeper().GetHistoricalInfo(chain.GetContext(), height) - if !ok { - return nil, false - } - - valSet := stakingtypes.Validators(histInfo.Valset) - - tmValidators, err := teststaking.ToTmValidators(valSet, sdk.DefaultPowerReduction) - if err != nil { - panic(err) - } - return tmtypes.NewValidatorSet(tmValidators), true -} - -// GetAcknowledgement retrieves an acknowledgement for the provided packet. If the -// acknowledgement does not exist then testing will fail. -func (chain *TestChain) GetAcknowledgement(packet ibcexported.PacketI) []byte { - ack, found := chain.App.GetIBCKeeper().ChannelKeeper.GetPacketAcknowledgement(chain.GetContext(), packet.GetDestPort(), packet.GetDestChannel(), packet.GetSequence()) - require.True(chain.t, found) - - return ack -} - -// GetPrefix returns the prefix for used by a chain in connection creation -func (chain *TestChain) GetPrefix() commitmenttypes.MerklePrefix { - return commitmenttypes.NewMerklePrefix(chain.App.GetIBCKeeper().ConnectionKeeper.GetCommitmentPrefix().Bytes()) -} - -// ConstructUpdateTMClientHeader will construct a valid 07-tendermint Header to update the -// light client on the source chain. -func (chain *TestChain) ConstructUpdateTMClientHeader(counterparty *TestChain, clientID string) (*ibctm.Header, error) { - return chain.ConstructUpdateTMClientHeaderWithTrustedHeight(counterparty, clientID, clienttypes.ZeroHeight()) -} - -// ConstructUpdateTMClientHeader will construct a valid 07-tendermint Header to update the -// light client on the source chain. -func (chain *TestChain) ConstructUpdateTMClientHeaderWithTrustedHeight(counterparty *TestChain, clientID string, trustedHeight clienttypes.Height) (*ibctm.Header, error) { - header := counterparty.LastHeader - // Relayer must query for LatestHeight on client to get TrustedHeight if the trusted height is not set - if trustedHeight.IsZero() { - trustedHeight = chain.GetClientState(clientID).GetLatestHeight().(clienttypes.Height) - } - var ( - tmTrustedVals *tmtypes.ValidatorSet - ok bool - ) - // Once we get TrustedHeight from client, we must query the validators from the counterparty chain - // If the LatestHeight == LastHeader.Height, then TrustedValidators are current validators - // If LatestHeight < LastHeader.Height, we can query the historical validator set from HistoricalInfo - if trustedHeight == counterparty.LastHeader.GetHeight() { - tmTrustedVals = counterparty.Vals - } else { - // NOTE: We need to get validators from counterparty at height: trustedHeight+1 - // since the last trusted validators for a header at height h - // is the NextValidators at h+1 committed to in header h by - // NextValidatorsHash - tmTrustedVals, ok = counterparty.GetValsAtHeight(int64(trustedHeight.RevisionHeight + 1)) - if !ok { - return nil, sdkerrors.Wrapf(ibctm.ErrInvalidHeaderHeight, "could not retrieve trusted validators at trustedHeight: %d", trustedHeight) - } - } - // inject trusted fields into last header - // for now assume revision number is 0 - header.TrustedHeight = trustedHeight - - trustedVals, err := tmTrustedVals.ToProto() - if err != nil { - return nil, err - } - header.TrustedValidators = trustedVals - - return header, nil -} - -// ExpireClient fast forwards the chain's block time by the provided amount of time which will -// expire any clients with a trusting period less than or equal to this amount of time. -func (chain *TestChain) ExpireClient(amount time.Duration) { - chain.Coordinator.IncrementTimeBy(amount) -} - -// CurrentTMClientHeader creates a TM header using the current header parameters -// on the chain. The trusted fields in the header are set to nil. -func (chain *TestChain) CurrentTMClientHeader() *ibctm.Header { - return chain.CreateTMClientHeader(chain.ChainID, chain.CurrentHeader.Height, clienttypes.Height{}, chain.CurrentHeader.Time, chain.Vals, nil, chain.Signers) -} - -// CreateTMClientHeader creates a TM header to update the TM client. Args are passed in to allow -// caller flexibility to use params that differ from the chain. -func (chain *TestChain) CreateTMClientHeader(chainID string, blockHeight int64, trustedHeight clienttypes.Height, timestamp time.Time, tmValSet, tmTrustedVals *tmtypes.ValidatorSet, signers []tmtypes.PrivValidator) *ibctm.Header { - var ( - valSet *tmproto.ValidatorSet - trustedVals *tmproto.ValidatorSet - ) - require.NotNil(chain.t, tmValSet) - - vsetHash := tmValSet.Hash() - - tmHeader := tmtypes.Header{ - Version: tmprotoversion.Consensus{Block: tmversion.BlockProtocol, App: 2}, - ChainID: chainID, - Height: blockHeight, - Time: timestamp, - LastBlockID: MakeBlockID(make([]byte, tmhash.Size), 10_000, make([]byte, tmhash.Size)), - LastCommitHash: chain.App.LastCommitID().Hash, - DataHash: tmhash.Sum([]byte("data_hash")), - ValidatorsHash: vsetHash, - NextValidatorsHash: vsetHash, - ConsensusHash: tmhash.Sum([]byte("consensus_hash")), - AppHash: chain.CurrentHeader.AppHash, - LastResultsHash: tmhash.Sum([]byte("last_results_hash")), - EvidenceHash: tmhash.Sum([]byte("evidence_hash")), - ProposerAddress: tmValSet.Proposer.Address, - } - hhash := tmHeader.Hash() - blockID := MakeBlockID(hhash, 3, tmhash.Sum([]byte("part_set"))) - voteSet := tmtypes.NewVoteSet(chainID, blockHeight, 1, tmproto.PrecommitType, tmValSet) - - commit, err := tmtypes.MakeCommit(blockID, blockHeight, 1, voteSet, signers, timestamp) - require.NoError(chain.t, err) - - signedHeader := &tmproto.SignedHeader{ - Header: tmHeader.ToProto(), - Commit: commit.ToProto(), - } - - valSet, err = tmValSet.ToProto() - if err != nil { - panic(err) - } - - if tmTrustedVals != nil { - trustedVals, err = tmTrustedVals.ToProto() - if err != nil { - panic(err) - } - } - - // The trusted fields may be nil. They may be filled before relaying messages to a client. - // The relayer is responsible for querying client and injecting appropriate trusted fields. - return &ibctm.Header{ - SignedHeader: signedHeader, - ValidatorSet: valSet, - TrustedHeight: trustedHeight, - TrustedValidators: trustedVals, - } -} - -// MakeBlockID copied unimported test functions from tmtypes to use them here -func MakeBlockID(hash []byte, partSetSize uint32, partSetHash []byte) tmtypes.BlockID { - return tmtypes.BlockID{ - Hash: hash, - PartSetHeader: tmtypes.PartSetHeader{ - Total: partSetSize, - Hash: partSetHash, - }, - } -} - -// CreateSortedSignerArray takes two PrivValidators, and the corresponding Validator structs -// (including voting power). It returns a signer array of PrivValidators that matches the -// sorting of ValidatorSet. -// The sorting is first by .VotingPower (descending), with secondary index of .Address (ascending). -func CreateSortedSignerArray(altPrivVal, suitePrivVal tmtypes.PrivValidator, - altVal, suiteVal *tmtypes.Validator, -) []tmtypes.PrivValidator { - switch { - case altVal.VotingPower > suiteVal.VotingPower: - return []tmtypes.PrivValidator{altPrivVal, suitePrivVal} - case altVal.VotingPower < suiteVal.VotingPower: - return []tmtypes.PrivValidator{suitePrivVal, altPrivVal} - default: - if bytes.Compare(altVal.Address, suiteVal.Address) == -1 { - return []tmtypes.PrivValidator{altPrivVal, suitePrivVal} - } - return []tmtypes.PrivValidator{suitePrivVal, altPrivVal} - } -} - -// CreatePortCapability binds and claims a capability for the given portID if it does not -// already exist. This function will fail testing on any resulting error. -// NOTE: only creation of a capbility for a transfer or mock port is supported -// Other applications must bind to the port in InitGenesis or modify this code. -func (chain *TestChain) CreatePortCapability(scopedKeeper capabilitykeeper.ScopedKeeper, portID string) { - // check if the portId is already binded, if not bind it - _, ok := chain.App.GetScopedIBCKeeper().GetCapability(chain.GetContext(), host.PortPath(portID)) - if !ok { - // create capability using the IBC capability keeper - capability, err := chain.App.GetScopedIBCKeeper().NewCapability(chain.GetContext(), host.PortPath(portID)) - require.NoError(chain.t, err) - - // claim capability using the scopedKeeper - err = scopedKeeper.ClaimCapability(chain.GetContext(), capability, host.PortPath(portID)) - require.NoError(chain.t, err) - } - - chain.App.Commit() - - chain.NextBlock() -} - -// GetPortCapability returns the port capability for the given portID. The capability must -// exist, otherwise testing will fail. -func (chain *TestChain) GetPortCapability(portID string) *capabilitytypes.Capability { - capability, ok := chain.App.GetScopedIBCKeeper().GetCapability(chain.GetContext(), host.PortPath(portID)) - require.True(chain.t, ok) - - return capability -} - -// CreateChannelCapability binds and claims a capability for the given portID and channelID -// if it does not already exist. This function will fail testing on any resulting error. The -// scoped keeper passed in will claim the new capability. -func (chain *TestChain) CreateChannelCapability(scopedKeeper capabilitykeeper.ScopedKeeper, portID, channelID string) { - capName := host.ChannelCapabilityPath(portID, channelID) - // check if the portId is already binded, if not bind it - _, ok := chain.App.GetScopedIBCKeeper().GetCapability(chain.GetContext(), capName) - if !ok { - capability, err := chain.App.GetScopedIBCKeeper().NewCapability(chain.GetContext(), capName) - require.NoError(chain.t, err) - err = scopedKeeper.ClaimCapability(chain.GetContext(), capability, capName) - require.NoError(chain.t, err) - } - - chain.App.Commit() - - chain.NextBlock() -} - -// GetChannelCapability returns the channel capability for the given portID and channelID. -// The capability must exist, otherwise testing will fail. -func (chain *TestChain) GetChannelCapability(portID, channelID string) *capabilitytypes.Capability { - capability, ok := chain.App.GetScopedIBCKeeper().GetCapability(chain.GetContext(), host.ChannelCapabilityPath(portID, channelID)) - require.True(chain.t, ok) - - return capability -} - -func (chain *TestChain) Balance(acc sdk.AccAddress, denom string) sdk.Coin { - return chain.GetTestSupport().BankKeeper().GetBalance(chain.GetContext(), acc, denom) -} - -func (chain *TestChain) AllBalances(acc sdk.AccAddress) sdk.Coins { - return chain.GetTestSupport().BankKeeper().GetAllBalances(chain.GetContext(), acc) -} - -func (chain TestChain) GetTestSupport() *feeabs.TestSupport { - return chain.App.(*TestingAppDecorator).TestSupport() -} - -var _ ibctesting.TestingApp = TestingAppDecorator{} - -type TestingAppDecorator struct { - *feeabs.FeeAbs - t *testing.T -} - -func NewTestingAppDecorator(t *testing.T, feeabstraction *feeabs.FeeAbs) *TestingAppDecorator { - t.Helper() - return &TestingAppDecorator{FeeAbs: feeabstraction, t: t} -} - -func (a TestingAppDecorator) GetBaseApp() *baseapp.BaseApp { - return a.TestSupport().GetBaseApp() -} - -func (a TestingAppDecorator) GetStakingKeeper() ibctestingtypes.StakingKeeper { - return a.TestSupport().StakingKeeper() -} - -func (a TestingAppDecorator) GetIBCKeeper() *ibckeeper.Keeper { - return a.TestSupport().IBCKeeper() -} - -func (a TestingAppDecorator) GetScopedIBCKeeper() capabilitykeeper.ScopedKeeper { - return a.TestSupport().ScopeIBCKeeper() -} - -func (a TestingAppDecorator) GetTxConfig() client.TxConfig { - return a.TestSupport().GetTxConfig() -} - -func (a TestingAppDecorator) TestSupport() *feeabs.TestSupport { - return feeabs.NewTestSupport(a.t, a.FeeAbs) -} diff --git a/x/feeabs/ibctesting/coordinator.go b/x/feeabs/ibctesting/coordinator.go deleted file mode 100644 index c98aa6e6..00000000 --- a/x/feeabs/ibctesting/coordinator.go +++ /dev/null @@ -1,337 +0,0 @@ -package ibctesting - -import ( - "fmt" - "strconv" - "testing" - "time" - - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - host "github.com/cosmos/ibc-go/v7/modules/core/24-host" - ibctesting "github.com/cosmos/ibc-go/v7/testing" - "github.com/stretchr/testify/require" - - abci "github.com/cometbft/cometbft/abci/types" -) - -const ChainIDPrefix = "testchain" - -var ( - globalStartTime = time.Date(2020, 12, 4, 10, 30, 0, 0, time.UTC) - TimeIncrement = time.Second * 5 -) - -// Coordinator is a testing struct which contains N TestChain's. It handles keeping all chains -// in sync with regards to time. -type Coordinator struct { - t *testing.T - - CurrentTime time.Time - Chains map[string]*TestChain -} - -// NewCoordinator initializes Coordinator with N TestChain's -func NewCoordinator(t *testing.T, n int) *Coordinator { - t.Helper() - chains := make(map[string]*TestChain) - coord := &Coordinator{ - t: t, - CurrentTime: globalStartTime, - } - - for i := 0; i < n; i++ { - chainID := GetChainID(i) - chains[chainID] = NewTestChain(t, coord, chainID) - } - coord.Chains = chains - - return coord -} - -// IncrementTime iterates through all the TestChain's and increments their current header time -// by 5 seconds. -// -// CONTRACT: this function must be called after every Commit on any TestChain. -func (coord *Coordinator) IncrementTime() { - coord.IncrementTimeBy(TimeIncrement) -} - -// IncrementTimeBy iterates through all the TestChain's and increments their current header time -// by specified time. -func (coord *Coordinator) IncrementTimeBy(increment time.Duration) { - coord.CurrentTime = coord.CurrentTime.Add(increment).UTC() - coord.UpdateTime() -} - -// UpdateTime updates all clocks for the TestChains to the current global time. -func (coord *Coordinator) UpdateTime() { - for _, chain := range coord.Chains { - coord.UpdateTimeForChain(chain) - } -} - -// UpdateTimeForChain updates the clock for a specific chain. -func (coord *Coordinator) UpdateTimeForChain(chain *TestChain) { - chain.CurrentHeader.Time = coord.CurrentTime.UTC() - chain.App.BeginBlock(abci.RequestBeginBlock{Header: chain.CurrentHeader}) -} - -// Setup constructs a TM client, connection, and channel on both chains provided. It will -// fail if any error occurs. The clientID's, TestConnections, and TestChannels are returned -// for both chains. The channels created are connected to the ibc-transfer application. -func (coord *Coordinator) Setup(path *Path) { - coord.SetupConnections(path) - - // channels can also be referenced through the returned connections - coord.CreateChannels(path) -} - -// SetupClients is a helper function to create clients on both chains. It assumes the -// caller does not anticipate any errors. -func (coord *Coordinator) SetupClients(path *Path) { - err := path.EndpointA.CreateClient() - require.NoError(coord.t, err) - - err = path.EndpointB.CreateClient() - require.NoError(coord.t, err) -} - -// SetupClientConnections is a helper function to create clients and the appropriate -// connections on both the source and counterparty chain. It assumes the caller does not -// anticipate any errors. -func (coord *Coordinator) SetupConnections(path *Path) { - coord.SetupClients(path) - - coord.CreateConnections(path) -} - -// CreateConnection constructs and executes connection handshake messages in order to create -// OPEN channels on chainA and chainB. The connection information of for chainA and chainB -// are returned within a TestConnection struct. The function expects the connections to be -// successfully opened otherwise testing will fail. -func (coord *Coordinator) CreateConnections(path *Path) { - err := path.EndpointA.ConnOpenInit() - require.NoError(coord.t, err) - - err = path.EndpointB.ConnOpenTry() - require.NoError(coord.t, err) - - err = path.EndpointA.ConnOpenAck() - require.NoError(coord.t, err) - - err = path.EndpointB.ConnOpenConfirm() - require.NoError(coord.t, err) - - // ensure counterparty is up to date - err = path.EndpointA.UpdateClient() - require.NoError(coord.t, err) -} - -// CreateMockChannels constructs and executes channel handshake messages to create OPEN -// channels that use a mock application module that returns nil on all callbacks. This -// function is expects the channels to be successfully opened otherwise testing will -// fail. -func (coord *Coordinator) CreateMockChannels(path *Path) { - path.EndpointA.ChannelConfig.PortID = ibctesting.MockPort - path.EndpointB.ChannelConfig.PortID = ibctesting.MockPort - - coord.CreateChannels(path) -} - -// CreateTransferChannels constructs and executes channel handshake messages to create OPEN -// ibc-transfer channels on chainA and chainB. The function expects the channels to be -// successfully opened otherwise testing will fail. -func (coord *Coordinator) CreateTransferChannels(path *Path) { - path.EndpointA.ChannelConfig.PortID = ibctesting.TransferPort - path.EndpointB.ChannelConfig.PortID = ibctesting.TransferPort - - coord.CreateChannels(path) -} - -// CreateChannel constructs and executes channel handshake messages in order to create -// OPEN channels on chainA and chainB. The function expects the channels to be successfully -// opened otherwise testing will fail. -func (coord *Coordinator) CreateChannels(path *Path) { - err := path.EndpointA.ChanOpenInit() - require.NoError(coord.t, err) - - err = path.EndpointB.ChanOpenTry() - require.NoError(coord.t, err) - - err = path.EndpointA.ChanOpenAck() - require.NoError(coord.t, err) - - err = path.EndpointB.ChanOpenConfirm() - require.NoError(coord.t, err) - - // ensure counterparty is up to date - err = path.EndpointA.UpdateClient() - require.NoError(coord.t, err) -} - -// GetChain returns the TestChain using the given chainID and returns an error if it does -// not exist. -func (coord *Coordinator) GetChain(chainID string) *TestChain { - chain, found := coord.Chains[chainID] - require.True(coord.t, found, fmt.Sprintf("%s chain does not exist", chainID)) - return chain -} - -// GetChainID returns the chainID used for the provided index. -func GetChainID(index int) string { - return ChainIDPrefix + strconv.Itoa(index) -} - -// CommitBlock commits a block on the provided indexes and then increments the global time. -// -// CONTRACT: the passed in list of indexes must not contain duplicates -func (coord *Coordinator) CommitBlock(chains ...*TestChain) { - for _, chain := range chains { - chain.App.Commit() - chain.NextBlock() - } - coord.IncrementTime() -} - -// CommitNBlocks commits n blocks to state and updates the block height by 1 for each commit. -func (coord *Coordinator) CommitNBlocks(chain *TestChain, n uint64) { - for i := uint64(0); i < n; i++ { - chain.App.BeginBlock(abci.RequestBeginBlock{Header: chain.CurrentHeader}) - chain.App.Commit() - chain.NextBlock() - coord.IncrementTime() - } -} - -// ConnOpenInitOnBothChains initializes a connection on both endpoints with the state INIT -// using the OpenInit handshake call. -func (*Coordinator) ConnOpenInitOnBothChains(path *Path) error { - if err := path.EndpointA.ConnOpenInit(); err != nil { - return err - } - - if err := path.EndpointB.ConnOpenInit(); err != nil { - return err - } - - if err := path.EndpointA.UpdateClient(); err != nil { - return err - } - - if err := path.EndpointB.UpdateClient(); err != nil { - return err - } - - return nil -} - -// ChanOpenInitOnBothChains initializes a channel on the source chain and counterparty chain -// with the state INIT using the OpenInit handshake call. -func (*Coordinator) ChanOpenInitOnBothChains(path *Path) error { - // 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. - - if err := path.EndpointA.ChanOpenInit(); err != nil { - return err - } - - if err := path.EndpointB.ChanOpenInit(); err != nil { - return err - } - - if err := path.EndpointA.UpdateClient(); err != nil { - return err - } - - if err := path.EndpointB.UpdateClient(); err != nil { - return err - } - - return nil -} - -// from A to B -func (coord *Coordinator) RelayAndAckPendingPackets(path *Path) error { - // get all the packet to relay src->dest - src := path.EndpointA - dest := path.EndpointB - toSend := src.Chain.PendingSendPackets - coord.t.Logf("Relay %d Packets A->B\n", len(toSend)) - - // send this to the other side - coord.IncrementTime() - coord.CommitBlock(src.Chain) - err := dest.UpdateClient() - if err != nil { - return err - } - for _, packet := range toSend { - err = dest.RecvPacket(packet) - if err != nil { - return err - } - } - src.Chain.PendingSendPackets = nil - - // get all the acks to relay dest->src - toAck := dest.Chain.PendingAckPackets - // TODO: assert >= len(toSend)? - coord.t.Logf("Ack %d Packets B->A\n", len(toAck)) - - // send the ack back from dest -> src - coord.IncrementTime() - coord.CommitBlock(dest.Chain) - err = src.UpdateClient() - if err != nil { - return err - } - for _, ack := range toAck { - err = src.AcknowledgePacket(ack.Packet, ack.Ack) - if err != nil { - return err - } - } - dest.Chain.PendingAckPackets = nil - return nil -} - -// TimeoutPendingPackets returns the package to source chain to let the IBC app revert any operation. -// from A to A -func (coord *Coordinator) TimeoutPendingPackets(path *Path) error { - src := path.EndpointA - dest := path.EndpointB - - toSend := src.Chain.PendingSendPackets - coord.t.Logf("Timeout %d Packets A->A\n", len(toSend)) - - if err := src.UpdateClient(); err != nil { - return err - } - // Increment time and commit block so that 5 second delay period passes between send and receive - coord.IncrementTime() - coord.CommitBlock(src.Chain, dest.Chain) - for _, packet := range toSend { - // get proof of packet unreceived on dest - packetKey := host.PacketReceiptKey(packet.GetDestPort(), packet.GetDestChannel(), packet.GetSequence()) - proofUnreceived, proofHeight := dest.QueryProof(packetKey) - timeoutMsg := channeltypes.NewMsgTimeout(packet, packet.Sequence, proofUnreceived, proofHeight, src.Chain.SenderAccount.GetAddress().String()) - err := src.Chain.sendMsgs(timeoutMsg) - if err != nil { - return err - } - } - src.Chain.PendingSendPackets = nil - dest.Chain.PendingAckPackets = nil - return nil -} - -// CloseChannel close channel on both sides -func (coord *Coordinator) CloseChannel(path *Path) { - err := path.EndpointA.ChanCloseInit() - require.NoError(coord.t, err) - coord.IncrementTime() - err = path.EndpointB.UpdateClient() - require.NoError(coord.t, err) - err = path.EndpointB.ChanCloseConfirm() - require.NoError(coord.t, err) -} diff --git a/x/feeabs/ibctesting/endpoint.go b/x/feeabs/ibctesting/endpoint.go deleted file mode 100644 index 9b47e815..00000000 --- a/x/feeabs/ibctesting/endpoint.go +++ /dev/null @@ -1,375 +0,0 @@ -package ibctesting - -import ( - "fmt" - - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - connectiontypes "github.com/cosmos/ibc-go/v7/modules/core/03-connection/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - commitmenttypes "github.com/cosmos/ibc-go/v7/modules/core/23-commitment/types" - host "github.com/cosmos/ibc-go/v7/modules/core/24-host" - "github.com/cosmos/ibc-go/v7/modules/core/exported" - ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" - ibctesting "github.com/cosmos/ibc-go/v7/testing" - "github.com/stretchr/testify/require" -) - -// Endpoint is a which represents a channel endpoint and its associated -// client and connections. It contains client, connection, and channel -// configuration parameters. Endpoint functions will utilize the parameters -// set in the configuration structs when executing IBC messages. -type Endpoint struct { - Chain *TestChain - Counterparty *Endpoint - ClientID string - ConnectionID string - ChannelID string - - ClientConfig ibctesting.ClientConfig - ConnectionConfig *ibctesting.ConnectionConfig - ChannelConfig *ibctesting.ChannelConfig -} - -// QueryProof queries proof associated with this endpoint using the lastest client state -// height on the counterparty chain. -func (endpoint *Endpoint) QueryProof(key []byte) ([]byte, clienttypes.Height) { - // obtain the counterparty client representing the chain associated with the endpoint - clientState := endpoint.Counterparty.Chain.GetClientState(endpoint.Counterparty.ClientID) - - // query proof on the counterparty using the latest height of the IBC client - return endpoint.QueryProofAtHeight(key, clientState.GetLatestHeight().GetRevisionHeight()) -} - -// QueryProofAtHeight queries proof associated with this endpoint using the proof height -// providied -func (endpoint *Endpoint) QueryProofAtHeight(key []byte, height uint64) ([]byte, clienttypes.Height) { - // query proof on the counterparty using the latest height of the IBC client - return endpoint.Chain.QueryProofAtHeight(key, int64(height)) -} - -// CreateClient creates an IBC client on the endpoint. It will update the -// clientID for the endpoint if the message is successfully executed. -// NOTE: a solo machine client will be created with an empty diversifier. -func (endpoint *Endpoint) CreateClient() (err error) { - // ensure counterparty has committed state - endpoint.Chain.Coordinator.CommitBlock(endpoint.Counterparty.Chain) - - var ( - clientState exported.ClientState - consensusState exported.ConsensusState - ) - - switch endpoint.ClientConfig.GetClientType() { - case exported.Tendermint: - tmConfig, ok := endpoint.ClientConfig.(*ibctesting.TendermintConfig) - require.True(endpoint.Chain.t, ok) - - height := endpoint.Counterparty.Chain.LastHeader.GetHeight().(clienttypes.Height) - clientState = ibctm.NewClientState( - endpoint.Counterparty.Chain.ChainID, tmConfig.TrustLevel, tmConfig.TrustingPeriod, tmConfig.UnbondingPeriod, tmConfig.MaxClockDrift, - height, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath, - ) - consensusState = endpoint.Counterparty.Chain.LastHeader.ConsensusState() - case exported.Solomachine: - // TODO - // solo := NewSolomachine(chain.t, endpoint.Chain.Codec, clientID, "", 1) - // clientState = solo.ClientState() - // consensusState = solo.ConsensusState() - - default: - err = fmt.Errorf("client type %s is not supported", endpoint.ClientConfig.GetClientType()) - } - - if err != nil { - return err - } - - msg, err := clienttypes.NewMsgCreateClient( - clientState, consensusState, endpoint.Chain.SenderAccount.GetAddress().String(), - ) - require.NoError(endpoint.Chain.t, err) - - res, err := endpoint.Chain.SendMsgs(msg) - if err != nil { - return err - } - - endpoint.ClientID, err = ibctesting.ParseClientIDFromEvents(res.GetEvents()) - require.NoError(endpoint.Chain.t, err) - - return nil -} - -// UpdateClient updates the IBC client associated with the endpoint. -func (endpoint *Endpoint) UpdateClient() (err error) { - // ensure counterparty has committed state - endpoint.Chain.Coordinator.CommitBlock(endpoint.Counterparty.Chain) - - var header *ibctm.Header - - switch endpoint.ClientConfig.GetClientType() { - case exported.Tendermint: - header, err = endpoint.Chain.ConstructUpdateTMClientHeader(endpoint.Counterparty.Chain, endpoint.ClientID) - - default: - err = fmt.Errorf("client type %s is not supported", endpoint.ClientConfig.GetClientType()) - } - - if err != nil { - return err - } - - msg, err := clienttypes.NewMsgUpdateClient( - endpoint.ClientID, header, - endpoint.Chain.SenderAccount.GetAddress().String(), - ) - require.NoError(endpoint.Chain.t, err) - - return endpoint.Chain.sendMsgs(msg) -} - -// ConnOpenInit will construct and execute a MsgConnectionOpenInit on the associated endpoint. -func (endpoint *Endpoint) ConnOpenInit() error { - msg := connectiontypes.NewMsgConnectionOpenInit( - endpoint.ClientID, - endpoint.Counterparty.ClientID, - endpoint.Counterparty.Chain.GetPrefix(), ibctesting.DefaultOpenInitVersion, endpoint.ConnectionConfig.DelayPeriod, - endpoint.Chain.SenderAccount.GetAddress().String(), - ) - res, err := endpoint.Chain.SendMsgs(msg) - if err != nil { - return err - } - - endpoint.ConnectionID, err = ibctesting.ParseConnectionIDFromEvents(res.GetEvents()) - require.NoError(endpoint.Chain.t, err) - - return nil -} - -// ConnOpenTry will construct and execute a MsgConnectionOpenTry on the associated endpoint. -func (endpoint *Endpoint) ConnOpenTry() error { - if err := endpoint.UpdateClient(); err != nil { - return err - } - - counterpartyClient, proofClient, proofConsensus, consensusHeight, proofInit, proofHeight := endpoint.QueryConnectionHandshakeProof() - - msg := connectiontypes.NewMsgConnectionOpenTry( - endpoint.ClientID, endpoint.Counterparty.ConnectionID, endpoint.Counterparty.ClientID, - counterpartyClient, endpoint.Counterparty.Chain.GetPrefix(), []*connectiontypes.Version{ibctesting.ConnectionVersion}, endpoint.ConnectionConfig.DelayPeriod, - proofInit, proofClient, proofConsensus, - proofHeight, consensusHeight, - endpoint.Chain.SenderAccount.GetAddress().String(), - ) - res, err := endpoint.Chain.SendMsgs(msg) - if err != nil { - return err - } - - if endpoint.ConnectionID == "" { - endpoint.ConnectionID, err = ibctesting.ParseConnectionIDFromEvents(res.GetEvents()) - require.NoError(endpoint.Chain.t, err) - } - - return nil -} - -// ConnOpenAck will construct and execute a MsgConnectionOpenAck on the associated endpoint. -func (endpoint *Endpoint) ConnOpenAck() error { - if err := endpoint.UpdateClient(); err != nil { - return err - } - - counterpartyClient, proofClient, proofConsensus, consensusHeight, proofTry, proofHeight := endpoint.QueryConnectionHandshakeProof() - - msg := connectiontypes.NewMsgConnectionOpenAck( - endpoint.ConnectionID, endpoint.Counterparty.ConnectionID, counterpartyClient, // testing doesn't use flexible selection - proofTry, proofClient, proofConsensus, - proofHeight, consensusHeight, - ibctesting.ConnectionVersion, - endpoint.Chain.SenderAccount.GetAddress().String(), - ) - return endpoint.Chain.sendMsgs(msg) -} - -// ConnOpenConfirm will construct and execute a MsgConnectionOpenConfirm on the associated endpoint. -func (endpoint *Endpoint) ConnOpenConfirm() error { - if err := endpoint.UpdateClient(); err != nil { - return err - } - - connectionKey := host.ConnectionKey(endpoint.Counterparty.ConnectionID) - proof, height := endpoint.Counterparty.Chain.QueryProof(connectionKey) - - msg := connectiontypes.NewMsgConnectionOpenConfirm( - endpoint.ConnectionID, - proof, height, - endpoint.Chain.SenderAccount.GetAddress().String(), - ) - return endpoint.Chain.sendMsgs(msg) -} - -// QueryConnectionHandshakeProof returns all the proofs necessary to execute OpenTry or Open Ack of -// the connection handshakes. It returns the counterparty client state, proof of the counterparty -// client state, proof of the counterparty consensus state, the consensus state height, proof of -// the counterparty connection, and the proof height for all the proofs returned. -func (endpoint *Endpoint) QueryConnectionHandshakeProof() ( - clientState exported.ClientState, proofClient, - proofConsensus []byte, consensusHeight clienttypes.Height, - proofConnection []byte, proofHeight clienttypes.Height, -) { - // obtain the client state on the counterparty chain - clientState = endpoint.Counterparty.Chain.GetClientState(endpoint.Counterparty.ClientID) - - // query proof for the client state on the counterparty - clientKey := host.FullClientStateKey(endpoint.Counterparty.ClientID) - proofClient, proofHeight = endpoint.Counterparty.QueryProof(clientKey) - - consensusHeight = clientState.GetLatestHeight().(clienttypes.Height) - - // query proof for the consensus state on the counterparty - consensusKey := host.FullConsensusStateKey(endpoint.Counterparty.ClientID, consensusHeight) - proofConsensus, _ = endpoint.Counterparty.QueryProofAtHeight(consensusKey, proofHeight.GetRevisionHeight()) - - // query proof for the connection on the counterparty - connectionKey := host.ConnectionKey(endpoint.Counterparty.ConnectionID) - proofConnection, _ = endpoint.Counterparty.QueryProofAtHeight(connectionKey, proofHeight.GetRevisionHeight()) - - return clientState, proofClient, proofConsensus, consensusHeight, proofConnection, proofHeight -} - -// ChanOpenInit will construct and execute a MsgChannelOpenInit on the associated endpoint. -func (endpoint *Endpoint) ChanOpenInit() error { - msg := channeltypes.NewMsgChannelOpenInit( - endpoint.ChannelConfig.PortID, - endpoint.ChannelConfig.Version, endpoint.ChannelConfig.Order, []string{endpoint.ConnectionID}, - endpoint.Counterparty.ChannelConfig.PortID, - endpoint.Chain.SenderAccount.GetAddress().String(), - ) - res, err := endpoint.Chain.SendMsgs(msg) - if err != nil { - return err - } - - endpoint.ChannelID, err = ibctesting.ParseChannelIDFromEvents(res.GetEvents()) - require.NoError(endpoint.Chain.t, err) - - return nil -} - -// ChanOpenTry will construct and execute a MsgChannelOpenTry on the associated endpoint. -func (endpoint *Endpoint) ChanOpenTry() error { - if err := endpoint.UpdateClient(); err != nil { - return err - } - - channelKey := host.ChannelKey(endpoint.Counterparty.ChannelConfig.PortID, endpoint.Counterparty.ChannelID) - proof, height := endpoint.Counterparty.Chain.QueryProof(channelKey) - - msg := channeltypes.NewMsgChannelOpenTry( - endpoint.ChannelConfig.PortID, - endpoint.ChannelConfig.Version, endpoint.ChannelConfig.Order, []string{endpoint.ConnectionID}, - endpoint.Counterparty.ChannelConfig.PortID, endpoint.Counterparty.ChannelID, endpoint.Counterparty.ChannelConfig.Version, - proof, height, - endpoint.Chain.SenderAccount.GetAddress().String(), - ) - res, err := endpoint.Chain.SendMsgs(msg) - if err != nil { - return err - } - - if endpoint.ChannelID == "" { - endpoint.ChannelID, err = ibctesting.ParseChannelIDFromEvents(res.GetEvents()) - require.NoError(endpoint.Chain.t, err) - } - - return nil -} - -// ChanOpenAck will construct and execute a MsgChannelOpenAck on the associated endpoint. -func (endpoint *Endpoint) ChanOpenAck() error { - if err := endpoint.UpdateClient(); err != nil { - return err - } - - channelKey := host.ChannelKey(endpoint.Counterparty.ChannelConfig.PortID, endpoint.Counterparty.ChannelID) - proof, height := endpoint.Counterparty.Chain.QueryProof(channelKey) - - msg := channeltypes.NewMsgChannelOpenAck( - endpoint.ChannelConfig.PortID, endpoint.ChannelID, - endpoint.Counterparty.ChannelID, endpoint.Counterparty.ChannelConfig.Version, // testing doesn't use flexible selection - proof, height, - endpoint.Chain.SenderAccount.GetAddress().String(), - ) - return endpoint.Chain.sendMsgs(msg) -} - -// ChanOpenConfirm will construct and execute a MsgChannelOpenConfirm on the associated endpoint. -func (endpoint *Endpoint) ChanOpenConfirm() error { - if err := endpoint.UpdateClient(); err != nil { - return err - } - - channelKey := host.ChannelKey(endpoint.Counterparty.ChannelConfig.PortID, endpoint.Counterparty.ChannelID) - proof, height := endpoint.Counterparty.Chain.QueryProof(channelKey) - - msg := channeltypes.NewMsgChannelOpenConfirm( - endpoint.ChannelConfig.PortID, endpoint.ChannelID, - proof, height, - endpoint.Chain.SenderAccount.GetAddress().String(), - ) - return endpoint.Chain.sendMsgs(msg) -} - -// ChanCloseInit will construct and execute a MsgChannelCloseInit on the associated endpoint. -// -// NOTE: does not work with ibc-transfer module -func (endpoint *Endpoint) ChanCloseInit() error { - msg := channeltypes.NewMsgChannelCloseInit( - endpoint.ChannelConfig.PortID, endpoint.ChannelID, - endpoint.Chain.SenderAccount.GetAddress().String(), - ) - return endpoint.Chain.sendMsgs(msg) -} - -// ChanCloseConfirm will construct and execute a NewMsgChannelCloseConfirm on the associated endpoint. -func (endpoint *Endpoint) ChanCloseConfirm() error { - channelKey := host.ChannelKey(endpoint.Counterparty.ChannelConfig.PortID, endpoint.Counterparty.ChannelID) - proof, proofHeight := endpoint.Counterparty.QueryProof(channelKey) - - msg := channeltypes.NewMsgChannelCloseConfirm( - endpoint.ChannelConfig.PortID, endpoint.ChannelID, - proof, proofHeight, - endpoint.Chain.SenderAccount.GetAddress().String(), - ) - return endpoint.Chain.sendMsgs(msg) -} - -// RecvPacket receives a packet on the associated endpoint. -// The counterparty client is updated. -func (endpoint *Endpoint) RecvPacket(packet channeltypes.Packet) error { - // get proof of packet commitment on source - packetKey := host.PacketCommitmentKey(packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetSequence()) - proof, proofHeight := endpoint.Counterparty.Chain.QueryProof(packetKey) - - recvMsg := channeltypes.NewMsgRecvPacket(packet, proof, proofHeight, endpoint.Chain.SenderAccount.GetAddress().String()) - - // receive on counterparty and update source client - if err := endpoint.Chain.sendMsgs(recvMsg); err != nil { - return err - } - - return endpoint.Counterparty.UpdateClient() -} - -// AcknowledgePacket sends a MsgAcknowledgement to the channel associated with the endpoint. -func (endpoint *Endpoint) AcknowledgePacket(packet channeltypes.Packet, ack []byte) error { - // get proof of acknowledgement on counterparty - packetKey := host.PacketAcknowledgementKey(packet.GetDestPort(), packet.GetDestChannel(), packet.GetSequence()) - proof, proofHeight := endpoint.Counterparty.QueryProof(packetKey) - - ackMsg := channeltypes.NewMsgAcknowledgement(packet, ack, proof, proofHeight, endpoint.Chain.SenderAccount.GetAddress().String()) - - return endpoint.Chain.sendMsgs(ackMsg) -} diff --git a/x/feeabs/ibctesting/event_utils.go b/x/feeabs/ibctesting/event_utils.go deleted file mode 100644 index 6aa79bb4..00000000 --- a/x/feeabs/ibctesting/event_utils.go +++ /dev/null @@ -1,92 +0,0 @@ -package ibctesting - -import ( - "strconv" - "strings" - - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - - abci "github.com/cometbft/cometbft/abci/types" -) - -func getSendPackets(evts []abci.Event) []channeltypes.Packet { - var res []channeltypes.Packet - for _, evt := range evts { - if evt.Type == "send_packet" { - packet := parsePacketFromEvent(evt) - res = append(res, packet) - } - } - return res -} - -func getAckPackets(evts []abci.Event) []PacketAck { - var res []PacketAck - for _, evt := range evts { - if evt.Type == "write_acknowledgement" { - packet := parsePacketFromEvent(evt) - ack := PacketAck{ - Packet: packet, - Ack: []byte(getField(evt, "packet_ack")), - } - res = append(res, ack) - } - } - return res -} - -// Used for various debug statements above when needed... do not remove -// func showEvent(evt abci.Event) { -// fmt.Printf("evt.Type: %s\n", evt.Type) -// for _, attr := range evt.Attributes { -// fmt.Printf(" %s = %s\n", string(attr.Key), string(attr.Value)) -// } -// } - -func parsePacketFromEvent(evt abci.Event) channeltypes.Packet { - return channeltypes.Packet{ - Sequence: getUintField(evt, "packet_sequence"), - SourcePort: getField(evt, "packet_src_port"), - SourceChannel: getField(evt, "packet_src_channel"), - DestinationPort: getField(evt, "packet_dst_port"), - DestinationChannel: getField(evt, "packet_dst_channel"), - Data: []byte(getField(evt, "packet_data")), - TimeoutHeight: parseTimeoutHeight(getField(evt, "packet_timeout_height")), - TimeoutTimestamp: getUintField(evt, "packet_timeout_timestamp"), - } -} - -// return the value for the attribute with the given name -func getField(evt abci.Event, key string) string { - for _, attr := range evt.Attributes { - if attr.Key == key { - return attr.Value - } - } - return "" -} - -func getUintField(evt abci.Event, key string) uint64 { - raw := getField(evt, key) - return toUint64(raw) -} - -func toUint64(raw string) uint64 { - if raw == "" { - return 0 - } - i, err := strconv.ParseUint(raw, 10, 64) - if err != nil { - panic(err) - } - return i -} - -func parseTimeoutHeight(raw string) clienttypes.Height { - chunks := strings.Split(raw, "-") - return clienttypes.Height{ - RevisionNumber: toUint64(chunks[0]), - RevisionHeight: toUint64(chunks[1]), - } -} diff --git a/x/feeabs/ibctesting/path.go b/x/feeabs/ibctesting/path.go deleted file mode 100644 index 4a505b63..00000000 --- a/x/feeabs/ibctesting/path.go +++ /dev/null @@ -1,38 +0,0 @@ -package ibctesting - -import ( - ibctesting "github.com/cosmos/ibc-go/v7/testing" -) - -// Path contains two endpoints representing two chains connected over IBC -type Path struct { - EndpointA *Endpoint - EndpointB *Endpoint -} - -// NewPath constructs an endpoint for each chain using the default values -// for the endpoints. Each endpoint is updated to have a pointer to the -// counterparty endpoint. -func NewPath(chainA, chainB *TestChain) *Path { - endpointA := NewDefaultEndpoint(chainA) - endpointB := NewDefaultEndpoint(chainB) - - endpointA.Counterparty = endpointB - endpointB.Counterparty = endpointA - - return &Path{ - EndpointA: endpointA, - EndpointB: endpointB, - } -} - -// NewDefaultEndpoint constructs a new endpoint using default values. -// CONTRACT: the counterparty endpoitn must be set by the caller. -func NewDefaultEndpoint(chain *TestChain) *Endpoint { - return &Endpoint{ - Chain: chain, - ClientConfig: ibctesting.NewTendermintConfig(), - ConnectionConfig: ibctesting.NewConnectionConfig(), - ChannelConfig: ibctesting.NewChannelConfig(), - } -} diff --git a/x/feeabs/types/epoch.pb.go b/x/feeabs/types/epoch.pb.go index a9b380b8..57e479a0 100644 --- a/x/feeabs/types/epoch.pb.go +++ b/x/feeabs/types/epoch.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: feeabstraction/absfee/v1beta1/epoch.proto +// source: feeabstraction/feeabs/v1beta1/epoch.proto package types @@ -75,7 +75,7 @@ func (m *EpochInfo) Reset() { *m = EpochInfo{} } func (m *EpochInfo) String() string { return proto.CompactTextString(m) } func (*EpochInfo) ProtoMessage() {} func (*EpochInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_4a30326e6468dfa9, []int{0} + return fileDescriptor_95c6723303c4bcf6, []int{0} } func (m *EpochInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -154,44 +154,44 @@ func (m *EpochInfo) GetCurrentEpochStartHeight() int64 { } func init() { - proto.RegisterType((*EpochInfo)(nil), "feeabstraction.absfee.v1beta1.EpochInfo") + proto.RegisterType((*EpochInfo)(nil), "feeabstraction.feeabs.v1beta1.EpochInfo") } func init() { - proto.RegisterFile("feeabstraction/absfee/v1beta1/epoch.proto", fileDescriptor_4a30326e6468dfa9) + proto.RegisterFile("feeabstraction/feeabs/v1beta1/epoch.proto", fileDescriptor_95c6723303c4bcf6) } -var fileDescriptor_4a30326e6468dfa9 = []byte{ - // 452 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0x3f, 0x6f, 0xd3, 0x40, - 0x14, 0xcf, 0xd1, 0x50, 0x9c, 0x03, 0x04, 0x58, 0x05, 0x4c, 0xa4, 0xda, 0x51, 0x58, 0x82, 0xa0, - 0x3e, 0x05, 0x90, 0x10, 0xb0, 0x05, 0x90, 0x80, 0x31, 0x61, 0x40, 0x2c, 0xd1, 0xd9, 0x79, 0xb6, - 0x4f, 0x8a, 0x7d, 0x96, 0xef, 0xb9, 0x22, 0x1b, 0x1f, 0x21, 0x23, 0x1f, 0xa9, 0x63, 0x47, 0xa6, - 0x80, 0x92, 0x8d, 0xb1, 0x9f, 0x00, 0xf9, 0xce, 0x2e, 0x29, 0x01, 0xb1, 0xd9, 0xef, 0xf7, 0xef, - 0xbd, 0x9f, 0x8e, 0x3e, 0x88, 0x00, 0x78, 0xa0, 0xb0, 0xe0, 0x21, 0x0a, 0x99, 0x31, 0x1e, 0xa8, - 0x08, 0x80, 0x1d, 0x0f, 0x03, 0x40, 0x3e, 0x64, 0x90, 0xcb, 0x30, 0xf1, 0xf3, 0x42, 0xa2, 0xb4, - 0x0f, 0x2f, 0x52, 0x7d, 0x43, 0xf5, 0x6b, 0x6a, 0xf7, 0x20, 0x96, 0xb1, 0xd4, 0x4c, 0x56, 0x7d, - 0x19, 0x51, 0xd7, 0x8d, 0xa5, 0x8c, 0xe7, 0xc0, 0xf4, 0x5f, 0x50, 0x46, 0x6c, 0x56, 0x16, 0x5c, - 0xcb, 0x0d, 0xee, 0xfd, 0x89, 0xa3, 0x48, 0x41, 0x21, 0x4f, 0x73, 0x43, 0xe8, 0x2f, 0xdb, 0xb4, - 0xf3, 0xa6, 0xda, 0xe2, 0x5d, 0x16, 0x49, 0xdb, 0xa5, 0x54, 0xcc, 0x20, 0x43, 0x11, 0x09, 0x28, - 0x1c, 0xd2, 0x23, 0x83, 0xce, 0x78, 0x6b, 0x62, 0x7f, 0xa4, 0x54, 0x21, 0x2f, 0x70, 0x5a, 0xd9, - 0x38, 0x97, 0x7a, 0x64, 0x70, 0xf5, 0x71, 0xd7, 0x37, 0x19, 0x7e, 0x93, 0xe1, 0x7f, 0x68, 0x32, - 0x46, 0x87, 0x27, 0x2b, 0xaf, 0x75, 0xb6, 0xf2, 0x6e, 0x2d, 0x78, 0x3a, 0x7f, 0xd1, 0xff, 0xad, - 0xed, 0x2f, 0xbf, 0x7b, 0x64, 0xdc, 0xd1, 0x83, 0x8a, 0x6e, 0x27, 0xd4, 0x6a, 0x56, 0x77, 0xf6, - 0xb4, 0xef, 0xbd, 0x1d, 0xdf, 0xd7, 0x35, 0x61, 0x34, 0xac, 0x6c, 0x7f, 0xae, 0x3c, 0xbb, 0x91, - 0x3c, 0x92, 0xa9, 0x40, 0x48, 0x73, 0x5c, 0x9c, 0xad, 0xbc, 0x1b, 0x26, 0xac, 0xc1, 0xfa, 0x5f, - 0xab, 0xa8, 0x73, 0x77, 0xfb, 0x3e, 0xbd, 0x1e, 0x96, 0x45, 0x01, 0x19, 0x4e, 0x75, 0xfd, 0x4e, - 0xbb, 0x47, 0x06, 0x7b, 0xe3, 0x6b, 0xf5, 0x50, 0x97, 0x61, 0x7f, 0x21, 0xd4, 0xb9, 0xc0, 0x9a, - 0x6e, 0xdd, 0x7d, 0xf9, 0xbf, 0x77, 0x3f, 0xac, 0xef, 0xf6, 0xcc, 0x2a, 0xff, 0x72, 0x32, 0x2d, - 0xdc, 0xde, 0x4e, 0x9e, 0x9c, 0x37, 0xf2, 0x94, 0xde, 0x31, 0xfc, 0x50, 0x96, 0x19, 0x8a, 0x2c, - 0x36, 0x42, 0x98, 0x39, 0xfb, 0x3d, 0x32, 0xb0, 0xc6, 0x07, 0x1a, 0x7d, 0x55, 0x83, 0x13, 0x83, - 0xd9, 0x2f, 0x69, 0xf7, 0x6f, 0x69, 0x09, 0x88, 0x38, 0x41, 0xc7, 0xd2, 0xa7, 0xde, 0xdd, 0x09, - 0x7c, 0xab, 0xe1, 0xf7, 0x6d, 0xeb, 0xca, 0x4d, 0x6b, 0x34, 0x39, 0x59, 0xbb, 0xe4, 0x74, 0xed, - 0x92, 0x1f, 0x6b, 0x97, 0x2c, 0x37, 0x6e, 0xeb, 0x74, 0xe3, 0xb6, 0xbe, 0x6d, 0xdc, 0xd6, 0xa7, - 0xe7, 0xb1, 0xc0, 0xa4, 0x0c, 0xfc, 0x50, 0xa6, 0x4c, 0xaa, 0x54, 0x2a, 0xa1, 0x8e, 0xe6, 0x3c, - 0x50, 0x2c, 0x02, 0x38, 0xda, 0x7e, 0xe6, 0xc7, 0xcf, 0xd8, 0x67, 0x66, 0xde, 0x33, 0xc3, 0x45, - 0x0e, 0x2a, 0xd8, 0xd7, 0x2d, 0x3d, 0xf9, 0x15, 0x00, 0x00, 0xff, 0xff, 0xf9, 0xde, 0x16, 0x6a, - 0x11, 0x03, 0x00, 0x00, +var fileDescriptor_95c6723303c4bcf6 = []byte{ + // 450 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x52, 0xb1, 0x8e, 0xd3, 0x40, + 0x10, 0xcd, 0x72, 0xe1, 0x70, 0x16, 0x10, 0xb0, 0x3a, 0xc0, 0x44, 0xba, 0x75, 0x14, 0x1a, 0x23, + 0x38, 0xaf, 0x02, 0x48, 0x08, 0xe8, 0x02, 0x48, 0x40, 0xe9, 0x50, 0x20, 0x9a, 0xc8, 0x76, 0xd6, + 0xf6, 0x4a, 0xb1, 0xd7, 0xb2, 0xc7, 0x27, 0xd2, 0xf1, 0x09, 0x29, 0xf9, 0xa4, 0x2b, 0xaf, 0xa4, + 0x32, 0x28, 0xe9, 0x28, 0xef, 0x0b, 0x90, 0x77, 0xed, 0xc3, 0x47, 0x40, 0x74, 0xbb, 0xf3, 0xde, + 0xbc, 0x37, 0xf3, 0x34, 0xf8, 0x41, 0xc8, 0xb9, 0xe7, 0x17, 0x90, 0x7b, 0x01, 0x08, 0x99, 0x32, + 0xfd, 0x65, 0xc7, 0x13, 0x9f, 0x83, 0x37, 0x61, 0x3c, 0x93, 0x41, 0xec, 0x64, 0xb9, 0x04, 0x49, + 0x0e, 0x2f, 0x52, 0x1d, 0xfd, 0x75, 0x1a, 0xea, 0xf0, 0x20, 0x92, 0x91, 0x54, 0x4c, 0x56, 0xbf, + 0x74, 0xd3, 0x90, 0x46, 0x52, 0x46, 0x4b, 0xce, 0xd4, 0xcf, 0x2f, 0x43, 0xb6, 0x28, 0x73, 0x4f, + 0xb5, 0x6b, 0xdc, 0xfa, 0x13, 0x07, 0x91, 0xf0, 0x02, 0xbc, 0x24, 0xd3, 0x84, 0xf1, 0xba, 0x8f, + 0x07, 0x6f, 0xea, 0x29, 0xde, 0xa5, 0xa1, 0x24, 0x14, 0x63, 0xb1, 0xe0, 0x29, 0x88, 0x50, 0xf0, + 0xdc, 0x44, 0x23, 0x64, 0x0f, 0xdc, 0x4e, 0x85, 0x7c, 0xc4, 0xb8, 0x00, 0x2f, 0x87, 0x79, 0x2d, + 0x63, 0x5e, 0x1a, 0x21, 0xfb, 0xea, 0xe3, 0xa1, 0xa3, 0x3d, 0x9c, 0xd6, 0xc3, 0xf9, 0xd0, 0x7a, + 0x4c, 0x0f, 0x4f, 0x2a, 0xab, 0x77, 0x56, 0x59, 0xb7, 0x56, 0x5e, 0xb2, 0x7c, 0x31, 0xfe, 0xdd, + 0x3b, 0x5e, 0x7f, 0xb7, 0x90, 0x3b, 0x50, 0x85, 0x9a, 0x4e, 0x62, 0x6c, 0xb4, 0xa3, 0x9b, 0x7b, + 0x4a, 0xf7, 0xde, 0x8e, 0xee, 0xeb, 0x86, 0x30, 0x9d, 0xd4, 0xb2, 0x3f, 0x2b, 0x8b, 0xb4, 0x2d, + 0x8f, 0x64, 0x22, 0x80, 0x27, 0x19, 0xac, 0xce, 0x2a, 0xeb, 0x86, 0x36, 0x6b, 0xb1, 0xf1, 0xd7, + 0xda, 0xea, 0x5c, 0x9d, 0xdc, 0xc7, 0xd7, 0x83, 0x32, 0xcf, 0x79, 0x0a, 0x73, 0x15, 0xbf, 0xd9, + 0x1f, 0x21, 0x7b, 0xcf, 0xbd, 0xd6, 0x14, 0x55, 0x18, 0xe4, 0x0b, 0xc2, 0xe6, 0x05, 0xd6, 0xbc, + 0xb3, 0xf7, 0xe5, 0xff, 0xee, 0xfd, 0xb0, 0xd9, 0xdb, 0xd2, 0xa3, 0xfc, 0x4b, 0x49, 0xa7, 0x70, + 0xbb, 0xeb, 0x3c, 0x3b, 0x4f, 0xe4, 0x29, 0xbe, 0xa3, 0xf9, 0x81, 0x2c, 0x53, 0x10, 0x69, 0xa4, + 0x1b, 0xf9, 0xc2, 0xdc, 0x1f, 0x21, 0xdb, 0x70, 0x0f, 0x14, 0xfa, 0xaa, 0x01, 0x67, 0x1a, 0x23, + 0x2f, 0xf1, 0xf0, 0x6f, 0x6e, 0x31, 0x17, 0x51, 0x0c, 0xa6, 0xa1, 0x56, 0xbd, 0xbb, 0x63, 0xf8, + 0x56, 0xc1, 0xef, 0xfb, 0xc6, 0x95, 0x9b, 0xc6, 0x74, 0x76, 0xb2, 0xa1, 0xe8, 0x74, 0x43, 0xd1, + 0x8f, 0x0d, 0x45, 0xeb, 0x2d, 0xed, 0x9d, 0x6e, 0x69, 0xef, 0xdb, 0x96, 0xf6, 0x3e, 0x3d, 0x8f, + 0x04, 0xc4, 0xa5, 0xef, 0x04, 0x32, 0x61, 0xb2, 0x48, 0x64, 0x21, 0x8a, 0xa3, 0x65, 0x7d, 0xcf, + 0x21, 0xe7, 0x47, 0xdd, 0x33, 0x3f, 0x7e, 0xc6, 0x3e, 0xb7, 0xb7, 0x0e, 0xab, 0x8c, 0x17, 0xfe, + 0xbe, 0x4a, 0xe9, 0xc9, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc2, 0x5c, 0x01, 0x9b, 0x11, 0x03, + 0x00, 0x00, } func (m *EpochInfo) Marshal() (dAtA []byte, err error) { diff --git a/x/feeabs/types/feepool.pb.go b/x/feeabs/types/feepool.pb.go deleted file mode 100644 index 0f33e7ae..00000000 --- a/x/feeabs/types/feepool.pb.go +++ /dev/null @@ -1,46 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: feeabstraction/absfee/v1beta1/feepool.proto - -package types - -import ( - fmt "fmt" - _ "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/cosmos/gogoproto/proto" - _ "google.golang.org/genproto/googleapis/api/annotations" - math "math" -) - -// 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 - -func init() { - proto.RegisterFile("feeabstraction/absfee/v1beta1/feepool.proto", fileDescriptor_aeac12e01fe4cbff) -} - -var fileDescriptor_aeac12e01fe4cbff = []byte{ - // 218 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x8f, 0x31, 0x4e, 0xc5, 0x30, - 0x0c, 0x86, 0xdb, 0x85, 0x81, 0x11, 0x31, 0x3d, 0x41, 0x0e, 0x00, 0x7a, 0xb1, 0x2a, 0x06, 0xc4, - 0xca, 0x15, 0xd8, 0xd8, 0x9c, 0xca, 0x0d, 0x91, 0xda, 0x38, 0xc4, 0x69, 0x45, 0x6f, 0xc1, 0xb1, - 0x18, 0x3b, 0x32, 0xa2, 0xf6, 0x22, 0xa8, 0x69, 0x41, 0xb0, 0xbc, 0xcd, 0x92, 0xbf, 0xff, 0xff, - 0xec, 0xf3, 0xdb, 0x86, 0x08, 0x8d, 0xa4, 0x88, 0x75, 0x72, 0xec, 0x01, 0x8d, 0x34, 0x44, 0x30, - 0x54, 0x86, 0x12, 0x56, 0xd0, 0x10, 0x05, 0xe6, 0x56, 0x87, 0xc8, 0x89, 0x2f, 0xae, 0xff, 0xc3, - 0x7a, 0x83, 0xf5, 0x0e, 0x1f, 0x2e, 0x2d, 0x5b, 0xce, 0x24, 0xac, 0xd3, 0x16, 0x3a, 0x5c, 0x59, - 0x66, 0xdb, 0x12, 0x60, 0x70, 0x80, 0xde, 0x73, 0xc2, 0x35, 0x2b, 0xfb, 0xf6, 0xa6, 0x66, 0xe9, - 0x58, 0xc0, 0xa0, 0x10, 0xbc, 0xf6, 0x14, 0xc7, 0x5f, 0x77, 0x40, 0xeb, 0x7c, 0x86, 0x7f, 0xd8, - 0xd3, 0xb7, 0x06, 0x8c, 0xd8, 0xed, 0xbd, 0x8f, 0x4f, 0x1f, 0xb3, 0x2a, 0xa7, 0x59, 0x95, 0x5f, - 0xb3, 0x2a, 0xdf, 0x17, 0x55, 0x4c, 0x8b, 0x2a, 0x3e, 0x17, 0x55, 0x3c, 0x3f, 0x58, 0x97, 0x5e, - 0x7a, 0xa3, 0x6b, 0xee, 0x20, 0xbb, 0x9d, 0x1c, 0x5b, 0x34, 0xb2, 0xfe, 0x7a, 0xfc, 0x5b, 0x3f, - 0xdc, 0xc3, 0x1b, 0x6c, 0x4a, 0x48, 0x63, 0x20, 0x31, 0x67, 0xb9, 0xfb, 0xee, 0x3b, 0x00, 0x00, - 0xff, 0xff, 0xf7, 0xef, 0x9f, 0x4f, 0x35, 0x01, 0x00, 0x00, -} diff --git a/x/feeabs/types/genesis.pb.go b/x/feeabs/types/genesis.pb.go index 979d05eb..c8e72f50 100644 --- a/x/feeabs/types/genesis.pb.go +++ b/x/feeabs/types/genesis.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: feeabstraction/absfee/v1beta1/genesis.proto +// source: feeabstraction/feeabs/v1beta1/genesis.proto package types @@ -25,7 +25,7 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -// Params defines the parameters for the feeabs module. +// GenesisState defines the feeabs module's genesis state. type GenesisState struct { Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params" yaml:"params"` Epochs []EpochInfo `protobuf:"bytes,2,rep,name=epochs,proto3" json:"epochs"` @@ -36,7 +36,7 @@ func (m *GenesisState) Reset() { *m = GenesisState{} } func (m *GenesisState) String() string { return proto.CompactTextString(m) } func (*GenesisState) ProtoMessage() {} func (*GenesisState) Descriptor() ([]byte, []int) { - return fileDescriptor_c85d049bd82004cc, []int{0} + return fileDescriptor_a6133d256fb92bdc, []int{0} } func (m *GenesisState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -87,37 +87,37 @@ func (m *GenesisState) GetPortId() string { } func init() { - proto.RegisterType((*GenesisState)(nil), "feeabstraction.absfee.v1beta1.GenesisState") + proto.RegisterType((*GenesisState)(nil), "feeabstraction.feeabs.v1beta1.GenesisState") } func init() { - proto.RegisterFile("feeabstraction/absfee/v1beta1/genesis.proto", fileDescriptor_c85d049bd82004cc) + proto.RegisterFile("feeabstraction/feeabs/v1beta1/genesis.proto", fileDescriptor_a6133d256fb92bdc) } -var fileDescriptor_c85d049bd82004cc = []byte{ - // 341 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x90, 0xc1, 0x4a, 0xc3, 0x40, - 0x10, 0x86, 0x13, 0x2b, 0x11, 0x53, 0xbd, 0x04, 0xc5, 0x52, 0x34, 0x2d, 0x05, 0x21, 0x2a, 0xcd, - 0xd2, 0x7a, 0x10, 0x3d, 0x16, 0x54, 0x7a, 0x93, 0xd6, 0x93, 0x17, 0x99, 0xa4, 0x93, 0x34, 0xd0, - 0x64, 0xd6, 0xec, 0xb6, 0xd8, 0xb7, 0xf0, 0xa5, 0x84, 0x1e, 0x7b, 0xf4, 0x54, 0xa4, 0x7d, 0x03, - 0x9f, 0x40, 0x92, 0x4d, 0x45, 0x2f, 0xf5, 0xb6, 0x0b, 0xdf, 0xff, 0xcd, 0xcc, 0x6f, 0x5e, 0x04, - 0x88, 0xe0, 0x09, 0x99, 0x82, 0x2f, 0x23, 0x4a, 0x18, 0x78, 0x22, 0x40, 0x64, 0x93, 0x96, 0x87, - 0x12, 0x5a, 0x2c, 0xc4, 0x04, 0x45, 0x24, 0x5c, 0x9e, 0x92, 0x24, 0xeb, 0xe4, 0x2f, 0xec, 0x2a, - 0xd8, 0x2d, 0xe0, 0xea, 0x41, 0x48, 0x21, 0xe5, 0x24, 0xcb, 0x5e, 0x2a, 0x54, 0x3d, 0x0e, 0x89, - 0xc2, 0x11, 0x32, 0xe0, 0x11, 0x83, 0x24, 0x21, 0x09, 0x59, 0xb6, 0x50, 0x56, 0xcf, 0x7d, 0x12, - 0x31, 0x09, 0xe6, 0x81, 0x40, 0xf6, 0x32, 0xc6, 0x74, 0xfa, 0x33, 0x9b, 0x43, 0x18, 0x25, 0x39, - 0xbc, 0x66, 0x37, 0xef, 0xca, 0x21, 0x85, 0x78, 0xed, 0x3d, 0xdb, 0xcc, 0x22, 0x27, 0x7f, 0xa8, - 0xd0, 0xc6, 0xbb, 0x6e, 0xee, 0xdd, 0xab, 0x3b, 0xfb, 0x12, 0x24, 0x5a, 0x8f, 0xa6, 0xa1, 0x5c, - 0x15, 0xbd, 0xae, 0x3b, 0xe5, 0xf6, 0xa9, 0xbb, 0xf1, 0x6e, 0xf7, 0x21, 0x87, 0x3b, 0x87, 0xb3, - 0x45, 0x4d, 0xfb, 0x5a, 0xd4, 0xf6, 0xa7, 0x10, 0x8f, 0x6e, 0x1a, 0x4a, 0xd1, 0xe8, 0x15, 0x2e, - 0xeb, 0xce, 0x34, 0xf2, 0xa9, 0xa2, 0xb2, 0x55, 0x2f, 0x39, 0xe5, 0xb6, 0xf3, 0x8f, 0xf5, 0x36, - 0x83, 0xbb, 0x49, 0x40, 0x9d, 0xed, 0x4c, 0xdc, 0x2b, 0xd2, 0xd6, 0x91, 0xb9, 0xc3, 0x29, 0x95, - 0xcf, 0xd1, 0xa0, 0x52, 0xaa, 0xeb, 0xce, 0x6e, 0xcf, 0xc8, 0xbe, 0xdd, 0x41, 0xa7, 0x3f, 0x5b, - 0xda, 0xfa, 0x7c, 0x69, 0xeb, 0x9f, 0x4b, 0x5b, 0x7f, 0x5b, 0xd9, 0xda, 0x7c, 0x65, 0x6b, 0x1f, - 0x2b, 0x5b, 0x7b, 0xba, 0x0e, 0x23, 0x39, 0x1c, 0x7b, 0xae, 0x4f, 0x31, 0xcb, 0xeb, 0x8e, 0x44, - 0x73, 0x04, 0x9e, 0x60, 0x01, 0x62, 0xf3, 0x77, 0x4b, 0x93, 0x2b, 0xf6, 0xca, 0xd4, 0x5a, 0x4c, - 0x4e, 0x39, 0x0a, 0xcf, 0xc8, 0x3b, 0xba, 0xfc, 0x0e, 0x00, 0x00, 0xff, 0xff, 0x28, 0x8c, 0x15, - 0xc6, 0x28, 0x02, 0x00, 0x00, +var fileDescriptor_a6133d256fb92bdc = []byte{ + // 340 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x90, 0xc1, 0x4a, 0xeb, 0x40, + 0x14, 0x86, 0x33, 0xb7, 0x97, 0x5c, 0x6e, 0xaa, 0x9b, 0xa0, 0x58, 0x8a, 0xa6, 0xa5, 0x20, 0x44, + 0xa5, 0x19, 0x5a, 0x17, 0xa2, 0xcb, 0x82, 0x4a, 0x77, 0xd2, 0xba, 0x72, 0x23, 0x93, 0xf4, 0x74, + 0x3a, 0xd0, 0xe4, 0x8c, 0x99, 0x69, 0xb1, 0x6f, 0xe1, 0x4b, 0x09, 0x5d, 0x76, 0xe9, 0xaa, 0x48, + 0xfb, 0x06, 0x3e, 0x81, 0x24, 0x93, 0x8a, 0x6e, 0xea, 0x6e, 0x0e, 0x7c, 0xff, 0x77, 0xe6, 0xfc, + 0xce, 0xd9, 0x10, 0x80, 0x85, 0x4a, 0xa7, 0x2c, 0xd2, 0x02, 0x13, 0x6a, 0x46, 0x3a, 0x6d, 0x85, + 0xa0, 0x59, 0x8b, 0x72, 0x48, 0x40, 0x09, 0x15, 0xc8, 0x14, 0x35, 0xba, 0x47, 0x3f, 0xe1, 0xc0, + 0x8c, 0x41, 0x01, 0x57, 0xf7, 0x38, 0x72, 0xcc, 0x49, 0x9a, 0xbd, 0x4c, 0xa8, 0x7a, 0xc8, 0x11, + 0xf9, 0x18, 0x28, 0x93, 0x82, 0xb2, 0x24, 0x41, 0xcd, 0xb2, 0x6c, 0xa1, 0xac, 0x9e, 0x46, 0xa8, + 0x62, 0x54, 0x34, 0x64, 0x0a, 0xe8, 0xd3, 0x04, 0xd2, 0xd9, 0xd7, 0x6e, 0xc9, 0xb8, 0x48, 0x72, + 0x78, 0xc3, 0x6e, 0xff, 0xab, 0x64, 0x29, 0x8b, 0x37, 0xde, 0x93, 0xed, 0x2c, 0x48, 0x8c, 0x46, + 0x06, 0x6d, 0xbc, 0x12, 0x67, 0xe7, 0xd6, 0xdc, 0xd9, 0xd7, 0x4c, 0x83, 0x7b, 0xef, 0xd8, 0xc6, + 0x55, 0x21, 0x75, 0xe2, 0x97, 0xdb, 0xc7, 0xc1, 0xd6, 0xbb, 0x83, 0xbb, 0x1c, 0xee, 0xec, 0xcf, + 0x97, 0x35, 0xeb, 0x63, 0x59, 0xdb, 0x9d, 0xb1, 0x78, 0x7c, 0xd5, 0x30, 0x8a, 0x46, 0xaf, 0x70, + 0xb9, 0x37, 0x8e, 0x9d, 0x6f, 0x55, 0x95, 0x3f, 0xf5, 0x92, 0x5f, 0x6e, 0xfb, 0xbf, 0x58, 0xaf, + 0x33, 0xb8, 0x9b, 0x0c, 0xb1, 0xf3, 0x37, 0x13, 0xf7, 0x8a, 0xb4, 0x7b, 0xe0, 0xfc, 0x93, 0x98, + 0xea, 0x47, 0x31, 0xa8, 0x94, 0xea, 0xc4, 0xff, 0xdf, 0xb3, 0xb3, 0xb1, 0x3b, 0xe8, 0xf4, 0xe7, + 0x2b, 0x8f, 0x2c, 0x56, 0x1e, 0x79, 0x5f, 0x79, 0xe4, 0x65, 0xed, 0x59, 0x8b, 0xb5, 0x67, 0xbd, + 0xad, 0x3d, 0xeb, 0xe1, 0x92, 0x0b, 0x3d, 0x9a, 0x84, 0x41, 0x84, 0x31, 0xcd, 0xeb, 0x16, 0xaa, + 0x39, 0xce, 0xea, 0x18, 0x02, 0x34, 0xbf, 0xb7, 0x34, 0xbd, 0xa0, 0xcf, 0x9b, 0xaa, 0xf4, 0x4c, + 0x82, 0x0a, 0xed, 0xbc, 0xa3, 0xf3, 0xcf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x26, 0x61, 0xae, 0xd2, + 0x28, 0x02, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/x/feeabs/types/osmosisibc.pb.go b/x/feeabs/types/osmosisibc.pb.go index 23c870d1..9dca16c0 100644 --- a/x/feeabs/types/osmosisibc.pb.go +++ b/x/feeabs/types/osmosisibc.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: feeabstraction/absfee/v1beta1/osmosisibc.proto +// source: feeabstraction/feeabs/v1beta1/osmosisibc.proto package types @@ -41,7 +41,7 @@ func (m *QueryArithmeticTwapToNowRequest) Reset() { *m = QueryArithmetic func (m *QueryArithmeticTwapToNowRequest) String() string { return proto.CompactTextString(m) } func (*QueryArithmeticTwapToNowRequest) ProtoMessage() {} func (*QueryArithmeticTwapToNowRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d7e956854d14a746, []int{0} + return fileDescriptor_29d8511a7187d317, []int{0} } func (m *QueryArithmeticTwapToNowRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -106,7 +106,7 @@ func (m *QueryArithmeticTwapToNowResponse) Reset() { *m = QueryArithmeti func (m *QueryArithmeticTwapToNowResponse) String() string { return proto.CompactTextString(m) } func (*QueryArithmeticTwapToNowResponse) ProtoMessage() {} func (*QueryArithmeticTwapToNowResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d7e956854d14a746, []int{1} + return fileDescriptor_29d8511a7187d317, []int{1} } func (m *QueryArithmeticTwapToNowResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -144,7 +144,7 @@ func (m *InterchainQueryRequest) Reset() { *m = InterchainQueryRequest{} func (m *InterchainQueryRequest) String() string { return proto.CompactTextString(m) } func (*InterchainQueryRequest) ProtoMessage() {} func (*InterchainQueryRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d7e956854d14a746, []int{2} + return fileDescriptor_29d8511a7187d317, []int{2} } func (m *InterchainQueryRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -198,7 +198,7 @@ func (m *InterchainQueryPacketData) Reset() { *m = InterchainQueryPacket func (m *InterchainQueryPacketData) String() string { return proto.CompactTextString(m) } func (*InterchainQueryPacketData) ProtoMessage() {} func (*InterchainQueryPacketData) Descriptor() ([]byte, []int) { - return fileDescriptor_d7e956854d14a746, []int{3} + return fileDescriptor_29d8511a7187d317, []int{3} } func (m *InterchainQueryPacketData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -251,7 +251,7 @@ func (m *InterchainQueryPacketAck) Reset() { *m = InterchainQueryPacketA func (m *InterchainQueryPacketAck) String() string { return proto.CompactTextString(m) } func (*InterchainQueryPacketAck) ProtoMessage() {} func (*InterchainQueryPacketAck) Descriptor() ([]byte, []int) { - return fileDescriptor_d7e956854d14a746, []int{4} + return fileDescriptor_29d8511a7187d317, []int{4} } func (m *InterchainQueryPacketAck) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -295,7 +295,7 @@ func (m *InterchainQueryRequestPacket) Reset() { *m = InterchainQueryReq func (m *InterchainQueryRequestPacket) String() string { return proto.CompactTextString(m) } func (*InterchainQueryRequestPacket) ProtoMessage() {} func (*InterchainQueryRequestPacket) Descriptor() ([]byte, []int) { - return fileDescriptor_d7e956854d14a746, []int{5} + return fileDescriptor_29d8511a7187d317, []int{5} } func (m *InterchainQueryRequestPacket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -341,7 +341,7 @@ func (m *CosmosQuery) Reset() { *m = CosmosQuery{} } func (m *CosmosQuery) String() string { return proto.CompactTextString(m) } func (*CosmosQuery) ProtoMessage() {} func (*CosmosQuery) Descriptor() ([]byte, []int) { - return fileDescriptor_d7e956854d14a746, []int{6} + return fileDescriptor_29d8511a7187d317, []int{6} } func (m *CosmosQuery) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -387,7 +387,7 @@ func (m *CosmosResponse) Reset() { *m = CosmosResponse{} } func (m *CosmosResponse) String() string { return proto.CompactTextString(m) } func (*CosmosResponse) ProtoMessage() {} func (*CosmosResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d7e956854d14a746, []int{7} + return fileDescriptor_29d8511a7187d317, []int{7} } func (m *CosmosResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -424,59 +424,59 @@ func (m *CosmosResponse) GetResponses() []types.ResponseQuery { } func init() { - proto.RegisterType((*QueryArithmeticTwapToNowRequest)(nil), "feeabstraction.absfee.v1beta1.QueryArithmeticTwapToNowRequest") - proto.RegisterType((*QueryArithmeticTwapToNowResponse)(nil), "feeabstraction.absfee.v1beta1.QueryArithmeticTwapToNowResponse") - proto.RegisterType((*InterchainQueryRequest)(nil), "feeabstraction.absfee.v1beta1.InterchainQueryRequest") - proto.RegisterType((*InterchainQueryPacketData)(nil), "feeabstraction.absfee.v1beta1.InterchainQueryPacketData") - proto.RegisterType((*InterchainQueryPacketAck)(nil), "feeabstraction.absfee.v1beta1.InterchainQueryPacketAck") - proto.RegisterType((*InterchainQueryRequestPacket)(nil), "feeabstraction.absfee.v1beta1.InterchainQueryRequestPacket") - proto.RegisterType((*CosmosQuery)(nil), "feeabstraction.absfee.v1beta1.CosmosQuery") - proto.RegisterType((*CosmosResponse)(nil), "feeabstraction.absfee.v1beta1.CosmosResponse") + proto.RegisterType((*QueryArithmeticTwapToNowRequest)(nil), "feeabstraction.feeabs.v1beta1.QueryArithmeticTwapToNowRequest") + proto.RegisterType((*QueryArithmeticTwapToNowResponse)(nil), "feeabstraction.feeabs.v1beta1.QueryArithmeticTwapToNowResponse") + proto.RegisterType((*InterchainQueryRequest)(nil), "feeabstraction.feeabs.v1beta1.InterchainQueryRequest") + proto.RegisterType((*InterchainQueryPacketData)(nil), "feeabstraction.feeabs.v1beta1.InterchainQueryPacketData") + proto.RegisterType((*InterchainQueryPacketAck)(nil), "feeabstraction.feeabs.v1beta1.InterchainQueryPacketAck") + proto.RegisterType((*InterchainQueryRequestPacket)(nil), "feeabstraction.feeabs.v1beta1.InterchainQueryRequestPacket") + proto.RegisterType((*CosmosQuery)(nil), "feeabstraction.feeabs.v1beta1.CosmosQuery") + proto.RegisterType((*CosmosResponse)(nil), "feeabstraction.feeabs.v1beta1.CosmosResponse") } func init() { - proto.RegisterFile("feeabstraction/absfee/v1beta1/osmosisibc.proto", fileDescriptor_d7e956854d14a746) + proto.RegisterFile("feeabstraction/feeabs/v1beta1/osmosisibc.proto", fileDescriptor_29d8511a7187d317) } -var fileDescriptor_d7e956854d14a746 = []byte{ - // 591 bytes of a gzipped FileDescriptorProto +var fileDescriptor_29d8511a7187d317 = []byte{ + // 587 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x94, 0xc1, 0x6e, 0xd3, 0x4c, - 0x10, 0xc7, 0xe3, 0xaf, 0x51, 0x3f, 0xb2, 0x41, 0x45, 0x58, 0xa8, 0x84, 0xd2, 0xd8, 0x91, 0x0f, - 0x28, 0x97, 0xee, 0xaa, 0x45, 0x08, 0xc1, 0x05, 0x9a, 0xf6, 0x40, 0x2f, 0x15, 0x98, 0x48, 0x20, - 0x2e, 0xd1, 0xda, 0xd9, 0x24, 0xab, 0xc6, 0x5e, 0xc7, 0x3b, 0x69, 0xc8, 0x5b, 0xf4, 0xc2, 0x3b, - 0xf5, 0xd8, 0x03, 0x07, 0xc4, 0x21, 0xa0, 0xe4, 0x0d, 0xfa, 0x04, 0x68, 0xd7, 0xeb, 0x24, 0x6d, - 0x0d, 0xa7, 0xcc, 0xce, 0xfc, 0xe7, 0xb7, 0x33, 0x93, 0xf1, 0x22, 0xdc, 0x63, 0x8c, 0x06, 0x12, - 0x52, 0x1a, 0x02, 0x17, 0x31, 0xa1, 0x81, 0xec, 0x31, 0x46, 0xce, 0xf7, 0x03, 0x06, 0x74, 0x9f, - 0x08, 0x19, 0x09, 0xc9, 0x25, 0x0f, 0x42, 0x9c, 0xa4, 0x02, 0x84, 0x5d, 0xbf, 0xa9, 0xc7, 0x99, - 0x1e, 0x1b, 0xfd, 0xce, 0xa3, 0xbe, 0xe8, 0x0b, 0xad, 0x24, 0xca, 0xca, 0x92, 0x76, 0xdc, 0xbe, - 0x10, 0xfd, 0x21, 0x23, 0xfa, 0x14, 0x8c, 0x7b, 0x04, 0x78, 0xc4, 0x24, 0xd0, 0x28, 0x31, 0x82, - 0x5d, 0x23, 0xa0, 0x09, 0x27, 0x34, 0x8e, 0x05, 0x50, 0x05, 0x97, 0x26, 0xfa, 0x14, 0x58, 0xdc, - 0x65, 0x69, 0xc4, 0x63, 0x20, 0x34, 0x08, 0x39, 0x81, 0x69, 0xc2, 0x4c, 0xd0, 0xfb, 0x6e, 0x21, - 0xf7, 0xc3, 0x98, 0xa5, 0xd3, 0xc3, 0x94, 0xc3, 0x20, 0x62, 0xc0, 0xc3, 0xf6, 0x84, 0x26, 0x6d, - 0x71, 0x2a, 0x26, 0x3e, 0x1b, 0x8d, 0x99, 0x04, 0xfb, 0x31, 0xfa, 0x3f, 0x11, 0x62, 0xd8, 0xe1, - 0xdd, 0x9a, 0xd5, 0xb0, 0x9a, 0x65, 0x7f, 0x53, 0x1d, 0x4f, 0xba, 0x76, 0x1d, 0xa1, 0x80, 0x4a, - 0xd6, 0xa1, 0x52, 0x32, 0xa8, 0xfd, 0xd7, 0xb0, 0x9a, 0x15, 0xbf, 0xa2, 0x3c, 0x87, 0xca, 0x61, - 0xbb, 0xa8, 0x3a, 0x1a, 0x0b, 0xc8, 0xe3, 0x1b, 0x3a, 0x8e, 0xb4, 0x2b, 0x13, 0x7c, 0x46, 0x48, - 0x02, 0x4d, 0xa1, 0xa3, 0x1a, 0xaa, 0x95, 0x1b, 0x56, 0xb3, 0x7a, 0xb0, 0x83, 0xb3, 0x66, 0x70, - 0xde, 0x2d, 0x6e, 0xe7, 0xdd, 0xb6, 0xea, 0x97, 0x33, 0xb7, 0x74, 0x3d, 0x73, 0x1f, 0x4e, 0x69, - 0x34, 0x7c, 0xed, 0xad, 0x72, 0xbd, 0x8b, 0x5f, 0xae, 0xe5, 0x57, 0xb4, 0x43, 0xc9, 0xbd, 0x6f, - 0x16, 0x6a, 0xfc, 0xbd, 0x2d, 0x99, 0x88, 0x58, 0x32, 0x7b, 0x84, 0x1e, 0xd0, 0x65, 0xb8, 0x03, - 0x13, 0x9a, 0xe8, 0xfe, 0x2a, 0xad, 0x77, 0xea, 0x9e, 0x9f, 0x33, 0xf7, 0x59, 0x9f, 0xc3, 0x60, - 0x1c, 0xe0, 0x50, 0x44, 0x24, 0xd4, 0xff, 0xa5, 0xf9, 0xd9, 0x93, 0xdd, 0x33, 0x33, 0xc6, 0x63, - 0x16, 0x5e, 0xcf, 0xdc, 0xed, 0xac, 0xa2, 0x5b, 0x38, 0xcf, 0xdf, 0xa2, 0x37, 0xee, 0xf7, 0xde, - 0xa2, 0xed, 0x93, 0x18, 0x58, 0x1a, 0x0e, 0x28, 0x8f, 0x75, 0x81, 0xf9, 0x90, 0x6d, 0x54, 0xee, - 0x52, 0xa0, 0xba, 0x82, 0xfb, 0xbe, 0xb6, 0x95, 0x2f, 0xa1, 0x30, 0x30, 0x93, 0xd5, 0xb6, 0x77, - 0x84, 0x9e, 0xdc, 0x22, 0xbc, 0xa7, 0xe1, 0x19, 0x83, 0x63, 0x93, 0x50, 0x04, 0x89, 0x58, 0x24, - 0x72, 0x88, 0xb2, 0x3d, 0x8c, 0x6a, 0x85, 0x90, 0xc3, 0xf0, 0xac, 0x88, 0xe1, 0x4d, 0xd0, 0x6e, - 0x71, 0xd9, 0x59, 0x9a, 0xfd, 0x09, 0xdd, 0x4b, 0x33, 0x87, 0xac, 0x59, 0x8d, 0x8d, 0x66, 0xf5, - 0xe0, 0x05, 0xfe, 0xe7, 0xa6, 0xe3, 0x62, 0x5c, 0xab, 0xac, 0x26, 0xef, 0x2f, 0x61, 0xde, 0x29, - 0xaa, 0x1e, 0xe9, 0x89, 0x6b, 0x95, 0xfd, 0xe6, 0xce, 0x3d, 0x75, 0xbc, 0xda, 0x6e, 0xac, 0xb6, - 0x1b, 0x1b, 0x94, 0x4e, 0xb8, 0xc3, 0x6b, 0xa3, 0xad, 0x8c, 0xb7, 0x5c, 0x82, 0x16, 0xaa, 0xa4, - 0xc6, 0xce, 0x99, 0x4e, 0x01, 0x33, 0x53, 0xac, 0x43, 0x57, 0x69, 0xad, 0x8f, 0x97, 0x73, 0xc7, - 0xba, 0x9a, 0x3b, 0xd6, 0xef, 0xb9, 0x63, 0x5d, 0x2c, 0x9c, 0xd2, 0xd5, 0xc2, 0x29, 0xfd, 0x58, - 0x38, 0xa5, 0x2f, 0xaf, 0xd6, 0x36, 0xc8, 0x3c, 0x06, 0x7b, 0x43, 0x1a, 0x48, 0xd2, 0x63, 0x6c, - 0x6f, 0xfd, 0xe1, 0x38, 0x7f, 0x49, 0xbe, 0x92, 0x6c, 0x64, 0xd9, 0x62, 0x05, 0x9b, 0xfa, 0x03, - 0x78, 0xfe, 0x27, 0x00, 0x00, 0xff, 0xff, 0xa5, 0x1d, 0x13, 0x0a, 0x63, 0x04, 0x00, 0x00, + 0x10, 0xc7, 0xe3, 0xaf, 0x51, 0x3f, 0xb2, 0x41, 0x45, 0x58, 0xa8, 0x84, 0xd0, 0xd8, 0x91, 0x0f, + 0x28, 0x97, 0xac, 0xd5, 0x22, 0x84, 0xe0, 0x02, 0x49, 0x7b, 0xa0, 0x97, 0x0a, 0x4c, 0x24, 0x10, + 0x97, 0x68, 0xed, 0x6c, 0x92, 0x55, 0x62, 0xaf, 0xe3, 0x9d, 0x34, 0xe4, 0x2d, 0x7a, 0xe1, 0x9d, + 0x7a, 0xec, 0x81, 0x03, 0xe2, 0x10, 0x50, 0xf2, 0x06, 0x7d, 0x02, 0xb4, 0xeb, 0x75, 0x92, 0xb6, + 0x86, 0x53, 0x66, 0x67, 0xfe, 0xf3, 0xdb, 0x9d, 0xc9, 0x78, 0x10, 0xee, 0x53, 0x4a, 0x7c, 0x01, + 0x09, 0x09, 0x80, 0xf1, 0xc8, 0x4d, 0x8f, 0xee, 0xf9, 0xa1, 0x4f, 0x81, 0x1c, 0xba, 0x5c, 0x84, + 0x5c, 0x30, 0xc1, 0xfc, 0x00, 0xc7, 0x09, 0x07, 0x6e, 0xd6, 0x6e, 0xea, 0x75, 0x3a, 0xd6, 0xfa, + 0xea, 0xa3, 0x01, 0x1f, 0x70, 0xa5, 0x74, 0xa5, 0x95, 0x26, 0x55, 0xed, 0x01, 0xe7, 0x83, 0x31, + 0x75, 0xd5, 0xc9, 0x9f, 0xf6, 0x5d, 0x60, 0x21, 0x15, 0x40, 0xc2, 0x58, 0x0b, 0x0e, 0xb4, 0x80, + 0xc4, 0xcc, 0x25, 0x51, 0xc4, 0x81, 0x48, 0xb8, 0xd0, 0xd1, 0xa7, 0x40, 0xa3, 0x1e, 0x4d, 0x42, + 0x16, 0x81, 0x4b, 0xfc, 0x80, 0xb9, 0x30, 0x8f, 0xa9, 0x0e, 0x3a, 0xdf, 0x0d, 0x64, 0x7f, 0x98, + 0xd2, 0x64, 0xde, 0x4a, 0x18, 0x0c, 0x43, 0x0a, 0x2c, 0xe8, 0xcc, 0x48, 0xdc, 0xe1, 0x67, 0x7c, + 0xe6, 0xd1, 0xc9, 0x94, 0x0a, 0x30, 0x1f, 0xa3, 0xff, 0x63, 0xce, 0xc7, 0x5d, 0xd6, 0xab, 0x18, + 0x75, 0xa3, 0x51, 0xf4, 0x76, 0xe5, 0xf1, 0xb4, 0x67, 0xd6, 0x10, 0xf2, 0x89, 0xa0, 0x5d, 0x22, + 0x04, 0x85, 0xca, 0x7f, 0x75, 0xa3, 0x51, 0xf2, 0x4a, 0xd2, 0xd3, 0x92, 0x0e, 0xd3, 0x46, 0xe5, + 0xc9, 0x94, 0x43, 0x16, 0xdf, 0x51, 0x71, 0xa4, 0x5c, 0xa9, 0xe0, 0x33, 0x42, 0x02, 0x48, 0x02, + 0x5d, 0x59, 0x50, 0xa5, 0x58, 0x37, 0x1a, 0xe5, 0xa3, 0x2a, 0x4e, 0x8b, 0xc1, 0x59, 0xb5, 0xb8, + 0x93, 0x55, 0xdb, 0xae, 0x5d, 0x2e, 0xec, 0xc2, 0xf5, 0xc2, 0x7e, 0x38, 0x27, 0xe1, 0xf8, 0xb5, + 0xb3, 0xc9, 0x75, 0x2e, 0x7e, 0xd9, 0x86, 0x57, 0x52, 0x0e, 0x29, 0x77, 0xbe, 0x19, 0xa8, 0xfe, + 0xf7, 0xb2, 0x44, 0xcc, 0x23, 0x41, 0xcd, 0x09, 0x7a, 0x40, 0xd6, 0xe1, 0x2e, 0xcc, 0x48, 0xac, + 0xea, 0x2b, 0xb5, 0xdf, 0xc9, 0x7b, 0x7e, 0x2e, 0xec, 0x67, 0x03, 0x06, 0xc3, 0xa9, 0x8f, 0x03, + 0x1e, 0xba, 0x81, 0xfa, 0x2f, 0xf5, 0x4f, 0x53, 0xf4, 0x46, 0xba, 0x8d, 0x27, 0x34, 0xb8, 0x5e, + 0xd8, 0xfb, 0xe9, 0x8b, 0x6e, 0xe1, 0x1c, 0x6f, 0x8f, 0xdc, 0xb8, 0xdf, 0x79, 0x8b, 0xf6, 0x4f, + 0x23, 0xa0, 0x49, 0x30, 0x24, 0x2c, 0x52, 0x0f, 0xcc, 0x9a, 0x6c, 0xa2, 0x62, 0x8f, 0x00, 0x51, + 0x2f, 0xb8, 0xef, 0x29, 0x5b, 0xfa, 0x62, 0x02, 0x43, 0xdd, 0x59, 0x65, 0x3b, 0xc7, 0xe8, 0xc9, + 0x2d, 0xc2, 0x7b, 0x12, 0x8c, 0x28, 0x9c, 0xe8, 0x84, 0x3c, 0x48, 0x48, 0x43, 0x9e, 0x41, 0xa4, + 0xed, 0x60, 0x54, 0xc9, 0x85, 0xb4, 0x82, 0x51, 0x1e, 0xc3, 0x99, 0xa1, 0x83, 0xfc, 0x67, 0xa7, + 0x69, 0xe6, 0x27, 0x74, 0x2f, 0x49, 0x1d, 0xa2, 0x62, 0xd4, 0x77, 0x1a, 0xe5, 0xa3, 0x17, 0xf8, + 0x9f, 0x93, 0x8e, 0xf3, 0x71, 0xed, 0xa2, 0xec, 0xbc, 0xb7, 0x86, 0x39, 0x67, 0xa8, 0x7c, 0xac, + 0x3a, 0xae, 0x54, 0xe6, 0x9b, 0x3b, 0xf7, 0xd4, 0xf0, 0x66, 0xba, 0xb1, 0x9c, 0x6e, 0xac, 0x51, + 0x2a, 0xe1, 0x0e, 0xaf, 0x83, 0xf6, 0x52, 0xde, 0x7a, 0x08, 0xda, 0xa8, 0x94, 0x68, 0x3b, 0x63, + 0x5a, 0x39, 0xcc, 0x54, 0xb1, 0x0d, 0xdd, 0xa4, 0xb5, 0x3f, 0x5e, 0x2e, 0x2d, 0xe3, 0x6a, 0x69, + 0x19, 0xbf, 0x97, 0x96, 0x71, 0xb1, 0xb2, 0x0a, 0x57, 0x2b, 0xab, 0xf0, 0x63, 0x65, 0x15, 0xbe, + 0xbc, 0xda, 0x9a, 0x20, 0xbd, 0x0c, 0x9a, 0x63, 0xb9, 0x21, 0xfa, 0x94, 0x36, 0xb7, 0x17, 0xc7, + 0xf9, 0x4b, 0xf7, 0x6b, 0xb6, 0x3d, 0xd4, 0x60, 0xf9, 0xbb, 0xea, 0x03, 0x78, 0xfe, 0x27, 0x00, + 0x00, 0xff, 0xff, 0xb6, 0x1f, 0x20, 0x17, 0x63, 0x04, 0x00, 0x00, } func (m *QueryArithmeticTwapToNowRequest) Marshal() (dAtA []byte, err error) { diff --git a/x/feeabs/types/params.pb.go b/x/feeabs/types/params.pb.go index 4c548340..75374b55 100644 --- a/x/feeabs/types/params.pb.go +++ b/x/feeabs/types/params.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: feeabstraction/absfee/v1beta1/params.proto +// source: feeabstraction/feeabs/v1beta1/params.proto package types @@ -46,7 +46,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_64e66a0978c84086, []int{0} + return fileDescriptor_e9fa451f85bd9084, []int{0} } func (m *Params) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -118,41 +118,40 @@ func (m *Params) GetOsmosisCrosschainSwapAddress() string { } func init() { - proto.RegisterType((*Params)(nil), "feeabstraction.absfee.v1beta1.Params") + proto.RegisterType((*Params)(nil), "feeabstraction.feeabs.v1beta1.Params") } func init() { - proto.RegisterFile("feeabstraction/absfee/v1beta1/params.proto", fileDescriptor_64e66a0978c84086) + proto.RegisterFile("feeabstraction/feeabs/v1beta1/params.proto", fileDescriptor_e9fa451f85bd9084) } -var fileDescriptor_64e66a0978c84086 = []byte{ - // 401 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x92, 0xcf, 0x6f, 0xd3, 0x30, - 0x14, 0xc7, 0x9b, 0x01, 0x95, 0xe6, 0x63, 0x54, 0x44, 0x54, 0x6d, 0x01, 0x71, 0x42, 0x93, 0x56, - 0x53, 0x21, 0x84, 0x38, 0xc2, 0xc4, 0xa1, 0x17, 0x18, 0x6c, 0x27, 0x2e, 0xd6, 0xb3, 0xfb, 0x92, - 0x58, 0x6a, 0x6c, 0xd7, 0x76, 0x5a, 0xf6, 0x5f, 0xf0, 0x2f, 0x71, 0xe3, 0xb8, 0x23, 0x47, 0xd4, - 0xfe, 0x23, 0xc8, 0x3f, 0x56, 0x95, 0x5b, 0x92, 0xef, 0xe7, 0xf3, 0xde, 0x57, 0xca, 0x23, 0x17, - 0x0d, 0x22, 0x70, 0xe7, 0x2d, 0x08, 0x2f, 0xb5, 0xa2, 0xc0, 0x5d, 0x83, 0x48, 0x37, 0x73, 0x8e, - 0x1e, 0xe6, 0xd4, 0x80, 0x85, 0xde, 0xcd, 0x8c, 0xd5, 0x5e, 0x97, 0xe7, 0xff, 0xb3, 0xb3, 0xc4, - 0xce, 0x32, 0x3b, 0x9d, 0xb4, 0xba, 0xd5, 0x91, 0xa4, 0xe1, 0x29, 0x49, 0xd3, 0xb3, 0x56, 0xeb, - 0x76, 0x85, 0x14, 0x8c, 0xa4, 0xa0, 0x94, 0xf6, 0x10, 0xdc, 0x3c, 0x72, 0x7a, 0x21, 0xb4, 0xeb, - 0xb5, 0xa3, 0x1c, 0x1c, 0xd2, 0xf5, 0x80, 0xf6, 0xee, 0x68, 0x75, 0x2b, 0x55, 0x84, 0x33, 0x5b, - 0xe7, 0x49, 0xf1, 0x8d, 0x0f, 0x0d, 0x5d, 0x0e, 0xf6, 0x28, 0x7f, 0xf9, 0xeb, 0x84, 0x8c, 0xaf, - 0x63, 0xdf, 0xf2, 0x2d, 0x79, 0x16, 0xd4, 0x0d, 0x32, 0xc9, 0x05, 0x2e, 0x99, 0x54, 0x2c, 0xee, - 0x91, 0xae, 0x2a, 0x5e, 0x14, 0xaf, 0x4e, 0xbf, 0x4d, 0x52, 0xbc, 0x08, 0xe9, 0x42, 0x7d, 0x49, - 0x59, 0xd0, 0x32, 0xc6, 0x62, 0x17, 0xe6, 0xb7, 0x60, 0x98, 0x01, 0xdf, 0x55, 0x27, 0x49, 0xcb, - 0xf1, 0xd7, 0x90, 0xde, 0x6e, 0xc1, 0x5c, 0x83, 0xef, 0xca, 0x73, 0x42, 0x44, 0x07, 0x52, 0x31, - 0x05, 0x3d, 0x56, 0x8f, 0x22, 0x79, 0x1a, 0xbf, 0x7c, 0x86, 0x1e, 0xcb, 0xd7, 0x64, 0x22, 0xb9, - 0x60, 0xde, 0x82, 0x72, 0x0d, 0x5a, 0x26, 0x3a, 0x50, 0x0a, 0x57, 0xd5, 0xe3, 0x08, 0x96, 0x92, - 0x8b, 0xdb, 0x1c, 0x5d, 0xa5, 0xa4, 0x9c, 0x93, 0xa7, 0xc1, 0x48, 0x1d, 0xa4, 0x58, 0x1f, 0x94, - 0x27, 0x07, 0x25, 0x36, 0x58, 0x88, 0xf5, 0x83, 0xf2, 0x89, 0x3c, 0x7f, 0xa8, 0x2e, 0xac, 0x76, - 0x2e, 0x15, 0x72, 0xa1, 0x3f, 0x2c, 0x97, 0x16, 0x9d, 0xab, 0xc6, 0x51, 0x3e, 0xcb, 0xd8, 0xd5, - 0x81, 0xba, 0xd9, 0x82, 0xf9, 0x90, 0x98, 0x8f, 0x37, 0xbf, 0x77, 0x75, 0x71, 0xbf, 0xab, 0x8b, - 0xbf, 0xbb, 0xba, 0xf8, 0xb9, 0xaf, 0x47, 0xf7, 0xfb, 0x7a, 0xf4, 0x67, 0x5f, 0x8f, 0xbe, 0xbf, - 0x6f, 0xa5, 0xef, 0x06, 0x3e, 0x13, 0xba, 0xa7, 0x79, 0xc4, 0xe5, 0x0a, 0xb8, 0xa3, 0x0d, 0xe2, - 0xe5, 0xf1, 0x05, 0x6d, 0xde, 0xd1, 0x1f, 0x34, 0x5d, 0x0a, 0xf5, 0x77, 0x06, 0x1d, 0x1f, 0xc7, - 0xff, 0xf3, 0xe6, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x76, 0x05, 0x27, 0xd0, 0x6c, 0x02, 0x00, - 0x00, +var fileDescriptor_e9fa451f85bd9084 = []byte{ + // 397 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x92, 0xbf, 0x8e, 0x13, 0x31, + 0x10, 0xc6, 0xb3, 0x07, 0x44, 0x3a, 0x97, 0xab, 0x20, 0x56, 0xd1, 0xdd, 0x82, 0xa8, 0xd0, 0x49, + 0x17, 0x13, 0x21, 0x84, 0x28, 0xe1, 0x44, 0x91, 0x06, 0x0e, 0xee, 0x2a, 0x1a, 0x6b, 0xec, 0x4c, + 0x76, 0x2d, 0x65, 0x6d, 0xc7, 0xf6, 0x26, 0xdc, 0x5b, 0xf0, 0x4a, 0x74, 0x94, 0x29, 0x29, 0x51, + 0xf2, 0x22, 0xc8, 0x7f, 0x12, 0x85, 0x2e, 0x93, 0xef, 0xf7, 0x1b, 0x7f, 0xd2, 0x0e, 0xb9, 0x5a, + 0x20, 0x02, 0x77, 0xde, 0x82, 0xf0, 0x52, 0x2b, 0x9a, 0x46, 0xba, 0x9e, 0x72, 0xf4, 0x30, 0xa5, + 0x06, 0x2c, 0x74, 0x6e, 0x62, 0xac, 0xf6, 0xba, 0xbc, 0xfc, 0x9f, 0x9d, 0xa4, 0x71, 0x92, 0xd9, + 0xf1, 0xa8, 0xd1, 0x8d, 0x8e, 0x24, 0x0d, 0xbf, 0x92, 0x34, 0xbe, 0x68, 0xb4, 0x6e, 0x96, 0x48, + 0xc1, 0x48, 0x0a, 0x4a, 0x69, 0x0f, 0xc1, 0xcd, 0x2b, 0xc7, 0x57, 0x42, 0xbb, 0x4e, 0x3b, 0xca, + 0xc1, 0x21, 0x5d, 0xf5, 0x68, 0x1f, 0x4e, 0x9e, 0x6e, 0xa4, 0x8a, 0x70, 0x66, 0xeb, 0xbc, 0x29, + 0x4e, 0xbc, 0x5f, 0xd0, 0x79, 0x6f, 0x4f, 0xf2, 0x97, 0xbf, 0xce, 0xc8, 0xf0, 0x36, 0xf6, 0x2d, + 0xdf, 0x92, 0x67, 0x41, 0x5d, 0x23, 0x93, 0x5c, 0xe0, 0x9c, 0x49, 0xc5, 0xe2, 0x3b, 0xd2, 0x55, + 0xc5, 0x8b, 0xe2, 0xd5, 0xf9, 0xb7, 0x51, 0x8a, 0x67, 0x21, 0x9d, 0xa9, 0x2f, 0x29, 0x0b, 0x5a, + 0xc6, 0x58, 0xec, 0xc2, 0xfc, 0x06, 0x0c, 0x33, 0xe0, 0xdb, 0xea, 0x2c, 0x69, 0x39, 0xfe, 0x1a, + 0xd2, 0xfb, 0x0d, 0x98, 0x5b, 0xf0, 0x6d, 0x79, 0x49, 0x88, 0x68, 0x41, 0x2a, 0xa6, 0xa0, 0xc3, + 0xea, 0x51, 0x24, 0xcf, 0xe3, 0x3f, 0x9f, 0xa1, 0xc3, 0xf2, 0x35, 0x19, 0x49, 0x2e, 0x98, 0xb7, + 0xa0, 0xdc, 0x02, 0x2d, 0x13, 0x2d, 0x28, 0x85, 0xcb, 0xea, 0x71, 0x04, 0x4b, 0xc9, 0xc5, 0x7d, + 0x8e, 0x6e, 0x52, 0x52, 0x4e, 0xc9, 0xd3, 0x60, 0xa4, 0x0e, 0x52, 0xac, 0x8e, 0xca, 0x93, 0xa3, + 0x12, 0x1b, 0xcc, 0xc4, 0xea, 0xa0, 0x7c, 0x22, 0xcf, 0x0f, 0xd5, 0x85, 0xd5, 0xce, 0xa5, 0x42, + 0x2e, 0xf4, 0x87, 0xf9, 0xdc, 0xa2, 0x73, 0xd5, 0x30, 0xca, 0x17, 0x19, 0xbb, 0x39, 0x52, 0x77, + 0x1b, 0x30, 0x1f, 0x12, 0xf3, 0xf1, 0xee, 0xf7, 0xae, 0x2e, 0xb6, 0xbb, 0xba, 0xf8, 0xbb, 0xab, + 0x8b, 0x9f, 0xfb, 0x7a, 0xb0, 0xdd, 0xd7, 0x83, 0x3f, 0xfb, 0x7a, 0xf0, 0xfd, 0x7d, 0x23, 0x7d, + 0xdb, 0xf3, 0x89, 0xd0, 0x1d, 0xcd, 0x2b, 0xae, 0x97, 0xe1, 0x54, 0x16, 0x88, 0xd7, 0xa7, 0x17, + 0xb4, 0x7e, 0x47, 0x7f, 0x1c, 0xce, 0xc8, 0x3f, 0x18, 0x74, 0x7c, 0x18, 0xbf, 0xcf, 0x9b, 0x7f, + 0x01, 0x00, 0x00, 0xff, 0xff, 0x41, 0x72, 0xdb, 0x7b, 0x6c, 0x02, 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { diff --git a/x/feeabs/types/proposal.pb.go b/x/feeabs/types/proposal.pb.go index 076b4482..edaab0ef 100644 --- a/x/feeabs/types/proposal.pb.go +++ b/x/feeabs/types/proposal.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: feeabstraction/absfee/v1beta1/proposal.proto +// source: feeabstraction/feeabs/v1beta1/proposal.proto package types @@ -40,7 +40,7 @@ func (m *HostChainFeeAbsConfig) Reset() { *m = HostChainFeeAbsConfig{} } func (m *HostChainFeeAbsConfig) String() string { return proto.CompactTextString(m) } func (*HostChainFeeAbsConfig) ProtoMessage() {} func (*HostChainFeeAbsConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_b23c77c2b5aa1f89, []int{0} + return fileDescriptor_c397b73ee3101036, []int{0} } func (m *HostChainFeeAbsConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -110,7 +110,7 @@ func (m *AddHostZoneProposal) Reset() { *m = AddHostZoneProposal{} } func (m *AddHostZoneProposal) String() string { return proto.CompactTextString(m) } func (*AddHostZoneProposal) ProtoMessage() {} func (*AddHostZoneProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_b23c77c2b5aa1f89, []int{1} + return fileDescriptor_c397b73ee3101036, []int{1} } func (m *AddHostZoneProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -152,7 +152,7 @@ func (m *DeleteHostZoneProposal) Reset() { *m = DeleteHostZoneProposal{} func (m *DeleteHostZoneProposal) String() string { return proto.CompactTextString(m) } func (*DeleteHostZoneProposal) ProtoMessage() {} func (*DeleteHostZoneProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_b23c77c2b5aa1f89, []int{2} + return fileDescriptor_c397b73ee3101036, []int{2} } func (m *DeleteHostZoneProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -194,7 +194,7 @@ func (m *SetHostZoneProposal) Reset() { *m = SetHostZoneProposal{} } func (m *SetHostZoneProposal) String() string { return proto.CompactTextString(m) } func (*SetHostZoneProposal) ProtoMessage() {} func (*SetHostZoneProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_b23c77c2b5aa1f89, []int{3} + return fileDescriptor_c397b73ee3101036, []int{3} } func (m *SetHostZoneProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -224,48 +224,48 @@ func (m *SetHostZoneProposal) XXX_DiscardUnknown() { var xxx_messageInfo_SetHostZoneProposal proto.InternalMessageInfo func init() { - proto.RegisterType((*HostChainFeeAbsConfig)(nil), "feeabstraction.absfee.v1beta1.HostChainFeeAbsConfig") - proto.RegisterType((*AddHostZoneProposal)(nil), "feeabstraction.absfee.v1beta1.AddHostZoneProposal") - proto.RegisterType((*DeleteHostZoneProposal)(nil), "feeabstraction.absfee.v1beta1.DeleteHostZoneProposal") - proto.RegisterType((*SetHostZoneProposal)(nil), "feeabstraction.absfee.v1beta1.SetHostZoneProposal") + proto.RegisterType((*HostChainFeeAbsConfig)(nil), "feeabstraction.feeabs.v1beta1.HostChainFeeAbsConfig") + proto.RegisterType((*AddHostZoneProposal)(nil), "feeabstraction.feeabs.v1beta1.AddHostZoneProposal") + proto.RegisterType((*DeleteHostZoneProposal)(nil), "feeabstraction.feeabs.v1beta1.DeleteHostZoneProposal") + proto.RegisterType((*SetHostZoneProposal)(nil), "feeabstraction.feeabs.v1beta1.SetHostZoneProposal") } func init() { - proto.RegisterFile("feeabstraction/absfee/v1beta1/proposal.proto", fileDescriptor_b23c77c2b5aa1f89) + proto.RegisterFile("feeabstraction/feeabs/v1beta1/proposal.proto", fileDescriptor_c397b73ee3101036) } -var fileDescriptor_b23c77c2b5aa1f89 = []byte{ - // 470 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x93, 0xbf, 0x6e, 0xd4, 0x40, - 0x10, 0xc6, 0xcf, 0xe4, 0x38, 0x92, 0x4d, 0x81, 0x30, 0x47, 0x62, 0x25, 0xe0, 0x3b, 0xb9, 0xba, - 0x82, 0x78, 0x15, 0xfe, 0x08, 0x11, 0xd1, 0xe4, 0x8f, 0x10, 0xe9, 0x22, 0x87, 0x2a, 0x8d, 0xd9, - 0xb5, 0xc7, 0xbe, 0x15, 0xeb, 0x1d, 0xcb, 0xbb, 0x09, 0x84, 0x27, 0xa0, 0xe4, 0x11, 0x78, 0x09, - 0x4a, 0x7a, 0xca, 0x2b, 0xa9, 0x10, 0xba, 0x7b, 0x03, 0x9e, 0x00, 0xad, 0xbd, 0xa0, 0x43, 0x42, - 0x54, 0x34, 0xe9, 0xfc, 0xcd, 0xfe, 0x66, 0xfc, 0xf9, 0x1b, 0x2f, 0xb9, 0x5f, 0x00, 0x30, 0xae, - 0x4d, 0xc3, 0x32, 0x23, 0x50, 0x51, 0xc6, 0x75, 0x01, 0x40, 0x2f, 0x76, 0x39, 0x18, 0xb6, 0x4b, - 0xeb, 0x06, 0x6b, 0xd4, 0x4c, 0xc6, 0x75, 0x83, 0x06, 0xfd, 0x7b, 0x7f, 0xd2, 0x71, 0x47, 0xc7, - 0x8e, 0xde, 0x1a, 0x96, 0x58, 0x62, 0x4b, 0x52, 0xfb, 0xd4, 0x35, 0x6d, 0x8d, 0x4a, 0xc4, 0x52, - 0x02, 0x6d, 0x15, 0x3f, 0x2f, 0xa8, 0x11, 0x15, 0x68, 0xc3, 0xaa, 0xda, 0x01, 0x77, 0x1d, 0xc0, - 0x6a, 0x41, 0x99, 0x52, 0x68, 0x98, 0x1d, 0xae, 0xbb, 0xd3, 0xe8, 0xb3, 0x47, 0xee, 0xbc, 0x40, - 0x6d, 0x0e, 0xa7, 0x4c, 0xa8, 0xe7, 0x00, 0xfb, 0x5c, 0x1f, 0xa2, 0x2a, 0x44, 0xe9, 0x3f, 0x26, - 0x6b, 0x82, 0x67, 0x69, 0x0e, 0x0a, 0xab, 0xc0, 0x1b, 0x7b, 0x93, 0xb5, 0x83, 0xe0, 0xc7, 0xb7, - 0xd1, 0xf0, 0x92, 0x55, 0x72, 0x2f, 0x62, 0x52, 0xe2, 0x1b, 0xc8, 0x53, 0x83, 0xaf, 0x41, 0x45, - 0xc9, 0xaa, 0xe0, 0xd9, 0x91, 0x25, 0xfd, 0x67, 0x64, 0x1b, 0x75, 0x85, 0x5a, 0xe8, 0xb4, 0x46, - 0x94, 0x1d, 0xd0, 0x4d, 0x49, 0x85, 0x0a, 0xae, 0xd9, 0x41, 0xc9, 0xa6, 0x43, 0x4e, 0x10, 0xe5, - 0x4b, 0x0b, 0xb4, 0xbd, 0xc7, 0xca, 0xdf, 0x24, 0x37, 0xda, 0x2e, 0x91, 0x07, 0x2b, 0x63, 0x6f, - 0xd2, 0x4f, 0x06, 0x56, 0x1e, 0xe7, 0xfe, 0x06, 0x19, 0x14, 0x0d, 0xbe, 0x03, 0x15, 0xf4, 0xc7, - 0xde, 0x64, 0x35, 0x71, 0x2a, 0xfa, 0xe4, 0x91, 0xdb, 0xfb, 0x79, 0x6e, 0x3f, 0xe1, 0x0c, 0x15, - 0x9c, 0xb8, 0x44, 0xfd, 0x21, 0xb9, 0x6e, 0x84, 0x91, 0xd0, 0x39, 0x4f, 0x3a, 0xe1, 0x8f, 0xc9, - 0x7a, 0x0e, 0x3a, 0x6b, 0x44, 0x6d, 0x33, 0x70, 0x66, 0x96, 0x4b, 0xfe, 0x2b, 0x72, 0x6b, 0x8a, - 0xda, 0xa4, 0x99, 0xcd, 0x23, 0xcd, 0xda, 0x28, 0x5a, 0x2b, 0xeb, 0x0f, 0x1e, 0xc5, 0xff, 0xdc, - 0x4f, 0xfc, 0xd7, 0x18, 0x93, 0x9b, 0xd3, 0x5f, 0xe5, 0xae, 0xb0, 0xd7, 0x7f, 0xff, 0x71, 0xd4, - 0x8b, 0x34, 0xd9, 0x38, 0x02, 0x09, 0x06, 0xfe, 0x9b, 0xf3, 0xed, 0xe5, 0x7d, 0xad, 0xb4, 0xe7, - 0xbf, 0xb7, 0xe2, 0x5e, 0x6a, 0xc3, 0x3a, 0x05, 0x73, 0xd5, 0xc2, 0x3a, 0x38, 0xfd, 0x32, 0x0f, - 0xbd, 0xd9, 0x3c, 0xf4, 0xbe, 0xcf, 0x43, 0xef, 0xc3, 0x22, 0xec, 0xcd, 0x16, 0x61, 0xef, 0xeb, - 0x22, 0xec, 0x9d, 0x3d, 0x2d, 0x85, 0x99, 0x9e, 0xf3, 0x38, 0xc3, 0x8a, 0xba, 0x7f, 0x6a, 0x47, - 0x32, 0xae, 0x69, 0x01, 0xb0, 0xb3, 0x7c, 0xf3, 0x2e, 0x9e, 0xd0, 0xb7, 0xb4, 0xb3, 0x44, 0xcd, - 0x65, 0x0d, 0x9a, 0x0f, 0xda, 0x0b, 0xf0, 0xf0, 0x67, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc2, 0x48, - 0xe3, 0x9f, 0xa4, 0x03, 0x00, 0x00, +var fileDescriptor_c397b73ee3101036 = []byte{ + // 466 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x93, 0xbd, 0x6e, 0xd4, 0x40, + 0x10, 0xc7, 0xcf, 0xe4, 0x38, 0x92, 0x4d, 0x81, 0x30, 0x47, 0x62, 0x25, 0xe0, 0x3b, 0xb9, 0xba, + 0x82, 0x78, 0x15, 0x3e, 0x84, 0x88, 0x68, 0xf2, 0x21, 0x44, 0xba, 0xc8, 0xa1, 0x4a, 0x63, 0xd6, + 0xf6, 0xd8, 0xb7, 0x62, 0xbd, 0x63, 0x79, 0x37, 0x81, 0xf0, 0x04, 0x94, 0x3c, 0x02, 0x2f, 0x41, + 0x49, 0x4f, 0x99, 0x92, 0x0a, 0xa1, 0xbb, 0x37, 0xe0, 0x09, 0xd0, 0x7a, 0xf7, 0xd0, 0x21, 0x21, + 0x2a, 0x1a, 0x3a, 0xff, 0x67, 0x7e, 0x33, 0x1e, 0xff, 0xc7, 0x43, 0xee, 0x97, 0x00, 0x2c, 0x53, + 0xba, 0x65, 0xb9, 0xe6, 0x28, 0xa9, 0x95, 0xf4, 0x62, 0x37, 0x03, 0xcd, 0x76, 0x69, 0xd3, 0x62, + 0x83, 0x8a, 0x89, 0xb8, 0x69, 0x51, 0xa3, 0x7f, 0xef, 0x77, 0x3a, 0xb6, 0x32, 0x76, 0xf4, 0xd6, + 0xb0, 0xc2, 0x0a, 0x3b, 0x92, 0x9a, 0x27, 0x5b, 0xb4, 0x35, 0xaa, 0x10, 0x2b, 0x01, 0xb4, 0x53, + 0xd9, 0x79, 0x49, 0x35, 0xaf, 0x41, 0x69, 0x56, 0x37, 0x0e, 0xb8, 0xeb, 0x00, 0xd6, 0x70, 0xca, + 0xa4, 0x44, 0xcd, 0x4c, 0x73, 0x65, 0xb3, 0xd1, 0x67, 0x8f, 0xdc, 0x79, 0x81, 0x4a, 0x1f, 0x4e, + 0x19, 0x97, 0xcf, 0x01, 0xf6, 0x33, 0x75, 0x88, 0xb2, 0xe4, 0x95, 0xff, 0x98, 0xac, 0xf1, 0x2c, + 0x4f, 0x0b, 0x90, 0x58, 0x07, 0xde, 0xd8, 0x9b, 0xac, 0x1d, 0x04, 0x3f, 0xbe, 0x8d, 0x86, 0x97, + 0xac, 0x16, 0x7b, 0x11, 0x13, 0x02, 0xdf, 0x40, 0x91, 0x6a, 0x7c, 0x0d, 0x32, 0x4a, 0x56, 0x79, + 0x96, 0x1f, 0x19, 0xd2, 0x7f, 0x46, 0xb6, 0x51, 0xd5, 0xa8, 0xb8, 0x4a, 0x1b, 0x44, 0x61, 0x01, + 0xdb, 0x25, 0xe5, 0x32, 0xb8, 0x66, 0x1a, 0x25, 0x9b, 0x0e, 0x39, 0x41, 0x14, 0x2f, 0x0d, 0xd0, + 0xd5, 0x1e, 0x4b, 0x7f, 0x93, 0xdc, 0xe8, 0xaa, 0x78, 0x11, 0xac, 0x8c, 0xbd, 0x49, 0x3f, 0x19, + 0x18, 0x79, 0x5c, 0xf8, 0x1b, 0x64, 0x50, 0xb6, 0xf8, 0x0e, 0x64, 0xd0, 0x1f, 0x7b, 0x93, 0xd5, + 0xc4, 0xa9, 0xe8, 0x93, 0x47, 0x6e, 0xef, 0x17, 0x85, 0xf9, 0x84, 0x33, 0x94, 0x70, 0xe2, 0x1c, + 0xf5, 0x87, 0xe4, 0xba, 0xe6, 0x5a, 0x80, 0x9d, 0x3c, 0xb1, 0xc2, 0x1f, 0x93, 0xf5, 0x02, 0x54, + 0xde, 0xf2, 0xc6, 0x78, 0xe0, 0x86, 0x59, 0x0e, 0xf9, 0xaf, 0xc8, 0xad, 0x29, 0x2a, 0x9d, 0xe6, + 0xc6, 0x8f, 0x34, 0xef, 0xac, 0xe8, 0x46, 0x59, 0x7f, 0xf0, 0x28, 0xfe, 0xeb, 0x7e, 0xe2, 0x3f, + 0xda, 0x98, 0xdc, 0x9c, 0x2e, 0xc2, 0x36, 0xb0, 0xd7, 0x7f, 0xff, 0x71, 0xd4, 0x8b, 0x14, 0xd9, + 0x38, 0x02, 0x01, 0x1a, 0xfe, 0xd9, 0xe4, 0xdb, 0xcb, 0xfb, 0x5a, 0xe9, 0xf2, 0xbf, 0xb6, 0xe2, + 0x5e, 0x6a, 0xcc, 0x3a, 0x05, 0xfd, 0xbf, 0x99, 0x75, 0x70, 0xfa, 0x65, 0x16, 0x7a, 0x57, 0xb3, + 0xd0, 0xfb, 0x3e, 0x0b, 0xbd, 0x0f, 0xf3, 0xb0, 0x77, 0x35, 0x0f, 0x7b, 0x5f, 0xe7, 0x61, 0xef, + 0xec, 0x69, 0xc5, 0xf5, 0xf4, 0x3c, 0x8b, 0x73, 0xac, 0xa9, 0xfb, 0xa7, 0x76, 0x84, 0x39, 0xb1, + 0x12, 0x60, 0x67, 0xf9, 0xf2, 0x2e, 0x9e, 0xd0, 0xb7, 0x8b, 0xf3, 0xd3, 0x97, 0x0d, 0xa8, 0x6c, + 0xd0, 0x1d, 0xc0, 0xc3, 0x9f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x57, 0x2f, 0xac, 0x41, 0xa4, 0x03, + 0x00, 0x00, } func (m *HostChainFeeAbsConfig) Marshal() (dAtA []byte, err error) { diff --git a/x/feeabs/types/query.pb.go b/x/feeabs/types/query.pb.go index 7b213661..28c63d41 100644 --- a/x/feeabs/types/query.pb.go +++ b/x/feeabs/types/query.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: feeabstraction/absfee/v1beta1/query.proto +// source: feeabstraction/feeabs/v1beta1/query.proto package types @@ -39,7 +39,7 @@ func (m *QueryHostChainConfigRequest) Reset() { *m = QueryHostChainConfi func (m *QueryHostChainConfigRequest) String() string { return proto.CompactTextString(m) } func (*QueryHostChainConfigRequest) ProtoMessage() {} func (*QueryHostChainConfigRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0a3dde61db3cbb0e, []int{0} + return fileDescriptor_7cd2729237176027, []int{0} } func (m *QueryHostChainConfigRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -83,7 +83,7 @@ func (m *QueryHostChainConfigResponse) Reset() { *m = QueryHostChainConf func (m *QueryHostChainConfigResponse) String() string { return proto.CompactTextString(m) } func (*QueryHostChainConfigResponse) ProtoMessage() {} func (*QueryHostChainConfigResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0a3dde61db3cbb0e, []int{1} + return fileDescriptor_7cd2729237176027, []int{1} } func (m *QueryHostChainConfigResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -119,8 +119,8 @@ func (m *QueryHostChainConfigResponse) GetHostChainConfig() HostChainFeeAbsConfi return HostChainFeeAbsConfig{} } -// QueryOsmosisSpotPriceRequest is the request type for the Query/Feeabs RPC -// method. +// QueryOsmosisArithmeticTwapRequest is the request type for the Query/Feeabs +// RPC method. type QueryOsmosisArithmeticTwapRequest struct { IbcDenom string `protobuf:"bytes,1,opt,name=ibc_denom,json=ibcDenom,proto3" json:"ibc_denom,omitempty"` } @@ -129,7 +129,7 @@ func (m *QueryOsmosisArithmeticTwapRequest) Reset() { *m = QueryOsmosisA func (m *QueryOsmosisArithmeticTwapRequest) String() string { return proto.CompactTextString(m) } func (*QueryOsmosisArithmeticTwapRequest) ProtoMessage() {} func (*QueryOsmosisArithmeticTwapRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0a3dde61db3cbb0e, []int{2} + return fileDescriptor_7cd2729237176027, []int{2} } func (m *QueryOsmosisArithmeticTwapRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -173,7 +173,7 @@ func (m *QueryOsmosisArithmeticTwapResponse) Reset() { *m = QueryOsmosis func (m *QueryOsmosisArithmeticTwapResponse) String() string { return proto.CompactTextString(m) } func (*QueryOsmosisArithmeticTwapResponse) ProtoMessage() {} func (*QueryOsmosisArithmeticTwapResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0a3dde61db3cbb0e, []int{3} + return fileDescriptor_7cd2729237176027, []int{3} } func (m *QueryOsmosisArithmeticTwapResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -211,7 +211,7 @@ func (m *QueryFeeabsModuleBalacesRequest) Reset() { *m = QueryFeeabsModu func (m *QueryFeeabsModuleBalacesRequest) String() string { return proto.CompactTextString(m) } func (*QueryFeeabsModuleBalacesRequest) ProtoMessage() {} func (*QueryFeeabsModuleBalacesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0a3dde61db3cbb0e, []int{4} + return fileDescriptor_7cd2729237176027, []int{4} } func (m *QueryFeeabsModuleBalacesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -249,7 +249,7 @@ func (m *QueryFeeabsModuleBalacesResponse) Reset() { *m = QueryFeeabsMod func (m *QueryFeeabsModuleBalacesResponse) String() string { return proto.CompactTextString(m) } func (*QueryFeeabsModuleBalacesResponse) ProtoMessage() {} func (*QueryFeeabsModuleBalacesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0a3dde61db3cbb0e, []int{5} + return fileDescriptor_7cd2729237176027, []int{5} } func (m *QueryFeeabsModuleBalacesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -299,7 +299,7 @@ func (m *AllQueryHostChainConfigRequest) Reset() { *m = AllQueryHostChai func (m *AllQueryHostChainConfigRequest) String() string { return proto.CompactTextString(m) } func (*AllQueryHostChainConfigRequest) ProtoMessage() {} func (*AllQueryHostChainConfigRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0a3dde61db3cbb0e, []int{6} + return fileDescriptor_7cd2729237176027, []int{6} } func (m *AllQueryHostChainConfigRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -336,7 +336,7 @@ func (m *AllQueryHostChainConfigResponse) Reset() { *m = AllQueryHostCha func (m *AllQueryHostChainConfigResponse) String() string { return proto.CompactTextString(m) } func (*AllQueryHostChainConfigResponse) ProtoMessage() {} func (*AllQueryHostChainConfigResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0a3dde61db3cbb0e, []int{7} + return fileDescriptor_7cd2729237176027, []int{7} } func (m *AllQueryHostChainConfigResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -373,70 +373,69 @@ func (m *AllQueryHostChainConfigResponse) GetAllHostChainConfig() []HostChainFee } func init() { - proto.RegisterType((*QueryHostChainConfigRequest)(nil), "feeabstraction.absfee.v1beta1.QueryHostChainConfigRequest") - proto.RegisterType((*QueryHostChainConfigResponse)(nil), "feeabstraction.absfee.v1beta1.QueryHostChainConfigResponse") - proto.RegisterType((*QueryOsmosisArithmeticTwapRequest)(nil), "feeabstraction.absfee.v1beta1.QueryOsmosisArithmeticTwapRequest") - proto.RegisterType((*QueryOsmosisArithmeticTwapResponse)(nil), "feeabstraction.absfee.v1beta1.QueryOsmosisArithmeticTwapResponse") - proto.RegisterType((*QueryFeeabsModuleBalacesRequest)(nil), "feeabstraction.absfee.v1beta1.QueryFeeabsModuleBalacesRequest") - proto.RegisterType((*QueryFeeabsModuleBalacesResponse)(nil), "feeabstraction.absfee.v1beta1.QueryFeeabsModuleBalacesResponse") - proto.RegisterType((*AllQueryHostChainConfigRequest)(nil), "feeabstraction.absfee.v1beta1.AllQueryHostChainConfigRequest") - proto.RegisterType((*AllQueryHostChainConfigResponse)(nil), "feeabstraction.absfee.v1beta1.AllQueryHostChainConfigResponse") + proto.RegisterType((*QueryHostChainConfigRequest)(nil), "feeabstraction.feeabs.v1beta1.QueryHostChainConfigRequest") + proto.RegisterType((*QueryHostChainConfigResponse)(nil), "feeabstraction.feeabs.v1beta1.QueryHostChainConfigResponse") + proto.RegisterType((*QueryOsmosisArithmeticTwapRequest)(nil), "feeabstraction.feeabs.v1beta1.QueryOsmosisArithmeticTwapRequest") + proto.RegisterType((*QueryOsmosisArithmeticTwapResponse)(nil), "feeabstraction.feeabs.v1beta1.QueryOsmosisArithmeticTwapResponse") + proto.RegisterType((*QueryFeeabsModuleBalacesRequest)(nil), "feeabstraction.feeabs.v1beta1.QueryFeeabsModuleBalacesRequest") + proto.RegisterType((*QueryFeeabsModuleBalacesResponse)(nil), "feeabstraction.feeabs.v1beta1.QueryFeeabsModuleBalacesResponse") + proto.RegisterType((*AllQueryHostChainConfigRequest)(nil), "feeabstraction.feeabs.v1beta1.AllQueryHostChainConfigRequest") + proto.RegisterType((*AllQueryHostChainConfigResponse)(nil), "feeabstraction.feeabs.v1beta1.AllQueryHostChainConfigResponse") } func init() { - proto.RegisterFile("feeabstraction/absfee/v1beta1/query.proto", fileDescriptor_0a3dde61db3cbb0e) + proto.RegisterFile("feeabstraction/feeabs/v1beta1/query.proto", fileDescriptor_7cd2729237176027) } -var fileDescriptor_0a3dde61db3cbb0e = []byte{ - // 758 bytes of a gzipped FileDescriptorProto +var fileDescriptor_7cd2729237176027 = []byte{ + // 752 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0x4f, 0x6b, 0x13, 0x4d, - 0x1c, 0xce, 0xb4, 0xbc, 0x7d, 0xdb, 0x29, 0xbc, 0xe1, 0x1d, 0x5a, 0x89, 0x69, 0xdd, 0xa4, 0x8b, + 0x1c, 0xce, 0xb4, 0xbc, 0x7d, 0xdb, 0x29, 0xbc, 0xe1, 0x1d, 0x5a, 0x89, 0x69, 0xdd, 0xa4, 0x83, 0x48, 0x2d, 0xdd, 0x5d, 0x1b, 0x05, 0x6b, 0xc4, 0x9a, 0x3f, 0xa5, 0xf4, 0x22, 0x62, 0xf4, 0xe4, - 0x25, 0xcc, 0x6e, 0x26, 0xc9, 0xe2, 0x64, 0x67, 0x9b, 0xd9, 0xb4, 0x56, 0xf1, 0xd2, 0xbb, 0x20, + 0x25, 0xcc, 0x6e, 0xa6, 0xc9, 0xe2, 0x64, 0x67, 0x9b, 0xd9, 0xb4, 0x56, 0xf1, 0xd2, 0xbb, 0x20, 0x78, 0xf0, 0x03, 0x78, 0xf3, 0xe6, 0xcd, 0x8f, 0x50, 0x50, 0xa1, 0xe0, 0x45, 0x14, 0xa2, 0xb4, - 0xfd, 0x04, 0xfd, 0x04, 0xb2, 0xb3, 0x93, 0x6d, 0x93, 0xa6, 0x9b, 0x10, 0x4f, 0xc9, 0x32, 0xcf, - 0xef, 0xf9, 0x3d, 0xcf, 0xef, 0xf7, 0xec, 0x2c, 0xbc, 0x5e, 0x25, 0x04, 0x9b, 0xdc, 0x6b, 0x62, - 0xcb, 0xb3, 0x99, 0x63, 0x60, 0x93, 0x57, 0x09, 0x31, 0xb6, 0x57, 0x4c, 0xe2, 0xe1, 0x15, 0x63, - 0xab, 0x45, 0x9a, 0xbb, 0xba, 0xdb, 0x64, 0x1e, 0x43, 0x57, 0xba, 0xa1, 0x7a, 0x00, 0xd5, 0x25, - 0x34, 0x39, 0x53, 0x63, 0x35, 0x26, 0x90, 0x86, 0xff, 0x2f, 0x28, 0x4a, 0xce, 0xd7, 0x18, 0xab, - 0x51, 0x62, 0x60, 0xd7, 0x36, 0xb0, 0xe3, 0x30, 0x0f, 0xfb, 0xb5, 0x5c, 0x9e, 0x2e, 0x45, 0x77, - 0x77, 0x71, 0x13, 0x37, 0x3a, 0x58, 0x3d, 0x1a, 0xcb, 0x78, 0x83, 0x71, 0x9b, 0xdb, 0xa6, 0x25, - 0xf1, 0xcb, 0x03, 0xb8, 0x9b, 0xcc, 0x65, 0x1c, 0x53, 0x89, 0x56, 0x2c, 0x41, 0x60, 0x98, 0x98, - 0x9f, 0x62, 0x2c, 0x66, 0x3b, 0xc1, 0xb9, 0x9a, 0x85, 0x73, 0x8f, 0xfc, 0x59, 0x6c, 0x32, 0xee, - 0x15, 0xeb, 0xd8, 0x76, 0x8a, 0xcc, 0xa9, 0xda, 0xb5, 0x12, 0xd9, 0x6a, 0x11, 0xee, 0xa1, 0x39, - 0x38, 0x65, 0x9b, 0x56, 0xb9, 0x42, 0x1c, 0xd6, 0x48, 0x80, 0x34, 0x58, 0x9c, 0x2a, 0x4d, 0xda, - 0xa6, 0xb5, 0xee, 0x3f, 0xab, 0xef, 0x01, 0x9c, 0xef, 0x5f, 0xcc, 0x5d, 0xe6, 0x70, 0x82, 0xf6, - 0x00, 0xfc, 0xbf, 0xce, 0xb8, 0x57, 0xb6, 0xfc, 0xc3, 0xb2, 0x25, 0x4e, 0x05, 0xcd, 0x74, 0xe6, - 0x96, 0x1e, 0x39, 0x76, 0x3d, 0xe4, 0xdc, 0x20, 0x24, 0x6f, 0xf2, 0x80, 0xb9, 0x90, 0xde, 0x6f, - 0xa7, 0x62, 0x27, 0xed, 0x54, 0x62, 0x17, 0x37, 0x68, 0x56, 0x3d, 0x47, 0xae, 0x96, 0xe2, 0xf5, - 0x6e, 0x31, 0x6a, 0x0e, 0x2e, 0x08, 0x91, 0x0f, 0x83, 0x41, 0xe6, 0x9b, 0xb6, 0x57, 0x6f, 0x10, - 0xcf, 0xb6, 0x9e, 0xec, 0x60, 0x77, 0x28, 0x9f, 0xef, 0x00, 0x54, 0xa3, 0x28, 0xa4, 0xdb, 0x2d, - 0x18, 0xc7, 0xe1, 0x49, 0xd9, 0xdb, 0xc1, 0x6e, 0xc0, 0x54, 0xd8, 0xf4, 0x45, 0xff, 0x68, 0xa7, - 0xae, 0xd5, 0x6c, 0xaf, 0xde, 0x32, 0x75, 0x8b, 0x35, 0x0c, 0xb9, 0x96, 0xe0, 0x47, 0xe3, 0x95, - 0x67, 0x86, 0xb7, 0xeb, 0x12, 0xae, 0xaf, 0x13, 0xeb, 0xa4, 0x9d, 0xba, 0x14, 0xd8, 0xeb, 0xa1, - 0x53, 0x4b, 0xff, 0xe1, 0xae, 0xd6, 0xea, 0x02, 0x4c, 0x09, 0x61, 0x1b, 0x62, 0x94, 0x0f, 0x58, - 0xa5, 0x45, 0x49, 0x01, 0x53, 0x6c, 0x11, 0x2e, 0x9d, 0xa9, 0x9f, 0x00, 0x4c, 0x5f, 0x8c, 0x91, - 0xd2, 0x5f, 0xc0, 0x49, 0x13, 0x53, 0xec, 0x58, 0x84, 0x27, 0x40, 0x7a, 0x7c, 0x71, 0x3a, 0x73, - 0x59, 0x0f, 0xa4, 0xe9, 0x7e, 0x70, 0xc2, 0xa5, 0x14, 0x99, 0xed, 0x14, 0x8a, 0x72, 0x07, 0xf1, - 0x40, 0x64, 0xa7, 0x50, 0xfd, 0xf0, 0x2b, 0xb5, 0x38, 0x84, 0x43, 0x9f, 0x83, 0x97, 0xc2, 0x7e, - 0x28, 0x01, 0xff, 0xc5, 0x95, 0x4a, 0x93, 0x70, 0x9e, 0x18, 0x13, 0x83, 0xef, 0x3c, 0xaa, 0x69, - 0xa8, 0xe4, 0x29, 0x8d, 0x88, 0xa7, 0xfa, 0x11, 0xc0, 0xd4, 0x85, 0x10, 0xe9, 0xed, 0x35, 0x80, - 0xb3, 0x98, 0xd2, 0x72, 0xbf, 0x20, 0x8e, 0x8f, 0x1c, 0xc4, 0xab, 0x72, 0x08, 0xf3, 0x72, 0x53, - 0xfd, 0x1a, 0xa8, 0x25, 0x84, 0x29, 0xed, 0xd1, 0x95, 0xf9, 0x39, 0x01, 0xff, 0x11, 0x82, 0xd1, - 0x31, 0x80, 0xb3, 0x7d, 0x23, 0x85, 0x72, 0x03, 0x34, 0x0d, 0x0c, 0x74, 0x32, 0xff, 0x17, 0x0c, - 0xc1, 0xe0, 0xd4, 0x8d, 0xbd, 0x6f, 0xc7, 0x6f, 0xc7, 0x72, 0x68, 0xcd, 0xa8, 0x12, 0xa2, 0x9d, - 0xbd, 0x72, 0x02, 0x6a, 0x63, 0x3b, 0xbc, 0x9d, 0xb4, 0xd3, 0x5c, 0x6a, 0x7e, 0x52, 0x8d, 0x97, - 0xe1, 0xdb, 0xf4, 0x0a, 0x7d, 0x06, 0x70, 0xa6, 0x37, 0x7c, 0x62, 0xf3, 0x6b, 0xc3, 0x68, 0xbc, - 0x38, 0xda, 0xc9, 0xfb, 0x23, 0xd7, 0x4b, 0x87, 0x19, 0xe1, 0x70, 0x19, 0x2d, 0x45, 0x38, 0x6c, - 0x88, 0x4a, 0x2d, 0x8c, 0xeb, 0x17, 0x00, 0xe3, 0x3d, 0x2b, 0x45, 0xd9, 0x61, 0x84, 0xf4, 0x8f, - 0x70, 0xf2, 0xee, 0x48, 0xb5, 0xd2, 0x40, 0x4e, 0x18, 0xc8, 0xa2, 0xd5, 0x08, 0x03, 0x7e, 0x2c, - 0x35, 0x11, 0x4b, 0x2d, 0x88, 0x65, 0xd7, 0x72, 0xbe, 0x02, 0x88, 0xf2, 0xe7, 0x42, 0x8a, 0xee, - 0x0d, 0x50, 0x15, 0xfd, 0x5e, 0x26, 0xd7, 0x46, 0x2d, 0x97, 0xbe, 0x56, 0x85, 0xaf, 0x0c, 0xba, - 0x11, 0xe1, 0x0b, 0x53, 0xaa, 0x9d, 0xf3, 0x56, 0x78, 0xbc, 0x7f, 0xa8, 0x80, 0x83, 0x43, 0x05, - 0xfc, 0x3e, 0x54, 0xc0, 0x9b, 0x23, 0x25, 0x76, 0x70, 0xa4, 0xc4, 0xbe, 0x1f, 0x29, 0xb1, 0xa7, - 0x77, 0xce, 0xdc, 0x4d, 0x9d, 0xd8, 0x52, 0x9f, 0xab, 0xb7, 0xc5, 0xf6, 0x6d, 0xe3, 0x79, 0xa7, - 0x8f, 0xb8, 0xb2, 0xcc, 0x09, 0xf1, 0xad, 0xbc, 0xf9, 0x27, 0x00, 0x00, 0xff, 0xff, 0x61, 0xcb, - 0xd5, 0x08, 0x55, 0x08, 0x00, 0x00, + 0xfd, 0x04, 0xfd, 0x04, 0xb2, 0xb3, 0x93, 0x68, 0xd2, 0x74, 0x13, 0xe2, 0xa9, 0x1d, 0xe6, 0xf9, + 0x3d, 0xbf, 0xe7, 0xf9, 0xfd, 0x9e, 0x9d, 0xc0, 0xab, 0x5b, 0x94, 0x12, 0x4b, 0xf8, 0x0d, 0x62, + 0xfb, 0x0e, 0x77, 0xcd, 0xf0, 0x68, 0xee, 0xac, 0x58, 0xd4, 0x27, 0x2b, 0xe6, 0x76, 0x93, 0x36, + 0xf6, 0x0c, 0xaf, 0xc1, 0x7d, 0x8e, 0x2e, 0x75, 0x43, 0x8d, 0xf0, 0x68, 0x28, 0x68, 0x72, 0xa6, + 0xca, 0xab, 0x5c, 0x22, 0xcd, 0xe0, 0xbf, 0xb0, 0x28, 0x39, 0x5f, 0xe5, 0xbc, 0xca, 0xa8, 0x49, + 0x3c, 0xc7, 0x24, 0xae, 0xcb, 0x7d, 0x12, 0xd4, 0x0a, 0x75, 0xbb, 0x14, 0xdd, 0xdd, 0x23, 0x0d, + 0x52, 0x6f, 0x63, 0x8d, 0x68, 0x2c, 0x17, 0x75, 0x2e, 0x1c, 0xe1, 0x58, 0xb6, 0xc2, 0x2f, 0x0f, + 0xe0, 0x6e, 0x70, 0x8f, 0x0b, 0xc2, 0x14, 0x5a, 0xb3, 0x25, 0x81, 0x69, 0x11, 0x41, 0x3b, 0x18, + 0x9b, 0x3b, 0x6e, 0x78, 0x8f, 0xb3, 0x70, 0xee, 0x41, 0x30, 0x8b, 0x4d, 0x2e, 0xfc, 0x62, 0x8d, + 0x38, 0x6e, 0x91, 0xbb, 0x5b, 0x4e, 0xb5, 0x44, 0xb7, 0x9b, 0x54, 0xf8, 0x68, 0x0e, 0x4e, 0x39, + 0x96, 0x5d, 0xae, 0x50, 0x97, 0xd7, 0x13, 0x20, 0x0d, 0x16, 0xa7, 0x4a, 0x93, 0x8e, 0x65, 0xaf, + 0x07, 0x67, 0xfc, 0x16, 0xc0, 0xf9, 0xfe, 0xc5, 0xc2, 0xe3, 0xae, 0xa0, 0x68, 0x1f, 0xc0, 0xff, + 0x6b, 0x5c, 0xf8, 0x65, 0x3b, 0xb8, 0x2c, 0xdb, 0xf2, 0x56, 0xd2, 0x4c, 0x67, 0x6e, 0x18, 0x91, + 0x63, 0x37, 0x3a, 0x9c, 0x1b, 0x94, 0xe6, 0x2d, 0x11, 0x32, 0x17, 0xd2, 0x07, 0xad, 0x54, 0xec, + 0xb4, 0x95, 0x4a, 0xec, 0x91, 0x3a, 0xcb, 0xe2, 0x33, 0xe4, 0xb8, 0x14, 0xaf, 0x75, 0x8b, 0xc1, + 0x39, 0xb8, 0x20, 0x45, 0xde, 0x0f, 0x07, 0x99, 0x6f, 0x38, 0x7e, 0xad, 0x4e, 0x7d, 0xc7, 0x7e, + 0xb4, 0x4b, 0xbc, 0xa1, 0x7c, 0xbe, 0x01, 0x10, 0x47, 0x51, 0x28, 0xb7, 0xdb, 0x30, 0x4e, 0x3a, + 0x37, 0x65, 0x7f, 0x97, 0x78, 0x21, 0x53, 0x61, 0x33, 0x10, 0xfd, 0xad, 0x95, 0xba, 0x52, 0x75, + 0xfc, 0x5a, 0xd3, 0x32, 0x6c, 0x5e, 0x37, 0xd5, 0x5a, 0xc2, 0x3f, 0xba, 0xa8, 0x3c, 0x31, 0xfd, + 0x3d, 0x8f, 0x0a, 0x63, 0x9d, 0xda, 0xa7, 0xad, 0xd4, 0x85, 0xd0, 0x5e, 0x0f, 0x1d, 0x2e, 0xfd, + 0x47, 0xba, 0x5a, 0xe3, 0x05, 0x98, 0x92, 0xc2, 0x36, 0xe4, 0xec, 0xee, 0xf1, 0x4a, 0x93, 0xd1, + 0x02, 0x61, 0xc4, 0xa6, 0x42, 0x39, 0xc3, 0x1f, 0x00, 0x4c, 0x9f, 0x8f, 0x51, 0xd2, 0x9f, 0xc1, + 0x49, 0x8b, 0x30, 0xe2, 0xda, 0x54, 0x24, 0x40, 0x7a, 0x7c, 0x71, 0x3a, 0x73, 0xd1, 0x08, 0xa5, + 0x19, 0x41, 0x70, 0x3a, 0x4b, 0x29, 0x72, 0xc7, 0x2d, 0x14, 0xd5, 0x0e, 0xe2, 0xa1, 0xc8, 0x76, + 0x21, 0x7e, 0xf7, 0x23, 0xb5, 0x38, 0x84, 0xc3, 0x80, 0x43, 0x94, 0x3a, 0xfd, 0x50, 0x02, 0xfe, + 0x4b, 0x2a, 0x95, 0x06, 0x15, 0x22, 0x31, 0x26, 0x07, 0xdf, 0x3e, 0xe2, 0x34, 0xd4, 0xf2, 0x8c, + 0x45, 0xc4, 0x13, 0xbf, 0x07, 0x30, 0x75, 0x2e, 0x44, 0x79, 0x7b, 0x09, 0xe0, 0x2c, 0x61, 0xac, + 0xdc, 0x2f, 0x88, 0xe3, 0x23, 0x07, 0xf1, 0xb2, 0x1a, 0xc2, 0xbc, 0xda, 0x54, 0xbf, 0x06, 0xb8, + 0x84, 0x08, 0x63, 0x3d, 0xba, 0x32, 0xdf, 0x27, 0xe0, 0x3f, 0x52, 0x30, 0x3a, 0x01, 0x70, 0xb6, + 0x6f, 0xa4, 0x50, 0x6e, 0x80, 0xa6, 0x81, 0x81, 0x4e, 0xe6, 0xff, 0x82, 0x21, 0x1c, 0x1c, 0xde, + 0xd8, 0xff, 0x72, 0xf2, 0x7a, 0x2c, 0x87, 0xd6, 0x82, 0x27, 0x46, 0xef, 0xfb, 0xe4, 0xb4, 0x5f, + 0x27, 0xfd, 0x77, 0x2e, 0xf5, 0x20, 0xa9, 0xe6, 0xf3, 0xce, 0xd7, 0xf4, 0x02, 0x7d, 0x04, 0x70, + 0xa6, 0x37, 0x7c, 0x72, 0xf3, 0x6b, 0xc3, 0x68, 0x3c, 0x3f, 0xda, 0xc9, 0xbb, 0x23, 0xd7, 0x2b, + 0x87, 0x19, 0xe9, 0x70, 0x19, 0x2d, 0x45, 0x38, 0xac, 0xcb, 0x4a, 0xbd, 0x13, 0xd7, 0x4f, 0x00, + 0xc6, 0x7b, 0x56, 0x8a, 0xb2, 0xc3, 0x08, 0xe9, 0x1f, 0xe1, 0xe4, 0xed, 0x91, 0x6a, 0x95, 0x81, + 0x9c, 0x34, 0x90, 0x45, 0xab, 0x11, 0x06, 0x82, 0x58, 0xea, 0x32, 0x96, 0x7a, 0x18, 0xcb, 0xae, + 0xe5, 0x7c, 0x06, 0x10, 0xe5, 0xcf, 0x84, 0x14, 0xdd, 0x19, 0xa0, 0x2a, 0xfa, 0xbb, 0x4c, 0xae, + 0x8d, 0x5a, 0xae, 0x7c, 0xad, 0x4a, 0x5f, 0x19, 0x74, 0x2d, 0xc2, 0x17, 0x61, 0x4c, 0x3f, 0xe3, + 0xad, 0xf0, 0xf0, 0xe0, 0x48, 0x03, 0x87, 0x47, 0x1a, 0xf8, 0x79, 0xa4, 0x81, 0x57, 0xc7, 0x5a, + 0xec, 0xf0, 0x58, 0x8b, 0x7d, 0x3d, 0xd6, 0x62, 0x8f, 0x6f, 0xfd, 0xf1, 0x36, 0xb5, 0x63, 0xcb, + 0x02, 0xae, 0xde, 0x16, 0x3b, 0x37, 0xcd, 0xa7, 0xed, 0x3e, 0xf2, 0xc9, 0xb2, 0x26, 0xe4, 0x6f, + 0xe5, 0xf5, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xe1, 0xa5, 0x0f, 0x5e, 0x55, 0x08, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -451,7 +450,7 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type QueryClient interface { - // OsmosisSpotPrice return spot price of pair Osmo/nativeToken + // OsmosisArithmeticTwap return spot price of pair Osmo/nativeToken OsmosisArithmeticTwap(ctx context.Context, in *QueryOsmosisArithmeticTwapRequest, opts ...grpc.CallOption) (*QueryOsmosisArithmeticTwapResponse, error) // FeeabsModuleBalances return total balances of feeabs module FeeabsModuleBalances(ctx context.Context, in *QueryFeeabsModuleBalacesRequest, opts ...grpc.CallOption) (*QueryFeeabsModuleBalacesResponse, error) @@ -469,7 +468,7 @@ func NewQueryClient(cc grpc1.ClientConn) QueryClient { func (c *queryClient) OsmosisArithmeticTwap(ctx context.Context, in *QueryOsmosisArithmeticTwapRequest, opts ...grpc.CallOption) (*QueryOsmosisArithmeticTwapResponse, error) { out := new(QueryOsmosisArithmeticTwapResponse) - err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Query/OsmosisArithmeticTwap", in, out, opts...) + err := c.cc.Invoke(ctx, "/feeabstraction.feeabs.v1beta1.Query/OsmosisArithmeticTwap", in, out, opts...) if err != nil { return nil, err } @@ -478,7 +477,7 @@ func (c *queryClient) OsmosisArithmeticTwap(ctx context.Context, in *QueryOsmosi func (c *queryClient) FeeabsModuleBalances(ctx context.Context, in *QueryFeeabsModuleBalacesRequest, opts ...grpc.CallOption) (*QueryFeeabsModuleBalacesResponse, error) { out := new(QueryFeeabsModuleBalacesResponse) - err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Query/FeeabsModuleBalances", in, out, opts...) + err := c.cc.Invoke(ctx, "/feeabstraction.feeabs.v1beta1.Query/FeeabsModuleBalances", in, out, opts...) if err != nil { return nil, err } @@ -487,7 +486,7 @@ func (c *queryClient) FeeabsModuleBalances(ctx context.Context, in *QueryFeeabsM func (c *queryClient) HostChainConfig(ctx context.Context, in *QueryHostChainConfigRequest, opts ...grpc.CallOption) (*QueryHostChainConfigResponse, error) { out := new(QueryHostChainConfigResponse) - err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Query/HostChainConfig", in, out, opts...) + err := c.cc.Invoke(ctx, "/feeabstraction.feeabs.v1beta1.Query/HostChainConfig", in, out, opts...) if err != nil { return nil, err } @@ -496,7 +495,7 @@ func (c *queryClient) HostChainConfig(ctx context.Context, in *QueryHostChainCon func (c *queryClient) AllHostChainConfig(ctx context.Context, in *AllQueryHostChainConfigRequest, opts ...grpc.CallOption) (*AllQueryHostChainConfigResponse, error) { out := new(AllQueryHostChainConfigResponse) - err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Query/AllHostChainConfig", in, out, opts...) + err := c.cc.Invoke(ctx, "/feeabstraction.feeabs.v1beta1.Query/AllHostChainConfig", in, out, opts...) if err != nil { return nil, err } @@ -505,7 +504,7 @@ func (c *queryClient) AllHostChainConfig(ctx context.Context, in *AllQueryHostCh // QueryServer is the server API for Query service. type QueryServer interface { - // OsmosisSpotPrice return spot price of pair Osmo/nativeToken + // OsmosisArithmeticTwap return spot price of pair Osmo/nativeToken OsmosisArithmeticTwap(context.Context, *QueryOsmosisArithmeticTwapRequest) (*QueryOsmosisArithmeticTwapResponse, error) // FeeabsModuleBalances return total balances of feeabs module FeeabsModuleBalances(context.Context, *QueryFeeabsModuleBalacesRequest) (*QueryFeeabsModuleBalacesResponse, error) @@ -544,7 +543,7 @@ func _Query_OsmosisArithmeticTwap_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/feeabstraction.absfee.v1beta1.Query/OsmosisArithmeticTwap", + FullMethod: "/feeabstraction.feeabs.v1beta1.Query/OsmosisArithmeticTwap", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).OsmosisArithmeticTwap(ctx, req.(*QueryOsmosisArithmeticTwapRequest)) @@ -562,7 +561,7 @@ func _Query_FeeabsModuleBalances_Handler(srv interface{}, ctx context.Context, d } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/feeabstraction.absfee.v1beta1.Query/FeeabsModuleBalances", + FullMethod: "/feeabstraction.feeabs.v1beta1.Query/FeeabsModuleBalances", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).FeeabsModuleBalances(ctx, req.(*QueryFeeabsModuleBalacesRequest)) @@ -580,7 +579,7 @@ func _Query_HostChainConfig_Handler(srv interface{}, ctx context.Context, dec fu } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/feeabstraction.absfee.v1beta1.Query/HostChainConfig", + FullMethod: "/feeabstraction.feeabs.v1beta1.Query/HostChainConfig", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).HostChainConfig(ctx, req.(*QueryHostChainConfigRequest)) @@ -598,7 +597,7 @@ func _Query_AllHostChainConfig_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/feeabstraction.absfee.v1beta1.Query/AllHostChainConfig", + FullMethod: "/feeabstraction.feeabs.v1beta1.Query/AllHostChainConfig", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).AllHostChainConfig(ctx, req.(*AllQueryHostChainConfigRequest)) @@ -607,7 +606,7 @@ func _Query_AllHostChainConfig_Handler(srv interface{}, ctx context.Context, dec } var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "feeabstraction.absfee.v1beta1.Query", + ServiceName: "feeabstraction.feeabs.v1beta1.Query", HandlerType: (*QueryServer)(nil), Methods: []grpc.MethodDesc{ { @@ -628,7 +627,7 @@ var _Query_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "feeabstraction/absfee/v1beta1/query.proto", + Metadata: "feeabstraction/feeabs/v1beta1/query.proto", } func (m *QueryHostChainConfigRequest) Marshal() (dAtA []byte, err error) { diff --git a/x/feeabs/types/query.pb.gw.go b/x/feeabs/types/query.pb.gw.go index c02e4df1..38c371e6 100644 --- a/x/feeabs/types/query.pb.gw.go +++ b/x/feeabs/types/query.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: feeabstraction/absfee/v1beta1/query.proto +// source: feeabstraction/feeabs/v1beta1/query.proto /* Package types is a reverse proxy. diff --git a/x/feeabs/types/tx.pb.go b/x/feeabs/types/tx.pb.go index bac87cfa..5c00c379 100644 --- a/x/feeabs/types/tx.pb.go +++ b/x/feeabs/types/tx.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: feeabstraction/absfee/v1beta1/tx.proto +// source: feeabstraction/feeabs/v1beta1/tx.proto package types @@ -31,7 +31,6 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -// Msg fund module account type MsgFundFeeAbsModuleAccount struct { FromAddress string `protobuf:"bytes,1,opt,name=from_address,json=fromAddress,proto3" json:"from_address,omitempty"` Amount github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,2,rep,name=amount,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"amount" yaml:"amount"` @@ -41,7 +40,7 @@ func (m *MsgFundFeeAbsModuleAccount) Reset() { *m = MsgFundFeeAbsModuleA func (m *MsgFundFeeAbsModuleAccount) String() string { return proto.CompactTextString(m) } func (*MsgFundFeeAbsModuleAccount) ProtoMessage() {} func (*MsgFundFeeAbsModuleAccount) Descriptor() ([]byte, []int) { - return fileDescriptor_84c172c34645b936, []int{0} + return fileDescriptor_bc180c3e894b3e83, []int{0} } func (m *MsgFundFeeAbsModuleAccount) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -91,7 +90,7 @@ func (m *MsgFundFeeAbsModuleAccountResponse) Reset() { *m = MsgFundFeeAb func (m *MsgFundFeeAbsModuleAccountResponse) String() string { return proto.CompactTextString(m) } func (*MsgFundFeeAbsModuleAccountResponse) ProtoMessage() {} func (*MsgFundFeeAbsModuleAccountResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_84c172c34645b936, []int{1} + return fileDescriptor_bc180c3e894b3e83, []int{1} } func (m *MsgFundFeeAbsModuleAccountResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -120,7 +119,6 @@ func (m *MsgFundFeeAbsModuleAccountResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgFundFeeAbsModuleAccountResponse proto.InternalMessageInfo -// Params defines the parameters for the feeabs module. type MsgSendQueryIbcDenomTWAP struct { FromAddress string `protobuf:"bytes,1,opt,name=from_address,json=fromAddress,proto3" json:"from_address,omitempty"` } @@ -129,7 +127,7 @@ func (m *MsgSendQueryIbcDenomTWAP) Reset() { *m = MsgSendQueryIbcDenomTW func (m *MsgSendQueryIbcDenomTWAP) String() string { return proto.CompactTextString(m) } func (*MsgSendQueryIbcDenomTWAP) ProtoMessage() {} func (*MsgSendQueryIbcDenomTWAP) Descriptor() ([]byte, []int) { - return fileDescriptor_84c172c34645b936, []int{2} + return fileDescriptor_bc180c3e894b3e83, []int{2} } func (m *MsgSendQueryIbcDenomTWAP) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -172,7 +170,7 @@ func (m *MsgSendQueryIbcDenomTWAPResponse) Reset() { *m = MsgSendQueryIb func (m *MsgSendQueryIbcDenomTWAPResponse) String() string { return proto.CompactTextString(m) } func (*MsgSendQueryIbcDenomTWAPResponse) ProtoMessage() {} func (*MsgSendQueryIbcDenomTWAPResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_84c172c34645b936, []int{3} + return fileDescriptor_bc180c3e894b3e83, []int{3} } func (m *MsgSendQueryIbcDenomTWAPResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -201,7 +199,6 @@ func (m *MsgSendQueryIbcDenomTWAPResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgSendQueryIbcDenomTWAPResponse proto.InternalMessageInfo -// Params defines the parameters for the feeabs module. type MsgSwapCrossChain struct { FromAddress string `protobuf:"bytes,1,opt,name=from_address,json=fromAddress,proto3" json:"from_address,omitempty"` IbcDenom string `protobuf:"bytes,2,opt,name=ibc_denom,json=ibcDenom,proto3" json:"ibc_denom,omitempty"` @@ -211,7 +208,7 @@ func (m *MsgSwapCrossChain) Reset() { *m = MsgSwapCrossChain{} } func (m *MsgSwapCrossChain) String() string { return proto.CompactTextString(m) } func (*MsgSwapCrossChain) ProtoMessage() {} func (*MsgSwapCrossChain) Descriptor() ([]byte, []int) { - return fileDescriptor_84c172c34645b936, []int{4} + return fileDescriptor_bc180c3e894b3e83, []int{4} } func (m *MsgSwapCrossChain) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -261,7 +258,7 @@ func (m *MsgSwapCrossChainResponse) Reset() { *m = MsgSwapCrossChainResp func (m *MsgSwapCrossChainResponse) String() string { return proto.CompactTextString(m) } func (*MsgSwapCrossChainResponse) ProtoMessage() {} func (*MsgSwapCrossChainResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_84c172c34645b936, []int{5} + return fileDescriptor_bc180c3e894b3e83, []int{5} } func (m *MsgSwapCrossChainResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -291,53 +288,53 @@ func (m *MsgSwapCrossChainResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgSwapCrossChainResponse proto.InternalMessageInfo func init() { - proto.RegisterType((*MsgFundFeeAbsModuleAccount)(nil), "feeabstraction.absfee.v1beta1.MsgFundFeeAbsModuleAccount") - proto.RegisterType((*MsgFundFeeAbsModuleAccountResponse)(nil), "feeabstraction.absfee.v1beta1.MsgFundFeeAbsModuleAccountResponse") - proto.RegisterType((*MsgSendQueryIbcDenomTWAP)(nil), "feeabstraction.absfee.v1beta1.MsgSendQueryIbcDenomTWAP") - proto.RegisterType((*MsgSendQueryIbcDenomTWAPResponse)(nil), "feeabstraction.absfee.v1beta1.MsgSendQueryIbcDenomTWAPResponse") - proto.RegisterType((*MsgSwapCrossChain)(nil), "feeabstraction.absfee.v1beta1.MsgSwapCrossChain") - proto.RegisterType((*MsgSwapCrossChainResponse)(nil), "feeabstraction.absfee.v1beta1.MsgSwapCrossChainResponse") + proto.RegisterType((*MsgFundFeeAbsModuleAccount)(nil), "feeabstraction.feeabs.v1beta1.MsgFundFeeAbsModuleAccount") + proto.RegisterType((*MsgFundFeeAbsModuleAccountResponse)(nil), "feeabstraction.feeabs.v1beta1.MsgFundFeeAbsModuleAccountResponse") + proto.RegisterType((*MsgSendQueryIbcDenomTWAP)(nil), "feeabstraction.feeabs.v1beta1.MsgSendQueryIbcDenomTWAP") + proto.RegisterType((*MsgSendQueryIbcDenomTWAPResponse)(nil), "feeabstraction.feeabs.v1beta1.MsgSendQueryIbcDenomTWAPResponse") + proto.RegisterType((*MsgSwapCrossChain)(nil), "feeabstraction.feeabs.v1beta1.MsgSwapCrossChain") + proto.RegisterType((*MsgSwapCrossChainResponse)(nil), "feeabstraction.feeabs.v1beta1.MsgSwapCrossChainResponse") } func init() { - proto.RegisterFile("feeabstraction/absfee/v1beta1/tx.proto", fileDescriptor_84c172c34645b936) -} - -var fileDescriptor_84c172c34645b936 = []byte{ - // 516 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0xcf, 0x6e, 0xd3, 0x40, - 0x10, 0xc6, 0xe3, 0x46, 0xaa, 0xe8, 0x16, 0x90, 0x88, 0x40, 0xa4, 0xae, 0x70, 0x82, 0x85, 0x50, - 0x40, 0x8a, 0x97, 0x96, 0x43, 0x29, 0x12, 0x42, 0x6e, 0x50, 0x25, 0x0e, 0x91, 0x20, 0x41, 0x42, - 0xe2, 0x52, 0xed, 0xda, 0x13, 0xc7, 0x22, 0xf6, 0x58, 0x9e, 0x75, 0x69, 0x24, 0x1e, 0x02, 0x4e, - 0xbc, 0x03, 0x37, 0x0e, 0xbc, 0x43, 0x8f, 0x3d, 0x72, 0x2a, 0x28, 0x79, 0x03, 0x9e, 0x00, 0xf9, - 0x4f, 0x4a, 0x0b, 0x38, 0xa4, 0x3d, 0xd9, 0xde, 0xfd, 0x7d, 0xdf, 0x7c, 0xb3, 0x9a, 0x35, 0xbb, - 0x3b, 0x00, 0x10, 0x92, 0x54, 0x2c, 0x1c, 0xe5, 0x63, 0xc8, 0x85, 0xa4, 0x01, 0x00, 0xdf, 0xdf, - 0x90, 0xa0, 0xc4, 0x06, 0x57, 0x07, 0x56, 0x14, 0xa3, 0xc2, 0xda, 0xad, 0xb3, 0x9c, 0x95, 0x73, - 0x56, 0xc1, 0xe9, 0xd7, 0x3d, 0xf4, 0x30, 0x23, 0x79, 0xfa, 0x96, 0x8b, 0xf4, 0xfb, 0xf3, 0xcd, - 0x23, 0x11, 0x8b, 0x80, 0x0a, 0xf6, 0xde, 0x7c, 0x16, 0x22, 0x74, 0x86, 0x05, 0x6a, 0x38, 0x48, - 0x01, 0x12, 0x97, 0x82, 0x7e, 0x03, 0x0e, 0xfa, 0x61, 0xb1, 0xdf, 0xf0, 0x10, 0xbd, 0x11, 0xf0, - 0xec, 0x4b, 0x26, 0x03, 0xae, 0xfc, 0x00, 0x48, 0x89, 0x20, 0xca, 0x01, 0xf3, 0xab, 0xc6, 0xf4, - 0x2e, 0x79, 0xbb, 0x49, 0xe8, 0xee, 0x02, 0xd8, 0x92, 0xba, 0xe8, 0x26, 0x23, 0xb0, 0x1d, 0x07, - 0x93, 0x50, 0xd5, 0x6e, 0xb3, 0xcb, 0x83, 0x18, 0x83, 0x3d, 0xe1, 0xba, 0x31, 0x10, 0xd5, 0xb5, - 0xa6, 0xd6, 0x5a, 0xe9, 0xad, 0xa6, 0x6b, 0x76, 0xbe, 0x54, 0x53, 0x6c, 0x59, 0x04, 0x29, 0x5c, - 0x5f, 0x6a, 0x56, 0x5b, 0xab, 0x9b, 0x6b, 0x56, 0x9e, 0xc9, 0x4a, 0x33, 0xcd, 0x4e, 0xc5, 0xea, - 0xa0, 0x1f, 0xee, 0xd8, 0x87, 0xc7, 0x8d, 0xca, 0xcf, 0xe3, 0xc6, 0x95, 0xb1, 0x08, 0x46, 0x8f, - 0xcd, 0x5c, 0x66, 0x7e, 0xfe, 0xde, 0x68, 0x79, 0xbe, 0x1a, 0x26, 0xd2, 0x72, 0x30, 0xe0, 0x45, - 0x47, 0xf9, 0xa3, 0x4d, 0xee, 0x5b, 0xae, 0xc6, 0x11, 0x50, 0xe6, 0x40, 0xbd, 0xa2, 0x96, 0x79, - 0x87, 0x99, 0xe5, 0xb1, 0x7b, 0x40, 0x11, 0x86, 0x04, 0xe6, 0x13, 0x56, 0xef, 0x92, 0xd7, 0x87, - 0xd0, 0x7d, 0x99, 0x40, 0x3c, 0x7e, 0x2e, 0x9d, 0x67, 0x10, 0x62, 0xf0, 0xea, 0xb5, 0xfd, 0x62, - 0x81, 0xd6, 0x4c, 0x93, 0x35, 0xcb, 0xe4, 0x27, 0x25, 0xfa, 0xec, 0x5a, 0xca, 0xbc, 0x13, 0x51, - 0x27, 0x46, 0xa2, 0xce, 0x50, 0xf8, 0xe1, 0x22, 0xc7, 0xb6, 0xce, 0x56, 0x7c, 0xe9, 0xec, 0xb9, - 0xa9, 0x61, 0x7d, 0x29, 0xdb, 0xbf, 0xe4, 0x17, 0x05, 0xcc, 0x75, 0xb6, 0xf6, 0x97, 0xe9, 0xac, - 0xe2, 0xe6, 0x97, 0x2a, 0xab, 0x76, 0xc9, 0xab, 0x7d, 0xd4, 0xd8, 0x8d, 0x7f, 0xb7, 0xb6, 0x65, - 0xcd, 0x1d, 0x51, 0xab, 0xac, 0x29, 0xfd, 0xe9, 0x05, 0x85, 0xb3, 0x6c, 0xb5, 0xf7, 0xec, 0xea, - 0x1f, 0x47, 0xf1, 0x60, 0x01, 0xcb, 0x33, 0x0a, 0xfd, 0xd1, 0x79, 0x15, 0x27, 0xd5, 0x3f, 0x69, - 0xec, 0x66, 0xd9, 0x24, 0x6f, 0xff, 0xdf, 0xb5, 0x44, 0xaa, 0xdb, 0x17, 0x96, 0xce, 0x92, 0xed, - 0xf4, 0x0f, 0x27, 0x86, 0x76, 0x34, 0x31, 0xb4, 0x1f, 0x13, 0x43, 0xfb, 0x30, 0x35, 0x2a, 0x47, - 0x53, 0xa3, 0xf2, 0x6d, 0x6a, 0x54, 0xde, 0x6c, 0x9f, 0x1a, 0xfd, 0x6c, 0xe4, 0x7d, 0x6a, 0x8f, - 0x84, 0x24, 0x3e, 0x00, 0x68, 0x9f, 0xfe, 0x0b, 0xec, 0x6f, 0xf1, 0x03, 0x9e, 0x07, 0xc9, 0x6f, - 0x84, 0x5c, 0xce, 0xae, 0xf0, 0xc3, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x0c, 0x77, 0x4e, 0x61, - 0xb9, 0x04, 0x00, 0x00, + proto.RegisterFile("feeabstraction/feeabs/v1beta1/tx.proto", fileDescriptor_bc180c3e894b3e83) +} + +var fileDescriptor_bc180c3e894b3e83 = []byte{ + // 513 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xcd, 0x6e, 0xd3, 0x40, + 0x10, 0x8e, 0x1b, 0xa9, 0xa2, 0x5b, 0x40, 0xc2, 0x02, 0x91, 0xba, 0xc2, 0x09, 0x16, 0x42, 0x01, + 0x29, 0x5e, 0x5a, 0x0e, 0xa5, 0x48, 0x08, 0xb9, 0x41, 0x95, 0x38, 0x44, 0x82, 0x04, 0x09, 0x89, + 0x4b, 0xb5, 0xb6, 0x27, 0x8e, 0x45, 0xec, 0xb1, 0x3c, 0xeb, 0xd2, 0x48, 0x3c, 0x04, 0x9c, 0x78, + 0x07, 0x6e, 0x1c, 0x78, 0x87, 0x1e, 0x7b, 0xe4, 0x54, 0x50, 0xf2, 0x06, 0x3c, 0x01, 0xf2, 0x5f, + 0xd4, 0x02, 0x0e, 0xa1, 0x27, 0x7b, 0x76, 0xbf, 0xef, 0x9b, 0x6f, 0x46, 0x33, 0xcb, 0xee, 0x0e, + 0x01, 0x84, 0x4d, 0x32, 0x16, 0x8e, 0xf4, 0x31, 0xe4, 0x79, 0xc8, 0x0f, 0xb7, 0x6c, 0x90, 0x62, + 0x8b, 0xcb, 0x23, 0x33, 0x8a, 0x51, 0xa2, 0x7a, 0xeb, 0x3c, 0xce, 0xcc, 0x43, 0xb3, 0xc0, 0x69, + 0xd7, 0x3d, 0xf4, 0x30, 0x43, 0xf2, 0xf4, 0x2f, 0x27, 0x69, 0xf7, 0x17, 0x8b, 0x47, 0x22, 0x16, + 0x01, 0x15, 0xd8, 0x7b, 0x8b, 0xb1, 0x10, 0xa1, 0x33, 0x2a, 0xa0, 0xba, 0x83, 0x14, 0x20, 0x71, + 0x5b, 0x10, 0xcc, 0x01, 0x0e, 0xfa, 0x61, 0x71, 0xdf, 0xf4, 0x10, 0xbd, 0x31, 0xf0, 0x2c, 0xb2, + 0x93, 0x21, 0x97, 0x7e, 0x00, 0x24, 0x45, 0x10, 0xe5, 0x00, 0xe3, 0xab, 0xc2, 0xb4, 0x1e, 0x79, + 0xfb, 0x49, 0xe8, 0xee, 0x03, 0x58, 0x36, 0xf5, 0xd0, 0x4d, 0xc6, 0x60, 0x39, 0x0e, 0x26, 0xa1, + 0x54, 0x6f, 0xb3, 0xcb, 0xc3, 0x18, 0x83, 0x03, 0xe1, 0xba, 0x31, 0x10, 0x35, 0x94, 0x96, 0xd2, + 0x5e, 0xeb, 0xaf, 0xa7, 0x67, 0x56, 0x7e, 0xa4, 0x4a, 0xb6, 0x2a, 0x82, 0x14, 0xdc, 0x58, 0x69, + 0xd5, 0xdb, 0xeb, 0xdb, 0x1b, 0x66, 0xee, 0xc9, 0x4c, 0x3d, 0x95, 0x5d, 0x31, 0xbb, 0xe8, 0x87, + 0x7b, 0xd6, 0xf1, 0x69, 0xb3, 0xf6, 0xf3, 0xb4, 0x79, 0x65, 0x22, 0x82, 0xf1, 0x63, 0x23, 0xa7, + 0x19, 0x9f, 0xbf, 0x37, 0xdb, 0x9e, 0x2f, 0x47, 0x89, 0x6d, 0x3a, 0x18, 0xf0, 0xa2, 0xa2, 0xfc, + 0xd3, 0x21, 0xf7, 0x2d, 0x97, 0x93, 0x08, 0x28, 0x53, 0xa0, 0x7e, 0x91, 0xcb, 0xb8, 0xc3, 0x8c, + 0x6a, 0xdb, 0x7d, 0xa0, 0x08, 0x43, 0x02, 0xe3, 0x09, 0x6b, 0xf4, 0xc8, 0x1b, 0x40, 0xe8, 0xbe, + 0x4c, 0x20, 0x9e, 0x3c, 0xb7, 0x9d, 0x67, 0x10, 0x62, 0xf0, 0xea, 0xb5, 0xf5, 0x62, 0x89, 0xd2, + 0x0c, 0x83, 0xb5, 0xaa, 0xe8, 0xf3, 0x14, 0x03, 0x76, 0x2d, 0xc5, 0xbc, 0x13, 0x51, 0x37, 0x46, + 0xa2, 0xee, 0x48, 0xf8, 0xe1, 0x32, 0x6d, 0xdb, 0x64, 0x6b, 0xbe, 0xed, 0x1c, 0xb8, 0xa9, 0x60, + 0x63, 0x25, 0xbb, 0xbf, 0xe4, 0x17, 0x09, 0x8c, 0x4d, 0xb6, 0xf1, 0x87, 0x68, 0x99, 0x71, 0xfb, + 0x4b, 0x9d, 0xd5, 0x7b, 0xe4, 0xa9, 0x1f, 0x15, 0x76, 0xe3, 0xef, 0xa5, 0xed, 0x98, 0x0b, 0x47, + 0xd4, 0xac, 0x2a, 0x4a, 0x7b, 0x7a, 0x41, 0x62, 0xe9, 0x4d, 0x7d, 0xcf, 0xae, 0xfe, 0xd6, 0x8a, + 0x07, 0x4b, 0x48, 0x9e, 0x63, 0x68, 0x8f, 0xfe, 0x97, 0x31, 0xcf, 0xfe, 0x49, 0x61, 0x37, 0xab, + 0x26, 0x79, 0xf7, 0xdf, 0xaa, 0x15, 0x54, 0xcd, 0xba, 0x30, 0xb5, 0x74, 0xb6, 0x37, 0x38, 0x9e, + 0xea, 0xca, 0xc9, 0x54, 0x57, 0x7e, 0x4c, 0x75, 0xe5, 0xc3, 0x4c, 0xaf, 0x9d, 0xcc, 0xf4, 0xda, + 0xb7, 0x99, 0x5e, 0x7b, 0xb3, 0x7b, 0x66, 0xf4, 0xb3, 0x91, 0xf7, 0xa9, 0x33, 0x4e, 0xd7, 0x7d, + 0x08, 0xd0, 0x39, 0xfb, 0x0a, 0x1c, 0xee, 0xf0, 0xa3, 0xf2, 0x29, 0xc8, 0x36, 0xc2, 0x5e, 0xcd, + 0x56, 0xf8, 0xe1, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7c, 0x4a, 0x38, 0xfa, 0xb9, 0x04, 0x00, + 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -367,7 +364,7 @@ func NewMsgClient(cc grpc1.ClientConn) MsgClient { func (c *msgClient) SendQueryIbcDenomTWAP(ctx context.Context, in *MsgSendQueryIbcDenomTWAP, opts ...grpc.CallOption) (*MsgSendQueryIbcDenomTWAPResponse, error) { out := new(MsgSendQueryIbcDenomTWAPResponse) - err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Msg/SendQueryIbcDenomTWAP", in, out, opts...) + err := c.cc.Invoke(ctx, "/feeabstraction.feeabs.v1beta1.Msg/SendQueryIbcDenomTWAP", in, out, opts...) if err != nil { return nil, err } @@ -376,7 +373,7 @@ func (c *msgClient) SendQueryIbcDenomTWAP(ctx context.Context, in *MsgSendQueryI func (c *msgClient) SwapCrossChain(ctx context.Context, in *MsgSwapCrossChain, opts ...grpc.CallOption) (*MsgSwapCrossChainResponse, error) { out := new(MsgSwapCrossChainResponse) - err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Msg/SwapCrossChain", in, out, opts...) + err := c.cc.Invoke(ctx, "/feeabstraction.feeabs.v1beta1.Msg/SwapCrossChain", in, out, opts...) if err != nil { return nil, err } @@ -385,7 +382,7 @@ func (c *msgClient) SwapCrossChain(ctx context.Context, in *MsgSwapCrossChain, o func (c *msgClient) FundFeeAbsModuleAccount(ctx context.Context, in *MsgFundFeeAbsModuleAccount, opts ...grpc.CallOption) (*MsgFundFeeAbsModuleAccountResponse, error) { out := new(MsgFundFeeAbsModuleAccountResponse) - err := c.cc.Invoke(ctx, "/feeabstraction.absfee.v1beta1.Msg/FundFeeAbsModuleAccount", in, out, opts...) + err := c.cc.Invoke(ctx, "/feeabstraction.feeabs.v1beta1.Msg/FundFeeAbsModuleAccount", in, out, opts...) if err != nil { return nil, err } @@ -427,7 +424,7 @@ func _Msg_SendQueryIbcDenomTWAP_Handler(srv interface{}, ctx context.Context, de } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/feeabstraction.absfee.v1beta1.Msg/SendQueryIbcDenomTWAP", + FullMethod: "/feeabstraction.feeabs.v1beta1.Msg/SendQueryIbcDenomTWAP", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).SendQueryIbcDenomTWAP(ctx, req.(*MsgSendQueryIbcDenomTWAP)) @@ -445,7 +442,7 @@ func _Msg_SwapCrossChain_Handler(srv interface{}, ctx context.Context, dec func( } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/feeabstraction.absfee.v1beta1.Msg/SwapCrossChain", + FullMethod: "/feeabstraction.feeabs.v1beta1.Msg/SwapCrossChain", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).SwapCrossChain(ctx, req.(*MsgSwapCrossChain)) @@ -463,7 +460,7 @@ func _Msg_FundFeeAbsModuleAccount_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/feeabstraction.absfee.v1beta1.Msg/FundFeeAbsModuleAccount", + FullMethod: "/feeabstraction.feeabs.v1beta1.Msg/FundFeeAbsModuleAccount", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).FundFeeAbsModuleAccount(ctx, req.(*MsgFundFeeAbsModuleAccount)) @@ -472,7 +469,7 @@ func _Msg_FundFeeAbsModuleAccount_Handler(srv interface{}, ctx context.Context, } var _Msg_serviceDesc = grpc.ServiceDesc{ - ServiceName: "feeabstraction.absfee.v1beta1.Msg", + ServiceName: "feeabstraction.feeabs.v1beta1.Msg", HandlerType: (*MsgServer)(nil), Methods: []grpc.MethodDesc{ { @@ -489,7 +486,7 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "feeabstraction/absfee/v1beta1/tx.proto", + Metadata: "feeabstraction/feeabs/v1beta1/tx.proto", } func (m *MsgFundFeeAbsModuleAccount) Marshal() (dAtA []byte, err error) { From 7832d3f474e58fe777af1cb0a306c3529b467455 Mon Sep 17 00:00:00 2001 From: Tien Nguyen Date: Thu, 25 Jan 2024 16:00:01 +0700 Subject: [PATCH 82/90] Update to go1.21 (#141) --- .gitignore | 3 -- go.mod | 2 +- go.sum | 44 +++++++++++++++++++++++ go.work | 3 ++ go.work.example | 7 ---- tests/interchaintest/go.mod | 2 +- tests/interchaintest/go.sum | 44 +++++++++++++++++++++++ tests/interchaintest/ibc_transfer_test.go | 2 +- 8 files changed, 94 insertions(+), 13 deletions(-) create mode 100644 go.work delete mode 100644 go.work.example diff --git a/.gitignore b/.gitignore index 9e02b1f2..2226c1b2 100644 --- a/.gitignore +++ b/.gitignore @@ -11,10 +11,7 @@ # Output of the go coverage tool, specifically when used with LiteIDE *.out -# Dependency directories (remove the comment below to include it) -# vendor/ # Go -go.work go.work.sum bin/ diff --git a/go.mod b/go.mod index f93ad609..5e251502 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/osmosis-labs/fee-abstraction/v7 -go 1.20 +go 1.21 require ( cosmossdk.io/errors v1.0.0-beta.7 diff --git a/go.sum b/go.sum index 44c65f65..55e13ea6 100644 --- a/go.sum +++ b/go.sum @@ -120,6 +120,7 @@ cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQn cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= cloud.google.com/go/longrunning v0.3.0 h1:NjljC+FYPV3uh5/OwWT6pVU+doBqMg2x/rZlE+CamDs= +cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= @@ -216,6 +217,7 @@ github.com/Antonboom/errname v0.1.7/go.mod h1:g0ONh16msHIPgJSGsecu1G/dcF2hlYR/0S github.com/Antonboom/nilnil v0.1.1 h1:PHhrh5ANKFWRBh7TdYmyyq2gyT2lotnvFvvFbylF81Q= github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= @@ -231,7 +233,9 @@ github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OpenPeeDeeP/depguard v1.1.1 h1:TSUznLjvp/4IUP+OQ0t/4jF4QUyxIcVX8YnghZdunyA= @@ -241,8 +245,10 @@ github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMx github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= +github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/alecthomas/participle/v2 v2.0.0-alpha7 h1:cK4vjj0VSgb3lN1nuKA5F7dw+1s1pWBe5bx7nNCnN+c= +github.com/alecthomas/participle/v2 v2.0.0-alpha7/go.mod h1:NumScqsC42o9x+dGj8/YqsIfhrIQjFEOFovxotbBirA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -273,6 +279,7 @@ github.com/aws/aws-sdk-go v1.44.203 h1:pcsP805b9acL3wUqa4JR2vg1k2wnItkDYNvfmcy6F github.com/aws/aws-sdk-go v1.44.203/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -295,7 +302,9 @@ github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92 github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= +github.com/btcsuite/btcd/btcutil v1.1.2/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/butuzov/ireturn v0.1.1 h1:QvrO2QF2+/Cx1WA/vETCIYBKtRjc30vesdoPUNo1EbY= github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= @@ -342,6 +351,7 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/apd/v3 v3.1.0 h1:MK3Ow7LH0W8zkd5GMKA1PvS9qG3bWFI95WaVNfyZJ/w= +github.com/cockroachdb/apd/v3 v3.1.0/go.mod h1:6qgPBMXjATAdD/VefbRP9NoSLKjbB4LCoA7gN4LpHs4= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= @@ -353,6 +363,7 @@ github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4 github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -393,7 +404,9 @@ github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7Do github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cristalhq/acmd v0.8.1/go.mod h1:LG5oa43pE/BbxtfMoImHCQN++0Su7dzipdgBjMCBVDQ= github.com/cucumber/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= +github.com/cucumber/common/gherkin/go/v22 v22.0.0/go.mod h1:3mJT10B2GGn3MvVPd3FwR7m2u4tLhSRhWUqJU4KN4Fg= github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= +github.com/cucumber/common/messages/go/v17 v17.1.1/go.mod h1:bpGxb57tDE385Rb2EohgUadLkAbhoC4IyCFi89u/JQI= github.com/curioswitch/go-reassign v0.2.0 h1:G9UZyOcpk/d7Gd6mqYgd8XYWFMw/znxwGDUstnC9DIo= github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc= github.com/daixiang0/gci v0.8.1 h1:T4xpSC+hmsi4CSyuYfIJdMZAr9o7xZmHpQVygMghGZ4= @@ -404,6 +417,7 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= github.com/denis-tingaikin/go-header v0.4.3 h1:tEaZKAlqql6SKCY++utLmkPLd6K8IBM20Ha7UVm+mtU= @@ -420,7 +434,9 @@ github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUn github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= @@ -447,8 +463,11 @@ github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcH github.com/ettle/strcase v0.1.1 h1:htFueZyVeE1XNnMEfbqp5r67qAN/4r6ya1ysq8Q+Zcw= github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= +github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= +github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= +github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= @@ -460,9 +479,11 @@ github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw github.com/firefart/nonamedreturns v1.0.4 h1:abzI1p7mAEPYuR4A+VLKn4eNDOycjYo2phmY9sfv40Y= github.com/firefart/nonamedreturns v1.0.4/go.mod h1:TDhe/tjI1BXo48CmYbUduTV7BdIga8MAO/xbKdcVsGI= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= @@ -474,6 +495,7 @@ github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= +github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/go-critic/go-critic v0.6.5 h1:fDaR/5GWURljXwF8Eh31T2GZNz9X4jeboS912mWF8Uo= github.com/go-critic/go-critic v0.6.5/go.mod h1:ezfP/Lh7MA6dBNn4c6ab5ALv3sKnZVLx37tr00uuaOY= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= @@ -499,6 +521,7 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87 github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= +github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-toolsmith/astcast v1.0.0 h1:JojxlmI6STnFVG9yOImLeGREv8W2ocNUM+iOhR6jE7g= @@ -530,11 +553,13 @@ github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6Wezm github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= +github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= +github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= @@ -631,12 +656,14 @@ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -706,6 +733,7 @@ github.com/gostaticanalysis/nilerr v0.1.1 h1:ThE+hJP0fEp4zWLkWHWcRyI2Od0p7DlgYG3 github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= github.com/gostaticanalysis/testutil v0.4.0 h1:nhdCmubdmDF6VEatUNjgUZBJKWRqugoISdUv3PPQgHY= +github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Repi5x3CuviD3dgAZaBU= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= @@ -787,6 +815,7 @@ github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod github.com/jgautheron/goconst v1.5.1 h1:HxVbL1MhydKs8R8n/HE5NPvzfaYmQJA3o879lE4+WcM= github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b h1:izTof8BKh/nE1wrKOrloNA5q4odOarjf+Xpe+4qow98= +github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs= github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af h1:KA9BjwUk7KlCh6S9EAGWBt1oExIUv9WyNCiRz5amv48= @@ -837,6 +866,7 @@ github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -953,6 +983,7 @@ github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= @@ -963,15 +994,21 @@ github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo/v2 v2.1.4 h1:GNapqRSid3zijZ9H77KrgVG4/8KqiyRsxcSxe+7ApXY= +github.com/onsi/ginkgo/v2 v2.1.4/go.mod h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= +github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= +github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= +github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -981,6 +1018,7 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= +github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/otiai10/copy v1.2.0 h1:HvG945u96iNadPoG2/Ja2+AUJeW5YuFQMixq9yirC+k= github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= @@ -1004,6 +1042,7 @@ github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7 github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -1072,10 +1111,12 @@ github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqn github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= +github.com/regen-network/gocuke v0.6.2/go.mod h1:zYaqIHZobHyd0xOrHGPQjbhGJsuZ1oElx150u2o1xuk= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= @@ -1257,6 +1298,7 @@ go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= @@ -1901,6 +1943,7 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= @@ -1928,6 +1971,7 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= +gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/go.work b/go.work new file mode 100644 index 00000000..2f9780e2 --- /dev/null +++ b/go.work @@ -0,0 +1,3 @@ +go 1.21 + +use ./tests/interchaintest diff --git a/go.work.example b/go.work.example deleted file mode 100644 index 8a7a74c3..00000000 --- a/go.work.example +++ /dev/null @@ -1,7 +0,0 @@ -go 1.18 - -use ( - ./ - ./tests/interchaintest - -) diff --git a/tests/interchaintest/go.mod b/tests/interchaintest/go.mod index 4e1e016c..5db24b4b 100644 --- a/tests/interchaintest/go.mod +++ b/tests/interchaintest/go.mod @@ -1,6 +1,6 @@ module github.com/notional-labs/fee-abstraction/tests/interchaintest -go 1.20 +go 1.21 require ( cosmossdk.io/math v1.0.1 diff --git a/tests/interchaintest/go.sum b/tests/interchaintest/go.sum index 648d89a6..aab013c1 100644 --- a/tests/interchaintest/go.sum +++ b/tests/interchaintest/go.sum @@ -209,6 +209,7 @@ github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN github.com/99designs/keyring v1.2.2 h1:pZd3neh/EmUzWONb35LxQfvuY7kiSXAq3HQd97+XBn0= github.com/99designs/keyring v1.2.2/go.mod h1:wes/FrByc8j7lFOAGLGSNEg8f/PaI3cgTBqhFkHUrPk= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= @@ -232,18 +233,22 @@ github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= +github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/StirlingMarketingGroup/go-namecase v1.0.0 h1:2CzaNtCzc4iNHirR+5ru9OzGg8rQp860gqLBFqRI02Y= github.com/StirlingMarketingGroup/go-namecase v1.0.0/go.mod h1:ZsoSKcafcAzuBx+sndbxHu/RjDcDTrEdT4UvhniHfio= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= +github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/alecthomas/participle/v2 v2.0.0-alpha7 h1:cK4vjj0VSgb3lN1nuKA5F7dw+1s1pWBe5bx7nNCnN+c= +github.com/alecthomas/participle/v2 v2.0.0-alpha7/go.mod h1:NumScqsC42o9x+dGj8/YqsIfhrIQjFEOFovxotbBirA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -281,9 +286,13 @@ github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsy github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= +github.com/btcsuite/btcd/btcutil v1.1.2/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= +github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -322,7 +331,9 @@ github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= +github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/apd/v3 v3.1.0 h1:MK3Ow7LH0W8zkd5GMKA1PvS9qG3bWFI95WaVNfyZJ/w= +github.com/cockroachdb/apd/v3 v3.1.0/go.mod h1:6qgPBMXjATAdD/VefbRP9NoSLKjbB4LCoA7gN4LpHs4= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= @@ -334,6 +345,7 @@ github.com/cometbft/cometbft-db v0.8.0/go.mod h1:6ASCP4pfhmrCBpfk01/9E1SI29nD3Hf github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -372,7 +384,9 @@ github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcX github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cucumber/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= +github.com/cucumber/common/gherkin/go/v22 v22.0.0/go.mod h1:3mJT10B2GGn3MvVPd3FwR7m2u4tLhSRhWUqJU4KN4Fg= github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= +github.com/cucumber/common/messages/go/v17 v17.1.1/go.mod h1:bpGxb57tDE385Rb2EohgUadLkAbhoC4IyCFi89u/JQI= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -437,9 +451,11 @@ github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= +github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= @@ -467,6 +483,7 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= @@ -494,6 +511,7 @@ github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+ github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= +github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= @@ -564,12 +582,14 @@ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -589,6 +609,7 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ= +github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= @@ -700,6 +721,7 @@ github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod github.com/ipfs/go-cid v0.2.0 h1:01JTiihFq9en9Vz0lc0VDWvZe/uBonGpzo4THP0vcQ0= github.com/ipfs/go-cid v0.2.0/go.mod h1:P+HXFDF4CVhaVayiEb4wkAy7zBHxBwsJyt0Y5U6MLro= github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= +github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -715,6 +737,7 @@ github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= @@ -742,6 +765,7 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -783,6 +807,7 @@ github.com/mattn/go-pointer v0.0.1/go.mod h1:2zXcozF6qYGgmsG+SeTZz3oAbFLdD3OWqnU github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= +github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= @@ -810,13 +835,16 @@ github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae h1:O4SWKdcHVCvYqyDV+9CJA1fcDN2L11Bule0iFy3YlAI= +github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= @@ -866,12 +894,14 @@ github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= +github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= +github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -881,6 +911,7 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= +github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= @@ -947,6 +978,7 @@ github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqn github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= +github.com/regen-network/gocuke v0.6.2/go.mod h1:zYaqIHZobHyd0xOrHGPQjbhGJsuZ1oElx150u2o1xuk= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= @@ -958,6 +990,7 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= @@ -973,12 +1006,14 @@ github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71e github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= @@ -1041,7 +1076,9 @@ github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoM github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw= +github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o= +github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/tyler-smith/go-bip32 v1.0.0 h1:sDR9juArbUgX+bO/iblgZnMPeWY1KZMUC2AFUJdv5KE= @@ -1053,6 +1090,7 @@ github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVM github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= +github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= @@ -1092,6 +1130,7 @@ go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= +go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= @@ -1735,6 +1774,7 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY= +gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1754,7 +1794,9 @@ modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0= modernc.org/ccgo/v3 v3.16.13 h1:Mkgdzl46i5F/CNR/Kj80Ri59hC8TKAhZrYSaqvkwzUw= modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk= +modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM= +modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= modernc.org/libc v1.22.5 h1:91BNch/e5B0uPbJFgqbxXuOnxBQjlS//icfQEGmvyjE= modernc.org/libc v1.22.5/go.mod h1:jj+Z7dTNX8fBScMVNRAYZ/jF91K8fdT2hYMThc3YjBY= modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= @@ -1768,9 +1810,11 @@ modernc.org/sqlite v1.24.0/go.mod h1:OrDj17Mggn6MhE+iPbBNf7RGKODDE9NFT0f3EwDzJqk modernc.org/strutil v1.1.3 h1:fNMm+oJklMGYfU9Ylcywl0CO5O6nTfaowNsh2wpPjzY= modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= modernc.org/tcl v1.15.2 h1:C4ybAYCGJw968e+Me18oW55kD/FexcHbqH2xak1ROSY= +modernc.org/tcl v1.15.2/go.mod h1:3+k/ZaEbKrC8ePv8zJWPtBSW0V7Gg9g8rkmhI1Kfs3c= modernc.org/token v1.0.1 h1:A3qvTqOwexpfZZeyI0FeGPDlSWX5pjZu9hF4lU+EKWg= modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= modernc.org/z v1.7.3 h1:zDJf6iHjrnB+WRD88stbXokugjyc0/pB91ri1gO6LZY= +modernc.org/z v1.7.3/go.mod h1:Ipv4tsdxZRbQyLq9Q1M6gdbkxYzdlrciF2Hi/lS7nWE= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= diff --git a/tests/interchaintest/ibc_transfer_test.go b/tests/interchaintest/ibc_transfer_test.go index 4307e95c..5f302471 100644 --- a/tests/interchaintest/ibc_transfer_test.go +++ b/tests/interchaintest/ibc_transfer_test.go @@ -41,7 +41,7 @@ func TestFeeabsGaiaIBCTransfer(t *testing.T) { }, { Name: "gaia", - Version: "v9.0.2", + Version: "v12.0.0-rc0", NumValidators: &numVals, NumFullNodes: &numFullNodes, }, From ef6fedeeae5798414049f05a18a389aa31db0440 Mon Sep 17 00:00:00 2001 From: Duong Minh Ngoc <153509244+minhngoc274@users.noreply.github.com> Date: Mon, 29 Jan 2024 14:37:39 +0700 Subject: [PATCH 83/90] split package forward test (#142) * split package forward test * fix pointer query smart msg response --- .github/workflows/interchaintest.yaml | 16 ++ Makefile | 3 + tests/interchaintest/feeabs_test.go | 224 +++++++++++++++++++++ tests/interchaintest/packet_foward_test.go | 116 +---------- tests/interchaintest/setup.go | 2 +- 5 files changed, 248 insertions(+), 113 deletions(-) create mode 100644 tests/interchaintest/feeabs_test.go diff --git a/.github/workflows/interchaintest.yaml b/.github/workflows/interchaintest.yaml index 57435e45..4452e857 100644 --- a/.github/workflows/interchaintest.yaml +++ b/.github/workflows/interchaintest.yaml @@ -90,3 +90,19 @@ jobs: - run: make ictest-host-zone-proposal env: BRANCH_CI: 'latest' + + test-feeabs: + runs-on: ubuntu-latest + needs: build-and-push-image + steps: + - name: Set up Go 1.21 + uses: actions/setup-go@v3 + with: + go-version: 1.21 + + - name: checkout code + uses: actions/checkout@v3 + + - run: make ictest-feeabs + env: + BRANCH_CI: 'latest' \ No newline at end of file diff --git a/Makefile b/Makefile index c2e89ec3..d840a7be 100644 --- a/Makefile +++ b/Makefile @@ -124,6 +124,9 @@ ictest-packet-forward: ictest-host-zone-proposal: cd tests/interchaintest && go test -timeout=25m -race -v -run TestHostZoneProposal . +ictest-feeabs: + cd tests/interchaintest && go test -timeout=25m -race -v -run TestFeeabs . + # Executes all tests via interchaintest after compling a local image as juno:local ictest-all: ictest-basic ictest-ibc ictest-packet-forward diff --git a/tests/interchaintest/feeabs_test.go b/tests/interchaintest/feeabs_test.go new file mode 100644 index 00000000..c6e425dd --- /dev/null +++ b/tests/interchaintest/feeabs_test.go @@ -0,0 +1,224 @@ +package interchaintest + +import ( + "context" + "fmt" + "os" + "path" + "testing" + + "cosmossdk.io/math" + sdktypes "github.com/cosmos/cosmos-sdk/types" + paramsutils "github.com/cosmos/cosmos-sdk/x/params/client/utils" + transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + feeabsCli "github.com/notional-labs/fee-abstraction/tests/interchaintest/feeabs" + "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v7/ibc" + "github.com/strangelove-ventures/interchaintest/v7/testutil" + "github.com/stretchr/testify/require" +) + +func TestFeeAbs(t *testing.T) { + if testing.Short() { + t.Skip("skipping in short mode") + } + // Set up chains, users and channels + ctx := context.Background() + chains, users, channels := SetupChain(t, ctx) + feeabs, gaia, osmosis := chains[0].(*cosmos.CosmosChain), chains[1].(*cosmos.CosmosChain), chains[2].(*cosmos.CosmosChain) + + feeabsUser, gaiaUser, osmosisUser := users[0], users[1], users[2] + + channFeeabsOsmosis, channOsmosisFeeabs, channFeeabsGaia, channGaiaFeeabs, channOsmosisGaia, channGaiaOsmosis := channels[0], channels[1], channels[2], channels[3], channels[4], channels[5] + + // Setup contract on Osmosis + // Store code crosschain Registry + crossChainRegistryContractID, err := osmosis.StoreContract(ctx, osmosisUser.KeyName(), "./bytecode/crosschain_registry.wasm") + require.NoError(t, err) + _ = crossChainRegistryContractID + // // Instatiate + owner := sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()) + initMsg := fmt.Sprintf("{\"owner\":\"%s\"}", owner) + registryContractAddress, err := osmosis.InstantiateContract(ctx, osmosisUser.KeyName(), crossChainRegistryContractID, initMsg, true) + require.NoError(t, err) + // Execute + msg := fmt.Sprintf("{\"modify_chain_channel_links\": {\"operations\": [{\"operation\": \"set\",\"source_chain\": \"feeabs\",\"destination_chain\": \"osmosis\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"osmosis\",\"destination_chain\": \"feeabs\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"feeabs\",\"destination_chain\": \"gaia\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"gaia\",\"destination_chain\": \"feeabs\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"osmosis\",\"destination_chain\": \"gaia\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"gaia\",\"destination_chain\": \"osmosis\",\"channel_id\": \"%s\"}]}}", + channFeeabsOsmosis.ChannelID, + channOsmosisFeeabs.ChannelID, + channFeeabsGaia.ChannelID, + channGaiaFeeabs.ChannelID, + channOsmosisGaia.ChannelID, + channGaiaOsmosis.ChannelID) + _, err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName(), registryContractAddress, msg) + require.NoError(t, err) + // Execute + msg = `{ + "modify_bech32_prefixes": + { + "operations": + [ + {"operation": "set", "chain_name": "feeabs", "prefix": "feeabs"}, + {"operation": "set", "chain_name": "osmosis", "prefix": "osmo"}, + {"operation": "set", "chain_name": "gaia", "prefix": "cosmos"} + ] + } + }` + _, err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName(), registryContractAddress, msg) + require.NoError(t, err) + + // Create pool Osmosis(uatom)/Osmosis(stake) on Osmosis + denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(channOsmosisGaia.PortID, channOsmosisGaia.ChannelID, gaia.Config().Denom)) + uatomOnOsmosis := denomTrace.IBCDenom() + osmosisUserBalance, err := osmosis.GetBalance(ctx, sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()), uatomOnOsmosis) + require.NoError(t, err) + require.Equal(t, amountToSend, osmosisUserBalance) + + denomTrace = transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(channOsmosisFeeabs.PortID, channOsmosisFeeabs.ChannelID, feeabs.Config().Denom)) + stakeOnOsmosis := denomTrace.IBCDenom() + osmosisUserBalance, err = osmosis.GetBalance(ctx, sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()), stakeOnOsmosis) + require.NoError(t, err) + require.Equal(t, amountToSend, osmosisUserBalance) + + poolID, err := feeabsCli.CreatePool(osmosis, ctx, osmosisUser.KeyName(), cosmos.OsmosisPoolParams{ + Weights: fmt.Sprintf("5%s,5%s", stakeOnOsmosis, uatomOnOsmosis), + InitialDeposit: fmt.Sprintf("95000000%s,950000000%s", stakeOnOsmosis, uatomOnOsmosis), + SwapFee: "0.01", + ExitFee: "0", + FutureGovernor: "", + }) + require.NoError(t, err) + require.Equal(t, poolID, "1") + + // Setup propose_pfm + // propose_pfm for feeabs + _, err = feeabsCli.SetupProposePFM(osmosis, ctx, osmosisUser.KeyName(), registryContractAddress, `{"propose_pfm":{"chain": "feeabs"}}`, stakeOnOsmosis) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, 15, feeabs, gaia, osmosis) + require.NoError(t, err) + queryMsg := QuerySmartMsg{ + Packet: HasPacketForwarding{ + ChainID: "feeabs", + }, + } + res := QuerySmartMsgResponse{} + err = osmosis.QueryContract(ctx, registryContractAddress, queryMsg, &res) + require.NoError(t, err) + // propose_pfm for gaia + _, err = feeabsCli.SetupProposePFM(osmosis, ctx, osmosisUser.KeyName(), registryContractAddress, `{"propose_pfm":{"chain": "gaia"}}`, uatomOnOsmosis) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, 15, feeabs, gaia, osmosis) + require.NoError(t, err) + queryMsg = QuerySmartMsg{ + Packet: HasPacketForwarding{ + ChainID: "gaia", + }, + } + res = QuerySmartMsgResponse{} + err = osmosis.QueryContract(ctx, registryContractAddress, queryMsg, &res) + require.NoError(t, err) + // store swaprouter + swapRouterContractID, err := osmosis.StoreContract(ctx, osmosisUser.KeyName(), "./bytecode/swaprouter.wasm") + require.NoError(t, err) + // instantiate + swapRouterContractAddress, err := osmosis.InstantiateContract(ctx, osmosisUser.KeyName(), swapRouterContractID, initMsg, true) + require.NoError(t, err) + + // execute + msg = fmt.Sprintf("{\"set_route\":{\"input_denom\":\"%s\",\"output_denom\":\"%s\",\"pool_route\":[{\"pool_id\":\"%s\",\"token_out_denom\":\"%s\"}]}}", + uatomOnOsmosis, + stakeOnOsmosis, + poolID, + stakeOnOsmosis, + ) + _, err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName(), swapRouterContractAddress, msg) + require.NoError(t, err) + + // store xcs + xcsContractID, err := osmosis.StoreContract(ctx, osmosisUser.KeyName(), "./bytecode/crosschain_swaps.wasm") + require.NoError(t, err) + // instantiate + initMsg = fmt.Sprintf("{\"swap_contract\":\"%s\",\"governor\": \"%s\"}", swapRouterContractAddress, owner) + xcsContractAddress, err := osmosis.InstantiateContract(ctx, osmosisUser.KeyName(), xcsContractID, initMsg, true) + _ = xcsContractAddress + require.NoError(t, err) + // Swap Feeabs(uatom) to Osmosis + // send ibc token to feeabs module account + gaiaHeight, err := gaia.Height(ctx) + require.NoError(t, err) + + feeabsModule, err := feeabsCli.QueryModuleAccountBalances(feeabs, ctx) + require.NoError(t, err) + dstAddress := feeabsModule.Address + transfer := ibc.WalletAmount{ + Address: dstAddress, + Denom: gaia.Config().Denom, + Amount: math.NewInt(1_000_000), + } + + tx, err := gaia.SendIBCTransfer(ctx, channGaiaFeeabs.ChannelID, gaiaUser.KeyName(), transfer, ibc.TransferOptions{}) + require.NoError(t, err) + require.NoError(t, tx.Validate()) + + _, err = testutil.PollForAck(ctx, gaia, gaiaHeight, gaiaHeight+30, tx.Packet) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, 1, feeabs, gaia, osmosis) + require.NoError(t, err) + + denomTrace = transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(channFeeabsGaia.PortID, channFeeabsGaia.ChannelID, gaia.Config().Denom)) + uatomOnFeeabs := denomTrace.IBCDenom() + + currentDirectory, _ := os.Getwd() + paramChangePath := path.Join(currentDirectory, "proposal", "proposal.json") + + changeParamProposal, err := paramsutils.ParseParamChangeProposalJSON(feeabs.Config().EncodingConfig.Amino, paramChangePath) + require.NoError(t, err) + + paramTx, err := feeabsCli.ParamChangeProposal(feeabs, ctx, feeabsUser.KeyName(), &changeParamProposal) + require.NoError(t, err, "error submitting param change proposal tx") + + err = feeabs.VoteOnProposalAllValidators(ctx, paramTx.ProposalID, cosmos.ProposalVoteYes) + require.NoError(t, err, "failed to submit votes") + + height, err := feeabs.Height(ctx) + require.NoError(t, err) + + _, err = cosmos.PollForProposalStatus(ctx, feeabs, height, height+10, paramTx.ProposalID, cosmos.ProposalStatusPassed) + require.NoError(t, err, "proposal status did not change to passed in expected number of blocks") + + _, err = feeabsCli.AddHostZoneProposal(feeabs, ctx, feeabsUser.KeyName(), "./proposal/add_host_zone.json") + require.NoError(t, err) + + err = feeabs.VoteOnProposalAllValidators(ctx, "2", cosmos.ProposalVoteYes) + require.NoError(t, err, "failed to submit votes") + + height, err = feeabs.Height(ctx) + require.NoError(t, err) + + _, err = cosmos.PollForProposalStatus(ctx, feeabs, height, height+10, "2", cosmos.ProposalStatusPassed) + require.NoError(t, err, "proposal status did not change to passed in expected number of blocks") + + _, err = feeabsCli.QueryHostZoneConfig(feeabs, ctx) + require.NoError(t, err) + // xcs + feeabsHeight, err := feeabs.Height(ctx) + require.NoError(t, err) + + feeabsModule, err = feeabsCli.QueryModuleAccountBalances(feeabs, ctx) + require.NoError(t, err) + fmt.Printf("Module Account Balances before swap: %v\n", feeabsModule.Balances) + + transferTx, err := feeabsCli.CrossChainSwap(feeabs, ctx, feeabsUser.KeyName(), uatomOnFeeabs) + require.NoError(t, err) + _, err = testutil.PollForAck(ctx, feeabs, feeabsHeight, feeabsHeight+25, transferTx.Packet) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, 50, feeabs, gaia, osmosis) + require.NoError(t, err) + + feeabsModule, err = feeabsCli.QueryModuleAccountBalances(feeabs, ctx) + require.NoError(t, err) + fmt.Printf("Module Account Balances after swap: %v\n", feeabsModule.Balances) + + balance, err := feeabs.GetBalance(ctx, feeabsModule.Address, feeabs.Config().Denom) + require.NoError(t, err) + require.True(t, balance.GT(math.NewInt(1))) +} diff --git a/tests/interchaintest/packet_foward_test.go b/tests/interchaintest/packet_foward_test.go index f15dfee1..146321c3 100644 --- a/tests/interchaintest/packet_foward_test.go +++ b/tests/interchaintest/packet_foward_test.go @@ -3,17 +3,12 @@ package interchaintest import ( "context" "fmt" - "os" - "path" "testing" - "cosmossdk.io/math" sdktypes "github.com/cosmos/cosmos-sdk/types" - paramsutils "github.com/cosmos/cosmos-sdk/x/params/client/utils" transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" feeabsCli "github.com/notional-labs/fee-abstraction/tests/interchaintest/feeabs" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v7/ibc" "github.com/strangelove-ventures/interchaintest/v7/testutil" "github.com/stretchr/testify/require" ) @@ -27,7 +22,7 @@ func TestPacketForwardMiddleware(t *testing.T) { chains, users, channels := SetupChain(t, ctx) feeabs, gaia, osmosis := chains[0].(*cosmos.CosmosChain), chains[1].(*cosmos.CosmosChain), chains[2].(*cosmos.CosmosChain) - feeabsUser, gaiaUser, osmosisUser := users[0], users[1], users[2] + _, _, osmosisUser := users[0], users[1], users[2] channFeeabsOsmosis, channOsmosisFeeabs, channFeeabsGaia, channGaiaFeeabs, channOsmosisGaia, channGaiaOsmosis := channels[0], channels[1], channels[2], channels[3], channels[4], channels[5] @@ -101,7 +96,8 @@ func TestPacketForwardMiddleware(t *testing.T) { }, } res := QuerySmartMsgResponse{} - osmosis.QueryContract(ctx, registryContractAddress, queryMsg, res) + err = osmosis.QueryContract(ctx, registryContractAddress, queryMsg, &res) + require.NoError(t, err) // propose_pfm for gaia _, err = feeabsCli.SetupProposePFM(osmosis, ctx, osmosisUser.KeyName(), registryContractAddress, `{"propose_pfm":{"chain": "gaia"}}`, uatomOnOsmosis) require.NoError(t, err) @@ -113,110 +109,6 @@ func TestPacketForwardMiddleware(t *testing.T) { }, } res = QuerySmartMsgResponse{} - osmosis.QueryContract(ctx, registryContractAddress, queryMsg, res) - // store swaprouter - swapRouterContractID, err := osmosis.StoreContract(ctx, osmosisUser.KeyName(), "./bytecode/swaprouter.wasm") - require.NoError(t, err) - // instantiate - swapRouterContractAddress, err := osmosis.InstantiateContract(ctx, osmosisUser.KeyName(), swapRouterContractID, initMsg, true) - require.NoError(t, err) - - // execute - msg = fmt.Sprintf("{\"set_route\":{\"input_denom\":\"%s\",\"output_denom\":\"%s\",\"pool_route\":[{\"pool_id\":\"%s\",\"token_out_denom\":\"%s\"}]}}", - uatomOnOsmosis, - stakeOnOsmosis, - poolID, - stakeOnOsmosis, - ) - _, err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName(), swapRouterContractAddress, msg) - require.NoError(t, err) - - // store xcs - xcsContractID, err := osmosis.StoreContract(ctx, osmosisUser.KeyName(), "./bytecode/crosschain_swaps.wasm") - require.NoError(t, err) - // instantiate - initMsg = fmt.Sprintf("{\"swap_contract\":\"%s\",\"governor\": \"%s\"}", swapRouterContractAddress, owner) - xcsContractAddress, err := osmosis.InstantiateContract(ctx, osmosisUser.KeyName(), xcsContractID, initMsg, true) - _ = xcsContractAddress - require.NoError(t, err) - // Swap Feeabs(uatom) to Osmosis - // send ibc token to feeabs module account - gaiaHeight, err := gaia.Height(ctx) - require.NoError(t, err) - - feeabsModule, err := feeabsCli.QueryModuleAccountBalances(feeabs, ctx) - require.NoError(t, err) - dstAddress := feeabsModule.Address - transfer := ibc.WalletAmount{ - Address: dstAddress, - Denom: gaia.Config().Denom, - Amount: math.NewInt(1_000_000), - } - - tx, err := gaia.SendIBCTransfer(ctx, channGaiaFeeabs.ChannelID, gaiaUser.KeyName(), transfer, ibc.TransferOptions{}) - require.NoError(t, err) - require.NoError(t, tx.Validate()) - - _, err = testutil.PollForAck(ctx, gaia, gaiaHeight, gaiaHeight+30, tx.Packet) - require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, 1, feeabs, gaia, osmosis) - require.NoError(t, err) - - denomTrace = transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(channFeeabsGaia.PortID, channFeeabsGaia.ChannelID, gaia.Config().Denom)) - uatomOnFeeabs := denomTrace.IBCDenom() - - current_directory, _ := os.Getwd() - param_change_path := path.Join(current_directory, "proposal", "proposal.json") - - changeParamProposal, err := paramsutils.ParseParamChangeProposalJSON(feeabs.Config().EncodingConfig.Amino, param_change_path) - require.NoError(t, err) - - paramTx, err := feeabsCli.ParamChangeProposal(feeabs, ctx, feeabsUser.KeyName(), &changeParamProposal) - require.NoError(t, err, "error submitting param change proposal tx") - - err = feeabs.VoteOnProposalAllValidators(ctx, paramTx.ProposalID, cosmos.ProposalVoteYes) - require.NoError(t, err, "failed to submit votes") - - height, err := feeabs.Height(ctx) - require.NoError(t, err) - - _, err = cosmos.PollForProposalStatus(ctx, feeabs, height, height+10, paramTx.ProposalID, cosmos.ProposalStatusPassed) - require.NoError(t, err, "proposal status did not change to passed in expected number of blocks") - - _, err = feeabsCli.AddHostZoneProposal(feeabs, ctx, feeabsUser.KeyName(), "./proposal/add_host_zone.json") - require.NoError(t, err) - - err = feeabs.VoteOnProposalAllValidators(ctx, "2", cosmos.ProposalVoteYes) - require.NoError(t, err, "failed to submit votes") - - height, err = feeabs.Height(ctx) - require.NoError(t, err) - - _, err = cosmos.PollForProposalStatus(ctx, feeabs, height, height+10, "2", cosmos.ProposalStatusPassed) - require.NoError(t, err, "proposal status did not change to passed in expected number of blocks") - - _, err = feeabsCli.QueryHostZoneConfig(feeabs, ctx) - require.NoError(t, err) - // xcs - feeabsHeight, err := feeabs.Height(ctx) - require.NoError(t, err) - - feeabsModule, err = feeabsCli.QueryModuleAccountBalances(feeabs, ctx) - require.NoError(t, err) - fmt.Printf("Module Account Balances before swap: %v\n", feeabsModule.Balances) - - transferTx, err := feeabsCli.CrossChainSwap(feeabs, ctx, feeabsUser.KeyName(), uatomOnFeeabs) - require.NoError(t, err) - _, err = testutil.PollForAck(ctx, feeabs, feeabsHeight, feeabsHeight+25, transferTx.Packet) - require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, 50, feeabs, gaia, osmosis) - require.NoError(t, err) - - feeabsModule, err = feeabsCli.QueryModuleAccountBalances(feeabs, ctx) - require.NoError(t, err) - fmt.Printf("Module Account Balances after swap: %v\n", feeabsModule.Balances) - - balance, err := feeabs.GetBalance(ctx, feeabsModule.Address, feeabs.Config().Denom) + err = osmosis.QueryContract(ctx, registryContractAddress, queryMsg, &res) require.NoError(t, err) - require.True(t, balance.GT(math.NewInt(1))) } diff --git a/tests/interchaintest/setup.go b/tests/interchaintest/setup.go index 5c772c35..d3b5077c 100644 --- a/tests/interchaintest/setup.go +++ b/tests/interchaintest/setup.go @@ -23,7 +23,7 @@ type QuerySmartMsg struct { } type QuerySmartMsgResponse struct { - Response bool `json:"data"` + Data bool `json:"data"` } const ( From a32704a810cd643ed6dddab9712829e2bc5f2c61 Mon Sep 17 00:00:00 2001 From: Duong Minh Ngoc <153509244+minhngoc274@users.noreply.github.com> Date: Tue, 30 Jan 2024 11:28:01 +0700 Subject: [PATCH 84/90] refactor: update dockerfile (#144) --- Dockerfile | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index 8f4c4a0d..a0f6ecf4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,13 +1,11 @@ # syntax=docker/dockerfile:1 -ARG GO_VERSION="1.19" -ARG RUNNER_IMAGE="gcr.io/distroless/static-debian11" - +ARG GO_VERSION="1.21" # -------------------------------------------------------- # Builder # -------------------------------------------------------- -FROM golang:${GO_VERSION}-alpine as builder +FROM golang:${GO_VERSION}-alpine3.18 as builder ARG GIT_VERSION ARG GIT_COMMIT @@ -41,18 +39,18 @@ RUN --mount=type=cache,target=/root/.cache/go-build \ -X github.com/cosmos/cosmos-sdk/version.BuildTags=netgo,ledger,muslc \ -w -s -linkmode=external -extldflags '-Wl,-z,muldefs -static'" \ -trimpath \ - -o /feeapp/build/feeappd \ + -o /feeapp/bin/feeappd \ /feeapp/cmd/feeappd/main.go # -------------------------------------------------------- # Runner # -------------------------------------------------------- -FROM ${RUNNER_IMAGE} +FROM alpine:3.16 -COPY --from=builder /feeapp/build/feeappd /bin/feeappd +COPY --from=builder /feeapp/bin/feeappd /usr/bin/feeappd -ENV HOME /feeapp +ENV HOME /.feeappd WORKDIR $HOME # rest server From b06d7b4c0e3116d0edfec9042a4d5e4f13528c96 Mon Sep 17 00:00:00 2001 From: Tien Nguyen Date: Tue, 30 Jan 2024 13:58:24 +0700 Subject: [PATCH 85/90] Upgrade ibc packet forwarder. (#143) * Upgrade ibc packet forwarder. * Fix some errors. * Fix relayer images version * Fix test invalid balance between int64 and math.Int * Some refactors. --- .gitignore | 3 +- Makefile | 2 +- app/app.go | 39 +- go.mod | 137 +- go.sum | 629 +- go.work | 3 - testnode.sh | 2 +- tests/interchaintest/chain_start_test.go | 323 - tests/interchaintest/feeabs/events.go | 11 +- tests/interchaintest/feeabs/proposal.go | 26 +- tests/interchaintest/feeabs_test.go | 6 +- tests/interchaintest/go.mod | 167 +- tests/interchaintest/go.sum | 331 +- .../interchaintest/host_zone_proposal_test.go | 2 +- tests/interchaintest/ibc_transfer_test.go | 21 +- .../gamm/balancer/balancerPool.pb.go | 1523 ---- .../osmosistypes/gamm/balancer/codec.go | 30 - .../osmosistypes/gamm/balancer/msgs.go | 47 - .../osmosistypes/gamm/balancer/pool.go | 45 - .../osmosistypes/gamm/balancer/tx.pb.go | 1421 ---- .../osmosistypes/gamm/types/codec.go | 35 - .../osmosistypes/gamm/types/genesis.pb.go | 1093 --- .../osmosistypes/gamm/types/msgs.go | 207 - .../osmosistypes/gamm/types/query.pb.go | 7126 ----------------- .../osmosistypes/gamm/types/query.pb.gw.go | 1585 ---- .../osmosistypes/gamm/types/tx.pb.go | 4568 ----------- .../osmosistypes/gamm/v2types/query.pb.go | 692 -- .../osmosistypes/gamm/v2types/query.pb.gw.go | 207 - .../poolmanager/types/swap_route.pb.go | 1032 --- tests/interchaintest/packet_foward_test.go | 2 +- tests/interchaintest/setup.go | 346 +- third_party/tendermint/abci/types.proto | 486 -- third_party/tendermint/crypto/keys.proto | 17 - third_party/tendermint/crypto/proof.proto | 41 - third_party/tendermint/types/params.proto | 92 - third_party/tendermint/types/validator.proto | 37 - 36 files changed, 1151 insertions(+), 21183 deletions(-) delete mode 100644 go.work delete mode 100644 tests/interchaintest/osmosistypes/gamm/balancer/balancerPool.pb.go delete mode 100644 tests/interchaintest/osmosistypes/gamm/balancer/codec.go delete mode 100644 tests/interchaintest/osmosistypes/gamm/balancer/msgs.go delete mode 100644 tests/interchaintest/osmosistypes/gamm/balancer/pool.go delete mode 100644 tests/interchaintest/osmosistypes/gamm/balancer/tx.pb.go delete mode 100644 tests/interchaintest/osmosistypes/gamm/types/codec.go delete mode 100644 tests/interchaintest/osmosistypes/gamm/types/genesis.pb.go delete mode 100644 tests/interchaintest/osmosistypes/gamm/types/msgs.go delete mode 100644 tests/interchaintest/osmosistypes/gamm/types/query.pb.go delete mode 100644 tests/interchaintest/osmosistypes/gamm/types/query.pb.gw.go delete mode 100644 tests/interchaintest/osmosistypes/gamm/types/tx.pb.go delete mode 100644 tests/interchaintest/osmosistypes/gamm/v2types/query.pb.go delete mode 100644 tests/interchaintest/osmosistypes/gamm/v2types/query.pb.gw.go delete mode 100644 tests/interchaintest/osmosistypes/poolmanager/types/swap_route.pb.go delete mode 100644 third_party/tendermint/abci/types.proto delete mode 100644 third_party/tendermint/crypto/keys.proto delete mode 100644 third_party/tendermint/crypto/proof.proto delete mode 100644 third_party/tendermint/types/params.proto delete mode 100644 third_party/tendermint/types/validator.proto diff --git a/.gitignore b/.gitignore index 2226c1b2..772cc564 100644 --- a/.gitignore +++ b/.gitignore @@ -11,8 +11,9 @@ # Output of the go coverage tool, specifically when used with LiteIDE *.out -# Go +# Go work go.work.sum +go.work bin/ diff --git a/Makefile b/Makefile index d840a7be..dec41049 100644 --- a/Makefile +++ b/Makefile @@ -94,7 +94,7 @@ build: go build $(BUILD_FLAGS) -o bin/feeappd ./cmd/feeappd test: - @GOWORK=off go test -race -v ./... + go test -race -v ./... docker-build-debug: @DOCKER_BUILDKIT=1 docker build -t feeapp:debug -f Dockerfile . diff --git a/app/app.go b/app/app.go index 954c04da..aba5a7e3 100644 --- a/app/app.go +++ b/app/app.go @@ -10,9 +10,9 @@ import ( "path/filepath" "sort" - "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router" - routerkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/keeper" - routertypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/types" + pfmrouter "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward" + pfmrouterkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/keeper" + pfmroutertypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/types" ica "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts" icacontrollerkeeper "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/keeper" icacontrollertypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/types" @@ -168,7 +168,7 @@ var ( evidence.AppModuleBasic{}, transfer.AppModuleBasic{}, vesting.AppModuleBasic{}, - router.AppModuleBasic{}, + pfmrouter.AppModuleBasic{}, ica.AppModuleBasic{}, solomachine.AppModuleBasic{}, feeabsmodule.AppModuleBasic{}, @@ -237,7 +237,7 @@ type FeeAbs struct { // nolint: golint FeeabsKeeper feeabskeeper.Keeper ConsensusParamsKeeper consensusparamkeeper.Keeper - RouterKeeper *routerkeeper.Keeper + RouterKeeper *pfmrouterkeeper.Keeper // make scoped keepers public for test purposes ScopedIBCKeeper capabilitykeeper.ScopedKeeper @@ -289,7 +289,7 @@ func NewFeeAbs( minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey, govtypes.StoreKey, paramstypes.StoreKey, ibcexported.StoreKey, upgradetypes.StoreKey, evidencetypes.StoreKey, ibctransfertypes.StoreKey, feeabstypes.StoreKey, - capabilitytypes.StoreKey, feegrant.StoreKey, authzkeeper.StoreKey, routertypes.StoreKey, + capabilitytypes.StoreKey, feegrant.StoreKey, authzkeeper.StoreKey, pfmroutertypes.StoreKey, icahosttypes.StoreKey, icacontrollertypes.StoreKey, consensusparamtypes.StoreKey, crisistypes.StoreKey, ) tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey) @@ -422,16 +422,17 @@ func NewFeeAbs( scopedIBCKeeper, ) - // RouterKeeper must be created before TransferKeeper - app.RouterKeeper = routerkeeper.NewKeeper( + // PFMRouterKeeper must be created before TransferKeeper + authority := authtypes.NewModuleAddress(govtypes.ModuleName).String() + app.RouterKeeper = pfmrouterkeeper.NewKeeper( appCodec, - app.keys[routertypes.StoreKey], - app.GetSubspace(routertypes.ModuleName), - app.TransferKeeper, + app.keys[pfmroutertypes.StoreKey], + nil, // Will be zero-value here. Reference is set later on with SetTransferKeeper. app.IBCKeeper.ChannelKeeper, app.DistrKeeper, app.BankKeeper, app.IBCKeeper.ChannelKeeper, + authority, ) // Create Transfer Keepers @@ -449,7 +450,7 @@ func NewFeeAbs( app.RouterKeeper.SetTransferKeeper(app.TransferKeeper) transferModule := transfer.NewAppModule(app.TransferKeeper) - routerModule := router.NewAppModule(app.RouterKeeper) + routerModule := pfmrouter.NewAppModule(app.RouterKeeper, app.GetSubspace(pfmroutertypes.ModuleName)) app.FeeabsKeeper = feeabskeeper.NewKeeper( appCodec, @@ -478,12 +479,12 @@ func NewFeeAbs( var ibcStack porttypes.IBCModule ibcStack = transfer.NewIBCModule(app.TransferKeeper) - ibcStack = router.NewIBCMiddleware( + ibcStack = pfmrouter.NewIBCMiddleware( ibcStack, app.RouterKeeper, 0, - routerkeeper.DefaultForwardTransferPacketTimeoutTimestamp, - routerkeeper.DefaultRefundTransferPacketTimeoutTimestamp, + pfmrouterkeeper.DefaultForwardTransferPacketTimeoutTimestamp, + pfmrouterkeeper.DefaultRefundTransferPacketTimeoutTimestamp, ) app.ICAHostKeeper = icahostkeeper.NewKeeper( @@ -611,7 +612,7 @@ func NewFeeAbs( ibcexported.ModuleName, feeabstypes.ModuleName, icatypes.ModuleName, - routertypes.ModuleName, + pfmroutertypes.ModuleName, // intertxtypes.ModuleName, ) @@ -637,7 +638,7 @@ func NewFeeAbs( ibcexported.ModuleName, feeabstypes.ModuleName, icatypes.ModuleName, - routertypes.ModuleName, + pfmroutertypes.ModuleName, // intertxtypes.ModuleName, ) @@ -668,7 +669,7 @@ func NewFeeAbs( ibcexported.ModuleName, feeabstypes.ModuleName, icatypes.ModuleName, - routertypes.ModuleName, + pfmroutertypes.ModuleName, ) // Uncomment if you want to set a custom migration order here. @@ -982,7 +983,7 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino paramsKeeper.Subspace(crisistypes.ModuleName) paramsKeeper.Subspace(ibctransfertypes.ModuleName) paramsKeeper.Subspace(ibcexported.ModuleName) - paramsKeeper.Subspace(routertypes.ModuleName).WithKeyTable(routertypes.ParamKeyTable()) + paramsKeeper.Subspace(pfmroutertypes.ModuleName).WithKeyTable(pfmroutertypes.ParamKeyTable()) paramsKeeper.Subspace(icahosttypes.SubModuleName) paramsKeeper.Subspace(icacontrollertypes.SubModuleName) paramsKeeper.Subspace(feeabstypes.ModuleName) diff --git a/go.mod b/go.mod index 5e251502..10092e08 100644 --- a/go.mod +++ b/go.mod @@ -3,30 +3,31 @@ module github.com/osmosis-labs/fee-abstraction/v7 go 1.21 require ( - cosmossdk.io/errors v1.0.0-beta.7 + cosmossdk.io/errors v1.0.0 github.com/client9/misspell v0.3.4 - github.com/cometbft/cometbft v0.37.2 - github.com/cometbft/cometbft-db v0.7.0 - github.com/cosmos/cosmos-sdk v0.47.0 - github.com/cosmos/gogoproto v1.4.6 - github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0 - github.com/cosmos/ibc-go/v7 v7.0.0 + github.com/cometbft/cometbft v0.37.4 + github.com/cometbft/cometbft-db v0.9.1 + github.com/cosmos/cosmos-sdk v0.47.6 + github.com/cosmos/gogoproto v1.4.10 + github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.1.2 + github.com/cosmos/ibc-go/v7 v7.3.1 github.com/golang/protobuf v1.5.3 github.com/golangci/golangci-lint v1.50.1 github.com/gorilla/mux v1.8.0 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/rakyll/statik v0.1.7 - github.com/spf13/cast v1.5.0 - github.com/spf13/cobra v1.6.1 - github.com/stretchr/testify v1.8.2 + github.com/spf13/cast v1.5.1 + github.com/spf13/cobra v1.8.0 + github.com/stretchr/testify v1.8.4 golang.org/x/tools v0.6.0 - google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 - google.golang.org/grpc v1.54.0 + google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 + google.golang.org/grpc v1.59.0 mvdan.cc/gofumpt v0.4.0 ) require ( 4d63.com/gochecknoglobals v0.1.0 // indirect + cosmossdk.io/log v1.2.1 // indirect github.com/Abirdcfly/dupword v0.0.7 // indirect github.com/Antonboom/errname v0.1.7 // indirect github.com/Antonboom/nilnil v0.1.1 // indirect @@ -47,6 +48,9 @@ require ( github.com/butuzov/ireturn v0.1.1 // indirect github.com/charithe/durationcheck v0.0.9 // indirect github.com/chavacava/garif v0.0.0-20220630083739-93517212f375 // indirect + github.com/cockroachdb/errors v1.10.0 // indirect + github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect + github.com/cockroachdb/redact v1.1.5 // indirect github.com/curioswitch/go-reassign v0.2.0 // indirect github.com/daixiang0/gci v0.8.1 // indirect github.com/denis-tingaikin/go-header v0.4.3 // indirect @@ -56,6 +60,7 @@ require ( github.com/fatih/structtag v1.2.0 // indirect github.com/firefart/nonamedreturns v1.0.4 // indirect github.com/fzipp/gocyclo v0.6.0 // indirect + github.com/getsentry/sentry-go v0.23.0 // indirect github.com/go-critic/go-critic v0.6.5 // indirect github.com/go-toolsmith/astcast v1.0.0 // indirect github.com/go-toolsmith/astcopy v1.0.2 // indirect @@ -77,6 +82,7 @@ require ( github.com/golangci/misspell v0.3.5 // indirect github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6 // indirect github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 // indirect + github.com/google/s2a-go v0.1.4 // indirect github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8 // indirect github.com/gostaticanalysis/analysisutil v0.7.1 // indirect github.com/gostaticanalysis/comment v1.4.2 // indirect @@ -84,6 +90,7 @@ require ( github.com/gostaticanalysis/nilerr v0.1.1 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/go-uuid v1.0.2 // indirect github.com/hexops/gotextdiff v1.0.3 // indirect github.com/jgautheron/goconst v1.5.1 // indirect github.com/jingyugao/rowserrcheck v1.1.1 // indirect @@ -92,12 +99,15 @@ require ( github.com/kisielk/errcheck v1.6.2 // indirect github.com/kisielk/gotool v1.0.0 // indirect github.com/kkHAIKE/contextcheck v1.1.3 // indirect + github.com/kr/pretty v0.3.1 // indirect + github.com/kr/text v0.2.0 // indirect github.com/kulti/thelper v0.6.3 // indirect github.com/kunwardeep/paralleltest v1.0.6 // indirect github.com/kyoh86/exportloopref v0.1.8 // indirect github.com/ldez/gomoddirectives v0.2.3 // indirect github.com/ldez/tagliatelle v0.3.1 // indirect github.com/leonklingele/grouper v1.1.0 // indirect + github.com/linxGnu/grocksdb v1.8.6 // indirect github.com/lufeee/execinquery v1.2.1 // indirect github.com/maratori/testableexamples v1.0.0 // indirect github.com/maratori/testpackage v1.1.0 // indirect @@ -119,6 +129,8 @@ require ( github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f // indirect github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95 // indirect github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 // indirect + github.com/rogpeppe/go-internal v1.11.0 // indirect + github.com/rs/zerolog v1.30.0 // indirect github.com/ryancurrah/gomodguard v1.2.4 // indirect github.com/ryanrolds/sqlclosecheck v0.3.0 // indirect github.com/sanposhiho/wastedassign/v2 v2.0.6 // indirect @@ -151,8 +163,10 @@ require ( go.uber.org/multierr v1.8.0 // indirect go.uber.org/zap v1.23.0 // indirect golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91 // indirect - golang.org/x/mod v0.8.0 // indirect - golang.org/x/sync v0.1.0 // indirect + golang.org/x/mod v0.11.0 // indirect + golang.org/x/sync v0.3.0 // indirect + google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b // indirect honnef.co/go/tools v0.3.3 // indirect mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed // indirect mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b // indirect @@ -160,20 +174,20 @@ require ( ) require ( - cloud.google.com/go v0.110.0 // indirect - cloud.google.com/go/compute v1.18.0 // indirect + cloud.google.com/go v0.110.8 // indirect + cloud.google.com/go/compute v1.23.0 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v0.12.0 // indirect - cloud.google.com/go/storage v1.29.0 // indirect + cloud.google.com/go/iam v1.1.2 // indirect + cloud.google.com/go/storage v1.30.1 // indirect cosmossdk.io/api v0.3.1 // indirect cosmossdk.io/core v0.5.1 // indirect - cosmossdk.io/depinject v1.0.0-alpha.3 // indirect - cosmossdk.io/math v1.0.0-rc.0 + cosmossdk.io/depinject v1.0.0-alpha.4 // indirect + cosmossdk.io/math v1.2.0 cosmossdk.io/tools/rosetta v0.2.1 // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.1 // indirect - github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect + github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect github.com/armon/go-metrics v0.4.1 // indirect github.com/aws/aws-sdk-go v1.44.203 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -191,9 +205,9 @@ require ( github.com/cosmos/cosmos-proto v1.0.0-beta.2 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect - github.com/cosmos/iavl v0.20.0 // indirect - github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab // indirect - github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect + github.com/cosmos/iavl v0.20.1 // indirect + github.com/cosmos/ics23/go v0.10.0 // indirect + github.com/cosmos/ledger-cosmos-go v0.12.4 // indirect github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect github.com/creachadair/taskgroup v0.4.2 // indirect github.com/danieljoos/wincred v1.1.2 // indirect @@ -212,16 +226,16 @@ require ( github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect - github.com/golang/glog v1.1.0 // indirect + github.com/golang/glog v1.1.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/mock v1.6.0 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/btree v1.1.2 // indirect - github.com/google/go-cmp v0.5.9 // indirect + github.com/google/go-cmp v0.6.0 // indirect github.com/google/orderedcode v0.0.1 // indirect - github.com/google/uuid v1.3.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect - github.com/googleapis/gax-go/v2 v2.7.0 // indirect + github.com/google/uuid v1.3.1 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.2.4 // indirect + github.com/googleapis/gax-go/v2 v2.12.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect github.com/gorilla/websocket v1.5.0 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect @@ -229,7 +243,7 @@ require ( github.com/gtank/merlin v0.1.1 // indirect github.com/gtank/ristretto255 v0.1.2 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-getter v1.7.0 // indirect + github.com/hashicorp/go-getter v1.7.1 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect github.com/hashicorp/go-version v1.6.0 // indirect @@ -242,64 +256,75 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect - github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.16.3 // indirect + github.com/klauspost/compress v1.16.7 // indirect github.com/lib/pq v1.10.7 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect - github.com/mattn/go-isatty v0.0.17 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect github.com/minio/highwayhash v1.0.2 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mtibben/percent v0.2.1 // indirect - github.com/pelletier/go-toml/v2 v2.0.6 // indirect - github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d // indirect + github.com/pelletier/go-toml/v2 v2.0.8 // indirect + github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.3.0 // indirect - github.com/prometheus/common v0.40.0 // indirect + github.com/prometheus/common v0.42.0 // indirect github.com/prometheus/procfs v0.9.0 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/rs/cors v1.8.3 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect - github.com/spf13/afero v1.9.3 // indirect + github.com/spf13/afero v1.9.5 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/spf13/viper v1.15.0 // indirect + github.com/spf13/viper v1.16.0 // indirect github.com/subosito/gotenv v1.4.2 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect - github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c // indirect github.com/tendermint/go-amino v0.16.0 // indirect github.com/tidwall/btree v1.6.0 // indirect github.com/ulikunitz/xz v0.5.11 // indirect - github.com/zondax/hid v0.9.1 // indirect - github.com/zondax/ledger-go v0.14.1 // indirect - go.etcd.io/bbolt v1.3.7 // indirect + github.com/zondax/hid v0.9.2 // indirect + github.com/zondax/ledger-go v0.14.3 // indirect + go.etcd.io/bbolt v1.3.8 // indirect go.opencensus.io v0.24.0 // indirect - golang.org/x/crypto v0.7.0 // indirect - golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 // indirect - golang.org/x/net v0.8.0 // indirect - golang.org/x/oauth2 v0.5.0 // indirect - golang.org/x/sys v0.6.0 // indirect - golang.org/x/term v0.6.0 // indirect - golang.org/x/text v0.8.0 // indirect + golang.org/x/crypto v0.15.0 // indirect + golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb // indirect + golang.org/x/net v0.18.0 // indirect + golang.org/x/oauth2 v0.11.0 // indirect + golang.org/x/sys v0.14.0 // indirect + golang.org/x/term v0.14.0 // indirect + golang.org/x/text v0.14.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.110.0 // indirect + google.golang.org/api v0.128.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.30.0 + google.golang.org/protobuf v1.31.0 gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect nhooyr.io/websocket v1.8.6 // indirect - pgregory.net/rapid v0.5.5 // indirect + pgregory.net/rapid v1.1.0 // indirect sigs.k8s.io/yaml v1.3.0 // indirect ) -// replace broken goleveldb -replace github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 +replace ( + // Use cosmos keyring + github.com/99designs/keyring => github.com/cosmos/keyring v1.2.0 + + // TODO: remove it: https://github.com/cosmos/cosmos-sdk/issues/13134 + github.com/dgrijalva/jwt-go => github.com/golang-jwt/jwt/v4 v4.4.2 + + // TODO Remove it: https://github.com/cosmos/cosmos-sdk/issues/10409 + github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.8.1 + + // following versions might cause unexpected behavior + github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 + + // latest grpc doesn't work with our modified proto compiler, so we need to enforce + // the following version across all dependencies. + google.golang.org/grpc => google.golang.org/grpc v1.54.0 +) diff --git a/go.sum b/go.sum index 55e13ea6..54fcff06 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,5 @@ 4d63.com/gochecknoglobals v0.1.0 h1:zeZSRqj5yCg28tCkIV/z/lWbwvNm5qnKVS15PI8nhD0= 4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= @@ -30,28 +29,56 @@ cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+Y cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= -cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= +cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= +cloud.google.com/go v0.110.8 h1:tyNdfIxjzaWctIiLYOTalaLKZ17SI44SKFW26QbOhME= +cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk= +cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= +cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= +cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= +cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= +cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= +cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc= +cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= +cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno= +cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0= +cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ= +cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= +cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= +cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= +cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= +cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc= +cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= +cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE= +cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= +cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4= +cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -59,12 +86,28 @@ cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUM cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= +cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= +cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0= +cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= +cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg= +cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= +cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk= +cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= +cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U= +cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= +cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM= +cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4= +cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= @@ -72,103 +115,234 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.18.0 h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY= -cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= +cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= +cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= +cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= +cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY= +cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= +cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= +cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= +cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= +cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE= +cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= +cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38= +cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA= +cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= +cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s= +cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= +cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= +cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c= +cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek= +cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0= +cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM= +cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k= +cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= +cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= +cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= +cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= +cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= +cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w= +cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= +cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY= +cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w= +cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= +cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60= +cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA= +cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= +cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= +cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v0.12.0 h1:DRtTY29b75ciH6Ov1PHb4/iat2CLCvrOm40Q0a6DFpE= -cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= +cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= +cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= +cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= +cloud.google.com/go/iam v1.1.2 h1:gacbrBdWcoVmGLozRuStX45YKvJtzIjJdAolzUs1sm4= +cloud.google.com/go/iam v1.1.2/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= +cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= +cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= +cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= +cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= +cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= +cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= +cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= +cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= +cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= +cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= -cloud.google.com/go/longrunning v0.3.0 h1:NjljC+FYPV3uh5/OwWT6pVU+doBqMg2x/rZlE+CamDs= +cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= +cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= +cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= +cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= +cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA= +cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8= +cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= +cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk= +cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM= +cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= +cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8= +cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA= +cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= +cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4= +cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= +cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA= +cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= +cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE= +cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo= +cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70= +cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg= +cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= +cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= +cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE= +cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs= +cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA= +cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= +cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA= +cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= +cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU= +cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc= +cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= +cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do= +cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk= +cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= +cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q= +cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk= +cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= +cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU= +cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4= +cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= +cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco= +cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= +cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E= +cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= +cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= +cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= +cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= +cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= +cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= @@ -178,29 +352,60 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= -cloud.google.com/go/storage v1.29.0 h1:6weCgzRvMg7lzuUurI4697AqIRPU1SvzHhynwpW31jI= -cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= +cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= +cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= +cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= +cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM= +cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= +cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= +cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= +cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ= +cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= +cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28= +cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= +cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs= +cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= +cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= +cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M= +cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY= +cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= +cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= +cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= +cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= +cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= +cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc= +cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= +cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo= +cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M= +cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= cosmossdk.io/core v0.5.1/go.mod h1:KZtwHCLjcFuo0nmDc24Xy6CRNEL9Vl/MeimQ2aC7NLE= -cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= -cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= -cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= -cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= -cosmossdk.io/math v1.0.0-rc.0 h1:ml46ukocrAAoBpYKMidF0R2tQJ1Uxfns0yH8wqgMAFc= -cosmossdk.io/math v1.0.0-rc.0/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= +cosmossdk.io/depinject v1.0.0-alpha.4 h1:PLNp8ZYAMPTUKyG9IK2hsbciDWqna2z1Wsl98okJopc= +cosmossdk.io/depinject v1.0.0-alpha.4/go.mod h1:HeDk7IkR5ckZ3lMGs/o91AVUc7E596vMaOmslGFM3yU= +cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04= +cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0= +cosmossdk.io/log v1.2.1 h1:Xc1GgTCicniwmMiKwDxUjO4eLhPxoVdI9vtMW8Ti/uk= +cosmossdk.io/log v1.2.1/go.mod h1:GNSCc/6+DhFIj1aLn/j7Id7PaO8DzNylUZoOYBL9+I4= +cosmossdk.io/math v1.2.0 h1:8gudhTkkD3NxOP2YyyJIYYmt6dQ55ZfJkDOaxXpy7Ig= +cosmossdk.io/math v1.2.0/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0= cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -208,8 +413,6 @@ filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= -github.com/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o= -github.com/99designs/keyring v1.2.1/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= github.com/Abirdcfly/dupword v0.0.7 h1:z14n0yytA3wNO2gpCD/jVtp/acEXPGmYu0esewpBt6Q= github.com/Abirdcfly/dupword v0.0.7/go.mod h1:K/4M1kj+Zh39d2aotRwypvasonOyAMH1c/IZJzE0dmk= github.com/Antonboom/errname v0.1.7 h1:mBBDKvEYwPl4WFFNwec1CZO096G6vzK9vvDQzAwkako= @@ -222,8 +425,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= +github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM= +github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rWPdisA5ynNEsoARbiCBOyGcJM4/OzsM= github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= @@ -247,8 +450,6 @@ github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/ github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/alecthomas/participle/v2 v2.0.0-alpha7 h1:cK4vjj0VSgb3lN1nuKA5F7dw+1s1pWBe5bx7nNCnN+c= -github.com/alecthomas/participle/v2 v2.0.0-alpha7/go.mod h1:NumScqsC42o9x+dGj8/YqsIfhrIQjFEOFovxotbBirA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -305,6 +506,8 @@ github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJ github.com/btcsuite/btcd/btcutil v1.1.2/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= +github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= github.com/butuzov/ireturn v0.1.1 h1:QvrO2QF2+/Cx1WA/vETCIYBKtRjc30vesdoPUNo1EbY= github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= @@ -314,6 +517,8 @@ github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInq github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -339,27 +544,29 @@ github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= -github.com/cockroachdb/apd/v3 v3.1.0 h1:MK3Ow7LH0W8zkd5GMKA1PvS9qG3bWFI95WaVNfyZJ/w= -github.com/cockroachdb/apd/v3 v3.1.0/go.mod h1:6qgPBMXjATAdD/VefbRP9NoSLKjbB4LCoA7gN4LpHs4= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/cockroachdb/errors v1.10.0 h1:lfxS8zZz1+OjtV4MtNWgboi/W5tyLEB6VQZBXN+0VUU= +github.com/cockroachdb/errors v1.10.0/go.mod h1:lknhIsEVQ9Ss/qKDBQS/UqFSvPQjOwNq2qyKAxtHRqE= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= +github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= -github.com/cometbft/cometbft v0.37.2 h1:XB0yyHGT0lwmJlFmM4+rsRnczPlHoAKFX6K8Zgc2/Jc= -github.com/cometbft/cometbft v0.37.2/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= -github.com/cometbft/cometbft-db v0.7.0 h1:uBjbrBx4QzU0zOEnU8KxoDl18dMNgDh+zZRUE0ucsbo= -github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= +github.com/cometbft/cometbft v0.37.4 h1:xyvvEqlyfK8MgNIIKVJaMsuIp03wxOcFmVkT26+Ikpg= +github.com/cometbft/cometbft v0.37.4/go.mod h1:Cmg5Hp4sNpapm7j+x0xRyt2g0juQfmB752ous+pA0G8= +github.com/cometbft/cometbft-db v0.9.1 h1:MIhVX5ja5bXNHF8EYrThkG9F7r9kSfv8BX4LWaxWJ4M= +github.com/cometbft/cometbft-db v0.9.1/go.mod h1:iliyWaoV0mRwBJoizElCwwRA9Tf7jZJOURcRZF9m60U= github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= @@ -368,45 +575,44 @@ github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= github.com/cosmos/cosmos-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= -github.com/cosmos/cosmos-sdk v0.47.0 h1:GKYtBpvjwuDEVix1vdnQpq7PuEOnItuEK0vdAL2cZ5g= -github.com/cosmos/cosmos-sdk v0.47.0/go.mod h1:FTtZbqiHCZ2vun9WrPq6qLQafNKkAuIhLAxzLjr2TiI= +github.com/cosmos/cosmos-sdk v0.47.6 h1:uyo/eg9NMB66aQZIZUv/LeOPTdSnsU23wZkgFYpjikQ= +github.com/cosmos/cosmos-sdk v0.47.6/go.mod h1:xTc1chW8HyUWCfrgGbjS5jNu9RzlPVrBNfbL9RmZUio= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.4.6 h1:Ee7z15dWJaGlgM2rWrK8N2IX7PQcuccu8oG68jp5RL4= -github.com/cosmos/gogoproto v1.4.6/go.mod h1:VS/ASYmPgv6zkPKLjR9EB91lwbLHOzaGCirmKKhncfI= -github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= -github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= -github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0 h1:i9esYyZ5ExpZOgxrLMQhY2jDTVYiaD8yUeqXN9QBgbk= -github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0/go.mod h1:fctjEnz9xaBFOlmYYPdKL8Hs1Y3GUKilSwsJdqBb5QU= -github.com/cosmos/ibc-go/v7 v7.0.0 h1:j4kyywlG0hhDmT9FmSaR5iCIka7Pz7kJTxGWY1nlV9Q= -github.com/cosmos/ibc-go/v7 v7.0.0/go.mod h1:BFh8nKWjr5zeR2OZfhkzdgDzj1+KjRn3aJLpwapStj8= -github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab h1:I9ialKTQo7248V827Bba4OuKPmk+FPzmTVHsLXaIJWw= -github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab/go.mod h1:2CwqasX5dSD7Hbp/9b6lhK6BwoBDCBldx7gPKRukR60= -github.com/cosmos/ledger-cosmos-go v0.12.2 h1:/XYaBlE2BJxtvpkHiBm97gFGSGmYGKunKyF3nNqAXZA= -github.com/cosmos/ledger-cosmos-go v0.12.2/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI= +github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoKuI= +github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek= +github.com/cosmos/iavl v0.20.1 h1:rM1kqeG3/HBT85vsZdoSNsehciqUQPWrR4BYmqE2+zg= +github.com/cosmos/iavl v0.20.1/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= +github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.1.2 h1:6zjj+yIpMbCTRI2eJ2fXuflElENs3mrUSLH/TSWL8fk= +github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.1.2/go.mod h1:UvDmcGIWJPIytq+Q78/ff5NTOsuX/7IrNgEugTW5i0s= +github.com/cosmos/ibc-go/v7 v7.3.1 h1:bil1IjnHdyWDASFYKfwdRiNtFP6WK3osW7QFEAgU4I8= +github.com/cosmos/ibc-go/v7 v7.3.1/go.mod h1:wvx4pPBofe5ZdMNV3OFRxSI4auEP5Qfqf8JXLLNV04g= +github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= +github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= +github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= +github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= +github.com/cosmos/ledger-cosmos-go v0.12.4 h1:drvWt+GJP7Aiw550yeb3ON/zsrgW0jgh5saFCr7pDnw= +github.com/cosmos/ledger-cosmos-go v0.12.4/go.mod h1:fjfVWRf++Xkygt9wzCsjEBdjcf7wiiY35fv3ctT+k4M= github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cristalhq/acmd v0.8.1/go.mod h1:LG5oa43pE/BbxtfMoImHCQN++0Su7dzipdgBjMCBVDQ= -github.com/cucumber/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= -github.com/cucumber/common/gherkin/go/v22 v22.0.0/go.mod h1:3mJT10B2GGn3MvVPd3FwR7m2u4tLhSRhWUqJU4KN4Fg= -github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= -github.com/cucumber/common/messages/go/v17 v17.1.1/go.mod h1:bpGxb57tDE385Rb2EohgUadLkAbhoC4IyCFi89u/JQI= github.com/curioswitch/go-reassign v0.2.0 h1:G9UZyOcpk/d7Gd6mqYgd8XYWFMw/znxwGDUstnC9DIo= github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc= github.com/daixiang0/gci v0.8.1 h1:T4xpSC+hmsi4CSyuYfIJdMZAr9o7xZmHpQVygMghGZ4= @@ -429,7 +635,6 @@ github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= @@ -447,27 +652,15 @@ github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5m github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= +github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= github.com/esimonov/ifshort v1.0.4 h1:6SID4yGWfRae/M7hkVDVVyppy8q/v9OuxNdmjLQStBA= github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= github.com/ettle/strcase v0.1.1 h1:htFueZyVeE1XNnMEfbqp5r67qAN/4r6ya1ysq8Q+Zcw= github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= @@ -482,22 +675,25 @@ github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8 github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= -github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= +github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= +github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo= github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= +github.com/getsentry/sentry-go v0.23.0 h1:dn+QRCeJv4pPt9OjVXiMcGIBIefaTJPw/h0bZWO05nE= +github.com/getsentry/sentry-go v0.23.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/go-critic/go-critic v0.6.5 h1:fDaR/5GWURljXwF8Eh31T2GZNz9X4jeboS912mWF8Uo= github.com/go-critic/go-critic v0.6.5/go.mod h1:ezfP/Lh7MA6dBNn4c6ab5ALv3sKnZVLx37tr00uuaOY= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -515,11 +711,11 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= -github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= -github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= -github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= -github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= +github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= +github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= +github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= +github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= @@ -552,15 +748,14 @@ github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= -github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= @@ -570,16 +765,17 @@ github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zV github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= -github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= +github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= @@ -651,8 +847,9 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= @@ -682,15 +879,18 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= +github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= +github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= -github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= -github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.4 h1:uGy6JWR/uMIILU8wbf+OkstIrNiMjGpEIyhx8f6W7s4= +github.com/googleapis/enterprise-certificate-proxy v0.2.4/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= @@ -700,8 +900,9 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99 github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= +github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= @@ -742,6 +943,8 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= @@ -758,8 +961,8 @@ github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtng github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-getter v1.7.0 h1:bzrYP+qu/gMrL1au7/aDvkoOVGUJpeKBgbqRHACAFDY= -github.com/hashicorp/go-getter v1.7.0/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= +github.com/hashicorp/go-getter v1.7.1 h1:SWiSWN/42qdpR0MdhaOc/bLR48PLuP1ZQtYLRlM69uY= +github.com/hashicorp/go-getter v1.7.1/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= @@ -774,8 +977,9 @@ github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoD github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= @@ -803,19 +1007,19 @@ github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXM github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/iancoleman/orderedmap v0.2.0 h1:sq1N/TFpYH++aViPcaKjys3bDClUEU7s5B+z6jq8pNA= github.com/iancoleman/orderedmap v0.2.0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA= +github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/jgautheron/goconst v1.5.1 h1:HxVbL1MhydKs8R8n/HE5NPvzfaYmQJA3o879lE4+WcM= github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= -github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b h1:izTof8BKh/nE1wrKOrloNA5q4odOarjf+Xpe+4qow98= -github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= +github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= +github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs= github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af h1:KA9BjwUk7KlCh6S9EAGWBt1oExIUv9WyNCiRz5amv48= @@ -858,13 +1062,15 @@ github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYs github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= -github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= +github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -881,8 +1087,8 @@ github.com/ldez/gomoddirectives v0.2.3 h1:y7MBaisZVDYmKvt9/l1mjNCiSA1BVn34U0ObUc github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= github.com/ldez/tagliatelle v0.3.1 h1:3BqVVlReVUZwafJUwQ+oxbx2BEX2vUG4Yu/NOfMiKiM= github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= -github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= -github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= +github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/leonklingele/grouper v1.1.0 h1:tC2y/ygPbMFSBOs3DcyaEMKnnwH7eYKzohOtRrf0SAg= github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= @@ -892,9 +1098,12 @@ github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6 github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/linxGnu/grocksdb v1.8.6 h1:O7I6SIGPrypf3f/gmrrLUBQDKfO8uOoYdWf4gLS06tc= +github.com/linxGnu/grocksdb v1.8.6/go.mod h1:xZCIb5Muw+nhbDK4Y5UJuOrin5MceOuiXkVUR7vp4WY= github.com/lufeee/execinquery v1.2.1 h1:hf0Ems4SHcUGBxpGN7Jz78z1ppVkP/837ZlETPCEtOM= github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= -github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= +github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= @@ -910,6 +1119,7 @@ github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= @@ -917,8 +1127,8 @@ github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= @@ -1031,23 +1241,26 @@ github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0Mw github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= -github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= +github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= +github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= +github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d h1:htwtWgtQo8YS6JFWWi2DNgY0RwSGJ1ruMoxY6CUUclk= -github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 h1:hDSdbBuw3Lefr6R18ax0tZ2BJeNB3NehB3trOwYBsdU= +github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d h1:CdDQnGF8Nq9ocOS/xlSptM1N3BbrA6/kmaep5ggwaIA= github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A= +github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -1080,8 +1293,8 @@ github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB8 github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.40.0 h1:Afz7EVRqGg2Mqqf4JuF9vdvp1pi220m55Pi9T2JnO4Q= -github.com/prometheus/common v0.40.0/go.mod h1:L65ZJPSmfn/UBWLQIHV7dBrKFidB/wPlF1y5TlSt9OE= +github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= +github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= @@ -1110,16 +1323,20 @@ github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Ung github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= -github.com/regen-network/gocuke v0.6.2/go.mod h1:zYaqIHZobHyd0xOrHGPQjbhGJsuZ1oElx150u2o1xuk= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c= +github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -1169,15 +1386,18 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk= -github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= +github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= +github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= +github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= +github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= -github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= +github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= +github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= -github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= +github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= +github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= @@ -1186,8 +1406,8 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU= -github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= +github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= +github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0= github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= github.com/stbenjam/no-sprintf-host-port v0.1.1 h1:tYugd/yrm1O0dV+ThCbaKZh195Dfm07ysF0U6JQXczc= @@ -1210,16 +1430,15 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= -github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/tdakkota/asciicheck v0.1.1 h1:PKzG7JUTUmVspQTDqtkX9eSiLGossXTybutHwTXuO0A= github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= -github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= -github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= github.com/tenntenn/modver v1.0.1 h1:2klLppGhDgzJrScMpkj9Ujy3rXPUspSjAcev9tSEBgA= @@ -1240,11 +1459,11 @@ github.com/tomarrell/wrapcheck/v2 v2.7.0/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0 github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw= github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= -github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go v1.2.7 h1:qYhyWUUd6WbiM+C6JZAUkIJt/1WrjzNHY9+KCIjVqTo= +github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= -github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= +github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= @@ -1269,15 +1488,15 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo= -github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= -github.com/zondax/ledger-go v0.14.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c= -github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= +github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= +github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw= +github.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1UpHb342ycI= gitlab.com/bosi/decorder v0.2.3 h1:gX4/RgK16ijY8V+BRQHAySfQAb354T7/xQpDB2n10P0= gitlab.com/bosi/decorder v0.2.3/go.mod h1:9K1RB5+VPNQYtXtTDAzd2OEftsZb1oV0IrJrzChSdGE= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= -go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA= +go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= @@ -1291,6 +1510,7 @@ go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= @@ -1299,6 +1519,8 @@ go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/mock v0.2.0 h1:TaP3xedm7JaAgScZO7tlvlKrqT0p7I6OsdGB5YNSMDU= +go.uber.org/mock v0.2.0/go.mod h1:J0y0rp9L3xiff1+ZBfKxlC1fz2+aO16tw0tsDOixfuM= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= @@ -1315,15 +1537,19 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA= +golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1335,14 +1561,13 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 h1:LGJsf5LRplCck6jUCH3dBL2dmycNruWNF5xugkSlfXw= -golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb h1:xIApU0ow1zwMa2uL1VDNeQlNVFTWMQxZUZCMDy0Q4Us= +golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91 h1:Ic/qN6TEifvObMGQy72k0n1LlJr7DjWWEi+MOsDOiSk= golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -1365,13 +1590,15 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= +golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU= +golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1419,7 +1646,9 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1430,10 +1659,15 @@ golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg= +golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1457,10 +1691,12 @@ golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7Lm golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.5.0 h1:HuArIo48skDwlrvM3sEdHXElYslAMsf3KwRkkW4MC4s= -golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= +golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= +golang.org/x/oauth2 v0.11.0 h1:vPL4xzxBM4niKCW6g9whtaWVXTJf1U5e4aZxxFx/gbU= +golang.org/x/oauth2 v0.11.0/go.mod h1:LdF7O/8bLR/qWK9DrpXmbHLTouvRHK0SgJl0GmDBchk= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1475,10 +1711,10 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1550,9 +1786,11 @@ golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1580,13 +1818,21 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= +golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.14.0 h1:LGK9IlZ8T9jvdy6cTdfKUCltatMFOehAQo9SRC46UQ8= +golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1596,19 +1842,23 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -1694,6 +1944,7 @@ golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1753,10 +2004,12 @@ google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaE google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91A08= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.110.0 h1:l+rh0KYUooe9JGbGVx71tbFo4SMbMTXK3I3ia2QSEeU= -google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= +google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= +google.golang.org/api v0.128.0 h1:RjPESny5CnQRn9V6siglged+DZCgfu9l6mO9dkX9VOg= +google.golang.org/api v0.128.0/go.mod h1:Y611qgqaE92On/7g65MQgxYul3c0rEB894kniWLY750= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1840,6 +2093,7 @@ google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2 google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= @@ -1872,50 +2126,22 @@ google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53B google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 h1:EfLuoKW5WfkgVdDy7dTK8qSbH37AX5mj/MFh+bGPz14= -google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= +google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= +google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a h1:fwgW9j3vHirt4ObdHoYNwuO24BEZjSzbh+zPaNWoiY8= +google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:EMfReVxb80Dq1hhioy0sOsY9jCE46YDgHlJ7fWVUWRE= +google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 h1:W18sezcAYs+3tDZX4F80yctqa12jcP1PUS2gQu1zTPU= +google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97/go.mod h1:iargEX0SFPm3xcfMI0d1domjg0ZF4Aa0p2awqyxhvF0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b h1:ZlWIi1wSK56/8hn4QcBp/j9M7Gt3U/3hZw3mC7vDICo= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc= google.golang.org/grpc v1.54.0 h1:EhTqbhiYeixwWQtAEZAxmV9MGqcjEU2mFx52xCzNyag= google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= @@ -1934,8 +2160,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= -google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1970,9 +2196,8 @@ gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= -gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= -gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY= +gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1992,8 +2217,8 @@ mvdan.cc/unparam v0.0.0-20220706161116-678bad134442 h1:seuXWbRB1qPrS3NQnHmFKLJLt mvdan.cc/unparam v0.0.0-20220706161116-678bad134442/go.mod h1:F/Cxw/6mVrNKqrR2YjFf5CaW0Bw4RL8RfbEf4GRggJk= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= -pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= +pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/go.work b/go.work deleted file mode 100644 index 2f9780e2..00000000 --- a/go.work +++ /dev/null @@ -1,3 +0,0 @@ -go 1.21 - -use ./tests/interchaintest diff --git a/testnode.sh b/testnode.sh index a1c5cc5c..fdfb9f71 100755 --- a/testnode.sh +++ b/testnode.sh @@ -40,5 +40,5 @@ if [[ $1 == "pending" ]]; then fi # Start the node (remove the --pruning=nothing flag if historical queries are not needed) -feeappd start --pruning=nothing --minimum-gas-prices=0.0001stake --rpc.laddr tcp://127.0.0.1:26650 +feeappd start --pruning=nothing --minimum-gas-prices=0.0001stake diff --git a/tests/interchaintest/chain_start_test.go b/tests/interchaintest/chain_start_test.go index 2c970a9b..67c4ac8f 100644 --- a/tests/interchaintest/chain_start_test.go +++ b/tests/interchaintest/chain_start_test.go @@ -2,13 +2,8 @@ package interchaintest import ( "context" - "fmt" "testing" - sdktypes "github.com/cosmos/cosmos-sdk/types" - "github.com/strangelove-ventures/interchaintest/v7/ibc" - "github.com/strangelove-ventures/interchaintest/v7/testutil" - "github.com/strangelove-ventures/interchaintest/v7" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v7/testreporter" @@ -69,321 +64,3 @@ func TestStartFeeabs(t *testing.T) { _ = ic.Close() }) } - -func SetupChain(t *testing.T, ctx context.Context) ([]ibc.Chain, []ibc.Wallet, []ibc.ChannelOutput) { - client, network := interchaintest.DockerSetup(t) - - rep := testreporter.NewNopReporter() - eRep := rep.RelayerExecReporter(t) - - // Create chain factory with Feeabs and Gaia - numVals := 1 - numFullNodes := 1 - gasAdjustment := 2.0 - - cf := interchaintest.NewBuiltinChainFactory(zaptest.NewLogger(t), []*interchaintest.ChainSpec{ - { - Name: "feeabs", - ChainConfig: feeabsConfig, - NumValidators: &numVals, - NumFullNodes: &numFullNodes, - }, - { - Name: "gaia", - Version: "v12.0.0-rc0", - ChainConfig: ibc.ChainConfig{ - GasPrices: "0.0uatom", - }, - NumValidators: &numVals, - NumFullNodes: &numFullNodes, - }, - { - Name: "osmosis", - Version: "v17.0.0", - ChainConfig: ibc.ChainConfig{ - GasPrices: "0.005uosmo", - EncodingConfig: osmosisEncoding(), - }, - GasAdjustment: &gasAdjustment, - NumValidators: &numVals, - NumFullNodes: &numFullNodes, - }, - }) - - chains, err := cf.Chains(t.Name()) - require.NoError(t, err) - - feeabs, gaia, osmosis := chains[0].(*cosmos.CosmosChain), chains[1].(*cosmos.CosmosChain), chains[2].(*cosmos.CosmosChain) - - r := interchaintest.NewBuiltinRelayerFactory( - ibc.CosmosRly, - zaptest.NewLogger(t), - ).Build(t, client, network) - - ic := interchaintest.NewInterchain(). - AddChain(feeabs). - AddChain(gaia). - AddChain(osmosis). - AddRelayer(r, "relayer"). - AddLink(interchaintest.InterchainLink{ - Chain1: feeabs, - Chain2: gaia, - Relayer: r, - Path: pathFeeabsGaia, - }). - AddLink(interchaintest.InterchainLink{ - Chain1: feeabs, - Chain2: osmosis, - Relayer: r, - Path: pathFeeabsOsmosis, - }). - AddLink(interchaintest.InterchainLink{ - Chain1: osmosis, - Chain2: gaia, - Relayer: r, - Path: pathOsmosisGaia, - }) - - require.NoError(t, ic.Build(ctx, eRep, interchaintest.InterchainBuildOptions{ - TestName: t.Name(), - Client: client, - NetworkID: network, - BlockDatabaseFile: interchaintest.DefaultBlockDatabaseFilepath(), - - SkipPathCreation: true, - })) - t.Cleanup(func() { - _ = ic.Close() - }) - - const userFunds = int64(10_000_000_000) - users := interchaintest.GetAndFundTestUsers(t, ctx, t.Name(), userFunds, feeabs, gaia, osmosis) - - // rly feeabs-osmo - // Generate new path - err = r.GeneratePath(ctx, eRep, feeabs.Config().ChainID, osmosis.Config().ChainID, pathFeeabsOsmosis) - require.NoError(t, err) - // Create client - err = r.CreateClients(ctx, eRep, pathFeeabsOsmosis, ibc.DefaultClientOpts()) - require.NoError(t, err) - - err = testutil.WaitForBlocks(ctx, 5, feeabs, osmosis) - require.NoError(t, err) - - // Create connection - err = r.CreateConnections(ctx, eRep, pathFeeabsOsmosis) - require.NoError(t, err) - - err = testutil.WaitForBlocks(ctx, 5, feeabs, osmosis) - require.NoError(t, err) - // Create channel - err = r.CreateChannel(ctx, eRep, pathFeeabsOsmosis, ibc.CreateChannelOptions{ - SourcePortName: "transfer", - DestPortName: "transfer", - Order: ibc.Unordered, - Version: "ics20-1", - }) - require.NoError(t, err) - - err = testutil.WaitForBlocks(ctx, 5, feeabs, osmosis) - require.NoError(t, err) - var chanels []ibc.ChannelOutput - channsFeeabs, err := r.GetChannels(ctx, eRep, feeabs.Config().ChainID) - require.NoError(t, err) - - channsOsmosis, err := r.GetChannels(ctx, eRep, osmosis.Config().ChainID) - require.NoError(t, err) - - require.Len(t, channsFeeabs, 1) - require.Len(t, channsOsmosis, 1) - - channFeeabsOsmosis := channsFeeabs[0] - require.NotEmpty(t, channFeeabsOsmosis.ChannelID) - channOsmosisFeeabs := channsOsmosis[0] - require.NotEmpty(t, channOsmosisFeeabs.ChannelID) - // rly feeabs-gaia - // Generate new path - err = r.GeneratePath(ctx, eRep, feeabs.Config().ChainID, gaia.Config().ChainID, pathFeeabsGaia) - require.NoError(t, err) - // Create clients - err = r.CreateClients(ctx, eRep, pathFeeabsGaia, ibc.DefaultClientOpts()) - require.NoError(t, err) - - err = testutil.WaitForBlocks(ctx, 5, feeabs, gaia) - require.NoError(t, err) - - // Create connection - err = r.CreateConnections(ctx, eRep, pathFeeabsGaia) - require.NoError(t, err) - - err = testutil.WaitForBlocks(ctx, 5, feeabs, gaia) - require.NoError(t, err) - - // Create channel - err = r.CreateChannel(ctx, eRep, pathFeeabsGaia, ibc.CreateChannelOptions{ - SourcePortName: "transfer", - DestPortName: "transfer", - Order: ibc.Unordered, - Version: "ics20-1", - }) - require.NoError(t, err) - - err = testutil.WaitForBlocks(ctx, 5, feeabs, gaia) - require.NoError(t, err) - - channsFeeabs, err = r.GetChannels(ctx, eRep, feeabs.Config().ChainID) - require.NoError(t, err) - - channsGaia, err := r.GetChannels(ctx, eRep, gaia.Config().ChainID) - require.NoError(t, err) - - require.Len(t, channsFeeabs, 2) - require.Len(t, channsGaia, 1) - - var channFeeabsGaia ibc.ChannelOutput - for _, chann := range channsFeeabs { - if chann.ChannelID != channFeeabsOsmosis.ChannelID { - channFeeabsGaia = chann - } - } - require.NotEmpty(t, channFeeabsGaia.ChannelID) - - channGaiaFeeabs := channsGaia[0] - require.NotEmpty(t, channGaiaFeeabs.ChannelID) - // rly osmo-gaia - // Generate new path - err = r.GeneratePath(ctx, eRep, osmosis.Config().ChainID, gaia.Config().ChainID, pathOsmosisGaia) - require.NoError(t, err) - // Create clients - err = r.CreateClients(ctx, eRep, pathOsmosisGaia, ibc.DefaultClientOpts()) - require.NoError(t, err) - - err = testutil.WaitForBlocks(ctx, 5, osmosis, gaia) - require.NoError(t, err) - // Create connection - err = r.CreateConnections(ctx, eRep, pathOsmosisGaia) - require.NoError(t, err) - - err = testutil.WaitForBlocks(ctx, 5, osmosis, gaia) - require.NoError(t, err) - // Create channel - err = r.CreateChannel(ctx, eRep, pathOsmosisGaia, ibc.CreateChannelOptions{ - SourcePortName: "transfer", - DestPortName: "transfer", - Order: ibc.Unordered, - Version: "ics20-1", - }) - require.NoError(t, err) - - err = testutil.WaitForBlocks(ctx, 5, osmosis, gaia) - require.NoError(t, err) - - channsOsmosis, err = r.GetChannels(ctx, eRep, osmosis.Config().ChainID) - require.NoError(t, err) - - channsGaia, err = r.GetChannels(ctx, eRep, gaia.Config().ChainID) - require.NoError(t, err) - - require.Len(t, channsOsmosis, 2) - require.Len(t, channsGaia, 2) - - var channOsmosisGaia ibc.ChannelOutput - var channGaiaOsmosis ibc.ChannelOutput - - for _, chann := range channsOsmosis { - if chann.ChannelID != channOsmosisFeeabs.ChannelID { - channOsmosisGaia = chann - } - } - require.NotEmpty(t, channOsmosisGaia) - - for _, chann := range channsGaia { - if chann.ChannelID != channGaiaFeeabs.ChannelID { - channGaiaOsmosis = chann - } - } - require.NotEmpty(t, channGaiaOsmosis) - - fmt.Println("-----------------------------------") - fmt.Printf("channFeeabsOsmosis: %s - %s\n", channFeeabsOsmosis.ChannelID, channFeeabsOsmosis.Counterparty.ChannelID) - fmt.Printf("channOsmosisFeeabs: %s - %s\n", channOsmosisFeeabs.ChannelID, channOsmosisFeeabs.Counterparty.ChannelID) - fmt.Printf("channFeeabsGaia: %s - %s\n", channFeeabsGaia.ChannelID, channFeeabsGaia.Counterparty.ChannelID) - fmt.Printf("channGaiaFeeabs: %s - %s\n", channGaiaFeeabs.ChannelID, channGaiaFeeabs.Counterparty.ChannelID) - fmt.Printf("channOsmosisGaia: %s - %s\n", channOsmosisGaia.ChannelID, channOsmosisGaia.Counterparty.ChannelID) - fmt.Printf("channGaiaOsmosis: %s - %s\n", channGaiaOsmosis.ChannelID, channGaiaOsmosis.Counterparty.ChannelID) - fmt.Println("-----------------------------------") - - // Start the relayer on both paths - err = r.StartRelayer(ctx, eRep, pathFeeabsGaia, pathFeeabsOsmosis, pathOsmosisGaia) - require.NoError(t, err) - - t.Cleanup( - func() { - err := r.StopRelayer(ctx, eRep) - if err != nil { - t.Logf("an error occurred while stopping the relayer: %s", err) - } - }, - ) - chanels = append(chanels, channFeeabsOsmosis, channOsmosisFeeabs, channFeeabsGaia, channGaiaFeeabs, channOsmosisGaia, channGaiaOsmosis) - feeabsUser, gaiaUser, osmosisUser := users[0], users[1], users[2] - - // Send Gaia uatom to Osmosis - gaiaHeight, err := gaia.Height(ctx) - require.NoError(t, err) - dstAddress := sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()) - transfer := ibc.WalletAmount{ - Address: dstAddress, - Denom: gaia.Config().Denom, - Amount: amountToSend, - } - - tx, err := gaia.SendIBCTransfer(ctx, channGaiaOsmosis.ChannelID, gaiaUser.KeyName(), transfer, ibc.TransferOptions{}) - require.NoError(t, err) - require.NoError(t, tx.Validate()) - - _, err = testutil.PollForAck(ctx, gaia, gaiaHeight, gaiaHeight+30, tx.Packet) - require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, 1, feeabs, gaia, osmosis) - require.NoError(t, err) - - // Send Feeabs stake to Osmosis - feeabsHeight, err := feeabs.Height(ctx) - require.NoError(t, err) - dstAddress = sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()) - transfer = ibc.WalletAmount{ - Address: dstAddress, - Denom: feeabs.Config().Denom, - Amount: amountToSend, - } - - tx, err = feeabs.SendIBCTransfer(ctx, channFeeabsOsmosis.ChannelID, feeabsUser.KeyName(), transfer, ibc.TransferOptions{}) - require.NoError(t, err) - require.NoError(t, tx.Validate()) - - _, err = testutil.PollForAck(ctx, feeabs, feeabsHeight, feeabsHeight+30, tx.Packet) - require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, 1, feeabs, gaia, osmosis) - require.NoError(t, err) - - // Send Gaia uatom to Feeabs - gaiaHeight, err = gaia.Height(ctx) - require.NoError(t, err) - dstAddress = sdktypes.MustBech32ifyAddressBytes(feeabs.Config().Bech32Prefix, feeabsUser.Address()) - transfer = ibc.WalletAmount{ - Address: dstAddress, - Denom: gaia.Config().Denom, - Amount: amountToSend, - } - - tx, err = gaia.SendIBCTransfer(ctx, channGaiaFeeabs.ChannelID, gaiaUser.KeyName(), transfer, ibc.TransferOptions{}) - require.NoError(t, err) - require.NoError(t, tx.Validate()) - - _, err = testutil.PollForAck(ctx, gaia, gaiaHeight, gaiaHeight+30, tx.Packet) - require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, 1, feeabs, gaia, osmosis) - require.NoError(t, err) - - return chains, users, chanels -} diff --git a/tests/interchaintest/feeabs/events.go b/tests/interchaintest/feeabs/events.go index 2ab41bba..a70ca653 100644 --- a/tests/interchaintest/feeabs/events.go +++ b/tests/interchaintest/feeabs/events.go @@ -3,11 +3,14 @@ package feeabs import ( "encoding/base64" - abcitypes "github.com/cometbft/cometbft/abci/types" + sdk "github.com/cosmos/cosmos-sdk/types" ) -func AttributeValue(events []abcitypes.Event, eventType, attrKey string) (string, bool) { - for _, event := range events { +func AttributeValue(txResponse *sdk.TxResponse, eventType, attrKey string) (string, bool) { + if txResponse == nil { + return "", false + } + for _, event := range txResponse.Events { if event.Type != eventType { continue } @@ -15,8 +18,6 @@ func AttributeValue(events []abcitypes.Event, eventType, attrKey string) (string if attr.Key == attrKey { return attr.Value, true } - - // tendermint < v0.37-alpha returns base64 encoded strings in events. key, err := base64.StdEncoding.DecodeString(attr.Key) if err != nil { continue diff --git a/tests/interchaintest/feeabs/proposal.go b/tests/interchaintest/feeabs/proposal.go index 86ba9989..0d8a4493 100644 --- a/tests/interchaintest/feeabs/proposal.go +++ b/tests/interchaintest/feeabs/proposal.go @@ -64,17 +64,16 @@ func CrossChainSwap(c *cosmos.CosmosChain, ctx context.Context, keyName string, tx.GasSpent = txResp.GasWanted const evType = "send_packet" - events := txResp.Events var ( - seq, _ = AttributeValue(events, evType, "packet_sequence") - srcPort, _ = AttributeValue(events, evType, "packet_src_port") - srcChan, _ = AttributeValue(events, evType, "packet_src_channel") - dstPort, _ = AttributeValue(events, evType, "packet_dst_port") - dstChan, _ = AttributeValue(events, evType, "packet_dst_channel") - timeoutHeight, _ = AttributeValue(events, evType, "packet_timeout_height") - timeoutTs, _ = AttributeValue(events, evType, "packet_timeout_timestamp") - data, _ = AttributeValue(events, evType, "packet_data") + seq, _ = AttributeValue(txResp, evType, "packet_sequence") + srcPort, _ = AttributeValue(txResp, evType, "packet_src_port") + srcChan, _ = AttributeValue(txResp, evType, "packet_src_channel") + dstPort, _ = AttributeValue(txResp, evType, "packet_dst_port") + dstChan, _ = AttributeValue(txResp, evType, "packet_dst_channel") + timeoutHeight, _ = AttributeValue(txResp, evType, "packet_timeout_height") + timeoutTs, _ = AttributeValue(txResp, evType, "packet_timeout_timestamp") + data, _ = AttributeValue(txResp, evType, "packet_data") ) tx.Packet.SourcePort = srcPort @@ -86,7 +85,7 @@ func CrossChainSwap(c *cosmos.CosmosChain, ctx context.Context, keyName string, seqNum, err := strconv.Atoi(seq) if err != nil { - return tx, fmt.Errorf("invalid packet sequence from events %s: %w", seq, err) + return tx, fmt.Errorf("invalid packet sequence from txResp %s: %w", seq, err) } tx.Packet.Sequence = uint64(seqNum) @@ -208,13 +207,12 @@ func txProposal(c *cosmos.CosmosChain, txHash string) (tx cosmos.TxProposal, _ e tx.TxHash = txHash // In cosmos, user is charged for entire gas requested, not the actual gas used. tx.GasSpent = txResp.GasWanted - events := txResp.Events - tx.DepositAmount, _ = AttributeValue(events, "proposal_deposit", "amount") + tx.DepositAmount, _ = AttributeValue(txResp, "proposal_deposit", "amount") evtSubmitProp := "submit_proposal" - tx.ProposalID, _ = AttributeValue(events, evtSubmitProp, "proposal_id") - tx.ProposalType, _ = AttributeValue(events, evtSubmitProp, "proposal_type") + tx.ProposalID, _ = AttributeValue(txResp, evtSubmitProp, "proposal_id") + tx.ProposalType, _ = AttributeValue(txResp, evtSubmitProp, "proposal_type") return tx, nil } diff --git a/tests/interchaintest/feeabs_test.go b/tests/interchaintest/feeabs_test.go index c6e425dd..b0b77dc7 100644 --- a/tests/interchaintest/feeabs_test.go +++ b/tests/interchaintest/feeabs_test.go @@ -11,7 +11,7 @@ import ( sdktypes "github.com/cosmos/cosmos-sdk/types" paramsutils "github.com/cosmos/cosmos-sdk/x/params/client/utils" transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" - feeabsCli "github.com/notional-labs/fee-abstraction/tests/interchaintest/feeabs" + feeabsCli "github.com/osmosis-labs/fee-abstraction/tests/interchaintest/feeabs" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v7/ibc" "github.com/strangelove-ventures/interchaintest/v7/testutil" @@ -152,7 +152,7 @@ func TestFeeAbs(t *testing.T) { transfer := ibc.WalletAmount{ Address: dstAddress, Denom: gaia.Config().Denom, - Amount: math.NewInt(1_000_000), + Amount: math.NewInt(1_000_000).Int64(), } tx, err := gaia.SendIBCTransfer(ctx, channGaiaFeeabs.ChannelID, gaiaUser.KeyName(), transfer, ibc.TransferOptions{}) @@ -220,5 +220,5 @@ func TestFeeAbs(t *testing.T) { balance, err := feeabs.GetBalance(ctx, feeabsModule.Address, feeabs.Config().Denom) require.NoError(t, err) - require.True(t, balance.GT(math.NewInt(1))) + require.True(t, balance > 1) } diff --git a/tests/interchaintest/go.mod b/tests/interchaintest/go.mod index 5db24b4b..c46df5f8 100644 --- a/tests/interchaintest/go.mod +++ b/tests/interchaintest/go.mod @@ -1,37 +1,30 @@ -module github.com/notional-labs/fee-abstraction/tests/interchaintest +module github.com/osmosis-labs/fee-abstraction/tests/interchaintest go 1.21 require ( - cosmossdk.io/math v1.0.1 - github.com/avast/retry-go/v4 v4.3.4 - github.com/cometbft/cometbft v0.37.2 - github.com/cosmos/cosmos-proto v1.0.0-beta.2 - github.com/cosmos/cosmos-sdk v0.47.4 - github.com/cosmos/ibc-go/v7 v7.2.0 - github.com/gogo/protobuf v1.3.3 - github.com/golang/protobuf v1.5.3 - github.com/grpc-ecosystem/grpc-gateway v1.16.0 + cosmossdk.io/math v1.2.0 + github.com/avast/retry-go/v4 v4.5.0 + github.com/cosmos/cosmos-sdk v0.47.6 + github.com/cosmos/ibc-go/v7 v7.3.1 github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 - github.com/osmosis-labs/fee-abstraction/v7 v7.0.0-20230813134946-d84bbd63ad17 - github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230810233557-5fdb1e8a62e5 + github.com/osmosis-labs/fee-abstraction/v7 v7.0.0-00010101000000-000000000000 + github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230721183422-fb937bb0e165 github.com/stretchr/testify v1.8.4 - go.uber.org/zap v1.24.0 - google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 - google.golang.org/grpc v1.57.0 + go.uber.org/zap v1.26.0 ) require ( - cloud.google.com/go v0.110.4 // indirect - cloud.google.com/go/compute v1.20.1 // indirect + cloud.google.com/go v0.110.8 // indirect + cloud.google.com/go/compute v1.23.0 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.0 // indirect + cloud.google.com/go/iam v1.1.2 // indirect cloud.google.com/go/storage v1.30.1 // indirect cosmossdk.io/api v0.3.1 // indirect - cosmossdk.io/core v0.5.1 // indirect - cosmossdk.io/depinject v1.0.0-alpha.3 // indirect + cosmossdk.io/core v0.6.1 // indirect + cosmossdk.io/depinject v1.0.0-alpha.4 // indirect cosmossdk.io/errors v1.0.0 // indirect - cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca // indirect + cosmossdk.io/log v1.2.1 // indirect cosmossdk.io/tools/rosetta v0.2.1 // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect @@ -40,15 +33,14 @@ require ( github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect github.com/ChainSafe/go-schnorrkel/1 v0.0.0-00010101000000-000000000000 // indirect github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420 // indirect - github.com/CosmWasm/wasmd v0.40.0-rc.1 // indirect - github.com/CosmWasm/wasmvm v1.2.3 // indirect + github.com/CosmWasm/wasmd v0.41.0 // indirect + github.com/CosmWasm/wasmvm v1.3.0 // indirect github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e // indirect github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec // indirect github.com/Microsoft/go-winio v0.6.0 // indirect github.com/StirlingMarketingGroup/go-namecase v1.0.0 // indirect github.com/armon/go-metrics v0.4.1 // indirect github.com/aws/aws-sdk-go v1.44.203 // indirect - github.com/benbjohnson/clock v1.3.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect @@ -57,31 +49,36 @@ require ( github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chzyer/readline v1.5.1 // indirect + github.com/cockroachdb/errors v1.11.1 // indirect + github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect + github.com/cockroachdb/redact v1.1.5 // indirect github.com/coinbase/rosetta-sdk-go/types v1.0.0 // indirect - github.com/cometbft/cometbft-db v0.8.0 // indirect + github.com/cometbft/cometbft v0.37.4 // indirect + github.com/cometbft/cometbft-db v0.9.1 // indirect github.com/confio/ics23/go v0.9.0 // indirect github.com/cosmos/btcutil v1.0.5 // indirect + github.com/cosmos/cosmos-proto v1.0.0-beta.3 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect github.com/cosmos/gogoproto v1.4.10 // indirect - github.com/cosmos/iavl v0.20.0 // indirect + github.com/cosmos/iavl v0.20.1 // indirect github.com/cosmos/ics23/go v0.10.0 // indirect - github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect + github.com/cosmos/ledger-cosmos-go v0.13.0 // indirect github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect github.com/creachadair/taskgroup v0.4.2 // indirect github.com/danieljoos/wincred v1.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/deckarep/golang-set v1.8.0 // indirect github.com/decred/base58 v1.0.4 // indirect - github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect + github.com/decred/dcrd/crypto/blake256 v1.0.1 // indirect github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect github.com/dgraph-io/badger/v2 v2.2007.4 // indirect github.com/dgraph-io/ristretto v0.1.1 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect github.com/docker/distribution v2.8.2+incompatible // indirect - github.com/docker/docker v24.0.5+incompatible // indirect + github.com/docker/docker v24.0.7+incompatible // indirect github.com/docker/go-connections v0.4.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect @@ -89,30 +86,31 @@ require ( github.com/ethereum/go-ethereum v1.10.20 // indirect github.com/felixge/httpsnoop v1.0.2 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect - github.com/gin-gonic/gin v1.8.1 // indirect + github.com/getsentry/sentry-go v0.23.0 // indirect github.com/go-kit/kit v0.12.0 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect - github.com/go-playground/validator/v10 v10.11.1 // indirect github.com/go-stack/stack v1.8.1 // indirect - github.com/goccy/go-json v0.9.11 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect - github.com/golang/glog v1.1.0 // indirect + github.com/gogo/protobuf v1.3.3 // indirect + github.com/golang/glog v1.1.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/mock v1.6.0 // indirect + github.com/golang/protobuf v1.5.3 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/btree v1.1.2 // indirect - github.com/google/go-cmp v0.5.9 // indirect + github.com/google/go-cmp v0.6.0 // indirect github.com/google/orderedcode v0.0.1 // indirect github.com/google/s2a-go v0.1.4 // indirect - github.com/google/uuid v1.3.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect - github.com/googleapis/gax-go/v2 v2.11.0 // indirect + github.com/google/uuid v1.3.1 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.2.4 // indirect + github.com/googleapis/gax-go/v2 v2.12.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect github.com/gorilla/mux v1.8.0 // indirect github.com/gorilla/websocket v1.5.0 // indirect - github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect + github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect + github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect github.com/gtank/merlin v0.1.1 // indirect github.com/gtank/ristretto255 v0.1.2 // indirect @@ -120,7 +118,6 @@ require ( github.com/hashicorp/go-getter v1.7.1 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect - github.com/hashicorp/go-uuid v1.0.2 // indirect github.com/hashicorp/go-version v1.6.0 // indirect github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect github.com/hashicorp/hcl v1.0.0 // indirect @@ -128,22 +125,22 @@ require ( github.com/huandu/skiplist v1.2.0 // indirect github.com/improbable-eng/grpc-web v0.15.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/ipfs/go-cid v0.2.0 // indirect + github.com/ipfs/go-cid v0.4.1 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect - github.com/klauspost/compress v1.16.3 // indirect - github.com/klauspost/cpuid/v2 v2.2.3 // indirect + github.com/klauspost/compress v1.16.7 // indirect + github.com/klauspost/cpuid/v2 v2.2.4 // indirect + github.com/kr/pretty v0.3.1 // indirect + github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.7 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect - github.com/libp2p/go-libp2p v0.22.0 // indirect - github.com/libp2p/go-openssl v0.1.0 // indirect - github.com/linxGnu/grocksdb v1.7.16 // indirect + github.com/libp2p/go-libp2p v0.27.8 // indirect + github.com/linxGnu/grocksdb v1.8.6 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.19 // indirect - github.com/mattn/go-pointer v0.0.1 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b // indirect github.com/minio/highwayhash v1.0.2 // indirect @@ -154,36 +151,36 @@ require ( github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mr-tron/base58 v1.2.0 // indirect github.com/mtibben/percent v0.2.1 // indirect - github.com/multiformats/go-base32 v0.0.4 // indirect - github.com/multiformats/go-base36 v0.1.0 // indirect - github.com/multiformats/go-multiaddr v0.6.0 // indirect - github.com/multiformats/go-multibase v0.1.1 // indirect - github.com/multiformats/go-multicodec v0.5.0 // indirect + github.com/multiformats/go-base32 v0.1.0 // indirect + github.com/multiformats/go-base36 v0.2.0 // indirect + github.com/multiformats/go-multiaddr v0.9.0 // indirect + github.com/multiformats/go-multibase v0.2.0 // indirect + github.com/multiformats/go-multicodec v0.8.1 // indirect github.com/multiformats/go-multihash v0.2.1 // indirect - github.com/multiformats/go-varint v0.0.6 // indirect + github.com/multiformats/go-varint v0.0.7 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0-rc2 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/pelletier/go-toml/v2 v2.0.9 // indirect - github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 // indirect + github.com/petermattis/goid v0.0.0-20230518223814-80aa455d8761 // indirect github.com/pierrec/xxHash v0.1.5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_golang v1.15.0 // indirect - github.com/prometheus/client_model v0.3.0 // indirect - github.com/prometheus/common v0.42.0 // indirect - github.com/prometheus/procfs v0.9.0 // indirect + github.com/prometheus/client_golang v1.17.0 // indirect + github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 // indirect + github.com/prometheus/common v0.44.0 // indirect + github.com/prometheus/procfs v0.11.1 // indirect github.com/rakyll/statik v0.1.7 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect + github.com/rogpeppe/go-internal v1.11.0 // indirect github.com/rs/cors v1.8.3 // indirect - github.com/rs/zerolog v1.29.1 // indirect + github.com/rs/zerolog v1.31.0 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect - github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/spf13/afero v1.9.5 // indirect github.com/spf13/cast v1.5.1 // indirect - github.com/spf13/cobra v1.7.0 // indirect + github.com/spf13/cobra v1.8.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.16.0 // indirect @@ -194,28 +191,28 @@ require ( github.com/tyler-smith/go-bip32 v1.0.0 // indirect github.com/tyler-smith/go-bip39 v1.1.0 // indirect github.com/ulikunitz/xz v0.5.11 // indirect - github.com/zondax/hid v0.9.1 // indirect - github.com/zondax/ledger-go v0.14.1 // indirect - go.etcd.io/bbolt v1.3.7 // indirect + github.com/zondax/hid v0.9.2 // indirect + github.com/zondax/ledger-go v0.14.3 // indirect + go.etcd.io/bbolt v1.3.8 // indirect go.opencensus.io v0.24.0 // indirect - go.uber.org/atomic v1.10.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.11.0 // indirect - golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc // indirect + golang.org/x/crypto v0.15.0 // indirect + golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb // indirect golang.org/x/mod v0.12.0 // indirect - golang.org/x/net v0.12.0 // indirect - golang.org/x/oauth2 v0.8.0 // indirect - golang.org/x/sync v0.3.0 // indirect - golang.org/x/sys v0.10.0 // indirect - golang.org/x/term v0.10.0 // indirect - golang.org/x/text v0.11.0 // indirect - golang.org/x/time v0.3.0 // indirect - golang.org/x/tools v0.11.0 // indirect + golang.org/x/net v0.18.0 // indirect + golang.org/x/oauth2 v0.11.0 // indirect + golang.org/x/sync v0.4.0 // indirect + golang.org/x/sys v0.14.0 // indirect + golang.org/x/term v0.14.0 // indirect + golang.org/x/text v0.14.0 // indirect + golang.org/x/tools v0.13.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.126.0 // indirect + google.golang.org/api v0.128.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 // indirect + google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b // indirect + google.golang.org/grpc v1.59.0 // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect @@ -225,24 +222,24 @@ require ( lukechampine.com/uint128 v1.2.0 // indirect modernc.org/cc/v3 v3.40.0 // indirect modernc.org/ccgo/v3 v3.16.13 // indirect - modernc.org/libc v1.22.5 // indirect + modernc.org/libc v1.24.1 // indirect modernc.org/mathutil v1.5.0 // indirect - modernc.org/memory v1.5.0 // indirect + modernc.org/memory v1.6.0 // indirect modernc.org/opt v0.1.3 // indirect - modernc.org/sqlite v1.24.0 // indirect + modernc.org/sqlite v1.25.0 // indirect modernc.org/strutil v1.1.3 // indirect modernc.org/token v1.0.1 // indirect - nhooyr.io/websocket v1.8.6 // indirect - pgregory.net/rapid v0.5.5 // indirect + nhooyr.io/websocket v1.8.7 // indirect + pgregory.net/rapid v1.1.0 // indirect sigs.k8s.io/yaml v1.3.0 // indirect ) replace ( github.com/ChainSafe/go-schnorrkel => github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d github.com/ChainSafe/go-schnorrkel/1 => github.com/ChainSafe/go-schnorrkel v1.0.0 + github.com/btcsuite/btcd => github.com/btcsuite/btcd v0.22.2 //indirect + github.com/cometbft/cometbft => github.com/cometbft/cometbft v0.37.2 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 - - // For this nested module, you always want to replace the parent reference with the current worktree. github.com/osmosis-labs/fee-abstraction/v7 => ../../ github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 ) diff --git a/tests/interchaintest/go.sum b/tests/interchaintest/go.sum index aab013c1..52ad6318 100644 --- a/tests/interchaintest/go.sum +++ b/tests/interchaintest/go.sum @@ -32,8 +32,8 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9 cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.110.4 h1:1JYyxKMN9hd5dR2MYTPWkGUgcoxVVhg0LKNKEo0qvmk= -cloud.google.com/go v0.110.4/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go v0.110.8 h1:tyNdfIxjzaWctIiLYOTalaLKZ17SI44SKFW26QbOhME= +cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= @@ -70,8 +70,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZNbg= -cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY= +cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= @@ -111,8 +111,8 @@ cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y97 cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v1.1.0 h1:67gSqaPukx7O8WLLHMa0PNs3EBGd2eE4d+psbO/CO94= -cloud.google.com/go/iam v1.1.0/go.mod h1:nxdHjaKfCr7fNYx/HJMM8LgiMugmveWlkatear5gVyk= +cloud.google.com/go/iam v1.1.2 h1:gacbrBdWcoVmGLozRuStX45YKvJtzIjJdAolzUs1sm4= +cloud.google.com/go/iam v1.1.2/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= @@ -189,16 +189,16 @@ cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1V cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= -cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= -cosmossdk.io/core v0.5.1/go.mod h1:KZtwHCLjcFuo0nmDc24Xy6CRNEL9Vl/MeimQ2aC7NLE= -cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= -cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= +cosmossdk.io/core v0.6.1 h1:OBy7TI2W+/gyn2z40vVvruK3di+cAluinA6cybFbE7s= +cosmossdk.io/core v0.6.1/go.mod h1:g3MMBCBXtxbDWBURDVnJE7XML4BG5qENhs0gzkcpuFA= +cosmossdk.io/depinject v1.0.0-alpha.4 h1:PLNp8ZYAMPTUKyG9IK2hsbciDWqna2z1Wsl98okJopc= +cosmossdk.io/depinject v1.0.0-alpha.4/go.mod h1:HeDk7IkR5ckZ3lMGs/o91AVUc7E596vMaOmslGFM3yU= cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04= cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0= -cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca h1:msenprh2BLLRwNT7zN56TbBHOGk/7ARQckXHxXyvjoQ= -cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca/go.mod h1:PkIAKXZvaxrTRc++z53XMRvFk8AcGGWYHcMIPzVYX9c= -cosmossdk.io/math v1.0.1 h1:Qx3ifyOPaMLNH/89WeZFH268yCvU4xEcnPLu3sJqPPg= -cosmossdk.io/math v1.0.1/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= +cosmossdk.io/log v1.2.1 h1:Xc1GgTCicniwmMiKwDxUjO4eLhPxoVdI9vtMW8Ti/uk= +cosmossdk.io/log v1.2.1/go.mod h1:GNSCc/6+DhFIj1aLn/j7Id7PaO8DzNylUZoOYBL9+I4= +cosmossdk.io/math v1.2.0 h1:8gudhTkkD3NxOP2YyyJIYYmt6dQ55ZfJkDOaxXpy7Ig= +cosmossdk.io/math v1.2.0/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0= cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -220,10 +220,10 @@ github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRr github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420 h1:oknQF/iIhf5lVjbwjsVDzDByupRhga8nhA3NAmwyHDA= github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420/go.mod h1:KYkiMX5AbOlXXYfxkrYPrRPV6EbVUALTQh5ptUOJzu8= -github.com/CosmWasm/wasmd v0.40.0-rc.1 h1:prIM2vP1jNh0zgs9seua5BgKdayBgp3FiHtwxFcZSGs= -github.com/CosmWasm/wasmd v0.40.0-rc.1/go.mod h1:uacdue6EGn9JA1TqBNHB3iCe4PCIChuFT23AzIl2VME= -github.com/CosmWasm/wasmvm v1.2.3 h1:OKYlobwmVGbl0eSn0mXoAAjE5hIuXnQCLPjbNd91sVY= -github.com/CosmWasm/wasmvm v1.2.3/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= +github.com/CosmWasm/wasmd v0.41.0 h1:fmwxSbwb50zZDcBaayYFRLIaSFca+EFld1WOaQi49jg= +github.com/CosmWasm/wasmd v0.41.0/go.mod h1:0Sds1q2IsPaTN1gHa3BNOYcUFgtGvxH7CXEXPgoihns= +github.com/CosmWasm/wasmvm v1.3.0 h1:x12X4bKlUPS7TT9QQP45+fJo2sp30GEbiSSgb9jsec8= +github.com/CosmWasm/wasmvm v1.3.0/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e h1:ahyvB3q25YnZWly5Gq1ekg6jcmWaGj/vG/MhF4aisoc= github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e/go.mod h1:kGUqhHd//musdITWjFvNTHn90WG9bMLBEPQZ17Cmlpw= @@ -247,8 +247,6 @@ github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/ github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/alecthomas/participle/v2 v2.0.0-alpha7 h1:cK4vjj0VSgb3lN1nuKA5F7dw+1s1pWBe5bx7nNCnN+c= -github.com/alecthomas/participle/v2 v2.0.0-alpha7/go.mod h1:NumScqsC42o9x+dGj8/YqsIfhrIQjFEOFovxotbBirA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -264,16 +262,15 @@ github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJ github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/avast/retry-go/v4 v4.3.4 h1:pHLkL7jvCvP317I8Ge+Km2Yhntv3SdkJm7uekkqbKhM= -github.com/avast/retry-go/v4 v4.3.4/go.mod h1:rv+Nla6Vk3/ilU0H51VHddWHiwimzX66yZ0JT6T+UvE= +github.com/avast/retry-go/v4 v4.5.0 h1:QoRAZZ90cj5oni2Lsgl2GW8mNTnUCnmpx/iKpwVisHg= +github.com/avast/retry-go/v4 v4.5.0/go.mod h1:7hLEXp0oku2Nir2xBAsg0PTphp9z71bN5Aq1fboC3+I= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/aws/aws-sdk-go v1.44.203 h1:pcsP805b9acL3wUqa4JR2vg1k2wnItkDYNvfmcy6F+U= github.com/aws/aws-sdk-go v1.44.203/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= -github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -332,16 +329,20 @@ github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= -github.com/cockroachdb/apd/v3 v3.1.0 h1:MK3Ow7LH0W8zkd5GMKA1PvS9qG3bWFI95WaVNfyZJ/w= -github.com/cockroachdb/apd/v3 v3.1.0/go.mod h1:6qgPBMXjATAdD/VefbRP9NoSLKjbB4LCoA7gN4LpHs4= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= +github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= +github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= github.com/cometbft/cometbft v0.37.2 h1:XB0yyHGT0lwmJlFmM4+rsRnczPlHoAKFX6K8Zgc2/Jc= github.com/cometbft/cometbft v0.37.2/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= -github.com/cometbft/cometbft-db v0.8.0 h1:vUMDaH3ApkX8m0KZvOFFy9b5DZHBAjsnEuo9AKVZpjo= -github.com/cometbft/cometbft-db v0.8.0/go.mod h1:6ASCP4pfhmrCBpfk01/9E1SI29nD3HfVHrY4PG8x5c0= +github.com/cometbft/cometbft-db v0.9.1 h1:MIhVX5ja5bXNHF8EYrThkG9F7r9kSfv8BX4LWaxWJ4M= +github.com/cometbft/cometbft-db v0.9.1/go.mod h1:iliyWaoV0mRwBJoizElCwwRA9Tf7jZJOURcRZF9m60U= github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= @@ -354,10 +355,10 @@ github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= -github.com/cosmos/cosmos-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= -github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= -github.com/cosmos/cosmos-sdk v0.47.4 h1:FVUpEprm58nMmBX4xkRdMDaIG5Nr4yy92HZAfGAw9bg= -github.com/cosmos/cosmos-sdk v0.47.4/go.mod h1:R5n+uM7vguVPFap4pgkdvQCT1nVo/OtPwrlAU40rvok= +github.com/cosmos/cosmos-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o= +github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I= +github.com/cosmos/cosmos-sdk v0.47.6 h1:uyo/eg9NMB66aQZIZUv/LeOPTdSnsU23wZkgFYpjikQ= +github.com/cosmos/cosmos-sdk v0.47.6/go.mod h1:xTc1chW8HyUWCfrgGbjS5jNu9RzlPVrBNfbL9RmZUio= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= @@ -366,27 +367,23 @@ github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoKuI= github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek= -github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= -github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= -github.com/cosmos/ibc-go/v7 v7.2.0 h1:dx0DLUl7rxdyZ8NiT6UsrbzKOJx/w7s+BOaewFRH6cg= -github.com/cosmos/ibc-go/v7 v7.2.0/go.mod h1:OOcjKIRku/j1Xs1RgKK0yvKRrJ5iFuZYMetR1n3yMlc= +github.com/cosmos/iavl v0.20.1 h1:rM1kqeG3/HBT85vsZdoSNsehciqUQPWrR4BYmqE2+zg= +github.com/cosmos/iavl v0.20.1/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= +github.com/cosmos/ibc-go/v7 v7.3.1 h1:bil1IjnHdyWDASFYKfwdRiNtFP6WK3osW7QFEAgU4I8= +github.com/cosmos/ibc-go/v7 v7.3.1/go.mod h1:wvx4pPBofe5ZdMNV3OFRxSI4auEP5Qfqf8JXLLNV04g= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= -github.com/cosmos/ledger-cosmos-go v0.12.2 h1:/XYaBlE2BJxtvpkHiBm97gFGSGmYGKunKyF3nNqAXZA= -github.com/cosmos/ledger-cosmos-go v0.12.2/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI= +github.com/cosmos/ledger-cosmos-go v0.13.0 h1:ex0CvCxToSR7j5WjrghPu2Bu9sSXKikjnVvUryNnx4s= +github.com/cosmos/ledger-cosmos-go v0.13.0/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI= github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cucumber/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= -github.com/cucumber/common/gherkin/go/v22 v22.0.0/go.mod h1:3mJT10B2GGn3MvVPd3FwR7m2u4tLhSRhWUqJU4KN4Fg= -github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= -github.com/cucumber/common/messages/go/v17 v17.1.1/go.mod h1:bpGxb57tDE385Rb2EohgUadLkAbhoC4IyCFi89u/JQI= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -398,12 +395,13 @@ github.com/decred/base58 v1.0.4 h1:QJC6B0E0rXOPA8U/kw2rP+qiRJsUaE2Er+pYb3siUeA= github.com/decred/base58 v1.0.4/go.mod h1:jJswKPEdvpFpvf7dsDvFZyLT22xZ9lWqEByX38oGd9E= github.com/decred/dcrd/chaincfg/chainhash v1.0.2 h1:rt5Vlq/jM3ZawwiacWjPa+smINyLRN07EO0cNBV6DGU= github.com/decred/dcrd/chaincfg/chainhash v1.0.2/go.mod h1:BpbrGgrPTr3YJYRN3Bm+D9NuaFd+zGyNeIKgrhCXK60= -github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= +github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= +github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1 h1:18HurQ6DfHeNvwIjvOmrgr44bPdtVaQAe/WWwHg9goM= github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1/go.mod h1:XmyzkaXBy7ZvHdrTAlXAjpog8qKSAWa3ze7yqzWmgmc= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= @@ -417,8 +415,8 @@ github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WA github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v24.0.5+incompatible h1:WmgcE4fxyI6EEXxBRxsHnZXrO1pQ3smi0k/jho4HLeY= -github.com/docker/docker v24.0.5+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v24.0.7+incompatible h1:Wo6l37AuwP3JaMnZa226lzVXGA3F9Ig1seQen0cKYlM= +github.com/docker/docker v24.0.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= @@ -461,12 +459,16 @@ github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4 github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/getsentry/sentry-go v0.23.0 h1:dn+QRCeJv4pPt9OjVXiMcGIBIefaTJPw/h0bZWO05nE= +github.com/getsentry/sentry-go v0.23.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -475,6 +477,7 @@ github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= @@ -510,15 +513,13 @@ github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MG github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= -github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= -github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= +github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -577,8 +578,9 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= @@ -608,20 +610,21 @@ github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ= -github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= +github.com/google/pprof v0.0.0-20230405160723-4a4c7d95572b h1:Qcx5LM0fSiks9uCyFZwDBUasd3lxd1RM0GYpL+Li5o4= +github.com/google/pprof v0.0.0-20230405160723-4a4c7d95572b/go.mod h1:79YE0hCXdHag9sBkw2o+N/YnZtTkXi0UT9Nnixa5eYk= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= +github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= -github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= -github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.4 h1:uGy6JWR/uMIILU8wbf+OkstIrNiMjGpEIyhx8f6W7s4= +github.com/googleapis/enterprise-certificate-proxy v0.2.4/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= @@ -631,8 +634,8 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99 github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4= -github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= +github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= +github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= @@ -649,8 +652,8 @@ github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWm github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= @@ -718,8 +721,8 @@ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANyt github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/ipfs/go-cid v0.2.0 h1:01JTiihFq9en9Vz0lc0VDWvZe/uBonGpzo4THP0vcQ0= -github.com/ipfs/go-cid v0.2.0/go.mod h1:P+HXFDF4CVhaVayiEb4wkAy7zBHxBwsJyt0Y5U6MLro= +github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= +github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk= github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= @@ -751,19 +754,17 @@ github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYs github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= -github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= +github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.3 h1:sxCkb+qR91z4vsqw4vGGZlDgPz3G7gjaLyK3V8y70BU= -github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= +github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -777,14 +778,12 @@ github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= -github.com/libp2p/go-libp2p v0.22.0 h1:2Tce0kHOp5zASFKJbNzRElvh0iZwdtG5uZheNW8chIw= -github.com/libp2p/go-libp2p v0.22.0/go.mod h1:UDolmweypBSjQb2f7xutPnwZ/fxioLbMBxSjRksxxU4= -github.com/libp2p/go-openssl v0.1.0 h1:LBkKEcUv6vtZIQLVTegAil8jbNpJErQ9AnT+bWV+Ooo= -github.com/libp2p/go-openssl v0.1.0/go.mod h1:OiOxwPpL3n4xlenjx2h7AwSGaFSC/KZvf6gNdOBQMtc= +github.com/libp2p/go-libp2p v0.27.8 h1:IX5x/4yKwyPQeVS2AXHZ3J4YATM9oHBGH1gBc23jBAI= +github.com/libp2p/go-libp2p v0.27.8/go.mod h1:eCFFtd0s5i/EVKR7+5Ki8bM7qwkNW3TPTTSSW9sz8NE= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/linxGnu/grocksdb v1.7.16 h1:Q2co1xrpdkr5Hx3Fp+f+f7fRGhQFQhvi/+226dtLmA8= -github.com/linxGnu/grocksdb v1.7.16/go.mod h1:JkS7pl5qWpGpuVb3bPqTz8nC12X3YtPZT+Xq7+QfQo4= +github.com/linxGnu/grocksdb v1.8.6 h1:O7I6SIGPrypf3f/gmrrLUBQDKfO8uOoYdWf4gLS06tc= +github.com/linxGnu/grocksdb v1.8.6/go.mod h1:xZCIb5Muw+nhbDK4Y5UJuOrin5MceOuiXkVUR7vp4WY= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= @@ -792,18 +791,14 @@ github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3v github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-pointer v0.0.1 h1:n+XhsuGeVO6MEAp7xyEukFINEa+Quek5psIR/ylA6o0= -github.com/mattn/go-pointer v0.0.1/go.mod h1:2zXcozF6qYGgmsG+SeTZz3oAbFLdD3OWqnUbNvJZAlc= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= @@ -849,20 +844,20 @@ github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= -github.com/multiformats/go-base32 v0.0.4 h1:+qMh4a2f37b4xTNs6mqitDinryCI+tfO2dRVMN9mjSE= -github.com/multiformats/go-base32 v0.0.4/go.mod h1:jNLFzjPZtp3aIARHbJRZIaPuspdH0J6q39uUM5pnABM= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.6.0 h1:qMnoOPj2s8xxPU5kZ57Cqdr0hHhARz7mFsPMIiYNqzg= -github.com/multiformats/go-multiaddr v0.6.0/go.mod h1:F4IpaKZuPP360tOMn2Tpyu0At8w23aRyVqeK0DbFeGM= -github.com/multiformats/go-multibase v0.1.1 h1:3ASCDsuLX8+j4kx58qnJ4YFq/JWTJpCyDW27ztsVTOI= -github.com/multiformats/go-multibase v0.1.1/go.mod h1:ZEjHE+IsUrgp5mhlEAYjMtZwK1k4haNkcaPg9aoe1a8= -github.com/multiformats/go-multicodec v0.5.0 h1:EgU6cBe/D7WRwQb1KmnBvU7lrcFGMggZVTPtOW9dDHs= -github.com/multiformats/go-multicodec v0.5.0/go.mod h1:DiY2HFaEp5EhEXb/iYzVAunmyX/aSFMxq2KMKfWEues= +github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE= +github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI= +github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0= +github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4= +github.com/multiformats/go-multiaddr v0.9.0 h1:3h4V1LHIk5w4hJHekMKWALPXErDfz/sggzwC/NcqbDQ= +github.com/multiformats/go-multiaddr v0.9.0/go.mod h1:mI67Lb1EeTOYb8GQfL/7wpIZwc46ElrvzhYnoJOmTT0= +github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g= +github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk= +github.com/multiformats/go-multicodec v0.8.1 h1:ycepHwavHafh3grIbR1jIXnKCsFm0fqsfEOsJ8NtKE8= +github.com/multiformats/go-multicodec v0.8.1/go.mod h1:L3QTQvMIaVBkXOXXtVmYE+LI16i14xuaojr/H7Ai54k= github.com/multiformats/go-multihash v0.2.1 h1:aem8ZT0VA2nCHHk7bPJ1BjUbHNciqZC/d16Vve9l108= github.com/multiformats/go-multihash v0.2.1/go.mod h1:WxoMcYG85AZVQUyRyo9s4wULvW5qrI9vb2Lt6evduFc= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= +github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8= +github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -924,12 +919,14 @@ github.com/pelletier/go-toml/v2 v2.0.9 h1:uH2qQXheeefCCkuBBSLi7jCiSmj3VRh2+Goq2N github.com/pelletier/go-toml/v2 v2.0.9/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 h1:hDSdbBuw3Lefr6R18ax0tZ2BJeNB3NehB3trOwYBsdU= -github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/petermattis/goid v0.0.0-20230518223814-80aa455d8761 h1:W04oB3d0J01W5jgYRGKsV8LCM6g9EkCvPkZcmFuy0OE= +github.com/petermattis/goid v0.0.0-20230518223814-80aa455d8761/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo= github.com/pierrec/xxHash v0.1.5/go.mod h1:w2waW5Zoa/Wc4Yqe0wgrIYAGKqRMf7czn2HNKXmuL+I= +github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -946,39 +943,37 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.15.0 h1:5fCgGYogn0hFdhyhLbw7hEsWxufKtY9klyvdNfFlFhM= -github.com/prometheus/client_golang v1.15.0/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt1N9XgF6zxWmaC0xOk= +github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= +github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= -github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 h1:v7DLqVdK4VrYkVD5diGdl4sxJurKJEMnODWRJlxV9oM= +github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= -github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= +github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= +github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= -github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= +github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI= +github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= -github.com/regen-network/gocuke v0.6.2/go.mod h1:zYaqIHZobHyd0xOrHGPQjbhGJsuZ1oElx150u2o1xuk= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= @@ -987,16 +982,15 @@ github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qq github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= -github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc= -github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU= +github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A= +github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -1018,8 +1012,6 @@ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1 github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= @@ -1031,8 +1023,8 @@ github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= -github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= +github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= +github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= @@ -1043,8 +1035,8 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= -github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230810233557-5fdb1e8a62e5 h1:CxxuOi9avhKixPG1zzgnC0RfPXr8FVtYeuiaymJY8cQ= -github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230810233557-5fdb1e8a62e5/go.mod h1:SNOsTMsNsAzyeRgKS+kKwKCpg8R08WW0wSOiR32rb+E= +github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230721183422-fb937bb0e165 h1:uVCHoklBlbAy77RT6iQBaK7oo8rTn5uI0hrRn1LL5Sw= +github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230721183422-fb937bb0e165/go.mod h1:WUglvTs5dOXiI7z+VRiVibkFcd2pvTfoDEcXnjYONrw= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= @@ -1064,7 +1056,6 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= @@ -1104,13 +1095,13 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo= -github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= -github.com/zondax/ledger-go v0.14.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c= -github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= +github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= +github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw= +github.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1UpHb342ycI= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= -go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA= +go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= @@ -1127,19 +1118,21 @@ go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqe go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= -go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= -go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= +go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= -go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= +go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= +go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= golang.org/x/crypto v0.0.0-20170613210332-850760c427c5/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1154,11 +1147,10 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= -golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= +golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA= +golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1170,8 +1162,8 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc h1:mCRnTeVUjcrhlRmO0VK8a6k6Rrf6TF9htwo2pJVSjIU= -golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= +golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb h1:xIApU0ow1zwMa2uL1VDNeQlNVFTWMQxZUZCMDy0Q4Us= +golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1261,8 +1253,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= -golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= +golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg= +golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1288,8 +1280,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= -golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= +golang.org/x/oauth2 v0.11.0 h1:vPL4xzxBM4niKCW6g9whtaWVXTJf1U5e4aZxxFx/gbU= +golang.org/x/oauth2 v0.11.0/go.mod h1:LdF7O/8bLR/qWK9DrpXmbHLTouvRHK0SgJl0GmDBchk= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1304,8 +1296,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ= +golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1379,7 +1371,7 @@ golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1404,13 +1396,14 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= -golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= +golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c= -golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= +golang.org/x/term v0.14.0 h1:LGK9IlZ8T9jvdy6cTdfKUCltatMFOehAQo9SRC46UQ8= +golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1422,8 +1415,8 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= -golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1449,6 +1442,7 @@ golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1491,8 +1485,8 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.11.0 h1:EMCa6U9S2LtZXLAMoWiR/R8dAQFRqbAitmbJ2UKhoi8= -golang.org/x/tools v0.11.0/go.mod h1:anzJrxPjNtfgiYQYirP2CPGzGLxrH2u2QBhn6Bf3qY8= +golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1551,8 +1545,8 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.126.0 h1:q4GJq+cAdMAC7XP7njvQ4tvohGLiSlytuL4BQxbIZ+o= -google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= +google.golang.org/api v0.128.0 h1:RjPESny5CnQRn9V6siglged+DZCgfu9l6mO9dkX9VOg= +google.golang.org/api v0.128.0/go.mod h1:Y611qgqaE92On/7g65MQgxYul3c0rEB894kniWLY750= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1671,12 +1665,12 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 h1:Au6te5hbKUV8pIYWHqOUZ1pva5qK/rwbIhoXEUB9Lu8= -google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:O9kGHb51iE/nOGvQaDUuadVYqovW56s5emA88lQnj6Y= -google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 h1:s5YSX+ZH5b5vS9rnpGymvIyMpLRJizowqDlOuyjXnTk= -google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 h1:bVf09lpb+OJbByTj913DRJioFFAjf/ZGxEz7MajTp2U= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= +google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a h1:fwgW9j3vHirt4ObdHoYNwuO24BEZjSzbh+zPaNWoiY8= +google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:EMfReVxb80Dq1hhioy0sOsY9jCE46YDgHlJ7fWVUWRE= +google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 h1:W18sezcAYs+3tDZX4F80yctqa12jcP1PUS2gQu1zTPU= +google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97/go.mod h1:iargEX0SFPm3xcfMI0d1domjg0ZF4Aa0p2awqyxhvF0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b h1:ZlWIi1wSK56/8hn4QcBp/j9M7Gt3U/3hZw3mC7vDICo= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1718,8 +1712,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.57.0 h1:kfzNeI/klCGD2YPMUlaGNT3pxvYfga7smW3Vth8Zsiw= -google.golang.org/grpc v1.57.0/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo= +google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= +google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1797,16 +1791,16 @@ modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk= modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM= modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= -modernc.org/libc v1.22.5 h1:91BNch/e5B0uPbJFgqbxXuOnxBQjlS//icfQEGmvyjE= -modernc.org/libc v1.22.5/go.mod h1:jj+Z7dTNX8fBScMVNRAYZ/jF91K8fdT2hYMThc3YjBY= +modernc.org/libc v1.24.1 h1:uvJSeCKL/AgzBo2yYIPPTy82v21KgGnizcGYfBHaNuM= +modernc.org/libc v1.24.1/go.mod h1:FmfO1RLrU3MHJfyi9eYYmZBfi/R+tqZ6+hQ3yQQUkak= modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds= -modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/memory v1.6.0 h1:i6mzavxrE9a30whzMfwf7XWVODx2r5OYXvU46cirX7o= +modernc.org/memory v1.6.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= -modernc.org/sqlite v1.24.0 h1:EsClRIWHGhLTCX44p+Ri/JLD+vFGo0QGjasg2/F9TlI= -modernc.org/sqlite v1.24.0/go.mod h1:OrDj17Mggn6MhE+iPbBNf7RGKODDE9NFT0f3EwDzJqk= +modernc.org/sqlite v1.25.0 h1:AFweiwPNd/b3BoKnBOfFm+Y260guGMF+0UFk0savqeA= +modernc.org/sqlite v1.25.0/go.mod h1:FL3pVXie73rg3Rii6V/u5BoHlSoyeZeIgKZEgHARyCU= modernc.org/strutil v1.1.3 h1:fNMm+oJklMGYfU9Ylcywl0CO5O6nTfaowNsh2wpPjzY= modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= modernc.org/tcl v1.15.2 h1:C4ybAYCGJw968e+Me18oW55kD/FexcHbqH2xak1ROSY= @@ -1815,10 +1809,11 @@ modernc.org/token v1.0.1 h1:A3qvTqOwexpfZZeyI0FeGPDlSWX5pjZu9hF4lU+EKWg= modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= modernc.org/z v1.7.3 h1:zDJf6iHjrnB+WRD88stbXokugjyc0/pB91ri1gO6LZY= modernc.org/z v1.7.3/go.mod h1:Ipv4tsdxZRbQyLq9Q1M6gdbkxYzdlrciF2Hi/lS7nWE= -nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= -pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g= +nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= +pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/tests/interchaintest/host_zone_proposal_test.go b/tests/interchaintest/host_zone_proposal_test.go index ba9853da..61160598 100644 --- a/tests/interchaintest/host_zone_proposal_test.go +++ b/tests/interchaintest/host_zone_proposal_test.go @@ -5,7 +5,7 @@ import ( "fmt" "testing" - feeabsCli "github.com/notional-labs/fee-abstraction/tests/interchaintest/feeabs" + feeabsCli "github.com/osmosis-labs/fee-abstraction/tests/interchaintest/feeabs" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/stretchr/testify/require" ) diff --git a/tests/interchaintest/ibc_transfer_test.go b/tests/interchaintest/ibc_transfer_test.go index 5f302471..9e5e0281 100644 --- a/tests/interchaintest/ibc_transfer_test.go +++ b/tests/interchaintest/ibc_transfer_test.go @@ -5,12 +5,12 @@ import ( "fmt" "testing" - "cosmossdk.io/math" sdktypes "github.com/cosmos/cosmos-sdk/types" transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" "github.com/strangelove-ventures/interchaintest/v7" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v7/ibc" + "github.com/strangelove-ventures/interchaintest/v7/relayer" "github.com/strangelove-ventures/interchaintest/v7/testreporter" "github.com/strangelove-ventures/interchaintest/v7/testutil" "github.com/stretchr/testify/require" @@ -41,7 +41,7 @@ func TestFeeabsGaiaIBCTransfer(t *testing.T) { }, { Name: "gaia", - Version: "v12.0.0-rc0", + Version: GaiaImageVersion, NumValidators: &numVals, NumFullNodes: &numFullNodes, }, @@ -55,8 +55,11 @@ func TestFeeabsGaiaIBCTransfer(t *testing.T) { // Create relayer factory to utilize the go-relayer client, network := interchaintest.DockerSetup(t) - - r := interchaintest.NewBuiltinRelayerFactory(ibc.CosmosRly, zaptest.NewLogger(t)).Build(t, client, network) + r := interchaintest.NewBuiltinRelayerFactory( + ibc.CosmosRly, + zaptest.NewLogger(t), + relayer.CustomDockerImage(IBCRelayerImage, IBCRelayerVersion, "100:1000"), + ).Build(t, client, network) // Create a new Interchain object which describes the chains, relayers, and IBC connections we want to use ic := interchaintest.NewInterchain(). @@ -115,14 +118,14 @@ func TestFeeabsGaiaIBCTransfer(t *testing.T) { // Get original account balances feeabsOrigBal, err := feeabs.GetBalance(ctx, feeabsUserAddr, feeabs.Config().Denom) require.NoError(t, err) - require.Equal(t, math.NewInt(genesisWalletAmount), feeabsOrigBal) + require.Equal(t, genesisWalletAmount, feeabsOrigBal) gaiaOrigBal, err := gaia.GetBalance(ctx, gaiaUserAddr, gaia.Config().Denom) require.NoError(t, err) - require.Equal(t, math.NewInt(genesisWalletAmount), gaiaOrigBal) + require.Equal(t, genesisWalletAmount, gaiaOrigBal) // Compose an IBC transfer and send from feeabs -> Gaia - transferAmount := math.NewInt(1_000) + transferAmount := int64(1_000) transfer := ibc.WalletAmount{ Address: gaiaUserAddr, Denom: feeabs.Config().Denom, @@ -149,7 +152,7 @@ func TestFeeabsGaiaIBCTransfer(t *testing.T) { // Assert that the funds are no longer present in user acc on feeabs and are in the user acc on Gaia feeabsUpdateBal, err := feeabs.GetBalance(ctx, feeabsUserAddr, feeabs.Config().Denom) require.NoError(t, err) - require.Equal(t, feeabsOrigBal.Sub(transferAmount), feeabsUpdateBal) + require.Equal(t, feeabsOrigBal-transferAmount, feeabsUpdateBal) gaiaUpdateBal, err := gaia.GetBalance(ctx, gaiaUserAddr, feeabsIBCDenom) require.NoError(t, err) @@ -179,5 +182,5 @@ func TestFeeabsGaiaIBCTransfer(t *testing.T) { gaiaUpdateBal, err = gaia.GetBalance(ctx, gaiaUserAddr, feeabsIBCDenom) require.NoError(t, err) - require.Equal(t, math.ZeroInt(), gaiaUpdateBal) + require.Equal(t, int64(0), gaiaUpdateBal) } diff --git a/tests/interchaintest/osmosistypes/gamm/balancer/balancerPool.pb.go b/tests/interchaintest/osmosistypes/gamm/balancer/balancerPool.pb.go deleted file mode 100644 index 00379b28..00000000 --- a/tests/interchaintest/osmosistypes/gamm/balancer/balancerPool.pb.go +++ /dev/null @@ -1,1523 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: osmosis/gamm/pool-models/balancer/balancerPool.proto - -// this is a legacy package that requires additional migration logic -// in order to use the correct packge. Decision made to use legacy package path -// until clear steps for migration logic and the unknowns for state breaking are -// investigated for changing proto package. - -package balancer - -import ( - fmt "fmt" - _ "github.com/cosmos/cosmos-proto" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - types1 "github.com/cosmos/cosmos-sdk/types" - _ "github.com/cosmos/cosmos-sdk/types/tx/amino" - _ "github.com/cosmos/cosmos-sdk/x/auth/types" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - _ "github.com/gogo/protobuf/types" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - io "io" - math "math" - math_bits "math/bits" - time "time" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf -var _ = time.Kitchen - -// 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 - -// Parameters for changing the weights in a balancer pool smoothly from -// a start weight and end weight over a period of time. -// Currently, the only smooth change supported is linear changing between -// the two weights, but more types may be added in the future. -// When these parameters are set, the weight w(t) for pool time `t` is the -// following: -// -// t <= start_time: w(t) = initial_pool_weights -// start_time < t <= start_time + duration: -// w(t) = initial_pool_weights + (t - start_time) * -// (target_pool_weights - initial_pool_weights) / (duration) -// t > start_time + duration: w(t) = target_pool_weights -type SmoothWeightChangeParams struct { - // The start time for beginning the weight change. - // If a parameter change / pool instantiation leaves this blank, - // it should be generated by the state_machine as the current time. - StartTime time.Time `protobuf:"bytes,1,opt,name=start_time,json=startTime,proto3,stdtime" json:"start_time" yaml:"start_time"` - // Duration for the weights to change over - Duration time.Duration `protobuf:"bytes,2,opt,name=duration,proto3,stdduration" json:"duration,omitempty" yaml:"duration"` - // The initial pool weights. These are copied from the pool's settings - // at the time of weight change instantiation. - // The amount PoolAsset.token.amount field is ignored if present, - // future type refactorings should just have a type with the denom & weight - // here. - InitialPoolWeights []PoolAsset `protobuf:"bytes,3,rep,name=initial_pool_weights,json=initialPoolWeights,proto3" json:"initial_pool_weights" yaml:"initial_pool_weights"` - // The target pool weights. The pool weights will change linearly with respect - // to time between start_time, and start_time + duration. The amount - // PoolAsset.token.amount field is ignored if present, future type - // refactorings should just have a type with the denom & weight here. - TargetPoolWeights []PoolAsset `protobuf:"bytes,4,rep,name=target_pool_weights,json=targetPoolWeights,proto3" json:"target_pool_weights" yaml:"target_pool_weights"` -} - -func (m *SmoothWeightChangeParams) Reset() { *m = SmoothWeightChangeParams{} } -func (m *SmoothWeightChangeParams) String() string { return proto.CompactTextString(m) } -func (*SmoothWeightChangeParams) ProtoMessage() {} -func (*SmoothWeightChangeParams) Descriptor() ([]byte, []int) { - return fileDescriptor_7e991f749f68c2a4, []int{0} -} -func (m *SmoothWeightChangeParams) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *SmoothWeightChangeParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_SmoothWeightChangeParams.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 *SmoothWeightChangeParams) XXX_Merge(src proto.Message) { - xxx_messageInfo_SmoothWeightChangeParams.Merge(m, src) -} -func (m *SmoothWeightChangeParams) XXX_Size() int { - return m.Size() -} -func (m *SmoothWeightChangeParams) XXX_DiscardUnknown() { - xxx_messageInfo_SmoothWeightChangeParams.DiscardUnknown(m) -} - -var xxx_messageInfo_SmoothWeightChangeParams proto.InternalMessageInfo - -func (m *SmoothWeightChangeParams) GetStartTime() time.Time { - if m != nil { - return m.StartTime - } - return time.Time{} -} - -func (m *SmoothWeightChangeParams) GetDuration() time.Duration { - if m != nil { - return m.Duration - } - return 0 -} - -func (m *SmoothWeightChangeParams) GetInitialPoolWeights() []PoolAsset { - if m != nil { - return m.InitialPoolWeights - } - return nil -} - -func (m *SmoothWeightChangeParams) GetTargetPoolWeights() []PoolAsset { - if m != nil { - return m.TargetPoolWeights - } - return nil -} - -// PoolParams defined the parameters that will be managed by the pool -// governance in the future. This params are not managed by the chain -// governance. Instead they will be managed by the token holders of the pool. -// The pool's token holders are specified in future_pool_governor. -type PoolParams struct { - SwapFee github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,1,opt,name=swap_fee,json=swapFee,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"swap_fee" yaml:"swap_fee"` - // N.B.: exit fee is disabled during pool creation in x/poolmanager. While old - // pools can maintain a non-zero fee. No new pool can be created with non-zero - // fee anymore - ExitFee github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,2,opt,name=exit_fee,json=exitFee,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"exit_fee" yaml:"exit_fee"` - SmoothWeightChangeParams *SmoothWeightChangeParams `protobuf:"bytes,3,opt,name=smooth_weight_change_params,json=smoothWeightChangeParams,proto3" json:"smooth_weight_change_params,omitempty" yaml:"smooth_weight_change_params"` -} - -func (m *PoolParams) Reset() { *m = PoolParams{} } -func (m *PoolParams) String() string { return proto.CompactTextString(m) } -func (*PoolParams) ProtoMessage() {} -func (*PoolParams) Descriptor() ([]byte, []int) { - return fileDescriptor_7e991f749f68c2a4, []int{1} -} -func (m *PoolParams) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *PoolParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_PoolParams.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 *PoolParams) XXX_Merge(src proto.Message) { - xxx_messageInfo_PoolParams.Merge(m, src) -} -func (m *PoolParams) XXX_Size() int { - return m.Size() -} -func (m *PoolParams) XXX_DiscardUnknown() { - xxx_messageInfo_PoolParams.DiscardUnknown(m) -} - -var xxx_messageInfo_PoolParams proto.InternalMessageInfo - -func (m *PoolParams) GetSmoothWeightChangeParams() *SmoothWeightChangeParams { - if m != nil { - return m.SmoothWeightChangeParams - } - return nil -} - -// Pool asset is an internal struct that combines the amount of the -// token in the pool, and its balancer weight. -// This is an awkward packaging of data, -// and should be revisited in a future state migration. -type PoolAsset struct { - // Coins we are talking about, - // the denomination must be unique amongst all PoolAssets for this pool. - Token types1.Coin `protobuf:"bytes,1,opt,name=token,proto3" json:"token" yaml:"token"` - // Weight that is not normalized. This weight must be less than 2^50 - Weight github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,2,opt,name=weight,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"weight" yaml:"weight"` -} - -func (m *PoolAsset) Reset() { *m = PoolAsset{} } -func (m *PoolAsset) String() string { return proto.CompactTextString(m) } -func (*PoolAsset) ProtoMessage() {} -func (*PoolAsset) Descriptor() ([]byte, []int) { - return fileDescriptor_7e991f749f68c2a4, []int{2} -} -func (m *PoolAsset) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *PoolAsset) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_PoolAsset.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 *PoolAsset) XXX_Merge(src proto.Message) { - xxx_messageInfo_PoolAsset.Merge(m, src) -} -func (m *PoolAsset) XXX_Size() int { - return m.Size() -} -func (m *PoolAsset) XXX_DiscardUnknown() { - xxx_messageInfo_PoolAsset.DiscardUnknown(m) -} - -var xxx_messageInfo_PoolAsset proto.InternalMessageInfo - -func (m *PoolAsset) GetToken() types1.Coin { - if m != nil { - return m.Token - } - return types1.Coin{} -} - -type Pool struct { - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty" yaml:"address"` - Id uint64 `protobuf:"varint,2,opt,name=id,proto3" json:"id,omitempty"` - PoolParams PoolParams `protobuf:"bytes,3,opt,name=pool_params,json=poolParams,proto3" json:"pool_params" yaml:"balancer_pool_params"` - // This string specifies who will govern the pool in the future. - // Valid forms of this are: - // {token name},{duration} - // {duration} - // where {token name} if specified is the token which determines the - // governor, and if not specified is the LP token for this pool.duration is - // a time specified as 0w,1w,2w, etc. which specifies how long the token - // would need to be locked up to count in governance. 0w means no lockup. - // TODO: Further improve these docs - FuturePoolGovernor string `protobuf:"bytes,4,opt,name=future_pool_governor,json=futurePoolGovernor,proto3" json:"future_pool_governor,omitempty" yaml:"future_pool_governor"` - // sum of all LP tokens sent out - TotalShares types1.Coin `protobuf:"bytes,5,opt,name=total_shares,json=totalShares,proto3" json:"total_shares" yaml:"total_shares"` - // These are assumed to be sorted by denomiation. - // They contain the pool asset and the information about the weight - PoolAssets []PoolAsset `protobuf:"bytes,6,rep,name=pool_assets,json=poolAssets,proto3" json:"pool_assets" yaml:"pool_assets"` - // sum of all non-normalized pool weights - TotalWeight github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,7,opt,name=total_weight,json=totalWeight,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"total_weight" yaml:"total_weight"` -} - -func (m *Pool) Reset() { *m = Pool{} } -func (*Pool) ProtoMessage() {} -func (*Pool) Descriptor() ([]byte, []int) { - return fileDescriptor_7e991f749f68c2a4, []int{3} -} -func (m *Pool) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Pool) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Pool.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 *Pool) XXX_Merge(src proto.Message) { - xxx_messageInfo_Pool.Merge(m, src) -} -func (m *Pool) XXX_Size() int { - return m.Size() -} -func (m *Pool) XXX_DiscardUnknown() { - xxx_messageInfo_Pool.DiscardUnknown(m) -} - -var xxx_messageInfo_Pool proto.InternalMessageInfo - -func init() { - proto.RegisterType((*SmoothWeightChangeParams)(nil), "osmosis.gamm.v1beta1.SmoothWeightChangeParams") - proto.RegisterType((*PoolParams)(nil), "osmosis.gamm.v1beta1.PoolParams") - proto.RegisterType((*PoolAsset)(nil), "osmosis.gamm.v1beta1.PoolAsset") - proto.RegisterType((*Pool)(nil), "osmosis.gamm.v1beta1.Pool") -} - -func init() { - proto.RegisterFile("osmosis/gamm/pool-models/balancer/balancerPool.proto", fileDescriptor_7e991f749f68c2a4) -} - -var fileDescriptor_7e991f749f68c2a4 = []byte{ - // 867 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0x4f, 0x8f, 0xdb, 0x44, - 0x14, 0x8f, 0x37, 0xd9, 0x4d, 0x77, 0x52, 0x8a, 0x76, 0x9a, 0x83, 0x93, 0x15, 0x99, 0xd5, 0x80, - 0x50, 0x55, 0x35, 0xb6, 0x52, 0xe0, 0xb2, 0x97, 0xaa, 0x6e, 0x0b, 0xea, 0xad, 0xb8, 0x48, 0xa5, - 0xa8, 0x92, 0x35, 0x49, 0x26, 0xb6, 0x55, 0xdb, 0x63, 0x79, 0x26, 0x69, 0xf7, 0x1b, 0xa0, 0x9e, - 0x7a, 0x2c, 0xb7, 0xde, 0xb9, 0x70, 0xe0, 0x43, 0xac, 0xe0, 0x52, 0x89, 0x0b, 0xe2, 0x60, 0xd0, - 0xee, 0x01, 0x89, 0x63, 0x3e, 0x01, 0x9a, 0x3f, 0xce, 0x9f, 0x25, 0x11, 0xad, 0x7a, 0x49, 0x66, - 0xde, 0xbc, 0xf7, 0x7b, 0xbf, 0xf7, 0xde, 0x6f, 0xc6, 0xe0, 0x73, 0xc6, 0x53, 0xc6, 0x63, 0xee, - 0x86, 0x24, 0x4d, 0xdd, 0x9c, 0xb1, 0xa4, 0x9f, 0xb2, 0x31, 0x4d, 0xb8, 0x3b, 0x24, 0x09, 0xc9, - 0x46, 0xb4, 0x58, 0x2c, 0x1e, 0x30, 0x96, 0x38, 0x79, 0xc1, 0x04, 0x83, 0x6d, 0x13, 0xe5, 0xc8, - 0x28, 0x67, 0x36, 0x18, 0x52, 0x41, 0x06, 0xdd, 0xce, 0x48, 0x99, 0x03, 0xe5, 0xe3, 0xea, 0x8d, - 0x0e, 0xe8, 0xb6, 0x43, 0x16, 0x32, 0x6d, 0x97, 0x2b, 0x63, 0x3d, 0x20, 0x69, 0x9c, 0x31, 0x57, - 0xfd, 0x1a, 0x53, 0x2f, 0x64, 0x2c, 0x4c, 0xa8, 0xab, 0x76, 0xc3, 0xe9, 0xc4, 0x1d, 0x4f, 0x0b, - 0x22, 0x62, 0x96, 0x99, 0x73, 0x74, 0xf1, 0x5c, 0xc4, 0x29, 0xe5, 0x82, 0xa4, 0x79, 0x05, 0xa0, - 0xf3, 0xba, 0x64, 0x2a, 0x22, 0xd7, 0x30, 0x53, 0x9b, 0x0b, 0xe7, 0x43, 0xc2, 0xe9, 0xe2, 0x7c, - 0xc4, 0x62, 0x93, 0x00, 0xff, 0x5a, 0x07, 0xf6, 0xc3, 0x94, 0x31, 0x11, 0x3d, 0xa2, 0x71, 0x18, - 0x89, 0x3b, 0x11, 0xc9, 0x42, 0xfa, 0x80, 0x14, 0x24, 0xe5, 0xf0, 0x5b, 0x00, 0xb8, 0x20, 0x85, - 0x08, 0x64, 0x56, 0xdb, 0x3a, 0xb2, 0xae, 0xb5, 0x6e, 0x76, 0x1d, 0x4d, 0xc9, 0xa9, 0x28, 0x39, - 0xdf, 0x54, 0x94, 0xbc, 0x8f, 0x4e, 0x4b, 0x54, 0x9b, 0x97, 0xe8, 0xe0, 0x84, 0xa4, 0xc9, 0x31, - 0x5e, 0xc6, 0xe2, 0x97, 0x7f, 0x22, 0xcb, 0xdf, 0x57, 0x06, 0xe9, 0x0e, 0x23, 0x70, 0xa9, 0xaa, - 0xd4, 0xde, 0x51, 0xb8, 0x9d, 0xff, 0xe0, 0xde, 0x35, 0x0e, 0xde, 0x40, 0xc2, 0xfe, 0x53, 0x22, - 0x58, 0x85, 0xdc, 0x60, 0x69, 0x2c, 0x68, 0x9a, 0x8b, 0x93, 0x79, 0x89, 0x3e, 0xd4, 0xc9, 0xaa, - 0x33, 0xfc, 0x4a, 0xa6, 0x5a, 0xa0, 0xc3, 0x19, 0x68, 0xc7, 0x59, 0x2c, 0x62, 0x92, 0x04, 0x72, - 0xdc, 0xc1, 0x33, 0x55, 0x26, 0xb7, 0xeb, 0x47, 0xf5, 0x6b, 0xad, 0x9b, 0xc8, 0xd9, 0x34, 0x5a, - 0x47, 0xce, 0xfe, 0x36, 0xe7, 0x54, 0x78, 0x1f, 0x9b, 0x92, 0x0e, 0x75, 0x96, 0x4d, 0x50, 0xd8, - 0x87, 0xc6, 0x2c, 0xc3, 0x74, 0x1b, 0x39, 0xe4, 0xe0, 0xaa, 0x20, 0x45, 0x48, 0xc5, 0x7a, 0xda, - 0xc6, 0xdb, 0xa5, 0xc5, 0x26, 0x6d, 0x57, 0xa7, 0xdd, 0x80, 0x84, 0xfd, 0x03, 0x6d, 0x5d, 0x49, - 0x8a, 0x5f, 0xd4, 0x01, 0x90, 0x7b, 0x33, 0xbf, 0x27, 0xe0, 0x12, 0x7f, 0x46, 0xf2, 0x60, 0x42, - 0xf5, 0xf4, 0xf6, 0xbd, 0xdb, 0x12, 0xf7, 0x8f, 0x12, 0x7d, 0x1a, 0xc6, 0x22, 0x9a, 0x0e, 0x9d, - 0x11, 0x4b, 0x8d, 0x72, 0xcd, 0x5f, 0x9f, 0x8f, 0x9f, 0xba, 0xe2, 0x24, 0xa7, 0xdc, 0xb9, 0x4b, - 0x47, 0xcb, 0xf6, 0x56, 0x38, 0xd8, 0x6f, 0xca, 0xe5, 0x97, 0x94, 0x4a, 0x74, 0xfa, 0x3c, 0x16, - 0x0a, 0x7d, 0xe7, 0xfd, 0xd0, 0x2b, 0x1c, 0xec, 0x37, 0xe5, 0x52, 0xa2, 0xff, 0x60, 0x81, 0x43, - 0xae, 0x84, 0x69, 0x2a, 0x0e, 0x46, 0x4a, 0x9a, 0x41, 0xae, 0x6a, 0xb3, 0xeb, 0x4a, 0x35, 0xce, - 0xe6, 0x46, 0x6e, 0x53, 0xb4, 0x77, 0xfd, 0xb4, 0x44, 0xd6, 0xbc, 0x44, 0xd8, 0x54, 0xb5, 0x3d, - 0x01, 0xf6, 0x6d, 0xbe, 0x05, 0xe5, 0xf8, 0x93, 0x17, 0x7f, 0xff, 0x74, 0x1d, 0xad, 0x3d, 0x25, - 0xde, 0xca, 0xab, 0xa1, 0xbd, 0xf0, 0x8f, 0x16, 0xd8, 0x5f, 0x4c, 0x14, 0xde, 0x03, 0xbb, 0x82, - 0x3d, 0xa5, 0x99, 0xb9, 0x46, 0x1d, 0xc7, 0x3c, 0x18, 0xf2, 0x62, 0x2e, 0x78, 0xdf, 0x61, 0x71, - 0xe6, 0xb5, 0xcd, 0xec, 0x2f, 0x9b, 0xd9, 0xcb, 0x28, 0xec, 0xeb, 0x68, 0xf8, 0x08, 0xec, 0x69, - 0xb6, 0xa6, 0xe5, 0xb7, 0xde, 0xa1, 0xe5, 0xf7, 0x33, 0x31, 0x2f, 0xd1, 0x07, 0x1a, 0x56, 0xa3, - 0x60, 0xdf, 0xc0, 0xe1, 0xdf, 0x1a, 0xa0, 0x21, 0xd9, 0xc2, 0x1b, 0xa0, 0x49, 0xc6, 0xe3, 0x82, - 0x72, 0x6e, 0x34, 0x03, 0xe7, 0x25, 0xba, 0xa2, 0x83, 0xcc, 0x01, 0xf6, 0x2b, 0x17, 0x78, 0x05, - 0xec, 0xc4, 0x63, 0xc5, 0xa5, 0xe1, 0xef, 0xc4, 0x63, 0x38, 0x01, 0x2d, 0xa5, 0xd2, 0xb5, 0x29, - 0x1d, 0x6d, 0x97, 0xbb, 0x99, 0xcb, 0x85, 0x6b, 0x56, 0xbd, 0xc1, 0xc1, 0x0a, 0x16, 0xf6, 0x41, - 0xbe, 0x94, 0xf6, 0xd7, 0xa0, 0x3d, 0x99, 0x8a, 0x69, 0x41, 0xb5, 0x4b, 0xc8, 0x66, 0xb4, 0xc8, - 0x58, 0x61, 0x37, 0x14, 0x65, 0xb4, 0x84, 0xda, 0xe4, 0x85, 0x7d, 0xa8, 0xcd, 0x92, 0xc1, 0x57, - 0xc6, 0x08, 0x1f, 0x83, 0xcb, 0x82, 0x09, 0x92, 0x04, 0x3c, 0x22, 0x05, 0xe5, 0xf6, 0xee, 0xff, - 0x0d, 0xea, 0xd0, 0x90, 0xbe, 0x5a, 0x0d, 0x6a, 0x19, 0x8c, 0xfd, 0x96, 0xda, 0x3e, 0x54, 0x3b, - 0xf8, 0xc4, 0x74, 0x85, 0x48, 0x29, 0x70, 0x7b, 0xef, 0xed, 0x1e, 0x81, 0xae, 0xc1, 0x87, 0x1a, - 0x7f, 0x05, 0xc1, 0xf4, 0x42, 0xb9, 0x71, 0x18, 0x55, 0xc4, 0x8d, 0x32, 0x9a, 0xaa, 0x07, 0xf7, - 0xde, 0x59, 0x19, 0x6b, 0x75, 0x54, 0xfa, 0xd0, 0x75, 0xe8, 0x4b, 0x70, 0xec, 0x7e, 0xff, 0x1a, - 0xd5, 0x5e, 0xbd, 0x46, 0xb5, 0x5f, 0x7e, 0xee, 0xef, 0x4a, 0xa2, 0xf7, 0xe5, 0x4d, 0xe8, 0x6c, - 0xbd, 0x09, 0xde, 0xe3, 0xd3, 0xb3, 0x9e, 0xf5, 0xe6, 0xac, 0x67, 0xfd, 0x75, 0xd6, 0xb3, 0x5e, - 0x9e, 0xf7, 0x6a, 0x6f, 0xce, 0x7b, 0xb5, 0xdf, 0xcf, 0x7b, 0xb5, 0xef, 0x6e, 0xad, 0xd0, 0x32, - 0xf1, 0xfd, 0x84, 0x0c, 0x79, 0xb5, 0x71, 0x67, 0x83, 0x2f, 0xdc, 0xe7, 0xdb, 0xbf, 0xd3, 0xc3, - 0x3d, 0xf5, 0xa1, 0xf8, 0xec, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x5c, 0xe8, 0x89, 0xe3, 0xd3, - 0x07, 0x00, 0x00, -} - -func (m *SmoothWeightChangeParams) 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 *SmoothWeightChangeParams) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SmoothWeightChangeParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TargetPoolWeights) > 0 { - for iNdEx := len(m.TargetPoolWeights) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.TargetPoolWeights[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintBalancerPool(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - } - if len(m.InitialPoolWeights) > 0 { - for iNdEx := len(m.InitialPoolWeights) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.InitialPoolWeights[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintBalancerPool(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - } - n1, err1 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.Duration, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.Duration):]) - if err1 != nil { - return 0, err1 - } - i -= n1 - i = encodeVarintBalancerPool(dAtA, i, uint64(n1)) - i-- - dAtA[i] = 0x12 - n2, err2 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime):]) - if err2 != nil { - return 0, err2 - } - i -= n2 - i = encodeVarintBalancerPool(dAtA, i, uint64(n2)) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *PoolParams) 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 *PoolParams) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *PoolParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.SmoothWeightChangeParams != nil { - { - size, err := m.SmoothWeightChangeParams.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintBalancerPool(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - { - size := m.ExitFee.Size() - i -= size - if _, err := m.ExitFee.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintBalancerPool(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - { - size := m.SwapFee.Size() - i -= size - if _, err := m.SwapFee.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintBalancerPool(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *PoolAsset) 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 *PoolAsset) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *PoolAsset) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.Weight.Size() - i -= size - if _, err := m.Weight.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintBalancerPool(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - { - size, err := m.Token.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintBalancerPool(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *Pool) 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 *Pool) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Pool) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.TotalWeight.Size() - i -= size - if _, err := m.TotalWeight.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintBalancerPool(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x3a - if len(m.PoolAssets) > 0 { - for iNdEx := len(m.PoolAssets) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.PoolAssets[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintBalancerPool(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x32 - } - } - { - size, err := m.TotalShares.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintBalancerPool(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - if len(m.FuturePoolGovernor) > 0 { - i -= len(m.FuturePoolGovernor) - copy(dAtA[i:], m.FuturePoolGovernor) - i = encodeVarintBalancerPool(dAtA, i, uint64(len(m.FuturePoolGovernor))) - i-- - dAtA[i] = 0x22 - } - { - size, err := m.PoolParams.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintBalancerPool(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if m.Id != 0 { - i = encodeVarintBalancerPool(dAtA, i, uint64(m.Id)) - i-- - dAtA[i] = 0x10 - } - if len(m.Address) > 0 { - i -= len(m.Address) - copy(dAtA[i:], m.Address) - i = encodeVarintBalancerPool(dAtA, i, uint64(len(m.Address))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func encodeVarintBalancerPool(dAtA []byte, offset int, v uint64) int { - offset -= sovBalancerPool(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *SmoothWeightChangeParams) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime) - n += 1 + l + sovBalancerPool(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.Duration) - n += 1 + l + sovBalancerPool(uint64(l)) - if len(m.InitialPoolWeights) > 0 { - for _, e := range m.InitialPoolWeights { - l = e.Size() - n += 1 + l + sovBalancerPool(uint64(l)) - } - } - if len(m.TargetPoolWeights) > 0 { - for _, e := range m.TargetPoolWeights { - l = e.Size() - n += 1 + l + sovBalancerPool(uint64(l)) - } - } - return n -} - -func (m *PoolParams) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.SwapFee.Size() - n += 1 + l + sovBalancerPool(uint64(l)) - l = m.ExitFee.Size() - n += 1 + l + sovBalancerPool(uint64(l)) - if m.SmoothWeightChangeParams != nil { - l = m.SmoothWeightChangeParams.Size() - n += 1 + l + sovBalancerPool(uint64(l)) - } - return n -} - -func (m *PoolAsset) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Token.Size() - n += 1 + l + sovBalancerPool(uint64(l)) - l = m.Weight.Size() - n += 1 + l + sovBalancerPool(uint64(l)) - return n -} - -func (m *Pool) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Address) - if l > 0 { - n += 1 + l + sovBalancerPool(uint64(l)) - } - if m.Id != 0 { - n += 1 + sovBalancerPool(uint64(m.Id)) - } - l = m.PoolParams.Size() - n += 1 + l + sovBalancerPool(uint64(l)) - l = len(m.FuturePoolGovernor) - if l > 0 { - n += 1 + l + sovBalancerPool(uint64(l)) - } - l = m.TotalShares.Size() - n += 1 + l + sovBalancerPool(uint64(l)) - if len(m.PoolAssets) > 0 { - for _, e := range m.PoolAssets { - l = e.Size() - n += 1 + l + sovBalancerPool(uint64(l)) - } - } - l = m.TotalWeight.Size() - n += 1 + l + sovBalancerPool(uint64(l)) - return n -} - -func sovBalancerPool(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozBalancerPool(x uint64) (n int) { - return sovBalancerPool(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *SmoothWeightChangeParams) 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 ErrIntOverflowBalancerPool - } - 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: SmoothWeightChangeParams: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SmoothWeightChangeParams: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StartTime", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBalancerPool - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthBalancerPool - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthBalancerPool - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.StartTime, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBalancerPool - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthBalancerPool - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthBalancerPool - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.Duration, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field InitialPoolWeights", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBalancerPool - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthBalancerPool - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthBalancerPool - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.InitialPoolWeights = append(m.InitialPoolWeights, PoolAsset{}) - if err := m.InitialPoolWeights[len(m.InitialPoolWeights)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TargetPoolWeights", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBalancerPool - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthBalancerPool - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthBalancerPool - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TargetPoolWeights = append(m.TargetPoolWeights, PoolAsset{}) - if err := m.TargetPoolWeights[len(m.TargetPoolWeights)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipBalancerPool(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthBalancerPool - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PoolParams) 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 ErrIntOverflowBalancerPool - } - 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: PoolParams: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PoolParams: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SwapFee", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBalancerPool - } - 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 ErrInvalidLengthBalancerPool - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthBalancerPool - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.SwapFee.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ExitFee", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBalancerPool - } - 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 ErrInvalidLengthBalancerPool - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthBalancerPool - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ExitFee.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SmoothWeightChangeParams", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBalancerPool - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthBalancerPool - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthBalancerPool - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.SmoothWeightChangeParams == nil { - m.SmoothWeightChangeParams = &SmoothWeightChangeParams{} - } - if err := m.SmoothWeightChangeParams.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipBalancerPool(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthBalancerPool - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PoolAsset) 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 ErrIntOverflowBalancerPool - } - 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: PoolAsset: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PoolAsset: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - 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 ErrIntOverflowBalancerPool - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthBalancerPool - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthBalancerPool - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Token.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Weight", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBalancerPool - } - 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 ErrInvalidLengthBalancerPool - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthBalancerPool - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Weight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipBalancerPool(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthBalancerPool - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Pool) 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 ErrIntOverflowBalancerPool - } - 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: Pool: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Pool: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBalancerPool - } - 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 ErrInvalidLengthBalancerPool - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthBalancerPool - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Address = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) - } - m.Id = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBalancerPool - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Id |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolParams", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBalancerPool - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthBalancerPool - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthBalancerPool - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.PoolParams.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FuturePoolGovernor", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBalancerPool - } - 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 ErrInvalidLengthBalancerPool - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthBalancerPool - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.FuturePoolGovernor = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TotalShares", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBalancerPool - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthBalancerPool - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthBalancerPool - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.TotalShares.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolAssets", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBalancerPool - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthBalancerPool - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthBalancerPool - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PoolAssets = append(m.PoolAssets, PoolAsset{}) - if err := m.PoolAssets[len(m.PoolAssets)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TotalWeight", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowBalancerPool - } - 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 ErrInvalidLengthBalancerPool - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthBalancerPool - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.TotalWeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipBalancerPool(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthBalancerPool - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipBalancerPool(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, ErrIntOverflowBalancerPool - } - 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, ErrIntOverflowBalancerPool - } - 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, ErrIntOverflowBalancerPool - } - 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, ErrInvalidLengthBalancerPool - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupBalancerPool - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthBalancerPool - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthBalancerPool = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowBalancerPool = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupBalancerPool = fmt.Errorf("proto: unexpected end of group") -) diff --git a/tests/interchaintest/osmosistypes/gamm/balancer/codec.go b/tests/interchaintest/osmosistypes/gamm/balancer/codec.go deleted file mode 100644 index 0d7673fe..00000000 --- a/tests/interchaintest/osmosistypes/gamm/balancer/codec.go +++ /dev/null @@ -1,30 +0,0 @@ -package balancer - -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" -) - -func RegisterInterfaces(registry codectypes.InterfaceRegistry) { - registry.RegisterImplementations( - (*sdk.Msg)(nil), - &MsgCreateBalancerPool{}, - &MsgMigrateSharesToFullRangeConcentratedPosition{}, - ) - - msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) -} - -var ( - amino = codec.NewLegacyAmino() - - // ModuleCdc references the global x/bank module codec. Note, the codec should - // ONLY be used in certain instances of tests and for JSON encoding as Amino is - // still used for that purpose. - // - // The actual codec used for serialization should be provided to x/staking and - // defined at the application level. - ModuleCdc = codec.NewAminoCodec(amino) -) diff --git a/tests/interchaintest/osmosistypes/gamm/balancer/msgs.go b/tests/interchaintest/osmosistypes/gamm/balancer/msgs.go deleted file mode 100644 index a616616f..00000000 --- a/tests/interchaintest/osmosistypes/gamm/balancer/msgs.go +++ /dev/null @@ -1,47 +0,0 @@ -package balancer - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/notional-labs/fee-abstraction/tests/interchaintest/osmosistypes/gamm/types" -) - -const ( - TypeMsgCreateBalancerPool = "create_balancer_pool" - TypeMsgMigrateShares = "migrate_shares" -) - -var _ sdk.Msg = &MsgCreateBalancerPool{} - -func (msg MsgCreateBalancerPool) Route() string { return types.RouterKey } -func (msg MsgCreateBalancerPool) Type() string { return TypeMsgCreateBalancerPool } -func (msg MsgCreateBalancerPool) ValidateBasic() error { return nil } - -func (msg MsgCreateBalancerPool) GetSignBytes() []byte { - return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg)) -} - -func (msg MsgCreateBalancerPool) GetSigners() []sdk.AccAddress { - sender, err := sdk.AccAddressFromBech32(msg.Sender) - if err != nil { - panic(err) - } - return []sdk.AccAddress{sender} -} - -var _ sdk.Msg = &MsgMigrateSharesToFullRangeConcentratedPosition{} - -func (msg MsgMigrateSharesToFullRangeConcentratedPosition) Route() string { return types.RouterKey } -func (msg MsgMigrateSharesToFullRangeConcentratedPosition) Type() string { return TypeMsgMigrateShares } -func (msg MsgMigrateSharesToFullRangeConcentratedPosition) ValidateBasic() error { return nil } - -func (msg MsgMigrateSharesToFullRangeConcentratedPosition) GetSignBytes() []byte { - return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg)) -} - -func (msg MsgMigrateSharesToFullRangeConcentratedPosition) GetSigners() []sdk.AccAddress { - sender, err := sdk.AccAddressFromBech32(msg.Sender) - if err != nil { - panic(err) - } - return []sdk.AccAddress{sender} -} diff --git a/tests/interchaintest/osmosistypes/gamm/balancer/pool.go b/tests/interchaintest/osmosistypes/gamm/balancer/pool.go deleted file mode 100644 index 9f8c5898..00000000 --- a/tests/interchaintest/osmosistypes/gamm/balancer/pool.go +++ /dev/null @@ -1,45 +0,0 @@ -package balancer - -import ( - "encoding/json" - - sdk "github.com/cosmos/cosmos-sdk/types" -) - -type balancerPoolPretty struct { - Address sdk.AccAddress `json:"address" yaml:"address"` - Id uint64 `json:"id" yaml:"id"` - PoolParams PoolParams `json:"pool_params" yaml:"pool_params"` - FuturePoolGovernor string `json:"future_pool_governor" yaml:"future_pool_governor"` - TotalWeight sdk.Dec `json:"total_weight" yaml:"total_weight"` - TotalShares sdk.Coin `json:"total_shares" yaml:"total_shares"` - PoolAssets []PoolAsset `json:"pool_assets" yaml:"pool_assets"` -} - -func (p Pool) String() string { - out, err := p.MarshalJSON() - if err != nil { - panic(err) - } - return string(out) -} - -// MarshalJSON returns the JSON representation of a Pool. -func (p Pool) MarshalJSON() ([]byte, error) { - accAddr, err := sdk.AccAddressFromBech32(p.Address) - if err != nil { - return nil, err - } - - decTotalWeight := sdk.NewDecFromInt(p.TotalWeight) - - return json.Marshal(balancerPoolPretty{ - Address: accAddr, - Id: p.Id, - PoolParams: p.PoolParams, - FuturePoolGovernor: p.FuturePoolGovernor, - TotalWeight: decTotalWeight, - TotalShares: p.TotalShares, - PoolAssets: p.PoolAssets, - }) -} diff --git a/tests/interchaintest/osmosistypes/gamm/balancer/tx.pb.go b/tests/interchaintest/osmosistypes/gamm/balancer/tx.pb.go deleted file mode 100644 index fd331041..00000000 --- a/tests/interchaintest/osmosistypes/gamm/balancer/tx.pb.go +++ /dev/null @@ -1,1421 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: osmosis/gamm/pool-models/balancer/tx/tx.proto - -package balancer - -import ( - context "context" - fmt "fmt" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/cosmos/cosmos-sdk/types/tx/amino" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" - _ "github.com/gogo/protobuf/types" - github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" - 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" - time "time" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf -var _ = time.Kitchen - -// 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 - -// ===================== MsgCreatePool -type MsgCreateBalancerPool struct { - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` - PoolParams *PoolParams `protobuf:"bytes,2,opt,name=pool_params,json=poolParams,proto3" json:"pool_params,omitempty" yaml:"pool_params"` - PoolAssets []PoolAsset `protobuf:"bytes,3,rep,name=pool_assets,json=poolAssets,proto3" json:"pool_assets"` - FuturePoolGovernor string `protobuf:"bytes,4,opt,name=future_pool_governor,json=futurePoolGovernor,proto3" json:"future_pool_governor,omitempty" yaml:"future_pool_governor"` -} - -func (m *MsgCreateBalancerPool) Reset() { *m = MsgCreateBalancerPool{} } -func (m *MsgCreateBalancerPool) String() string { return proto.CompactTextString(m) } -func (*MsgCreateBalancerPool) ProtoMessage() {} -func (*MsgCreateBalancerPool) Descriptor() ([]byte, []int) { - return fileDescriptor_0647ee155de97433, []int{0} -} -func (m *MsgCreateBalancerPool) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgCreateBalancerPool) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgCreateBalancerPool.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 *MsgCreateBalancerPool) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgCreateBalancerPool.Merge(m, src) -} -func (m *MsgCreateBalancerPool) XXX_Size() int { - return m.Size() -} -func (m *MsgCreateBalancerPool) XXX_DiscardUnknown() { - xxx_messageInfo_MsgCreateBalancerPool.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgCreateBalancerPool proto.InternalMessageInfo - -func (m *MsgCreateBalancerPool) GetSender() string { - if m != nil { - return m.Sender - } - return "" -} - -func (m *MsgCreateBalancerPool) GetPoolParams() *PoolParams { - if m != nil { - return m.PoolParams - } - return nil -} - -func (m *MsgCreateBalancerPool) GetPoolAssets() []PoolAsset { - if m != nil { - return m.PoolAssets - } - return nil -} - -func (m *MsgCreateBalancerPool) GetFuturePoolGovernor() string { - if m != nil { - return m.FuturePoolGovernor - } - return "" -} - -// Returns the poolID -type MsgCreateBalancerPoolResponse struct { - PoolID uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` -} - -func (m *MsgCreateBalancerPoolResponse) Reset() { *m = MsgCreateBalancerPoolResponse{} } -func (m *MsgCreateBalancerPoolResponse) String() string { return proto.CompactTextString(m) } -func (*MsgCreateBalancerPoolResponse) ProtoMessage() {} -func (*MsgCreateBalancerPoolResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0647ee155de97433, []int{1} -} -func (m *MsgCreateBalancerPoolResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgCreateBalancerPoolResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgCreateBalancerPoolResponse.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 *MsgCreateBalancerPoolResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgCreateBalancerPoolResponse.Merge(m, src) -} -func (m *MsgCreateBalancerPoolResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgCreateBalancerPoolResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgCreateBalancerPoolResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgCreateBalancerPoolResponse proto.InternalMessageInfo - -func (m *MsgCreateBalancerPoolResponse) GetPoolID() uint64 { - if m != nil { - return m.PoolID - } - return 0 -} - -// ===================== MsgMigrateSharesToFullRangeConcentratedPosition -type MsgMigrateSharesToFullRangeConcentratedPosition struct { - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` - // shares_to_migrate indicates number of shares to migrate. - SharesToMigrate types.Coin `protobuf:"bytes,2,opt,name=shares_to_migrate,json=sharesToMigrate,proto3" json:"shares_to_migrate" yaml:"shares_to_migrate"` - // token_out_mins indicates minimum token to exit Balancer pool with. - TokenOutMins []types.Coin `protobuf:"bytes,3,rep,name=token_out_mins,json=tokenOutMins,proto3" json:"token_out_mins" yaml:"token_out_min_amounts"` -} - -func (m *MsgMigrateSharesToFullRangeConcentratedPosition) Reset() { - *m = MsgMigrateSharesToFullRangeConcentratedPosition{} -} -func (m *MsgMigrateSharesToFullRangeConcentratedPosition) String() string { - return proto.CompactTextString(m) -} -func (*MsgMigrateSharesToFullRangeConcentratedPosition) ProtoMessage() {} -func (*MsgMigrateSharesToFullRangeConcentratedPosition) Descriptor() ([]byte, []int) { - return fileDescriptor_0647ee155de97433, []int{2} -} -func (m *MsgMigrateSharesToFullRangeConcentratedPosition) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgMigrateSharesToFullRangeConcentratedPosition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgMigrateSharesToFullRangeConcentratedPosition.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 *MsgMigrateSharesToFullRangeConcentratedPosition) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgMigrateSharesToFullRangeConcentratedPosition.Merge(m, src) -} -func (m *MsgMigrateSharesToFullRangeConcentratedPosition) XXX_Size() int { - return m.Size() -} -func (m *MsgMigrateSharesToFullRangeConcentratedPosition) XXX_DiscardUnknown() { - xxx_messageInfo_MsgMigrateSharesToFullRangeConcentratedPosition.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgMigrateSharesToFullRangeConcentratedPosition proto.InternalMessageInfo - -func (m *MsgMigrateSharesToFullRangeConcentratedPosition) GetSender() string { - if m != nil { - return m.Sender - } - return "" -} - -func (m *MsgMigrateSharesToFullRangeConcentratedPosition) GetSharesToMigrate() types.Coin { - if m != nil { - return m.SharesToMigrate - } - return types.Coin{} -} - -func (m *MsgMigrateSharesToFullRangeConcentratedPosition) GetTokenOutMins() []types.Coin { - if m != nil { - return m.TokenOutMins - } - return nil -} - -type MsgMigrateSharesToFullRangeConcentratedPositionResponse struct { - Amount0 github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=amount0,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"amount0" yaml:"amount0"` - Amount1 github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,2,opt,name=amount1,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"amount1" yaml:"amount1"` - LiquidityCreated github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,3,opt,name=liquidity_created,json=liquidityCreated,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"liquidity_created" yaml:"liquidity_created"` - JoinTime time.Time `protobuf:"bytes,4,opt,name=join_time,json=joinTime,proto3,stdtime" json:"join_time" yaml:"join_time"` -} - -func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) Reset() { - *m = MsgMigrateSharesToFullRangeConcentratedPositionResponse{} -} -func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) String() string { - return proto.CompactTextString(m) -} -func (*MsgMigrateSharesToFullRangeConcentratedPositionResponse) ProtoMessage() {} -func (*MsgMigrateSharesToFullRangeConcentratedPositionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0647ee155de97433, []int{3} -} -func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgMigrateSharesToFullRangeConcentratedPositionResponse.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 *MsgMigrateSharesToFullRangeConcentratedPositionResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgMigrateSharesToFullRangeConcentratedPositionResponse.Merge(m, src) -} -func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgMigrateSharesToFullRangeConcentratedPositionResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgMigrateSharesToFullRangeConcentratedPositionResponse proto.InternalMessageInfo - -func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) GetJoinTime() time.Time { - if m != nil { - return m.JoinTime - } - return time.Time{} -} - -func init() { - proto.RegisterType((*MsgCreateBalancerPool)(nil), "osmosis.gamm.poolmodels.balancer.v1beta1.MsgCreateBalancerPool") - proto.RegisterType((*MsgCreateBalancerPoolResponse)(nil), "osmosis.gamm.poolmodels.balancer.v1beta1.MsgCreateBalancerPoolResponse") - proto.RegisterType((*MsgMigrateSharesToFullRangeConcentratedPosition)(nil), "osmosis.gamm.poolmodels.balancer.v1beta1.MsgMigrateSharesToFullRangeConcentratedPosition") - proto.RegisterType((*MsgMigrateSharesToFullRangeConcentratedPositionResponse)(nil), "osmosis.gamm.poolmodels.balancer.v1beta1.MsgMigrateSharesToFullRangeConcentratedPositionResponse") -} - -func init() { - proto.RegisterFile("osmosis/gamm/pool-models/balancer/tx/tx.proto", fileDescriptor_0647ee155de97433) -} - -var fileDescriptor_0647ee155de97433 = []byte{ - // 792 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0x4d, 0x6f, 0xe3, 0x44, - 0x18, 0x8e, 0x9b, 0x2a, 0xcb, 0x4e, 0x60, 0xd9, 0x58, 0x0b, 0x0a, 0x61, 0x89, 0x83, 0x41, 0xab, - 0x80, 0xc8, 0x0c, 0x09, 0x20, 0xa4, 0xbd, 0x2c, 0xb8, 0xd5, 0xae, 0x8a, 0x14, 0x51, 0xcc, 0x72, - 0xe8, 0x5e, 0xac, 0x49, 0x3c, 0xeb, 0x1d, 0xd6, 0x9e, 0x09, 0x9e, 0x71, 0x69, 0xff, 0x02, 0xa7, - 0x5e, 0xb8, 0xf2, 0x0b, 0x38, 0xf0, 0x17, 0xb8, 0xf5, 0xd8, 0x23, 0xe2, 0x60, 0xaa, 0xf4, 0xc0, - 0x85, 0x53, 0x7e, 0x01, 0x9a, 0x0f, 0xa7, 0x2d, 0xa4, 0x40, 0x54, 0x71, 0x49, 0x3c, 0xef, 0x3c, - 0xef, 0xf3, 0xbc, 0x7e, 0xbf, 0x0c, 0x06, 0x5c, 0x64, 0x5c, 0x50, 0x81, 0x12, 0x9c, 0x65, 0x68, - 0xc6, 0x79, 0x3a, 0xc8, 0x78, 0x4c, 0x52, 0x81, 0x26, 0x38, 0xc5, 0x6c, 0x4a, 0x72, 0x24, 0x0f, - 0x90, 0x3c, 0x80, 0xb3, 0x9c, 0x4b, 0xee, 0xf6, 0x2d, 0x1c, 0x2a, 0x38, 0x54, 0x70, 0x83, 0x86, - 0x15, 0x1a, 0xee, 0x0f, 0x27, 0x44, 0xe2, 0x61, 0xe7, 0x4e, 0xc2, 0x13, 0xae, 0x9d, 0x90, 0x7a, - 0x32, 0xfe, 0x9d, 0x16, 0xce, 0x28, 0xe3, 0x48, 0xff, 0x5a, 0xd3, 0x87, 0xff, 0x1e, 0x41, 0xf5, - 0xb0, 0xcb, 0x79, 0x6a, 0xbd, 0xba, 0x53, 0xed, 0x86, 0x26, 0x58, 0x10, 0x64, 0x35, 0xd1, 0x94, - 0x53, 0x66, 0xef, 0xbd, 0x84, 0xf3, 0x24, 0x25, 0x48, 0x9f, 0x26, 0xc5, 0x53, 0x24, 0x69, 0x46, - 0x84, 0xc4, 0xd9, 0xcc, 0x00, 0xfc, 0xd3, 0x0d, 0xf0, 0xca, 0x58, 0x24, 0x5b, 0x39, 0xc1, 0x92, - 0x04, 0x17, 0x04, 0xdc, 0x77, 0x40, 0x43, 0x10, 0x16, 0x93, 0xbc, 0xed, 0xf4, 0x9c, 0xfe, 0xcd, - 0xa0, 0xb5, 0x28, 0xbd, 0x97, 0x0e, 0x71, 0x96, 0xde, 0xf7, 0x8d, 0xdd, 0x0f, 0x2d, 0xc0, 0xdd, - 0x03, 0x4d, 0x15, 0x70, 0x34, 0xc3, 0x39, 0xce, 0x44, 0x7b, 0xa3, 0xe7, 0xf4, 0x9b, 0xa3, 0x1e, - 0xbc, 0x94, 0x24, 0x1b, 0x1c, 0x54, 0xdc, 0xbb, 0x1a, 0x17, 0xbc, 0xba, 0x28, 0x3d, 0xd7, 0x30, - 0x5e, 0x70, 0xf7, 0x43, 0x30, 0x5b, 0x62, 0xdc, 0x87, 0x96, 0x1a, 0x0b, 0x41, 0xa4, 0x68, 0xd7, - 0x7b, 0xf5, 0x7e, 0x73, 0xe4, 0x5d, 0x4d, 0xfd, 0xa9, 0xc2, 0x05, 0x9b, 0xc7, 0xa5, 0x57, 0x33, - 0x3c, 0xda, 0x20, 0xdc, 0x2f, 0xc0, 0x9d, 0xa7, 0x85, 0x2c, 0x72, 0x12, 0x69, 0xba, 0x84, 0xef, - 0x93, 0x9c, 0xf1, 0xbc, 0xbd, 0xa9, 0xdf, 0xcd, 0x5b, 0x94, 0xde, 0xeb, 0x26, 0x92, 0x55, 0x28, - 0x3f, 0x74, 0x8d, 0x59, 0x29, 0x3c, 0xb2, 0xc6, 0xfb, 0xf7, 0xbe, 0xfb, 0xfd, 0xa7, 0x77, 0xdf, - 0xbc, 0x54, 0xb6, 0xa9, 0x4e, 0xe3, 0xa0, 0x2a, 0xd4, 0x40, 0xb1, 0xf8, 0xdb, 0xe0, 0x8d, 0x95, - 0x19, 0x0e, 0x89, 0x98, 0x71, 0x26, 0x88, 0xfb, 0x16, 0xb8, 0xa1, 0xe5, 0x68, 0xac, 0x53, 0xbd, - 0x19, 0x80, 0x79, 0xe9, 0x35, 0x14, 0x64, 0x67, 0x3b, 0x6c, 0xa8, 0xab, 0x9d, 0xd8, 0xff, 0x71, - 0x03, 0xa0, 0xb1, 0x48, 0xc6, 0x34, 0xc9, 0xb1, 0x24, 0x5f, 0x3e, 0xc3, 0x39, 0x11, 0x8f, 0xf9, - 0xc3, 0x22, 0x4d, 0x43, 0xcc, 0x12, 0xb2, 0xc5, 0xd9, 0x94, 0x30, 0xa9, 0xee, 0xe2, 0x5d, 0x2e, - 0xa8, 0xa4, 0x9c, 0xad, 0x53, 0xc2, 0x04, 0xb4, 0x84, 0xe6, 0x8c, 0x24, 0x8f, 0x32, 0x23, 0x62, - 0x0b, 0xf9, 0x1a, 0x34, 0x4d, 0x06, 0x55, 0x93, 0x2d, 0x93, 0xbd, 0xc5, 0x29, 0x0b, 0x7a, 0x2a, - 0xcf, 0x8b, 0xd2, 0x6b, 0x5b, 0xd2, 0xbf, 0x32, 0xf8, 0xe1, 0xcb, 0xc2, 0x46, 0x6a, 0x03, 0x77, - 0x09, 0xb8, 0x25, 0xf9, 0x73, 0xc2, 0x22, 0x5e, 0xc8, 0x28, 0xa3, 0xac, 0xaa, 0xe9, 0x3f, 0xa8, - 0xbc, 0x6d, 0x55, 0xee, 0x1a, 0x95, 0x4b, 0xee, 0x11, 0xce, 0x78, 0xc1, 0xa4, 0xf0, 0xc3, 0x17, - 0xb5, 0xfd, 0xf3, 0x42, 0x8e, 0x29, 0x13, 0xfe, 0xcf, 0x75, 0xf0, 0xf1, 0x9a, 0xe9, 0x5a, 0xd6, - 0xe3, 0x09, 0xb8, 0x61, 0x58, 0xdf, 0xb7, 0x79, 0xfb, 0x44, 0x05, 0xf0, 0x6b, 0xe9, 0xdd, 0x4b, - 0xa8, 0x7c, 0x56, 0x4c, 0xe0, 0x94, 0x67, 0xc8, 0x0e, 0x9e, 0xf9, 0x1b, 0x88, 0xf8, 0x39, 0x92, - 0x87, 0x33, 0x22, 0xe0, 0x0e, 0x93, 0x8b, 0xd2, 0xbb, 0x65, 0x42, 0xb5, 0x34, 0x7e, 0x58, 0x11, - 0x9e, 0x73, 0x0f, 0x75, 0x76, 0xaf, 0xcd, 0x3d, 0x5c, 0x72, 0x0f, 0xdd, 0x6f, 0x41, 0x2b, 0xa5, - 0xdf, 0x14, 0x34, 0xa6, 0xf2, 0x30, 0x32, 0xad, 0x18, 0xb7, 0xeb, 0x5a, 0xe5, 0xb3, 0x35, 0x54, - 0xb6, 0xc9, 0xf4, 0xbc, 0xa4, 0x7f, 0x23, 0xf4, 0xc3, 0xdb, 0x4b, 0x9b, 0xe9, 0xe9, 0xd8, 0xfd, - 0x0a, 0xdc, 0xfc, 0x9a, 0x53, 0x16, 0xa9, 0xe5, 0xa2, 0x27, 0xaa, 0x39, 0xea, 0x40, 0xb3, 0x79, - 0x60, 0xb5, 0x79, 0xe0, 0xe3, 0x6a, 0xf3, 0x04, 0x77, 0x6d, 0x3d, 0x6f, 0x1b, 0x89, 0xa5, 0xab, - 0x7f, 0xf4, 0x9b, 0xe7, 0x84, 0x2f, 0xa8, 0xb3, 0x02, 0x8f, 0xbe, 0xaf, 0x83, 0xfa, 0x58, 0x24, - 0xee, 0x0f, 0x0e, 0x70, 0x57, 0x2c, 0xa8, 0x07, 0xf0, 0xbf, 0x6e, 0x61, 0xb8, 0x72, 0xfe, 0x3a, - 0x8f, 0xae, 0x49, 0xb0, 0x6c, 0x98, 0x3f, 0x1c, 0xf0, 0xde, 0x5a, 0x83, 0xb9, 0xb7, 0x96, 0xf2, - 0x3a, 0xd4, 0x1d, 0xfc, 0xbf, 0x51, 0x57, 0xaf, 0x1b, 0xec, 0x1d, 0xcf, 0xbb, 0xce, 0xc9, 0xbc, - 0xeb, 0x9c, 0xce, 0xbb, 0xce, 0xd1, 0x59, 0xb7, 0x76, 0x72, 0xd6, 0xad, 0xfd, 0x72, 0xd6, 0xad, - 0x3d, 0x79, 0x70, 0xa1, 0xbd, 0x6c, 0x18, 0x83, 0x14, 0x4f, 0x44, 0x75, 0x40, 0xfb, 0xc3, 0x8f, - 0xd0, 0xc1, 0xd5, 0x9f, 0xb8, 0x49, 0x43, 0xb7, 0xcb, 0x07, 0x7f, 0x06, 0x00, 0x00, 0xff, 0xff, - 0x67, 0xfc, 0xcb, 0xc9, 0x90, 0x07, 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 { - CreateBalancerPool(ctx context.Context, in *MsgCreateBalancerPool, opts ...grpc.CallOption) (*MsgCreateBalancerPoolResponse, error) - MigrateSharesToFullRangeConcentratedPosition(ctx context.Context, in *MsgMigrateSharesToFullRangeConcentratedPosition, opts ...grpc.CallOption) (*MsgMigrateSharesToFullRangeConcentratedPositionResponse, error) -} - -type msgClient struct { - cc grpc1.ClientConn -} - -func NewMsgClient(cc grpc1.ClientConn) MsgClient { - return &msgClient{cc} -} - -func (c *msgClient) CreateBalancerPool(ctx context.Context, in *MsgCreateBalancerPool, opts ...grpc.CallOption) (*MsgCreateBalancerPoolResponse, error) { - out := new(MsgCreateBalancerPoolResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.poolmodels.balancer.v1beta1.Msg/CreateBalancerPool", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) MigrateSharesToFullRangeConcentratedPosition(ctx context.Context, in *MsgMigrateSharesToFullRangeConcentratedPosition, opts ...grpc.CallOption) (*MsgMigrateSharesToFullRangeConcentratedPositionResponse, error) { - out := new(MsgMigrateSharesToFullRangeConcentratedPositionResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.poolmodels.balancer.v1beta1.Msg/MigrateSharesToFullRangeConcentratedPosition", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// MsgServer is the server API for Msg service. -type MsgServer interface { - CreateBalancerPool(context.Context, *MsgCreateBalancerPool) (*MsgCreateBalancerPoolResponse, error) - MigrateSharesToFullRangeConcentratedPosition(context.Context, *MsgMigrateSharesToFullRangeConcentratedPosition) (*MsgMigrateSharesToFullRangeConcentratedPositionResponse, error) -} - -// UnimplementedMsgServer can be embedded to have forward compatible implementations. -type UnimplementedMsgServer struct { -} - -func (*UnimplementedMsgServer) CreateBalancerPool(ctx context.Context, req *MsgCreateBalancerPool) (*MsgCreateBalancerPoolResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateBalancerPool not implemented") -} -func (*UnimplementedMsgServer) MigrateSharesToFullRangeConcentratedPosition(ctx context.Context, req *MsgMigrateSharesToFullRangeConcentratedPosition) (*MsgMigrateSharesToFullRangeConcentratedPositionResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method MigrateSharesToFullRangeConcentratedPosition not implemented") -} - -func RegisterMsgServer(s grpc1.Server, srv MsgServer) { - s.RegisterService(&_Msg_serviceDesc, srv) -} - -func _Msg_CreateBalancerPool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgCreateBalancerPool) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).CreateBalancerPool(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.poolmodels.balancer.v1beta1.Msg/CreateBalancerPool", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).CreateBalancerPool(ctx, req.(*MsgCreateBalancerPool)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_MigrateSharesToFullRangeConcentratedPosition_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgMigrateSharesToFullRangeConcentratedPosition) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).MigrateSharesToFullRangeConcentratedPosition(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.poolmodels.balancer.v1beta1.Msg/MigrateSharesToFullRangeConcentratedPosition", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).MigrateSharesToFullRangeConcentratedPosition(ctx, req.(*MsgMigrateSharesToFullRangeConcentratedPosition)) - } - return interceptor(ctx, in, info, handler) -} - -var _Msg_serviceDesc = grpc.ServiceDesc{ - ServiceName: "osmosis.gamm.poolmodels.balancer.v1beta1.Msg", - HandlerType: (*MsgServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "CreateBalancerPool", - Handler: _Msg_CreateBalancerPool_Handler, - }, - { - MethodName: "MigrateSharesToFullRangeConcentratedPosition", - Handler: _Msg_MigrateSharesToFullRangeConcentratedPosition_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "osmosis/gamm/pool-models/balancer/tx/tx.proto", -} - -func (m *MsgCreateBalancerPool) 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 *MsgCreateBalancerPool) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgCreateBalancerPool) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.FuturePoolGovernor) > 0 { - i -= len(m.FuturePoolGovernor) - copy(dAtA[i:], m.FuturePoolGovernor) - i = encodeVarintTx(dAtA, i, uint64(len(m.FuturePoolGovernor))) - i-- - dAtA[i] = 0x22 - } - if len(m.PoolAssets) > 0 { - for iNdEx := len(m.PoolAssets) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.PoolAssets[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - } - if m.PoolParams != nil { - { - size, err := m.PoolParams.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - 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] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgCreateBalancerPoolResponse) 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 *MsgCreateBalancerPoolResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgCreateBalancerPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.PoolID != 0 { - i = encodeVarintTx(dAtA, i, uint64(m.PoolID)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *MsgMigrateSharesToFullRangeConcentratedPosition) 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 *MsgMigrateSharesToFullRangeConcentratedPosition) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgMigrateSharesToFullRangeConcentratedPosition) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TokenOutMins) > 0 { - for iNdEx := len(m.TokenOutMins) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.TokenOutMins[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - } - { - size, err := m.SharesToMigrate.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - 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] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) 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 *MsgMigrateSharesToFullRangeConcentratedPositionResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - n3, err3 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.JoinTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.JoinTime):]) - if err3 != nil { - return 0, err3 - } - i -= n3 - i = encodeVarintTx(dAtA, i, uint64(n3)) - i-- - dAtA[i] = 0x22 - { - size := m.LiquidityCreated.Size() - i -= size - if _, err := m.LiquidityCreated.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - { - size := m.Amount1.Size() - i -= size - if _, err := m.Amount1.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - { - size := m.Amount0.Size() - i -= size - if _, err := m.Amount0.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - 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 *MsgCreateBalancerPool) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - if m.PoolParams != nil { - l = m.PoolParams.Size() - n += 1 + l + sovTx(uint64(l)) - } - if len(m.PoolAssets) > 0 { - for _, e := range m.PoolAssets { - l = e.Size() - n += 1 + l + sovTx(uint64(l)) - } - } - l = len(m.FuturePoolGovernor) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - return n -} - -func (m *MsgCreateBalancerPoolResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PoolID != 0 { - n += 1 + sovTx(uint64(m.PoolID)) - } - return n -} - -func (m *MsgMigrateSharesToFullRangeConcentratedPosition) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - l = m.SharesToMigrate.Size() - n += 1 + l + sovTx(uint64(l)) - if len(m.TokenOutMins) > 0 { - for _, e := range m.TokenOutMins { - l = e.Size() - n += 1 + l + sovTx(uint64(l)) - } - } - return n -} - -func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Amount0.Size() - n += 1 + l + sovTx(uint64(l)) - l = m.Amount1.Size() - n += 1 + l + sovTx(uint64(l)) - l = m.LiquidityCreated.Size() - n += 1 + l + sovTx(uint64(l)) - l = github_com_gogo_protobuf_types.SizeOfStdTime(m.JoinTime) - n += 1 + l + sovTx(uint64(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 *MsgCreateBalancerPool) 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: MsgCreateBalancerPool: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgCreateBalancerPool: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - 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 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolParams", 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.PoolParams == nil { - m.PoolParams = &PoolParams{} - } - if err := m.PoolParams.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolAssets", 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 - } - m.PoolAssets = append(m.PoolAssets, PoolAsset{}) - if err := m.PoolAssets[len(m.PoolAssets)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FuturePoolGovernor", 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.FuturePoolGovernor = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgCreateBalancerPoolResponse) 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: MsgCreateBalancerPoolResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgCreateBalancerPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolID", wireType) - } - m.PoolID = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolID |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgMigrateSharesToFullRangeConcentratedPosition) 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: MsgMigrateSharesToFullRangeConcentratedPosition: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgMigrateSharesToFullRangeConcentratedPosition: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - 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 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SharesToMigrate", 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.SharesToMigrate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOutMins", 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 - } - m.TokenOutMins = append(m.TokenOutMins, types.Coin{}) - if err := m.TokenOutMins[len(m.TokenOutMins)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgMigrateSharesToFullRangeConcentratedPositionResponse) 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: MsgMigrateSharesToFullRangeConcentratedPositionResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgMigrateSharesToFullRangeConcentratedPositionResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Amount0", 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 - } - if err := m.Amount0.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Amount1", 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 - } - if err := m.Amount1.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LiquidityCreated", 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 - } - if err := m.LiquidityCreated.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field JoinTime", 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 := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.JoinTime, dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (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/tests/interchaintest/osmosistypes/gamm/types/codec.go b/tests/interchaintest/osmosistypes/gamm/types/codec.go deleted file mode 100644 index 4ae7aa23..00000000 --- a/tests/interchaintest/osmosistypes/gamm/types/codec.go +++ /dev/null @@ -1,35 +0,0 @@ -package types - -import ( - "github.com/cosmos/cosmos-sdk/codec" - types "github.com/cosmos/cosmos-sdk/codec/types" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/msgservice" -) - -func RegisterInterfaces(registry types.InterfaceRegistry) { - registry.RegisterImplementations( - (*sdk.Msg)(nil), - &MsgJoinPool{}, - &MsgExitPool{}, - &MsgSwapExactAmountIn{}, - &MsgSwapExactAmountOut{}, - &MsgJoinSwapExternAmountIn{}, - &MsgJoinSwapShareAmountOut{}, - &MsgExitSwapExternAmountOut{}, - &MsgExitSwapShareAmountIn{}, - ) - msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) -} - -var ( - amino = codec.NewLegacyAmino() - - // ModuleCdc references the global x/bank module codec. Note, the codec should - // ONLY be used in certain instances of tests and for JSON encoding as Amino is - // still used for that purpose. - // - // The actual codec used for serialization should be provided to x/staking and - // defined at the application level. - ModuleCdc = codec.NewAminoCodec(amino) -) diff --git a/tests/interchaintest/osmosistypes/gamm/types/genesis.pb.go b/tests/interchaintest/osmosistypes/gamm/types/genesis.pb.go deleted file mode 100644 index dac734da..00000000 --- a/tests/interchaintest/osmosistypes/gamm/types/genesis.pb.go +++ /dev/null @@ -1,1093 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: osmosis/gamm/v1beta1/genesis.proto - -package types - -import ( - fmt "fmt" - _ "github.com/cosmos/cosmos-proto" - types1 "github.com/cosmos/cosmos-sdk/codec/types" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - 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 - -// Params holds parameters for the incentives module -type Params struct { - PoolCreationFee github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=pool_creation_fee,json=poolCreationFee,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"pool_creation_fee" yaml:"pool_creation_fee"` -} - -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_5a324eb7f1dd793e, []int{0} -} -func (m *Params) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Params.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 *Params) XXX_Merge(src proto.Message) { - xxx_messageInfo_Params.Merge(m, src) -} -func (m *Params) XXX_Size() int { - return m.Size() -} -func (m *Params) XXX_DiscardUnknown() { - xxx_messageInfo_Params.DiscardUnknown(m) -} - -var xxx_messageInfo_Params proto.InternalMessageInfo - -func (m *Params) GetPoolCreationFee() github_com_cosmos_cosmos_sdk_types.Coins { - if m != nil { - return m.PoolCreationFee - } - return nil -} - -// GenesisState defines the gamm module's genesis state. -type GenesisState struct { - Pools []*types1.Any `protobuf:"bytes,1,rep,name=pools,proto3" json:"pools,omitempty"` - // will be renamed to next_pool_id in an upcoming version - NextPoolNumber uint64 `protobuf:"varint,2,opt,name=next_pool_number,json=nextPoolNumber,proto3" json:"next_pool_number,omitempty"` - Params Params `protobuf:"bytes,3,opt,name=params,proto3" json:"params"` - MigrationRecords *MigrationRecords `protobuf:"bytes,4,opt,name=migration_records,json=migrationRecords,proto3" json:"migration_records,omitempty"` -} - -func (m *GenesisState) Reset() { *m = GenesisState{} } -func (m *GenesisState) String() string { return proto.CompactTextString(m) } -func (*GenesisState) ProtoMessage() {} -func (*GenesisState) Descriptor() ([]byte, []int) { - return fileDescriptor_5a324eb7f1dd793e, []int{1} -} -func (m *GenesisState) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GenesisState.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 *GenesisState) XXX_Merge(src proto.Message) { - xxx_messageInfo_GenesisState.Merge(m, src) -} -func (m *GenesisState) XXX_Size() int { - return m.Size() -} -func (m *GenesisState) XXX_DiscardUnknown() { - xxx_messageInfo_GenesisState.DiscardUnknown(m) -} - -var xxx_messageInfo_GenesisState proto.InternalMessageInfo - -func (m *GenesisState) GetPools() []*types1.Any { - if m != nil { - return m.Pools - } - return nil -} - -func (m *GenesisState) GetNextPoolNumber() uint64 { - if m != nil { - return m.NextPoolNumber - } - return 0 -} - -func (m *GenesisState) GetParams() Params { - if m != nil { - return m.Params - } - return Params{} -} - -func (m *GenesisState) GetMigrationRecords() *MigrationRecords { - if m != nil { - return m.MigrationRecords - } - return nil -} - -// MigrationRecords contains all the links between balancer and concentrated -// pools -type MigrationRecords struct { - BalancerToConcentratedPoolLinks []BalancerToConcentratedPoolLink `protobuf:"bytes,1,rep,name=balancer_to_concentrated_pool_links,json=balancerToConcentratedPoolLinks,proto3" json:"balancer_to_concentrated_pool_links"` -} - -func (m *MigrationRecords) Reset() { *m = MigrationRecords{} } -func (m *MigrationRecords) String() string { return proto.CompactTextString(m) } -func (*MigrationRecords) ProtoMessage() {} -func (*MigrationRecords) Descriptor() ([]byte, []int) { - return fileDescriptor_5a324eb7f1dd793e, []int{2} -} -func (m *MigrationRecords) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MigrationRecords) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MigrationRecords.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 *MigrationRecords) XXX_Merge(src proto.Message) { - xxx_messageInfo_MigrationRecords.Merge(m, src) -} -func (m *MigrationRecords) XXX_Size() int { - return m.Size() -} -func (m *MigrationRecords) XXX_DiscardUnknown() { - xxx_messageInfo_MigrationRecords.DiscardUnknown(m) -} - -var xxx_messageInfo_MigrationRecords proto.InternalMessageInfo - -func (m *MigrationRecords) GetBalancerToConcentratedPoolLinks() []BalancerToConcentratedPoolLink { - if m != nil { - return m.BalancerToConcentratedPoolLinks - } - return nil -} - -// BalancerToConcentratedPoolLink defines a single link between a single -// balancer pool and a single concentrated liquidity pool. This link is used to -// allow a balancer pool to migrate to a single canonical full range -// concentrated liquidity pool position -// A balancer pool can be linked to a maximum of one cl pool, and a cl pool can -// be linked to a maximum of one balancer pool. -type BalancerToConcentratedPoolLink struct { - BalancerPoolId uint64 `protobuf:"varint,1,opt,name=balancer_pool_id,json=balancerPoolId,proto3" json:"balancer_pool_id,omitempty"` - ClPoolId uint64 `protobuf:"varint,2,opt,name=cl_pool_id,json=clPoolId,proto3" json:"cl_pool_id,omitempty"` -} - -func (m *BalancerToConcentratedPoolLink) Reset() { *m = BalancerToConcentratedPoolLink{} } -func (m *BalancerToConcentratedPoolLink) String() string { return proto.CompactTextString(m) } -func (*BalancerToConcentratedPoolLink) ProtoMessage() {} -func (*BalancerToConcentratedPoolLink) Descriptor() ([]byte, []int) { - return fileDescriptor_5a324eb7f1dd793e, []int{3} -} -func (m *BalancerToConcentratedPoolLink) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *BalancerToConcentratedPoolLink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_BalancerToConcentratedPoolLink.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 *BalancerToConcentratedPoolLink) XXX_Merge(src proto.Message) { - xxx_messageInfo_BalancerToConcentratedPoolLink.Merge(m, src) -} -func (m *BalancerToConcentratedPoolLink) XXX_Size() int { - return m.Size() -} -func (m *BalancerToConcentratedPoolLink) XXX_DiscardUnknown() { - xxx_messageInfo_BalancerToConcentratedPoolLink.DiscardUnknown(m) -} - -var xxx_messageInfo_BalancerToConcentratedPoolLink proto.InternalMessageInfo - -func (m *BalancerToConcentratedPoolLink) GetBalancerPoolId() uint64 { - if m != nil { - return m.BalancerPoolId - } - return 0 -} - -func (m *BalancerToConcentratedPoolLink) GetClPoolId() uint64 { - if m != nil { - return m.ClPoolId - } - return 0 -} - -func init() { - proto.RegisterType((*Params)(nil), "osmosis.gamm.v1beta1.Params") - proto.RegisterType((*GenesisState)(nil), "osmosis.gamm.v1beta1.GenesisState") - proto.RegisterType((*MigrationRecords)(nil), "osmosis.gamm.v1beta1.MigrationRecords") - proto.RegisterType((*BalancerToConcentratedPoolLink)(nil), "osmosis.gamm.v1beta1.BalancerToConcentratedPoolLink") -} - -func init() { - proto.RegisterFile("osmosis/gamm/v1beta1/genesis.proto", fileDescriptor_5a324eb7f1dd793e) -} - -var fileDescriptor_5a324eb7f1dd793e = []byte{ - // 536 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x93, 0x3f, 0x6f, 0xd3, 0x4e, - 0x18, 0xc7, 0x73, 0x6d, 0x1a, 0xfd, 0x7e, 0x57, 0x04, 0xa9, 0x95, 0xc1, 0xad, 0x2a, 0x27, 0x32, - 0x12, 0xca, 0x92, 0x33, 0x29, 0x74, 0xc9, 0x46, 0x22, 0x81, 0x40, 0x05, 0x55, 0x2e, 0x13, 0x8b, - 0x75, 0x76, 0xae, 0xc6, 0x8a, 0x7d, 0x4f, 0xe4, 0xbb, 0x54, 0xcd, 0xc6, 0xc8, 0x88, 0xc4, 0x0c, - 0x62, 0x66, 0xe6, 0x45, 0x54, 0x4c, 0x1d, 0x99, 0x0a, 0x4a, 0x16, 0x66, 0x5e, 0x01, 0xba, 0x3f, - 0x8e, 0xaa, 0x12, 0x75, 0xb2, 0x9f, 0xe7, 0xf9, 0x3c, 0x5f, 0x3f, 0xcf, 0xf7, 0xce, 0xd8, 0x07, - 0x51, 0x80, 0xc8, 0x44, 0x90, 0xd2, 0xa2, 0x08, 0xce, 0xfa, 0x31, 0x93, 0xb4, 0x1f, 0xa4, 0x8c, - 0x33, 0x91, 0x09, 0x32, 0x2d, 0x41, 0x82, 0xd3, 0xb2, 0x0c, 0x51, 0x0c, 0xb1, 0xcc, 0x5e, 0x2b, - 0x85, 0x14, 0x34, 0x10, 0xa8, 0x37, 0xc3, 0xee, 0xed, 0xa6, 0x00, 0x69, 0xce, 0x02, 0x1d, 0xc5, - 0xb3, 0xd3, 0x80, 0xf2, 0x79, 0x55, 0x4a, 0xb4, 0x4e, 0x64, 0x7a, 0x4c, 0x60, 0x4b, 0x9e, 0x89, - 0x82, 0x98, 0x0a, 0xb6, 0x1a, 0x22, 0x81, 0x8c, 0x9b, 0xba, 0xff, 0x19, 0xe1, 0xc6, 0x31, 0x2d, - 0x69, 0x21, 0x9c, 0x8f, 0x08, 0xef, 0x4c, 0x01, 0xf2, 0x28, 0x29, 0x19, 0x95, 0x19, 0xf0, 0xe8, - 0x94, 0x31, 0x17, 0x75, 0x36, 0xbb, 0xdb, 0x07, 0xbb, 0xc4, 0xaa, 0x2a, 0x9d, 0x6a, 0x50, 0x32, - 0x82, 0x8c, 0x0f, 0x8f, 0x2e, 0xae, 0xda, 0xb5, 0x3f, 0x57, 0x6d, 0x77, 0x4e, 0x8b, 0x7c, 0xe0, - 0xff, 0xa3, 0xe0, 0x7f, 0xfd, 0xd9, 0xee, 0xa6, 0x99, 0x7c, 0x3b, 0x8b, 0x49, 0x02, 0x85, 0x1d, - 0xcf, 0x3e, 0x7a, 0x62, 0x3c, 0x09, 0xe4, 0x7c, 0xca, 0x84, 0x16, 0x13, 0xe1, 0x3d, 0xd5, 0x3f, - 0xb2, 0xed, 0x4f, 0x19, 0xf3, 0xdf, 0x6d, 0xe0, 0x3b, 0xcf, 0x8c, 0x69, 0x27, 0x92, 0x4a, 0xe6, - 0x1c, 0xe2, 0x2d, 0xc5, 0x08, 0x3b, 0x59, 0x8b, 0x18, 0x5f, 0x48, 0xe5, 0x0b, 0x79, 0xc2, 0xe7, - 0xc3, 0xff, 0xbf, 0x7f, 0xeb, 0x6d, 0x1d, 0x03, 0xe4, 0xcf, 0x43, 0x43, 0x3b, 0x5d, 0xdc, 0xe4, - 0xec, 0x5c, 0x46, 0x7a, 0x3e, 0x3e, 0x2b, 0x62, 0x56, 0xba, 0x1b, 0x1d, 0xd4, 0xad, 0x87, 0x77, - 0x55, 0x5e, 0xb1, 0xaf, 0x74, 0xd6, 0x19, 0xe0, 0xc6, 0x54, 0x3b, 0xe2, 0x6e, 0x76, 0x50, 0x77, - 0xfb, 0x60, 0x9f, 0xac, 0x3b, 0x25, 0x62, 0x5c, 0x1b, 0xd6, 0xd5, 0xfa, 0xa1, 0xed, 0x70, 0x4e, - 0xf0, 0x4e, 0x91, 0xa5, 0xa5, 0x59, 0xbe, 0x64, 0x09, 0x94, 0x63, 0xe1, 0xd6, 0xb5, 0xcc, 0x83, - 0xf5, 0x32, 0x2f, 0x2b, 0x3c, 0x34, 0x74, 0xd8, 0x2c, 0x6e, 0x64, 0xfc, 0x4f, 0x08, 0x37, 0x6f, - 0x62, 0xce, 0x7b, 0x84, 0xef, 0xc7, 0x34, 0xa7, 0x3c, 0x61, 0x65, 0x24, 0x21, 0x4a, 0x80, 0x27, - 0x8c, 0xcb, 0x92, 0x4a, 0x36, 0x36, 0x4b, 0xe6, 0x19, 0x9f, 0x54, 0x2e, 0x3d, 0x5e, 0xff, 0xf1, - 0xa1, 0x15, 0x78, 0x0d, 0xa3, 0x6b, 0xed, 0xca, 0x8b, 0xa3, 0x8c, 0x4f, 0xec, 0x6e, 0xed, 0xf8, - 0x56, 0x4a, 0xf8, 0x1c, 0x7b, 0xb7, 0x0b, 0x29, 0xf3, 0x57, 0xb3, 0xea, 0xd9, 0xb2, 0xb1, 0x8b, - 0x8c, 0xf9, 0x55, 0x5e, 0x1f, 0xd6, 0xd8, 0xd9, 0xc7, 0x38, 0xc9, 0x57, 0x8c, 0x39, 0xa0, 0xff, - 0x92, 0xdc, 0x54, 0x07, 0xf5, 0xdf, 0x5f, 0xda, 0x68, 0xf8, 0xe2, 0x62, 0xe1, 0xa1, 0xcb, 0x85, - 0x87, 0x7e, 0x2d, 0x3c, 0xf4, 0x61, 0xe9, 0xd5, 0x2e, 0x97, 0x5e, 0xed, 0xc7, 0xd2, 0xab, 0xbd, - 0x79, 0x78, 0xed, 0x9e, 0xd9, 0x85, 0x7b, 0x39, 0x8d, 0x45, 0x15, 0x04, 0x67, 0xfd, 0xc3, 0xe0, - 0xdc, 0xfc, 0x91, 0xfa, 0xd6, 0xc5, 0x0d, 0x7d, 0x6d, 0x1e, 0xfd, 0x0d, 0x00, 0x00, 0xff, 0xff, - 0xe6, 0xf6, 0xdd, 0x82, 0xae, 0x03, 0x00, 0x00, -} - -func (this *BalancerToConcentratedPoolLink) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*BalancerToConcentratedPoolLink) - if !ok { - that2, ok := that.(BalancerToConcentratedPoolLink) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if this.BalancerPoolId != that1.BalancerPoolId { - return false - } - if this.ClPoolId != that1.ClPoolId { - return false - } - return true -} -func (m *Params) 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 *Params) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.PoolCreationFee) > 0 { - for iNdEx := len(m.PoolCreationFee) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.PoolCreationFee[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenesis(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *GenesisState) 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 *GenesisState) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.MigrationRecords != nil { - { - size, err := m.MigrationRecords.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenesis(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenesis(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if m.NextPoolNumber != 0 { - i = encodeVarintGenesis(dAtA, i, uint64(m.NextPoolNumber)) - i-- - dAtA[i] = 0x10 - } - if len(m.Pools) > 0 { - for iNdEx := len(m.Pools) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Pools[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenesis(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *MigrationRecords) 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 *MigrationRecords) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MigrationRecords) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.BalancerToConcentratedPoolLinks) > 0 { - for iNdEx := len(m.BalancerToConcentratedPoolLinks) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.BalancerToConcentratedPoolLinks[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenesis(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *BalancerToConcentratedPoolLink) 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 *BalancerToConcentratedPoolLink) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *BalancerToConcentratedPoolLink) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.ClPoolId != 0 { - i = encodeVarintGenesis(dAtA, i, uint64(m.ClPoolId)) - i-- - dAtA[i] = 0x10 - } - if m.BalancerPoolId != 0 { - i = encodeVarintGenesis(dAtA, i, uint64(m.BalancerPoolId)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { - offset -= sovGenesis(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *Params) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.PoolCreationFee) > 0 { - for _, e := range m.PoolCreationFee { - l = e.Size() - n += 1 + l + sovGenesis(uint64(l)) - } - } - return n -} - -func (m *GenesisState) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Pools) > 0 { - for _, e := range m.Pools { - l = e.Size() - n += 1 + l + sovGenesis(uint64(l)) - } - } - if m.NextPoolNumber != 0 { - n += 1 + sovGenesis(uint64(m.NextPoolNumber)) - } - l = m.Params.Size() - n += 1 + l + sovGenesis(uint64(l)) - if m.MigrationRecords != nil { - l = m.MigrationRecords.Size() - n += 1 + l + sovGenesis(uint64(l)) - } - return n -} - -func (m *MigrationRecords) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.BalancerToConcentratedPoolLinks) > 0 { - for _, e := range m.BalancerToConcentratedPoolLinks { - l = e.Size() - n += 1 + l + sovGenesis(uint64(l)) - } - } - return n -} - -func (m *BalancerToConcentratedPoolLink) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.BalancerPoolId != 0 { - n += 1 + sovGenesis(uint64(m.BalancerPoolId)) - } - if m.ClPoolId != 0 { - n += 1 + sovGenesis(uint64(m.ClPoolId)) - } - return n -} - -func sovGenesis(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozGenesis(x uint64) (n int) { - return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *Params) 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 ErrIntOverflowGenesis - } - 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: Params: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolCreationFee", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenesis - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PoolCreationFee = append(m.PoolCreationFee, types.Coin{}) - if err := m.PoolCreationFee[len(m.PoolCreationFee)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenesis(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenesis - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GenesisState) 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 ErrIntOverflowGenesis - } - 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: GenesisState: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pools", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenesis - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Pools = append(m.Pools, &types1.Any{}) - if err := m.Pools[len(m.Pools)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field NextPoolNumber", wireType) - } - m.NextPoolNumber = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.NextPoolNumber |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenesis - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MigrationRecords", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenesis - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MigrationRecords == nil { - m.MigrationRecords = &MigrationRecords{} - } - if err := m.MigrationRecords.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenesis(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenesis - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MigrationRecords) 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 ErrIntOverflowGenesis - } - 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: MigrationRecords: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MigrationRecords: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field BalancerToConcentratedPoolLinks", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenesis - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.BalancerToConcentratedPoolLinks = append(m.BalancerToConcentratedPoolLinks, BalancerToConcentratedPoolLink{}) - if err := m.BalancerToConcentratedPoolLinks[len(m.BalancerToConcentratedPoolLinks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenesis(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenesis - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *BalancerToConcentratedPoolLink) 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 ErrIntOverflowGenesis - } - 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: BalancerToConcentratedPoolLink: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: BalancerToConcentratedPoolLink: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field BalancerPoolId", wireType) - } - m.BalancerPoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.BalancerPoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ClPoolId", wireType) - } - m.ClPoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ClPoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipGenesis(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenesis - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipGenesis(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, ErrIntOverflowGenesis - } - 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, ErrIntOverflowGenesis - } - 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, ErrIntOverflowGenesis - } - 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, ErrInvalidLengthGenesis - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupGenesis - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthGenesis - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") -) diff --git a/tests/interchaintest/osmosistypes/gamm/types/msgs.go b/tests/interchaintest/osmosistypes/gamm/types/msgs.go deleted file mode 100644 index 8b03021c..00000000 --- a/tests/interchaintest/osmosistypes/gamm/types/msgs.go +++ /dev/null @@ -1,207 +0,0 @@ -package types - -import ( - "fmt" - "strings" - "time" - - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" -) - -// constants. -const ( - RouterKey = "gamm" - TypeMsgSwapExactAmountIn = "swap_exact_amount_in" - TypeMsgSwapExactAmountOut = "swap_exact_amount_out" - TypeMsgJoinPool = "join_pool" - TypeMsgExitPool = "exit_pool" - TypeMsgJoinSwapExternAmountIn = "join_swap_extern_amount_in" - TypeMsgJoinSwapShareAmountOut = "join_swap_share_amount_out" - TypeMsgExitSwapExternAmountOut = "exit_swap_extern_amount_out" - TypeMsgExitSwapShareAmountIn = "exit_swap_share_amount_in" -) - -func ValidateFutureGovernor(governor string) error { - // allow empty governor - if governor == "" { - return nil - } - - // validation for future owner - // "osmo1fqlr98d45v5ysqgp6h56kpujcj4cvsjnjq9nck" - _, err := sdk.AccAddressFromBech32(governor) - if err == nil { - return nil - } - - lockTimeStr := "" - splits := strings.Split(governor, ",") - if len(splits) > 2 { - return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, fmt.Sprintf("invalid future governor: %s", governor)) - } - - // token,100h - if len(splits) == 2 { - lpTokenStr := splits[0] - if sdk.ValidateDenom(lpTokenStr) != nil { - return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, fmt.Sprintf("invalid future governor: %s", governor)) - } - lockTimeStr = splits[1] - } - - // 100h - if len(splits) == 1 { - lockTimeStr = splits[0] - } - - // Note that a duration of 0 is allowed - _, err = time.ParseDuration(lockTimeStr) - if err != nil { - return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, fmt.Sprintf("invalid future governor: %s", governor)) - } - return nil -} - -var _ sdk.Msg = &MsgSwapExactAmountIn{} - -func (msg MsgSwapExactAmountIn) Route() string { return RouterKey } -func (msg MsgSwapExactAmountIn) Type() string { return TypeMsgSwapExactAmountIn } -func (msg MsgSwapExactAmountIn) ValidateBasic() error { return nil } - -func (msg MsgSwapExactAmountIn) GetSignBytes() []byte { - return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg)) -} - -func (msg MsgSwapExactAmountIn) GetSigners() []sdk.AccAddress { - sender, err := sdk.AccAddressFromBech32(msg.Sender) - if err != nil { - panic(err) - } - return []sdk.AccAddress{sender} -} - -var _ sdk.Msg = &MsgSwapExactAmountOut{} - -func (msg MsgSwapExactAmountOut) Route() string { return RouterKey } -func (msg MsgSwapExactAmountOut) Type() string { return TypeMsgSwapExactAmountOut } -func (msg MsgSwapExactAmountOut) ValidateBasic() error { return nil } - -func (msg MsgSwapExactAmountOut) GetSignBytes() []byte { - return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg)) -} - -func (msg MsgSwapExactAmountOut) GetSigners() []sdk.AccAddress { - sender, err := sdk.AccAddressFromBech32(msg.Sender) - if err != nil { - panic(err) - } - return []sdk.AccAddress{sender} -} - -var _ sdk.Msg = &MsgJoinPool{} - -func (msg MsgJoinPool) Route() string { return RouterKey } -func (msg MsgJoinPool) Type() string { return TypeMsgJoinPool } -func (msg MsgJoinPool) ValidateBasic() error { return nil } -func (msg MsgJoinPool) GetSignBytes() []byte { - return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg)) -} - -func (msg MsgJoinPool) GetSigners() []sdk.AccAddress { - sender, err := sdk.AccAddressFromBech32(msg.Sender) - if err != nil { - panic(err) - } - return []sdk.AccAddress{sender} -} - -var _ sdk.Msg = &MsgExitPool{} - -func (msg MsgExitPool) Route() string { return RouterKey } -func (msg MsgExitPool) Type() string { return TypeMsgExitPool } -func (msg MsgExitPool) ValidateBasic() error { return nil } - -func (msg MsgExitPool) GetSignBytes() []byte { - return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg)) -} - -func (msg MsgExitPool) GetSigners() []sdk.AccAddress { - sender, err := sdk.AccAddressFromBech32(msg.Sender) - if err != nil { - panic(err) - } - return []sdk.AccAddress{sender} -} - -var _ sdk.Msg = &MsgJoinSwapExternAmountIn{} - -func (msg MsgJoinSwapExternAmountIn) Route() string { return RouterKey } -func (msg MsgJoinSwapExternAmountIn) Type() string { return TypeMsgJoinSwapExternAmountIn } -func (msg MsgJoinSwapExternAmountIn) ValidateBasic() error { return nil } - -func (msg MsgJoinSwapExternAmountIn) GetSignBytes() []byte { - return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg)) -} - -func (msg MsgJoinSwapExternAmountIn) GetSigners() []sdk.AccAddress { - sender, err := sdk.AccAddressFromBech32(msg.Sender) - if err != nil { - panic(err) - } - return []sdk.AccAddress{sender} -} - -var _ sdk.Msg = &MsgJoinSwapShareAmountOut{} - -func (msg MsgJoinSwapShareAmountOut) Route() string { return RouterKey } -func (msg MsgJoinSwapShareAmountOut) Type() string { return TypeMsgJoinSwapShareAmountOut } -func (msg MsgJoinSwapShareAmountOut) ValidateBasic() error { return nil } - -func (msg MsgJoinSwapShareAmountOut) GetSignBytes() []byte { - return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg)) -} - -func (msg MsgJoinSwapShareAmountOut) GetSigners() []sdk.AccAddress { - sender, err := sdk.AccAddressFromBech32(msg.Sender) - if err != nil { - panic(err) - } - return []sdk.AccAddress{sender} -} - -var _ sdk.Msg = &MsgExitSwapExternAmountOut{} - -func (msg MsgExitSwapExternAmountOut) Route() string { return RouterKey } -func (msg MsgExitSwapExternAmountOut) Type() string { return TypeMsgExitSwapExternAmountOut } -func (msg MsgExitSwapExternAmountOut) ValidateBasic() error { return nil } - -func (msg MsgExitSwapExternAmountOut) GetSignBytes() []byte { - return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg)) -} - -func (msg MsgExitSwapExternAmountOut) GetSigners() []sdk.AccAddress { - sender, err := sdk.AccAddressFromBech32(msg.Sender) - if err != nil { - panic(err) - } - return []sdk.AccAddress{sender} -} - -var _ sdk.Msg = &MsgExitSwapShareAmountIn{} - -func (msg MsgExitSwapShareAmountIn) Route() string { return RouterKey } -func (msg MsgExitSwapShareAmountIn) Type() string { return TypeMsgExitSwapShareAmountIn } -func (msg MsgExitSwapShareAmountIn) ValidateBasic() error { return nil } - -func (msg MsgExitSwapShareAmountIn) GetSignBytes() []byte { - return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg)) -} - -func (msg MsgExitSwapShareAmountIn) GetSigners() []sdk.AccAddress { - sender, err := sdk.AccAddressFromBech32(msg.Sender) - if err != nil { - panic(err) - } - return []sdk.AccAddress{sender} -} diff --git a/tests/interchaintest/osmosistypes/gamm/types/query.pb.go b/tests/interchaintest/osmosistypes/gamm/types/query.pb.go deleted file mode 100644 index 5d5331d2..00000000 --- a/tests/interchaintest/osmosistypes/gamm/types/query.pb.go +++ /dev/null @@ -1,7126 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: osmosis/gamm/v1beta1/query.proto - -package types - -import ( - context "context" - fmt "fmt" - _ "github.com/cosmos/cosmos-proto" - types "github.com/cosmos/cosmos-sdk/codec/types" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - types1 "github.com/cosmos/cosmos-sdk/types" - query "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" - types2 "github.com/notional-labs/fee-abstraction/tests/interchaintest/osmosistypes/poolmanager/types" - _ "google.golang.org/genproto/googleapis/api/annotations" - 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 - -// =============================== Pool -// Deprecated: please use the alternative in x/poolmanager -// -// Deprecated: Do not use. -type QueryPoolRequest struct { - PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` -} - -func (m *QueryPoolRequest) Reset() { *m = QueryPoolRequest{} } -func (m *QueryPoolRequest) String() string { return proto.CompactTextString(m) } -func (*QueryPoolRequest) ProtoMessage() {} -func (*QueryPoolRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{0} -} -func (m *QueryPoolRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryPoolRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryPoolRequest.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 *QueryPoolRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPoolRequest.Merge(m, src) -} -func (m *QueryPoolRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryPoolRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPoolRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryPoolRequest proto.InternalMessageInfo - -func (m *QueryPoolRequest) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -// Deprecated: please use the alternative in x/poolmanager -// -// Deprecated: Do not use. -type QueryPoolResponse struct { - Pool *types.Any `protobuf:"bytes,1,opt,name=pool,proto3" json:"pool,omitempty"` -} - -func (m *QueryPoolResponse) Reset() { *m = QueryPoolResponse{} } -func (m *QueryPoolResponse) String() string { return proto.CompactTextString(m) } -func (*QueryPoolResponse) ProtoMessage() {} -func (*QueryPoolResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{1} -} -func (m *QueryPoolResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryPoolResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryPoolResponse.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 *QueryPoolResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPoolResponse.Merge(m, src) -} -func (m *QueryPoolResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryPoolResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPoolResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryPoolResponse proto.InternalMessageInfo - -func (m *QueryPoolResponse) GetPool() *types.Any { - if m != nil { - return m.Pool - } - return nil -} - -// =============================== Pools -type QueryPoolsRequest struct { - // pagination defines an optional pagination for the request. - Pagination *query.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (m *QueryPoolsRequest) Reset() { *m = QueryPoolsRequest{} } -func (m *QueryPoolsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryPoolsRequest) ProtoMessage() {} -func (*QueryPoolsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{2} -} -func (m *QueryPoolsRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryPoolsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryPoolsRequest.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 *QueryPoolsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPoolsRequest.Merge(m, src) -} -func (m *QueryPoolsRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryPoolsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPoolsRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryPoolsRequest proto.InternalMessageInfo - -func (m *QueryPoolsRequest) GetPagination() *query.PageRequest { - if m != nil { - return m.Pagination - } - return nil -} - -type QueryPoolsResponse struct { - Pools []*types.Any `protobuf:"bytes,1,rep,name=pools,proto3" json:"pools,omitempty"` - // pagination defines the pagination in the response. - Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (m *QueryPoolsResponse) Reset() { *m = QueryPoolsResponse{} } -func (m *QueryPoolsResponse) String() string { return proto.CompactTextString(m) } -func (*QueryPoolsResponse) ProtoMessage() {} -func (*QueryPoolsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{3} -} -func (m *QueryPoolsResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryPoolsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryPoolsResponse.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 *QueryPoolsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPoolsResponse.Merge(m, src) -} -func (m *QueryPoolsResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryPoolsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPoolsResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryPoolsResponse proto.InternalMessageInfo - -func (m *QueryPoolsResponse) GetPools() []*types.Any { - if m != nil { - return m.Pools - } - return nil -} - -func (m *QueryPoolsResponse) GetPagination() *query.PageResponse { - if m != nil { - return m.Pagination - } - return nil -} - -// =============================== NumPools -// -// Deprecated: Do not use. -type QueryNumPoolsRequest struct { -} - -func (m *QueryNumPoolsRequest) Reset() { *m = QueryNumPoolsRequest{} } -func (m *QueryNumPoolsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryNumPoolsRequest) ProtoMessage() {} -func (*QueryNumPoolsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{4} -} -func (m *QueryNumPoolsRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryNumPoolsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryNumPoolsRequest.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 *QueryNumPoolsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryNumPoolsRequest.Merge(m, src) -} -func (m *QueryNumPoolsRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryNumPoolsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryNumPoolsRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryNumPoolsRequest proto.InternalMessageInfo - -// Deprecated: Do not use. -type QueryNumPoolsResponse struct { - NumPools uint64 `protobuf:"varint,1,opt,name=num_pools,json=numPools,proto3" json:"num_pools,omitempty" yaml:"num_pools"` -} - -func (m *QueryNumPoolsResponse) Reset() { *m = QueryNumPoolsResponse{} } -func (m *QueryNumPoolsResponse) String() string { return proto.CompactTextString(m) } -func (*QueryNumPoolsResponse) ProtoMessage() {} -func (*QueryNumPoolsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{5} -} -func (m *QueryNumPoolsResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryNumPoolsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryNumPoolsResponse.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 *QueryNumPoolsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryNumPoolsResponse.Merge(m, src) -} -func (m *QueryNumPoolsResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryNumPoolsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryNumPoolsResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryNumPoolsResponse proto.InternalMessageInfo - -func (m *QueryNumPoolsResponse) GetNumPools() uint64 { - if m != nil { - return m.NumPools - } - return 0 -} - -// =============================== PoolType -type QueryPoolTypeRequest struct { - PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` -} - -func (m *QueryPoolTypeRequest) Reset() { *m = QueryPoolTypeRequest{} } -func (m *QueryPoolTypeRequest) String() string { return proto.CompactTextString(m) } -func (*QueryPoolTypeRequest) ProtoMessage() {} -func (*QueryPoolTypeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{6} -} -func (m *QueryPoolTypeRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryPoolTypeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryPoolTypeRequest.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 *QueryPoolTypeRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPoolTypeRequest.Merge(m, src) -} -func (m *QueryPoolTypeRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryPoolTypeRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPoolTypeRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryPoolTypeRequest proto.InternalMessageInfo - -func (m *QueryPoolTypeRequest) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -type QueryPoolTypeResponse struct { - PoolType string `protobuf:"bytes,1,opt,name=pool_type,json=poolType,proto3" json:"pool_type,omitempty" yaml:"pool_type"` -} - -func (m *QueryPoolTypeResponse) Reset() { *m = QueryPoolTypeResponse{} } -func (m *QueryPoolTypeResponse) String() string { return proto.CompactTextString(m) } -func (*QueryPoolTypeResponse) ProtoMessage() {} -func (*QueryPoolTypeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{7} -} -func (m *QueryPoolTypeResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryPoolTypeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryPoolTypeResponse.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 *QueryPoolTypeResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPoolTypeResponse.Merge(m, src) -} -func (m *QueryPoolTypeResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryPoolTypeResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPoolTypeResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryPoolTypeResponse proto.InternalMessageInfo - -func (m *QueryPoolTypeResponse) GetPoolType() string { - if m != nil { - return m.PoolType - } - return "" -} - -// =============================== CalcJoinPoolShares -type QueryCalcJoinPoolSharesRequest struct { - PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - TokensIn github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,2,rep,name=tokens_in,json=tokensIn,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"tokens_in"` -} - -func (m *QueryCalcJoinPoolSharesRequest) Reset() { *m = QueryCalcJoinPoolSharesRequest{} } -func (m *QueryCalcJoinPoolSharesRequest) String() string { return proto.CompactTextString(m) } -func (*QueryCalcJoinPoolSharesRequest) ProtoMessage() {} -func (*QueryCalcJoinPoolSharesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{8} -} -func (m *QueryCalcJoinPoolSharesRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryCalcJoinPoolSharesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryCalcJoinPoolSharesRequest.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 *QueryCalcJoinPoolSharesRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryCalcJoinPoolSharesRequest.Merge(m, src) -} -func (m *QueryCalcJoinPoolSharesRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryCalcJoinPoolSharesRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryCalcJoinPoolSharesRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryCalcJoinPoolSharesRequest proto.InternalMessageInfo - -func (m *QueryCalcJoinPoolSharesRequest) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -func (m *QueryCalcJoinPoolSharesRequest) GetTokensIn() github_com_cosmos_cosmos_sdk_types.Coins { - if m != nil { - return m.TokensIn - } - return nil -} - -type QueryCalcJoinPoolSharesResponse struct { - ShareOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=share_out_amount,json=shareOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_out_amount" yaml:"share_out_amount"` - TokensOut github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,2,rep,name=tokens_out,json=tokensOut,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"tokens_out"` -} - -func (m *QueryCalcJoinPoolSharesResponse) Reset() { *m = QueryCalcJoinPoolSharesResponse{} } -func (m *QueryCalcJoinPoolSharesResponse) String() string { return proto.CompactTextString(m) } -func (*QueryCalcJoinPoolSharesResponse) ProtoMessage() {} -func (*QueryCalcJoinPoolSharesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{9} -} -func (m *QueryCalcJoinPoolSharesResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryCalcJoinPoolSharesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryCalcJoinPoolSharesResponse.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 *QueryCalcJoinPoolSharesResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryCalcJoinPoolSharesResponse.Merge(m, src) -} -func (m *QueryCalcJoinPoolSharesResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryCalcJoinPoolSharesResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryCalcJoinPoolSharesResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryCalcJoinPoolSharesResponse proto.InternalMessageInfo - -func (m *QueryCalcJoinPoolSharesResponse) GetTokensOut() github_com_cosmos_cosmos_sdk_types.Coins { - if m != nil { - return m.TokensOut - } - return nil -} - -// =============================== CalcExitPoolCoinsFromShares -type QueryCalcExitPoolCoinsFromSharesRequest struct { - PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` - ShareInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,2,opt,name=share_in_amount,json=shareInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_in_amount"` -} - -func (m *QueryCalcExitPoolCoinsFromSharesRequest) Reset() { - *m = QueryCalcExitPoolCoinsFromSharesRequest{} -} -func (m *QueryCalcExitPoolCoinsFromSharesRequest) String() string { return proto.CompactTextString(m) } -func (*QueryCalcExitPoolCoinsFromSharesRequest) ProtoMessage() {} -func (*QueryCalcExitPoolCoinsFromSharesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{10} -} -func (m *QueryCalcExitPoolCoinsFromSharesRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryCalcExitPoolCoinsFromSharesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryCalcExitPoolCoinsFromSharesRequest.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 *QueryCalcExitPoolCoinsFromSharesRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryCalcExitPoolCoinsFromSharesRequest.Merge(m, src) -} -func (m *QueryCalcExitPoolCoinsFromSharesRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryCalcExitPoolCoinsFromSharesRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryCalcExitPoolCoinsFromSharesRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryCalcExitPoolCoinsFromSharesRequest proto.InternalMessageInfo - -func (m *QueryCalcExitPoolCoinsFromSharesRequest) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -type QueryCalcExitPoolCoinsFromSharesResponse struct { - TokensOut github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=tokens_out,json=tokensOut,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"tokens_out"` -} - -func (m *QueryCalcExitPoolCoinsFromSharesResponse) Reset() { - *m = QueryCalcExitPoolCoinsFromSharesResponse{} -} -func (m *QueryCalcExitPoolCoinsFromSharesResponse) String() string { return proto.CompactTextString(m) } -func (*QueryCalcExitPoolCoinsFromSharesResponse) ProtoMessage() {} -func (*QueryCalcExitPoolCoinsFromSharesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{11} -} -func (m *QueryCalcExitPoolCoinsFromSharesResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryCalcExitPoolCoinsFromSharesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryCalcExitPoolCoinsFromSharesResponse.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 *QueryCalcExitPoolCoinsFromSharesResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryCalcExitPoolCoinsFromSharesResponse.Merge(m, src) -} -func (m *QueryCalcExitPoolCoinsFromSharesResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryCalcExitPoolCoinsFromSharesResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryCalcExitPoolCoinsFromSharesResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryCalcExitPoolCoinsFromSharesResponse proto.InternalMessageInfo - -func (m *QueryCalcExitPoolCoinsFromSharesResponse) GetTokensOut() github_com_cosmos_cosmos_sdk_types.Coins { - if m != nil { - return m.TokensOut - } - return nil -} - -// =============================== PoolParams -type QueryPoolParamsRequest struct { - PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` -} - -func (m *QueryPoolParamsRequest) Reset() { *m = QueryPoolParamsRequest{} } -func (m *QueryPoolParamsRequest) String() string { return proto.CompactTextString(m) } -func (*QueryPoolParamsRequest) ProtoMessage() {} -func (*QueryPoolParamsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{12} -} -func (m *QueryPoolParamsRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryPoolParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryPoolParamsRequest.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 *QueryPoolParamsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPoolParamsRequest.Merge(m, src) -} -func (m *QueryPoolParamsRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryPoolParamsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPoolParamsRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryPoolParamsRequest proto.InternalMessageInfo - -func (m *QueryPoolParamsRequest) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -type QueryPoolParamsResponse struct { - Params *types.Any `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` -} - -func (m *QueryPoolParamsResponse) Reset() { *m = QueryPoolParamsResponse{} } -func (m *QueryPoolParamsResponse) String() string { return proto.CompactTextString(m) } -func (*QueryPoolParamsResponse) ProtoMessage() {} -func (*QueryPoolParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{13} -} -func (m *QueryPoolParamsResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryPoolParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryPoolParamsResponse.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 *QueryPoolParamsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPoolParamsResponse.Merge(m, src) -} -func (m *QueryPoolParamsResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryPoolParamsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPoolParamsResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryPoolParamsResponse proto.InternalMessageInfo - -func (m *QueryPoolParamsResponse) GetParams() *types.Any { - if m != nil { - return m.Params - } - return nil -} - -// =============================== PoolLiquidity -// Deprecated: please use the alternative in x/poolmanager -// -// Deprecated: Do not use. -type QueryTotalPoolLiquidityRequest struct { - PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` -} - -func (m *QueryTotalPoolLiquidityRequest) Reset() { *m = QueryTotalPoolLiquidityRequest{} } -func (m *QueryTotalPoolLiquidityRequest) String() string { return proto.CompactTextString(m) } -func (*QueryTotalPoolLiquidityRequest) ProtoMessage() {} -func (*QueryTotalPoolLiquidityRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{14} -} -func (m *QueryTotalPoolLiquidityRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryTotalPoolLiquidityRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryTotalPoolLiquidityRequest.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 *QueryTotalPoolLiquidityRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryTotalPoolLiquidityRequest.Merge(m, src) -} -func (m *QueryTotalPoolLiquidityRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryTotalPoolLiquidityRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryTotalPoolLiquidityRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryTotalPoolLiquidityRequest proto.InternalMessageInfo - -func (m *QueryTotalPoolLiquidityRequest) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -// Deprecated: please use the alternative in x/poolmanager -// -// Deprecated: Do not use. -type QueryTotalPoolLiquidityResponse struct { - Liquidity github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=liquidity,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"liquidity" yaml:"liquidity"` -} - -func (m *QueryTotalPoolLiquidityResponse) Reset() { *m = QueryTotalPoolLiquidityResponse{} } -func (m *QueryTotalPoolLiquidityResponse) String() string { return proto.CompactTextString(m) } -func (*QueryTotalPoolLiquidityResponse) ProtoMessage() {} -func (*QueryTotalPoolLiquidityResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{15} -} -func (m *QueryTotalPoolLiquidityResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryTotalPoolLiquidityResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryTotalPoolLiquidityResponse.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 *QueryTotalPoolLiquidityResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryTotalPoolLiquidityResponse.Merge(m, src) -} -func (m *QueryTotalPoolLiquidityResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryTotalPoolLiquidityResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryTotalPoolLiquidityResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryTotalPoolLiquidityResponse proto.InternalMessageInfo - -func (m *QueryTotalPoolLiquidityResponse) GetLiquidity() github_com_cosmos_cosmos_sdk_types.Coins { - if m != nil { - return m.Liquidity - } - return nil -} - -// =============================== TotalShares -type QueryTotalSharesRequest struct { - PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` -} - -func (m *QueryTotalSharesRequest) Reset() { *m = QueryTotalSharesRequest{} } -func (m *QueryTotalSharesRequest) String() string { return proto.CompactTextString(m) } -func (*QueryTotalSharesRequest) ProtoMessage() {} -func (*QueryTotalSharesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{16} -} -func (m *QueryTotalSharesRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryTotalSharesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryTotalSharesRequest.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 *QueryTotalSharesRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryTotalSharesRequest.Merge(m, src) -} -func (m *QueryTotalSharesRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryTotalSharesRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryTotalSharesRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryTotalSharesRequest proto.InternalMessageInfo - -func (m *QueryTotalSharesRequest) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -type QueryTotalSharesResponse struct { - TotalShares types1.Coin `protobuf:"bytes,1,opt,name=total_shares,json=totalShares,proto3" json:"total_shares" yaml:"total_shares"` -} - -func (m *QueryTotalSharesResponse) Reset() { *m = QueryTotalSharesResponse{} } -func (m *QueryTotalSharesResponse) String() string { return proto.CompactTextString(m) } -func (*QueryTotalSharesResponse) ProtoMessage() {} -func (*QueryTotalSharesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{17} -} -func (m *QueryTotalSharesResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryTotalSharesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryTotalSharesResponse.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 *QueryTotalSharesResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryTotalSharesResponse.Merge(m, src) -} -func (m *QueryTotalSharesResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryTotalSharesResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryTotalSharesResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryTotalSharesResponse proto.InternalMessageInfo - -func (m *QueryTotalSharesResponse) GetTotalShares() types1.Coin { - if m != nil { - return m.TotalShares - } - return types1.Coin{} -} - -// =============================== CalcJoinPoolNoSwapShares -type QueryCalcJoinPoolNoSwapSharesRequest struct { - PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - TokensIn github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,2,rep,name=tokens_in,json=tokensIn,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"tokens_in"` -} - -func (m *QueryCalcJoinPoolNoSwapSharesRequest) Reset() { *m = QueryCalcJoinPoolNoSwapSharesRequest{} } -func (m *QueryCalcJoinPoolNoSwapSharesRequest) String() string { return proto.CompactTextString(m) } -func (*QueryCalcJoinPoolNoSwapSharesRequest) ProtoMessage() {} -func (*QueryCalcJoinPoolNoSwapSharesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{18} -} -func (m *QueryCalcJoinPoolNoSwapSharesRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryCalcJoinPoolNoSwapSharesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryCalcJoinPoolNoSwapSharesRequest.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 *QueryCalcJoinPoolNoSwapSharesRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryCalcJoinPoolNoSwapSharesRequest.Merge(m, src) -} -func (m *QueryCalcJoinPoolNoSwapSharesRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryCalcJoinPoolNoSwapSharesRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryCalcJoinPoolNoSwapSharesRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryCalcJoinPoolNoSwapSharesRequest proto.InternalMessageInfo - -func (m *QueryCalcJoinPoolNoSwapSharesRequest) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -func (m *QueryCalcJoinPoolNoSwapSharesRequest) GetTokensIn() github_com_cosmos_cosmos_sdk_types.Coins { - if m != nil { - return m.TokensIn - } - return nil -} - -type QueryCalcJoinPoolNoSwapSharesResponse struct { - TokensOut github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=tokens_out,json=tokensOut,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"tokens_out" yaml:"tokens_out"` - SharesOut github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,2,opt,name=shares_out,json=sharesOut,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"shares_out"` -} - -func (m *QueryCalcJoinPoolNoSwapSharesResponse) Reset() { *m = QueryCalcJoinPoolNoSwapSharesResponse{} } -func (m *QueryCalcJoinPoolNoSwapSharesResponse) String() string { return proto.CompactTextString(m) } -func (*QueryCalcJoinPoolNoSwapSharesResponse) ProtoMessage() {} -func (*QueryCalcJoinPoolNoSwapSharesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{19} -} -func (m *QueryCalcJoinPoolNoSwapSharesResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryCalcJoinPoolNoSwapSharesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryCalcJoinPoolNoSwapSharesResponse.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 *QueryCalcJoinPoolNoSwapSharesResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryCalcJoinPoolNoSwapSharesResponse.Merge(m, src) -} -func (m *QueryCalcJoinPoolNoSwapSharesResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryCalcJoinPoolNoSwapSharesResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryCalcJoinPoolNoSwapSharesResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryCalcJoinPoolNoSwapSharesResponse proto.InternalMessageInfo - -func (m *QueryCalcJoinPoolNoSwapSharesResponse) GetTokensOut() github_com_cosmos_cosmos_sdk_types.Coins { - if m != nil { - return m.TokensOut - } - return nil -} - -// QuerySpotPriceRequest defines the gRPC request structure for a SpotPrice -// query. -// -// Deprecated: Do not use. -type QuerySpotPriceRequest struct { - PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - BaseAssetDenom string `protobuf:"bytes,2,opt,name=base_asset_denom,json=baseAssetDenom,proto3" json:"base_asset_denom,omitempty" yaml:"base_asset_denom"` - QuoteAssetDenom string `protobuf:"bytes,3,opt,name=quote_asset_denom,json=quoteAssetDenom,proto3" json:"quote_asset_denom,omitempty" yaml:"quote_asset_denom"` -} - -func (m *QuerySpotPriceRequest) Reset() { *m = QuerySpotPriceRequest{} } -func (m *QuerySpotPriceRequest) String() string { return proto.CompactTextString(m) } -func (*QuerySpotPriceRequest) ProtoMessage() {} -func (*QuerySpotPriceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{20} -} -func (m *QuerySpotPriceRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QuerySpotPriceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QuerySpotPriceRequest.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 *QuerySpotPriceRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QuerySpotPriceRequest.Merge(m, src) -} -func (m *QuerySpotPriceRequest) XXX_Size() int { - return m.Size() -} -func (m *QuerySpotPriceRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QuerySpotPriceRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QuerySpotPriceRequest proto.InternalMessageInfo - -func (m *QuerySpotPriceRequest) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -func (m *QuerySpotPriceRequest) GetBaseAssetDenom() string { - if m != nil { - return m.BaseAssetDenom - } - return "" -} - -func (m *QuerySpotPriceRequest) GetQuoteAssetDenom() string { - if m != nil { - return m.QuoteAssetDenom - } - return "" -} - -type QueryPoolsWithFilterRequest struct { - // String of the coins in single string seperated by comma. Ex) - // 10uatom,100uosmo - MinLiquidity string `protobuf:"bytes,1,opt,name=min_liquidity,json=minLiquidity,proto3" json:"min_liquidity,omitempty" yaml:"min_liquidity"` - PoolType string `protobuf:"bytes,2,opt,name=pool_type,json=poolType,proto3" json:"pool_type,omitempty"` - Pagination *query.PageRequest `protobuf:"bytes,3,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (m *QueryPoolsWithFilterRequest) Reset() { *m = QueryPoolsWithFilterRequest{} } -func (m *QueryPoolsWithFilterRequest) String() string { return proto.CompactTextString(m) } -func (*QueryPoolsWithFilterRequest) ProtoMessage() {} -func (*QueryPoolsWithFilterRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{21} -} -func (m *QueryPoolsWithFilterRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryPoolsWithFilterRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryPoolsWithFilterRequest.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 *QueryPoolsWithFilterRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPoolsWithFilterRequest.Merge(m, src) -} -func (m *QueryPoolsWithFilterRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryPoolsWithFilterRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPoolsWithFilterRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryPoolsWithFilterRequest proto.InternalMessageInfo - -func (m *QueryPoolsWithFilterRequest) GetMinLiquidity() string { - if m != nil { - return m.MinLiquidity - } - return "" -} - -func (m *QueryPoolsWithFilterRequest) GetPoolType() string { - if m != nil { - return m.PoolType - } - return "" -} - -func (m *QueryPoolsWithFilterRequest) GetPagination() *query.PageRequest { - if m != nil { - return m.Pagination - } - return nil -} - -type QueryPoolsWithFilterResponse struct { - Pools []*types.Any `protobuf:"bytes,1,rep,name=pools,proto3" json:"pools,omitempty"` - // pagination defines the pagination in the response. - Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` -} - -func (m *QueryPoolsWithFilterResponse) Reset() { *m = QueryPoolsWithFilterResponse{} } -func (m *QueryPoolsWithFilterResponse) String() string { return proto.CompactTextString(m) } -func (*QueryPoolsWithFilterResponse) ProtoMessage() {} -func (*QueryPoolsWithFilterResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{22} -} -func (m *QueryPoolsWithFilterResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryPoolsWithFilterResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryPoolsWithFilterResponse.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 *QueryPoolsWithFilterResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryPoolsWithFilterResponse.Merge(m, src) -} -func (m *QueryPoolsWithFilterResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryPoolsWithFilterResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryPoolsWithFilterResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryPoolsWithFilterResponse proto.InternalMessageInfo - -func (m *QueryPoolsWithFilterResponse) GetPools() []*types.Any { - if m != nil { - return m.Pools - } - return nil -} - -func (m *QueryPoolsWithFilterResponse) GetPagination() *query.PageResponse { - if m != nil { - return m.Pagination - } - return nil -} - -// QuerySpotPriceResponse defines the gRPC response structure for a SpotPrice -// query. -// -// Deprecated: Do not use. -type QuerySpotPriceResponse struct { - // String of the Dec. Ex) 10.203uatom - SpotPrice string `protobuf:"bytes,1,opt,name=spot_price,json=spotPrice,proto3" json:"spot_price,omitempty" yaml:"spot_price"` -} - -func (m *QuerySpotPriceResponse) Reset() { *m = QuerySpotPriceResponse{} } -func (m *QuerySpotPriceResponse) String() string { return proto.CompactTextString(m) } -func (*QuerySpotPriceResponse) ProtoMessage() {} -func (*QuerySpotPriceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{23} -} -func (m *QuerySpotPriceResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QuerySpotPriceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QuerySpotPriceResponse.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 *QuerySpotPriceResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QuerySpotPriceResponse.Merge(m, src) -} -func (m *QuerySpotPriceResponse) XXX_Size() int { - return m.Size() -} -func (m *QuerySpotPriceResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QuerySpotPriceResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QuerySpotPriceResponse proto.InternalMessageInfo - -func (m *QuerySpotPriceResponse) GetSpotPrice() string { - if m != nil { - return m.SpotPrice - } - return "" -} - -// =============================== EstimateSwapExactAmountIn -// -// Deprecated: Do not use. -type QuerySwapExactAmountInRequest struct { - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` - PoolId uint64 `protobuf:"varint,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - TokenIn string `protobuf:"bytes,3,opt,name=token_in,json=tokenIn,proto3" json:"token_in,omitempty" yaml:"token_in"` - Routes []types2.SwapAmountInRoute `protobuf:"bytes,4,rep,name=routes,proto3" json:"routes" yaml:"routes"` -} - -func (m *QuerySwapExactAmountInRequest) Reset() { *m = QuerySwapExactAmountInRequest{} } -func (m *QuerySwapExactAmountInRequest) String() string { return proto.CompactTextString(m) } -func (*QuerySwapExactAmountInRequest) ProtoMessage() {} -func (*QuerySwapExactAmountInRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{24} -} -func (m *QuerySwapExactAmountInRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QuerySwapExactAmountInRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QuerySwapExactAmountInRequest.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 *QuerySwapExactAmountInRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QuerySwapExactAmountInRequest.Merge(m, src) -} -func (m *QuerySwapExactAmountInRequest) XXX_Size() int { - return m.Size() -} -func (m *QuerySwapExactAmountInRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QuerySwapExactAmountInRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QuerySwapExactAmountInRequest proto.InternalMessageInfo - -func (m *QuerySwapExactAmountInRequest) GetSender() string { - if m != nil { - return m.Sender - } - return "" -} - -func (m *QuerySwapExactAmountInRequest) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -func (m *QuerySwapExactAmountInRequest) GetTokenIn() string { - if m != nil { - return m.TokenIn - } - return "" -} - -func (m *QuerySwapExactAmountInRequest) GetRoutes() []types2.SwapAmountInRoute { - if m != nil { - return m.Routes - } - return nil -} - -// Deprecated: Do not use. -type QuerySwapExactAmountInResponse struct { - TokenOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=token_out_amount,json=tokenOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_out_amount" yaml:"token_out_amount"` -} - -func (m *QuerySwapExactAmountInResponse) Reset() { *m = QuerySwapExactAmountInResponse{} } -func (m *QuerySwapExactAmountInResponse) String() string { return proto.CompactTextString(m) } -func (*QuerySwapExactAmountInResponse) ProtoMessage() {} -func (*QuerySwapExactAmountInResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{25} -} -func (m *QuerySwapExactAmountInResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QuerySwapExactAmountInResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QuerySwapExactAmountInResponse.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 *QuerySwapExactAmountInResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QuerySwapExactAmountInResponse.Merge(m, src) -} -func (m *QuerySwapExactAmountInResponse) XXX_Size() int { - return m.Size() -} -func (m *QuerySwapExactAmountInResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QuerySwapExactAmountInResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QuerySwapExactAmountInResponse proto.InternalMessageInfo - -// =============================== EstimateSwapExactAmountOut -// -// Deprecated: Do not use. -type QuerySwapExactAmountOutRequest struct { - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` - PoolId uint64 `protobuf:"varint,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - Routes []types2.SwapAmountOutRoute `protobuf:"bytes,3,rep,name=routes,proto3" json:"routes" yaml:"routes"` - TokenOut string `protobuf:"bytes,4,opt,name=token_out,json=tokenOut,proto3" json:"token_out,omitempty" yaml:"token_out"` -} - -func (m *QuerySwapExactAmountOutRequest) Reset() { *m = QuerySwapExactAmountOutRequest{} } -func (m *QuerySwapExactAmountOutRequest) String() string { return proto.CompactTextString(m) } -func (*QuerySwapExactAmountOutRequest) ProtoMessage() {} -func (*QuerySwapExactAmountOutRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{26} -} -func (m *QuerySwapExactAmountOutRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QuerySwapExactAmountOutRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QuerySwapExactAmountOutRequest.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 *QuerySwapExactAmountOutRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QuerySwapExactAmountOutRequest.Merge(m, src) -} -func (m *QuerySwapExactAmountOutRequest) XXX_Size() int { - return m.Size() -} -func (m *QuerySwapExactAmountOutRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QuerySwapExactAmountOutRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QuerySwapExactAmountOutRequest proto.InternalMessageInfo - -func (m *QuerySwapExactAmountOutRequest) GetSender() string { - if m != nil { - return m.Sender - } - return "" -} - -func (m *QuerySwapExactAmountOutRequest) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -func (m *QuerySwapExactAmountOutRequest) GetRoutes() []types2.SwapAmountOutRoute { - if m != nil { - return m.Routes - } - return nil -} - -func (m *QuerySwapExactAmountOutRequest) GetTokenOut() string { - if m != nil { - return m.TokenOut - } - return "" -} - -// Deprecated: Do not use. -type QuerySwapExactAmountOutResponse struct { - TokenInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=token_in_amount,json=tokenInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_in_amount" yaml:"token_in_amount"` -} - -func (m *QuerySwapExactAmountOutResponse) Reset() { *m = QuerySwapExactAmountOutResponse{} } -func (m *QuerySwapExactAmountOutResponse) String() string { return proto.CompactTextString(m) } -func (*QuerySwapExactAmountOutResponse) ProtoMessage() {} -func (*QuerySwapExactAmountOutResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{27} -} -func (m *QuerySwapExactAmountOutResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QuerySwapExactAmountOutResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QuerySwapExactAmountOutResponse.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 *QuerySwapExactAmountOutResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QuerySwapExactAmountOutResponse.Merge(m, src) -} -func (m *QuerySwapExactAmountOutResponse) XXX_Size() int { - return m.Size() -} -func (m *QuerySwapExactAmountOutResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QuerySwapExactAmountOutResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QuerySwapExactAmountOutResponse proto.InternalMessageInfo - -type QueryTotalLiquidityRequest struct { -} - -func (m *QueryTotalLiquidityRequest) Reset() { *m = QueryTotalLiquidityRequest{} } -func (m *QueryTotalLiquidityRequest) String() string { return proto.CompactTextString(m) } -func (*QueryTotalLiquidityRequest) ProtoMessage() {} -func (*QueryTotalLiquidityRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{28} -} -func (m *QueryTotalLiquidityRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryTotalLiquidityRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryTotalLiquidityRequest.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 *QueryTotalLiquidityRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryTotalLiquidityRequest.Merge(m, src) -} -func (m *QueryTotalLiquidityRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryTotalLiquidityRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryTotalLiquidityRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryTotalLiquidityRequest proto.InternalMessageInfo - -type QueryTotalLiquidityResponse struct { - Liquidity github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=liquidity,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"liquidity" yaml:"liquidity"` -} - -func (m *QueryTotalLiquidityResponse) Reset() { *m = QueryTotalLiquidityResponse{} } -func (m *QueryTotalLiquidityResponse) String() string { return proto.CompactTextString(m) } -func (*QueryTotalLiquidityResponse) ProtoMessage() {} -func (*QueryTotalLiquidityResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{29} -} -func (m *QueryTotalLiquidityResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryTotalLiquidityResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryTotalLiquidityResponse.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 *QueryTotalLiquidityResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryTotalLiquidityResponse.Merge(m, src) -} -func (m *QueryTotalLiquidityResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryTotalLiquidityResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryTotalLiquidityResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryTotalLiquidityResponse proto.InternalMessageInfo - -func (m *QueryTotalLiquidityResponse) GetLiquidity() github_com_cosmos_cosmos_sdk_types.Coins { - if m != nil { - return m.Liquidity - } - return nil -} - -// =============================== QueryConcentratedPoolIdLinkFromCFMM -type QueryConcentratedPoolIdLinkFromCFMMRequest struct { - CfmmPoolId uint64 `protobuf:"varint,1,opt,name=cfmm_pool_id,json=cfmmPoolId,proto3" json:"cfmm_pool_id,omitempty" yaml:"cfmm_pool_id"` -} - -func (m *QueryConcentratedPoolIdLinkFromCFMMRequest) Reset() { - *m = QueryConcentratedPoolIdLinkFromCFMMRequest{} -} -func (m *QueryConcentratedPoolIdLinkFromCFMMRequest) String() string { - return proto.CompactTextString(m) -} -func (*QueryConcentratedPoolIdLinkFromCFMMRequest) ProtoMessage() {} -func (*QueryConcentratedPoolIdLinkFromCFMMRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{30} -} -func (m *QueryConcentratedPoolIdLinkFromCFMMRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryConcentratedPoolIdLinkFromCFMMRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryConcentratedPoolIdLinkFromCFMMRequest.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 *QueryConcentratedPoolIdLinkFromCFMMRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryConcentratedPoolIdLinkFromCFMMRequest.Merge(m, src) -} -func (m *QueryConcentratedPoolIdLinkFromCFMMRequest) XXX_Size() int { - return m.Size() -} -func (m *QueryConcentratedPoolIdLinkFromCFMMRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QueryConcentratedPoolIdLinkFromCFMMRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryConcentratedPoolIdLinkFromCFMMRequest proto.InternalMessageInfo - -func (m *QueryConcentratedPoolIdLinkFromCFMMRequest) GetCfmmPoolId() uint64 { - if m != nil { - return m.CfmmPoolId - } - return 0 -} - -type QueryConcentratedPoolIdLinkFromCFMMResponse struct { - ConcentratedPoolId uint64 `protobuf:"varint,1,opt,name=concentrated_pool_id,json=concentratedPoolId,proto3" json:"concentrated_pool_id,omitempty"` -} - -func (m *QueryConcentratedPoolIdLinkFromCFMMResponse) Reset() { - *m = QueryConcentratedPoolIdLinkFromCFMMResponse{} -} -func (m *QueryConcentratedPoolIdLinkFromCFMMResponse) String() string { - return proto.CompactTextString(m) -} -func (*QueryConcentratedPoolIdLinkFromCFMMResponse) ProtoMessage() {} -func (*QueryConcentratedPoolIdLinkFromCFMMResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d9a717df9ca609ef, []int{31} -} -func (m *QueryConcentratedPoolIdLinkFromCFMMResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QueryConcentratedPoolIdLinkFromCFMMResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QueryConcentratedPoolIdLinkFromCFMMResponse.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 *QueryConcentratedPoolIdLinkFromCFMMResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryConcentratedPoolIdLinkFromCFMMResponse.Merge(m, src) -} -func (m *QueryConcentratedPoolIdLinkFromCFMMResponse) XXX_Size() int { - return m.Size() -} -func (m *QueryConcentratedPoolIdLinkFromCFMMResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QueryConcentratedPoolIdLinkFromCFMMResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryConcentratedPoolIdLinkFromCFMMResponse proto.InternalMessageInfo - -func (m *QueryConcentratedPoolIdLinkFromCFMMResponse) GetConcentratedPoolId() uint64 { - if m != nil { - return m.ConcentratedPoolId - } - return 0 -} - -func init() { - proto.RegisterType((*QueryPoolRequest)(nil), "osmosis.gamm.v1beta1.QueryPoolRequest") - proto.RegisterType((*QueryPoolResponse)(nil), "osmosis.gamm.v1beta1.QueryPoolResponse") - proto.RegisterType((*QueryPoolsRequest)(nil), "osmosis.gamm.v1beta1.QueryPoolsRequest") - proto.RegisterType((*QueryPoolsResponse)(nil), "osmosis.gamm.v1beta1.QueryPoolsResponse") - proto.RegisterType((*QueryNumPoolsRequest)(nil), "osmosis.gamm.v1beta1.QueryNumPoolsRequest") - proto.RegisterType((*QueryNumPoolsResponse)(nil), "osmosis.gamm.v1beta1.QueryNumPoolsResponse") - proto.RegisterType((*QueryPoolTypeRequest)(nil), "osmosis.gamm.v1beta1.QueryPoolTypeRequest") - proto.RegisterType((*QueryPoolTypeResponse)(nil), "osmosis.gamm.v1beta1.QueryPoolTypeResponse") - proto.RegisterType((*QueryCalcJoinPoolSharesRequest)(nil), "osmosis.gamm.v1beta1.QueryCalcJoinPoolSharesRequest") - proto.RegisterType((*QueryCalcJoinPoolSharesResponse)(nil), "osmosis.gamm.v1beta1.QueryCalcJoinPoolSharesResponse") - proto.RegisterType((*QueryCalcExitPoolCoinsFromSharesRequest)(nil), "osmosis.gamm.v1beta1.QueryCalcExitPoolCoinsFromSharesRequest") - proto.RegisterType((*QueryCalcExitPoolCoinsFromSharesResponse)(nil), "osmosis.gamm.v1beta1.QueryCalcExitPoolCoinsFromSharesResponse") - proto.RegisterType((*QueryPoolParamsRequest)(nil), "osmosis.gamm.v1beta1.QueryPoolParamsRequest") - proto.RegisterType((*QueryPoolParamsResponse)(nil), "osmosis.gamm.v1beta1.QueryPoolParamsResponse") - proto.RegisterType((*QueryTotalPoolLiquidityRequest)(nil), "osmosis.gamm.v1beta1.QueryTotalPoolLiquidityRequest") - proto.RegisterType((*QueryTotalPoolLiquidityResponse)(nil), "osmosis.gamm.v1beta1.QueryTotalPoolLiquidityResponse") - proto.RegisterType((*QueryTotalSharesRequest)(nil), "osmosis.gamm.v1beta1.QueryTotalSharesRequest") - proto.RegisterType((*QueryTotalSharesResponse)(nil), "osmosis.gamm.v1beta1.QueryTotalSharesResponse") - proto.RegisterType((*QueryCalcJoinPoolNoSwapSharesRequest)(nil), "osmosis.gamm.v1beta1.QueryCalcJoinPoolNoSwapSharesRequest") - proto.RegisterType((*QueryCalcJoinPoolNoSwapSharesResponse)(nil), "osmosis.gamm.v1beta1.QueryCalcJoinPoolNoSwapSharesResponse") - proto.RegisterType((*QuerySpotPriceRequest)(nil), "osmosis.gamm.v1beta1.QuerySpotPriceRequest") - proto.RegisterType((*QueryPoolsWithFilterRequest)(nil), "osmosis.gamm.v1beta1.QueryPoolsWithFilterRequest") - proto.RegisterType((*QueryPoolsWithFilterResponse)(nil), "osmosis.gamm.v1beta1.QueryPoolsWithFilterResponse") - proto.RegisterType((*QuerySpotPriceResponse)(nil), "osmosis.gamm.v1beta1.QuerySpotPriceResponse") - proto.RegisterType((*QuerySwapExactAmountInRequest)(nil), "osmosis.gamm.v1beta1.QuerySwapExactAmountInRequest") - proto.RegisterType((*QuerySwapExactAmountInResponse)(nil), "osmosis.gamm.v1beta1.QuerySwapExactAmountInResponse") - proto.RegisterType((*QuerySwapExactAmountOutRequest)(nil), "osmosis.gamm.v1beta1.QuerySwapExactAmountOutRequest") - proto.RegisterType((*QuerySwapExactAmountOutResponse)(nil), "osmosis.gamm.v1beta1.QuerySwapExactAmountOutResponse") - proto.RegisterType((*QueryTotalLiquidityRequest)(nil), "osmosis.gamm.v1beta1.QueryTotalLiquidityRequest") - proto.RegisterType((*QueryTotalLiquidityResponse)(nil), "osmosis.gamm.v1beta1.QueryTotalLiquidityResponse") - proto.RegisterType((*QueryConcentratedPoolIdLinkFromCFMMRequest)(nil), "osmosis.gamm.v1beta1.QueryConcentratedPoolIdLinkFromCFMMRequest") - proto.RegisterType((*QueryConcentratedPoolIdLinkFromCFMMResponse)(nil), "osmosis.gamm.v1beta1.QueryConcentratedPoolIdLinkFromCFMMResponse") -} - -func init() { proto.RegisterFile("osmosis/gamm/v1beta1/query.proto", fileDescriptor_d9a717df9ca609ef) } - -var fileDescriptor_d9a717df9ca609ef = []byte{ - // 1966 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x58, 0x4d, 0x6c, 0x1c, 0x49, - 0x15, 0x4e, 0x4f, 0x1c, 0xaf, 0xfd, 0x92, 0xd8, 0x4e, 0xad, 0x93, 0x4c, 0xc6, 0xc9, 0x4c, 0x28, - 0x76, 0xe3, 0x6c, 0x62, 0xf7, 0xd8, 0x89, 0x23, 0xc0, 0x90, 0xdd, 0xd8, 0x5e, 0x3b, 0x19, 0x2b, - 0x89, 0xbd, 0x9d, 0x15, 0x08, 0x10, 0xb4, 0xda, 0xe3, 0xce, 0xb8, 0x37, 0xd3, 0x5d, 0x93, 0xe9, - 0xea, 0x8d, 0xad, 0x55, 0xb4, 0xd2, 0x9e, 0x80, 0xcb, 0x22, 0x01, 0x8b, 0x40, 0x08, 0x2e, 0x2b, - 0x84, 0xb8, 0x82, 0xc4, 0x89, 0x03, 0xe2, 0x12, 0x71, 0x8a, 0x04, 0x07, 0xc4, 0x61, 0x40, 0x09, - 0xdc, 0x38, 0xf9, 0xb2, 0x57, 0x54, 0x55, 0xaf, 0x7f, 0xe6, 0xc7, 0x3d, 0x3f, 0x4b, 0xa4, 0xdd, - 0xd3, 0x4c, 0x57, 0xbd, 0x9f, 0xef, 0xfd, 0xd4, 0xab, 0x57, 0x0f, 0xce, 0x33, 0xdf, 0x65, 0xbe, - 0xe3, 0x17, 0x2b, 0x96, 0xeb, 0x16, 0xdf, 0x9d, 0xdf, 0xb2, 0xb9, 0x35, 0x5f, 0x7c, 0x18, 0xd8, - 0xf5, 0x3d, 0xbd, 0x56, 0x67, 0x9c, 0x91, 0x49, 0xa4, 0xd0, 0x05, 0x85, 0x8e, 0x14, 0xb9, 0xc9, - 0x0a, 0xab, 0x30, 0x49, 0x50, 0x14, 0xff, 0x14, 0x6d, 0xee, 0x5c, 0x47, 0x69, 0x7c, 0x17, 0xb7, - 0x67, 0xc2, 0xed, 0x1a, 0x63, 0x55, 0xd7, 0xf2, 0xac, 0x8a, 0x5d, 0x8f, 0xa8, 0xfc, 0x47, 0x56, - 0xcd, 0xac, 0xb3, 0x80, 0xdb, 0x48, 0x9d, 0x2f, 0x4b, 0xf2, 0xe2, 0x96, 0xe5, 0xdb, 0x11, 0x55, - 0x99, 0x39, 0x1e, 0xee, 0x5f, 0x4a, 0xee, 0x4b, 0xc4, 0x11, 0x55, 0xcd, 0xaa, 0x38, 0x9e, 0xc5, - 0x1d, 0x16, 0xd2, 0x9e, 0xad, 0x30, 0x56, 0xa9, 0xda, 0x45, 0xab, 0xe6, 0x14, 0x2d, 0xcf, 0x63, - 0x5c, 0x6e, 0xfa, 0xb8, 0x7b, 0x06, 0x77, 0xe5, 0xd7, 0x56, 0x70, 0xbf, 0x68, 0x79, 0x7b, 0xe1, - 0x96, 0x52, 0x62, 0x2a, 0x53, 0xd5, 0x87, 0xda, 0xa2, 0x2b, 0x30, 0xf1, 0x96, 0xd0, 0xba, 0xc9, - 0x58, 0xd5, 0xb0, 0x1f, 0x06, 0xb6, 0xcf, 0xc9, 0x65, 0x78, 0x49, 0xd8, 0x66, 0x3a, 0xdb, 0x59, - 0xed, 0xbc, 0x76, 0x71, 0x68, 0x99, 0xec, 0x37, 0x0a, 0x63, 0x7b, 0x96, 0x5b, 0x5d, 0xa4, 0xb8, - 0x41, 0x8d, 0x61, 0xf1, 0xaf, 0xb4, 0xbd, 0x98, 0xc9, 0x6a, 0xf4, 0x36, 0x9c, 0x48, 0x08, 0xf1, - 0x6b, 0xcc, 0xf3, 0x6d, 0x72, 0x15, 0x86, 0x04, 0x89, 0x14, 0x71, 0xf4, 0xca, 0xa4, 0xae, 0xe0, - 0xe9, 0x21, 0x3c, 0x7d, 0xc9, 0xdb, 0x5b, 0x1e, 0xfd, 0xcb, 0xef, 0x67, 0x8f, 0x08, 0xae, 0x92, - 0x21, 0x89, 0xa5, 0xb4, 0x6f, 0x27, 0xa4, 0xf9, 0x21, 0xa6, 0x35, 0x80, 0xd8, 0x1f, 0xd9, 0x8c, - 0x94, 0x79, 0x41, 0x47, 0x53, 0x84, 0xf3, 0x74, 0x15, 0x6e, 0x74, 0x9e, 0xbe, 0x69, 0x55, 0x6c, - 0xe4, 0x35, 0x12, 0x9c, 0xf4, 0xc7, 0x1a, 0x90, 0xa4, 0x74, 0x04, 0x7b, 0x0d, 0x8e, 0x08, 0xfd, - 0x7e, 0x56, 0x3b, 0x7f, 0xb8, 0x17, 0xb4, 0x8a, 0x9a, 0xdc, 0xec, 0x80, 0x6a, 0xba, 0x2b, 0x2a, - 0xa5, 0xb3, 0x09, 0x56, 0x0e, 0x26, 0x25, 0xaa, 0xbb, 0x81, 0x9b, 0x34, 0x5b, 0xfa, 0xe3, 0x2e, - 0x9c, 0x6c, 0xd9, 0x43, 0xd0, 0xf3, 0x30, 0xea, 0x05, 0xae, 0x19, 0x02, 0x17, 0x91, 0x9a, 0xdc, - 0x6f, 0x14, 0x26, 0x54, 0xa4, 0xa2, 0x2d, 0x6a, 0x8c, 0x78, 0xc8, 0x2a, 0xe5, 0xad, 0xa0, 0x2e, - 0xb1, 0xf2, 0xf6, 0x5e, 0xcd, 0x1e, 0x24, 0xec, 0x74, 0x1d, 0x41, 0xc5, 0x42, 0x62, 0x50, 0x92, - 0x98, 0xef, 0xd5, 0x6c, 0x29, 0x67, 0x34, 0x09, 0x2a, 0xda, 0xa2, 0xc6, 0x48, 0x0d, 0x59, 0xe9, - 0x1f, 0x34, 0xc8, 0x4b, 0x61, 0x2b, 0x56, 0xb5, 0xbc, 0xce, 0x1c, 0x4f, 0x08, 0xbd, 0xb7, 0x63, - 0xd5, 0x6d, 0x7f, 0x10, 0x6c, 0x64, 0x07, 0x46, 0x39, 0x7b, 0x60, 0x7b, 0xbe, 0xe9, 0x88, 0xa0, - 0x88, 0x80, 0x9e, 0x69, 0x0a, 0x4a, 0x18, 0x8e, 0x15, 0xe6, 0x78, 0xcb, 0x73, 0x4f, 0x1a, 0x85, - 0x43, 0xbf, 0xfd, 0x67, 0xe1, 0x62, 0xc5, 0xe1, 0x3b, 0xc1, 0x96, 0x5e, 0x66, 0x2e, 0x1e, 0x11, - 0xfc, 0x99, 0xf5, 0xb7, 0x1f, 0x14, 0x05, 0x66, 0x5f, 0x32, 0xf8, 0xc6, 0x88, 0x92, 0x5e, 0xf2, - 0xe8, 0x07, 0x19, 0x28, 0x1c, 0x88, 0x1c, 0x1d, 0xe2, 0xc3, 0x84, 0x2f, 0x56, 0x4c, 0x16, 0x70, - 0xd3, 0x72, 0x59, 0xe0, 0x71, 0xf4, 0x4b, 0x49, 0x68, 0xfe, 0x47, 0xa3, 0x70, 0xa1, 0x07, 0xcd, - 0x25, 0x8f, 0xef, 0x37, 0x0a, 0xa7, 0x95, 0xc5, 0xad, 0xf2, 0xa8, 0x31, 0x26, 0x97, 0x36, 0x02, - 0xbe, 0x24, 0x17, 0xc8, 0x3b, 0x00, 0xe8, 0x02, 0x16, 0xf0, 0x17, 0xe1, 0x03, 0xf4, 0xf0, 0x46, - 0xc0, 0xe9, 0xcf, 0x35, 0x98, 0x8e, 0x9c, 0xb0, 0xba, 0xeb, 0x70, 0xe1, 0x04, 0x49, 0xb5, 0x56, - 0x67, 0x6e, 0x73, 0x1c, 0x4f, 0xb7, 0xc4, 0x31, 0x8a, 0xd9, 0xd7, 0x61, 0x5c, 0x59, 0xe5, 0x78, - 0xa1, 0x93, 0x32, 0xd2, 0x49, 0x7a, 0x7f, 0x4e, 0x32, 0x8e, 0x4b, 0x31, 0x25, 0x4f, 0x39, 0x82, - 0x7e, 0xa4, 0xc1, 0xc5, 0xee, 0xe0, 0x30, 0x54, 0xcd, 0x5e, 0xd3, 0x5e, 0xa8, 0xd7, 0x56, 0xe1, - 0x54, 0x74, 0x80, 0x36, 0xad, 0xba, 0xe5, 0x0e, 0x94, 0xeb, 0xf4, 0x26, 0x9c, 0x6e, 0x13, 0x83, - 0xd6, 0xcc, 0xc0, 0x70, 0x4d, 0xae, 0xa4, 0x95, 0x60, 0x03, 0x69, 0xe8, 0x5b, 0x78, 0x06, 0xdf, - 0x66, 0xdc, 0xaa, 0x0a, 0x69, 0xb7, 0x9d, 0x87, 0x81, 0xb3, 0xed, 0xf0, 0xbd, 0x81, 0xaf, 0x85, - 0x8f, 0x35, 0x3c, 0x1d, 0x9d, 0x64, 0x22, 0xc8, 0xc7, 0x30, 0x5a, 0x0d, 0x17, 0xbb, 0x7b, 0xfc, - 0x4d, 0xe1, 0xf1, 0xb8, 0x9a, 0x44, 0x9c, 0xb4, 0xbf, 0x28, 0x44, 0x7c, 0x12, 0xe6, 0x1a, 0xba, - 0x50, 0xa2, 0x1c, 0xbc, 0xec, 0xd0, 0x00, 0xb2, 0xed, 0x72, 0xd0, 0xcc, 0x6f, 0xc2, 0x31, 0x2e, - 0x96, 0x4d, 0x99, 0x9d, 0x61, 0x44, 0x52, 0x2c, 0x9d, 0x42, 0x4b, 0x5f, 0x56, 0xca, 0x92, 0xcc, - 0xd4, 0x38, 0xca, 0x63, 0x15, 0xf4, 0x8f, 0x1a, 0xbc, 0xd2, 0x56, 0x83, 0xee, 0xb2, 0x7b, 0x8f, - 0xac, 0xda, 0xe7, 0xa2, 0x86, 0x7e, 0xa2, 0xc1, 0xab, 0x5d, 0xf0, 0xa3, 0x13, 0xdf, 0xef, 0xef, - 0x78, 0xae, 0xa2, 0x0b, 0x4f, 0x84, 0x2e, 0x0c, 0x59, 0xe9, 0x80, 0x67, 0x96, 0xdc, 0x01, 0x50, - 0x21, 0xc0, 0xaa, 0x3a, 0x48, 0x7d, 0x1a, 0x55, 0x12, 0x44, 0x09, 0xf8, 0xaf, 0x86, 0x97, 0xe8, - 0xbd, 0x1a, 0xe3, 0x9b, 0x75, 0xa7, 0x3c, 0xd0, 0x55, 0x4c, 0x56, 0x61, 0x42, 0x18, 0x6f, 0x5a, - 0xbe, 0x6f, 0x73, 0x73, 0xdb, 0xf6, 0x98, 0x8b, 0xd8, 0xa6, 0xe2, 0x2b, 0xa3, 0x95, 0x82, 0x1a, - 0x63, 0x62, 0x69, 0x49, 0xac, 0xbc, 0x29, 0x16, 0xc8, 0x2d, 0x38, 0xf1, 0x30, 0x60, 0xbc, 0x59, - 0xce, 0x61, 0x29, 0xe7, 0xec, 0x7e, 0xa3, 0x90, 0x55, 0x72, 0xda, 0x48, 0xa8, 0x31, 0x2e, 0xd7, - 0x62, 0x49, 0xe2, 0x50, 0xad, 0x0f, 0x8d, 0x0c, 0x4d, 0x1c, 0x31, 0x8e, 0x3e, 0x72, 0xf8, 0x8e, - 0x88, 0xe4, 0x9a, 0x6d, 0xd3, 0x3f, 0x69, 0x30, 0x15, 0xb7, 0x5e, 0xdf, 0x70, 0xf8, 0xce, 0x9a, - 0x53, 0xe5, 0x76, 0x3d, 0x34, 0xfa, 0x3a, 0x1c, 0x77, 0x1d, 0xcf, 0x4c, 0x96, 0x03, 0xa1, 0x3c, - 0xbb, 0xdf, 0x28, 0x4c, 0x2a, 0xe5, 0x4d, 0xdb, 0xd4, 0x38, 0xe6, 0x3a, 0x5e, 0x54, 0x51, 0xc8, - 0x54, 0xb2, 0xf1, 0x90, 0xf6, 0xc7, 0x2d, 0x46, 0x4b, 0xfb, 0x78, 0x78, 0xe0, 0xf6, 0xf1, 0x97, - 0x1a, 0x9c, 0xed, 0x6c, 0xc3, 0x67, 0xa4, 0x91, 0x34, 0xf0, 0x5a, 0x49, 0xa4, 0x14, 0x22, 0x5b, - 0x00, 0xf0, 0x6b, 0x8c, 0x9b, 0x35, 0xb1, 0x8a, 0xbe, 0x3d, 0x19, 0x1f, 0x8f, 0x78, 0x8f, 0x1a, - 0xa3, 0x7e, 0xc8, 0x2d, 0x0b, 0xe4, 0x0f, 0x32, 0x70, 0x4e, 0x09, 0x7d, 0x64, 0xd5, 0x56, 0x77, - 0xad, 0x32, 0x76, 0x19, 0x25, 0x2f, 0x0c, 0xdd, 0x6b, 0x30, 0xec, 0xdb, 0xde, 0xb6, 0x5d, 0x47, - 0xb9, 0x27, 0xf6, 0x1b, 0x85, 0xe3, 0x28, 0x57, 0xae, 0x53, 0x03, 0x09, 0x92, 0xa9, 0x9d, 0xe9, - 0x9a, 0xda, 0x3a, 0xa8, 0x3a, 0x21, 0x8a, 0x90, 0x4a, 0xc5, 0x97, 0xf7, 0x1b, 0x85, 0xf1, 0xc4, - 0x81, 0x36, 0x1d, 0x8f, 0x1a, 0x2f, 0xc9, 0xbf, 0x25, 0x8f, 0x7c, 0x07, 0x86, 0xe5, 0xe3, 0xcb, - 0xcf, 0x0e, 0x49, 0xf7, 0xeb, 0x7a, 0xf8, 0xee, 0x4b, 0x3c, 0xd6, 0x22, 0x27, 0x0a, 0x73, 0x22, - 0x4b, 0x04, 0xdb, 0xf2, 0x49, 0x2c, 0x19, 0x88, 0x5d, 0xc9, 0xa2, 0x06, 0x0a, 0x95, 0xce, 0xf8, - 0x59, 0xd8, 0xac, 0x76, 0x70, 0x46, 0xdc, 0xf1, 0x29, 0x6c, 0xff, 0xbf, 0x8e, 0xaf, 0x55, 0x1e, - 0x35, 0xc6, 0xe4, 0x52, 0xd4, 0xf1, 0x49, 0x6c, 0x1f, 0x66, 0x3a, 0x63, 0xdb, 0x08, 0xf8, 0x8b, - 0x8e, 0xd4, 0x77, 0x23, 0xcf, 0x1f, 0x96, 0x9e, 0x2f, 0xf6, 0xe8, 0x79, 0x01, 0xad, 0x07, 0xd7, - 0x8b, 0x67, 0x45, 0xe4, 0x83, 0xec, 0x50, 0xeb, 0xb3, 0x22, 0xda, 0xa2, 0x78, 0xb1, 0x6c, 0x04, - 0xca, 0x23, 0x3f, 0x0d, 0x5b, 0x90, 0x4e, 0x1e, 0xc1, 0x70, 0xd5, 0x60, 0x3c, 0x4c, 0xa5, 0xe6, - 0x68, 0xdd, 0xea, 0x3b, 0x5a, 0xa7, 0x9a, 0x33, 0x33, 0x0a, 0xd6, 0x71, 0x4c, 0xd0, 0x44, 0xac, - 0xce, 0x42, 0x2e, 0xee, 0x16, 0x5a, 0x7b, 0x2d, 0xfa, 0x8b, 0xb0, 0x56, 0xb6, 0x6e, 0x7f, 0x26, - 0xda, 0x26, 0x5a, 0x81, 0x4b, 0xea, 0xca, 0x66, 0x5e, 0xd9, 0xf6, 0x78, 0xdd, 0xe2, 0xf6, 0xb6, - 0xac, 0x67, 0xdb, 0xb7, 0x1d, 0xef, 0x81, 0xe8, 0xac, 0x57, 0xd6, 0xee, 0xdc, 0x09, 0x73, 0xee, - 0x2b, 0x70, 0xac, 0x7c, 0xdf, 0x55, 0xaf, 0xd1, 0xf8, 0x4a, 0x3b, 0x1d, 0x77, 0x37, 0xc9, 0x5d, - 0x6a, 0x80, 0xf8, 0x54, 0xd2, 0xa8, 0x09, 0x97, 0x7b, 0x52, 0x84, 0x6e, 0x99, 0x83, 0xc9, 0x72, - 0x82, 0xb2, 0x59, 0xa3, 0x41, 0xca, 0x6d, 0x52, 0xae, 0xfc, 0xee, 0x14, 0x1c, 0x91, 0x1a, 0xc8, - 0xfb, 0x20, 0x4b, 0xb2, 0x4f, 0xa6, 0xf5, 0x4e, 0xc3, 0x22, 0xbd, 0x6d, 0x26, 0x91, 0xbb, 0xd8, - 0x9d, 0x50, 0xe1, 0xa2, 0x5f, 0xfc, 0xe0, 0xaf, 0xff, 0xfe, 0x51, 0xe6, 0x1c, 0x99, 0x2a, 0x76, - 0x9c, 0x2d, 0xa9, 0x3b, 0xe0, 0x43, 0x0d, 0x46, 0xc2, 0x37, 0x3e, 0xb9, 0x94, 0x22, 0xbb, 0x65, - 0x48, 0x90, 0xbb, 0xdc, 0x13, 0x2d, 0x42, 0xb9, 0x24, 0xa1, 0x7c, 0x81, 0x14, 0x3a, 0x43, 0x89, - 0xa6, 0x06, 0xdf, 0xcb, 0x68, 0xe4, 0x63, 0x0d, 0xc6, 0x9a, 0x13, 0x90, 0xcc, 0xa5, 0xe8, 0xea, - 0x98, 0xca, 0xb9, 0xf9, 0x3e, 0x38, 0x10, 0xe3, 0xac, 0xc4, 0x38, 0x4d, 0x5e, 0xed, 0x8c, 0x51, - 0x35, 0xc3, 0x51, 0x36, 0x92, 0x5f, 0x6b, 0x30, 0xde, 0x72, 0x1f, 0x93, 0xf9, 0x6e, 0xb1, 0x69, - 0xeb, 0x3f, 0x72, 0x57, 0xfa, 0x61, 0x41, 0xa4, 0x33, 0x12, 0xe9, 0x05, 0xf2, 0x4a, 0x67, 0xa4, - 0xf7, 0x25, 0x35, 0x26, 0xa2, 0x4f, 0xbe, 0xaf, 0xc1, 0x90, 0x90, 0x44, 0x2e, 0x74, 0x51, 0x15, - 0x42, 0x9a, 0xee, 0x4a, 0x87, 0x38, 0xe6, 0xd2, 0x3d, 0x26, 0xd5, 0x17, 0xdf, 0xc3, 0xe3, 0xf0, - 0x58, 0xc4, 0xf6, 0x23, 0x0d, 0x46, 0xc2, 0xe1, 0x4d, 0x6a, 0xb6, 0xb5, 0x8c, 0x89, 0x52, 0xb3, - 0xad, 0x75, 0x1a, 0x44, 0xe7, 0x25, 0xae, 0xcb, 0xe4, 0xb5, 0x83, 0x71, 0xc9, 0x86, 0x2d, 0xc6, - 0x46, 0x7e, 0xa2, 0x41, 0xf6, 0xa0, 0xa7, 0x00, 0x59, 0x4c, 0x51, 0xde, 0xe5, 0xfd, 0x93, 0xfb, - 0xea, 0x40, 0xbc, 0x68, 0xc8, 0x21, 0xf2, 0x67, 0x0d, 0x48, 0xfb, 0x98, 0x87, 0x2c, 0xf4, 0x28, - 0xb5, 0x19, 0xcb, 0xb5, 0x3e, 0xb9, 0x10, 0xc5, 0x0d, 0xe9, 0xce, 0x45, 0xf2, 0xe5, 0x9e, 0xc2, - 0x5c, 0x7c, 0x87, 0x39, 0x9e, 0x29, 0x47, 0xd2, 0xb6, 0xb8, 0xfa, 0x4c, 0xc7, 0x23, 0xff, 0xd1, - 0x60, 0x2a, 0x65, 0x14, 0x42, 0xae, 0x77, 0x01, 0x96, 0x3e, 0xdf, 0xc9, 0xbd, 0x3e, 0x28, 0x3b, - 0x1a, 0x78, 0x53, 0x1a, 0xb8, 0x44, 0xde, 0xe8, 0xcd, 0x40, 0x7b, 0xd7, 0xe1, 0xca, 0x40, 0x35, - 0x3c, 0x52, 0xf7, 0xad, 0xb0, 0xf3, 0x57, 0x1a, 0x40, 0x3c, 0x13, 0x21, 0x33, 0x5d, 0x92, 0xb6, - 0x69, 0x02, 0x93, 0x9b, 0xed, 0x91, 0x1a, 0x41, 0x2f, 0x48, 0xd0, 0x3a, 0x99, 0xe9, 0x0d, 0xb4, - 0x1a, 0xb8, 0x90, 0x27, 0x1a, 0x90, 0xf6, 0xc1, 0x48, 0x6a, 0x3e, 0x1d, 0x38, 0x9b, 0x49, 0xcd, - 0xa7, 0x83, 0xa7, 0x2f, 0x74, 0x55, 0x22, 0xff, 0x1a, 0x59, 0xec, 0x0d, 0xb9, 0x2a, 0xbc, 0xf2, - 0x33, 0xaa, 0xbe, 0xa2, 0x96, 0xfc, 0x46, 0x83, 0xa3, 0x89, 0xa9, 0x07, 0x99, 0xed, 0x86, 0xa6, - 0x39, 0x69, 0xf4, 0x5e, 0xc9, 0x11, 0xf5, 0xa2, 0x44, 0xbd, 0x40, 0xae, 0xf4, 0x83, 0x5a, 0x3d, - 0xbb, 0x45, 0x5e, 0x8c, 0x46, 0x6f, 0x23, 0x92, 0x56, 0xcb, 0x5a, 0x1f, 0xe5, 0xb9, 0x99, 0xde, - 0x88, 0x11, 0xe4, 0x97, 0xfa, 0x4c, 0x0a, 0xc1, 0x2c, 0x2f, 0xdd, 0xa7, 0x1a, 0x9c, 0x59, 0xf5, - 0xb9, 0xe3, 0x5a, 0xdc, 0x6e, 0x7b, 0x63, 0x90, 0xab, 0x69, 0x20, 0x0e, 0x78, 0x9e, 0xe5, 0x16, - 0xfa, 0x63, 0x42, 0x0b, 0x6e, 0x49, 0x0b, 0xde, 0x20, 0xd7, 0x3b, 0x5b, 0x90, 0x38, 0x85, 0x88, - 0xb6, 0x98, 0x28, 0x35, 0xd1, 0x49, 0x14, 0x26, 0xfd, 0x4d, 0x83, 0xdc, 0x01, 0x26, 0x6d, 0x04, - 0x9c, 0xf4, 0x01, 0x2f, 0x7e, 0xc9, 0xa4, 0xa6, 0xfc, 0xc1, 0xdd, 0x3e, 0x2d, 0x49, 0xab, 0x6e, - 0x90, 0xd7, 0x3f, 0x85, 0x55, 0x2c, 0xe0, 0xc2, 0xac, 0x4f, 0x34, 0xc8, 0xa7, 0x37, 0xa6, 0xe4, - 0x46, 0x5a, 0x3d, 0xec, 0xa5, 0x79, 0xce, 0x2d, 0x7d, 0x0a, 0x09, 0x68, 0xf2, 0xa6, 0x34, 0x79, - 0x9d, 0xdc, 0xea, 0x6c, 0x72, 0xa7, 0x8e, 0xd9, 0xac, 0x3a, 0xde, 0x03, 0xf3, 0x7e, 0x9d, 0xb9, - 0xa6, 0xe8, 0xc6, 0x8b, 0xef, 0x25, 0x5b, 0xf4, 0xc7, 0xcb, 0xeb, 0x4f, 0x9e, 0xe5, 0xb5, 0xa7, - 0xcf, 0xf2, 0xda, 0xbf, 0x9e, 0xe5, 0xb5, 0x1f, 0x3e, 0xcf, 0x1f, 0x7a, 0xfa, 0x3c, 0x7f, 0xe8, - 0xef, 0xcf, 0xf3, 0x87, 0xbe, 0x35, 0x97, 0x78, 0x4e, 0xa0, 0xb6, 0xd9, 0xaa, 0xb5, 0xe5, 0x47, - 0xaa, 0xdf, 0x9d, 0xbf, 0x56, 0xdc, 0x55, 0x00, 0xe4, 0xe3, 0x62, 0x6b, 0x58, 0x8e, 0x46, 0xae, - 0xfe, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x0b, 0xaf, 0xd8, 0xf4, 0xc5, 0x1d, 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 - -// QueryClient is the client API for Query service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type QueryClient interface { - Pools(ctx context.Context, in *QueryPoolsRequest, opts ...grpc.CallOption) (*QueryPoolsResponse, error) - // Deprecated: please use the alternative in x/poolmanager - NumPools(ctx context.Context, in *QueryNumPoolsRequest, opts ...grpc.CallOption) (*QueryNumPoolsResponse, error) - TotalLiquidity(ctx context.Context, in *QueryTotalLiquidityRequest, opts ...grpc.CallOption) (*QueryTotalLiquidityResponse, error) - // PoolsWithFilter allows you to query specific pools with requested - // parameters - PoolsWithFilter(ctx context.Context, in *QueryPoolsWithFilterRequest, opts ...grpc.CallOption) (*QueryPoolsWithFilterResponse, error) - // Deprecated: please use the alternative in x/poolmanager - Pool(ctx context.Context, in *QueryPoolRequest, opts ...grpc.CallOption) (*QueryPoolResponse, error) - // PoolType returns the type of the pool. - // Returns "Balancer" as a string literal when the pool is a balancer pool. - // Errors if the pool is failed to be type caseted. - PoolType(ctx context.Context, in *QueryPoolTypeRequest, opts ...grpc.CallOption) (*QueryPoolTypeResponse, error) - // Simulates joining pool without a swap. Returns the amount of shares you'd - // get and tokens needed to provide - CalcJoinPoolNoSwapShares(ctx context.Context, in *QueryCalcJoinPoolNoSwapSharesRequest, opts ...grpc.CallOption) (*QueryCalcJoinPoolNoSwapSharesResponse, error) - CalcJoinPoolShares(ctx context.Context, in *QueryCalcJoinPoolSharesRequest, opts ...grpc.CallOption) (*QueryCalcJoinPoolSharesResponse, error) - CalcExitPoolCoinsFromShares(ctx context.Context, in *QueryCalcExitPoolCoinsFromSharesRequest, opts ...grpc.CallOption) (*QueryCalcExitPoolCoinsFromSharesResponse, error) - PoolParams(ctx context.Context, in *QueryPoolParamsRequest, opts ...grpc.CallOption) (*QueryPoolParamsResponse, error) - // Deprecated: please use the alternative in x/poolmanager - TotalPoolLiquidity(ctx context.Context, in *QueryTotalPoolLiquidityRequest, opts ...grpc.CallOption) (*QueryTotalPoolLiquidityResponse, error) - TotalShares(ctx context.Context, in *QueryTotalSharesRequest, opts ...grpc.CallOption) (*QueryTotalSharesResponse, error) - // SpotPrice defines a gRPC query handler that returns the spot price given - // a base denomination and a quote denomination. - SpotPrice(ctx context.Context, in *QuerySpotPriceRequest, opts ...grpc.CallOption) (*QuerySpotPriceResponse, error) - // Deprecated: please use the alternative in x/poolmanager - EstimateSwapExactAmountIn(ctx context.Context, in *QuerySwapExactAmountInRequest, opts ...grpc.CallOption) (*QuerySwapExactAmountInResponse, error) - // Deprecated: please use the alternative in x/poolmanager - EstimateSwapExactAmountOut(ctx context.Context, in *QuerySwapExactAmountOutRequest, opts ...grpc.CallOption) (*QuerySwapExactAmountOutResponse, error) - // ConcentratedPoolIdLinkFromBalancer returns the pool id of the concentrated - // pool that is linked with the given CFMM pool. - ConcentratedPoolIdLinkFromCFMM(ctx context.Context, in *QueryConcentratedPoolIdLinkFromCFMMRequest, opts ...grpc.CallOption) (*QueryConcentratedPoolIdLinkFromCFMMResponse, error) -} - -type queryClient struct { - cc grpc1.ClientConn -} - -func NewQueryClient(cc grpc1.ClientConn) QueryClient { - return &queryClient{cc} -} - -func (c *queryClient) Pools(ctx context.Context, in *QueryPoolsRequest, opts ...grpc.CallOption) (*QueryPoolsResponse, error) { - out := new(QueryPoolsResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/Pools", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// Deprecated: Do not use. -func (c *queryClient) NumPools(ctx context.Context, in *QueryNumPoolsRequest, opts ...grpc.CallOption) (*QueryNumPoolsResponse, error) { - out := new(QueryNumPoolsResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/NumPools", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *queryClient) TotalLiquidity(ctx context.Context, in *QueryTotalLiquidityRequest, opts ...grpc.CallOption) (*QueryTotalLiquidityResponse, error) { - out := new(QueryTotalLiquidityResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/TotalLiquidity", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *queryClient) PoolsWithFilter(ctx context.Context, in *QueryPoolsWithFilterRequest, opts ...grpc.CallOption) (*QueryPoolsWithFilterResponse, error) { - out := new(QueryPoolsWithFilterResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/PoolsWithFilter", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// Deprecated: Do not use. -func (c *queryClient) Pool(ctx context.Context, in *QueryPoolRequest, opts ...grpc.CallOption) (*QueryPoolResponse, error) { - out := new(QueryPoolResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/Pool", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *queryClient) PoolType(ctx context.Context, in *QueryPoolTypeRequest, opts ...grpc.CallOption) (*QueryPoolTypeResponse, error) { - out := new(QueryPoolTypeResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/PoolType", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *queryClient) CalcJoinPoolNoSwapShares(ctx context.Context, in *QueryCalcJoinPoolNoSwapSharesRequest, opts ...grpc.CallOption) (*QueryCalcJoinPoolNoSwapSharesResponse, error) { - out := new(QueryCalcJoinPoolNoSwapSharesResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/CalcJoinPoolNoSwapShares", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *queryClient) CalcJoinPoolShares(ctx context.Context, in *QueryCalcJoinPoolSharesRequest, opts ...grpc.CallOption) (*QueryCalcJoinPoolSharesResponse, error) { - out := new(QueryCalcJoinPoolSharesResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/CalcJoinPoolShares", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *queryClient) CalcExitPoolCoinsFromShares(ctx context.Context, in *QueryCalcExitPoolCoinsFromSharesRequest, opts ...grpc.CallOption) (*QueryCalcExitPoolCoinsFromSharesResponse, error) { - out := new(QueryCalcExitPoolCoinsFromSharesResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/CalcExitPoolCoinsFromShares", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *queryClient) PoolParams(ctx context.Context, in *QueryPoolParamsRequest, opts ...grpc.CallOption) (*QueryPoolParamsResponse, error) { - out := new(QueryPoolParamsResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/PoolParams", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// Deprecated: Do not use. -func (c *queryClient) TotalPoolLiquidity(ctx context.Context, in *QueryTotalPoolLiquidityRequest, opts ...grpc.CallOption) (*QueryTotalPoolLiquidityResponse, error) { - out := new(QueryTotalPoolLiquidityResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/TotalPoolLiquidity", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *queryClient) TotalShares(ctx context.Context, in *QueryTotalSharesRequest, opts ...grpc.CallOption) (*QueryTotalSharesResponse, error) { - out := new(QueryTotalSharesResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/TotalShares", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// Deprecated: Do not use. -func (c *queryClient) SpotPrice(ctx context.Context, in *QuerySpotPriceRequest, opts ...grpc.CallOption) (*QuerySpotPriceResponse, error) { - out := new(QuerySpotPriceResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/SpotPrice", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// Deprecated: Do not use. -func (c *queryClient) EstimateSwapExactAmountIn(ctx context.Context, in *QuerySwapExactAmountInRequest, opts ...grpc.CallOption) (*QuerySwapExactAmountInResponse, error) { - out := new(QuerySwapExactAmountInResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/EstimateSwapExactAmountIn", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// Deprecated: Do not use. -func (c *queryClient) EstimateSwapExactAmountOut(ctx context.Context, in *QuerySwapExactAmountOutRequest, opts ...grpc.CallOption) (*QuerySwapExactAmountOutResponse, error) { - out := new(QuerySwapExactAmountOutResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/EstimateSwapExactAmountOut", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *queryClient) ConcentratedPoolIdLinkFromCFMM(ctx context.Context, in *QueryConcentratedPoolIdLinkFromCFMMRequest, opts ...grpc.CallOption) (*QueryConcentratedPoolIdLinkFromCFMMResponse, error) { - out := new(QueryConcentratedPoolIdLinkFromCFMMResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Query/ConcentratedPoolIdLinkFromCFMM", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// QueryServer is the server API for Query service. -type QueryServer interface { - Pools(context.Context, *QueryPoolsRequest) (*QueryPoolsResponse, error) - // Deprecated: please use the alternative in x/poolmanager - NumPools(context.Context, *QueryNumPoolsRequest) (*QueryNumPoolsResponse, error) - TotalLiquidity(context.Context, *QueryTotalLiquidityRequest) (*QueryTotalLiquidityResponse, error) - // PoolsWithFilter allows you to query specific pools with requested - // parameters - PoolsWithFilter(context.Context, *QueryPoolsWithFilterRequest) (*QueryPoolsWithFilterResponse, error) - // Deprecated: please use the alternative in x/poolmanager - Pool(context.Context, *QueryPoolRequest) (*QueryPoolResponse, error) - // PoolType returns the type of the pool. - // Returns "Balancer" as a string literal when the pool is a balancer pool. - // Errors if the pool is failed to be type caseted. - PoolType(context.Context, *QueryPoolTypeRequest) (*QueryPoolTypeResponse, error) - // Simulates joining pool without a swap. Returns the amount of shares you'd - // get and tokens needed to provide - CalcJoinPoolNoSwapShares(context.Context, *QueryCalcJoinPoolNoSwapSharesRequest) (*QueryCalcJoinPoolNoSwapSharesResponse, error) - CalcJoinPoolShares(context.Context, *QueryCalcJoinPoolSharesRequest) (*QueryCalcJoinPoolSharesResponse, error) - CalcExitPoolCoinsFromShares(context.Context, *QueryCalcExitPoolCoinsFromSharesRequest) (*QueryCalcExitPoolCoinsFromSharesResponse, error) - PoolParams(context.Context, *QueryPoolParamsRequest) (*QueryPoolParamsResponse, error) - // Deprecated: please use the alternative in x/poolmanager - TotalPoolLiquidity(context.Context, *QueryTotalPoolLiquidityRequest) (*QueryTotalPoolLiquidityResponse, error) - TotalShares(context.Context, *QueryTotalSharesRequest) (*QueryTotalSharesResponse, error) - // SpotPrice defines a gRPC query handler that returns the spot price given - // a base denomination and a quote denomination. - SpotPrice(context.Context, *QuerySpotPriceRequest) (*QuerySpotPriceResponse, error) - // Deprecated: please use the alternative in x/poolmanager - EstimateSwapExactAmountIn(context.Context, *QuerySwapExactAmountInRequest) (*QuerySwapExactAmountInResponse, error) - // Deprecated: please use the alternative in x/poolmanager - EstimateSwapExactAmountOut(context.Context, *QuerySwapExactAmountOutRequest) (*QuerySwapExactAmountOutResponse, error) - // ConcentratedPoolIdLinkFromBalancer returns the pool id of the concentrated - // pool that is linked with the given CFMM pool. - ConcentratedPoolIdLinkFromCFMM(context.Context, *QueryConcentratedPoolIdLinkFromCFMMRequest) (*QueryConcentratedPoolIdLinkFromCFMMResponse, error) -} - -// UnimplementedQueryServer can be embedded to have forward compatible implementations. -type UnimplementedQueryServer struct { -} - -func (*UnimplementedQueryServer) Pools(ctx context.Context, req *QueryPoolsRequest) (*QueryPoolsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Pools not implemented") -} -func (*UnimplementedQueryServer) NumPools(ctx context.Context, req *QueryNumPoolsRequest) (*QueryNumPoolsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method NumPools not implemented") -} -func (*UnimplementedQueryServer) TotalLiquidity(ctx context.Context, req *QueryTotalLiquidityRequest) (*QueryTotalLiquidityResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method TotalLiquidity not implemented") -} -func (*UnimplementedQueryServer) PoolsWithFilter(ctx context.Context, req *QueryPoolsWithFilterRequest) (*QueryPoolsWithFilterResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PoolsWithFilter not implemented") -} -func (*UnimplementedQueryServer) Pool(ctx context.Context, req *QueryPoolRequest) (*QueryPoolResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Pool not implemented") -} -func (*UnimplementedQueryServer) PoolType(ctx context.Context, req *QueryPoolTypeRequest) (*QueryPoolTypeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PoolType not implemented") -} -func (*UnimplementedQueryServer) CalcJoinPoolNoSwapShares(ctx context.Context, req *QueryCalcJoinPoolNoSwapSharesRequest) (*QueryCalcJoinPoolNoSwapSharesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CalcJoinPoolNoSwapShares not implemented") -} -func (*UnimplementedQueryServer) CalcJoinPoolShares(ctx context.Context, req *QueryCalcJoinPoolSharesRequest) (*QueryCalcJoinPoolSharesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CalcJoinPoolShares not implemented") -} -func (*UnimplementedQueryServer) CalcExitPoolCoinsFromShares(ctx context.Context, req *QueryCalcExitPoolCoinsFromSharesRequest) (*QueryCalcExitPoolCoinsFromSharesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CalcExitPoolCoinsFromShares not implemented") -} -func (*UnimplementedQueryServer) PoolParams(ctx context.Context, req *QueryPoolParamsRequest) (*QueryPoolParamsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PoolParams not implemented") -} -func (*UnimplementedQueryServer) TotalPoolLiquidity(ctx context.Context, req *QueryTotalPoolLiquidityRequest) (*QueryTotalPoolLiquidityResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method TotalPoolLiquidity not implemented") -} -func (*UnimplementedQueryServer) TotalShares(ctx context.Context, req *QueryTotalSharesRequest) (*QueryTotalSharesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method TotalShares not implemented") -} -func (*UnimplementedQueryServer) SpotPrice(ctx context.Context, req *QuerySpotPriceRequest) (*QuerySpotPriceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SpotPrice not implemented") -} -func (*UnimplementedQueryServer) EstimateSwapExactAmountIn(ctx context.Context, req *QuerySwapExactAmountInRequest) (*QuerySwapExactAmountInResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method EstimateSwapExactAmountIn not implemented") -} -func (*UnimplementedQueryServer) EstimateSwapExactAmountOut(ctx context.Context, req *QuerySwapExactAmountOutRequest) (*QuerySwapExactAmountOutResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method EstimateSwapExactAmountOut not implemented") -} -func (*UnimplementedQueryServer) ConcentratedPoolIdLinkFromCFMM(ctx context.Context, req *QueryConcentratedPoolIdLinkFromCFMMRequest) (*QueryConcentratedPoolIdLinkFromCFMMResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ConcentratedPoolIdLinkFromCFMM not implemented") -} - -func RegisterQueryServer(s grpc1.Server, srv QueryServer) { - s.RegisterService(&_Query_serviceDesc, srv) -} - -func _Query_Pools_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryPoolsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).Pools(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/Pools", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Pools(ctx, req.(*QueryPoolsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_NumPools_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryNumPoolsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).NumPools(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/NumPools", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).NumPools(ctx, req.(*QueryNumPoolsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_TotalLiquidity_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryTotalLiquidityRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).TotalLiquidity(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/TotalLiquidity", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).TotalLiquidity(ctx, req.(*QueryTotalLiquidityRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_PoolsWithFilter_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryPoolsWithFilterRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).PoolsWithFilter(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/PoolsWithFilter", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).PoolsWithFilter(ctx, req.(*QueryPoolsWithFilterRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_Pool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryPoolRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).Pool(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/Pool", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Pool(ctx, req.(*QueryPoolRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_PoolType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryPoolTypeRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).PoolType(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/PoolType", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).PoolType(ctx, req.(*QueryPoolTypeRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_CalcJoinPoolNoSwapShares_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryCalcJoinPoolNoSwapSharesRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).CalcJoinPoolNoSwapShares(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/CalcJoinPoolNoSwapShares", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).CalcJoinPoolNoSwapShares(ctx, req.(*QueryCalcJoinPoolNoSwapSharesRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_CalcJoinPoolShares_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryCalcJoinPoolSharesRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).CalcJoinPoolShares(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/CalcJoinPoolShares", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).CalcJoinPoolShares(ctx, req.(*QueryCalcJoinPoolSharesRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_CalcExitPoolCoinsFromShares_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryCalcExitPoolCoinsFromSharesRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).CalcExitPoolCoinsFromShares(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/CalcExitPoolCoinsFromShares", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).CalcExitPoolCoinsFromShares(ctx, req.(*QueryCalcExitPoolCoinsFromSharesRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_PoolParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryPoolParamsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).PoolParams(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/PoolParams", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).PoolParams(ctx, req.(*QueryPoolParamsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_TotalPoolLiquidity_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryTotalPoolLiquidityRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).TotalPoolLiquidity(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/TotalPoolLiquidity", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).TotalPoolLiquidity(ctx, req.(*QueryTotalPoolLiquidityRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_TotalShares_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryTotalSharesRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).TotalShares(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/TotalShares", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).TotalShares(ctx, req.(*QueryTotalSharesRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_SpotPrice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QuerySpotPriceRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).SpotPrice(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/SpotPrice", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).SpotPrice(ctx, req.(*QuerySpotPriceRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_EstimateSwapExactAmountIn_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QuerySwapExactAmountInRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).EstimateSwapExactAmountIn(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/EstimateSwapExactAmountIn", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).EstimateSwapExactAmountIn(ctx, req.(*QuerySwapExactAmountInRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_EstimateSwapExactAmountOut_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QuerySwapExactAmountOutRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).EstimateSwapExactAmountOut(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/EstimateSwapExactAmountOut", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).EstimateSwapExactAmountOut(ctx, req.(*QuerySwapExactAmountOutRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Query_ConcentratedPoolIdLinkFromCFMM_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryConcentratedPoolIdLinkFromCFMMRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).ConcentratedPoolIdLinkFromCFMM(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Query/ConcentratedPoolIdLinkFromCFMM", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).ConcentratedPoolIdLinkFromCFMM(ctx, req.(*QueryConcentratedPoolIdLinkFromCFMMRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "osmosis.gamm.v1beta1.Query", - HandlerType: (*QueryServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Pools", - Handler: _Query_Pools_Handler, - }, - { - MethodName: "NumPools", - Handler: _Query_NumPools_Handler, - }, - { - MethodName: "TotalLiquidity", - Handler: _Query_TotalLiquidity_Handler, - }, - { - MethodName: "PoolsWithFilter", - Handler: _Query_PoolsWithFilter_Handler, - }, - { - MethodName: "Pool", - Handler: _Query_Pool_Handler, - }, - { - MethodName: "PoolType", - Handler: _Query_PoolType_Handler, - }, - { - MethodName: "CalcJoinPoolNoSwapShares", - Handler: _Query_CalcJoinPoolNoSwapShares_Handler, - }, - { - MethodName: "CalcJoinPoolShares", - Handler: _Query_CalcJoinPoolShares_Handler, - }, - { - MethodName: "CalcExitPoolCoinsFromShares", - Handler: _Query_CalcExitPoolCoinsFromShares_Handler, - }, - { - MethodName: "PoolParams", - Handler: _Query_PoolParams_Handler, - }, - { - MethodName: "TotalPoolLiquidity", - Handler: _Query_TotalPoolLiquidity_Handler, - }, - { - MethodName: "TotalShares", - Handler: _Query_TotalShares_Handler, - }, - { - MethodName: "SpotPrice", - Handler: _Query_SpotPrice_Handler, - }, - { - MethodName: "EstimateSwapExactAmountIn", - Handler: _Query_EstimateSwapExactAmountIn_Handler, - }, - { - MethodName: "EstimateSwapExactAmountOut", - Handler: _Query_EstimateSwapExactAmountOut_Handler, - }, - { - MethodName: "ConcentratedPoolIdLinkFromCFMM", - Handler: _Query_ConcentratedPoolIdLinkFromCFMM_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "osmosis/gamm/v1beta1/query.proto", -} - -func (m *QueryPoolRequest) 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 *QueryPoolRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryPoolRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.PoolId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *QueryPoolResponse) 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 *QueryPoolResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pool != nil { - { - size, err := m.Pool.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *QueryPoolsRequest) 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 *QueryPoolsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryPoolsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - return len(dAtA) - i, nil -} - -func (m *QueryPoolsResponse) 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 *QueryPoolsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryPoolsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.Pools) > 0 { - for iNdEx := len(m.Pools) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Pools[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *QueryNumPoolsRequest) 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 *QueryNumPoolsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryNumPoolsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *QueryNumPoolsResponse) 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 *QueryNumPoolsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryNumPoolsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.NumPools != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.NumPools)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *QueryPoolTypeRequest) 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 *QueryPoolTypeRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryPoolTypeRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.PoolId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *QueryPoolTypeResponse) 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 *QueryPoolTypeResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryPoolTypeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.PoolType) > 0 { - i -= len(m.PoolType) - copy(dAtA[i:], m.PoolType) - i = encodeVarintQuery(dAtA, i, uint64(len(m.PoolType))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *QueryCalcJoinPoolSharesRequest) 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 *QueryCalcJoinPoolSharesRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryCalcJoinPoolSharesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TokensIn) > 0 { - for iNdEx := len(m.TokensIn) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.TokensIn[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - if m.PoolId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *QueryCalcJoinPoolSharesResponse) 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 *QueryCalcJoinPoolSharesResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryCalcJoinPoolSharesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TokensOut) > 0 { - for iNdEx := len(m.TokensOut) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.TokensOut[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - { - size := m.ShareOutAmount.Size() - i -= size - if _, err := m.ShareOutAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *QueryCalcExitPoolCoinsFromSharesRequest) 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 *QueryCalcExitPoolCoinsFromSharesRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryCalcExitPoolCoinsFromSharesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.ShareInAmount.Size() - i -= size - if _, err := m.ShareInAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - if m.PoolId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *QueryCalcExitPoolCoinsFromSharesResponse) 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 *QueryCalcExitPoolCoinsFromSharesResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryCalcExitPoolCoinsFromSharesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TokensOut) > 0 { - for iNdEx := len(m.TokensOut) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.TokensOut[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *QueryPoolParamsRequest) 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 *QueryPoolParamsRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryPoolParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.PoolId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *QueryPoolParamsResponse) 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 *QueryPoolParamsResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryPoolParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Params != nil { - { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *QueryTotalPoolLiquidityRequest) 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 *QueryTotalPoolLiquidityRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryTotalPoolLiquidityRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.PoolId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *QueryTotalPoolLiquidityResponse) 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 *QueryTotalPoolLiquidityResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryTotalPoolLiquidityResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Liquidity) > 0 { - for iNdEx := len(m.Liquidity) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Liquidity[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *QueryTotalSharesRequest) 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 *QueryTotalSharesRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryTotalSharesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.PoolId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *QueryTotalSharesResponse) 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 *QueryTotalSharesResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryTotalSharesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.TotalShares.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *QueryCalcJoinPoolNoSwapSharesRequest) 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 *QueryCalcJoinPoolNoSwapSharesRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryCalcJoinPoolNoSwapSharesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TokensIn) > 0 { - for iNdEx := len(m.TokensIn) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.TokensIn[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - if m.PoolId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *QueryCalcJoinPoolNoSwapSharesResponse) 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 *QueryCalcJoinPoolNoSwapSharesResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryCalcJoinPoolNoSwapSharesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.SharesOut.Size() - i -= size - if _, err := m.SharesOut.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - if len(m.TokensOut) > 0 { - for iNdEx := len(m.TokensOut) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.TokensOut[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *QuerySpotPriceRequest) 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 *QuerySpotPriceRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QuerySpotPriceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.QuoteAssetDenom) > 0 { - i -= len(m.QuoteAssetDenom) - copy(dAtA[i:], m.QuoteAssetDenom) - i = encodeVarintQuery(dAtA, i, uint64(len(m.QuoteAssetDenom))) - i-- - dAtA[i] = 0x1a - } - if len(m.BaseAssetDenom) > 0 { - i -= len(m.BaseAssetDenom) - copy(dAtA[i:], m.BaseAssetDenom) - i = encodeVarintQuery(dAtA, i, uint64(len(m.BaseAssetDenom))) - i-- - dAtA[i] = 0x12 - } - if m.PoolId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *QueryPoolsWithFilterRequest) 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 *QueryPoolsWithFilterRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryPoolsWithFilterRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if len(m.PoolType) > 0 { - i -= len(m.PoolType) - copy(dAtA[i:], m.PoolType) - i = encodeVarintQuery(dAtA, i, uint64(len(m.PoolType))) - i-- - dAtA[i] = 0x12 - } - if len(m.MinLiquidity) > 0 { - i -= len(m.MinLiquidity) - copy(dAtA[i:], m.MinLiquidity) - i = encodeVarintQuery(dAtA, i, uint64(len(m.MinLiquidity))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *QueryPoolsWithFilterResponse) 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 *QueryPoolsWithFilterResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryPoolsWithFilterResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Pagination != nil { - { - size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.Pools) > 0 { - for iNdEx := len(m.Pools) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Pools[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *QuerySpotPriceResponse) 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 *QuerySpotPriceResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QuerySpotPriceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.SpotPrice) > 0 { - i -= len(m.SpotPrice) - copy(dAtA[i:], m.SpotPrice) - i = encodeVarintQuery(dAtA, i, uint64(len(m.SpotPrice))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *QuerySwapExactAmountInRequest) 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 *QuerySwapExactAmountInRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QuerySwapExactAmountInRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Routes) > 0 { - for iNdEx := len(m.Routes) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Routes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - } - if len(m.TokenIn) > 0 { - i -= len(m.TokenIn) - copy(dAtA[i:], m.TokenIn) - i = encodeVarintQuery(dAtA, i, uint64(len(m.TokenIn))) - i-- - dAtA[i] = 0x1a - } - if m.PoolId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x10 - } - if len(m.Sender) > 0 { - i -= len(m.Sender) - copy(dAtA[i:], m.Sender) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Sender))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *QuerySwapExactAmountInResponse) 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 *QuerySwapExactAmountInResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QuerySwapExactAmountInResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.TokenOutAmount.Size() - i -= size - if _, err := m.TokenOutAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *QuerySwapExactAmountOutRequest) 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 *QuerySwapExactAmountOutRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QuerySwapExactAmountOutRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TokenOut) > 0 { - i -= len(m.TokenOut) - copy(dAtA[i:], m.TokenOut) - i = encodeVarintQuery(dAtA, i, uint64(len(m.TokenOut))) - i-- - dAtA[i] = 0x22 - } - if len(m.Routes) > 0 { - for iNdEx := len(m.Routes) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Routes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - } - if m.PoolId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x10 - } - if len(m.Sender) > 0 { - i -= len(m.Sender) - copy(dAtA[i:], m.Sender) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Sender))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *QuerySwapExactAmountOutResponse) 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 *QuerySwapExactAmountOutResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QuerySwapExactAmountOutResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.TokenInAmount.Size() - i -= size - if _, err := m.TokenInAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *QueryTotalLiquidityRequest) 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 *QueryTotalLiquidityRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryTotalLiquidityRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - -func (m *QueryTotalLiquidityResponse) 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 *QueryTotalLiquidityResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryTotalLiquidityResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Liquidity) > 0 { - for iNdEx := len(m.Liquidity) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Liquidity[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *QueryConcentratedPoolIdLinkFromCFMMRequest) 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 *QueryConcentratedPoolIdLinkFromCFMMRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryConcentratedPoolIdLinkFromCFMMRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.CfmmPoolId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.CfmmPoolId)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *QueryConcentratedPoolIdLinkFromCFMMResponse) 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 *QueryConcentratedPoolIdLinkFromCFMMResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QueryConcentratedPoolIdLinkFromCFMMResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.ConcentratedPoolId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.ConcentratedPoolId)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { - offset -= sovQuery(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *QueryPoolRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PoolId != 0 { - n += 1 + sovQuery(uint64(m.PoolId)) - } - return n -} - -func (m *QueryPoolResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Pool != nil { - l = m.Pool.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryPoolsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryPoolsResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Pools) > 0 { - for _, e := range m.Pools { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryNumPoolsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *QueryNumPoolsResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.NumPools != 0 { - n += 1 + sovQuery(uint64(m.NumPools)) - } - return n -} - -func (m *QueryPoolTypeRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PoolId != 0 { - n += 1 + sovQuery(uint64(m.PoolId)) - } - return n -} - -func (m *QueryPoolTypeResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.PoolType) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryCalcJoinPoolSharesRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PoolId != 0 { - n += 1 + sovQuery(uint64(m.PoolId)) - } - if len(m.TokensIn) > 0 { - for _, e := range m.TokensIn { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - return n -} - -func (m *QueryCalcJoinPoolSharesResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ShareOutAmount.Size() - n += 1 + l + sovQuery(uint64(l)) - if len(m.TokensOut) > 0 { - for _, e := range m.TokensOut { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - return n -} - -func (m *QueryCalcExitPoolCoinsFromSharesRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PoolId != 0 { - n += 1 + sovQuery(uint64(m.PoolId)) - } - l = m.ShareInAmount.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func (m *QueryCalcExitPoolCoinsFromSharesResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.TokensOut) > 0 { - for _, e := range m.TokensOut { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - return n -} - -func (m *QueryPoolParamsRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PoolId != 0 { - n += 1 + sovQuery(uint64(m.PoolId)) - } - return n -} - -func (m *QueryPoolParamsResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Params != nil { - l = m.Params.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryTotalPoolLiquidityRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PoolId != 0 { - n += 1 + sovQuery(uint64(m.PoolId)) - } - return n -} - -func (m *QueryTotalPoolLiquidityResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Liquidity) > 0 { - for _, e := range m.Liquidity { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - return n -} - -func (m *QueryTotalSharesRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PoolId != 0 { - n += 1 + sovQuery(uint64(m.PoolId)) - } - return n -} - -func (m *QueryTotalSharesResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.TotalShares.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func (m *QueryCalcJoinPoolNoSwapSharesRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PoolId != 0 { - n += 1 + sovQuery(uint64(m.PoolId)) - } - if len(m.TokensIn) > 0 { - for _, e := range m.TokensIn { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - return n -} - -func (m *QueryCalcJoinPoolNoSwapSharesResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.TokensOut) > 0 { - for _, e := range m.TokensOut { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - l = m.SharesOut.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func (m *QuerySpotPriceRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PoolId != 0 { - n += 1 + sovQuery(uint64(m.PoolId)) - } - l = len(m.BaseAssetDenom) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - l = len(m.QuoteAssetDenom) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryPoolsWithFilterRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.MinLiquidity) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - l = len(m.PoolType) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QueryPoolsWithFilterResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Pools) > 0 { - for _, e := range m.Pools { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - if m.Pagination != nil { - l = m.Pagination.Size() - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QuerySpotPriceResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.SpotPrice) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QuerySwapExactAmountInRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - if m.PoolId != 0 { - n += 1 + sovQuery(uint64(m.PoolId)) - } - l = len(m.TokenIn) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - if len(m.Routes) > 0 { - for _, e := range m.Routes { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - return n -} - -func (m *QuerySwapExactAmountInResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.TokenOutAmount.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func (m *QuerySwapExactAmountOutRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - if m.PoolId != 0 { - n += 1 + sovQuery(uint64(m.PoolId)) - } - if len(m.Routes) > 0 { - for _, e := range m.Routes { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - l = len(m.TokenOut) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QuerySwapExactAmountOutResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.TokenInAmount.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - -func (m *QueryTotalLiquidityRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - -func (m *QueryTotalLiquidityResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Liquidity) > 0 { - for _, e := range m.Liquidity { - l = e.Size() - n += 1 + l + sovQuery(uint64(l)) - } - } - return n -} - -func (m *QueryConcentratedPoolIdLinkFromCFMMRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.CfmmPoolId != 0 { - n += 1 + sovQuery(uint64(m.CfmmPoolId)) - } - return n -} - -func (m *QueryConcentratedPoolIdLinkFromCFMMResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.ConcentratedPoolId != 0 { - n += 1 + sovQuery(uint64(m.ConcentratedPoolId)) - } - return n -} - -func sovQuery(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozQuery(x uint64) (n int) { - return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *QueryPoolRequest) 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 ErrIntOverflowQuery - } - 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: QueryPoolRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPoolRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryPoolResponse) 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 ErrIntOverflowQuery - } - 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: QueryPoolResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pool", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Pool == nil { - m.Pool = &types.Any{} - } - if err := m.Pool.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryPoolsRequest) 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 ErrIntOverflowQuery - } - 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: QueryPoolsRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPoolsRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Pagination == nil { - m.Pagination = &query.PageRequest{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryPoolsResponse) 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 ErrIntOverflowQuery - } - 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: QueryPoolsResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPoolsResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pools", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Pools = append(m.Pools, &types.Any{}) - if err := m.Pools[len(m.Pools)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Pagination == nil { - m.Pagination = &query.PageResponse{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryNumPoolsRequest) 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 ErrIntOverflowQuery - } - 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: QueryNumPoolsRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryNumPoolsRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryNumPoolsResponse) 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 ErrIntOverflowQuery - } - 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: QueryNumPoolsResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryNumPoolsResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field NumPools", wireType) - } - m.NumPools = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.NumPools |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryPoolTypeRequest) 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 ErrIntOverflowQuery - } - 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: QueryPoolTypeRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPoolTypeRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryPoolTypeResponse) 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 ErrIntOverflowQuery - } - 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: QueryPoolTypeResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPoolTypeResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolType", 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.PoolType = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryCalcJoinPoolSharesRequest) 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 ErrIntOverflowQuery - } - 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: QueryCalcJoinPoolSharesRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryCalcJoinPoolSharesRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokensIn", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TokensIn = append(m.TokensIn, types1.Coin{}) - if err := m.TokensIn[len(m.TokensIn)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryCalcJoinPoolSharesResponse) 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 ErrIntOverflowQuery - } - 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: QueryCalcJoinPoolSharesResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryCalcJoinPoolSharesResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShareOutAmount", 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 - } - if err := m.ShareOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokensOut", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TokensOut = append(m.TokensOut, types1.Coin{}) - if err := m.TokensOut[len(m.TokensOut)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryCalcExitPoolCoinsFromSharesRequest) 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 ErrIntOverflowQuery - } - 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: QueryCalcExitPoolCoinsFromSharesRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryCalcExitPoolCoinsFromSharesRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShareInAmount", 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 - } - if err := m.ShareInAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryCalcExitPoolCoinsFromSharesResponse) 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 ErrIntOverflowQuery - } - 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: QueryCalcExitPoolCoinsFromSharesResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryCalcExitPoolCoinsFromSharesResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokensOut", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TokensOut = append(m.TokensOut, types1.Coin{}) - if err := m.TokensOut[len(m.TokensOut)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryPoolParamsRequest) 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 ErrIntOverflowQuery - } - 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: QueryPoolParamsRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPoolParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryPoolParamsResponse) 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 ErrIntOverflowQuery - } - 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: QueryPoolParamsResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPoolParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Params == nil { - m.Params = &types.Any{} - } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryTotalPoolLiquidityRequest) 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 ErrIntOverflowQuery - } - 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: QueryTotalPoolLiquidityRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryTotalPoolLiquidityRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryTotalPoolLiquidityResponse) 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 ErrIntOverflowQuery - } - 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: QueryTotalPoolLiquidityResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryTotalPoolLiquidityResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Liquidity", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Liquidity = append(m.Liquidity, types1.Coin{}) - if err := m.Liquidity[len(m.Liquidity)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryTotalSharesRequest) 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 ErrIntOverflowQuery - } - 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: QueryTotalSharesRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryTotalSharesRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryTotalSharesResponse) 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 ErrIntOverflowQuery - } - 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: QueryTotalSharesResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryTotalSharesResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TotalShares", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.TotalShares.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryCalcJoinPoolNoSwapSharesRequest) 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 ErrIntOverflowQuery - } - 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: QueryCalcJoinPoolNoSwapSharesRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryCalcJoinPoolNoSwapSharesRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokensIn", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TokensIn = append(m.TokensIn, types1.Coin{}) - if err := m.TokensIn[len(m.TokensIn)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryCalcJoinPoolNoSwapSharesResponse) 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 ErrIntOverflowQuery - } - 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: QueryCalcJoinPoolNoSwapSharesResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryCalcJoinPoolNoSwapSharesResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokensOut", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TokensOut = append(m.TokensOut, types1.Coin{}) - if err := m.TokensOut[len(m.TokensOut)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SharesOut", 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 - } - if err := m.SharesOut.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QuerySpotPriceRequest) 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 ErrIntOverflowQuery - } - 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: QuerySpotPriceRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QuerySpotPriceRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field BaseAssetDenom", 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.BaseAssetDenom = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field QuoteAssetDenom", 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.QuoteAssetDenom = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryPoolsWithFilterRequest) 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 ErrIntOverflowQuery - } - 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: QueryPoolsWithFilterRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPoolsWithFilterRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MinLiquidity", 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.MinLiquidity = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolType", 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.PoolType = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Pagination == nil { - m.Pagination = &query.PageRequest{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryPoolsWithFilterResponse) 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 ErrIntOverflowQuery - } - 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: QueryPoolsWithFilterResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryPoolsWithFilterResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pools", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Pools = append(m.Pools, &types.Any{}) - if err := m.Pools[len(m.Pools)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Pagination == nil { - m.Pagination = &query.PageResponse{} - } - if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QuerySpotPriceResponse) 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 ErrIntOverflowQuery - } - 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: QuerySpotPriceResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QuerySpotPriceResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SpotPrice", 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.SpotPrice = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QuerySwapExactAmountInRequest) 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 ErrIntOverflowQuery - } - 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: QuerySwapExactAmountInRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QuerySwapExactAmountInRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - 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 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.Sender = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", 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.TokenIn = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Routes", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Routes = append(m.Routes, types2.SwapAmountInRoute{}) - if err := m.Routes[len(m.Routes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QuerySwapExactAmountInResponse) 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 ErrIntOverflowQuery - } - 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: QuerySwapExactAmountInResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QuerySwapExactAmountInResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOutAmount", 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 - } - if err := m.TokenOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QuerySwapExactAmountOutRequest) 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 ErrIntOverflowQuery - } - 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: QuerySwapExactAmountOutRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QuerySwapExactAmountOutRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - 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 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.Sender = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Routes", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Routes = append(m.Routes, types2.SwapAmountOutRoute{}) - if err := m.Routes[len(m.Routes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOut", 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.TokenOut = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QuerySwapExactAmountOutResponse) 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 ErrIntOverflowQuery - } - 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: QuerySwapExactAmountOutResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QuerySwapExactAmountOutResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenInAmount", 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 - } - if err := m.TokenInAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryTotalLiquidityRequest) 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 ErrIntOverflowQuery - } - 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: QueryTotalLiquidityRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryTotalLiquidityRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryTotalLiquidityResponse) 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 ErrIntOverflowQuery - } - 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: QueryTotalLiquidityResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryTotalLiquidityResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Liquidity", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthQuery - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthQuery - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Liquidity = append(m.Liquidity, types1.Coin{}) - if err := m.Liquidity[len(m.Liquidity)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryConcentratedPoolIdLinkFromCFMMRequest) 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 ErrIntOverflowQuery - } - 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: QueryConcentratedPoolIdLinkFromCFMMRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryConcentratedPoolIdLinkFromCFMMRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CfmmPoolId", wireType) - } - m.CfmmPoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.CfmmPoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryConcentratedPoolIdLinkFromCFMMResponse) 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 ErrIntOverflowQuery - } - 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: QueryConcentratedPoolIdLinkFromCFMMResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryConcentratedPoolIdLinkFromCFMMResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ConcentratedPoolId", wireType) - } - m.ConcentratedPoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ConcentratedPoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipQuery(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, ErrIntOverflowQuery - } - 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, ErrIntOverflowQuery - } - 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, ErrIntOverflowQuery - } - 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, ErrInvalidLengthQuery - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupQuery - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthQuery - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") -) diff --git a/tests/interchaintest/osmosistypes/gamm/types/query.pb.gw.go b/tests/interchaintest/osmosistypes/gamm/types/query.pb.gw.go deleted file mode 100644 index 1a44c3ac..00000000 --- a/tests/interchaintest/osmosistypes/gamm/types/query.pb.gw.go +++ /dev/null @@ -1,1585 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: osmosis/gamm/v1beta1/query.proto - -/* -Package types is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ -package types - -import ( - "context" - "io" - "net/http" - - "github.com/golang/protobuf/descriptor" - "github.com/golang/protobuf/proto" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/grpc-ecosystem/grpc-gateway/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = descriptor.ForMessage -var _ = metadata.Join - -var ( - filter_Query_Pools_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_Query_Pools_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryPoolsRequest - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_Pools_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.Pools(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_Pools_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryPoolsRequest - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_Pools_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.Pools(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Query_NumPools_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryNumPoolsRequest - var metadata runtime.ServerMetadata - - msg, err := client.NumPools(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_NumPools_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryNumPoolsRequest - var metadata runtime.ServerMetadata - - msg, err := server.NumPools(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Query_TotalLiquidity_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryTotalLiquidityRequest - var metadata runtime.ServerMetadata - - msg, err := client.TotalLiquidity(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_TotalLiquidity_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryTotalLiquidityRequest - var metadata runtime.ServerMetadata - - msg, err := server.TotalLiquidity(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_Query_PoolsWithFilter_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_Query_PoolsWithFilter_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryPoolsWithFilterRequest - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_PoolsWithFilter_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.PoolsWithFilter(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_PoolsWithFilter_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryPoolsWithFilterRequest - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_PoolsWithFilter_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.PoolsWithFilter(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Query_Pool_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryPoolRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pool_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") - } - - protoReq.PoolId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) - } - - msg, err := client.Pool(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_Pool_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryPoolRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pool_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") - } - - protoReq.PoolId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) - } - - msg, err := server.Pool(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Query_PoolType_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryPoolTypeRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pool_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") - } - - protoReq.PoolId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) - } - - msg, err := client.PoolType(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_PoolType_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryPoolTypeRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pool_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") - } - - protoReq.PoolId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) - } - - msg, err := server.PoolType(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_Query_CalcJoinPoolShares_0 = &utilities.DoubleArray{Encoding: map[string]int{"pool_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) - -func request_Query_CalcJoinPoolShares_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryCalcJoinPoolSharesRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pool_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") - } - - protoReq.PoolId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_CalcJoinPoolShares_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.CalcJoinPoolShares(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_CalcJoinPoolShares_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryCalcJoinPoolSharesRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pool_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") - } - - protoReq.PoolId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_CalcJoinPoolShares_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.CalcJoinPoolShares(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_Query_CalcExitPoolCoinsFromShares_0 = &utilities.DoubleArray{Encoding: map[string]int{"pool_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) - -func request_Query_CalcExitPoolCoinsFromShares_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryCalcExitPoolCoinsFromSharesRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pool_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") - } - - protoReq.PoolId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_CalcExitPoolCoinsFromShares_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.CalcExitPoolCoinsFromShares(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_CalcExitPoolCoinsFromShares_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryCalcExitPoolCoinsFromSharesRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pool_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") - } - - protoReq.PoolId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_CalcExitPoolCoinsFromShares_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.CalcExitPoolCoinsFromShares(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Query_PoolParams_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryPoolParamsRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pool_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") - } - - protoReq.PoolId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) - } - - msg, err := client.PoolParams(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_PoolParams_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryPoolParamsRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pool_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") - } - - protoReq.PoolId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) - } - - msg, err := server.PoolParams(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Query_TotalPoolLiquidity_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryTotalPoolLiquidityRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pool_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") - } - - protoReq.PoolId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) - } - - msg, err := client.TotalPoolLiquidity(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_TotalPoolLiquidity_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryTotalPoolLiquidityRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pool_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") - } - - protoReq.PoolId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) - } - - msg, err := server.TotalPoolLiquidity(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Query_TotalShares_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryTotalSharesRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pool_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") - } - - protoReq.PoolId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) - } - - msg, err := client.TotalShares(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_TotalShares_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryTotalSharesRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pool_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") - } - - protoReq.PoolId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) - } - - msg, err := server.TotalShares(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_Query_SpotPrice_0 = &utilities.DoubleArray{Encoding: map[string]int{"pool_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) - -func request_Query_SpotPrice_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QuerySpotPriceRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pool_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") - } - - protoReq.PoolId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SpotPrice_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.SpotPrice(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_SpotPrice_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QuerySpotPriceRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pool_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") - } - - protoReq.PoolId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SpotPrice_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.SpotPrice(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_Query_EstimateSwapExactAmountIn_0 = &utilities.DoubleArray{Encoding: map[string]int{"pool_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) - -func request_Query_EstimateSwapExactAmountIn_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QuerySwapExactAmountInRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pool_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") - } - - protoReq.PoolId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_EstimateSwapExactAmountIn_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.EstimateSwapExactAmountIn(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_EstimateSwapExactAmountIn_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QuerySwapExactAmountInRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pool_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") - } - - protoReq.PoolId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_EstimateSwapExactAmountIn_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.EstimateSwapExactAmountIn(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_Query_EstimateSwapExactAmountOut_0 = &utilities.DoubleArray{Encoding: map[string]int{"pool_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) - -func request_Query_EstimateSwapExactAmountOut_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QuerySwapExactAmountOutRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pool_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") - } - - protoReq.PoolId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_EstimateSwapExactAmountOut_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.EstimateSwapExactAmountOut(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_EstimateSwapExactAmountOut_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QuerySwapExactAmountOutRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pool_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") - } - - protoReq.PoolId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_EstimateSwapExactAmountOut_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.EstimateSwapExactAmountOut(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Query_ConcentratedPoolIdLinkFromCFMM_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryConcentratedPoolIdLinkFromCFMMRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["cfmm_pool_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "cfmm_pool_id") - } - - protoReq.CfmmPoolId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "cfmm_pool_id", err) - } - - msg, err := client.ConcentratedPoolIdLinkFromCFMM(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_ConcentratedPoolIdLinkFromCFMM_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryConcentratedPoolIdLinkFromCFMMRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["cfmm_pool_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "cfmm_pool_id") - } - - protoReq.CfmmPoolId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "cfmm_pool_id", err) - } - - msg, err := server.ConcentratedPoolIdLinkFromCFMM(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". -// UnaryRPC :call QueryServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. -func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { - - mux.Handle("GET", pattern_Query_Pools_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Query_Pools_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_Pools_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_NumPools_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Query_NumPools_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_NumPools_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_TotalLiquidity_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Query_TotalLiquidity_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_TotalLiquidity_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_PoolsWithFilter_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Query_PoolsWithFilter_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_PoolsWithFilter_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_Pool_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Query_Pool_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_Pool_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_PoolType_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Query_PoolType_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_PoolType_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_CalcJoinPoolShares_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Query_CalcJoinPoolShares_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_CalcJoinPoolShares_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_CalcExitPoolCoinsFromShares_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Query_CalcExitPoolCoinsFromShares_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_CalcExitPoolCoinsFromShares_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_PoolParams_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Query_PoolParams_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_PoolParams_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_TotalPoolLiquidity_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Query_TotalPoolLiquidity_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_TotalPoolLiquidity_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_TotalShares_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Query_TotalShares_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_TotalShares_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_SpotPrice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Query_SpotPrice_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_SpotPrice_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_EstimateSwapExactAmountIn_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Query_EstimateSwapExactAmountIn_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_EstimateSwapExactAmountIn_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_EstimateSwapExactAmountOut_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Query_EstimateSwapExactAmountOut_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_EstimateSwapExactAmountOut_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_ConcentratedPoolIdLinkFromCFMM_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Query_ConcentratedPoolIdLinkFromCFMM_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_ConcentratedPoolIdLinkFromCFMM_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterQueryHandler(ctx, mux, conn) -} - -// RegisterQueryHandler registers the http handlers for service Query to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn)) -} - -// RegisterQueryHandlerClient registers the http handlers for service Query -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "QueryClient" to call the correct interceptors. -func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { - - mux.Handle("GET", pattern_Query_Pools_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Query_Pools_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_Pools_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_NumPools_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Query_NumPools_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_NumPools_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_TotalLiquidity_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Query_TotalLiquidity_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_TotalLiquidity_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_PoolsWithFilter_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Query_PoolsWithFilter_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_PoolsWithFilter_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_Pool_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Query_Pool_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_Pool_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_PoolType_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Query_PoolType_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_PoolType_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_CalcJoinPoolShares_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Query_CalcJoinPoolShares_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_CalcJoinPoolShares_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_CalcExitPoolCoinsFromShares_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Query_CalcExitPoolCoinsFromShares_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_CalcExitPoolCoinsFromShares_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_PoolParams_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Query_PoolParams_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_PoolParams_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_TotalPoolLiquidity_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Query_TotalPoolLiquidity_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_TotalPoolLiquidity_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_TotalShares_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Query_TotalShares_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_TotalShares_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_SpotPrice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Query_SpotPrice_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_SpotPrice_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_EstimateSwapExactAmountIn_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Query_EstimateSwapExactAmountIn_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_EstimateSwapExactAmountIn_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_EstimateSwapExactAmountOut_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Query_EstimateSwapExactAmountOut_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_EstimateSwapExactAmountOut_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Query_ConcentratedPoolIdLinkFromCFMM_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Query_ConcentratedPoolIdLinkFromCFMM_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_ConcentratedPoolIdLinkFromCFMM_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_Query_Pools_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"osmosis", "gamm", "v1beta1", "pools"}, "", runtime.AssumeColonVerbOpt(false))) - - pattern_Query_NumPools_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"osmosis", "gamm", "v1beta1", "num_pools"}, "", runtime.AssumeColonVerbOpt(false))) - - pattern_Query_TotalLiquidity_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"osmosis", "gamm", "v1beta1", "total_liquidity"}, "", runtime.AssumeColonVerbOpt(false))) - - pattern_Query_PoolsWithFilter_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"osmosis", "gamm", "v1beta1", "filtered_pools"}, "", runtime.AssumeColonVerbOpt(false))) - - pattern_Query_Pool_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"osmosis", "gamm", "v1beta1", "pools", "pool_id"}, "", runtime.AssumeColonVerbOpt(false))) - - pattern_Query_PoolType_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"osmosis", "gamm", "v1beta1", "pool_type", "pool_id"}, "", runtime.AssumeColonVerbOpt(false))) - - pattern_Query_CalcJoinPoolShares_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"osmosis", "gamm", "v1beta1", "pools", "pool_id", "join_swap_exact_in"}, "", runtime.AssumeColonVerbOpt(false))) - - pattern_Query_CalcExitPoolCoinsFromShares_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"osmosis", "gamm", "v1beta1", "pools", "pool_id", "exit_swap_share_amount_in"}, "", runtime.AssumeColonVerbOpt(false))) - - pattern_Query_PoolParams_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"osmosis", "gamm", "v1beta1", "pools", "pool_id", "params"}, "", runtime.AssumeColonVerbOpt(false))) - - pattern_Query_TotalPoolLiquidity_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"osmosis", "gamm", "v1beta1", "pools", "pool_id", "total_pool_liquidity"}, "", runtime.AssumeColonVerbOpt(false))) - - pattern_Query_TotalShares_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"osmosis", "gamm", "v1beta1", "pools", "pool_id", "total_shares"}, "", runtime.AssumeColonVerbOpt(false))) - - pattern_Query_SpotPrice_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"osmosis", "gamm", "v1beta1", "pools", "pool_id", "prices"}, "", runtime.AssumeColonVerbOpt(false))) - - pattern_Query_EstimateSwapExactAmountIn_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5}, []string{"osmosis", "gamm", "v1beta1", "pool_id", "estimate", "swap_exact_amount_in"}, "", runtime.AssumeColonVerbOpt(false))) - - pattern_Query_EstimateSwapExactAmountOut_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5}, []string{"osmosis", "gamm", "v1beta1", "pool_id", "estimate", "swap_exact_amount_out"}, "", runtime.AssumeColonVerbOpt(false))) - - pattern_Query_ConcentratedPoolIdLinkFromCFMM_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"osmosis", "gamm", "v1beta1", "concentrated_pool_id_link_from_cfmm", "cfmm_pool_id"}, "", runtime.AssumeColonVerbOpt(false))) -) - -var ( - forward_Query_Pools_0 = runtime.ForwardResponseMessage - - forward_Query_NumPools_0 = runtime.ForwardResponseMessage - - forward_Query_TotalLiquidity_0 = runtime.ForwardResponseMessage - - forward_Query_PoolsWithFilter_0 = runtime.ForwardResponseMessage - - forward_Query_Pool_0 = runtime.ForwardResponseMessage - - forward_Query_PoolType_0 = runtime.ForwardResponseMessage - - forward_Query_CalcJoinPoolShares_0 = runtime.ForwardResponseMessage - - forward_Query_CalcExitPoolCoinsFromShares_0 = runtime.ForwardResponseMessage - - forward_Query_PoolParams_0 = runtime.ForwardResponseMessage - - forward_Query_TotalPoolLiquidity_0 = runtime.ForwardResponseMessage - - forward_Query_TotalShares_0 = runtime.ForwardResponseMessage - - forward_Query_SpotPrice_0 = runtime.ForwardResponseMessage - - forward_Query_EstimateSwapExactAmountIn_0 = runtime.ForwardResponseMessage - - forward_Query_EstimateSwapExactAmountOut_0 = runtime.ForwardResponseMessage - - forward_Query_ConcentratedPoolIdLinkFromCFMM_0 = runtime.ForwardResponseMessage -) diff --git a/tests/interchaintest/osmosistypes/gamm/types/tx.pb.go b/tests/interchaintest/osmosistypes/gamm/types/tx.pb.go deleted file mode 100644 index 54724c2f..00000000 --- a/tests/interchaintest/osmosistypes/gamm/types/tx.pb.go +++ /dev/null @@ -1,4568 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: osmosis/gamm/v1beta1/tx.proto - -package types - -import ( - context "context" - fmt "fmt" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/cosmos/cosmos-sdk/types/tx/amino" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" - types1 "github.com/notional-labs/fee-abstraction/tests/interchaintest/osmosistypes/poolmanager/types" - 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 - -// ===================== MsgJoinPool -// This is really MsgJoinPoolNoSwap -type MsgJoinPool struct { - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` - PoolId uint64 `protobuf:"varint,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - ShareOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,3,opt,name=share_out_amount,json=shareOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_out_amount" yaml:"pool_amount_out"` - TokenInMaxs []types.Coin `protobuf:"bytes,4,rep,name=token_in_maxs,json=tokenInMaxs,proto3" json:"token_in_maxs" yaml:"token_in_max_amounts"` -} - -func (m *MsgJoinPool) Reset() { *m = MsgJoinPool{} } -func (m *MsgJoinPool) String() string { return proto.CompactTextString(m) } -func (*MsgJoinPool) ProtoMessage() {} -func (*MsgJoinPool) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{0} -} -func (m *MsgJoinPool) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgJoinPool) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgJoinPool.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 *MsgJoinPool) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgJoinPool.Merge(m, src) -} -func (m *MsgJoinPool) XXX_Size() int { - return m.Size() -} -func (m *MsgJoinPool) XXX_DiscardUnknown() { - xxx_messageInfo_MsgJoinPool.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgJoinPool proto.InternalMessageInfo - -func (m *MsgJoinPool) GetSender() string { - if m != nil { - return m.Sender - } - return "" -} - -func (m *MsgJoinPool) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -func (m *MsgJoinPool) GetTokenInMaxs() []types.Coin { - if m != nil { - return m.TokenInMaxs - } - return nil -} - -type MsgJoinPoolResponse struct { - ShareOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=share_out_amount,json=shareOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_out_amount" yaml:"share_out_amount"` - TokenIn []types.Coin `protobuf:"bytes,2,rep,name=token_in,json=tokenIn,proto3" json:"token_in" yaml:"token_in"` -} - -func (m *MsgJoinPoolResponse) Reset() { *m = MsgJoinPoolResponse{} } -func (m *MsgJoinPoolResponse) String() string { return proto.CompactTextString(m) } -func (*MsgJoinPoolResponse) ProtoMessage() {} -func (*MsgJoinPoolResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{1} -} -func (m *MsgJoinPoolResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgJoinPoolResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgJoinPoolResponse.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 *MsgJoinPoolResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgJoinPoolResponse.Merge(m, src) -} -func (m *MsgJoinPoolResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgJoinPoolResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgJoinPoolResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgJoinPoolResponse proto.InternalMessageInfo - -func (m *MsgJoinPoolResponse) GetTokenIn() []types.Coin { - if m != nil { - return m.TokenIn - } - return nil -} - -// ===================== MsgExitPool -type MsgExitPool struct { - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` - PoolId uint64 `protobuf:"varint,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - ShareInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,3,opt,name=share_in_amount,json=shareInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_in_amount" yaml:"share_in_amount"` - TokenOutMins []types.Coin `protobuf:"bytes,4,rep,name=token_out_mins,json=tokenOutMins,proto3" json:"token_out_mins" yaml:"token_out_min_amounts"` -} - -func (m *MsgExitPool) Reset() { *m = MsgExitPool{} } -func (m *MsgExitPool) String() string { return proto.CompactTextString(m) } -func (*MsgExitPool) ProtoMessage() {} -func (*MsgExitPool) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{2} -} -func (m *MsgExitPool) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgExitPool) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgExitPool.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 *MsgExitPool) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgExitPool.Merge(m, src) -} -func (m *MsgExitPool) XXX_Size() int { - return m.Size() -} -func (m *MsgExitPool) XXX_DiscardUnknown() { - xxx_messageInfo_MsgExitPool.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgExitPool proto.InternalMessageInfo - -func (m *MsgExitPool) GetSender() string { - if m != nil { - return m.Sender - } - return "" -} - -func (m *MsgExitPool) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -func (m *MsgExitPool) GetTokenOutMins() []types.Coin { - if m != nil { - return m.TokenOutMins - } - return nil -} - -type MsgExitPoolResponse struct { - TokenOut []types.Coin `protobuf:"bytes,1,rep,name=token_out,json=tokenOut,proto3" json:"token_out" yaml:"token_out"` -} - -func (m *MsgExitPoolResponse) Reset() { *m = MsgExitPoolResponse{} } -func (m *MsgExitPoolResponse) String() string { return proto.CompactTextString(m) } -func (*MsgExitPoolResponse) ProtoMessage() {} -func (*MsgExitPoolResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{3} -} -func (m *MsgExitPoolResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgExitPoolResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgExitPoolResponse.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 *MsgExitPoolResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgExitPoolResponse.Merge(m, src) -} -func (m *MsgExitPoolResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgExitPoolResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgExitPoolResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgExitPoolResponse proto.InternalMessageInfo - -func (m *MsgExitPoolResponse) GetTokenOut() []types.Coin { - if m != nil { - return m.TokenOut - } - return nil -} - -// ===================== MsgSwapExactAmountIn -type MsgSwapExactAmountIn struct { - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` - Routes []types1.SwapAmountInRoute `protobuf:"bytes,2,rep,name=routes,proto3" json:"routes"` - TokenIn types.Coin `protobuf:"bytes,3,opt,name=token_in,json=tokenIn,proto3" json:"token_in" yaml:"token_in"` - TokenOutMinAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,4,opt,name=token_out_min_amount,json=tokenOutMinAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_out_min_amount" yaml:"token_out_min_amount"` -} - -func (m *MsgSwapExactAmountIn) Reset() { *m = MsgSwapExactAmountIn{} } -func (m *MsgSwapExactAmountIn) String() string { return proto.CompactTextString(m) } -func (*MsgSwapExactAmountIn) ProtoMessage() {} -func (*MsgSwapExactAmountIn) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{4} -} -func (m *MsgSwapExactAmountIn) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgSwapExactAmountIn) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgSwapExactAmountIn.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 *MsgSwapExactAmountIn) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgSwapExactAmountIn.Merge(m, src) -} -func (m *MsgSwapExactAmountIn) XXX_Size() int { - return m.Size() -} -func (m *MsgSwapExactAmountIn) XXX_DiscardUnknown() { - xxx_messageInfo_MsgSwapExactAmountIn.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgSwapExactAmountIn proto.InternalMessageInfo - -func (m *MsgSwapExactAmountIn) GetSender() string { - if m != nil { - return m.Sender - } - return "" -} - -func (m *MsgSwapExactAmountIn) GetRoutes() []types1.SwapAmountInRoute { - if m != nil { - return m.Routes - } - return nil -} - -func (m *MsgSwapExactAmountIn) GetTokenIn() types.Coin { - if m != nil { - return m.TokenIn - } - return types.Coin{} -} - -type MsgSwapExactAmountInResponse struct { - TokenOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=token_out_amount,json=tokenOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_out_amount" yaml:"token_out_amount"` -} - -func (m *MsgSwapExactAmountInResponse) Reset() { *m = MsgSwapExactAmountInResponse{} } -func (m *MsgSwapExactAmountInResponse) String() string { return proto.CompactTextString(m) } -func (*MsgSwapExactAmountInResponse) ProtoMessage() {} -func (*MsgSwapExactAmountInResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{5} -} -func (m *MsgSwapExactAmountInResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgSwapExactAmountInResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgSwapExactAmountInResponse.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 *MsgSwapExactAmountInResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgSwapExactAmountInResponse.Merge(m, src) -} -func (m *MsgSwapExactAmountInResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgSwapExactAmountInResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgSwapExactAmountInResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgSwapExactAmountInResponse proto.InternalMessageInfo - -type MsgSwapExactAmountOut struct { - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` - Routes []types1.SwapAmountOutRoute `protobuf:"bytes,2,rep,name=routes,proto3" json:"routes"` - TokenInMaxAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,3,opt,name=token_in_max_amount,json=tokenInMaxAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_in_max_amount" yaml:"token_in_max_amount"` - TokenOut types.Coin `protobuf:"bytes,4,opt,name=token_out,json=tokenOut,proto3" json:"token_out" yaml:"token_out"` -} - -func (m *MsgSwapExactAmountOut) Reset() { *m = MsgSwapExactAmountOut{} } -func (m *MsgSwapExactAmountOut) String() string { return proto.CompactTextString(m) } -func (*MsgSwapExactAmountOut) ProtoMessage() {} -func (*MsgSwapExactAmountOut) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{6} -} -func (m *MsgSwapExactAmountOut) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgSwapExactAmountOut) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgSwapExactAmountOut.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 *MsgSwapExactAmountOut) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgSwapExactAmountOut.Merge(m, src) -} -func (m *MsgSwapExactAmountOut) XXX_Size() int { - return m.Size() -} -func (m *MsgSwapExactAmountOut) XXX_DiscardUnknown() { - xxx_messageInfo_MsgSwapExactAmountOut.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgSwapExactAmountOut proto.InternalMessageInfo - -func (m *MsgSwapExactAmountOut) GetSender() string { - if m != nil { - return m.Sender - } - return "" -} - -func (m *MsgSwapExactAmountOut) GetRoutes() []types1.SwapAmountOutRoute { - if m != nil { - return m.Routes - } - return nil -} - -func (m *MsgSwapExactAmountOut) GetTokenOut() types.Coin { - if m != nil { - return m.TokenOut - } - return types.Coin{} -} - -type MsgSwapExactAmountOutResponse struct { - TokenInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=token_in_amount,json=tokenInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_in_amount" yaml:"token_in_amount"` -} - -func (m *MsgSwapExactAmountOutResponse) Reset() { *m = MsgSwapExactAmountOutResponse{} } -func (m *MsgSwapExactAmountOutResponse) String() string { return proto.CompactTextString(m) } -func (*MsgSwapExactAmountOutResponse) ProtoMessage() {} -func (*MsgSwapExactAmountOutResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{7} -} -func (m *MsgSwapExactAmountOutResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgSwapExactAmountOutResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgSwapExactAmountOutResponse.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 *MsgSwapExactAmountOutResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgSwapExactAmountOutResponse.Merge(m, src) -} -func (m *MsgSwapExactAmountOutResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgSwapExactAmountOutResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgSwapExactAmountOutResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgSwapExactAmountOutResponse proto.InternalMessageInfo - -// ===================== MsgJoinSwapExternAmountIn -// TODO: Rename to MsgJoinSwapExactAmountIn -type MsgJoinSwapExternAmountIn struct { - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` - PoolId uint64 `protobuf:"varint,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - TokenIn types.Coin `protobuf:"bytes,3,opt,name=token_in,json=tokenIn,proto3" json:"token_in" yaml:"token_in"` - ShareOutMinAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,4,opt,name=share_out_min_amount,json=shareOutMinAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_out_min_amount" yaml:"share_out_min_amount"` -} - -func (m *MsgJoinSwapExternAmountIn) Reset() { *m = MsgJoinSwapExternAmountIn{} } -func (m *MsgJoinSwapExternAmountIn) String() string { return proto.CompactTextString(m) } -func (*MsgJoinSwapExternAmountIn) ProtoMessage() {} -func (*MsgJoinSwapExternAmountIn) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{8} -} -func (m *MsgJoinSwapExternAmountIn) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgJoinSwapExternAmountIn) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgJoinSwapExternAmountIn.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 *MsgJoinSwapExternAmountIn) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgJoinSwapExternAmountIn.Merge(m, src) -} -func (m *MsgJoinSwapExternAmountIn) XXX_Size() int { - return m.Size() -} -func (m *MsgJoinSwapExternAmountIn) XXX_DiscardUnknown() { - xxx_messageInfo_MsgJoinSwapExternAmountIn.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgJoinSwapExternAmountIn proto.InternalMessageInfo - -func (m *MsgJoinSwapExternAmountIn) GetSender() string { - if m != nil { - return m.Sender - } - return "" -} - -func (m *MsgJoinSwapExternAmountIn) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -func (m *MsgJoinSwapExternAmountIn) GetTokenIn() types.Coin { - if m != nil { - return m.TokenIn - } - return types.Coin{} -} - -type MsgJoinSwapExternAmountInResponse struct { - ShareOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=share_out_amount,json=shareOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_out_amount" yaml:"share_out_amount"` -} - -func (m *MsgJoinSwapExternAmountInResponse) Reset() { *m = MsgJoinSwapExternAmountInResponse{} } -func (m *MsgJoinSwapExternAmountInResponse) String() string { return proto.CompactTextString(m) } -func (*MsgJoinSwapExternAmountInResponse) ProtoMessage() {} -func (*MsgJoinSwapExternAmountInResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{9} -} -func (m *MsgJoinSwapExternAmountInResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgJoinSwapExternAmountInResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgJoinSwapExternAmountInResponse.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 *MsgJoinSwapExternAmountInResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgJoinSwapExternAmountInResponse.Merge(m, src) -} -func (m *MsgJoinSwapExternAmountInResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgJoinSwapExternAmountInResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgJoinSwapExternAmountInResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgJoinSwapExternAmountInResponse proto.InternalMessageInfo - -// ===================== MsgJoinSwapShareAmountOut -type MsgJoinSwapShareAmountOut struct { - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` - PoolId uint64 `protobuf:"varint,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - TokenInDenom string `protobuf:"bytes,3,opt,name=token_in_denom,json=tokenInDenom,proto3" json:"token_in_denom,omitempty" yaml:"token_in_denom"` - ShareOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,4,opt,name=share_out_amount,json=shareOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_out_amount" yaml:"share_out_amount"` - TokenInMaxAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,5,opt,name=token_in_max_amount,json=tokenInMaxAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_in_max_amount" yaml:"token_in_max_amount"` -} - -func (m *MsgJoinSwapShareAmountOut) Reset() { *m = MsgJoinSwapShareAmountOut{} } -func (m *MsgJoinSwapShareAmountOut) String() string { return proto.CompactTextString(m) } -func (*MsgJoinSwapShareAmountOut) ProtoMessage() {} -func (*MsgJoinSwapShareAmountOut) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{10} -} -func (m *MsgJoinSwapShareAmountOut) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgJoinSwapShareAmountOut) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgJoinSwapShareAmountOut.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 *MsgJoinSwapShareAmountOut) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgJoinSwapShareAmountOut.Merge(m, src) -} -func (m *MsgJoinSwapShareAmountOut) XXX_Size() int { - return m.Size() -} -func (m *MsgJoinSwapShareAmountOut) XXX_DiscardUnknown() { - xxx_messageInfo_MsgJoinSwapShareAmountOut.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgJoinSwapShareAmountOut proto.InternalMessageInfo - -func (m *MsgJoinSwapShareAmountOut) GetSender() string { - if m != nil { - return m.Sender - } - return "" -} - -func (m *MsgJoinSwapShareAmountOut) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -func (m *MsgJoinSwapShareAmountOut) GetTokenInDenom() string { - if m != nil { - return m.TokenInDenom - } - return "" -} - -type MsgJoinSwapShareAmountOutResponse struct { - TokenInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=token_in_amount,json=tokenInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_in_amount" yaml:"token_in_amount"` -} - -func (m *MsgJoinSwapShareAmountOutResponse) Reset() { *m = MsgJoinSwapShareAmountOutResponse{} } -func (m *MsgJoinSwapShareAmountOutResponse) String() string { return proto.CompactTextString(m) } -func (*MsgJoinSwapShareAmountOutResponse) ProtoMessage() {} -func (*MsgJoinSwapShareAmountOutResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{11} -} -func (m *MsgJoinSwapShareAmountOutResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgJoinSwapShareAmountOutResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgJoinSwapShareAmountOutResponse.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 *MsgJoinSwapShareAmountOutResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgJoinSwapShareAmountOutResponse.Merge(m, src) -} -func (m *MsgJoinSwapShareAmountOutResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgJoinSwapShareAmountOutResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgJoinSwapShareAmountOutResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgJoinSwapShareAmountOutResponse proto.InternalMessageInfo - -// ===================== MsgExitSwapShareAmountIn -type MsgExitSwapShareAmountIn struct { - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` - PoolId uint64 `protobuf:"varint,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - TokenOutDenom string `protobuf:"bytes,3,opt,name=token_out_denom,json=tokenOutDenom,proto3" json:"token_out_denom,omitempty" yaml:"token_out_denom"` - ShareInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,4,opt,name=share_in_amount,json=shareInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_in_amount" yaml:"share_in_amount"` - TokenOutMinAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,5,opt,name=token_out_min_amount,json=tokenOutMinAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_out_min_amount" yaml:"token_out_min_amount"` -} - -func (m *MsgExitSwapShareAmountIn) Reset() { *m = MsgExitSwapShareAmountIn{} } -func (m *MsgExitSwapShareAmountIn) String() string { return proto.CompactTextString(m) } -func (*MsgExitSwapShareAmountIn) ProtoMessage() {} -func (*MsgExitSwapShareAmountIn) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{12} -} -func (m *MsgExitSwapShareAmountIn) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgExitSwapShareAmountIn) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgExitSwapShareAmountIn.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 *MsgExitSwapShareAmountIn) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgExitSwapShareAmountIn.Merge(m, src) -} -func (m *MsgExitSwapShareAmountIn) XXX_Size() int { - return m.Size() -} -func (m *MsgExitSwapShareAmountIn) XXX_DiscardUnknown() { - xxx_messageInfo_MsgExitSwapShareAmountIn.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgExitSwapShareAmountIn proto.InternalMessageInfo - -func (m *MsgExitSwapShareAmountIn) GetSender() string { - if m != nil { - return m.Sender - } - return "" -} - -func (m *MsgExitSwapShareAmountIn) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -func (m *MsgExitSwapShareAmountIn) GetTokenOutDenom() string { - if m != nil { - return m.TokenOutDenom - } - return "" -} - -type MsgExitSwapShareAmountInResponse struct { - TokenOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=token_out_amount,json=tokenOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_out_amount" yaml:"token_out_amount"` -} - -func (m *MsgExitSwapShareAmountInResponse) Reset() { *m = MsgExitSwapShareAmountInResponse{} } -func (m *MsgExitSwapShareAmountInResponse) String() string { return proto.CompactTextString(m) } -func (*MsgExitSwapShareAmountInResponse) ProtoMessage() {} -func (*MsgExitSwapShareAmountInResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{13} -} -func (m *MsgExitSwapShareAmountInResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgExitSwapShareAmountInResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgExitSwapShareAmountInResponse.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 *MsgExitSwapShareAmountInResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgExitSwapShareAmountInResponse.Merge(m, src) -} -func (m *MsgExitSwapShareAmountInResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgExitSwapShareAmountInResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgExitSwapShareAmountInResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgExitSwapShareAmountInResponse proto.InternalMessageInfo - -// ===================== MsgExitSwapExternAmountOut -type MsgExitSwapExternAmountOut struct { - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` - PoolId uint64 `protobuf:"varint,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - TokenOut types.Coin `protobuf:"bytes,3,opt,name=token_out,json=tokenOut,proto3" json:"token_out" yaml:"token_out"` - ShareInMaxAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,4,opt,name=share_in_max_amount,json=shareInMaxAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_in_max_amount" yaml:"share_in_max_amount"` -} - -func (m *MsgExitSwapExternAmountOut) Reset() { *m = MsgExitSwapExternAmountOut{} } -func (m *MsgExitSwapExternAmountOut) String() string { return proto.CompactTextString(m) } -func (*MsgExitSwapExternAmountOut) ProtoMessage() {} -func (*MsgExitSwapExternAmountOut) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{14} -} -func (m *MsgExitSwapExternAmountOut) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgExitSwapExternAmountOut) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgExitSwapExternAmountOut.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 *MsgExitSwapExternAmountOut) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgExitSwapExternAmountOut.Merge(m, src) -} -func (m *MsgExitSwapExternAmountOut) XXX_Size() int { - return m.Size() -} -func (m *MsgExitSwapExternAmountOut) XXX_DiscardUnknown() { - xxx_messageInfo_MsgExitSwapExternAmountOut.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgExitSwapExternAmountOut proto.InternalMessageInfo - -func (m *MsgExitSwapExternAmountOut) GetSender() string { - if m != nil { - return m.Sender - } - return "" -} - -func (m *MsgExitSwapExternAmountOut) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -func (m *MsgExitSwapExternAmountOut) GetTokenOut() types.Coin { - if m != nil { - return m.TokenOut - } - return types.Coin{} -} - -type MsgExitSwapExternAmountOutResponse struct { - ShareInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=share_in_amount,json=shareInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"share_in_amount" yaml:"share_in_amount"` -} - -func (m *MsgExitSwapExternAmountOutResponse) Reset() { *m = MsgExitSwapExternAmountOutResponse{} } -func (m *MsgExitSwapExternAmountOutResponse) String() string { return proto.CompactTextString(m) } -func (*MsgExitSwapExternAmountOutResponse) ProtoMessage() {} -func (*MsgExitSwapExternAmountOutResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_cfc8fd3ac7df3247, []int{15} -} -func (m *MsgExitSwapExternAmountOutResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgExitSwapExternAmountOutResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgExitSwapExternAmountOutResponse.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 *MsgExitSwapExternAmountOutResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgExitSwapExternAmountOutResponse.Merge(m, src) -} -func (m *MsgExitSwapExternAmountOutResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgExitSwapExternAmountOutResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgExitSwapExternAmountOutResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgExitSwapExternAmountOutResponse proto.InternalMessageInfo - -func init() { - proto.RegisterType((*MsgJoinPool)(nil), "osmosis.gamm.v1beta1.MsgJoinPool") - proto.RegisterType((*MsgJoinPoolResponse)(nil), "osmosis.gamm.v1beta1.MsgJoinPoolResponse") - proto.RegisterType((*MsgExitPool)(nil), "osmosis.gamm.v1beta1.MsgExitPool") - proto.RegisterType((*MsgExitPoolResponse)(nil), "osmosis.gamm.v1beta1.MsgExitPoolResponse") - proto.RegisterType((*MsgSwapExactAmountIn)(nil), "osmosis.gamm.v1beta1.MsgSwapExactAmountIn") - proto.RegisterType((*MsgSwapExactAmountInResponse)(nil), "osmosis.gamm.v1beta1.MsgSwapExactAmountInResponse") - proto.RegisterType((*MsgSwapExactAmountOut)(nil), "osmosis.gamm.v1beta1.MsgSwapExactAmountOut") - proto.RegisterType((*MsgSwapExactAmountOutResponse)(nil), "osmosis.gamm.v1beta1.MsgSwapExactAmountOutResponse") - proto.RegisterType((*MsgJoinSwapExternAmountIn)(nil), "osmosis.gamm.v1beta1.MsgJoinSwapExternAmountIn") - proto.RegisterType((*MsgJoinSwapExternAmountInResponse)(nil), "osmosis.gamm.v1beta1.MsgJoinSwapExternAmountInResponse") - proto.RegisterType((*MsgJoinSwapShareAmountOut)(nil), "osmosis.gamm.v1beta1.MsgJoinSwapShareAmountOut") - proto.RegisterType((*MsgJoinSwapShareAmountOutResponse)(nil), "osmosis.gamm.v1beta1.MsgJoinSwapShareAmountOutResponse") - proto.RegisterType((*MsgExitSwapShareAmountIn)(nil), "osmosis.gamm.v1beta1.MsgExitSwapShareAmountIn") - proto.RegisterType((*MsgExitSwapShareAmountInResponse)(nil), "osmosis.gamm.v1beta1.MsgExitSwapShareAmountInResponse") - proto.RegisterType((*MsgExitSwapExternAmountOut)(nil), "osmosis.gamm.v1beta1.MsgExitSwapExternAmountOut") - proto.RegisterType((*MsgExitSwapExternAmountOutResponse)(nil), "osmosis.gamm.v1beta1.MsgExitSwapExternAmountOutResponse") -} - -func init() { proto.RegisterFile("osmosis/gamm/v1beta1/tx.proto", fileDescriptor_cfc8fd3ac7df3247) } - -var fileDescriptor_cfc8fd3ac7df3247 = []byte{ - // 1209 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0xbb, 0x6f, 0xdb, 0x46, - 0x18, 0x37, 0x25, 0xc5, 0x76, 0xce, 0xf5, 0x43, 0x8c, 0x1f, 0x32, 0x9d, 0x48, 0xce, 0xb5, 0x48, - 0x9c, 0x38, 0x22, 0x63, 0x07, 0x7d, 0xc0, 0x4b, 0x51, 0xb5, 0x01, 0xaa, 0x20, 0x82, 0x02, 0x66, - 0x09, 0xba, 0x08, 0x94, 0x45, 0x28, 0x6c, 0xcc, 0x3b, 0x41, 0x47, 0x3a, 0x0a, 0x0a, 0xb4, 0x40, - 0x81, 0x0e, 0xed, 0xd4, 0xa2, 0xe8, 0xe3, 0xcf, 0xe8, 0xda, 0xff, 0x20, 0x63, 0x86, 0x16, 0x68, - 0x53, 0x40, 0x28, 0xec, 0xa1, 0x6b, 0xa1, 0xb5, 0x4b, 0x71, 0xbc, 0x23, 0x45, 0x52, 0xa4, 0x24, - 0x3a, 0x52, 0xbc, 0xd8, 0xd2, 0xdd, 0xf7, 0xba, 0xdf, 0xf7, 0xe3, 0xef, 0x3e, 0x0a, 0x5c, 0xc1, - 0xc4, 0xc4, 0xc4, 0x20, 0x4a, 0x53, 0x33, 0x4d, 0xe5, 0x78, 0xaf, 0xae, 0x5b, 0xda, 0x9e, 0x62, - 0x75, 0xe4, 0x56, 0x1b, 0x5b, 0x58, 0x5c, 0xe5, 0xdb, 0x32, 0xdd, 0x96, 0xf9, 0xb6, 0xb4, 0xda, - 0xc4, 0x4d, 0xec, 0x18, 0x28, 0xf4, 0x13, 0xb3, 0x95, 0xb2, 0x9a, 0x69, 0x20, 0xac, 0x38, 0x7f, - 0xf9, 0x52, 0xfe, 0xd0, 0xf1, 0x57, 0xea, 0x1a, 0xd1, 0xbd, 0xe0, 0x87, 0xd8, 0x40, 0x7c, 0xff, - 0x96, 0x9b, 0xbd, 0x85, 0xf1, 0x91, 0xa9, 0x21, 0xad, 0xa9, 0xb7, 0x3d, 0x3b, 0xf2, 0x54, 0x6b, - 0xd5, 0xda, 0xd8, 0xb6, 0x74, 0x66, 0x0d, 0x5f, 0xa6, 0xc0, 0x42, 0x85, 0x34, 0xef, 0x61, 0x03, - 0x3d, 0xc0, 0xf8, 0x48, 0xbc, 0x01, 0x66, 0x89, 0x8e, 0x1a, 0x7a, 0x3b, 0x27, 0x6c, 0x0b, 0x3b, - 0x17, 0x4b, 0xd9, 0x5e, 0xb7, 0xb0, 0xf8, 0x4c, 0x33, 0x8f, 0x0e, 0x20, 0x5b, 0x87, 0x2a, 0x37, - 0x10, 0x77, 0xc1, 0x1c, 0x4d, 0x51, 0x33, 0x1a, 0xb9, 0xd4, 0xb6, 0xb0, 0x93, 0x29, 0x89, 0xbd, - 0x6e, 0x61, 0x89, 0xd9, 0xf2, 0x0d, 0xa8, 0xce, 0xd2, 0x4f, 0xe5, 0x86, 0xd8, 0x06, 0x2b, 0xe4, - 0xb1, 0xd6, 0xd6, 0x6b, 0xd8, 0xb6, 0x6a, 0x9a, 0x89, 0x6d, 0x64, 0xe5, 0xd2, 0x4e, 0x86, 0x8f, - 0x9f, 0x77, 0x0b, 0x33, 0x2f, 0xbb, 0x85, 0x6b, 0x4d, 0xc3, 0x7a, 0x6c, 0xd7, 0xe5, 0x43, 0x6c, - 0x2a, 0xfc, 0x88, 0xec, 0x5f, 0x91, 0x34, 0x9e, 0x28, 0xd6, 0xb3, 0x96, 0x4e, 0xe4, 0x32, 0xb2, - 0x7a, 0xdd, 0xc2, 0xba, 0x2f, 0x07, 0x0b, 0x45, 0xa3, 0x42, 0x75, 0xc9, 0xc9, 0x50, 0xb5, 0xad, - 0x0f, 0x9c, 0x45, 0xb1, 0x0e, 0x16, 0x2d, 0xfc, 0x44, 0x47, 0x35, 0x03, 0xd5, 0x4c, 0xad, 0x43, - 0x72, 0x99, 0xed, 0xf4, 0xce, 0xc2, 0xfe, 0xa6, 0xcc, 0xe2, 0xca, 0x14, 0x41, 0x17, 0x7f, 0xf9, - 0x43, 0x6c, 0xa0, 0xd2, 0x9b, 0xb4, 0x96, 0x5e, 0xb7, 0xb0, 0xc5, 0x32, 0xf8, 0xbd, 0x79, 0x26, - 0x02, 0xd5, 0x05, 0x67, 0xb9, 0x8c, 0x2a, 0x5a, 0x87, 0x1c, 0x6c, 0x7d, 0xf3, 0xcf, 0x2f, 0x37, - 0xd7, 0x03, 0x0d, 0xff, 0x14, 0x1b, 0xa8, 0x48, 0x8b, 0x83, 0x7f, 0x0a, 0xe0, 0x92, 0x0f, 0x5c, - 0x55, 0x27, 0x2d, 0x8c, 0x88, 0x2e, 0x92, 0x08, 0x30, 0x18, 0xdc, 0xe5, 0xc4, 0x60, 0x6c, 0xf0, - 0xe6, 0x84, 0xe2, 0x0d, 0xa2, 0x51, 0x01, 0xf3, 0xee, 0x79, 0x72, 0xa9, 0x51, 0x40, 0x6c, 0x70, - 0x20, 0x96, 0x83, 0x40, 0x40, 0x75, 0x8e, 0x1f, 0x1e, 0xfe, 0xc5, 0x88, 0x73, 0xb7, 0x63, 0x58, - 0x53, 0x25, 0x4e, 0x0b, 0x2c, 0xb3, 0xb3, 0x19, 0x68, 0x42, 0xbc, 0x09, 0x85, 0x83, 0xea, 0xa2, - 0xb3, 0x52, 0x46, 0x1c, 0x28, 0x1d, 0x2c, 0xb1, 0xf3, 0x52, 0x34, 0x4d, 0x03, 0x8d, 0xc1, 0x9b, - 0xb7, 0x38, 0x5c, 0x97, 0xfd, 0x70, 0x71, 0xf7, 0x3e, 0x71, 0xde, 0x70, 0xd6, 0xab, 0xb6, 0x55, - 0x31, 0x50, 0x24, 0x73, 0xf4, 0x8e, 0x61, 0x31, 0xe6, 0x34, 0x1d, 0xe2, 0xb8, 0xe0, 0x7a, 0xc4, - 0x79, 0x00, 0x2e, 0x7a, 0xb1, 0x73, 0xc2, 0xa8, 0xaa, 0x72, 0xbc, 0xaa, 0x95, 0x50, 0x55, 0x50, - 0x9d, 0x77, 0x2b, 0x81, 0xff, 0xa5, 0xc0, 0x6a, 0x85, 0x34, 0x1f, 0x3e, 0xd5, 0x5a, 0x77, 0x3b, - 0xda, 0x21, 0x27, 0x4b, 0x19, 0x25, 0xe9, 0xe7, 0x7d, 0x30, 0xeb, 0x48, 0x0a, 0xe1, 0xbc, 0x92, - 0x65, 0x57, 0xe1, 0x7c, 0x12, 0xe4, 0x95, 0x46, 0x53, 0xb9, 0x59, 0x54, 0xea, 0x56, 0xca, 0xd0, - 0x3a, 0x55, 0x1e, 0x23, 0xc0, 0x53, 0xda, 0xe9, 0x57, 0xe3, 0xa9, 0xf8, 0x39, 0x58, 0x8d, 0x6a, - 0x47, 0x2e, 0xe3, 0x9c, 0xaa, 0x92, 0x98, 0x44, 0x5b, 0xf1, 0x2d, 0x86, 0x6a, 0xd6, 0xd7, 0x61, - 0x76, 0xc6, 0xe1, 0x6d, 0xfe, 0x5e, 0x00, 0x97, 0xa3, 0xd0, 0xf7, 0x2b, 0x45, 0x3f, 0xd3, 0x64, - 0x94, 0x22, 0x1c, 0x0f, 0xaa, 0x4b, 0x6e, 0xd5, 0x2c, 0x3d, 0xfc, 0x3a, 0x0d, 0xd6, 0x06, 0xab, - 0xaa, 0xda, 0x56, 0x12, 0x52, 0x54, 0x42, 0xa4, 0x50, 0xc6, 0x24, 0x45, 0xd5, 0xb6, 0xa2, 0x58, - 0xf1, 0x19, 0xb8, 0x14, 0xa1, 0xc6, 0x5c, 0x0a, 0xee, 0x27, 0xc6, 0x42, 0x8a, 0x15, 0x78, 0xa8, - 0xae, 0xf4, 0xf5, 0x9d, 0x2b, 0x42, 0xe0, 0xb1, 0xcb, 0x8c, 0xe2, 0xe4, 0x18, 0x8f, 0xdd, 0xc1, - 0x75, 0xca, 0x0a, 0x18, 0x60, 0x05, 0xbd, 0x9a, 0x8b, 0x3a, 0xc5, 0xbb, 0xc8, 0x2a, 0x29, 0x52, - 0x9f, 0xef, 0x04, 0x70, 0x25, 0xb2, 0x17, 0x1e, 0x45, 0x5a, 0x60, 0xd9, 0x3b, 0x46, 0x80, 0x21, - 0x67, 0x16, 0xc8, 0x50, 0x38, 0xa8, 0x2e, 0x72, 0x44, 0x38, 0x3f, 0xfe, 0x4d, 0x81, 0x4d, 0x7e, - 0xad, 0xb1, 0xba, 0x2c, 0xbd, 0x8d, 0xce, 0x22, 0x1c, 0x89, 0x2e, 0x82, 0xc9, 0xeb, 0x42, 0xff, - 0xce, 0x9c, 0x9c, 0x2e, 0x44, 0xc5, 0x84, 0x6a, 0xd6, 0xbd, 0x8b, 0xfb, 0xba, 0x70, 0x8b, 0x32, - 0xe0, 0xfa, 0xe0, 0xe0, 0xc0, 0x69, 0x40, 0x21, 0x75, 0x79, 0x60, 0x20, 0xf8, 0xb3, 0x00, 0xae, - 0xc6, 0x42, 0x7e, 0xae, 0x73, 0x05, 0xfc, 0x2d, 0x1d, 0x60, 0xc3, 0x43, 0xba, 0x7b, 0x26, 0xc5, - 0x48, 0xc4, 0x86, 0xf7, 0xdd, 0x4b, 0xda, 0x40, 0xb5, 0x86, 0x8e, 0xb0, 0xc9, 0xa5, 0x60, 0xb3, - 0xd7, 0x2d, 0xac, 0x85, 0x68, 0xec, 0xec, 0xbb, 0xd7, 0x6f, 0x19, 0x7d, 0x44, 0xbf, 0x46, 0x62, - 0x95, 0x99, 0xf6, 0x0c, 0x16, 0xa3, 0x62, 0x17, 0x5e, 0x87, 0x8a, 0x0d, 0x67, 0x9c, 0x53, 0xa8, - 0x5f, 0x78, 0x7e, 0x08, 0x32, 0x2e, 0xd8, 0xd6, 0x73, 0x14, 0x9f, 0xdf, 0xd3, 0x20, 0xc7, 0x47, - 0xa3, 0x50, 0x5d, 0x53, 0xd4, 0x9e, 0x92, 0x7b, 0x4c, 0xda, 0x5c, 0x3f, 0xdd, 0xa4, 0x70, 0xe1, - 0x9e, 0x81, 0x5b, 0x78, 0xd5, 0xb6, 0x18, 0xe1, 0x22, 0x06, 0xd9, 0xcc, 0x74, 0x07, 0xd9, 0xb8, - 0xd1, 0xe7, 0xc2, 0x6b, 0x1a, 0x7d, 0x76, 0x29, 0xe1, 0xae, 0x0d, 0x8e, 0x3e, 0x83, 0x84, 0x33, - 0x10, 0xfc, 0x49, 0x00, 0xdb, 0x71, 0x7d, 0x3d, 0xdf, 0x71, 0xa8, 0x97, 0x02, 0x92, 0xaf, 0x32, - 0xbf, 0xf6, 0x4e, 0x53, 0xe1, 0x02, 0x43, 0x47, 0x7a, 0x02, 0x43, 0x07, 0x55, 0x1f, 0x8f, 0x32, - 0x3e, 0xf5, 0xc9, 0xbc, 0x9a, 0xfa, 0x44, 0x84, 0x84, 0xea, 0x0a, 0x67, 0x62, 0x5f, 0x7d, 0x8a, - 0x94, 0x0c, 0x3b, 0x31, 0x64, 0x08, 0xde, 0x77, 0xb4, 0xec, 0x1f, 0x05, 0x00, 0xe3, 0x41, 0xf7, - 0xeb, 0x4f, 0xf8, 0xa1, 0x12, 0xa6, 0xfa, 0x50, 0xed, 0xff, 0x3a, 0x07, 0xd2, 0x15, 0xd2, 0x14, - 0x1f, 0x81, 0x79, 0xef, 0x47, 0x93, 0xab, 0x72, 0xd4, 0x4f, 0x3a, 0xb2, 0xef, 0xd5, 0x5f, 0xba, - 0x31, 0xd2, 0xc4, 0x3b, 0xd3, 0x23, 0x30, 0xef, 0xbd, 0x55, 0xc7, 0x47, 0x76, 0x4d, 0x86, 0x44, - 0x1e, 0x78, 0x7d, 0x24, 0x20, 0x3b, 0xf8, 0xa2, 0x77, 0x33, 0xd6, 0x7f, 0xc0, 0x56, 0xda, 0x1f, - 0xdf, 0xd6, 0x4b, 0x7a, 0x0c, 0xc4, 0x88, 0x37, 0x89, 0xdd, 0x71, 0x23, 0x55, 0x6d, 0x4b, 0xba, - 0x93, 0xc0, 0xd8, 0xcb, 0xfb, 0xa5, 0x00, 0xd6, 0x63, 0x46, 0x54, 0x65, 0x68, 0x33, 0x06, 0x1d, - 0xa4, 0x77, 0x13, 0x3a, 0x44, 0x16, 0x11, 0x9a, 0x8c, 0x46, 0x17, 0x11, 0x74, 0x18, 0xa3, 0x88, - 0x98, 0x4b, 0xfa, 0x2b, 0x01, 0x6c, 0xc4, 0xa9, 0xd7, 0xed, 0xa1, 0xec, 0x89, 0xf0, 0x90, 0xde, - 0x4b, 0xea, 0xe1, 0xd5, 0xf1, 0x05, 0x58, 0x8b, 0xbe, 0xb6, 0xe5, 0x91, 0x21, 0x03, 0xf6, 0xd2, - 0x3b, 0xc9, 0xec, 0xdd, 0x02, 0x4a, 0xf7, 0x9e, 0x9f, 0xe4, 0x85, 0x17, 0x27, 0x79, 0xe1, 0xef, - 0x93, 0xbc, 0xf0, 0xed, 0x69, 0x7e, 0xe6, 0xc5, 0x69, 0x7e, 0xe6, 0x8f, 0xd3, 0xfc, 0xcc, 0x27, - 0xb7, 0x7d, 0x32, 0xc1, 0x63, 0x17, 0x8f, 0xb4, 0x3a, 0x71, 0xbf, 0x28, 0xc7, 0x7b, 0x6f, 0x2b, - 0x1d, 0x26, 0x5b, 0x8e, 0x68, 0xd4, 0x67, 0x9d, 0xdf, 0x4f, 0xef, 0xfc, 0x1f, 0x00, 0x00, 0xff, - 0xff, 0x0d, 0x7d, 0x1e, 0x03, 0xed, 0x15, 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 { - JoinPool(ctx context.Context, in *MsgJoinPool, opts ...grpc.CallOption) (*MsgJoinPoolResponse, error) - ExitPool(ctx context.Context, in *MsgExitPool, opts ...grpc.CallOption) (*MsgExitPoolResponse, error) - SwapExactAmountIn(ctx context.Context, in *MsgSwapExactAmountIn, opts ...grpc.CallOption) (*MsgSwapExactAmountInResponse, error) - SwapExactAmountOut(ctx context.Context, in *MsgSwapExactAmountOut, opts ...grpc.CallOption) (*MsgSwapExactAmountOutResponse, error) - JoinSwapExternAmountIn(ctx context.Context, in *MsgJoinSwapExternAmountIn, opts ...grpc.CallOption) (*MsgJoinSwapExternAmountInResponse, error) - JoinSwapShareAmountOut(ctx context.Context, in *MsgJoinSwapShareAmountOut, opts ...grpc.CallOption) (*MsgJoinSwapShareAmountOutResponse, error) - ExitSwapExternAmountOut(ctx context.Context, in *MsgExitSwapExternAmountOut, opts ...grpc.CallOption) (*MsgExitSwapExternAmountOutResponse, error) - ExitSwapShareAmountIn(ctx context.Context, in *MsgExitSwapShareAmountIn, opts ...grpc.CallOption) (*MsgExitSwapShareAmountInResponse, error) -} - -type msgClient struct { - cc grpc1.ClientConn -} - -func NewMsgClient(cc grpc1.ClientConn) MsgClient { - return &msgClient{cc} -} - -func (c *msgClient) JoinPool(ctx context.Context, in *MsgJoinPool, opts ...grpc.CallOption) (*MsgJoinPoolResponse, error) { - out := new(MsgJoinPoolResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Msg/JoinPool", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) ExitPool(ctx context.Context, in *MsgExitPool, opts ...grpc.CallOption) (*MsgExitPoolResponse, error) { - out := new(MsgExitPoolResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Msg/ExitPool", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) SwapExactAmountIn(ctx context.Context, in *MsgSwapExactAmountIn, opts ...grpc.CallOption) (*MsgSwapExactAmountInResponse, error) { - out := new(MsgSwapExactAmountInResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Msg/SwapExactAmountIn", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) SwapExactAmountOut(ctx context.Context, in *MsgSwapExactAmountOut, opts ...grpc.CallOption) (*MsgSwapExactAmountOutResponse, error) { - out := new(MsgSwapExactAmountOutResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Msg/SwapExactAmountOut", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) JoinSwapExternAmountIn(ctx context.Context, in *MsgJoinSwapExternAmountIn, opts ...grpc.CallOption) (*MsgJoinSwapExternAmountInResponse, error) { - out := new(MsgJoinSwapExternAmountInResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Msg/JoinSwapExternAmountIn", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) JoinSwapShareAmountOut(ctx context.Context, in *MsgJoinSwapShareAmountOut, opts ...grpc.CallOption) (*MsgJoinSwapShareAmountOutResponse, error) { - out := new(MsgJoinSwapShareAmountOutResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Msg/JoinSwapShareAmountOut", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) ExitSwapExternAmountOut(ctx context.Context, in *MsgExitSwapExternAmountOut, opts ...grpc.CallOption) (*MsgExitSwapExternAmountOutResponse, error) { - out := new(MsgExitSwapExternAmountOutResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Msg/ExitSwapExternAmountOut", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) ExitSwapShareAmountIn(ctx context.Context, in *MsgExitSwapShareAmountIn, opts ...grpc.CallOption) (*MsgExitSwapShareAmountInResponse, error) { - out := new(MsgExitSwapShareAmountInResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v1beta1.Msg/ExitSwapShareAmountIn", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// MsgServer is the server API for Msg service. -type MsgServer interface { - JoinPool(context.Context, *MsgJoinPool) (*MsgJoinPoolResponse, error) - ExitPool(context.Context, *MsgExitPool) (*MsgExitPoolResponse, error) - SwapExactAmountIn(context.Context, *MsgSwapExactAmountIn) (*MsgSwapExactAmountInResponse, error) - SwapExactAmountOut(context.Context, *MsgSwapExactAmountOut) (*MsgSwapExactAmountOutResponse, error) - JoinSwapExternAmountIn(context.Context, *MsgJoinSwapExternAmountIn) (*MsgJoinSwapExternAmountInResponse, error) - JoinSwapShareAmountOut(context.Context, *MsgJoinSwapShareAmountOut) (*MsgJoinSwapShareAmountOutResponse, error) - ExitSwapExternAmountOut(context.Context, *MsgExitSwapExternAmountOut) (*MsgExitSwapExternAmountOutResponse, error) - ExitSwapShareAmountIn(context.Context, *MsgExitSwapShareAmountIn) (*MsgExitSwapShareAmountInResponse, error) -} - -// UnimplementedMsgServer can be embedded to have forward compatible implementations. -type UnimplementedMsgServer struct { -} - -func (*UnimplementedMsgServer) JoinPool(ctx context.Context, req *MsgJoinPool) (*MsgJoinPoolResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method JoinPool not implemented") -} -func (*UnimplementedMsgServer) ExitPool(ctx context.Context, req *MsgExitPool) (*MsgExitPoolResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ExitPool not implemented") -} -func (*UnimplementedMsgServer) SwapExactAmountIn(ctx context.Context, req *MsgSwapExactAmountIn) (*MsgSwapExactAmountInResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SwapExactAmountIn not implemented") -} -func (*UnimplementedMsgServer) SwapExactAmountOut(ctx context.Context, req *MsgSwapExactAmountOut) (*MsgSwapExactAmountOutResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SwapExactAmountOut not implemented") -} -func (*UnimplementedMsgServer) JoinSwapExternAmountIn(ctx context.Context, req *MsgJoinSwapExternAmountIn) (*MsgJoinSwapExternAmountInResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method JoinSwapExternAmountIn not implemented") -} -func (*UnimplementedMsgServer) JoinSwapShareAmountOut(ctx context.Context, req *MsgJoinSwapShareAmountOut) (*MsgJoinSwapShareAmountOutResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method JoinSwapShareAmountOut not implemented") -} -func (*UnimplementedMsgServer) ExitSwapExternAmountOut(ctx context.Context, req *MsgExitSwapExternAmountOut) (*MsgExitSwapExternAmountOutResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ExitSwapExternAmountOut not implemented") -} -func (*UnimplementedMsgServer) ExitSwapShareAmountIn(ctx context.Context, req *MsgExitSwapShareAmountIn) (*MsgExitSwapShareAmountInResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ExitSwapShareAmountIn not implemented") -} - -func RegisterMsgServer(s grpc1.Server, srv MsgServer) { - s.RegisterService(&_Msg_serviceDesc, srv) -} - -func _Msg_JoinPool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgJoinPool) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).JoinPool(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Msg/JoinPool", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).JoinPool(ctx, req.(*MsgJoinPool)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_ExitPool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgExitPool) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).ExitPool(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Msg/ExitPool", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).ExitPool(ctx, req.(*MsgExitPool)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_SwapExactAmountIn_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgSwapExactAmountIn) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).SwapExactAmountIn(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Msg/SwapExactAmountIn", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).SwapExactAmountIn(ctx, req.(*MsgSwapExactAmountIn)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_SwapExactAmountOut_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgSwapExactAmountOut) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).SwapExactAmountOut(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Msg/SwapExactAmountOut", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).SwapExactAmountOut(ctx, req.(*MsgSwapExactAmountOut)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_JoinSwapExternAmountIn_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgJoinSwapExternAmountIn) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).JoinSwapExternAmountIn(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Msg/JoinSwapExternAmountIn", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).JoinSwapExternAmountIn(ctx, req.(*MsgJoinSwapExternAmountIn)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_JoinSwapShareAmountOut_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgJoinSwapShareAmountOut) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).JoinSwapShareAmountOut(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Msg/JoinSwapShareAmountOut", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).JoinSwapShareAmountOut(ctx, req.(*MsgJoinSwapShareAmountOut)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_ExitSwapExternAmountOut_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgExitSwapExternAmountOut) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).ExitSwapExternAmountOut(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Msg/ExitSwapExternAmountOut", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).ExitSwapExternAmountOut(ctx, req.(*MsgExitSwapExternAmountOut)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_ExitSwapShareAmountIn_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgExitSwapShareAmountIn) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).ExitSwapShareAmountIn(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v1beta1.Msg/ExitSwapShareAmountIn", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).ExitSwapShareAmountIn(ctx, req.(*MsgExitSwapShareAmountIn)) - } - return interceptor(ctx, in, info, handler) -} - -var _Msg_serviceDesc = grpc.ServiceDesc{ - ServiceName: "osmosis.gamm.v1beta1.Msg", - HandlerType: (*MsgServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "JoinPool", - Handler: _Msg_JoinPool_Handler, - }, - { - MethodName: "ExitPool", - Handler: _Msg_ExitPool_Handler, - }, - { - MethodName: "SwapExactAmountIn", - Handler: _Msg_SwapExactAmountIn_Handler, - }, - { - MethodName: "SwapExactAmountOut", - Handler: _Msg_SwapExactAmountOut_Handler, - }, - { - MethodName: "JoinSwapExternAmountIn", - Handler: _Msg_JoinSwapExternAmountIn_Handler, - }, - { - MethodName: "JoinSwapShareAmountOut", - Handler: _Msg_JoinSwapShareAmountOut_Handler, - }, - { - MethodName: "ExitSwapExternAmountOut", - Handler: _Msg_ExitSwapExternAmountOut_Handler, - }, - { - MethodName: "ExitSwapShareAmountIn", - Handler: _Msg_ExitSwapShareAmountIn_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "osmosis/gamm/v1beta1/tx.proto", -} - -func (m *MsgJoinPool) 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 *MsgJoinPool) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgJoinPool) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TokenInMaxs) > 0 { - for iNdEx := len(m.TokenInMaxs) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.TokenInMaxs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - } - { - size := m.ShareOutAmount.Size() - i -= size - if _, err := m.ShareOutAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if m.PoolId != 0 { - i = encodeVarintTx(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x10 - } - 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] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgJoinPoolResponse) 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 *MsgJoinPoolResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgJoinPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TokenIn) > 0 { - for iNdEx := len(m.TokenIn) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.TokenIn[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - { - size := m.ShareOutAmount.Size() - i -= size - if _, err := m.ShareOutAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *MsgExitPool) 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 *MsgExitPool) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgExitPool) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TokenOutMins) > 0 { - for iNdEx := len(m.TokenOutMins) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.TokenOutMins[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - } - { - size := m.ShareInAmount.Size() - i -= size - if _, err := m.ShareInAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if m.PoolId != 0 { - i = encodeVarintTx(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x10 - } - 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] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgExitPoolResponse) 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 *MsgExitPoolResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgExitPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TokenOut) > 0 { - for iNdEx := len(m.TokenOut) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.TokenOut[iNdEx].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 *MsgSwapExactAmountIn) 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 *MsgSwapExactAmountIn) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgSwapExactAmountIn) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.TokenOutMinAmount.Size() - i -= size - if _, err := m.TokenOutMinAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - { - size, err := m.TokenIn.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if len(m.Routes) > 0 { - for iNdEx := len(m.Routes) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Routes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - 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] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgSwapExactAmountInResponse) 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 *MsgSwapExactAmountInResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgSwapExactAmountInResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.TokenOutAmount.Size() - i -= size - if _, err := m.TokenOutAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *MsgSwapExactAmountOut) 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 *MsgSwapExactAmountOut) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgSwapExactAmountOut) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.TokenOut.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - { - size := m.TokenInMaxAmount.Size() - i -= size - if _, err := m.TokenInMaxAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if len(m.Routes) > 0 { - for iNdEx := len(m.Routes) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Routes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - 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] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgSwapExactAmountOutResponse) 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 *MsgSwapExactAmountOutResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgSwapExactAmountOutResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.TokenInAmount.Size() - i -= size - if _, err := m.TokenInAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *MsgJoinSwapExternAmountIn) 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 *MsgJoinSwapExternAmountIn) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgJoinSwapExternAmountIn) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.ShareOutMinAmount.Size() - i -= size - if _, err := m.ShareOutMinAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - { - size, err := m.TokenIn.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if m.PoolId != 0 { - i = encodeVarintTx(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x10 - } - 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] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgJoinSwapExternAmountInResponse) 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 *MsgJoinSwapExternAmountInResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgJoinSwapExternAmountInResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.ShareOutAmount.Size() - i -= size - if _, err := m.ShareOutAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *MsgJoinSwapShareAmountOut) 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 *MsgJoinSwapShareAmountOut) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgJoinSwapShareAmountOut) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.TokenInMaxAmount.Size() - i -= size - if _, err := m.TokenInMaxAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - { - size := m.ShareOutAmount.Size() - i -= size - if _, err := m.ShareOutAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - if len(m.TokenInDenom) > 0 { - i -= len(m.TokenInDenom) - copy(dAtA[i:], m.TokenInDenom) - i = encodeVarintTx(dAtA, i, uint64(len(m.TokenInDenom))) - i-- - dAtA[i] = 0x1a - } - if m.PoolId != 0 { - i = encodeVarintTx(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x10 - } - 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] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgJoinSwapShareAmountOutResponse) 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 *MsgJoinSwapShareAmountOutResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgJoinSwapShareAmountOutResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.TokenInAmount.Size() - i -= size - if _, err := m.TokenInAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *MsgExitSwapShareAmountIn) 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 *MsgExitSwapShareAmountIn) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgExitSwapShareAmountIn) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.TokenOutMinAmount.Size() - i -= size - if _, err := m.TokenOutMinAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - { - size := m.ShareInAmount.Size() - i -= size - if _, err := m.ShareInAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - if len(m.TokenOutDenom) > 0 { - i -= len(m.TokenOutDenom) - copy(dAtA[i:], m.TokenOutDenom) - i = encodeVarintTx(dAtA, i, uint64(len(m.TokenOutDenom))) - i-- - dAtA[i] = 0x1a - } - if m.PoolId != 0 { - i = encodeVarintTx(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x10 - } - 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] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgExitSwapShareAmountInResponse) 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 *MsgExitSwapShareAmountInResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgExitSwapShareAmountInResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.TokenOutAmount.Size() - i -= size - if _, err := m.TokenOutAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *MsgExitSwapExternAmountOut) 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 *MsgExitSwapExternAmountOut) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgExitSwapExternAmountOut) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.ShareInMaxAmount.Size() - i -= size - if _, err := m.ShareInMaxAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - { - size, err := m.TokenOut.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - if m.PoolId != 0 { - i = encodeVarintTx(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x10 - } - 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] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgExitSwapExternAmountOutResponse) 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 *MsgExitSwapExternAmountOutResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgExitSwapExternAmountOutResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.ShareInAmount.Size() - i -= size - if _, err := m.ShareInAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - 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 *MsgJoinPool) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - if m.PoolId != 0 { - n += 1 + sovTx(uint64(m.PoolId)) - } - l = m.ShareOutAmount.Size() - n += 1 + l + sovTx(uint64(l)) - if len(m.TokenInMaxs) > 0 { - for _, e := range m.TokenInMaxs { - l = e.Size() - n += 1 + l + sovTx(uint64(l)) - } - } - return n -} - -func (m *MsgJoinPoolResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ShareOutAmount.Size() - n += 1 + l + sovTx(uint64(l)) - if len(m.TokenIn) > 0 { - for _, e := range m.TokenIn { - l = e.Size() - n += 1 + l + sovTx(uint64(l)) - } - } - return n -} - -func (m *MsgExitPool) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - if m.PoolId != 0 { - n += 1 + sovTx(uint64(m.PoolId)) - } - l = m.ShareInAmount.Size() - n += 1 + l + sovTx(uint64(l)) - if len(m.TokenOutMins) > 0 { - for _, e := range m.TokenOutMins { - l = e.Size() - n += 1 + l + sovTx(uint64(l)) - } - } - return n -} - -func (m *MsgExitPoolResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.TokenOut) > 0 { - for _, e := range m.TokenOut { - l = e.Size() - n += 1 + l + sovTx(uint64(l)) - } - } - return n -} - -func (m *MsgSwapExactAmountIn) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - if len(m.Routes) > 0 { - for _, e := range m.Routes { - l = e.Size() - n += 1 + l + sovTx(uint64(l)) - } - } - l = m.TokenIn.Size() - n += 1 + l + sovTx(uint64(l)) - l = m.TokenOutMinAmount.Size() - n += 1 + l + sovTx(uint64(l)) - return n -} - -func (m *MsgSwapExactAmountInResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.TokenOutAmount.Size() - n += 1 + l + sovTx(uint64(l)) - return n -} - -func (m *MsgSwapExactAmountOut) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - if len(m.Routes) > 0 { - for _, e := range m.Routes { - l = e.Size() - n += 1 + l + sovTx(uint64(l)) - } - } - l = m.TokenInMaxAmount.Size() - n += 1 + l + sovTx(uint64(l)) - l = m.TokenOut.Size() - n += 1 + l + sovTx(uint64(l)) - return n -} - -func (m *MsgSwapExactAmountOutResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.TokenInAmount.Size() - n += 1 + l + sovTx(uint64(l)) - return n -} - -func (m *MsgJoinSwapExternAmountIn) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - if m.PoolId != 0 { - n += 1 + sovTx(uint64(m.PoolId)) - } - l = m.TokenIn.Size() - n += 1 + l + sovTx(uint64(l)) - l = m.ShareOutMinAmount.Size() - n += 1 + l + sovTx(uint64(l)) - return n -} - -func (m *MsgJoinSwapExternAmountInResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ShareOutAmount.Size() - n += 1 + l + sovTx(uint64(l)) - return n -} - -func (m *MsgJoinSwapShareAmountOut) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - if m.PoolId != 0 { - n += 1 + sovTx(uint64(m.PoolId)) - } - l = len(m.TokenInDenom) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - l = m.ShareOutAmount.Size() - n += 1 + l + sovTx(uint64(l)) - l = m.TokenInMaxAmount.Size() - n += 1 + l + sovTx(uint64(l)) - return n -} - -func (m *MsgJoinSwapShareAmountOutResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.TokenInAmount.Size() - n += 1 + l + sovTx(uint64(l)) - return n -} - -func (m *MsgExitSwapShareAmountIn) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - if m.PoolId != 0 { - n += 1 + sovTx(uint64(m.PoolId)) - } - l = len(m.TokenOutDenom) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - l = m.ShareInAmount.Size() - n += 1 + l + sovTx(uint64(l)) - l = m.TokenOutMinAmount.Size() - n += 1 + l + sovTx(uint64(l)) - return n -} - -func (m *MsgExitSwapShareAmountInResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.TokenOutAmount.Size() - n += 1 + l + sovTx(uint64(l)) - return n -} - -func (m *MsgExitSwapExternAmountOut) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - if m.PoolId != 0 { - n += 1 + sovTx(uint64(m.PoolId)) - } - l = m.TokenOut.Size() - n += 1 + l + sovTx(uint64(l)) - l = m.ShareInMaxAmount.Size() - n += 1 + l + sovTx(uint64(l)) - return n -} - -func (m *MsgExitSwapExternAmountOutResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.ShareInAmount.Size() - n += 1 + l + sovTx(uint64(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 *MsgJoinPool) 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: MsgJoinPool: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgJoinPool: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - 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 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShareOutAmount", 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 - } - if err := m.ShareOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenInMaxs", 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 - } - m.TokenInMaxs = append(m.TokenInMaxs, types.Coin{}) - if err := m.TokenInMaxs[len(m.TokenInMaxs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgJoinPoolResponse) 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: MsgJoinPoolResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgJoinPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShareOutAmount", 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 - } - if err := m.ShareOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", 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 - } - m.TokenIn = append(m.TokenIn, types.Coin{}) - if err := m.TokenIn[len(m.TokenIn)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgExitPool) 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: MsgExitPool: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgExitPool: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - 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 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShareInAmount", 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 - } - if err := m.ShareInAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOutMins", 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 - } - m.TokenOutMins = append(m.TokenOutMins, types.Coin{}) - if err := m.TokenOutMins[len(m.TokenOutMins)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgExitPoolResponse) 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: MsgExitPoolResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgExitPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOut", 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 - } - m.TokenOut = append(m.TokenOut, types.Coin{}) - if err := m.TokenOut[len(m.TokenOut)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgSwapExactAmountIn) 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: MsgSwapExactAmountIn: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgSwapExactAmountIn: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - 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 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Routes", 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 - } - m.Routes = append(m.Routes, types1.SwapAmountInRoute{}) - if err := m.Routes[len(m.Routes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", 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.TokenIn.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOutMinAmount", 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 - } - if err := m.TokenOutMinAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgSwapExactAmountInResponse) 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: MsgSwapExactAmountInResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgSwapExactAmountInResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOutAmount", 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 - } - if err := m.TokenOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgSwapExactAmountOut) 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: MsgSwapExactAmountOut: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgSwapExactAmountOut: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - 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 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Routes", 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 - } - m.Routes = append(m.Routes, types1.SwapAmountOutRoute{}) - if err := m.Routes[len(m.Routes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenInMaxAmount", 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 - } - if err := m.TokenInMaxAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOut", 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.TokenOut.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgSwapExactAmountOutResponse) 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: MsgSwapExactAmountOutResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgSwapExactAmountOutResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenInAmount", 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 - } - if err := m.TokenInAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgJoinSwapExternAmountIn) 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: MsgJoinSwapExternAmountIn: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgJoinSwapExternAmountIn: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - 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 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", 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.TokenIn.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShareOutMinAmount", 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 - } - if err := m.ShareOutMinAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgJoinSwapExternAmountInResponse) 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: MsgJoinSwapExternAmountInResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgJoinSwapExternAmountInResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShareOutAmount", 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 - } - if err := m.ShareOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgJoinSwapShareAmountOut) 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: MsgJoinSwapShareAmountOut: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgJoinSwapShareAmountOut: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - 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 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenInDenom", 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.TokenInDenom = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShareOutAmount", 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 - } - if err := m.ShareOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenInMaxAmount", 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 - } - if err := m.TokenInMaxAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgJoinSwapShareAmountOutResponse) 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: MsgJoinSwapShareAmountOutResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgJoinSwapShareAmountOutResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenInAmount", 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 - } - if err := m.TokenInAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgExitSwapShareAmountIn) 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: MsgExitSwapShareAmountIn: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgExitSwapShareAmountIn: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - 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 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOutDenom", 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.TokenOutDenom = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShareInAmount", 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 - } - if err := m.ShareInAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOutMinAmount", 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 - } - if err := m.TokenOutMinAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgExitSwapShareAmountInResponse) 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: MsgExitSwapShareAmountInResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgExitSwapShareAmountInResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOutAmount", 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 - } - if err := m.TokenOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgExitSwapExternAmountOut) 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: MsgExitSwapExternAmountOut: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgExitSwapExternAmountOut: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - 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 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOut", 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.TokenOut.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShareInMaxAmount", 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 - } - if err := m.ShareInMaxAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgExitSwapExternAmountOutResponse) 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: MsgExitSwapExternAmountOutResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgExitSwapExternAmountOutResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShareInAmount", 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 - } - if err := m.ShareInAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (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/tests/interchaintest/osmosistypes/gamm/v2types/query.pb.go b/tests/interchaintest/osmosistypes/gamm/v2types/query.pb.go deleted file mode 100644 index 4f10afcc..00000000 --- a/tests/interchaintest/osmosistypes/gamm/v2types/query.pb.go +++ /dev/null @@ -1,692 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: osmosis/gamm/v2/query.proto - -package v2types - -import ( - context "context" - fmt "fmt" - _ "github.com/cosmos/cosmos-proto" - _ "github.com/cosmos/cosmos-sdk/codec/types" - _ "github.com/cosmos/cosmos-sdk/types" - _ "github.com/cosmos/cosmos-sdk/types/query" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" - _ "github.com/notional-labs/fee-abstraction/tests/interchaintest/osmosistypes/gamm/types" - _ "google.golang.org/genproto/googleapis/api/annotations" - 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 - -// Deprecated: please use alternate in x/poolmanager -// -// Deprecated: Do not use. -type QuerySpotPriceRequest struct { - PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - BaseAssetDenom string `protobuf:"bytes,2,opt,name=base_asset_denom,json=baseAssetDenom,proto3" json:"base_asset_denom,omitempty" yaml:"base_asset_denom"` - QuoteAssetDenom string `protobuf:"bytes,3,opt,name=quote_asset_denom,json=quoteAssetDenom,proto3" json:"quote_asset_denom,omitempty" yaml:"quote_asset_denom"` -} - -func (m *QuerySpotPriceRequest) Reset() { *m = QuerySpotPriceRequest{} } -func (m *QuerySpotPriceRequest) String() string { return proto.CompactTextString(m) } -func (*QuerySpotPriceRequest) ProtoMessage() {} -func (*QuerySpotPriceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_49ff000e88fc374c, []int{0} -} -func (m *QuerySpotPriceRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QuerySpotPriceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QuerySpotPriceRequest.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 *QuerySpotPriceRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_QuerySpotPriceRequest.Merge(m, src) -} -func (m *QuerySpotPriceRequest) XXX_Size() int { - return m.Size() -} -func (m *QuerySpotPriceRequest) XXX_DiscardUnknown() { - xxx_messageInfo_QuerySpotPriceRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_QuerySpotPriceRequest proto.InternalMessageInfo - -func (m *QuerySpotPriceRequest) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -func (m *QuerySpotPriceRequest) GetBaseAssetDenom() string { - if m != nil { - return m.BaseAssetDenom - } - return "" -} - -func (m *QuerySpotPriceRequest) GetQuoteAssetDenom() string { - if m != nil { - return m.QuoteAssetDenom - } - return "" -} - -// Depreacted: please use alternate in x/poolmanager -// -// Deprecated: Do not use. -type QuerySpotPriceResponse struct { - // String of the Dec. Ex) 10.203uatom - SpotPrice string `protobuf:"bytes,1,opt,name=spot_price,json=spotPrice,proto3" json:"spot_price,omitempty" yaml:"spot_price"` -} - -func (m *QuerySpotPriceResponse) Reset() { *m = QuerySpotPriceResponse{} } -func (m *QuerySpotPriceResponse) String() string { return proto.CompactTextString(m) } -func (*QuerySpotPriceResponse) ProtoMessage() {} -func (*QuerySpotPriceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_49ff000e88fc374c, []int{1} -} -func (m *QuerySpotPriceResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *QuerySpotPriceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_QuerySpotPriceResponse.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 *QuerySpotPriceResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_QuerySpotPriceResponse.Merge(m, src) -} -func (m *QuerySpotPriceResponse) XXX_Size() int { - return m.Size() -} -func (m *QuerySpotPriceResponse) XXX_DiscardUnknown() { - xxx_messageInfo_QuerySpotPriceResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_QuerySpotPriceResponse proto.InternalMessageInfo - -func (m *QuerySpotPriceResponse) GetSpotPrice() string { - if m != nil { - return m.SpotPrice - } - return "" -} - -func init() { - proto.RegisterType((*QuerySpotPriceRequest)(nil), "osmosis.gamm.v2.QuerySpotPriceRequest") - proto.RegisterType((*QuerySpotPriceResponse)(nil), "osmosis.gamm.v2.QuerySpotPriceResponse") -} - -func init() { proto.RegisterFile("osmosis/gamm/v2/query.proto", fileDescriptor_49ff000e88fc374c) } - -var fileDescriptor_49ff000e88fc374c = []byte{ - // 468 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0x41, 0x6f, 0xd3, 0x30, - 0x14, 0xc7, 0xeb, 0x02, 0x43, 0xf5, 0x61, 0x63, 0x16, 0x83, 0xd2, 0x8d, 0x74, 0xca, 0x81, 0x0d, - 0x10, 0xb1, 0x1a, 0xe0, 0xb2, 0x1b, 0x15, 0x48, 0x20, 0x71, 0x80, 0x70, 0xe3, 0x12, 0x39, 0xad, - 0x09, 0x96, 0x9a, 0x3c, 0xb7, 0x76, 0xaa, 0x55, 0x88, 0x0b, 0x27, 0x8e, 0x93, 0xb8, 0xf1, 0x89, - 0x38, 0x4e, 0xe2, 0x02, 0x97, 0x0a, 0xb5, 0x7c, 0x82, 0x7e, 0x02, 0x64, 0x3b, 0xe9, 0x58, 0x40, - 0xda, 0x2d, 0x7e, 0xbf, 0xbf, 0xff, 0xff, 0xf7, 0x9c, 0x87, 0x77, 0x41, 0x65, 0xa0, 0x84, 0xa2, - 0x29, 0xcb, 0x32, 0x3a, 0x0d, 0xe9, 0xb8, 0xe0, 0x93, 0x59, 0x20, 0x27, 0xa0, 0x81, 0x6c, 0x95, - 0x30, 0x30, 0x30, 0x98, 0x86, 0x9d, 0xeb, 0x29, 0xa4, 0x60, 0x19, 0x35, 0x5f, 0x4e, 0xd6, 0xb9, - 0x7d, 0xde, 0xa3, 0x97, 0x70, 0xcd, 0x7a, 0x54, 0x1f, 0x97, 0xd8, 0x1b, 0x58, 0x4e, 0x13, 0xa6, - 0xf8, 0x9a, 0x0e, 0x40, 0xe4, 0x25, 0xbf, 0xf7, 0x37, 0xb7, 0xf1, 0x6b, 0x95, 0x64, 0xa9, 0xc8, - 0x99, 0x16, 0x50, 0x69, 0xf7, 0x52, 0x80, 0x74, 0xc4, 0x29, 0x93, 0x82, 0xb2, 0x3c, 0x07, 0x6d, - 0xa1, 0x2a, 0xe9, 0xad, 0x92, 0xda, 0x53, 0x52, 0xbc, 0xa3, 0x2c, 0x9f, 0x55, 0xc8, 0x85, 0xc4, - 0xae, 0x79, 0x77, 0x70, 0xc8, 0xff, 0x89, 0xf0, 0xce, 0x6b, 0x13, 0xfb, 0x46, 0x82, 0x7e, 0x35, - 0x11, 0x03, 0x1e, 0xf1, 0x71, 0xc1, 0x95, 0x26, 0xf7, 0xf1, 0x55, 0x09, 0x30, 0x8a, 0xc5, 0xb0, - 0x8d, 0xf6, 0xd1, 0xe1, 0xe5, 0x3e, 0x59, 0xcd, 0xbb, 0x9b, 0x33, 0x96, 0x8d, 0x8e, 0xfc, 0x12, - 0xf8, 0xd1, 0x86, 0xf9, 0x7a, 0x31, 0x24, 0xcf, 0xf0, 0x35, 0x33, 0x41, 0xcc, 0x94, 0xe2, 0x3a, - 0x1e, 0xf2, 0x1c, 0xb2, 0x76, 0x73, 0x1f, 0x1d, 0xb6, 0xfa, 0xbb, 0xab, 0x79, 0xf7, 0xa6, 0xbb, - 0x55, 0x57, 0xf8, 0xd1, 0xa6, 0x29, 0x3d, 0x31, 0x95, 0xa7, 0xa6, 0x40, 0x9e, 0xe3, 0xed, 0x71, - 0x01, 0xfa, 0xbc, 0xcf, 0x25, 0xeb, 0xb3, 0xb7, 0x9a, 0x77, 0xdb, 0xce, 0xe7, 0x1f, 0x89, 0x1f, - 0x6d, 0xd9, 0xda, 0x99, 0xd3, 0x51, 0xb3, 0x8d, 0xfc, 0x08, 0xdf, 0xa8, 0x8f, 0xa6, 0x24, 0xe4, - 0x8a, 0x93, 0x47, 0x18, 0x2b, 0x09, 0x3a, 0x96, 0xa6, 0x6a, 0xc7, 0x6b, 0xf5, 0x77, 0x56, 0xf3, - 0xee, 0xb6, 0x0b, 0x38, 0x63, 0x7e, 0xd4, 0x52, 0xd5, 0x6d, 0xe3, 0x19, 0x7e, 0x45, 0xf8, 0x8a, - 0x35, 0x25, 0x27, 0x08, 0xb7, 0xd6, 0xce, 0xe4, 0x4e, 0x50, 0x5b, 0x97, 0xe0, 0xbf, 0xaf, 0xda, - 0x39, 0xb8, 0x50, 0xe7, 0x5a, 0xf4, 0xc3, 0x4f, 0xdf, 0x7f, 0x7f, 0x69, 0xde, 0x25, 0x07, 0xb4, - 0xbe, 0xa4, 0xe6, 0xc9, 0x15, 0xfd, 0x50, 0xfe, 0x83, 0x8f, 0xd4, 0x36, 0xaa, 0x3e, 0x37, 0x51, - 0xff, 0xe5, 0xb7, 0x85, 0x87, 0x4e, 0x17, 0x1e, 0xfa, 0xb5, 0xf0, 0xd0, 0xc9, 0xd2, 0x6b, 0x9c, - 0x2e, 0xbd, 0xc6, 0x8f, 0xa5, 0xd7, 0x78, 0x1b, 0xa6, 0x42, 0xbf, 0x2f, 0x92, 0x60, 0x00, 0x59, - 0xe5, 0xf7, 0x60, 0xc4, 0x12, 0xb5, 0x36, 0x9f, 0xf6, 0x1e, 0xd3, 0xe3, 0x2a, 0x42, 0xcf, 0x24, - 0x57, 0xc9, 0x86, 0xdd, 0x90, 0x87, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x7d, 0x9a, 0x16, 0x18, - 0x26, 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 - -// QueryClient is the client API for Query service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type QueryClient interface { - // Deprecated: please use alternate in x/poolmanager - SpotPrice(ctx context.Context, in *QuerySpotPriceRequest, opts ...grpc.CallOption) (*QuerySpotPriceResponse, error) -} - -type queryClient struct { - cc grpc1.ClientConn -} - -func NewQueryClient(cc grpc1.ClientConn) QueryClient { - return &queryClient{cc} -} - -// Deprecated: Do not use. -func (c *queryClient) SpotPrice(ctx context.Context, in *QuerySpotPriceRequest, opts ...grpc.CallOption) (*QuerySpotPriceResponse, error) { - out := new(QuerySpotPriceResponse) - err := c.cc.Invoke(ctx, "/osmosis.gamm.v2.Query/SpotPrice", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// QueryServer is the server API for Query service. -type QueryServer interface { - // Deprecated: please use alternate in x/poolmanager - SpotPrice(context.Context, *QuerySpotPriceRequest) (*QuerySpotPriceResponse, error) -} - -// UnimplementedQueryServer can be embedded to have forward compatible implementations. -type UnimplementedQueryServer struct { -} - -func (*UnimplementedQueryServer) SpotPrice(ctx context.Context, req *QuerySpotPriceRequest) (*QuerySpotPriceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SpotPrice not implemented") -} - -func RegisterQueryServer(s grpc1.Server, srv QueryServer) { - s.RegisterService(&_Query_serviceDesc, srv) -} - -func _Query_SpotPrice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QuerySpotPriceRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).SpotPrice(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/osmosis.gamm.v2.Query/SpotPrice", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).SpotPrice(ctx, req.(*QuerySpotPriceRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "osmosis.gamm.v2.Query", - HandlerType: (*QueryServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "SpotPrice", - Handler: _Query_SpotPrice_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "osmosis/gamm/v2/query.proto", -} - -func (m *QuerySpotPriceRequest) 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 *QuerySpotPriceRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QuerySpotPriceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.QuoteAssetDenom) > 0 { - i -= len(m.QuoteAssetDenom) - copy(dAtA[i:], m.QuoteAssetDenom) - i = encodeVarintQuery(dAtA, i, uint64(len(m.QuoteAssetDenom))) - i-- - dAtA[i] = 0x1a - } - if len(m.BaseAssetDenom) > 0 { - i -= len(m.BaseAssetDenom) - copy(dAtA[i:], m.BaseAssetDenom) - i = encodeVarintQuery(dAtA, i, uint64(len(m.BaseAssetDenom))) - i-- - dAtA[i] = 0x12 - } - if m.PoolId != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *QuerySpotPriceResponse) 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 *QuerySpotPriceResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QuerySpotPriceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.SpotPrice) > 0 { - i -= len(m.SpotPrice) - copy(dAtA[i:], m.SpotPrice) - i = encodeVarintQuery(dAtA, i, uint64(len(m.SpotPrice))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { - offset -= sovQuery(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *QuerySpotPriceRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PoolId != 0 { - n += 1 + sovQuery(uint64(m.PoolId)) - } - l = len(m.BaseAssetDenom) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - l = len(m.QuoteAssetDenom) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func (m *QuerySpotPriceResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.SpotPrice) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } - return n -} - -func sovQuery(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozQuery(x uint64) (n int) { - return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *QuerySpotPriceRequest) 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 ErrIntOverflowQuery - } - 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: QuerySpotPriceRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QuerySpotPriceRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field BaseAssetDenom", 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.BaseAssetDenom = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field QuoteAssetDenom", 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.QuoteAssetDenom = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QuerySpotPriceResponse) 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 ErrIntOverflowQuery - } - 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: QuerySpotPriceResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QuerySpotPriceResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SpotPrice", 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.SpotPrice = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipQuery(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, ErrIntOverflowQuery - } - 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, ErrIntOverflowQuery - } - 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, ErrIntOverflowQuery - } - 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, ErrInvalidLengthQuery - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupQuery - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthQuery - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") -) diff --git a/tests/interchaintest/osmosistypes/gamm/v2types/query.pb.gw.go b/tests/interchaintest/osmosistypes/gamm/v2types/query.pb.gw.go deleted file mode 100644 index 2195093b..00000000 --- a/tests/interchaintest/osmosistypes/gamm/v2types/query.pb.gw.go +++ /dev/null @@ -1,207 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: osmosis/gamm/v2/query.proto - -/* -Package v2types is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ -package v2types - -import ( - "context" - "io" - "net/http" - - "github.com/golang/protobuf/descriptor" - "github.com/golang/protobuf/proto" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/grpc-ecosystem/grpc-gateway/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = descriptor.ForMessage -var _ = metadata.Join - -var ( - filter_Query_SpotPrice_0 = &utilities.DoubleArray{Encoding: map[string]int{"pool_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) - -func request_Query_SpotPrice_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QuerySpotPriceRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pool_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") - } - - protoReq.PoolId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SpotPrice_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.SpotPrice(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_SpotPrice_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QuerySpotPriceRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["pool_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") - } - - protoReq.PoolId, err = runtime.Uint64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_SpotPrice_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.SpotPrice(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". -// UnaryRPC :call QueryServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. -func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { - - mux.Handle("GET", pattern_Query_SpotPrice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Query_SpotPrice_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_SpotPrice_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterQueryHandler(ctx, mux, conn) -} - -// RegisterQueryHandler registers the http handlers for service Query to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn)) -} - -// RegisterQueryHandlerClient registers the http handlers for service Query -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "QueryClient" to call the correct interceptors. -func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { - - mux.Handle("GET", pattern_Query_SpotPrice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Query_SpotPrice_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_SpotPrice_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_Query_SpotPrice_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"osmosis", "gamm", "v2", "pools", "pool_id", "prices"}, "", runtime.AssumeColonVerbOpt(false))) -) - -var ( - forward_Query_SpotPrice_0 = runtime.ForwardResponseMessage -) diff --git a/tests/interchaintest/osmosistypes/poolmanager/types/swap_route.pb.go b/tests/interchaintest/osmosistypes/poolmanager/types/swap_route.pb.go deleted file mode 100644 index f8e87f27..00000000 --- a/tests/interchaintest/osmosistypes/poolmanager/types/swap_route.pb.go +++ /dev/null @@ -1,1032 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: osmosis/poolmanager/v1beta1/swap_route.proto - -package types - -import ( - fmt "fmt" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - 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 - -type SwapAmountInRoute struct { - PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - TokenOutDenom string `protobuf:"bytes,2,opt,name=token_out_denom,json=tokenOutDenom,proto3" json:"token_out_denom,omitempty" yaml:"token_out_denom"` -} - -func (m *SwapAmountInRoute) Reset() { *m = SwapAmountInRoute{} } -func (m *SwapAmountInRoute) String() string { return proto.CompactTextString(m) } -func (*SwapAmountInRoute) ProtoMessage() {} -func (*SwapAmountInRoute) Descriptor() ([]byte, []int) { - return fileDescriptor_cddd97a9a05492a8, []int{0} -} -func (m *SwapAmountInRoute) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *SwapAmountInRoute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_SwapAmountInRoute.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 *SwapAmountInRoute) XXX_Merge(src proto.Message) { - xxx_messageInfo_SwapAmountInRoute.Merge(m, src) -} -func (m *SwapAmountInRoute) XXX_Size() int { - return m.Size() -} -func (m *SwapAmountInRoute) XXX_DiscardUnknown() { - xxx_messageInfo_SwapAmountInRoute.DiscardUnknown(m) -} - -var xxx_messageInfo_SwapAmountInRoute proto.InternalMessageInfo - -func (m *SwapAmountInRoute) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -func (m *SwapAmountInRoute) GetTokenOutDenom() string { - if m != nil { - return m.TokenOutDenom - } - return "" -} - -type SwapAmountOutRoute struct { - PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - TokenInDenom string `protobuf:"bytes,2,opt,name=token_in_denom,json=tokenInDenom,proto3" json:"token_in_denom,omitempty" yaml:"token_in_denom"` -} - -func (m *SwapAmountOutRoute) Reset() { *m = SwapAmountOutRoute{} } -func (m *SwapAmountOutRoute) String() string { return proto.CompactTextString(m) } -func (*SwapAmountOutRoute) ProtoMessage() {} -func (*SwapAmountOutRoute) Descriptor() ([]byte, []int) { - return fileDescriptor_cddd97a9a05492a8, []int{1} -} -func (m *SwapAmountOutRoute) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *SwapAmountOutRoute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_SwapAmountOutRoute.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 *SwapAmountOutRoute) XXX_Merge(src proto.Message) { - xxx_messageInfo_SwapAmountOutRoute.Merge(m, src) -} -func (m *SwapAmountOutRoute) XXX_Size() int { - return m.Size() -} -func (m *SwapAmountOutRoute) XXX_DiscardUnknown() { - xxx_messageInfo_SwapAmountOutRoute.DiscardUnknown(m) -} - -var xxx_messageInfo_SwapAmountOutRoute proto.InternalMessageInfo - -func (m *SwapAmountOutRoute) GetPoolId() uint64 { - if m != nil { - return m.PoolId - } - return 0 -} - -func (m *SwapAmountOutRoute) GetTokenInDenom() string { - if m != nil { - return m.TokenInDenom - } - return "" -} - -type SwapAmountInSplitRoute struct { - Pools []SwapAmountInRoute `protobuf:"bytes,1,rep,name=pools,proto3" json:"pools" yaml:"pools"` - TokenInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,2,opt,name=token_in_amount,json=tokenInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_in_amount" yaml:"token_in_amount"` -} - -func (m *SwapAmountInSplitRoute) Reset() { *m = SwapAmountInSplitRoute{} } -func (m *SwapAmountInSplitRoute) String() string { return proto.CompactTextString(m) } -func (*SwapAmountInSplitRoute) ProtoMessage() {} -func (*SwapAmountInSplitRoute) Descriptor() ([]byte, []int) { - return fileDescriptor_cddd97a9a05492a8, []int{2} -} -func (m *SwapAmountInSplitRoute) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *SwapAmountInSplitRoute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_SwapAmountInSplitRoute.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 *SwapAmountInSplitRoute) XXX_Merge(src proto.Message) { - xxx_messageInfo_SwapAmountInSplitRoute.Merge(m, src) -} -func (m *SwapAmountInSplitRoute) XXX_Size() int { - return m.Size() -} -func (m *SwapAmountInSplitRoute) XXX_DiscardUnknown() { - xxx_messageInfo_SwapAmountInSplitRoute.DiscardUnknown(m) -} - -var xxx_messageInfo_SwapAmountInSplitRoute proto.InternalMessageInfo - -func (m *SwapAmountInSplitRoute) GetPools() []SwapAmountInRoute { - if m != nil { - return m.Pools - } - return nil -} - -type SwapAmountOutSplitRoute struct { - Pools []SwapAmountOutRoute `protobuf:"bytes,1,rep,name=pools,proto3" json:"pools" yaml:"pools"` - TokenOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,2,opt,name=token_out_amount,json=tokenOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_out_amount" yaml:"token_out_amount"` -} - -func (m *SwapAmountOutSplitRoute) Reset() { *m = SwapAmountOutSplitRoute{} } -func (m *SwapAmountOutSplitRoute) String() string { return proto.CompactTextString(m) } -func (*SwapAmountOutSplitRoute) ProtoMessage() {} -func (*SwapAmountOutSplitRoute) Descriptor() ([]byte, []int) { - return fileDescriptor_cddd97a9a05492a8, []int{3} -} -func (m *SwapAmountOutSplitRoute) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *SwapAmountOutSplitRoute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_SwapAmountOutSplitRoute.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 *SwapAmountOutSplitRoute) XXX_Merge(src proto.Message) { - xxx_messageInfo_SwapAmountOutSplitRoute.Merge(m, src) -} -func (m *SwapAmountOutSplitRoute) XXX_Size() int { - return m.Size() -} -func (m *SwapAmountOutSplitRoute) XXX_DiscardUnknown() { - xxx_messageInfo_SwapAmountOutSplitRoute.DiscardUnknown(m) -} - -var xxx_messageInfo_SwapAmountOutSplitRoute proto.InternalMessageInfo - -func (m *SwapAmountOutSplitRoute) GetPools() []SwapAmountOutRoute { - if m != nil { - return m.Pools - } - return nil -} - -func init() { - proto.RegisterType((*SwapAmountInRoute)(nil), "osmosis.poolmanager.v1beta1.SwapAmountInRoute") - proto.RegisterType((*SwapAmountOutRoute)(nil), "osmosis.poolmanager.v1beta1.SwapAmountOutRoute") - proto.RegisterType((*SwapAmountInSplitRoute)(nil), "osmosis.poolmanager.v1beta1.SwapAmountInSplitRoute") - proto.RegisterType((*SwapAmountOutSplitRoute)(nil), "osmosis.poolmanager.v1beta1.SwapAmountOutSplitRoute") -} - -func init() { - proto.RegisterFile("osmosis/poolmanager/v1beta1/swap_route.proto", fileDescriptor_cddd97a9a05492a8) -} - -var fileDescriptor_cddd97a9a05492a8 = []byte{ - // 446 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x93, 0x4d, 0x8b, 0xd3, 0x40, - 0x18, 0xc7, 0x33, 0xbe, 0xac, 0x38, 0xae, 0x55, 0xc3, 0xba, 0x5b, 0x57, 0x48, 0x4a, 0x0e, 0x52, - 0xd0, 0xce, 0x50, 0x45, 0x04, 0x2f, 0x62, 0xf0, 0x60, 0x4e, 0xc5, 0xf4, 0x56, 0x0f, 0x61, 0xd2, - 0x84, 0x18, 0x9a, 0xcc, 0x84, 0xce, 0xa4, 0xb5, 0x57, 0xf1, 0x03, 0xf8, 0xb1, 0x7a, 0xec, 0x51, - 0x3c, 0x04, 0x69, 0xc1, 0x8b, 0xb7, 0x7c, 0x02, 0xc9, 0x24, 0xb1, 0x49, 0x85, 0xa2, 0x9e, 0x32, - 0x2f, 0xcf, 0xcb, 0xef, 0xff, 0xcf, 0x33, 0xf0, 0x09, 0xe3, 0x31, 0xe3, 0x21, 0xc7, 0x09, 0x63, - 0x51, 0x4c, 0x28, 0x09, 0xfc, 0x39, 0x5e, 0x0c, 0x5d, 0x5f, 0x90, 0x21, 0xe6, 0x4b, 0x92, 0x38, - 0x73, 0x96, 0x0a, 0x1f, 0x25, 0x73, 0x26, 0x98, 0xfa, 0xb0, 0x8a, 0x46, 0x8d, 0x68, 0x54, 0x45, - 0x5f, 0x9e, 0x05, 0x2c, 0x60, 0x32, 0x0e, 0x17, 0xab, 0x32, 0xc5, 0xf8, 0x0c, 0xe0, 0xbd, 0xf1, - 0x92, 0x24, 0xaf, 0x63, 0x96, 0x52, 0x61, 0x51, 0xbb, 0x28, 0xa7, 0x3e, 0x86, 0x37, 0x8a, 0x12, - 0x4e, 0xe8, 0x75, 0x41, 0x0f, 0xf4, 0xaf, 0x99, 0x6a, 0x9e, 0xe9, 0x9d, 0x15, 0x89, 0xa3, 0x97, - 0x46, 0x75, 0x61, 0xd8, 0x27, 0xc5, 0xca, 0xf2, 0x54, 0x13, 0xde, 0x11, 0x6c, 0xe6, 0x53, 0x87, - 0xa5, 0xc2, 0xf1, 0x7c, 0xca, 0xe2, 0xee, 0x95, 0x1e, 0xe8, 0xdf, 0x34, 0x2f, 0xf3, 0x4c, 0x3f, - 0x2f, 0x93, 0x0e, 0x02, 0x0c, 0xfb, 0xb6, 0x3c, 0x19, 0xa5, 0xe2, 0x8d, 0xdc, 0x7f, 0x02, 0x50, - 0xdd, 0x63, 0x8c, 0x52, 0xf1, 0x1f, 0x1c, 0xaf, 0x60, 0xa7, 0x6c, 0x13, 0xd2, 0x16, 0xc6, 0x83, - 0x3c, 0xd3, 0xef, 0x37, 0x31, 0xea, 0x7b, 0xc3, 0x3e, 0x95, 0x07, 0x16, 0x2d, 0x21, 0x7e, 0x00, - 0x78, 0xde, 0xf4, 0x62, 0x9c, 0x44, 0x61, 0x05, 0x32, 0x81, 0xd7, 0x8b, 0x2e, 0xbc, 0x0b, 0x7a, - 0x57, 0xfb, 0xb7, 0x9e, 0x22, 0x74, 0xc4, 0x69, 0xf4, 0x87, 0x9f, 0xe6, 0xd9, 0x3a, 0xd3, 0x95, - 0x3c, 0xd3, 0x4f, 0xf7, 0xe8, 0xdc, 0xb0, 0xcb, 0x92, 0x6a, 0x52, 0xfb, 0x17, 0x52, 0x87, 0xc8, - 0xb4, 0x0a, 0xfc, 0x6d, 0x91, 0xf5, 0x2d, 0xd3, 0x1f, 0x05, 0xa1, 0xf8, 0x90, 0xba, 0x68, 0xca, - 0x62, 0x3c, 0x95, 0x8d, 0xab, 0xcf, 0x80, 0x7b, 0x33, 0x2c, 0x56, 0x89, 0xcf, 0x91, 0x45, 0xc5, - 0xa1, 0xdb, 0xbf, 0xcb, 0xd5, 0x6e, 0x5b, 0xb4, 0xa4, 0x32, 0x7e, 0x02, 0x78, 0xd1, 0x72, 0xbb, - 0xa1, 0xf4, 0x7d, 0x5b, 0x29, 0xfe, 0x4b, 0xa5, 0xf5, 0x2f, 0x3b, 0x2e, 0x95, 0xc3, 0xbb, 0xfb, - 0x49, 0x68, 0x69, 0xb5, 0xfe, 0x59, 0xeb, 0xc5, 0xe1, 0x64, 0xd5, 0x62, 0x3b, 0xf5, 0x68, 0x95, - 0x64, 0xe6, 0xbb, 0xf5, 0x56, 0x03, 0x9b, 0xad, 0x06, 0xbe, 0x6f, 0x35, 0xf0, 0x65, 0xa7, 0x29, - 0x9b, 0x9d, 0xa6, 0x7c, 0xdd, 0x69, 0xca, 0xe4, 0x45, 0xa3, 0x59, 0x25, 0x73, 0x10, 0x11, 0x97, - 0xd7, 0x1b, 0xbc, 0x18, 0x3e, 0xc7, 0x1f, 0x5b, 0x6f, 0x4f, 0x12, 0xb8, 0x27, 0xf2, 0xf1, 0x3c, - 0xfb, 0x15, 0x00, 0x00, 0xff, 0xff, 0x05, 0xfe, 0x01, 0x2a, 0x9f, 0x03, 0x00, 0x00, -} - -func (m *SwapAmountInRoute) 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 *SwapAmountInRoute) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SwapAmountInRoute) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TokenOutDenom) > 0 { - i -= len(m.TokenOutDenom) - copy(dAtA[i:], m.TokenOutDenom) - i = encodeVarintSwapRoute(dAtA, i, uint64(len(m.TokenOutDenom))) - i-- - dAtA[i] = 0x12 - } - if m.PoolId != 0 { - i = encodeVarintSwapRoute(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *SwapAmountOutRoute) 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 *SwapAmountOutRoute) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SwapAmountOutRoute) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.TokenInDenom) > 0 { - i -= len(m.TokenInDenom) - copy(dAtA[i:], m.TokenInDenom) - i = encodeVarintSwapRoute(dAtA, i, uint64(len(m.TokenInDenom))) - i-- - dAtA[i] = 0x12 - } - if m.PoolId != 0 { - i = encodeVarintSwapRoute(dAtA, i, uint64(m.PoolId)) - i-- - dAtA[i] = 0x8 - } - return len(dAtA) - i, nil -} - -func (m *SwapAmountInSplitRoute) 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 *SwapAmountInSplitRoute) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SwapAmountInSplitRoute) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.TokenInAmount.Size() - i -= size - if _, err := m.TokenInAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintSwapRoute(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - if len(m.Pools) > 0 { - for iNdEx := len(m.Pools) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Pools[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSwapRoute(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *SwapAmountOutSplitRoute) 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 *SwapAmountOutSplitRoute) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SwapAmountOutSplitRoute) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size := m.TokenOutAmount.Size() - i -= size - if _, err := m.TokenOutAmount.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintSwapRoute(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - if len(m.Pools) > 0 { - for iNdEx := len(m.Pools) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Pools[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSwapRoute(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func encodeVarintSwapRoute(dAtA []byte, offset int, v uint64) int { - offset -= sovSwapRoute(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *SwapAmountInRoute) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PoolId != 0 { - n += 1 + sovSwapRoute(uint64(m.PoolId)) - } - l = len(m.TokenOutDenom) - if l > 0 { - n += 1 + l + sovSwapRoute(uint64(l)) - } - return n -} - -func (m *SwapAmountOutRoute) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.PoolId != 0 { - n += 1 + sovSwapRoute(uint64(m.PoolId)) - } - l = len(m.TokenInDenom) - if l > 0 { - n += 1 + l + sovSwapRoute(uint64(l)) - } - return n -} - -func (m *SwapAmountInSplitRoute) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Pools) > 0 { - for _, e := range m.Pools { - l = e.Size() - n += 1 + l + sovSwapRoute(uint64(l)) - } - } - l = m.TokenInAmount.Size() - n += 1 + l + sovSwapRoute(uint64(l)) - return n -} - -func (m *SwapAmountOutSplitRoute) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Pools) > 0 { - for _, e := range m.Pools { - l = e.Size() - n += 1 + l + sovSwapRoute(uint64(l)) - } - } - l = m.TokenOutAmount.Size() - n += 1 + l + sovSwapRoute(uint64(l)) - return n -} - -func sovSwapRoute(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozSwapRoute(x uint64) (n int) { - return sovSwapRoute(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *SwapAmountInRoute) 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 ErrIntOverflowSwapRoute - } - 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: SwapAmountInRoute: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SwapAmountInRoute: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSwapRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOutDenom", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSwapRoute - } - 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 ErrInvalidLengthSwapRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthSwapRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TokenOutDenom = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipSwapRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSwapRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SwapAmountOutRoute) 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 ErrIntOverflowSwapRoute - } - 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: SwapAmountOutRoute: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SwapAmountOutRoute: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) - } - m.PoolId = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSwapRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.PoolId |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenInDenom", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSwapRoute - } - 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 ErrInvalidLengthSwapRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthSwapRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TokenInDenom = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipSwapRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSwapRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SwapAmountInSplitRoute) 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 ErrIntOverflowSwapRoute - } - 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: SwapAmountInSplitRoute: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SwapAmountInSplitRoute: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pools", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSwapRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSwapRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSwapRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Pools = append(m.Pools, SwapAmountInRoute{}) - if err := m.Pools[len(m.Pools)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenInAmount", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSwapRoute - } - 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 ErrInvalidLengthSwapRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthSwapRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.TokenInAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipSwapRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSwapRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SwapAmountOutSplitRoute) 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 ErrIntOverflowSwapRoute - } - 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: SwapAmountOutSplitRoute: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SwapAmountOutSplitRoute: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pools", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSwapRoute - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthSwapRoute - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthSwapRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Pools = append(m.Pools, SwapAmountOutRoute{}) - if err := m.Pools[len(m.Pools)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOutAmount", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSwapRoute - } - 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 ErrInvalidLengthSwapRoute - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthSwapRoute - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.TokenOutAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipSwapRoute(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthSwapRoute - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipSwapRoute(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, ErrIntOverflowSwapRoute - } - 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, ErrIntOverflowSwapRoute - } - 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, ErrIntOverflowSwapRoute - } - 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, ErrInvalidLengthSwapRoute - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupSwapRoute - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthSwapRoute - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthSwapRoute = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowSwapRoute = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupSwapRoute = fmt.Errorf("proto: unexpected end of group") -) diff --git a/tests/interchaintest/packet_foward_test.go b/tests/interchaintest/packet_foward_test.go index 146321c3..c1644d0b 100644 --- a/tests/interchaintest/packet_foward_test.go +++ b/tests/interchaintest/packet_foward_test.go @@ -7,7 +7,7 @@ import ( sdktypes "github.com/cosmos/cosmos-sdk/types" transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" - feeabsCli "github.com/notional-labs/fee-abstraction/tests/interchaintest/feeabs" + feeabsCli "github.com/osmosis-labs/fee-abstraction/tests/interchaintest/feeabs" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v7/testutil" "github.com/stretchr/testify/require" diff --git a/tests/interchaintest/setup.go b/tests/interchaintest/setup.go index d3b5077c..a390660b 100644 --- a/tests/interchaintest/setup.go +++ b/tests/interchaintest/setup.go @@ -1,17 +1,26 @@ package interchaintest import ( + "context" "encoding/json" "fmt" "os" "strings" + "testing" - "cosmossdk.io/math" - "github.com/cosmos/cosmos-sdk/types/module/testutil" + sdktypes "github.com/cosmos/cosmos-sdk/types" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/icza/dyno" feeabstype "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" + "github.com/strangelove-ventures/interchaintest/v7" + "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos/wasm" "github.com/strangelove-ventures/interchaintest/v7/ibc" + "github.com/strangelove-ventures/interchaintest/v7/relayer" + "github.com/strangelove-ventures/interchaintest/v7/testreporter" + "github.com/strangelove-ventures/interchaintest/v7/testutil" + "github.com/stretchr/testify/require" + "go.uber.org/zap/zaptest" ) type HasPacketForwarding struct { @@ -32,8 +41,12 @@ const ( ) var ( - FFeeabsMainRepo = "osmolabs/fee-abstraction" - FeeabsICTestRepo = "osmolabs/fee-abstraction-ictest" + FFeeabsMainRepo = "osmolabs/fee-abstraction" + FeeabsICTestRepo = "osmolabs/fee-abstraction-ictest" + IBCRelayerImage = "ghcr.io/cosmos/relayer" + IBCRelayerVersion = "latest" + GaiaImageVersion = "v14.1.0" + OsmosisImageVersion = "v22.0.1" repo, version = GetDockerImageInfo() @@ -65,12 +78,12 @@ var ( pathFeeabsOsmosis = "feeabs-osmosis" pathOsmosisGaia = "osmosis-gaia" genesisWalletAmount = int64(10_000_000) - amountToSend = math.NewInt(1_000_000_000) + amountToSend = int64(1_000_000_000) ) // feeabsEncoding registers the feeabs specific module codecs so that the associated types and msgs // will be supported when writing to the blocksdb sqlite database. -func feeabsEncoding() *testutil.TestEncodingConfig { +func feeabsEncoding() *moduletestutil.TestEncodingConfig { cfg := wasm.WasmEncoding() // register custom types @@ -79,7 +92,7 @@ func feeabsEncoding() *testutil.TestEncodingConfig { return cfg } -func osmosisEncoding() *testutil.TestEncodingConfig { +func osmosisEncoding() *moduletestutil.TestEncodingConfig { cfg := wasm.WasmEncoding() // gammtypes.RegisterInterfaces(cfg.InterfaceRegistry) @@ -127,3 +140,322 @@ func modifyGenesisShortProposals(votingPeriod string, maxDepositPeriod string) f return out, nil } } + +func SetupChain(t *testing.T, ctx context.Context) ([]ibc.Chain, []ibc.Wallet, []ibc.ChannelOutput) { + client, network := interchaintest.DockerSetup(t) + + rep := testreporter.NewNopReporter() + eRep := rep.RelayerExecReporter(t) + + // Create chain factory with Feeabs and Gaia + numVals := 1 + numFullNodes := 1 + gasAdjustment := 2.0 + + cf := interchaintest.NewBuiltinChainFactory(zaptest.NewLogger(t), []*interchaintest.ChainSpec{ + { + Name: "feeabs", + ChainConfig: feeabsConfig, + NumValidators: &numVals, + NumFullNodes: &numFullNodes, + }, + { + Name: "gaia", + Version: GaiaImageVersion, + ChainConfig: ibc.ChainConfig{ + GasPrices: "0.0uatom", + }, + NumValidators: &numVals, + NumFullNodes: &numFullNodes, + }, + { + Name: "osmosis", + Version: OsmosisImageVersion, + ChainConfig: ibc.ChainConfig{ + GasPrices: "0.005uosmo", + EncodingConfig: osmosisEncoding(), + }, + GasAdjustment: &gasAdjustment, + NumValidators: &numVals, + NumFullNodes: &numFullNodes, + }, + }) + + chains, err := cf.Chains(t.Name()) + require.NoError(t, err) + + feeabs, gaia, osmosis := chains[0].(*cosmos.CosmosChain), chains[1].(*cosmos.CosmosChain), chains[2].(*cosmos.CosmosChain) + + r := interchaintest.NewBuiltinRelayerFactory( + ibc.CosmosRly, + zaptest.NewLogger(t), + relayer.CustomDockerImage(IBCRelayerImage, IBCRelayerVersion, "100:1000"), + ).Build(t, client, network) + + ic := interchaintest.NewInterchain(). + AddChain(feeabs). + AddChain(gaia). + AddChain(osmosis). + AddRelayer(r, "relayer"). + AddLink(interchaintest.InterchainLink{ + Chain1: feeabs, + Chain2: gaia, + Relayer: r, + Path: pathFeeabsGaia, + }). + AddLink(interchaintest.InterchainLink{ + Chain1: feeabs, + Chain2: osmosis, + Relayer: r, + Path: pathFeeabsOsmosis, + }). + AddLink(interchaintest.InterchainLink{ + Chain1: osmosis, + Chain2: gaia, + Relayer: r, + Path: pathOsmosisGaia, + }) + + require.NoError(t, ic.Build(ctx, eRep, interchaintest.InterchainBuildOptions{ + TestName: t.Name(), + Client: client, + NetworkID: network, + BlockDatabaseFile: interchaintest.DefaultBlockDatabaseFilepath(), + + SkipPathCreation: true, + })) + t.Cleanup(func() { + _ = ic.Close() + }) + + const userFunds = int64(10_000_000_000) + users := interchaintest.GetAndFundTestUsers(t, ctx, t.Name(), userFunds, feeabs, gaia, osmosis) + + // rly feeabs-osmo + // Generate new path + err = r.GeneratePath(ctx, eRep, feeabs.Config().ChainID, osmosis.Config().ChainID, pathFeeabsOsmosis) + require.NoError(t, err) + // Create client + err = r.CreateClients(ctx, eRep, pathFeeabsOsmosis, ibc.DefaultClientOpts()) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 5, feeabs, osmosis) + require.NoError(t, err) + + // Create connection + err = r.CreateConnections(ctx, eRep, pathFeeabsOsmosis) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 5, feeabs, osmosis) + require.NoError(t, err) + // Create channel + err = r.CreateChannel(ctx, eRep, pathFeeabsOsmosis, ibc.CreateChannelOptions{ + SourcePortName: "transfer", + DestPortName: "transfer", + Order: ibc.Unordered, + Version: "ics20-1", + }) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 5, feeabs, osmosis) + require.NoError(t, err) + var chanels []ibc.ChannelOutput + channsFeeabs, err := r.GetChannels(ctx, eRep, feeabs.Config().ChainID) + require.NoError(t, err) + + channsOsmosis, err := r.GetChannels(ctx, eRep, osmosis.Config().ChainID) + require.NoError(t, err) + + require.Len(t, channsFeeabs, 1) + require.Len(t, channsOsmosis, 1) + + channFeeabsOsmosis := channsFeeabs[0] + require.NotEmpty(t, channFeeabsOsmosis.ChannelID) + channOsmosisFeeabs := channsOsmosis[0] + require.NotEmpty(t, channOsmosisFeeabs.ChannelID) + // rly feeabs-gaia + // Generate new path + err = r.GeneratePath(ctx, eRep, feeabs.Config().ChainID, gaia.Config().ChainID, pathFeeabsGaia) + require.NoError(t, err) + // Create clients + err = r.CreateClients(ctx, eRep, pathFeeabsGaia, ibc.DefaultClientOpts()) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 5, feeabs, gaia) + require.NoError(t, err) + + // Create connection + err = r.CreateConnections(ctx, eRep, pathFeeabsGaia) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 5, feeabs, gaia) + require.NoError(t, err) + + // Create channel + err = r.CreateChannel(ctx, eRep, pathFeeabsGaia, ibc.CreateChannelOptions{ + SourcePortName: "transfer", + DestPortName: "transfer", + Order: ibc.Unordered, + Version: "ics20-1", + }) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 5, feeabs, gaia) + require.NoError(t, err) + + channsFeeabs, err = r.GetChannels(ctx, eRep, feeabs.Config().ChainID) + require.NoError(t, err) + + channsGaia, err := r.GetChannels(ctx, eRep, gaia.Config().ChainID) + require.NoError(t, err) + + require.Len(t, channsFeeabs, 2) + require.Len(t, channsGaia, 1) + + var channFeeabsGaia ibc.ChannelOutput + for _, chann := range channsFeeabs { + if chann.ChannelID != channFeeabsOsmosis.ChannelID { + channFeeabsGaia = chann + } + } + require.NotEmpty(t, channFeeabsGaia.ChannelID) + + channGaiaFeeabs := channsGaia[0] + require.NotEmpty(t, channGaiaFeeabs.ChannelID) + // rly osmo-gaia + // Generate new path + err = r.GeneratePath(ctx, eRep, osmosis.Config().ChainID, gaia.Config().ChainID, pathOsmosisGaia) + require.NoError(t, err) + // Create clients + err = r.CreateClients(ctx, eRep, pathOsmosisGaia, ibc.DefaultClientOpts()) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 5, osmosis, gaia) + require.NoError(t, err) + // Create connection + err = r.CreateConnections(ctx, eRep, pathOsmosisGaia) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 5, osmosis, gaia) + require.NoError(t, err) + // Create channel + err = r.CreateChannel(ctx, eRep, pathOsmosisGaia, ibc.CreateChannelOptions{ + SourcePortName: "transfer", + DestPortName: "transfer", + Order: ibc.Unordered, + Version: "ics20-1", + }) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 5, osmosis, gaia) + require.NoError(t, err) + + channsOsmosis, err = r.GetChannels(ctx, eRep, osmosis.Config().ChainID) + require.NoError(t, err) + + channsGaia, err = r.GetChannels(ctx, eRep, gaia.Config().ChainID) + require.NoError(t, err) + + require.Len(t, channsOsmosis, 2) + require.Len(t, channsGaia, 2) + + var channOsmosisGaia ibc.ChannelOutput + var channGaiaOsmosis ibc.ChannelOutput + + for _, chann := range channsOsmosis { + if chann.ChannelID != channOsmosisFeeabs.ChannelID { + channOsmosisGaia = chann + } + } + require.NotEmpty(t, channOsmosisGaia) + + for _, chann := range channsGaia { + if chann.ChannelID != channGaiaFeeabs.ChannelID { + channGaiaOsmosis = chann + } + } + require.NotEmpty(t, channGaiaOsmosis) + + fmt.Println("-----------------------------------") + fmt.Printf("channFeeabsOsmosis: %s - %s\n", channFeeabsOsmosis.ChannelID, channFeeabsOsmosis.Counterparty.ChannelID) + fmt.Printf("channOsmosisFeeabs: %s - %s\n", channOsmosisFeeabs.ChannelID, channOsmosisFeeabs.Counterparty.ChannelID) + fmt.Printf("channFeeabsGaia: %s - %s\n", channFeeabsGaia.ChannelID, channFeeabsGaia.Counterparty.ChannelID) + fmt.Printf("channGaiaFeeabs: %s - %s\n", channGaiaFeeabs.ChannelID, channGaiaFeeabs.Counterparty.ChannelID) + fmt.Printf("channOsmosisGaia: %s - %s\n", channOsmosisGaia.ChannelID, channOsmosisGaia.Counterparty.ChannelID) + fmt.Printf("channGaiaOsmosis: %s - %s\n", channGaiaOsmosis.ChannelID, channGaiaOsmosis.Counterparty.ChannelID) + fmt.Println("-----------------------------------") + + // Start the relayer on both paths + err = r.StartRelayer(ctx, eRep, pathFeeabsGaia, pathFeeabsOsmosis, pathOsmosisGaia) + require.NoError(t, err) + + t.Cleanup( + func() { + err := r.StopRelayer(ctx, eRep) + if err != nil { + t.Logf("an error occurred while stopping the relayer: %s", err) + } + }, + ) + chanels = append(chanels, channFeeabsOsmosis, channOsmosisFeeabs, channFeeabsGaia, channGaiaFeeabs, channOsmosisGaia, channGaiaOsmosis) + feeabsUser, gaiaUser, osmosisUser := users[0], users[1], users[2] + + // Send Gaia uatom to Osmosis + gaiaHeight, err := gaia.Height(ctx) + require.NoError(t, err) + dstAddress := sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()) + transfer := ibc.WalletAmount{ + Address: dstAddress, + Denom: gaia.Config().Denom, + Amount: amountToSend, + } + + tx, err := gaia.SendIBCTransfer(ctx, channGaiaOsmosis.ChannelID, gaiaUser.KeyName(), transfer, ibc.TransferOptions{}) + require.NoError(t, err) + require.NoError(t, tx.Validate()) + + _, err = testutil.PollForAck(ctx, gaia, gaiaHeight, gaiaHeight+30, tx.Packet) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, 1, feeabs, gaia, osmosis) + require.NoError(t, err) + + // Send Feeabs stake to Osmosis + feeabsHeight, err := feeabs.Height(ctx) + require.NoError(t, err) + dstAddress = sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()) + transfer = ibc.WalletAmount{ + Address: dstAddress, + Denom: feeabs.Config().Denom, + Amount: amountToSend, + } + + tx, err = feeabs.SendIBCTransfer(ctx, channFeeabsOsmosis.ChannelID, feeabsUser.KeyName(), transfer, ibc.TransferOptions{}) + require.NoError(t, err) + require.NoError(t, tx.Validate()) + + _, err = testutil.PollForAck(ctx, feeabs, feeabsHeight, feeabsHeight+30, tx.Packet) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, 1, feeabs, gaia, osmosis) + require.NoError(t, err) + + // Send Gaia uatom to Feeabs + gaiaHeight, err = gaia.Height(ctx) + require.NoError(t, err) + dstAddress = sdktypes.MustBech32ifyAddressBytes(feeabs.Config().Bech32Prefix, feeabsUser.Address()) + transfer = ibc.WalletAmount{ + Address: dstAddress, + Denom: gaia.Config().Denom, + Amount: amountToSend, + } + + tx, err = gaia.SendIBCTransfer(ctx, channGaiaFeeabs.ChannelID, gaiaUser.KeyName(), transfer, ibc.TransferOptions{}) + require.NoError(t, err) + require.NoError(t, tx.Validate()) + + _, err = testutil.PollForAck(ctx, gaia, gaiaHeight, gaiaHeight+30, tx.Packet) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, 1, feeabs, gaia, osmosis) + require.NoError(t, err) + + return chains, users, chanels +} diff --git a/third_party/tendermint/abci/types.proto b/third_party/tendermint/abci/types.proto deleted file mode 100644 index 8efe8ce5..00000000 --- a/third_party/tendermint/abci/types.proto +++ /dev/null @@ -1,486 +0,0 @@ -syntax = "proto3"; -package tendermint.abci; - -option go_package = "github.com/cometbft/cometbft/abci/types"; - -// For more information on gogo.proto, see: -// https://github.com/cosmos/gogoproto/blob/master/extensions.md -import "tendermint/crypto/proof.proto"; -import "tendermint/crypto/keys.proto"; -import "tendermint/types/params.proto"; -import "tendermint/types/validator.proto"; -import "google/protobuf/timestamp.proto"; -import "gogoproto/gogo.proto"; - -// NOTE: When using custom types, mind the warnings. -// https://github.com/cosmos/gogoproto/blob/master/custom_types.md#warnings-and-issues - -service ABCI { - rpc Echo(RequestEcho) returns (ResponseEcho); - rpc Flush(RequestFlush) returns (ResponseFlush); - rpc Info(RequestInfo) returns (ResponseInfo); - rpc CheckTx(RequestCheckTx) returns (ResponseCheckTx); - rpc Query(RequestQuery) returns (ResponseQuery); - rpc Commit(RequestCommit) returns (ResponseCommit); - rpc InitChain(RequestInitChain) returns (ResponseInitChain); - rpc ListSnapshots(RequestListSnapshots) returns (ResponseListSnapshots); - rpc OfferSnapshot(RequestOfferSnapshot) returns (ResponseOfferSnapshot); - rpc LoadSnapshotChunk(RequestLoadSnapshotChunk) - returns (ResponseLoadSnapshotChunk); - rpc ApplySnapshotChunk(RequestApplySnapshotChunk) - returns (ResponseApplySnapshotChunk); - rpc PrepareProposal(RequestPrepareProposal) returns (ResponsePrepareProposal); - rpc ProcessProposal(RequestProcessProposal) returns (ResponseProcessProposal); - rpc ExtendVote(RequestExtendVote) returns (ResponseExtendVote); - rpc VerifyVoteExtension(RequestVerifyVoteExtension) returns (ResponseVerifyVoteExtension); - rpc FinalizeBlock(RequestFinalizeBlock) returns (ResponseFinalizeBlock); -} - -//---------------------------------------- -// Request types - -message Request { - oneof value { - RequestEcho echo = 1; - RequestFlush flush = 2; - RequestInfo info = 3; - RequestInitChain init_chain = 5; - RequestQuery query = 6; - RequestCheckTx check_tx = 8; - RequestCommit commit = 11; - RequestListSnapshots list_snapshots = 12; - RequestOfferSnapshot offer_snapshot = 13; - RequestLoadSnapshotChunk load_snapshot_chunk = 14; - RequestApplySnapshotChunk apply_snapshot_chunk = 15; - RequestPrepareProposal prepare_proposal = 16; - RequestProcessProposal process_proposal = 17; - RequestExtendVote extend_vote = 18; - RequestVerifyVoteExtension verify_vote_extension = 19; - RequestFinalizeBlock finalize_block = 20; - } - reserved 4, 7, 9, 10; // SetOption, BeginBlock, DeliverTx, EndBlock -} - -message RequestEcho { - string message = 1; -} - -message RequestFlush {} - -message RequestInfo { - string version = 1; - uint64 block_version = 2; - uint64 p2p_version = 3; - string abci_version = 4; -} - -message RequestInitChain { - google.protobuf.Timestamp time = 1 - [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; - string chain_id = 2; - tendermint.types.ConsensusParams consensus_params = 3; - repeated ValidatorUpdate validators = 4 [(gogoproto.nullable) = false]; - bytes app_state_bytes = 5; - int64 initial_height = 6; -} - -message RequestQuery { - bytes data = 1; - string path = 2; - int64 height = 3; - bool prove = 4; -} - -enum CheckTxType { - NEW = 0 [(gogoproto.enumvalue_customname) = "New"]; - RECHECK = 1 [(gogoproto.enumvalue_customname) = "Recheck"]; -} - -message RequestCheckTx { - bytes tx = 1; - CheckTxType type = 2; -} - -message RequestCommit {} - -// lists available snapshots -message RequestListSnapshots {} - -// offers a snapshot to the application -message RequestOfferSnapshot { - Snapshot snapshot = 1; // snapshot offered by peers - bytes app_hash = 2; // light client-verified app hash for snapshot height -} - -// loads a snapshot chunk -message RequestLoadSnapshotChunk { - uint64 height = 1; - uint32 format = 2; - uint32 chunk = 3; -} - -// Applies a snapshot chunk -message RequestApplySnapshotChunk { - uint32 index = 1; - bytes chunk = 2; - string sender = 3; -} - -message RequestPrepareProposal { - // the modified transactions cannot exceed this size. - int64 max_tx_bytes = 1; - // txs is an array of transactions that will be included in a block, - // sent to the app for possible modifications. - repeated bytes txs = 2; - ExtendedCommitInfo local_last_commit = 3 [(gogoproto.nullable) = false]; - repeated Misbehavior misbehavior = 4 [(gogoproto.nullable) = false]; - int64 height = 5; - google.protobuf.Timestamp time = 6 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; - bytes next_validators_hash = 7; - // address of the public key of the validator proposing the block. - bytes proposer_address = 8; -} - -message RequestProcessProposal { - repeated bytes txs = 1; - CommitInfo proposed_last_commit = 2 [(gogoproto.nullable) = false]; - repeated Misbehavior misbehavior = 3 [(gogoproto.nullable) = false]; - // hash is the merkle root hash of the fields of the proposed block. - bytes hash = 4; - int64 height = 5; - google.protobuf.Timestamp time = 6 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; - bytes next_validators_hash = 7; - // address of the public key of the original proposer of the block. - bytes proposer_address = 8; -} - -// Extends a vote with application-injected data -message RequestExtendVote { - // the hash of the block that this vote may be referring to - bytes hash = 1; - // the height of the extended vote - int64 height = 2; -} - -// Verify the vote extension -message RequestVerifyVoteExtension { - // the hash of the block that this received vote corresponds to - bytes hash = 1; - // the validator that signed the vote extension - bytes validator_address = 2; - int64 height = 3; - bytes vote_extension = 4; -} - -message RequestFinalizeBlock { - repeated bytes txs = 1; - CommitInfo decided_last_commit = 2 [(gogoproto.nullable) = false]; - repeated Misbehavior misbehavior = 3 [(gogoproto.nullable) = false]; - // hash is the merkle root hash of the fields of the decided block. - bytes hash = 4; - int64 height = 5; - google.protobuf.Timestamp time = 6 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; - bytes next_validators_hash = 7; - // proposer_address is the address of the public key of the original proposer of the block. - bytes proposer_address = 8; -} - -//---------------------------------------- -// Response types - -message Response { - oneof value { - ResponseException exception = 1; - ResponseEcho echo = 2; - ResponseFlush flush = 3; - ResponseInfo info = 4; - ResponseInitChain init_chain = 6; - ResponseQuery query = 7; - ResponseCheckTx check_tx = 9; - ResponseCommit commit = 12; - ResponseListSnapshots list_snapshots = 13; - ResponseOfferSnapshot offer_snapshot = 14; - ResponseLoadSnapshotChunk load_snapshot_chunk = 15; - ResponseApplySnapshotChunk apply_snapshot_chunk = 16; - ResponsePrepareProposal prepare_proposal = 17; - ResponseProcessProposal process_proposal = 18; - ResponseExtendVote extend_vote = 19; - ResponseVerifyVoteExtension verify_vote_extension = 20; - ResponseFinalizeBlock finalize_block = 21; - } - reserved 5, 8, 10, 11; // SetOption, BeginBlock, DeliverTx, EndBlock -} - -// nondeterministic -message ResponseException { - string error = 1; -} - -message ResponseEcho { - string message = 1; -} - -message ResponseFlush {} - -message ResponseInfo { - string data = 1; - - string version = 2; - uint64 app_version = 3; - - int64 last_block_height = 4; - bytes last_block_app_hash = 5; -} - -message ResponseInitChain { - tendermint.types.ConsensusParams consensus_params = 1; - repeated ValidatorUpdate validators = 2 [(gogoproto.nullable) = false]; - bytes app_hash = 3; -} - -message ResponseQuery { - uint32 code = 1; - // bytes data = 2; // use "value" instead. - string log = 3; // nondeterministic - string info = 4; // nondeterministic - int64 index = 5; - bytes key = 6; - bytes value = 7; - tendermint.crypto.ProofOps proof_ops = 8; - int64 height = 9; - string codespace = 10; -} - -message ResponseCheckTx { - uint32 code = 1; - bytes data = 2; - string log = 3; // nondeterministic - string info = 4; // nondeterministic - int64 gas_wanted = 5 [json_name = "gas_wanted"]; - int64 gas_used = 6 [json_name = "gas_used"]; - repeated Event events = 7 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; - string codespace = 8; - - // These reserved fields were used until v0.37 by the priority mempool (now - // removed). - reserved 9 to 11; - reserved "sender", "priority", "mempool_error"; -} - -message ResponseCommit { - reserved 1, 2; // data was previously returned here - int64 retain_height = 3; -} - -message ResponseListSnapshots { - repeated Snapshot snapshots = 1; -} - -message ResponseOfferSnapshot { - Result result = 1; - - enum Result { - UNKNOWN = 0; // Unknown result, abort all snapshot restoration - ACCEPT = 1; // Snapshot accepted, apply chunks - ABORT = 2; // Abort all snapshot restoration - REJECT = 3; // Reject this specific snapshot, try others - REJECT_FORMAT = 4; // Reject all snapshots of this format, try others - REJECT_SENDER = 5; // Reject all snapshots from the sender(s), try others - } -} - -message ResponseLoadSnapshotChunk { - bytes chunk = 1; -} - -message ResponseApplySnapshotChunk { - Result result = 1; - repeated uint32 refetch_chunks = 2; // Chunks to refetch and reapply - repeated string reject_senders = 3; // Chunk senders to reject and ban - - enum Result { - UNKNOWN = 0; // Unknown result, abort all snapshot restoration - ACCEPT = 1; // Chunk successfully accepted - ABORT = 2; // Abort all snapshot restoration - RETRY = 3; // Retry chunk (combine with refetch and reject) - RETRY_SNAPSHOT = 4; // Retry snapshot (combine with refetch and reject) - REJECT_SNAPSHOT = 5; // Reject this snapshot, try others - } -} - -message ResponsePrepareProposal { - repeated bytes txs = 1; -} - -message ResponseProcessProposal { - ProposalStatus status = 1; - - enum ProposalStatus { - UNKNOWN = 0; - ACCEPT = 1; - REJECT = 2; - } -} - -message ResponseExtendVote { - bytes vote_extension = 1; -} - -message ResponseVerifyVoteExtension { - VerifyStatus status = 1; - - enum VerifyStatus { - UNKNOWN = 0; - ACCEPT = 1; - // Rejecting the vote extension will reject the entire precommit by the sender. - // Incorrectly implementing this thus has liveness implications as it may affect - // CometBFT's ability to receive 2/3+ valid votes to finalize the block. - // Honest nodes should never be rejected. - REJECT = 2; - } -} - -message ResponseFinalizeBlock { - // set of block events emmitted as part of executing the block - repeated Event events = 1 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; - // the result of executing each transaction including the events - // the particular transction emitted. This should match the order - // of the transactions delivered in the block itself - repeated ExecTxResult tx_results = 2; - // a list of updates to the validator set. These will reflect the validator set at current height + 2. - repeated ValidatorUpdate validator_updates = 3 [(gogoproto.nullable) = false]; - // updates to the consensus params, if any. - tendermint.types.ConsensusParams consensus_param_updates = 4; - // app_hash is the hash of the applications' state which is used to confirm that execution of the transactions was deterministic. It is up to the application to decide which algorithm to use. - bytes app_hash = 5; -} - -//---------------------------------------- -// Misc. - -message CommitInfo { - int32 round = 1; - repeated VoteInfo votes = 2 [(gogoproto.nullable) = false]; -} - -// ExtendedCommitInfo is similar to CommitInfo except that it is only used in -// the PrepareProposal request such that CometBFT can provide vote extensions -// to the application. -message ExtendedCommitInfo { - // The round at which the block proposer decided in the previous height. - int32 round = 1; - // List of validators' addresses in the last validator set with their voting - // information, including vote extensions. - repeated ExtendedVoteInfo votes = 2 [(gogoproto.nullable) = false]; -} - -// Event allows application developers to attach additional information to -// ResponseFinalizeBlock and ResponseCheckTx. -// Later, transactions may be queried using these events. -message Event { - string type = 1; - repeated EventAttribute attributes = 2 [ - (gogoproto.nullable) = false, - (gogoproto.jsontag) = "attributes,omitempty" - ]; -} - -// EventAttribute is a single key-value pair, associated with an event. -message EventAttribute { - string key = 1; - string value = 2; - bool index = 3; // nondeterministic -} - -// ExecTxResult contains results of executing one individual transaction. -// -// * Its structure is equivalent to #ResponseDeliverTx which will be deprecated/deleted -message ExecTxResult { - uint32 code = 1; - bytes data = 2; - string log = 3; // nondeterministic - string info = 4; // nondeterministic - int64 gas_wanted = 5; - int64 gas_used = 6; - repeated Event events = 7 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; // nondeterministic - string codespace = 8; -} - -// TxResult contains results of executing the transaction. -// -// One usage is indexing transaction results. -message TxResult { - int64 height = 1; - uint32 index = 2; - bytes tx = 3; - ExecTxResult result = 4 [(gogoproto.nullable) = false]; -} - -//---------------------------------------- -// Blockchain Types - -message Validator { - bytes address = 1; // The first 20 bytes of SHA256(public key) - // PubKey pub_key = 2 [(gogoproto.nullable)=false]; - int64 power = 3; // The voting power -} - -message ValidatorUpdate { - tendermint.crypto.PublicKey pub_key = 1 [(gogoproto.nullable) = false]; - int64 power = 2; -} - -message VoteInfo { - Validator validator = 1 [(gogoproto.nullable) = false]; - tendermint.types.BlockIDFlag block_id_flag = 3; - - reserved 2; // signed_last_block -} - -message ExtendedVoteInfo { - // The validator that sent the vote. - Validator validator = 1 [(gogoproto.nullable) = false]; - // Non-deterministic extension provided by the sending validator's application. - bytes vote_extension = 3; - // Vote extension signature created by CometBFT - bytes extension_signature = 4; - // block_id_flag indicates whether the validator voted for a block, nil, or did not vote at all - tendermint.types.BlockIDFlag block_id_flag = 5; - - reserved 2; // signed_last_block -} - -enum MisbehaviorType { - UNKNOWN = 0; - DUPLICATE_VOTE = 1; - LIGHT_CLIENT_ATTACK = 2; -} - -message Misbehavior { - MisbehaviorType type = 1; - // The offending validator - Validator validator = 2 [(gogoproto.nullable) = false]; - // The height when the offense occurred - int64 height = 3; - // The corresponding time where the offense occurred - google.protobuf.Timestamp time = 4 - [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; - // Total voting power of the validator set in case the ABCI application does - // not store historical validators. - // https://github.com/tendermint/tendermint/issues/4581 - int64 total_voting_power = 5; -} - -//---------------------------------------- -// State Sync Types - -message Snapshot { - uint64 height = 1; // The height at which the snapshot was taken - uint32 format = 2; // The application-specific snapshot format - uint32 chunks = 3; // Number of chunks in the snapshot - bytes hash = 4; // Arbitrary snapshot hash, equal only if identical - bytes metadata = 5; // Arbitrary application metadata -} \ No newline at end of file diff --git a/third_party/tendermint/crypto/keys.proto b/third_party/tendermint/crypto/keys.proto deleted file mode 100644 index 9a5b95cf..00000000 --- a/third_party/tendermint/crypto/keys.proto +++ /dev/null @@ -1,17 +0,0 @@ -syntax = "proto3"; -package tendermint.crypto; - -option go_package = "github.com/cometbft/cometbft/proto/tendermint/crypto"; - -import "gogoproto/gogo.proto"; - -// PublicKey defines the keys available for use with Validators -message PublicKey { - option (gogoproto.compare) = true; - option (gogoproto.equal) = true; - - oneof sum { - bytes ed25519 = 1; - bytes secp256k1 = 2; - } -} \ No newline at end of file diff --git a/third_party/tendermint/crypto/proof.proto b/third_party/tendermint/crypto/proof.proto deleted file mode 100644 index 68dc758b..00000000 --- a/third_party/tendermint/crypto/proof.proto +++ /dev/null @@ -1,41 +0,0 @@ -syntax = "proto3"; -package tendermint.crypto; - -option go_package = "github.com/cometbft/cometbft/proto/tendermint/crypto"; - -import "gogoproto/gogo.proto"; - -message Proof { - int64 total = 1; - int64 index = 2; - bytes leaf_hash = 3; - repeated bytes aunts = 4; -} - -message ValueOp { - // Encoded in ProofOp.Key. - bytes key = 1; - - // To encode in ProofOp.Data - Proof proof = 2; -} - -message DominoOp { - string key = 1; - string input = 2; - string output = 3; -} - -// ProofOp defines an operation used for calculating Merkle root -// The data could be arbitrary format, providing nessecary data -// for example neighbouring node hash -message ProofOp { - string type = 1; - bytes key = 2; - bytes data = 3; -} - -// ProofOps is Merkle proof defined by the list of ProofOps -message ProofOps { - repeated ProofOp ops = 1 [(gogoproto.nullable) = false]; -} \ No newline at end of file diff --git a/third_party/tendermint/types/params.proto b/third_party/tendermint/types/params.proto deleted file mode 100644 index 882ff7fd..00000000 --- a/third_party/tendermint/types/params.proto +++ /dev/null @@ -1,92 +0,0 @@ -syntax = "proto3"; -package tendermint.types; - -option go_package = "github.com/cometbft/cometbft/proto/tendermint/types"; - -import "gogoproto/gogo.proto"; -import "google/protobuf/duration.proto"; - -option (gogoproto.equal_all) = true; - -// ConsensusParams contains consensus critical parameters that determine the -// validity of blocks. -message ConsensusParams { - BlockParams block = 1; - EvidenceParams evidence = 2; - ValidatorParams validator = 3; - VersionParams version = 4; - ABCIParams abci = 5; -} - -// BlockParams contains limits on the block size. -message BlockParams { - // Max block size, in bytes. - // Note: must be greater than 0 - int64 max_bytes = 1; - // Max gas per block. - // Note: must be greater or equal to -1 - int64 max_gas = 2; - - reserved 3; // was TimeIotaMs see https://github.com/tendermint/tendermint/pull/5792 -} - -// EvidenceParams determine how we handle evidence of malfeasance. -message EvidenceParams { - // Max age of evidence, in blocks. - // - // The basic formula for calculating this is: MaxAgeDuration / {average block - // time}. - int64 max_age_num_blocks = 1; - - // Max age of evidence, in time. - // - // It should correspond with an app's "unbonding period" or other similar - // mechanism for handling [Nothing-At-Stake - // attacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed). - google.protobuf.Duration max_age_duration = 2 - [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; - - // This sets the maximum size of total evidence in bytes that can be committed in a single block. - // and should fall comfortably under the max block bytes. - // Default is 1048576 or 1MB - int64 max_bytes = 3; -} - -// ValidatorParams restrict the public key types validators can use. -// NOTE: uses ABCI pubkey naming, not Amino names. -message ValidatorParams { - option (gogoproto.populate) = true; - option (gogoproto.equal) = true; - - repeated string pub_key_types = 1; -} - -// VersionParams contains the ABCI application version. -message VersionParams { - option (gogoproto.populate) = true; - option (gogoproto.equal) = true; - - uint64 app = 1; -} - -// HashedParams is a subset of ConsensusParams. -// -// It is hashed into the Header.ConsensusHash. -message HashedParams { - int64 block_max_bytes = 1; - int64 block_max_gas = 2; -} - -// ABCIParams configure functionality specific to the Application Blockchain Interface. -message ABCIParams { - // vote_extensions_enable_height configures the first height during which - // vote extensions will be enabled. During this specified height, and for all - // subsequent heights, precommit messages that do not contain valid extension data - // will be considered invalid. Prior to this height, vote extensions will not - // be used or accepted by validators on the network. - // - // Once enabled, vote extensions will be created by the application in ExtendVote, - // passed to the application for validation in VerifyVoteExtension and given - // to the application to use when proposing a block during PrepareProposal. - int64 vote_extensions_enable_height = 1; -} \ No newline at end of file diff --git a/third_party/tendermint/types/validator.proto b/third_party/tendermint/types/validator.proto deleted file mode 100644 index 9a6efbcb..00000000 --- a/third_party/tendermint/types/validator.proto +++ /dev/null @@ -1,37 +0,0 @@ -syntax = "proto3"; -package tendermint.types; - -option go_package = "github.com/cometbft/cometbft/proto/tendermint/types"; - -import "gogoproto/gogo.proto"; -import "tendermint/crypto/keys.proto"; - -// BlockIdFlag indicates which BlockID the signature is for -enum BlockIDFlag { - option (gogoproto.goproto_enum_stringer) = true; - option (gogoproto.goproto_enum_prefix) = false; - - BLOCK_ID_FLAG_UNKNOWN = 0 [(gogoproto.enumvalue_customname) = "BlockIDFlagUnknown"]; // indicates an error condition - BLOCK_ID_FLAG_ABSENT = 1 [(gogoproto.enumvalue_customname) = "BlockIDFlagAbsent"]; // the vote was not received - BLOCK_ID_FLAG_COMMIT = 2 [(gogoproto.enumvalue_customname) = "BlockIDFlagCommit"]; // voted for the block that received the majority - BLOCK_ID_FLAG_NIL = 3 [(gogoproto.enumvalue_customname) = "BlockIDFlagNil"]; // voted for nil -} - - -message ValidatorSet { - repeated Validator validators = 1; - Validator proposer = 2; - int64 total_voting_power = 3; -} - -message Validator { - bytes address = 1; - tendermint.crypto.PublicKey pub_key = 2 [(gogoproto.nullable) = false]; - int64 voting_power = 3; - int64 proposer_priority = 4; -} - -message SimpleValidator { - tendermint.crypto.PublicKey pub_key = 1; - int64 voting_power = 2; -} \ No newline at end of file From 98a1a3d0cae5a533da00eb6e1ae841e99ebabb0f Mon Sep 17 00:00:00 2001 From: Duong Minh Ngoc <153509244+minhngoc274@users.noreply.github.com> Date: Wed, 31 Jan 2024 14:50:31 +0700 Subject: [PATCH 86/90] Unnecessary host zone freezing (#125) * Send package in batch * test: add query osmosis twap test * test: add makefile and github worklow * handle error while sending in batch * update query osmosis twap test * fix makefile * test: temp disable query osmosis twap assertion --- .github/workflows/interchaintest.yaml | 18 +- Makefile | 5 +- tests/interchaintest/feeabs/tx.go | 15 ++ .../interchaintest/query_osmosis_twap_test.go | 158 ++++++++++++++++++ tests/interchaintest/setup.go | 8 +- x/feeabs/ibc_module.go | 1 + x/feeabs/keeper/ibc.go | 29 +++- 7 files changed, 227 insertions(+), 7 deletions(-) create mode 100644 tests/interchaintest/feeabs/tx.go create mode 100644 tests/interchaintest/query_osmosis_twap_test.go diff --git a/.github/workflows/interchaintest.yaml b/.github/workflows/interchaintest.yaml index 4452e857..71643719 100644 --- a/.github/workflows/interchaintest.yaml +++ b/.github/workflows/interchaintest.yaml @@ -105,4 +105,20 @@ jobs: - run: make ictest-feeabs env: - BRANCH_CI: 'latest' \ No newline at end of file + BRANCH_CI: 'latest' + + test-query-osmosis-twap: + runs-on: ubuntu-latest + needs: build-and-push-image + steps: + - name: Set up Go 1.21 + uses: actions/setup-go@v3 + with: + go-version: 1.21 + + - name: checkout code + uses: actions/checkout@v3 + + - run: make ictest-query-osmosis-twap + env: + BRANCH_CI: 'latest' diff --git a/Makefile b/Makefile index dec41049..7e8098cb 100644 --- a/Makefile +++ b/Makefile @@ -94,7 +94,7 @@ build: go build $(BUILD_FLAGS) -o bin/feeappd ./cmd/feeappd test: - go test -race -v ./... + @GOWORK=off go test -race -v ./... docker-build-debug: @DOCKER_BUILDKIT=1 docker build -t feeapp:debug -f Dockerfile . @@ -127,6 +127,9 @@ ictest-host-zone-proposal: ictest-feeabs: cd tests/interchaintest && go test -timeout=25m -race -v -run TestFeeabs . +ictest-query-osmosis-twap: + cd tests/interchaintest && go test -timeout=25m -race -v -run TestQueryOsmosisTwap . + # Executes all tests via interchaintest after compling a local image as juno:local ictest-all: ictest-basic ictest-ibc ictest-packet-forward diff --git a/tests/interchaintest/feeabs/tx.go b/tests/interchaintest/feeabs/tx.go new file mode 100644 index 00000000..333a0aa5 --- /dev/null +++ b/tests/interchaintest/feeabs/tx.go @@ -0,0 +1,15 @@ +package feeabs + +import ( + "context" + "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" +) + +func QueryOsmosisTWAP(c *cosmos.CosmosChain, ctx context.Context, keyName string) (string, error) { + tn := c.Validators[0] + if len(c.FullNodes) > 0 { + tn = c.FullNodes[0] + } + cmd := []string{"feeabs", "query-osmosis-twap"} + return tn.ExecTx(ctx, keyName, cmd...) +} diff --git a/tests/interchaintest/query_osmosis_twap_test.go b/tests/interchaintest/query_osmosis_twap_test.go new file mode 100644 index 00000000..dbd6896a --- /dev/null +++ b/tests/interchaintest/query_osmosis_twap_test.go @@ -0,0 +1,158 @@ +package interchaintest + +import ( + "context" + "fmt" + "os" + "path" + "testing" + + sdktypes "github.com/cosmos/cosmos-sdk/types" + paramsutils "github.com/cosmos/cosmos-sdk/x/params/client/utils" + transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + feeabsCli "github.com/osmosis-labs/fee-abstraction/tests/interchaintest/feeabs" + "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v7/testutil" + "github.com/stretchr/testify/require" +) + +func TestQueryOsmosisTwap(t *testing.T) { + if testing.Short() { + t.Skip("skipping in short mode") + } + // Set up chains, users and channels + ctx := context.Background() + chains, users, channels := SetupChain(t, ctx) + feeabs, gaia, osmosis := chains[0].(*cosmos.CosmosChain), chains[1].(*cosmos.CosmosChain), chains[2].(*cosmos.CosmosChain) + + feeabsUser, _, osmosisUser := users[0], users[1], users[2] + + channFeeabsOsmosis, channOsmosisFeeabs, channFeeabsGaia, channGaiaFeeabs, channOsmosisGaia, channGaiaOsmosis := channels[0], channels[1], channels[2], channels[3], channels[4], channels[5] + + // Setup contract on Osmosis + // Store code crosschain Registry + crossChainRegistryContractID, err := osmosis.StoreContract(ctx, osmosisUser.KeyName(), "./bytecode/crosschain_registry.wasm") + require.NoError(t, err) + _ = crossChainRegistryContractID + // // Instatiate + owner := sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()) + initMsg := fmt.Sprintf("{\"owner\":\"%s\"}", owner) + registryContractAddress, err := osmosis.InstantiateContract(ctx, osmosisUser.KeyName(), crossChainRegistryContractID, initMsg, true) + require.NoError(t, err) + // Execute + msg := fmt.Sprintf("{\"modify_chain_channel_links\": {\"operations\": [{\"operation\": \"set\",\"source_chain\": \"feeabs\",\"destination_chain\": \"osmosis\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"osmosis\",\"destination_chain\": \"feeabs\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"feeabs\",\"destination_chain\": \"gaia\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"gaia\",\"destination_chain\": \"feeabs\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"osmosis\",\"destination_chain\": \"gaia\",\"channel_id\": \"%s\"},{\"operation\": \"set\",\"source_chain\": \"gaia\",\"destination_chain\": \"osmosis\",\"channel_id\": \"%s\"}]}}", + channFeeabsOsmosis.ChannelID, + channOsmosisFeeabs.ChannelID, + channFeeabsGaia.ChannelID, + channGaiaFeeabs.ChannelID, + channOsmosisGaia.ChannelID, + channGaiaOsmosis.ChannelID) + _, err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName(), registryContractAddress, msg) + require.NoError(t, err) + // Execute + msg = `{ + "modify_bech32_prefixes": + { + "operations": + [ + {"operation": "set", "chain_name": "feeabs", "prefix": "feeabs"}, + {"operation": "set", "chain_name": "osmosis", "prefix": "osmo"}, + {"operation": "set", "chain_name": "gaia", "prefix": "cosmos"} + ] + } + }` + _, err = osmosis.ExecuteContract(ctx, osmosisUser.KeyName(), registryContractAddress, msg) + require.NoError(t, err) + + // Create pool Osmosis(uatom)/Osmosis(stake) on Osmosis + denomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(channOsmosisGaia.PortID, channOsmosisGaia.ChannelID, gaia.Config().Denom)) + uatomOnOsmosis := denomTrace.IBCDenom() + osmosisUserBalance, err := osmosis.GetBalance(ctx, sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()), uatomOnOsmosis) + require.NoError(t, err) + require.Equal(t, amountToSend, osmosisUserBalance) + + denomTrace = transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(channOsmosisFeeabs.PortID, channOsmosisFeeabs.ChannelID, feeabs.Config().Denom)) + stakeOnOsmosis := denomTrace.IBCDenom() + osmosisUserBalance, err = osmosis.GetBalance(ctx, sdktypes.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, osmosisUser.Address()), stakeOnOsmosis) + require.NoError(t, err) + require.Equal(t, amountToSend, osmosisUserBalance) + + poolID, err := feeabsCli.CreatePool(osmosis, ctx, osmosisUser.KeyName(), cosmos.OsmosisPoolParams{ + Weights: fmt.Sprintf("5%s,5%s", stakeOnOsmosis, uatomOnOsmosis), + InitialDeposit: fmt.Sprintf("95000000%s,950000000%s", stakeOnOsmosis, uatomOnOsmosis), + SwapFee: "0.01", + ExitFee: "0", + FutureGovernor: "", + }) + require.NoError(t, err) + require.Equal(t, poolID, "1") + + // Setup propose_pfm + // propose_pfm for feeabs + _, err = feeabsCli.SetupProposePFM(osmosis, ctx, osmosisUser.KeyName(), registryContractAddress, `{"propose_pfm":{"chain": "feeabs"}}`, stakeOnOsmosis) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, 15, feeabs, gaia, osmosis) + require.NoError(t, err) + queryMsg := QuerySmartMsg{ + Packet: HasPacketForwarding{ + ChainID: "feeabs", + }, + } + res := QuerySmartMsgResponse{} + err = osmosis.QueryContract(ctx, registryContractAddress, queryMsg, &res) + require.NoError(t, err) + // propose_pfm for gaia + _, err = feeabsCli.SetupProposePFM(osmosis, ctx, osmosisUser.KeyName(), registryContractAddress, `{"propose_pfm":{"chain": "gaia"}}`, uatomOnOsmosis) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, 15, feeabs, gaia, osmosis) + require.NoError(t, err) + queryMsg = QuerySmartMsg{ + Packet: HasPacketForwarding{ + ChainID: "gaia", + }, + } + res = QuerySmartMsgResponse{} + err = osmosis.QueryContract(ctx, registryContractAddress, queryMsg, &res) + require.NoError(t, err) + + denomTrace = transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(channFeeabsGaia.PortID, channFeeabsGaia.ChannelID, gaia.Config().Denom)) + uatomOnFeeabs := denomTrace.IBCDenom() + + current_directory, _ := os.Getwd() + param_change_path := path.Join(current_directory, "proposal", "proposal.json") + + changeParamProposal, err := paramsutils.ParseParamChangeProposalJSON(feeabs.Config().EncodingConfig.Amino, param_change_path) + require.NoError(t, err) + + paramTx, err := feeabsCli.ParamChangeProposal(feeabs, ctx, feeabsUser.KeyName(), &changeParamProposal) + require.NoError(t, err, "error submitting param change proposal tx") + + err = feeabs.VoteOnProposalAllValidators(ctx, paramTx.ProposalID, cosmos.ProposalVoteYes) + require.NoError(t, err, "failed to submit votes") + + height, err := feeabs.Height(ctx) + require.NoError(t, err) + + _, err = cosmos.PollForProposalStatus(ctx, feeabs, height, height+10, paramTx.ProposalID, cosmos.ProposalStatusPassed) + require.NoError(t, err, "proposal status did not change to passed in expected number of blocks") + + _, err = feeabsCli.AddHostZoneProposal(feeabs, ctx, feeabsUser.KeyName(), "./proposal/add_host_zone.json") + require.NoError(t, err) + + err = feeabs.VoteOnProposalAllValidators(ctx, "2", cosmos.ProposalVoteYes) + require.NoError(t, err, "failed to submit votes") + + height, err = feeabs.Height(ctx) + require.NoError(t, err) + + _, err = cosmos.PollForProposalStatus(ctx, feeabs, height, height+10, "2", cosmos.ProposalStatusPassed) + require.NoError(t, err, "proposal status did not change to passed in expected number of blocks") + + _, err = feeabsCli.QueryHostZoneConfig(feeabs, ctx) + require.NoError(t, err) + + twap, err := feeabsCli.QueryOsmosisArithmeticTwap(feeabs, ctx, uatomOnFeeabs) + fmt.Println(err) + fmt.Println(twap) + //require.NoError(t, err) +} diff --git a/tests/interchaintest/setup.go b/tests/interchaintest/setup.go index a390660b..3debe6b6 100644 --- a/tests/interchaintest/setup.go +++ b/tests/interchaintest/setup.go @@ -38,6 +38,7 @@ type QuerySmartMsgResponse struct { const ( votingPeriod = "10s" maxDepositPeriod = "10s" + queryEpochTime = "10s" ) var ( @@ -69,7 +70,7 @@ var ( GasAdjustment: 1.1, TrustingPeriod: "112h", NoHostMount: false, - ModifyGenesis: modifyGenesisShortProposals(votingPeriod, maxDepositPeriod), + ModifyGenesis: modifyGenesisShortProposals(votingPeriod, maxDepositPeriod, queryEpochTime), ConfigFileOverrides: nil, EncodingConfig: feeabsEncoding(), } @@ -118,7 +119,7 @@ func GetDockerImageInfo() (repo, version string) { return repo, branchVersion } -func modifyGenesisShortProposals(votingPeriod string, maxDepositPeriod string) func(ibc.ChainConfig, []byte) ([]byte, error) { +func modifyGenesisShortProposals(votingPeriod string, maxDepositPeriod string, queryEpochTime string) func(ibc.ChainConfig, []byte) ([]byte, error) { return func(chainConfig ibc.ChainConfig, genbz []byte) ([]byte, error) { g := make(map[string]interface{}) if err := json.Unmarshal(genbz, &g); err != nil { @@ -133,6 +134,9 @@ func modifyGenesisShortProposals(votingPeriod string, maxDepositPeriod string) f if err := dyno.Set(g, chainConfig.Denom, "app_state", "gov", "params", "min_deposit", 0, "denom"); err != nil { return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) } + if err := dyno.Set(g, queryEpochTime, "app_state", "feeabs", "epochs", 0, "duration"); err != nil { + return nil, fmt.Errorf("failed to set query epoch time in genesis json: %w", err) + } out, err := json.Marshal(g) if err != nil { return nil, fmt.Errorf("failed to marshal genesis bytes to json: %w", err) diff --git a/x/feeabs/ibc_module.go b/x/feeabs/ibc_module.go index fed4ed64..8d42e3b2 100644 --- a/x/feeabs/ibc_module.go +++ b/x/feeabs/ibc_module.go @@ -205,6 +205,7 @@ func (am IBCModule) OnTimeoutPacket( packet channeltypes.Packet, relayer sdk.AccAddress, ) error { + ctx.Logger().Info("Timeout packet", "packet", packet) var icqPacketData types.InterchainQueryPacketData if err := types.ModuleCdc.UnmarshalJSON(packet.GetData(), &icqPacketData); err != nil { return sdkerrors.Wrapf(errorstypes.ErrUnknownRequest, "cannot unmarshal packet data: %v", err) diff --git a/x/feeabs/keeper/ibc.go b/x/feeabs/keeper/ibc.go index 76ccbc35..13ddea38 100644 --- a/x/feeabs/keeper/ibc.go +++ b/x/feeabs/keeper/ibc.go @@ -193,6 +193,7 @@ func (k Keeper) OnAcknowledgementPacket(ctx sdk.Context, ack channeltypes.Acknow // OnTimeoutPacket resend packet when timeout func (k Keeper) OnTimeoutPacket(ctx sdk.Context) error { + ctx.Logger().Info("IBC Timeout packet") return k.handleOsmosisIbcQuery(ctx) } @@ -268,8 +269,14 @@ func (k Keeper) handleOsmosisIbcQuery(ctx sdk.Context) error { params := k.GetParams(ctx) + batchSize := 10 var reqs []types.QueryArithmeticTwapToNowRequest + batchCounter := 0 + var errorFound error k.IterateHostZone(ctx, func(hostZoneConfig types.HostChainFeeAbsConfig) (stop bool) { + if hostZoneConfig.Frozen { + return false + } req := types.NewQueryArithmeticTwapToNowRequest( hostZoneConfig.PoolId, params.NativeIbcedInOsmosis, @@ -277,13 +284,29 @@ func (k Keeper) handleOsmosisIbcQuery(ctx sdk.Context) error { startTime, ) reqs = append(reqs, req) + batchCounter++ + if batchCounter == batchSize { + err := k.SendOsmosisQueryRequest(ctx, reqs, types.IBCPortID, params.IbcQueryIcqChannel) + if err != nil { + errorFound = err + return true + } + reqs = []types.QueryArithmeticTwapToNowRequest{} + batchCounter = 0 + } return false }) - err := k.SendOsmosisQueryRequest(ctx, reqs, types.IBCPortID, params.IbcQueryIcqChannel) - if err != nil { - return err + + if errorFound != nil { + return errorFound } + if len(reqs) > 0 { + err := k.SendOsmosisQueryRequest(ctx, reqs, types.IBCPortID, params.IbcQueryIcqChannel) + if err != nil { + return err + } + } return nil } From 7a240b86cd11d028819674d3bd5b26737547e8f0 Mon Sep 17 00:00:00 2001 From: Tien Nguyen Date: Tue, 27 Feb 2024 15:57:32 +0700 Subject: [PATCH 87/90] Add benchmarking setup for testnet and remove unused ante package. (#145) * Remove unused ante package. * Add benchmarking setup for testnet. * Fix lint. --- ante/ante.go | 58 --------- ante/ante_test.go | 101 --------------- ante/fee.go | 78 ------------ ante/fee_test.go | 61 --------- .../bytecode/crosschain_registry.wasm | Bin 433206 -> 454332 bytes .../bytecode/crosschain_swaps.wasm | Bin 446429 -> 469289 bytes tests/interchaintest/bytecode/swaprouter.wasm | Bin 244908 -> 256074 bytes tests/interchaintest/feeabs_test.go | 118 +++++++++--------- tests/interchaintest/setup.go | 64 ++++++++++ .../testnet/configs/feeapp.json | 17 +++ .../testnet/configs/osmosis.json | 17 +++ .../testnet/paths/transfer.json | 15 +++ tests/interchaintest/testnet/pool/pool-1.json | 7 ++ .../testnet/proposal/add_host_zone.json | 11 ++ x/feeabs/ante/decorate.go | 28 ++++- x/feeabs/keeper/ibc.go | 1 - x/feeabs/keeper/msgserver.go | 1 - x/feeabs/types/epoch.go | 4 +- 18 files changed, 214 insertions(+), 367 deletions(-) delete mode 100644 ante/ante.go delete mode 100644 ante/ante_test.go delete mode 100644 ante/fee.go delete mode 100644 ante/fee_test.go create mode 100644 tests/interchaintest/testnet/configs/feeapp.json create mode 100644 tests/interchaintest/testnet/configs/osmosis.json create mode 100644 tests/interchaintest/testnet/paths/transfer.json create mode 100644 tests/interchaintest/testnet/pool/pool-1.json create mode 100644 tests/interchaintest/testnet/proposal/add_host_zone.json diff --git a/ante/ante.go b/ante/ante.go deleted file mode 100644 index 5183bdf3..00000000 --- a/ante/ante.go +++ /dev/null @@ -1,58 +0,0 @@ -package ante - -import ( - ibcante "github.com/cosmos/ibc-go/v7/modules/core/ante" - ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" - - sdkerrors "cosmossdk.io/errors" - - sdk "github.com/cosmos/cosmos-sdk/types" - errorstypes "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/cosmos/cosmos-sdk/x/auth/ante" -) - -// HandlerOptions extend the SDK's AnteHandler options by requiring the IBC -// channel keeper. -type HandlerOptions struct { - ante.HandlerOptions - - IBCkeeper *ibckeeper.Keeper - BypassMinFeeMsgTypes []string -} - -func NewAnteHandler(opts HandlerOptions) (sdk.AnteHandler, error) { - if opts.AccountKeeper == nil { - return nil, sdkerrors.Wrap(errorstypes.ErrLogic, "account keeper is required for AnteHandler") - } - if opts.BankKeeper == nil { - return nil, sdkerrors.Wrap(errorstypes.ErrLogic, "bank keeper is required for AnteHandler") - } - if opts.SignModeHandler == nil { - return nil, sdkerrors.Wrap(errorstypes.ErrLogic, "sign mode handler is required for ante builder") - } - - sigGasConsumer := opts.SigGasConsumer - if sigGasConsumer == nil { - sigGasConsumer = ante.DefaultSigVerificationGasConsumer - } - - anteDecorators := []sdk.AnteDecorator{ - ante.NewSetUpContextDecorator(), - ante.RejectExtensionOptionsDecorator{}, - NewMempoolFeeDecorator(opts.BypassMinFeeMsgTypes), - ante.NewValidateBasicDecorator(), - ante.NewTxTimeoutHeightDecorator(), - ante.NewValidateMemoDecorator(opts.AccountKeeper), - ante.NewConsumeGasForTxSizeDecorator(opts.AccountKeeper), - ante.NewDeductFeeDecorator(opts.AccountKeeper, opts.BankKeeper, opts.FeegrantKeeper, opts.TxFeeChecker), - // SetPubKeyDecorator must be called before all signature verification decorators - ante.NewSetPubKeyDecorator(opts.AccountKeeper), - ante.NewValidateSigCountDecorator(opts.AccountKeeper), - ante.NewSigGasConsumeDecorator(opts.AccountKeeper, sigGasConsumer), - ante.NewSigVerificationDecorator(opts.AccountKeeper, opts.SignModeHandler), - ante.NewIncrementSequenceDecorator(opts.AccountKeeper), - ibcante.NewRedundantRelayDecorator(opts.IBCkeeper), - } - - return sdk.ChainAnteDecorators(anteDecorators...), nil -} diff --git a/ante/ante_test.go b/ante/ante_test.go deleted file mode 100644 index 5ac968c8..00000000 --- a/ante/ante_test.go +++ /dev/null @@ -1,101 +0,0 @@ -package ante_test - -import ( - "fmt" - "testing" - - "github.com/stretchr/testify/suite" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/tx" - cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" - "github.com/cosmos/cosmos-sdk/testutil/testdata" - sdk "github.com/cosmos/cosmos-sdk/types" - moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" - "github.com/cosmos/cosmos-sdk/types/tx/signing" - xauthsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" - - tmrand "github.com/cometbft/cometbft/libs/rand" - tmproto "github.com/cometbft/cometbft/proto/tendermint/types" - - "github.com/osmosis-labs/fee-abstraction/v7/app" - apphelpers "github.com/osmosis-labs/fee-abstraction/v7/app/helpers" -) - -type IntegrationTestSuite struct { - suite.Suite - - app *app.FeeAbs - // anteHandler sdk.AnteHandler - ctx sdk.Context - clientCtx client.Context - txBuilder client.TxBuilder -} - -func TestIntegrationTestSuite(t *testing.T) { - suite.Run(t, new(IntegrationTestSuite)) -} - -func (s *IntegrationTestSuite) SetupTest() { - feeapp := apphelpers.Setup(s.T(), false, 1) - ctx := feeapp.BaseApp.NewContext(false, tmproto.Header{ - ChainID: fmt.Sprintf("test-chain-%s", tmrand.Str(4)), - Height: 1, - }) - - encodingConfig := moduletestutil.MakeTestEncodingConfig() - encodingConfig.Amino.RegisterConcrete(&testdata.TestMsg{}, "testdata.TestMsg", nil) - testdata.RegisterInterfaces(encodingConfig.InterfaceRegistry) - - s.app = feeapp - s.ctx = ctx - s.clientCtx = client.Context{}.WithTxConfig(encodingConfig.TxConfig) -} - -func (s *IntegrationTestSuite) CreateTestTx(privs []cryptotypes.PrivKey, accNums []uint64, accSeqs []uint64, chainID string) (xauthsigning.Tx, error) { - var sigsV2 []signing.SignatureV2 - for i, priv := range privs { - sigV2 := signing.SignatureV2{ - PubKey: priv.PubKey(), - Data: &signing.SingleSignatureData{ - SignMode: s.clientCtx.TxConfig.SignModeHandler().DefaultMode(), - Signature: nil, - }, - Sequence: accSeqs[i], - } - - sigsV2 = append(sigsV2, sigV2) - } - - if err := s.txBuilder.SetSignatures(sigsV2...); err != nil { - return nil, err - } - - sigsV2 = []signing.SignatureV2{} - for i, priv := range privs { - signerData := xauthsigning.SignerData{ - ChainID: chainID, - AccountNumber: accNums[i], - Sequence: accSeqs[i], - } - sigV2, err := tx.SignWithPrivKey( - s.clientCtx.TxConfig.SignModeHandler().DefaultMode(), - signerData, - s.txBuilder, - priv, - s.clientCtx.TxConfig, - accSeqs[i], - ) - if err != nil { - return nil, err - } - - sigsV2 = append(sigsV2, sigV2) - } - - if err := s.txBuilder.SetSignatures(sigsV2...); err != nil { - return nil, err - } - - return s.txBuilder.GetTx(), nil -} diff --git a/ante/fee.go b/ante/fee.go deleted file mode 100644 index 7014f159..00000000 --- a/ante/fee.go +++ /dev/null @@ -1,78 +0,0 @@ -package ante - -import ( - sdkerrors "cosmossdk.io/errors" - - sdk "github.com/cosmos/cosmos-sdk/types" - errorstypes "github.com/cosmos/cosmos-sdk/types/errors" - - tmstrings "github.com/cometbft/cometbft/libs/strings" -) - -const maxBypassMinFeeMsgGasUsage = uint64(200_000) - -// MempoolFeeDecorator will check if the transaction's fee is at least as large -// as the local validator's minimum gasFee (defined in validator config). -// -// If fee is too low, decorator returns error and tx is rejected from mempool. -// Note this only applies when ctx.CheckTx = true. If fee is high enough or not -// CheckTx, then call next AnteHandler. -// -// CONTRACT: Tx must implement FeeTx to use MempoolFeeDecorator -type MempoolFeeDecorator struct { - BypassMinFeeMsgTypes []string -} - -func NewMempoolFeeDecorator(bypassMsgTypes []string) MempoolFeeDecorator { - return MempoolFeeDecorator{ - BypassMinFeeMsgTypes: bypassMsgTypes, - } -} - -func (mfd MempoolFeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error) { - feeTx, ok := tx.(sdk.FeeTx) - if !ok { - return ctx, sdkerrors.Wrap(errorstypes.ErrTxDecode, "Tx must be a FeeTx") - } - - feeCoins := feeTx.GetFee() - gas := feeTx.GetGas() - msgs := feeTx.GetMsgs() - - // Only check for minimum fees if the execution mode is CheckTx and the tx does - // not contain operator configured bypass messages. If the tx does contain - // operator configured bypass messages only, it's total gas must be less than - // or equal to a constant, otherwise minimum fees are checked to prevent spam. - if ctx.IsCheckTx() && !simulate && !(mfd.bypassMinFeeMsgs(msgs) && gas <= uint64(len(msgs))*maxBypassMinFeeMsgGasUsage) { - minGasPrices := ctx.MinGasPrices() - if !minGasPrices.IsZero() { - requiredFees := make(sdk.Coins, len(minGasPrices)) - - // Determine the required fees by multiplying each required minimum gas - // price by the gas limit, where fee = ceil(minGasPrice * gasLimit). - glDec := sdk.NewDec(int64(gas)) - for i, gp := range minGasPrices { - fee := gp.Amount.Mul(glDec) - requiredFees[i] = sdk.NewCoin(gp.Denom, fee.Ceil().RoundInt()) - } - - if !feeCoins.IsAnyGTE(requiredFees) { - return ctx, sdkerrors.Wrapf(errorstypes.ErrInsufficientFee, "insufficient fees; got: %s required: %s", feeCoins, requiredFees) - } - } - } - - return next(ctx, tx, simulate) -} - -func (mfd MempoolFeeDecorator) bypassMinFeeMsgs(msgs []sdk.Msg) bool { - for _, msg := range msgs { - if tmstrings.StringInSlice(sdk.MsgTypeURL(msg), mfd.BypassMinFeeMsgTypes) { - continue - } - - return false - } - - return true -} diff --git a/ante/fee_test.go b/ante/fee_test.go deleted file mode 100644 index d3b9a69c..00000000 --- a/ante/fee_test.go +++ /dev/null @@ -1,61 +0,0 @@ -package ante_test - -import ( - ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - - cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" - "github.com/cosmos/cosmos-sdk/testutil/testdata" - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/osmosis-labs/fee-abstraction/v7/ante" -) - -func (s *IntegrationTestSuite) TestMempoolFeeDecorator() { - s.SetupTest() - s.txBuilder = s.clientCtx.TxConfig.NewTxBuilder() - - mfd := ante.NewMempoolFeeDecorator([]string{ - sdk.MsgTypeURL(&ibcchanneltypes.MsgRecvPacket{}), - sdk.MsgTypeURL(&ibcchanneltypes.MsgAcknowledgement{}), - sdk.MsgTypeURL(&ibcclienttypes.MsgUpdateClient{}), - }) - antehandler := sdk.ChainAnteDecorators(mfd) - priv1, _, addr1 := testdata.KeyTestPubAddr() - - msg := testdata.NewTestMsg(addr1) - feeAmount := testdata.NewTestFeeAmount() - gasLimit := testdata.NewTestGasLimit() - s.Require().NoError(s.txBuilder.SetMsgs(msg)) - s.txBuilder.SetFeeAmount(feeAmount) - s.txBuilder.SetGasLimit(gasLimit) - - privs, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0} - tx, err := s.CreateTestTx(privs, accNums, accSeqs, s.ctx.ChainID()) - s.Require().NoError(err) - - // Set high gas price so standard test fee fails - feeAmt := sdk.NewDecCoinFromDec("uatom", sdk.NewDec(200).Quo(sdk.NewDec(100000))) - minGasPrice := []sdk.DecCoin{feeAmt} - s.ctx = s.ctx.WithMinGasPrices(minGasPrice).WithIsCheckTx(true) - - // antehandler errors with insufficient fees - _, err = antehandler(s.ctx, tx, false) - s.Require().Error(err, "expected error due to low fee") - - // ensure no fees for certain IBC msgs - s.Require().NoError(s.txBuilder.SetMsgs( - ibcchanneltypes.NewMsgRecvPacket(ibcchanneltypes.Packet{}, nil, ibcclienttypes.Height{}, ""), - )) - - oracleTx, err := s.CreateTestTx(privs, accNums, accSeqs, s.ctx.ChainID()) - s.Require().NoError(err) - _, err = antehandler(s.ctx, oracleTx, false) - s.Require().NoError(err, "expected min fee bypass for IBC messages") - - s.ctx = s.ctx.WithIsCheckTx(false) - - // antehandler should not error since we do not check min gas prices in DeliverTx - _, err = antehandler(s.ctx, tx, false) - s.Require().NoError(err, "unexpected error during DeliverTx") -} diff --git a/tests/interchaintest/bytecode/crosschain_registry.wasm b/tests/interchaintest/bytecode/crosschain_registry.wasm index 2a648d683c835cce6e3a2fe87a3949216671a5fe..cb6a87b299533de6f6dd09373a912d89aece0b09 100644 GIT binary patch literal 454332 zcmeFa4ZNmhUGICpJ#TA0&zfhL0R|ZHejcaYnthz(SU7{qsku20!beK5>bN29`*j0zRY+L&avqoN|i!aU#K|9@Tg zbFXKuHM3@z+^5gkjIR5+U#_?R`~QFauj@)KeeG+~BuUaQryDQH_U=vhUXt(KyEoDA z#D4Om;0brB{h#}m?zw5(l^-4d;qPw@@A)uEF6o9>yi0fzzvQRdNyEoCCYSW$hkR)b z+9x-1HyhsE$kqD9*Eu(nH~N6j*Mtw_g-6+qdQt4X@x~jI?7i8VeAiX4Z(aJTtM^=& zwDh}k*{d$zv+L5!lD6);-2L#LE3Vs>WV-Fy%hz1}`dyQcU;FAyuS)V*^r~IgU*|;! zmtJ<+o{L|9>6KSpb}8kpy0!L<0#{#k#jAPqfA2~XmGo~ff8A>?y{djTeC@7RU-Mlr z*tYxm7r%bjo-6+C8@!PXlgE2@y_%lvx%isby=wQaHzY&VG`H)r?|Q)tp8vu{W!A@s zue$WQS6{y9RqL`{uX^1N`DkXZeci4-Z@Bo?mtT6tRrL3P{1bU6OS@~+w3}vGmZlm1 z3cv6-D~et(%{p0;by{g!bUK~1*XeXS$Mw2tr=vg6k^h$^twsN({Fm`6&(ngcvn=sy zt(79}c9WccJk)>5Iv&%U{#SHbS*uVtV%71g`V-YjZN+*@QK;MP7TNLq(&Ki*vm~MR zESrg?!ZpiU8XXOGG8MG{@pYQDTLr`F7ezYg4F+kEv{jj!N?U44ou@YdAZev1WPqn= ztLm+Ue&kFI*{^O%8$@#*1zzsvrsSfCO^$1ylpi-5K9&yJui5pQtM|MiOJ=XQ>b2KhdewDTh;-kQc6MFA>(#I0=Uda3 z5lM1$TD4k@UXwm(zRGSHAqi>4(x!rN5B=Qu>3}d?Nj5dg0Z- znjTF5bNY+vJ?YP^o!{qr5C>ZSMs08FTC(elzQb8>7S(^PS1aH z_P6Qvf1UnK`d8_b>4k62{sS$3BK>+wMgNq({2S>T^FK}hK7A_vc>0g&H`9MepQh~N z>0hRQk^Wu!=jqqd|Cau2_DkvcKbM{V*8DfJ^Dlfb`_1f6(=TKfUj5nZx3eGoG&jGM zeKGs}><_XpWuM9}d@B39?C-O`&7RDDa9{qW{5|=*@^|OA=5NpcOMc;}viIdbli!{{ znE!14bNL#&q=DSyT_ePNtw=P$*7g>DAO%TQS2yN^I3P) z?x(Z%Yuwc(IZH3f?r`X@ySyyBRk|>4Z_Dh9qU=%dD|>nGe@`bCXhK#?#N_CsQz|lDhe%Z11kp@AHCHwzOdN z(@!QZ4h?1t>U5_n7s_Jzwyf+>TW3DoG){GyAO13r=ChK@(&6W`*)q{>QtYM3h6Vog z7q}g#+cI91oy}P>?rqP9Wx|Wno+f2)dsb9wt4e0=t7_}QreyY$NPxWnzT7>|HYM2( z!Ca$HcMg&=QJr~}UNDS)ZR?mL@sGv+v$FhosHV7Kqvh`e& zs!*r4WkVq@tN68ntLouyxG>yPX7gDw%5_P0QUi!r*AmrG^ciJVb!}Wp^~Qbs_FaG0 zAT1MhEH9JcH;^5}f8Y;al^V*Y5$s_oc^nFjWenzJaWM4p@Po zhr#4FnA``GYcPy{dN9;rgUMGI43KIJCilVoe$5hKrW;wJ4X6W4w8at~K~}%UJzb0? z+GP*Qw%0vgmOY`fBkJN=QTC=-LdD9CSfX8aV!@8pT9lo@61=KwfyS+fu>>!SC9Jtg zshTBV7%Hior=`FWs!=R4RWP!Iy*8Gh+t5o(43LyvT88GkqWNx<=DTHAG(R&<^D~QR zzU#34JZdx$%Kxv04I-u({;J@5I9XCm!?johSBWhc@bM+EQLn zaZ6O(YEp5lY>A3H)6niLf_BTH{oz)Ig(anVAl*Gi;vushO%{-b+3*vYBsqYmSC>e# z=K6J+0hG_amMm;ZP>B6dM3Skx?TrVMs>Q(9OXPChpzH8BuLH@OSMv+}c|0+ZY?7L4 zH)ofP+uQSUk*aCaVaad$G@o3tE$R7NFYEwTe?}?KyQ(zyNW!0*YZ@6bkTTzr^ce$M zB2bThje#fq6A@&HhoQf2Nx`&gyz>RJBT77^w#KYtPCe+;SP(j}k0bT)s#(i~dh|ln z!`JktE;Vj7si!qXJys}Ck2fF0pk9c2rfQ4SW3P>ROygWo=4YY@_YJq_=Q-+7%z5=t zvQQoPv4hF*PSZ!j59EgOYR7Jo+9OaCej80dz2T}=%Kg6?gvfY7R zh(e+ZnuB6P#s^zZzff!v`a*Np6q~(9v2iB^nXSjOrHW0(+}1;dfMzR*bg_@4t;egn zmfTvxXp^lcwIf?^s+94tY&|4XZR>eU0i&u>7@aB@F>0@at+y2=2I+p>m{l@(t8mc) z{&43A6*!-rHcEj^i^r|1bseTsyZTmo?aom=oA{1ndx*=zl=xNf*B{fJFOZMCQP@=Y1PvfOttzgWqpxDKLu%_FyJ9a}}@9#ri zSyL(sFlM6$`YHsPmO7$eK#q$+4)8!G_8Q1>C(39Ec06mqF8C5ER<;CknJ1wj^2a_# z=9n+Rt7a_}*j=@yg!G~VnOJj^QYfJZn@T8Os6IWpw?dOXS#73-^g={8Ra+!FdmY3G zlGbESQ$<{E@?t)_5=`gS6Q&*1M~4)0T))QH?KPy*IADPhU9kvK2mz^U)AOQ*ym}I0 z62!jCdv8PDmNZjxtyF~Rs4Ii;S5rp?-6BG_wGKYv{N?sC*0@g;KKx+7^XW%?3HdN?Pq9=0M)?4V0{z7##LsL^w-6uX-m zj@amTdUX@K;7S=XsH_t6#QvE0bR2vUH&NPjK~=D-E!PV+F@17`!}U;;oLz}bTec`ek<<~vuo-Rih4uo_Sj zihdMkMW}w)4in1&nw>HXf;oA(M#|8LXaVJ*eoQ(g^K(Ued4yO6?NScW_}HDMlVAtT zDELqt*t1Z@eAZt}P}WS%zQ`?+pKnSF18qGIxNHdV7jVxyx8hb9NfDrI_(91M3^_#Ge>SrPU?EWspaHIB z1XVFgjnlUz??|hEOkT>PIeX;a-JXt9I*6HC;j^SKN^Vd2iCHng?clp?w%T_y!fRAL z{vHg-{W2i)O3kOkyVNuWCd2!Aer`!_PEB3y;}Hb6KON83eRAJtOR_KaD;t?0rqml# zVl>z}*NzD5RQt1qs@OAH!_OyBTl~b6s~+;7C-C#BbYXNN*QdFjlI_TMxMLOm?)57u zVGQGcMss&y512GyT+3gu^Ky-sg^&u9Sjv;K@AhWxH8yrxEtzub~sTa6tt z_8|0uF;nE1Xna0l4D5u+`RpO1*GwqSWTNu4s9L+{vNU0Y zGu7MQ3>MqN&myW`O2`e=A|tXY<<%{E)#BADj_^>P8c@GhgA9&kYQWJ@4aK4wXbdnx zj-NLK&x}&Qal%=|`({Q10mHzKVVi(&BQ+}DGad+Gb45;nf$;{jvWMeBOz7wj1K8+; z#c(*`r6xtcl#0(sc*WHt{u7hQAd}7tG-U_Rz76z@h{9N7Ev;BfC`#fWU*TJg?Q6g1o^da3SrCis$T-|Al7ZU$dse`45H znvgDI7oeb=!xf>Td(yswF&YSz@u3>?V*o7rHm2aO_uRy6Z1hQ&0^%u(K1;)VB2~Gw z24;7J{ypja^WKZaTt?AjVy29@GwAdQ>vx3Vyt)Uj3;;cqTcp`t*2AIoMQ;PrPNiVG zPc*X8_q_p;>O({_U3<13L*^FcfXpqH^l*x_cv(TJ_6D$Gl z>OMw2^q(52!K@hHbLg`szBqm!m z*Wt3Y@APh>wF?}hXnndCt%3DrmCXjBs+bHtxx_>(AbyZri#hB|x90~nP%I3S{#82a zR(Mj9Ru`DGGQo8r^eCx2Iti9*^TEk3GlPt5xr}U8f0!tme-Z*D8J#5Q&>406a)ewY z$_|x|QSIk7hR+u~c?E(FzSW@RdKh1q=}QL|QG6i9&}Iw=(^0Pk9K?K7vB_vPOOxwp z%R(Jy6xC`&RiE8xj3#(;POZqgGzzQ>!CI39(#60!v#3(7#=6U@u`n)TGDQIOO9VR$ zwqTc!`}6`?Is-U5L95XA=>}McYD@A$FoQFB?WlKVGTPWwM2_ci*FoD2>ZfNNk_ws; z6Sbs%MlDoPDkWrZO%ctAr1}nZf&%J?ntQ$oVN0^rIshOH#z5Ni&=7r)s+~a&EN28u ztKYxcLo)?Wjn#<`#46`&(E7VA$>yku>_O;+ghoGTqJ7!OV!%(QPM1%ifrQ&9)6tys z%oC=G=3Eo?OcSN1N0OBGvk=ytXri8I4Ycv<%b4q?q)r+2gtKg9<*BzDYCsdE%hV7w zkq3-p4KyY>CF4u9NoD1nYoZK9&pA9C3#o%2FeRfN6t&X75{&O5ve?vB>i|S&+;U9? zsABg_#{j0|1s=d;3LG#QJG=0Gsf6#wJ0$+fQ@7_2@v1z2TlO_wQ4x>nim-ZA*Jo|d zA4&UbC47PS+6XIJk-X>czHH$IS@J!mU-HfQQ;711RnU;L4cS?uZ`KeQ0UT>2iXE*{ zjnE_MRQj@}T)R0-q^Q=&9$(8JR|959%0h!0Ooi;vROYM!>g$AZO(=AN3aMnRI~c-4 zNFYSSoQ7MaC>`4OiauoI<26COJTE5%TGj-b_6adU{-a2s_8<_b*W{+st=VW!W4H#cG-QSE^qwD@`AjN4!>M+Rg+DjjsK+-MehNVa+;kjmZDdaS5Fjm-r!3)5nQ_oCC z8_mEo21tW$)ZiYP5W=Z8^ga~{xnB}aK<*>D0vW>*+Vvrm0(m*NE!#(j%kH-9X??=0 zr^2Twam40{HKb2m3~6U?H5~XTDCNf-_K2Kkh;!4;5$6Jo!#Ruz^XBF((41l1d{9%5 zh7IEbuwkkIY^-yTACh=wQ$#KZBxEuSzcb3PlZ4hS$p$C|>s*GEKxa^<7Y5}Sqkf?N zqQs!hJkRT2lzc%@ZB^aZzc~4vLCAgPbvxlO(7$I71kf=8ka}69)$mtLivds!M^OZ9 zxEcN(oobYcL2s`-GM~gcn5$KOr%~tx}H}D@r`D17#leR7CUW=sAu5I z@tmgJ6;f}PU2+K8m7=Q!IRtG*wG|U*R--(p%C8&s;g&hX0?xT-6U_06Clt&qnuE{6 z96bC~GO5!@D43I*ZV3f5CG!LHL1extp`blUD6n465&NA^D9|9WB~I4$LE_@G<;irk zbsheExp8}re=aGSa6woq?*TSb-UDVgKzO7JvZCl==r_U}S}HY-D9zi3M%?hMq=uXwc{$asBlR-ovWc z4Q_;AF4nO61vpZXPinpEi7>?ruxtd(#AqErh6Mm=*%-`sFeJO(jpHN}Ty{6U6F=+CFf&t z_lM~_10aKmX=W(?n%b zz5QLVbLm|jj-+}LMK7V0gkS5KG4o%@1S3<+(}J$_7AmzFE#wwbiw9J0aj@Gm#T9=q z^&sXGNeIuWR%Y@gcQmcAaiOwi@@mt9&AsyM_IDpdwUN#wnTe09=g*~xVzApX`pK^@ zzvlgm)5|>0GZW)wzF{o+wRJMfY{D!ZzL&JGNr)GZbvnii<802iGPTDjFh(>wn-4m@ zw$>D?Vo-lPm(5O+89ZJpw=|8uS%|c)Xenn~l1t#_Vu!vcxw~|n<0J2$drpzA0b(ov z*GktIbjQ2rX0s&zH^(#S6nbzku~nDVBHt~^+EI?I&8z30#UK31JzNOM?HSDRF;Pkn zD~Dn|rMJ~`Mr1&4Thc#Hzl3F(*b4F5NcE*Gi=Bg>ex8K!Ibi12D^-v%m0N`5ynet` z(tLJPyo2tm&x1m?AM$Q{D=XuGcpZd6~?qx27_(>|cOwVoPBz)c-S zd0BOQvW`zoy3_TxyA>rW(*s)1OTI(ZeP=biZjbw&&-K9P{0N1>phkT!42#CG=y^~2 zxq)QzP+y#o%mV`_eJ-=x5+?e~zNMf#b2Iy^6t*Fjp;4cbF%A3@RvA)w)Q6MtCBO(KT@?ef0@W9B@anlZLdXrQxFxV$m%k>7!LlDx$ zO~uZ#wR6wJ)S-C`T=Rav%*WO!r{2nD)->WO-81W?q0+)ngI2KbHICT6+-!JBO-1U? zGz-rM6Jh}KMkiNFKN$-fOHk-?6(T;zoN63N6HV)Tmu#ZRY;c zDCL(;=Ze&s6NcR~7*5QO@)EP)aD6{9IFzS6=v$aC*f{{(NHZ$@OisB*;=K$y5gvF$ z_{tPArNsAA{Lm)+Vx$>gd11E!RoFzfk&syoMnXpTkPtN4N8^en*H1{2{L2JQ<>~S2 zqI_FEv5D!MTUlpsp&8ysnK6Z3CHbhFAfLLYb$#aKZEfLt_E8OH>v)o z-E(=GC1}-5u{Mu>T3p=Xp$Msw7vcTr?X>8RT1dti8rH(>`FGziGJrsp=EAhee-9x`Aw#r!>Q?y(=kbfn+4lYEe6QpZ(hg(=Fj+FrhTjyU6nh}_Z()4Ntmk8vsL)3) z&oxKSI(xPYVNtJBG>%(hy>)j6`yR{x=}DRdG*?rWNDgkZJiScZMwkYKqGaGUI1ku~ z`7&{v=7i}pd3w=n0UJOEBo}pJECe$APXuGVD+U>JwY+=sp-iv}n0QFM@@`|biVj?Z z2zdOejz0$p%`do~tG~8!7Z@O$k~MK%3cVHMMHi`HvS-Re`oLV)cfaR0S=+{RxLa7_ zG1=mDj~Y2(gx`rBVw}d47uFM0dZJElNzSziD%oK^L3J*_u&Qh_kOhFtC{y?I>Up4; zWkCiiL!5`y$WI+FPWy-xIvI0HB0n4n*bSz*c9arQVTFg-+`B&cOHV9MB9r|E)$o~x zEG&EYo(~^HbPfq{T1tmP3rJaNCffte+HHP&zrO7){+95Aeam!bYCZolMvtOA7P>*= zDOok%eTh3c*9=gznoP%(GpE=+CVO_i=GS9(N{=C84A?D{IrQ5wsaHCV)bt1da4BiS zfx*SEqJHUoI8I!Q1*;8i{nMxtdLiKfcQZbm%HeYiQFfa#^Y9!6nou4_y%f5h=89Q$qhtchqUi>+ zyt)OCGO?u*4lDz+$HVf?EY94XT!_qonm4E5Rf*p&_VlZS|KR6)o04P<8uzA`u@vuWOI1ml>48=TR!y;Qi68SR?!t+%;ybFX3Kr(zusIjV1Mb2fPh$ZGo#b*p z6q7P|MQq#5aV{IJHC#!chafF5%R-D}a}Lp2g(fIkJIl5?p>ZO}@oZ)9j`T}egZJ`f z!!Q`{n(b8X40^M!@a_JzWcBwg@B>Ixw_-Guz{DC&`kE5<$ft-@HgFy9G`HnVa4LLi zyh=91?zw{H=PCL>tpb^TR;y3b$TOeKP07o~rY?Y35NvRpn+qnE?$avJ*=LD%fyAUt zk+<2YW&y1mp1nJ3u9D?TWI}2wQ6LW&VK^o>BPAAMe^89AYxS5A)(Uc5!Wa*v zSA7+$TZ@{DYK|iPtOcoKdWJxXYOZdU04We4)d}u{3@1?@bx5?F$o5~~aCA3DKQ|?C zfNRjK@IaJEiz|eV4qXjkUhxC5ivv_2nTL~A=3%_En|76FTl*InvlwH5*b_*xCR)Ks z6X{1YLQ+)>72=UW`$dc9jBzSW26V7!K;s$wiWW^XbF_Bqp*NZ}DCG1DczE9ECj2cJ zskB@hNiMf{&2~J9DNQ3%%`@Wr)RP;H_~_R}O`99YlapXa%O+LIOOfx;mzkU;g|JdL zbW#gtwy`gG2)Q8#S~C7;>OiL2(zu)YMezXzGPUfTaz}tHJJP$PN{SSiw<=i<&0H2eHEAUdpfC2l5sLD|=)1;hx@(7^qiM1; z_|SkTdSP}mppY*ea-upC^Y9K)tf)OnVPSvSVr#1x{?g`E-0W-6Fi)+AL!!8ABaAK^QS zLU0fjkHYMe^>-e1-18GiFUU$j9gYNDYy(`qFQoOlYa%tqConUFCKGh|y#|C$ua}CKZpnvE6js2@qxo#3zGnG>)8Tq3 zL~gKghJ?vfz)6uJq%w*%B3B<#en~Yv72@!?gwzdOKq|TM(%y1}AA1MbB)LRzGh~{G z|M2$gguN{VksivURZPqy7z0l^X9;gxl1Jnwf_OBeiM}t|dVv9Cp|_8x zQ_}wN6y!&7FRRCMlhtI9@R}5kBA$6?f%ZWjF=VAG1a;#*Pzw)Q`{)=%5`L-$8hHFk zh3fTc1SG0Eb6MlIQs6%SspSFt{pax%lTDYI)L(9bGEQii;3wC`+}^g_Kxklt4M+Kz zErt0DYd1`6*gN_*_;yS3QN>G558L;lAB>-Vg#5Q$fWo86oh}dLuqpR9=VDMH z6HnCEBP(SwfS;t5-E*C!#Rf~Q6d$0lWqGzJU{CX5 zBsuddfArCxx#Jfe`OuTeE3vFJos`eU$s=0a;I-#@#-2||&~~HtjIf(Mn$*px#TxDD znz0?Fd2%zEeLiR8}cx^5fW z7Ksv___c@SyHP89n#ClJZp+FOcQT`{ z$b^%sQ(f(#=LChrGK2@9#|WxLeYih2d$NLeAy`Y0yU)shB<;QiB`M~2dy z-e9&*QYGOM=({2nBjQX>vW-*mA%Rm?iG2`gtp0#HdiqGX_b&nt5ahGOLP*0$^uIBdDv=)|mP*7=eQKq(-!s?$?%bKmK+wJAk#MyNO z(9B}eDJA$MfXsN8VWr@oEtX3fAufEaPMP5Fm@IT zMiz*v?wl>)kby;`?jRP6M$JJiy1;GJ+Z2l(2{2|?BvNIe+wX~3>_9jzgD|TOh%y-h zZ7J4(k(p>@DVF&(P0@Jr9WEE8al`PDG@Ena$8|n)7RH#LEl=^qvHJ2&Z$>5+l1cXE zNzE^5+orJ4cYOIH`ZCB`aKkD;l39cL0ym^mP1+!1)x40BaKdc}DM`ln>q-#qR$Wgb zC&&>#K^a>&Ad@J|7*NPSSzqVEua{pnoePgSLNSwL zcUl?Cg+IPrA9CT3S0R(=l)FNcbuZ>oMJy@OKQ(PcvRO)&G|j~=p=@43T%x@B2&L6O)9W%c&|+XyO?tA(!ey_yebN`SVN>h zY^23tV3hZw)eRIF19zcM8|`adfIe`(quXeac|ICx#lqrXf(dcW-QYMoDeQw3mech4 zQ<=q!74f!q8LOcH!)3pr6rRKW2|CTlZ~1%LF%zZ&k?sIp9K4_&ib0e};nr_3?+=yFo3W+%fYnm$BG}oJhXjQ$Tp5bgsr3GWA zt-8@F7&Dd$V_32o&K4?Bra@@=39Hqund{7&Aze{Jxn>;98J`NG)0ewfs{UUw3g%27 zVi?q>%wn^pUeD-eOW*7%Idz&!D6sbApSb3enzr|5y7+rIK8Q6 zbCLbhSOe~LM9u1-?Lom7%w^b=ji!5Ir5C6+nvO4(>KB|l`#SUk*+P-pxif8ub7$hP z;oJ!cMvl_ev#M7PX{T!0WLWhc=~ylDX8kt=3qR>~zq0*uI#aJ1AY2zS{_&>Bn3UdO z2osZmWR1lpgU=g*eI~Ur7m4mcD(10=#!m$X^m5?Vgk)xTVO9hVsx9{2A4yQGhXlV< zvH=h2uG~N<^>85Hj(m-exxy)kVw0o}uBgeWENJqzrEx7Dk(79YQ70Zr(Bx6!!22r- zU)pr>4+%L_y7dr|F!2dI80;~E^JFcmL%F>p{Sm}TcE9aBNrULKkC~QdN@3N?|C_ltZl| z?3P1Ilr}|1>+@9OLQ=9{G}4VTal!u-@!06hnqzdX;Y^V~OZ|_oGhH%g-lQ}Ac-Hr1 zcS7j4EbDvZI=ie^Qg&>q=`}i&PUz#FMhxkmX23`CVoUO&$*vtOXCHGLHC;t|jU+9g z>AR!}lD0Fe{M#UD@3iV&(%xkW3Ds>p5^6fTP7Jz6=@&V0+Gc$iJ ztDpDQvNlen9Ot34hD1$2!Jj69TkcZgDLtG;{U`_Z}duXZPsj)wqm36HLCgAk9wh2lQvGyc% zMf5N?5wW)SKqG!;A{UB~MGW93(KE=qLmzD3qhEbYA)`(Zu^kt&o$|QK_i~+jjpmVv zRqRRvs82-}yGr=kD_cGshoiP$70>rTlL80+kCl79J)}WC3#%%(n+e8!STC!mX+3+M3e0`I9sAQhjR@f;xlnmv^R#nJpcKiMj3 zP}f@m&F&YKF^5$6{MyorX2o19g2uZkHDWPa3oL>LTMjWA1IZ;V*x^cl$55qeK$AK+JmILH}^DzdqV4XS$K0IIYm~>O3taS z8{Fu6S{^47?>UJpfKxCmw)PMtqcmk87HuRXYEqPt=tR1T(P!^QvTBdbYu?OCShje_ zkYnYm>7HnqhR}QB`UJ6Kq98W0Av7UKOHfC_%}k>;#m1^E`nW@{*fb2C^0U6$Z&v+h zmu_=!vz>%LwItXwvuFaSA|)RO`E{0vZFiw85t|$FEE-k?XYP-DCeyw}tX$Pb1Y94; zWbbSyzUxtxdoz!8+@swI9MXBkbjn0eS=NWJaH~a`m&SPW14Mk#41MdetynxU2$)z1 z&!gdU0Bd3*R5?#X)#54@(QI#_@fn|3G(}_9225j&PX(ICY!*F<)2gl~U@NN&B2dVc zzZ$~bp^0%!T(M@Bl->_=n%z%IbzhCT!{m{64-A7{g22e1&G~*05GU0ee;f&{X(C!4 zj!Gh9tfh1NPQ%is%3~hkC#e|guusvj%EZ(6lk${F@`k=j6n@{z6Dk_$nl4O}o>)^mZjOz%IGGr!6V#J-#9QDgJ0B?~#fp8Dd!Ix|B7EfkKbSA2*t zPYTU_Ldh!7+fcSM{U`6*GmjCT1#ctP!vv7^wh-VpNTD;dtI=9V<&if#%^I+U}dFsMyN zCYIq}CTHTdYd0AB)G)CrXW9Ea4^x+0ci(;Hx6(J8nVlI9u(H(wHEQ8DNdl5VXn*TD z{LZTvonvWBp`nrux@|`rtB^_IkU)PX#gv<_z3Rp-Qs+-WIke7mtf~xsi9IL1o_a%9 zZWtFA$X50t#IImT)s=0U5N`F{$l&w}7$}Zn2MgT%s%*VO{2}t4dSo{DhWGoR*m6&M zHubcrD6$VW5#)Q&-OwINGVqiPiv|3CQt2>!*6KaNPh{FtHczkm=Kh1Qoc1x~<5Hr3 zH5I-{sdQ`Of5Fqiigx6qGTD(K>qg zRHn^)84mmHX`5MwqF-Yih%io|95+veUIcSZn_K$2#*C>HH%}eVT=I=fd!r7Nn2}Xa zBTf@b!nKZ!FlWHe!e%W2R`Q@2^@u}Z>-@70G;xGNJ z?S84PQ&}q#M?rgGH)Oq7)yA}0C9tzDJZ^_P0eXOGST>qjx~1b`O{v}1I;0g|$sB#L z6XLddG-po&P4$h8jVZViD$^rPeEk`ZM571&Q6I-v>02OdjnGu+V&u4n8I7Sm)F#8+ z1>)nq?J+MTsUmfIjZup@^eIJq95+iPuNZxwoF_9W)T^BR@*@} zca=FA<|Jl@4UWY&UJ8%xE4V>nkA4>KuxCH_aA2%0XEkjAfz=kaOU5ExTH9p1WL|r@ zEVw_%;tDI+axXf~uyo2y_OerOspmRrmUoI)8+uw1N+u?1Tp}b)Falj;o9bRUgN0rFTD8UFYDvBW`0m8`s{@88EuNAb*K8tM$d-- z#p3@F8t*tvFI$J~WoUT1m!Wy-&XwDLgno4ph4eSDl@8-c#7d-MuwPzav96dZF^8j^ z2_l^Y65?z8i6UN*{91tIW6F7=;X4}*K-glt*uZU}0ec)8Kx1dseJhtCyTdxwD5DaH zfk)LG8wzD8)+3~)Z;Jc+n{cL9J2tf`FGGE4fQ~a=40N~*{Tg(A2i_iD%+j7P zi;2*~spx5Dp~ub=35LQnH)PO=L_f5$Y8c3IaKci$1>5X@m}-T9odeTYBCQqR18FUR z&-m!!bBEy5nZRe}NC{vfOd_vK%w?&s5p}SAT|7E7Tv3u>qKW=*3G@#ML`iZ0NwQBm zlWl8AOMzavny9KJiIl#YLBaCz+v3Nkg^z9fk@{nSz5bZ0ST#W|X|1`VtWgh8!6s{J zghXDSVnq-#%~pM)x{+kws}8L^_9LPiReK0PeO0(5!nZu2OqMle){%_EfJ@CJO-FbQ zPGyWoSl`A8Ty7U!x+~Je5y3^(ep}&Ek7GHwY&>$foO1LG{AWJ`9Q!b^H2Q>;k5G(H zxR^>>p0VuOPux;e_p6olD`Jaj5ktV!vI(#Sp5hw#jF?V{2UD-v0FgjzrVJj8xAZe= z>7ek#K0HJd>O~! zFedMdt~7!v74_4yKnKf^U6ZK}C1if_(DtqvA{erOzE&;wcl1~*W++#*S?%tUO?TQwBXAf4LTP$ zK#iotM9bos)YnAh@kfkEF&YB%(M(%VEq27F! zj@^xD>d~NJs$xYOE2a(Q^aLHVbFlWv;m)jGg!^Z$uM@aiD2Y_S=fjdK`|=Wx#$k$egOx4-+ve@gM?wCh;Q%8g~w~KIRA+ zid1_UAVi>c|J07n-cjb%-otP{!tYc6KY!_fV+Y#^(~cV_x-8) ziKp0cz#S*B!i2oe@AP!{E~$Myuo)Fn+L=+Y*IIj6vMG2tzmsQV{e_7y^1zSSv#~OV z^lbV^q;#}MD}?vnCyqa)&6ZW4u~1WEa;|!iCq%Clo(;1ipX8U^U{>Cl9dR(Th>*T| zEWCPDucWrjEvUXEV3RMie6-x?pJWFPBcb3J$SNV>$GThw%;smIimG|R+v-pL9G zdUL1-zIKQPEE;kjV_Cu1#6Ml)YvTB1)xMR>;GHiiL!Q*3q~qcU`cc~wM<@hLX*47C zOAN%N16hSpsbxHxxRf&@TG;~Sgh<6f^n@*j%QWc=_loJl{`}>lv$e%)?FB!bl%*<7 z9;CqTD%W(IUKC7_8M7)gG?e=KAN|e;+qTV(KA3Q?l?=yWGp)5u$)A2Qc`@vuiZe~( zXFKA*k^~3aK~TBKPXBrJX+;9_AxvTpu9zaPKBAgL&=HDdiFBCZ30+3LYUvgaV;Sm z{Ngayfx??Xf~vkp)v6?@pPS7OGVwvcB%sOX%LIE!P+m-#t8j13gF8ZzbkuR8BW%aG z=E%wj0`6EFTQ38oniWBKBT_~|pC1z{?t@cT2t3{sCWnu>X3J$26Rv(9-NL_ghdf0@ zlI2VsvS(Tn6eop!X49cTVN0HPMu35lj?h;0=(XYDklkL=>s2N?HD^(+Et$*RU?giB zRgzX4T~^+7GhM`Gyw)%XY7?WUnY+>tlg4+#@F8^tNK$E?TeT?7#HHmk$WIAp1n2BT zxma<)>%`l$WJjPTArvC&@PB3r%g*3 z7Fg-O8ucHdjg!Yxb4!et$p$o^#KZ2ZIz)L9ppNF;^F!v7{mrL7{*`zA)fYbUm&Ycb zEE*RXw#*XqqNx5}_Cb4*c~MkMM>Mh#Mbto& zAU;9I)xv$l(;Ai!8%3<>C2aNFLNka4;+H~#Ck^Har%(9I@n}Z%b(P)5n%E#%o?(6? z#_TF#cHabMCYvyDScD||=4c496%!lVkz+~VHvz%%Nh~3JOKsoevTyF=Q)x%=>I_4K{y$>lZ@9XyW~1{s|{?UMwSrgDUr6nGaN-?35?{MOH(QBTx?C! zJnpt0j!^zeq4(@rp45_1s#n5-O*ofkvDmKvPiV_zi~X>80V~$Oh2hWJ$NVe7?PmTps5yn9R?&3twukmDY$l}ie#sRjOoC0<_d>c;Bi2Fn3u;x}rQfZ>c;oD@rT2rwT1gA(yz; zr_W|JPC_%jbcD_;w{<&l82>=FYNnbX$(RYNLKDhkh@QS@=EMUAJ}rf{xX+}NDt^E| z-LZ5CW_~~37=owng}z+oUD4uqOR=3)TB*#WD>tR;$~8X3%LL1L>%F-eG2xI(FVkn` zl5XfUY*nU$>;|Bm{Q0buzh$ZOmO&qK@l#}n9%|tcSGL|;U`3=NTE4qJ)<>0$*2+Ea z*}~vn$QHHE_E1LN?Oxeqy@0wyBT_HxWhwTw$Uzm^K7Cxxm>WJ<1YXZ&h+x?rh<{2mEY;qVBnQ}zSX^jtC$oI`F4BTI zxrEJC+yJP$=owButlg(ACeh;AU0kl&6xA)fW(*W+Q{+RpVUU63ALiPL2`{6?MyUlytuTM4a zKQXzP)0X(7H7o=wS>p~!3%T&a$&nHku|#fqSZCa!Lmf_J`l0ICudRAlR-a_w_V()) zO~nF3VVAir(8?+{UkB4;jxj?REdM<|ASu849w`R)7RE3J%e=B3@gMElobOn{F}SVe z3d85CY+GG|lo*6Muu83UX|0Q~xLkW|u**&y=M2!Q3OBOD)v}+loQHi4>@(&&bwigR z7}=4_j9ON4**=Gzhty|c^6cS3Az9j)4u?~(+V$4Qaxs=~mglNz_8fNqu$pL4&6}5P zM_8$**+n(6xyUj-%GCkG1C6mouWlF*RtsT<@%l5fSB&#wZcd%|-H%XwA~NZ8>k%YMqFgkZK5Se(hYKz{;2i!es|RGv3p>-A<3 zI(=E8URJc217n_}A=`kFBY*|g<&i$4@#p1?!0G@sd@2Hwd_Oqq4073cy8jmcb%uYa zz>AKwVZCYfz*i0?)pKA880>5M{S<$Ow-B(e9{mWn8>@#u&4c~T2frR4q!2&|igFAO zf@=61Qt!~Q3`uN3#(ja9>CKU?!S#)L0HKr>iYPRmYX^&rErozBk-;aIHY~j3|BP zZq@+K;L)>@N>1cqh2Hn!R1Hsq5OJ65?x^u_H5F~zz| z!LhW$GircHi1lpG>7}?ziKtH?uPq`HL&^?w<+RO5z!ri6A1|vOb8O)=#W%COF(1$0 zfR*qDJc`Fwk4Z$}LiJr!KoA!Bf2&+?oT+uJ(`<2Y&9yFh57yO)y=5X8H=o4t3KfAN6mFt^)|I?aAY{lG~z3~pf6^B%;6B2Z|Jtb_7snj)I)!8OiovWg!b-q1we$q1#5VZzp99Xffe3JY3 z)fwVDdrp!JKVvnQST&C5`0Pr1_Js8@KD*wYdB5#hfjZt~+l2?2aFc{YQzkqRWdc+G zoXS^i)@bH*0<51@GI!>Wvhl)!md+^h&?Cn2rBmI~)0g^oRzdxa;<<}ve{Wup~d@4mE5zzubPAa+}$V^{*Z zCxav2Q=ZKmCinO-ShwM08DJnP-j`|kl`Al4i}Pj5$n1LLnQVj3z=*-6)n9-4*E)7y zdJ8<;Ht6xZboO#cuk@413Csw~kgMAZ{30=t<>An?)|n6Yh?wl83K0W94VE9~sTL6f zR2^u+yD_^RfSc>J+p(LkWnzQzBjz&0y^hJq_Ev0+#tWmSHWt}NyiFr@F%iV5D#8SULMIBasqMSKg}Xkr;gS$1m1iQ%n1f=(lY1lV z%OFq)^$snKQg@$!CWJs7P_2Fb=Rfzamu!c>!SVm!YdieAI`K@#ecCVzV;U48#GzD< z($ij2_?pTQk^?9om|z_r2&u?fd|-Qxc-Dq;sC0ub&sZJqIYQ!fViAxr#XQSFPERN( zb59?~EC*gSYoWmIswZ`=7c&?X*4(5NyKldZpl0wY#MIS0xeo+ug(iKn+AQ-yFO>N( zRa;zCY_DzmfB$D+POv9Kce zNa8@y&^A^c1*Tkg5H_4wquvo0R`SYqLI}!(`jZQ{!PW+fGb9=dDX8#0l4<3RUlKbG zDheI`9tSH~<>T9)^~DWrxTm-D0}#a;Dd2Sr5@!e!^IjoYZ&JGaS>O0xU-k7B`@}Tj zCqRyXlH??&fHhn(^MrfZuu2rhuapfVQ2@Tlh)GuM zVg@=7b9yRGvct^qT)7wtl2S+#4V=pi2Be~3u>y&xD>^37h88=Zna<9+h*QNo?W(V+bB-xgc-%*;zsDFK7dkNJ22Gu zqO9YAkS&q^)QOM`m3i>3nE5~)bC0D7iZ<*=DwP}m*8n+WraFx3|*r zT7_$C1?;I+A=vJ7zxO6=|2TUOvi*H(?`K0lX8$<%!=!d#0f1e!ydO^jp2#M3qYhK% ztCsUtjhWU^3Ye{69*NJ>aRr|eb?m!ilTM9V^TrKW1B41IM5m(Tx{DC=}O(UxhI z%f8H^o{HunpWg5>JHRQclCycx)+x7N{mgs5`(=BOyRGU^`DuzBYk`SB8ej;T1=i`O z@Qiv!JbL$t{xBGAsmOsz3`Rk9v5ncKrY94gp*GMdXaT;H!$CM83*8OfqD#C2>cpu` zPSZbaO-x^%9<&YAyj#YAi>-npJ$8660BvBDGxlu`;mhWwArCbMGm$~a@QM3WJ@(e% zA^gk3F>*mTzV-e81IMex@xCIR(IH7pfOvcrahQv3O^1mE?S_+t;kflzj%K9NH?esg zmlB%gf-eV^jq}|vgVN*?kJ_%b5c|gM3Kl}yotHti+U{+fSLt7tsVy$4;e#X&u$%tU2Cs!iRle6u2EhJL|feT7`om4t&^1i74iFhU!ufm#kBp(h% zR^`_sH_;6*x7aE2-cHhFNbaXW7aUQph}Y8;<6~`xYF`<+HtntjEN7YTmM;R*u!K#p z2GNUER=+Wyw{|)~j~9>wI|(SrjPo}cWMI}RW(2+PiPAAUTq_7@;MS&N5QXg+$9~@v zfgkFYfVUdJo7_aODC7g$u2mv(gmmcuH9=5pNpu|+i=;n)3KRV`BEfD5MM+T`#q*(C zBBIyH#)Gv$H+lbGCz{*w4LiYA;t6~cHEzs<2!L%$qVX`_M02y@({*fAZL~|63@$)( z3lDkan!5lOHVy%9%&F|Axv4>?=NXT1ZVYWmbF*J!0=qg>y5YP}}K5ZKo4)g2F~^dq9JVXLZV55KpGIfjc9S+U^D$q=7|Vh(cg| zF=0^K3Ln;LyY3d~L#7FFy(zWrIT(h#iP{e9bOjC_1SsfC)VAzZ<5+=xX}n^I+Wx&X zZHII3Y6P=SyAX_3B70Z(kyxjh^&_7`Q;Wvnr3sOVuo4YMVZ})w7#|W=y|QC4%7twd z2F4kFza}Oaf+QDjXGGsK5nMeOZ%iCEN-5&=NGX%HE|}fyqpXFJK213&!{=`Dr4{>k+531uAs&9}|Qb&}SmwvK&PlW05=Dm(w^pB$Jx>tve2Ba#-~F{sVa_7 zyz1lIv}k;rmW=NpTZn3WwM_N7#I*W#$#?6N}D+wI^83451UuX@xVwV zise3((TU<_NNr2$%Go@YpSO`GieW&qs(=^&>C@Yk+M;ZR`RsOB@N!FR;5dRU+6(f^ zP_%7xN`CZr*&>m7_`iBt(>AKyzwm>_^~E55q1uBHkE+2nF#G`O`RsCZbbCvpSu(s} z?fOdWL%%RexL80|BMXaP^%9wa9cuff@&z%#u=tfANn2^({JkqRhXGwG;4mR4waQOU zs$_)Y+3op0RAf23J-bM;75~JGC1I-NQ3|!I2m~uTpZuqETXN|HP!|dNZHvLKrp;?& zlV+70Xf;I7!-mA;Ac+Rqz*_ZELn3RF5mR7yWjP&`v6T~iZ7Hy!6qetwa~gXPA=2~J zZ*gzf#4u8!soKKwL*H+9sUz{A$A z0VM_>qWO@k<@Q4-7hu!~);l;bmkTHbay3pb+Mb`T7B#oa&={}0xLRDEKb8_P#?1?>|8#4?mp z*_%$O>{)=H?s8%b#X$~0{#=%&E@!plyY0da_M)w03BI;{c7Y1%i7;D|vzE0=k63eH zTMuN!8GN!vS-Irg^ulb7TC)7w^R;t5-|PTlTwY?t+p|n>!7_fAZ{41sM`;Y8aICa7 z1?^I3NB}g@E~&U>O}k3d4YW%x@p_~$jY4Uzo@bnP6_XY1TIR830XLf^oX%-r6w9ckaij%H5402`9>h+;vnrT0;#@pkjiR}`q-KRq!em^ zlrJYBRd^$S6k=MBvNeJWAQdI?AcC}`WbRI5{=u4ckkW?c!x=kYI7kr=0i-L50}2VG zZYOjCNN=wxRr|%8MSx|cid$IaZCT|Q0B)5_o*-8zR;ymP&5Bu~%xf-)0nwd@k7RJ^ zBaCQ>nIBtCP|}Mwpx}?C!zg(S29}6CO*zXY)nGf>QvhUO@%{3V<9w)j8YJwZDsaZs zy2)IoY@*PeuG2pYby^E1TN~CcofMRu8ciBQc(?Y`jy&$$u$pW(1mXcqKZENBtg>Lj zN4rQ@DUUNOBdQwL=50z3$4kuH+a~7xGLBTwI0I)!_I!R3 z&Let9>JPJ1F*Nb`d%}!DY}OBd0>$xY_~-J5Ia8oA&&lx|NR`5_v`~hAa2$%{2v0`L z6LAhwOEYXakZk^QVU68xhZbinjnJ{rcFqlbqRL9gx-&s*j~JdF=`?p9g+m{pkO+g5 zybE^5u+HxE^Zv5R&W;Kt@zQi6)hs7cwe0jGaYU@Z&WJD|w!%ql^^vUhAT%k%GK~jM zr6YKVLx7kQ*7X4G=z6oAZo}5v=>QwM)T!+>?aS<{2R;Oy=~zEblNDx}zJx)^@6_{j zxD94An(KOjtXTk-@dDawp;3URoGNlXqgEW*$(?>&&oFagKTMv{_gI^qA+nFJ|6n7i1`73#Jpv0wlkg!299KnuOL7+Z_6(7wl5G?h|LKY+p^2_lQYay3~OnN zZP^9D8~W4<**u`8n`efw!r76=$9M%2;BW~Shnk$o3n*tIMgAOZnTIl; zT)iy;(3&f}e0%bP{NmsP!4dde04^D%9TBCI$Rcmcd^2_~Q<-Ewc582`rBAFxnCeO(Gw3eN>xrCvyat?9ij&?M)cTViaA;? zf|2T^0z7WM0kEOrLsXDh1;RfN;?x5hH%#B zt=nq`1x-f^rw$qasRYu?WXqoi2(Y_s{EC)fRG8ZcZg!a4sDQr$b|IJEDpKi}$V}m@ zt&Ygk%t!f0wAVlbulnHX;QzNgB*zb_R zwziC(NZ7zR#ULz}vv_FnG`Dy*FS2;ZH&)kStZoRnNKZ1T zh#WUFfLgTybZ)}{(m5+j4Ipn-_K(7b$R$qYq@qpS3cH$d3--^9o}2N33BksLc%&9M zxJEkOX*v;=@~)2LLy*au7VEjF-9vJ^%jtn(uXcG*ZQ zx?ozVUA=?26R}BNb_Vta z7gXg9LchGt0%ge7V|~;mXH=PFmv)IgVyfM=n3+wYieNS=has3tHe4(UTZx9?vuKOe z5e5AkdWk!2&EJ5m{GAD&jqnfh6Im zn3>fZG{olQZRz&pLgXXD2D@MTZEF3lhH4RMtTBQoW{u%p%Nny!uQzToscg7((QCDv zbqC{z-moa$v4R4dV8wJ;fHHBU8$hMBt}h*?#_MhQj+r9rNGsTT$`G8`dko|Tup%MA zF9~v(q6t{&Z&L(gz>mYWa%rHj0c;nMf2zxq<)PMD7Gkyuk*T6kRiLa>^`cdqni4Zc z9%`P?dFMtj^X9T6Be_W68)%RRbpF{Ybv-J?Pe^r3gGV=+`4X_XIlDn})-gDX@UXMB z?JJHy<+@K!2-h1%oV7kHZlh{^GrkmXj1SS&ke1u6IbEnE+|Blkjk@jWZL%$@8bqUE zhDPGCrdj3$@s%?>_tfWWYV3&EDLa%tDEApKTr}boA}mkuz+x zf@OYEHn=Oo1IIq6ULm|g6*4>J_BdE2h^(B?^LRO#yUUb|?oz9q<6KR#0W5-*X>@H? zrW8@N+0opvGUw_vKFraigsPWVne=(<#L8?{Ze@O~i1RkGGA-~WD>H<+M3z{BbzVDg zCDvm$W+#|^qn;khz~RkhvMdR5wyVDKy(G86eQ)Qe#biH8SIQ{&iJ)X8TD3f6QWUj& zkunt}o{-d7qS^|bcE7kJfg&D5hyGWEE)sb_!{g_)^mJu_3UQ{96_Q~fKd0WBU5OcY^7 zZqtOI<0e$SK__2YM6D4DZHDnho{X$%A}ZuJ2_qJxzCNf;M8+D!h#HeybB`7=a(bYi z_#>p;@##GgknHWIn*zOHd>awj>>geMjwHB?e#AxmR>8J;(=Od01K(OA*qbajP$jTY z^IKPH;{7lYcnOe=^KWuoFpdqM?dsu(Pm2yhxMBK@w0cWxw^>THLEp9{7imQTH)k^s zD;n|g?S?aC0X?3_K_nWIIYY0oUvh@dH3uwA%^kKonwhiSfG6ea@y8bSiG0*)CXRfO zf#!lBFY8kv8ynQQT3A4*PZtmf8k#3zJ*>&g>S0#t5=vw92I*oTg~BKVX9f!6#?F;h z)Rs_{Kq=tcN`*sG7(L~%+2Dj|jwyyvwGsfsUCpd_OP=9QD6B0b27lqpS>kqC^KY3| zYj)3lN8ZtYMZ44LbQ1fW+27`$6t$REAGsOkIYm}nyG+6L``gd!?eTic6jAII zs?Oj3Id9P3!_pb?!wS#vh=iGbMqse!rK?`w8cGitNXY{kW` zcJ}YT$Q2j!Nw&9C%s|F9KJ7yvm#P1wGDo=mDcu&_&dzQ`sfy&e7wLm6OaH~H`Q?1} zbdrzk^(Z5h&lVmD(Hbx(qE4$@-=SJ4(I>3_cZ9P!iJh-R+UM1qey~nQJ+USb<=&mU z04(j_W!-^5yuLf_Dd?oWd-zR#%FDM3SMKIV^Vwfqzo?(&)zHtw`+QBdi@)XMW4-O3 zJ1GroQhGD9{lVOt;o9TYtv~*R6E~csbUn5Zvi*tp#R44L4ST=NXrh%Zrpn z3b+8Nl2ZiSA-~8-;nx}bViO&HDOD!#pS0>~UmU9~R#7eK->dBH8Annro0PAz+W+N9 zs%3BKRaW~wM^f$aD^>f{A55X_dyk}AVgLkl7b*$~qtJvKsiKKsu4b^6setO?6`K-G zEJqzWK3&YUm`?CWmj}@UD>kqiI^hJ5scOwkORC%JYVW&Wz*0Vy(f5RO@oz=tp_#>S z2)yy+?@s|*w_=V%u>@yNOw}7|oABI2M^mquIbv2h#c7UJa$+1r6iXjb}>K# zi9j|2fdFvRbgL`DW_f}jR1=$pik6j3kA3kdpwCoOte4@eG>DIfLEJyx#3urRSC)Ru z4~K;VN6_qT$EsNZY^&$x#~+!3XH6$Z#>>QWrT`lV{J@G0tcI5f;;eow2fuJ^#-g>E zi-o`vX1#5?sg(%5sTZ}N^Dy;3_4%nGtfpRk@L2B=aqE4nZESh+W}e}wntl3ns~qF< z&0*pt53aU_CUyuUFE4W5KV4hRBCDZbdGL!RP9Ubo9-acjkyNWnwQgi~En?S< zU7PV4VnV(3Ui;mw_SR=qt&p#30}Ro8L1;hm%dxjN+pl1|ZfJDL5WHO32M=G? zu(({=dk$MxJ+_?_`vFzy@B`WG1@2aW9WDPi7~^N3xsU&b3KYuMJn&<94tH9_Xn1ob zeEF*dwljm6V5L%w3vv;N}CZuD&tWwA}PitK4uI8^IP|GqQg|X?? zm83b?e3j-4m1$skYUaRM>Yw5qncO+A01p`V7dqC}a@6dlhcNu5$I0sV#9KA^u`Q?u z#FV9WE`3!!`;#m5G_QM_*F7!jp0drGb~y671TKDAMCNe)XLu|9@pXnXnSI3_-I4;u2PWx#PoqVCmq(DPF z)RdA}GmJlNeAbG_r?;f&t%+|roK16lUS`mjscPNq>-a1GIjiI%{am)DnfR8?88jQY z;)mV%RyjhlL{_TNCY!wJR@}B>r*CkwVwqf1Wh=h5-JiWiO?KFaqOl3wW+%7^p!GPP zK=ug&PyN}}5OCi&D|sQ0w^ zdd5asE3t=)B-6WhXu+Zy4pIP-6u__5XW+tGf$t-gZgluqhJM6}(f&A_^m&{j7&fwu zIAgv=B9B*r=dGTV1kgsUXPQVm__AYYLJ$luHCkBG)JRQzCh`3?(&4LUhuMwr6#ZbU zl6@2{O-xFt3}0<^#UD0A-zdgm8j)~VVyyZ1{fkAhLBd2FQ+i~9peX=Ez8WpzyPN|u zHEv0Z4K3j>CtAXj8kwDw6wZAaw~#z(U*MLa@W7xZcoYH)$QE|but)VyeTIM6R}uf# z6T`o~3?cVG9NOB^iNju+-m58R!{V3oYPWv5seU>8<10cByFkz@fF8MW|LmHpp>WH|dSstL=iYF#&CzKnYWu*pg+Q_W2?Kn1o9iZV@=AD~^dS|-h)tur)M6?6och;a4_ zBEotm4s#K)66GA*PSNeqCn1oeOgiY;_X%f5Kd%k}Hzh5kwTN;|9`bXpY1@lfB&^W3r<01bByS?Y3PJ0Me#)R}G7NC0p1mhsk zy{rWTh$P8K%3WSw)Z%^HaM-#=hD&X!(Dzi#Wck#_Oh-~F1EYINYE{Ft_bIlpSezg3 z&MYf5!O1MqqbDaJ?$;yi*V!&! z_H&Ut5KQG|J5rd{wNmAlu;rC6atDH?49TGlCYB!vvYR+syQz)W_oitPwhdto6Z4pg zC*b&|m8F&i3lwgURVJ#G|1L_g1r6l-t<_|rD51|rB7>Bb4x|JyDlQuWQQC$#+-u#b ztu=s)%wjDwwKEG1B9ScXNfWPd40KFr;b$gWnpoc|L^Gpf!(bOT>J=QRUbSP7NLOq0 zNXrPUM;k`gN0uCVH*EPU{l;M91BP}AeRG4|R)eP+Zr#a3olNPZr)K$bfY8aG%zPCX zQ?lyh4uMd0O}c1@i?DZg>>|tP8(m}zAuSI9S~SU}?xJmpLKmSSJ^<3{V#s(@b{s~M zNh12D5Rfl00Tzv>X+~A{Z3hXsLopv&3IYNJPS>i8I%~)bV#)S1#1@7ItsEf;F(=EKQ7W+oBEKX<)prIn_!tTseXQv!g2!pf`)zwq zk<=PGy@;+f2)g40l`*01A`gksIUGFnei1YlRcu2eoh1w{cXhaAbVj0QBlmo8wp%CA zWN51hr$Nb*WZ%@b`&Q8$tr_x$uQ?fvek#K$^@Iea7l@v|m1v(_KGMNr`c@ft^p%V| zJyZrPcOm1BC!mtfka{VkWI{?G+Dxl`Lw3a1bzh+$(kS11ZM83D&-*oY$I%(_!JIwl zPaX{H!EvvzI@fX@HAVWBZ%y5(r7rZSeK1|;pb9w=lXksU+CAu1X5zNg0pbI;<=+es z>LW-LhZ_c|bP8T*LpG?NVH0wWX%)co-z>(FReOwrpD&e@i1Y#*WBswNjeSo%^;WA@ zrhAK630;+YMpxnUs6RHE9eKkQI}27OrBXgd}Z+ z-miY|d?yn*=foKBc5YN$|Q=C*ub~}E6-x@ zPEt}C)trb+#>C7p z!6Ot}xR*w~i-Z>Y*UGt^esR`dpjHkow3aPry*qR{CbpKgw+bP-jMP0#TZ$j9pV}p1 zRYFo9YKfzI$FCn=j8zE+&3y(!n7ll^kTmJI!Ntlm6q1$$WkOO@S%({Xw_eIwGjD^& z3K_wu!Wi__*rr9%;Y8*1&?G8bvtr6)RT~0`H8o=8V^t$t4TOz3j#Z6_b7E_U66f0S z!Q7aY#rZOzTtS>Gg&*V}Mx5I&Qq$sGYIEN~;+9oS5r}gjVoT3t&{nyH3jR9__BSmN z>~A_Yg8f9am7Bd>Eu>VY$}ZZ6Xbl3t*pxVzm?ILBR}N~ASV!UKI40+1gA{t)a3wY< z+ehp7bxYk0MyVFD#aRSvU3-v9O-Cn5J(ZL6 zmMkvEBl^moNlRg{k8Ml>4A{x~*$#u2_Sp?EAjzjZhn;t^2d7}5AP|EO@uvU-qPOZS zLGVQ|(8!TQjNCGL@`RN-xHMtujzNeOQ&h%RT0>@;KXxLQ1|IHnV#o$zBFgfIEU>&3 z6j~Fs6cpdSV@z(CwqMx(SV15YOGVLS0cUhmw2mHJZ2+# zwGt^Td#bAsi?ix`TdDNzqlz1+sp7_CLKXYdWI_*43GF1!^E^YlrquxfOK@)jx?ZMs zlimu@fKqZWt=^|6Lwzrq>W)Aa$VGleR^6p9@?{o%-C7@EUFY-3X!hR82}^u^F27Qo zd~h2qGX+*wcTP~YgD#rO&vruh(vQZ1G?CTQdX^5q&wNwsJwR6n=(le^ho>m_DP2-r zV!AF4D17h)iB`qA#2RQ~y`LJV&_WBTD(l94r#FEN-=Sm~$TYEcY+z(i>g=9tCB0rR z#inF~DFMc}nCQtV&#SlUi4g|oc0{xYgG8Mvh*?#wR!e?L+N{dxfVW$)c%?YizezkT*O_uMym_!8gZK1Y;ATB60ovZPqfgj*3U zxpt>+(LdZGfSrjExTG<#6d`bC((!eMX|GcSrfoH)XEYr;qcrqHPUu9z&{Gw;PL+V3 zDjB*}3mSErYeX$*jM||G`hzaiNk8B3Z|%pq557dnNhTn8_ulL5y&k{yTfg`EtyAh> z&Q#WOK~-L|ni83h9D@L;HSt$@yPAV$oiHt3OUMvZjp$!}g{J!8ybo^yS-FAI@o0Jccg-TEJRXeB0=I2aJV{l zV(@pc%aaI!mp;ly>V?1exYXAJ`Nxr_SX4hT+^eS#4L72?%oE&MnP974xU$BMM#e?z zRX4V9M=A>Lav!%UKU@;Ja@nyzWK*+K1dsMAYu(;o7gk+o1sM0%s(=O4RIrI29ClxJ za7QK*bq2qq!cXd+AY(>FM~=JflLptUMlZQ>4&lEJ8prE3M`8V3=owM63MxOK=Qz9- zxl_UFJUebe)~~#n^PAL6T7WjJKPvbi?0#stx10dTkhnC(HUJMddQ9vs6)eZ5$@5e8 z`No>Grnml5ZwpDZ5PHz>gby6$#ro+CXM_Qc2VleW^gec)7&k@Q^K=Ph9wqJV602M1d|zHqO%W0QxZ(3YM5}MNWcWA z4~8g`a~mdL1?xT?Ov8~XGJ%@Z#Qb6z{REvSd*R2q@bobcrRvWc7?(O0pbfyn@DAjk z5Rz)88hbtxEA=Np7YaXSOFbRjOw8-pY-$;6^Fg(cx#M32qk1_v)*dS9r8V7)a4I{C zbR4E&=Ti(iAOu~shNlzqj8DK0 zKutRoWiHI31M@T*=)YD+-6EJX-0SHc>vFH|@`kF*=%1MPt z(;&QjlOGBz9MtbEpq?L#WzZs`)1Wxmm`GtE$^mJe0fGwtKq4MZm?TQiC;M5()*i8A zSc4e=U5^4B6kPK z#-prrMem6yfL#Dh{X}wW;Hf)UigQQXcyoLF3LcYAhhK|*QE=a}Vo%jzUs6V~TYfXn zb>o&(uBVj6tgjSc#jXRHbDB+hB$EZliyR+qbBvt2jc8<^!qqE%@N>u_;tnYam({FD zzA|iAtOD7t@Z5(~<@JUz!#R`n5zxgHQk4=SNvgt%#R^hz4R$MtlZ7h5mMp5n8AKtn zyUPU|0!v>QCZL;ya*b%MpJV-T(4^DxS?m(w2Ut$Amsfm31!kK1NlAfdBN?=2G-e$c z2bE)B4%rM6Pe(uum)fQmhrTKB26RDq{F@3vC*cgLfX?nDs!dp={OJT;NEXL6G{+@a zfc9sC`un+r5j7=F)ss|R^5Mvp#2tdfAnrg9K2aIyAp<>k;6uMDHk}IxB-VR zcZ6?}aDp#Pl=lK=p8L?_GUNEfBmq3Ccr$23F)v+9q&H4@mPA(>3t88d1(gM<-Ky&ObmXS z3K@=Yf?pKZ68%6le~*@fGONM`|J*H$@XdoG5W9^@+>HZ=*+C3EMw_a_3U&A#e4(pq zWC#U`6ClB;IE%CD5RHtK7;H4FL2D{ENCQ${FU5;{Vp$*H1pzpNe=EsQ=bwTTMy>s$ zN#VhPKn##iHlT!EsAxvM848Sz0Yt+&U<5l0v`i504L&So2xJ1u>Pb*mH;9YzY_oCw zNF)fKJUY|~+Kg>ZiJVDL>zr^zE7CnqD-l}x4X1gYEjH_&n6f#+y6=pDz7rZ08z_rO z3v7s45caNqwLQVwU7M!XN&7stV6F&0Fx2-VmC{lUFds*bL!Vo}5c0?`53(?-sT~yS z&8Nr*^NGmiV-fo?pPdH5G@pX{NHL4ti1Z`2^g_dAODy=pd?Lf7`D8PI);NbCE5da@ zAtYQhpNe;l`Al2Fm>0^F6j&(7udVr1+?Cc!cWgd8F`u*<^BGa4LUnXpeG=pd^!M)K z9_c}2K0z4)*vZYOG@lA~k~t^daQ?*EVpi`&oim!n{Ajg$V`s%AWz~Uy!n)Rcu6k8f z#k<;%k>-<#p?gJ5S+knN%vMuLl}sqB zNNJF(-y>8B&z`zhMQcQJj@AG;38fB15@PKXl6vD_1sd zKH)d>>dl-t;r{(6pYZ#icpopqu**3LRAtvMPL!LU#GiRNdt9}5>u;Wr629=Fqry1J z^4P31MNX7|`saV1Jzjo2J6`U3-#oOF3Ku#Ak%IMNgtJdV(B1_xf0y=lc}Pb}Wt8mv zY{6!4k_kRpzV>Hd&jb-(hF?xS3NB4?7%=Z>LMJ0=v9F=?UqlOzg$GK)c~856xZpPf z!=Zff3*A827bJQ#fKXO9vF&GBkYAe}PMXH^(tCwW<&~-n{0^0z&pgHaaJl*c?_Bmc z;~++73b1v{PyNg>jAAiN$wS4|?&JKV+WqJKyXhMJIj$&gVMfsxGm*e|{{LjahcfsC z8EyZ4x^8j$YqRCk-}`ztI6>T%TOj1f8%rt>^vZXYC+au4%C?$E`@qqFzKagtwI-km zrF*h`>hJ&lRRGO_!@{XHpplW*0d)GsfPPyG&~+0A^cQf$CP2R}0DZFR0>2a0-2i&A z`e6*v!sr&DCAJ2jC0Kt!H0%pl{g^VTCvy23(32IQ&zxYu3DErn=t(|l0a`88fKDLj zm3OTGG&3C(^ziX==6#VS7})>K*kEKksm^`JGhB2WHaqMTnf%goTu}1lli*2?yE`F0 zm7kaagfPnC(IB=qh_JL=1?)RW85tZ{?vk-Ppbu`gcBK!01^@8Lj#M8J`toH&DaI>} zhYh?u9L%x@GTL(;5_kX6WM{S#ckxJz7jjmBF5(svdL&gy3TIgjIPpySn$PChI@%Zp z*8$wpGU=-1?)v?{(FFZea!Y{0^Mivsp<>(|!O~^XwXdzkYG{VnkbJle#6!e#lF%eF zI-BJO5gGOM2lO@>J7p^7`p6JWOC zsJHnM>67$#G!GQl?y-oFG(OF(P}DNAgjRld^5e%C8w}D6P$q~%6@jAlXc!A8!dokz z;SdMB*0untysTDoo960EKZ6U&u5Cnd)k05}gC~b6|<*Ap~ zT%J|~cA$H#u{@>G0NMLYusmyCMps#!qP5q*ICIg`{ z<%o!dPCjG3us6zWA?XP26K=~(LrcyOnM14>9`oy(cJpp9eXdGJKzs~DdR@eX*Bko5QCBPj z$rxBjY1;ZP5M}Ge&2`V4A3~T99(Ao{z|1KL6w}#S23T~o3|I}TmqFT}L+(}YYAB#c zb8xgXzq>?)S(y%qm3&@aQc*e&79A)R=xowbZb#mD?JVYn-yu|;RfDK~{;qt>r@DWS zHFmb^L)r!xfwPt$a{52fEv^@gM81{%Fpt~C9F{1L63#k&1_RJ*?SJ~2=<{4i+O_+p zTb|4-n$RtERw?C8iMGuxa&+-&!tr!}ntSZXRC6jvUFP~sE_>{O{A`Yao9pxW5YNHE z?ztRyY`0wKx@%94yixFzgWY;(fn#IL5zA9ub6bf_Psgn!)RS>5$KO+NtFbS}?Pk?* zqHB5f3cQSI(wPCHZMrUY;*>bpHGt)-I3xvO7!g9=2F9o!m8Y9AsyUUnN@$9b7Gx?o zEa(UlW_*FFQ!2M*srK6H6uW4 z@L}acq2J9>F4G7D`uR|HA|Gjib|L3*K4hsA62;<36pmtKfU6I4ai2z6oMs0T$aI&{7;Vsr36dTtZ%%WmPP5x7J6x!63{zh7PB8ce$)HyBVwA;cE!nC=?IwMw z9pTK)p>~`*Nt7%_8=`CQ4Ru3Z*c3g9Q(K@eRpr|Mqi*U;#;ucErhTZLBUxbLRRys2 zbaG2|sNJ+T50x8e63HqxsdclVI@B&7GAEqe!WlKXp3I?;T%STu&~-6y4z-(%GwPuxFzU`V>ccH6Kt)aMcn&PfM5yLlYfXLNc_s z7P-*Nm)=+P?TH=&|LRyfqgg!yL^EMCm^TFA+A}Lw!+2#Jw4VcJqyxI$_F>Hm=qX?* zU#c(_I6R==MeYuRp{yt8h;qS8q7D$!^SV;;i@L%YHHfie?fw9CKdT?R15GpicZ{&cm>ME(QJ8#r*p zVANL_*wPSRLIp}ge35`x4Uv%?7MAe#OBg$JJ&zq)SNaJojc0H*5CbbmAS?6TIvLNN z2+rs;J%!>Vsf+Lhmq2mqlJhQs;#4J~H4EJbx=RdeO!93=}hw#lLc@+Sh$fZ)43>Dtx z3r?6a0k8MOVtNprlc)P)i5(tIdj<+Hx&R|35u`Bnv19ne)kILMWB77?XVx{gOual= zrZa_g2#0@p)`c)p!B-$FMi@8jht@hDs{jsq}c4y%8AieevM8siH?jpcUnkr;%8bYJrq5QDS#1_9|{US59?b(0e)|M*=V4_h+YCpIxHlw)pWC zZtcqJmdo63j2f8x0?U*jBh>lRDYW4&rz%&l&cDHq#2g_I_6U08k`0sVqha0U-Z0^4`sT`Q$I7q#ca?31 zXO62o(|*Q~bGrR}s(vW3TgbG*n)QRnh-Y0dV_&J&^<#{2l8_rLFz#MLeN5YxW-D? zc7}JCdDmzAo&7w3R=5e1!(lFb_(=@ga^lgNj^^TI7v%NLPbb7cXkeiOQF22xC>7G?6r*_BX^y!(Ikc~! zL9q~~FjZO01rYOLR4WEyIwU#=>tT!nW075v9t1tn*P9E)0HqNK1TliaWATXxF3e8v zCZBit0t;a9aO)i*>$Bi-LP3tydl+Ak=H)4FZT0F|$Ixb^XK2U|+Ld!ct@7E=L$k5T z#w5H%{pBD3m;9L>{4hVbTB-Okhq9gV(D-|JXuEr)g7OLsK+)>ljr_WJf|AZ%lP64x zCrp_qD88v~mjrA?==RN4s8ti|pf5C$W`fnA&c)2utfJNR_{FNTR8V%vF>yvG&qxlCcaKb*ch)L=IeqF9h;S z+aIsy(yD4?99XNK4^fIGXx2k&b&vt#O3ad3wGB67T9h@FNeYPKkyOY_{U-2--d4|% zE12md@Pbd6@3f#?B!}W#ieLyKfwpcQq&qR?6axx%-Nx}@$ zG&sPRl2=+Kn!9fK?N$kM*A?}wKeD*}Qd1y>1a+c&SQ9zJ%kZ#7!o;efleI8|-GLGq zT3td%DS=Z|B@%1SQ=26VW@nZ40a0`$W)H(?Ss%pcvcWHPAgI?R6!QMyr;#W`P=Vey z!;Pm;@UXRd_=se?Ej+=ZEZ(KJdGAD$oZ|}$o@{-T`6J0IOK>$ubl)8l5tP{qD&+t% zVW8Dc0nx)&=YBPh$vZ-aT*F5NUK%Jt|7c?*L?Z4=n;;SwYJ{%!@62XL-AFXo zRiZgeJgO{%Y-D1=G{rQ8w z+kY(1v&o@+%6U)Ty6dbKjmXtryH1_jdVO6*QjV_bRDx@Dl{0cyRBPImm&;$NAn?qB z?igvnLhLPu=?n>LLGPvd+XOxIi|g+a8T*v+rLHkvV~J7(AB z1n9<@s>4@rYVBo+&G2R#eeMl4iile^y58D<{nxK=RQ8o8@`xOJt!gjaM74;E*Q)mU zo2V8s;9Au_bK})gsl#q(fA#Yd`Hy~TN}jnTJae=AGkNA_Wj(iJZr1X>9domiy2CLy zE7MGYEc%|&eYzaEierwSmy%-+V<-|5;zjL{nzi3=R+g|Nq7bzh&bUt!Q_Jl+{Bj>t z8@S=#r7Lc@`*l5^4~sDD%?A>hq6qj za(Uz&`svnGPct}+h*Z-mp%va~fusTe?gWA!vA%JwJaUUFL*`Q_w1J|QiDTgQ$j$H* z8r*C;zg|4rkPPF3tK7k_3JR=?W>VegK( z4bw^(J8x4U51WZIzQQQX$C6GJW!3b#x+~sZZgkF~smcC?(qU!xvMqR=cr1zM)~o8* zf?a;ZKy4V>i}~p(O_ZZPw<;Z!v{C&0$!$8vT?KY!YgM9TgBTTxglJoni}dwLv}X*f z6fx8*lcOFO9Gz2}m*o~kjU>O2?5>U!qxgH1fJQj(jY^AHO!1g1`X|eebXzl1jdJBR zPy%1aJwmi;`BJ%Np|3K><(c0BN2UgL`Z2XeG}--Mb2xRl;hAL|;^pNiLR09<$bDYX zW-OK$b=`)8PFD=lFX)P>@;uiPGm7TA*iaG{wEO=2Wj$cr^}_`{Y)-$tqz5cb#emn& zO%;N4+ZTlAjzd)E6R5SF3*Ewx0BsPD96BqF_!2M{bOqP%3V>WM8NR|wFA~sSs%JN@rK_eQdMO9-BCyw~(oapv zf0vK9{~vOyiX@<>IXi}`&!9YfHYq1Apu_=(E`(lAR}28rLfi{_Jea@gK*vV-?Lr-OkQm|BIyL5wroiRz}U+4s_-dH zQ?IK60cUIF{WA@-_pe-b%TL#vA8aXjijH2?u5p&g;3I(*&ys(u-A?%&1x-iK@x+RE zJ@Vve*r)V{Z&Od6nW0k{U@lLMN<30};(F4h2LKOVLGHC`7Ij@V{Rl)}P6#Xv{LW-r z$fh&5$*zgvV8#rchHrB$MtQnb0PS>l#Pa=y!FjTIL%mv@;kUWHv&C%>e};HloVFgt z;*4OhhiSDNQ*cGrJ*g|y_9VO!^LU7_!92u&-^$35cgVUC%L_LEG%r|M zZ%}iosF=9YKum_Jjc2?Uq>pK{Nh;x7h5fhl0;4|bl@i11MKHkP)Tr)jh5t`8lP&xg zTJb1wnL0*A;zKy0rwB;qdU6Us1Xo718D=1dHqHcZ5vcILq6Bqc$_}|NSfkAtYr;ZJ zkaaqypjixoEz)+OP1+DVfZaDI%l`*jh)W<*QUHQu;UAcuoHZ@0Yl8`OB(Kl{jGOqX z137fg3>`YR!`3vdAL??j#9A-uqo^=~C=9pc)O>+Y(>fCQ*b(b!9CXAeb%ry=+|goi zlnqf&c%NL#vyWeM#}F10X+gxZYxpImSHsT%8mX^MOh_6jA6^YdjK?A_H;D!bgiOCf z-k5&o$Qoq;RIU2t%X80Z4U|yN2rLp zXwA7qVUhD;mO|YipuEg$qoDqJ@#1tMl@+f_&C8 z-Pb3_WjYzDx8j>ZmWB~32y;xPgYzeu?wl)+u(uaH5#?Emn6h(|BW0oj{#+(pyhNAA@-%<&d>JhG6B zob?K>K;N8HmWIEqhPj>zSjgL=QBr>jhV#cPc*#RE$U}L+^Hi&jQ`LBS{2B!Ji?uxD zlGLzPzVmGX8RQ{?43dD)6*^%W2c1YXWxk7);&7v0gtxJk^fOSM32m^O_bSjD!$VtM zRCy~Nj!+ZHv^dI|51K`ZNZI-Tcw24}mV@E-=08|X4iTUaDISjASM`mF#`1myf6$03 zk$6UfV=xwtiPW$NJYz972|K)tf`TZ#YN5uAF3VBAj zfy{6n@{AHbR4nSXaTYZuqVZO+s2PcOG2a$yDnTb`vIUwo#29*QG3KV*Tltq+ICB+}cbXLez zvmC{j^-TNCcRI)=A{s)ZhVLNSSZGFuaMFok1GTpB)dSxKfX_Lr?-rMT&8ao z|M;F71_>^^PdZEE`uN9ktB&PrJQY1bo9S2j^k4IjAWm!Y4~W)H^AEoLOUOUywfV;- z@MmkX=UfWhGynK*|4mebVH9ie4_P;Ej(^CndcC^rUm5;!F)jUye|#&Ekc*neziRwr zayF8lUP$=b<{uXVZ)^VX&HfGPADHD5|2Xf;gMYl#w+gXD5iIcm9(?Z&z~rhi;g`I!FU4|?qn zYT=A+nq}()B&zGzKT-#7mHvT{d(-@bZ~qeV4|;9>an?&F^pCTFd*&ZseKYw7jAAYR zffjL-{KJQz+_e6Ykm)a*{&6}j{fd8lDUp!Vn#R9s{G&f>i%NMa;cJ_JoC>_H`NtPm z@DFWrCIl<_f)x)oX1~J5ocPB{S04Q1Y4ZlFu+k52?OFh<}Ou6?k zQdI7}*rw^CePNhhNL^INKCNDGT}Vs2+T)p5W-aaUtlWIFcJs-RS6-foVd~q<_$1RV zPh~V#(f1}QwZtWIjAh%;n6<1!V+pF@SAJlAx3~=oa7))X-92k-jFyc*T;XzS~4f!sWZ(UNt z^DPTks=CEt)W^z(RQo}oSjl;JaXNe=8sCeYdumT1 zZC#t$h4XO1PQRy{CRCBUJaSUWu!G~wgO~HL@^7}fC>Np}p4FJk%O1rIc@ZzkAGVek zk#U&)T>;N4_34W79P2y?{{4v`korV$fX#1}7ZE+L$S!28y(`b|2wx;neb0t_FhG`* z3;{!a5rp+ZYDukJXb(JW{okZ9nI1LVR&)k?=LPSJ(+p)_`1JeO54Xp@Zj*a8PNQ4+ zUfZF|^R0%?w;R&0__!t_ILZ*VWxl8&T&x4(wGtMjQ7yT#fcJ|NqT1y-ishc8s#=M*&?b2I1s4=zB{dbO%hFDKfs)no&%a$to1YUJab*CaXB2 z7O5J92q*i!&`$N|v#tJM{&#;c|AR;-qS`kq)L#8BULg4uaTboGOQ+xL#7SJCDbSTi zqm7IJw>;UJtds4@62Zp3FyZ(Ee4I`ELB1;fz^I)8pq`nlp=p020$8;Sc7&k9JeR*O zRG%6c?ypYKZGm{@Bt%D9;GN-4ozfej6nP!Gu&VxMWSrAGTf}Nmf2zg6G`W)UoZ6om znC}qbB95hQr4@L)c-3BQRE^@ayld7k5vz!6yOj!TZH4iiqN_i+7&`M zQFS|@V!FmAjH%pRj2ujr6}uH1GvZH(DvkRofoRbbD-cZ43oS6WajU{=mH@>L8Uf|@ z3Yd7DhUVK%e>e-TqGdI`1U0H~635Fh=jJ^?z^gZrPCCB~2`+Yj0y%#LgbvmJbv4uI9m;6BCmxTNp z=e3c)1OM3)lI5w^iaHf^(@vT%PCzmvzBrN28G4Nrm3lqeIQY*K=Ct7^N4)+)WUI4~ zb$pRO(jn9B2_f!e3pGYRKVsaZySwVejSx$Yxt4UZ z1(^7@Gt@r2aWT)x8RDI}$%OE?*a#ga{&V%=pj3u@Nkyi`*X(SJ&oO1&jutzQ7P}&# zOC-721zSb@*hNg&HW8n6tKWoVi`4>CwoNMfOp+uPwIae!1RSV#7d6+hOsbUANC-yh z3^~4j+L2F^k({VfGF~w}3UOBW)6Ycs(_Vj~+DTee%nY|7IVT|5La~&5h}8wLaUpcgJO{egFBHAztd7Ozs&{gs6M{ur zPNmOD3J(fVKPcrz6v_VJXS80wJw4p6>+pN~vZXNiOTsno_fuuOoEy-bi$C~tX%{0X+3 zr8vFsD@Qy-zd~-&goN`TY>eAR6M9SIwtY~UZe>}aK5iA-MwB!g3fj>Xf7*)WBb$=m zbC6s+mQM@9h8IB>dk<16R*&fYs`#T;phZ|S)(F&-HKPgC3mXM5BMP(v^{zNj4{OA= z1NF!gPhHG_+Fgt>KrE~J zQ<&d6_R#aKI?nrBlr@an{GC)|{Lrt<;B&-t0*RzLm09a$*tnH!D zm9}|PP{JW+1L}JA(24d3fIZnmowI*^d*~0=78*+^7CVcWfZXe{g_241EwhEv*7e## zgDk9J3zdOV%iuaP zI#pThbnMeQHc^DkL`lxMiJ;dnm~Ncw4RuN*)LQJewuqY7p5^TwiF9iM&&Fh0j%jNs^lnFx)ibFTwQy$jkiSer5=J%9 zF>9#R#phAD#B|QiAi+(A*o@#PaJwfhi>Q^!)2+r%w;K!F$d}9r>8WhavbYpGD)=I* ztqEWFEMZJ(ET>$3!1oypc|i6gMRf2~&o)q?HCM4E4ftf$hYV||Y@OPTA_WFJjrb|) z`okhRT~63uwQVitMnBiIg9Zp3x^4bh**0tk#TG!~UpcT)ViD~C*+zgl&3PlN(Rlxa z?4UDY!NiteCl+m1*=dmSFJ02A(qwV`foosuU=0Uk=Wsc`vlSU#KRtv5bDY zX6S9pD54CF217rU_AvrpgB2jz!P$VfZ5g%7f&KII$ug>E<(&OI$103jM&%}86|get zG-q(Z_xBY$*>%Vf4n=`}HW~gL+SI}CPYKLuDX%6lUy5Y=mKLg?nFT|gSuoU@1;37q z>C%)0nCYVuC+q5%O~21<`hDK>`wo-@*|(uyG51a}CL5WA@mJIj8jy;k5WsKiN<;Er z*2dLhx5m*uuiti81NoOck>(Hm3ldW;vE~{->L3_4Y37|Q-a%hX=G2&y%A5*jh5?k} zTp?!KUw7P`>WaqAsda4(darE-w#?b0!gN=bx$RbkEX*z@b0$JF zJ%konJ&8WrG6%M-`aCUWgURq@d3XXi1j!SyJxu`cO!Lb+*cJx|UV?9>HEYW!M%2n$ znux&d>RzHKYgkLA8J5w*pB1pj$;*4up>G2Jv~4d{+QjZBa6+Uu6}yt@bdyY{yH=P^ zwK$R`lO0Yq`qT&tNqPkx&M?BK{B0cJMo`1Y61iRos)u3^f?3huD6?@wb5D+B_a9I% ztyQss0s)a+5b4 z0_lCnFu`ezY)tQo>9FxHBmllXHM~RRgrShf-jlpz^#*4zXNyxTXEzG=PuQZA#zqgT zqXOB2^#l$I?Vt=q`a`tbjm4|H!g4iT-bJ$ALm99|ITv-OC5%u=)DjoVOQ4A)M4`rayOJl!0+3K78Fo-q8Ie7H z^>lz$J~~_cc0vZTWICyZyq5I|xi(p!bZ`w7y{^EeF*_7vcuIVWK`e4jV)oVTP<3Bo zRr)G3 zuq}#;bSqmFb#WWEC?c8WyL=D^|JdSB(8c|%s(5)lgOr#ls}Oz_UA~$TD%8j|j8IY| z8zWRGhrB#)gt}xS6l&nLjZi(Gi-aKuD6KR?T@;jBMyPLf$Bj@OCg3W&MZub6gu39$ zL+F0Ft94wSr-*@E=#JjT+(0pymGf@Tv&x=)rD70B!T6^tiTfLxKRm7xYDa+3@DOi& z6=T$UxQat!Z@QOT7>jNXgU6jl#8_=~qTw(LaXztFrek5*LD+=hy&dQMy!`o17~b0z zNvEQ>g?_ZeSTqWa;p+**mI8Ko6gtDV*KOGJq%b_S^XU9MQtEt24&+y?>o}X>V6&6t z1Y!cZO&A^}sbL1pZEbb}wM|?tonB79P>5?~cGB)r<=dcjTao4}CAi*QN{mp!!9r~- zlAuTbSI6xcmGyxRzH7zp0e#F)XAunMB=5#PbUJpHjzG?-EhP%obghoP)28WahhJ^` z7iGU}uj^3F%I5sE);d(wX(OPRP8k8NVBlD_um&pwIK#sOn8ifRnD!aznh@Th|<0j-v8{It$?@i%z%7#G{-OB&`64R_tx{mn#iQzngaF(?!i) zRtMKTPr@e|Fhl?=M5$0Y8I+hHbIn+yAsU1FOztJ?)Zw2Z-+jI6&oryP?;SL3Rqxiu zBo*=f+hpueD(JUKI6FSVdo{-$#v6N!rA10!O7!8hs}H*SEb~bgt?uvuU53l8HYRbX zMsXmKu~SuNI33z#NCNet?2Ax0Q(wwDC3dBXq9zJA7gTi4F?LW<7#?rUONu%WwDM%D zk&{&;Jyb$L3zG^Bz*{ju=}>A9*Df`UkRvtcEi+?E+6({?Tjw+j8|8ny9?dXWX;j8+-qfj~` z?u2=a^7}a!1m-UcM|bHLz_f$^ck}-s|L@`dJ4AXb05?nwEbytFqs;;A&1s2+V>Jn) zqOI2msrw=Na2Kc28;AA&ijX>cOW`6cABWW0AO!MS?Vdn5$DF5g#&$F{oR=|bQyorc zW7K*z5bceCOp26QECgBcj@>kL2RHZZMhV!@&B5KnyNWxxxqJ6$r=pd1jYrjOhB40+ z+5qLqy3JT0!iFg;P!wZ!adh2frbd$@*ndwQ=X%*wLu?@odUJwk+Cru1Itv0s*SRJ~ z*j;K>a;civ#*XyeyyDQdBc+zL{3ja@y(_4@dN3BQIHPCsVYMRcq#EmJ<($pq6=S|9`Qh*j4{1&;z6(u@`IeKUlvKXQl%iZD$VNYmKV^#g}K`a)?+$dl& z0w$tA1u(&+wxcn#CO&2}>s^hRwGK+fwvo8)dS=#Gy*9Hl>0?2uXlW~gz*bReQ)yfF zqn^gHn#d1i`EYS>Qeh6uvU=|tmemB2wq;f3(X<`~ls5epBajm!imO>JRQI?$8HQ!#faj z6j)f@^1(fl0yiCnTNS(O58hGi)(07ZG&_fz^hUbngLeqU$y96^hG{}tz|fH7n57&! zGTD12tgNWo)vEQ3NZ`G6hCsow&bp&3M(oi#P_O};L8etw+#WXI9rSlrqHFO(N0A&z zVOm88-lbo#SF=ZfwXWzukU;XaM0rc=#iaC~13C$B4&Ei<9@hZzfe0viDko$H*k&a_ z`V7{cd$V&GJhS3GSYZLjKgT3H8D>wZckj;5O7_43_MEPy$vdO#?f2);>bjjnzjQ@5 zc}7=cl~cOncX?V@vOk^Fl}JDP*>Gzv>KXm^gsz1CE$E8F%x=!RlADtQ&+MB(Be(ws zJB0lc*mGqYkQoY%A>tcZhVrE{?pR@V?IQS4uQ63N4wn1iZ-oMb*>N;e97?Ku7r{cY za-+K`iW6j9be^Ie6zymZPPstQMv982=pscMC_2y-EmO3KqQgzmzW}7S7Y$GYx z_#x4n?pZV2F?08@Pr_uKUAI4DlEd_Tbp8&VKAbVvohL^J$yYW}9DLvI5m5-d(R;t{ zUdlc`PcPv$z%pDka5Si-W~I zJPnQwo=^%>1$-$JsrZ_Yk;eGs%y{vUtuM6vX_9(=QkH6xpWRV#QhJ=b-T`3yfifBF zu-NO01z)YvN%})rr;fM7IHurGPD7HF9{D^XKR02}7?#BbT^=qr>hj~o4qYB8?$+gK zF{8_SWxY5%HGGs0!P&>SJo*5}ejmW}Ugh%ZD~;*VxI1vHcqHx)A1i)5?#Pe+aNHd^ zj!8ye$Qf{+wedba{-4N{etYc=;HNYt$s0gM@LI+HnvZ2=yH_3rL{MVXFj|iu{)`F7 z!tCZm`vJ&&q>PLCV)`Sacqp9~5s> z(rQ^76}4LE0NQC=_p}PIVAS4$X4TL)&k%jHHVSJ6qi7@g!-3w>A37r>ItD__b3Hzq zcaJt}+lfxpi4}GhV90FCD7;tTs|g@y6F^YfZMmRV>Yd=zlYYb_mJiWnnd?%->eJkY z1+A3T4&#_x9CQ?zp@d(%MtmS7VnP25xI3p;xoC{xe9{B4{FAn^Z zbK$frPe!gh5acxBD!>{#Ay<$NqK*S*le;H$N^#LssTaEcqUIkbS~wRJ;fevn5w4w8 z5w80RN4VYr`N7SwpZ7po-WnB(a2=_E)s`EO65hrVu&bdXyA250xEiju<3F9Rd@_wh z{rz0R*OM^@Fr})0EW%aoL_kcW?k*Qvbu9Q>hf7ouuAj~;LxxLI!&;No!Opl^s|Z(< z2$tiz5w4x^9IO}N+G%?Ztd^t**G^?mm2X0nsa&K7BF3v+4cgXclSqA7mU1S8c{W^n z$Nx;N>r~a+HicA5U{#o6V`Dyh<6DcumiITl+y5pbTp=eg+*J$tP1)^FTPvLzf_LT2 zSZt*V{|g=A$~YY1x@e*h7Qe-`KD1^&<2)O1j5i~~6&KD5hlF#6OGCBC3hBunD_yTE z!WFIbO^I;bux^Cw6%GaQ(e;TZUg?NRn?6(#uHWy}PKmVZe}hct@`Y@G9Ill*m|g!k zYZ4{7>?VRJ0&jh_I5F8$2JhV;10>FMm&Qy2t%&-!od~c+6$6fIE17j zvk~FCH(7@j;MGL9ZVv-7rw6(f)w;ZT$lswMv40J8Oo*{O+=_5T$qJ!{mRTKU=9`;yAisDe9Q8$$7H?Lsfd-; z|LYnEV_ouC#ZcA>9GzyKW^4x0F+BD6=PDS<;4j$^-)5)clP*b(ifUE{e*#DE6x^Rq zV(ZCd31Z~Pc#7+tSL8!tPSO?Uh_(D|%iy1(b$_-Kj`VsgL9*BUPxur*yYVr#l+ z*k%|C=!@D>q>D~O_sV4=wR%iFMjo?zOw<$cr~+eg=Zc6@ep=IeaP^4NIhJ&V z($!USgt3bSI~Gq$d}$c%Vx}rD0RXAvNzb$<{!Dw~V}X9TGwvmDMdMzAx;9qJu4GgL z3v5hdDs1p$Dq>5hMaP$Zl}Vc(DCt2zB8#GbRV?YMPXmF%rYYZP!Au$0_+van#Fn;V zC1=Cv%V@4Odd_F6(Vp|GD)L`N(|+~FM!z$e<`}(IHb%cwU1#*f+0$>2{`Y=?(NB8x zo!BouKKfOkwnwj7k)_6?-Tg+@HVNn$ z@rXBN-)sst#ngsYjNx%xG33k&-blA#qp1-VLykXaqEoSc=!0FT!&@+KLQd1I&{xAf zosbCpht#pFKhfXQLa0`BDojOR7qW{)Wa@~H*O95%NE#fr;gYCStzZY6M&u@g!M-cR zj=jkdo2pPp0#i5n42LQzRg6^pJ1NBy{I|EGQY*Ktsq?FeRN|JKtI-64ITul>qMD9M zHHjxG75g0r_a=KDQK_~-qbljpD9!%%b)r%&0C;f`Calph}SX+boGf>X= z0QEG;uwq1P>YjFN>Yi)GrnW3xEFKx<6q|~bLz|#GqR9mpY#4jEz!7AFgWzM4letT0 z8e-Vsbcl#e?I>un#}l+W<5I__cCHbddI}_wY$pWyA|jTqrxJpgHrN`qYEr-{$EJd6 z7-V$XfVcJjPyV+;3qZr zb=d1zZ0b+aKY?q3`K@D9Y0I&xCxL*(ZH@eMNy0r@Es^aOEkIrz0j+Ucrc}wcHtPV{QtaW-5lT6MWq!$$%# zh@4g2`HYh=ISH-I4VL+Ow3^#SGs%R=K5s-;8sB2&O|)EMcT2d?78ZFs>tY`CuzNS)fAj+0fA8{9xO~r9KP*9M0^MB zKtw6KYZ-S|MXKJ4RF1TDZR1Xyn-ZqsHMTFCTrr1iUv{Kw&=zE_ph==FQL5Ox-|7^QjNe9~OJHpkrTQ@=Jk07)_Matf^{qAuLC&8R1448)Bf^vLl%BEu zuYdl^jhTdGg0N&uWHPj-T0_mI=Q>7pTWt~&y|cr9qB4!@_}z+Le5hXS6V_`EW&cTS z4pIqUZ@j1pbA;L3yk{>N(hg9-&(+Zc47cT=Vc*?XWNhqA{! zkp#CM%H9X1g8*~N=8&v@!;KaBtcjZK?s*DM-5`ra1gLHhpGh0AajR9kMWCI@_BD|x zTUkY?PDp#zKqXGrdttV!|CobJ28dFf69^Qg3Ybk;>&?y+VG6>VS2gxvtFh2Cf26hp z>1_aejh*D`lk9A1AovWY(y6QW2~_0)bG5_OF6TkTX9T(fsr7O5&q3_`NZXb52cuR6 z(&}4N+zH!$R%Cc|jA|T8W!AUS_G1Qs7L*{;qd6@Y1@M^4wFM!At>9WXNaYojEYxP652RzEah_~FuvN-x}(O7 zDx2fZiossTmSw|>(K`mIf!oSZ(>eU$CtH@M3A9xXfc6%SI06r#wYMxQni>7smTUtH zAQ@Q5(*_n~jXkVV@OUjY9xL9$?*eGQ3!s~KwLfag=k4i>UB#AU4BSLA!Im+w+O6pN z?U}B(CDVmvMJudpMB1(@yKIaiB&4eI_jq#T=^T=FgV#|Q=A*pR9HZIb850!8XofDY zj8;2w`V%ODKu$m=8}AxjzBY9vj57MIu>n>Xy1sTVkpspZsR zYgs#3BxzBG2?%apEy|P)n8ibHs?EXG3KbtJ@*X5(gb)rJ#5wPdRYu0_ z_tNgzaT|nSukf&r4GRO*aK%7j4~c!Sm{ia+D|n>hSlqtkU zhXLpHL;?4l(1S=}!AIB?Y-hl(z(5S=sm89rOnGW;a`yDK$Q~`ze(Z5|0#0X4vx23_ zpMAx!Z9^E^hM?FVg>e+l$Y?!#I2i#y6At*vY)&~kKPn~_@Uu|?KSh!8uOQ$DE?n@R zfS;_~^YI}+l)v`*Z|rxx4?gl@BORJ3Hu9T{3$S#V8lXI5;XV_R1qk<p=wVqzfh^nPALk9 z#Zhtn=}^Cj%@-mzMh`T4t3|a!ApxWh!a&H4==7R|c-{yQJsx6*kLVX*0$dXig`nKe z$*t{Dr&&*>dkEH1Y)Cs?C-&=AqD>t>vH?-X`?rN-xZkG3@B$4%kgG#=8UzHp&1b=G zt9W2HxIhn-xEKJ_-N75_E{qA)tg?bxJe6HYi(4y{3n2I6=CO(7@ri*wm|+gR?8F$P z${2mZw8Gp1eQ*1A0aD+9CqTRV23=Q+HZohEcSddk#?jYtG8?K*7s z5Wn#-pH3idximur9fY{bSNiG~m$JcPH>f_%oelvW?#-9>YVNB zo?V#v16^J{kUyJ)urzvxBck;D99y<@J*zlduBUT$oJJd4b>rP&X&KDAB!)8Joqy@^HAq$A8a^VzJ@(&npi;z5wqp%JWZwfn=Sv0 zr-|mngI)GPz8Zs49octu4-vhnE3(zMb;V-)ims@emvp7K%UnyvP0f~gdj?-|PZ^+s zVOUnFm#aqhH1DlFGCskpJ@^PCRQ=ELqL$QYU1#rQY!79>=6j9b10ad6yTtx1caco6 zvnA%x@};N2jQu>&zfm?Aa(9_w&z5-Q1eUJAa>*q)8S0W{mtaw@N|@a4$qu>XG*(ew zu1=mcAdaYirG=TKlpI*5G3v0 zUWz}=-4B-&Pl878EVn}7x&z2iZ6GcJBDgYiK82sb5Y)|B^0pby16Maqm-G1~LZ zNYZGRS|u@B`qv(<`d5t>(Y+q+q99;sa>bUq)|j=XJZ7e#LN`Hhag8z07Vl!H_j@!C z9A!Z~sJ=rMEA0Lbt9BxUiP5yzM)|C#=T$Ff_VR{|JX<~|nA338q%eS$8w;xZ0>8%h z#RTHWh{YuothOjKEFt+*x`Ol?W&xsoPFIlrX|5#*F@iCQ{LPj?aKy}4Fw^{!0CuW= zzQA*j_u81oJec5|9*4Ey0v3TaUPTMdujMP0+#d}tbNjBiy`=XJc0U&Qd)Z%I&g%Iq zwW0J#{P;RQJ{VtJ;r4-a`{^aH_<1dpmwc<0Q=ajy*BiBe@`3IJ0f=#H@nB*!xCn+% zS1ri$B`W>lsPsIy?~Ge$W$`0%yTr$L6@MchAgjf@<5qij^BP*(F5Ib~wAFZ`e$u|? zUiDNw#OiamVht^()rJgiycFFnFXW2WWzEs{+ns4GhoATPudT5%>1^b`qECkW-+>Hz zdE)qJdVkhvY*)XdZuSI^vv?)HRT><^yXv_Ll^PmdATIG&5^CLyhQ5)USR5>qIAXgF$ zUPLgW{6!3ba`vZJ-vsg2;=uKn-#s#c1+QWyxb=Y&&zK!xZZ(`J?eUb z0dC~-zf!otI5Dm2Vu5CmfCuvZ)N+rCMw{EP z+gQVHvtida?36=Vuf^MJj7Ou8gM=EJG)bG zG%5VqSm9`(9pI|4>p5tIauADGH*HbG;6+&|fMboXK!7#5f!p+cYunnHB z)W6nn=?D@M`icaXVZji#da^R^OzMfvo{B{=97Xj!8^uR^xr>b&dj`MQx%!G;{cBoZ zyUTlHePPR;qq@-+I$~%Qb6&j&m zXz0c6$nBrk**NMUl?>h&J)#SBhnDkl{!ygPT=cY<0mPmozGcr$4y`=}kvfonfM|R! z9~|Dnn{Gl(Zt&;+@s*q`)BL)e5BKYO30W5NY=@lujB_Pa-&mh3w2SsCQhqD?9#f~j zE8w1-W96)pj-S8}$38ETp-ss!x@?~m~@Q>g;8u1zslS&c({_Dll)={%crt5h^aDp|O4{GQ0Wr!?FLy@|V=yM&KU6Jt zUQIx9W9QWbEJtA1mwbbeHBpknty<7Lv3@KfX|1P~btY$NX(f4L-`$$np(gf@>zr7| z#v&;HOvFLxu;(Txbc-ewp}3h)rHq3E=4=fdZK)|+sjuO zcp$vEn(%`{AVQ#xUPFxJukiT)%gZhG+L?pKZ#-81SN~|K5@^KR%M(0HO3K9RU#I5u z02VJNDt6IlmGzmOcY0xTCFo3P_Gl6WU<+rLryZCMvy#wDe$q;m{gWr?uf}|ixu0W- zcPBvX;b5UqX*U)9bhjnM2hcGK@(a=i`DJNVx(b6m2>2|tk-0cOI)9tG@QeZ&=5CWz zDCyinA>WR~UU)j`vX{q}2{JLiq@@!}BCP`OenD&t9QXIe`(RsI3*LKZ4EKIS*=4nT zR)|gnYP|;FF z4vv-o7^*5SlBp_G_P=RU+0Ql)H%n#l%(SR1Pj5bzMW?Q)EXW0e!9ul?%3gBWIF*&X zZe1#i&F&UZS@2rKU*QMk$x6;?5&uP(jdyFoW$O_CD>vA!wW%x#wA3x)QHS$*xrVAV zu@iy;oCSV3kK(oJhk!5IMG|rLwnUtj`p-?MKFB;wHj?>D1><#H(A@kAl9 z9ua<0zSI!GUik;j!_87eyx%Q~$kUrg5w%AN`bR+CD*ETLaYD1~vULc}hi;nuwaEs8 z=Ek5krW`mDR`m?u2W8_u!*WmAIz9X3jrFWW0ax@4gQBS529Biw2dV&smY7^=hYz;w zE=S}#Vh*vjbpUrM^zo;*XRzS{tDUVx*JaP>g_USOb*{9+ghfL%ZW&vQO=rrFIJ{Fu zujWHcha!JLOfa?F0mNvt5J~<;(^2S8R^BT`GL&%{+`>v0Hn32rZO%&MoEl%oW>IUc zC~Y=rnY3faP(QENnzaSkBI>b&lsamXzF$u-E6F6+i!uo1%!&?Uq?2!^HR69ZSN&hQ zHi}}Mk?MsKhn2xg#WpRKVWE%(FWD%xSo89qQihW0kBa=>?3)1gp-y9suq^_(J=DS4 zU~9$D%n4f%pL1Bba*^6rkS-TNkv1vptle; zDD(vxgM<2-aRy;lO5zU51c`>0?Omb1ZI%yZ6Z^fk+Xb)V+HRL1B+C`EHYbKB7 zSF~@XU_l{%GOYS*kg+W?1B>OaLCDNk?0;i4PVIAIGFY8fJncHn0_U~e>=vX+_I3GlpdlEGQ7mX>(JGMOXxg&C1O z+#J>RaJ|Ad0bc}*_#KBqvgG&&qQ`lDEC}ESDjxh`Jio`!1rKrV^^S0m?<$B~CUQXW zv)YF+X4oJ+#2#%HvcgM5G^Lv3X>s%`(t8Am@dL&9aP*4XNr5OXZGv_A49`N*i(p;( z?T-?u=45s;w$%fO>~Re1!32(#;~0^E6j!;D01#Uu8Jdy(ZF;Qe0LEBsR5bY%Q-g5X zp$u<-f%^pieh=qAct;3ZHGny3E3TvyL`MUtiqw1RVAR~i5cctVY;q@`?6JW|<*40U z?2?$A9alGSofIAI+LlvB5yKs|Sv7Z^@FLNmf}5MhCPa1#o7ATFgl}M;sEk%lg?}P2 z^)t?n912%I+bK@M&FX!Ta+Y8`vk@t}n1Xf;5iD{&g~nQ53nflOeOmJO8gWNtF1Tjg zQBM5K>F)7Sp8y*0AmVG-H=tX^*Z5Xp9asTgOb^)zDzT(5iM+}9kWWK1q03e$6T2Wi zrTnt_r}BV!5^V#IhfI((Pk93a#pUF(dw--55hJ@)K}adv4gR=`BmQ2^ZdN|1;RfXF z-#V=4fSjL+pYYiwLBr^uVA?Ipb0?Ov@@{@3Q0NuiKTBB9;OTBQTkd6pErBH@VV8p)|@_3GP?} zSCR-b=NjP1M(@!)+@Iga1%KsXJ<$oDH-CTrpyDn_37~K^g3#HIOrpx2dhQ%UdFz+| zHCJ-)mw!n47I3~_Udp5?c0yawc>CotMN<^jiC_CA+cb%OQa;qAV)hlfF`A*Mj;SEF zgrp2fg)_1MV5K4L+?(C`Q0I}NLo5@pvA46sDu8xEH0jR0okt$Z)Uqrql?FLidnEg% zEGe5kVR}n@=x5T?4q`!zEp?-KIv;zW`w1FFk$k!%9crzAK#XvlJn!IWHJWPT2=?Uf z$o*1_hUtK!*O+OMKW;CZEd-6?aY^EC9S9@e{VEB~(L#XR z>TwGGG5CSv0l4~o%6ZSkxgU!5YWi2|iOh3&*TD>aP-|RI#vb$NeEWkRiJ_>!dhd#c zQfr44Tvi3C^B#GB@b{G&SB=jR4pDBat&3d<<~%aYGqoezUhe1G&(GEmWd{^i&j?J^ zb5_lPiJeLmL#9sDzHn9muhjUa)-Dq$vIMY2(%>g(E!UWu z_Y&*|=Eqd>vbxYOPp|4G{;|4aF%MKZzAlHJ`z_9 z*hK`Ynv|w(lq-^iA5`rE4t`XV{z0%9Gmo(lz`qVn5l+H)lAMH2-S zT0g*YsQO%oRwT4&B7FdgR@HDu&!2#_b9pk*;*+G;V_S7HTw@CCeE3_OhprMwhh9!X`+O z^sAwJ64|MAACv--{r>=?lQu3UQvPo>hV%O$HxIOO)2QAHi5-R~^6w`}HMbPidpC^g z7>F~;6W}g1xUT?j`Q8JOtfcqLm!r%P9(^nG{qoyhO(Ua|5KeTIs1KC%W>r`)PYBn< zJs}b$)MHsT@gJ-8V%e^XDMgiPF2zcks^8iLcNWX)$_00hvXu)CyXu><;0XI-!Lc_= zWLj2yFDje!P1b5sP)!>|hq6R8V%mgf3tdgoqLx@ixV+l^hL^gh-S${s4Bn+xsXO$< zn4)@FR_0XAlf+XN$J051!CE9aTTQt>#ewJI5xfFj$Ujw@TP&bmWV~lqv{U@Y#jr1> z;&lah5a0IzNZd!wv~0->BVXFkXEwKk&^olsea0Aa3INKVC3 zNTwJT^e*RkXKqs$*$n08^pZ0>E)7xZ(4Fxi@a1)zQJW)jZ<`b~2x^)+Gdod)~Rw1vbN7U&Z6dQbYK}X}?fI2%I z6&uiCb+?DR_sCK-+|S)%-`&Zbx4sN_b9caH1d(D!(|fzPvl@XPbOXay*?_wpzT3fF zY|bE69_&HC&TwaK9)ItK(B|17zai=Rd%1hj8veO7JHAK$)CQmh2*bs$GeoS+kIN$rzMG?Yld`eyu-#(TQYwi)j%nJc@GvlXeUoLO^aetaIHwPB*0 z=lx0S9Q6NS_G|qIG7ig-S+iHZ*pJggMW60e!T-=db}-_NC(6Al_}x~)HWhrORe+!$ zUfN>2mUY+}%g)^0S}NMIqOEN9F~sUG6ImbryNi~+2sjQQyaYW zhJAwbe99h7r$ZS*>aq}TaHxu=u|cmznZJ?jo3iF8H`xbD-p)F*Xtb)RS^ z^=UKh?~Lr8LO)H6%1NgYjEMT z#AV%JM;T%NLPM@G45$hr{+Bb~^X32{2ExSadV3j6;V0d46+z(+4CYI{rkOLE zYjeP+SQ!v&%yrTu|H*&5lvTDW>5>1C=d@V+ zct{*luUzVD`vWLoClEip(C10p1g1*DrvT~RuKmlr8+3OR1t>?$$;ZCz3U|o6(*C-YP>TEiz`~?##lT@ zG=D4}fA@M1w(4J4xZ@qu9xZ27 z<|*G6qYwu7%99f-v3#*r5-VY$DG}mcVT-mA7k(hCo1~Et7+4@Y9XTFP!s`$7yyRv7 z9E+o7L*-?ci9b_j4Z^F1w_k|&th4mWvv7n?Vb$8m@N8d<>>T$R`tyCMF3WnN^bFVX zqFG3)@d6JSJ7&yrc=NnuU8LeBDhn3Rh|YK???mW-wL1}Un%~Z+-}WO9SCX@&3p5V3 zGWT`~1H?o92V88eBSX#uoKuOI)Yn!)5ftq0qK~3DmcO9Y7QJ|`q^^eZLodzwfv(W* zl^%z~alM2iLbhI$i}$N!xd%4hUh#dTq}yYYV4vbhH)SBPjJcD2@h;UVsZH zQ*U1^`U?EMX3>|M2apr?Y;mJv&z+h*BQOVhmK&|jo^h(do;zXcMY6Z2Pfr<`&q};? z?71T%u$nzryZnT1E7-Hv+bJw;cj)FB2NmC;ah$iP0L^OAu_c#1KSuA)xh&DZM39Wh zB4B4Zs8M)os%0cim<)!lwcU@?H7kn?A6oZl*8FaDQdl(S4qjTLgUf4l@Z!}vc;N;+ znAD;6enhC^$XGl#`m4))*kxIhtnw@mZRT?(@Wz;rb;FwZSU3C&!+cPPD&|8T10+HAf>>s1 zF(0BgDH~@#1aDHd4)eK~Hg(@B=Cd=H564}jTv*B<=Z@L|va*8T5`LYHye+vXvcjqR&dv>Q^nVHecA8@j^W zYY|tLGnln)v)iw2n?=E_&Au$(w$V4~eyL)sp0x2oWrd;hjj|~vTW*77Ja`>DxGKf~ z5XJ-P=I?h?G9ILw56H!WvZ)-T;4T3WE4hjysa6v0E4UZd(axkfhge|uGfQBv0kNkE$4o0Gv=j1-=+YFSF z@GJ6IhsOuJNp*fJ;Jtf2c-svY;5Fz`Y`t6q^g65n#YGN;tHFC5!N=j7AJwxar;5h* z?=bKx6q{$`Jt!WDyf-N$181@702e3bm%s3>HM2FE&f7xM`3L`a+!OYBo@+DPFEtO0 z=@xGu#gbhlu#R6PG65)D{jYvuD}Dp{cULAq!-IN2WlP zxwc=MYn>!@32&;lNVLtheVc3h;Z1d1Ar6l4rc%|dG}mfhh)Bx{Z|Yp-o>gnBys7q<3ewOavdbMsP-f|I601tm@%C-WNJB7TZr z##MMlrLNnplQ-C{Zji~gdDcWx8(+096w?g2E#HkR?+Pni*)@e9uG=-j3U3HvYniqc z&Xty{L>87Ay?wzuNQ}O_f`so#b1-~t4?JusN^M5)J?7OI8Ms)S}#Mc%TDQCL^Iptb>Nc2&46;v>dge z_Wn-*6!fAmHR5)^{D;j06a?9uc#I|jO&j-Itc`o&;%1-bn9LL#_c|r}f$@G5N=GQuj3!{N5|&BVjcu_>hH<4s8eYiCXN^^0gzmRYz_(R068Y zcGGd@u;@)s$4A5NRoYp4z$Dx$X6Y!R=WoY&G%Mi3henPetkbSX@)e z9-2OISaSrJMEz9fO)IM_EIYGan>zcEx4cYU&ynckBkH2+Jsi*X`T0&Bw)$>Ach06& zjE)jnwwE&$CG&*vwdp8(b`+rVGf^tloBilVbp|6XrP8pW>^e#Sw_K8LTmQz&)`ZDyCy0tfgwCkC5YA|XVEk1Y~HD1FJpHuq%@i*zq>e@_wj+9k9V z;th%AY!z*YQ3?tSMqGU6p>BF3wrD@XWRP^6JP@OO5FgDRrSIW_c>Q1#=v!z9B{kwg zCu%d3$v|hW4D<%`qe@6^lml*kozu%h>>b*~-XWc$p~hz@jZHsF(h-|}l+iyn{p{r~ zHuxy3ozrz-hOd%&=m1RQ(9w_*ZwMOg;?A3dq!wi<*T~s!+_IJDjBhnaHkUq|9@xx; zvxx`oHD=G$W@#uM%cv-Z@j!43ML3|@232S)4{`S|cZYccit0`~g)VeQLvO#S3fH^R zUAE`&N9fIo0Wyef+AxuKI^HD%(rC-fY`13`DcL`|8p7`x0dMbV>D(0r__~B(eV0ZV!1AF`*acpsoE5vJjI9zP<~Em!FC+e2IMJ|1)f_gz>umi zd5CGDT3?1)tS%fe;4oE!RJboazIq9%XU===yt5QfSvH`U6KOmzr?ms!AFDc%wTAGh z-dz12{1+V$5(I_3KtjDO7v}MD3VM{GwR~-STW(gqI=(G8QyN#H1gyu(d!}58bwN-V zK_tz(4#LQk!$d5PeF0#%OYlk6C1+wKH6@}9=W|RVT4#_V?RsbpOF;TC1+phs&4)di zGA+Y2ib&tc>ULQSWaIz}deNjrpi=^ZYB&ct_4JCf51a*H1i9XTqQ3|U4DeFQiHHc%gs3tHNM%xE5OQgV zNGAT$bqcHDoOD@CLpAJ0m$gs)sYXTb7E(l4YMus@WrmKd74PgQyzz5HOz3O8Q{p*} zNfrWvimaDBdMmD>bOF+ym^gq04{7MSVXK@-EZ*(0st^IRVS{9A|Ef{yoWm4S*E z!RT>xU2c^Kr7OK2tn`?#)W1uHs5Yxm;SxVraqgOuuFhFAUJHvqs(uTan`>y!5qFb| z@*LI>WWR*+5ZyOMdH#R)-apu`>#FlS=iGbW?G5O~FwFx5Ef~Ql z!99q=z{_Aj8B7q3t44Gjn9ujS_Br?5_nxGuA93O|R{5PD_v~M5uU~tuwb#aed4A5* z>kV0lm8vA+zmmM?`~H#lK){#Fd(NU-*1QKl(FpHZN^xM9!h4p6F<`6m9(=zX^=bAx z%6k_4Zj|@TH`#CuQ9Lw`6g!t3QdgDtK&egMLnwj81b^4Wd)O+T(mZW~_pIApzW?xI zw9CI8KA6dbes>wX$NQve-ow*Z3GW#~Qyx95E1`|lD}qw+w#Fqb+J{?x z*<`w9H7pzkTnV>R#&|CjYqpFR6q0ZNrrGKeZ1n_8MtE24R-@C;C*LdLILW+}L#(k9 zA@hdU`DiCBRFX9IgVI)_iR36QGi(s}@{ar$O-6qj>GWan3@e@7Tq|MLpA-iwRdJ}P zWhtG06zZ{M>~pO_epf!!X3|mMypt}IU}W(0f!SQP6bdb-=CCPB0ig-Z%rsRcSTme; z__mIVxDg>YS7pf0Qigoq1F{MA-Re*x`cdHX(}*7Q?ocIVNzv?DdqNG;CSj>TBnPoL z+}03>5c~xDJu5}LH@KiUltCvPddBTa6~755_oyoFrPg^=aaW+_he!c+9G9Nf+eK3y zf7WU^jtZ;g(&h2PH1t-fM^eY7fm}bLj!Uzr-e=IHbUl`Pg{2Axt5rbp-k>`wQ-#m~ z+LK!Yv56%e3@B7~`T9IFfr3=&(hY_5u-}aeg@b-~9))!OB?<+!HepmVfC8O~7#OtA z$VmL<9XXDI%M>umvVnm4#4-W%@#gbS4j-8NH7K__@p?7o_A4S_)>kZ9ta7DtdsGH| zqc(E|7(wnK&Gh*#%tSYEx5Zz)Mgcp@(yXY3%Boh`W@IkutCFD!q8OS=lKCOgD5jF- zi}^P+cnEQaYgei3evWXE%TTBr93&lNHH3ztR5O4zEa+cp27pb3r7zBf?^}S zCA63P?mP_O@{dBQq{rxjbQH_HAhjxU2@BHU;i(FWWkGrzvfP$sI}m183V(S>rsOdi zJ}_--pxN^+NNpLYl|r7r3Y5a5yKK7IYH010sB4bL!^N5=oHtCgkPQw>uO&n=-?)@ z_hOU4Tf)yLMPXb|B_pg2N~;*X$MlhG+PY%wku~u2!wB z1U5XFGDd>w_3v1(s@(Nfx};g*AdBBQx&Xb8F<#T~Sh7xV)_(>hikWm!2Zv0L}oON!e=*&X#z zzRn)X8|0Bo9!eb)uyyw>86IoyBJrR+l;M}u2`}N7l<(1@bw27oQWe6GWIN>-`#8NM z;~{0jzn@2d`JT7}TbXT2eE22PbXKUv=VzsQ1_<1lMI zjvI2eBNvc`$Zr%4A@Tx=nMZ`kAK?QS5hDMo@xnsncN#B1&8ZL~+FJp;FHgdK077x^ zYIs<}2^xfAJ8kX@j2~HnB5b>x{d}yRYHocGo8PYFr69?~_^-U*`>jUfExj?v+E)4Om1fvrk=$2`f_M`(+Vq9D@j z94L|u7fyqBb||o%W9Llsd1?5-7?)U57(jNlvkD8p!xGDVX~sCYM*R-Y3l_?;LpLOb zaq@-VfhQ-WcdyqxCm=PgXa@sYcy5ktgV15W!7N;@#N?D!e}-=)7EWWi30jZj{SEpS ztmII`(57;B#8rCyewcwKq3N(=anEcIjc*+9)mq>qWmfM?rI8Sk<`wI9=rkGMHm<;0 zjBiehYkOO7rSWaS#y2ko#f7Fgp>PCc)y{+Z^HBHAy1&vMehDz3q4WP3iA#bi&@s=Zvu9)8;%Qx{%Ow z8AEN$LXiZ}BG?cDDEQ?0*sLYX>TLFgu(4R!sQ4(Qw2>fhuEq6NkV=L;nUHMpjcW^-!-#NG)W6#o zj8x03?GBDR81)A)!aL2D#e^U2DfwJFtY=&CFb^Qj+hbbe+%}$Ltw0W6l3B}8MqY7OS^23mu8<)tp* zYMMa_k7k{hLu%xNhV6xNQia4DddY{sz1Y~_r2;n*0gE;+4X09JEI@rWH3B(#!iHzZ zBspsNXu|z{f>5Pk-GYcpt0AxZ08duFj>O~AAFSxbGWs_IM$%5x7WQh1BQzH?{X<`&j{mTKDytbJzS0pwK1W}pI-r={%vE#=>3|! z8KNS+fQ=~&xG7NrP}g_5#HyL)syW$3;_Qh& zcLo`ZAWtSPW+V+a*Rc>@VpT7|nBt+^TX*oWtU8nBeiH6ppZHOavq;U46g8adAjCR` zj4c`N<0HJ^3$UP4`c}S-Y@dp5;x(A3R1cFCN^RaFLD@^Xf?Q|03jGfgK4j|QbPDo~ z(*>t$&dY;rINkq2G|wZgiv9W;=S#c~t5V~n3Cc0TUe?_w*BVd4g4{vHdU%e8c=zhNQTOY;Io97k<> zC*MU6Fn<21Mhcn&t3C~*#ufciLs5^OD+c50j=TVzLFr;x+W6{pG5F?>_s2%$(`_CU zZ26krIM%h#{=AGH^wqhGb7REIQhM@k}4>QPX(HYrw;$acQte)KsrU{Ki9Sr!jzSk>wYzczh zMz6L|mpk=8_qLQ<-_aZFF1PL>7Jdu6klVAlI>kXTY%)5zxF}oNGoKkQW#Eq21Sc7= zw_NQ&iq`}y8Qc?ZV3QgqQ#ZKRZ=C9XaNq4MiFv+vNo}m@xrC0c?)l4hkB<=lVOeRb z!!*%-Rz`N3YR&|YX%^60H49JC%QehGyY$hkaEtA&u8!}~UIU6-EvcIWto{O-fMiuq z1zI7!q3gakrG$rNIiDC1-3EaKBaN9Bq8vk4lRYGa_XKGg1aIa3*!qs$2Q&V@R$#zccs2dM3@92PRrODDnd8&^fykPMXd)4qX0W zQ#x!{mA!4C#!$krxAHMcR8;~>@aGfSG%n(ULk|its}Po=r)^_tFqQ)Iv~WPJbA(Sy zBA?b8^Z~n}geEXb??Bo{cs2Nvi=NUDEQO);hp>#Q;WE?qKcsZnqEx%ZuB}$dPDRxU zjOKHGB!L1cO&A8uPJ{cW+`~TU9z!@(=qy^cc@#)LQ)QTQdG%bI)2LVo6|^}^C4fKp zRi*-`+ucF&KHXumO3G7Sezw?sYo4LS<>hAzc@t1Ws`)?_F^6MZtg+~WKZt72nSsXY zPtak0i1LC*N&wuNf3{GSbJ=GK)#tq$ROWpp)HIi!DyCybu-~oI52s>pmiY>g2Q^P| zinY^vwMS%y^b$<&!ap{W-YC)F*|DIL2cc8GUgjV|=nw@!E{U+`xgCnIB~U^l?6j_k zu;+9|gq`9l5hG;NB8mDu7a&^QKqUt>Ep$UJ3VID-IsI6%RSfZXQ5N3{j^j&P=OtaZ zgZb=jftL>(sHdqxvb%x*tvfibO^s!D<+ZCFTNJK zEEBxOk`cj62bKw5zZns{yn#_Bq>|tjQuW|;?1Rd+3*v;X-%J`+T{(mCd0jDb<3&f8 zA?nR~!yt3V36+P4Gz8{fHhs-2SP@hR<)XI-7Dzf8@DThV0MB~sHfD@A#P3Y=op985;`(dyQ5gp6<5SlT)E?j1X_rD z^fgo{{eBL(3I#Z{qq_&C;cUIAMWNJAhFD(KtJCh!A;#^eo9TWmw>kpzepnAX)2^n#+m5BQ#O7ZI6oni*1-}&j3cklZt4nR`1ZK+22=Cl&rU%8XO>3kjVzPKC zROqq5I;tzo<7r(Xog-XFv{Y@^Fiyg%SQwYW#$8+kjX*EVRKMp2u*dJ*RlJoWT|qBp zyJ@&U;KP0c3r>?qD}ECisDMj{u{!H|w(->w-ie%9F4ZMj0vW019rYY#kJ(~PzlQHZ zsb!OrkW?0ZJz1)&else4S2XI0!dc5`!X%S-=QyexA60weZHW*#%`Ne!Q3$0cKoGO-@OX4SooS5c!5C-Cn@12)Tzc(l8?|{yM#A`p$3B z3-SKU@oOQCB?H4<4p=4>>z_VX$`EvEsKfOoiR*Y5 zA}rV+L-D&b6u4f-7pMI$#G!i6yEGJJ8G>i+nbgo1zuCi+)*k9@Xq8Is2D6AxhHOZ3 zXfZkohoj@c)?_NRH=zMnvIhRbcjsF1=H=L?%$qam&5QBo21S#NQ-MtU)ha)DRXrFh z62a5bfRb$|cwd6JxFj_MkJRX57FuTtt%cxkt6NuDV0p%DPm7^yl~@f>{?En)Lv9sL z%O_H?@~W%H{BFrCxdHox(+T$My%y}{ApznE_Ctu%p#*VY@A+H~`;wIeg{6FOtA$0I z7_u6ANmWbeflT0+Q5;5g@NN``1A6DdVM7mIkUG1yMwHbyehzV1h%(Yy7EI+4j6~(_ zw2uTWm-O)L{>7|&KoK)qw|P~`uLdQ{5rN#~ZNxpB3)YLty_Cql?oY3KS3ZF0ar$Q; z2m!#h8I_Pc*-ruQ5ZzZ;Qe{7_L5oEc=M%FgzAu-IP&*jE^kXM75&vMxUd;w#T3>F_ zobW%dStQIBL}h{E%9;`@M{f9uEHJ8anFPVM%mNR($V?Z^>k5&AIp#jfva}K$vitna zBSC48iWqGX?~y1^OT}gKhqTdB?c~q!k9VYz-5pe{L?#9~)e%wiB=UyI@H=K;t<37jFM{bdf6Dq7E7TFGqKLv3NvvyxnePr^~Zq|sEj+6-p`cOffUc#o-aV+Dk}K zk%`ChZ+r0`rH!G?n@~%HlF1J82B;~P5i)rY-Zl&*N}EC#8gCZ-4Hn#_6{_aeyV-TF zmCva>ZQk#tP{R2XY82ZDo_BwO4SS(Mk(YvZxG&X0=*9TXg3MMl^kwr{592vAm&amE zFXR#|%KiuQNYW5Sle7<*VN|T*sAwe#P%F;C6O4Vh2@QtGNF-WiW2w4Q8`nI}+tgGQ zI7Kk-kLHzSL~x}q>r9XP4I|Vkk!Tv(VK^m~4&mm#RjGG0d@4u$jB;O8x0bUSo&?0H1EH~L)9e)_~vsb-%l_X!KwnD|X*$sU9Z%iu*%czaDx3s=nD zy9BROd7Q!5;vN2tP~X{XlBWd$3tvT}?P3`~I|jre_c%M^VV)&{A_-OSIbFf8GV6XL z1BI^v`4nl6E@b$!D2?#@Y8t54c*C+h#^@KIPaSdR7hn-EufG6u>6Tn{5cWduL-p8q z3Vi7)=3HL{bXuJ+ZZ9}3ylmZ>&C{#Wbpu2ZkIPf{wdr9QK6(m(l9nZ0Vp+mXFP^uW zFY_$jj!Wd~tNi6&+=N_6rfZ3XHZ*|EA}v@n0$0LHh2H>0Ef%QHZe6?&{z73YwS#@k zVltw=0v`ga6I}UBkwaWx7Twj7}D8=^Dlk%`J<5 zaH3rFJJ6(7tLxC1co#f`K7k?P6i3DQ0J_V2k7VlIYB~~T50lC0Uc{^vSNoUnh-H(r z?jD4_!bkXlq-wHErcH2P@i{}`abI+fICEJUV^Ak?DYIzFz)XI^dL|*HyD{!8;xQ$s zWiX;IAyXgO148LL#8&M-Z)<%lhpb$-C(#n}sA7PfH@S9kNS;DZ5P?o8d)Ns-SV}EQ ze*o(-Gfq}q?*#X9LBRIdSAZ&-oR@ZJ%j7A(H^FaGj3;fB@prP3PRdLV6R?dG2Q~ef zERTn4($k739M(B03vCjUILrO!nZ_GAXD7>N8*e1cqJrKe$E6k$3ekg2@=Mb0GqfwU z4_yfawbvV14Q%_RCw_M%xB%>V((cdrks9%RYt!|lZjW)hpL*2ZK3y@ik)v!<#x7EV zpn5qOk>R%3fZH*_4HFeg0wFyOxUI*oZ;;`hpFqyA`7$7`rR+)7i1E%)-*9K<841Wr z$V^)QU`!a%3Qmi0%{}UHRus1f`^B6_#}|t*r^)Bf_I`ca81EUsVbPP62;lBFO_;E( z9|$(58ehrIEvTMuypxS~jCV_ocg*!bSaD|ft^zDZYC~2Dhp;SDS6jUsn!#w%Z-!%%3d5u97q8d*#(+fEXtG4g}T8EUMEWu|fI5f!Lu}P#BW2l=Gz|Wrn20T$dyzJS`-pm?O+Bm!!A8k&A-B*5&o4fuuva`SusoHQ&q5$H z=Bpav1$4vTpc+X*y@S5^8`Kqsm_!#c#4yX3W{8o_T=ggMSTEb*8Ez-|XVu5(PjK0) zkI|pt#i@_bEbLXCbAJ%quJdAId!{zef$_DXK?l>4XF0mSs$~$c@XkZI;bTo};PY~H zGA@NWB+T;k+t~NYBbMa3dOuzxmZkwaJz||5P)W05vOCMIIHiuCmS%zGlmB zi@jTacM773C5U!l^Wui0J0VRvlHq*IJbDmsRE0$ArXEzJdVoZ1mRf zGz8Soj}|eBn>~fqCQ<75{xYtyIGC2xXlsUFp1~WeXNO=-pl<*=fu6-q6ZG0wbhs#w z?PaudRB$R^(8F`zlk9^P)=evfVwpbQ{V!nL2i{*4uX|tXy*N})VPolR&AO+xRM2X( z`!U_28KBzvRvLbX5e#~|bi3QC6?gNhpO*5nh#l78a7UKO)NNZBJB|HO*wax^7{|7r zZ#AUNs^V0RV$1cpyia^7vMncijO&XziOeZ;Ht$nJ`Wpzwd(=Gan96Y>$1lsw?*GP2 z=wGihm$49j9HJ`QWSGuHX1pW4TlvLI-JB=~T*|3PKi%<4##ML!iK<-85!lxe%uuf5 ziy{@@ms?)Z68jMcWZpq1oY0O(zT4=U%K3fFMZbZD(cked64tHsr&ya$0Qu9Ps zDaZ0u$wfw*=x_5ca9OV%sOu)i$2#p+k!P%J3VVIWnH#2JQlG0|=USSc*$ntj>iO?l znwZ&)U&rUN8N+!z;7r$MxU0ZC$#f`ZtwCB?yB+WTEW@75UTPUsQg0b5+u_I5YTnPI zlltV0+jX3f4NbiIe5;?UrN>=(KdhR($m?5lbooCt4|*|}E^iSEO_yKF?u7$YU89|H zvhR2&zoHSnVmYP|s4-yx(@5XcEA{1bYMAR%zydB*)ooQv-Yj55RROIY8U+{(`{(xKKAM&o4eu}= z*x#Y=9Z}t^)ku*@Ro_j~L!85+PilD4!k@Kskq*)7&!)i$`=qm+gcN$SEUa_|tB-Rn zxk4gBHtbZ?#?1D>z}X&XCyetKC_Zk0zl(IC{RAII)HS5R)Jw*qi}SNaH{SgP!*_qj z^b2mlseyY@5(ksS2k*8Q2RNpI;0aT8_jWmlnN@u#0u|L2Ui0wf3#>8RQtCCdw6Agehk%sifXPEEO8rzo<*Ai$`@ z74?viAM^>--l@<|0_9qWG5k|Uv(SU;uNbL5yaO(v4B?M+GI=n>9A2Ay8F`tDi(hVPN58i;rBC&yNvASopc|+g}FsLQUGmN`C(ss?gwHF0s&?T(0xPihW;`YR$X zjwA%o5fv7cP*OjRGU$ zqEP_kSi87L^<6D-L7?U0g~bKTLD;)eOq7&eGV#5t#09;cm$*1=k_mBfIB?J6;v-j4 zTp$-#6Bo+Pe0k!6gmWkemn$w3?!4N>1r|~(mt_(cA4(i!zh>=gOoycV=GH~s`D_%iyahASS ztBb!;!*t-R`xF~QV)b(2)x}byj-_fmLviuB;_8Zvw7NKTp4G+a72+bTE*b?!#6_b3 z$gy^Dk?Olz;(}H5Ws3{Sz6!+!y|%c(91it_xHuEIXFU9TarIUg$c5F!1#5)M6c^4n zec9q7;m)f~T;Pxx5f^`uIL2ws+Si)67@wZGPT~TOi_x##*$Auc!GA9fqNDgpS+6V0=cl7xL}QNnc~7Hc3if&NVxNA6BoFeM#RNO62~~KS^HWO z7h}^p4;b@jLeHkSI2dSJi;E9mnz%p=C2_Iem4~=E5aMEiSBQ)KtBH$+ioFiS#RpzV zaWS6|K&y)Pr^%lWSgcuG;PR}+#o0WqmWJZuZ}O|Vx)=*_@shaz*h+En@(OX`0(sde zFd{A*1ujWkr24LoxRAA$)^QXpvVUTA-^KZjQ51U>iVJ#eaY3{~EiTR(f8+yVnVny~ z)dg~4HF3cj;WEVq2@S5m7?p76)g~?oWf&0`pU=Y{aYnQDwI(h))AD%XOiJk46c7B>UR@}%A8~P-oVzT!uY$#=2$`wJB`fu^;%_?b%+7l@%GE)E;_ zV|DSAp{YQ1iHpPeV3JmcqT*o1S_@()#KCY2OTg&0q_!d*6cu%?PGV^0sEaC^e-SV8 zGIS$Gs_PgjC8pseQF4>ikMY)zxJkP4I2o}~`{|wfrRG0m`8JpB4`|S*s5guC0R?&S zCE|595Eqrt$nqN-J5u@iYD5bEQ@j#OmReZ&O=@%rukGY8E~+c|5G04`&T&!fwsKq) zKyX|X;T!mOV!-rZf?{3)#1^gBZ>*RvwnnnD*KO zJun50Q1ofNFNm9(a3r110as;XV>z+u*=S{NogIrD<8@`k(I)Q(SK>SlbO>n&jQ|VD zuV{EWRDs@v(_--v11%4#&57>$8 z;Ey``NBFhhV3d8QnKMV={#WRdWp&~9^wW)T+R(5xylhP~&DD}3#Q+G$BXagSox zst}v=L`&g|7>3v|V>@4A{-We)ke9;4995M;4mE*TrLrfFUy02-Kxua7XP#3^ zI9`yC>Hw^Z#fOb)`v%*=9HPf$$r$MU{LXA_j+l7Yc8Bny_ zWsbs;cJ8@Z3{h?lMkdOQfPZCpAV^p{+$0J!37om?yTpR$vUk_gKLk^R@9~j$GgN$F zBO@t`)z=Lm6Eyt4K3QgfSGyUpdVnQTnhe zU)`Dki94H$K^aVcCwLoXf&WSs19m}q)k~_O<$A##rs>*(@ZVjMUI3*fy?~8;m0Iv7 z0bQF>(F$%`#n!wn$zdApXPymi53KKOENs_G35&Hd0GdxpT8&CJ^NmUN148p+Ve zyrI$xyy51Gw^OYPm*k5Q@atA_N$UNGjoAgr**PpwtK-^E_42R)Q?&Mg$5dY>sh7+9 zOWjVzI&Y<19@$QH-gUIL5no(7YOCGaR?e@`b}D*pY05UKN|+@WsclY>{F<^*FxCKEg%RX- zJ<`#Wy3)}TT$K>1{O}JU0IuhO-gWx|(8Hu6AkRGe^4(u70rl4UBYwjIzJ4RCe@6@W z>Wy~JKb+E;0Du#Ww940@=~XiWrne+ewNCHk!C+qdh_X9%%6+br;MTMSkRh>ypWJGD z)oHCNbk+F3qjwE9sEyuKNOsP=_Zpd9jS@0oFv3P&0NEWnN={dG)pm!G+yPapfQR{T zwa(M#DxH^&z?~nb*xEWz5g*IN+3f`*0P4>~@*3`BR*O8GhEn%gA4A?L$qTQ!7Vu;+ zp?|v7IN9>3+ZVZIigl~8GRwOC3vN5*M@)`BR3beo9Z8*mM=WlnN=%D^x2Lc37oi0?Bx)(li+j@9=?+CLK=OFoN~BU>_{_U#S*m z`F|b%U&H?!`F}nCUrYLhc~W1rNWYK>ASGLy=#gw_qSq>MO_1nNL`RUGl1QHANvO_H ze0^5ey&u<@kLi}{QLfwpNE3d`4yl%?R_6<~*fW&(r*+*+xQ4C^q>qT?O}%Mw%;|25 zotOI0uyWP~r(MWeIr6<_gKA0urwPIb=QOeJHiIX5kU;xIF9+A)Ot?W4!UH48&YDyDef!pB%^4s z3I=u`4}ybuiSqvPIBjN_32va9(PO{?K_GDsZYLwv|W#oZ1e` zkcA2SB6)+7OLBcF`rC5$I+tpE&$n!k7hZyW*9sPwSxItX)D3sEcCBA!a@=(V)n0$Ndw*DJ{ z72v%?^O#Go64W#v!H4-2CJT#5hv9=LTjjIH*S=5=ZlbC1C(lU93#2cGNYC^@Zl9{r zeu_^(d#LhK5np&EFpEe=k^T!LOfNT4A>AD!{k^l-_Ga`gc`3l(86~-Bl_zQ)WJYNU z%pnuxXM`IbQ@l`|pDR!XqwdNIpjF2F27R-wc$TS|;no0zBGgkdoosM6SDA0FxGPtW zdUqm_nbu5%0N;-6KdTe(ZM(}Q5pRownSywM5$N(J#G0^%b?FH4-nKgNa*AC=zRvsy zrcin&B}&}6XM_-E*IhAct`F2CfTZR0 ztZ5#D#6p93h@aLj7x)+v)Zc_A0oeQ2D7a2516GR@S{OiEU+|su-K0;bJr3Qo*f}Du zAQ>_SZHlpQOk~P_J9#l(sr&|PX{6*H69$&A=kRmRyV{;*I8&|7H(@Wys3tvscvt} zK3(j{KCed7U}*?(3}EZx7w+JxVFy`owv{B2zbqdT*-|kX*;%!|Xd^}2n*A7`(7(nf z43OMO9*hs-qc?{_zjKf4lVV-n0^gFZl@Xz4osgRKo5p9d0?uh11iMSm@-bYbvD+G7 z_QtuM6-Eo@uj3)o@GFI?&c-g77nk*J6mDP4S^s-1{AFo2?5?V@VB+)<>SSqYjMABr zZS8d(OscAP>d%wPl1ESZ#!+@m+hekR<%&L3ph~+uVNkQEOTw=$s{rq5vVOy?)hjT= z;0%J$FaTp-rUkwSkvSb#t-*j_O4k>4edfExg3sud>k?P)>{BdZ%O#MlCVoc6q>4 zNLq_(z~bZ!CW!5=h1TsPWgbQ&YK%vVb)CFutzVC#!s9bw<2vf0&k8~D8zVh0sM4A_ zFBkc2me0tXYLrvK^L(aL=k!@jsp=QpsE#y`4lyIv5Ws$?TrNaPkll``9nI%l_Iw$wHCy1kKGFuvdC`qx}v-`cq<7fmM-!%h^>ITi7oQ;N9+ zG@IS;f_Tm`B3aAAP0qjfaUBHf-yGaIrqC5TlNc2puloE}KBw!+^{ho?G%+AwOL=YC zC0P`S$Zn)=?3kpreedJ($rJraaMj_B;A*47VJJuZIG5F-9Db4dAeJ?*SWh5$wh(+E zt)f4r>lq!|$@K-s67&ZvW29pWc*!}5noNl@adyiu{2*kmfKHZ&{S6?Df8Jb9-^=Gy z%YL5jb*1TR#VDNVQV}r`_Y%C;Wy%q=9$tS8k+>P&4;%o;6Qqyh&IvW?izZWD*;wYv zcxUorCaaci?#<51x-qGk;^52U&S$3KEa|vYXETGEOk69uU9qoad`_uUUZZjgq&HDN z@jV3FLk{dCMXR`5@C0hBs8X`x8M2%WanGb;hAr&v6l6bU7+;sO~MnoKmrE|K*Hz z3@xEN`)i;1^|AZP{7D=N98pn}ESAd`M0nbkb0cpdyHo>pOhg@uvnmveoh`2;k2*Ng zq)`WLi8jr)q0O;A$EXHvjxpCa1WaNkvX}xum62_4Ilt^N(@(%6q1km#drEDv6*@K@ z(bvIzLq8+>IzV)D0+B%lh|GqdJH=x%hm_tRU`5%~@2c!;Q(17&;I+OtEQ?g-lx7Lu z-iDB@vhqp*_c($_(pL*44tFH^o}{prqSNiGE$pj_9Hs%?#`M-i^}k(etm@3j0R>1Um^4UyeV7}F-$TmLe7Z%~>!%MNh`x#LN^7(e!KzUti4Q5^!UwaDN!x=fcY?jCv(OO654e}p^$DsbuoOf@PMmt_7ayTH%={f&HIl^%_AIc%oEcCC9D+`W<}tC8jrS1s{DdmHmj5H}dA+1XPV&(S4m|hX zjsCSjXd~_D(p#stmi?}Fp}tC-qXSCzOaw~6l{IQUS?glLOQC9cp*32)pujl$oT$bc zkKIKA;qoQLxz&~wDA8$2Ax>gd!ZuC}oUEg&Wks`9mJ=@^QEn;>->A->d!S-0x$0#av0fQJv~He%VldJn-gH zh=p^-@P_@w@aet@84<9v34f$=BI?`aF9Ctcid?i-kx@yw!MQ+cN^Dy_3S8kjY0CLD zl!I2ONO@_VP8VAvj(=Hy4>ThTsaH6SAOjH%V#doHI<}ao<=I5o#|kKf_sCtngO%ieuf*{(eV8Yxg(K4^mZb_6bal!+dyuWR*4vc;h26EsA8TnWs zQF%z2qs9%@M*sj-9Cdx@OnRWFu8*D?qV&}DVH$1Lm$*iN&tL>?HLLQmKBFtU4m7)R z)Rh1C52M3u?gCBSpE5jOsP`h(=)E|W`m(ZN9WqgkR}Bi;)!%?sD>oYs zaHz2Ai>|pwjypGhL72ZITofQr<~XZh7v#F ziZ+hWgE#_flUm*f9<@0n$8N7pa(ltgjyW;+CUJ73nNH;C;rx+K77TnIT&o(A1(0Sb z2typ;$A7nO_vQWVYT&6HQRoUV5OUBDkplQVHmTy9xNMjIXp`|)as_T8o2(|8GCTYw zI6cwZwCmqs86~iUrsPE}4}NS>s=P8<%ez(X=Q&wpvF6tgRi(+^NW$7tv$(u0;g#X~ zY~J6d=i}UE;;7!i$R=!?S zm%O~$uJ4mkTiNQx33#gx-qC%XE*PTN!P730nhC5#O!V4g4m`v<$-rP1=`Wp@(O;S8I#S}cBh)8YIE zuH%g(w({OIXfeQQ1&cy5;H?w?(%|@thkuZp&OAZbCt1Ndx@KOKKys=CBr7a3b&2iL zPQprl)gYF;p{7JvamLGKct~~BJTBSQscq*aQQLAVa})xB4pkHaj?B;ey$Vy1MitlmS4#d@ckAzch6EmuPkK^HcoT6QPk5RN&gzu5H zmVA%&qJiboR7~O`!&`#>sdAaC^@Oqfie0Tf79`?6R>RSis5fzCsE4_;#e_50O-?Tk zAT|K_#Z#(Ks&q#bM)y*&vI?jQ=5Mrw7>8&{eO&_mf*c1^H9r15>az4AC+GG@|Vc^@4f(7`L;A57hq zT!m^;0>iIopt`5x&EOc_zMHx-mI8#Vs88Dane>+;M@JxM7My>@jgX5^A(VyC`s1W=BW81|b)Vx}#Jl>{=zyi>LoRzYH{`$tL4_BxZ8 zB~KFeVJWJF&qYWKnQ>kcn_Ny}vq56(g2bX|Z!$=1U62_1NrS}PtwdtOQE4>QqTbU| zkr=Y7L1GZxN)kJ1eer6Lm_tN^FRr2`tuDUKMo{RG#M)OzVwl{G>I%DLogsWNyVo>Z zqZw#&LVYPy2p>A2_Euf4%I3u*%L~}0n6G1xpQULckn2DNN9Ubo!TC%s3%#QS&-(!u zhdP{4v4h84O`oL`)*>ySSYZ!RFrmg+pqu_$5d>l);k%m!0 zVZ6f1QvQnKW~6_O5jW$)P@lWcUxoq`J3^ed>}?>v97w<+F)?f@E+@AsJ|1&5ZD(LJ>NjP~@yYFpM`vw{g5_g&y+; zz$+GVnqL_N0&6ZnQvqS-{{r)XCcTV8neTrD-ZKe3FA6*?62iPDbNWZjTPyHTNCZ5* z5&uZG;?^Mw*GRT7F98qhw*%Ehwi55hLoCAcWE1A?5VrafVUh?uvBXob#PMK>lA7b> zo@+`?luMZBGP!xg;-{9IPYdH!xTPr9D&ADOSCX6PVa*RBXaU|kQGKvdu%eWy=aPwW zyQ*Nts#XhDb&817reL*I>q-Qx&3igBlU@WYmfRa93@8vW1 zf_A&{6G39S!QT&`{31&Z?4$U*J1oAmJM=`_cpb&cFD*dNh4w?KK3ttq32U`w^=Ebc znDnE5>`8ZO$t~MLT{T7(?`tPYwEF`iZK>4VQSr{y;2kyQxOK&caKrG{*!-6?yhi(Y zHXO9rk;8?}z~+ksv$EJT9k;@i<6b~*qcH6B?E(=?s1g?-X2X#))NzN^HF?1qHO1|) zCXSJJOZx?J7j>GkM zSRTAl-79QyX=Bz=T$hVNNszESdw^j)rwWnJuxUz?XV=>-4mXJq#-uO!=nqxiW zl2N4lQIC2)-=ePX)sl(pLafE;iGBAaSKdyM{fv1@56`mm&aIU5`*`e^FMgO8 z3p86zZT;fo4;Gu=*M2W%yZO$ZL9sRKo>rC@0M^U8AJgqAZu7WZBI<_xLmF;tsx_Wyr;=PEI*5h7@6U0+#62Nk z3fkhz!Sg=8d7&NIZ}+u{rXm65{x(tFg|^CoSbT@a->ExK=h}-=2rC(9GfArhZpWSS zQMp>-vffD0OL>o{2$gn{RKr3Qci*Rqms)s82^%d4bXMttq0JE}XD7S3mbT_Pa?a7m z1O;P(SLA-0p##KNdxlbPr-rB1Pj!J^Y9k{K(@<0MQ&pB!$8^R~tJoA;eH>H-akU25 z@9Hgl99{MLkM}zY)*WVPo=Rh$haIL+@Jvp2`uzTU&`D$NM7;47T!Cm)!01Nj4S5Dk zXYQMAF<=#?i&Kj1&gkA$jJKnBy-pq3tx8r7w>eNO2J<->QbDvD?Oev7I;jIXD!c&= zWI=Ij_Gb)vF8d3dHcvhw-m~o0v_L|DQVU>kJ>%M3>zLt!!_)oL5}%eTXN6P(Z7NZGdxOLP;>bV5o_2V&Bj&xW-5t0wD^#4MVs_Q~ z5&ZAQV<({?T~cq#x0vf0L0bz?;xgk_ zAxAHu25OVFm(7fxh!aBPfQ^1!(3NlZ>M9M@dUs5Of~V?<5E<7%g?H}Nq{@pH0+7MZ zLlHvTMkcNAK>;|WF&5=Ml+KLMrQhdqj?&CTVBKCtR)}(kums`WD5lu}V@$`cynjP! zyRzAzcKsx<-|X5948d_3Fam-a-wQ3-tfa}-HKd8ZSw9qZu5}!sPnTi})iwqA)zAm7 z(~5$qPy;}l$%**s`D;~bJ_YF;YH1$#*&$lb<6gye$&A70`-;G?g(6rY;2AG7^GWX% zGyehM1iH5d)oZs{Bz&}X8Ar3hEgO=1Km9QlC1nT!>o*PQE+|Wu&ufYR&l2>#i^!#U zT#d?6UmgirU7l_a7ZrgW$|xk|n3k;}kWfFVPSmxX(qy91R8Z?-U4c&bJ78=xHwcgj zMCk$+kQ*$|M#aYYMTD%~MpcLgDGEA>x)QN~UW$%OBp^lHojKLIJ^Q@y&=}yYG9@nc zI?45Hw#7@tG6&{G2$5y6yNDABP(1oRs&W zsNqA@BY{?&bxe`Fyb6Y+NLwCYuWkVJcLQ)8>JzQW*~r?Kc;vnZFYZ^Azbif=b)d|j zfN#}Flz8WS`QXGrVH_12L{g>vqyU2TjX*q4wL**}Xc<3fc0c%~+11`bNfEh&EF^!( zvrU_G@*P#Mc3X7=#jVtSSFZW5aAB$CIBMp#f)2c#L6Ngh%lg>AR1(Iomwcp`_>T&C zougOLubmCCCF;^HxoUH%=rGNmHJ|gT0GgL&s(3XzmWq`IaJT49i#Dd@4s3;10j{m& zx>~+1^+l>c^yM2N&WyJ%nv?-4dvvRnq++q+ib#_>urbtujZz1IJZeC%MbxTE?0f=B zYFH9b9MvI8lwdLzNhq&HKut){!G>l)wzh*LsYvZDN}#pkbPVv*-;EF3+a$P*3Pczv zv=u6`YWPbn+k>NS(`;Tqk6LFv zN@_VFly%`=!T}{n6=!1e;ZTj@MQTpO?!C4E?XY%|1f6@PpmWo^W=!uv}Jm=(;`$4Q)E95USEGaq@GghcBq(i8?oHp13fTqm-~=RMRNsgqaT}zYA013C6gRAOSw}xVHf3^F8ZYMV`Tlz--o6^g5<;YlX)#W6~GzB|G5x zAmKmSu$|An-{fg&3|qe@5WoL5I0zeF8Lt1RnCK8*++ ziCMq`Q+Q_#qcIx64SbGD1+7=Acc5d%m4^MOwK_9NdJL0uk4=+=PgoXMIjgpcT?GE!UraQ57^ebHn#V*rA;85V4MA!61C+X z@B?zx-oGuq7Qeot`p{>krU)Q^+6uh_ZFK-3$`RYst+4vL@>o=`3$4;!g_7q{rUd$? zDrKyl0a?c-Wd(!Y1Zz?*lgty^2Ou_Rl+muCYne!-YvFE7nve9W>893mioRK|VjkvE z@U2)8K3W+tv{6(7eJmmb9i7rO1L(!6jf~P`QjZ zTgtv99oe}VdgQyE>P=}UozCL@ZKhJT8+64QR*Sropcz?x+=`BPSAK$N7v^dua!kwr zLKz{7@>2kNvaa9=PvcEsp8(j;q@u?tdYF4L9h=jfM5Bk=`{Wbi7qKBz$~m`_3HHg_ z6&fv#)lJbys-nSWbI&w1+QT%r)RKT4X-Cijkqk|1ZW)s;LaI?rs=pl83U*IuwtN~c zP;glx&jaIm5khTDgrNNIfVPB6a|ZUWG6PK5i@+WeooC`uVnHdXwPB!^FO+nmHp_* zAnWSxpclzF$*RdOVDk55^_KIRKNMu>gml}Ws$x-l0#u(`eQr~PrINILbZ^>Ci^4^R+ zep!l(uMiJ5Q=S%Q;HvF{AH=J11pCJDAC<{EFhLyp;2MPCKAUtT;I!^+rOi0&xO0#! zb_f{~wz0iWTBBV1wnh zf(@W_Y}p{kDp^Sa>A-0WDmzF9#zxNV1qQEo>yBXzK=^mWeKr8KAB!gVD~EtO z+x?w9V5l}YZF;iYqE#>9?C#IYUWN}?y{flTO&EygA?<(6Y%RXQC4OYhFcht z>decn$qMdmEt_Qz$GJyV?zkfucZ=^d^Q@|cZ}xV?w#G=dpl+y1!!K29tUg=wj$9iz zGI>iAp;AV3q*1s-G?_}$q|Nde&>Bs8k$S@8njcn@Mt`nOS6_`C&s3wK)?;qPh|fBX zj%?el?Te-dQaZ$zp6yUlj2f6!V2&4nD=Py_V)bFQ(*z}1Ecr!H$UxaPo3{Q9L?(Pcg!23mucEsgGhly_^>w-NmgUFE5e%2qKmSXg3ac{3t4aKtQZ(Lb?FR@-kO7@nSf`k!o8?jgfQe@ zvlT~JGxv%rf-=s>y(W8|mE22wg|>w|%t&z4PH&buSp(mJ5qtRtYFPy3*l?@6ZM!WS zU`Lt3Vj@q-B9H95qT%pH2MOq$s^j znk?5_h9K5bjW>p|)Yq#ynT4m%+`-Ml9S{>$+uNAk*kkK)HRpP|x1Pt)zOPlGzzITA zyS$&MqZFrm*MO^j<$aY=HF{bE45FJKNxn15nWB6S1w0f1bZ);n*?1#Gpir94`Wq<= zMM;LE`prSVd1m+q#j$uA#c{vQ#xkRv;>XY`CmO1@Oi8t(t;P9JO_%PeHI4OGh+q-r zw^A)xrh7#*kT!b^b7B>7SV%j?*Zln$vH2Mws`NZqg3Qt?O;DogUHmJGhphzIYUtMZQ)%sFLDx>3iYUKGiA zsfpyb1Id$3>{WzvEf2h_oO#XYAhc)t)La_cHm7A&rNSGiUQ1PP1X!(SmWYbjyQrWv zgCK&^Uiu!ibOohV6y$ZqG79>+JPQRh{!+fh$*Os))yfL^(MXI$o5y6-CHSI%@QIB8 z?@P>VZ5$$bWpY+%#_(6Hnf`VAvN#QB5n`dmC_FTnq|zL&J`JKaJ>IUB##`>qcJwf+9?n zNfNGH|5{_mA$72;Us0v1vh50Yp4P9M^lJmN2)YW)YD{ec$glD}JFoe^0T9lpHrg1k zPN~N6RRFRQkH)|wW~T@|+N(io7*_Vmg`?@Q*|U07F9}mvIIW8FO_YT7#6%rXeQUv^ zQ%yY5w1G<`^_aA+RUkjfTp=J&71KXDo{zn6=mRe&zZEHm zEa11nIB}Fx{!8|dcmG&^g^h7jl-;;#mtc}_%i>95^WdoOVRZmE*}Z#D`L7>`iw$xf zJ8xk-$G0d~D=IpXC#g(lPp|bBQe&!eu&w)rLSJ|PpMn6rzr@KBBvSq5mp=moE>sT~B)WfEC{3Jd;^-*Zo{9%}!DSDIjxhxH1I$vp`+LsPr50^} z(Q6WU@m2Z$`H2TK%`8Q}<#8=*XlH;!oxbnJYEqQ1-OXUz>N!9d5c9-KHATOA#QFjk z4q);IbPUFSS(F$l1sIOU-lIn(C7G<~vj0#y#m4s7+?17v^j?3|D3ifI-~^K|59k;D z(Jz3Ef5ij(g++OSD)s}+NA0&TK;}Vkr1#wXIo)H(>GD~{g_V1wCiRtJt}$H((WLK45H^z^ZPJHM{wF zJSj?o)-K=sI1NvGdS!pi+*q^>DJLtG^1#R1Z_t+C(pl+dSfa9!oRIc}T{-x@h2rG&oZegU97KVS2uXSCGGWd}&`6VD z$(){L)V1)pscsbE?wxjT>8l^KC`>~ zVZWXjv?Ig^*8iwR=Z|#mi>lnYN8M3h?p9aSO%yM8OD>-lkaPIvn<*)GRJrtjF#4Oy zgBriK81Q*?8ppqWKYEPc`{hFYd&~9Eg{tV0`X|>+1Ld1&Nr2#6rhpfB#0$BC>i&p( zW%ux6{9bZn(k;G)fr_F46sdRAkXFwA<$e#9sY@L`UANj1-nF_vX6S4T*me5~bW<%@ zh_SRVE~Z5l!w1!+4lCNN+4Sey`Gn)Hg-;I(Zl+Qi7fVmbl0a~#Y7u;6q+l%gNDdPL zeEeI57CK!(!|s&rC-J5+lYGNvLf%QG{PJYFdCfAG48D$@PTbdP<3%ra>K`Ct=*IF? zrQ(lUa2;53%c!RIad>y-vSPH^_wc0KX~9utiUKj};sTC5Rn1d)8mF=_&Iu zNYA8eJS`R^R#bq9qWvsp=$-=6+dG$)bK(vbVDR=`W3!abx6cVp@h z{c?wZ*04iE+&R*yooSI`fvbh}wC4_ou*`h%EaM-8z}LiRG%3VPY8(lo4+aV_#4-33 z-PCN_OHg6j^v{mvGh%Uw>+xW5bJ^<>f3shM`A#gD8BNJW2GimndJJyce!%$U3{Zn9 zUf;BPFiThV5YdJxQU}SQyr*AK*;LsEiJ7LExePg|?HJ{Rw61YRCD0)h_XAcnPM9d1 zL%dczSCfN6hBRYp0lC~dy$;~tLbXMiYa)bia^w(tx`lUgyqAD^E<^gKcP+gm4aQss z!lZX?y~C_KmoaZf{O1tfr+`DXx+Vg@Cs^ewZBX3N-@ zu@a0UFjUWgVf)nv!yH&NVJP5zi{SRHJ}YAtfGCV!Cm(P!(+Swe_exmga{RKj0Kdqc z+3Ntj;0)m5q%9DLC!Axw;=UVu`CPX3MwkIlfL=rbL#l`b)a;5Ke{ejXP3k~vtBWi2 zAxV8IR4%WUElL<qjkO?E`W>GwJBGrZ%-Vf(y$P}CyOv>)V-He$aTh(Zr7VjRQm=N&`ThJB0 zNbQiDS*vJDxKVT7n&G)YQ(fYPLpkb_ce^rEG_@-86qh#vOBpKs#hV279mQ?>A;vDv zln!=#KKMw($1oYg-wdAe)5gA33dks6fZJLyu+PuLRl|UYGxQBgNNwSQV^A7FUU9yv zapApZ|B>kc$D75UG!KJ`kY{>&5ExBKw7LuI$CeM6ltJw8+}&3N$kD+%wbJPq&>SZv zz|O?9l##FJ5Mg*!_c&;qWUi3N_u@zK-DDn;Up{tnsy@ zfHeaNpX0dcOfd{1$UuhBkKW%Z+V9J?zZ4C9tRhL)&7x;ZT}hD`t4M@3F`$xj2(iy* zYkTgML|tlyfd^v&r+VYN%UcNA(-g{ff-4IG8~vA)^ZFWIjUYmH3kNI?P6Ik@w^uDsxWi zCJCMtMysd`?R>meQF~q+!Bf&=5tKyl=oR(uL19?7u9X$J$s<-6(h7JFEB1_21|B!g zenP7WEuN9A=*nb%2NQW5w2h17XdNO({c@rIB}&T)%n_j&S?L$wLzh75I=RRS;_J(& zkJmaUtd(9;N}Upw1#qT8A7Y07yg<3^5wr{XM(d=hw~0>V#OJI~iru&7Xx;30Z~?S$ z_>xepuUYW|sTD9nF~W4jD$mCLenG!LL5-0xawfAZ_6T_@V1Qt<;9MCnSh7)l0)`iS zc7!1+VI2}KT3aIt$u=xrB@a%YwL7nZ0%Pf20d8LfxR1>htsurFy3b~BAi*{Ufi6s&%Y>*>ErI3^sE)-Ia!@K*m7DtTwxIUH+osw?WpD`lmT&56> z&1LW4Ku4{Cs=~O1e^zB@hW(Q)y5jz!wx73Uxxs}c52vo*RBDg$P43c~y4)nV)NLBA3GV+D!Hq$11x!KXoR1x0YXpdM zq15nbR-BRUD%B?dUoM0KJyx6G5f}wxR`Yw)%xeT$tZ?eVUNs-csN|5mx&NNo8}&gT z{KY_Dq5DlUDkQ*MIiLGefqi_)=Un3z^Et$$n6l4A8|5Y6`%APp2`?F$bJ^R)#|-_;B#9_|>8wa3F+}SRYP{=e-YJ#( zvQdzdW>ljs{DfMVs#`Eyz04t34QycuYnhUddonA@vwTY2lgs9(>O*7p18-=;rX;RT zFJ8_5J+o}FzHIL6joQO0JE~EwzbXKox&Ep^@}60?S0(;@aj95w=m%%68^RDV{wo^S zP>kO*tL=|37k?`9%tF5wLN5n5tTi!O ztmxoEn%H+sLBe{lI&#ixn@Ti+CdOBz4D83@T(z{TU^!I9IEb&34;P>MNoM-rKoN0))lQLHA@ z7u9m>s^Brbu}sx|)hi$Lm5IDa4CEz*;QQAeCGg$2y9=$DN3i$s3gjHNh6XqI&#J$3 zRiUT`t`Zavu5l@~ANJ`rU^SDCK?;ih-)c~t;Nw{CT%4!Y;Xgy=wyGcJSq;WYXInsjqyvq1{-kP$=!zPLF;gko$?_HcD(k2_mer1vql&a0 zow!xXR)}#^s6k43wuTlFyuzlNW;Us*)s}k_5Ww0KQ5hnt^L*)OD*+#L@XN-JZ&L9W_tV6*k~y`J?D85$5)yp;#bRv+~1#%up(u&gBn?pA<)dngh>}&&^`2Q024Cu| z5PmwGm7i1f{VSdoN!N?c%1O0F@aTDlqHbLxf_aTo&B|x5&QPR~UvwyctG3QhD-)MK z6zh1^P`;$<|Jy5_6*^%}pfavpkS!kl6Pi?%(Q0hbD*UC*O|x<8Z4~YLs^r$pvE0qj8on78Ot`+syT6c`lUs{dS9Z_eY z1l?~^<+MpDGNF}M%4_l9?X7K^5FORPp6wtG8&z zDy1W~(UQ<&oS-CWlLb*avALn=4G;x{T|b*FIo8~}XruS!c_<=Ezi#yo4tsY%B*zL5 zRcfk3)h>cx@U1|{;u{tFz$RCpqO_^KmexC8T_jLSQ??0r@# zBOc?9%On1j1)UN-1ZWHuC%o~l9#A--;N=@gHUb4gHx-;n@7|We_&X&AKt6&L5@vU7 zj_82L^@}t9`+jzJOD02V1MT<+{L?I}hTZ-icB@ zmgS>(Cj&?W0^+k3T}SANZ9;ctLcodpN)by19QwH-Y;K z(Tx^|=%xUiieg3(?ucn-Z3vf>A_sJSh)7^ahbZG6L=R=XslYwi9t<>n^Uh!rcW73F zc|-`1*`h~QQ4C)fj}E4ELURM$snP&BO)ZdYz|h&}WHf-s(Yuj_(tPNnf?|2t#+Scn zItK9e>t9?jaeiIui5mSKx}?RD_X*ED`}}IKq0FT=@BX zA8Kd$=877;`Onstehy`-HgDOZuy%Q+s!W2Cq*TjZJv0U&(DAQ*Mvol!R>!vGzN*nc z+GBY!27RYGqQK1Ve#$JA#wXulmKcaqiDiZJu=~D3Xltl#YGv z|71PgPZSwBMu8;{AIb+~o2TE(phuqyTXqR(DKWW3hrmRsf@gVVd z%7M9;7=i-#arQG}6S~XqVp@-S7tVD9oY1(MK0<)6q}t`iK0x``0P# zn5wAs8G}>3Q6^R?FWhdRW4B46X_t3C;Jgvd*4&HUb*j4RSJAs}SGH@a`+v1|Q2`vl zIwS}DWZ!mUe^c*zSm4IqCaOz4cn>EuZTcSxAm(%Kde{B;e5Oq0MBUHGTuS^YL@)iP zKBPyE;shcxh4@4e56iAAMiQsg?9-+_h-e|#NlU=>8@qkb zf({j8vj$tQ9`8#FC6-HP)+p=+#||5}m7QFf=-`j&s9a^6Aw{FUQgi~@9QBm~gMW`- zHwZsl!;tlHXS44_Hv5iJtumD9*`l1J1Avh2^zVJV-0+0LX*tc918zFPo!Ll)E8V2( z`ghSy=EtZ0XkMb`@p6FTu42750&?8RTsM~2QVn)G*B)O!!LB#96#4WhYdBTC?@SQU zk21r}Wsg@m+x;SS<&2>iN8g;o*eyW6WKRr-K;(*CCq=11$@PqQUWYxPZ6<{CWmK=7mYd&oXZFK!JMpf&vJdGNgZV+Onn&O}%#MAS zEfm4R{Kbx=-brw@Dppp;C*~Kh@#_914z~d&{=OIJ?UMO8o5@mtIjI*q?}OAOxAO{ zl5h8vu1p#lq5*rFtD#!CMxjF9K$hK~;-|UnOkQpf4f!j;U7PHp04s@bL0pPMjuVkh8IN|XLZu)T!3QB?m!I< z*#0UK!O?YIvK}GzmrnsP&qxPospM1I-Xa?dhiI{GWarA`eey&IrXq^|H7yuH!PZ6- z@no>Z$?}h!iiFf*G}}ctDaZTMis@MwtWc{YHK=MIs#%u5;LTf=p4=6x9_qN3!nXcs z4%T%m3Kin4N}t<`22%r|CQcJ8#2Hn&oG`nhX?+6{k(+n$i>!7BS^|r?kL-qBn)+M}=IRS7NB#O%Yk5k1=fGb6Il5%*Bf z3>R4E#Q)FU+W^~jU3H%4<9@yS@!oyXll5%L@wqoj^5jUd(&e^<<1TbwVasXAL^Dm8$V&e*c?c&bb!62*unsnMjIK`^FU5Q7!4gOWI4z>w!4Cn94K1q|)(IG`kg zxWUi{oW?U4Jiq^1d!KvW)05>d=uFjE<#*0KXP^DC*4pc9ue~-GI^5vG%t{ziPSUl& zJph#f#7WNFX%XqWp(W6wqj=Drdk|O}X0e@*S2TCY@8=zGup^YvBrFNLhP7<=(jS|> z)90JLAA{n=+y7~1Z`>kz_vhn=GUo6E-tqMZs@FjcGEP%|lE=inaUyBeWwA=B;xCq! zNGVE8vE;%z9UVnzENkTWtI!B_R*f9U-ja4S(U-MypIT|WvY}9C)d~VJ90Id*FDA4t=DWAv-Lab$L|@fGZh_QTwO)qW<6l4ZB5>Mwu)YB+PYM%lbS3^=iIZ{ zgQmT1@!Nl_rl=QVe88LY1(HLr=goLM`nnYI^*S?9DXN3Q{vPS_-wRi|pjdwgg)jKt zu`(V=e_zK$Z`{IXW=qy=7=ga_Q!ZfpX(kOl#HV!uu1JZAI@-h0il#rB>?7-@6*d(- zC}hgNYt9-;Kod05&!t>}AF1fNH39xqD$GXJOD1x6f+BudUSe2~Nmq7!>5iW1)HLc9 zf7U;YbkkWaz9TJ(@30g%pspU@fz_h;4mCoxp)$;@MpbQiR_g*#b2h5F6o6r&MS+F2 z=)0JxvQ>;akOaFuCF5b@9f)q+u~Z$#@{VSd^^+AMPc(sFkgZ~}J%7SeVCCY9Oz;Wk zB?-w}lBoh8&=tv$3;k9JIEQiRq+s8!24_IWbAh!X`$BpueeiQp?@q_IZZ7_QfO#V} zbcCGPS0Eet#nY#C<@Zy-QT$w-=1HDO*^-{0*+aZesCn8cd`PwM-LsUDj>BJA-S8Le zlY2Om$aeXfm?ZWUmOzm?)YRVx6xdcdI zbU;E9auuWyzh_bYIw)WK<+w7S_I{j{iXo^db)_H+gqQ6slC4QHJ#1C~nX9WQ4-Dcv z`i`J?`8HW<@~3LtoG*HcU8$$+t=6_8!9+jxMs5e))*jWIIMN_PHMRvBLd?aN9IB*^ zL5;UGZ3awln7StoGjbeu@yR4>L{WeiG!qCwd+{Iu)~CIXsMZ^~=OTcbbIyrE1^K39 zG_l|n%=1h?e(f-FNNjkK99H?lX~DvwdLP}$iPM%5K+7++5U&YF z&c34u9%i)`h^<8l(yH5del(;bE$#Sr-EE5Tw#)q?*-^Wgk_h3LIdM*mWHxup>9Gfk zPWeKlgL4enX+I2)leffhfU*oHWX5O|R7Co5}uZ%_SBv%YID>5Pa zv}SYTva~OqFe|B?{BUNC(}<=y6In-|p|^?8RM}A=H8YHkgJyv3Tg=r}>j_iDTX+yv zU(0X7i1PGlOd`j^blH=WuHnl&!@r{^a>h$o;GJ5?ZpEF$<)+b~8o(O4gV%(fH*lK5 z@MJaPpMki>eWLcN=883;os5_JZ{aKv8y$%W3(EC3CsURHaIx&rpX&~EMbaxHbczT|`ss>!N2!^`4HW4+fc+i&u0||e;JSL3i$9SNAQYl9R z0QOcf@NSgfz<#nvh33gvKir<|=OY<(1`vlH_c96_@}9*fDt(w?+~gm! z9B@4yZWS{d#@%9_`qkTm=WU%v&@8$}`!h;5IdB>nRJb23$DPjsWfmK+C1naIYZlX% zAjLmK+61EMt@sd{Y!z!I4v`IjLRmAYr9b@LoS#N{=locGH*`v@6l=-#%vX5foB}nq zstg8!{zS&hiHy?tlKNbXdRxUbgBQd#q^?ylZYovNOtH>-Hm#nW4;~D^Ydz!BW`U5_ zR}h`|%wa9s6aM2dD$SKW8+gwK-ZO=Cj+Gn&JV$)O^epTYL|2bKN3I$r41!#YNE1de z6UO9dzh0|4eYbiWrTIMVvufph_U5pWZ9Y$h`HcN~-uZkz9z5nV33~XL24?o^Ot87h zeD26ZXC9+n>DtnKo-%ww`ATf0`AlYVYZK70KqnBdgLf2jLYCmYd_IObJ!LQw86t|N z)r$eWfEdYfqb?vh_5k52B@Lm4nJ7Pic6KYxj##7~wQ~bFq6q0CafXC?OL|6=9dbX7 zvy1tO&!VlH-8x8Vnt6`wF~Wfx7%Qsi0sgby5d#%WJOhIOG;Xz&W_s*PwiKaT^GcB^yTSkEGEd zk6P8Y$fGD8O&;Oxum#jg9u-sAAPAeHql~7KOGe&Nk$OXvfyTP1y{I^r#c>2x3s*~2 zrSh99d4p4TO3DegtP~9#P$;`x4M%JB8-BW0j!AH4YAv@3whfEKL=q*%u$b35lCHhx zW%oMd7v5Lij&Yf(GJZ%!ftiROBDMoBGiDO_A!S6U{Ms*}!66I!B~3Aa3FXqd!19oF zsb!LZ?3b_@ogIf6CzA#ngkIrgCsdWz%(;$jg~x*ONLbrHQr*Epd*ySV!HIdN4sS3S ztP(JZ+H=6sFF)|xXO$}d`r)Od+*aPB3J$4)zg^-%Q9ckK6iV;O5~?T$If9=#>T8_# zAOKaEPHj4Sj^>*fN+bxGuhCQ}z@G^qIe_4>;cPxtepIn1GrjTzEtd=BQ?UbIXp*^1 za49@xv5Y?Xn>`3k@PewiG?e7f|52Oe6HstL$Vh5xV#Z?>%PLKme#^R6Rx&EFd|okU znQ2Y>3jS&ZROnp)^D&qqgaV>Qs9Rb!+hpY*Lw52RQ3f$d7BVCKL48mBXk%0hP>PCcW zwWlR~x6OMc4()3v;9Ei$G21p|kgvEv-{zB&YXue~Cnxrb z?x1#wpWg3Yn6>ujN`|QYU1URyRGSCtjlWl3wF;Ba<>?`Th>d2e-I?n4ru&20A&^N5 zaIiH=hrgLA@PG#SF-mBKjKTO*cTzmQZfx%WZKB{l|QFJ;K!{5(U}!hv{KUdI%wojF<>9)+ZI zw@9Tr&Zf#PL+AXsv$4i07(A}9mK)Z>(Ay;%Sy>HTx7E;FrKH?s=yqSdZI)<$<OC$hy}#?v zpFkIm73h~ECJ|z^{JttJ=Bv;m?jZCPv;6qjNfAY`PKsKb6M+(>Km4uCmgY2}0-D-P zsJ6aj)wMjZ-|#b!ky&2y!{hXp0x3g(Q&yYMe{Ai21^Q-i*9vtA83a$M9F?ff)x^`m zr)LtqrNz>i94445s;1xoE|-^SZ=?vW`5z{}2Zq?THI;qkR#Q^QP**aW<$0J)(mYI3 zh8qEcer%I8*AfMjG~E}xTxY??^DEm5q9$p>X|}V8^+R}ghmW0ZnJSvH9hT7F1G<^r z%V2|!cOU~e*tF&I&toPLdQ>Ow0i>->y3UZ~n+)U&`wDQ$8N6f*)>Wt@HPD2DOe#@% z9lWZhM(tgGiq`8ej&QJ0=2W)J)uwxc8XWfp3gJg zR?|@6aiF#-r{hY%tsYe+gwO!g7Deo|5EU_a2Gro+Fg60<6=Ehwx>W;fsp^quUd)6t z5LRi+fvTs@RP@_e3WX|ah!5Xwb0xGWgVmS|C9BzHCF@K^>VUHtidECjicMGzvY!5g zS!YuY)um1e;OtdqL|V6n35~jtK>?M)dF;FqV_OQ{c1mdK(pePd?Z5pvN4i>To_c>V z^&{NI7YFu#_l8lAsGWxE7ied4t&1b#kzMQ_7*8#B-}58)nxKc!v=%SLc!XF#?~3J^p=>V^;fdK z>@BoTGBC67qfa>&1_xKvaFy&FKPwUeF2|?iboelKAsIdJ&a^OB(amIlPzet=B8*a! zHe+nw3Wv_F9%a&kJpcl0qJwG8#Zp{rt&sDkq%P5(3<)#;^rTS`^6Ck$t#w53@Lras z)haQ3ARixMI#Q?5@=`NCVD>$u{$$ti*D^)Ew`_f(#l9r#x5S;Lj@~$)vO{)_=j$m+ zyKBq+=xzdoRU1JAq5?oT0LTGRLHN)wMohGjZlTy%i<{^b$}ex1g6@FRd45^#yxHP! zSda7?;RwuA0UUjK9^rmPwu2(9^)B!XZ?YgN7`njM>YnT?3oL|#(M2iR(qjYhFk_8) z)F+)V0GzlK8Oc3p5V^w@2j%X3dM`gBVIczEGZtE_)JlNf(Vi&)r>m1ZkJh7ICpOe5E`>EX&M?+-!wF}jANLK ztXg$hTmoSQdWGYus7BZaxMS2|yvmvt96;ir4mDJt#yt3u)wDRs+b4_ixT1S#$GbGV z)OC;MD}a{m#AC%Bc%jGDp%u+H9vi%L0#Vf8uo%(^FS!|NYKY7?)9$3A=v_?#k@@C& zU3^)oa%R3wNfZf|%it_I^a5};kp!GwB*9nU%C8j8;@xiWiWNmTYX^={d_JnQ*v=JH ziT^2R-Aw1;gPpQ)7MO=d>jZ&E6M-yDQDhMP z#qN7u%iDl9m^wez(|=>WGTT~4&8ECTTli|F98OnX5l_5$Cb^-Q9`&UV(hKxGbdNcy zz-%t@SvG;{l+UtrLRI1rqiD*^a-m`BWdgPv#O+-e@DI67su^HtTn37*WE?@itUHJvtw{Z9vzs)b87YOt*X4t#O zy-I+{FCfdzES1##0$N%OY;hWrudK5vuc8tq@(6%09Rt&?JOV6^1J&RWV2JVvu+=Xx zLAEdlVN(%(V;Rx2J}sgLGgeWyuf_y*7^i5CIpIVZPHLId;Gafe69xT*?x&pYC7LB{ z0{kmsa~^_cgKi*r=AIKg)}n-KbVEeZgFXBnLj`UKL&elB#gw7K+z^HfxglVWb!503 zf`>smRcH`$-93{7aW{R04ArrWacWXTH$=eZ3W3$7M6j5lId}D-?^#{WN#&uH8=^vO zbVHa}V&LZNG1Q`YRx=Nd6Hv>la+GgDfe7jZyo0l5wYtq8LKNc6;{%p=ouviT27Xha z7OK#v5w$qdO~Ia^Hpn;D(M-Ngt=ZtGQ87mB}~w%D&GfYgj8gqsit}mMi?>KqAK%! zs7PHLDz;26RHk>6GUoeGnYvKa@5=X)y6+=At9rv6uK7M{Bbp%*l!GqoP57 zSk)(3)qEc{I<%+m3zP375Fzv^cO!GHPJZC}<&YnG?h4v79TqKXnXId5&(z-u?VYW| z2HMk}B#G0(t0+$AgPOcjoGyy$?7#hl5)9;b>A%0|{|LA7h523j6G?0S02g^|*9oF^ z;&;&wM+x@5a5UalVm8}Jo#uDpC6=%#QL3L>MbBF#%# zr@`Z*MLyWGivaViRA#(70Gr5y*J=lD4_TPvBRDs3baVV{@LDxlIG=c|4xkCPN*gYEN=eTOz-=5!&vxQtoIFJ;?ykO@Jp~+oDK!d^Dwv*`I0wOfbakluQnvpGK z=Sg``-gEE6Nr=x#(HP6S>%W=rch!G$5ab8yzhOfM>%X7-g{m?Ez1$`bj89KFRtS|6 zd|?0Q>>!)n$C)^aRp_coA?jJk7Knc^A44dD20%7jj!?{!0&dEQ)!_J$x zIBju41JMmaso0ya$(7tWKq=&SlE;|`#{cAsCy$q2Gh?(iu2?9uhXhc3%ktX`P;})Q z7_QYAvhai|g`4F2uFzgENr8qPNt&3wPVa7DW>}0=?4cajFf9u&@y%gOTlJ?fO$pu{ zdqk@|H?*1`K>A~?dwdX1ywnSwcxmI9d1aG>#L2Ck9U}jYS z9A24h3AE4$;-zI* zbC1k|C}wN2Mbu(s5ZF5bjx{OSic(TZ3n5|9z>)`@5`J2NN}wQ8Qo}Et1Q;)rB(f%z zoZk^Om)$V#ZHJMu4o60OUP1};qD(8cjChb^JdH4+qCjXPyA#x^??L*@Z5l4r(0czC z8!kH_1&L(~F*Znu$DL6=N8;!c4$t;uR~7srB6KLah-3mWZFK-pAVQ8B-cvq5`E4If zU}?1(5$c7Aa7AsA2<^3TxX3iR7`{5^uA(gVej$Ct=+Cvl6vw40t|3=geWmco6)>*~ z8>@`qFF*g)kF?F1rvk6S*wH?RA2m~)%t4wIFOLLYDG6y=wMT;E{#!w{RFb~){{y*9NYQBw5>V!7Y#mc`s zBkf^$Jm(jZx(_RQT92CCuz4*lPxEW|A$!dON|fK!do7xUSHrt`Yo74l^=Yd8=~%@q z{$Ojd*E<>8hHqwRTHg0rzHAKdvv5HocGX^59`mi1-W*Gzhi0+T+kDQ&9 zxR3kcC-p;46vJHwRI7a?p$+`M$~WtTy8z3q{H7i$*BrRZ%Ll&hxKl$z!`;EJ+5761 za2J~S=MV(w5{*C@!;e{nIw`5_swbb$Ev7Ubem34blK1|Ze|3&eej=7U5pN#Od$azD zT0?Ce{z~4vd=&^f{Jtz;$*T=m4sj1{#QuJ?!B-9rExc^oJBFs?4uohYX<-cEx_6q) zmRsTO)jRnX(`WT>pZl}elXHHnL=DC-1*Fx-^F&pPwOfsc;-UmP z#GU5zur?m%9rfaX@Jn6D4EMXuO?6@9IsiqU51BEws|hfaqa-j zpay)7Y-13_(OquOzgLl}S21fAb zJtQOMj@%d@tOoJ^G)yjSd65wh`0(ojQT$T&$h5HdXrnzU>ZK5##!naY(C&&o!(RuR zuH7ox6y6Ti70!aNx>ELuStHh3?{y$(Yl1Rtxv5rZTE%-GO4H^fdx)Av%Bb0q0x&kc zYt+bhf-dxi5TIv``gzY9Q&2ALshXJsPqzOPce>Z=pLSF$RualDAt2?(J6#aXKp^0>lB8KjME?D4n^5BSVZh8qT{ znavArk_U+l8wgbD#lKlOeW=u3)~|R5t*3WRKXLxh3uIl7=MjN+w`vgp$I!jYH3{3 zz%#$K%=V3w`$ui4F(KcE7>fmW8?W#?_-XrI;)C|#ZHC{NpM4jL6^Z>c_q+=B*cbyj zn+)YQ77I2$Os8lsKL333ueh`ijoQvatqyT5855ew-jV{!`AxDeaV}ND8Xk_u_El7q z(Mw3qmR2WSB1{{?rf8xrHPj`#;Wd)E*ecfUzgQ_e9gA=EZh1Z4t+Of_p@%8t*E?ga zguyZejXhZeivT2tUNs;=f+5HV6*WKnK&s z1L+NXM1o@0#^_cWDFY}}-OAN1y5ikxFcG|Wh6Xd|v4I11q~5iZu8j#rG5YYDymMz& zBk^Xnn|K2e-nriIr_SHCPc=u`qY`P%2nr*na$_(An0`U$%gbjTkN z{I&mYf!YhZ>u|T=C3Y0KMMw;l>Lyp39BuX6wr6rcqbXm*pN2EXGZWdh$O7T=LleOu z+s(JRGjN?-5eTl_z4`i`hj{guGpHk<{T3h857jjq$k!B3#8Fh_piPA4r$B=^gmk(T zN`o$iPif-VhYz904*!F`*|cYrz-Tvt3?rUw_#Z(%h(J9*GoAH(@lE0WG66FANT@v= z84&icM+Zn8{^a)T%0#MM=hCF76}g!b!R7u zNv{d1kx3pwqEd`&ju$K($Oq@Oy zBi5<5CYz{yr1(5M05-{G{j?Zknfey7BKOl2q*QTxp{FbYcWuun-L`zvB=2U1CZj1< zq{t`T&|+9i8BufLM)m1q;Ra9;r)dRvGCT4}Ifo65$f~0V8`OODw9x1O7i@tpBM|NE znf$Wkb*k?TmLS>$+ZJ5f6j>NSB8+O(_piZl9E_e%A@R6WSZ)@bx4`nr0;bfGO;T?r zifHX$nMk)2-tnpv^G&FVa;}T~WD*^@l>Bc_6K=<0a*aSqSJzBHohIL z)67bD|r<$yd4lq#*p%x?Mve5P7AuBcjqDn zc60>tRC@22f&2y$y)FCD?dwU7-x`|K>JcxOV3`{!_ zfopT1GZz{%+(*cO+Yq}Oo_x3GIz z^6zy2KWnBqq*%d-kb1L2ej5OT>6HQBk&*-T{xYot2%}z7oSmO$XL~Vw_JeqUJaY$! z6b5n*>{N-VHL7>jsGniO44wLo`wn{L>0ez+%8lj8SW~RJdcf4NstJ}0RqG@{z(s;Y zTF{iTbjBF&#elFc+v(|_5XKxnF;}FqXLBsFYE;Ba&u{z!5)cZfB z*;>vJg}gYMmh3`9WrXf#kx#{g1cRG~ErotqoHS>06AVlb=P5KPt_-Nn8IzP3Impee zWxQx3RTR{rmvY-YbibwLtQaFuU%GreCu{oa~w{?JG&iRCp zDV>@drBq))jw*v$W8pvId-8~OIM0xa?J-D#2azsI3@NFunnCeECE>U#a{~x8tc8}G zdBXqLU-4hidPpa2OZ#LhP?o|r!8lsDL@;4TXcmiiDd{wC2yJGv`&lVqUuUIgw?6aA zLK^85CV=9!h?Cdd76$Bh$ZbpbVjEV&rq@lBKy@w@eCB}XY92tY61MA1r*pNF~It4wxhrxD?B>b1x^Ffn4+W%Qg_&_$6;Y5EAyxQm|hVahgo( zHKX0m#n2Z|Mi*8rOjCgO8_XTMLGakkUz``w6$%Z}2=_Xo!>AxV8&yO!=>h794&)FJ z9gw;V(E<4rL{mtJ<~hogkqE>7mO^$N$xt^)W)Da}at1d*OsVHSd0#bj%MLpix`i7@ z?m5x@-!^5_&h$<(vwNEoclEJ9iya>wascvMrfFBEsf_*jFXygc50tWRwpb8nD#4+M zAG+gaZBdvd)6>m7n#Cj7-#cQPk3Qr8v&$UorgSSSNfRo;Ce3X?`)mD;YSErYd|35?(I z^`S5E^__gJt!^Ds_mNYt!Nr(vm-wMFl~CqxBN1f#uTecP=j--C<36@dz@Mag(IQ6$ zOAyl%Fb!RF5J$@Lh0%oG8%=Pt7bsY;2p5p9G!dOGNm_n-|69cwJ&RV0GlTb*_wTno zL=@aR0?Kq?M9M5EjamUUSu5f2Ot=AAa?!lBVUImG#o7&5CU3Ct(-s?SupH^SSkr(* z6$LslJ6YZYd<4v{1!6UzP)Nc2M)G)`j%-LidUvV#$EM9z2UQq1BjqG8(H z!QET!?hV{s%M%RCu7uEk(RPBqqfC>z=(?q;9?QZ+{5c?{`SjgaX-(X~_ps`>a{-dq zbCG7z%c>PsP-WsOdHB@o9ovf?W&0Y<5$e1O3!cjkrU4|!Qdpv8C9M-1q*XfB#}} z=Rx!`v5#dP=#kP}I$4}YD%}dDNv@1tF1?NG7Aw|uXPgnCXpa9M75RuHYIvMNSsf2R z+7#(F$8(Ftp?gPb3Z8a2HjroY<8}8k!Pe;o44T|z%8g5Z$+{ffii$R#yLa3bF^s?& zsbdF*Dq}6p+ax1I^dz~IHfGt`!yRMk_FUbx6K2{>OvGlhK`OajGn_3P@y^gc06NOup?1$%riB-p&# zS~abL@3dwpZ!u0|UQzK%MS?P#U?Rna6a%2DBa)(aW}?2$IdyozjBRtjd%PCfHz1%e zrD!P1w|+e!=W;EC&*iP^eH;6G%+t%#@6w)fGS@An|56xKCHQ${h%& zvkr8A4XmCsByMJXcq&Q&TqMT)ry}#$12O-pGBAHV5cB5%N@xChAm%?+2Ij8^Fn>~i zu=GuP74Me>V@ByPg-ZHB*Q68Q6&(&;xa#6FZ;>>Od!UKo8V`PV9gl7#L8^ zV6~bEH_^g@Ey*r&9zf_?=|TEow6^7* zYx6$nxX?bTlw5Q26NxQpccjt1yx@>SeKUFk0NCK^mE!l=Q#_MoB@c7NG}icUyTVGk-g!HMd0A~xG83+)BxQa%8w4-Z1+1)ai& zNMKL-1jdGjrAKTq8P00bP@;|PV8E!uVPSi|gNaHAb}Grtd-i`arKn$mjD#|&jyx!B z<9*w7e8F=?71zc9vsejCne)=VoQ|8KR&F$Fy~0B2E#ZSbz&^Oz%v7xcqNLDgO4nJC z^@E-pmc?dFHb9g@Y7{dx1csGG}RUl0F)}@y%F*(yc9m7kE&&T#s|*?zD<8 z>F#K*-Fe3wdxn2c2pQ+`5m4dC)31ASLJ+wg(^GTyVm!^J!i1eWDCzKG{*~zB!a&A{ z=KT5yy;?{@HmIYM9|%u68^*|S)b^Y6zv#n#d|r~Y*}8cQZ1R2iUr&7S?+Dz)Q6#k! z1ynw=Tun*GT_c>yOTi!nv?moM2N2Kb%J0*PO|-R#k?wpmQnP%Mch)_#uisOC?95WK z*$+F);Z)_Z`fo(q(fV(89?m7{q%*aeXqvPR^yHjFa9@>niDGv2`MeRiuoU||u4 z(tK#g6WfQlclZFk0aCEC*0NV(+~g?h&*f3;?a}6*;iKy9agr`s!$++r_oTyLQoBdg zbFJONoR1(VIJTFC(WX)ev#F18o<{j#9(h!wT(T#$8n_m3?FrqFPjpJd(R_O@;w^Cq zoS-w@L9`IDItHyDq$j#Qr!JiN4bl9wy5;&bSMHXSQu~049Wt7K8mNor%e$?;!;^7q zdE_vksNF;P_Ux`kTw{g@1Fz$a=_Xqc)~(tPtA%+*Yx^zj1u*W3yOcB%>vz@V#^P4aau}l+QFrI_)ybk8T2g~ zjVAUGb3ooU&@g9ch>Mn!l|IL1rnT^f7X6qszsT*@#3F~v z4C@S=ow7e}S{sisfc0KdFE%p9<}0k5pCO9^epPZcYBzGA!>~>Cg*^jZZ!SP#2&xn9I7G~mzO8u9c6F$gCrH*nndnDv~_28NjA5(vH*>&L>w0iOo51 z8C&`tRvQKv$P5G-y!BCjJd2}1i?j%tMtPS_InWOQ2i~%o0dLPfVEe~>PG*X%0T73B zeR$2lIEHb9&6JY~9@z!eRTW|5KF|=lChe<|r#U6o17G~;$4CP=O%PU0;kg@-QGqpj zsN&}GFMXq_&jTAw?QHE@of$)JDXTMl8Xs+}`UfXfhbn)lnxGw?02YED2$ce&LMQVR zbCnoIBWg|0j?UFN{vcQ$m6PciXb44#rhH<)Q>0^|ICSgA@f-xM$w0s0L|YTZ<%oK4 z^UKG|lkbyzmZu{fz&e;rJv2H^vniiuQ(>A7tw%o17-m;fY}74T*iv=&HcT`?H|OwD zD3AJ~*1nt8xLmJpXqtH=tx*j%7U;$zpt#=wdWIN*43s%{Pa|(Hiio18Zoiy}c z%4l=x8Bc%aOTXRPMF2l%7vd#=w}Q3b*L>?T9XIfl$rx&&4i1S^9hv@1O?zHZ2kNfs zXf3NF%-EJVyv^7lN5ffcPY$}*J5U@KEk^>dN=C!zrLMRs{=x1(SSOgBZsb{tm!fEo zx^#?%HO*(6Z{?SNjs7==CvDOJql*KK3|7F%xD%5xw|OM;T{HPO48HpKHQ{4RYr)5B z^?UL$()2YhrRCw27?x90(z>|VMYUZ0&**noB3luTgR8}^&-oqd5hA`TozFlS9mYVwL8ZEV5SgZ?Q zUC0M^RAa@O=)|*`jw(m<7x#QN+Y=EE>s&kNNfFSJg1-v*_#K_DxaSn=IK`0Vji#P5e{*KG9?)URsT5P2L?ne~DmQ z)){F(FWeakHgU|*Bcm;PWVA((ObTN!N7hg}yFpqia?HCcP1D@wrb_7;^C&*%{q`XW z;Mdes$r#o|i&=c?{4QoBQs_d{#EMC3BWEPFNpK`}ON)(SuLfBTcZbS0!YJKMi#I61 zInp6gO8O`z^K^z!K8j)j?HtV} ziX)3KFu+FbC9|A(6}qA6$I^$GgG2-%k<&o;A{=S>0TY5b%5{V}z!A7zf_KGWX0ImV z!Q2irROZWg^O7LL5e2s29NZ*#p*v6v8uB&EkwCj5yL*|X!h0Eq zKPMiN?JPIJ-!X=99SWPr-rb3)H z81qXz{pqv^3d`!kZzAUBcZ)xb!O9+rgu+-*$J6bsOr#jj^o>LMoI9d`TIUSfYC3=& zGmK)Z8=;3_?Bx{|RN>1I&njkO?_&2F*w;D&67l7tg4Fu#yO zXJ9#k6GJmt>o4`)Z=W1z=a=NCu@(Al_0ey8Nx!W=7DDRvB~~A`377^{2vRsMSUG(_ zS7e*H2oAFm`m4XSL>!1WJv?d-Qal`>3&t$=a}T#ezdg#Wb0TvE1pah{r;xh%6BAh^ zP$Df3OPj`dV%vzhxyQE&QovKpg_nxS7%S4=lE9i(^Ib;RREx(3XkC#>`4n3^ zp)1H*;wlCaoT5wTbc!zhV>(6Y1ATj(zAVBB4=fSjdWs)RuGD4oNyUADfozW_k7j0| z81fB3(vzdY3d6cvS03MGSb9r(Sl7!)7|GQ#hdzx4caR@qHwW~R!p{j7{C-wfDEyi5 z`)RIv{}fj>a@u}hnVe8%g!Vq9E0Gk>&uq^gP+cHaZX0>FbzPd-8lHVuEuUMwIb8;nus_nfedw-nprrH^JL&*kUcxTUS5_h9I; zoUZa>GyEixy;g043U=goSqnL&RU+#qD-P049)A@6C05KtE1%SlXZd4mrqMxgsQS>t ze`MIjI*(PatW6OV(??ik>gl?W9WiB3clTstnBtM_>Vl9VHl*=d$g@cVOMTLYe9T5+ zdW5F$F#`9i5j;L=O{;mM;ZNHqmpeeV^`uis45+cwuroM`Q6G&g@lZ3@_&ALjALqIF zIK73y!ZHSd=|+;npG-?qAOOSQWt#VcRjFEO1c}0n#njqR;q%~M;U-$oMMtT>CQb_B zDEC`?^cvL5i;aIj)X=HW2^;eiKxurrS?=G3MnpXia-_xE%qNDHenobJd>arGbg0E0 z1KcTHF>0UC6{GiYT^ZwJkZMUl7KK<%SbXNp`~T)wzVM$v@z=?B4{~NsQ;BbBVTt3W z&H`3bserLQ`2-nLA#Yr$4xd}YSOPYwhq!m37GpH-i=>|$TLh?2cScIBEjMh9I} zGavf`jJjBVjZye1xc&O!BZkn&QY|nnz}iN*`!2#cvFTmP!@>Ar)GVL4ny)35Lecd+ zV{z?5<7*NHd?541-!RkI$YY?Ra@0h45CJUu!b*U(&G60IVjL|mvD&v@T{w|Sw=kz8 ze2SsK>xa)XCR1`@6uOi6)TEI7g#My@SyM#$a`gb)oY+xfGfdUB)=iHKJ+n@zXQ;X& zdqvnlo!VN!FGbi8c9KY!<&eH&8i)}Tb1iOuf)gac(26i(bAl(Py#=d$Oo*caMRgg) z^V2jJjYXdlr%MlnBdKwF%FC`y=!%wfh`Y3zXfSfDHO7}BGja|Uzw};~dpw1PF%DW@ zOI=iQG#{}L1aL6fjLKNqV_!6QqJ%cCzqU+>m>HgeWodb)Jo-DVd4*%srH+?JCJzSX z;mHpZCQJJ4P<%*V=B3Jsci|`D)R@}-mvV_YC%5U=gwxEFqn}Pf6^iWkQ|hu4nI_t38QtY=GzAF z6RkvVERW;(a+a$G#+UMKi{OC!?-;+axby~OLaTVAH>J$tk7&I%e)_=4@ab6(;GUY` zJ8y=7Ns%(P)?p7a(SHzNfLjo%lgbR>rpJw^q6UC2IPS+EXm8`0@Ix2VC=ZiUy~T1c zNfz02m0|o_-%VyqZs+eSE+y@mBr7Bm0epXP>0;~7gX2r9a+i2H$`CDqfv^Wh;QiH<&K-n9kL0sQm*bxb#A?m zm=UstfuoOryixf~#6a~DcyHU|;K~_Pyeq1^`RXnnJfzf%p0qY=Vga4 zrYvE)s<;1Q$|{PKvf7My-m&4ZS6NwY=PirIp|Z+!O~R2EnIGxkG%99ECK} zCAxCRxGe_QiH!O+SXS%uofPL=wAW7~P}O+tJzg(W$3waJWVhl+lRRjSAoNl0QAShZ zEB+6C#w4e0b)m?$HZM)6apbDvEjno5G@2_m+romx&xsS_(%DyrZ8=EVqUZ0KC{^U< zZX)N3<}H$HY_D1IyyMTc(_M25_O$%FZg@`sq_(e~^S#0#p*U!E`S+pS63}*3|GD00 zdQbi5dXGXwu-Z>t8NS4CW8wO-Qk~M>uFpyU{6*SiN@S22_y2u#22(dEtrmczOn18b`5E}c%DN7&%@|{I4;%T8C z7M2(Sl&E7-%5SnWS$|see`mR$@6+3gF7pJnwS4r~e%m!_JUqJ?CmX)l-jzz%Y`W)o zR)ge!Sx<6$jaUm|IcqPY z`9~e)DgE{}oSuzD`zCyyj5~Y|sz5s?fRk;iXbk^5atWU$7x}#mtNf5I$x6M@98MF9 zab6ihEI2r?2>wfq2V*I)hh@IY=f1E?ycT@NZKaY}A?7igp+Eq zt?Kov4g`fP^NExwu|!pWQ_-xs5(i;^>LjNib8`6!;7#GTLMgO&LaHY{F0~E*p)aB* zPBxXPeItPC2I%4i&B}{J=-PY722YutG21@=Xyl6xxlycvJcE{BND7?BE1eXDKtTw? z#B(hrMm{~+XfR{0r)+MKq8o07Dr+P}=2FF5Dt;&5!3gGU zGFC?-wic7orSM8k58jP?2wCT2JGkJj+XkmX?_`5p`JccTl&jiv}Nhol6Exy2?)Hb9L2h#n@FHfLQD5V0l*udu_Mt3wO1DzOEK{i8yaa zKxPP-;Kks&aYo#@fX434f_pn7l=0~iazK4VKV-bvvR@FFX4?}M>$r6tDi|A*B)5UV z-cssgk>jHPK0UUD!;<-x?_5la?9EAXXL0F4-7-l1^82iIpZopjQp)JuEtax5<-QMu zohgd&gj4qCjJg0BafOl#h0Z_;&dhnn!1lti_um43L?M|rPWRYlN>xPz+j=3~Xz+(4!2mi8yZ9@T51Rnkl|1f?e5kVM zZ-8*MHLzK*pu!euHBlRtNT(Xr?28#ypPln(k7~w7H6zruwV8gEQS~({G!~6Y`}Ng} zvqweU=N#2c9M#OqQE4uzZAqxU{=aSmo6c!rAeJG0T#q#s;WY!w)7395AOH2^dZ$BV zPfgx6cAldJWD1IhwJ?QXZEp~X;fjU4U`geEDWRqWPMD_z<^m6G!iQp&bULr*7)gwhJ_G&8CY3&q1{+wxy2*j1(X7?jYI9rq7Y7C|? zD(vM0SjW=%dCH0=6Q6wvGdO#v3s1g8LC7>O(_7F%(Qz49F|A16knkcEH_fH8u((Jp z6E)bJ3T@YMdTmMf(FK z)3WkQNG+{2;9WE|M1sk{5vm}PW_cB-st3z76Z4+>hk~kHrl!7VPt=qPZ2bRbQWw1pa(ve4(0R&+(wpqkBt7j-4*6daV5HyX1oZ}JN^&}_j@YMDARfw;9~#WHcE z=mYd~)bt|WbqD6JA)K%8 z=cpv~{)OKPf-5@!4C((a49|*4r&c3U%FPusDqEhAdq#S#=%08po$w8(Y}>-XQwdY6)H%#K{ams$s`rjqve}$tgj}kJk2S{qk-ABZ{68xd zN+ImuIq0yuSZv%odIOJNF9TVDOl@0dlmgS;NJ5i0f4eP+k zup1SG3>@QiI*oUha>_MwNx_0jwv#sV;u0xO@<*)GbJmztqrVYTh7aov+Z6pq40=|> z*;veKAWZ>c7t}kg*lK7%?xEQzH)(T*1IcM-EE!|nNI^HUS~WXXSlM zfLR(9C1=Wqs$bIERFkA}ch6|SDpYGY8C35=tTZp)Aiu*pmX;);U@h7i(lvwQ2w3l3*vhSS3NvZwi`}fUX8E922Jg}^ z{wX+(q|h|Lt6UhM-klixa7f`MV{jKi@+?RqR{;ke8fh$fF51D!95>~NXqk}3_o8Kl zab9CaHh+MX;4L`}$jt$xLoF;xLROjsW+?76wa-er1BR03fSED}jLMq>W{NOgaVJ&j z4w&Jj_k3dx82d&CaoP|<2TfMsharsuh|9{$gg6scPX`YBjC0rxd@ygkw#5PK1RiKq zAr3+ALo}HT?8fDclaGQi`7b>g$_C_r_*~OA8z)r9oh?KXJbddY(G)>s@LWbZch;D> zzjCAy3z3OY4_}?N5Q$Yfd?+n0|D2Muc9dJdx-Y0dic8Kv1H3|UM`3*2>JXEY+)4@ifbtP= zJ*ewbUy?C?K(}0Px56i7x*yV`9cqrenKH!b$PSnmm#fBP-&n|Y$}-nh#X@;@<_xMl zo|nPBqH(1oKbe&&v+(RLJpOs_0&L<%bi>wz7ofc@^lfv#L(Y;!mU@q6j)3T7G1J;& zq7AT^r&u%&R^-E)&AJ1r1>@32H*7Xk7>ABoKdaW*V z#guM3g5^B^Hi}n zCHPAx#0Wo_8(TcHqEnY|Ze1Ih5hu1Uhq>4YsdIogEB)U!Cdo<@nX^`!`mDKvXK@eM zV!wKcIpHh)LM~y78XON8juMh=^X@5L0wSOjwJeMcmNb=e6-7!8780t8cneYSnuY!zlVl| z?exh3Mdc_&N{N&B%l5zk-J2MMQM7t{>)7J;Z$AsV7Uv$LB@BkLrXmb+5iEnDaQFR+ zpb(EA3W`d!#xKI#$`H#BthUQAZ;%EaP+EAMA2Mi)=$u7fs*uvIAonFj^tt7-L<9#k z4e7k0Nfy0&Wcp2Y! z|2`T4aK_ya+B0J)ZXJu;DkujAyDdhfiyen&kPrOXSg`G)E!OWr!LyZ#wYK`RV!E#{ z*t!C*8gG{5Xref+Bh$o;i4pNhJjlDryAFEhxDSW(%9{4WdFh;URsyOB(1GTL#8w$H zr-e*8!yHZ6KowqJ=Xia6F(*}MM)+$ML!lm~2ygvDZd9P0(J66Q;+4(e7el>9Byz@t zdfzaqxA1zEsHy^MQ^N{iRnqYYR@v9qSO6>1%2q`ZF*Qg;0EVfBXSl8-Sa}W#0!4Z` zz)zxGEgi@HXapa;u z+jt0zz;>w^UC(kiX$dZHzMf>QGL6OGO4EfRwF5kDde?Y{@^35Q%^Lu;H^HW@@}A#Y zO3F8sk8&|hs(eBZc9eJhet6&zK+YdhQYC)T3cgKJJbRErV*Ti8M|^BpnV{R0luE#+ zod8GR(>7H>X;dN{!B8R{V1}~~Z0Mj{(Y7wZ5CIZeqctcdGpOM3zT!2o<#*5n1wRnZ zD@b$5B&!*#DK-xn!T@qZygwxDw{LhDWYtK}43-%x8~Y zzhg{3pN8g1zhcULq!XWvp)+kKo{q$vir->_fW|%=h&XDTHPi%#IkuJ3{ffr>%pGbr z3asD{9nfp>aJ3OYdw!H?x0gt2s5Le;V}@$@ISV&%kcb=C%_MWfQC8lswO#+X{v*MqBgfOB>SlX*l>%?SPSDUsUd>@ng?)eWV%@0U+Z3M>+4^L8GI z#rCz&TIn`u0!R5alw}LZvhBJbPLfczjcGZ27`IhF zVMqWbHW(NZW8=wm`~^(%+ikmoVd4ahQVpPH`BNQWPGGLv^#NTy(Z+Gz(*I*zxm!|k zR(P%B`~`2K&c3#U*pTC3wfG9W)aViI44Dv?hIcBpEE_XAXN8}SA@&7n`YUc>PmHuKkUY`Y_J!9dNd98wD1Rbr^-Ji)!mrt z#^p44>}QJER`)c<@wE2AJ7G?j_hC1(_wG1Pj5MdUhdL`0Ywhgf$5lLEQ5>bbhp`iB zU2wd=R^K(8@*?0Re*l>aJ(Ls)C#2Q+96z@v1Z>Y56k;iZc2($-ScVbM&EyjQPWT`L z*OK6(vU>Ho^ooRuQp{dSrCgb<=rL-Ya@*+vMe#-ahfizN-ec{$!iD%Eh+H8tR+%V$ zLTP7IDHQjFt_LlU?{VEiY2LO|+G#xlHvEN9Ym`=>?-NRcC$JaAp!zPg+ao zpPI&6V$%Y5oSs;4SZcyKqgG#yUjVKxJmRv6i|;KhxC3U6dxJ223=o5xGBu|$ut*yo z$|%mlzE^VrT*d-_E`{9PFDT}2c8QS$gVp*I#}Ed%LMj2Sz2XAqi#s5BMkhj5zBO(n z65L3Z!tx@Y84i~!hgsxUm6_`dOVX(h6v$O1VFd8~BoTJuf^gW*!>46YNg&^je6w&H zvXI_k#(LB;q?=coMx~)sTH(n5zb2NaJ~9j^B~I3;_y7!)Rs4Flo4)F< zEoP0gbeZ6$g^g!dQ;cx3DZ3e6!3sw~sBM8!thf9`B#K6g&+fW;JdaLs5+|vOV*y>v z`h|JaP_$=6&I?@TrTn1$2U3`kxHRRzdVp~3p=9`Pz48iK*46|?^V8&jsfo8y{Ym1g zG;s)d+QAcM)#d(co4>ztyD2Gv0O3w2_{_AKo>YwRWV!CQtzbCU6!Y3v1@f+CGH`jT z+cr{P?y+@W=yP-OBioa$0QjG)&+o@(@RVao`7iX~gS7{bpq2E>57(YNYESMC+@IQ< zY#duqyGBT7Cy0~@C}g;EK_FnjI0mJ9FJw2eGe*~U(of~DATm198Y?SwZjJP9wZU7# z0+B^LX!~I{7=@Ke{%V*+AR$tpj8^i9m2y4ZC9}*{$YiqyN`1B4UT%(c1qwMH)SC0b zmAt{s4cGr(f(0T!xx~m0u#aU3_XS&;Xu&Gv{InVf9c%h{A#8TY z@duGiW{0^#>$AhQ!%b!foFPsyWl|pgCjJC*hAlJ~-58@Tep=3EYr;^Q!-w!k)5I1c ziJ*NM5sH!I#iz}LvmdM)4?n6Txyn8_RGF^AD)9v<7luutuKaHyB94)Z1e^FZ`D4z! zF|(A`_zD*bKq~l-5A11I5K=`3GFnhFO||69C{0{IF{EAOZ0Bcjy+a-a4z38!07k_{g`I_r!a>G9PRU)k1Zu5lHHEh@_*BR29{h5r<+-t zrb@hn_LP)=`DY*hddt>Uhd9Xl1T_bvV0uz;W_iJBym>PtrNNP&gUt-!r11~rcIgj4 zg4q-Q$>!T3*bc;p#$B!_E3P;w2AloV0Q=HvlOCyWSYfvWT?3D#4E`&@TVG{Yv1?rE z@G;B-pBf0kU1z6OCcjZ@N#4aKX5QMWi%q&{jo?&yIsHiHUoi?NYJQsQxq^drlhJwVu=1%r92K7>vu z0M)@m{O|#R5S$H41m*A#9VkHFR?PX*F;6S709^Y%Glg2phLF+5_`L&dU zBKeE>`US{Pm7gHqSaWYs{%^!0(4K7DGTn#3&~h^#D#%v_Phy|ms?ZM9^C01Lngw=k zQ$!dZ(GU;q$BzkoB5PI!1ds9B2w!>G=5sB3L88*9}^H;P24K?;77;L;y#PJTdlPJPq*9`%I2 zUzr?LLtT4fQ^)}ZS2Muym*Ee8o-XVYLhEQBv>OooxCApAS?I|h+n-JH-}hwP4NKc8qYT8*J@pN zjbzNACS%rUY7C^|N4P=BI6V1eA^Q$3;Am25HkspCq{_y5qtl8qd9t91StCz=Me@`K z+Z2~9F;P(|Nt=5jI@KyF`Zya-?bIM$~j zq8kAnGK_9Io2ei|o%0i3%Y5L$KQ>RJ38E96?oLf?B^Z=kT|IG3*3>2b)LryKTh)ia zd)a$<&Hkn-q#|)1rWGt6_~xd?WbwdVfBr;1{9>L#nM6EX4}Ht$PLPzO{~hBu6>V*_ zm5zWe@g}LGho4!}4!TGGeb_-)9{(#IY%HIM4+OVfiOUnFa*_-l=<=)}X!aM1ga{

K-J2N6P9kFHQ&zl5?4O`1O==V;+MNPx>^B1t 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

hZT(-wCo4wzznEg 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

&L)sni$@2`yqZO60tMHmmeAX{a@N2^3K;v9sLEV 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%0D(vY#*x{Gw@=}$@*0q! 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 YAD6z**?0MJ81Fmt{%+o1v+wf%58hf6TL1t6 diff --git a/tests/interchaintest/bytecode/swaprouter.wasm b/tests/interchaintest/bytecode/swaprouter.wasm index 124d0313572dea4ae216f5f37eaa3e76b752092a..15c43ed9a665cfaf03308af8d76763fe3c4b6cab 100644 GIT binary patch literal 256074 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

-TdfF1+&D!L8yIH*ri52z1xK+)}> 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 literal 433206 zcmeFa3%p(RRqs1r>$TT@tRy>-kN|V7(z>H;o3@y6C?8K|Zo@+?QspR~!xd;r3wt9C zA?46}dm*)HrKeO;YwcTVQRssmtRnC>3LoHR*wB^)Pv7%x{t@eI@WBlh_ zbM3wMP69>G`CLi6=bDfIYmD(9umAXue{{w5KO9F<6n`P!e0g&7&GF5br#IhxbEMyq z{p3l;6YgUBKlcsYbJMgdKU)67-`^D8^I;TS-VU#L7xAS0lAmfP4jMB@Yj@wc&x=l7 zapjeJFT3H2Yp%ZX3d&n`YwQ^XUU}`+FXPSswL6Mb(!agxRX=>iwbirU^}AoT=lS2U zZSi@R-LQM_)h~awH?m>)c<=6)(UZNG?RnKp7k9rp>Zzvb-B&*UJHF$2|7N7jZ29n| zSL}P)RU@w&SMGl4t6t%w>0bA$-Fshs*~_lF;_7SZ@5j=EX*-G6wBmLg$4Qd$hadXe z;!d|oqt$BhBh7~Hcpz2tQB`A8QxT9YAVj6rs`5laYGI9fAyw8dyV)60VPu_Ni@-*iDuGBrW?tm zzG_8H|Ido>&i+$Bk|^a9>j2fpaY|(XCz^<|xa$LLrOh;Mo)~rYJc^@kE2V;LX2ZsA zk~W(>qs=6miBD36syvO;O(}if6Mv9@jWmwdHaDg>$Ho5rhobJyQE}JT?z8JbU0c5z zPc?sd_Yc2v@2iujd-b)~@4MpKeOHT6U)|b$Pc8fHxzxtKeUUnvrCoa2;nRCTuyRW@6jk}j!cGd1H_FVSTE3V(2 zCY=u?aa6?J55(s_nfyxf_4pP46#qnW;|1rP|6S+&W_*8q;p>t&BnOh$C$}VTO#V~y zrsUS-&B>1?Kc3u{eBWD=mt1z~i|_@nVZCGU*i6~8ZjPyF8a9r4e_?~XqmKNw$l&im63 zq!(UzM|@ZOU0;rWKR)-b<45CHd?Ef~{6FI_#TWiV{P$MNpTt!1)%cvhNFI)l#9xX3 zEdKNOPvggE=?~*SivJ+~Hz$%TKCJeqtt`BL)5Fd%rq+d_&N-zA!welI`P>@*B?y(0@{VUJ}WBn#XgI6~ofTzyv&a?(syuIb z=~h{~WmWThp%_qts#;Z5sr4ssEnZ+Pw(_*M#@ig0$`hV`B0Y(MDV2mi(3~~4Si~>( zvPH7IZ1HnXL@x|&CJX9(yXY-YQw=A-rn`gQa5#i=*+Gm543DpBPd1c7bIESHErZA*IUW}*&n;HpZv z>n-%I$P)oT)gE)VDN`dPf*Y?<*Qj;-mS0 zVc20bX*n9&OBl}uweir+qmL(HJPcgpp@$j|O%BJChVeiWj3@Q+q#6&Suf{{UCF4m~ z7!SazjVJZ-{25F&=hp_YtYukCPO1{L(cZP%}bCCN}Hl5o zCPSl|3{6djM&2w-H?3+WL6{7@s;UZ;p=pzW7d9EJ&0(o(GBki*v+P5d49zeZRH-Jz zlCtGwu-7&jTAB=vJnMZ}Q=zqNDzr2eTJ@>W%3GQW+0vW$* zMxcLQRaKevXe<^@F?79XLBrPOuoN8fLnt*!Z>&~ms})%%JpK{YgRlQEzC!ey6F&uuj&`LU;KF_5?dB~%kpeXa`EfT(VU?F_M9imndF&u4r}{O3G>Hb7kcMrfCU>Wr3=ZoC(n` z$)YocESkmd1GFtsw4FAaNPyyt+}FsW6Ud^Rug5jLY(7C18Pem}$ z1M?{>b}Sb6{n(+X_g1t9G0?d8;na{UiV`gOcrH0l43z7Oq|4}`n5ceiHR`h|cJ{~& zJ3}+fP!BIg`+ySkeQyfQ!Ii!7uR>=t6=qsEe@wc8A87iWqQn?YlmJul9HY8u(i;$Qn<*3IG@@pZfU zO=yY{Tn9Bkw~}pK3}mqlS`YgSnmfiR$!6ru@LjUCjcY)BCs^YUiTFz&=Fn&SvaZsp zs9QuRS6#JOMCbP2pO|@3Cnz&4_)`&$*%n5M@D5oWV_!ZEt7OL_1ofsyf=@uA|M7^P zBKlM274xYk@^aeJ5gAsmSw<5M-c4AdFk(# zON$3ep?Pc{0b(Y)29t>JO?NjM0Gmi_@2GVX9uhPZA-e3A7g#JB;-7lagm{;f8Z?UE zgkR3Nh9XO#_%!#=jm!|WLggUCY{GKOu*nRzNsxz+H3F_}W3 z6{Cc2_I_MkQg)A~BJ)Lm&J>sAdItU1Gh>qc$c6X_sE7-?+Oa|KJ$=Z)Qla3qL34ZB zbLh+LrA%{(6+!p$2nIG&G0wC&vW#)Qwz3PDHI0?j(9F6af;oyBY6Qa=R#QWRN+u-p zCDds8+7QXo=}IKqyay+SWW5lQmy|+xsv+5Qry7#2P(ZTeuKHFYS??+}wAPK_sIb?D zC`>?iPrT9HeL7>crsy#PI=A(^$`8ne2`b}zK0{0P!$&S=Y(8o+{ zchD|Qr#~>!Ka9?q!dJCxN^QDL@BIR-8kzdlQyZEk^U)g7gjGSwbEo2B9V6mVtXlhE z*g05gYHFjmk=c-5((i~cF4mCHR|i?K{#=+nt{$c%JTy;CK{HOOOKJYXbjhhBGp13ktEaUCM3>LJhr1w|_m z_l`b{R?3iCagYIQm@FPNr%Avh5pO)8sn2NaTxztr@gm+fT!*qz8Ft~pKI9#JL$<5z zTNiroN%GE}jt@~w2@LAc*hXO0xN{&+koPK&`-ys0bx4fgT2*(Tnr1P%IA~g@T2ryO zykkJzuJ>+`7@88GV@y|s%r~(`Xao4xpdd+v5ht(TlzXDU3%0fiDcYxd+@_aESKpRg zEd6v_auHvD>ZcDy#dEy#y-ga$VKK_?f35pxaTo#$YK*IyXR{%3WD9EZQKuL{o_xY2 zOT;7M-p}z11_4tt`b(TEK$VG0X7>o ziU1EoqXH0f$>wdzB)?q3lnzYyPpY>^YL3d^k1NOCakyQXX+>skSEh(=KKR)Wd^S42 zNcQy`0LneE^wvDEOruqtusDw9Vkbe1&yGT zx#IjBG|G;G=fYy7Gk`4!2X3EL3Ip`odwXJp2HtoJKKCH4N=fy`xcG-4s{B!*nu4st?1J81SRG($(0vR( z4QGEmm>QjpRDWZrJ?Xo$G#|YhUWE#AUH=4%9>Kel?d_v$6#EnVxsIQY#|!-vxjw{o zGuOZ7dU6`D>0J+hZw8WyNwdtQSyud`x}Kjfl@uM?obKk`V*gFoAq7+M#1oj%J)Tc> z^C=f{sA2qcDYr+x1+{dX5=^mB^+1A~VsxD9rzR13$>gMX6FOT}`lHQZJhI3hBps}P|B!#H?alLBrY7sX^aTLp)Lgjfql? z)icTy9K2l!0qE=D<6!m zYqPn& zFb1j^gHVNX7)f7eAvogKEZUF%LJ@)D^bGj{&FL5N!{vmC4*6j^ld7m8<>r7Cn1U-cF8)oz%Li9 zbLyB2)-BTg%en{WP**RA)##*RU6+AO()0DI-H{-vF)O&`!}{_HW{C|{@8_fbP}K4u z^g zp<|{Cz+%{CJ0=yyjn8#y1r#;~D46sT6uS8-cfxqv5-z>67ZjA>uGUIVuHh(N6PI_wj=47=E>w*>o=YPsgIO@ugT{9iJ@~!TmlYU5~2Jg&TTfzGHmd| z+%I0#m9blszBy-aNt{v+KmvjlRjwBRo0=G|cWA&9`Ajc&caClwy3HqqHTMWm@<==d z%@t3Y@ayLi(~#e(JLCQ-;&dmQWyc3te19o6h7t8xEJlG8*TC){BJxxla}Q|erwRmI zH*HG}>k1?v(UsB<>zZ#*A4K`vHHB)uB|S`IUKO0D(qF`q(b8~MJ`fL1!TWG0G`3k9 zR}3}4W5F;hg~Bj!c2YP|61+qN5}aO0DPf$Sh&`SuE$&5KUyCJz8Z+Zo7!p#ph~To; zr6|xO5C)Np+Nf}zq(Ff*3)2)OMF0?Ulb>It=(50kJ&2o;Ewv$^$=9Px$-tb+*BU8V zl+TPb1fqOqtj-zqEDX#U3@VmPxkN(RT9>lwgUMxC1k@^mqz6@$k2!%?ZQ4R@of) znr;Rj&00R@BZlh)C6_FWDrij)`(!fVG@Qmj-N?6OjmI^SO)K$Y&b*J$Fp<5Ie`0OVrb1+@lidXu>sQP?Xh z!Gy5r*&l)LrW`j0_=f~=^f>00&9w(~#qxJ{1Pk89w8fdYcQ2&g7UOocJWMY!Bu2v= z8k}nL%_iDJekwChrkT_PW}kJ9cF`;$TAvU+Pf$XUj`%jvCPlIh-pW70Z)*zrgG@`; zq|qm1{6x%WllB2K9$k>?gQ|}+k`GXfOI9F==n?QRZHw_$UC?^pQH_^avpzQCr9-pQ zguDGFhELWv@;V3|m`3b6rm4iPW13EEK)xdod})=#=!MBhQv)Z6be#=YfQ&-5LD>+v z*+Wb-{k)5(sL>*OP=h@rcMo3V5|+m~5K)&TF~t~-(8L3**j-p6C92mLc&%w6CfIG( zLGA@hbx=P|n%of!$tJ`>S$p4JRcHid1jdkz!05dZ7@9cDJ}N$Z8?!d2E@XncMsG{x z8vV^Ujuop{typT@=)W?|(0z;378IBPJa#6m-V7z!QHuQtEt zxbns5${CbVUpZ6YA?)i%@%@#KDf5RcUHqrrE$LQY`wHfctw^3(aVK92>)tb+w0-II zHlnWF#VZS7)W>W3>5k=pdbMcaL2T(zvU>Szy>0Pt3 zrx)g*ID8Qg6h(ZXKqDhre{to-n<(5Lhw_3Kcz^7UZI&qJk^|gG<^|WYRd|chV0a{_ zg4{Tg--(oK6Gb$TTU%5jjhaQPYCKY=%=ee5S&eBf*}&Z9!_AcGXV4%4jJ{|t)7Pyr zbSBA?uuuhKB$DoeJ`=&-r$18Q8; z$9S^Jg3Yy#S1^6E8(OYe=CorTwe-2svsKNv6g?)NvHsH;2%K*Yb%7VBVS`v<@Lvu? z&pZCw#I)q8Oc`_SGoKrIM_&5|432ekbn$HwQLlNXpl@tS%|Igc@B95y!Tdt3%y`-%X*(4?}G zg|uKDgB)&Ng3)PfLxOdpXoi66`RKcaV_TbJL2h7+YZTaFlTAen7C+GNSZ?IA!>nTC z(hVcg&kmS&vl1#WY_}ZSt>CO}nzJ^Ql}B99P1gzKO_1B`r?M>?-XrYavgtF8LSwc4 zZ~BHN(NL?voMbr?gHko0vx(wNF`XFN>=ryJy-rGfR(@#0L9Lo*t6=zme6%MdAP225}ad7O)PNaTd~I(3}i^E?E?bEd^!JaE5~V#e^Yj;jBpD)Lcq- zDDp2VzHMc*E#d{If+~tEwqW5@Yn_?louBY0l#px5U$>ZWa0@Z*%iOf7J`WBwwhhPAs!XVQJ7bZWx1znRGMc?R} zdVQ&Dso%}rTizx@Jk`YK96fpW>mbIIx8Qj*+s za+=$co;QrVqO+!b;w@G;wJ@GaW-*igGL9Qkqp@I2g~{QV9^#{M^)?!DQE_ijx!^5q zwXYsoV4oXJv&?f-j?)l#VFi#V>eXg_Ewu?-aE=9hEF%%5+(k0am&6bRDULxlX|{%ryugqaPdkeIye_^9q@2QJ!~JRcsTEb}B(bX! zJt!l#wd0zta0o7^q{>(?84CNIxMw!qsgXE_>EI$z(l=mi1Sob7O zSqBpfvV!QERvW|BdT9v@<~FOxEjAn{>^Vk-@+}UwP7DCBQ>BE(#qVhGxQnwJ#R@A% zI&r)uigteKkACHScYgTck3JE7?^Fb^%?X~G*Spm9XmM#HP1{FNHR3**ktPJ`=9mT` zfgE zzP#llqn`4^)-sjD1m0#53#?{~@8XRv!iZ1JdsCBwM^Yr_4z`y8DRK~cS+p$y%!`H* zkG!pqt)jAOjIu0JnGofKk@WyQf(#*W!aQvCm9JP&0==X8cLMjQuY8FsL3&e~e?vun z(uh}FQY&8;X)?j1$(<2S_o&|w{2&-4Wl!zu&%_x_=><2&8EoRx{|Ql*xP#~x|1?o0 z1TFj8m%n4}tLeO9&Y7kr1H8OGFB2y72`WozVS~NOASTfmQ+;3(6CR@CD=>x_i>5^>63(!~w1Q?3hWBTheU0f9 z4k3LoKUKSJT%?4N8cWbjQ!pXZ833MQnq%I-Q+kkp{72#+ne&g)k56XiSja-Y5kH$OB6CH+1XG9p;EuQa-lI|pwg zUbkNY?DNsbVSM=ACR75&g(1yH$kbV3d(ze_EOM#r%p)Q$q+vy9jw{(0Ml4~Xo@#MF z4l@;fh@}TG<)f=jGsyHF)krPSorSNI^kig4(IL&FUwXq)zDb@J6Vw&;FQa%{_i~E2 z?yW}glG}61BT3&1foX_ez3$u6H#SGf@z;nztEDU>t)oHGmkcMiC7%c*H3ownVIwCZ z`yf1YQma*agsD9PFm357{_#g&jk@jw#Te&#j?5NHQIqf4ctmFX!XG&%l2lIbqVKg?PdE5+FX&SUH9g*c&i8{ zG3~OxQ#FlFs)SPLgmGZE5scCpNRZk-+){8t(;=$pg#5&?GJk@2h?eIo7Q&pYYxXmB z&7Rg-tOJH)RRP46)Ldh>GnKfm&m^s$m1Ll`F@ZJeuQRNnh)uB%#RyQe@qrMFG)txYDC};AbuMR}<)T8QDqljCTNUCS7iXO> zHiIwg2I+HFPj>gtiJJy2eP_8A!+jIG0$$f?+Sulv&=M=&FUA{Y#d#YlU?f=)b^8P% zsXK~y&_XJNaguSrId~nKfhr7g2B+J|r>+b*d|}i}ZMFvmU1P|G<_DccO=Tgxvmda7bLkh;JmLAipHJrSKm#KVNg4XciF$^bq5BUS&eUMrM~2w_r!fIJ>SJ6RT>Y1Atz4F z_~xU#N|r1)goZpHy+4Lbdg7s4H*~JaU&rTC7mmR{7;13L%oTsA3UkZf4Gp#1=|w4L zZ})Kk)A{JVG#JQ*>c`k>aV}d8Eo^A31sV6YT9t1rhvIf_BS?g|SAHEU6I4zSNNKL& z*D-YfZfWKkOa>Y=985X4oPrNFBoAe-K|@oFttD=m74HlAZ??b(?cq}ZWX3l`!}t_-O|SlMXBJk29O zbV{OdVv`C(*NPbntISJ}qjhlAxUGnj0j|bv(fR7!Hkc@f%|tO~x*E3y+0Jcc9Mva; zhVQ*GRc_pv>YrOA468R4;r)cD8=|{S)FQvXbDnYah~kF(DLlki2BmQXMrRxW&M-8{ z_Oha1sGi2b$DxYAYBkrp39<07d* zS-u&cCOIc?>llA1_M40x!^7cn>$PW33a-sP_3AEqvn9O?JD!Gch4B|>bud?+jFDRI zlbese!E)O^*)39K6?y8m%Gc$?R!E}h%?KUQd(*dE7?BJs^}Pq*gi3Ao&z0#YXX(*b z3vn52VCQo4R$vMP`<~;2yBr#IB;4ByHIF<$EdT4V&d1rw^ z4hq|(Xz_xEJG6Pj9dU?5+%2alEQ$3{7}dIo>i`Sz6MU8e53+eOHbX*P@FtcR5J@l~ z&}|8q_(sf#Ui%jKnwMvrCgBn>uti?fLQX%kq2bISOg6hd; zN0zaK=c`y{AP2@K@g&EvYK0y*ZsF>2TVZ7_ik>~~g)5NlcITKCtG^}1rAJJ$BIyBB zxxzM#C$i+64-^W(D7C$n=hZHC7WjjAgkKx^N}6A+#ekKU$q|QPUkV>t^pUS#=h03= zg4?c()|5uRwymo0vao|;>*C!zzY)K#FU2wO=%%1I(hCW9$svBOp+lxOra^Bk8_L-R z-`0!|@l{#5Dy!s4umvt{(<51~bd+lEu?k3?q*Cv|YX;dR($hx2g5}XVnHzkukX6FO zvpUGp1(|S>PGt$g4s==ZT4X>^EbHZ#DrY;~2VTdIv7!ELre zP5_vX5Xhv-SyD4BR(iYe=z4uD)@Z7xX8@2e>FZ&O|F_kXv{apjSDp_41$C+l#*$4a z+Ymj#?C2OXG*d{9J<>oJ5^Gy}6qfp!W9p&JuWHQpf#wuC74Rs%>oORrO07uugV%ah z#{J7$WSlwVGAwZk7T?)zR*CuZLd!BylVEEq%mrv&nVDbB~Ah z5W_Et9SIJ_P%?rpGyA4sR_aL4S15hk5QH){t>5(f3q{RxLaSx%zwvC4cr~(BQNJpx5 z=*yF!bx6!E$Xryb)`I>P0R$Ke)6JHQQx?2RES~E8ab*|^O3H{JvC%jydJz}U0P|2_ z&@Np}4xYD(nyW%n|za_O#pBum2+uQ9bYbc0w2G6(RL_n-56TXE}brOG}MxGm=6ME_;UsNT5 zxXK0@zg$B;OWhOzuH=GvzZ^009;Jjh%{%A83pm{f*!W89@?J?A8-xZmR6voJ5Uyfe zh~d-}v@)MQJJ|1++?@6T=zeq4i4=e5*b4$Y{ci6ll`$ z>}w6t`#>%#a9w6!v+$bH(CEgvyl8Z7OS)reXmmpa8vH{Ig@ZEG&n8uRS(o$DWrCTm zkhk7Y(&JznmGqjL(gDObzpUUYx7VgaR1}Kh*kltpVS)rl@`q?+wOZUEH)|$0t2L}` zzEoezXa!?gJ{S|Gvo&FA!7?sP0lJChdbM{|-rK5Lrt(p1fx=e%Mq*nWv+ACxQ*zwm zU%v3-WUXiSL4lfpgix>-dLPpAypkJbJBW-q9D>pHYS2}hB}|!+5e@1lQIZ}i40VD^ zF$^?~JTV$CP#hMJ@|qb0-(qWYi+A4w{1Qv59HbBfe$axoSFL_|y=T>{&B($jj64_v zHv9DuyMSd8z``wzfr&wf@c1Uh!*NK z$3FkDzqTxnDo%VMa*zxlzEv$RlLhOY5>gpVhBcH~$Luw{LXpoxH2#t@315ZZ67Y(# z#puQ>I9?8z}S5BFtcM{Nj%$ly_J2Z+XepGZT-pIy2)Ce+# z4hJ@u?2!UKAMF#Ytq&DZ5hhs?)d=DoS4>fWZO9$wu}g}_B-R5_jS$9_QUv^ch?4f# zijm%)Tq%9a$Y!6DjU{1Eooq%(I)KFzfJ$^iHr5p{uvjEcHYrO=0qH(V1Wc9>ejO)U z$W@0bvQT`I`*}|ZtJ?Txq&Ca_sTUOq4Qm^c5U;(QbB1r$-)fg*yGR$=o`gfBXrI4{ zIMeA?oTRO+VLM<9B4Z#`k&`M&F565sP0{WY&aIOG*itRjuS+^iEPk z?aSZPmn`q|S=&BaA3jrs%st(y^7-i2xc7l%@>%6X%8HLJ>01Aox)vH7=~`&hX5;uq zCy6^lzN|>nM?uto5~7+x^7sJN*i%4L0A5x^mDJH1V^TZ-tj5gB`)u=RQhY+795<=& zi6@^emCw$ zk?#gkkmgnrdjPuA@LR<{CwdhPZ$2hMxm~5EO7i78IYP!%QX}KL%a4tSE#-bi@FQP} z&KG(o4r!o*e4Wbk?&Rhnq5tP4{oiy<{r{9e+gY*yR5I+pdbL>fYU<=kB9;9$`M1=1 zdkDRgz8S4k$%?ISnmp;L6Vw~U6egcGK>?7>LbtO7C!VK5)bcICEa1u>%Iw1lgOhs z4~o0g1nMg^(&LSp6eC}t*)n1?TBg>U^Ur2cR{Ww$)+Q+$;?sr;IVkF#3o<T7=U6WZQlHzuhppS?FuP8u9s7@v4qdQE)VHJ*~=pk&yjyD;Kb>B4To%$W; zbfr{7omjot)9&$6Td0lwbLyO&ILqasa+|E&Q=Gr$gnLAFw5kcWYV#`g%nq>Xm?QT~ z>YR3Jk)da3ksY;+DO~R@C%dx7tPC34g6z2es?_iYZ$E}Cv*PuV z<;Mt86?YqpX^nG79uO+T4~LTd_^LW6u_Aj+n7dDcLbnIw zsgsScKp`#GNbKAxQ=?Zm{7lPV1vgT}SFd5?Q9h{PL4v52rym~gRhy}5IYA%dn1txt z@=PirWNt1dVzx?h#l2%Bio3*IOuVXS*9$Bbsa#BYk>O%8BCnPD+8=%9gUxMG5$_{!yJZII|HP|zWA2G!~2oT+uL^sZv? zQ@<0rX~(LM=5II3bQMN^em%nvO@tI&DHzX00*Cq3?};_a?j}@-7sAz&!#(D*;yM>Cp*+Ool$gY;_2g-Q~S}EwaSc zyG2fp?BVB0A!h$~bf=InJFhDwk`#dr>7y|smR0Qf7pqHAR>JEa?-v0YSCgov?edfr zBS&S;DQ#OxCP^H*@CfQpEC@C5Yq@Kqz^S!vaXS&7s8ybOp`~>T+bh2^`(W~{{F2GB z@=Hi=#h2aL@Dr)tkv>Xc<5K9)|gf9t57TB(ti<6JDIK5`w@=p%+Cj#{~v$t!xQjcmx( z0DJBEN}Wj+q`rK_!_M&fsGV7<@|w4G{74zZk_A2!VG9J~h?CToLwsDm7z5-=a?$$U zJ@{R1xn)L++peq5XsJj)*RQO$hNkSOwpvR-gU0tAwcLseHg;H>D%4?ZqIs=@aSaPL zUxQ7sYgC7|DTz+;PuvI2X@#Ehf{jVoe7$y#I$O#{IA@m6a%`xfinZBX8*csfUdb)gvq3q=zj%G}a=Klof9%zYNed46L$nXiI~KSy;@_JbY>4assln^2&;9 z5wR{iqu==&Ki(zLmUXS9vf>)fDPwl;Fp;7jB&^i3yly5QS4+#-+v}3i`m*xkHeHDk zlHj;czPOM-q^Y8FzL2UkCQig+ImW^XQ>hkGbx^3iw#_ocu>>sf3=tU2A_LVb@GxG+ zqzfzT9G(>PSSCbS|8NeKE9^r()(eCapfrhe0+jV?Sc>fv_k*T6*I8s27Y}eBmQJlu z+4W#Er;C0NsoouRwN#78VbqeTWO7^4qDr8ECILhW1ud!A<#Ds!Nn>ZBv970*59INMBoAs(6rKL@D}0 zMwAg>EjZ)RPkrW1W<=QsA+na(nWks&2lh zzvCc8TfkIQGL7@9OsI$YvRPVwd!^tcRe4ykcWQb9PR$<+e{;WHVEVl+3PqhDFdJ^o zu>%SPoEV0UPvjE{C{GD2BiWNaAym({NKBaI2z}LO%B!8{QSo-|argoSXtMXM-Z)ms zgi8qTzJ1?Q_ajP_u~ls2@Mt>)y{pd_s(!fIBS2m&MM*-&WQo_ssD#M`E7L=5c+=FX z9qI|M_SiK%MiO*EGRvdLu;F%QE*@u%7PaOT!U1iOPBk&LR;?&<0$$!jCt&8Hyx{z) zoh6HC*GYdI#W)J6+EI*x@KY+NVirXBH~&nhPJQq=PMr#8jTnn4Z9Fh0#y5x*eT~aW z(?LHyd9;oXKCUCD-nB02dF=MxmNm^Z;!y_&Fn8Hx;7 zP~F7%dQ{A6YI;pHsOIf#`mA^&jBli-@#CcTswq8R=jyS^LJ)0S;CU3I!R*fDC4_|C zj3!c;fx2lxWO-!UefZJd86SA{oyET$#j2&!AWPvzRt`v5a>B8nk_1CATMjIeXD=|< z13)u_7J=$p()^;q8n0KGBk9Wu^%4naC#2e$)dK6Z0Ym4J39Q7zjzdol+R?!b7(;wY zC5|o>5tGtV`UUsj;J;SycVnrOCPp?CpE!&Vc@`6dS$0^zALoyq#a%r9i`;H5K6F11 zzJ{DAA3X7?@&O!Hhu})BCPwJvP%X27z)zl@jZ30@3emIc5s#TgpX)LyMNY2;MRYN} zk$%iohZ&~}#Yq;htk(>VDOz~Od&Sy@iLmm7BOAWXvzt7BO14Guh!d8QlCdT<27+sa z&}P0?-y71Jn&JFWuFvM(WCdtqh;x&|7gy+hyN|jZMj<5R>+US}-@JFpDDrhXzwwRe z`?<7k>90duM#(zn3eS!Jp+Q6}t7S)bmN*$ADaQLc1ikX@M8Zh%kU=5WG0g#26X1&7 zZtR8Obdu^R`~?pwPp^T^luyB+X4SFdkO0Yr;`vKP4-R!;MI)cJxyZy=HWv@gT<2U? zTRxN{^`b#bj^k|nd>np`p1U$6%~&=9W1b-RLGQ3@0_N<__$7=RdZtf4>U%}a0d~d< zhL6{XO%wR%b9wlDn#UH(dSgCafsV9J+H8nV*g|W0ZpSc4<;~b_!YtSD%5$S7TdPNB zOaBA(yghHgUJR9RwUr{NDTi4><_-$@OUH3|@u+649&iKF+9xYh_0=2!c^Zg{GxUC`8X-a2aWIVN_8}#EyWP;ZeHg*WQF6jc8 zB)vA>5>0YDN+ot(W5BfE2Op3P+&I5}=1YPgx6IVVUw+{?T6XA52M8$um;@e5XDYtO zH`=>ws;lI?%Ts=_s7JIC`EZrEms4MWEXlrgvA{WGpzxwzXoHZQK&z~}yk>XQ=&3JI zTkX`B%s}SKG5RILWUi_oXdl}2D%8R4Odlyh!l6uOMf;&SeXxgCVLDP(q*Y4^os%Ao zxRA?P_ZSxP16B9hsHPXBC5XJ*=I;?lv6z}DZJ#3_433v>nP zWCEpBzT)rSSGiu&;%nTvU#37LheK`YI<)P6(o89*6aM&D^vq8l(WX$HiwZ!*^JNSH zxOqWnwl7G90c)pu*+<@qP2p%6Bs<>(Z5_mYjFP6USG?Hy1|A&-D75YfWBpsO@Uy23 zR!d>C6n0Bt3+&MU1!&G$7bFB38>)VMK7M*9;coDgaDVRupZ(UA4#M4F6r1D`fC?0w z$c%wv88QEXxq+kF@> ztM5;)G-APWWCM78Ti8ImCTp9qw2fAB&r%`S(p;J8c+5e`;F#Tsz5he{2s1)IaipKTVx z6hO*OkY7QM3>=|fsXsC>gh!Byz5*Uq!Pp+*)G<4)`-gGd3|XohSo5}XQF|WYaS9g^ z$3pBfKT+bX+h4HkC$EnJ) z^3%orD$buEG|D$S7I{<2h@?2XdV>~iJ<8>XGS4m144|N^(d3N_fR-G}{Gnae9r6xz zRRU1-|5@mUj~rFNKPWk(MhaC*PSa*1c#{o#-_#AQB-? z(m%^#myy)Ky4DPYD6cw%n2HefyCOsg4nmarAwo>L9Nt5{tw2anu9H%(o#sqMYh9#? zvjx&*0tV8|oJMp+m`zJaQ`3^JYFc(nLL5^7g3wxD&?r)#G5qATra83mL&Vn%R9SH zvgIHQqQ*i+vZ=Iq<@PZaD$!iRF_3Hq1(qxnTn$M!9g=KyKAz}BBs*c^F)c|}gdxT$ zOf4nZ6`87i{J%BHvh`Xd`>A*TE6E2)EtHY0)9fCsnhf)$I>#_B3><7Xz8L9bXCxAx-$*U zSb7B72FC`lNOb}3LINGk6JYK%1qrh9k2|eZNMFo2Ou402crg^!Q>uchiN28?B?&fb zt_c=dOoK9Knq{`ZHPOhGKEkx`E2L-3HNnMP6S#n-Z>bMQi*D)&JH`=yTF65!)iCAqqqiLiL>qoMa0-oMXu4ulRi-QXo=yFc z=_)%cXitE;Azj(d&oWnCQ~DEHOwgZ%96nI=45`AFTCc2#A@{Lf?c{1dPXav2dUfIM zXJXaV%P+>BkqEC#3sR7Qh3N?xo)0!e7I{m6N_5ephXszU$sET#!{H(g@nm<#VFKU} z*!gb!JrAaq&rX(y90}%!CGpNe@wc~CYpOC9i@&PhvxfSo^?Mxx<(@tBFwi^N+|cXm zGAn1ZtJ&O1fk{jsX$4EqI&}nnGs$ zDVWVc;lf9)2?nOQxCKp`twEb?Ps~l0P+%Mi)Dyoc|LM~`5UhCYT*8_2SLv66o#(aV z;+jyfrSS%5m7z8jxzD z&H3mWMXPdi2?Qq};%bGVvejPWC}}AWs}+`9%a(OYp5K}0OmSRKrg@_lmY_7tzj zT=L!OJd0O>Jpc`%sQNBFQ|lf?R4$Z>+YAo9Z&jfUM1xLQdSUSuN=d)t7Qt#_N>05H@q9NELZDL+3m_Mk1q=l| z@~0MRWyCu>AcLX!U&RSYX=waUd{M>BiT~Loi5==n)!RW*cA$e&QsR=-kreVw_Hj@e zHENc2M6f`bNFCeLO2_y{QTH88aVWMEf&xUb9c|gXSlN;J=0*BuF4z!>^0(k-fRm`FvsDQ{w>V{7Qm&PtgDCAtL zd~#8UyG`)G_ykgj8gdLleS9O3wj89b8b}Sp22#EeNVzyjomZ70)prh35mPC>jNLdB zsDYF(hagqnv*Bc(EhlpTX>BqKq#{243_)tmI!MKQ1igy4%o=ZTkdEgq#ve4{Oa9;> zeMd#94+2tOk%$X%tOh!r9OB?iDl|Cbq8)fcokvexqeF|EVq$3KG)*bdD-*jQ zDI`YQO#r|jQ%-z48o^#$k~0Ra?P>0_%Cv8IoX;xLDvT@QsNW&l9I3)p5b?>T02N@n ztj?gRc%7!-)6Jk{IE8U1*fBUid#PnDe2rF z^6RSy%u4uwvv`Z1$K+pD@Fk@}fvjGD_Pu~Y|7!(!N;cxlnei51V?u#GT&_Nl6O~f+ zT)B*mJ^!&C6v{Zt1}w|+9yce_pu=fMQVzvs;RG68tdli4!-sC$t1tyI=eMMLkUGGX z?9UAm8rBf}N^`4h!%n~J7!k^hxCRk{eQ*^Q z>U8+q*%YsFxZfB$$TTqUduHsDsIw$pVO0p_)K^`Ac1Ue(C&N-`NljW|wEiiNH1><~ zNF($w=0Z0wLZvMRK}px(uR>r_?UhnSI3#R)s_&a*hvvfQlzuvUp|U|UKIQ-a0pL@f zR^~j3E?gvo&JsQcF=ZG4*cApY_QT2q08QJF6?u=9gTQPUj8F7vWGQ;Y+LwRb4`g=W zSy|7Bd>my>4Kh>R3_^esq`;7v^wuEyiWDxGj zqeASg7&u~O5q3n#)NqEbZV9GA!F}^|(s3qz8%)}4K&@N2vXPD9&{7f4bnd)mggckv zV9U+)xrJgsyB5qQVtg>g;>n+?ac8*o9Wtq%I&>GP`W`opIZgU-8^;@NpOpOOJuteghsO5Tm@Xgj(wZ`0?UE`y(vt?V(W>jCW<SZM7!cWYZd?Pqdd@oMWhg-bz@j!^AG8{((Jb@Hm_=$u?d5!8ia!#?lP>01x~oR zW(#7LO~u6USeAWS(`j3i{icZxOS)`1wu?~N$vy;UD~;k-+sVY)O14E*Y{kaRSVac1 z`&l;)ndrTqFqEnuvlZu~1GXhQ-X)i$8U9wG!~sk}+f>s1gu`8`Kp9f4iTRMWADi;J zu3}oP2y;M8BUcm(X{H-)$B3fE)`0va10DB)6yf)!WsY}hzMQW|>Rqh|Mn<)&-3>OZ z+N)Cw%spx);hK6&1~rU`ZOLn7powQ$U=rY$J_+m6DFPtPSmJcGf=>alMA%y8BNG)H z{^gdf@Q*C7@QFRWF9`3-1!ls|&JbukH+q%m_dog>0+8gE^hSY;)WjI_^g+LnwNhB> zm}4B@GJ<>|jTvpH2pF)LEe4ViN$fKljOJ+mK5_Uw4nR-%0 zT~TzY*@?jkJ{`m$7tx=>31EFRT1Xxoks0p|85$d=k|DU&yYz+86}6 zLc>V@N*pr2vxnlaQQT(!o?p+B#?9$XEUpawgJ|=0FCeDyM-4BA8*E(n00yrgL1xlR z(b8o8?!zI}BnU$OlSy_EPaukIu^}vpV8YT59czbAM@jfCvkZF>f)k0-xPdIm3kXu! zi*LT;NrW#axR8Q-GDpyBzo@#z>2}6`u{LphOek2Pi12`vTXgy6A~^8MMzT8**+juN z%RP`6i^k0MAOBh}&E;~e{sFXNgM_HK^bg2Mh$`?Y{JzC=_>CN``3HiNuL zJXh{8{D>UP6#gocU-^amAuO8m>#Z7Fy_dSX9m7GXp2a!%{jROr1 zGj6-xjnD{R4)h1~*cv^e_l~r?#^305#*;hK?mO4AaBZLW6OYM_h&&i$zSOCB{BPUE zz#9DY#xfSaGtr%#nx5&cS-Wm_{Rt;-*a$z3*d-;H(-U^-+IfZd{FZQ$^Xl9EjKYLI zYgv?U5EQl+%CEEe#fEi$u}J&QbdubEt5){hva;+LDkJ(~)ylRWPi5qyt}xjZHMB-w!OW_E>O@$zqk6tcr?3J&A@ z`sd2=o#6mnjc&>0JHE0o9UeZO%8Vy2pHWp6$AwT5zm+`$d7v>MX^2{(n<0Ya61BHh zO|3BW@d(A*FPj>LXaK@vzjquE#TQ;yM!!dU`yC^_y|1cvTS@6Fv6}Jy#vOi)P2Kf$ zo5CG)jMM9h&z8Wd(0zQ<3rF`Ds(#z@YL8`l;krA+(ciiq$IHe>|0GQ`nFX9@|tp^gl{)tkB!>Bx$?vDwca}O&xe@O<|drqZ$kE2mkv~ zMo@=0hDDv|!ozi_7`)W1lJeb3B!)Duq*Z|7S9y91-WaL^-Nd9!?TX zGt+KPue2Lv!)9ta{EO-Xs4KR(dFiN{1(MRu{N!fsJk&luiJT3l-PjhwWtH9Y)G8C+ zNKWL5bfV&}kEu&@F7edITSK+O<_$Tklz7yt*ih@RVPKUK4=gRAK3S%s74%iK(@9_? zB{uH;MAE(3LoCCI$B_op_8~x%)OFvFvBB)EW&rlSZVukW>Sqh^BfKiMGc{PTc*~FT z`*HqQT8tm4;x;XROircR=7*=f+=7QqC_%`*?~&5IxngA@3YW!!w;s|rg!}#jyJyi( zA)PdeyLZKGX{2Ko7=Sq%RPjN!Sj=6EGnznQR$VDE#~ye*a7oHdu5cl0W!O^lxoDj- zk;d=!U>N}rdc-SR{;A%Z%Y;Bndv7rh)q5OO8vG#f-7V7psa>#D>F#@0=xJK@G_87? zRXruY$?~3-T~p`1$4mN0$gcWd^)H0iuG+u#nkywts$TzE2J*(+BC9>MVY`uX0y~CJ zXv<7F;e^Uiv1uH(<*uJJ^&8ZFpENDNrr_0eB`Wn(KB(}nm^~l2ctE&3ZS)m>My0^x3K#S^s;*fgzm zpw&Ka*FMlO$0qM>Xk%+{);`!Z)$qlD00~>MTdl2BUh~yHAhfUg0GELl>B8qCGa*dm z7w}VI%2Kg?&>S>l3CKx=HF}n?&KRcAtNd6}(kI zrNacZ{eC!iYVE+hK!gIKgc2YZI9KVtHP4*^2e(~0SDe`;s>Wx2KZZqYzQ(xZv9cZG zGhUDcVcG{vZDD{-ohGTed;iX6()b1+h(e3K@24`-wODNrM9ZoRq)c@`VAWMWN_f_A zFrGBKZx3A9N({7!Bv!|Y40%J45J(5&0mkv%nsf+xS1RdXkz4lOr9*gMabJ(@Vns#L zAq~>O0Up}d{E>i=n`qe!9$8cV?WDeSY;P#BUA1J`_LrxXFXu)`!C!7IUs^UD6Bfg2 z&n{nDUY+V?_s7SB4rM@~%S^C7gW_r#T)JQB#w`JC6qf_xQfXxDJXd51H*D7)l~xk^ zq|vy(QFUE8NCar!ahkC#aMXkexOvyG->wxt&b`QTjwLylb_eD-wXw<0kVv;MBH!3SfW^-g& z6M+!vXN*D_Sfb=k$cm%P5n(hMgf&*qikc3@H(@fM`k`TlF*9QVW6jfQtYQ9&Tqccs z53xI@M(c4|p}KXpk6zt6)7bi|#VzcK4wWPG&^jkdYOuacmljUwxsnu=d9N9>0b@M$ zYzbx=f()jEIt_X9)Z-!}p#vxy{O6L>9r!jej6zCP*!m@2;ZXxC(ablqOB%2DsD=)q z{mdcSxmyKd3JMGpSK~r7ALVl?)x#-3%=b#n9IoWxF$v>3x~vg0G%1FO`Cn?h%=@QQbc0wzHm}5=O;bK%5F0eoRi#$<3+Zv2Atu<1lK@*GEYHH=*TLS` zSq7uws>x8B!kEypIFcuBiS)jAhHiPsvgss>&6F@5rZOe$4!fdmC`?bv{p@1NN4Uhw zn5uoSYid%5fmA9Jt2wp1rDnrWxf)w>TcN~NRjm>2d8v(Hnwg2tu~lWRx~=>{I$~uk zwGoCYGfV-sYzQBatsA!*{Fj*u=Z$&^AQ`ac8G2TA4+OWsW0hNAIx^H_G+ufVAvnJ) zt(s-Go~5q^pGX2~w(OM5L!1$ly6t@r%s?~r-(JT%vQSRh9r29*Hvzq9(Qq`;X ziais%>*?F~ii zI&#oiFBB^@QcG3nuzj$!&Z#0*@Nf)O7{{^B4ty^(T?9yGDSQ7zuf>0Op*_PeJjQ_& zNGeMYrwai6_oIk1V1JW5I^QJ?7(+>%X@w4Jqg4g)63ncGdv8(5)LVMFD^xXp*vDGS zf2b_7Jkh=d!Y~a1pcV#0qk;&mJg6|OTr&Cdk7$L zJH9Av6=>>}@zT7}vZ5KM!)NvxU)fUf)6VE88v*jZ=gSXlJij1%zroPeJw%~gw_px4 zLJLNY|9{Smes6D9dC|;638e#43m^=Lfo;%J8Q6*fwO$LF+SS6DR|@5W81xC@eSD&w z9*pN7BHP^irD`kdBQnwIn~!F-uAh)v(g^9f(fSt>bVlSZxS5YmRJzv z6NlIFq(Mc|u#-H1be2HDAx7L5(JPV3Fw1`ETe{$D_&21U056Jb!#qa!^iO0@ihowX7(^!P_bv*bH0=*ll78B_NKcOp6p$&V<1AupI*26S4X- zR!G7pGtb?MBhaBE)KtXF%Be@@WB->(c6pum8g9|M?wLz=`FE{jne@Yn`jjVrn3jy@ zjm{YhCOb#nCaIUX0V!t@{WIeym_NeH+1(%M&J zF3VWdIr7A=SUXPY2i<#6UH(oo!E>!u_WWuD^f~BqlBMH z4Wb_~HPd@XnBl)DQ(GJ|wZ&(Ssm&t2q!b1lklDiu??1?Kiv@(QksM0SgG`-eWj8|w zaAERUQY~K~jTRpTDhxR^^?R6rIpol6SPsobS4kDo)Jl!lHk+s@`ibSoY~}37#rL2f zQ=XW%^i_i9W#KIJ_+??iAxXXT5KEmZ=Rw$BLGr{Zkcej+^HCT+o2K*g$%TYF*HegA z!?)}-)$mPkNaXibKk@sH3}1tWz!|hHaC3koy=8q{#}c8#2sjq=tkG+Ke|U@qtTBiC z6#N-*@f=H$<}wZn&9P8;d%AkgYKMycO7)UH3xD8O2UQmQ)tK;cWv{jhWI-B~^aR*GOqS0tbJZAMOY{zU?s{;LaqzYU0 zTbTnF(?JJZJx8{yf`a>f>TJ@pQ?sg;EL2*wE_)DHq8Wo2fUA8SG_3y`2bwG?lSPT? zMx13)Vjkb$_yFxSEm~Xj^Xc*y1jWUX@(x#V)tL}rUfoy0>WB1oYE{`*%eeTeo@j3% zNUpwL8n7Nh;juDc2v4d+V@#m|4a_-nnj?Hx7N5NJFu ze(WQ>74PvCrnlS?ZtFWKs+|*W*T<7frc1Ra<6UZKtyN|7U(@9-m1vJnm$1d78iz5D ze+g>XGo*$+&m1+}QfF{Z1I;K-Q$&(HqYvLb2I7I`5DlQWf;g;If;uj~q$fS$Kx)n? zDL9LILSLk#FgFT$t1Hv=5 z-j!P#aU#kqq%@MA6{{ge$xhU=G)&P-aFXpnekE;EEvr&*^2TD((P3qJF@eL?+8ma` ze{(mdsBZCdOr+Bkzcf5`)(Vv!3+`7cwDUmqPQKSA6&4{?mc6zhO-pi4`)RdbRBKlk zXdZ@*n~=sgQbi@c>t~<;*5k3=3bXi%tH!P~EIDr4dL`NExb>8^)<~v$%wl z8U-CaRK^xltgIgnjuNuoD;zC4bXNV5yw9`w=#sOd@76E6u`M~z8{{wB$BR$=h^SF^ zYXs5RdJ0<(t*}&OZFcn!54?d76*gdNN?dJ)E_`d_X2qRv*;h(ka#Ycv@^B?*%Qn&} ze5#h#=cDgdN;_`O!~+-u0r~foMM>+G+RKW$WC;-L$XUMIV4PExN@8;A04*scP1R7! z-eEPwWbwD-`vK8rgbVOzc`q&hU3lxU1JxMLwxdK%{nZDw>SuA<05@yXV4Jx<%zK8~ zE`3K{Pc?YhQYL+IeX{Z9OxuqSVH)7bE!zDVkx2a?Q{6^2nAT$Tbn!T6B3*z`nO4XM zDP+<6jVQFOczSqZ5{XM7EwpyCezNXhMrMr_>YoU7A0=oBA9lgvN1-!A{0L`}~XULVsgE-9I7kS}aX7KT*!(Y(QePsDH8! zVyKTpzlC5<8-84X>q zMPc>Moum_1qgtQk*H$x*5>HJ)lvFTz60Ja7VoL)Y;>7OJP21C}@=bS&3Xib@NMu|E z(CM%OoiM<5H~O-kUnH{O*IIs^IqV0kBVJ9&hnTO+nh2~zBG4HwHTwQOj^?%B|GELvx8^S%f2yT$JUeD<5`pZ(Gh0O$vf zc(vG_?vqj87w)cddb!-^ntdXywqSHlrT+h(8cQuKiM`1UFDl*KW z$VE^DrdKf*aRrGy^=TmXG=;;)34L5o`Ocu%-(*;}saE#c+>h4h>9WtLn#6D5Kk`14 zKx>u$!I4Czqupd#N!=9FP_M>u8q`m{MFSqbwUy9I#M}&B#+#XGll{#?YP$;_1CIuf zsgw)IW!#|JB3&EQL^&vylX2B68RaU7aHc0LCpiN%I^3+JAc>OWT)J$W0UhG8z6<~( zduABnRZic_`C$iAX0S%OO5P;Bkm)J@E7%kheHd5ALqNGc=`h=@bfbIvr{taaXn)LU zr6vsrCmG<&S<=jB76u(SwPmTGFgY=`V8}06yrmvfT2nzv&(KaRgHT7*V(G{_`N{qY zh3KTR){X>zzD{blbtebF`bmP0{1pHBTIH{qi`v`ln*-c!oQopeHEkfx`~*2aPq1(> zBb5-Zh;rjn`l*F-Tub5U6w27dnKo$EAVBJhYZYygP$zG@eBv5<#iY`)!vdPAMB;Y9(=+5qiz^?P zv~#Dh`Fz{-5FvxXL+VuxTjL{Rgq?J%UO)pjWMeJFFMFazQAVs#4fey}IJU9KZ|&9- zUQGp!#CH!i?abehZ#vK?+Z#HeFDY};!upI54m&qCKgll~-KTMZ5VYNFPUzPcA`^20 zYg=adYj#v5pqHA1+VsdHQe7oiMt=z4dgAAMsmu0W>{LJgeu{I!O~+NnIa!Y~e+F1C z0Clh?=pa(02Wxpoy8m_MvuZz;*-xaAPlP39+3!!FGw%Q~R42-yl+43mc@iLP21)PV z1~DOJ(Nn6HiFhpUQ3hR*ITzoy36qAG8caglLF1McDjwwKJh&nJd7(J;ox-r${C?u^IC`}BBl{U$@ID0khwUYmZP9QX>3)A4log* z4VbK2>V4m^7AT+3tP5C8VjLnpCSpiYZ|uYGL9xbJzE{dCzRZh9UPpJo&1x=gIl%7^ z(SO_TW+#dJ5qy&}SSN~;MMbS$`OL1pdf*2fAR7}qO3Tz)@2)14e}{DvJ`>a|78J@A zr?5CK{VY%U(>_XI&T64_^{vIXEBZu;?foDp8<#|}HXla{Vn!ka$|{;jy~|v_0vw|h zOmHa~PAFVB)IsN3$!rk==t4Ve7i?JixO$DCuw)I0(tjl;4$kPO3oYfJ-2>mJ<^crrg-7#lFozE?sN&zAx~A64VutVk1d; zs0RRYbzK|8~#A&^B|(oKbVOY`0q=9A(cO@7T? z6r7yEN-n}Ymw@@;4S{MT=v0e+3pJUZWSBQ!S;r??*tH};%5@W9Nqxe6h)q|Qr2SU^ zz=C~^jB{+5BS@G>&mxPMFmHM{R?)e@$1sn#$uQs5R17tP`G#Y@_7qknKJHlUIOb`v zxV>#GWIx6I8-l>`<+xc zygBcj9x2mZbRjP-tsV5z!KEo^qT(s2*O=C+*TFcl;xhR*8%1+p-rQ?nCgqn2UoyX& zq{I`G+jBl2%8@u}4?0C^A2y1$`-=VhACIn6?P*nJFS2s~{`)NIPb{cw3GJH2A9I5J zb;T#6#p0y%ry?Mr{8fYlGl{fZ+}+ooC|*D|#23gMw;}B)l=(8gfpAvzrDR`m`yYMM z+*dG1!xSsS#@}p7QQ8u}r6v%iDt(MeOFoiO=iWhtj^xhij9joZkbyB&NBDCuB z`Wpsmar5;H5_s^^MKJ^#vp*MXf=kFn3u<4`)#AQCEWhXL>qzlegZ*=W{c~1^{Vo6a48i`{ zHQ2v7G1x!bVSj7c}fd8nvQPUbVQU*Sc3ITOfcq}~+s#KO;7afXI4AvVke z?7f%UBac%h6rp0kzOmX8nPmW>-K^U$TE8E0uXy7>gb@i3_4efdy>1?c;iZEOkjyBh zp_-u1dI!U#uX?M!M|D&O+XX%{3kc1p9}?S%VbWX`a9{!JOCiWgIj(=t_$E%{B0)WT!mktPFjk`g8kqy|p6Y(aW9iN)!#K6-* zDl#l}KBuIZ%m#S$oXCM&Q#KCb!|{Df=Bwan23UC)8m@IM%D*R(}^FZ;vSBw`gD;-!lkB8MypQdw0e;dWMFvBx(wB1oay+`oVMsY zdTdhJ=>L_L(Bzz^Vo)nkNeXcqY?J2UaqSJZ>)tlCQ?r5uZOqe)Eg`|3#0#*uHE}V; zWvL5t5uu=-vNy5s;Mc(%eHTOYRb&w*CPY5_kqL5&i^TqgI2;R1*`S?|v0x^)Q_|cbGE* z<~&Ke#oT8;pxtz}+8LCbVcw^*9tmFXutdLvKl1~(sB`DsCFRb}x8jLn^ijPJamIJb zWTud_6c}Ly@=-|OL^_0AZb{UwoJpi;TYo6I7j#WipZN@O- zbuX~dEJPSJ38-oK+!kff=(&Dr^gxRZ#j+&|tRg+;= zE-5LUqb8zvLT_0no0fge{_-99&X`Z7}K-%%y^K%Tu;SFLf%8*DX&vWht*yblk@yOg_vPYm$=v3YmzMqO6(BoNERZZbMK zha~r{K=Mm*JHzekaqAw4TQs1B{Iwj=s#`9jzcX0gxc>%Sk9X=bakAE#IEr}gdyP<6 zMe^nGrj06&l*LxcMW?iSrs{`PRfGXQMQ^azVwVx@3U^d3RGWGSr)YV`rcd*957r-l zPPwt3?CzoNVNObPc6W23r+VL^ZEU*jQ+qOPJ(C*RdrqaJ>|`U3?HQxF(i`-7b+SSR zkdTAmGv7$vD`EE$6eibLe)1hm?2c55<{xGeM$RCMBObDJ#KW`_=|p%sM?84<949FO zJF6E-V^KkwyQ%M+!x{VymDnchCCZqNbzIZ+X+6OGWaJ=L1Xq=ZDt(kf5GyLq$0?{e z@p-w0Pf!_B*%u+;F~!hA3vYBlGr3;s^i3nLyLT4yiyZLRU1P^j~EVF;EeE^Sos``NK?VAs%gZmYJKJ)>p1W~QJxQ*YR|>Aq=o4cr#sNX5;}!_V^NbWjqGTpnooH5Pf4Be^wm_p zn;zyo2?Y^U=l0xP7ji(yB23!(SIpg$zocmoxu4Y)X|Jez#QE(ZPHRL>GgCX z0F|JJ3F8uz*#V(bCm|TbPiPWEy<-xP^NJ;E^xPOn0=Q?=nEeW{btGOV0QNMQ3NVveE(~$u3&r+B3W_K`zs*lQZPJtoRDU{BeFoY^a zby$TBsxQ{D0(xQuD=;0w3Pfy|#S8cVUNGftuPBb@?N$S59#%mYD2UT68HoEb_=m;? z{!vWdpS@2PA31bbM-ELK{V0kJQbRBgy>+)oWnT66?i%X5*v%nm=e>Osu}0GzC!ILd zj3#+7spv~jDp-x_4GT=Ffr^Q4Z8C^shav+=T_0?eK_@a$4Rp+`3%OV9OlRAQC#aoo zB>KCgD{9m0xj2;fJiYuGlWaN0uJQIB(ATZkxtNI{?JkAWt>1 zC9Wjoysm_Z?t74^^l^D6(Qk;|N>uUV;qGbm@t5f1m!Dpt%ay|ycsf--y};A6^%G2K zAo@bdsAf)yVljXtNX@9zUZxgy_Huj}x7#DING`}X|K!};?a$(^xsSwEvID$w!=Q=sKC z8?R}5vic-%H*r;J`DXb+)0_PavoWI2Uq~{Iu&N^($v1Ugmps10GQy+E6atzoUREe-~|GI|Js;`3$Q=Bo6;-pa|*ePqDg zqUpC&=5B0S`R*OV3lt$I2R;qmp)q=LO_cj&OBv8(0lt31>9RNO^oDp?3S%wALXZx!#E&OB09$jO{5vC)%PrfJ!duT;?rAN&9C;NKvzt5Lf|47h57uI);1W zNkqkE*bl_Aib?w~9N8Ylx=_;V6Pq38?n2^&$ICJMZzO{VC13LuBQB*ku@8x*a*5}} zTLj#VS5*#N4@@p%)Ad_@j58r3WbA6x$2jwIicM!E#)W+7#31$Jn{W+}l(+`|!xq1A z^0l44>F~n#?5$@&YyPdB0nEX#cm@RN!vY|rQOrsN86*nlc=Z?I9B|^%oP+KR6(Xkk z_F`N4JotMFC4k=Fr_aolL^^hTKj_#EyQtGG3tPL77Gn%-g=M*a|>Sn#<& z{n3@IcW1GcEF!w17v#Wm?AJI`KhHo2@F6*#j0Q5>W+J3%kg2Ltg{0@a>2`l;L~L(u zJXneo+46ZX<@v~v=Xtj7aB1@q-7?<|?=Fsmv68SWz8aWoM8LlS?d7-)o+j3AiJ_#L z_rRXf$QR&Nch-yyuWsU7@VvxUh8SLp3kh0skwm>`>$*!!ICYPKa@z3r_84M^@Cl}+ zYsG3&gmp3sa0)3ew^EKwC=zypipT^Jsi+=KV82rmB0k&+nnEbe%^Qp`366vc4Ue&qL8Y?_ zL1@Ho!HbLTZ>) zj30@P_ilrl7yS0#s7iUR3&pV?hhaSao`;GezO16VbFCB=h^f$|NQD=Q0GN`Z%&fsj znAtNw0^>T~&FUT3ZDp+4a{V{hjYt?UQGG0gsn%jtn$*Tu>xJ4huUl$3*)$IqmiNtD zvu)lE6x$ptJ&qa5A(8w}5?24IOs@s*Fn+z26SS|0Nd^1pyo`H&caS?BQ;_lH$Fg3x~nj9Co%gGlk@<_H$H(^AFVR7e8BddtHD!dsO@OcmS%if2sjMo2#S|i zJkQnHUghurFSQ3HjruE}shVDAdpT4MzCF4VQnsh+Y%iln(UV7KmKegh|FNp$Wn_kR zU1bJwGwO+mMUO%H>TfavB&bOL**7a-G{FN?UU5<9f9XxyGP)?d=v7f8r^Bf?%eKua z@swT=wJeT>8Ph@rlLVjE z+7bCFo+74&TX`HGQznafzt9zj<1M=4a9q$8hvOZ3aXIgQ6SV}*SL#E9dvtjiha;Co zJNhU2Ih3dVt=ygn-{YO!qH&?GXu(SPY}_8^7M)M2?^O=Zbo=ik2^StJ8qbdm?$zZ{ zxf`eHEOsg+Rxy*W3e`$Mk?5rZqKL~G8!vxN2n=xq&R|Y{GFlF3xD}8v_y-M?2vecP5+wTrJA$KWKy-{#oy$RN^Xj= zyRu)Oy1(->U-@hBjD`H{6kdI~OuTO{ireNDA(|HI_hg4v02?Yx%3%&<|}aB+_AQnLhq9L@qYp?@TP6oRXBwsJg_SC6HcBFEFS{i9*CxSY z^pih74-SGObZ35K$PL=s8LVm!;DQ{Z+ru%sJvl}l5^BfjWI0W66#7v_iBg~)qfY8+ zz{kon)K#@q?aoxSBN9Vjk@Q7sMh~WfCc`^A>4HQa95|d_El;&FI@QXk%yg~^S$#IX zru)X_Pfg`7Ppf>KqjcB{)2xc-dTLtzu#i7L4H0l%o+cm`=P2kl*j3&5?d6mXug^O$ z$VmeA9{l&e{o|ke+28qtU-|dh-*t3aS0}r04)Q-+$=K3>NHm}X;uX=cCdA4eX0`rvx<`wDR#)ud9~iJB(D>q3rXXMHrUmBU=?h0f;tZkz*Fe zf^3HE)~k@K99$Q4 z#dR+76+eB2073>zE)Rr&`L1&TO>>o4e{6RReirA)QL!;;y6s703almt@4v#F!7qTd zY*QJEJwK@ljR%zP@5=sw(hp^S2rqf^quOYIR$Q2j0e)qYsVNqHh+Jf#YA*qHZwVfN zkC*<#Ib$9YG6!BUX;(d)3_ys_t2>IFk`2|QiE*X%=M8t8@Zh)A>^xBHnV(U#LbR-h z|KBxE{{M=!E=*P<)0$ZJ42kc{M<>ivSm-JIvZH`ZiBbCcVV_h zSD$y>L{$YE-TrB?yIqTX-)wQ8A`DqYd*5dmvFs>IqKf?JM?VVRr7?z6i^+ag>~=U{ zsr5j+C94!h7+uJ`QERFRdzKM`0yR?^8fGapm@;tpKvY^IQ;$|+iwDG6t4gO}kEXx) z;Bu(I1S{TuWrK~_iNW^u!erkX41+CsSDsA6Bq^!k`J`k#*OMAD@L+XxVao%Hj$VCnJ-qE535&C ztLu^dL+Vv;je3>zilpguLZ#|#pi+TQtW~K<%0i{OG=Zo{9RCtBIO&q(ild{Fe>tIm znb6#Z6e@&hQmD**R$JMuwzAP%s8rFNe>`E8%t{qhlxiS`m^Dh3=YC76GM!dR72OAU zFjH`di#wq&9fxJq5oeWF#0ED?@1PZhPF;P_X@5{pr4B#0K7gn!5t1ZGUg<^>Xf6#) z0vZW7Z7D*jS}jG$${|YP47n%mN8BapMiMUCE4|ib*#D#w-$`vr+DS>oiBu2^zYVmM zQQ8TGUAA_@mb}vMn6#|>lloW5favT4sJ0vt$j_C4p+O^b7rn57PEsi%GbA3 zE<#V0B6896gsgxb|7=1;&d9$NiU{E7C`Cjnn9R13iU?jP6cK5R&;W#SS*nQj_n`YB zF+gmhV*c2jq*4YHIZ#tcNE}K;8K`MDyCRt{0c4r)X?6jPMb8oglyV_W;z|m9naQtC zzn}qVq`(@T#~~+DVUv)QJYdT~3&)M+0h9$5IlS(AGkRC}d?K*mOy?Vx)n@d+KQYpZ zKIdghTekSJ zD!3aafim+pGx}3$5?74=vx(84(g6JJVf0~bB?1dZzud5_HlzRaXhwh1-v*<9ZUPID z(K|W8#))GJH#sZBWQkXHhHgKFm6Y`RC~PU{na>VopO_%dRp_=vs<1nuri3PztH5U5 z?&J2~vUSOA8WR}_LvX6~eIT+CD@&}K8$cZgK%EdfcM|!G8$fl^&d~Ocr`oDU$D6M3 zDefwX7zm3R?4DVVR7o zjcO%BP*!V=)uH0ONWd4WoXm;xg!Mdhr?wuw0y6om7yi&UXQx9KKOT5YD(8S}kn%rg zR5jE@Ad$1v%0J~kpkwt~Re=O5f~Hnjs_{gFuhl!!^nkxm?1YONRy5Lzy*;q^!uaWP zswMg(@QSwe5TGbq;}aZ27kH$IWQmP}ldhjppz?f1IwuPREeF<{EYgH8$7Bg~&sOM{ zFeS&zXJ>HUv~kiGWns2)QbLo2Bn&$DXP?z1{v0omk_;}@?{NMFHG^8dpet2Br7O*Q zULR2FWnC8&b5RQyW47B&d3u!eTB(hst%OtY^_fsWHBQFskjGn5u$D zP30F`T;XEH71+lDNNwCs3k^)4pa_u*y!N;)V1Rl|M;uD`av> zy?%k0r-J9oF@*_(jpE|w`T0=x<#AksaN1q`Nbr9DCh<}lFYZ}mC4ay!C=P;gK02eecllLoHn){sb{UK} z_pFyGX)F_-)P4#n!bG}L6R}#y*j0a7+H{dN+1yQX6_G>rH#f!`8rd(lK(+pKKsjjIoAHtQkdSkK{@ax zeeT||jAdaD5zZRrv2WdfU-m~+#cfCcN$$INP*2()Hl^imyK%1V+0RbVe4kjudt2QSE<0++R3Cs1J{Dcxf4(PBryzGTQ23GmCTn?CW@5u}9cifZT$YrlK(d-mAD5S6>|FMFT5UF!qfMYpWUj854 zsd6}Hs1Ua)P}X{cnjnQi3sBG+B)`hj5S8Utl3AZejEJaCi@@gR-B%i>*LhiM=q~C? z&a1lOZ+cBD&uOVc1vc%#SO>OA4_AF@`jo%2zu&IQW@^9#Yre?r+*iyeJ#n8P$$9?N zTB55Mh@`mYWFV5O(-l`tLwzx{n=WmZGP87V}z){9pjspyNm?hXoZOYYDBAAyaqmf33IZx@}SGrsGtFZFXoYfF(+yjXJWm z-6k}VZH%LQAs(;c-&q!Km%+LZ=f_2R?I!l>nl$-;z}%-v|x>F51Ixr=QXA$bU z>dntKwHW%H<&n0PRK4LJa;6g`qm7#~8mRM4xex@SCze#|NhG?)CuGe6nc9-Z(Yu~1 zZ}zghq&zzPR- zUGe!T;5OJy|2bdV;WB~aAGypWJf&i@DZE1_-v#ks#^4oQ6^p^u8qdz&FSuVq(Xj*+ zhOt4Io-O>P~1n}Q+7BQ(k}S71WP zY=%2NtB(SyFxHaVW-x%_iP1uDtbO?8C^b?#1?3=JLPvV`EAZi4P+VeHy(U2N60vS0 z0wn)(tTx2j0g@N}Z5Uy%OQE7U7svWLnd+*iB!LEhmDj4lsCea}Y_%#%F?#BNL)jl| zk6De5##X{rSRZ;{1^dnG>-AN*W9@a4the#i)Hp6)GJ_eYQH8D}wl4X6N zRaMpKLRHDJc#WhlQ%Nlzj3RY5xbk#fJ4*I+5&*cLw=LSvrTmoFxmI5K1fCOe>-WYg zPro~2bL0({^2cslSu#eb4LZDzQyvlXMI(`J zlk?azR(9V4xQ}keY>}O^7V5KH4Jh&4S0B`e2767QJ}WHO4eF!ThWgH%GlZk+yy;#v za47rzu@Mmo*9z)GCmsd$$vo5M8ix7^N;A|)Mb|=oGnWnZd1`M4^=V$)qMu=2gy3p1 zg0mGPAOambbOvTHVTJxs_FH2$;5Q>FQ}F_S9gOxxXq~)cf2zc0hXB7byqo|(XRUre z6JvmK1(F1)BpxfEOMu^jjR3#NuvU+9>KKP_v;e=;sRZSAx@rs!NvP%LDPS1z8x!Dn zs`b^W)>mXcX}bVSs*y9Qx|0*&x9qQ@3!b;EDNm9_S1ga!fZxd~+W`E!6GIDezGQbd%aX?+ak?<&G?6aKD&Sn^i3G(12b?EIZq^@kEEotFH!9Z=v%5P zETE59sN^RkUsPaSlw?fEl~hCm4nfpgSuM7*Qn_Ro;^paDylevW84tLS)bGk3tbo25 zGD?7$Ox78qDSx;H^iB9#(N9^zr5Ke>fW8UfB?Em5T5f9^FVy%Fo?%W5RGIgA_cS9*`IS@L)I3aXwcO!%jj8h05Ths`lLlO$1 z!>}2J(0Nq=eUIcAhUbo(ABTkhINVD!`M6ln{9HhDKyrrW7=$5c4$B8q6DMQN%@=zUG$&N9*!vbjb72ongE=!;hUUyTn&Ec9 zi!}47XlM;zc~!%jq;Z_?F$zU&lN^L*`-d6=CYsT;z(m_4Iy{s4rU|Igx|sMxkSIRN zu88AMcCo9$uW*sTIx6elwA{i)fPu97F2E7Q36xNSBkr{;21h0msKf3~Sl9vT41pu? z)*2k?9_1_-hs_5E##yjAI8xQ$AQj+<>j*evlHx9D!0dbN%@AvHrWc zLa)MAZV#n)z2b|zVg#IGz{C3IJe&Z9jD=0i-;6^2li?KLDkm2=hEMw}jZ?Gqg?Pl- zrnmI9l75S7v%imvoC+L-JY9s~l&OGIBCMx8lk(GtXIgow8XyhPdtdBUaEiC;O;wS) zc4HGrMRk}b@~d)1Q8SMQneU%|qIxzEsHV4s9ArJx_Cq=S4Q zMOpqR39%ehp+b7`nHfbdy`aoA1aoqG(@45n3(QsD%UEa;5jGGEN*uXrjUpsmHUB{P zD4t;*r(3!%W*Njp}4VH$5HQonBf8zgHFr@HaXt}kn9{$Kn6MJL|V@dvN* zgFs$`3G`A0CJ-;=>FDLcE0Afm9%IF18tBKbbw{8dm+Iw)DbVR+E5U(ItE~jOa7=+| zsf`YF(h9{)7W6Rsfnq_RlV+LRqFRtEWLs-yw70E;rSaUtPuVK@2be!_x2>Bm4UHU) ztHpG}o;bq4wZTqG<6jzQ4TaG0R`14&55N%|zWtPd=WyRqn zyhAJMfOpbdW?KYqgN?q>4Ndt}x8H{iXc%a%oDhnDvh!h?*ZaYRpx#5-a#OD39uoNQ zX)#cRrS%WN&EG?2Q(}&ZH+3Vlr|STwvEq{>ZE`kqKqJ{bqEIOmwr?QXx>*$wfHSHHk5J%|_ z1PJNt#U@kXKP>q+2BP3E?I61cr-(r#&lr3rr~>K{;U#;(OC;m;p57OBqVM;w7a=kJ z8~shdM%|+T=J0`G3wQf7HW$49rUN%S$lkHxcUVK+m4v3zA>IbEBV$Y zjTK>9k6`K5kznPjkd$qKq*Py;>+|Ma`jQ+RV-haUcS{DGWkd0-cz4OB#dKZy+tX6n zVqw($ec5qIliS!-Sy$}W*Tuz%I9S#70D82pccpy{IG@wI6<~qd5sYZEBN(nXV3$j>O#ed*y1<@9wt?BJJ6dQgy-9xm$P>v`D5!)tm#{qe)AdiX{jcJa#vJ!n4$ zJ!mThbtW@3R_{5|%e2*g&v9Bu6&df$ zM!&=qMUOhl{PD4cAWCcl_pOc(2pV3C3ROd5MG9) zxUJ~)_pw)mcqIZI9d=fNUf5bJY0vaMZ9vvBwUf|7`gH>3sXOCHyLfd1`)k*oa6UQ# zEd*~ybVAOL4%T-L8+XFEkuZ0{{V`&}^!coOMsUzBg>7vzl2I>lWEiiS5j@O{sOrO% z^T0E+-G}#kS^w7+_p1-LD_WolkJ}O9aa{m_agep0(T5H+oh4w|eHh^L{+r>c_LKe*CQ~>&LxKKfZr$KmPP0{YZpkq*wEZu4uEL=o-@_wWc2(eLOs; zQ_chWb+{kj?|%Ho;{EE!14oNp24y}v&o0z}xjLeZIennm+uy>5MV`}pqaT6n)Q|Cf zrthO4_tK9*-ozWDod?D=yuHi~QzCoPjSK~n5A>!ed8?ItPq znsw4?l6H`^(0q7?q#2U#ZjyeKq}ig{RC}zr*`?S(c=ugdc7Nv?Nij@F_73l)5aOG) zt7)}QGr#Q7v32SB0?))D)z7Ou6D3+dU*vgPF;hSP-&kb3i`iPt?@T2qZg{^!0V)U=hlY{-mB>(pN zh*g4;%CY}+KVe5NWgkX*OqQ>m`_lZk>CDt!-7;J>Rn zTcFF>9b~|PgQolM(e(oRWz81vp^{WYM1W4i*2jYKII=``9C2a7?omYOPlT%msDFQv z>GD9aN0;|AqFlbY*rE&4js0k+`XwKtSv|z1Jd7uxt7SGvv~`QBQG9dUEgUP}A9r^j zD;|hDw(Gk;?v6Yj0Z%BucQHoyXWz!h|AIaIcGrU$BN7&w&j67nCgJ&KI?;>k#awDP zr-;hDkvHNwsbhEv#laYiG&DxV5aZ@jmF6wrMlP5Z_j@iWX>z@|Y&Hb6zGiRCAl~oqNoY3u-Ds68 zYG%ecADdQP$9juP(SJP`?D|_Lr%BeyPY{MEy(BST-rglSkz^W=+k^opRe{GHo)V#b z@hG2e$-yL6m^4fp<6pxZ({)8-oqPmgz0`h!W_sf%@Ej1%ZlchP4_N*Dv;sBd{+?1G zshY7T2{EdVW+_7mF~H_KJxa`U!q8gX&+4y3Ch@r5X0L!9uF{DVL|JdK6M>XSc-)Xu zZX$3pwwFg<5m6~o9jQK16VX%L6n=%+^L=3dC17R>y4+)k&#EafDRrYI>LSw_Qy%9n zgc^*A{kr<|T^+0QT?i?*6=$~SmvqLbDCiZ%M1}_=`3eM+FgSuieCQe0v%L<&0x&25 zP3jO#p)&JUw1EiW?~Yro`@K~Wj@|3eQIR<+GUtlSxk8T*<~5QPU(S!h&eAqu+R7|~ z{Krb6a>+jcfZeWE?H>T2vzzY>R3o&wfKejh=@}Ev7Zam6lZc1(z=!kbMA+F<+BFVv zA2u3=rbtW`TG^4U4d3Q#Tn`@l21^C(Q)s&X&05`V?p^gha&WymV3UT!Z$y+Ob>No( zWZ$sCeRZ2IF|@3UpqCo|!)bNOdjG@c^O63CQ~ovqXP%R6$(XMT*j(nd^#Pm9RZ&gA z=BFVzgd_lwC=7T|j)nF*ZJ`S5;UQu?M|c>T)pCS@wgWbGuodsy!>~4B^JJ^4n*JxN zN;UzTpQMu2u1qPCpNL==u|8n)c*;+C9dG3Y(J4qA1%V$vUIRjx5wK}Pj5+4H1?)XC zU~_1xwkHFf`BpB~-Y8&m{A&T5Xd73vHk$~;ufl*$YVCkcc0{gS7VMvFjZCEeiF}01 z;#vi4u5($`ex4>^6WMV=J{J_jwE>%#zc#yeS?nANff9G}KVuk@fy~c(q10lF6)aY) zAals30wO1@KLL^Fb;zcLZwlGeF%UbGkAiaq$@`L+TJ5123fa^K*C}MvS*zzcE<&RK z%STu4peVp)iRtMpWOHE0#E3Q8lZ5@iDkEg`2B{boG?hwFZmZ52c1jp!iaY&d3K$Wx zd7<^yh1OSUMpC`M+^Ho^tkI^%sZ7qv;5K=?nvKc zRtsgDwGo2;lZ#(!UFhCK{-l-Cp{j;KsRh*A+6$<=g$Nul$*>21lgG7-5SRIk$JOve ztT_Yct5HzGq!>QFh#`|9YJ#7PEn4_q2N=~Pb=q_wpElbDcMPfLLxVnyCKDUxonACM z_9w&VLbF=hE=0Pj{L=D@LS_%hNTFf#`=c#UCnKEASAZj$ktyc}ZNDjEFo8F*iU^nb z=)6p>-GR*E{VVo^%*_dzn}|5^S-_Mg1{3Fpoh=yhD^o-S);&av->ipDwR-4OtA{>& zWj(aL=^>-ygre3x^z%CGa8lr0y&ARSIh_Ws>ZJ5xz1rN}uTBa${D9zauQn%uj1aSr z&QH@xtbP`J84C)v0Mwn-tTwNgD&D_l)p>N*PNS6&vjb1lOsQ+C<8{)+i+sd2fyR*NJ5T%;+jOLZPd8l`t~Jz~bql|GO=%MJ@FXK4RsS|1Qxmdz z1q;8&+Y7(VpJRkBjtbdy7>B`kOk(>_VXXGR?g@im`x3i#xSXbw1dV#? z(~_rLm)&Dk#HRS{#-WC6;DqX<`JR@uP8e?+TF%N+U*R#bQY%m2m9J`L0f4a;F;b=z z9TV6J?kaE?F^@J5!yXTl!MKCJk7$71`;?rG}^uY2!1F+;C7W)n)?EM_z1IHDS0 zo>jn^V>Z9j&m&_tzcWRFGe~vJCgl#rY@TFH+cBG;>?kM|`!|g#BM~Os zMCuU`Z2JRRlQz2>-o_}@r7Ae5ear!E1fre_O_v5$rC8HlW|xnM(M&s8TVthZa zQ$7q}>e!C4lCwUN%OXzs;Kb1OMk1{Zu(LWwlez1l7eX)VqdI^%na^W#TiL58tykN* zjX1JHiuTpTXdd@b9kTu+MpJ4@J4Vy7@|zvr;TJCV@D6JKG@{VE>@}OwjX1mm?01nD zA-f^8gL8wey`i6UVG2?@?Gb#~!(fZ? z+XeA|q`w8lc__SaEzi?#ayijf!Pqh^5(i}Z(4T}t=t!|jS9~b7P2jM!zeCx#)qJfE z#fXWx8W3HqKbK}d3~o4Sd$9e5V?|Y`g}RA; zfu6Y?%RBK)iJ9CC8#P?fn!;WrL-MdUa2!|pu;4I>)@alA#P9c3{NBgMr}D*cw>Pkc z`Td3UutqMXsXcy%V2#P%VhW*@?-ahx^Lk)|Z!0dnX0th#5AL7=T7lL88@YDup`=++ zR24uexx5?()-YaSWCIu2o<2uT@KuM<1J5aau>r!-YM7XT-Q%5Nre0?^BX|4IIy+RL)oI%aJ_jqc=0LG~KEm2$!Z~Vk`#KvbDmKDK zLbRex`D`=WN$v<@3f&RJ2l${a7JEv6lUT0IYMC)Gz7M397Q& zbhFMhe~>XdWP-ZU2qHK->mTjn>`GOD`WUC#fas#AQI_Rq{RxAmKdr;8LOxg2Yj(X3 zg>@NtqsN>d3lKE5HQ!a!ZBkSZWyHFrov-u848)w!?r}k-EOI;(8ysnQ>zQdX=!BP7 za>-C$Er;CiKJ1L%&{=W%i{6(NJ!X@LQbPnh!G?(>cZh9$yfX2KQryn4p^e%Qvm=puhYH)nET*t^Wbdav-KWU8&$*j%_{O&#Y^xg3E}*Kw|@4M#MkI?lD~ILE=d z9Q*`{RzVtRoHFshDRFrsdN`pgtiA~0&>Z*VCO|=BJ(cEoL|b&xQYQ2jTAw~;QK866 z5Q232geC~VYPCAh1Q;F$uL>Mm{OKC3ISB>0jU0>l)=4N$pa#W(C}UkPnDzKwgTA3t zIQP(823X?yoS&sGT%J*|-!y1mM`2>@;-rVyJ9vJ8seN`Ve+ft+YEMC*J~x)X_$BKU zt@s%_;I=x>cCkx36Mm^vOmo0__c&L19tO$>NTYo5CswlF&+08L63Tj?$kAV?%bm&( zxC8>z=*5}1oHRH`viXPK?|p|j@3aWWXUz8gp{hQGr%gtMomUL+boti+B^*w>Rl_=6 zzM-evyFJAYy3+b>&c7AYcV&$FUs|K{cY&Z#s8TTlP?CuML#8tN)8(qNQcpDXtdIG< zkTQ9R*51xr&(dFU0OoZ0GHLH7?L_lsDKOc24GuNAv2c+Cv|psxVomC8&w-n}=j7IyljL1{Oen$bl9Y>elDZBh#;#eN{Xlc7$(NfmURqZOHrF2!5qLwbU zS~@f*+>12o_|TlF+dEdZcd0crIwyK~PPo0Z#Vs_Za7*q`y%*|wKj(S+A|rMilcpxe z=SjXTSh#yq13Y+-dS7G9Ypk8EWsox9RyA94eqW}0g?yA8rILWlaiv?s^iQ&zLXy;Uw(Q8N)dT{fu~dT(+fO3TR&YQ zi?8FI#n!po#Fq@do-|;Wx~P{4u(&m{)5?%LEaH8j&)r?@zIsc zPH`&mb4G+94g;HmCI6$O2C&npio1EPmZ=AvxRT5OVOg~*1x4Y8}R zkQx5Z@qa%m>*5%?h2q&S=O1~Ur*m`WkQM+=cJl7n_{1dqa#G|3(bUTZCWF@}3WTsY zl{tpEL#V+V(}7%eIDTGtQ^ocw=VC9rv{Fyay%k;WKg{>! zOUrxTfo3lq-!Cvp{le_+dGB!doZjV@bq;4cblDMREZP8^?^wC=3oD#a9eH?M3kH{? zoaNM?M0(Nz3weQ|?LO<23+f?ACs+DG6i<$ASl?;m?M}Xn>Ir4a$@{7Ef`KT#lfx11IMvmc}O7~jjT@>91Sy91~rNdq9 zod@aEsbWH8gCZ`yM5_Ma=3`h+JhJ0mkwaTpSQ;n@j4}3r$@`)O9m~i91+r45j%d7q zes@4ahai)QK!tWl#qLO}-GMx$D7qa_i0}4sX98DWgplhGq69A^VX+KL?ma?dz3=A- z@#`%(^;s8l6Ip47b&Fk|eaoH8;Q{O4N%LxJ`JR|pM;)LFx+mf=tL26aBng`J^3 z$Yt)H{2?5HI(1=gHt#|jT`5`oh21ikX_83QBJF&ndFVB9AnL&b=DwM91h*@d$}Z>IyINaAsQgbQcTn8b*E`iZ#*BJn>$~ERBO!(l&EF@OqW4T^0BU+O*lBSC{q`m81JRY$ z@Pb$?T=!JEKCdgr-D2P&N8+^R-3R4KYBn zM1yd6=aJ~^M`KtX(y%Z(?Vj(-pd;HewQf|+FcgKPPIS}!f-O`jY3@j~sW=rkNM(<; zW(4XsGb0lpxA3dTrNp<(O2KaVYOTOh2N;g#HoUKTj}nkmn&7C%n$7vku!zUFC26q} zWIwC=cn-vbSVRlfjJSDdvfSvY{#g8UkYKm^t2+S=npxw)Jlq=0LW6nZWez6Q*C75& zF#`4iD8{a45VvR$5e3a4$_5*-#15~`KuhYxk(h)e-cW3>pJ9E2eWVx12A~@0rE?^1 z4WZ|c&ho5@i6FhHdPxJRwT&7_XjHVSt7+5&n&`G$-g`_W%g@s8na~enk75Ke!)dW? zLvaVl)B0^S{Y43{C|8>Y==EiSb49o3 ze5CzehU1VPUnauDyz(XbtK0+VxaGm0M(CcVUTk;}Xb?PDYBq4eO~s9=&Frm^?zR^< zq`Pg!T)Nv5q5{ed!qD6Wgk&p+4tmzs^p*&cPP10Fkbn2lc|cC4o0L9>@5ZD;=OdE= zyB%uGLU3X6L*m1NE66@{7Lz)JUkNTq)Zb%cr`_B$M13rHH0$>wNGa9Ye?r8M?406a zv5oN9VRj%lN;TK7bG6vlaYVJYN44+=dfI(MYuahI+BOgEY{o;2n;Jg&H7@#gb5RbA z@NnMU8cu@Ehq&nG!}+(Ii=qyF1#EPC%|_o1o9rDc|MAbSWLgq$wh0^k7|%5u{p+h` zqdx^3U4C2GC>l;;qxiw!CVn-VjY7oY?%MM$sZ8$(HaZj4!Ur-lUvvGeWXmCMXgEVC ze-Z^LkvGF)Ns0>I)ml+mYq4B~u_6<8q#bZ?Z3gHCjDQW*={s7y1JC>Ai-Kz-2%=sq zodF89EQgjZM$k+s)JJNCI^IU5UTYK_YPEuWG`_|G!~XdS^~kL?10<%tB=Y1;o8f)F zd4R^QKyUm>7~Vx}hwG>}D&FgD;v}OPT*FD;rfQAW6WN+ud>1FYY=~8DO9Ds(djkv` zZ+KhSfA_Wkkt2^M%Z{xXL^l4^Km(x~6?C(5Il#z7KsSBzTMLZ@)F6&l0}bpW+36ot z(hHsbt-7A-gyH>sN8F>N%tBoE`!Q11!)y8g<}+TtM}}axJSilJk`)CZw8fxRWfmKH zN{sxz&tMr1A=T3;#kqk zTZ19|lz^)8f9n|SBz8xplyC)M2#DYcFEFm4y0meHAI9PZ?Da?V94sLqgzjA|;=I4J zNCyjLU{eGd^^%q>fU%$J5dNGIh*E3^VAZ!2c^5A$qQy|5PtvmSRxFK8b#~vw^dSW%h7ps`7K31&=2Tn z9fZYv6&}FOHQ5KkLL0WfZmOw~&V6iPa(V(mxDLe{69%T4lxTmf5xhZ*0WsCc%B^H< z0@pmzH-MMhfN(|Q9mYz&8VPP?t0$<|g`eyM0{KwCA7#~Idy8B(?tpiOzeQNnc1OHSl-w^)Uw+8;9iGqJ>grXGubJH65huJIm=U^MgxIFl0 zNf?O6`>ODt#&9_phRZ)&W4L^#5#1BzFE$Sh-xbL5O$?WVML#v#dlVZY+g>9QUJAy~^E$5MV z9^^Ud>kU2>%Mch0V%&hih!()$VZ>NqFf5}cYO{>~8kTX8mtYyUu45Txn$-4Na+2h+ z@>9*EW|Pii<azP3zXR${1gNV;yK}{s2itSoV)s@y zPz$KL!FIRT2yKJ%8qvj*2$fOEKuK}HG@x$97#dJl0i|!PR)ZIW5<*u=s-3hN(n6<6 zIzT8b68?BTtg1YqE2_%-nGq-vNdega8}?RtR!NDRiF+bBk~~%PCNPg z&0s0&gVb{303Jt^R^e>Ot_sqr1h&Dt^ir{3dou2CHB{dJt1qKzAcHHvk7WdYZt)7u zB|jH>W{1w|8Q-|rME&eA754e8ekTS)93q}se^u8{K{2U2mvUlDL&*wDOf&2{!~+q@ za=HrsNr68^7!mK%LviKKkr~`!56Vr04yF5Sz?R;0k!%XSBAN)Q@{l_@1t~qj3ryL5 z9^o<>;WC~x{xg>3$2ap5jvwtd;haOYO}WX=kR>{Z`k=eC1;+S$PM)5!7@18SYOI!qYq6 z&1TD+>|~mPOhavESD!Rr!kO$?DoArE97ddCF{f`*PzSPPPZbh_$k^5jiNQZshr|%c zq>z|Qt=8E^iYB7*>>{eRV-qP51Wn<+8jX8$Y+5>Yyj;M=hwt$L1j(ulrEP_!b<1s$;7Yv0i|_-*SKFTZ)WOBaC+MJ);32Xd3S%)w!$lEkftJB?@%qY$k$BTc3t2 zcaijJFWR8Ene^Mv64(6RWP@5bJ#@GW)ybee(Fy2b?O&NMk8jEI4mb(z2+f9X7V@Wh z?;}M{NW#(NO$`Bjp3Omm>S}y|A*G8=#?RzKVJR<*;{`#8{lkk28Ihe}k{$99UwJ}& zq!WHrW>D4lbm0Ov#JyUO(^VWI6|q=J)nn8bayFpB1MYZ{GfAudLaeJuN;8ooRcqW1 zRaObdiRBxz0iVfhVosm-zAu&Qc}t{1$%dIJZbJ&eJQ_^nGO=6wWczukd7!`(soV-O9lLQJJDJNSg7oD=)O1b2e zQ*}!6TZ6$wf0x=+qw-y!phFciz+X6VRgT7LF^||kkqQ#eSj477V@=^phDsLlGoAj7 zI{ynGL6rf2+{0!DjM0QvNpwXg3{+Qf-HTy|NS#q=yFv;y=@;Q}fqHq=QVt$W z3RbI`HL2QbR3nJ`YbFbeNig+vuq;E!G<=`A4}q0o@cuQZflviarq^Di|IRO7PA zX2*jK+2F$$``V!qyS8MbXhHhBCYviJ8FlS*8uEFGdQ%<8M@@yHX>vMmx{Fm06|@z! z$f^g$LIkwsl?iNu;FSeR!ka%!qark@;yl)OrF(^j z+zCrKF{-syX2YMO9Fc0wfHpfhybl9~f&b2)4iis1uU?OfMZrmz2Ol%N$N|vKmS_>RY>)Wgftm0j2ZZy-K zLZ?{JJgF&*AhAu8aeyT763^{qCbmyaBKZevC2A2&3k6o6@jE}UQBS2{J=^?dY8#*x z%Ni|cTKHBjnhc%~wrF!7#nx%CN|8(Iw+l`iW~oE07piGkDr5>vHQ_i^T1J8aSYi1A3}iw1}x zN}|WKWrTWUb#_4TcUz>j1?p+%&`2|Xo1Qa4 zZHYp$m6^1sy4!HwfGn?pjnZ7!q81Nu_QK%SV|_w9WI5d|T4~z>GLRSw8%U^UQnkH& zAiaYr+6Cw+_Tw8<$Swv3d3u%lcJHU2$vEF$zG&4Q6Kgv)SinBr!`%Z?FEO*WV}$As zFGTrX-_3D%x9`~dEzp+!ySOvj0w}s2QLQiba%Y2#r48Eyq3HumhVG8o-Hy!CdpB`s zYZ&KgS|H!=a~G={)V_P=1k`Hx!9mh(pZESmGL}XWwww8(IAD8!Mf{Rm?9Ma3O%^|E zC`nfy(4Uy9W07wt2EnLKf|?dsJc?kqN*jjD4Mov=Qoces(L}rJul2nrR8A<0E$oT1 z`wr#CQ!4fm ztm4Nbt!BH~k60L1tfJCwI^``Xj5-qozDW$&ce^AWb%#XE=J^S}F(DUfN4RUnH|E|g zZ<|(iXl)pVL8mex9k;ZA-);Ve5*wpr8yIO@+5BGLu6iCT497O#kx-8w(jpo4)Whs6 zC0$F$nChBzE~$Wv8bHKOxdIGb^0h{@cMn%)hrY!gcAnV7nJwahBE!SqZ?m^{Cx(fN z$x$zb7>qZ3*vlcLO+2Dp@2#qKWKGrB(VJS@=(+zh1Nx?};IFHKsC^?USSU+Za82C` zizI%Gy2;NWFj>_KrXOoG9xHYprOS36otKXS)0`&nWZ9Y~jq3U?U5@l!%tQTK^z?9l zfmhW><1s&MK~HB>k2)kh+l>mfCyT{qlQt{cPBn5A^X2>M~Vt-(@Q3nrga@O zQIP`_>XM*Pmqf2@L9snwp-WM}iqW6wK&hn9+m-j(ldJ zUvp`-1b8dB%g7EMmhh^vcy25)duMhx1AJB8t<`zsayV4>#x=14Qyj2xNHVThjESkp zB4iF)g$dgx5OSjF&wEXXbViaP9sNJk}7-#9qgqHt7pj!U- zyeh+FT29yJbY-5M)b*C&&qZ+$0+eSq8Ze(m4pho$qp=``t+ANH+lus5S+d4LVX)^| z8u+a6xY$7k`UDG|inW0)^k_)jGuvY^=F~MGZkEJ_@*Lw`jea%U3@sH;#;w`ANr1E= z<5m=m%s{JBuNeTa9~=NcpbTiBzunM?O=dsJXfkKp$|xM$p$B}WOM*HaQU7><$Bqeb*k{(e;-Xlth^@!Fg-ue*@u{e4}!|@U$ znl+JPX`qvN^41IfChX%sp~n#XuOZtL!051#R~uPBUcS;iP;&;+`b#DFvs&;6#Dd_* zH;1Edq80Bk5g0CAbFBsc#2UfRxFP(nKSAu5} zWD_=5LdI*G3r#Q~-j_ky4bBZIia|NFD%n%beBY-!ibO|L5DH~X5~_C<74-KTPQ9jr zX^OTh2*(_lQOymSe*2o384@$}jK$2iw8V^7O}51hk*Qx3GsbA%xnhP@trjz7OU&G{ zM$A;>_%$(8+n2D2J3`F-2P8?dFD+*NqLD1)<)1bWS0-i}`|_PHX4t|ri5X5ceTRyf zy&+~$gx6H??G-b7Ld>u@U+NO)o7dI59^&ThQgd5ojn4e4M&x=l`K!l}!^{=p6PwYn z;PjgI()rEppSP)(TILTb<7JtF7}+QcB-fJ~%=wT;Z!7r5$T(U60c76nn_3KEq#a`tV$; z25Hn>+GLQ-Mm89v5p2YRl>A23AW`y_4w6e{kk&T0;*B)Ije-JAc`%A0IO$CognOuN z)G&i+1B9a)MB2FMs-X*if0+y-kVmF%xrE=S{5M(eQAE=n;IcSY_HvsAz5#{@3`E$f z(GCYM5;_}@tYs9Z9L8oxtHu_uGYSIRbrtRFaskXDw(sqy?p3xORymm&zWj7T01diEBwt=>j zFlfsX&1gzhnCbNfh#SxFLEzM3`qG+;HhpF5>C3{u0*E(^s-JDq7i(g~9GFAbn!aY& z(3dz2axQj+y8_Sfc)=ko%=kH-#j-{XyPjNj4QB#enGS=P?eo`E%U${vz`}`NS1S{3 zW~4}MxOM{zGY_&g)q>Cbpkl}+1S5R+ZR6!@YDR};)qJ9oQj4^*CL-T6A1KWz?}>BB zs5}e%t~+0+jt2rUYw>j>W-Y!xzJA_WS+3^YhK`xxd1n*gI?TJPa?ETvJj~*89T>5b zf%CoBDG(3E0+L-)Z?`hA^^){!6v)I0^Y?(-uQy57?g}h_ZHlFh4GmUpr?eu!ctdODZVzR4oZG}4707&h*Si+22}mg97q7N3;sYzX zi*4R(?oSh)?o=R>!)pQJCId zJ&s)oq=tz0(Ve_(O?rt;VTC8H$}FvKYQuU<#fvgx^2`6Z8B(o~E`PcGj2{0>?Pv7( zPqm+arg_kcj0aCK%!}iS%rYYq$3r!m= zYF8TI5^C;a6@7hoJU^mmhGrHmckYIIpkUdIY4B}AW32BqpQeQPHs;f;j_0Fmc-e92 zdKqz~oJAa#O#ZdWigeAySuNa3lhRpiy6;GzY9DkPv}N>-zT0{ft8q&@zb`btZAXi} zM->M2eQ~OvAb?pYwAgV}QX{2`Iyq?dD8claRw-2qC5Iq-70rIuq`ZVmIi`(Gre@uq zVrsst3RCM@^AVH(`l?(0(IsoPR^ijyQ#D&`)SjbP(4bCg`ex0!m1bzymHj##kjvvd z|0Di?n949lT}=`iI$+JvvEFy_#%ye-ax<@2%eB3o3SGl#dfL*2l}k-7$|2K-$^~Yi z+#VmydRLSt55@h(jwNYvSiNJ37l#ck7W4YBddCv457Uu5_4+X{5o>lV8Pt1S48RdR zgy_v)D@K*23Y%F8*3gZZ)Ad_Gwk0hf+sOj5WwtWOw9N>Mss=a25;8IB!GUxii^#Hi zr;T2b#o;qvMCN@qh;WO2Huie^4NmP@`0!vK9DzM7ioN&b8e&dJd?23g4MRhJ3vUIH z>0~&7cPax;#i2AiGPGmI z?k2d4N-oV>6LW5TyA>^kLJE$pHJ#6yuz z8FJn%^PmklIDcoS?4V4?k^rUckB5sO#coiMW4}D9%{*T3^z+nq*2^{j3YOflujYO) z$ZC>D-%(!{Z1G1lpO@Y!V%wJSywmZjCkRSQpk}*caLd{z@Diw9+U8}29{yFNYKhgT zO~m-4O~kTN^>x}xhvQ;NKFjQg-iu8M)LcsH|cCUf4gf^DFIHe=zs%PVRYRfi_}MSv(LQ&&x^XTn2MCwWhK^?S?&x5GU2Ax z=~$&+)5wOYZr1ai{(j2B>|t^IgbZ_5Sdc(fE-|9oMdD&d7|XS+Px#=n@JT{%X$=*- zFZk{Wwc#PvON*m+Q8c8a3WSAC>UZ}C`tgxy!=r<|Ip^lu)H8@pWh|$q2VY5TQ(c+2 zWJqmWU_h?$_HTf4D=>il!nA*99;e$d5Z)0J+VUwOzIxtaSubmtgUZ}R6}9YVhE+7I zUJ3$!6na+dE!2Z=lyvDB>1$88ZDHqYPnXbhdFKgE7~}F3T*O~0tI7~`PdihV5|Psn z=uIYW&cwwNo;lo=4Ul44HT)tYP4T!{T2c@j0zmstdnT4zdkHmVI1NS!MGU;)pRaF+ zvIm^tx6)xo5s~gZ?fh!?r%0$Lld6eG|0a8~)P>a?l*Ut4=1je&zN*UUR!UUlRFk5a zyUetp56p-?dgxWQrc}k&e+N(IMEd0~n2XemxDMp+qY$QHGk$ z?ky~K%(O4UqS{XDsuOlX^ViN9;jU|~yXQsXPN?o9@e??)4>M#SqWgm5$j++zfeFs$+?D}e8LIl?I_vF#}?IJ5}2%v-BgXZMn zVC`L|%?((h(&C=(E*L8#RPK&B)jc||Wo#UX^S?LdlXjmg&$XY=HV>3Xe7FgJG3`8* zV`DhEFTz>K-{>%96+}P&;6K3zyO>tbx!)MgIQ49fng#h>YRD(efMzeEYMu~Qo3?g< zP)z;J?nGWarv<5|8H$#D0kBpPEJ#}QtqNzK^&n3XBXq+C3bI$Zx*xGu&2|ncql7^s zafa9q7$h6NTriJlZR7 z%dzrL8s1{Y^KaYFf7m=w-W4#OpB2dWRls;KF;YMJltuK9&_rr|`(C{O!zO?Z9W^n? zw?-->fhi$aZKZx7sYwfltW`lsTrpAH4oEb(r?ig#H>r+qpqnGEhBhej2i^?FT8d?} zcM`H-4$Y&z8IF*cx3-Pi%|9zYmfJwg@5^Y7wGpXg&05aTMx=SPwGr*+kHP4V)bdL4 zVDZ`0xp(uA?zq414s43W9BZ|s-TWu8N%bv~quR~iUE|&S*K|!%**4c#03_0eG^l&y zNnc^>luY}Oy)FR-BzzIu&ZZoHvD?DnTv9LioCgc?vmMzsB-k{oZ6jMsq+W~-5V?DZ zol>~yd`*Ta$R*{8%B-Irv0smy5t{rhEs;vVk=%NfCSQzgCQ?zl!>#8+D@}f@qj zN18mw5ao{2~_>LVEXNv8zge*hga2P2Gwc+b^h)HfvSaYpy!5cx<*id9CTsH4c4Z^x`G&T4I*b+- z7=M#&@6$}>g)D8Dh3);>W@>lKPd5)&HqV>GXu-BL58sKlw|WvZzdCONCuLUtA#+#y zn1o^UilvW{px7YHdT4^iex$W!SOqEk4Uj^XHTr7y=N;**D;+d3L1QV~_1lQW=3yn< zh_Qc|RJHfl+lX23V@v!7j=>RQ9A#CmT(HjMyM57ZAhUcJwL+L3d_Q4uKamE$!Bsqoa6UZxxEw|e~? zuPW;-M+|Ji@w(J@yw0>7uk%;oc-_%*yzWVkR}4*9Pvv;!>0av{;lV4}1GqnDKkHP% z2`B6QtT-6Kd?CEPoTs-OyE6;d>RQL^IKPH#btiZBrS`??nV3A=C0i+sbAkB7^b!;6 zVxy{3YyRnA3$~<;*nnBPWS1e9f?Hg&Cw(iIEOYKedN719?}2>|dx^BQOO_Z_JiRV1 z62c^tt-KdzZMW>J9o7Od7cR72u*Kf;T~C(p`u;Ne&zKN<@wwtyogY^q${BbG)yuzi zete%|2?^DBy!`(&;nD)6wei zGaU%T{`uO&%oupDV}5w+`UsRb8#1d4*>*D(OVFL|<+{ztlX?c)XDAql+EM#5o`ydxsRz zV43)uo9r!?J_$&>)aBS)1;bam8*Z!0T~h{;FSk;H#7{OUk_#Nh)>Q*VHrnaCHHXze zc^r>35_t0M3aYTpMWRT-i*h zwZpI_W6be-i%TYd^NQ)55R$7hDL$;z|X2ccwn-ehK@;58EF=vBy^M_Sg zIh87;@mRy{yow`9gcs>{be%a#*-PB`s?bJ&x)W|pPW(g1 zo-9|onij;{=H88bvOMF2I<#)GTqI#P_DE7Z!pPgLPp}m6c}|u~exp9~Zn8Y-gfKMy z#$Pil&IwKJik`na%Xji7ReG=trAcCz z^0C9+BcfaE#B<{jpgUP!V)%8p4dt=K;{cR==#h{jVTlJoJwBepHO=+?a-fs9*Tg*|Glp`4Rscil)uYiO!D=wggXlb&Q2x zkoqfQ5&JuKOy()7$5_8d_g*9}JSYA+_c*9E>bvmo1nfXF*uXeL6YOs0x3X#LRJJ&p(a~hD|+6vUxXc@BJ#1 zbRnM$WAScH7aphdX93$d=fF`+cg#Y*iPxDTM!vItk6X`63N_t9#TfcG(NPmAxQOxX zQe(##bdl&-`ANUklvJ$@16YOXlm{@=V4-@^H8!Rwj4`#qaT@RuM%jnc5Ifo!c9DBJ zyNHfd?1t*9N`_%89ac^H2HJAU2Vm053k?LYJEm)mY@8y%Qen_JE0E?{DsCGICP(}D z@O0k0MOV6t(4H*{>|92yE@tZ9o}JBI={=XoKpUW zvft4ms9awfgGrG83r7FyXpj~%p<-h<{EF@A%Dm528?1(p2p!h4tp5dFVg0ALCX?RaNkwH{PS#z7t^@>#uu`#> z5Im{xt=KXazd#%-3Qt7KM z;Zm32svaeji*!7#=~k0ZblP3*9`0W14#{Atr-9JTL2j`y=jSC*(LC5A)(#W$Cyl%o??b$oY$X zdvk5G?0aRWBYE_z`9oLCK?!EN3H+RwiCqRcW zD^awfnR-T7DD(@uGGozptJxRieJ-e!eYSXy-$bSF=Nfbd{gr^HkUv9C0T1TiZV(Ko zj1lk)RLQ~p=5fS;JHq`usXZzhoDa=^0EtQg9Bi*sPm_vtDKC*)9exa#B$e3ja&a7I zRsHS?sXIwMPU_w|6=w_wy;4(BeHNVRpo*S_hqCXQ?=OmN2SZ>r{|{ z!L7wq{d|#UJUI39C7yQ_JL_jq0orXlt7_XxR#2Z3H=>=VSZHy9`|`}#u?OARd0aBB z`#a5Ct{46->p}h(&UKW%;J15m`UP3TSF1urJgepiI^*&%or&^!Yx;GruKeD*+IyM` zt5O$$9xjft8M#m3Bkz6T@8fQ)7^Hk|EVib*n~Iy$-NB-t?xJzzb8@^;^I&%T6(7Ds zEY7=Gay^+){e}E{U<@QY8m8t#{-Jn&xO%=bo)`R#RK)ueQAxi^higK-hHg|vHfWfU zJ>?%EszKP*@%E5p<-c-D@RLfQ|3Rb${zv!(t1{2IGUvp)psdqljv0|s zs2yrUXGD)oRYTKD%c)SeQ+PARnVZ&WFQ>AlwY#E?6Wt(=rR3xxh#;jb)+w(`tA)TW zhVnIkbRIL447BnW!ZZhk3#szKk4rcfzre4W28p+k24_=RfWulAvRLhcNOi^1yd0cy{snNV;PoyveDi}NH06yNTebCG5 z+TjS=kcOh+z)GjW5W1E5G#t$!P{%X~)H}6chI;LLgV(Qu{--9Zk?>ptKs)_I3rM}c19oe~o3x^W!ik8gU zwJH_CR^8BoFV&O(UHgvKaw7dudV7Kl0>%8Y3N(-du~Uvei8X`fBRr(v=_<)nR6mkx zYSa+-6+TovKInS6d-Bfnl0NlI`+0EqG($>Ahz7dN{-^|I0-kOGrw}UYs6XSiHdoAX zYU)Rl?@U*7N78{GoDTW;D)P~Q9JGp4w+05ckl(1*jMJL&x;2V>_ZQ=8jhGg#>9{o+ zDf~(U^yzSG82UX&KPt7*j)qyVsH%TvsvL!<2}Hy>`5y&{h<3f)X#h$ zP%-IsA%{q}A?H{GBuO}PexcY&9;uD5Bz*bs~)zNA)U zUD6;(&8+%zJPNTUv9Cn9{wnkbjphHd#4wioHTmlpLW?`sx~{mZE|coWGbG+W*pn;U z4-$JZq$3&GhT+;UI8T|VCOCW<3pkfQPtx|(f-pD`}uIR9276ZXn+;^AaHP z&f3PVfu=P4Ttb|D?I<8K1!(+_kop#@L?SB4H!n3X>kG%!J~OOP^N@nv%q@`B`a;v4zIc9fJ#UA# zlEZp2oM4EAZ6vvfc=tw(^EAYG78B?!PM9sQ5JXq@4+FXhNV~w{S9Qhrm~j2(W(PMR zZNP+RFioqySQ8xKY4y&Sz~i*PiZv0OB0Gy6*B49;W%@~eIUp(vr=dJG#Wp~(0YanA zbQ`}=V)|3|mktQqRZ@KXrCQWE&Cm?0`|a?U*#9^Havt5)G5iRpftYbn-Q9XXD}(A@ zye2?rX)$0R$|znAb`{SsnM&h3X{tyG5g7 z<9eVf?(T@WuI1emNS*W?c_EUJZ77mZizjsjBaiEfd;N^Ac-sl}8OSMcnyYZM0!fLK zp4PnxLL~NdiPf?#OZgpt~k4xY7eT-H)JNzr;WRzZ~~r~?NhdIhj~BHww9J;`Oh5jAtgCDMF# zl4p8%to7^^&-y%jsP&BDcE^uTpT&T%jz^d$&~Dv&a0+VII_cgJ9tsW0PjiQ6NrZ(eY3A;rhCBI%j0(Yf0(kGy zSnD@r_Xd7KCb!c96dRsF4LmfdM-RyH__Tg9n)h?%7sJEIYH3tL2EU|UYo=p?f?p6) zeFU3L*AqIumn&Y;rDlmMg8v$aL;xq9e~OwKZBLPb)V;9_?RdcU9imGtcU>89cyQEo z#{8d|Ty-x1k6x@6cc3A-l;-A+W0z$@#>8zD7NpGBQKLmdR8KOg7FiLz3sEOqqF}(+ zF}Wr4v8E9uNLyR7S|6rLDxv1^++7|u^XT%JaxEZ7qt)y znhXgzsGwfn1ntIL2O{#bpz)Yhnj82ocp+w$iHtR?1l3>NtP-(YgOy}sNT383q7T7W zgBoCke5^r*NvR=(XaW@qg$Mh>00QoGZnJ|#4 zq6=vknSCjp?<$&cqTR3!6Zym#CmZB>p&l09Yw|_tb!C#U8{l!&eYFRCB2KG&-^a}v z{)`THvV}?~a-P;S`a8eEb(Lm}-hzcu}uQ>k)Sy89o?Z)={z_mp|OPApr_m2ZJ@Hu;`=MP;>TyXQO|HF;I82S^Q9S6qU8%+JID_k6ybV`N_|hgc0bO6;?d3+fw03EMBHW`U~m_PN*XS4 zq5F$64-;fg3IID`t~$dsekuK}Std>1!Q@h3<&ku%NlZkC)!UxJiB{16E-wP1i}4O> zLb*d_Jl{4cbty-zi?Oyl`Uv9?|D270HChIQyaYKMHDS4{njhyd$KPZ!OrxH;5gNKL zG>r!!V}%H#2!T0{b8K$(5>+R=@wir_FLl(*?(E?%ims^QlMi7^H}AFdR8)UwHYj#y zzs0_PzATGtvfu39n6q-oLrUi=Le!2O2P{a>VHgzG@czb3Kk<}x5k+&J$3R78`h}dv z?96z@IFY4CzZMv=-OjuK%|++if9Wn;6NZC+uiGi|%#$w+F1jXU37n^K7iuZH>f(&c z#&aTF9{+Vmc;fMLtk4@#L`1mkPthfk_;rj1Y%_J|Oa~XnM+!VBA8PIV>q#>>UNP8z zfXus3Xb8aNTpY#Yd5v-*-YaVu1>LC{Iz~jLdGtjflTo226VXr)^}1Pg!F96di+G__ zoytAhs>&UmXE5~Q_d7v)%QQjF36e8V*ZkQhlB zJFG{-M=rza_YNP&+Hweqyu1|%B&exZJ*MaR=vxvc)CID30TZYSFuQCQpc=9foWikf zr5zd?s7@IQlDg5*HQ9eAWM+5v|8}dx)tJ71iV0p-sO!)o)U1z zQ@X|+sCp(Ii5SbJ8?vKRT74Xlma1)U4TgctiGwTT@_0aRxo6FdudCr(C)thJ$8^KY z5Fh#r_Y@E6liuVE(OunN5&d(Hy@}&k`RWVJYky#=qLa7y;Cxf_7aY zWLfv>YPo;s!h7)uu)1TCaPXr*VU=!A@o?84ltB0%Rq><3b2Unx0@AyAsxBYamCoIz zujt&0u1sLemjdmi=?No?-(Tp6`arXJ&~xQNt9VJpdp2Dt_#lB}@laHUrw;_*3h-sh zqc+(89-MLN zPZh@q#FC2pp&p)!5nvSwQhPFS(`m&za!>4|Nbf{T1c*xq_BrS^qI0+o-I+FI6Wx zxvy1K#Xzz69kTv|or@^z=R?*%E}1^RR@R?hBkNs&;Ff8D8Cl;dz(77*S)W>YE@b`S z`IGgjSI?oWr*oF|N6cFvL38ZRj+mZ8)_>?C%6f$Qda|C}R2Ny+lgsbxQP$tn5&_~< z;rhoVjkw+;oPYDkdQ!BY@DojiFgk3iS|jVUXXF#@5Suek!suP`@YE>l~YGnNvi;F1hlU;vCqI(^? z{^>Qc-UaYcO$*G(`c{F9AnQ{r&xNd4CTp3P&x2i`di5O2dOBxWe_C#xL{FzpPa*5S zR9rl}9-+RTtd|vjaqW5{+P@xUy&UAV2&iTK7bK0~;giDoH;=6MlwZ#OsSoGTsg!E_ zaDKm7*N3CUpW3c}q>x^8fE}`)rKcK+gl=X9A*RQ+>SwFYduD@H)XM8v=fNOGEU`E!r3S0zPpIUh? zWIgVM=S$Y7UOk7hp3Yg;A4_~GdOBu$3R(Zjizw?6>g&mRS>YE~*2^U-&mNNX>&b_6 zq$L7sS^uFV>yHTM-#oJ3PA4xSHvanirc$ac>p!@@tiQ+f7)&|+vYvIa#;!k;rwI&I&B*#c%P*o`-w#=TuS9o$ zt*pO)jjVS8QbSG)%*gsyfr}vPQ!CGftY^#J^Cjz3ubx9$Pv%W+*=eFw~wo!T%KGH5e?X#p9e@3?HL^bW>stk8WPPi^MUeHWmFGg% zvsdZ)lJ%)q&!McRbC&hT&0FCUJZ^dlS^t@fDC-gG>&bdq;TKodv)%FQ(XKz%5&^ZW z|74Q&$At559$Bww3MD;k$@-&HDb<$sA6sA6A92}`^$&!sCoD>`{z%CB@ZZEzzT zpq2Hba2zK<6wW50adi|9K?y{-Td!du(}bSN5uK2pA$>NOM&vbArQrkgg|nPoVr`x)L(sa37+Utx^~QXOsi=$`mIwp-9=I8i-(r`DD+@+%Y+MRm-c)trx;%lkzAoN?E>BIbU;eq#<*2j2*X1C=x}44L zmJ4Ez+eFo&%3pQy9EPau^(K*=^L$Y?IdQ}hcP>rd@W3~kCQt0}wb$f{kH0ZAIs19q zio6O%z7O)9PRPFr6}gF-UE@7>*{g#Jk@IaI;-)W*5cQ$$%P17Eu+10kqQ!Ng<*PoVe zbaTvdEVkYKFHqFW>nyhE`AlGi3y|G$TA(q8wK?YgX#r&2vkjO|t+X_6OWi)Z%`xoH zu!emeg6LAOoL`gR3T5(=+@f0VHqV*If#^pu!zB*R-?31?VYiA6b za4hAuZ7xmOaNr5wq{C}T`c>2IZ?tVOvRg4L@!8w#zs7(3wt5c7k`3JhK;4a=uMb?ogk+Dsj;WZdtdeT!FXHtugN}<-aDSTg zYl7x9+iH);Z=G7i(uHHAQ@1(63-C0Sb=T_Zr< zZGqc-MjuW^lYF{|B7DV+w))ebK=@uBt&X;8 zK2iVPu&3jW(4mv`K%3CXf8mZz7+obXX*Qu7Xm$wyc)>A<{pwS$kC@R0aO!)M)WHu5 zU^;QM?&tS9yG=j81NdzL z_buFkRfEmMw*|J`0S22~zzJ;T5N)t;Sp_vEM&Ap3Boo4S#3c?8=EoxUkt)BhRKO4F z7({9njF62`Mv^N2g6&DJ-T!_j-}(!^ZM%Ag*Et@trg?hsMpc1}Vj_&)H6;aQo*{=! zUxiX80fvNU>Im)B&p=4=#yuTj;6VoLv3DM)Qo%w-r|M{PcRzP`H+QE!eodAz#)3#8 z?K5u>uei>%Q#`6u&{)*0At0rg>6BEy9Q)FbljLJ`b~=GizuZC67sx54=IJZ<^} z|G%7l=sJp_BN?U4G03RMgT+2%rI_MS-Rnu1pe^i#8%`isJ>&A~vZFLKH*t6D0pXF{ zE&SFA47YJbg?8ASucH+>>f);LK$mR{2$!-XdzFq;CV3-2}eX7j9* zqd7ayHiWya9&Vq{QP%k_IwTV*+sBqsIYAKO65Frg#^B`WOBOoV;1 z*(8dLV>VJBm5U1-j-+Ri`-?nIN?q_>x@?=wrR;jj@^;mY`Cg2@KroxAg+_rHtl9ZG=Br}|)EM<#G;&%4rnh^41FE>qU}l-*h*JjvkaG6$mJ=o22_ zZ94I_BZ}j%^Q{F|IjrO=B`;#o)e@IT*=PLw`$W``&MxH-=a>}wR{i`v$4RAb%#XfJ z#r8P?;Ub=eGy?d5)A)@61>7@-=s0Uvn*bQ)b;f@iBfOHbGvf3VeKUSR+1sFTV1iy< zDV-EN|L&&@53_^OwLD?6VQd@sx0HMvV>$wV3@sd3BY#}}T|5kZLtfp0}INHXWVYmVt5iBNqukBRmsrpg^PHyMbYEwdO6#_s28 zqMqj|C)4QV8mhilt-L;{`gXHW2V`hv#n>}NU)xahF&QPC_apYIDf;H6OG@O{uFgKG zyoHdNsIr961<{$MTJylt2sFn7tqgYJqbP;lWidyUw@uI~NZVb=h8GFaSB&#$!rv@N z<&0>Zfm!6j`e2ufAtxupR!a@B+p~r5BC+eE=qL;14YBJZVpo!kCU%t+5J6lByOtyY zHud_i|C+rzl~3o;q^rJ3y3a?dF+w}$ zVNS{O&F3>~s+Zs`x+|Z|BTnYYbzR-ZksrHAVGpwBkt)?swC_0~@n5v>IaKzC+xHx_ z{{P+AD*xxxn{I_|%0UIngOP}aLjr6cV`z4L)WQq6$`V{2{RZpR6?3M^75jgIG#;lo zz(7X<%o9Hh2cyD$iJmF^86R5kgk5+kAQxNXXO^i@rLZv zYK%tsi~U-CMTMxiddX;0DmVMV(G`F2g3*?E4W7EyV=j;F-t?rqi-wqcI=y?>W;1Q8 z-Q6@f`gwk6;~A-fm4aJHKP|O!?y8u$ocjaRW4GcoQT{$X15D=(z&z<$bhkPUmgb|T zHoTAMBnZRhRQ14@Qq_B?%K6r}eCJ%U)Wx*^zy3HV`5faRJfc%5Nsux}=@^_djGD@h z$9$kE%w~P?WIma253IZ@H(`}Uj@T&c4FUd&$#S>Sb`E;fOtTnAISQ~eET6vTHyhVw!Xqs=9EHm4D)*U$?~xMlZaclO%xJOYEHDkI8(H6>NqstV)hRh@ljm2Y>> zyx|TWk91egu%!Sy%{oR)MKw1bE?%j8IBIO=9d`&dWR52AZn${G0=^J;LPlo|Z7gcK zKd&0o|EPLC-24>d0o5;UBVuj1xJ}rQg<6-sg&q;O202QaFZ+YtS+msd5~)%8OtBBs z($3d9WqmeE7Zatitq|f&r5wN&H&N z37b~Erb7qF=eNm}W0Z{NfpkPtE>OtZH&2%JtKv|Ujt7V~I8|6D$JNwPS9x_gIIwhu z`sgAkGP=FU`fUiw&E9jT?r2wTWKHT;&(Lj4K1fUx0(gxqSn$JBG~ndK_D%&qZ62XF zB)sI;BT%yIG}&e=v2QAFcDlcqZMoI1)P-!GdXT`M2Z?S2@w`IZpx%n?>cUuic&d-1 z<*Lr;h({@PgEJCQ*ue>`uBlcY(1vEi_3#_1spjeWTJtnD!fa%7VxH@Oai=-w+Q}AG z$zqzS+}QvtyFe8Tm9>mFyRaJIpG(u@-ntwk?r{9-q!s5X?zq%(uHukI(ZxPuCP zl!f1!OL8G~OK?efkY6EmO93T{*o`hgUPTL8%_KPw#3WlC)``L2)ik6o?9~tRh^(EV zCIr-TMHH5Ung^*#$zaQT`~U@OUra(mT1 zv^>Z<`Y%V0Ub-{GMfKU=|Be33s+^?1h=r=Ca*%SLm`S@Iw(}HLN;ORDP=rlH&91IP zUsK1XnL23eK+SLT_R>J~f*>u2Z-%=ixHeTCh4F1#F354HvEU&BBn1**uGu~S%##S5 zfiq_$THw^)%3?di5jEHexQ{Pn*WCAxUuL|V0yRruSD^xnbM+u(;d@EtBtTeKx3(ohW=o6@lFbRT5 zw7>ac0R$?}0gxgUM;2{{%2WYVrV5~9J&jC-Q+D4h)wVm+0y@zaB}^(qjcD8Qvh8Dt zR3-<1AHr}V{F$EJSD=E-(A?ZF?j~;^R>IEWfutUf6dVH#U0q(zF=BD-7da0vFPCJr zTrL2nm9jXry3(0?+z9nk-?rKMwncqb@+>Ko9IQoGlt4L7vH)m)+L;#i9tSk&gJV4P z)D<5RXJV?4d~`IoH6Z2AYTWRxa)8lxx?6}IVhHr~6hmMeVqT)1(m}oi6?Zl5m9;6) z;$ynfBx^=)NXDt0Em)?`F(%cTt?Q+VPL$Fh?l2VydjXs zC%1QsW5#Nr@nk|H{j)g4o{}jm z<2Y7|!jMSgh5ehlHBz_2Dq%i~Nx{wpAU7SX?vm<5hSo;KoJOiyYHlndj9y`H64Ums=1aD&j~OCOuPA`*rdbt52J;s_ZO@k;ol5^Hd_J_md?c-Z zU}+%I^@KKzFpVnc5bNm_6-G`!HL7gO;HUC|-p?Qm4%m`)F3T3VNN;9Lkk3c9F7UySho{FG&9lJr%z7g%o6)Wr>jja@lTH*$(J!oG;@Thb51PPTv$Kh zO0JKFj0F9jcpHUE>OQ_ANujfT*auR7xKLgJCIHI3t14w%sq&K+9MRAtbwiZlbIcBH z3DWs^3^=`KlJ|mz@&&1;uKS=mfWOEyl!q4mI8R4yP{F6afVopI-)hbwvF`|nj?>Qi1dV|rf0-nq%{M)68KLTXsM0b z`@qQ-T6ykj%^Iu(y;_C%i?^w*2Z@SM6SyF?esf8z-&|rNV^`;GvN$f0fvq(rRd9*a zFRL1wAcgR`4~&Wp8d;0oJ_qZB=m-}7e zs?4h2Y;NjGPltnzoPRUEUzU`$H1R@RUNPRG%d1(az-3D+enIFpiLG34B5Q@h>pT!B zaA?ckg?M)5gIdS6dpnhAeU8<@dU?VA+a6>h2aseS)i2AO3T7Ki|ZJ23$rAm_+X^d&^4LR zih-~(P_eBbMaLuZfcN>!A@d#`@uAc=(JX|e642+4Skn*?kACPlL&k~%zjYW*>0hHY z3mPy0mJ!RSd{?`sC02CDA1^xwJ5bZEPASUQFQ9snfV&Fda&eZ4T}ux-$t+fj@>t#i zToDhp*||YJ_AEfw>i!#JX`lmIOU@9UYfeMd!m3mSa4862(tDY#Y#cL0XG&brT`jwF zXivO^d8dT8ElrHxjn$Zke zal7bbi9_H*$P!=SItqgof3Igq&H%nf$$>+}INT1wDvoNFVu|CJQY?iVQeA3D^-n{A zNVKMdJf&4SVA$$rGT$hi_;R0QvA(^c>@m^)z@=@7H?=3M|J-NQiXP6GwsX`mP{>B`O? z9fVjt`r)arWYmJywBVt^TO9##TZ`8a;E5jRq$pw>r^sx0t-&V%O!<#xycq`ULw*;X z0hxn+9WWqVWmR#0{u8STM_)Yy9v1`3e*6Yvz(gRha5!rkf!zuJnhmmVPzHqMS_}vu zu4TZ(7nK30$ZVLc!RL$uT+M(Ae7xuk$fAJ+EhIgb)r68kb|IKhP}Wit31Ua4j`l|U z95#(kKk6X%`Ln)}NW5k%!fd!+gc*2mMVNW^$^-~qA!CUA9S+LluR~=*rxL$5B(zxW z^!hDxIKXXQ->%mza5oWsvKm<3RhO7S-ZWOQACamlvX9>4*Bt#D9Pjl%_fd;91nN;h z(N_FY9lI5vavi^uBCdY=hv8&`JPCK*%pa1|3oXJch5`u;@6@c}|=!9N;`?V+v>C zl+gbkQxNGab%H4jWYLtR!{5`?S@{@DF+C8b@caHfO`SvHfhp`bVT!ddYeHDqTJ*7` zaWv!7Gs&t@2~6mwIBhAUxsYP0mO1irwG~o}(3lPN{P!tc#+~))m`lQD-w^d%9udG``SkySwpxsWTnqXCg5=R|_6n08?eQ zcE^G2k{M+t0@|oDyP!=6&$}{1T?wfM0jq)0|T~Q5+|xyGFc<%R-fgS z%@N;MYHyYrzcP;arb-^^gl};{nBogs{K^=QK6^)5tF|vZwnR?7)9i@DfHQHdz1&>!kJc*y!}?&NwquhZJeJytwZ~1RV|C{8{T9}HEFlz$!1B` zRj4A;)vN1C+c5*UuJ}&oK1uOA>XNimBZ!nno zj9%w>Ew1ImQ||K4gVoRI)FAJu;p0=z6u8k^Z&+O^JVn)7neD!L^tZxP-Haf)B_O>` zyLY&KMMEnW-0VtB$ zvou+V9>kq{*km1q#qg?++R@tjLOWWC#h{iKYm91I_D*2W@nq%J^x&PSTGXuWdOrj6 zn5qMb$V>`8hM&sold9dV zIH~%9A2~jIQnmN$t~#mumu@I7jWeq6iDQ{{Ms=a3UMQYJstbX{yv09tuqPt-cs?2F zdLm!%oa$-Fcs=D@eO1}hoysR!lf#bsX{A$lvoMPJJAI;b2q!u|3>=8q+|6$=PcyeI0a@L{KJVDv^+e4;ZM5E({X_c9?xbu9*<7Y8H@ ziM`PqA(rNI37M#=ml7vNHE|FtyXM^sLJ&F;_R%wF)e6A(67VaLw31FM5$ie-N0DgU zqnMhYzd*`c#k9_VIQx|caExiGS`xHrcO#Pyzh(h(`nQ%_1&3$_r6-O)Q#m62BxMKO9u*_Z!3gc2o>cU2N6 z7$2=l@7iB{p)%oixCpq1yA$HO4lQ>&MUMS9&rD!g=fwra>R!8$A}=o4hk=G1meu_h zjbm!4q1AcwNJ}Z#D{eD4sPtpUkku)xZj>etb{BGZ4C^h@>$yos^M*qCF{&r^b*J5y zQh%kkF6C!x!^i?jsJBfBAtwk_`5%?a9!$%dD|cu2IzVXdfQYerOcGEPNdlu^EROEc zwi^*YE0HIN`8lw3b=i@Pc6Dk&C24`d`_>qkga}nW-lR;%tY0XfC!B?juX}Q}+=N$r zl!<*^d`Df}umvXe=Y&YH%y3TN7CCwXt5Y?lHqyvkEob8Jk=@X1o z(knH~27q9_c3X=0_81ZI-2&mj(j*>F8e#Yg9&(^*U^(I^K$O(5;W-XG4<>kyp`SRw zSX?ZDRdSe#Q!%r3>jd~I*+6()SDeBRYYm;S)xP%noO1|yYx+_kM>C3vW<}`nl9~F2 z*OK_`YFTtOsX17i!9t3NZ$YG!Cfy6IH^+$wZ^;;PUr5E=h?Ojk6F=_b#3e@(>u~UP zn{|$N#X1Ti9wP30+R8zjk931TPO$Yw_ngqJ5LJJ{c(p;)P+uG%4SMkRxL({#Pk@4NT82?= z28nhwSzrX|ms&^B06bZY&UU$N0)SanpwO)tkKvm&?L`w_~ zEf<+`LO~T)FNB$#MZL&@Tbp~W5x2;zM-N5&FeA(+mCSWh;#`*Cf>@GiSyvM*8G?vt zObP$gGZhinujY#4Qj7F_E6)c&I*L z69dzuF**+W38qKe=y(vL8H3!E#!*}Fk~sc5^o1-wT58&0 zg9OGN8e+DUduinvm`LNjLMx~FWg9Q%z3g71m-UPl{%TKH;WteTXG|>8!LS7~MbV8^`SaqCT7r=PBn1oqdo#26N z%gGfsbE{)UgPlBd?Hc;d=@|Sf=ZvY3>nElgJ4l!{at4R4n0TMob>S0b=M($Oci+XK z8Qg2P#w0IO#q6h;bdoV$-NTI(`9n<}0IOyOrDf;t>Kr8=eML3h%S^Y<+*VX~b600> zE2_J=t24LRWME0yo|T$d>e8!_wgqBS{>#=-EDSZVp=erDU_Y5b&5X>NnraCDd2^rW@{D&Ofk%Mer z@d-K33|5{->@VXYQ;vNE84SqFWod_Jf_%b{Q#6KP6w_7`$#Enkh0`p{Sn3AZhyOCr`AV z#MJrm){~ezW0}{b)T>7@T|7^rqYt5@G;JC=$|q2 zb8F8g0!|ShjzA={Ts92SJVHV zw>XK@fnEp+TqL*%nVhh#*n5h*QMbGUfYi)vL;&2&s8kdBX?XCo4Q!pB%c7=?eMs^Y zVzyy6Vde;Exo>7HeS4r*b)kFSE>t*pG`~8>`<|a;h;m*eEzQwhL0zD>i0r+ay;H zW@z&y=(S}D3gO4#!kS*sVE2e#aj%L}q1ZK)O4?V;OM7w?31=o@Fdz}YU#x`DPT}=v5s?D)+I>YLF*eDl40$4}#(jZc zYZH@4#v7>e@~Nu2CnSxkeoY8~aM}wzUf=70 zxX>%Z`b4LC{9TOLxAPh>V%_xKA3+2h?l2vD9AQxH;oW__yZ3$EoZ*k(eLT;Kebaw@ z)8TNVoa8N8Vcn7Z9KY64d`w<1F5r?u!s(y`DOh~$T{@B14u3gprf*?Jznyityh?K- z>?K-elzo$i%o~vr$d{EVI1kN98!$}8$azPn!gjQCV3~SRs8@SZ#ylVBtAu@UO zh#JQz??6EfRuXChjgRY#&MX>@w)Yj;bcE|)fHik$d8t9u<A<_Gjs&6B7^k|!oG;j`qF!dhaynowq}KzsGs~(kp7`ti8_)3I0>W6oefzE8ju~M;FdqhGJtl;=jRHT5=lWqki`DazUSS8>IHn9gR2kH*=|C@ zgnSm56KV>$Nm4#4~6Tbx?j)r zM~%uRz=!p6a>p=j(i{EJ8yJ*-#jSdS|1x1!Ry=7`UoJhtID$u@=LZRAfWN*RCtPiz zdMa=xxGDAB(;`vUIci*8QRQTbA>}0noQT%A*W^5tsdQ$ho?DkX#lBV0KvnV;K1R<) zHMrhH$c9g76_~{HO~L#_d|@S_P2K7pchK;Hhu1sL-B`4YrO}O+i zdZCdAY{o%URK2ZwyUBFB2mzs0c5dB1`g8}{j!7U>Up;JITXOggHPWPJoOZgLr$Vm`P-?UAM>s`0mBPs_F?03+vkNTbF z&3qVU%<9S({u`%nSYCrzN&iUw=o6( zQh5hzuv2>7)1T%&nV@itR8Q;oGy2j7Y+i397y@ptJ$E#Q+o}8APz5Afb>HIC0~kf6>0i8=$8#EC$q<2H zzZk+p<1a=Bfd0#vVKxLw_X{nSb~Ks=)c{%_xrfjiyb_G*#1u7>MjkAiCgg9$0myTu ztgv(QmKtl1Pr(-+gjA|KpcI4)?MFK*=-Q(=uKEJI74t7)1b z6ie=SevR5OwObr~v8iXb3xbTsFz9fN$W*&q<+nv2g@a1{6C2 zIx>RY%AduT+a04@tRS+I;l=d~!6I0q+nf#x4k3_P3FC+zxn~1;6f-JGV+O-Q?AgM4 zXtcPlaVW^ZVT25Q1K}_S7i}C0dEYI(y;6ZI>mfu7+=NC}CS<89 zE456wTF$lgtiBVitWlOOiA^Hj6fg5bIXJlNEeY`q)Af38K&;N5;6-#_wkH5?Eu92j z0;}xT-G|cE{W0bQwtm8ab9ul3fddXQYjA+giLF72E`pm&rtYgJ8g4pPH_j7*aYJ@H zww575(*e-yZk`N7V<8j$%--miAlal+$FhW-{v4@f#mT3)A&#v2N_jvTX&K_IWZU|v$6OQ#!%HYqE$Ktl zMDJzYJIh{=R(ftlr>%GpZo)PZSPSS=5QL{RQ;DXf{ddJOkn9^sleeB;Skq$WVbqDz z(GbaU!DgpkArURRV7(~Jlmo=gLSs+d{X5C5s_EnY)ej!5AAoq%CJo#)Lwz^3DDRnC z*YUNP2K3ues$sCNlvSHx$RLNXgFe_Px_9R92t&LdEQ!IXu||r6J*<>r%%}8=!I$-- z(ZXP0myus%+;W$Yhm-}G<=|lTV!Z4cLiwj;7Gc!sO)pCK>e5JNm*^d=CX}EmGb`hO zWN?8)RbTTby%>yqMgkx;rHGaJ*e@Ng)7|A2?#~CO_b%j7wP_~3iw>{yy24^@h1G|j z;vB{RMCmnU=h-#DG6z=N=odX%iyJ91HZzGim`{!*RkK)5hH?6mH2su~4OWgVKE>9F z78Ci7hY}l_Uhzk>Ip=h+ak1wxG!v<1;~ofmH$#;ZI;?OkxM1h>ZwAIqrsppsq*TH zLW|*i-kG?-E8Vb2Z>&-Bw5el>jLaY6Hab|Hwu66M0GB9$K9bUa!L5ozqNf@e(44$C z&kh+( z-3{~M`DBM5AK!*|OJz4wr}q*zRYuQ1VA#r@+D;q!f*Kj<1RFP!!-xEMH8NMfq%|;W zZ^&NJ0LCQ0`U4lDO3xWQHi!c@XS)uSi%#gQP4+JS4}$HyUtP7KuSl=E zfx52bD~&i~(x#%krXmC*FOcn1D#F58O-1h(7W;Jq5enGTw9$$aDXmj)#(sXae_P|A zSs#C1NUnCQkKL;Rtw9G^FNxliLx!sN9#}G_TsS;H&CtA5$!GL-gFF$tb{nRksfN$K z^1qt}YCiLV^H^cT|@4TI}P3*5rCU6tnaGf+4lXwlD4>=7tP+Y+5r1U0=AK>+7oq- zDs(o$IbPT3;G~v|z==XnA#RPGwd8yD9`mdUh~cpgY}P%62&=0{%H}~)U;wk`YZ_T z>}2-knQ;<{oPPwWzj2{80};m6`l8+&LC-rlB*kkD&S6P`&V|vCYIwFi*ci38V3iU1 zqXrh7Y(2=Kh!PG5{Ka|u>`hM%-@I4V^e(K=s^M$X=N7E$^ZVE7vxLlf`;6tL_n*Ml@s5*}JE6TglFf{}YD(oWO(?NAFD`)B6tbAZGY- zeu-_#D>`8XU@v8+4l?|%a*!$4v&Q_C(jhPWMV@!Gny`-*A}zVazgXqc25sXu`$rQJ zMgTs(^1E_5f52G;t$eyO&T#|*DxM)ltjaAkQnX69dg39xRv%!23wQCy6|HJ$XBOd^nawK zZAsM(l>oy-d_Bp?B~eG=R(TyiT>=SP{puGe0z%glsKZeFGA$ty>e!vVP9BqpE4S~$ zi=slShQ3(bgD2fK(=B0H)qp)V1DNGBiT(KW+~v;;{gbL!*6}*(06#kB3kjIc-Htcv z)o}i$>btZ?;D+E-`SZeg_?%dFLXPvnY3W+S`J;aXob}XixFI-I{=9Jhld^A`?hZI-eub9V0f6V-cm z`qcJ<^TBBaSi|`js_#252%ohnc}_TwK2E(_%3W{VH$+}jFeO!vsXnb9Svhd^DF)#= zf-mtZpSRyODC>Uzit5{bLH$Gu>&_4`59xB0C7mizg9tT0D?tZ#)?TNP%d zAP|Pc1{vPAug(zr+4-Uu`3SYUn=n=u6g7w)#liN39#)Irmy0AI3ZfHlpLAmPk>V}O z-mcDV8aRa{@(1ouMAFklskf_my@L(3UAI>~Ieojor*pG<%0H(N$kC4xu0;~ix@I5h z!&;|5@T=FdO@hJn8hun|2FvV~D-dby3C-*!EFRQ-@% zvS(f;Fo54u_As7{*K>CSqg97Cs32Q&uP@%j59KX1Hgr5nmQJZt@7daI`ohfbX@^$b zeU=pzLjhQ~F))fS>}hv3eR}8%(baf-}$)XuU>Rzmd-^aU{FIuBlZ+A!|uBFw^aHv2C)0+;!0s?lW zD$Y{R5CZh{^(Mhy${VVHfA>&adiIY5Cuq<_Cu&!;L)5-N%|afHoNriB74GEdSJhia zOIXwj9e);;dNN2kA6+q}W1SN%z!P0EkLsng`9u_`J1o~nvA`U8H+XtGAvR9W#cxhv z)1x;KTIcUs)7K_Wv7$O{w0cTtxupd_;6ifqs1w)=`hHeRc6TT;SG>mP8I>l3F4`s zXOx}do!BrRjHBtO@!*Vo^W@_1{u^B&KJsrnh?9Z8jk| zoq$hMKuXud5S$`n2+9_T*e3L00_Y`ifvDyjANKiR>%qhtOlNSWD{whgsx1Nh#sQEx z&M^nm);!aUBUlTF7jnh4(5E4!qKDCwZa**j@O*+t_Np2gr;`m+2c=v65GFkj`f(h!H;~=khMmV1>rUe2>Z^$yaj`K*CiuB}XWPW>n zL`U6Dwv|F&qQjWQN(8aO)qbwU$oz_I*_|m@mc1Q2ic8`f;sQ?vu)rX24ICK|r=n+h`LUNoQo~x2TvmIF> zEI4eC<28{jF_oAQnEn=pOY(2&*6kBwr4%pqa{qb@q40ys19&UZpX1HcptEZ5wJCI1 z=V)}_ay^UVwjLNVAFkSUV6lP}mrBA1Wix%B;}{tcg&u0ydJ(5AAfzzNX!WMA9vk*n zR^BFa+p%K^IQ!_rW7n+|t|v?}?x0EMPLG+Oua4*(5M^}QwRNFgqXn-~6JBWpavnX6X=3AQaD1xq;MQFi;NcLstF@hZK*~)Abs)nR0qKtW{hwL%WACa zc@rJhF4P4g7IloUfC;v}qt18OJWODSoBE><1BMyJ406g0V@5Fpoy5x=W{&n=%)?Ec zkO#{D3&GBFVU(RBdA`bSVS#zR%H^C!rJ$9x&10T@eODq01}b081G{dj`GrY{jZ5IV z$rj5S(be4mq##0A4HN2yOcIJ-ZzC(myW;2Ytv6=x)K3^ia!eyjPd;Sntlk`9Uu-~4 z3IX1+b5SZKjESNgv2SK_DJNMMWZ=bOv}v}fyi`*ZY$vjAF&>%?oJ^kmz*H@F&>6J^ zSuJ^#=8J|Tbc|C1nJj!vz!E+|Vk5GwAPw2K^H#|#r+Qxw7-bt4<+AgqoB#|0N2Az( zV6>L1BAnLxX6c%YR7#I=_IGv3&Dv#IRG-7%B^`Ukw}>{B0l$y)Y%AACn>h&>yM}V) z52k)ixlgcM!0`}U5Pj+x&lNIER=k7dC3QVI=JjKwB7+|5{3wjg5sd<4=9FwCQ#q=8 z#*U-z;W+2Wr$38A@>cK?oddxqg@gDaQbCA)9&y&eA*U9fS8RW%&tqCEY1SyGI$qVc zlK3&(-Ayc+_S|nk0Y}x3x@x%4Qcczv(#yIU)Uly7f~#2`?Nr|paCuXC6jr7;!{x#p z(0b?-`@fREYkaA~iK&W8A4mkhJ97?mt(%dy97wMXx4;dzI%h@IYK=xI3hg_~en{K$ z(*4=~`O&Y!@R-+Q^7P|{iOsM!Fx(9aGPS)77Li!FjDHPCZ=YQH8U`WZv-PzY%9({l z#>e2N2NJ;@WtPhHp{O|MlxZouI&RE9=&OnAr}auam#19TNFj0|-|Q8P$bo|R7DIa~ zB^rih#nI5CI~Y?ek)4^kUfU8+izn_Q%?T{1G@??Frd~R&jJ!}TM+hX!M%jJH6m761 zuoGDSik~t;0xV?^KWt(?3s@@~0}C-Guprc=1_K8np`$VLgnB!^G<|5yF{V&XKtfr3nWOx7PNDAw&11O*nj7KoddG_=IxWq zr}X%a#3T5W+B|ZtAux}8$66j~H67hHk4%T61i3KEKm6wnr{MP7)hQ>J@$7pVY0{#8 z^9mKTA)CNz-wW?tT3!a%{A2cjosDgrIrIL8;;N&+bzI?65O|C5P&3uD<_D$fY|~ry zpqlEeYKoD&2u)!T%ry0j>otY4ya-J#r$uO)Bd4_*jkrDgq=|)#bG~OCf%m~@3s9-D z;5H9diW~ExlS$W~pqPi+C!dY;0y9bf*ybVQyf&67{EsI18}gDJGs#|pXS6Rm!(M__ zBbA<*PYXvRZ}KnLuoJ(`vRHfo#Y{Tvch#lN%JziPcOej+x}b)OdW_rfGdfMAzPb-x zQ!^gj@>fSlq39H$@>w!_z*6xpG##QdX?C=qK~#$(k7Dp$Up%QhWb7$jxwjn!fKvC; z09buK{he*NdT2ASSQzVT#PHLp^l7d(>B1oRfD1oRs8MvE?~caKxg2o`cG!BNAL|#g zdBE};NlugH!d_<+0_J0eUkKM)wn(oLpD4Ou&Ff~rL}e&G}VSqfH1aDY@yUy#D=_Et|z9N#D?TM zvSMHRpHgII%cFktU*0b|-Ja<^EeqhU3Ezsxo9dDO@=4cE8DITmSC%p`2$S_2Svo4( zdSsuCeLl|6px53x)qRV0wny;-Z1|xvyCnRlR;P7i(&g-GO#YkcHq^3YB$@1jV@2*j zJ*>nAfKb#`{N|$ZG7y?fXv0@7ied*V+a-5K1>1Ng4M2ZKkPyDD>(s+cK?Zy@t><0R!O zh{PsR&77xG4zz^~e*|b%{tME7urYpLvCq(ZJCk-Yia6Pwh%#qhs}uqW^GrcKxBG+K z^Hny>TGJ?Yh(kx@9pmJYL(F^S!7rv8%LIcbuwftZakrY+2ITJU>|Jb}rNd?S8fMst zH+dVFk~?`XQ*^QcVYTOz5tBJ+f05Z<9|%>2vVn3cRJYdqfLI9V{DOpqDyiQE*x!PG_T4j?AW_GBNG z*QK{BLsB16pw~`ZJ0e@<5@&?k_zMawnZPZ+5;vUM;Je~bx$v^3&1@ka&|RA89khpO z(m~x&0db7zmyTB1Tw2}(1@cVWK2xr;$$$Yt4P?FzZnO}5(ei&ygp9 zskvxsE}EK)rsh^Ph2tqT6_R27=3t66222{})Yu`l-5LE#hg*~Q#cNIYG@)pMQleYb zi~vx7MLD8$Lz@OFNP)4`aA?$#6$dr&Faaq=i1`ClWvajdX}EiW`=SnrX;#E7SE6WA zO{j5^1W(t%+%fq!Fwf&D37F{_>#U@}F-bP0hy&V@k$BLWXMe~uZO?_c&2biXyE?b; zLFNwaHNZJ63fcou^%q{aZmNJOIT+A$d{fuHJt$O!xp)8e4mO^%T&&)Q%$8id z=AdURgR~`hyd+6q_9lJP`&?VvELqxE@?MrCt3?i?hGR1I{dkG2nIUr6X+MY66CwwS za&b4a0wvK@C^qQQ3X{JL84nrv~yRD z<~BiDIt_$X7m`A2Iz*eCeU>oGNuVM<`9d*V_(~(rPvjY6DKXJ6gSG`zJ ze44Msjg&xSZJ=|&@gIM&f1xZwb#CWRjhv1ZC>T8UZo1f} z;dMvHgC;ttS&5FiyTlToM-bBH@-mC=fkgLLMOUExlIg%LVT~B~TTB}@g>Nz4G-CM@ z4IPHzWsJgPh%nbcDo+9lCxv}0C0z|(8qH*)YN;us4>AQLA|PEjQ)$Zd@kBbR9!qi2 znz1AT#CRI&RE<;caExWLn_FYKNn^?UtRBnFhk#hPQ& z)T=a>%`1&1&u3s%3<6_mTVXnu5-QSFP*@{uLZ3}dE$KY1BD8do^_UOf)FLPLsr1;e zse!2yF%+S?WL$<3nMAJiSlI^;i_951&^Gx&$Y;?r@mphBo9<~8r))g{=%OB*O2Z@! zd(!8!SelnQ4CZ#el(~t08*<(;APoqfWThf}y^`B<7si+s3}o1s#rDZiQ&A|N=P+Td z1DW#xuBO|kC2DZYFeBhsn9JY z$&>0b5jq8uPN)oRGBno+hFmpLe?91Sj7%bFB{)m7nK2XN=~*ywD2|;U_31Z^d9wXz zgl4fNPHPiK^9u#AP#rza4i2T%3QX$@^lR%mh*_*2YQ9PdRPOyXiv8tGvFc}k{diVg zTRqApUOm7^Rau>?9{}(a6}Tj-&EQ)7$3)a_lj@9W*je4D)>QfL^+-3PGG%0+zNGbI}3pfg#b1tRi^=#0S+t`2`_8 zX5~nGe{i;3GpR7B#XzC3i=jnXGj+Nc3PT7w4}+#rHl&U*t7W2FXPIZ^_e!7*&StXn?Xv}_4Kq!FK3i?hnMcPJb&l}Mvt0N`Mar4QuoYrHWF7)N|3 zhhnkBiG^B@57{_BuHC3`ukP zJF=Q;JBfPh`_)%vzRKvq@+g;Aus;~i%`Yr3E^Qt`<{9FR_xb1(-o!-eMch?w~|9;&W=^9`8}erD*3eR^SU2$0Xe$?vc?8K12B<4hw;VbaU~ zfZsTms}^>;j{_t(icc4bj%Sor|8!;?mUpQh=I2%JuuX>SAc0Op0&_&Y*v+XIK?1xC5)i`;0zu%1nJv9c zuLcSR7smn{VKE4+rh3>5jTF_g;os-9mT`7v_H!Z&=$&!*}KeHm28@A?PzYkoGb zAqkgW`NaR@bfqe;-^~YDZ1KTo|L~f+f)#!@AK*%i5AOYw$89FM3f;sYBA}Jct;dv| z30n`st>#Ol3X-c$lPe9#G6daWbklPeZn%93k`5-apkSlGKVj7ik$|Md*P`WyPSqnwflIe~ z?8Av!x$7t`?m!U-orBeGY5R)Mv)H-Yk`=v#M+8@cM{SXjtiaKbD&VC&nhh!$7^5=s zc*=?1H2>$aOpg7`XOw5!@W`5w-z%5km_g=Z;t!)0Bdl6kd57^jT8-D0qDJgjm~F1Y z>=Kw&SmhebE=oGiU{8I;(Fk02p){h>XJg)^=*_&T;WmL7 z5)+74_L12Vj6S?F;&mYsvcy}qs-{FIx(xS=F8tq}%*Eyi@0bjKq#XVbKkFAOcfM*n zOFLUa{T2JL6QwX^pUju@`{!3C!~OH`_@R&5=D{?PVaY`p;q9vdC@+WOc~&Fsf+Hpb zp_o-$oXArZv8hH-EM+uHF-+J*SErl{neFBiB#$viKDMp`Uw$40`5yg<%einKly$R93%rM;!yLNb0-_$@`&gOP5HU zpqA)nFLiTTMU<^mL)W~9`v=OP#(L_C@433~L&+L;>JV9mV9u$1w8WaTC(96Wqo%l(^ zsD!f0Ar4XX9I+RJQsbr>6qr`WD%68gD~2>E693^(D5_p{v>6oTIf3cC0|>1!fHm6# zB4yDUkfI@Y2^vOv)qtRYG$72pHS4Ko-h;48SO9^MXUJbO@4`dG3k{JXN75i@=G{v( zZ>^oQOjOOhq5UvYDWhMFC8?RWUdEKcZ`($yX5M<8X5K2?wo>V?U#FS3Uay{ct8_i{ z*84RxZ-03YQIY^ z`JjI+de?pzAx07ZXuj~fU_@3Yk0edQL;GD=sFrGL{4URGFhfgT%)zukhFTif+w(qm zMnfy74a*8e+bofYYD?*m4JeRVeH{lfK!~+jVgn2FAPuNgfA~fVX>P3+%J(B91>euS z#&+%pi2>k#WktRpy^;5Yac6WF8!fx!!O_^Ff_NORQyf3QITwS=i>7Q#k}K#{--Hhp z{neJ_xPJUHN%FdeslvtggXPuG$9z@$e%kb5-%pP3=X8rc?EBH0<&-`!%4e;pxfZk6 zR#d~~Hm1T7lYmWC&00~3+2>+Z<{B%?!(f{cO>s76Pga!aBf;LL4|m4&p%hKh;Dg3& zouQ2lNM0}ANQE%Kwd7TYWVJG)A$CO@@;%9W-Z)$3EDYb1_#T>oFp}jJz9$}<<2AC0 zEaZEVwUwUF7+&%{HHKH%V2xgv?`djy>1A83%lDKwz9+qHYjyda^2Yb1w{4{^-xK01 zoavmcm2Q5(vM50<-xJ@|zNh-8feuqh?;GEfKUn2^${R|>*DCjMn@sI{LhDygx5(7K zr(6;^e8&h2Y_yg_VvRj1B#hgZLb5fP41UcPq>xk(A2}$NC&Vb7jX;w^lafEXHfj@S zg1Swh?uH3eE1EJ5mM^ktQ2V`Bn+E$ulm72cLe-Y#_geaqa_NWoS--H~YiVjV;BKka z^^z(wZ^I&oMfX#?Jxa6%YVOM8V zgq2KX&S}@u6guS(R@b>yb>w+$mxx+v_jptp8D~p8M2l6vz_Nt*d^^Ndzfa3oC{@dB zM{8fQ0^lI5@m#6pdlA`SP0mKD^kL({N)(UC(%gCzAMP@VU| zHi5i>VOjDX+j{CY+=n5D^Df+m`=C;72pWS493hzg5hqw>y>f_6I&~RdC)ZV+<$668 z+F^Lpp5n#fP(15fB$GTYR}wU1wCCDarr!TgTv~~&weILu}3-dTAgm+ zBNR@x?>UX`Wcwbi_GtV5#PmigZ~rlgh`#pw#yTc(8)t`(WDAp`DIx|0*yk2XZDOk_ z3DPz#tfse*rZmc)xQ`Wc)ut@`s_Lm|EZ>e}x=m*CBHknymi(RlM069*f`4f^D{tpQ z7hl5#Kg_FjcR=1yTobp&t6SpLO1t70;K z^_}LauPwKI$IJDryV=DP-q5#Ay`ipA)hvp4MC}Sd(yzTR15VMG%Ee{;Xbv7eQDe;H zc$c@iG{pLLh?S24VW*>jtFzH;`p6CK)XKeEUgaf$g42m;G$_ML8rL!Ul)keg1vSOvG8 zt)N;Y#v5<#m$wwdINC~4I$fsnT`vki-mVZqH0hAmK({4ZrL&hEa%ZuO;dE$1BcTCFTxscoY(2r- z7P~aTPSF$DUNyK&npbG0$RB-PAIZdiu|DBy(o3I;4z%%*HyAQGoULE;s%Ed~0#+4G zc(8qPv1kFY(5S9{t-6#;6e?vHSdsxIwMAgMX#qOvifdZ~tWKE(Ud&Uo_J%$Z&z`p? zY~!xx&N{{b5<=`imN%;(Cf(=_;QDzz-wrx9>`@?*ke0PYLaR!_S~^@Nkq{?q9;|+P zdhbFtCK3sC5((*@NN81sH3|83S{~CFvglCGVWvP)HRF0mw~D6~S@-bl{nHSr>&@6C zqBJgZ>~PqDHHal5{uMDVdIv^y?NDSX&%@5VDr& zGI^hmnl?@-@MckEtjbv(?4(y(tT&lKAR*gLtS?p~Kq4t^Xi9KrDfgd67!nJQ2doI2 zO74Y>x^ThyY~`NEMRG{vvRX|2)n|YAPn>GQA3RGL2Z|t2`!?_@YvIra1@YsxC}YHZ z!Y5Z2R}nAHmS;iZEY%1aEvL}=HFST}4k{3z=k9t+ndN(h<=t_=zai|nf?D2q(<@uYCY z`dV}sU&%`zCao0_n_ggvWmvj z5Q71eI7t&cSX^w-Bo3ni1D(Vq8Zbl*9>xR%3S&SJ2gKxMh`{&rU2C87JN=L>Cx-CH zs7t?d&OZC>$J%SJ*Is*Vw+|$ALSn(^K5a$4FXstyZj82_Q&N)~&i>|PX`XuTu-7Dz zBYalxQ4Y#iy&vQ)#1lDH)eP+qYH(lNfUJMSH|u*;g9o#!$--xqq=O@-ynjaWOwaqju5 zY{wKZB%gi|wR#Wc-8A$Vgg`9k}qUm2XhMidfz;AR|_>dEc$M!^|z4zJ`OzZu8 zZjQuh??dIy2lMVPXT%>dAc|A0_(~~%ONdscSprra#o(8Nw$MS)7)908j^}Y`+sO$q zMEv5AVvO6HaqScBNiYx!`@-Zc{50_&nTK#Dz1LD z=pGE{M9W=-uqz~}Hr`RDJ?F)e@a#EtRQmKMx#GPTE?A0!<2YHFqqCZQz4zo6$Vg=v zY?AOCWKAJn5`j&nEydD?U!a~^trz>^#Hue807nSRHXM=GRV_ZYvc+T)`J)-!iC$=U z$`(Vb?XS?JVCsux;{5yqI|7sbk8U_k8 zaj=s)(?U`TKas%YVOT!nTARslmNz*2E)kNPJA&?fS-5M+`a>xNXM2P`g_fTaD%>h< zR%`%Mus6V;)pYJ+s>S&ySK``lO!Z^Iyri`Eb95c^o4-S(@xYNWinPAgJ)_A_T}nA zrkNzB#v;RbN-u_M3#)DX8X4DRxtPEY%|+l>Vm#~}fnV&>>etqlXkViImu&GunnA6Z zFT8l6h+>)#2E^C{TkfOv0BLI2enE{^i}&)vc8Tz%c|liF*>|j*6@28j^{;wjbQ!pE z)UKo&EXN+XLo-7gTkZKAiz%N<@q~r&IvWwW1tRdsIGe1e2x!=pk#YEI5N#UdB$J{| zpgX~PyBKMaCOM6qboqLj=8adRrXC2l8!#}H>b8-tZQ4} zDo*oH-?guH*xa#Q!?u(x?^`)a3`#YC7B1WsX)yF3d)VHc<9wgKoq^Bq4B6p9@Nvsa37cO0`do%>|-^KwJ|9unw|Qxi- zaV^MtY#e)eKzW(P)VPKkM}xd^xUa-E(%x7$9l=Rp?FMSkPPBD;6IYdF0q<3UHO#7t zeYdqtCYO;f!As^z2Q8fwVCW8H+-R4*7dh_!Nj4lC4NN;54h-`)4vgOkgAN!=Yx}@3 z(WwY~UO6y4THlpldsNGT5d{$WWT6W!-Up_wfoaEqQOV?S8_2K>4UCmpnqbHS-J&OL z28O1l^GDM+Gnxd9EbT(JNSl_J1G%a&Cs%uE6o65KpatGe>Wk$Mu_yILrZjTU?rR@_ zP-Iy%SCu42XB8NuV{p8g-Cs|gF=(+z8V}`&v%+Bv*8^RVN3 zmd&KE%u!}xcOCBLNFm4WB1gLAD3cuP{{VJ`bQYdDg*y4;`bOec@14-@@>or_nxS4T zKUb3hB+T7TU&bLC9(W=im%ALL=R8_5UUWB3{j==G3ZsVeAGnm5S)XYG%zhf^i9|?( zOLIwZ09)G&O!a;W!L@fUA24uyfSd>H4MDQryM!ZVJNdw=wnkRFKFrZo1kBurg4}H=LsAh$6?G4BdETVs{)@fYYzGB4PxuIaUO>@$TJMy z@rdmMvKuOHaOT+Pk)V5gs<@(*GR2t#ggcC}ezhQ*_C7!Z6%!F@Wc@zk67sOXgNYDf zz3Q?8J&+=`DM^QxN<&cmq6}$)2d}HJx+r8v(&sRheN}%H!m6e>t6QEppln=ITzbZ%iRvT$a77XDV*oLNxB4Xj)!>u21^BN7ZoC6r}{kQ=+ zp6uak^7Cnc7+_fD^cu3Ag7iM{?7X91U#Jw0*eS@sy9&xK8=V6*Qi}pKm{8 z9wm%!k2IouH*Ge_{i3XTw>3Of-QOf0VzHM7?NFWUp^`b-Bi9@&&o4l*_Gy4=x-4j? z3Zf>^4P5f~JCawG$9h;otX?y%8E4utxTjAtb=hWKuHhqu-(F&?9@fNbN%^E;#Yfbs zCFx-aUgi@ZlIO(@&(&b0RfGU)?k4!8+VHw1s~Eu$pwYb@92ZT}=(4RsUP02~1a(>m zmeZQsR1#;LkbZ6Q?*ydpHZ-@FZ}oZmJw9*03pBTb+2@8Z*(L>KM=}R!j9QiOW0Sr@ zBXOK3l`9H@ccMHalrcD*M_*(gKHDV{}BQ@Sl~nL=d8T|5o)Vw;@&GQ=Pz%4g#XIvWy#g_(q!`p&}+985@oFd_ANhwiJ0GZ07{(J zj1_#*SOJ?lW!w@GLHBp+0nOBaC!!u0K{&3(n3Ma)Y}7oD`%&&h!>BScyF#1l)&Hjj{%Nf279KjYSRs{V{y+sXPfZfz&(&$zWM)}Jxl z-(P<|K762svTIq7gv?-c^=uX}w}{#MEeGa*4IS-#+p9`kHfCKgF>6RLQKq;Sn!GW%Z(7Z$7x%GjLLkL5+UX=q4v#JktM29%g zaZnlPc*j7;!559RA+Ha#pi0l^??0=-t`9N;iQyg}eaC2Foff6ka^ciVINYMx7aMMk zjg7LvzxHsy>*ZO`_hg@8W{)EpjWc=rJvYvEcoy^PcX^g(I6^|+A1x<+wg)-Gwqz;v z?`VKJL+0>M`rbp@tvHPv!y%HUG2gWg_I(>JaZE9&_+ksZ8{rhMg98J(g0m_+q3~pc zza$3cjwA`Ml6b^W6L*)m@Uq2C6q7`MU!5g;;Vk(JXKB1}mgWm*X}xfk_NpujsOG%{ zL8gHkaJyx5Jdtn=SGWm<2ZbbXC>B}gpke>%Pagk){0_EY9l3)ISMT_~h0Z}7>$$!S zF#@o4fH`qZElg*bd0LsLmuH3)!}A%KTXbZC)-Xq*U6cUz-lTLZ7O8#qk2+g#bN~2CFoQM-ECoK*^!%gkBFDwV$z$T!I+P_ z_yO^16+MjO`h2;J3t~Of$FYyY+LVQFb=fDGQnRcWg+aLsB^N|8#pW2>o}}T|j=VG$sMLNpJ_5Gx*KTO!1O7q9Ur)ie_ zIyNc(V%nb)xflx{sZxt|hx-WVG+75FOzpLn?LCax7;Jt_0SB51sIK7x{ZwNX?<&SbV;XyAfFT_1SCe?i%j)lY)RTB1ZNb+CpGdz=rVc`qULmwOI-!IP0Js zBZc73GR2L|A43}H?ZVT1M6s)Hr7%gmBVxOe<5KUooVc#HkxDm4#P+C8g-UOfPcXM5 zl#js5$bx}yw!tMU(PnJ`e~av#Yu!f>9%UlN%Jqs3*K&7P=Z579D=0H@ncYfMij|-j zyF**51?}41-=L{vN9eR3DMlZeFYZ|&ZH#cQh_GX$-FbRxUx2Th;wKVrV=?3De5b#` z_AOyl*ub~K3NKlAc0VU+jkmiH4L})*1~#N4h?x+Ja)R3WTsh>*-B6piiw<+0v)3bT zOf%FIrt$wdA&n3rl7211;a$}kXrQ>6?N946!|?_kPN%1LJZ%|(ls7|Dh>0MHr6WV2 zbl(m0#j%G5BLYt!_;Sv~SihwSCwMmRB3^jJZwevCo0x#~EQK17|DZWSeZ zAK;@C`pf3sue-A70Zb2apF-D`%skDP@KjgASg~&IrfHe2Ateb*>Ttl^mnj9 zZjbDk+?E%EE9@TMSOPPXNb6l=ncZco3NkwywlkchxMG(%&J=zUBjr)iweWSUt{sgy zeMsS7raDq5Sd{NnsoS#acI5?k8@@$eGb@xM>OeU%rlI2qOrv+zNcKRP7{}2EA&H2r z;BMJpkAwikO-7bX+(jlff(jxTfuj&V zsk{Tpz%bAt%((0WxFdIEUS~YV2BUqHf@}|Qf7?+M0bNb%&?56$P&pAIPI=C@#T{ZB0lB@C}J3Ac)bQj?+b)qRT=7sAGhj`)>z>3=+(` z2Es|v#e&8daQRMfp37S_+qf-T?Lw8bSH}S zHzYGa&`@i_R0KhXXxbZdL_I?|e zhctXz1ZM{+Sa^<0N?R1^IcDs(P-rZp_!HuIX2NPfAew#Xjjj9;{h}oQMF#|dgC1tk zcr8>*#RSrD^&wV%+a+&cy~Nl;yJQPW5L;-6$QG0!w$KidEhs^3p&cSyPy%cLQvy3? zsSlJrIOrL3n~*U=)1_*dp&1S7FlK4l3YeX>A}w2?1hpb9TcHHCA}w2?1hpb9TcHFo zC*aC1O=O5VG<5J3J(p>`4u($I040k%cFG1QK@I4X4N!s_z$x&~9hIO4bjk)O!NAbz z(n)Qp1vOa{XV09&Lc{=%4zZeP9b!PhJnlq5iA*n(oaUzSmm`6Bu_L(-&Z20`UD^M; z5Tq#NG6A;bbGvfnZV?aqIwh{c84?FYXy_|7$2r}F%LRjG`c2|tM~Pe?78fCnt z^cF8mfglf3${93;n%roLdVxg~;sy=u7VGxHmP|`sXJSc3dQ>}S0mV^8eNm;xM8#{6 zCGLHc>HPI1qO$m^_L*OgbDKnSy;rtK0W47UDhdE^+UZM+VtpoU5M#g>=6{ckpH5!Qn$= z{++V4Lj@j=T|B{cjt&psVZ1H5qe_jV$#5RhN`x z|2Dg~Q3Jz8PF;Luy+vPlApFdyYYP!9G%VJiVMF)VpIK-)UVmnx;aL6o=y!Y` zxM?h8^w2eJHG-^ZYW5w9@-en*;o`>;$AZCLj zI!t=o%&jsJ&|f1t*uwJz_Daq)V^a-L2^-eXk_KtHFxJ4KGqq&V@`^00brfpU=A4$o z@3*F&;{fYlQIi(&ce0VV-&*oO+Ix?3u@(gQS#Y-%#~sOWF%!5sarFE^lhZiYG{T8k zGWCQdOQGgS*&5-LmtECwt=X0z&v)epHK6w({Df~oTV{aq7WT*k2x0pLHRLGr1qaS@ z%fq6=fgcl`P9o(r!gKUO*dFe+x=%F)JnOZVOOEo1_|VDbu56((bb%MNPBtc*xW2Dj z2f1J^4dOhlQgMrJ9F`cZG>7Y>emHC+JZ>IRdpVfV`YI{z61jRY7X;VKXIF779~n^I zz*_Tc>_~njWu+WzN|*q&kmEQcTBP=q2{SF5laZr41t6{T(t%^?U`i|Jyf~_{ks!r! zb&OY2RzZ^Afjvq*`w;4ifl7<#97!f9>h=oRw=eRCU|ai>m^)@G?Hylf@5Gh%SzBoz z8M{hRu2h*;+kwk0jp_AA#;)uZQ{Iv1;8k!%T~OmLwm6}>5LO?Lj@#u zFzhTAHjJOVJxnxznL&|+&}!)pb*z{5m)X0p=| zpGA*0mRB7s9+R_zh>1*>ym^DPkwg8NnA}}+-k8zQ=1A^yB#(1sMu|30T4Nh9To^*2x@w--JDV%5 zvGrhv&lO}pZhda=SF3!k++4XN!9NG07(H5U)r`+DS6c4yf?QpGjA~_c0ksLKQSdp{#EQW6(Ize&Tu(L;pxxhz$Goa|9sQ&c)H#Mh5nNyodWk$skhGk^>mjb1HWf{s% z8Tqm@sB16N&ZHT7JL8Z>e?QCwX9xgVF7r-4ku`EkwM1x$e7?Z?Nnh|UILg_jZXgoA z^kLfA=>3;!f*6|5Wk3jaVURJR0;Hh1T{ISXRN1kQVme7Y_c6ejd@3o{p-sE8>BFKU z8>eXE`Wx`=*ieAqHSd_c4E7~T#!rajGtIQb5{gglv5GnjhprJGHtGP4D0!t~NIXh& zjTd8KUX0WMJ^@ZRbyzg&fT_iruvqWhiL!IlYOGprQGx}}&?s0<*;%OBhVh;;PVv_A zZG%HHY-^m87$YwO%e6)e$k0TM(5DbT8>w2ouUk^hZ z-&{=t`AGb!9junaXO4Sc;fU*nwynp6>1w)0!c67GxYlGhaD=%QtTU}o z^|4g-*V{TQypk?zsjX3LjD5ks-1;&S`+@|10g9~kzV6;)1NKpqZFsWQP3~o^Sl>I$ z8f+YVx^y%*s5%&rMKIDoBZLQ)%^k_kh~}kWq{Et736?T=PF4WvkGcs`SS^JUrm6ojv=;J|I+IWf z9iq}%82zEnBJ=2)TFc{?p|zwqKVgL`^%RkObf0B93-6^Q{)ZIkWP8F^coCX+>X@~d z_9vV&qESbgwIx)~v=qaljNDFgeIQ>4t=+R9Piyy>03-xr+|vc~o%<%GLVi{@ps4fO z3&yJSO6v&}dRu-1)ojf4aGJ-tj&r^MJJYrH8K6~fggC5^Y-{VIC#BE4VhB)acO^KN znLHK^oYCZAO5l>Fx+GvDYIP;>=uqq(0(V>f9OAF&gP69CBIV|!HguY@6r{T{pG$1D zwKLOS-9?LaWZ@{ZbgxP3nkGiT;xv@t;Y)t@5fG_Jsfy-VD65H}+x6B8G-)j^Xo}lh z=)+taTD5yjD1hse85)?NW@rF4Ol3ZbhPwDmOZYm(o*$@@4LN5K1Wn046MSKP*buW4{6@HsYX& zlIae=*hqZr;cPaY&RFtUJ1nvmDCDVZuzgp4+T^&W=zs)>r_=rpuzhQEe@=?+ZUNlk z>uNSN(E7j%I|3(8s#McOlPZ&KvchxP0xvQlPXd!B)+xy|VE5B{1}`pZ(0kl^7_pmv zy(9)bY6NU&sCyo0d(Tg$F3>O8fXXf4F+uzYZRM&c$R~AW?jK#^;Y3VaR3-|$KVFaP zntpS7uddg^S-8&sf>Dh8DEH#X7u0#ac}|_@`SZHMea^?{XXE>GTvhQ|T~%?hD>oAv z11ckh3}H{P=?x)CBw2GOoZ|X2t{C0=TlJp65@hWo%Cm8#5BcloEFjn*ETJA>#$U8| z2+N;}R(GI6LqIhUKf8In<)wJSBFZ-2RidwEvs9)NI0f>23k$qFJ(?-N+bx=FJAg8W z5tDeo*&HG$nXvSEE_(p|Q~X-TToru~>X;>OarQc^<;@05D8<&^57>*sXgz7H?mcGb zG*QS_&wUm{xXOGQV}iB(87-NZ^&fA|>oXo@A7UZl{D+_+Tf!6n6?^>`#VxIw7{|pz z&ppOV8L*gM;W<4#tbAIt3rn*3_rqh=hgub4;U9H0mict`%Ieg}Vt+QAVIFhEqM1pN z*WELz&O5meDTBouHaiJ@m^(r>8CPWlg8-rJv5)~tv$dv0t)7>)J@6Y<59ATn@BN_F zx7`6U*Oe_YLr!|4IoFYvglU!aEp_U{dMyt;jh@#zpIa1r#(Lxy|EeM_VeaPlPHpKHI z`wAOV#Pjy+rOw015khX0pBxhmBsBYgpmthN`?~A1Cv|-}vtL&_^aOYrI{UQY3;+E2 z&p-41pZmq%{{0XBujCEmITNO3GNN$SdC)RQwFGsv549CT&YiX@i~U}$;}u(+JOV_{ z%8(=rEn=m%IH(S3k-)xoR#aJpE3rXvF_FS7!gJXZX>p}#!r?TO{L0>k4V0(TJ{Isf z$XOqg;+En{HU@$a#gt1iXbX~J5ONbPly?%p_b8&s_-g3_mJFfd5LX&LDcLqR!Ez+& z@Zo8=j#hVE|3D353CgssQ?|Da`%S4tLC$-B<=9!5!z{qBI3zg7WHUKTAxE5L>>WpC z{c&P@Wrr*l7&9_#mFN=SX! zta6-JC%gueM+OKh>Y`C%6DL3x6DPn{`*cc<35hQRi1J>0LxR#+*t`RQ^r?dtK^U(p zhJrno~Im9gVx12 zIIH4iMVxPz*l;s$=$-=vMY&_Ka+%!(g~Jz|8LuGgO`Sr&M_H`0HkA#w^I;1&f=9l0 zu%p=iW+-^OKp0`~j;dATK3u1Kk71m0U)M-@Pkp>hh(!9?$IFD3Iq1np61;F}ha8#r z9KutXHhQB#-5gkjCscvCH=DdTh^HKxfHxQw*9I>n_6$1lL6@UY8H{V^{n%&LD;S6t zi`#qX`_?4Gh+utXd$<3~?=H3zWlRHAtkdW;A1Suax9(XOY_IZM?RjYJI!2i#5TWPx z`TQR8bdE`Gcy5v`^Rv3Y(7tS5ZKb^n&?uCV7$3lNQ#qGW$bTpRhKn@&+ZFeue)EXsp z>ZOkY!hU$J929#Gd-fbac;^9!S`ObT?~3Yfwz?~i1rqYbeDNZr+$~hHO0gtKq!WJt zr-+Tt`8Bk%b0CF*8N=pm>lA6_O8Q+6wy~0v z&=}M9D87fR>|MoVmdCFlM<-$Bs=oH#%bn$bP14Rb4kMaBTZdK4woBFqz6p;dx&x6l6W)jM@9P% z5hFHhuSg&9bnUThgC*<HMqT_pHWKX+ zzv%afL+mTKi_R}EziI88lvsy5B14Zcoap1Pw=rNJlSD7(h!BHSC=einwEG683}9jn z6il@vfqz#e#@sUIVOo>*d~!&o=hZidfr91~frZK2I3Tkr=ath#uxG?r z5E&H8FnocNl=YL*{yl+n*h6|3hYy0OjXT4c4}HwV^U0#U4=z1P4?-g4igMmcHkpWT|xa0IB6~NsXaKgSzQtwaMtHUJaf~LY-6bl~YF+Ob@p@5C~ zo@H^1OvcPPXUd}N8n&2>`eZ}}0=R<3$U&=yHe5===ExvL(H?`LWWussO+E#N z;G)0~u|(8-A%wZ@<+#$yte|m>Y^Et&LYG8;1|>*DhPD$_@&kHL$mto{F-RTU*X?^sB%^ese z)TkAeK9oJgV_u$4@qcQW%Ew3B_*9l@h>R2?W|Q1;na=`-y@!dS>CqRsRjf8sujQTT zZO~qi!If?v(-I9xKs_ZA+A^8xohR&9j7UhO-zT%)ui=(!dhf;iZq0r;^Zd8xV5 zm30&c|ElM)){^%Q1Rw}qba>#}nos)Mp&r6j-VMf$fC#yE7c8-BI|XZHHze{8e@CW6 ze@(gM2uBx6yX?kryF^#p+og9xctGnOg^nAI}QaSho6+PnqGf$0Z! z7&Fd`rrk9)Cn1+mZfE23(WB> z&7ybHpsj^b$|%~KrN}YEcx0bdF^*iIW?K^tKEAuIS!*in;9^Y`1FM>fs#tI8$nvJb z6h>dLsiQB{)Bz%&sf1dd#2^=XK(~9jL8CLB#aJz802F! z4qEM?bqhR#y))v;3>n81h|P+#0iSU;KtpDE%JR`b%%|)I1{0iMlSao5LI;lA!T1P6GHv%AKTu$C zVl$CqWY%$J)NrOeb62ibw!=$Rs46zB_Isjw)4~Qk{12KxnVr?5&OcTn44@kiPn1t! zilGmO1QsJV4Mv4N6j_XJ265#Cf*^>KNLQ#+@0B)YR=t|MoL;flcY1ZNrma`g8oG8d zy=JdQ)hnbC^=kB@y`t=k_G-H9)%40<(LF;Ob`SxV(V}L`7bW*_>_kaYDhKt_@jS zPd0E%n4os-`oG#3A1mxFHe|3Aj?9{b0)ryPEBIGS7A^^_d&kGX(>$biAm{Q-$5e{W2382QcRqieztC@d{$qa%Ipfp_sMJMdpFUUAR zJ8J@z^`7{?z2^HiPKE_jB*U6R-4yT61i%8^L_1=dCC)E1zA4%Mfy**op*;Qiz# zSqhbGoG4VNJZMW^9Uq_78IPNk$5biy!rgh8oNZ}PWIFG!+d~D4oTflo&cmA9*77cM zI0I2kUn@~XQ@|B0D2R-khJlE8_!&tx1oMDq1NRuV^;}aJ1Wz{xb26j~zK#BXNqPk_ zI`qg;(#M1St2M63`rDQGB+DTEX`nMnPJ(K{Sy^{8c1x9QW>RtW!TvU0vQKZkm>#s4 zi#RX}o<&nmIr8S}xQYZnqBeNevHA4wTV2v&X7bl1?mgioZW_#Tf*cLyKLIO>f@P3w zkCj!R?NQlCF{^a6Me!+rqt-wa^#)%bziCql>Ts{Px)@WJbao+=&*v9r5+dDwUC5bsw|0}FO z)y8U#%6&yyXkKj70?sT;LQ!rqeV^#21tCcQ$7DEFmZ}^OxZFS_%~1*$E1uGF^Wqw7 zyyPc_4`4$XL?+IOuxg#cZfK9)tg+bmY`NIT{Qf7O`C^{<$sEMxAuDEFz65zP_M#T~ zz&2YKwZPaEa-_&L%T9=tNz&$n4$TSuXO(2<6uEqCN{(`I2ovZj@gDuao?5J+5SJ6*E zhB@SjjG?U7Tg%m5-|ut<^APG3PJcY=jKx*(<5(b-VcScnfIC}3#GCfcexg}&(G^5i zo;k9>kcY2UtstTy_8v)#O%%GZ^l#BBo#|-4N+*1*t+8p9P#d;UwY84MDj}3#R9*{x zXpO?}^buAP3dylJe?;v~{h$Sv`nJ?WPwxJ4nl^{wy#Xwo8}(DxR~)KfHT{MNK@s;} z4PpeW!`~gQz9WphHT+k$%5gX=P{nFynu>Npp@CqU40M92BF(k;pXmjyjGOOlM_V*s ztHo@@5nB^v4G5Vj@d~|3QCe4N_dc2OptTlGL=2CeT}r~sD47Mcv${X|X~xSI^yAXd zGb~q_&G%!k&0g-?)K22jU>m@Twpec0HU&{C#)JXe_L9LXtU&I1A5GP1`#Un+Xj7%x z8`+$Wr|j_FBs-Z*68t<+`i~**bhl;qIT&5{q?cxZ$4jXjc4@<~|-Yw*#24h%JYWip0pZGuTLo z6Z7l3Qu}Rh>d!ztSfb?!4?yZX#p~J#`pERgR}^bmbx+9~bfx5tx-!U{_V%qXIh$<~ zgOJ6EP0SXcn~hGz6%eMlJARh&o!P4o3zi8c_Ssg{D_CWoKq)oPMXTL5tuMkP8(W!| zl7SH)+ylT2C)e>L9}FKT?Y3f|zRT7{h=;@BQCPJUU`M%x9=CBd#|}`$e8}X)5ofLD zeQ#hw$ZUy))qcrnoCI=J9013BCL`w6fra;xgv`zzL==pf2*{IWV4Y-_G#>T2WONDg z(a(?p_B&bC>4!(Hu;#59wL%?G)C#o{hdxmO*>z2vqEQr}jW`X~6-%^{I|&KJFhP4_ z?uEJ$gZu$TrI0o+_8W2+s#d*NnTDYdC6tYsWk*+tM&tDOsDfSQds( zGv#R5opq?*J}~dcx2=NedZS}?*tKe~!?v>wb{exc!Knb7ETCLu0R?)psm^LP8H}zK zH*dr^7=VZVGOJuenvswxKwhi;TF_0|6HAjUr4S{_2E~lFlx)#8G@9om$5c0Tu+yJq zu4xDcW5|#|Yg%G5yO3TtSg)eTiuJ;QY22$6{%qE9V0u;iagwgu55gps9USk-ty&^* zo~z=l5kA)%vbN%;uAQCg-PgsrI17_CDndu)rUPP>^mf43Y1tNgwhI?K7=B+ILa>bF z`8+}m{aO+{V97l0L-UB-%gu})O23!asT)l=y?aHQu^gWucYR4Aq|yG!9p2;S0h5RV zLl+X#5DVst#E7nTtl;2(K+2m!sjWBlzzM1iSOZct_&tt~41(6BNvNzKV z219G^yKM|Kj63ZP;n#_0NlHw**zOCx>8ZiqM%qB~+P2B~;0)xR-TS2J~}Zqtc!$Z~i8v#oN><_z3MZK4Oi8 zLtPECn<+MGE^IOaAt?6?%3Z5|NYgM$QZe1EZ7-$`Im_iJR zmucm*N>R`;nCwo1l0X=?zLkMJo!o5Ph{uCg9Z_x5!#JT@%jI;s!H64fs*+W3KgImT z{|O{qVU(8Wp^pTtFjq$P7`kZgjjN~CsWUYJ=6>1y7xn2X38vW0WEKQ&C9ouyw-j4Q zsMyn_;1p4px9k%hgTD(~$D%kj$({R65EDo{+9pekN@bbuTEOTrpa-uPAuF+r(ts`j z)%ak{a4js_0?&rw5VIY{)`D>0Bqx%9aGbik#({{_mkQp4C{T(Cb+x*uw4EkoN$F}tnBq^3W-R$_~|A$LrAzZ0OZ zBLTDJP9}nfWgsq8Y>U2PjCpqPu^E;$4&uE(oWeO-gIY=l>pX06(++89x=*NTk>t`8 z-b5T|hG&$rEqfd}L>Zp73{MO*%;Q{gD=#F7G&O$|Wr0d=*X9TAgx`a86xSELlnYxD za?0S9JYMjyEzB8@vf%Bz-NP&>muYJ-Wb%SeWuv@QBOnMtCNnfe%N1n7de6A>HBt%% zE5rgqi?;a6gr|K>lIkaMU>}n!I54pCp%qr5dU>X-u}V2j%DVCifaJID%3%OD3}{50 z93VKea;P+T9{UoSlHDHGvxikU;n_e%+pb_O<|TtA*{!L_Q%!BnD0?Xk7Z0Pd`zdK= zh)(L)Qfe_3CMFVff#&fUMq=)12gFjurA&t;@Wtc4G};VL#>_$$dMfM13*=M=O1sp!}_7EXL( zNqc`6vjF%FL)p}a5oMDsZgEKK`5#t(+r(bw=Iji`k_EdW#tX1)lB{I_mc^t3a5ZHc z?|IokoaduMxbp>oGxIzw&ES_NV& zLDe%zjY-|8fP-C%@3(k85l%*E*s0fwQo1PUIjIWGYm;B6{vF9DAdR>wfevys#~Mi5 zHh?;Ag|%y|FUqCdyS)ZfW=WVOtn$!7F)sc zSDMVkOL`XD=NrKAhTW0O5FRdU@)_h%t`x?S-c$;s%`pn8L@EO@3ZqdRHRDa8WBWag zu3t;mvr<~*C4*hS#N#Lppm`|fo;W9HS-4!xe0ABvq+^pSCW}kS6}Zl5H~-f}u3(j} zk}Fu`uzpB9G#R2aT8+C52H}Z((4t(yX>ENJdjGlsOP4AA9~GwsBqDmq-L^LXJwXz+ z_Kk2s7q^Xwl?tej47rkkJ+o{~Vd@QLwBw+)q$0C0fzJ>_ST=_EGO`wYowz2oogljs zLIGlg(YD&DeTN3?8hd&llCh2t3#|57Z%nR^b9+LjlP*$M^^CKP;uxb)>00Z#~fadC);% zl0x8PF;U8MQVu3cac)jlfy>KD!AL0&N4fZ~ksE|^j{?yok^3}zrAU(^@(6T~voCU` zNo47U|7a=8Mcwy$nu)5kVO#QJm8km!AEmL_B>Xy0SY#}|Y7$;8k(TO`@QnwMb9Gm| zYFDzu2i&4PE|+$RZOOuzp$GyoCsi7g3Mbc~q zhHfD6t+FqswFn?m(y+v9n9$h1q0-of@OqV#Au8gnV93;s5SE(eV3%d4)>OpdeyTVr zFQzq>%J`Cu?+Vx%!a+OFGQMGVxF4;~_uZUO!ZqOx7k8I;PB4nzwbRwEX76FG;fp-k zl8IC{^T2HOe!+BWdq70){bY)MCq7;%&!}Vsa}UNfOz1ZX@#4#JRlu1xM7arCLKp{T zkr7YMwu<5?NH`x@>ZqhFZA!9np$6-}h2a%TtnZXXyCb1Z4HAw(i%V$Pmj`ECBCl@>+#-GgzD@=?l0e%Q6?#u|tl zqi_U8;y7zpX`r!0Ni{ZMCEuo1LvP|ZYW8H+#BrJ^Y}hSn$(YQGYnMFSFRxwj!ZIV> zW&mRcO6I;~?YNP_Am1s|9$d8>m_^mPvBYUe>@Gnnkz8QuhIJe%CL9#<$*aZ{z+yEF zW@W$R(>iE6HJ}TGl6`>(K)3Znp)KD4bDLOosLzqkNb)-rUp1d*FH&M$k)-q+ZTVYk zn^O9K0C!-d3_VC@GV)+<)(H?i?bQ*^i0S+N6?0dwZsbBDyRxFnxBEcv$3Zr={qYoU zT1~z1!+2k)$FM2viP*^6?5@CO2$Cw}X_j~Iq+ez&bM~x&%3$%hMqryK(FPLj;hoY8 zguI)%9%CYIDIqEI#-Jb-QG3v@Qols%fYhHL^<~5Iwk7CgM=4C;Qh@Q>6b&8_geeKz zFDnKyZ@(yFSzB=at|PP%ff6{`U{`|Q2n8kItvgzKLjs04uB}r!a0FmxcS1558u&%j zGr;gGwc^Kkvm;qd{j7MOe;f|)Z}~O&me3tHmlMf`^*0Eg*tP+$0ryx0E^`t9G6K3W zZF}W6u{2POH)hQ*v5ZK?8tH)MzFV}KRt!daAD2|lOt%@uD3Ffv3Fx>CXk$PcQj5}z z`5B=1i;)WI&ohZx5}__>mjkryMgdJ|BUIfl=>rHF(~IN>*+a15g_vOl z!68%y3NVmY8nn{lM8ZEd8KepvJRFJ7xRPw9a#UK`Cr!6uC0xu@EtG%-o5fIFbhEen z7B`u6oAXD%uysC}KYHJ1p3Zx}g8!L7(YX}_Kq9kUY+Sx~u(N2tnPNp>`D!OU4U2yb zyJc_c-FUcu5gSEV`YRH)gkuXaVOM@k4Z%{43i!lt@v@^e8nYhBiG+e()zO@lLr6^6 zz(Z|C#obRZK$-+Gpm`Q?-?Q|0(w9AW7tyLrn2y(zqq!}53`US(*cAs1U?Vcrkd2xK zQw--*bUv(hI3|0s1%HD7(WBwA1frp(_{?^|oU;@dR|Tr)NMYw_$zr?3 z)kJ0hG#V|m-D6sE;8sf#;I-Y~YQa!&F10n4^Md07E!pnPILhrcek;Cg6rx+qS@4yv z)-?rq04K)WmDSuOKy#U44I|w9JMIyIi8QWw#I+1YT6#3g9upiw@ExWsaV)d9T~91i zm_=t%skZb`Ek7xyl027e#F@}68*D1H>w4N=AbXkx(dG1Z5p5JhHz3oq{B%Y&cdlHa zrBDO8O^dHsUD2|XfV}wC=qokzkD{|;z>)%N1}!%h$mzfhT=uM%n|Z>NVe^l>+JJG5 zoC9<$k*H5;!uUF1HEXW{^cGEKmhbHOI@Ud6Xu}&7-7@Gq# zsx+8xF)aD(_tIP?$~+BnctukxKq)xM?Jcfk(fP2ge)`Jm>e?AgI&J4fAs%Rk+1eAW z;j|_9k{K~Fw?;DwB@$cSiY_mBf0mZ9@SVJ*;b;FCs?hDdPeelw0pg%pc+^t4f!5^V`0w-mJ3PmY$`O7| z@A3Rx_6i1}cfX}~?7Iv1o*jP1jMuyWrgwPwE&Gm@D!uzCwXo4{**m2_Ro3-Dt-QiM z`7^zm;**DKudu=EvoGnL9Qb4Fdp}4AjM#VoD9!RCsdxr^APo@cqxP~$*+%#irUhw3 zw=3y9;(oyu`-3< zMTiF3{N;JctR5>8DFhuZBB?@uu?oz@=Cx0a7K{xZXWsh0OA?G#3(m==p25bqCf$!V zvc{2y`lk~f>0qhV*@+Qhl9lIBc&p_}28{53{4ceJ0;cev>d)*S``P;QPYoY3iKeNf zJlZ#hG0P0lY6;D`PS`wvG6+vGVu|U{qd`mDK%>DAXrm;f({jy3T0_ZUr=mK)doZG` z)_*G|DL70+TNOwLY?5HCFvc>{dN5w~3C0qsV$>P{T%G%h2_VvEL76Fai&?x7|hX^xg|N%E<34?r#YT1r&br{ zS7w*U31Jf=81ke>lrqVg;Lu;@oNDY+l@N%P!j*po&J_vn`4b(cQ={2xcZ7k|r=ay? zbmdq6XekNn!n03v!EGE`;&bu+xdq~kIVIlU+#J988GUm_SQIS~AyVWU-9N0Ksahe6 zxz@qT>XsMscYjFc?cszf=1o<|NhJuXWlJbTp=OFUJZs`Z%|wt#INLge|ExD-wz3mk zc;xuKf;|v8f-^N8>x!I7g&Tj|%JVuHopQ*#gvl4T5U0U>;?8DnVmqYMLR?=qvl-8y|rqR`WA(0@MG7VN?z36>v3`IOk z0v7$`v)=dnxZ0~O-$*jzooru*TV{KujX)ZCg;tesTqcLS)Zd7hLlBgkJH6`uZkp!9 zeFw4WSa0BK%40GUCr4qE(iQ@oJ2{sa*E_JGLvV_mt+L_jyR` z)U&WxLZWP@%5e$R1|*>ltKh$x8uxS1Z=HPsshWm_q2b|+=G8>un#>J?w zFFs_>zyEvcVj9v(?##QObZsAE8``RFLD#KY%t2bDZfOT_y<2(JEvB5h#bsHy^4Kkj zcoLbsTN-D&rQuxJEk@9~6}=cC6qo8&?%n!Ai?LEuI*dqlLKT~Mh6i;q1m!_pO4i|2 zS$R;G5_C{kRvy%)1RYM5l?QbxL5EXi zj${n4);qwHEA9#x@2h0K$vO70+Y`bUq~(hk_w*8EDb-a%_z(|G94kC$Ez|j7Bv_k9dR}2iy zt>q?txV;#!dg$@K)p_6XP3#EMB{HcI?5ZxnY-7^)da?rCsSPZ5wR z@_hPYyq{+?#0{9#@h+tc>CKz9stWEGpcyehz=VC|P4;VtHm+x}p0S(8CxT9(($T42 zHHYC&gh`U2jRJI{MZ63po8|<^Eia##6DbO%Rv+LeE3?dXtZu7E{#vF63|1SCUnP%0`*WG zW6UWOJ4AD$pry*SXsF6(;v z$|Stf1;LDF7pW@aeKyR`@qME)|FtRGev4EW@>7fFAM1vEn4i$uI)jJyi=imLF66f^ zsC?Xqh>~Bnr?GEb;qsNAWsU*rgf1g*#_P9JjJ%QjqutOP=5OvB*9jWRzunufOS*r2 zq-+n)!L4EbmfUqc|0})yx{zPC59@D-vm}Q3+l0K&oj}nUfC87&xIm^bxjCs};sr*n6G%9}X00C*A zrHLV+J;}(VaTMO^qP4|{MYuGE9^$&O@28-mt|yqFPh$v5^6Jr z0u8+T$#e~MA(g_A-cnN+GS`B@Yf~4XOQKDv3sDy^Ehw|;4;^8foal&j1=S}fZ1kVJ zQWPkJr<$SwcdZl!sRy)>cw1t!rW2M_ZiS)%7S{Bi+!cifItUZkp3r|r>9!_2QDZt5 zu>#In{xRcaB_D9QJt4gcjSinZF+_iu~GMaHa4nk<on)_AmnJ75i~Uuvom@P(tw~(8ZdFHzJ!@bUFk7K&eyYv64Xul zV_Lr;BG|!T<`wQj)_c;?k*CKL>I4v4rLJ6@7Lm!hwaR-twoJ_((g^dvR_d_~I?36NW|4j^LM z9uT(D8o&20_&sAvKm6WN&hERyVqusfS!!A`YA*n4a9|BkgPEz@iQPaUY&s|DSW6Nv zU=2%dUJM&Bt;MqO=*OzY!nI9wIPNIBA%u`}<$LNgOWe&CwyKREM>x$S@Z4B^&S*yb z4Rs$ueOUobvF2sa6q3+w`Y)>Mpp?p4f->G4DC50>GTs{~{a)5HD6fmWqGsJ2sUL%? z?E|$qy1F-@WQqU?rkCdgnf#-^QIu`(Y;-XXe&$Dh^uu3#>O&v+eA4~3l(IB)XsO%U zlhw9%vn#20EyI--&`-mcevFXB9ob*O(KLMQM|d37qqe1n_ub1QM?0D+It|D4xIvF% zL*W^HyH1ZFei}aiLp;vt(T#JAtDADq=*4LGlwBBatme;f-+RBb07yR;-7BFQ)_x5@ zc4xTn$3J5Hiyc2OraM+DnsgLNdzSJso=FIGy>l#9_{4vp!twC?x(InAFr zkAHqC2^Y!)nxur@PgRQOI|WjQ<+61PYvn+o7ASK-X>c4u%0M%O)N0Vs;ERC9O!^gQ zWEBK7Yj-~O9P}(ZU#@&C{3xBgB0PSai^u_;e?Uo}DifFkmhiArLZn_Ir7V4L`2zyN~`aCkKg~T*fH>Y4BE11LJ^S?>&b5m;B=NsxO!x zm;M3-UtWhvc9&??!>hiq>2ZlKPOfSd$acwA-Mgv|O;y246bXV8A@sx#dh3($B)!-w z!euDCojb%SaE{eX?zVGR4B@DIJiFwuRg@@BpG&s+^r|+$5L{M6@}CP_{x6?b zps|+6;xthVe}{jDR}mP>Qa01e=5_e*27jY*+nI=21itP{;Af7+q!{eSykMJa-S#LNNWi-{ZPP?;!!c@GJ)h zU-HP<#q0~yau^eesJ+*5N4OU>`S*xe$ZM?oZ)TYQ&rhmnvc98!-NrmyZHq>ycs=>IT*dY47ItrJiGg5T`Gnoy*E$&ZsB! zgF7h2mwf(UeeNQ88h))1vNE6_o3WQksh3N^0IxSH}hdR$kQv$1V8HNUY zkJuG|?&DBX#ZU3W92DwgDo@4}av*ke1`2Y8S|kdbg?9rMEhvfh0uPnMJ&7#-3x9wN zr($TB<}8=^0=}rW%)~1Hm$i6i3>zXFmrf~(hpExJO!3BXI$hTJp0Bn}t=G|&vA#wK zJo^WlC!m7)@sg1VAby60_%y0}KI`@%Y;TYB@ zpuNjo?rbBmOzgm zUrT#&593B3ELbIFQogzJ{7{~Cd~M!I0Z?H)l3sI=Qk-sObWVl&it=tfC&KG4qX7U! z&L*?MWl@rd%8H?L?B)J<^y?QxnGSM!Pd4 zpceKyNw%j@%f%tE%4~+|tx`+efsTuL>d|(ydD~oLl<0svLK*N{^4Bp5ln}6rNCyt} zxY+c;1a8w){+E)f)q)aH5KN35M$~k%fjJ}s1f>hde?XH;Xo;88=Xo$K;?mzdXpA&| z^Dqxl^C)B7nOPgG(8@!$3K?uC(GVF-1rst@P&%&asv6A_MrM;*nqC{c;=lo3({=F5 zU?HkRMtVrWqcMJ<{e1jSS30l-SNh5Npw{5|M7*iQj9hv7GQVVzw889S#~X$e6ss7&2}C zsfJ9h^DBnTq7AGbGCbV(tQ@js8wvt@Q((_`=Qu7dbIkNAek#kDX62vgN^g)8c7n+w z22Uf18Ip1E1WWj$hTM*XfzF^rmx&ZF?R|hdeVMX94O3w}gQ-t;D1!(WX%KG$J;@cO zbZ(JZ4%WuLbjXyPlbZ7OWQt?!(n^l)OV1q*ZDL3{F}tU5)yP%g*jhU+)ySCS3MH)k zMC?o2Jp6TAHsjy|wPQ2w17mSg@sp5zb7D3aFQ|>ygz3S}(Aw!?UX2t36{bAsuy6*t zX~kOWkR{xvqaK}ea%wE6fVLRh95@qYd5rqZosEsT@98|mrWG0^=%a&Y2htnz{E7ys8xW&CJ`!NG}cmX!ZW>luxEu)+di21ww? zC}5&z898jf2~q72lba56`Fk#`NH}^_Uuv0$&k~vke-@Z+P_%k<5rDHUm^qF*1|rvi zfw0>h$&@gVY3dlL%~vG~9!(twjYEP=wzbreLJN(VHvE8(R4P2tiPaWi#26i3t|hh? zRu_frNcsSfb)B*@$;rKU3-PJe`SENYwSPy#NwA0d4dhvL8JHNvj=XIK4i41Ppvj|d z)(Yn3j$~tL3&&zDD7M0OyoVVB;K=l91QyVV(&H9&3SzbyC0CL9-r#{zTBdO{X;P;8 zgz~Y%R0gls@d~LgN8q7=&zl%kP>~%KpI@82Twh&dF+xTpU2Uf)T;{Mj^I|Kz-tB89 zUD*$%kN9g*1ZT0(E}MqTW)36J?7xUeqtXbm%QGoLfZv!_thz{+Qy)0E`8*q}%YpH?&mW+KaGd`#4M*qhLg(+GUJwby`fqi*pVX zF+fEKpcWBMvGSO#zW0XXMNmdHy0?SlB_F`vjnF1Ok_Dhn>%ekab=yEpOgdI}ZSwB~ zr0+H~x0i4AdHX#+Z@&vP2Sgbhy8`YuF{~ZQ9H233Rl-kBDTKkt=~|4ykjYW?{dH7j zJvp=ez+VA^YAxE20JnN zd~!wWjrXpeUe1!s3N+bXfPY%6fPG7QgNU4am-{BiY0X$6o*VB)7lC@Pv?A&OXBYJ_ zjxWLu^}td=Y$8)rj+=DzDU8l5q#I#K#WgjUqE|jwO@K+uS#FZnG69CJy4|4!6_ZYTyRlt$lP3tNt|n{=QO-u zxyKabQvz2MqHv7%w?C)1ZM{WsDc@>X?A!CIcapcPgt|!gLFHek{2H-X8c}1c?m|#K ztsJf1-=y`{AZRtZKbl{9EbD-H2}f1M0*CD2L?am)Np-HkwMi2G`uEbC#z(ZPA`f?K zb*HIbX{|T*N)Q|yLBkw=u3-VetIu`*Iru*Oyarp~{2hi#qEjZrD{``JX!TK>0jA+{|J4e&db=rfj?!{YzP$o?PU z#Lr+OSe^Tn};n7->CGV>_%h!&IGO z@}|MSg@OWg3D16k)lHqtRPIH8S_xm2x;7Fv;URGgIw`YB=diY{HrpGrVgC8_4G5_m zLJB;F=~pP78nhA)UxR)qM^?)*Tjk(1*(yg~%dxS_k=Jrq=LUAV*T zbF8m&G;29pwOZCyIXHHsD#Opd^D?HZ9E1t693$WgrtvH0ue+z%Fn_~63&rgGEBW2X zS=I~1ruhNC>*u%dyKa8NJqrX5nV#=)onCgT^}710*5nwTq)oo+B<<e zA}%YRqanC`800F|3L~}j;V_KUI_F2TdFO`1Fj~vet(7qxhHfp#SS`nJ7>L1KfpEN* zV>k@swHy<*9K&IlsO6ZfFgmOdPYDK%Z^ zz>vewl3O_p)3qGyYGn+EVO=f9OfAQ77;wm`YFS^)F&u{VwHzC2Iflcqp_b!{S`H0^ z&S+&{f^r~oyPvD(crHEjYc?z5fXvn!TOW{(we;bDY^-&2Q!U4EUTmu6*j&po9FWbm z99wERh6A#tmgCA=j^Th@S<7)%Eyr*`uBzp@x|U-&AXh7g4altSY(S>Jh66&tpK%=& zn2X0N96ZZAIiYp1hse*k1G8h5?5~!R&=2>1v1B(|-J|vR#XTt(oR@_s#EHb--Ha#^ zL1x5o;%|BV%J38y=l;&9!iAERfe^%PI;c}kZh^^-zg}v1$)7Pc>o{SUD*l{sci1dg zJpxIA>5kyy$=AYiTnX)XGc@j-VS$_`A(qJ{Jgp|zS>_W}A6TFgqnublp~Z6P8sc+< zmaWAvZPP}TV=aCu=f+_fYw^oA!qzayTKtlo7PTB}@yj;x1%_p;#V^}HYM5g!e%V%7 zE$fT;<=2ib*g}yE$U?&u9Bj(eflY%LORpc-x!e^NK3k0-_z)gmIlvE;uS+56u`+>k z=r|HwPhT>T30+yP>N%nuFTj_Oa(-QoSjTx_vVYnhrVlxyk z{u3&yPZ9kN|3~+zAMhF-5iT#5D}f31uHyk3R17_!01*P@&2^(vHQ z-hq&>wdRk2nZw2#0Y&}<8(+)D0)4#-S=pcfD!vw5l3uUG)Hhm$bTkTc+7v@rLE^oG6T)?MDdenDL6S&FrS&ul^Dx$4Xg0wh{MV{^~FBf3}zF#;#zW z1b_9HC>Qo}YHU55BKWJnG?GN)CUpo4T^YVC@$lX+(Lxi}kqbdEC>Ii{yi;D%X@^Sn z>I4hTWecm{LhjTE1!$)gzX78-)G;2en%w~@E%+Z7p|zCD7XO9jLi-Mr169ZNTWk8n zzoKoZ5MC`aDS2N5B4JUBz)VZ!FgFa%j0i@-H@9**I=@!>jw5saLpq#Q0rLl=YMePnQWW!qJ;#%ttwU6;rQd>slND zDsptUve*I?%ewcua!3_+kQR-H8{Qhe<f*FAHCTSr z^Bo$2*AWzHzUQ|*b`X2#XNQkL66$`3nn97u_+-#ehO08VMOy8iaExBDE=H1iLnWsx^6jxvUj7+9u#QY zUXWZEax-Dk4Lg|>q$pokfDkacWwYW(NI90ZXHzi+c_`Mge!*!t zb`;o@9ajtt%PBDgl1B3WiYim)w*ejxd6imJ3Sv_{pWcmvy})eg?#k!fm_)Ql_Y9F8 z2#PxzhMpnST4l+bc{>M{fWk0n6Im*RvXy&VNwXyp?3Jt$%1g~$BXW65y1!a3FEqSa z!ZB=A?$C0Et2S5W*k3exxHFd(60}*N04Q=}k-srggO$n`vO_)apvvG28gGT3|5-0| z_yzEN@ojrJ7L&6Gc)4v;%d|)dhFi4RQF^1mE$ija$eHAF@S2u`7o)PXPo{0zb^UdW zF6+ORXR6?Jk3n9iTv!t2x-ex6;4=By4m4TAqWj$F8qPT-LKu_OtYHcgM2*AvY+;lL zbERKHH1?vFc6|{8fXXPZ;MOuK>P~(rd@pY!P8br1U>g=1#iba_nJOIcE*gZ~V6U%aF7Pt0T!zCjz-(uTFjixBlM?wMibJ^z0O zEY$KZKUC!V`a-SjPH;wn+w!*_6eL9}5M$V3c({+<1kVGZOB=AIcNi3m{>mLts-64- z8|GIN5cD7`UAu9Cdci%IZn!n-LLy~)0=%Y|5KcP2^9`?q0 z!o2Wr>G|aD1+rat>>f+9rS3jPZM}yEV`0Nx%Ua1Qrbv2kc`7`Fa*L^j z`7JAIgj2v15iBnTpb=%bEC7v`IbRfjy7tv706}Ng0?>F_$K`@(b&n@h#9E-6)QeT1 zL*EvF#x4q=sj^8gh(TD89F#8#KcL06V_eB~H)m5Km^Ix8pN)q2rcKKXKSZYUWp z-6)>g4hLNxh8nvhSF*{Pw{ZtAH}F5V2a)F9nE+pLq}h*AM4Q0+;Q9L^d%1 z3~+=}KJ+T5m6D4@=d~_{5ka()OE~$^3R=0S1f!L?XeC0A(@LV0CoGd?ca^jc7NU+x zW!J088o`0h_$xQTk>$=}l4HRSFUw;@mctP4q>RS0ciK{cD}FKhdJb+y?P9I26^^fL z>Cv*K0@Uh1CauKEB!f$}iqY4a=D;rKoPHbmBFwn8oaR-X66vSUwpm*Jw+=S$3_F*R zd`a78|Fv?pYR3n72re&|NHA5oqh4<7_2|4-2bLIYV}RD`P?$$pSJ|Ew(2!BY+9W<0 z+r%Et8;5P8%xVD`EiFX8w{)T$%TXbg;ALhO4g8tv$ynyHr<3~5a_YPD)jNH6w0Z|m z4#%q}IusVmCsVQ)^krZ8Pf7k>@a)ur53w+`4q@yRECzbf6 zYNLa#N=XUiktvRNt(YRUBo)Ip(8vFJNiq&{8@89;Zz7<$30{KKIf*Onf(YI-TxcXd zcDiu#fEw8e&!L~OX-S<83$!IX%a4Tw|NDl=ktlbX)aQmd1Z!e6wOnp4x3on&g?(QZ zh^9?b$a`GPo4WTIc_?AD_q=C*prYevW5=0C)!Xgq7`9%Tz?__j--3|5!^&}PSXII6dGg;qhNMA*x}AHQJS`f zT7m@#Pg7t`A2iG525!iO0n(!x8#}~+(#rQ((`XEaT|&1h<^`3_-gTIT22-ts$kK$0 z20<8(h-RRiPH9GUR0nTZkw7IP_7*P`7#<|&aX_t@(Dh}05Gy@Z%IeT4zvUZyW_y=1 zG6U5Jao5nflh7R(+SZUe4;RhD*C)^mpo9`bKp*Jj&^r3)Ka|$AXkJ@lLyw!+;(-Vc zmN}fv2u$Z7GpF+^OiQzLG_p$648{@19v?w1HcB87GzM)Q5{G^{3+JlZd06)mcD%al z@ZkXqgp9U{9nz)oa$z9bFoG7^9`;BENRc~AOWosT8wENU^|&0goDxMEGDM>!nmdyi zuemeXKns%;Ys5qHr+p@cjrSOrNaOJc7mdf=Nk|}9OusX!S)<#znE+g@Aw~Mn4H~=6 zDmLMmm3Gz-)x_I8oTsH4FWKG0b85D%vk-gVB~L{d2vi@nt3HZ~7K6%)MT}YB5`W@j zA8`yd^VU{AN@#<~gYHD0=X574mT`_H@>_M~)(>B^JpkeN>6Yyw$e7IybCOI1GTUqk z`pA+YZ!lb;Dzip3dx%a^i$PYc#$nQH&}YJxYHQ{D(<)#q%um$`tqo(ebB8;+4)G*4 zGh0ns0yV9GnpQwf-5`?2O@1^(Kpk%KyW}?y+9tpFO|{AI!)X}}8S{uWvFvVxHo;;w zc6QP6lNuR1(dY>@>WK}zQAzd549~dGHlPLS4ucWBXGKw%^GYjwSiy*t5`Wg{>cyH} zZ3#s1uz5#&%ck27OPXMK=lBJ2q6uXN#+ZgU!rMhdX;e?_l~-!0HnSRn+35n8-2H$2 z?h-LI9t#ocsvcH1-&nQ4&`yXYbOBD*)@m;JjO#(;XhZk0l+Ho`Qb$@@+{%u$g+&;D z)l<93Dy2~Z*uz}0yO45Wu5Bu{UYqO$iIn?)PX;_z3rn^d@29 z`_*AhTU7>iExR(jQCaF-o}}H+oqJZ=U?nn9*%06xa=1D%^Xy)SdLjuUoTAy={H%fu$`(%6pBcIn_2M~%~o>r|~K!jd$t z#hGkKZHq1$;$HD;5Cu|=9ek<`moItF%ZTKNx?OTggU?Z#MLR-8THe$oC=mq0%>15TveOYGrb^Ce6YmsI3esd}D%6RQ#s_-DNU0h@ z#}0prj@M!9GCX=v=FEl`2Ug-yaUdMM=OYPxU1Eme)pHf9@C;s^uRnuV=jzXAs|R5P zd%F-H)ScYhs!ieyuo2G7!-_>(^G|^lHV{IK;UpK#3{lb-k00+{K@V|k_(61rIt82mR1H5eeV+A*Qz6b(q6k>@!YEQ7Cz|k;j?>ahJ5Cip zT{(LVAj`&ynfaop?{8!ki)HebfW=GzApd{v-UZCAs>=6WkG*$2c2#QUU3ma&Z&1Q% z1HlJij@OfwK7cuBYb)38^Z33{NlHjnQk7Iy3hAbyP}F!2YP_Ni9<)PCD{X6w-L^#A zM?hMmq9D>uY=VXs`@}w|QPIZ7Y3}bo=3Hy9UA3!HAb7o(kgUDdnrqH6#vF5uF~=Np zOw4cT61$XS$0J;_67VvkLRv<)qA43J(n0|SCIe9RrL1@^kkqyzy8bTytEv&SU5(O$ zYN(lbCE&jf)0kALA*}t23PNWuj3gYqpv@oJSe!l39t(v}%xPv!y-8!pTSt4jF}smU zgqqtvB+-t(;hC@zPtX{@7{eN}X7F^{;Pp0KbDaEToQcBB$|`cUDON|(79C!oXxNsb zMN-i#h&!*#yBnR_c+iL!bc7@nE(LO71m@5onLt5Ri7uU#%T9{YPH%ce9L`0^um!;F z)ik7;=FON1m+HE0!YNO6=1XoK6nJ|f+ zvqM%4)AtVl={g0nX#;jg_NgU2VYaSM?V_oXq)+R3)SbY`0PJa0W_F^RXFn+c#_{m2 zM%YW75r&DFx?Yq;NT#1-g?}J`+IOZgi74Hm2v(0cWw`3gn5)0Ayns zqA3lGM53eyJG?cKY6`_CIT<41v}*d|??j8;dj3BAETz-h5PfDhw0)BM0J67P|1Jb- zj#*Rp+J(RnXPqysEwE!W%y?KrDSnjdOLgh2FH1}H&`GgUdMgVJ5dm4tbe3}|-7hzl z(hjh0pOn@H`?0G@oN$_c-y9Qz@C&!$JSB$$57T3mw@PaN8upxuqPGgWwc*^o?B<1B zg2%|}t{vW1>!Y#!M)q-c?PiMR?*WyqkKeOWKZtGDHNV$HkHu_F=6XD4#ttl2L&T!l zv()AdK+&yT^}M-35W7M*#?CZzx<>93d{YS%qm!`U93l~j@VuLvo~@dMPXT00NmB1Q zjYykTl<0}8J=l~{7>xr8;HIOc_wt3dq9v_7?GgLg+M_CalM|3CLRLAv>5$d5gWSlF zc9|hg5)doYHK(@1`==R+4WEQ>AB#29BCxxZ9(O;j$fGgYR7_SW<}KB{6*%$fnYT$( z_H1s6lM{;+*(1MbhrDy7%XR?q8LKre$AlxyLS+-^ZKPH4-TA%GvcV^8xH-vg#F8R2 zo%3uqK(_GNv#Hwk%TKJoTe{*W1@3BgLoNU0SL3cV3Y8*P2J0&eYu#NsNv&i#RYZ8> zCh%0&l=FK}7s~(Hu@#vQ!k#rb(0b!~$`QC5R~ZoT2TBBvU}USk#=o zqgfLD3*L%j@(siMa-#_z05^j?wQZlOj23Lv=y(8YrT28Qg_L_v7j@1-#P+@QPFk-L zPo)8qLXE8P9~gfhvg{cAOz(B0H6siIExq3lVDYMjs=5k1meVWnr588rB2%IfnYl?R zS$s}3g_UqdJXNaqQ^pNEGE`6o8Qv>lhU{JwIT=1pGHY$N%hV`=^^>TO9^3`J42I_u zxp%%)iX@L~+6VSoV~6mYKg!y%hLOH^tTac_o`!hMam~%lzgzjEl-^~nI9z3AsTCOM z+~`xlAnWOXtufiig7L`v0ZIof?FUiO8I%WOI}h1^A0Kc~a?ad2&_e1CuO>B%NQ5?K zOmUoO-QH6*VX0bg`nP@uKX0=N3OM{I?`D_2XAac!&rhL!Xl3+0Q$S-4N-l{SF8zp; zzGp}fzS&-uM)T3tQVlRq|b&8xNU)moac!D+m};Ox~sgVRn(Z_^na zZm=%ONFOANWG80~>$(MNw6!Z9FLVV1WzMcpe!f^+Pypnvn6O!{2V*kgbH(Q=h9(F# zmq%wivp_j(w5vjgfpB<159h{B)5K!bX`Bs3bDIN8L5fflKEJ@viBsO*EqSNo<5VH9 zBV1kbZpUN#DQ3tWkKE7wp_?e?ALdg~9 zy{_GBpEwP6ota?ilt$Q^XfH;g@tjjjs$}Px{b4HDHWI9X_G(dXL zVO4Dl!z3zvf84$|E#|OMiM7EGqfCw2H|^D!F(M-cGs{MbjTqEe)r|}ePNF@~?sdji zl^7>7kcO-+2SNJ3?)$|1I3%Yk4HeeyoeZ4b;yYkJAJx-qBDZWq8)FR>q(e-0^L7lC z$*(k$@)7aTx2s7%eNTfZN(_tIBMR$QwBjwW4!d#7tXX&8 zun8Ni?gi4l_JtEj_eajA<`FD&Z`A0`1(H5J)TG-NCGvG^+4KCg+To3vW?$6Kj=+O@}k#S%?D{;EvwCg4tP}A+Tacv^~7Z`HZ&0Rsj{q< zY3zbk+JkN~iKog21VIiI>N?=+vcCF+qz?9%Z&HJ(*IUhQW^8sDMqxgoX3Wq*WtURT zItU_b11Q*7N;PZQY+&*0od&|>*bSo`nli*t&p-xpRf9^&I0iAS? zl#sAiH)i#9;R&!%L>@5VfH!TzVT_4Q!$~-rFD#JoEomS*nPj#`y5Bb{c1@9WYlHo+ z>C(!SnG2p0$E~H68N1$KUpRKX$q13|;}LD%z+~4m%|5Hd^rp5fm*vc-vbT%9O>cHh z)0-Is+gWKSw3eKJHpB3F0ZnVF63@c+j)s&Uu&Fio0#OFbUWbq|@S6cZ@nF)LUB6f;4VDMBYjPzT>q&bhYRVHOYGx;0W84jw zbvgzimniKaC8Uy2l;Um9Itu~#@htHeQ$Ra>DSItF+BNO9IU@)dEvQm4PL~_+yvyg{+PEcx-0o0PjUV~8lTvpFstESfX<}cy$;Jn?Q#mFEY}!}SVV)+rX81S(}Fn0 zhMDjdg*FDB(R|0~`|lD~r|U7**=hn@z+$;kZ^C7{cf_hn@AoM*+dx0dvkxZY_L&YlaP0 zxrtRbH~I7MnVy?GeCX}(=$K`0lDz|&^Z(zTn>-;6@avqL;1g;ikbm>$CY~@)X>KBa zOL~Kiy3E;hgBVfP+S=eoCzGbRo3Lt`o1E;XA}8l_lat(olT_pW0%PB-@knL+Rd1_c z`Zdl?Ofi!q)?{xck@mSUyG-D{y(p0=?IjXv!ujdFB_?81CHh4o?R64K-%e#?7jw{C zde=yL$x@R4`)Tv}lK^^FpFbx8d%gHLD-xOU_gX;k9+NAYbC(%T|AprCw*=AbLeIb6 zrLU2&nb%(h)^ggqPYGRCzU20n-aNei3uWoe^!k^AcrLepn6lVTIOWD4ed#N&|JScP z_=)cXzuVsTUkakRod2q*Z)Qct+`qyK0J)%_i4}moTIc9&@yuY*XX^#O<`n=WOS4u_^EZvHC(NY#7= zz+~uATWQRs@+FK!CzJ=wPMju_G3s((e}bR?Bo)T(8-Z%J z`)<{$7~$mpBs>bj=;V{BHz%giShJayC#yBP=tAA0A6L2l>>;;8OPLijzUnW0h2jwx z^el431 z&IZl_;@BW!cQcI0(NQ|gSScBsp$+l?s*ms=!lJujT+q&YY#@6YNK~|i zEzZ~)plS;`U~C*NTE%W*(r#hU@M%O!)&V>idNE*GZP z|L|bI18u(0>>tnRL9VO`#s_o{6E>uc724sCGvrRXAgtX84+)zCUeZzp_b;G=dVgfS zM8ivT6g`FRwE#hW+^z670SrlxdH|2;3N;U_>AlymRbb({_?((pq|o>f_fHDGw+p@? zS>`shku*qMM@AoY9c~e=lPltxEghv4?~!*K!^}<+fuvITECgH%>?>KgU6#Pe7<1ZD zRp01z@s{qO&*q-ECSPX1v{8+AhH>0l6m~~vS9i6C{)m)o%G!^#EUN?P?th!2Nws75 z2v^7i$l97`r$M@n&)O(0m>FV(TPf8P8oNzZ2lA>OntxTuqBd3CkXNORy7Pnz=V_a& zrk+Yw*c5gQv9>BR5Jfig^oTmz;mk&GZ4eg$55F}dpb9%sbv)(_0xISe&(}0kN>5*9P<=~=>XU#9p>L$rC(}tOMk|o=Q*G*h5~M_}%(tcM zf3=p7h(+@Fp>&*+%-vA>X3hyG97@QlHdP(TtNPabt3qsBRi4l@&YHZ-SDKGwmA4aZ zQ)LPhXCpTdvJxM4Na;ear|*44en=m2kv_6v5mavuU3vyKOmOB}w80M0B&3*)T}Vkg zleGmb1db#STkw5c2&04c3sE6+ev|DTuy68!5Wvx{4*|!P2-~M8=^EJvh3Y5DPJWX8 zLLmBeqiDm-KeNkEFC2T&Y{zw~eP8;0#7oL58gf3J;vi!Vpf~YYDESqYthJOp$|IGO z^edG7oJw}5_b8ZvZB?q%4pFD1gj=EH$5pboZAr;4N=i&gHiy z_kR7pP5*cl^q{uinQ(>Xekq9B1170cDEUJ>5xy;85-Np~-%-iV)CCB%A}g8UOSYnL zpZlhG?7RpxvpG+^a9NLUHipOzm-SoN)6;f$!lFB#ghAc zNsZG&$s^*RMJ?>{7>}rva&#Vf{#L`&j3o^x{lmwF6A!=A+_Y{(PlHcMXV^xpk|ho5 zMojc)18a>xrA@1__HEw{hlGUb)#K?YlXcD@N$f~y*$0eHjU=fswTF7Zlj9>w-KbWyGyT zy92eV*;bPin?BPAb3T-p6iuPt1%0)Jixw|2ljz+yNo=o48#*~IO0V&^D|BdFlz!)b zxVNi&a1%!9m;CK2ci`Dy_}f$5nQ(9Lx6f8m>?nQc-R|2p?wqst``dH1+{{YyjqdH~ z&Yb#!zdg@{Li)D+*36oRZ*Yar)RJSAe$n6d+gvOCq`&Rc{3lBP(%<%I_7$b?@VBev zi(x_dk6l%(Y=oqL?r-mL$8x6M zI;9=aFpiz4o(cI6Sv4BW5fPf&EbZj7cnuzcK?(<~*VOUa7zj71*6MOSphD>#6i)v9 z3?#aGn5iiIZrn%tPBysT_8tb+>hy*`VIcjK8a9*IAwlRT=%mgD)xx!nXcM1EN!8(5+-g371Q7u zeK6yJ!3Pe2N5r+jb8uF_9)_g?HD{q?$rNLk4T7bLAmP|}jdz`Bk(I&9&En1&jflVZcZsdu>Avwy8hWEu4lX9CpVBJrGUQR>LH zC{^SqQqv$2I|16Vh1)&Uk!r}aC03D3pC9rYF_m<~RK!svke4SVz{_CBuCg_>(nUaR zNR-eKA~Ar5O&tNwzfLVwbrP{+u`J|xL}#$IvopPe6P2GG*nd5<{^#GzZ)b_L@b-`q z0{<<-jV3IVml2_8VK!pxaO_ZNid?KOjWNvBkhM*(A*a%Zv)h;VF6Z`vV3>7Bl7&;7 zAQRvjV!8q;$2ngd)C&K#+!UU-{pkvayo>z%m}{w4mc0PTm{E!pVi?!ng}l|qMC?ee z0XeA%9TTd4h)eOG_=~jo1-^xOd|?4P^ciAA=EFR`=q^Bog)xsWdJA7*gv{fMuEG}# z3O13X3t>Qvp>`iDP=@D5JqAuI;n15fNxC1Cz^95#&!ykRo7lmV=z6%uq5)H}D341` zzR^%D75PSjSbSrC-I8ij&S;E9tFGp&b7x3DiRvuE%c_%;IIFJTR~P03Xr9n1kt%=! zog{-yS&jl$QqmqWt~uaJ69n@?0UW(!btf)ykROkCr&G7Z(mT8&$u@&(>bB1^NtoLA zsjD~XoOv56up^*oZ;vaMP94BpfS#_C{KF@1XXJKDm@u>umGvG;xE`xm&DdyFBWx49 zu(vzy)5h;~ik*R01faVo#!@UW%sZ6_imAI8!v>2=a>rTe+7ljHhFPh|(MFQyf1QBS1(Py%gS}oP?M|RH`kvyr9NCuQ-OP7YAF6q7n zM}k1od}>NZH3+tvu0_CdIF9-@DOCWIeD>lP&?+_+U! z0wq${)?Ih^ue#H_11<0D&feiRkwpc5a+hJ5*`W>S%z$5RYO^MZol8AV_rF&&C{A9$ zTb|y^jU{NM_l{zvoMMa`qf%*zZ$u_PC2%=0 z)DtKEL~{tQ>TW~V!X>Z~C%@#0AB>d*l zYfq{h{<+zLl*u#D!jGCQNcoB5;p0Tw4g-Sh)*9GoKa_HjwG3cQwJ4d_NMSa#q*hOX(^<*8E_22?~P_UyosZ)})SVdmOY@8WY^rmqY z(OUM5X=V#OMbHLji!_Fe125*#18DfNCD+g-mfT8GI_%wa8qaH%wuBBcRVC`=stVER z6^yyn-yY&pCAkljEHNoPGaBXG90{V@;;H(Igo7a&z1$`wJ5GKIzz6oGI{J~8FH98 z6mw^6$!u`BgbOb389wgxmwYB4cm$`o)f6qvW?pZt2|uS)OZYTx!N(r?`@g7AXJ#%|-w;J5mra(%;Sz=+zI8m* zYF62D$Tb)9OBZ=IqmA9K`+$kXRf?>RHVDs+-Twvacd^{`Sk=r-kRMrUb#tt3?4D|L z+tzL%d|`R(LJ_4CSu(Wiym=x+Jwboh0~DtyQ!%OJ}twYTkqa|Cll*$X85`M}!votDB1Q#xb z6T(FTv08Gf4x>3KIhl`7=Hpm!k_U%6IcJf^(zn0)p*M5hFQ*`rYKFWSwA8zM98N6j zUjY&sAd$faTD0ETsHyc@fhzp=RN<8l5@40QFR4>8y6q%dKZ(}+)Ow$_-sf8X=-yv` zjr4gOUDTcbnfQNP4$_ zt}VBC_b~FkNo_a?^lfC9crq>aPBai#c^FtoLA3- zvvG;z2zQk3HA?rkrSxCi`PL7h6ghu`Ob;ZUp`{M%=k~nKVT@~ngwY4qy#=iK?Xl*S zu;!>E`pHpTT&8}WN%3PJeE74`aAWZ-ysfV4as7PSJUDxi`nfBiHjSv+DSgey-*P=J zG)9#1wvK{1A#bl~ocLf6j>w~*#M^UG{4@Xk^EYFH0p+Z`?Qwq2Ja~I4Y|T)jHu3iC zl>Xc=K6)#>jTkfD?l}Q(_o<)P&4at`AU+AlIVt|wCx7-%3IXM;yzOy*{ycblmE&z{ z>nu>ZQ{$Q4_mYclJiqRyH~g%F!!|u{ub2;SpEnQQhT^e!y9XA}DBh#id#v>y*ZMbp z^tPKB&$PZ+<9V@-=fyUjB~8WKD;#gXXdb*>6L0IVG*(L()_mN_$6acbWFwM`uGQ<_ zv+u{OtgH|hF5cZBNSTXtRm{J!0ErEd*vakwbj9UKf4YDQ`qOxFJYkiU^Ba59KFP*j zla1Yz@crgk}%mv&JsYFElaZdp;gD_O$lU3@;1+CM-3#@Ep<#}9TUD};B< z1&nQEPgk7eC{X*$t^MWJKDwB*AN$mPpS9oT+UIOCNpI@yM}?^UCA8l!y!#FBeuwwx z|Mrdl#-UI2Pf2)}4DXWRt*q-SJl@@Ex7*t7wsz6R3?ckSQZB+914nq1k=DzyCA8bm z=k4iz_vij?Dm>(~<_E&;8hZT!x zk}nm9_g_Br#?K(tXum4FtA;oGhJ+xnWPH9*tuC}yS=ofz2o=nrPPN);tzy9n@2&(+ zV26?DP0Qfjp5E{H@qy1^r%;ZSNa0;IjG-94K7Gi+sL4`6u+$(}Y7poETa8>G=r;)Z z9R$#w{u*j5qJ7c50^W;+_aei4k;D7IZ9jejE1dQh3U79PgYiPcdm->w`A~emOsy`n zR+m|;2o(lWms;(zR0R~-$1*R>rNKB@x4$O8@Ep%axiML zN)W6v2v!*ch!;%3<$_?jL9pCG0Nv@Yp~h11UIh4y0Dr0QUTSzRb$Gw!*b|4)C$zsz zcrP=&ml@v6fPbOKyH~CDTB~?@>2E{|18K2ZU2LtQ`GofhaRQv8b1^H)Qcv%y+9fBT z4HKJxeBz;p@53@&#P~{4^c zHH+#K+BInxl9R(epe=5x^7%rcz0lBJ=*ay)@4Mw@Ow*-e^F=~?0T*?*(4NWWWwl?n z_KA~%>@tAct8a#VH$WKK)oWt&nPh*%JCA%CaSod=72Zn?@1=(KQjyK$-Jy0ntlbW4 z7m30+YNx)9&6hcHtKEfd$$j9?M~~AkFrp?CY;uH0EkJ|0Ac6+Q{BnsoGo%)8}^xcW*{f>7Zy%9AsUp9}`er)Z> z);_X@bEn%V?-n+no$mMl^Pk^ZIWeCvQM*g5-6hs;JgfSK-t^sx=>50vy!Ee9WAo+n zPPN}@?UP2D{zkU6SKc~fcOHCx-}fH-Ayb1B@%aq%7@0DQ`ko)3|Kk0(KZ^RCFQ0b_ z?=Hi;%kW0Hv{&A;p69{m-}=j`e?g6&h|g!3#|V{K)c5@O{BQpHU7w}h`SST<;l0@K zUTkKmali~61)pC9@0|M)WP&X>=hg!-Nzpa0_eFMNxm zX->rFPeOmskI#=E{NU@+-}B}3C!xPHvjtnztS;%%lI(|)*$*XWKfLR8@A!&qzasrj zl2tR^Wu8|gAG{u0h{}M|=A*%(_ae!2l9=aq%S`il@8O4j=1D5B z>|o3%)JG6wZXVC1_uu^N&OgJ$1D}(6Pl@x5r=Kc${1U!h5<+%-4YA@t#G0FIB5ctyOG1wYp4Vz9PIuZ@GEe)B8*J z|I<$qrmHkzw`pi(Jw2P7X%_vxNbN7O_OY$iK06lBaLgWXGj+`2X1eG4A0NSP;{WMJ zF<=7{fNMH7i~e4wc9&VZOl8#WDv5deP80DCbMt6TWu{B<$KU$I9oS2@M1Z@co3={u zImc0n+h_23JN?aos;K>nwO?`V_lxefNPw>^cQei8^Y6dmGq+$j!RkF~jEwDY42}!^ z3+83;?gsF7`kR5YO6{()c2~J}yCvr7J59uCna|t16@T#gcm5siE)k#i>}F1eUk;3C z#PG&(0p8lEDn?xZ-tF`^1Buvj z$pnoqTvO`r#iBQTCqBnl#^-V?&ZPI_zxeiz&Q1hK;f-I;@NVx;ZKuDPf6vt4^0YX9 zW4$G(ds*_FU^_UCHn1Gv8u_U^ejPAHXp}XU9YK3tO>oU(G zVNJ$fu#OzoZ$5D2UYs5eD|V^TEG~c}D`QTq40S?0Vc!9f9YK2N z(}D|}Qj%@~Uit}p5V$g-qCXTYpdU|dqmY%wK94;7Ym&&t;793xqYWp52}hT;Mmu(nqKuuSF{B>S!ZriIleH?i|`; zUE15M+611uaC*H0%QA-a1RD>%;b*tJ_xAfAT*N+;r4`VSGz z={lGAyPW=Z%t5we#>n3TZzyyaO!$=rp7z>ZF?1LL(Hy4(TdRsDBvh+L>Ltaj5WB^l z1;)UIkVq3Kg*n;g3E~ng@U_@LU)Dg@qNF_goSIvP90-LiLu5xWDi^@aKk~7!s-m#J z$6{YYn8+t(@EBO|86ZNcg-!T9)XD+k_w8ty#Of7wg5p=xp!#22SR+AIB5TGEaE8vs z(_!OoSlI{Mcjou`=u(JTdYA!98DboNA$HYyuGM$Mg&pmDYnjN2U#Z;qhSSS;r^sFQ#8~st0f*`%;5B>9?x5q-AXotenQ5z(G+Vh55)Bv7pBm*zR$${j z);CnIq$f?LrQI-wYvDq|1lW{^#INY|yGjx$6jW(W;<^cgNFkwAn`)y~?JH4+?d}E$ zBU@@;jV@~in#a``5XC3ft4ZnQBAs|Q+_bwvYj8B3%8!sD4@C`Y6y{{WkW=v|M$Sg? zGRlacFW+s#uH={@s@)Mq8!}D_-45_l?H|N+VeJ7)l&MHNEp&S)o1|cm^tHRwWAxHc zJ*Hody8a?=1RleIG|{m9r)&h##!`DN=*A@IiN%Kv70|38XD&U|i)Ek-io?JfeS_@PK?g*$5{|0~6bz%!%$`fKBgHmJiipS+OBOBl17k+OrMxZc%PVs}k?l zdTXoD%(d$K+fd8!E41xt1$f!8s=lx@n5@5Sm#Fb4R3Rs(1_3^dj;u09zVPhinMc5x6R>0{aWMw<3Qa}%RdJ5DG!brx0#dJ<-+O>PM40geV6 zhFmnpr>>OXy!wJhxJoKTPtl$eiEb%t9Vv+ny6lb37&B9_5R0xcc=XDwBVlO5huKZWT0CfAMq21rYm z6QtMj#{O|^4=zcxNtl>~_@yHm#M?``dJw}DwWBnq9MED9lc170H}PIo1m{yj$cZMg zHZumbZ${D%wQn(onRw|NMI`%r8|2YYt_+^ySgKrv9a2SzTV>4}AsJN~Q2dNZhTx$Q zh(KiD+g42vk%Zv1wv~P*Yqjuw{*I9<+^N-~%1 zt}?qS!-*&=PH+#RA#!&s}h1oeggb~Cc3F>_I zH;I`H%71XA#Wbzg@VBr9VIM_gsZyXLsc}iK=ZPEM*Xb97miexJ8B40X9pNrkVOmR@ zq&=dshAfw)55qz9tXzN|(I!NeA)LbgMpQejvQCGJ;^wGLDoAezNY@>C9126CcpUUx#ENFiYhq7dFx`^P4EySi4$vK& zR8+;VJS8?Lb?X%sVvOg)sWgOvnlWAC7&May7ofn@6#7;tG?gQ$C7Xre>1+rTq2!#; z)1b6L~bFlb|KtB_byR%z6B7-*7j3e4~{aqR8FB7G!lWpX)N7m-fy z!M!rOB}sSy_ZCW&noLZlv#g`&ZAuywm)q!DX9%81-)5~KgZD$>^a;FGCmN)Wp@Yr7 zQPE%OMi!86bj{yf`(th%_iuE~i(RKTQ~aZEbj^!hubaL8jjnmIn{>0!ztJ@>c8hLq z@Naa@i+xBp`~4eT^I{*<&8_~8u6eQBif=xp8$A)A2Z}d$=|)fV=3w#WZr$jK-W)34 z+^-uw(VKgVH%D}%Cwg zOCR@dbj^!hr#DmlqY8A*i(Rjqz5b1^d9j;xv(LZLH7|CHZf@{zbj^!>NH_ca8(s5a zAJfgP{*A7Au}|sdHvdM~yx3j3IpE*unisoUHwXP2UGrl1>*kPuqibI5h;HunZ*#_QQ!z_9tvD+VuHi@HOyOG3wlYeA2r`|y0@3qp@e z*gQ=F%q5H|*t$4tepT^}9cgYYwx}I0k^j$&(K_>C{XzKMXJ(#sX>9kIQ$`}4(sAt{ zrAoaqY^NW3!}5om`a`BqTFwCcP8v*|?yub(`XEmwzT8@AMTLcJK(z81O3 zx;2Q&7;VUuPZFsz@^L!z7kHgcu;J9A6PQD0eTPn9r>Qif=_8|guG$LaGW}SrJvaO9 zp-ljwfM(U2Jwro?nvp-IO&X>{Vp_VYF37AA z3f^gb($r(@8g0>I1&0QCXY-cTjb@BRa%ecai)T<$o(!|e00U5~A6K4EnFamMO~Gq! zddz{0K`U<~YeX1&q|9CA@b%NI%wVT>K2V2fPU`VjW3Z8Y4ly>V4hPrNj;fS^1J9)N zwfGD|YmcRzDY8+Si!dnVFDT)>0BVa?nG zKZc+@D482YllL{zYO~Oc)8Secp{T+VFB$Aw45KQN`ev>)OUx_Cb9+axtM7|!M6yd; z5YQ{MN56UZpR#><_a7c_-pKtIIrm?byZ@k-Rvsen1JodPe=>+!$Oo#4hS@119OR1d z56Yt^HxD)}9bK2#%RbR+w{^R@uq=PAzOR?m1=u{fGqAx%Vf6y@Nt&Ply_40b+)3i4 z23@E=_1x3KHc*Fm{ZJ7jUL8h1F(uKG9=Edl^=b8zu;*%<%UEmKe6|8KFau412Nz{a z7J~r=D-7Z>GRtD^mXm};*tmc< z=aiF$a?|A`Q+T+G?@cI1kPQekp%{9h=(`P}n7Q&Ch?!6Xh+H&f;;VJO1bwFoMX#Sk zea#Nq$m*)iq+u61!)e$V1B_eu1M%X1#I5Trk$L+WA&B^VoyB_iqE&M0dn)VatW`!S zvMEzD(gg{F#b!2*NSfc*!NkgWaLi*u5rEBo9;_K=kv&1H+~#&MoAjfJ{Jv3 z8G7p?!npA?t>^i5l-8*99@qS=}C-N+uaBtkban5W#B$EpCK)R_st~#Hfq(;AieI zff1(v#`QE;>2tV*K2wN(xlAEqt@Ie>Eqfe~ZQb>op<9h-#V}oKQvpKhXgO z=`D^1az)+i-|3o)Y^b61uzN^f=~sH&|2`;ErT6>CoCu@G8b|iMDX0i!Y;ny5*TOQq zgr9|GZH3nv1}o_YoxBtHbQltnB7p0N^tiC{0{Lk`*yK&&hO(QN{oedVgroS+#7D5B1`-m-I#ZrM_zAWK!Rx|Ao z*D)-7S^r?6G$}Dc10Ofz7Vqi#%=`$d%7Kr><{Oz>!@H|}q6&vN1l$M1W7Tf=BMEj_ z7x6P)q1Thc{Cmm;t9UEvE00iB4)L`?DUEOfPUbJd-PNjp!D?Lfbbh-pv}QGyM&7*! z39{#UQaxGau)=3~-BWmNQB0K0JawV7T0vQ3Rlr@vvX-&@j4~Zo&rsD}hwTc}`s;9Y zg_7xjV67puG^8IG$uMfwBv&>%1j?bj`1h6 zg!G3G-NAtXpkbL^u>2Rsd_{ZYwdvJ2>jSS16!3&7`?)@l>^s7b+BI?dhHqL80kx+4 z_{}pcHo#v?t`2Hi8}uSZSEh_)t)I&@Y=meK7P7s>>rWs20(CH`icn~JM&bVSAN4Y9 zeJKDeMuhCXX>eh68!b9iv-ler$wV2}s1!(Dy%N^mM+Angs{)u~M>~b)C?m9X9VKO> zqV%L;6|aO`ti45EPPJ9NJwiEUwS~2tESr5;dymU%PwgL!`^526`dSnR%X$!Rpk-{# zCrJ9cEfQjJtI#4rbweKLWumHRSef!H7*_l5 zkSXD%(XHH=Vf9~ODUQjEjFZZWtO<4FZig2{QD}pvgYb%!G{a3Ug>KHnbtm?|M1FbS{o)OF`XFQS7=N}U|1=ShfU zdBHc-F(KAO=Mgo6TR=M|O4gy+h}_C>pq@4Qd^n91$D{9QjQ}sGvL@OfimHMJl#&5= zQLEt|N(Tfi4d3b>X;Ogr(|9pVwzDx?QYBzIN2Zs`%?Pl5_b zj=j=Zw_vT_nSre7Ac~z4pC_x@x;!QZ8>xV;rA5Gq{ym09sC`#z0VX}D;Q<#nnZ$mn zdQNahjr~jP@>pYaV{3|U+#fS-vHv!hjuy>OOg8ZfcQ^Qr#YsYW{EFh04suB|ddM{; zJ>8MMNFJC<`Z&|Hc(;ppqnqU31Hw+h%eCgO{r;Nx>l%Mu=db74mAFawAFV{-Yz+`d zTye_rMZ-!=?E;&bLq%D0_<~fP_+#^i5yE3cl+O<+dSOmNI&nb=`1~P*#?I~Sz-~i! zFuU5M={y{#?NKo~e+h1LF3gfk%#EW>^BrK*T2;0b%E**a;BsyH5X}?HzQ)?C+6E z%)ln$&9?0#PH39?XM4{e?^6AGbX~$x=yzgRd z^1d?-cX{6lM-`#1q|5tGNz40=j?>}B6tukWn%gVyyQ*|~-%HKB?|c(0@4J071`Kxa z1c&R$JyCUs#!%7wI^2?u%jNFRzkyp6*3v0Y7#DdMi8$fJp&`&oKYR5{?I>t&Z9J4S zX`|tqbW@so70J9-+(pi{w0{qBCU^<8RR9UHL@99!)821TZu}TZNc!aEh%atmt}ib~ zZHnrnH64xtg*dRm|3mW*?Z~oz)3bDeghB0q67}25ddwCE?1oTTo-sFo!F|J!i))`y zxkwXoG@c9Bc64D&j_9KKM1d}L=B1}g$>`BbNSH7dBhZpVQjDN(bc_&rMv#2~BcP-m zBb3Dmoc*nmtp@;bIyn8V^2P}A#ETJB&@n=}$q3YLj9}l4;q2&mf4Tx2(b=>oY8Lt$9udxI!xpiq4nvgT=&ol}G0Bb@#z!~Wb zL&j7^490ghn@DdY&{F?E-e^NA#T8DnpB}_G`tIP=oi1V(x5S0?Ob_QpGPBlVnREoT za*_-4%O_ZvK@(_hNa}xrW_2(b7n`M(wPu7EFr!hv_2z?VVnaR$gVi}ufPjH^w}(NV z6Y5Cs(!E4JDg->LB9(c=_yxZis!CsqNv@YAW>oyLi&T-(jAwQ-$S^zbkTGm9Yk)ye zwbQq}dUEDMH~YHa&Gc^RjT@ymc#<-l(@*73h_92?a2W=+GYl|pjmA<_^a2snW^@{C zp%h6dspXX;kT6J?`Ek6tAjR;MaO5K4C_}r?D^7hQ#rY~X6~JrZ+(xE6`4s)G~!3Wic{R9**v$dfd!8#KZsO(Ho zJGD98_XSx}@J4#wUHaAO91P)U8sciU0VCt$fL)BE8T?^_I1`4U+zS%;asj&Ug44YH z=IN#$hY-$DnOCi0F>yPryXZ|w*>9VZyCag5Q0>cJY4EWA*TG{3?~6)sWQ0Hx2Cn(@#+*#EQN#gES@+cd1vh96^@RYG0VfBIAfMarw)mU zy~2sT<)O1^#_VVsQ#hnO_b1N8Gc6CkF@L2dasvpN))Y>>k= zg1ZFVG;ztMG5+1PX$)fULxMX$*CuPlLnu|rPuqZpDjd@hTpYB8__VRc&Im-4olnR> zLx?ES)-;vw*b!lt%?1P=ez-a#Qc*~@9Yb&V!E+8;bTW&OY|Zp93b@uPFZ&+b`M+=KPk-_ix-gr&dW=a0ka*^hslscR}gIgDoP)xQ zU4#Zf5I*yE8YQ5o%E)bPVlh??^q1(zs;F;rT20ml$n{mFuxZ;4>CFK1PH;(DYH0tq z`jXsXsi~2Oz)S|E&Eas%oL*1w0LFAC0S@k>48)CBJq_+RyzlYoGyNn;$<)6U_$muj+Q# zC)5k-0c;V`FZ5LA2G5+&vH8K{7C$)dZ=jJYoK9z8;LZk6yx>x=O}96772Mu5r>XWV z&3Ui;)7hFB2LK8#`DwSrG0P911l1=>VYld)DZ}(M=U9Xn;`M<}R%81B`(?DuYkZRM z25!<3Yg}sn3?hr->6Uc!=7Bbn!T*eqI)vBOZ}^WolRqU)h~fF_%MEDvsfdxts4W@$p|N#TnL@UD2Y|K;g6+nper5m> zwg7?9YyzQi$G|2}NeMv#qZ)~jBPH3z8wqI%q7lv$&7Hyklp;AM%St%1~tF+QmX~kEn zS)xuH%mo1ZO!~36wcyN$E((tx#)M&+t0X#0V;F(uzhOOIyL~ig05fBtKazqGoVCbW$AIG?8r zvgRDeRX-aQcVVLhhtexq9pl(oD(8a0fq-Zcre@Mw^l^zQG$qE2saN1@Nfo#x>5zwo zNjV(XurmX>fx6T{WR4hBH|!-r-Dvqt_5m)e&K;@*dMJ*#f%^|1`#2t{tCeC~?}s^L z)494tbhiLPi4K+Mm{CGgy9PiI&0|(dS^Ihg$Ms*vQr5~H?PJogk&6-F5D7toVNCm= zp~)wQT?;n}G}Fg9BVac$w&e5ImSH*1eGK#(rB2( z8DX@*%m7h@xqbx*;+|gTd9`lh@ymOA0H7?33hC969?g_Lse`diMFWsgpXw|btD%SP z!!K)JI0*ReI77W020;K#=(#==4ILb5%Oarm00`#oOM1KPu2*+B!>!D^O}$<6%#_o& zUHzYWyXCwprFA(!(e*R9cBHmz=&h!-bS&#f(oviVvBXp%zYn5pJYj=2e z$}++1OFiLs!^?Z^FjARCxQGmY=L7^B3cs{h2g$}MyQ8$P$`i(F(K*gW2<*jQ2drlbP0^$y85JHZo4hmf^EH;tCSBP24I2f=r`4P)0`$Lf}+>CO6_NkZ`js>Io)@U^+v?c{W8?Oqk< z{mce}x-lQ#h~+TL^M}%pQB*jRNl40rt!igP{nCF#<8aE9v=mP|>)pE4>Tq0ASsNtl zgY)zYy&zFuPO9g|Yq)fu8z)>$Mp557lu?Kk`eq^>?4d`*JrKLH7GbtEs)-V7qIK!l z9jg3(zN0~18&u^#k%`^0K9ECv!?2k>TXRQFEUln^>)|3D;*?RKVrXjP1Q$7{j@|2# z4$_g{VEYPLzp(Oq268ek~PR<1o^i?>W6Wl5U#6V!tgWKoNF{Ze{{X}dI&mK;`s z7fg%&Bm)b5OHqWQEp8yaA_;obtfn0@CeAl~s^B`h*j2)J=pxN^wG3cW9l){`pj5%` z3SjS${bt6PRoG4IK-`ty{RPH9d)_l4BDvc!#Ng$V;d&2>mme3hB9H%>u`%qRCSMol z8G{kt9QH0JoXp`Wkk_|p>|F_anAod>G-8i7y`7P0V?&sP3d6ENfcFnbew8q+1|wgy z2GgX(VLcFW7+xlYHSB3pP;>%?^)>oUwwU|vppZe#l8?awc-(r4{4EGYo{==-X_;uL zR)I+kKzYrJg9Y)iCXjy35nXcC~9pEAf_ei)kLkP>`v73 zq!a3MVaA~nUexl-i(1a&kf_DS=7xb2T%5ZJtQOAU!Br2ysJT4lx0k2%vHarz%J`G- z#tYN?rV$n{D@V|@px(IGpP58W%6PBP#$5E7qtU~n5fm)ah>4yfjZGi2lBOM}Q4^+v zkXBnP>HljW;&c+)q_GVJ>t!)mfj4CDgQ` zbuJ++1FC_!HcVd!O#iR7&!!s9-&g%nqjTdU!BnG*e>pNToJjwah`%91XcRybr({d$ z+_>+n!PG48JN5qHwg1O#@4NMW>dptwn)*QcNU&>W13gyY&`0(^Yqk;#ti=B7|LiR% zQACj+?P{Vc$TJF(-+lc@zqw2WvCP}FNRmoWx$2KTAkO-iFT$Ry)4gBv3k;58H~~Dx z1h=Tgl`kOWBf$tlq)oN>sfQsKlp2`>M005XXPiPZ3bqGPR@)=N4kAx5DCk1wIegLD zHKsfS(c8WnC@u;W;TcjZ&x%>_&`<=Rb|_VtC*26s%GSzg1wR+9knF`;c12qYsm0h{ z;4=BPHOfrUHCpCl*C?s3Ad&vvArFyqCbY1WW*7FjTZ$E~)t6>GgbIi9FI&ISz7xr+ z)`IKg&Z}Nq3QJdEO2wM8n|Z}A#Ut;dxHJ7uKPS2_^`{q)`Myt?*j>_&yk=<$6IfAAl__kl0I>8F8vte~l=P4NxG_IP@6Ldk%M z>el${dAj1y2GrzAB9`NeKYS%qGj2Cr$>TD&^clOD-G?}72;aLhiFn>DzVXF-;R$T3 zH`3^f_g*XNM;q6^5r`M>y>{cL|MYe5d+T46rmCtRM33Hf`=8u?(@z`*XT&(0uB3(U zfJu;E7Y^0lDi;k!uYHBAj`U}W9hP9fj);`etNDjgfD=#+^&-#@rKjU-P!zJdS+1u? z%J?T(7?j7}X(p!NmPV`_?OkSV3PiiS@((O>QJA+ZmQ;+GSaLjPm88=Ogl?52L7~}e z{6=-as+VI-$E57$)2xp0%dd{`%dd{`%dd_o7(#&q3GoBNjjGKsJ87x45)3*iWQui) z*E_8kBNFHtdw>HGIG3&RDrvs25TlAC5OeuSzTslaF-+S$O4)Ku zC9BWb<5;!P2FPHe8#6j&wulWqV>w1(sB?ZF#Qk2AwP zRakfEnFGaVg9R972x z9MrrqsA1Zq$686MG;fPaWyBuQk>CbsDpmb(5?#tC3YDuk1Hi(9D1Oi3m<3I^2!|(`iSq{Z zIrX(ns`K3e=8LHQb1N+&vA!^Z{{M=cPg8Ewb`*U+T&txe#s)fo|4M`t!H&%T38WV- z@u2t#I77z#Xw}2clN@c(x8{aN)5)0}UWD>5+2%5=5t%ENxsoLnwR8#G)M#1wcSxo^Kclf{@ih1Af>H1bb+!5BAVOqZtJI>n64KAe|M{ zc0h|n1Z!S&kYD^mt}-Mw!OzGqcIit^mD69M>^h_xJQ0}c^OE=sJy120tPon$h)6jV zJ0?M-GC5{T3%g|xxMjOpUizdJ?Z0%&rQMg%NoH3AkEdH>LKm|*0(!Ro#0Z^CpSXte zjRD54L+LeBr5!}e;(5o=QHTUlk|{jJFHOY_Ekzau%%2<{K@$%eLi0dt3>UfLl*w#H zA%O##o25G2ma6j9z+0^xf-|5)I9o)Te9NrR5kyNzF!6Qvf*3IrBZd$kGbLw2et9P3 zmuEtLc_x%WBVOWLm=F&No@gz(v{nLP0x_WkmTY1x7FS;wL`)WWCOv731rPxV>y!`f zDAswHng`m(&CCwH!Yk7&f7R($-nH|jj5o#HdrDb`T@HV_KM7h@zkux;WzGU7=!nA| z81T$bMOrFxu6nWYH8}lQb6_pUK45Bbp)H&dsJukfF^A$3T_q>X%%c{IG*h+uKC6$x zp!jBOGqtiu?zscMN?Jx!%I(YoRlmSu@uxv3aS~f>PPUqzXyw7+79mwivn4Jr)&?A0 zLmMp4Ca!CBL3k%3UBfIUsH{y1B6rM~=S9pQBw8O^MihXUq>rmW5JwBE)B2`vLV&7q z|EU(dK@p`KAS6^2AQtq)DvqkkFlIg1Uf9wC&rO&xk+XQ^EHsy96)6S6>1N_sAv5tt z!I*OsYB7-6CA;JCMd3Q*BMaANun;t*Pj@NM0fJc2l%?@4r;lKj%Nq_0q(=(B@8`FR zpDU*Xa-`;5C~rjGH)Kx}%>8M7hL%$=Un+_DeyQudrWo zxxYlKVPP|l3Scc-%YYqY96HMn@n{?XN(_K0c#Hj>k}y+jqu?iw4&6+#C|LzX;|zJ3 zMOo#Tcd+Yd0DeANKyNzQ@AV`Q+JEA`*=2|8^Rn-ON_Qaf+M`mJ zzOfz3NHXnEW-6uS1ZCSa0Sb#{`;a@d4;ec8eaJ8(!>=BtNE*{zrm+ORbA+qGY(KIm zkrT#}jrP*-M{aq^gusksa~$CZzo&@>`)+2(f+?EzSu@Cl1q}!ba*GzR06AP^Nq2@& z)gi>iHda4V2)VfL455E)BGfk*LVXS)4p$dKeGZ|%SrG!|9s<-CWVrP?+_*fWxb?Mk z*5M{@PRX`sI(gv-#!Pzj3+AG488&7uXhfxt{@u*Ch^-dPP(SgFmp0z*{ zjBLdtyB$sDmSim2W+uq!LW+xp;(iAqpB%u`ceB^6l_f3ldH{Qi&@MtHEGor zHZ*mKmTYLUug36tIz`2q^fKc}DZP%(BCo?7lXd7U60ZJFQd)3oCp=;QMWrx|vzy|z zjEH7eD~=BZX4L+SIZ25J;n=0j6w;1y`ClHx<)Q13bS+iW@9WBpT|Qx)+}9WYx}$>k zD~`YLz29Nv98Au31}sV$L2i zPzeSK%K-=z;E?`rK1jNa?&1`;#YWLP9c3bhAW}r3Ur>r@`dfIQH}`EH-fkJ z6Wo*alLCO~Hs1pj%X@%XqH9otQ4rWvL5*;%K-S356-&szOghSnv2)v>2^m-5o_H4&g90J91#a7=BF ztbe0cfaVlqK}~?m>F3H&kw;osFQ*5xCYKTyE?!VAnwT~0yc$4$xlN~w(6OC3Kv}EV zauepIoU_36amZrq2@*tLgfwRVTx17SP-{I9y-gYcy+9BwANyAqp~mW4q9{F?dJ*5I zkN=Xc`cY7$~evl?`AC%BKJ7PZ&FY-go zXX8{qEpQ=7zx@85;q-4F{H;yAfA3?};q;%Xo5m0!LHh6m-2F+vUi|5M__@G8C)Vt} z$BAE183NRfex+OdCjLq9c>rbb@6z`j=5jDhzx@raACGGvA%Yza=7_5AcMr2?JA;Pt znI3=r#3q|@rnlWk={4!p*SYME(*1wW^&^r0xLOUcgkfj}y8L|{c4)~IwlcNC8^7 zx@2OO{y@aS1@0kr=2d7PIsGgFS3{TLid@0wv0$|N%IdD%Je8&=HR#)htfBG{tk`B z%BEGaZVs|UJw=BoPXil%*0~21wOL%sOpFSsxfQS>6U8xIu6idCt%{MsN89)G0B~dQ_H< zVh$(utWiSPE$_A7Yz*{J&gf+np zF`A(j9(2?Z41j_XrzKUw+cC;GO12SdL%n#~s%P3LT}-4Ih-lEGzp0Qpi4zObztlqu z((FmE^j#WYb)ypbHraGnV5;Iq5Oq#yIPoafk#O6J>=Hh``4A2b7ch$p#1ncf80 z94@xJq$vS5ie~+?QuS6=FIqnB#J;z%12PUEfff9Z14MZ#STY`G27wLW4J_{rN%spx z^M_DmclG8dimtM)O2pYzB*`*oBi5HXWPPCMGf@Zlgnas2vP~mwQ+2}yj;Z*C^H#=% zBTe=}lrD7cRYWN92Hgrjuu9n2Q%<`s!tGcghv3HGm8fWbDXlaU76?JIFJcPdjf-tB zjnP|ye6A(v4pekaOJy==T)_|1T=!L1dTH+6%FvHMVEnSC|M8%>xVluoFcoFKq2jnf z&?#=P;^f(9qp0joSOe%1VbZ5dNwZEwD9Xhml0_>6OGz=?3>AjpFr8%urWze8r+^!@ znhW<))J!`8@B{QOIYnn|aOi@R|l9>kQB9jBI;`Y96 ztSR)xMe8_yZf;^q?q^{MoJx~cFaRssi8f9}7xQoD-a3rxCmrBZ2Lmh@&4IX16}PA5 zTjzjMTjyBZQ=o=H3|{yDYIvQS%m=M=)r*!*=+}f*w)yB$to2kQs*vWedMILb#jG79 zfrTddE>-vGj}&@^{8liSYF%&oM8tHtAsXwW#WH{4t@7)WI;Ky3Y5T zI)~>DeRel$rP3w(Q%7l9Hf@We?2Bqx1SIW^tF}zhPpwDksk2YfZ~0%(&=kEi(R1iprs(<8wo~*6Sg}YS-~d!(ehmoNdBzm|wny7d(I2RA)D1m4#}xh4 zLWxp(>hvjk3+S%?Gbs0=cfJALWxqkbUN)n5=zt(w53s)_K64qo)t4vB;Hu3 z=fGS1IBtd>#t4dpSnU9y<%_XRAQ5Mi*jp2tb4wn=O zm<~;5B;Z3eevvc4!H8<14H(Hj4V#}A2vPV(^iqFlrT`(t74$2?;ZRVRsREC&EPKz* zz5-z^lAGtA?_mNJw>dz@_khRu;tM$vtJUgXYyJp1B33kVUYkCMSdGegtzvaneCt^1 za#i~}l_eEkw|Tg{Sz@J(*O->8e;cAUE3M)+$Bf1|si$_A@tTEr68Aw`}V- z!@RSvuDy~#@Fc$KO6FqK-$ur%bFdzug$B6V(xt3z-GLkFepcrg!<+6j44=ac)#{rL zmHuj3fQ#`U38$aGY0K7^jbFNT$LRRr=B<|vjEoHK@R!Zow~Y^uY}>qRVC(SU#I}Kn zfr;%q2S@izOpFbTjK5}ZY+`itz_x8;gX7}^J4g47OiAJgWE5?Y~r^^w~uTa92wmi1VN3z`Y+@!F0x<|e;4z234e?4mU6$0 zzsvdC&)*gNUCG~7{9Vo8V%d|p|J^-AaexsMegIDYvzjSh7$9AYQI%agC zAh>14L<4HuKH`ZvIQE)7BiqJ>@@oav_QA1a{EG33!JWzA*x2aU`s5G7n&Fnc&1%Zt z-@tp}{3<@C;XeTIq=?`8BnS>rM)cS^uw%#Iw&apm4vz2HF|mIAo{`JP26nAE@%Nx z<~sXi@U^=j(fFBT<3WE^3;ru@yq&+j{LSvir`_K%?f(1z{yz$k?OXPU(lGDk0JCju z;PTDe26qh7siR|?#|AGS7=wK$Hs>#WZ~ivWjgIrxrK6J*SL_n>l0u}HtU@ju10F1;HYe9iXP z2Ep~*SF&$5j|}V_41!yHJ)w-01;D>%SA@$W&dRj%Wsd&ah!Skr(TpV&Tv z2+Ka?{SnIba6QIV@+KQ=n;jZKPq`K>;Q6mG7A|KLjE)UlI=FV%jy>ZHhjnM3ZNouS z(O5W*HZ&H_;ICvFBp!t3$;4b3SP}%fsr(3xR~4& zAC>s4HX8grmA?ZCl4{qEfh&^jJ9q6E+{p+r2292VCy*kDW`wW}w`9)<@^NtM#Nf6a zSG4G_)2QdHF;vsmv(9_rxr5I;_XRI_-j*!`=WTiZbI*Oj*;~&!_na4;_ri0|J@331 zZaW)MyzT7gt~+bT_AO%rNNU9Y=vL!4$;**T#c#KC)Pjqs^Q#OrjkQdyuV24&{L=O7 zFC3gmold_1#z{4tvk|^!baY21+czWI*RPjI7+=5sWwHP+9o!`Kc=>bJub)Px)^9vt z>N_>mY#vEFF}i-e>9YSQfpD?7B5Qo>*y#AUW7y^=$hC<roab;Cg=v3;W`7d zyxm+JxhGA+LKO7*G;p^d-GtFbyS}(BNSD=v7M?~%#Dt?SpndT{HD+V;?ko22)Q*5ol8ZyLM$ z`z-!Go4=>?H?yCdPMvN)C71lp=*XbApLT8^$Ev$DdCm609avnK;E{9k<<(q6>e@3h zJTiLuNM7JMNjBh<;4)wKa;}mi+xG0*v3)DNot5U<^}LggnqJ@J0CwQWL~;r54)`)z zJ!nUy;~fGJ701s+WZFF8%*nIQq%RrIb~|@L8xv`c17!ZC*P4p{&c+V%z>7?(PFViZXxT|IF58QwY7ohF(Gn3B87n zARx^y2}vM9l3)^=bwKQ>t70#=C}P*OH`KLvUGMC5v7FxN>3W`bo{j(K`<U~NG!FoGjY8fF|%d;xDyei0TwyvgOl};%vx#j&V zNG7w!f|i_an3Gi{t4&%pkVm(1BJnVi!stjsC4m{TYx{1qB^;gUMnA$;tl;5ir{`ae zsJd!3S4Zn-pC;px^19T)waQe}XgJ?Xc~!obM56b{y!xOf$)J{!xK7kfrph@BN;%dp z^^qW?R3EG*kC2>_3!A)Vm51io<@{yLCI6kG~_sCAp%qS*c0e z$v?R?*fvM&&y$!-e(h|>xi|HE1yhfn`VL{Gp0kd* za$ia5H)!0&_fnR1)~}FSXJdX%{n-7aDk>oPg|$^A(Ml(SUM5f7pke&TcI4dJ?F3|Q zHIzyv`N{RN3rxY@?UHpRZ7p$HB`9C>y{x;}gOH6b;CtD(nz}V>oAf$r-Yn4>)yZv1 zwQOBgG6}7&sXIDYzPh2RymBMYNNVMc5_k(?rCjZtc>7xHH*jzm*>8mKeF^^u=90+LwQ9ut)nGql9=Vm`KZtv<#8oHLpkdA!DQ< z*x0Bm=LZiiuW8bc z@W5oYTfTY?Npo#2%|jLU5mv6rQ_Q7Kq-RsEWik;~)>qlLR&9AxMK$$Jd3sB&M2h{K z^e4PFn@@**eVuKr*=rm7rh#qA zZAikjZ$sxSXllq0&X#*-b$#8+MmcxXt}26#)%9yBk;$zjIe>8&+mQ444s*G`?R1oK zrR2t=oZLWFOfL&zjE;8Qacx~oipb+TxmU@9B~h)cvNL~UGT%!%Vk&dFr)MYU_Jb&y z8{Kr?a5}G_8e#boi-e&eW#4DvJJV( zcm`<}B1IOSE_~B++)mtE2`~3_D7oHc%%$CDEjh&mYDU`JsKwUQA}ssVgME@`Za#Bqub9eQ+IWv-F85U<^X|;gVJ^pX zDRVi-4&-U#hN_AxGFh4dC>!a?kyfQ;wG?-a&j>5$FTq@{!}rW3JvFC2${szs*vq8+ zP0?Fs$?gEdC}f$W!%@s7u10BUudAr)kW8P8`ChiqdPeK-Rn9KFm ze2$2kb3`6V$?VVwvz{FHUUk{zP3Cdi*Y8Eb$Tp|Sm64iah19`l5?@(W>73q5mVZGw zIal8?m*bvVUq^!i&wk25X_Tc$GhbXyF@z2cY3T?iv%p|E4W_i!X`4Rl4eDy=6BLK^ zt03*fO?xY@0T`diptc~c$7BPA6-?ab-5=9BmE;z*p&7~ZmzwX7M=PoRrFu& zFDQ-PMgP&a1u5Ixe|zO`Z#>mrq+!d~uAr}J7{!*t{9-K<)4Zj{VWYfTj&TUbb_r8I zCdb$FS+1kjC4af!N4m7g>G$sYnZ3M1S4-Z<&h1=NDVKo?$!ZEDPBUtwbO~r^Dx}NE zddf-kjme@yl6u*sufX1_Q?1;mFNyvOx|14fdGJsgTV(H+u9Hluv?3EpGa8eP{}e8o zyFDa8%h!#|Wl^P_eaV*g?QG&4ecIi=kDLHb*5;J#(t7-Qf72ksNM58ZWXubTh8LHN zpiy#6`SOa&sug4TPVO(cr^hjkXPUtDTiZt`vab9|+L!D8-)tX!f@7J(Hur5GO|~29 zHJP?=17)(;%WfGx<~O!3N*k+F{Y$pUYJ4=GaB=Ht;o7_5(Jw?%2lbB#HhL zui+GyJ9*Flpsnq<9*UkpJ(h}kI!3iYq_KcLma3`(YNZ9_&J7#o*zW9=W0bK^>quZh z=H=2Urp5Rbths8mr5P+r@2vV>px$MjXF+`96?hHvV|kNtN3 zwI?miK4@#T_wt+GI=Oe(7vqPww82xJYqn3E3j_{wI+ZrAtO+4!w?GrpgV_(@&zjn>?jjPL#)m)fz zLcbj2NaEt3SkZE^<2HC0-#gC1at$2IGRY$x7xFoE`6pZxc}6+QHXzR~q*oyW^BE>}&ciVRH$)h)L=ck}`@)s#gtfDqnZZ=oNJE zR<7T$p<-=GNkh}d;_B)#h3l%`Ze0F_#NgEXDpDGRHrdns^L`) zr1`X zS^q)SmoaLNB`wPK9Dj*>;eDUm(h9ar?%4dAM#fl36Y8MB&Fg)~dUEdeU2jEA163Gj z@9ee!dGtFi1ok&h{QpdD$3FRb_BnN9gM$XyZ6+1fRkQ|h)KqDk#s;+!QO0=%>3Itd zlGcWxF`2NEp64@{`)*?Lxt7u?sOjT)mdkzMwCYjWSzF~`RbxG=sJYWr>d(tpQHVS4 zggTnNw2B{eD(1A{+4W|*fXSgGZ1-ulFW34-=8^{X?wHuOUDIjP{gLo;&Gv1l-g_N6 zh`hmjw^K_St~Nbule07~+V>yrg_I+u`@k>`VI6r!oXDKVhqOs*=K@*p`YP)2x&gbT zcCVGCoqHSWNSnZe$#v`MgDnk9&CS-@jiAk$sht(FzcJR!mpGF(Q@ioEBtec*JQB)f%bnzZa1)RvWGACDB#sT{CF zhp-(<_v@GknLDY|=@pWD+3st!8?UAHeDCX7zk)O=EiBCgzmiwNxSnlFI^4y46!Y21 zesV3qk-CEvhgXsvw6v;^pWqp4*Moa7m;1A2*~I2$qm#>=?K$^YP}&ZHQPU zd&*QhQ>08n7`Y$*$Xw2c^JI|WN=^<)x}Ys=Evc1!DbKzp)P{8Isok~Vdkg0?zwVgWUQrel6b~ZRELr(Hk zxz+fO+&;4_XEfjZ2hz+bQ!+a^P)h2v>eoz@YP=3|wOdIT%at1cOyXzA+g{(z;yb5G z{!63KI#4q=Mc4Hjr`Gs{vbi<`shMw-uo zel5!vX?LD-X-zqEIX*iM`P96L1&o{I>(W-E<))H_$=DRy5vR(a_^O6AH0f=erGwp_ zq3_G+pj*yek{k)Y%&yMwzqrPo*i=thE#+aEyeA~Vx7;4GbK2}H4Z+e}p=0%vn|35~ znmlXQXuJPe1@`?c`Gl0`Q`7$JRz9GWrHw2(@GnSPzgCEw$9~Yd$!Vxzyo+u#jj(b* z&t-DrlroRjAxP%GJZwnsw3N|6E$d6&R@P6sVOoZ4^8JBKPChcv31`2jAg>(!ciO|~ z-;q-EcZGJF;ZEuyl7An=w1(+eCh1R-`oI{b4NTG&w~}cE({QFHrgcn}Oj3`Kx{A~< ziQ{^Gdi8R)pU!WC zd`#>ArM_Qn{a;eY4OA&_A=nRv^$j&zMwTbD79AVc)=D9$lIIOi{e#%L{K?azACnX7 zJA9TJ8RbdZAIn!e)d!mFq##9+oACk_)iT9+w^9SC-e-Y^bUn zRzZ!MzGoS#YnS$t#UW}!#rBvjGOfee1tD5%O6<~I%lef1xpakmFKrP{3s&{o+VVOE zFqK#8rD){+8Y)Hg4S5W_n?+cu6(7x9_N9nvy5t;H)8*9{XOx$*knf#4S8AnntdqNQ zwEr(R5!a=(M!v~0NNc3i`snyVzLVC*cKp+FpL2&?X3CM0$h41Bj!N<@DHBN9bnxvJfa(U%rWd_?HU=Pkt}EzZkWN}6(jB8ZO%59vc7EN zw>B*|cU?$pQvpeG4f95t`DJuWvRRqUr#9j4bNq4k>2ShGwk-Q1e<|l{|6QK^$k|tN zW=Eui{KdxMGPdYEAj|o@oJlfxNfeS`Dw!m+mj}jg?Jz52UHOy5*pKPAo>9q* zdi35MX1_3Q+gR@4a|KTGRg`8z&oe zMv=!@E*ZiH%w_rh28JhCCU>3_#u;edJTSa0b*MRyyRmlo{>&wfl`%QzNeUd5`es_C zb8C|6R;*oZ*YuoMkbZllj8sfE(M!ZOB!~Z z!ScZ=9)#t5ILnJ#Ef-5A+*v-N)pGHml;tH@8vLB_V{z*CXJN^>o#k`zz*d$=g0p-c z%OxjqybQNbaV<_go|CXV9GviH;MDlf!yQwWUx{?!2Y?LziSi4-VS#fnaqeBWM z>m41mhh#3_$XHQ62Ujx~f-)KDC(nKc(3Ipn@9liLvB!7@!lcBtgSb+U{WhGsulHd& z*7?bI*MjS-r8&zgw)0}c;u)hQuaqK= zq+ux_|2Gq-R&2EUkvJyU>9d45WFI6SVbovqdwKgFTk@b983|5!XZ->`%k?W`a`JsC zv`bzif6ghlZ()K$x_yx zMPtd=2JyXIx0dhi(c!XeGRq{rCL7Tyz)>hA2ex0|p^2PU*dqwjnJ|saeWsGjEYh@Zn#y~aTrN@?>T z9*Rd&x6%(Qw3Nm^$&oOMkug}TAule|%xX7FmouEZZkRR@vna^$B^`0gVWjL;esH0@ z=16?4srcFLwq#2+vJdP^%DRpD!Nv75UYfV1n{;J8!Y29&rJ~1EN$$To zvMZ@J(QeC|D^+q(4Gr3LqZ_ZGiou(jbu}^~F*kT{Rj`^Jl3sd#=|B!&&b_qKOW{Ia zZWc|Y&q+pYnCw-)mNB!5+b91|m zU2eFf)b1FSvWZl09q02om+8MAKMlgt*d(!cnPQiSC9jpdzKqE!Kh*Pi4bw494NUeE zhK}B#49eD)Zc5k<&L}ogbqee{z4VG0QR0yN<(JkcS=QI_h8(|tU~eP!i-vO>!8K`fVek_}ml>+AI%(^r@zkyi7rN>v@HPzHbU|8j0!-dwR$?a~ADXR*FC z=s4#jjf_q5PRIR|PCl<_$&{8(IxJc;iC>GtxSlx1rEGIja+_Ld)*L-Joc0fL4)QA! zdsTDV4N}Y+@yk2UHh*N>r77E<*lPc!Y?69BMr9yktU~K{e{WhTOfOv+~y)D zN;{Dyziml%)Sr^CtUK*zY_DL3{k)%6Bd_ZPmv0OnTh&lMHaM5><$39p-K1<#$#((1 zv(ui_4W#{iltqFP#MnR>xu?!$PF9!Ec8M$ zzNyK_kXB8CODOfRpLVg8%_WCK1{rii_yKIQ`5aemXkOZ7rd<|tmT6O&l+9W?l_xNu zyJ>Ct>Io%;l@8(s%%zOxtTRQcFU^}Ys#z|_s-6Ee70qY$biS9gl)Om6HEWm4)6q$4 zMwsPNE?P=Q+6sBoSMH|d(kRQMJlk@yoGW0r^_Q{CNe@kYwy)cijfZj7QkSh|nX_i< z_v`q6QL+P1THca92y#srcuaC?lyBwdap+HyZ|Bw1^TG>#JO(S1Ct^v{iqXlBv#K^E zKTV_UaS`X!>7pl|)Ogop`}8Km+b1)5>WDIVvKHvM!mZZdfK$(xgh<`~MwTzCUcIQg zVL|=XFTQD@`eVxh{y2Y{N@#<)Vsc#Mn!GPl-~Cm26wEa z?wo8?XWPx&)XnAV4MdC-gD60*W!Gg~D+Sl;8mX2^ky+k!lxQ^?sUh&KltGqLV9{3c zN-39;_YE7JKVL__=!unQFQLklnNq%U?s;2Qu996q&B%1@;q(wu^8w19=mVE{b${)nYza-NUF(fi_S@v;!LlZPK!BF0GCBqu#*(^b0Sz!L_htS2XSeam?b4w^Q#u<%3cf@!oW5B_&I&u$Go za__B6jbX3NkG3~I<<~baTN^7|n?FOYHq{pAQMmW1+s|VAxwgMGov}~*TgLmNjNv9% zqMEci<&xP$fJk7;&HnZ>8qfX8s$nu7YncAdS7H8$9!`AZ4E|CV+}JP)hpAz!*^>g?IA50-X@`F7dQ+4iMu zQ}WsWrDIQa2h+(*yfSdLACt5XI6i^TeNw!M&v{IG581=noSWL|4wGAro4~ohwd|Dt zzp?*ZRe1|SuiJO*zx4XZGgbEAvFv}UW&cxsN-Lk;%ICH6g{>^tN47Ub-}#byg}l;A zuhIhh`S`zf+}e+?S(A|qRam7}fvQY-(VmEUaT_mXaIhSA3$h0|Z? z;&%4yudTK-jyjs0!~f}aq|n}Dq215%tM?l}8+q-cM#ht!QbO)?C;#@Vv~Tx7Y76WY z?Bx=U?0hC^VP7ky_kY#?%5UB{9oWvg7qgy}Kpe|e4W{^BK96l>$-SKL|KPLKS{(n# z=Ym$2nuD|aCq9pC<=hmv=W6A*vRpl9{SL{i=~#L@Qp1Z=!)IYB$vNROTP<(X%59Tw z=`EnGSNhu-LbPD9T@!J(HH5I8Qnu}+G^Z?~#iz!Nwaa<#@PJ>jLfSgn*{#X#gqh2} z-oTtqB|HBq)>Lh1F70UlM0s%Ju;u(JLi3*F8&9y#P}XtclImX&f5-Pya%{bAr!>EB ztGr#}k(Ng7>(H(bZD;y#Cfnv-twl@hG#h0frF5Fxr*FUh0|pKnJY;Czu$K2ECzno{ zI&J!lnX_geFlX+8^A;SmaM9u=OAk5pu*1vr70T+GRY$L`U2{ys-r?pa10GCB`&G-8 zcF4MV!ZtRoUAKP2#$#Ke8Jd@0@SklVzo2Dnzhz6mWu2B7hb{Zh)*o8%tAl(D)8+Pf zeg3rcKt|@CJz3dpa@w|Q-=SkCd(F;Wx_0Z{qi3()LA{cDl9zJNFiwnwu-|;$vxj$I z$BrAnXU~L*lk64$@BLTz+jCgzFT+u_*&A&-bY_D;{W9Fw;XPA_cL1^b<6SE0a_pRJ}2=1&}o>sXV1Tx z{wMAE|4;ho==V(eH;;eM|JRTIyQMkCeM}peMl*fK^Z7oe(MK>H&U6^lp-hJ`9h~zY z)D)?fGR~!>)o)f*ADLs!qa1KNQ#YeD_8_I{t?g1u)4w=QY!hoZ;{`VJ`DCWl@3!DF zXZAmF>@idl8d#JPgw-<-(_5uB=;}Q0IrL+s! zbz|CwX%VDox2Bx-DWj4&r9}S)2PXYYr!qNh+o$pQbfzuv|*}OE_^-a!oeL*+1)}O@?|L z!Rq?@qwU^zM&HVjCA*Ae5WxnvA!9~b$I%>)c&K0F6oW7;x4^(e0v&WdNVJ^qzW51>JTb}IjvWI}naJXOnWn|qKR@JoI zkNLj)vZA(${rHi%xBeCX?{s zl%EtEKS3&(yyn;#EGus+3-V*na!6F3Ht3fZ5LZXGc|7yZ%$G5jd$5eToR{ZmRF~RI z>iL!$s&;PK&ER`2yM$%(0*ds%Nc(pK{x|N8WYuTA^NVQG(WjmA(xR=9rr~5L>9yzQ zXy{9&1!{#JR?zMh(l)4+P^+b{X#b&Vk^{9WYxoxfh>C6`Y2&t=Ad`2K-BK*g6*8Pk zM|jv{K=sjY)UR)%iK*kXT30==0T;T z`vNWlY5H5@=uVg_Ch0pY+)!9pSX4N?u(+_Ka75wA!cm2z3&#`{78Ml@FDfo7DH>5U zvS?J%=%O*h3x^jCA3nTzc**b)!$%GuHGK5&F~x<&Ma9F5i;GK&M--1N9#uTLcuYxQ zNm0r0lH!t*k`W~%OGcH9E*UeTa759F;UkJil#CcLV&sTXBSw!HGqP}G(a7N=i$|7> z95HevzfL}S#^^(YHCRR@uDME+AlK?oZFo(Yb-`RslS$Fo{_cG8FE=jR`(O;pJ% zOV+bjHYL}z%rJJdAJWJ91#`Iu;bi`@obfev{ERe>zm>s3@?o&ukR=yXx*A!xN3~sc z8NyuBd_Hr@#hh*Es2uGXlx{mad*lb=#|0%TmsYPv8SW7rWDlemtb63_PZ`@9z_w0h zF6D}Im~&{&+urZ_P4<55BCO;^e(uSh%=ZbK?3pZBBfmu`uL*JU5biV9>(5-qm&mix zvD`a@m<-eH_4<4+zc0<7-Zs!9qibfjteotuHl7@JyLRobaL*{`eDqIXqjJjvY6B#_R)*s;t^_-sM+5`_juH zSmnuQKlu2QL{{7Bvn#8tEqCmC_>tG%NPKZO-w z&zpbnp+_w{IdA?UhaGX$i6`Ctyt?tSFxm*4o{vdI@; zQh09f-@p3Oo_X^RJKUevCTC#5mtWP@kD4%P%Jk5Ai&n0E=GoXQZ@%^E&wGsEvOb$X z@NAxz*4^W4yXod^>n3mS^iAE}UDHfYfv3ddcbk5nzinVan|A&sez&JbAl;qj_Pbr& znwcK2JHuyYcl6HlclRIcclkPHE$~cr4|AKIw!Su*V?90lFALUsR`s`@@otW|yZJW% zD#;o-f@0cc9(SP;XX~7*6ZCez1AMD z^+D!euXK+}-*iL=>%KJWd2gW0ICsD|I&DT;rmrcZm-{f!q3PDiU3vsMrO)+PXZmj1 zk=fZ(wB57m?E(Hwuh-g{v*}yE864tc>DeCZVRv_Tn=Hd;njD-W3T($ZZ4Z-y(| zlVi4Zwez-b+rjMU>g?*8)x+B}t)IEdbF}L=_b%7Vu2)>IX1w=4}zT<&YZ}<7rM^2cy^qbf#o(^3`j#_%~ zNjKhl+e0Jb?M^%6oU58sq9nw5^DC>4xaZ#PJ^X2bj1HYgjv0IX4R5}cJ}PwH_5Q%P zi7RT(J->e0BVT@X*z&*qxaYFV^9u$JT5@H0`!zeRyZ)93c0J+C$n4m2?4;=j?Y!=V z7sLLp-TL&OIO)?bzS{HTQ=VYo{sRUTj~+YgfVm46(M(OEE32qladhK`6HYpF$Bnl| zqOn_VtE<1@s6NMe-JW6Y6>hU2-`d>MUDT$Br(b$6?@;eFPxcV&MqfWqKhL1Fl8kv% zH;qc~6iDkbZu%H^MOu1cCvUF1yVsmN+B3&n;0gHC{gZ&K~8? zP7C6NA)X_A0|GMwgS_oG zM-H!=;~C>`J6Y1e#owiEd3{Lw)t_!E9_DWAN!zsb4A0TtEO)v;=lrsn=}qIUzXuxA z)^wai6Y#iB zZaZ!61naT!KGU5ScPj`mb7YO*$$W^W9`v z)Y}+yPd{tAkykd)TNs{al$0%s9$2>Y>>bw9tew%NJKmUlu<=i8dENKHiitl>uCQF@ zic$XDqpj>m*BCu^Z;bcaea>ZlbGL;G9^F<@QhuQ^?a>Qo&e(mSQEgr{W>xM*lj}+^ z`tG#cOJ3hIUZ@=uvJ2qWz>?*y&c(weBov&}d()ghC>d=R|*Tz3Bzs~q_ z_jQF|@8;0@+!5dT;T>b{b=`UOOH=OL{rO{e8sE9@>h*n}yBNWD*PQkhOxx}%?dI!N zUFsRxHVsc^w%1QNYpFTJYr0$>)70FZ}7lug1GpfNfzws znc*F6`mGu2PnmMN1(Ebqa+|!Ptji@Pm&c3PqMvF8lSXS=dQx67XJIm^sp=iTIm>>~T${5)`*eCaa>d5GR^b~ba|GG|qjfG$rD=lg(c z&tBqlnVu|HRu&rU((g>u>+yR#`S_-ty9;|~y8LOJJTtAGD{HLR?=y=fREcH#@sB z+(jj38#AqVh|3emGc&SBb#e##xzhbZUGBjic9HYyjSkGtFkC*@0H!qdM*e!cM(DNU zVe9s|e4Z>XpPEe0a#j_watSFH$qC@kV`gvxy&kjeV49ph@o@z*?IRrRH*-3t``J?J z|AGa)r`|Q)?{#@SOMPzhFw^55Y97@#$nO~#lZ~moZspDixH=Sg)7-}lOn0qxP4?>9 z?b5-_?NX9C%{22^&2$HHy?wKKx{J-sHfByvz-x|5&u-V*JzaLHi`$js@?`ipCZF!X zP&3&Kmwaj09@cDegzn%%gn zF0+j*yU%gcM;JU(3W8bkK+UJ_gN%cxv>p7&SyJz1tvq$%lENh?Du1+60S%ZurlB(zR z447%1hP2D?*u8W5jG^AlQR!w@*UrUc@qM{%CYv4#0UT1_c4i-L2(whv7yA_OkLgTW zPu`WycaPi~UjG$Sh}qM@-D`^6r}vF?`Mdi1Op>C-xREY%W_MS1NB{j}R!;8CZ9^Jy znZ3wAxM7b>bLG1v8MwL^y8>-zdChjSjdXJuXTU7##r>TB^=~FeKd|lVEK_ zA8NdMr;oIN$E2}zCYzVt^6>93n}jOm9!g{0gSfcLZmI^Zu4Y$q!o8<7qxWt$5j6boyJ!I}-S#>4#@jnO&$F93162Es2+yD++lO84ItTka)Vr+D@p-{Q zZ(&(U$8dbacRR{PW$p}*>h(i>l<{+X>Q83*G|Qhm%M9$E)h}!N?3=Q4=M;1)pEIuO z?n4TDlpp#{uiZx!mTWIetlC{RzdpA-aog_lD|hW)ZoIs`V&yBjmB!oKD~s>0pn zD{uX9dv)xy-PJ#QQ(j{lU)ChdNvj5Olo@7U4r8Vs45!4!zjVmqrE|+3k7rVN(%Q6R~b(Y!O&vE9+HiJ340e6uU0oZ219PaMtHPa??&zGe0v^1B=Bc1af=CR$8 zYw0%o``zBh)8xc;HW!l~2;}N%y(j`CMG?b;2&}qNi2cv}dia1=<-f4RzmP`@7raBpxd=~DZ$8Z*K5lP62&1*e$c_tCKZhJ>PHoN~3sQ2&A>^xHCUZq2Cr7$p?7Z(+b3MN~;a74zE&$b`?37%O zGs>+ir`vRW&XxVwdEd8O_5UFEBkv>U^Bg2Oq2zbu86Iz1+P}>6SVQwXzp+<-H=g!c zxu?o#*j-TMD;<^#AGOp#*J%OdH?+cKQe7?X_#V)TgeqJX!cz9xVP0w~4o-+fz(#$r&z`!;} zU{}EKT^1NXe4SX2rs#k%EOSg-m(jhSrzdyMsov)TMp{?@!1OuPLBlR;Hu;m&OI*F& zbG+4QUD5{o4PRlv=zUdSh-Z!e)LvF#d>|C?clbf~-w3P-tjILl9~m%uek6O_(Wp0c z|4cvK!yQ(43&U7najFW^vcNkBvEWY8-$qS!MUbj-dD`y0W^_Y?2odT8{rE$en zP+^oN6w^Q@!?rg`u<4-6C=DrQfE7k*STPfMh0IVV&#T;-n z@hIkk)x@(|;yDo15|2WLyVMbnVm_!R9>oH%hIkYQfn$hAu@E#6k75yMBp$_L&_p~Z zOFS}mWG(S1mV$M}qmUM<^~9q%1Z*H4#i3v$@hA=h#}bbs3gX10cogg=o-Gp3W8g#L zQ9KSlA|AyP;A7%ZJPAG_9>r7OkHn*R8hlDTif6!Q#G`l?{E2u@k$9d1e@YARfhw;4j3ZcnN$-Jc^gWSHz=;fdug=UIAYdm6@4;V*M7xpgHwC@Yn1H;LXFiInDCQbolu-E)HOW%zbO|Z1-lwCGN`5qmq4A|*l?;MsV0>vr zm5mq%Um8_W#WWZMUm8=jLk!6;jjLqveMgi~bwZtyb%w;(1$9LsRX5Zfg;hOJPZUx0 zLbUmnMpZ$Si(;xis4t4E`l0?Pp&Eb&BI`_vZx9-cLMj=GPpegFSe1u{p@=FUQ2{B9 ziaHgd8qTkuqLcg$$Hgp-YgqYlBYyCxG@%-aMj`7giE#|#$Bs%vDjDq0Bcn8|nt=GR zfYOL+5}J&ns!}us#Z*(#G!$1&M>9}DH51K3)>et{05k`MRCCdRD6EnnO`4A)ss)Hg zU};pf5G_J6)ndeOtREMBLk#)AjcNjVxg;YnNBT-l-KXkARMO0;|97R>j zQ3Z;rDp3`Rt5%?uD50uG)Za_3b0of1=x7vDtwyydtg1uxD56?}jzLjX18PJuRTEl^ z;wt$UYSyEK$h!gUA-Z!Vx{csi7KK#Dq2p0lbpkpOMO2&6A{WuAHlveS7E^6Or=Ym% zRJ53o3Ds%nbe35miSG=wlw~2+ndo2?R-J{mN_?tw(0eGVIu{*E$e1dG4o7j-dFXsX zCR7)oGL~8ANqpN-1q!JyLNzF?x)@cXh)PCwT`KXZu0ZuHi>a(}-8~T=IA=Tf}g($502YLiWRNtY0qNwV7 z^aF~iendZ^xaw!L2YoH_x_DA@p{+|KIu~+Fa#48@%S*#5AM&G!Dh;Khs49RmP)wDH zvQS)=joP4uDhIVi)}<0(JJcS9R2@)96jpUYol!*91$9MHRX5Zf#Z)~|PZU@6LcLK! z6+~BYu-0V~Umw($Wg%5R)E|Xa1JFPeQ4KM}`%h=DTY9d-e$e5}WO(A4lH5FNeOsJ-zGbFw%B);ir ztHh_8fo7txY8IM}BB}$>928Z}MF*moY95-8;;J<~^N(>8pQ-^hBI`(UfQ0g<`4;(cLJnx(MBa5~_>Qy~z5V#CHk04~0~hqWe);bs2g9MO2rg z2T@dY1=@vTsw>e$D6YB+J&Y2n-=Rm46_)tID2hU=?dVYyR$YT0M-kNy^aP5ku0>Cx zm})0_3dL2|p{G$obv=3pS=%MP8_=^Tq`DD3hr+6x(DNvwdKtZeqN+F1TPUV_8@+?# zs&~4Pf=9$8Tu27ss4;UM{(5`=r1Ut z`VxJGtZO8`zahPTs(+yGSQb|O6a5uMRNtc?P*n93Iu6BDKcnMOT(t+CfW8)aJ^a3p zhv;@lbhIBE2ceM4g%+Z)%8eGGh>Br`#$psz$yS!2n97Iv2l7heDnB|HB~)qX5M*5| z@zH{99Ew7!06GkXRT=1T6j5cOBT!V8g^olqRW>>b#Z_(4GL%r|ph9Hrl=#}BA{0`! zL&H&6)gBe2h^hlBK~YslGy=s`ozO@WS9M0CP(sxOjYigW5?@y|28C4J&{z~!bw}e+ zL?!=V+ISRI^+dE*mBv)P&_onh^+uCWLKQ@lk#)Vqmy1eKNYw{TL19&2G!;cu{m?WN zRrN>HQA{-e%|LP0Kr|C2RD;kgWZfX~4Mww3NHqiX-S!ffoZkG7Y zL}#IpYAZS$g;nREb5TSULg%5V>U?woimA4t3sGEk5xN*9RF|Mjk#&p2cNw}Ig;ZCd zD^XZ=75W{DsKRJFimI+g*Pxhc2f7x;RXfpjD51I@-GHoHCB7TcO(>+g8Qp@ys$0=* zD58p>+fh_?2f7o*RCl4fQCxKox)&u>_o4fdb(_TZ0D2IGRJ+haD6D!IJ%S>tD0&%1 zRga>_P)zkWdIH5&Pok$#LiIFy23Zk_?^*O53aOq)FQBmMMf4JisAA|96jl8m{Q<>P zucFsbT=hD710_^%qPLKByTtc4dIyD6@1plmSoJ>o07X=Bv>QcLAEJ*?O!YDP1jSW< zM4zIB>NE5wWZfb0{TY3ZLaHy&Ur<=}CHe|QR0;GoimLvKzCkh7-_W-xuKGLr2TG{E zL;pn9of6;o=m!*1{fK@-Vb#xQ54v6C^->G)5}ht`AvcPtJc#9`ag`7GQ9_l5(vfwS zL>E9AD5RpZ&&WbyRW@paBB~tJ7DZLBGOMKl>cN9|f zKs`}d)eH4T5mgZ7qNu75>WgBkeyBf+s|KKfD4`mJ1|#bpiEjuRibAS9Gz^7R`KSOz zR7I#9MODMmauib)qY4yPm7q$LP>n!U$hueJ8;Mq+kZKfKiNdPUs2W97V^9r>s>Y&K zD5jFv4~|B0)p)cTB~%koEwb*D_$Hz{6jDt>^(d^GjMkutsuUfAqN*vV0mW2PQ6q}0 zrlBU3P)$c`k#)bsHv_FhA=ON@9)(r2&;}Gy%|;thRCNG47R6L^&~YfPnv0G{3Dtq< z1Y|uR@y$agqL6AnIthhU3y_5(s)Nub6jd!mn^8=)2%U`Ls>NsvN~o5gQ;_wb#J3ck zib5(G5?~A?KGk+)qKN8hoDccBg_uDTm_LPol!`2AL@d_s{2t_6j42Zx}m7*LDU_^ zRJ%|Q6jwcjdZL8tVblv*k4Suvpx!8?ilQJ2s~$zUD581{^+8e9W>ntr_n%UMJ2u$(J&NJh1+w--9&tyY)R#CIK9k3y>J(FPP&-GDZti0VdkEQ+dbLdT()>SlC2imPrxC!mDtR&*k=9+UWP zLnon-DuOH&R^5&^p@`}Zv>8QJccPO~Om!F9g5s*X(J3gQx(A(#tj8t3d(mkqq`D8C zj>4+@(HSVBdH|h?qN)ecStzF3g|?!&>LGMCN~j)2=OF6|iSH3~E()olD1^eQN6~pG zqIwLSkD{u_(FG``dID`jan+OPLX=QFg)TzYlM>(4=wcL7J%cVmVb!zfQWQ}=hb}`= z)${0b6jQx`u0V0si|9&}P`!k%Le^6f-^=KCD5Q#^Fbb<)LEBM8^?P(RimLvAu0b)? zt7r#`t6oFbqJ-*ov=doROMGvj>rhDbCb}MlRd1miP(<}Mx)DWH@1UDdO!Y3h8O2ra zp<7Tw^**{4S52T)Y?IeHMqR9~Q7D6aYodI%*{U!sSR^_;}_ z6?z1PR0;H5d*V}ljsA%us=uP|QB?H}`T@mMe?vc_xawQ<6H2H;ymJ@h*TAjkCBE~} zD=4HoAN?MMRTrQ?ponT4dKE=g7oyitOmz`@9mQ1_qc>1ObqRVCSuaR@m!h{&NOc){ z8--Puqjyk5bp?7CMO9a#_fSlA6?z}VRlh?YpoA)n;>dbY;@ggPqmb%q^dSnXu0bE6 zh-wG=7)4drqEApvwG;gj#Z}j#PfPGZu6jt4YK1UJN&FBjh zRo#OAf?}#$(U&N$x($7W5~>JFAnRp`?{@Sx3aRcue??){o#-1BQQd|9hN7yw(YGk3 zx(EFo#Z~vBf1rfwKJ*>3ViMo|=$|O0dH{Wo!m5YRPbi{#82yZ*sz=Zs^oq#ai-J`z zqSHk#V~?bh^hzbiK41rs5gqKf+!coReexjlu-3U{gL$tiEjWJ zh(fACXfO(^hM=J+qRKB2LH5?VAgsKFMK-Q}g-$*nHg;b-_7!+2G zMdMIJH6BesQPo5=3B^>CQ7MY6rl6@Pp_+!KBkMJZZw8u)LaJG4HVUf_Kyy$;H5VO- zqN;glK8mRppo36cwGb^r3Dsh>1X-_3d`r>6D5N?B9g4!L!_eUUeYlimFaTC!v_iLYq)rwHcj^5~?le6lA?6 z@tulJLm}1a=nNEAor%su5!F_7Hj1jwLFb~FDum8Mans^WOVe|+JsiNpn6jnWk9!C+? z6X;14RXv5CMlsbh=vfq3J%^r03DpbeMP$7v@x6pzMj=%Uy@JB3-=jaEi0W1J8j7l3 zM{l5*>P_?(imTp6@1TV0UGyHZ-k12^M<1Y&DvoxeuW}DC6jObM z{)FPHKcml4LiGju3$i|t_`XD6p^z$pzD8lyU(q)xqWT;97DZKmNB=-E)pzKhD6aY* z{eTjxAJI?9ic5Syqdh33O6yH)L2u$yr6UtXQ~~5dQB?+VqnIiac~D%Hg}f-C%0@n9 z?Uwl3AU_JJx}Y2sR&_;fQAE`ZwL?)=chnxmR6S4!6j${`9Z^Cx2nCV#p~N>B<)V;k z22QO!luP*imw znvP8QJXQ7i(OtlqlL2=dD=oFMt zor6wA)~6ERx#%<$QeA>VD6F~^orfZ-%h35Ks=6FqfMTjE&^8oTU5PG43Ds5TB4m9g z@%;{6j6$mGQ5c0)H=yk(qPh`XjiRcX&^0Kgx*6?2an&v8T9i=TigqIFPZHm4=sFZq z-G?G5thyiFjv}fD&>9p~J&2A$G1V?~CyJ|{K@BLOdKNVz>(3J3bEpZ0RL`TeD6Dz` zJ&q!(H&F~lRd1nJP)zkUT8HAQchGv2P<@8t$ogF3`xDxYLaINbV^LW3IXVtSR9~P^ zP*n9D+JIuJf1-^juKFGwj}odM&H+jBil`n$uc4@F7kVAVR1cvyP+avedJ`p7kD#}Z zm5}(N=xr2IJ&N8zVbx>kT@+D0j^0C2)f4D_6jMEkK0tBRQz(uSs;ALzWPL61J%c_( zA=R_!BNSFWhdxFT)$`~R6ji-|{)l3#7tyCEu6hZ5h7zim(Vx(!zY?D}k4F;&xWHSJxT+JHffB0DXeP40mH4`#Stz9Hie{s*sv9~0MO59<928acKyy({)e{|v z;;LR~9!jWsqxs1CyTlhn3s6Xviw;6zRUfnvMO1y!A{15iLyJ*N)gLWEan%5{6eUyx z(ZR_2hr~As9fCrt!RSyFRt-Uip@?cIIvhn+dFTifQw>8$qPQv_9fcCA0<;WS-${IB zs2qh<%hAyc01T@t&PgN0bQ9@;*O@y?*m-sfLlTk>u1)YMz zs#DQvD55$Yoq?jNGtpTnrrL_mMsd|S=vk(hPIMiLsIEshps4Cb zbQ6lHZbrADxawAP8%n4m=yqiNB=OyW?nEKgUFdEUR^5Z{MG@6~=zbJcJ%AoWG1V^g z5Q?iFMvtI`DvBOO*3S~(W9V@dQayp5L}Ara=xG#DJ%gS_QPp$kc@$HWGtf+AZIbwA zq1h;;IsnZDY8zH_%1`2qmZi4byT0PBR*9>)E`Au1JFPeRSiOeQA{-i z4MlNP9vX%cs(e&{tWzbv;iwpeR3&Hx3adtt zL{%uPT7g!gh^iXZpr~pUIvT}Pt5GeAtLjiaN~kuXW07^H#CIGz9)(mVpp87y!>SX} zNi2(~EVKzlRh!YtD5lziPC;?ispvG6P@RRgBI_)P?`%}XvpA#*q4QW4R-KP7KoQkN z=wcLAU4kw}G1X=0auioxfv!Xe)m7+s$l5CLh0%5tQeBO%L1EPnbS;XgcB1Q0RCPVN z0mW1|q7_n}P~C)%kn)7;W>k)>vn9S;&}un8)vah13acXMDil%Oj!r{S)g9Ur6HXgQlR6sxO*~!m55~8j7g;qv zDn^S?`2XqZE}*rj*DsF$P{3}*4q8F6I}e?<*oBIL-R&R<2I_#_LxaT-N(w`#Fo2TA z5Mt}td9VNP-hXht>$28aJ|E{j=ebDe<($1A>o9aCO0C1uStzrPKpjzT9f{6Hg>@7< z2bI>*=v)*%rG3Ys^H6WAdbL1d9{Z$CsKN-e#j((&HYPL@Gn3|)&{)jP>Wuq~g-I=3 zI6y2-dSF5mF?w1bc@xG1#n_|^itqqT%*_}N7E@C#Ux$d9Nu3n=0hpTs@nUJ# zVmv{Np4DC&*vJyV*rc+BFab==T{Y@0HFsldDrV;HjLpQ{q_~hk0W8ct8C!^@xff$g zF?vpW_hxJ*#^yeZt;NKw&Dcgv%{q*2#mubB*iOvNdW`MG!mQ8OK`hM%j3vG~Z?XM2ue0-qDPoim^F{ zu@Dn;EaNIMHODco7Bh1^;~FtHCorxR3-dk3&&1N4$hc07Uew-6jGv3KnK6DLCgxbtH|H__EEeYbjK7GbIiK-YF?v~h7cl-N#%9j=yO@{@8UGMda}nd8VrDL8 z{7cNu8*5Yx&+$fxP#^gw#^=S-yqWO@F?vN$Z()2Y?VLr$>R4mPIjIWE)YuekL@eMIHA7Xq{Ow1mPZ;7edlksgaGaqIgCg$cNjHy_d zk1`GyOS2c_NHI#Z_i@HiVr)La_>P#EPcptMre@4ITFlJejAO*y?87)#EX=1F$BU); z4C4eb>Z`rcmeoSW8#zO=H^3;)5XHujLkR&KFDbNyY_Y)L(mJ z#$1fe-i!;y#O%YkNKDPA7#E9~`84APVs1Xe_@P*s&oV9%OY=F#rD8Ndd!J`qCdTFq zjLXHue35a5n3^v!t`sx#WyX)h+;?M)d=F*b)Y{vami2*w}9)J%5aCqHjw z6ZO7*87GUm*^hCGSeX48r;4RHfN`1_4bl4!WSlO><{-uyVqy+voGGT}5XMU~=UnrAZJDn@T> z?^%quiLu#{@pdsW&t|+sOwDr`?-VohT*kY^+&qu*Zm}@WXS_!&%?lXs6{BI=dm-a} zVr*W-c)ysK7c)K}4i{@u=}||u9+@9jW2`IY=0=S5#KPQ|vA$TE)fpRzQL42y7#oVQ zsgJy`n3$U|?kA?^ri_im%-oEzv6!2iGwv@I<`#?xh^4tDV-qnNuDx3^9w^4<){F;< ziMb8q!D4D|%Xo;GncFcQD(2?)jE9MZxdY?jVrlNkc!U^@(B7RGj}&9G7UNN3V(!d% zw3wQ^Fdidj=B|v#in+NP<8fkP?#_6;Sekn;z6z^~twtx%l%2+9pcxxS>1CIL=Ik@B04>;NbOtTiWn2kbvB|g! zv}TW?a;-M(F|Gk^*<*A8?b!2<_FN0vv&Xm&bYPFc?E_9i5_iV28u;*QUfLp@jWwXR*h)9du-maR)e?J;t5j9QGJ@fpgho+zrlS zk5Ka+@G|uY(P*^Or|69JZ~P?`yk+dt!y2o=WOf;=!4!5GYrs@?8Ee5bb{U_6>FhGr zff=kCqmTAEn929a_yWvgkMSj#%^u?`Fo!+H*I+JtjBmg^_88xS_t|572j;V9toD2l z7O=-CLCzlI2e6Pm#*bhTdyJpJV)ht6gAdqa`~p5?kMS#5!k%&3^E+6^9^((NoIS>$ zUXYYVhFDy*%L{u8ORwn1B?XoB`_hqgtrwFBB7CDu-8N0eGSqgp7l zc18Nva&GO8c0+}=C)xv**4}6@6uqZ?wb4E(w(6ofD6#6JdMLFTq6R3l_Cx!k+-i&( zp~5-?ct z9+lQf=tLAv(uSs}3dL4))C?t7OVk3TR%_G>Wm2s+XaY?@YTnehcDOB13%|AlYL80m z6m&9*GHpB!or+@X40Jk5th3OWD7DT;9Z_bTi_Ss0bv`-|71o950#sTTql-{9S^F+U zm!R0X40S?@bp^T{rPh_GGs>*1(N!q7x}a-NVO@u=MWuBE(ti;|Q?&0UbR&wbThPrY zv2H`RqSU$r-HtNrZgdyQt$WcusIcxw_n}g%@c`0q##6N}0?qi7`Pk})9^{3I^$_Zg zQtM&V6J=H}^cc#mKBzY;tY^@#sI*={&!cFX_PvOX*FNi2v=2(Gz9`|9sns9#Lzy)Y z4M4dy1Pw-o^%i;)l~#&|p=i4HjY1<)Y`u%#L5VdMjX|mP9-4qMYZCem<<@jG4Hedm z^(w7dXeQ618QM2{y<%%Fn!~finzvr5H6Ojtv&_oT0+d^e&_YyLAE3pkw3eU`Q8ZKg zmZ7C6wpO6!D6u|5D^Y5FjGjQ5^(p!U<<=@xpu$>%R-@AT46Q}cEbaRotwXW(CHev- z*4OAOlv>}SZ%}4^kG?~>RI5ZP>fMsMBYpc3|G?AIul;GgqS@N`3;LO7vGoV~9VOOZ z=uebd|3QDF%=!oY7v)wpezOVuOe?I7(MG7WYM|;UnxlQ2pqePQHba}D#M%OFj#6tY zv?a={ZP3;zx3)vuqQcq%ZI4Q8C$uAq=4#*0s1}N?UC}Nmv35thq14(F?SV3DZ?qT6 zt-7cVDy;gb9xAPdr~!)RY2SWmUld!7Q6rRC2cZ2?Y8{B0pv*cL9fWf0P;>|?tmDwJ zsI>U1slZoH5oFXpzG^D))l&o+rKYHgS0+{~)Dopu8`K(QRy))drB)`KVPhl=n?&VvCc-1qQW{C zJ&8)|d=#T-fj%am#SMHmmms5b33`fWiFGOBbGrl?_3SeAG|w`N&tL~WlTDCO&pIPM zLrjoSx(Yp~eb&|JS?$a9jL!uJJ||3&QR;#^>HBB#S>wQGj|npB*$wDr?X&obxNtqM z%&nWzD?BT#+t6#;XWfVRN<5N``X~_^#Ix9X5b@bul8k!R4Gra4YVn!qz-OdMGV0mG z=xv_m)+4C7e*COQ^-Art9z!Egv`FvQ3$@^tvDF8S=2>F#+3mn*xk)nWm3$sN@cD3( zj8Y4JFL{Cg_Rp=G(2c0DZb3Jr(z*lPj-thSzkASsP;A|c{)-apKJ*VtrCKp!L)etJ zYP`M4TMwS*e(hW6VN_UeqeoC_4MUHj=mUM66bSriJn54 zH3~hAa_b%R3@WU5(X*(uMx*CY^r1fH81y`ft+7b|q!Mc!dJ(18c=Qs=tO@94lw0qi zS5RS1M6aUKnuK0M(Gu;;P=aD>GU|&GYYOU*QfumZW!5w_fM>Zi9r4eJG^0M|3^WLp z)=V@QMN9Q;78-(LYc?8+5^D~69i`S>^ajeTd8il4t@qIrsIcavCsAqTs1J&kY2QNR zf1cKdNdL^c5nHR8 z%B)|Ien#fj@8~yFSbw2EQE44ioqs=8XWvTgI~Z+;V(SpJJxZ)Y(GDoJ4nsSl%sL$H zgmUW$R0|c>k!WXBT1TN>Q1p@Z9gTKHv2_gE4JFpGXm^xa$Dut?W*v|AM7ebW+6xud ziD++BS|_1>Q1r3(RiWA_wwj_kD6yKMx+t}pqk1T_TA=zUw_2hGsIXe0hN!e!qkU2I ziT1TY`=QusiyEQCYKI!5)M}6RN14?D9e{G{WYh!|)+y*fR9dH^fTB;e?=(~m#n$O) zBa~QYpp8*#or$WW%sLCzK)KZs)kKALHrfQ0);VZX6cyTcF4_#m)_G`ilvwAZEl_G* zfVM=Lbs^dc<<>=LYgAYlqis-WU5YM2(JJk`40S@Wbp^T{CDxUwGfJ(i(N!q3x}a-N zZe542MTK<(x*nC*P3T4xt=7I<(9I~eZbP@C#JU6Bj#BF`bSKKJd(hn|x9&stqQZIr z-H%GED~eFGM*AK^kD}Om9Q8tp^(1-%rB-hgqs)2=^+CDy40;+B)^q4tR9Y{f=TWp) z`(8pXqS$%`y^Ip;HS{V?&;*oNlh8zzT2s(u zlv&fzRFqpY&~#K-v(QXbT655B6n(CJ^Uz!rTl3NTD6tlx45ijWl%vdAj25BX`Vf79 z3Tr7^f=X*ST85%8v~ML^fnw`p^bty|PthkRwN{}5W!4(B8s*k!Xe}zN&(S(mT3@0s zQ1qqteT}|CvGpzb1|`<_=sT2JKcEt2)=%h1lv}@`pHX4`hJHn*^#}SLMPF&(U+7O1 zTmM0Sqs00L{THQHHEP&G4fa_Zqm58*)j-uzVQqqHqSB(+Fi>zvoKgF>KolGjXOt*5 z3=|v^XOt*53=|v^XOt*53=|v^XOt*53=|v^XOt*53=|v^XOt*53=|v^XOt*53=|v^ zXOt*53=|v^XOt*53=|wzB^Jeofr3NwjCxiZ?SnF_E~!6AW0=`uvYA%RBeazw!) zfkx>HM8P3}MyWHR;E+J0bS0wTkU*nEv0zvpi!dOFi>zvpi!dOFi>zvpi!dOFi>zvpi!dOFr0)^i(zvpi!dO zFi>zvpi!dOFtkI3MX_O^;E+J0o>6QVC^#h0C{b(}C^#h0C{b(}C^#h0C`E{ZLjsLb zS46=ffkx>;M8P3}MyVU3;E+J0)E!Z9NT5-A2vKlY75ymnKolI3XhgMoB7SW3k^GGk zs6ZJMnMS>q5~x5K6q!be5~x5K6q!be5~x5K6q!be5~x5K6q!be5~x5K6q!be5~x5K z6q!be5~x5K6q!be5~x5K6q!be5~x5K6q!be5~x5K6q!be5~x5K6q!be5~x5K6q!be z5~x5K6q!be5~x5K6q!be5~x5K6q!be5~x5K6q!be5~x5K6q!be5~x5K6q!be5~x5K z6q!be5~x5K6q!be5~x5K6q!be5~x5K6q!be5~x5K6q!be5~x5K6q!be5~x5K6q!be z5~x5K6q!be5~x5K6q!be5~x5K6q!be5~x5K6q!be5~x5K6q!be5~x5K6q!be5~x5K z6q!be5~x5K6q!be5~x5K6q!be5~x5K6q!be5~x5K6q!be5~x5K6q!be5~x5K6q!be z5~x5K6q!be5~x5K6q!be5~x5K6q!be5~x5K6q!be5~x5K6q!be5~x5K6q!be5~x5K z6q!bea@TaUD1vx`a{niM0=sw>V|5g#OjXfpwxP3y)vr@YQ(eL>WMm`!g?5y&LY#O z4P-U~*$py{5}C|!8Gi;8TYR;C;H&n@H0oJ3%0vQXBB`}8+6ZM<4OAWF)+VSXDy+@W zrl_>GK%1lJFMZ6d(3U8+wn1B?#M%yRi&AR`v^~nKozRXbw{}LgP+{$gc0r}JJK7CJ ze{0{KXb%)yd!xNjV%0|bpwz01>Y&W3kLsb^YKR)3!rBk*i%P38YJ{TyXx{;7e-v8> zq9!P@4n_x|)H)O$f->uHbQsF5BheA4u#QGYq0%}Q9fP9(YTxnbI22naq7zVJRiTqm zYBfVmQD(J3%~5W(LM>5YwLz^>X|+RbQS^`YbwKS=Y@LEmMu~MAIu)hX8R&GBS!ba$ zQEr`$I-wI(`ilS-kyAWM~V(Vgb5lXB}(IqIgE<>GAW?g|UN4a$+>Wm8O zYIGGUtuE*q6m`|U>(I3*wr)Vzqr|!i-H1}_7IZVptlQA7D7WrFx1++k3*CuI>mGDB ziXPOy`_R28wjMzDqr~cpB9vO)(1R$m9zxwwZuLYxP+>iS9!9107%-L&s<)C)}wFFVVy(VbiJR)x_h|!dcS~m?Qnx% z#8r4Af3mA@FJb>kcGv&Lz9`XVt3T?e&DKCP02S6?GzgW}P&5QZ59y=4fnG%vyt1qulxotwn|PIa-HG>r3p$pklvw|u|DxeijlKDazBlXqs2bV~<<>@Mb5vLxqb*QrRYzN*=rOI+N7)L+R!y`u zN~}%LHYl~WMZ2KP+79iCa%+3E8!D_F(C(;A4;t{ zs1eGnx~MVAt$JvGR9N-V0jRVZpe87KT>BcL15s=pgpNXqbuc;_rPd+n7?fFuqGM5R z9fpoWg>^VO9+lP+h-NLqjoNo4IuXUzNvJhStSZz7rB+ka7G+j5)DGoVbJQLcRtwYt zl~S!!(LjDf+hP50YNz3Ic^W^dr>9pw6sNztMT+Kd?8PBKkZoYv?))| z#usa^p4PksU4^1px)fcFVyhFn1|`;Is0&K1%h9zcv#vnbq1@_>u1AG+CAtBX){ST! zih66`O=vudt((y-lvuZ**(kMcMRQPQ-G=6(+`1jDK!tS&T8T=Fo~H0Siu!0DJx$>c z6kB(ruTWy$gT6+oMTb-P6J^$Y=r5E@J!(d9Q{G-!|AW<)d9w;X$h>)lyD@K3;qJ`* zV*U61A7bX0>%Z>7%rDq~-IJMLvj6&F=F0t#;L81v;>!Jx;mZBJaOM8TapnFeaOM6d zapnFP@5|eU?|*OR{VLptxlx6mVs2dFr8`mWuGEOW!62Y3(Bo~(Y2_s?nBq1(z+jAkD}MK?*ViJ zimmRb8%nIa9{(9%kA2ocG#X{rA~Xi&)?zdk71jr694f63(RdUk+P4HvK(VzHy@wKO z8JdVvYdM;PGHV6OP;RY6lTl%Pgr=a<`WQ_`QD5!*1WiM+^(mT;601NnP-?A0Gf`%( zMzc_EtwFOr1o%W!6Dd4F!EUl65eu zh6?Ktv=J(;L(#@4>aTr=q3S5M4o5XmVjY2MqSQJPZGtlED6}cct)tOqsIZPfo1@Y? z7Hxr|0or#Q+7iXq@n|cQSSO&ZQEHutwn3S7651B!Ru$R~6;@NUJu0ncXa^Jx)V}6u zM-*Ev&`v0^TB2GgwOXN_QD(J9yP(`^gLXxQ)fVlBN~;~(9Yuq*uRYoW#a0KjCrYf7 z(OxLEPC8K7Wtus(v6b;tCGf_PhTW6vAD6u-C1}L@8Mh#JB zorCs8xpgku4;9vVs1Yiy^HF0I4bi>}(Ecd4E<^{Q#JUJIL8)~yIuK>nrRWlrTUVfC z^yO<-XLN$T{Ls1zUCAq>q1ty1x*EmSwWte9tXt5{D79`!x1r4HiXxO--Oz)mupUC) zQEBx=Jy7(z_C10gMzQr6dK4wr zGHWu*P;N~{Q&3?|N7GPg%|tU$^tSfRMzc_C%|&xiV!e;%q10M{=A+D7h;o!$i_s!f zSRbMfP-!hiOHedS`a zMXC1vgnmT5C60>)PL&Z#)FV!m1x}TbNt8HI7W$#g;zU{CR2hjxJ>x`K;8YobL`ffo zQ)T24B~FwDPL&ZylsHiqI8{a(QQ|~d;8Yo5M2Qn+fm3B<5hYHP1x}R_MU*&E7C2Q# z5>etrS>RL|K}3lYWr0&=iPi6J=o> z$}CQl1x}TbJk&?wL|Nce8PP+D6J_B&R9c)U3lmW^O3ye^7AB$C;zU{CR2lI@J>x`K z;8Yp;Lx~e*VG7DDPLu^sm61TyGftERPL&ZslsHiqI8{alQQ|~d;8YnQM2Qn+fm3Cq z5GC3N11*Ha5T#~_7D94}QVY}^WmYRh3n58FJ)?av&_YNQQKEhD|3A-V(LNYxAta2b zXS5FnS_nxaO0*9KS_p|FO0*9KS_sJ_O0*9KS_lawO0*9KS_nxbO0*9KS_p|GO0*9K zS_sJ`O0*9KS_sJ`O0*9KS_nD2DA7I`Xdxt$C|!nVAtaM1U4bq~nRO+ig^*ODp3y!S zXdxt)DA7I`Xdxt*DA7I`Xdxt+DA7I`Xdxt-D0M@$5E4z49zxwwYV}045E4$*Guj6O zErg^KCE5oAEri4qCE5oAErjF~CE5oAErbLVCE5oAErcW#CE5oAErdiACE5oAEretg zCE5oAErf&=CE5oAErg^LCE5oAEri4rrMh%`)#0;`rBxr*)8{G2=~+Y60L9jRXkUGv z(rSzvq0~A6?T<2x_QB8utIViTyN9Uo$x)5D}QtM)L5z4Gf(IqIi zE<>GAVO@bPN2PTo>Wrd^+IKa&3dL3zbPY(I3*wP+s<*Q3n38{LI+>t1vZDy#?4 z{iw9Mq6kHkw67a_5XII*s5?rmo~Q>(tzPIclv%w|jB<;H!O#a47Cm=i8Y->l(6cDY zwC@GFa~NBvM?4MYP_X$?k$P&8TlhN2-TwrKnd zqflavM(?838jHrD%o>lzq1<{8O+bY;2~9+$H5p|nnxcJE(G(P0v(QYGSaZ;9lv?!o z1^WDmE9(80q9rJ|mZN2;uzp4K`4LytE9o!{bQzLYlsH-$I9^F!QQ~N2;CLl@MTw)8 zp&v@ETM)-9t1^qDm4V}xRk_8{%E0kT@``#tj#dVaS5}o4M=JxzE32YuddAVp!12ne z*y3nq;CN+KVsW%GaJ;fAwK!TCI9^F!QSZmm%E0kT@`@5iD+9+Xs|t&wm4V}x#Y@k;WF5=Sco$1BMzN*t{W9Iqs=C~>qhaJ-VdqQue4!0}4XE=nA&3>>c{ zttfG{GH|?-vx^c(D+9+XNh?YmtqdHmB&{fMv@&qKlC+}4(aON_O45oFM=JxzD@iL# z9IXr-uOzJ~akMgUyppt{#L>#Y@k-K)5=Sco$16!IN*t{W9Iqs;C~>qhaJ-VVqQue4 z!0}4biV{aF1IH^#D@q)#3>>c{ttfG{GH|?-w4%h(%E0kT(uxvCD+9+XNh?YmtqdHm zB&{fMv@)zlsWlRDyppt{o^iA?aJ-VVqQue4!0}4biV{aF1IH^#D@q)#3>>c{ttfG{ zGH|?-w4%h(%E0kT(uxvCD+9+XNh?YmtqdHmB&{fMv@&qKlC+}4(aON_O45oFM=Jxz zD@iL#9IXr-udM3&KAK*QN`sdC$&}voZG+qVKf^}rpSNG{jVoTS*Ho{tUQ+{~!C&=N z5c*d0f4l?ct3379oc^}sdh6>Q^=+s1=Ic=Xtrq4hG5>x2&g-A^wW$79^$&j#^AF$e z`TD*!MRibNHA8h#X*EanP_#g=Y=P>d*lLLypu}p08lu!{jrK*E)duZ{a;q(BgbJ%2 zYK%&&J=z~dx%PEH2cXzG88tzPbqYEVrPitFAe33Bp@UIwosJGcg>?ox6qVMQ=r9y5 z)V{OO;V8B`q9agZosEt}sYUB)I0|JJt*7B=lw0SaV^AS&vTyZj{D4n=`8Zlz5|F+=5Z{r{o*OmW--DCEzHwVpRPp2}iLt<33_(wqdL-MoaXx zEn^)qHrp}Q6%(^PV?8l7J22K4GxKD|24ZfW!q`wO%w>$JSenZjhl|lt?Onk*LX6Fo zj3dRwRPCwiPl-F~#i~73{V91zQMIS4KPB)es`ga%rz9T5f^m#knyVPciqSGXUClU7 zjLkKS0gVhM1e*GtLwXvt*nlmgWzPv&CqI_WsB?M~uy% z80U(KsoK+dVrr`P^nEciReL&L%uUsvE)Wazcg9>S%|93yiqT5#{gZK#7@L1FE*2A0 zwWq2-B@U?x)RewrKQdI4!>Q9MDimE+T{V6#~QMIS4KP4zBs`ga% zrz9ms)t;*Ul&GYr+Edk^l9d!yd#d_V!jhtDPgQ?PT2fT)sp?OOONy#JRsAV>Nl~?@ zsy`(#DXR7~;*G?lsM^!6Vri=O^g%Hy^mHm?H!(IEAX|HNe9}{C!wWqzr#8mC+<6>&6_VfucGgW)~q?ntk zJ&nb}RPAYRu{2eC+DD95Yp-fgRewr|QdI4!>Q6~gimE+T{V6d@QMIS4KP5*gs`ga% zrvxcQ)t;*Ulq997+Edk^5~UPXd#d_VvXr7~PgQ?Pm{L^jsp?NjQ;MoRRsAV(N>R0^ zsy`)9DXR8V^`}+2soK*-EKJp&_7zK0wWs~WXszCN4P$>XHdT8%Kuk>4o(>dKQ?;jq z#LQIf>0mK8ReL%_EKJp&4i!sNwWqI((P!GL+S510*i`N5n_^Z|Ca4D+xRQ0DME=ARzs{WM7rKs9d)t{2N6jghw`cp!eqH0f7 ze@g07RPCwiPl;WMsy$WxDY;8gwWq2-C3q>S_Ehz!BriqPo~r(o=%uLIQ`Mi6y%be@ zs`^vHm!fJQ9MZimE+T{VDlNQMIS4KP7-Es`ga%rz9{%)t;*UlnAD% z+Edk^lED;JdwLRYgfKZ|Cl_{$BRQ0FCGDX#%s{WK* zrl{Ie)t?f~6jghw`csmbqH0f7e@Zk{RPCwiPswJAsy$WxDd9{}wWq2-C7mg%_Ehz! z#4|QBjNit0TLyb;nA)qAS` zQ&O6udQa7VN=#E!@2UDv$!Ut}JyriHK}}J;r|Lf?sVS=WRQ;z!HAVHFs{fR%rl{Ui z^`8>f6xDmG{!`MLqIyr&e@a|aRPU+!PswYF>OEEeDS=HOUpHDXRBW{ij4YMfIM#|1|nhRPU+!PYH2~>OEEeDR(Jh!v_3m1);K_zixP& T(P`T-l(%lYUC7&!owofy7CP=O diff --git a/tests/interchaintest/bytecode/crosschain_swaps.wasm b/tests/interchaintest/bytecode/crosschain_swaps.wasm index bea2852da76c684d3fd711d27992e3a683620b82..acffbaa18b9ace49d7ac45915e1322d0cec5360a 100644 GIT binary patch literal 469289 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∋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