diff --git a/app/app.go b/app/app.go index b72c0dc5e5..83e053b840 100644 --- a/app/app.go +++ b/app/app.go @@ -41,15 +41,15 @@ import ( "github.com/cosmos/cosmos-sdk/x/gov" govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - transfer "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer" - ibc "github.com/cosmos/cosmos-sdk/x/ibc/core" - porttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/05-port/types" "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" "github.com/cosmos/cosmos-sdk/x/upgrade" upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" + transfer "github.com/cosmos/ibc-go/modules/apps/transfer" + ibc "github.com/cosmos/ibc-go/modules/core" + porttypes "github.com/cosmos/ibc-go/modules/core/05-port/types" "github.com/gorilla/mux" "github.com/rakyll/statik/fs" "github.com/spf13/cast" @@ -63,13 +63,11 @@ import ( stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - "github.com/ovrclk/akash/app/migrations" "github.com/ovrclk/akash/x/audit" "github.com/ovrclk/akash/x/cert" escrowkeeper "github.com/ovrclk/akash/x/escrow/keeper" "github.com/tendermint/tendermint/libs/log" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" abci "github.com/tendermint/tendermint/abci/types" @@ -81,14 +79,14 @@ import ( distr "github.com/cosmos/cosmos-sdk/x/distribution" distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper" distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" - ibctransferkeeper "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer/keeper" - ibctransfertypes "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer/types" - ibcclient "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client" - ibchost "github.com/cosmos/cosmos-sdk/x/ibc/core/24-host" - ibckeeper "github.com/cosmos/cosmos-sdk/x/ibc/core/keeper" "github.com/cosmos/cosmos-sdk/x/slashing" slashingkeeper "github.com/cosmos/cosmos-sdk/x/slashing/keeper" slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" + ibctransferkeeper "github.com/cosmos/ibc-go/modules/apps/transfer/keeper" + ibctransfertypes "github.com/cosmos/ibc-go/modules/apps/transfer/types" + ibcclient "github.com/cosmos/ibc-go/modules/core/02-client" + ibchost "github.com/cosmos/ibc-go/modules/core/24-host" + ibckeeper "github.com/cosmos/ibc-go/modules/core/keeper" dkeeper "github.com/ovrclk/akash/x/deployment/keeper" mkeeper "github.com/ovrclk/akash/x/market/keeper" @@ -114,7 +112,7 @@ var ( type AkashApp struct { *bam.BaseApp cdc *codec.LegacyAmino - appCodec codec.Marshaler + appCodec codec.Codec interfaceRegistry codectypes.InterfaceRegistry invCheckPeriod uint @@ -156,6 +154,9 @@ type AkashApp struct { // simulation manager sm *module.SimulationManager + + // module configurator + configurator module.Configurator } // https://github.com/cosmos/sdk-tutorials/blob/c6754a1e313eb1ed973c5c91dcc606f2fd288811/app.go#L73 @@ -174,7 +175,7 @@ func NewApp( bapp := bam.NewBaseApp(AppName, logger, db, encodingConfig.TxConfig.TxDecoder(), options...) bapp.SetCommitMultiStoreTracer(tio) - bapp.SetAppVersion(version.Version) + bapp.SetVersion(version.Version) bapp.SetInterfaceRegistry(interfaceRegistry) keys := kvStoreKeys() @@ -191,6 +192,7 @@ func NewApp( tkeys: tkeys, memkeys: memkeys, } + app.configurator = module.NewConfigurator(app.appCodec, app.MsgServiceRouter(), app.GRPCQueryRouter()) app.keeper.params = initParamsKeeper(appCodec, cdc, app.keys[paramstypes.StoreKey], tkeys[paramstypes.TStoreKey]) @@ -201,6 +203,9 @@ func NewApp( app.keeper.cap = capabilitykeeper.NewKeeper(appCodec, app.keys[capabilitytypes.StoreKey], app.memkeys[capabilitytypes.MemStoreKey]) scopedIBCKeeper := app.keeper.cap.ScopeToModule(ibchost.ModuleName) scopedTransferKeeper := app.keeper.cap.ScopeToModule(ibctransfertypes.ModuleName) + // seal the capability keeper so all persistent capabilities are loaded in-memory and prevent + // any further modules from creating scoped sub-keepers. + app.keeper.cap.Seal() app.keeper.acct = authkeeper.NewAccountKeeper( appCodec, @@ -261,14 +266,8 @@ func NewApp( authtypes.FeeCollectorName, ) - app.keeper.upgrade = upgradekeeper.NewKeeper(skipUpgradeHeights, app.keys[upgradetypes.StoreKey], appCodec, homePath) - - app.keeper.upgrade.SetUpgradeHandler("akashnet-2-upgrade-1", func(ctx sdk.Context, plan upgradetypes.Plan) { - migrations.MigrateAkashnet2Upgrade1(ctx, app.keeper.acct, app.keeper.bank, app.keeper.staking) - - // Set staking HistoricalEntries to 10000, required positive value for ibc - app.GetSubspace(stakingtypes.ModuleName).Set(ctx, stakingtypes.KeyHistoricalEntries, uint32(10000)) - }) + app.keeper.upgrade = upgradekeeper.NewKeeper(skipUpgradeHeights, app.keys[upgradetypes.StoreKey], appCodec, homePath, app.BaseApp) + app.registerUpgradeHandlers() // register the staking hooks // NOTE: stakingKeeper above is passed by reference, so that it will contain these hooks @@ -281,7 +280,8 @@ func NewApp( // register IBC Keeper app.keeper.ibc = ibckeeper.NewKeeper( - appCodec, app.keys[ibchost.StoreKey], app.GetSubspace(ibchost.ModuleName), app.keeper.staking, scopedIBCKeeper, + appCodec, app.keys[ibchost.StoreKey], app.GetSubspace(ibchost.ModuleName), + app.keeper.staking, app.keeper.upgrade, scopedIBCKeeper, ) // register the proposal types @@ -290,7 +290,7 @@ func NewApp( AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.keeper.params)). AddRoute(distrtypes.RouterKey, distr.NewCommunityPoolSpendProposalHandler(app.keeper.distr)). AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(app.keeper.upgrade)). - AddRoute(ibchost.RouterKey, ibcclient.NewClientUpdateProposalHandler(app.keeper.ibc.ClientKeeper)) + AddRoute(ibchost.RouterKey, ibcclient.NewClientProposalHandler(app.keeper.ibc.ClientKeeper)) app.keeper.gov = govkeeper.NewKeeper( appCodec, @@ -350,9 +350,15 @@ func NewApp( }, app.akashAppModules()...)..., ) + // During begin block slashing happens after distr.BeginBlocker so that + // there is nothing left over in the validator fee pool, so as to keep the + // CanWithdrawInvariant invariant. + // NOTE: staking module is required if HistoricalEntries param > 0 + // NOTE: capability module's beginblocker must come before any modules using capabilities (e.g. IBC) app.mm.SetOrderBeginBlockers( - upgradetypes.ModuleName, minttypes.ModuleName, distrtypes.ModuleName, slashingtypes.ModuleName, - evidencetypes.ModuleName, stakingtypes.ModuleName, ibchost.ModuleName, + upgradetypes.ModuleName, capabilitytypes.ModuleName, minttypes.ModuleName, + distrtypes.ModuleName, slashingtypes.ModuleName, evidencetypes.ModuleName, + stakingtypes.ModuleName, ibchost.ModuleName, ) app.mm.SetOrderEndBlockers( append([]string{ @@ -386,7 +392,7 @@ func NewApp( app.mm.RegisterInvariants(&app.keeper.crisis) app.mm.RegisterRoutes(app.Router(), app.QueryRouter(), encodingConfig.Amino) - app.mm.RegisterServices(module.NewConfigurator(app.MsgServiceRouter(), app.GRPCQueryRouter())) + app.mm.RegisterServices(app.configurator) // add test gRPC service for testing gRPC queries in isolation testdata.RegisterQueryServer(app.GRPCQueryRouter(), testdata.QueryImpl{}) @@ -421,14 +427,16 @@ func NewApp( app.SetInitChainer(app.InitChainer) app.SetBeginBlocker(app.BeginBlocker) - app.SetAnteHandler( - ante.NewAnteHandler( - app.keeper.acct, - app.keeper.bank, - ante.DefaultSigVerificationGasConsumer, - encodingConfig.TxConfig.SignModeHandler(), - ), - ) + handler, err := ante.NewAnteHandler(ante.HandlerOptions{ + AccountKeeper: app.keeper.acct, + BankKeeper: app.keeper.bank, + SignModeHandler: encodingConfig.TxConfig.SignModeHandler(), + SigGasConsumer: ante.DefaultSigVerificationGasConsumer, + }) + if err != nil { + panic(err) + } + app.SetAnteHandler(handler) app.SetEndBlocker(app.EndBlocker) @@ -436,16 +444,6 @@ func NewApp( if err := app.LoadLatestVersion(); err != nil { tmos.Exit("app initialization:" + err.Error()) } - - // Initialize and seal the capability keeper so all persistent capabilities - // are loaded in-memory and prevent any further modules from creating scoped - // sub-keepers. - // This must be done during creation of baseapp rather than in InitChain so - // that in-memory capabilities get regenerated on app restart. - // Note that since this reads from the store, we can only perform it when - // `loadLatest` is set to true. - ctx := app.BaseApp.NewUncachedContext(true, tmproto.Header{}) - app.keeper.cap.InitializeAndSeal(ctx) } app.keeper.scopedIBC = scopedIBCKeeper @@ -454,10 +452,46 @@ func NewApp( return app } +func (app *AkashApp) registerUpgradeHandlers() { + app.keeper.upgrade.SetUpgradeHandler("akash_v0.13.0_cosmos_v0.43.0", func(ctx sdk.Context, + plan upgradetypes.Plan, _ module.VersionMap) (module.VersionMap, error) { + // 1st-time running in-store migrations, using 1 as fromVersion to + // avoid running InitGenesis. + fromVM := map[string]uint64{ + "auth": 1, + "bank": 1, + "capability": 1, + "crisis": 1, + "distribution": 1, + "evidence": 1, + "gov": 1, + "mint": 1, + "params": 1, + "slashing": 1, + "staking": 1, + "upgrade": 1, + "vesting": 1, + "ibc": 1, + "genutil": 1, + "transfer": 1, + + // akash modules + "audit": 1, + "cert": 1, + "deployment": 1, + "escrow": 1, + "market": 1, + "provider": 1, + } + + return app.mm.RunMigrations(ctx, app.configurator, fromVM) + }) +} + // MakeCodecs constructs the *std.Codec and *codec.LegacyAmino instances used by // simapp. It is useful for tests and clients who do not want to construct the // full simapp -func MakeCodecs() (codec.Marshaler, *codec.LegacyAmino) { +func MakeCodecs() (codec.Codec, *codec.LegacyAmino) { config := MakeEncodingConfig() return config.Marshaler, config.Amino } @@ -471,6 +505,7 @@ func (app *AkashApp) InitChainer(ctx sdk.Context, req abci.RequestInitChain) abc if err := tmjson.Unmarshal(req.AppStateBytes, &genesisState); err != nil { panic(err) } + app.keeper.upgrade.SetModuleVersionMap(ctx, app.mm.GetVersionMap()) return app.mm.InitGenesis(ctx, app.appCodec, genesisState) } @@ -492,7 +527,7 @@ func (app *AkashApp) LegacyAmino() *codec.LegacyAmino { } // AppCodec returns AkashApp's app codec. -func (app *AkashApp) AppCodec() codec.Marshaler { +func (app *AkashApp) AppCodec() codec.Codec { return app.appCodec } @@ -588,7 +623,8 @@ func (app *AkashApp) LoadHeight(height int64) error { } // initParamsKeeper init params keeper and its subspaces -func initParamsKeeper(appCodec codec.BinaryMarshaler, legacyAmino *codec.LegacyAmino, key, tkey sdk.StoreKey) paramskeeper.Keeper { +func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino, key, + tkey sdk.StoreKey) paramskeeper.Keeper { paramsKeeper := paramskeeper.NewKeeper(appCodec, legacyAmino, key, tkey) paramsKeeper.Subspace(authtypes.ModuleName) diff --git a/app/config.go b/app/config.go index 574081628f..482f8a996e 100644 --- a/app/config.go +++ b/app/config.go @@ -21,10 +21,6 @@ import ( "github.com/cosmos/cosmos-sdk/x/genutil" "github.com/cosmos/cosmos-sdk/x/gov" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - transfer "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer" - ibctransfertypes "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer/types" - ibc "github.com/cosmos/cosmos-sdk/x/ibc/core" - ibchost "github.com/cosmos/cosmos-sdk/x/ibc/core/24-host" "github.com/cosmos/cosmos-sdk/x/mint" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" "github.com/cosmos/cosmos-sdk/x/params" @@ -37,6 +33,10 @@ import ( "github.com/cosmos/cosmos-sdk/x/upgrade" upgradeclient "github.com/cosmos/cosmos-sdk/x/upgrade/client" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" + transfer "github.com/cosmos/ibc-go/modules/apps/transfer" + ibctransfertypes "github.com/cosmos/ibc-go/modules/apps/transfer/types" + ibc "github.com/cosmos/ibc-go/modules/core" + ibchost "github.com/cosmos/ibc-go/modules/core/24-host" appparams "github.com/ovrclk/akash/app/params" ) diff --git a/app/export.go b/app/export.go index a43677e879..919bdbd2b7 100644 --- a/app/export.go +++ b/app/export.go @@ -167,7 +167,7 @@ func (app *AkashApp) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs counter := int16(0) for ; iter.Valid(); iter.Next() { - addr := sdk.ValAddress(iter.Key()[1:]) + addr := sdk.ValAddress(stakingtypes.AddressFromValidatorsKey(iter.Key())) validator, found := app.keeper.staking.GetValidator(ctx, addr) if !found { panic("expected validator, not found") diff --git a/app/mac.go b/app/mac.go index 8a60279433..a320a45061 100644 --- a/app/mac.go +++ b/app/mac.go @@ -4,9 +4,9 @@ import ( authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - ibctransfertypes "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer/types" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + ibctransfertypes "github.com/cosmos/ibc-go/modules/apps/transfer/types" escrowtypes "github.com/ovrclk/akash/x/escrow/types" ) diff --git a/app/migrations/akashnet_2_upgrade_1.go b/app/migrations/akashnet_2_upgrade_1.go deleted file mode 100644 index ba8739f413..0000000000 --- a/app/migrations/akashnet_2_upgrade_1.go +++ /dev/null @@ -1,107 +0,0 @@ -package migrations - -import ( - "fmt" - - sdk "github.com/cosmos/cosmos-sdk/types" - authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - vestingexported "github.com/cosmos/cosmos-sdk/x/auth/vesting/exported" - vestingtypes "github.com/cosmos/cosmos-sdk/x/auth/vesting/types" - bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" - stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" -) - -func MigrateAkashnet2Upgrade1( - ctx sdk.Context, - akeeper authkeeper.AccountKeeper, - bkeeper bankkeeper.Keeper, - skeeper stakingkeeper.Keeper) { - - akeeper.IterateAccounts(ctx, func(acct authtypes.AccountI) bool { - vacct, ok := resetAccount(acct) - if !ok { - return false - } - - balances := bkeeper.GetAllBalances(ctx, vacct.GetAddress()) - - delegations := getDelegations(ctx, skeeper, vacct.GetAddress()) - - for _, delegation := range delegations { - balances = balances.Add(delegation) - } - - vacct.TrackDelegation(ctx.BlockTime(), balances, delegations) - - akeeper.SetAccount(ctx, vacct) - - return false - }) -} - -func getDelegations(ctx sdk.Context, skeeper stakingkeeper.Keeper, address sdk.AccAddress) sdk.Coins { - gctx := sdk.WrapSDKContext(ctx) - squery := stakingkeeper.Querier{Keeper: skeeper} - - dresponse, err := squery.DelegatorDelegations(gctx, &stakingtypes.QueryDelegatorDelegationsRequest{ - DelegatorAddr: address.String(), - }) - - delegations := sdk.NewCoins() - - switch status.Code(err) { - case codes.OK: - for _, delegation := range dresponse.DelegationResponses { - delegations = delegations.Add(delegation.GetBalance()) - } - case codes.NotFound: - default: - panic(fmt.Errorf("error getting delegations [%s]: %w", address, err)) - } - - udresponse, err := squery.DelegatorUnbondingDelegations(gctx, &stakingtypes.QueryDelegatorUnbondingDelegationsRequest{ - DelegatorAddr: address.String(), - }) - switch status.Code(err) { - case codes.OK: - denom := skeeper.BondDenom(ctx) - for _, delegation := range udresponse.UnbondingResponses { - for _, entry := range delegation.Entries { - delegations = delegations.Add(sdk.NewCoin(denom, entry.Balance)) - } - } - case codes.NotFound: - default: - panic(fmt.Errorf("error getting unbonding delegations [%s]: %w", address, err)) - } - - return delegations -} - -func resetAccount(acct authtypes.AccountI) (vestingexported.VestingAccount, bool) { - // reset `DelegatedVesting` and `DelegatedFree` to zero - df := sdk.NewCoins() - dv := sdk.NewCoins() - - switch vacct := acct.(type) { - case *vestingtypes.ContinuousVestingAccount: - vacct.DelegatedVesting = dv - vacct.DelegatedFree = df - return vacct, true - case *vestingtypes.DelayedVestingAccount: - vacct.DelegatedVesting = dv - vacct.DelegatedFree = df - return vacct, true - case *vestingtypes.PeriodicVestingAccount: - vacct.DelegatedVesting = dv - vacct.DelegatedFree = df - return vacct, true - default: - return nil, false - } - -} diff --git a/app/params/proto.go b/app/params/proto.go index ffcba9bdc2..b71f91e67c 100644 --- a/app/params/proto.go +++ b/app/params/proto.go @@ -7,7 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/x/auth/tx" ) -// MakeEncodingConfig creates an EncodingConfig for an proto based test configuration. +// MakeEncodingConfig creates an EncodingConfig for a proto based test configuration. func MakeEncodingConfig() simparams.EncodingConfig { amino := codec.NewLegacyAmino() interfaceRegistry := types.NewInterfaceRegistry() diff --git a/app/sim_test.go b/app/sim_test.go index 962fecefb6..8df038409d 100644 --- a/app/sim_test.go +++ b/app/sim_test.go @@ -25,13 +25,13 @@ import ( distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" evidencetypes "github.com/cosmos/cosmos-sdk/x/evidence/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - ibctransfertypes "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer/types" - ibchost "github.com/cosmos/cosmos-sdk/x/ibc/core/24-host" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" "github.com/cosmos/cosmos-sdk/x/simulation" slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + ibctransfertypes "github.com/cosmos/ibc-go/modules/apps/transfer/types" + ibchost "github.com/cosmos/ibc-go/modules/core/24-host" ) // Get flags every time the simulator is run diff --git a/client/broadcaster/client.go b/client/broadcaster/client.go index 6f99f29cfe..9cc2758090 100644 --- a/client/broadcaster/client.go +++ b/client/broadcaster/client.go @@ -5,6 +5,8 @@ import ( "errors" "fmt" + "github.com/ovrclk/akash/sdkutil" + sdkclient "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/tx" "github.com/cosmos/cosmos-sdk/crypto/keyring" @@ -35,7 +37,7 @@ func NewClient(cctx sdkclient.Context, txf tx.Factory, info keyring.Info) Client } func (c *simpleClient) Broadcast(_ context.Context, msgs ...sdk.Msg) error { - txf, err := tx.PrepareFactory(c.cctx, c.txf) + txf, err := sdkutil.PrepareFactory(c.cctx, c.txf) if err != nil { return err } diff --git a/client/broadcaster/serial.go b/client/broadcaster/serial.go index 8f64a18236..22492d1eb5 100644 --- a/client/broadcaster/serial.go +++ b/client/broadcaster/serial.go @@ -8,6 +8,8 @@ import ( "strconv" "time" + "github.com/ovrclk/akash/sdkutil" + "github.com/boz/go-lifecycle" sdkclient "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/tx" @@ -47,7 +49,7 @@ type serialBroadcaster struct { func NewSerialClient(log log.Logger, cctx sdkclient.Context, txf tx.Factory, info keyring.Info) (SerialClient, error) { // populate account number, current sequence number - poptxf, err := tx.PrepareFactory(cctx, txf) + poptxf, err := sdkutil.PrepareFactory(cctx, txf) if err != nil { return nil, err } diff --git a/client/docs/statik/statik.go b/client/docs/statik/statik.go index 65b5b63dea..038c0c0159 100644 --- a/client/docs/statik/statik.go +++ b/client/docs/statik/statik.go @@ -7,6 +7,6 @@ import ( ) func init() { - data := "PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00 \x00favicon-16x16.pngUT\x05\x00\x01\x80Cm8\x00\xbd\x01B\xfe\x89PNG\x0d\n\x1a\n\x00\x00\x00\x0dIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\x00\x00\x01\x84IDATx\x01\x95S\x03Luq\x1c\xfd\x8c\xf1\xc3\xec0\xa7)\xcda\xb6k6\xb2\x9b\xf9\xb2k\xc85/\xdb\x8dqx\xc6\x94m\xcc{\xef\x7fO\xff\xf3l\xdc\xed\xf2\xe0\xfe\xf8\xc9\xffP\x14\x11/\x14[\xa3P\xc4\xa1\xbc?\xf1t>7\x12s\x13\x03\x85\xca7IR a\xb5j\x8f\xa71\xbe]\x88\xf6\xb9L\xf0\x1c\x93\xcf\xda\xe3)\x10\x93f\x8d\xe4\x06\x13\xcf\xde<\x9b\xd14\x95\x8a\x92\x81OA\xcfF\x89\xdd<\x9b M\xe6}L\xe4\x07\x15\xc5\xf5\xe3\xffI\x0c{\xd6\x8d\xffs\x994\xbasfh\xae?\xafk\x1aprw\x10 <\xb9\xdb\xc7\x86\xa6\xd1\x19I\n\xa8\xb1\xd7\x84y3g\x171T$\xb5c\x7fq\xfbbq\xbfk\x8e'\x1dQ\xb0\xc2,\x92\x0bx|;F\xe5\xf0\xef\x00\x83\xf2\xa1\x1fx|?q\xbd\xcb\xc2\x16\x80ZF\xf0\xc4J\xf3\xe3\xe4n1\xcc\x17k`:}\xcby\xe8\x98\xcbB\xc7|6z\x97r\xd14\x9d\x06\xd3\xf9\x8a\xe4\x94\x90\x8b\xb6\xd9\x0cP\xebc@\xd0|\xbe*\xc94\xc8\xa7\x98'\xcdh\x00\xe3\xd92\xa6vK}\x0cB\xa4\xf0+D\n\xc7\x81)\xb0\x10\x9a\xe3\xa9\xd8\x8bx\xe4(\xa2\xbb\x8dl\x0d\x01\xb6\x8a-\xf378\xbe\xdd\xc7\xa6\xb6\xc9\xd9\xc6d\xd8\\m\xf4\x0c\x92 uQ\x0e\xd2\xf5\xb3\xd1\xf1w\xdfQ\x16\xb34a$\xa1\xc4\xc4(V\xbcF\xd9\xdf\xa4\x91\xe9\xb0&,\x12+\xcd\x93\xcf\x1c\x1cb\xdc\xca\x00qt\xeb\xcc-\x14\x89\xfe\xfc\x0fm2j\x88\xec\xccs\x18\x00\x00\x00\x00IEND\xaeB`\x82\x01\x00\x00\xff\xffPK\x07\x08\xd4`4t\xc7\x01\x00\x00\xbd\x01\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00 \x00favicon-32x32.pngUT\x05\x00\x01\x80Cm8\x00u\x04\x8a\xfb\x89PNG\x0d\n\x1a\n\x00\x00\x00\x0dIHDR\x00\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\x00\x00\x04|ID\xc4\xcf\xd0@\x04&%\xad\x1e\x16\x0f\xf7\x8d\x97AR\xfa\xca\xe7l\x87\x05\xf8\xd2\xfb\x0c\x84\x1d\x0dLVY\xdc/ju\x13\x1a\x88\xd2\xa0\xaaa\x82|nzp_\xf4\x03\xc8 \xd4;^\x8a9}\xeeu\x9a\x91 `\x04\x14s\xec\xe1\x0c\xc6]\xa3\x05``\xd1w\x12*~ \x00\xf3\xae\xd3\xa0\x9cb\x82\xa2bx(\xb3n\x1fqx\xd2\xf2\xda4\x1d\x8a}\x1ck\xd4>\x9cI+\xeb\xb3\xf4k\xc8u`L\x93\xf3]4\xb5\xd0\xc3\xe33\xd9\xee\xd7\xf2\xd9\x19\xea\x18\xc9\xc1Y:\x18\xfb(-\xadN\x82\x06e\xd5\x1f0\xa2\x1dV\xf8\xbe0\xc1\x985\x01\xf8\xd2~\\\xa6\xa5\xb5)&\xf6\x98V\x80l\xe4\x03\xf8\x03\x04\x00s\x9a^\xec\x85\x00\xf4+\x0b\x00\xe1:G\xf2p\x96\x0e\xc4,\xe46\x1e5\xbbP\xdd\x15J\x80}\xce\xa4\xe2\xc8{m\xa4\xe2\xc3\xc2\x01\x07\xc0\xdb\xa4\x18-\xa1\x931\xba\x10S\xfa%\xb6P`\x10\x19v\x99#|Gg\x9b \x10W\xf6\x8dI1\xba\x92\xd66\x17E\x12\xfa\xd9\xa8\xf3UTe\n\x1b\x95\x9d\x81f\xe5\x18\xa5umc\x81\x86\xa6\xeb\xec \x804\xcbg\x17\xa19\xfa\xc6\xf7<\xa3\xbd\xf2\x0e\x7f\x02\x80\x97Y\xc7\xac\x184$h\xa3v\xba! \xcc{\xcd\xb4!\xb1\xd8\x92%h\xe3\x93\xdc\xd3_\xda1\xe6\xaei\xcf\x83\xa6p\xbc$\xf0\xb2\xda\x94\xa2q\x14B@\x13\xdb\xff\xf3\xd7\x0d\xfaA\xb9\xc5n{\x8e\xd6Y\x08\x01u\xc1'~\x16\x8e\xe9\x04\xa2\xfbA+\xc74\x0c\x98\xab\xd7:\xfc0\xd1v\xaf$\xa2#\xb7\xf1\x08\xfdm!OXh8\x10j|g\xd1\xe0a\xb2\x99\x04\x9a[y\x9a\xbdk\xf24C$\xa0\x9e#\x9f\xa3\xa8\x001\xc6\x1a\"\xc0\xe4i\xa6\xcc0\xf3\xf7\xb7\xf5XE\xb8\xe0\xa1\xc9\xc2\x0c\x90\x83\x80$\x838\xdf\xd6\xe3\xd4\x82FNG\x0f\x876\x8a\xbf1\xa8d(\xa7@\x8cQX\x90\xdb\x19\x9f\xc5YG\xe9\x9e\x00\xa5y3]\x9aJ\xe1\"\x00\x00\x00\x00IEND\xaeB`\x82\x01\x00\x00\xff\xffPK\x07\x086B\xc8\xd7\x7f\x04\x00\x00u\x04\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\x00 \x00index.htmlUT\x05\x00\x01\x80Cm8\xb4T]O\xdc:\x10}\xdf_1\x98\x07\xe0\n\xc7\x17V\x17]\xa5I\x1e(\xad\x8aDU$\xd8\x87\xaa\xaa*'\x9ed\x0d\x8e\xbd\xb2\x9d\xfd\x00\xf1\xdf\xab8\xc9\x86v\x11\x95\xaaV+\xad\xc7s&\xe7\x8cg\xc6N\xf6(\x85\x0f\xb7\x1f\xaf\xa04\x16\x9c\xe7^\x16 \xa4\xf3V\xe6\x8d\x97FC\xdeh\xa1\x10\xf2F*\x01\x94f\x93d\xef\xe2\xd3\xdb\xdb\xcf\xd7\xef`\xeek\x95M\x92v\x01\xc5u\x95\x12\xd4$\x9b\x00$s\xe4\xa25\x00\x92\x1a=\x87b\xce\xadC\x9f\x92\xd9\xed{\xfa?\xe9!/\xbd\xc2\xecf\xc5\xab\n-\xcc.\x13\xd6y:TI}\x0f\x16UJ\x9c\xdf(tsDO\xc0o\x16\x98\x12\x8fk\xcf\n\xe7\x08\xcc-\x96)\x99{\xbfp1c\x85\xd0w.*\x94iD\xa9\xb8\xc5\xa805\xe3w|\xcd\x94\xcc\x1ds\x9d\x14m$\x9bF\xd3\xff\xa2\x93g\x9e(\xd0\xedh\xcb\xc2\xe8AU\xd6\xbcB\xb6\xd0\xd5 [\xf2e\x8b\xd3\xe9\xe9zz\x1a\x05\xc0\xc9\x07t) \x1e\x02\xec\xf7\xf8N\xce\xd6'g?\xf0\x05\xcf\xc8\x17*\xd2\xd9\x10\xda\xd0\x9b\x8f\xfd\n\x90\x9b5u\xf2A\xea*\x86\xdcX\x81\x96\xe6f\xfdf\x8b\x9b%\xdaR\x99U\x0c\xb46\x0f\xd4\x15\xd6(\x95s\xeb\xe8\x12\xad\x97\x05W\xbb\xb1t\x13C\x178`O\x93\xde\xf8\xe7x0\xe2\x1cKcq\xdc\xf3\xd2\xa3}5?\xa9\xe7h\xa5\xdf!\xcd\x8d\xd8\xec|Xs[I\x1d\xff;\xa6\x97\xf3\xe2\xbe\xb2\xa6\xd1\"\x86\xfd\x92\xb7\xbf\x91\xaa\xfdO\xd8\xb6^ \xebF\xb35[\xfa\xbe\x9eB.A\x8a\x94\x8c\xe3@\xb2\x84 \xb9\xcc&}\xc1\x0b+\x17\x1e\x9c-\xfe\xc8\xb0\xd1\xeeVEw\x8edmz\x81=\xfb;R\xces-\xb82\x1a\xe9\xc2\xa2C\xff\x8aj\xb7YI-\xcc*2Z\x19. \x85\xb2\xd1E\xfb\x16\x1c\x1e\xc1\xe3\xd0\x1b\xc6\xe0<< \x1c\xdc\xc6y\xac{\x7fa\xb4\xf3\xd0HH\xa1\xbf\xd8\xb3\xcb\xf3p\xd8\xc3\xb1\x87\x8dU1\x90h\xc82\xda\xf0Z\x91\xe3-,L\xfdM\x8a\x18\x0e\xf6\xc7c\x1c<\x83\x11\x17WR\xdf\x87\xd9\xf1\xb6\xc1\x11\xea\x0e\xe8b\xf8\xb2u\xc1\xcfyD}P\xc4\x17\xd2\x1d\xbf\x14w\xb3\xad\xd8u\x08\xdd\xc6|}\xa6\xa4\x9aJ\xea_)uA\xd1\x85Y\x85Z\xce\xacz\x89K\xf1\x8di|\x0cd\x14\xbe\n.2\x8c\xf1\xd1P\xf6\xbe5\xa1\xbe\x8d\x0c\xce\xa70\xd6c\xff\x12\xd6\x0dv\xc2\xba\xf7\xf9{\x00\x00\x00\xff\xffPK\x07\x08\x8e\x10\x9f\xf1}\x02\x00\x00\xe3\x05\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00 \x00oauth2-redirect.htmlUT\x05\x00\x01\x80Cm8\xc4VMo\xe36\x10\xbd\xfbW\xbc\xf0\x10I\xb0\xab\xa0=*Q\x82\"\xd8C\nl\xb7\xd8 \xbd\x04\xc1\x82\xa6\xc66\x1b\x99\x94I\xca\x86k\xfb\xbf\x17\x94eK\xb2e\xd4=u\x0e\x968\x9cy\x9a\x8f7\xa4\x1fn2-\xdc\xba \xcc\xdc<\x7f\x1c<\xf8\x07r\xae\xa6)#\xf5\xd3\xdb+{\x1c<\x8cu\xb6\x86V\xb9\xe6Y\xcaL\xa9\xc2\xc8k\xef\xbc\xda?kO+\x8c,\xdc\xe3\x00\x00\x82\xd2\x12\xac3R\xb8\xe0\xbe\xd2LJ%\x9c\xd4\n\xa6T\x08#l*\xad\x97%7\xd0\xbct\xb3_\x90b%U\xa6W\xb1.H\x91\x89\xed\x8aO\xa7d\xde^\xbeS&\x0d \xf7\xad\xb2\xbb\xef\xf8ZR\xee\xd5qGHk\x9c\xd8\xfae\xd7\xca\xd4\x08o&o\xecZ\xca\xae\xb5\xb4\x7f\xf2\\f#,\x8a\x11\xb81\xf7\x83\xe3\xb6\x9c \xbc\x13:\xa3\xad\xd3\x9f\xa4\xb6d\x8c6w\xb1#\xeb\xc2:\xfa\\\x0b\xees\x8dg\xdc\xce\xa2v\xae^\x16E\x93g\xc72\xb6\xe5\xd8\xd7LM\xc3\x9f\xa3&\x9e\x1d(\xb7\xd4\x07r\xf4\xb6\xc4\x8d\xb8\xe8\xdf\xc4\xce\x8dA\x8aE\x11\xdb\"\x97.d\xb7,j\xef\xc5\x13m\xbep1\x0b\x8f\xcd\n\x97#9\xfa\xc1\x8d\x89\xb0\x81\x7f\xbe\xcb\x0f\xa4\x08X\x80!\x96\xb1\xa1\"\xe7\x82\xc2 \x0dF\x08X\xc2\x82\x08C\xbf{\xbfk\x80\xabP\x17\x05\x9e\xf0\xdb\xeb\xb7\xdf\xe3\x82\x1bKa\xb0\xf1\x08\xfe\x9b\x7fi\xa9\xc2\xcam\x17\x8c:9\xa2M\x9b\xf0\x93\xd6#,y^\xd2iA\x0fb\xc8\x95F\xe1\x93\xd6H\xd3\x14\x8c\xe1i\xef\x80\x04\x19\xf9\x96\xbd}\x7fy\xd6\xf3B+R.\xdcc\x9d!\xed\x8e\x9a\x08 6\xad\xea\xd5\xa4\xa8+\xb8g\\\x9a6\xfc\xebr$l!\xd7t\xf3\xbf\xb1\x153\x9a\xf3xJ.d\x93\\\xafX\xb4\x8f\x96\x0bA\xd6>\xeb\x8c\xd8v\xfb_}K7\xd3F\xfe]\xb1\xa1\x82h%q{\x8b\x9b6\x88/\xc4i }\xc07u~}\xe5\xad\xfd\xc9\x98\xe7q\xd8_}o\xf1\x92%\x9dx\x15\x9f\xd3yO\xbdX]\x1aA\xc9>t\xd6o\x93\xd3\x92\xf2\x04l\xc5\x8d\x92jz\xc1jN\xd6\xf2\xa9\x87\xfa\xb5]\x05\xcc\xf9\x1acB\xa9,\x9f\xd0\x08\x05\xb7\x962\xec\xdb\xb6\xe2\x16b\xc6\xd5\x942H\x05KfI\x06\x7f\x9c\x98\xa8\xc0\xd5\x9c\xa2\x0c\x13\xa3\xe7U\x8e\xb55;'Nk\xe6\xd0\x9d;\xd4%^\x14\xbd\xd5\xf7\x92QN\x8e.\x1c`\x079m\xe3\x9e\x8a\xfe\xed\xa2\xad\xe0y>\xe6\xe23\xdc\xf8u\xa7=\xa3\xf6\xa1\x98\xb4\x17g\xa9\xf4\x1dA\xa8Z\xe4\xf6\x88_\xfc)\xf8\xd5N\xcf,\xea\xb4\xabS\xf2\xd2\xe0v\x10\x90\x82\xbd\xb3\xe1\xc1g\xc8>\x120\x0c{\x1d\xbd\x1c\xd1\x7fd\xb4\xbf\x82|\xf7\x9f\xd0\xa7\x1e\x82\xc5`H\xc0\x94F3p0$H.\x0f]v3\xaa\x9b\x1c\x83EW}\xba4\x12O`_\xb5!H5\xd1 \x9a\x0c\xaa\xcd\x04\x8cE\xe7M:\xe1\x08\xfe\xefQ\xab\x02\xfe\xb7A\xeb\xb6k\xbb\x05{\xef\x8e\xde\x84\xcb\x9c\xb2\x8f\x04\xd7U\xf9\x9aQ:\xbe\xf51\xf1\x1a\xaaW\x97uR\xdd\xe7\xf59\x974\xb7\xfc5s\xd0\xc4P\xdf\xdd\"\xd7\x96\xc2\xdab7x\xb8;\xfc\x01\xfa'\x00\x00\xff\xffPK\x07\x08]\x12r 9\x03\x00\x00T \x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00 \x00swagger.yamlUT\x05\x00\x01\x80Cm8\xec\xfd{w\xdb8\x96/\x0c\xff\x9fO\xb1O\xdew\x8d\x93\xe9D\xbe\xe4\x9e3\x99\xe78\x89S\xe5\xaeJ\xc5\x9d8\xd53=O/\x05\"!\x89e\x8aP\x08\xd2\xb6R\xa7\xbf\xfb\xb3p\xe1U\xc4\x8d\xa2\x1c%\xc1>gM\xa7,r\x03\xd8\x04\xf6\xf5\x07\x80^\xa1\xd9\x0c\xa7\xcfa\xefht\xb0w+J\xa6\xe4\xf9-\x80,\xcab\xfc\x1c\x8e\x7f9\xfe\xf03\xdc\x87\xd9\xfb\xb3W\xf0\x13\xca\xf0\x15ZAH\x02z\x0b \xc44H\xa3e\x16\x91\xe49\xec\x1d\xc3\xfb\x93\x0f\xe7\x10%\x19N\xa7(\xc00%)\xd0\x0ce\x18>\xe78\x8d0\xbd\x071\x9e\xa1`\x05Y\x8a\x12\x8a\x02\xf6\"\xdd\xbb\x05p\x89S\xca\x99\x1c\x8e\x0eF\x07\xb7\x96(\x9bS\xd6\x87}t\x81\xe8|?\xc4\xcb\x98\xac\x168\xc9\xf6/\x0f'8C\x87\xb5?\xd1\xfd\xa2\xc7\x003\x9c\x89\x7f\x00\xd0|\xb1@\xe9\xea9\xbc.\x9f,\xba\x01\xd5\xcb\x10\xe2\x0cE1\x95/\x91%N\x11\xeb\xd5iX\x7fQ\xfe\x9ab\xba$ \xc5\xb4h\x03`\xef\xe8\xe0`\xaf\xfa\xcf\x96H\x8e\x81\xe6A\x80)\x9d\xe6q\xf9\xf6\xa8\xf64\x0d\xe6x\x81\xea\xef\x03d\xab%~\x0ed\xf2\x07\x0e\xb2\xc6\x0f\xcb\x94u/\x8b\xea\xed\x0b\xaa\xc6\xd3\xfeE\xc3\x0e\xb4,\xc1\xc0\x16L\xac\xc1\xc8\x1e\x1aM\x8c\xa3P\xf5\x90EK`\xd5\x1a#r\x95\xe0T\xf7@\xd1\x1a\xcd\xd2(\x99i\x1e\x0c)\xfe<\x08#`+e\x81\xb2\xe7\x90GI\xf6\xf8\xa1Z\x0cbIV\x13\xf3\xf45\xd0\x8c\xa4\x98\x8aa\x01JB\xa0\xf8s\x8e\x93\x00C\x92/&8U0\xe3\xeb\xd2$pC\xcfq\x92/t\x02\xb8\x0fQr\x89\xe2(\xd4>\xc3\xd4\xc0%\xd6>\x12\xc4\x84b5\x97\x10OQ\x1eg\xcf\x8d\xcd5\x16\xe7\x7f\xde\xb7\xe9\xfas8K\xf14\xba\x06:'y\x1c2\xb9\xa5\x19\\E\xd9\x1c\x0e J\xb8\x0cF\xf0\x81\xe8\xe6 \x0eb\xc4\x04 a\xbeX\xac\x84\xe8u\xd3\xa1\x90I\xfdK\x1f\xf3\xbf@\x88\x13\x92a*\xd5*S\xb05]f\x94d)\xca:\xe7W\xfc/z\xce\x86\x0f \xe7\xe5\x07\xfejD\x01 \xb9\xc0\xd5<\n\xe6\x90\xe2)N)dD\xf2&\xd3\x1ak\x05\xcf\xc2 l6A\x8be5Y)\x04.;\xbeW\xb3\x11r=\x85\xb55vOv\x9c\xad.\xd9\xb1\xc2n\xecu\xb0\x9d\xa5$_*t\x90\xe86JS\xb4\xea\xfc=\xca\xf0B\xa9\xbe,\xb4\xa0\x8d\x0e\xe4\xfd\xd3\xaa[\xab\xa6\xc0\xb29\xb0S\xba\x96\x9f\x14\xac\x14\xaf\x033k\xe5\xcbhf\xdd2\xf3\x82fJ\xed[P\xd1\xb4\xa9e9O\xb5*\x0b\xe0'\xf6a[&\xe1^}\x19\xb7L\x03\x9b\xd0\xfa\xe12\x86\x96\x06\xc5hR\xac\xbf\x89\xc9\xac\xd8\x19\x16\xf6\x14Y\xe2\xc4\xf4H\x1a\xe2T\xa3\xda\xc4S\x0b\x94\x05s\xe3SQB\xf3\xe94\n\"\xe6\xceL\xf3$\xa4\x86\x17\x0cj\xd5\xc1\xb2\xb9\xd8\xb6a\xad[\x0f\xfbV|\x9a\xe7b\xc6\xbe[\xe2\xa4\xc3\xfc\x88\xc9g\xfc\x84\xd57,\xd8\x89\xffRs\xb4\xf8\xe2\xd5'\x97L\xdf\x8a\xffR2\xb5\x99 \x9d3D\xf2?\xad\xfd\xf0\x86\xfd]\xd9\x92\xe3$\xab\x99|\xde\x90\xd2\xda\x0b\xee\xc6\x19\xe9l\xea9_%Ca\x8b\xe8\x12\x07f\xc51\x985J\xd0B\xab\xa7\xc0^W\xb1\xa0\xf0s\x1e\xa5\x98G\xa2vL\x8d\xe3\x00\x87\xb10\xa2\xd1,\xc1\xe1x\xb22?jkJ\n\xfa\xc0Y\xbf\\A\x1c\xd1\x8c}\xce\x0b\xbc\xa2\x90\xcdQ\x06\x19NP\x92Q\xc0\xd7K\x1cd\x90\xe9\x95DAst\x89y\x87Q\x963#5M\xc9\xc2\xe2E\x07\xc9\x81\xa3\xf4\x18\xa18\x1e\x93\xa9\xdd\xb3f'n\x9d\xb4n\xdd:YO\xbe\x8a\xdc>+\x94cf\xff#>j\x94@6\x8f\xa8\xf8\xd2\x8b\x9cf\xfc[Y\xb3\x13\x93\x10P\x96\xa5\xd1$\xcf\xb0A-IB\xc9\xea\xc7\x13<\x1f3\xa0\x0cb\x8c\xc4\xaa\"S\xc8\xe6X|\x07\xb6\"\xd8\x7fY\xf3k~\xb0\x1e\x1f\xa2z\xd4FRn\x1f\xc1\xe1\x038\xaeq\xf7U\x0eL\xc0\xb6\x8f\xf6\x9a\x0c\x97(\xce\x8d\xa6\xa5\"\xe7\x16\x8a\x9cl\xf1\xc1 \xc5\xcb\x14Sf{\xd8\xd8D\xfb\xb0D\x91)\xf0\x00\xe7\x99[\xb5Y\x98\x82j\xdaH[ M\x81y\xc21*\xa69\xfb\x8a\x97Qh\x0c\x95do\xcfb\x14pc\xfb\xbefw\xb5\xaf\xa6\x98\x92<\x0d\xcc\x93\xc4~b[Nj\xa7 \xed6\x99\xad\x07%\xc8\xa9'\xe0\xdc\x1bF\xc12\xb7}\xb4G\x7f\xa0W\x9f\x18\xe5Idv\xcc\x9a\xd4\xabw\xd0\xbb\x87 \x14\x87\xeb+=\xd4G\x9d\x8c\xb91\x15\xb9\xa9\x8d\x8a>&Q\x99]\x0b\x96\xf9=X\xe0\x05IW\"g\x9d\x91\x14\xcd\xdc\xfa\x01\xb0\xc0Y\x1a\x05v\xeaF\x90\x9b\xa5\xab\xc8^54\xc9RQ4\xa9\xf7\xf4\xdbd\x02:\xda\xc6\x8a6\x9a\x84\x8e\xf6\xb2\xa2\x0dZ\x1d\xd4\x86\n\xea\xb3$^\x9d},VC\xa1\xcc\x85\xae\xe2\x0b\"X\xe6\x10\x90d\x1a\xb9\x8c\xce\xc1\xe5\x13$V\xa0\xbd\xfc{\xcd\xcc~s\xf2s\x8e\x92,\xca\x1c:\x07};\x08\xbd; ^s{\xcd]\xa3\xde\xd3o\x93 \xe85\xf7\x0dk\xee\xb7b\xf6\xb7\x95w\xa1\xb1\x8cU\x95&\x15k\xc9Uw\xcb\x85g\xff zM\xce~\xd3\xd2+o%y\xe5\xed@^y+i\xa3I\xf8\x03+\xef\x0fb\xca\x0f\xa5\xbd\xe5\nrW\xdf8 \x97$\xb2\xa8\x19U\xd4g58\xaf\x84\x9e\xab\xa0\xcf\xa7\x008\x91B\x90\xc5\xeb \xa6\x80`\x99O\xe2(\x88W\x808t2\x9a\xc4n\n\xea\xf4\x0c(N/\xa3\xc0\xee5\xd7\x9e\xbf\x973\xe6#\x8f\xd5j\x1d\x8fc@\x97(\x8a\x91}\x87\xcb,\x1e\x17;m\xa1\xae\xf6\x13\x12b\xc0Yp\xcb\x92]4\x85i\x84\xe3\x10\"\nI\x14W\x93\x9b\xfd7\xc9@\xae7\x88\x0c\x15\xf5\x92\xb29\x86Yt\x89\x13\x08Q\x86\xee\xd3,\xcd\x83,Om\x86\x17\x90\\\x05\x1bm\x93\x98rv\x80\x19A\xb6\xb0\x99\x82\x96i\x14X\xea;\xe7\xf9\xef\xae\xfbC\x9c\x10\x03\xc0\xa5N=t.Z\xd8K\x1f\xfa4\xe1\x026\xa9\xe8\x15\x89\x12\x08\xf14J\xf8B\xcf\xc8\x05N\x04\xd8\x04 \xa1D \x07_[\xb2c\x1e\x0cJ\xe4`G\xb7lW\xc9o\xef\xceO\x9e\xc3\xf9\x1c\xcb7\xab5\x83\x128M2\x01e\xb0d\x16-\x96\xb1\xa8A\xf0\xc5\x12\xe44#\x0b\xe6!\xcdIh\xdb\xa1Z5\\\x82 B\x98\xac`Ffd\x99\x92\x8c\x8c\x8c|\\tX\xa1\xbf\n\x0b\x98'Qv\x0f2\x92\xa1X,Z.W\xbeb\x80L-\x18\x16ZF\xfb(\x07\xdd\x8c'Q8\x0es\x81\xb07\xcdN\x879i\xab\x0e\xa4\x988\x0e\xe6\xc3\x12\x07\x85\x08$\xccm\x89\x83h\x1a\x05\xbcw*3^\x00F\x7f\x12\xaf\xd4\xdf\x8f\xc2:N\xb4\xc9\xad\x04\xc2t\xe1E\xb5XW\xa3\x18\xb4\x01\x85nbT\x98\xd7\xf7rgB\xdd%\x93\xf8\xd6&X\x17PL\x92\x19_\xb2\x1d\x0c\x85\x18\x9a\x1b*\x04\xa9\xba\xf1\xb7\x1c\xa7\xab\x8e~D\xb4\xdc-\xc1\x05\xc0\x0d#[_\xfc\x85\xfd\xb5\x8d\x19\x05\xbd?{U\xac\xbd\xe2O\x05\x82\xae\xf6ds\x8bF\x02y\"\xea\x968\x04\x9c\xa6$-\xdb\xae\xbd3\xd0F\x0d\xce\x7f\xfdCk>r@\xc2\x0e\xcb\xa57\x99\xb5\xf5\xf0\xe0\xa8\xf5\xeb\x02S\xda\x996\xd0\xf4A~R\xd5;\xdd\x1e\xa9\xd2\xf34XX\x93=e\xaf\x8f\xf3T\x19\xb7\x1b\x17\x8c6\xf81\xbe\xdd\xb9\xe0\x96(E\x0b\x9c\xe1\xb4\xd6\xe7\xfb\x02f\x06Q8\xe2@\xdc\x1a\xb7(y\xce\xb7\"\xd5\x85Vh\xfe\xe70Eqc\xeauv\xa9\xc6=\xa4\xf8\xf3\xb0\xcc\x15\x90\xe8\x0c\xcd\x1a\xe3\xfb\x9bl\xc5n\x93V\x1cQ\xb9\n\xf5\x9b\xb4h\xc7.-\xc3\xf6\xac\xe2\xe7o`\x7f\xd6\x8e,\"\xd3\xce.c\x03`\xd1\x08\xd8\xef\xef\xb2j\x0f,\xdb\x84\xeff\xc3\xc1\x80\xfb\xbdv\x11\x9eo\xde\xaf\xf4cc\xe4\xb7\xb5\x0blk\xfb\xc0z\xc0\xc3\x8d;\xc1,\xf6\x82YO]\x8b\xe4\xbb9\x94r\xde+\xa6Q\x8e\xeb\xaerA\xbaMd6\xa9@C\xe2\xcfJ\xdd\xda)[\x9b\xedd\x96\x0d\x82u\xa3`\xab\xe3\xad\xe7\x06X\xeay'\x86\x0e\xba\x1e,\xb7\x97\x99\x9c\xff6\xd9\x06\xc76S_\x90\xeb63\x03;\xb6R\xdc6\x9aY\xd82\x87\xafd\xb6g\xb6\x16\xcdj\xcb\x99\xed\xa63\xdbmg=6\x9eY\x99U'\xc3\xeafZ\x876\xae\xbd\xcc\xeb\xb0\x9b\xd0\xb6\xb4\x0dmK\x1b\xd1\xbe\xd2V\xb4\xc17\xa3\xf5\xf07\xf4\xdb\xd1l7\xa4m\xc5\x9e\xd9lKs\xd0kn[\xd3\x1cF\x04N\xa3\x02\xd7\x0dj\xf6\x86\xa8 \xebMj\x96\xfc2\xd2w\x9b\x9a\xa3\x14\xc1Y\x92\xe0\xbcY\xcd\xc6Y\\\xa7\x9euc\xabiY\x91\xeb\x87\x86\xe1\xb7\xad\xf5\xdd\xb8\xe6\xbau\xed\xbb\xfb\x0c\x03ob\x1b`\x1b\x9b;\xce\xc8\xf5\x938}\x0egM\xd0G\x178\xe3\x87zM\x10g\xbcP\x8fV\x06\xc6\x07\xb9\xcei\x8b\xedm\x96\x9c\xe4&8\xe7\x0dn\x1blqs\xda\x0f\xe62\xe9\xad'\xbc\xe3dw\x9d\xe8\x0e\xc3\x13\xe4\xd8\x1f\xe8\xd1'p\xdd\xf4\xd6\xabW\xd0\xb3g\xd0o\xeb[\xef>\xc2\x06\xfd\x84\xbeH\xdc^\x8a\xa6N\x16 A\x15\xb9*\x98\x8a\x86G\xe4\xf6\xc1\xe4\xba[\xcb\x8a\\TH\x93\xac\x15J\x936\x98\x94\x9bMKg\xfbZ\xd1\x86S\xd3\xd9\xe6V\xb4Q\xcb\x03\xdbaA\xfd\x16\xcb\x16\xb6\xc8\xf5\xd8$\xe7\xbeM\xae\xf7|\xed;S\xfb\xed\xb7\xe8\xddM\xd8\xa0\xab\xe0u\xbd\xd7\xf5Z\xda`Rn6-\xbd\xae\xff\x8a\xba~\xd8Mu\xfd\xb7\xd5\xf5\xd8X\xd7{\xca\xf6\x9d\xac^\xdd[\x90W\xf7^\xdd\x1b\xc8\xab\xfb\xaf\xa6\xee\x07\xde\x86\xb7\xc1F\xbc^[\xf1\xfa\xae\x93\x1ek\xa4\xf7\xfa\xe8\xf7a\xb6\xb4)\xcfy[^\x9f\xfe\x0f\xb95o\xf0\xcdy\xd6\xdb\xf3\xec\xf9%\x9bl\xd0s\xda\xa2WLC[\xd0\x91 {\xe8QA\x0e\x1b\xf5z\xad\x8c>\xf6\xc2q\xbb^O\x1d\xed\xbae\xafW3n \x9d\x8a\x06\xde\xb8\xd7{\xeb\xde\xc0\x9b\xf7\x86\xd9\xbe7\xc4\x06>Wm\xe7\xb0\x89\xcf\x8a\x1f\x99\xdam\xe3\xeb\xb3\x91\xcfq\xa6\xda+\x8d\x01\xb6\xf3\xd9\xc9\xdd}\xb3\x9f\x86\x99\x1a\x80d\xc09[H\xd1\x10\xf3\xe8\xc7\xda{?`'7\xae\x1d\xd4;\x02\x01\x96h&\xb5\xc6\xfa\x80\xb5\x9a]\xaf\xc3\x13|\x9d\x8d\x95\x8e\xbdQ\x86\xc6\xa8Q\xca\xf0\xff\xaa\xe6K\xd1>SI\x12\x0d\x01\x19\x81 \xf3\xab)\xc5!\xfb\x8f34\xc3\xef\xf1\xe7\x1c\xd3l$~W0\xe3\xfb\xb88\x1b\xc6\x96\x89\x0c\xc3\x82\xd0\x0cp\x01\xbb\x8b\xbb\xbcO\xae\x076\x14\x80\x06\xaflZ2B\x0d\xb1\xf1\xf3\x7f\xc8\xbb&\x84\x8a\xc9\xe3\x8cV\xbe\x18D\xaa\x95R\x17\x11Whc\xceL\xa5\x93\xaf\x10\x05\x8a\xb3{\xc0\x1c?\x11\xc6DL+\n\x9b\x15\x02\xc9\xe68\xbd\x8a\xe8\xfa75\x9bD\xd1\x95jg\xaa\xf8\x9ax1\xc1a\x88C\xe6\x85\xf1\xab\xd1\xca\x0d\xabr\x87%\x85\xab9\xee\xf4\xc4\xb29\xee\x1aG@R\xc1#\x8c\x92\x197$\x98f\x057\x98#\n9\x9b?u\xc9t\x8a\xa3x\xe3\x03YT\xfd\xfeS\xa7IS\xbc\xc4(\xc3!\xbcDi\xf9\x91^\xc0\xe1\xff\xd6\xbd\xd4\x10\x0b\x9f\x99/\xe0\xa8\xf3\x8d\x7f5\xfeh\xb9\x17\x98\x1a7\x03w\xbd\xbf_\xdfG\xe8w\x03s\xf2\xbb\x81u\xfa\xee\x86w\x03O\xa3\x98\xfd\xb0\xcd-\xc1E\x137\xb6/x\xbd\xe96\xfc~\x80\xb6\x8b&*\xb7\x81\x99\xce\xda[\x8du\xdc2\xcf\xd2\x1e#i\x1aR\x9c\xe5i\"tw]\x8d\x8dJ\xe3\xcdu\xfc\xacuN\x0e\x1f\x01\xd3\xcdz\x83<\x82wI\xbc\x02\x92`\x01\x8a\x9cR\x9c\x01I\xa1\xd9](v\xe2\xd8\x1d\xe8\xd1%\xf0:RE^G\xda\x92\xd7\x91ff\x96\x93\xd8b7\x9e\x9c\xd3V\xec\x1c\xb4\xa4\xc3\xee;\xc7\xa9\xe5:\xa9\xbc\x9a\xf4j\xb2 \xaf&\xdd\xa7\xd0\x0f\xa0&mv\xb19\xcdd\x07E\xe9\xb4k\xcdm\xfe:\xcc]\xe7y\xeb&\xe0\xc1w\xa3Y\xefB\xb3\xef\xa7\xd5\xae\xb3*7c\xe4\x97m\xb6\xdb\xccr\x97\x99D\x0e\x19\xd99\xef.\xb3\xdaU&\xa6\x8d\xa9\xc8.\xc8\\j/\xc8j\xf7\x98\xc3\x8cu\xd1\xaf\xd6\xbb\xc4\x9ct\x9c\xfd\xae0\x07\xb6vE\xec\x8alw\x7f\xc9]]F~\xf6\xbb\xbe\x06\xda\xed\xb5\xd9.\xafMvw\xd9i\x11\x87\xdd\\\xa6+\xd9\x0c\xbb\xb8\\voY\xcd(\xf3\xe2\xdch\x97\x96|y\xa0\xeb\xd6$7\x8e;\xe3\x1c\x8d{\x0c\xe4\xae\x02\xd1\xbc\xdfO\xc0\xc9\xef'\xd8\xa1\xfd\x04\xdf\xcf\xedb\x8dVg\x9b\xb7\xba>}\xbbt\x95\x01\x93\xba@\xe9\x05\xae\xf0\xa8\x93(4\xa1Q_Fa\x89E\x9dD\xa1\x0e\x89\xfa\xb2\x04\x99\xed,\x0eu\xd2\x05\x18\xd5.1\xfd\x02c\x96\xc7cPo\x0c\x83\n@n\xa8\x9d\xa2\nojK#;\xdd\x06\x9e\x8a^Fa\xd7%h,\xd8\xe2\x9b<\x81\xe2\xcf\x12\x01\xab\n\xb5\x1a\x8b\x87\xad\xd1 \x0e\xc8\x82\xfb\xb6\xbfbD\xf1\x9d\xd3\xd7w\xbb\x9c\xba\x1d\x85\xcf\x9a\xe0\xb11Qbv~\x08@\xec\xcb(T\xc0a\xd9\xb7\xd7\x83aK\xf4\xea\xcb(TcW\xcd|\xd87\xe0L~%4Sp\xd0|\xa7\x1a\x12\xf5e\x14*q\xa8\x8c\xcb\x90(\xd4I\xe7G\xd7D\xd9\x03\xa8pC\x1cm\\h\xe6\x98\xd9\xc8\xc2nN;F\xc5\xc6\xa8\xd7.\xd6m\xc5\xb2\n^V\x11\xae{\\[Dc\xcc\xc7\x91\x1a\x98\xab\xe3{\x8d)S\x05\xab\xea\xe8\xebe\x14\xda\xc6^\xac1\x1fyq\xf2\x91\x97\x8f\xbc6a\xbeS\x91WS\x92_\xa5\xd5\x0e\xe8h\x9f\x96\x1bR\xee\x11P\xeao\xc6~\x19\x85\xb4\x1eQRad\xe4V{\xf9t;\xae\xdc\xf9\x1b\xb1\xd9@vC\xef\xe8BR#s\xb0h\x00\xcc\x81\xa9\x95~2\x05\xa7\x96L,\x03TS\x88j\xb2U\x15\xd9\x84\x8f\xa6@u\xe8\xd6\xcc\xe1\xaa\x954\xedB\xd6A\x82\xd6\xfea\xab\xe1\xb6T\x8ba\xeaoH5\x85\xaf\x86\x00\xd6\x1c\xc2\x1a\x82XC\x18k\x19\xc8\xda\xba\xfd\xc3\x05\xb3\x8e\xe1\xec\x10\x01\xedp!\xed\x10A\xed@a\xed`\x81\xad\xa1\x80<\x90)0\x16\x8a-\x16\xa49\xc8\xb5bc;\xe3\x87\x0eu\x87\x0dv-\xc3\xdd>\x01\xef\xa6!\xaf?\xe5\xd0\x9fr\xe8O9l\xd0\x8fu\xcaa\x91\xec2\x9ffXe\xbb\xfc\xc1\x85\x92|\xbak\x87\xd2]?\xc6\xc1\x85_!\xfbU\n\xf6\xeb5\xbd\x8d<\xd8z+\xfePH\xebC\x0c\xb7}n\xa1?\x14r\x8b\xc25\x1fg\xe8\x0f\x85\x1cB\x8a\xfeP\xc8\x1f\xe0P\xc8V\xbd$\xc6\x88b\x13\x04\x8fgC\xcb\x92 \x7fE\x07\xc3\xe3\x8f\xdf*F\xb5\xa3\xf5\x12>\x8aAS\x08\x9c\xa3\x07\xe3\x81\xb1\xd2\xa1\x0fR\n\xb2\xa9;|C`<\x19\xbf\xf2\xb5Q\x95.j\x80V\xa6\xcc\xe2\xda\xca\xa9\xd3\xd7\x03\xca\xa1 \x8b\x94\x07\xb2\xf9\x93\"\x05\x15b\x92\x9f\xf7\x98\xffGG\xde]hN\xadH\x15'2\x8aicq\"\xa3h\xc2\xfa\xb3\xd4\n\x06\xbc e\xc9@\xf0\x1d\x12\x0b\xa7\x9a\xeb\x1e\x0d\xc7i\xe8\x12\xc1\x90\x05\x02\xab\xf2\x80{q\xa0(\x0d\x08wCjH\xa90\xef\xb5&\x8e\x0d&\x8e\xbfj\x9b'\x14\x8d\xfaD!'\x9f(\xdc\xa1D\xa1\xc7\xc5\x0d\x95\x9e\xfb\x81qq2\xce\xd3#\xe3\xb8\x0e\xa4\xcd@\xcf\x8c\x8e\x13o\xdd*\x86\xb0\xcb\xf1\xde\x8eh }\xa4hd\x0f\x16M\x809^\xb4\xd2U\xa6\x98\xd1\x92\x89e\xdch\x8a\x1cMv\xab\"\x9b\xa8\xce\x14?\x0e\xdd\x9a9\x8a\xb4\x92\xe6F\x91\xe4.`\xd7\xf4\x01\x90KTi\x88+-#K[\x97|\xb8\xe8\xd21\xbe\x1c6\xc2\xbc\xf1\x18s\xc0(s\xc08\xd3\x83\xd3\x144t\xe49l\xeci\x19}\xf6\x89?\x87\x89@=D\xcdC\xd4\xa8\xf5\x95<\x0e\\\x07\xba~\xc7v\xae\xf9\x1b\x84\x1bd9\xf9l'\x9eE\xb7\x05Y\xb6\x0b\x0em\x83\xbfAXC\xfe\xda\xb7N\xf2\xd7\xbe\xd9\x92\xa5=\xa9\xa8\xe7\x14\xb2\xb61\x15\xf5ji \xbb\xd3`f9\x89\xfd\x0d\xc2\xfejL\xaf#%y\x1d\xe9>\x85~\x00\x1d\xe9o\x10\xf6j\xd2\xab\xc9\x8a\xbc\x9at\x9fB?\x80\x9a\xf47\x08;\xcf[7\x01\xfb\x1b\x84\xfd\x0d\xc2\xa6jXE\xfe\x06a+\xb6v\xd5\xe5\x8a\x1c\xf7\xe8\x18\xf9\x99\xf7\xf0\x14d\xb7\x97\xc7\xc8\xc6\xdf \\\xd0\xb7v\x830\x88\xc2\xfe\xb6J\xe9\xc5\x16,\x81\xd6*P*\x02\xb4r\xafU\xe6\xe7\xdf@`V$\x90K}\x18\x08\xe7g\xbb\xfdB4\xee\x0f\x03\xe1\xe4\xf7[\xe8f\xf3\x0d\xef\xb7\xf0\x87\x81\x0c\xb5\xcb\xe1&\x0f\x03\xe9\x85f\xd5\x9f\xd5\xc1U\x14m\xc2Y\xcdgu\x88\xb7n\x15c\xdbeT\xeb\x8e(\x08=\x1e\xd6\xc8\x1e,\x9a\x003*\xd6J\x95\x98\x90\xb1\x96L,\xd1\xb1&|\xac\xc9\xacTdvX\xc0\x88\x92\x1d\xb6\xb5\xa1\xb0\xb2\xbbp\xda\xc6\xc67E\xfd \x07l\x0c\x81\xa1\x1d\x1cE;\x18\x8ev@$\xad Kk5\xaf\xcd\xabP\x8d\xa8\x1dL\xe9\xeaq\xb5V\xe3\xb0\xc5\xd6Z\xf5\x19,\xfb\x0d\xf6\x08[\xdbx\x17\x1cQ\xb6Ff%\xd4\xd0\x16gk-!p\x90\x128\xa0m\xf5\xfe\xc5:9\xa7d\x8dv\xb7|\xdc\xfa\x93\x815\xee\xd6\x8a\x95\x0b4T\x90-\xf6\xf6\x9b\x15\xee\xb0(\xdc\xbe8\\\x97\x02\x99\xbd\xa0-\x85\xec\xb0.\xddV\xa6C\xe1\xcb\xf1#;\x14\xba\x9c8\x0fV\xd8\xb2\x9f\x85\x03\xe3s-\x11\xba\xbd0\xba\x96pW\xbb j19\xad'\xa6\xfd\xa4\xb4\x1a\x80 \xeb\xd6\xc1\xa9\x07`\x8f\xdau\xec\x038\xf7\x03\\\xb1\xbb=z\x04\xbdz\x05\xee\xb0\x0b\xc7\xa5^\xa7\x1e\xd0\x0b\x97%^\xd1\x90\xf0\x0b7\x00\x86\x8b\x85\xa9\xc8n)7\xc9ba7\xa9\xd7\x94\xea;\xa9\x1clRE\xbd'\x96\x83\x9d\xaa\xa8gk\x83\xd9.A\xae\xd3{P\x8c\xaf\x13,\xc3\x05\xe7\xdbc\xb6\xb9\xcf3W\x18[\x8fNA\xaf\x8e\x81\xd7\xaaf\xf2Z\xd5}Ry\xad\xba%\xad:0*\xd8Q\xaf: \x83{L8\xf7\xa9\xe6\x15+'\xafX\x15\xe4\x15+\xa7\xde\x13\xeb\x07R\xac68bKVr%\xb8\xa9V',\xb1\xfb\xccv\x9a\xd5=f\xb4\xab\xb8\x07G\x15;\xe0\x8a\xddzk\x85-\xb6\xe0Sf\x9a\xb8x7@\x17\x0f\x8e/\xee\x810\xb6\xc4\x18\x17S\xc9\\\xa5\x17d\xae\x12Vd\x854v\x9c\xcbn:\xd9\x1ao\xec\xac\x13\xed1\xc7\x8e\xacm\xeb\xf2\x15\xb9 \x8f-\xd8Y\xdd\x1fP\xd1@\xe8\xe3M\xf1\xc7\x9b!\x90\xed\xf5\xcd\x80(d#\x0e\xd9\x0d\x89l=\xcfl\x96\xf0\x86xd\x13\"\xd9\xaa\xaf\xa6~\x0e\x89K\xf6WD\xf8+\"\xfc\x15\x11\x0d\xf2WD\xc8-\n\xd6WDH\x00\xb0\xbf\"\xc2oYX\xff}\x97\xb6,\xf8+\"$\x99\x9a\xb6\xdbK\xb0SWD\xf8\xcb\x1b\xac/\x1b\xd8\xf6\xfd\x02\xfe\xf2\x86-\n\xd7|\xed\x80\xbf\xbca\x08)\xfa\xcb\x1b~\x80\xcb\x1b\n\xf0a\xb9\xe1\xad\xf8\x83|\xa9k\xbb\xdbY\xf1H\xb9\xe3\xad|I>\xda\xd8\xe7v\xd6\xfaqg\xb7\xba\xb5\x86^\xa7\xaf\xe1[j\xb7\xa1\x19]\xc39\xa1\xd98O\xa3\xde\x0c\xcc5=\x9dP\x04\x19*\x1b\x06\x01 2\x89I\x90\xb1\xf2f\x1c\xaf \x8b\xaa\x9a\x15\xa7\x8d*f\x05\xdcW\xce\xc7\xf5=o\xec\xe3\xb6\xeeK)\xc8g\xb3|6\xcbg\xb3j\xe4\xb3Y\xe9\xaa4\xc1\xb6 \xad\xb6\xcd.\xc8\x1f\xc3\xc1\xc9\xe7\xb4v(\xa7\xe5\x93\x13n\x91\x9fONlQ\xb8\xe6\xb0\xda''\x86\x90\xa2ON|\xcf\xc9\x89=cvb\xffO\x1e\x0d\xfdKf\x0dti\x8a\xb5,\x85\xee\xa6\xc9\xb3\xe6f\xcc\x9d\xcfU\x0c\x1a\xe4i2\x0e\x06\xb3\xad\xcf6\x18^6e\x1aLy\x06m\x96\xc1\"\xc7`r\x88\xc0\x9c_\xb0\xf0j,r\x0b\x16\\6\xc8+\xf4\xcf*X\xc5\x16\xae\xa1\x85\xaf\x96\xfb\xc8\xa2\xe3\xf7]\x8a,\xba\xaa\xe4K\x94\xd51\x8d\x95%d\x9eD\xed\x87\x8e\xde(S\xf1 \xf1\xb8\xf3\xc2\xe4\xc6|?MD\xff9\xa2sBr\xe1\xa6\x04$I\xc4\n`l\xe4{\xa5\x11<\x17\x07\x0c\xc8\xcfR8&\x9d\xef\xb4\xbb\xf7\x13\x8a\x10\xbc?\xf9p^H*%a\xde\xd8\x8d\x7f\x9f9\x81\xb1D\x03\xee\xffAIa\xd7\x9d\xcd\xe6o$\xc4\x1c\xb8\x97\xd75\xcf@+\xb7\xd6\xc9\xf1%NignT?w'y\x14\x87\xe3\xa6\x84\xead\x98{A\xcc\xa2\x98\xb1\xfa\x8c#\xd3\xfbd\xb1\x88\xfa\x9d\xf1:#\xbd^\xeb\xddU\x8a\xd3K\x9c\xf6\x1f\xaa\xf2\x03\x19\xdem\xad\xa1:\xe9?\xad\xfezme?\x17$\x89.zzK\x00\xf8\x1a-\x96\xcc\xa6\xf2\x03\xd6PF\xd2\xfbLb\x1d\xcfr\x04s@b\xf5\xcc\x05\xe3\x10\xf9\x13GK\xd5O\x16\xfd\x85z\x9f\x9f(\x1e\x99\xc4$\xb8\x18\xaa\x91\xc3\x03\xc53h9\xd8@\xba\x9aHpvER\xc50\x8c\xecK\xd63\x14\xa1\xfbm\x03\xce(\x98\xa3$\xc1]\x16\x19\xcc\x0d\xc4\x11\xcdp2Fa\xb8\xf1\xc4\xdb;|v4:|\xfct\xf4\xe8\xf1\xe8\xf0\xf9\xd1\xe3\xc7\x8f\x1e\xb7\x81\xd1`Z\x8e\x0d\x15~\x8e\x93\x10\xa7\x8b(\xc9\x8a\x976\xec\xe1\xc1\xe8\xf0\xd1\xa8\xeb\x13\xf1\xaa\x83E\x8f\x16$\xc5\x10\xd5\x8c&I\x8a\xaeuC\xd7\x8d\xb1\x82y\x99e\xd7\xe3( \xf1\xf5PSt\x8f$]\x9f\x85Q\xba\x0c\xf8L\xc0\xd4Xb\xb5n-\x0b\x96\xcf\xf7\xf7\x0fF\xfc\xff\xf1Y\xf1\xa4j~\xef\x91\xce\x84\xbfAQ,\xeap\xa2\xbc\x964L\xfa>]%A\x94\xcc\xc4\xeb]\xe1\xfa\x07\xf1@\x05\xdf\xd7\xb8&\xb5\xb9VE\x11\x8d\xde\xfc\x843\x88\x84\xb3\xc3;\x12Q\x08\xf24\xe5\xe9X\xa0\xab\x84\xb5\xc4w\xca\x88\xad\x01\xec\x99bNl\xdf\xcf\xa9\x8dt\x1b\xfeNC\xd4u\x12\xbc\xda\xc9\x19\xfdg\xfd\xc0\xed9\x8fW\xd2\x04\xc5\"\x0cb\x1f\x94k{\xba\x1f\xa3\x0c\xeb\xceF\xfe \x0b7U<'l\x84\xcbW\xdd\xe6\xd78\xef\xee\x17\x0c\xf7)8\xdb\xf1\x02gH\xf55z%j\xe6\x18u\xe6~\xc0\xc4\x16\x8c\xacA\xd8\xa8(\xd1\x9c\xb3\xec\xaaV\x02B\x17\x84\xce\xf3I\xa7E\x04>\xa0h6\xd7l\xaa\x13\xed\x89L\xaa\xb9\xbdC\xc5#Y\xb4\xe1\xdd\xfduUytp\xf8\xe4\xfe\xe1\xd1\xfd\x07\x07\xe7\x07\x8f\x9e?z\xf0\xfc\xe0\xd9\xe8\xe8\xe9\x93\xbf\x1c\x1c>?8P\xe9\xec$_\x8c\xb3k\xa3\xbe\xb6\x1d\xa8\xcaG\x8a\x11\xcd\xc6b\xee\x99\xbf\xe2 \xf8\x9b9\xa2s\xdd\xef\x96\xe2\x85\xfa\xe8NN\x1e\xbdy\xf0\xf0\xe0\xe1\xc1\x83\x87\xaf\x1e\x1d=|tp\xf8\xf8\xe8\xd9\xcbG\x8fO\x0e^\xbf~\xf5\xe0\xe9\x9b\xe3\xd7\x8f\x1f\x1d\xbe9\xd0mF]\xa2\xd4\xb4k\xdbJ\x08`-\x08F\x1a\xa0H\xe31\x9bo]\x90\xf1\x9b\x17d\xfe\x12\xe0\xf25`\xc0/\xc2\xe52\xe4\xfc\x7f\xf0H\xb7\x00D\xd4<\xd6\x0b\xc4J\x10C D\x19\xda\xa5\xfe\x94\xd1'\xdd\xa5^\xf1\x9a\xfbnv-`\xfeEB\xf3\x9d\xea\x14Z.w\xa9;|\xed\xc9\xe2\xf4.\xf5\x0b_F!N\x02\xbcK}b6\x85P\x9c\x0e\x14\xc85\xbc\xdb \x0e\xe6\x0f\x8e\x00'\x01 q\x08\xb2\x05\xf3\x90\x84\xb7v\x18\xe2\xe5\xc5\xa3\x87A\x8e\xfe\x98]|\xc1\xe8\xf1\x97\xe5\xec\xe2\xf3\x83\xc7Y\xf2\xc7U\xf8\xe5\xf2!\x9a\x06\x0f\xc2#U*H\x9b6\x00[\xabkgq\x0di'\xb0\x15\x1eX\xa5\x9f\xc0\x94\x82\x82^\xedu5\xa7w\xe0\x8c\x124Ko\x97\x16\x82\xdeQ3\x0e\x16\xac\x06\x0cv\xce\x99\x95\x13\x02\xa6\xcfW\x90\xd9!\xb3\x924\x0c m\xc5R\xf1\x91hE>\x12\x95\xe46P\x1f\x89\xfaH\xb4M\xe6/\x01._\x03\x06\xfc\">\x12\xf5\x91\xa8E\xaf|$\xea\xd6)\x1f\x89Z\xf5\xcbG\xa2>\x125Y\xbb\x9d\x8aD\x95\x86R\xb0\xdf\x08\x9a\xab\xec[\xb1Jn\xbe\xe5\x9a\xcd\xdeZd\xe3}b\xef\x13+\xc9\xfak\xc0\x80_d\x99b1\xe7\x8d\xba_\x7f\xb4\xb1\xf18c\xcboj\xfbEK\xff\xccl\xba\x04YK\xb7\xe2l\xc0\xf4\x08\xb2\xe6[\x0f\xde\x95\x01\xba S:B\xd06ZNI\x9eh\xb4\x93\xa0m4\x9cE\x0bL3\xb40X\xb6\x9e\x8d\xf7J\x96\x08\xe2\xedY\xf5\xc9Jk\x94}R\xa5\xa2\x04\x99\x0d\x85 \xcbU\x05\x0e+\x0b\xac\x15\x96\xd3\xc7\x80\x01\x95VE\x16\xc6D\x90\x83\xa0\xc0QX`o^\x049L\x97\x82\xacM\x8d \xdb\xef\x07\xee\xdf\x10\x06\xff\x8e\xe5I\xce\xa6\x1e;\xf4\xb4\xec\xa1\xf1\x84g\x80'\xf9\xf9\xab'\x0f\xff\x16_$\x9f\xff\xfb\xef'W\xb3'\xbf'\x8f\xdf>}\xb7x\xf2&\xff\xc7\xc1\xc9\xbb\x87\x93?.\xf3?\x1e\xa7W?\x1f.\xce?\xfe5}\x9f\xbf}\xfb\x8f\xcb\xe3\xe3\xcf\xe7\xcf~\xff\xe3\xb7\xd9\xd9\xc1\xfb\xe3\xfd\xf3\xd7\xcb\xc7\xf9\xfe\xb3\xa3\xe3\xcf\xe9?\xa6\xff\xf5\xd7\x0f\xcb\x97\x7f{\xf1\xa2l\xb8\x1f\xd6n\xaf\x00\xdb\xfd)\xcc\x81n\xd7\xe3O8\x03$\x94\x06 \xf6\xcf\x00\xa7\x19\x8a\x12iI\xe4\xe3CC\xef\xbaw\xd1t\xec\x97\x11\x1bk\x1a}\x81\xb6\x18^\xf2\xce\xaf=c\xd8j\xb3\xb6\x88\xae\xef\xaf\xa5\xe1{!\x04k\xb2,\x8e\xbf^\xef\x9c\xc7\x0bZ\xc42\xb6\xa9\x0c_\xa5)\xc8Wi\xcc*~H\x13d\xe1DX \x01\xac\x05\x01\xf6.\x83\xd5\xb7.\xc8\xf8\xcd\x0b2\x7f p\xf9\x1a0\xe0\x17\xf1U\x1a_\xa5\xb1\xe8\x95\xaf\xd2\xb8u\xcaWi\xac\xfa\xe5\xab4\xbeJc\xb2v;U\xa5\xf1x\xc1\x92\x8c\x83\x05\xab\x01\x83\x9dsf\xe5\x84\x80\xe9\xf3\x15dv\xc8\xac$\x0d\x03H\xdb\xe3\x05}$*\xc9G\xa2\xdb_nu\xf2\x91\xa8\x82\xac\xbf\x06\x0c\xf8E|$\xea#Q\x8b^\xf9H\xd4\xadS>\x12\xb5\xea\x97\x8fD}$j\xb2v;\x15\x89z\xbc`\xd7\xfb\x1bE6\xde'\xf6>\xb1\x92\xac\xbf\x06\x0c\xf8E<^\xb0M\x1e/\xf85\x1a\xf6x\xc1\x06\x99\x0d\x85 \xcbU\x05\x0e+\x0b\xac\x15\x96\xd3\xc7\x80\x01\x95VE\x16\xc6D\x90\x83\xa0\xc0QX`o^\x049L\x97\x82\xacM\x8d \xdb\xef\x07\xee\xdf\x10\x06\xff\x8e\xdf?^\xf0\xa1\x0e\x9dv\x9ap\x8b\xd3F\xa3\xed=~\xf2\xe8\xe9\xcbg\x8f\x8fO\x1e=}\xfa\xe0\xe5\x93gGO\x1f==z\xf6\xf8\xf8\xd5\xc1\xe3\x93G\x87\x0f\x1f\xa1\xec\xe1\x83\xc7O[?f\x1d\xc9M\xad\xd1\xd2\x9b\xac\x05\xed8\xad\x1e\x0c\xd6\x13L\xb9c\x83Z\x9bbm\xa9h\xa3j\xcd\x0c\x19\x93\xe2Zu\x8b\x16$O\x8c\xa8\xb2\xdd\xca\xab\x878!\x0b\xfd#Vc/\xa8\x9c~4C\x17\xdd\xb7\xc6\x17d\x12\x97\xa0>m\xef=\xea4\xae\x0b\xbc\xe8w\xaf\x92!ce\xfc$\xe6\x8fa\x91\x13\xb3\x12\x84\x8d\xd3\x04\xf0\xf6\xe4\xe3\xab\xd3\xbf\xbd>8\x9a\xd2\xd7g)z\xfa6\x9b\xbc\xa7\xab\x97\x87WO&\x9f\xcf\xdf>z\xf4\xf7\xfc\xf0\xc1\xd3/\x7f\x9b\xbc \xfe~\xfd\xf0/\xaf\xde\xac\x8eOg\xf8\xd1\xdf\x7f;\x9b\xfer\x9a_~y\xf9\x8f\xc7\xcf\xde\xae>\xffL?\xbf~\xfa\xe1\xf0\xf4*:Y\xfe%\xfa8y\xfc\xfb\x870\x8b\x97\xb3\xff~\xa1h\xda\xe0\x13Z\x08\x12\xac\x84 \x05+\xed|\xb1\x92'\xd4e\x9a\x95\x01\xe0\xfeY>\xf9\x05\xaf>\xe0`y\xf4\xe8\xf1\x85\n\x00\n\xa6\xdb\xef\x04\xb9\xf7\xe4\xf8\xf2\xcb\xc1\xc3\xdf\xe7\xd9/\x7f\x9d?=~\xf5\xea\xf7/\xf1\xe9StN\xe8O\xab\x83\xe8\xe2\xcd\x7f\xfdr\xfa\xfb\xcf\x7f{\xf0\xc7/oSB\x7fV)\xab@\\L+\xcc\x88\xe9\x9b\xd8N;u\xd9\x87\xe2\xcf\xb9\xba\xd0\x0f\x03\xb4$0@\x83\x9a\xb8\x98hM\x9c\xb2\xaf3D\xc7W(a>i\x9f\xd7\x9b\xa5\xac\x03E\xac\xc0\x1a\xc9\xe9\x10M<~\xf0\xe8aW\x0b\xa6\xab\xf362\xf1\xdaen\xb3\xc8\xbf\xde\xed\xae\xfa0\xe6\xb4\x88_dT\xa3\xf3-sV\x8f\xc0\xc4\x00\x80\xe6\xc1\x1c\x10\x85\xbdf;/(N\xc2=\xb8\x9aG\xc1\xbc\xbc|\xbdug7\x0b5\xa6$\x8e\xc9\x15\x8b\xe5p\x12.I\x94d\xcfa\xef\xa7\x93s\xfe\xd5\xfe\x9f.\x9e#\x16\xe3\x8a\x9b\xc7\x1b\xdc\xf8=\xeb\x0b\x12\xe61\x86\x90\x04\xf9\x82w\x8fE\x88\xe4\xaa\xe8\xed\x08bB.\xf8\x1d\xbb\xd7\xd7c\xf9\xb7Eq\x0d|\x83]@R\x11C\x85\xacs\"\xe1q\x9f\x86\x17\xfb! \xe8>]\xe2\x00\xc2(\xc5AF\x1a2\xafEr\xac\xb7N_\x88r;7\xdc\x17b\x93Y\x04u\x82\xb3\x90l\xe3q\x95\x94\xff\xad\xd9\xa7\x17\x12,hJL\x1d<^^__\xeeu\xcb\xc3\x89\x87\x95\xe0\x96h\x86Ur9C3\xbc\x1e\xab \x89\xae\xdf'\xdc\x91\x8f\xd57\x1dG\x8bH\x99$~\x8b\xae\xa3E\xbe\x80\xf6e\xf6K\x9c\xb6\xfb\xdd\xe6\xe9\x90\xdb\x9f\xee\xa48\xcb\xd3\x04\xd04\xc3)kC\xecC\xbb{\x0f>\xdd\xa6\xab$\xa8?\x81Sx5\xc7\xc1\xc5\xf9\xf5]@\xb5\xec\xa5`\x88\x9a\x8f\xa7<\xc3\x82\xae\xd0\xea\xee\xa8\xf6\xa4\x12\xfb2T\xae\xc3\xa3)<\x9a\xa2EV\xf1\x94\xc5\xd8\x0br\x88\xa1L\xe2\x12\xd4\xa7m\x8f\xa6\xf0h\nc\x8cc%O\xd88\xae\xb1\xf0H\xdc{2@\x14c\x1b\xbfXu\xce\x187\xd8D+\x9b\xb6\xc4,\xba\xca\xc0)\xb8\x96\xdc\xb8\xc5\x97?;W.\xce\xaf+\xbf\"Jf2H\xaa==\x90\xfd\x0e\x98\x831\x1e\xd8\x8a\x07\x9dR\x83\x92\xe9z%\xa9\xa0\x10u\x1d\x1f\x0f&\x99\x9b\x82$S\xb3\xa6\xc8\xce\xf4~\x94L\xfbY\x81\xbe\xd0\x1a\x8fI\xb1[\x84\xaa\xc9\xd9\xb9\xa3\x98O>\xfe\x7f\x15_\x8a\xfd\x1f\xdd\xdc\x83GU\xad\xb2\xfd\x80\x9c^px\xd0\xfd\x0c\x9fB\xfc\xff:}\xee\xfb\xb0\xd7\xad\x1d;~\x08q\x1c]\xe2\xd4\xafv\xbf\xda9\xfd8\xab\xbd\xeb\xc4\xc2\xef}\xb5o\xb2\xaf\xa3\xe7 \x07\xfa\xad\x1a\xed\x05\xd5/\xbf\xc5wA\x89\xfd|\xe2\xddz\xbak\x00\x1c\xe1 g\xdd\xda\xdf\x94\x11\x8e\x1c9^D \x81\xab(\xc50%\xe9\xa2\x84\xbc\xa9RI\x9d\xbc\xee\xc8\\\x12I!!\xd9]\x98\xa6d\x01\x7f\xfd\xf0\xee7\xd6\xca\x04Q\xfc\xf8\xe1\xfdb\xbf\"o\xb0dGq\x1a\xa18\xfa\x82C\x98\xac2\\t}Grl\xaa\x0f)si\x19\x91\xbb0k\xcf\xf9\xe4\x94iE\xfa\xe4\x94y\x9c\x82\xcc\xa3\x15\xe4\x93S`n\xc4'\xa7|r\xca'\xa7l\xa6\xdd\xd7HN\xb9'\x93\x84 \xbeB|\x83@\x80)\x9d\xe6q\xbc\x82\x10\xcbc\x11\x92\x10R\\x\x1d5.[\xb7\xc3&G\x94_b\xd8\xe1\x13\xddo\xfbB|\x17A\xc6\xc7Y E[|\xad e\x81b\xe1\xcf\xd5\x06\xdfo\x93>\xf7N\x85X\xc5\xbb\x03{\xa7\xafq\x87G\xc9=\xc8>\xfei'\xb7N\xff\xd4\xc9/e\xbe\x1esh\xe5\x03\xdf\x8c\x7f*\xbe[\xed\xb9\xaf\xe7\x9f\x9a\xd6E\xa7\xb5\xfbp\xf92\xfa/\xfc\xf0\x97\xb3\xcf\xd1\x1f\xff\xfd\x0f\xf2\xcb\x9b7?\x9f|\xf9\xeb\xd3\xe0\xe8\xe7\xb3\xe3\xe9\xe5\xd1\xc9\x9b\x8f\xc1\xe9\xfc\xfa`u\x86fW'\xf3\xf3\xd5\xc1\xe5\xd9\xf1_~\xfai\xfe\xea\x84\xc6\xbf\xfc\x17zx<=\xc8_\xfee1\xfd0'o_\xcd~\xff\x12\xfe\xf4&\xfd\xc7\xfb\xd3\xd7o\xcf\x8f\xafNf\x7f\xfb\xdb\xd5_\xc9[\xd9\xec\xd0*hx\xd9v:\xeb:\x87\xd4\x80\xf8\xee\xfc\"\x9d\xce\xf9\x06\x11\x86\xd2!7\x98\n\x9dgir\xc2-\x82\x93\x8dSDF\xa7\xdb\xca\x14Z;\xdbfG\xdb\xb5\xbd\x0e\x07\xbb\xdb\xb9\xd60\xd6\xb8\xbc\x1bL\x19+W]3P\xb3\x03\xfd\x15\x9cg\xad\xe3l\x9c\x93\xe6\x19\xa9w\x96\x8d2\x83\x8d\x9cd\x83\x83\xec\xd6\xfa\x86\x8e\xb1\x8dSl\xec\x90\xc1\x19\xd6;\xc2\xfd\xb8\x7f\x05\xd7no\x7f\x82\x92\x8b\xfd \x8aQ\x12`\xba\xff\xa7\xbe\x9e\xcf\xb3G\xe9\xe2\xf3%N\x1e\x1f=M.\xe2\xeb8\xff\xb2\xba|\xfa\xe5\xd9\x1f\x9f\xff\x08\x16A'\xab\xd6\xfa\x14\xb2\x96\x93\x88\xa4\xf0\x0b^\xb1\xc1\xf3\xcf\xc5\x16\xcd\x0c'8EY+!\xd0\xc1\xb9w^\xb96\xba\xdb\x1fp\x92\xc1e\x84\xe0\x15\x1f'\xfcNVh\x86S\xf8\x7f?\x1e\x1c\x1c\x1c\xbey\xfc\xf4\xe0v\x07\x07\xfd-\x99\xf6\xcd\x8bF\xef\xff\x9cO:\x9e\xfb\xa6\xbc\xa2C\xc5\xa98\x1b3\xd6\x9f\xb9\x83\xc2?r\x9a-\xb0>\xec\xb4j\xe8pt\xd4\xd5\xca\x14\xab\x1cx\x1f\xd2v\x90k{\x8a\x9a\x11\x8d\x16y\x8c2\xed\xbc\x9c\x10\x12c\xd4\xa5\x19j\xfc\xa7(\xa6\xdd\xe3\xd1\xed\xbc\xa8\xe8\x84f\x11\xf3\xdb\xd9l\xe3\xd9\xddV\x9a2@IB\xf8\xf6\x8c\x9c\xe2\xb0}\x9aME\x01I\xfe\xc8\x13\xf1\x12?\x8c\xa2Psc\x92\xc4\xab\xbb\xad\xb7Tr\xd6M\xb9m\x9d\x15\xa0\x9db\x16\x9f\xdbbj\xe9\xa7\x95K\x1b\xb5\xe9\xd4\xed\x91\x1f\xe9O;-\x13\x83\"/X|$\x9f\x19\x14\xd4W\xa1\xfb\xcc`\x83nD\x8d\xfa\xcc\xa0\xcf\x0c\xfa\xcc \xdc\xa0\x0fl\x9d\x19,v\xdc\xa6\xe2&\xa1\xea\xad\x9e\xa9\x0d\x94g\xf3\x8e\xd4\xc6\xe6)\xc1Z,\\\x1e\xa6\xc5c\x1f\xf9b;\xa5q\x9c\x97y\x85]\xc9S\xd4\x1e\xbb\xe1\xb4D\xef\x94`K\xea\xec\x83\xacI\x1e\x86\xf3D\xba\x95\x8df\xde+\x14\xc4\x06Fb\x80e\xae\xbd\xb2\xc3\xf0.\xcf\xe0y\xefD\xd2\x8dx' \xach\x1c\x05\xbbmH73\x86=L\x8b\x83\x0d\xc0u\x1b\xc0\xbei\x94\xcc\xf6C\x1c\xe3\x19\xbfJg\xff\xcf\xf2\xdf\xc7a\x98\xfe\xab\xf8)\"I\x99\xeb^\xd3\xbc\x1dzWh\xdd\x06\xaf[\x9d\x9d{)\xd2\xc1\xc7Ap\\\xa4\xf7\xa6\xf0\xbax\xaf|G\xa1\x86;\xa5\xb1\x91\nv4|(\x8e\xa1&\"\x91\xd1G\xd5\xc0\xe5;m\x9b\xf7A\x08^\xfe\xc5\xc1\xec9\xdb\x87w\xbf\xd4~\xf9zE\")\x0e\xdd\xe5\xbf\xdaeau}\xb0\x96\x03\x9d\xa3\xb4{\xcdk_\x93\xa56\xf5{?\\\x8e\xc4\xd6Q-?\xfa\x9aW\xd5o\xfbL\xb3\xcaV\x95\xd3\xf2\xc9\"\xcaj\x8b\xb0XTn(\xbb\xb5\xf7\xd7\xfau>\xc7\xb0D\x94^\x914dJ\xaa\xee\xf3f\x04R\xbc \x97\xb8B4\xfe\xf2\xf6\x83\xd5\xcasr\xbb|\xc5\xc7W|Z4\x80\x1b|s\xd1\xae\xaf\xf8\xac\x91\x0f\x06\xd4\x8f\x99\x82\x81\x1f\xbc\xe2c\xe1Vi\x05\xdd\x18\x9b\xe5}\x93m\x8d\x1f\xe2\xe5\xc5\xa3\x87A\x8e\xfe\x98]|\xc1\xe8\xf1\x97\xe5\xec\xe2\xf3\x83\xc7Y\xf2\xc7U\xf8\xe5\xf2!\x9a\x06\x0f\xc2\xa3'-6\x16\xde\xdc\xb6;\xbe\xd1\x15\x99\x95\xb30\xa8!\xd6,S\xe3\x821.Ms9\xc5\x86{m!\xeac\x9a\xed\xa0\x93\xb6\x15\xfe89a\xbe\n\xd7x\xd5\x9b\xb6\x06\xb9\xb6\xe7\xabp\xbe\n\xd7$_\x85+\xe9\xa6\xe2\x92\xcd\x93\x1b,F\xad\xdc\x82\xa2J\xd7\xcc5\xec=<8T\xb3\xfe\x05\xaf\xaa\xfcBD\xe1*%\xd6)^U\xce\xc45\xc5\xbb\xffg\xe9\x9a\xf1\xdf~\x88\x94\xaff4\x0dihG\xf3n\xc9\xfct\xf1\xa0\x1cR\xf9\xf20C\xea\xe1\xb1:$\xb3\xff\x96\xe3t\xc5\x13WA\x9e\xa68\xa9g\xd4`\x82\xb3+\x8c\x93zb\x9b#\x9f\xd1\xda\x18w>\xd1\xed\xe4\xe9m\x16`m\x16\xe5\xa8\xf2\xd5\x9aW\x94\xb9\xea\x0d\x9c\x80o+&\xd9H}\x97\xdfk\xa0\x84\xb5\x95\xf2\xcd\x93\x89\xb8\x1ap\xec+m\xc6J[),_s\xe3\xb4\xeb5\xb7(\x89\xb2\x08\xc5cc\x11M\xf1~\xdf\xf7\x82\x14\xf3\xaf8V\xdf\xfd%\xdeW\x9d\x94\xb8\x88\x92q\x16-4-\xaf\x1d \xd7O\xefT\xef\xf7R1\xfa\x9a\x18J:WL\xb1\x02|\x81\xac$_ \xebj\xd1~t\xbe@6P \xea\x0bdk\xe4\xb3\x88\xea\xc7|\x81\xcc\x17\xc8\xb6\xd4\xf1\x1e\xe9\x86\x8az\x04\xaf\x0d\x1dr\xe0\xabL\xbe\xca\xd4x\xd5\xdb\x87\x06\xb9\xb6\xe7\xabL\xbe\xca\xd4$_e*\xe9\xa6\x9c\xfba\xd2\x94]!\xfd7Uo\xeaLy\xfa\xcaSs4?Z\xe5I\x9d\xde\xf5\xc5\xa7>1\xc0f\x11\x04N\xb2\xb4\xd3\xfcl\xe0\x80\xf6\xde(a\x91E\x06\x1bE\xbc\xe9\xfb\x16Ye\xb0\xe1\xa3K.\x83\x8a\xc1\x06\x06c\xe8\xbaV\xa9\xe3S\\[\xa7z}\xfd\x99-\xf2\xb2\xa1\x96\xc2\xbe\xd5\xd9\xbc\xb3\xb2n\xe6(:\xa4\xa8\xeeJ\xb5Z\xa6)Yh\xfb\xf3;\x8ak\xfd\xf9\x90\x06\xbfk\x94\xed ]\xca\x88C\x87^\xd3l\x83\x0e9\xa8\xed\xa2&\xd7\x98\x04pg\x1a\xc5\x19Na\xb2\x12\x83\x12\x13\x82\x16\x89\x99\x9d\xd7\xd0\x965\xb9\xff\x7f\x8a\xa7\xcfa\xef\xff\xb7\x1f\xe2)WO\xcc\x83y_\x93\x84\xed\xd1\x83\x1b9R\x0d\xd1\xff\x10\x0e\x93\xd39\x8b\xb2\x08\xd6\x98\xa1\xc5L\xdbF\xed\xcb\xe6H\xc0\x81|\x03_\xe6\xf2e\xae\x16}S\x91\xb0/s\xad\x91Oc\xaa\x1f\xf3e\xae\xef\xbd\xccE\xd3\xa0\xe8\xfcW\xe9\x7f\x8f\x14GE\xd50B\x9a}\xbdo\xb0\xd1\x18~\xb0\x8a\x9d?\xb7\xd1h2\xfa\x9ac_\xcbk\xd0\x8d\x18A_\xcb\xf3\xb5<_\xcb\x83\x1b\x8c`\x86\xa9\xe5\xd5S\x13\x8a\x1a\xde\xf6\xd2G\xa5\xdb\xf2c\xe4\x8e\x1cr\x9bUI\xaa\x92\x11ds\x945\x8aP\x11\x85 I\x98\x83Vfh\xbf\x97\xfc\xa6F\xad\xe9\x14\x1a\x91\xa5\xc8\xde\x1b\x06\xfa\xf9\xc1\xc3z\xc2\xc2G\xc5 \xcd\xe9x\x99O\x14\xaa\xdf0\x0c\x93%+\xfb\xc9\xdaZ\xe6\x93\xc3/\xc1\x1fa\x8e\x97\x9f\x0f.\xf3\xa3/\xb3\x8b\xd9\xc5\xc3gx\x8a\x0e\x92\xcfW_\x92\x10%\x9f\x1f-\x1e\x06O\x96\xe8A\xfe\x10-\xbf<\x9c\x1d\xa5\xcfft\xf9y\xf6x\xf6,\xa0\x0f.\x9e\x05\xf9t\xad\x9d?P\x14\xe3\xce\xa4\x93>\"\xa6\x19\xcar\xcd\xb7Sm\x9a\xc8\xc8\x05\xee>\x12\xd3\x10\xf9\x14\xd1k\xcf#\xda\xeaSF\xf9n\xef\xea\xe3\x82$\xd1\x85\xfa\xd6]\xa3\xc9\x88B\x9cdQ\xa6\xbcJ\xd9\xc8\xe0\nOh\xa4\xcamX\xbcOq\x90\xa7Q\xb6\x1a\x07$\xc9P\xd0\xbfn\x19\xe2\x0cE\xb1\xc1=W\xbc\xcf\x14\xa5q7\x8ey5u\x19u\xce:J\xb2\x14\x8d\xb3\xeb1w!\xba?\x97~\xf6\xd6Z9X\xfb\xb1\x82\xaclg\x0c\x15\x7f\xfd\xae#\x0b\xee\x87\xcf\x9e\x1c\xdc?8\xbc\x7fpx~p\xf0\x9c\xff\xff\x7f\xac7\x18\x90\xc5\"\xa2t;K&U\xa6\xe2\x8c\xe3\x00\x93\xa4\x18-\xd0\xf5\xf8&\xda\x08\xe6(\x99\xe1\xad7\x95/C\x94awH@\x93lg@Oo\xb5z\xff&\x1cR\x8f\x06k\x8e\xc6\x1e\x0d\xd6B\x03\x0c;\x9a\x1e~\x95\xbb\xd7]\xc3\xab|\x17.\xb7S\xa6\xd0\xecA[\xbbB\xb6\xde\xf3\xe6\xdf\xb8\"\xb3\xe7\xac\xed\xbe\xdek\xde\xbe\xcf\xac\xf2\x98u\xfe\xb2\xca[\xd6y\x1b*OY#\x1c\xb3\x97\xac}Y\xe3!k\x8d\xbd\xde\xd4k}c\x83\xcd\xd2\xfb\xc5\x86\x97\xb5>\xb1\xe1];\x7f\xd8\xc0D\xeb\x0bk\xde\xd5\xfa\xc1vkc\xdd\x8d\xb0\xf4\x80\xf5\xfe\xaf\xd2\xfb5\xfb\xbe}\xfbm\xf2z-\xf9\xdax\xbc:\x7fw\x83\x05\xa0v\x0d\x8d\x1e\x9b\xc1-\xd4\xfb\xb8Cp7z\xb7\x9b6b\xf4k\x1d\x1a\xd8\x8aO\xbbUpl\xe5\xcc\n\x1e\x0e\x8eP\xcd\xfa\x15(\xcb\xaa\x9b\x01JB\xf6OLG\xf0r\x05!\x9e\xa2<\xce \xca \xc5Y\x9e&\x14H\x12\x8b\x93\x9c\x84\xabT\xf2\xaaz4\x92\x7fS\xc3\xe0\x9a\x88\xd4\xc2\x0d\x15\xb6\xae\xf6g\xc5\x17\xd4\x81%\xce\xe7\xb86\x1a\xd6E\xc9v\x04os\xca\xb1\x118\xca\xe68\x85=\xd1\xff\xbd{\xb0'4\x05\xff7i\xaa\xae\xbdR\x89\xec\x8dj?\xd4\\\xd7\x96\x14t\xe3[\xa2\x19V\x0dC\x9cn1\xc3 \xca\x13\xa35)\xac+\xd6Z'\x0e\xad\xda\x8f\xa3E\x94\xe9:\xb0@\xd7\xd1\"_\xc8>0\x0f\x9f\xa7oa\x89S\xde\xb9\x9e\xbd\xday\x1f\xda\xa7\xad\x8d\xae\xb7\x8d\xf3m\x1c\x86O[\xaf\xbf\xa7\x0c\xb5L\x0e\xb9\x91\x81O[k\xde\xb7s\xd3-\x18\xf9\xb4\xb5O[s2-\x99m\xe7y}\xda\xba\x83lg@?o|\xaf\xc3\x1d\xdf<\xb7l\x9f\x8d\xfd>\xf6\xe6\xb2X\xa2~\xbf\xa4\xbaU<\xbb\x1d\x8d\xb4]\x1f\x96f(\xcd\x8cN\x9c\xd2\xf9\x0c\xf1\xf5\x98L\xa7\x9d\x86\xce\xf0\xb2(X\x8c\xf3$\x8bb\xe7\x97\x99\x8d\xc5\xe1x\x12\x93\xe0\x82\x9a!\x01m\x0d\xe1\xe8I.\xf3I\x1c\x05p\x81W\xfc\xa4\"\x92\x94.\xdc\xda\xfa\xec\xab~\xf6*\xfd\xa3\x0dk\x99\xd4\x8a8\xd6\xe1\x84\xbf\x8f\xfcE@R\xeak\x91\\\xa3\x8f\x1fp\x126\x0ec\xca\x08\xe4\x06\x06\xdb9\xac\xa6\x97\nSL\x9c\xae\xa8]\x1d,\xe83\x00\x1a\xcd\xb0\x96I\x18&\x94\x07>\xb4\xc6\x18\xf6\xf6\xd6z+>\xf3\xcb\xe6\xc1\x8c\x1dg5*{?\x90c\xb4\x95C\x17;\x8f\x06\x02\x8d\x9e,\xc8\xe2\xa8\x1ce\xf6\xab\xf3\xa8 0\x0d\x04\x8c\x83\x01\xdd\xb1A`\xee\x17\x18\xd3zf\xb9\x80I6`3NA\xe6\xd1\n2\x1e)\x04vc/\xc8\"\xfbY\x90I\\\x82\xfa\xb4\xad8k\xaf\xf79\x9aV\x87\x03m4\xf5\x0c-\x80\xb9\x8f\x82L(XA_\xe1(\"F\xda\xe3\x88\xc0F\x90`%L(Xi\xe7\x8b\x95<\xa1.S\xe7#\x8a\xc0|L\x11\xf4\xea\xc9\x86\xc7\x15\x81\xe5\x91E`\xdb9#\xe2\xcet|\x11l\xd0\x92\xb3\xa3\xefO\xd03.#\x7f\x82\x9e~-Z\x9a9\xb3\x89sm\xcf\x9f\xa0w\xa3f\xcb\x9f\xa0g\xdb\xfa\x86&\xc9\xc6\x1c\x19;d0C_\xef\x04\xbd\xb5\xb8\x16HZ\x06e\x15\xaf^\x99\x8a*Q1d\xd9@\xf2\xac\x85\xf4\xf2\x15S\n\xc0>\x99\xe0l\xb7-\x13tn\xd6\x19]\x8f\xf1e\x14\xb2y1F\x8e\xd5\x02\xa6\xf2\xaa\xac\xd7U\x94\x84\xe4\xca\x89\xc1\"J\xc6\x92\xc9\x12\xa7}8\x84$\x9f\xc4\x983\x19\x8b\x82\xc08\xcc\xd3\x1e\x153r\x95d\xd1\x02o\xc4\x84\xcf\x9a\xf14\x15i\xaaq\xado\x9b\xb1\x11]\xb3\xe4\xd1s\x15\xcd\xc8\xe5>\x9b&\x84\xa2\x02\x8b\xeb\x92\xd0+\xaf\xec(x\xdc\xeah\xbc+\x91G\x15/\xdeL\x02\xef'r\xc9\xc4\x91\x04\xc5\x80\xbaSx\x8dQ\xb4\xecs\xa9\xe1r\x9e\x85\xfdt\xbb\x18\xc8\x98}\x9e\xdb\x9f @ L0|\xba\x9d\xe1\xeb\xec\xf6\xa7{\x8d\xb7?\xdd.[\x94\xf5\xba\xdb\x9f\xee\xc1\xa7\xdb\x94L\xb3+\x94\xe2q\xbe\x9c\xa5(\xc4\xb7?\xd5^\x93\x05\x10B\xb3q\xd9\xd8\xe4\xfbL\xb2\xf9\x9bML\xa3\xf37\x9b\x0c\xe4\xd5\xf8\x9bM\xd6\xc8\x87\xa4\xea\xc7L\xd9\xd6\x1f\xfcf\x93,\xcab[\x97EP}4.\xef5\xec\xad\xd3\x9b\x8d\xe0\xf1\xba\xabLM\xa8z\xf7\x8f\x82e\xe3\xa3\xf4\xdb7\xd8\xefJ\x96\x02z\x19\xe2%\xa1\x91\x12\xe9\xd5+\xe9\xf6\xc3\xa1\xc9\x9d\x833\x9fT5\xce\x86\xbe\xb6\xd4'U\x1bt#\x16\xcc'U}R\xd5'U\xe1\x06\xc3\x0f\xe7\xa4j\xe1\xf7\x0cq\xeb\x88S\xb2T\x1c-Q&\x8bnu\xb4\xd3z\xa4q\x06\x05\xf7\x1d\xd7\xf2\xaa\xdbO\xe2\xa8a\x9b\x97$k\xc0,\x1bC\xe1?vxn\xaa\x9b\x99\x15\x1f]\xd7\xbe\xf4\xd8\x88\xb2\x0f\xe5\x03\xdb\xed\xc7\xda!\x81\xba\x00\xa3\x9c~\xe2\xad{\xf5D\x18\xad\x92^\xb2\xeb\xe3%N#\x12\xae\xa7\xbf.I\x16%\xb3\xeag\x9e\x11\xa3\x14\xcb\x7f\xa7\x98)B\xf6_}\x87\xec\xec\xc9Y\xa6\xd9\xb7\x8b\x83-\x83\x9a\xee\x0c\x8d\xe0\xaa<\x17\xad;\xf6r\x08\\\\\xdf5\xc4`\xb6o\x9b\x0e\x82S\xbc?\x8d\x12\xd64\x8a\xe3\xd58\xc54\x8f5\xe8\xdf\xde\x91\xcc\xde\n\xd3=\xbd'i\x19e\x1c\x8c\x0eJ\xea\x86\x8b\xa0 \xcdP\xd76\nA\x03\xb7\xb6\x97\x90\x9b\x1aXB\xc6L\xfd\x8f/q\xa6H|\x0e\xda\xa4(.\xf4;\xe2,#\x99.\x986\x85\x1e\x9a\xc0c\x00\x17\xcf\x10rX\x88\xd02\xdc0\x05\x1bn-u\xa6\xca\xa4\x05\x10\xc8\x7f\xa7Oe\xe7'}\x16\xbeH\xdb\xe1\xe8\xeb*5+e\xa2\xe8\xdc\xd8j\xe5R6\xfb\xa9\xaa\x14T;\xd4\x04\xb3\xca\xc0\xae\xd7\x10Z\x1buz\xf1\xf8f\nl\xe2\xf8^\xd5\xc0\x98\xf3+n\x9b\xe0g\x10E \xe5\x1b\x95\xca\x17\x1a\xac\xc4\xcb\xeb\xa8z_J\xb3\x8cR|)\xad\x83\x83/\xa5 \xf2\xa54\x9f\x88l\x92k{\xbe\x946L)\xad\xb1\xc7\xeb\x8c\x99Bx\xc5M_\xeb\xb9\xbe%\xb7\x06\xff\x8f\xfcl2X\xa0\xeb\xae\xed\x87\x82\xbe\xb5Z\x9a\xaf\xa1\xd5\xc9\xa5\x8d\x8e%,\xbd\xae\xdd\x10&\xcd't\x89\xd4\xfb0\\\xc6J\x1b\xa7E4I\xb3\xd1\xc7\xa5\x89\xb7\xe8\xfaw\xd5\xa2\x12D\x957\x06\x80c[{\xdd1\xbb6\xa3\xdf\xf15\x9c\x13n\xcc\xc1\xaf\xabQ_G\xf5u\xd4N\xb2\x98\xcc`\xa7\xef\xc0\xa8\xf3\xa0G{\xbe\x8e\xea\xeb\xa8M\xf2u\xd4\x92n*\xf6\xfc\xaau\xd4\xbdVv\xf0\xcf\xe2\x9f\xa7aq[\x81s\xa1U\x8f\xa9o?\x03\x93\x15D\x85\xa5\xdc~\xe2N\xf1adZ\xad\x1c|\xed\xa7\x9e'U\xec\x1d\xf5\x86fY\x16\xf4\x9c\x1c\x07m}N\xf0S\x9cW\xef\x1c\xcc\xf5\x0d\xd2\x0c59\x9b7\xf5\x07\xf2w;;\x16\xb5\xb8\x0d\x0c\x99\xa6\n\xe7\xa2#\x0c\x85*m\xfdm\xc0v\xd4\x95\xb7\x01\x1b1\xd7\xdc\x06jL[m\xd3\xb4a\xa8\xb4m\xe0\x8e\xf7\x8e\x12\xbf\xf5\x90\xdb\xa2\xa6\xd6\xd9\x82\xa3\xc5\x8c*\xc5>\xbc\xbd\xdc/\x92F}\x0dg\xf1\xfe\xad\x8e\x0e\x89'\xa6\xfc\xa6r\\>)sz-{\xeb\xad\xe8W\xb4\xa2\x1a\x03e\x9dNt\x9c\xd5\xa7\xaf\xb79\xab\xa5\x9e\xa3}gu\xf1\xbezV\x17O0Wpm\xf2\xf8\xc9\xec0\x99\xb7\x8b\xf1R[\x00\x9d\xc9\xf3\xd0\x92:\xe9KGZ\xfdbh\xa1\xc4\\:\xbf\xd9\xafn\xb1q\xe5\xc2Q\xcbml\xbb\xdd\x90.\xaf\x858\xe5}]\x90\x91\x1e{\xc5C3\x8f\x9dB\xb5(fIc\x9c]\xdfc\xbb\xca\xd2\xe6\xe0F\x0e\x88)\xa0\xbb\x1e\x0f\xd3\xa6\xf6J\xf5x\x98:y<\x8c\xa0\x8a\xbb\xc7\xc3\xac\x91/(\xa9\x1f\xd3;5?<\x1eF\xe3\x99\x19<:w\xaflC\x9fL\x90jb\xe8\xd6\x88\xcfl\xe1\xcd6d[\x86xN~\x88\x87\x0b4^\xf5\xda\xbdA\xae\xedy\xb8\x80\x87\x0b4\xa9\x94\x9b\x87\x0b\xdc\x94k\xde\x1f.\x10\x85,@+r\x12M\xf0\xc0\xc3\x83C5\xa7_\xf0\n\x96\x88\xd2+\x92\x86\x10Q\xb8JI=Y\xdd+\x19c\x95r\xde\xff\xb3t\x9dz\xa3\x11$\x87[\x1d}k<\xd0L>\x03JB\xe5.\xe6\x1f9\x11c\xd33y9\x88n\x13\xb8z\x1fy\xcf^Jw\xd7t#\xc8\xc1\xe3\xe5\xf5\xf5\xe5\xad\xa2\xa9\x1dp\xd1\xbc\xaf]#\x976:\xbc\x91\xbe\xe5\xb9o(@\xdbD\xe7w\xdd\xe9\xf9\xf0\xe0\xa1\x9a\xdd\x1b\x92'!$\xa4\xa5D\xb7\xa2\xf3/I\x86{\xd7\x18\xf9\x99\x17\x9a\n\xa3\xf8\xbdq\xaa\xc7N\xd5\x1a\xbf\xb2b\xdf\x96\"\xdcn9\x92\x7fT\xb5\x16T\xac\xd9MJlD\x0c\xdf\xf65\xe7\xb5Z\xbd\xd9k}\xb9\x15\xb8~'b\x0b\xb6cM\xeb\xb2\xf35_\xc62.2\xd3\xb6\xf1\xb5s\x99\xc5l\xbb\xfd \xa6\x11\x8e\xc3\xea\x84\x9a\x15\xa6\xe2\xac\x99\x84\xac\x1fOS\x07\xcf\xdd\xfe\xc4\xdd\xd8O\xb7%\xe4 \xd37(\xc5\xf5\xd4P\x82\x12Bq@\x92\x90nC\x89\xec\xc4\xc2\\D\x89?%\xa0A.mt\xa5\x0d\xd6&W\xef\x05\xfe\xf4\xf1\xc3\x03\xf7%\xfe\x1f$\x9b\xe3t\xccL\xc3\x7f\xb2\xa8&!\xcc\xe8\xd7\x8f\xedf&\x05\xd3\xaci=,=\x1b\xe5\xaa\x1cJ\x7fp\x13\x1e%\xb3\xcd\x15\x88\xf0E\xf4\xea\xc3\xf6\xa5\xdd^\xf7\xea5\x95\xcdSL\xe7$\xee? \x0fF\x8f\x94flC\xf3\xf5\xe0\xc1C\x05\xe3\xea\x83\x8c\x978Aq\xd6\x91*\xb2n\xe6\xe0p\xb7\x96\x90b\x8a\x0d\xb5\x80\xc41%\x9b/\x1f\xc1g\x03\xf3\xbb\xc6@X\xdf\xc6\xe54\xdf\x89\xe1\xd5\x86\xc4\xd5h{O\xe2]\xb4\x04\xaa\xf9\xd1w\x1e\xef\xed\x87\x11\x13\xc4$\xe7\x1f4\xc41\x9e\xf1\x13Z\xf7\xff,\xff}\x1c\x86\xe9\xbf\xf6S|\x85\xd2\xb0\x88'\xd6c\xb1\xfb\xeb\xb1Q\x81\xe5\xad\xf1\xb9\xd5\xd9;\x99\xe79\x0e\x82\xe3\x02\xfb0\x85\xd7\xc5{\xe5;\x8a\xa8\xac\xf3svdv\x9e\\={\x9c\x85\x97\x0b\xf4\x05]\x84W\x17WG\xf9\xa3'GGOp\x98\xe71:\nV\x8f\x9e\x1c\xc5S\xd7\x15\xcc\xa2{\x16Z\xf3\xa3\x9f@\n &(\xe6\xabq\x9a\x92\x05\xbf\xc5A\n!\"\x89iE\x17\x0ci\xbe`R`/\xb3\xff,8c\x94&8\x84\xc9\xaa\xce\x92\xfd'\x02\x1a%\xb3\x18\xd7$\xdc\x94\xdf\x06\x8b\xf9um\x8elm9\xf7\xf0\xa3\xa5PT+\xfcf}\xe8\xf2\xc8\xf0\xb1\xcc_u?f\xe5\xeb6$gY\xaf\x16\xd4\x9a\xf5\x97(f\xbd6\xa65\x8f\xae\x1e&Gq'O!d\xfd`\xd4\x85PC)\xd4(uA&\xd9\x0b2\x16D\xadd/\xc8\"\xa2\x11d.\x8b\xf6i\xb5#\xc6\xe1\x1af7\xa6\xfa\xb7\x1b.\xda%jJ\xd5\xb9\x9e\x8a\xeeee\xdd\xf0\xb7\x7f\x8f\xb2y\x98\xa2\xabR\xf7\x97\xdd\xd9\xa35\xad_h\xbf[\x1d\x1d\xe9\xc7\xc2B\xedo\x07\xce\xab\xbe\xe6\xb2\x854\x15\x1eE9\xba\xc2\x93j=\xe5\xe6,zt\xa9G\x97\xb6\xe8\x9b*\xe0{t\xe9\x1ay\xf4\x95\xfa1\x9d\x8b\x01?.\xbat'\xe2\x19\x0f\xafl\xbc\xea\x17x\x83\\\xdb\xf3\xf0J\x0f\xaflR)7\x0f\xaf\xbc)\xefl\xc8\xd8\xf3+\xe0*\x1d\xb3\xc3\xfb\x7f\x96Y0\xfe\xf7o8[\xec\x82\x03T\x8e\xa6!\x0d\xedh\xde-\x99O\"\x1e\x94C*_\x1efH=R\x81\x0ey\xf0\xe2\xf6\x96\xb5\xe4\xc2\xad\x8e1\x17\x0f\x8b\x8c\xf5\xfa;\"\x9f\xddN`[\xa4'\x1cr\x0e\xdbr\xf8\xb6\xbb\xb5]\xe9\x94\x18T\x92\xc1 1\x1d\xe0m\xe6\xfb\x0dg\xd9\xec\xe6\xec\xfa\xf3\xdd\xc94Y\xf3)\xe6v{\x11[Lb\x9fc+\xc8\xe7\xd8\xbaZ\xb4\x1f\x9d\xcf\xb1\x0d\xe4\xc5\xf9\x1c\xdb\x1a\xf9\x10\\\xfd\x98\xcf\xb1\xf9\x1c\xdb\xa0\xa6\xae\xaf\xaa\xf19\xb6\x06\xdd\xc8\x02\xf796\x9fc\xf396\xb8A\xefl\xf3\xc8S\x9c\x85XFr_};\xb3m\xda\xedJFi\x05\xe4\xec\x1b\xce\xb7m\x15\x9dY\xa0'\x0by\xa1\xb8\x95s0\xa11k`\xcb=\x0d\xb7\x11\x9c\xcf#\xca\xe6\x01{\xa9\x98\\5\xb7\xe9j\x1e\x05s\xfecNq\nWQ\x1cC\x8a\x03\x1c]\xe2ZGa\x9a'.\xa8\x1c\x874\xc0\xb6|\xb0\x8e\x85\xea\nblO \xc7\x03wz.\xfd\x0d\xd7\xaa[\xd2\xe9=^\xc6(\xc0=\xe6d\xfdM\xcb\xc9(\x1d\xfa\x04_\x01I\xf0\xc8~:\xf9\x04TA>\x01\xd5\xd5\xa2\xfd\xe8|\x02j \x17\xc7'\xa0\xd6\xc8\xc7\xa7\xea\xc7|\x02J{\x84`\xdbmVY\x05\x85\x9c]\x1d\x1b\xd8\xd4\xb9\xd9\x96\xd3\xe6\x13g>q\xb6;\x8a\xc9'\xce|\xe2\xcc'\xce\xe0\x06\xbd\xca\x0d\x12g$-\xad\xe8\xee\x01\xd5J\xd0\xc5\x00\x80\xb4\x1f\x07\xc2\xf5{\xd1Y\xa8\x0b\xb3~\xae\xe1\xad\x8e\xc1\x0b,\x17OK(\xde\xe2\xdb\x987\xc0\xc38\xe4\x18v\xc2Q\"r\x1e|=\xef\xb2\xc7<\xa9\x88\xe2x:\x9e\x90$\x1c\xef\xd4\xf6\xeaow\xcf\xa9\xa0K\x14\x8f\x03\xb2XD\x94F\xeaC\x14\xbdL\xdb\xd4-S;sU*\x9b\x81\x92\xbd\xd6ff\x9f\xe4\x19\xcd\x10?Yq\xdc\xfb\xe4\x8c\x1f\xc7\xf4\xbc\xc1-\xf3Q\x93_\x99\xe1\xfe\xf6\xcd\x88\xc7\x06o\x7f\xe5\xf9\xd5f\\m\xafJ3\xc4O\xa6f\x06\xff\xfe\xfa\xa1\x00\xda\xf5\xa6p\x01\x03k\xce%C\x87\xba\x94_\xc1\xa6\x95v3+\xf8\xab\xd8^\xb7BkY=d\xb3\xb2\xec\xca\x1e\xb5:4\xa3\xfdN{\x1a\xb3\xa9]\xcd\xf46O\x8b\x89\xec\x0b\xac\x05\xf9\x02kW\x8b\xf6\xa3\xf3\x05\xd6\x81Ra\xbe\xc0\xbaF\xbe\x8e\xa1~\xcc\x17X=\xc2\x7fPS\xd7W\xd5\xf8Be\x83nd\x81\xfbB\xa5/T\xfaB%\xdc\xa0w6d\xf4y\xe3\xc5\xc9f\xea\x8a\x05\x8ey\x12e\xab\xf1\x92\x10y\x9e\xa7c\xee\x86\xbf\x0e\xec\xf5\xf5\x83\xa0-\xa2O\x87\x90r[\xf6\xdc\xa7Q\x86\x99L\xed\x90\xdfa\"\xad\xa5\xdc\xbf\xb9\xa9dHF,\xf9m;8\x1d\xab\x0e0\xd6|\xb5 Ir\xba\x11\x87j\x99g\xe8\xda\xf2\xcd\x9e3\x82\x19\xa0(\x99m2\x19\xde\n\x16\xb0 a\x1ec\xf3T`\xcf\xef\xf6\x14`B\x19+\x14\x81\xe6\xb3E\xc94\xe6\xfd\x1e\xf3\xd8&\x98\xa3d\xa6\xf4\xda\x0c\x1c\x16\xd6\x1f~\xedM\xc7\xab\xb5f\x04\xc5\xbcd\x8f\xdd&\xe9$&\xc1\x05\x1d/q:^ad{\x89\xe0\x86\xd3\xb4\x1c\xa6\xf3,}%\xef\xb4\x93\x9c*\x81 \xc7j\xc7\xe7\xea6d\x89\x92$G\xf1\xfdeJ.#\x9e\x8b\xdeX\xa6\x82#T\x1c\x7f8\xd9\xd2|\xb9\x8cW\xfb\xb5\xe3\xd6\x1d\xc4y\xce\xaf\x81\x10,\x80L! QB!JDul\x8e\xca\xfcJ[\x92\x1f\xf8+\xbb#K\xa7\x8c\x8b?\x9a\xbe\"\x976\x06\xf0\x07\xf7\x1a\xf3u\xffO>\xfe(\xe1\xf3\xa4\x07\xda\xb1\xfe\xfa\xad\xce\x8e\xbc\"Q\xd2\xfdX\xcf\x8aw\x8e2\xb2\xe0?l\xb0\xce\xcaBu\xa0\xe8\xde\xae\xaf\xb7\xb6\xee\xb2\x8arU\x83\xed?\x99D\xb5l\x1f\xe5\xd9|\xff\xf2p\x823t\xb8/3\x05t\xffO\x19Kw\xdc\xa2]~\x98c\xf1puK\xac\xfc\xef\x10g(\x8a)w\xcdC I\xb9cZ2\x10\xa0\xc9\x88$\xa7a\xc9\xa4\xaf\xc8\x8f\x81\xe6A\x80)\x9d\xe6q\xf9\xf6\xc8\xea38\xa9=9\xb6uM\xd0\xe8M%\x81i\x94`\xb93\\\xfe\x8dL%l\"\x15\xdd\xe4x\xa7\x96d*\xda W\xc8^\x1d\xe7i\x87\x92\x06\x1b\x9deWk8\x86\x8f\xef\x7f\xddO1%y\x1a\x14\x05\xd19\xca O\xa2\xcf9\x8eW\x10\x858\xc9\xa2i$\xc5\xc0\xda\x052U\xb0\xe3\xb7 \xe14Bq\xf4\x05\x87\xb7\x14O-S\x92\x91\x80\xc40\xc9\xa7S\x9c\xc2\x02S\x8afX\xee\xc4\x17c\x82EN3\x08H\x92\xa1(\x01\x94A\x8c\x11\xcdT\x1cI\x82\xe1\xf6\xfemf\xaeS\x14d8\x15W\xa8\xc5\x88f@\xf1l\x81\xab\x0f\xf7\xf1\xfd\xaf{\x94\xebQ\xde\x84\x82a\xca\x94\x19\xc5\x89\xb2E\xc6j\x9a\xc7\xf1\n>\xe7(f\xf2 \x85\xf4d3\\Nw\x10?I@\xc1\xe2\x13\xeb\xc4\xfe\x8c\x90Y\x8cG\\&\x93|:z\x9d\x8bE\xf5\xe9\xae\x18\x03gJ\xe7$\x8fC\x98`\xe6\x97 \x05\xbf\x00%$\x89\x02\x14\xc3\x94\xa4\x0bU\xabw\xf0h6\xba\xc7\xc4\xc9g\xee\xed\xd1\xed\xf2\xca\xb3 \xc0\xcb\x0c\x87wG\xb7T/\x9f&\xb0d\x02\x8e\x02|\x0f2\x8c\x16\x14r\x9a\x8b{\xfaR\x1c\x90\xc52\x8aY\x1f3\xc2\x850\x89\x12\x94\xae\x00\xc5\xdd\xd7\x14\x89YL\xc5\x84\xcb\xe6x\xa5j\x16_/q\x90A\x94AF \xa7\xb8\xf4\xceH\x92\xe1k\xfei\x8f\x93\xd5\x08~&W\xf8\x12\xa7\xf7x\xd5\xec\xe3\xfb_U7.\x89#\x1d\x18\xa3l\x8eU\x8dr\x8d\x83\xe1\xd3<\xcb\x96\x9f\xee\x89\xff\xa5\x9f\xee\x01I!!\xf2\xd7{|\xe6\x05(\x91\x17\xad7\xae\xd5n\xb1\xc3\x19\xe4K@|\xcc\xca6\x85r\xe7\x02Y\xa0%\x15\xd3\x88\x8d\x84\x8d\\\xae\x13\xa1\x96\xa2\x8c\xbb\xfaH5\xc6)\x89crE\x9f+\xbf\xe5\xbf\xc3\xe9\xb4\x1a \x9b\x04<\x82\x08qX\x0e\x96\xfd\x11Q\x9a/p8R\xb39N\xe0\xe7\xf3\xf33\xf8\xe9\xe4\x9cY \xb9\xc8\xc4\x02^E8\x0e\x953\xf6\x7f\xda\x93\xff|\xb5\xc4\xff\xfc\x9f\x7f*\x1e\x97\xd9x\xf6\xf5\xe5\xcc\x12\x1b\x16\xf87\x91\x0e\x01\xbf\xe3\x9c\xd9\xc6u],\xe8\xdf\xe1\xb8r\x13\xc4\x8d\x8a\x88I\n\x87L\xc4\x01\n\x98\xde \xe4\"_\xca{\xd1\xa5\x01Tj\x1e>\x87\xba\x7f\x04&\x08\xde\xbb9\x12\xa7\x85,j\xeb$\x14\x0b\x05\x15\x83a\xff\xbe$Q\x08(QM\"\x90]\xe3\xaa!\xc5S\x92\xe2{\xc5\xeb\x8c+\xca\xa2I\x14G\xd9\n\x12\x8cC>i&\x18\xb8*K/\x95c\xe0\xa3\x10y\x13\xfe\n_\x95#\xb8\xf3\x91b\xb8\xc4)\x8b)\x99t\xd8Td\xdaH\xccE\x94\xa0\x99z\xdc\x93\x14\xa3\x0b\xa6_$\xdb\xd1]\xd5\xfc\xf9\x8dd\xf89dL\xf3Oe\xb5\x1a\xf1\x11H\xad$o\xc5\x8fW\x80.Q\x14\xa3I\\,\x7f\xd5\x17\x99N\xa3 B\xb1\xd6\xfaL\xf2)\xa4\x98\xd9\x14|\x8f\x83\xc3\xa2\xach\x90\x17\xd5\x99\x02)\xd7\x9e\x82\xd1\x04\xcf\xa2$a\x83\xbc\x8a\xb2\xb9\xd2P\xac\x96x$\xe69ZFt\x14\x90\x85Z\xbf~\xe0k\x91\x02\xbf\x90\x92\xa9\x81\xa4\xad\x7f\xe0\x0e\xeb\xd9\x1c\xcb\x8b\xfc\xc5\xe2mo\x96.h\x11\xcd\xe6\x19L\x94\xea\x86\x0f\x95C\x03\"\xe6\xd833)\x923t\x89\x83h\x1a\x05@\xf1\x02%Y\x14t\xb86\xda\xda\x98\xd1=\x11+\xf79LV\xd9&X\x89\xb7L\xc9Lpy]g\xe5|\xacy\x19\xd20\xa3 \xb9TM\x1d9l9\xd9\x9bC\xd6\xf7\x87\xe3i\xa5\x0f\xfc^\xba\xaf\xc5\x99B\x85;+&\xd4T~?\xfe\xc6~\xd3m.\xe8\xfd\xd9+X\xe0lN\xc2\xaa\x0f!\x9e\xa2<\xce\xd4\x1et\x02y\"\x0c%\x0e\x85\n\xdc\xa6#\xcd\x1bP\xe5\x0f\x14\xe9\xf5P\x99\x96\x8d\x92\x0c\xcfp\xba\xf6k1K\xa2${p\xd4\xfaUZC\xa7>\xc8\x90f7\xf2\x1ez\x07\xdfb\x0d\x99&eE\x03\xbb\xf9\xb6\x8e~?W_\xc9L\x1b\x02\xf4\x0c\x02\x94\xdcx\xa7\x8ca\xc0 \x81@\xefP@\xc9\x0fY\x06\x03\x1b\x86\x03=\x03\x02u\xb7\xe3\xd86$\xe8\x17\x14(\x99q\x17\xdb*,\x18<0\xb0\x0c\x0d\x06\x0d\x0e,\xc2\x83\xc1\x02\x84\xcdB\x84\x1eA\xc2 a\xc2\xe0\x81\x821T\xd8B\xb0\xb0\xadpa\x0b\x01\x83K\xc8\xd07h\xd0\xeapS\xd80`\xe0`\x1b:8\x06\x0f\x83\x87\x0f\xe6\x00b\xe3\x10\xc2\x00\xb0\xb3p\x81\x8c\x81\x84\xbd\x974l0\xa1\x0f'\x04\xd9\xf4\xec\xd3q\xb2\xfaT\xb8G\x94).\x94N\xa2,e\x8bX\xdd\xc3NV\x85\x8d@1\x91S\x0fP\xf7\xa7e\xda\x99\x1b\x1a\xd1\xc3I\xd3-l\xb9\x7f\xa5W\xa7\x98\x9ag\xc5\xc2\x89\xa3 \xef\xb6\xb4#\x94W\x83H\xca-\xf8\x12\x05\x17\xfby\xc2\xfe\x87\xd9m1/\xbaW\x904\xf4j\xc7\x86L!\xcf\x84b+\xd4\x03\xdf\xf7\x83\xc20\x12\xba\xa2\xc4\xc2\x872\xd0\xa2rX\x9d\xfcX\x7f\xc4'\xecn\xefD\x14\xc6\xe0\xf09\x9c\xb1\xfe3\xbd \x87\x82J\xa1G \xbc\xfa\xcb_4f\xf2\x0d!0%\x04^\xc0h4\xfa\xdf\xca\xc7XgP\xb2R?\x80\x92\xd5\x88u\xe3MJ\x16w\xa6\x84\xdcU?:\x1a\xa9\xed_4\x85;\x8c\xd5G>\x90sr\xe7\xdf\x18\xaf\xbb\xf0\xa7F\x87\xeb\xf8\xfdK/\xbb#\x83\xec\xfe\x8a.\xd1`\xc2\x83\x17\xdc7d\xad\x0c \xa1\x88\xdeyC\xc8(\x88\x11\xa5\x06\x01\x89.\xb2\x97\xc4\x18k/\xaa\xfb\xa0\x90\\)\xba\x07\x06\xd1\x9d\xad\xb29I4\xc2\x13\xbdzC\xc8\x9d\xd1h\xa4\xb6\x06\xa5\xe0\xeeh\x9f\xe1\x93\x8f\x8b\xb5\xafT\x19\x93S!\xd4\xd7'\x1f^\xbd?=;\x7f\xf7\xfe\xae\xcaH\x80lVLT}\xc3\xa2i\xbd8\x1f\x1a\xc4\xf9\x13QK\x92\x8b\xf2\xf9\x0b\xf8\xb7\xe5d\xf4\x86\x90?G\xa3\xd1\xbf\xd4\x0f\xa3du\x8f\xb9\xa1\xec\x8d\xa5p\xa2\xde\xa2\x94\xceQ\xcc\x84\xac\x1f\x88N\x84\xed^h\xba\x10M[\x1d\xf8\x98,\xaa.\xf0\x0e\xf2\x05\xc2\x9f\xfa_/ \x89b\xed\x04\xd7\xf7K1\x93Yp\xcb\xe5\\\xe8\xe2\"\xd0\x80\xc9\xaar\xbb\n\xeb\xc1O\xe0\x9et{\xbd2K\xc6\xdc\x92\xee\xa6\xf6:\\\xaa}\x16\xbf\x8f\xf8\x0f\xcc]\xdd\x03T\xb3v\xcc\x12\xb2\x99\xa0\xb2\x0db\x86t7V\x9a\x96$^\x15q\xe5Z\xb2\xa0t\x93\x01M3\xee\xb6u7\xc4\xf3\x18{\xfb{\xddMI\x9bXtY\x94\xc0$`\x03nO \x19MP\xca\x07{\xbd\xbf\x1a}\xb9-\xa4\xc8c\xafN~\xeaP\x94w\xf56\xe3\xc1\xcca\xe7#\x7f\xfd\xf0\xee\xb7\xee_^\xbcx\xf1B=\x07\xd8{U\xceE\xf8\x91\x84\xa9\x03\xe9\x04\x89\xb8.\xa7\xb8H\xac\xce\xf2\x18\xa5\xdd\xfc\xd6\xd9d\xfc\x1c\xee\xcam\xb9\x07x1\xc1aX90\xf7\x84;\xde\xc5\x0e)\xb275\x97b\xca\x03\xd9O\xff\x87\x89\xee\x93L&\x94n[\xfd\xe3t/\x10\xa9~\x9ek\x02\x10\x14\\0\x1dT\x05\xc4\xd3(\xc6j\xbbQ\xe8\xac3\x9cR\x92h\x97\xad\xcc\xc4M\xa3\x94fc\xfe\x85_\xc0\xa1\x9as\xf9\x02\x9b\x94\xc5\xf3G\xee\x16\x0c@\xdb\xab\xdb\\\x96\xb7\x9f\xc3\xed\xaeU\xdb\x14\xc3H\x8c\xf2\xf6=\x1d?>\xbe\xdf\xd0\x82\xf1\xfc\x0f1\x84\xff\xd4\xbe\xc0\xc6\xd7z\xdeu\x90\xa7S\x19p5\xe7\x9a\x98\x0d\x11\x85+\x1c\xc7\xf7/\x12r%N)\x98#\n\x08\x82\x9c\x16\x10\xab6\xa9\x17Ws\xca\xdf\x13\x0e|k\x1d\x08\xe5Y\xeb\x0e\x9b\xc0\x8a\xe0\n\x89)\xdd\xdd\xd8'\xbe\x18\x8by>'q(&\xb9\xe8\xb9X\xcaQR\xae\x0f\x10\x19\xc0nVb\xc9t\xb7\xc3\xbb0*\x8d\xf3\x1d\xa6\xd7\n\x11\xae\xa5\x86\x8a\x8c\xe9?\xff\xe7\x9fw5\x0bi\x889\xd7lP?\xed\xb8\xa8\x18\xcb\xc3\xd1\xd1\xe1\x11\xed\xda\xde/\xa80\xd4\xdd\xe7B\x08\xbc\xdf\xfa\x81rM\xec\x92<\xe6\xa0\x81]\x92\x7f\xcb\x08|\xe6\x07\xbfL\x9b\x89\xaf5d\xa1\x12\x19\xd8\x19\x92\xb7\x81z\xbc\xb4u\x0b\xa0\x13\x9a\xc6\x87\xb6\x0ez.\xd1hg\xfcw\xde\xcf\x08S\x9e\x12\xae\xa4\xd1\x0d=\xcb\xb3\xb9x\xebV\xd1\xf7\x1dE\x9f\xd5\xc7^\xa7Fg\xc4C\x8d\xefW \xa0\xb0cb\xd7\xc7\xa0x\xb3\x05\xba\x1e/\xf0\x82\x8c\xcb\xfa\x89\xa6neU\xdb\xcd\xa3${\xfc\xb0\xe3\x91\xeczL\xa3\xd98\x8e\x16Q\xdfC\x14\xec\xda\xf8\x82\xc7\x01\xa1\x19\xdf.1Y\xe9\xf7\xf6o\xd2\x18\x1b\xcd%N\xa3\xe9J\xb4\x87\xc3\xa3G\x8f\x0e\x9f\xddTs\xb4\xd8\xc4:|\x83\x16eo\xb1\xf6\\\xaa\xder\x8d\xbf?{\xd5\xe2\xe7\x8b\xde\xbe\xe8m\xcc\xf8\xda$M\xc1\x17\xbd}\xd1[\xf9\xa4/zs\xf2E\xefu\xf2Eo_\xf4V\x91/z\xfb\xa27'_\xf4\xf6Eo_\xf4\xf6EoA\xbe\xe8\xed\x8b\xde\xbe\xe8\xed\x8b\xde*\xf2Eo_\xf4\xf6Eo_\xf4\xae\xd1\x10\x05H_\xf4\xe6\xe4\x8b\xde\xdfK\xd1[UF.\x8f8\x99\xa0\xe4\xa2\xac#OP\x8c\x92\x00[\x1eq\x12\xc7/\xe5\xf3ee\x99\xa7f\xc5\x1f\xb9\xbe\x8dcy\xf4\x938r[\x1eN#\x8f\xfd\xe8.\x83\xa5A\xca\xe3\x96V\x17\xe5\xab\xfa\x9fN\xa7\x10\xe3i&+\xa5Q&B\xe7\"\xc1\xc8k\xf1b\x81\x88F\x98\x9c'+\xc0(\x98\x03Z.\xbf\xa2\x14\xebn@\xf5\xbeN\x96\xb57\x98D\xf9\x0c%\\\xd10'\x05\xa2$\x8c\x02\x94\xe1\x12\x95#%\xc8\x1f\x94\x13\xa9\xce.J\x828\x0f[\xe9C\x04\x8dC#\xdb_\x8c[\x94\x9a\xc3\xc3\xdc\x84\x86'\xdc`\xf6\xf1\x94\xb6\xbeVk\x08<\xe3\xcal\xbd\xb0\xfd|yU\xeb\x91-\xb9\x91\\M\xd1,!i\x0b\xebP\xac\xc6f\x13B2\x9b~\xd8\xe6\xbdY\x9b\x06\xfa\xf2\xc8\\]\xc0/=*e\xb0\xdf8{\xd6:\xe0\x97\\o\x15\x83\xde\xed`\xdf\x10\x89\x15\xe2\x88\xd6\xa4SDy\x83\x86^\x9a\x98\xdf\xe0\xa2\x98\xef\xcb\xeax\xd5\xc2{\x97_\xd3\xcas\x97\xbezs\x02\x14\xe4\x8f\xeb\x92\xe4\xddt\xef\xa6\x1b\xad\xfa\xfd\xfa\xb9\xe5\xaa\xde\xf1\x1f\x8b\xbeUgfo\xbd{\xa6\xadL\x0d\xcb\xe4\xb8\x95)[\xdb\xc9s\xcd\xf9\xb56\xf3\xb4,Nr\xf1m\xefm\xda\xc0dP\x9c\x84c\x9c0\xd7H{\xed\xed\xf7p]\xa2v\x98\x82\xba\\\xa96\xd9\xa4\xb7\x19}\xc0Ix\"\x9a\x14\xb0\xea\xe6\x1aC\x0d\xd9\x03\xcdP\x96\xab\x81\x9dw\xae\xe6\x98\x83/Q\xb9n\xd5e(\xc6\x98q\xbd\xdb\x0d\x0d\xe4Vsl\xfb\xe5U\xc2h\x88\xe1L\xbb\xa1\xae0\xf0\x1d+\xb1\x83\x97\xd5\x0e\xa8zK\xeb\xdeD\x99#\x10\xab\xbfk\x195\xf6:z_\xc2\xfb\x12k\xb4\x05_\xc2\xc9\xf4\x89k<\xd4\xa6\x8f_\xf6!.\xech\xd8\xbf\xac} HQu\xed\xb4~5.\xf2\xe7\x9d5\x7fu\x81\xd4\xe9k\xcc._^\xdd\x9d\xf2\xaa,\x87\xc9\x19/\x1d\xdaj\xfe\x97\x05\xd5[\x1d/u\x1b\x9b\xda\xa2\xb0\n]\xbbx\xec\xd7\xd7\xa7\xb2\xe8T\xfe\xd1\x1b\xa05\xf9x\x03tc\x06\xa8;-(\xef\xd02\xa7\x02\xc5,\x7f7m\xd8!\xc55T\x9dV\xa8` \x7f\xdbY\x13\xa4R\xdc\xcd\xb0_(I\xa5\"\xfa\xces~\xc5\xb7\xb4\xd2\x9cRW\xb6\xbe\x7fA>\xeb'\xc9+\xca\x1bV\x94\xba\xac\xdf7\x99Uk\\\x90](x\xc3\xad\xeb\xeb\xd7\xab\x9f\x11\x127\x94|\xd0\xbcx]\x1dg4X\xdc*\xc6\xb7\xa3j\xbe\x92F\x9d\xbe\xc6\xda\xd8\xf18\xe35\x0e\xdcB\x0d\x08q\x10-P\xf7ee\x1bD!\xafq\xf0\x95\xa3\x90&\x04\x93-\x86B(\xcd5\xb2G\xbb\xe0\x9d\x16v\xb5\xb1\x82\xac\x8ck\x17\x97\xfd\xe6Bl=\xe2\x0d\xae$opo\xd8\xe0\x1a#\x93N\x03\x16\xe2\x18\xcfPFR\xca\xa2\x14\xf9\xefq bH\xf1\x15JC\xaa\x89\\j\x10\xb5\xd7\xe2\xfd\x88$\xa0(\x89\xb2\xae\x15\x11\xccqp\xe1\xbe+O3d\xa3k\xd4\xe2\xd7q9t\xcbS\xea\x10\xab\xcf\xbdK\xf2.\x93w\x99v\xcbe\xa21\xa2sl\xe5&}\x10\x8f\x96\xbe\x11\x7f\x15\xf0\xa5P\x97S\xfb\x1c\x8cdt\xab\x10\xc1\x8ezCR4\xbb\xb1\xb8\xaaO\xb7\xc4iD\x0c\x9b\x01\xad\x96\x89\xe6\xf2\x96i\x8a\xf8\xc5\xc1=[1\x1bah\xcd\x86\x136\x8b\xea\xe6\xb7n2k\x13Mq}\xe9\xcf\x98\xdf\xd5\x1dQ\xee\x7fD\x01?\xb0>\x9b\xcb#\xefiFR~\xc7\x8e\xe2\xed\xf3y\xc4\xcf\xbfM0\x0e\x8b\x0b\xee\xe3\x80'\x1a\x01-\xd9\x97I#\xfe\xefEq\x88;\xcd\xf8m\xed\x9d\xdc\xb8+\xa68\xf8\x929\x03\x15\x08\x98J\x9f \xa5\xb8,M$\xf2\"L$G=G\x8a\xadq\x01\xbf\xe6\xdd\xb4\x01N\xce\xe1\xe6\xd6#\xf97\xbb\xb4\xa0\xbf\xd1\x89\x93\xbf\xd1\xe9;\xbd\xd1\xc9\x90D\x94\xb6\xca\xe8&\x9b3\x88\x85\xf9\xf4\xce\xb0$\xef\x0c{g\xb8\xb73\\\xf5\x9cf(\xcd\xa2d6\x9es'@\xd5\xef\x96\xdaj\xbd\xd5\x18\x04\xe1\xaf\xa0\xb8|\x08\xe4C\xe5X\xda\x8b]\x9a\xd4\xf6\xf8\\\xafGY\xfb\xa0\x86{o\xb0Hu\x0e?p\xc1xW\x87\xed/\xf6r\x13\xa3\xbf\xd8k\x8b\xc25\xcfQ\x7f\xb1\xd7\x10R\xf4\x17{}\xfb\x17{\x15\x89*|\x19\x858 p\x99\xa4*\xfe\xa0\xceB\x1d\xc7\xf1\x89|\xa8\xc2\x03\xc51\x14ovf\x9cj/\xdd*\xc6\xb1\xa3\xc9\xa6\xa6\x04\xea\xf4Mz\xafv9 F\xc7\xf0\xf1\xfd\xaf\xfb)\xa6$O\x03\xcc\xd7\xbdX\x91y\x12}\xceq\xbc\x02&\x98,\x9a\x96\x87\x13\xb0\x88\x8b\xa8\x02H\x10)\x0e\x9cF(\x8e\xbe`Mm\x89\x17\x90\x02\x12\xc3$\x9fNqy\xaf\xfeH\xa4\x83\xc4\xd8`\x91\xd3\x0c\x02\x92d(J\x00\xa9\xca\x8c\x001F4S\xb7\xc5\x0c\xd7\xed\xfd\xdb\x10\xccQ\x8a\x82\x0c\xa7#^I\x8b\x11e\xeaf\xb6\xc0\x95\n\xf9\xf8\xfe\xd7=\xda\xf6\x8c\x9b\xc4;U\xe6\xca\xd4\xad2v\xd3<\xe6W/\xa0\x98I0\x14\xf2-\xb4\x15\x93\xe4\x1dD\x99\x1eR2\xf9\xc4\xba\xa2\xbc\xfa\xff\xd3]1\x12\xce\xb6\xf2f\"\xd5\xbd4\\c\xa2\x84$Q\x80b\xae\xfd\xd5-\xdf\xc1\xa3\xd9\xe8\x1e\x13-wFo\x8fn\xf3$\x1d\xc9\x00\x05\x01^f8\xbc\xab+X\x9e&\xb0\xe4i\xcc\x00\xdf\x83\x0c\xa3\x05\xd3\x909b\xe2X\xa68 \x8be\x14\xb3\x9e2\x9b0\xc70\x89\x12\x94vW\xa1\x19\xf1\x83zVK>\x07\x85\xb9X\xa9\x9b\x16\x91:\xb3\xae\x19aj\xb90\xd1l\"1\x9f\x91L\xe18Y\x8d\xe0gr\x85/qz\xaf\xa3\xceV\xd1\xc7\xf7\xbf\x16\x89B\xc6\xaa\xa3\x00W\x11WF\x18>\xcd\xb3l\xf9\xe9\x9e\xf8_\xfa\xe9\x1es\x95\x12\"\x7f\xbd\xc7g#s\xd3\nw\xbf3\x99$\x19\xe2\x0c\xf2% >vM\xbb8\xbd\xc4\xa9\x10\x0d\xbfF\x88O-\xde\xf3\x8c\x14+K\x84\x1a\x91\xc8|*\xd2\x9a\xc0}\x02^\x0c}\xae\xf9\xb6\xff\xce\xfc\x98rDlZ,S\xc24hX\x0e\x9a{\xa8\x94\xe6\x0b\x1c*\xd2\xbe\x82\xd1q\x02?\x9f\x9f\x9f\xc1O'\xe7 \xb1\x92\x1f\xdf\xff*\xd6\xd8\x8a\x97\xb8\xd5\xd5\xf3\xffi/\x8b\xf3\xd5\x12\xff\xf3\x7f\xfe\xa9|\x01\x8a$U\"\xe7\x9bt\x80\xf8\x17Z\xa6$\xcc\x03\x0c(\x11 \x98\xf5\xfchA\xff\x0e\xc7\xcbe\xcc\xbc\x17!\xcb\x14\x8b\x02r\x91\xbc\x0e\x98n!\xe4\"_\x96>\xe3\x04\xd1\x96;P'1pM\xb7?\xbe\xff\x95\xf7q\x8e.\xf9\x14\\\xd4\xd6P(\x16\x11*\x86\xc4\xfe}I\xa2\x10P\xa2\x9eX ;\xc8\xd5G\x8a\xa7$\xc5\xf7\n\x06\x8c/\xca\xa2I\x14G\xd9\x8ag\xe5\x0b\x9f\x97\xab\xbc\xf4R3\x12>\x96`\x8e\x92\x19\xe6/\xf15;\x82;\x1f)\x86K\x9c\xd2\x880\x97\x99OO\xa6\xb3\xc4\xfcD \x9a\xe9F?I1\xcf\xf7\x17\x8cGw58 \x92\xe1\xe7\x901\x1b2\xcd\x93@\xac06\x0e\xa9\xbbx\xda\x9e\xc5\x88\xf5t\xa8Z]\xf2\xb0\x9cGE\xea,\xa8\xb4e\x93\x9c\x85\x08\xcc\x12\xe1{\x1c\xf6!\" \xd6(\x8f\xc6x\x96\xb2X\x97JV<\xe6M\xd8`\xaf\xa2l\xae1.\xab%\x1e\x89\xf9\x8f\x96\x11\x1d\x05d\xa1\xd3\xc6\x1f\xf8J\xa5\"#+\xa2\xbb\x96\x96\x82;rG\x84\x08M\xc4\xd2\xbe\xab6\x82<51\xd1(%\x11\x82FY\x0d\x94\"\xdcn\xe6?G\xd3(\x00\x8a\x17(\xc9\xa2\x80v/\xb5-\xa4\xe0\xdad\xeb%\xbde\xeah\x82\x8b\xb2X\xcd\xc1Y\xf3c\xa4qG\x13r\xa9\x9e\xd3R\x04r)t\x0d\xdf\xa6g\x9f\x8e\x93\xd5\xa7\xc2=\xe2@ \x94N\xa2,e\x8bX\xdd\xc3NV\x85\x8d@1\x91S\x0fP\xf7\xa7e\xda\x99\x1b\x1a\xd1\xc3I\xd3-l\xb9\x7f\xa5W\xa7\x98\x9ag\xc5\xc2\x89\xa3 \xef\xb6\xb4#\x94_\x89ARn\xc1\x97(\xb8\xd8\xcf\x13\xf6?\xccn\x8by\xd1\xbd\x82\xa4\xa1W;6d\ny&\x14[\xa1\x1e(\x88ti$\x93o3\x9c\xb0\x18\x86w>\x9b\x93\xb0\xd8\xe6\xd5\xc9\x8f\xf5G|\xc2\xee\xf6N\xae\x11\x87\x14\x1d>\x873\xd6\x7f\xa6\x17\xe4PP)\xf4(\x81W\x7f\xf9\x8b\xc6L\xbe!\x04\xa6\x84\xc0\x0b\x18\x8dF\xff[\xf9\x18\xeb\x0cJV\xea\x07P\xb2\x1a\xb1n\xbcI\xc9\xe2\xce\x94\x90\xbb\xeaGG#\xb5\xfd\x8b\xa6p\x87\xb1\xfa\xc8\x07rN\xee\xfc\x1b\xe3u\x17\xfe\xd4\xe8p\x1d\xbf\x7f\xe9ewd\x90\xdd_\xd1%\x1aLx\xf0\x82\xfb\x86\xac\x95\x01$\x14\xd1;o\x08\x19\x051\xa2\xd4 \xd1E\xf6\x92\x18c\xedEu\x1f\x14\x92+E\xf7\xc0 \xba\xb3U6'\x89Fx\xa2Wo\x08\xb93\x1a\x8d\xd4\xd6\xa0\x14\xdc\x1d\xed3|\xf2q\xb1\xf6\x95*cr*\x84\xfa\xfa\xe4\xc3\xab\xf7\xa7g\xe7\xef\xde\xdfU\x19 \x90\xcd\x8a\x89\xaaoX4\xad\x17\xe7C\x838\x7f\"jIrQ>\x7f\x01\xff\xb6\x9c\x8c\xde\x10\xf2\xe7h4\xfa\x97\xfaa\x94\xac\xee17\x94\xbd\xb1\x14N\xd4[\x94\xd29\x8a\x99\x90\xf5\x03\xd1\x89\xb0\xdd\x0bM\x17\xa2i\xab\x03\x1f\x93E\xd5\x05\xdeA\xbe@\xf8S\xff\xeb\x05$Q\xac\x9d\xe0\xfa~)f\xf29\x870\x04\x17\xa5..\x02\x0d\x98\xac*\xb7\xab\xb0\x1e<\x99:\xe9\xf6z\x8b\x1ckN\x15>\xcb^\x87K\xb5\xcf\xe2\xf7\x11\xff\x81\xb9\xab{\x80j\xd6\x8eYB6\x13T\xb6A\xcc\x90\xee\xc6J\xd3\x92\xc4\xab\"\xae\\K\x16\x94n\xb2\x04\xa5\xa8\x1a\xe2y\x8c\xbd\xfd\xbd\xee\xa6\xa4M,\xba\xcc\xa3]\xc0rF\xdf\x9e\x122\x9a\xa0\x94\x0f\xf6z\x7f5\xfar[H\x91\xc7^\x9d\xfc\xd4\xa1(\xef\xeam\xc6\x83\x99\xc3\xceG\xfe\xfa\xe1\xddo\xdd\xbf\xbcx\xf1\xe2\x85z\x0e\xb0\xf7\xaa\x9c\x8b\xf0# S\x07\xd2 \x12q]N\xcb\xe3\xfffy\x8c\xd2n~\xebl2\xbe\x87\xbfr[\xee\x01^Lp\x18V\x0e\xcc=\xe1\x8ew\xb1C\x8a\xecM\xcd\xa5\x10X\xedO\xff\x87\x89\xee\x93L&\x94n[\xfd\xe3t/\x10\xa9~\x9ek\x02\x10\x14\\0\x1dT\x05\xc4\xd3(\xc6j\xbbQ\xe8\xac3\x9cR\x92h\x97\xad\xcc\xc4M\xa3\x94fc\xfe\x85_\xc0\xa1\x9as\xf9\x02\x9b\x94\xc5\xf3G\xee\x16\x0c@\xdb\xab\xdb\\\x96\xb7\x9f\xc3\xed\xaeU\xdb\x14\xc3H\x8c\xf2\xf6=\x1d?>\xbe\xdf\xd0\x82\xf1\xfc\x0f1\x84\xff\xd4\xbe\xc0\xc6\xd7z\xdeu\x90\xa7S\x19p5\xe7\x9a\x98\x0d\x11\x85+\x1c\xc7\xf7/\x12r%\xb6\x11\xcc\x11\x05\xa4;cS\xbd\xb8\x9aS\xfe\x9ep\xe0[\xeb@(\xcfZw\xd8\x04V\x04WHL\xe9\xee\xc6>\xf1\xc5X\xcc\xf39\x89C\xb9#Vl:\xe0K9J\xca\xf5\x01\"\x03\xd8\xcdJ,\x99\xeevx\x17F\xa5q\xbe\xc3\xf4Z!\xc2\xb5\xd4P\x911\xfd\xe7\xff\xfc\xf3\xaef!\x0d1\xe7\x9a\x0d\xea\xa7\x1d\x17\x15cy8::<\xa2\xb75S\xa8\xfd\x97F\x84X\xd4/dY\xb2Y\x9cY\x8b\xaf=\xa8\x90\x93\x07\x15~\xa7\xa0\xc2\xeem8\xb5rd\x7f\xa5{}\x89\xbeW\x81\x9e7\xa1`h,\xcf\x0fP\x9c\xefY\x9aW\x164\xed\n\xf3\x1b\x95\xe5{\x15\xe5\x01\xc5\xdd\xd7\xbb\x83mI\xbeOA^W&\xb3*\xc7\x0f\\\x8c\xb7*\xc5\x0fX\x887\x96\xe1\x07*\xc2oR\x82w.\xc0\x0fP~\x1f\xb8\xf8n(\xbd\x0f^x\xdfN\xd9}\xf0\xa2\xbb}\xc9\xbd_\xc1]#tS\xb9}\xb0b\xbb]\xa9\xbd#\xd6W\xeb\xd7\x81\xcb\xec\xa6\"\xfb\x86%vM\x81\xdd\xe8\x9e\x18\x8b\xebv\xfe\xcb\xb0\x85u]Y\xdd\x02\xbc\xeb\x84\xdc\x95X\xdd\x96\xa3\\\x90?\x01T\x92\xc7\xe9z\x9cnE\x1e\xa7\xebq\xba\x15\xf5 \x0b\x94\xcc\x0c\x1e@\x98C\x88\x8d\x83\x08\x8f\xd35\xf6\xcc\xe3t\xdb\xe4q\xba\x1e\xa7\xdb&7\xe1y\x9cn\x83?(\xa0\xad\xe8\x82\xe6rZc\xb6\xa71\xa6_q2\xcb\xca\xa9,\xd8\x83`\xdf\xeex\x88\x97\x84F\x99\x9d\xac\x9a\x0f[\x08K\xbe0\xa8\xb4\x16Q2\x96|u\xb2\xea.X\x82\xaeh \xa6\x8e 2\x15/\x81\x8b-!\x0b]Tf\xfc\xa0\x8c\xc4\xa5\xb9\x1b\xb2\xb1I\xa41zE\xa2\xea\xa08$\xae\xe2\x95\x8901\x9c\x02D\xccL1Jd\xe7t9\xd7\xdf\xde\x9d\x9f<\xe7\xde\xab\xbc\xfdW\xb8\x81\x11\xcf\xd4\x9d&\x994\x90ev\x94j\x8b\x00\xd2z\x8a\xc0A\xdd(\x8df \xca\xf2\x14\xd3R%\xb3PiFf\x84\x9b\xa6n\x0f\xb3!\xa4\xb7Q\x12-\xf2E1{y\xbc\x80\xf8g'\x14\xc5l^\xe3\x84\x85#\xda\x85\xc5h\x81\xae\xc7\xe5\x9a\x19lu\xab1\x1f\xe8\x9a\xf7[4\xc5\xbb}\xccD\xc6<\x10\xb60\xab\x05 \xec3\x96#RE\xa5\xa7I\x94E(\x96yhh\xa3\x0cJZ\x90$\x9b\xaf\xe5\xb03\x14\xc7+;\xbdR\x7f\xd4B\xab\xf0\xc7\x07\xd5)\x9fs\x92\xe6\x8a\xf5j\xfc8\xc64\xbb\xe5\xd7\x93\xb3n\x89\xd3\x80\xf9\xa43\x91N\xe6P|\x9a\xa1\x0b\\\xbbc\xfb\x92d\x02/\xa3\xaa\x0d\xca\x9d\x05\xbcj\xa5\xfal\x01Ih\x14b\xb6@xR\xbfk\x1ad\xf3\x14S6\x7fvD6l\xc6\xa6E\xd4\xfa\xdf\x98rIP\xb1\xcd\xa1\xb6>\x97\x88*j*\x00\xafe\x1eD\xce\xea\x83\xd1\xa3N\x08\x17\xce\xc8x\xc7F/b|2\x85\xdf\xb1\x9c\x03|M\x9f\xf3)\"\xfe\x93;k\x9ar~]H\xea\x99\xc1\x06\x8f\xc3Q[T\x87\xfb\x0f\x9c\xa1_\xc2at\x01~IO\xf5\xfd\xd9\xab\x16?\x0f\xfb\xf2\xb0\xaf\xc1\xbc\x1d\x0f\xfb\xf2\xb0\xafn\xf2\xb0/N\x1e\xf6\xb5N\x1e\xf6\xe5a_*\xf2\xb0/\x0f\xfb\xe2\xe4a_\x1e\xf6\xe5a_\x1e\xf6%\xc8\xc3\xbe<\xec\xcb\xc3\xbe<\xecKE\x1e\xf6\xe5a_\x1e\xf6\xe5a_5\x1a\x02\x82\xe3a_\x9c<\xec\xebG\x80}\xd5 P5>\xbaH\xb2\xf6FYo\x16\x9f\xadVq\xce\x88\xbc\xf7mJ\xd2{\xc51\x83\xe2D\xc0\x06\xb3\xdb\x02\x07p\xfb^S\xbc\xb7y\x99\x9a\xfd\xc0\x02\xad\xdb\xb2\xf2~{@\x18\x99\n/\xd6 \x17\x93\x85?\xf9B'D\xacx\xa4\x89\x12+\xffZ\x9er6\x8b.q\x024CYN;\x81b%\xa7[\xc5\xa0v\x14(\xd6\x92J\x9d\xb2\xafP\xff*\xba3\x8e\x14\x15g\xa7\xfc\x8f\xe6\xe6@^\x11P#\x8b\x0c\xc3\x00\x8b\xa1\x80E9\x0f\xec\xc6\x03\x96i\xa1\x82\\K{Zf\xdd\xf9\x1dM\xb83t\x89\x0f\xcce>\xe8Q\xea\xd3\x0f\xa08\x04\xce\xa6\xdc\x07C\x95\xfc\xa0g\xd9O\xcb\x90 \xd7\xba\xf4\x07\x9b\x97\xff\xc0\xb9\x04\xa8eU\x1d\x14g_\x06\x84\xa1K\x81\xe0X\x0e\x04\xd7\x92\xa0~f\x97\xe5B\xdb\xb2 \x0c]\x1a\x04\xbb\xf2 \x0cY\"\x84\x8d\xcb\x84\xd0\xafT\x08C\x95\x0b\xa1W\xc9P\xbf\x1c\n\x17\xc4\xb4n\xb6R:\x84-\x96\x0fa;%Dp,#B\xbfR\xa2I\x05\xdb\x95\x13a\xd8\x92\"8\x94\x15\xc1\xbd\xb4\x08=\xca\x8b\x16*\xf3\xaeE\x89\x11\x86(3\x82\xa9\xd4\x08\xf6\xee\x99E\xc9\x11\x1c\xbd8\xe7\xd2\xa3\x96\x1b/KZ\x94\x1f\xc1\xa1\x97\x03\x96!\xc1\xa9\x14 C\x97#\xa1gIR?\xaf\xa8\xb9, \xfdK\x93J~\xacESy\x12\x06+Q\x82}\xa5\x0dlJ\x95\xe0V\xae\x04S}\xa1g\xd9\x12,\xf8jR\x98\x03\x950\xa1\x97p\xedK\x99`1\xca\x1e%M\xe8[\xd6\x04\xbdT\x87+o\x82}\x89\x13,\xcb\x9c`]\xea\x04;\xa9\xbb\x97<\xc1\xa9\xec \xda\xd2'\x0cU\xfe\x04\xd7\x12(lX\x06\x05\x0b\xf1:\x94Ca\x1b%Q\xb0\xe9\xa3f%\x0cW\x1e\x05\x9b\x12)lP&U2d\x0f\xeaJ\xa50t\xb9\x14\x8c%S\xe8[6Ur\x131\xaa>\\\xb7(\x9f\x82\xb6\xca\x03\xda2*\xf4*\xa5*YiK\xac\xd0\xb7\xcc\xaa\xe4&\xfc@M\xd6l\xb8r+X\x95\\\xa1G\xd9\x15\xdcJ\xaf\xd0\xa7\xfc\n\xce%X0X[CY\x0c\x1cJc\xb6\xe5X\xe8S\x92\x05\xd7\xb2,\xe8\x07\xde\xa7<\xabdV+~\xda.\x19\xbb2\xadvA$3}\xa9\x16\x86-\xd7\x82\xa9d\x0b\xfa\xb2\xad\xf2\x9d\xbe\xe5\\\x18p\xee:\x94u\xc1\xa9\xb4\x0b\xb5\xf2n\x93Diq\x83\x12\x18NT\xbby\x81WJ\xcf\xde\xbf;{\xf7\xe1\xf8\xd7\xf1\x87\xf3\xe3\xf3\x8f\x1f\xc6\x1f\x7f\xfbpv\xf2\xea\xf4\xcd\xe9\xc9k\x87\xb7^\x9f\x9c\xbd\xfbpz>>;y\x7f\xfa\xce\xe5\xc5\xdf\xdf\x9d\x9f\xfe\xf6\x93\xfb{g\xc7\x1f>8\xf5\xf0\xfd\xc9_O^\x9d;\xbd\xf2\xe6\xf8\xf4W\xe5\x0b\xc5\x96\xcb\x1e\x02\xb4\xcd\xaa\x14\xb5\xe3\x0f|\x0e\xf0/\xc9c\x7f\xb18e.\x88\xff\x869BY\xadz\xaa\xed\xed\xea)\xa8\x9d\n\xdaa6\xf6\xa9\x17\x1e$orI\xc5\x8e\xedZu\xdc\xaa\xe5\xe6tZo\xbc\xf9{\xed\xa8\x86rS\xafh\x14\xc2<-n\x8c\x94\xa8\x03\xb5\x8c\x94g\x17H2L\xde\xf5^6~\xb6\xeb\xa4\xc0O\x0c\xd9G\xb1P\xd6;'\xfe\xae\xe9\x15\x9bP\xb5M\xd2\xcc\x0e\xcd5\x85\xa1%\xa2\x14\xbbu\xadX\x92\xeb\x9d+~\x19\xae{\x13\x8c\x13H\xf1\x1f|\x07\xb4S/\x85\x16X\xef\xa3\xf8\xfbp=\x9c\xa2(Vum\x1a%(\x1e\x8b\xb3!Dqh\xcbx\x85\xbd\x15\xa6{\x1bg\xc3\xd1\x842\x8f{c>{ \xd9\xbc3 \x19\xb3\x08b|\x893\xb2!3[\x05~\xce>\xd8{q\xfeD5Oh\x86\x92\x10\xa5\xa18\xbcC\x1e\xa92#\x978M\xd0\xfa-/\x15\xe9\xcf(\xa1\xf9d\x11e\xe3,Z\x0c\xb1a*D\x19\xbe\xcfxu>W\x1c\xe4\x82\x93\xf0f\x1a\xe4G\x7f\xe8\x8f:\xd2\xc3\x94\x04i\x8f;\xb2Z;v\xab\xc7\xe2\xd0#+\xe1\x80\xd5\xc1G\x96\xacl'\xad\xf3\xf1G\xc6\xce\xebK\x87\xc3\x1e\x8dd}8R\xdf\xe3\x91\xe4 e4C\xe9\x0d\xad6\xd9\xe2\x0d-6\x9biR8\xa6\x0d\xc7/ )\x96\xdfn\xc1\"\xd3TZ@\x83fSi\xb5\xea\xaa\xde\xf5\x017\xfaX\xbb\xd3\xb7y^R\xed\xaa_\xc8j'\xad\xac\x7fW\xed\xc2\xd7/\xf8\xe2\xca\xf2\xee\xafb\xfc&\xc6jq\x16e1^\xbbP\xbd\xa2\xf2\xcaty\x9cLy{\xbat\xc8\xd8\x7f\x88;\xd6\xf9!\x8e#\xf1\xbb\x82\x99\xc0\xf8f\xda\xeb\xd5;^\xe5\xdayC\x01h\x10\x9aR\x04J\x95U^\xd1\xac\xba\xb3\xbb\xb6\xcd[U+\xad\x8b\xa8~\xdb\xb5\xe2\xf1+\xc4on\xbe\x07QF\x0b\x84\x10\x85<\x11\x130\x14 \x88\xab\x886\xbf\xa9\xcd\x19A\x05\n\xd7\xea\x98\xa0.\x0e\xfb\x15v\xf9\xfd\xd9\xab\xf6\x00\xfc\xc1A\xfe\xe0 \xa3\x99\xb01\x01\xd0\x03],\xe6\xae?8\xc8\x02I<\x08\x8a\xb8\x0f\x82\xd8\x1f\x1c4 Z\xd8\x05)\xec\x84\x12\xf6\x07\x07m\x8a\x08\xee\x81\x06\x1e\x04 \xec\x8e\x02\xf6\x07\x07m\x82\xfauA\xfc\xf6@\xfb\xfa\x83\x83\xfc\xc1A\xfe\xe0 [\xb4\xee\xa0H\xdd>(]\x7fp\x90\xea1#\x1a\xd7\x01\x89ks,\x8e\x0b\x02\xd7\x1f\x1c\xe4\x0f\x0e\xb2A\xd3\xfa\x83\x838m\x82\x98\xf5\x07\x07uq2\xa2b\xfb\"b\x95\xb6\xc1\x1f\x1c\xb4N\xfe\xe0\xa0\x1eHV3\x8a\xd5\x15\xc1\xea\x80^uF\xae\xba\xa1V\xfd\xc1An\xc8T\x7fpPI\xfe\xe0 I\xe5\xc1A\xc5y+\x02\xbcT\xe3\xd5\x88&[u\xc8\xd6[\x8d\x02l\x85\x82\xe2\xe5\xd8\xa2*\xd5\xf6\x93n\x16v\xf8\xf5\xa0\x86\x9d\xd0\xbd\xaf\x04)\xb4\xec\xcb6\xa1\x83\x9dp\xc1\x9b\x87\x08\xea`\x817\x0b\x05\\\x87\xffE\xc9sQ\x91\xaf\xfd\xad:\x13k\x8abj8\x14\x0b:\xe1\xdf\xf6\x90o\xd3b1<\xac\x86v[\xc1\xb9-!\xdc\x16\xb0m'\xa8v\xa1\x10/I\xd6\xc8w5\xd4 \xff\xb1\xa1\x7f\xc4_P\x18\xa6\x98\xd2\xa2>_\xd7z\x15\xa7\x01\xbek\xd1I\xa9h\x88\xb2\xa3\xe5\x03-e)\xae>\x93\xdd\xc5\x14\xa6)Y\xdcH\x8f+X\xce\xe8\x02\xafT\xddn\x99\x19\x89oA\xd2UOq\x96\xa7 /^H\xe0\x86\x04$\x94`\x18^r\x98\xb5r\xf3|\x04\x85VT\x03\\F\xf0\x8e\x05V\xe2t; \xd3)\xc5\x19\x90\x14\x9a\xdd\x85Z\xc9\x94\xe2l`i)\x12\xd0\x1dB\x14\xfdS\xc9\xb1\x95\xfc\x95\x83\xe1\xa2\xe4\x9b \xa2\xa0\xf8\x1b\xd7I\xf2`?\x91}\x9f\xe3\xa4\x10|\x9e\x94\x05\x8f\x96\xf9>\xe5\xdcb6\xe7K\x11\x8a\x12AN\x99\xa8/\xb0\xa3<\x9b\xec\xb7,\xdc\x16\xe8\xa8C\xbcq\xb4\x88l\xa5\xcb\x9f-\xf0:*,\x92(\x86\xd5g\xb0\x889\xd9\xaf\x0dnK\x91\xfa\xae\xff\xe9t\n1\x9ef\xb2\xca\x12e\xc2\xed.<\x1f^\xc7\x13\x0bD4\xc2\xe4\x9e\xb6=\xdb\xd6\x10x\xb6&\xc5TB\xa9\xf8\xf2\xaa\xd6#[r#\xb9\x9a\xa2YB\xd2V\x9d\xb4X\x8d\xcd&\x84d6\xfd\xb0\x13Bb\\\xc2x\xddn^.\xac\xc5\xfe\x9f\xcb\xea\xc0F\xed\xe5\xcb\x85\x13T\x1c\xac\xb9\xac\xb0\xa4\x1cEU\x1dlU\xder\x0b\xf0\xb6\xed\x01\xdc\xb6\x02qs\x03\xb9\x0d\x0es\xb3\x05\xba\x0d\nu\xb3\x07\xbb9\xc3\xdd\xdc\x01oFUhw\x90\xe5\xc6\xa07\xe3!\x96V\x0e\x95\x05\xf4\xcd\xc5\xebr\x86\xbf\xe9\x8c\xa0\xf5\xd1\x95v\xfd\x1b\x10\x04\xe7\x02\x83\x1b\x18\x08\xd7\x0f\n\xa7\x9bAV\xc7U\xf6\x84\xc3)\xb8eVGU\x0e\x03\x89\xb3\xc6uY\xc0\xe2\x9c\x80q\xa6\x93\xde\xfa\x80\xe3L<\x95E\xf2\x81 r\xee\xc2\xb4\x87\xc9\x99\xc6\xd6\x03*\xd7\x13,\xa7\x03\x1b\x0c\x06\x98\xb3\x86\xcc\xd9\x81\xe6las\x16Rv\x87\xce\xb9\x80\xe7\xf4\x87O\x0e\x02\xa0s\x84\xd0m\x06\xa23 \xd4\x01H\xb7\x05(\x9d\xb1w\xca\x99>\x1c\xa0\xce\x02R\xd7\x1fT\xa7`\x97\x19\x0f\x99\x1c\x14Xg\x82\xd6\xf5\x04\xd7)x\x99\x0f\x97\xb4\x00\xd8\xe9\x0f\x96\xd4\x1d+94\xccnp\xa0\x9d\x1aj7$\xd8\xce\x06n\xe7\x0e\xb8s\x82\xdc\xf5\x00\xdd\xb9\xc2\xee\x0cGE\xea{g\x0b\x84\xb2\x05\xdf\xf5\x80\xdf9\x02\xf04\xc3\xed\x03\xc2S\xb0\xb28\x1c\xb2\x0f\x10O3\xe5\xcd\x07C\x0e\x08\xc63\x1e\n\xb9\x0d@\xdePs\xd1\x01\x94\xe7\x02\xcb\xeb>\xf2Qw\xe0\xa31~\xd7\x1d\xf6h\x8f\xfb\xd1\xbdcu\xd0\xa3\x0b\x16H\xf7\x96\xf6\x90GK|\x90\xee\x05\xcd\x01\x8fN\x98\xa1\xe6\x8b6\x99\x87\xa1\x8ev\xacN\xcfQM\xb3\x9b\xc5W\xea\xda\xbd)\xa4eE\x86\xe3\x12\xbf\x12\xfa\xb2\"\xe7\xfem\x13\x91Y\x91\xe1(\xc7\x9bGiVdw\x8c\xe3\xcd\"7+R\x1f\xe1h{\x80c\xb6y]\xddpt\xa3\xd1\x86X\x1c\xdbh\xc1C\x7fd\xa3\x05\x03\xbb\xe3\x1a\x8d\x8c\xec\xd4\xf1\x90\x075V*y\xfd7\xe3!\x8d\xc6\xf1\xd8\x1d\xe1fs<\xe3 MY\x1c\xcc\x98i\x0eA\x02\xd3\xa1\x8c\xc6\xf5`\xb3\",\x8ec4\n\x03\xac\x8eb\xb4`c7!\x9d\x0fa\xb48jq\xd8\x83\x16-\x8fY\xecs\xc8\xa2\xe5\x11\x8bFa\xdbL`\xab\xc3\x15\x07h\xc9\xfc\xd9\x87;T\xb1[\x039\x9c>gu\xf8\\\xeb\xb8\xb9\x16\xbf\xf7g\xaf\xfcas\xe0\x0f\x9b\x1bL\x1f\xf6B\xef\xf9\xc3\xe6l0{\x83 \xf6\xfa\xe0\xf5\xfcas\x03\xa2\xf4\\0zN\x08=\x7f\xd8\xdc\xa6\xb8\xbc\x1e\xa8\xbcA0y\xee\x88<\x7f\xd8\xdc&H<\x17\x1c\xde\xc0(<;\x0c\xde\x80\x08<[\xfc]Gj\xdd\x1f6\xd7$\x0b\xc4\x9d\xad\x97\xe4\x8c\xb6\xf3\x87\xcdYa\xec\xfa \xec\xfcas\xaa\xc7\x8c\xa8:\x07L\x9d\xcdQj.x:\x7f\xd8\x9c?l\xce\x065\xe7\x0f\x9b\xe3\xb4 N\xce\x1f6\xd7\xc5\xc9\x88\x8c\xeb\x8b\x8bS\xda\x06\x7f\xd8\xdc:\xf9\xc3\xe6z\xe0\xdf\xcc\xe87W\xec\x9b\x03\xf2\xcd\x19\xf7\xe6\x86z\xf3\x87\xcd\xb9\xe1\xdc\xfcas%m\x03\xdb6\xc4\x9cs\xc0\xb5\xd9\xa3\xda\x9c\x0e\x9b\x8b\xea\x9a\xbby\xabW\xf5H\xa3 &\xb2\xfd\x10\x85\xed\x83\xe5\xea\x1a)\xe2\xd7\x825\xd4`u\x08F\x96\xe6}\x0f7\x19\xe2l\x8c}Y,\xa7\x9aC2^\xcbG\xcaC2\x10?\xe7E\xfe\x91\x17\x00i\x94\xcc\xe2\xf5\xd17N\xc8(\xd8\xdc*D\xb0\xa3'd\x14#\xdb\x8d\x9a\x96\xf1h\x0d\xa7\x9c\x8e\xe6^\xb3\xf2l\xae\xde\xcd\xe8\x01 :\xe1 \xf2\xf7aZ\xa4\xd4\x9c\xa1\x18\xc6\xce\x7fG\xf7a\xda\x08Q\xaa\xa1J\x82\x05X\xa5X\x01\xa2\x1d\xf6\xe7@\x9c\xc8T\x1c\xa3\xa7\xb8\xa8\x90?\x99E\x97\n\xef^\x05\xc0\xf27Jr\xf27J\xfeP7J\x16N\x80\x0b\xa6\xa7\xe58\x14\xe41=\x92<\xa6\xc7cz*\xf2\x98\x1e\x8f\xe9\xa9\xc8cz2\x8f\xe9\xe9&\x8f\xe9)\xc8cz<\xa6\xc7cz,\xbd$\x8f\xe9)\xc9cz\xea\xe41=\x1e\xd3\xd3A\x1e\xd3\xd3\xf9\x8c\xc7\xf4xL\x8f\x82<\xa6\xc7cz<\xa6\xc7czj4\x04\xbe\xc2cz8yL\x8f\xc7\xf4\xec.\xa6\xc7_M\xd6\xf7\xde'\x7f5\xd9\x16\x85k\x9e\xa3\xfej\xb2!\xa4\xe8\xaf&\xfb\xb1\xae&+\xe1\x97\xfb\x7f\x96\xf8;\xdd}e\xb5\x8f_\xe0\x98\nP\xa6\x84`\x16\x97iF\x89\x98u\xec\x0b\x88\xdbK\x8avO_WfX>}\x1c\x86\xa9\x0e\xb3)\x7f\xdau\xc8\xa6\x01H\x15\xb6\x90_b5pL\x0c\x0e\x8b_\x07\x05O\x19\xc1\x9b\xc6\xd4\xbd\x11>d\x80m\x1a\x1a\xd0\xc1\x173\x03`\xd3\x9f\x94\xd5I\x8e\xf0L\x0b\x10\xe6\xb0\x10LK\x00\xa6\x1b\xfc\xd2\x1e\xf9\xd5\x03\xf8\xd5\xe2\xe6q_\x92<\xeek\x98\x15\xebq_\x1e\xf7\xd5M\x1e\xf7\xc5\xc9\xe3\xbe\xd6\xc9\xe3\xbe<\xeeKE\x1e\xf7\xe5q_\x9c<\xee\xcb\xe3\xbe<\xee\xcb\xe3\xbe\x04y\xdc\x97\xc7}y\xdc\x97\xc7}\xa9\xc8\xe3\xbe<\xee\xcb\xe3\xbe<\xee\xabFC`p<\xee\x8b\x93\xc7}y\xdc\xd7\xb7\x80\xfb*\x0b\xba\xaa\xfe\x97\x0f\xb4n\xc4\x13\xc5myX \xa60M\xc9\xa21\x0e:\xe0@\x06\x01?\xf0\x8b\xac4h\x87\xfa=X\x05\xcc\x81\x9b\n\x9eBo\xde\x85vI2\xdc a\xa81\xb9U\x8csGa\x0c|\\\x06\x10\x83\x18{7\x84\x81\xff6(\x80As{\x9b!\xfb\xa4\xbd\xb5\xcd\xf0\xae\xfa\xb66\xc3\x8b\xe6[\xda\x94\x0c,*\xd8\xb5\x99\xe4R\xc5>\xef(o\xf8\x1a\xb6$_\xc3\xf65\xec\x8a|\x0d\xdb\xd7\xb0+\xf25\xec\xcc\xd7\xb0\xbb\xc9\xd7\xb0\x0b\xf25l_\xc3\xf65lK/\xc9\xd7\xb0K\xf25\xec:\xf9\x1a\xb6\xafaw\x90\xafaw>\xe3k\xd8\xbe\x86\xad _\xc3\xf65l_\xc3\xf65\xec\x1a\x0dQO\xf45lN\xbe\x86\xedk\xd8\xbb[\xc3\x1e\xa4&|I2\xac\xbb\x8c\xe8w\xf6{Y\x0d\xe6O\x8bJ\xf0,\xba\xc4\xc9\xdax\x1b\xa5`\xfe\xee\xadb\xc4;Z\x04\xe6C\xda\x8d\xfa\x95q\xfb\xbaS\xfeFs\x03\x06\x1bs\xff{\x87D\x02\xbe\xf7\xeb\x008\xc95\x9b\xcc\xef\xc3\xef\xef\xceO\xc6\xef\xce\xceO\xdf\xfd6\xfe\xf8\xdb\x87\xb3\x93W\xa7oNO^[\xbe\xf1\xdf'\x1f,\x9f<~\xf9\xe1\xfc\xf8\xf47\xcb\xa7\x7f{g\xfd\xe0\xf8\xef\xa7\xe7?\x8f\x7f?9W\xbdR\xd4\x9e\x1d\x87j\x93\xddb\xc4\x16\xde;\xfe\x18\x975\xcf\xcb\x08\x85%\xf2p\xec\xfb\xcb\xcfH\xb9_+\x97\xb3\x92\xe1\x8c\\\xe24AIP\xd7p\xca\xa7\xd5\x9fP9\xe0\xda\x0e\xfe\x84\xdc'\xcbz\x175\xe1\xcf\xda\x97\x7f\xde\xfeC\x8d\xf1J*0W\xb6r\x9a<\xef\xfac\xe3Z#\x01\xc1\xe8\xd5\xc6o\xef\x9e\xb7\xfe\xbb!\x91\x9e<\xaby\xd8\xe6^\xfd\xd2l\x87\xa70/qfl\xd1f*\xb2iXc/8&l\xb2YO\xa7c\xc1$ \x8dhq\xfb] B:}}O\xccj\xa6\xcf\xee\x15Q%\xffO\x8d\xe6Z\x1fNc0\xc2\xc6\x157\xef0~\xc2\xfa\x89e\xb3\x96t\xf7\xf7Jq\xf2\xf7J\xfdP\xf7Jq\xd7\xce\x05\x95%\xfc\xc8\xf7g\xafZ\xdc<*\xcb\xa3\xb2\x8c\x0e\xa3\x8d\xb1\x01\x8f\xca\xf2\xa8,\xe5\x93\x1e\x95\xc5\xc9\xa3\xb2\xd6\xc9\xa3\xb2<*KE\x1e\x95\xe5QY\x9c<*\xcb\xa3\xb2<*\xcb\xa3\xb2\x04yT\x96GeyT\x96Ge\xa9\xc8\xa3\xb2<*\xcb\xa3\xb2<*\xabFC d<*\x8b\x93GeyT\xd6\xee\xa2\xb2\xfc\x8dR}\xaf\xeb\xf17JmQ\xb8\xe69\xeao\x94\x1aB\x8a\xfeF\xa9\x1f\xecF)\x0e\n\xda\xff\x93C\x90tWI\xedq S\x1dH\x1bv\\\x1aE*H\xed\xe9\xeb{\x02\xd8\xc4o\x8b\xda\x93\xfc\xfe?\xf6\xde\xef9n\x1c\xc9\xf7}\xef\xbf\"\xe3\xbe\xf4N\x84-\x9f{\x1e\xfb\xe1Ft\xcb\x9e9\x8a\x98\xb5\x1d\xfe1\x1b\xbb/\n\xaa\n\x92\xb8\xaa\"\xabI\x96e\x9d\xde\xfe\xdfo \x01\x90 \x0b?\x12 \xca\xadng>\xcc\xb4Ud\x12\x00A\x10\xc4\xf7\x93\x89\x13\xc0\xf6\x07S\xf3g\xcc\xd7F\xc8\xa8/\x13'v\n\\\x15\xa5\xa0\xa2\x84mt%>\xca\x01\x05\xd8\xda\x88\xf3\x10W\x1b-W\x88\xa9M%j\xa9\x8a\xd3\x94\xdf9\xaa\xfd{\xdd\x0c\xca\x95\xfe\xf5\xd9\x0ekv\x83\xd8\xb6\xc8\xa3\x88\xad2\xcf\xa1h\x1a\xc0|\x9d\xec\xdb\xedqW\x96\x1d\x96\xad}\xbd\x15M\xeb\xe1l\xa3\x1dF\xe7\x07\x1c\xb4\x10\xb6ik\xfc\xb4\x95~\x1d\xc7\x8f\xe3\xebuW\x0d\xe2Z)\xdb\xeb\xae\xbc\xaf\xbe\xd6\xfb\xe3\xde\xccW\x95K\xf9\xa5=\x8d\xe5\xf2Z\xc1\xc2\xec\xab\xafe\n\x91r\xcd\xcc}m\xa7k\xd6\x0d\xed\x9awm\xb5\xbb\xbei\x9b\xad\xc8\xe5\xc3\xf5\x15\xa5#y\x93\x0f\xa2\xdb\xc8\xb7\xa6\xf2 \xd5\xd0\xee]_\x077\xbbv\xf3\xd0_\x1fDw\xfd$\xaa<|\x9c\xc0\xa6\x8f\xc5\x1b\xdfs\xea\xc2\xb2\x98 /<;\x87\xf0\x12W\xc3\n\xe9\x0d\xae\xdf\xd9zLch\x95\xdf\xd7\xae\xdf\x9f\xdb\xfbZ\xbdl\xc8ol\xeb+^wt\x13\xf0SMT\xcb\xf8\xb6R\xd9\x8c\xd5\xab\xea\x85N\xa8_\x0f=\xf4\xc7\x9b\xfeP!i6\xad\xd3=\x88'\xe7\xdb\xfdO\xf4f\xa7\xbc\xd8g\xefu\x13\x074\xb6X\xd1\x17\xbai\xe6\xac\xd167\x95r\xa0\x0f{\xcf\xcc\x1a\x88y\x10\x06\x1e\x84\xdd\xa7?\xb7A8$Y\x98\x87\xd4\xd7\x03\xc7\xb1\xd2\x1e7\xd4\x90*'\xd7S\xa6\xf0i\xd4\xbd\x9d\xa3\xbb9q\xa4\x8b\x1a\x9a\xc2\x06\xc2\xfc\x1f\xc4\xd3\xac\x88\xf2\xdfFI\x19K\xa6\x95xS\xa7\xa2\xa5\x8c\xbd\xe9\xfa]\xd5\xdf\xd7\xcd\x1d\xf9]\xb7x\xc1\x9d~\x87\x19\x8f\xfav\xe8\xf3g/\xaf\x8f\xfa\x90?\xd1K\xcc\xfb\x1c\xe7\xbd\x83\xea\xbbFl\xaf\xf5\xfc\xff\xb1n\xb6\xedc\xe2\xdb\xc1\x985l9'\xff\xfb\xba\xb9\xd6\x97\x93\xdf\x19E\xae\xe5!g\xb7\xedc3\xd4{q\xfd\xdfU\xbd\xbb\xdej\xa13\xebZ\xd8\x89\xaeo1P\xa4m\xae\xb7\xed\xf1f'\xb0\x1eY\xee\xa2E?\xb9\x9e\xaa\xc99.\x16W\xa0\xc6\x05 \xad\xc3\x9f\x173:\xe0g\xddn\xa7\"\x01\xaa\xa1\xed\xcc\x8bm\xfe\xea\xb3\xdc\xe8\xdf\x9f\xed\x8bO\xd6\xeayt4\xcdrd\xf7\x94~\xa8\xba\xe1\xfa^\xd4w\xf7C\xb6\x93\xf8\xbb\x16\x02\x83\xebd\xaa\x18P\x0d\x9a\x84\x1a;\x0c\xee\xdb\x82\xc0\x99\n\xc7\xdc\xca?\x0bx\xf7A\xfe\xe0uwl\xe4\xeb\xd6\x13{U7[\xf1\xf5Zea\xf96\x15\xc7+\x8ey_\x9a\xa1\xd5\x93\x1d\xb5\xe6\x087\xf5\xe0\xe9;\xd2TM\xae\x8f\xcdP\xe7\x0f*Sqe\xf3\xbd\x94\xef\xf1p\x91\xe5\x11\xfdP\xed\x0f\xd6\xad\xd8TM\xd3bl\x8fi_\xc0R9=\x0d\xed\xfe\xa6\x1f\xda\xc6\xb7|l\n=\xcfCsrL\xb4\xe7<\xde\x0b\x8c\xd3\xc2\xb8\xd1\xc1D\x1day\xef\xab\x1en\x84h\xac\xb2\xc0\xbf=\xd4;_\xc7\x90\xd6\x1eQO\x1a\x9d\xf8\xf1\xb7^\x0cn\xb0|_\xf7\xfd4\x91\xc5\x84@+\xb6\x18L\xeah\x81vR\xa52\xab\xdc\xbaT\xf0oc\x04d/\xef\xae\xc9\x93\x86\xbd\x11\xc4\x17\x11\x083\x96=\xc4\xd5\x00\xf1\xb9\x1c\xc0\xbfL\xf3ZC\xbf\xbd=\x9a\xf9\xf9\xc7\xc5\xeb\xc4\x17|\xbco\x9bzh;]\xfc\xdas\xd7v\xf5\x17\xd1\x88\xbe\x079\xa3\xfdR\x0fO\x8e54\xf3\xc0\xde\xb6f\x9aGz\x9f\x19\x0bm\x81\xb6\xe2\xdb\x88\xb7,\xe3-\xcb\xa8[\x96\x01\xe9\x19\xb43(\xaaZ\xcdx\xe6\xba\x81\xbb\x0f\xef/\xa7o\x1c=/\xef\xe5x\xdb\xb9:\x91'\xd8\x7f\xd3v\xca\x07&F\xe8T\xe5G\xf4X\x8e\xd0\xf8\xe1f\xb7\x8c\xb39\xcc\x19\x1f\xdb\xfdT\xee`\x08M'\x0e\x02C\x13\x7f\xa9\xba\xf1&Ex\xfcy\xb3`\xcf\xf4\x11\xf9\xf3h\xa0\xe0\xe7\xa3=\xbf%}D\xba\x9c\xbc\x9aM\xb6\xbd\x94\xcf\xf8G\xfe\xb2\xee\xd9\xce\x98\xa7\x8a_;\xcah\xec\x8fx\xf0\xa6\x92\x85\x1f\x1e\xef\x05\x80p\x11\x98.\xa4{T@\xe2\x07\xda\x03\x0b\xd3{\xb0\x98\xc7\xfe\xbe\xeaBu \xb9\x89\xbf\xdf\x95M\xddw\xc9\x7f\xdd\xb4\x8d\xce\x9b9\xb4\x0f\xa2\xe9\xe1^\xec0\xdd\x95WP\x06\xa868]\xd1\x9f\xe0~}\xb7}lT\xea\xac\xb6\x11\xd3=\xd1\xe9J1ao\xbb\xa9Q`P\x05\x08$\xa5\xfd\xd2\xaa\xe0\xc4\xf6Q\xad7\xb4M \x17\xe8x\xb3N\xd5Ii7\xd5\xaej|\xa4~\xc1>\xe8\x0d\xeeSF\xb8\xbd\x00\xd5^\xb6\xf4J7\xd4^r\xd9\xd6\x8d5\xf7\xc3\x0e\xa1\xb3s\xaa\xea\x98\xe5\x1cy\x03\xabF\x17.\x94\x08\xf6\xed\xbbOo~\xc2\x94Z\xeaX\x9d\x9b\xaa\xc6\xf4\xa1W\x8d\xf9j\x1cS\xb6\xf6\xc1N\xa0S\xfa\xe8 \x9a\xff\xc9\xaa\xef\x9aj8v\xa2\x1f_b\xb2\x13\xde\xb5w-\xe6\xcbq\xf5\nJ\x13M\x0f\x91=\xf7\x94W\xf8R\xedp)\xb7\xb5\x1f4\xf1u#\x0ej\xad\xd8\xe9\xae\x1e\xacd\xaa\xee\xda\xe8\x9e\xba\xcc_\xa4\x86\x0e\xd3v=\xec\xdbN@\x7f\xac\x07\xb3\xf4\xe6t\xb6\xd9\xe1z\xf3\xf8N8m\x86x#\xb8\xde-S\x8f\xd9\xedpH\xb1\xde\xbc?N\x9a\xbf\xdf\xdb\xe9s\x1ab\x00\x16Q>\xe3\x12\xe3<\x84\xd7Zy\x9c}\x1d\x14\x8d\xf9a\xa6\x80\x99\x02*S\x10R\xec\xf4\x87\xa9k\xb2\x19\x0d\xc2r9z\xe5\x9c\x1cs\x8e\x1em\xfcq[f\xba\xc0\x9b\xb9\xf0f.n\xe3\xcd\\\xd0x3\x97S\xe3\xcd\\x3\x17\x9f\xf1f.\xbc\x99\x0b\x1ao\xe6\xe2\xef\xd3\xbc\x99\x8b2\xde\xcc\x857s\xe1\xcd\\\xd0x3\x174\xde\xcc\x05\x8d7sQ\xc6\x9b\xb9\xf0f.\xbc\x99\x0bo\xe6\xb24\xea\xc6\x1a\xbc\x99\x0b\x1ao\xe6\xf2=l\xe62'f,W\xb3\x8f\xc9\xf9Q3\xc9u\xfc\xe9\x14;s\xa4H[\xc1\x9aqt\\n\xe8\x11G\xc7\x9d\xb1q\xe3q]\x1c\x1dW\xa2\x159:\xee\xaf\x14\x1d\xe7\xc6\x82\xdb\xee\x94\n~\xd5 \x9b+Rn]\x8c\xf0\x07\xfb\xb8\x91\x08\x9e\x9d=\x05\xca\x85\xd8\xdf\x99\xa3\x1fL\xfd\x9f)\xf4k\xd7\xef\xb9a\xbfv\xd9\xce\x0e]\x9e\x0f\xfc\xed\xbb\xcd\x19\xbcn\xfb\xa1\x98W\xd1\x0c]\xb0y\xc2\xf7\x7f2oO\x98\x8cp\xc3\x94Qn\x9b\xb2M'T\xff\x0dgT\x9b\x8c\xd4(\xc6\xe2\x11[\x93mZ\xf9Y\x80e\xf1\xe7\xeb\xb4-\xab$\xb1\xa1C%B\xd7\x0fDQ\xd0Z\xd2\xae|\xa0\xf9\xe6o\x1e\xd5>N\x7f\xba\xcdz3j\xbb\x0b?\xf2\xb0\xab[\x8d\xdc^\xde\x96\xe2 \x0f4\x0e\xf2\xf8\x8b\x06y\xb83\x18\xccV\x15\xf2\xa2;\xe6+\x1c\xbc[)Gy8\x7f\xe7(\x0f\xcb8\xca\x83\xa3<&\xe3(\x8f\x81\xa3<\xdc\xc6Q\x1e\xc68\xca\x83\xa3<8\xca\x838K\xe2(\x8f\xd18\xca\xc36\x8e\xf2\xe0(\x0f\x87q\x94\x87\xf3\x18\x8e\xf2\xe0(\x0f\x8fq\x94\x07Gyp\x94\x07GyXV\x82\xb8\xe7(\x0f4\x8e\xf2\xe0(\x8f\xe7\x19\xe5\xd1w\x9b\xeby\xf6U_\xb9O\x8f\x9c\x95}b\xa5\xac\xb2\x8f\x88\x86@\xc8j-\xff\xec\xa9\xc3\xb6\x1f\x88u8=2\xa9\x0e\xf3\xe4\x96\x05k\xc0\xb16\x94\xd6\xe2X\x1begn\xdcx\x94\x08\xc7\xda\x94hE\x8e\xb5\xf9Ncm\x8e\xcd\x8d\xdan\xf4\x9a\x16s\xe3\xca\xcb\xff\xd9\xf8\xf0%\xe8\x1f/r\x92\xaa\x7ft\x86A:S\xdb\x9d\xcc>\x9cq;\xc1\x12\xe8\x13\x9em\x1c\xcf\xd4\xf2\xcf,\x88\x87\x1cY\x13\xd5]\xc8\xa9\xf4\xa3\x9e\xfeD\x80z\x12\x1d\x1e\xad\xb81*\x15\x9eD\x84'_\x9dB\x82'Q\xe0\xc4\x12\x94\xf3E\xd1\xd2\x949\xc6\x94\x05\xf5\xddX\x03[\x94\xf9\xa6\xf3\xde\x94\":\n\x07\xfd\xd0vz\xc0\xc5(\x159\xbd\xdb ;\x12\xc5\xe9j\xaaC 4E\xbeZG\x8f\xd3\xa7\x89\xfctopC\xaa\x97m\xb7\x15\x9d\xd8b\x94\x0c\xf3\xbfn\x0f\xcc\xff~O\xfc\xef\xf2\x19\xa5g{_xspf\n\x0f\x0e^\x81\xb3\xc0\x1bc>\x98\xf9\xe0\xc9\x98\x0ff>x2\xe6\x83\x07\xe6\x83\xdd\xc6|\xb01\xe6\x83\x99\x0ff>\x988Kb>x4\xe6\x83mc>\x98\xf9`\x871\x1f\xec<\x86\xf9`\xe6\x83=\xc6|0\xf3\xc1\xcc\x073\x1flY V\x93\xf9`4\xe6\x83\x99\x0f~\x9e|0\x93\xa9i\xd8\x1f\x93\xa9gl\xdc8S\xc9dj\x89Vd2\xf5;%SG\xca(\x84\xa3\xfe\x8f\x03G\xfd\xd7x\xe2\x0cB\x9d\xfcA\xdd\xdc\xb6xOTj\xf8\xf1\xca\xa3\xaf\x10t\xfaQ\xd5\xc1q9}\xf4\xb3%N\xa7\x16x\x1e\xe8\x82j\xd6\x02t\xe8F6X\xd3\x1f\xfb\xeb\xc3\xf1\xc6\x0bpE\xcb\x0b\x842\x03\x01\xb9\x00J\x99\x95Q\x96\xee\x8d\xa5\xe2\x17Ag\xee5\xf8\xc0\x92Ti\x0c\x03\xe2(\x06d\xe0\x18\xe1\nT\xc3=\x19\xc9\x80RX\x06d\xa2\x19A\x87\x98\xd9\x95\x8ag\xc0zD\x03\x921\x8d\xa0+-\x1f'\xa1\x1aP\x1a\xd7\x80Dd\x03R\xb1\x8dp\xcf\x1e\x91\x0e*\xba\x01\xa5\xf1\x0d\xa0!\x1cP\x12\xe3\x80\xd5(\x07\xe4\xe1\x1cP\n\xe9\x80,\xac#\xfc8T\xf2\xb3)\x8av\xc0y\xf0\x0e8#\xe2\x01\xe7\xc1< \x11\xf5\x80<\xdc#6\x04\xd3\x90\x0f(\x8b}@\x02\xfa\x01\xe9\xf8\x07d \x84!\xf3o\x04\x0c\x04J\xa0 \x10\xc3A\x80>=#`!\x908\x8bK\xc6C\x82\xde\x10\x1d! \"\x90P\xca\x82\xa8\x08$\xe1\"P\x1a\x19\x81Ll$\xdc\xaf\xfa8:\x02\xf9\xf8\x88\xd7\x9f\xbcb\x0c!\x81b\x18 \xd0i\x08\xa0\xe0$\x90\x86\x94@L\x03\xceDK\x80\xe07 3\x15\xc2L \xabq\xe9\xb8 \x10j\x99\x81\x9d@.z\x02\xe1V-\x87\xa0\x00\x1dC\x01\"\x8a\x02d\x1c\x05h\xad\x9e\x8e\xa5@\x12\x9a\x02A<\x05J!*\x90\x8a\xa9\xc0JT\x05\x08\xcd\x9b\x80\xac\xc09\xb0\x15\xa0\x941\xf0$\x94CX\x80\x82\xb1\xc0\n\x94\xc5\xebP\x1e\x18\xc2Y\xa04\xd2\x02Q\xac\x05r\xd1\x16\xaf7\xf5\x8d\x1a\xfe\\' .\x10T\xe2!\x88\xba@\x16\xee\xe2u\x15\xc4` \x17\x85\xf1zS\xf3\xc0\xc0\xaaY9$\x06HX\x0cd\xa01\x90\x86\xc7@\x0e\"\x03\xc9\x98\x0cD\xde\xb6\x11t\x01\x12\xf0\x05*2\x039\xd8\x0c\xa4\xa23\x10\xaex\x0eB\xe3uf\x01*\xd4G\x86\x86\xd2\x04\x1f\x88\xe6.\x8c\xd3@Y\xa4\x06bX\x0d\x84\xd1\x1a\xef9\xb9\xc8\x0d\x14\xec\xbb \xe8\x0d$\xe17`!8s\xfb\xef\xaa\xde\x89mX\x9d\x9a+\xaas\xeb\x87j8\xe6\xcbd\x00\xa29\xee\xfd3\xcd\x97\xf0\xcb\xbb\xb7\xaf\xaf?~\xfa\xf9\xd3\xe7\x8f\xd7\x9f\xdf~|\xff\xe6\xf2\xea\xefWo^\x93\xcf\x90\xffJ<\xfc\xea\xed?\x88\xc7\x07\x9d\x9b\xc0\xf6\xc4*\x84\xc8!\xdb~i\x9b\xedGl}\x03i\xa8{\xa12mX\xbb\xab\xfa{\x85\xb7u\x7f\x02\xeb\x1fvv\x91\xbaQKDS\xbe\x0du\xd1\xc0\xfc\xd2}C\xe4\x15\xd4\x7fY[VZ\x1b\xca\xe2\x86\x82j\x1d\xf2\xa6m\xb6b\x9bx\x85\xab\xb7\xff0\x97\xb8z\xfb\x8f\xe05\xc6l#\xe4K\x98*\x10*\x10*\xfc\xd0>\x88&\xff\xd9\x99\xe8\x04\xb5o\xe2\nGS\x8f\x0b\xfaX-S\xef\xdb\xa6~\x10\x8e\xf4\n\x93EK+M\xa9\xcaCp\x9f]\x92\xa3Gq\xd3\xd7\xc3\xfau\xd9^l\x8e]=<]\xe3$p\x13L\xb1Dr\xe8M\xe80\x19\xc1\xcfl,y=\xfd\xc3\xd9e\xad\x83\xdd\xfduJ\x0f\x16\xce#E(X\xaf\xdbz0\xdaoee\nu\xfa{\xbco{1\x11\xb7\xee\x8b\xda\xb7\xb1\xeeg\x94\x85\xd5#\xb0jS\x15\x9c\x9e\xb6\xf5\xb8\x0c\xab\xbe\xa5\x11\x15p_uv\xff.\xe0_-6\xeb\xa1}\x14\x9d\xa1\xe4\xcd\xed\x12[\\Z\xf5v[5\xa1\xd5Up_m\x7f\xdc\x0d\xf5aW\xab\xc2\xcd\xaf}r\xc2\xec\xa9\xb3\x80X{\xf0\x9d\xdd\x99\xfeG\x05\xcb\xe2g\xce\xd8)\x96\x8e9\xbf\x1f\x1a\xe7\xf7\xfb\x8b\xe6\xf7;\xb9\xa3\x08\xb6;\x08\xf0\xbc]\xbe]\xe4:'\xef\xd3\xc6\xc9\xfb\x12\xbe:9y_\x1a-\xce\xc9\xfb\xd6\x93\xe1iT8'\xefs;\xa4\x11\xe0E\xe9o\x02\xf9]\x8c\xfa^G|g\xd0\xdeEH\xeft\xca\x9b\x93\xf7\xad\xa1\xbaS\x88\xee\x0c\x9a\x9b\x93\xf7q\xf2>N\xdeG\xa5\xb1\x8b\x92\xd89\x146'\xef\xf3\x1d\x16\xa5\xad\x13HkJj\xba\x14\xc2\x9a\x93\xf7q\xf2>\n-\xcd\xc9\xfb\xd0\xd6\x10\xd1\x9c\xbc\xcf\xe5)J=\xe7\x12\xcf\xdew\x03'\xef;5N\xde\x97A*\xc7)\xe5TB9\x81NN&\x93\xd3\xa8dN\xde\x97F\x1es\xf2\xbe\xd18y\x9f6N\xde\xc7\xc9\xfb8y\xdf\xf4\xb7\xec\xc6\x8d\xa7\x9d\xe3\xe4}%Z\x91\x93\xf7}\xf7\xc9\xfb^\xfd6\xdf\x05\xf8\xf7\xdcl~c2?{\xfbQw\x1e\xbf\xe9\x90\xd1\xdf\xa1\xaa\xc7\xf7\x9a{\x0f\xe9\x7f-\xcey\xfei\xfc\"\xb0\xd5\x97\x13|rX\xe2]\xd8\x82E\x19+ZN\xbf\xc8\xa2>-\x9f_\xb0\x94\x10-)\x10\xf8\x8bhI\x95Q\xd6\xf0\x95eQ\x18\x01\x7fI\x19\xfc\x8a\x92\x18Q\x16\xa34\x8dA\xe71\n\x11\x19yLF\xc0]b\xce\xbe\x95\\Fi2#\x91\xcd(Lg\xa4\xf1\x19\x89\x84F\xa8\x0fgd\xe9+Ji\x908\x8d\x82\xa4\xc6ZV#\x8b\xd6(\xc4k\xe4\x10\x1b\x01g\xe4\xac|g\xa06\xce\xc7m\x9c\x85\xdcHc7\x8a\xd3\x1bT~\xa3(\xc1Ag8\x92)\x8et\x8e#:\x14\xd2\xf2\xef\xadf9\xa2\xb9\xf7H\x13*\x02\xd1\x912\xebJ\xa6:B/Ar\xc6=Z\xf9\n\xb2\x1d)tGa\xbe#\x8f\xf0\x08\xf5 R\x96\xbdL\xca\xc3\xe3m e\xd8+Cz\x90q\x05\x02\xed\x91\xc4{\xc4\x12T\xe50\x1f1\x9f^\xed\xa7\x10\xf9\x91\xde\x98t\xfa#V\xb7\x0c\x02$\x93\x01 ih\xc58\x102 BcA\xa84\x08\xa1\x95\xd3\x89\x90\x14&$\x9c3\xaf\x08\x17\x92H\x86\xaccCb\x0d\x9a\xc0\x87\x9c\x81\x10\x89\x96\xce\xdb\xd3\xcbq\"\x04R$\x9f\x15\xf1\xb8\x1b\xa2\xb9\xf1\x8a\xf2\"1b$\x93\x19\xf1\xf8\x8a\xe7\xc4#p#\xe1|x\xa1lx\xa5\xe9\x91\xe2\xfc\x88\x9f )\xc9\x90P(\x92t\x8e$\x89$\xc9`IRi\x92H\x86\xbbp\xe9\xa8\xfa>\x95)\xc9\xa0J\x12\xb9\x92@us\xd8\x12\x8f+BN\xbb\x1c\xbe$\xd0\xe5\xe3\xf9\xec\n2&\xd1\\v\xe7\xe0LJ\xf5\xc5\x04\xd6$\x856qg\xaa\x0b\xe5\xa9\x1b\x1c\xd2\xa1m\xa1\x1cu\xd1o\xffP~\xba\xd4\xectI\xb9\xe9\xd22\xd3\x91\xf3\xd2ee\xa5\xa3\xe5\xa4[\x9d\x91\xee\x1b\xe4\xa3;w6\xba\xb3\xe7\xa2;C&\xbaP\x1e\xba\xc8\xf3A\xcbA\x17u\x12\xc9?7\xac\x97U\xa3\x99\xe7\xa2\x03\x01%\xeb\x1c\xc1I4\xe3\x1c\xc1\x07=\xdb\x1c\xc1Y4\xd3\\\xd4G\xc9,s\xb4\x1cs\xd1\"\xc5\xf2\xcbQ\xb2\xcb\x91/\x12J\x9b\x15\xcb+W\xa0k\xd33\xcaE/\x06\xa4\x0b\x02)\x97\\\xb4\xf9\x94\xd1\xf2\xc8%8#\xe7\x90#\xf9\xa4\xad\x98C\xf9\xecq\x19\xb9\xe3\x08\x99\xe3Hy\xe3H\x0dC\xe9\xfc\xd4\xe6+\x98/.\xd8\x02\xe4\\q\xde\x16\xc8\xca\xc13\xa6\xe0Y\x93\x7f\x87\xd3\xef\x18\xe3\xf4;\xb1\x17:\xe5\x99\xcb\x04\xbf8\xfd\x0e\x05\xf7*\x02{\xe5\xa0^\x9c~\xa7 \xe0\x95\x82w%\xc1]\x9c~g-\xd2\x95\x01t\x15\xc1\xb9\xd2a.N\xbf\xb3\x06\xe2JA\xb8\n\x03\\4|\xab \xbcEE\xb7\x864p+\x15\xdb\xe2\xf4;3K\x06\xb58\xfd\x0e \xcf\xca\x81\xb38\xfd\x8e\xef\xb0(\x90\x95\x80cQ\x92\xcb\xa4\xa0X\x9c~\x87\xd3\xefP\x80+N\xbf\x83\xb6\x06\xb1\xe2\xf4;.OQ\xa8*\x17\xa9\xf2\xbe\x1b8\xfd\xce\xa9q\xfa\x9d\x0ct*\x0eN\xa5bS \xd0T22\x95\x06Lq\xfa\x9d4D\x8a\xd3\xef\x8cv\x0e,\xaaD\x9fK@\xa2\xe8@\xd4_5\xfd\xce< \x83\xaf\xcc\xf3\xa3fe\x9e\xa0\x823\x9799\x0f\xc5}\xdd\x0fmWo\xaa\xddu\xdd\xdc\xb6\xaf~S0C(\xd1\xc4\xff\x19O\xb9jn\xdb1\xb3\x84\xac\xe7\xe4m\x99^B\xb955\x9d%\x91\x98\xfb\xfb\xc1T\xfa\x99&\x90\x90U<\x9d\xca\xcf\x8a\"\x0f\x99\xdd\xfee\xb3\xe8\xec+\xae\x96\x99\xcc[6\x88\x8as\xf7\xa2\xda\xfa\x08\xa2\xa0[\x88\xba\x96\xa6\xd7H\x03\xb2\xbc\xda\xc8\xe6\xa6\xea\xeb\x0d\xdc\xec\xda\xcd\x03\xd6\xdb\x7f|\xacL@*\x974\xbcZ\x01\x9a\x02h[\xf6(\xab\x0e\x87o{I\xca\xc2\x9b\xb2K\x93\x0d\x046\xd5a8v\xbaG\x8eIB\xa0;\xee\x84\xc2\x15\x0e]+\x9f\x9fp\x11\xab\xf1~*EL\xfecs_\xd5\xcd\x8b\xc0W\xa5\xce$\x84\xc4\xb2|\x7f\x8f'\xc1\xb6\x1a*\xd9.\xc7\x8d*\x9b\xfeTQ\xa5\n84\x0b\x98\x93\xc4\xf1\xa3g\x8b/e\xfd\x80y\x8f\xba\xaa\xe9\xd5\xfb|_m\xee\xeb\xc6\x13|\n\x80\xa5\xbb\xae\xbd\xdbM\x93nix\xefQ\x92\x8b8\x1f\x06\xf8\xbc}#HF}\xc6]\xe3\x0d\x0c\xb7\x8e\x1a\x01\x0e\x9d\xf8\xf2\x8d\x07\x80\xfb\xaa\xbf/\xfc0\x06\x03\xa9q\xb63\\\xf7b\xb8\x0e\x0d\xbb\xc6H5\x05rm\xa5\x05v%\x9b\x1d\x16DU\x96F\xe9v\xc6\xe2M\x0e)\xcd\x0e\xf4\xa6\x1f;\xda\xfb\xaa\x1bz1\xfc\x1f\xbc\x03\xa1\xae\x8b\xb4\xd6p\x1d.2\xa9\xa8\xa4\"\xea\xe2\xc9\xcb \\\xa3W\x0f\x83\x1c\xf6<\xe7\xc8\x9f\xbeQ\xf1\xa6\x08\xb4\xb7\x19\xe5=F\xcb{\xa7\x8c\xd4\xd6\xb4\x1cx\xca\x08u\x00b=@\xbb\x0bg\xc5\x9b\x8e\x8b\xd6C\x19}\xb6\xaf,\x15\x97\x8c:\x1c\x9c\xbayh\xbe\xad\x8c\x8cOF=Mxe\x0c\xa34\x96\x8aSF\x1d\x1e\xaa\xe1\x9e\x8cU\x1as)&\xc9x\xa51:f\x19uec\x98 \xb8\xa5\xb1\x95\xd8\xa5\xb14\xfc2\xeaN\xa3aI\x18\xa6\xb1T\x1c3\xeaP~Q\xa7`\x99\xc6\x92\xf0\xcc\xa8\xb7\x9c\x0c|\xcaH\xb8f\xd4\xcb\x1c\xe7\xa4`\x9b\xc6\x8a\xe1\x9b\x93\xc35\x18\xa7\xb1\x0c\x9c\xd3X\x11\xac\xd3\x18\x1d\xef\x8c\xba\x9a\xe1\x9fq\xcc\xd3\xd8\x19pOc\xe7\xc2>\x8d\x9d\x01\xff4\x96\x82\x81\x1a#\xe3\xa0QO6.\n4,\xd4X\x12\x1e\x1a\xf5\x86\xe3\x04\x15\x1356\xa4\xe1\xa2\xc6R\xb1\xd1\xa8\xc3\x94\x9c\x7f\xcaVc\xa4\xc6\"\xf9\xff\x94%L\x1d\xa3\x1f\x1d\x93\xa5\xce2\x93p\xd3\xa8\xb7\x11G%`\xa7\xc6RJ\x9c\x88\xa1\x06}\xcdg\xb3\x04\x1c\xd5X\x12\x96\x1a\xf4\x14\xcd(\xa8,\x07]\x8d\xf7ORvAe9(k\xcc\xe1@\xca4\xa8\xac\x0c\xdaj\x8cHi\x1a\x8b\xa2\xae\xc6\x12\x90Wc\x91\x14`h9\x08\xac1\x8a\xff`\x16\xa1bh\xac\xb1\xbc\xc6\xa7\xa3\xb2\xc6(5\xcf@g\x8de!\xb4\xc6\"-^\x0e\xa95FDk\x8dQ\x10[\xebX\x02jk\x8cxW\xd2\xd1[ct\x04\xd7X(\xe7\xa1\xb2\"H\xae\xb1$4\xd7\xd8\x1aD\xd7\x18\xa5\xe9\x13\x90]c\xc5\xd1]c\xa4\xf2F\x9e\xa4t\xa47\xe8\xee\xe6)\x8e\xf6\x1a\xcbA|\x83\x0e\x8d\xa6\x1e\xce\x9d\xa8,\x07\xf9\x0d:\x1c\xcc\x9a[ \x8f\xa2\xb2T\x048\xe8l\xc2\x83 \xcb\x1d\x04$\xd8X(\xbd\x9b\xb2P\x96Ee\xe9\xa8p\xd0]$\x0f\xa39\x88\x8e\x13G:\x88\x85\x1a\x07r2*K\xc5\x8b\x83\xce>\x7f\xf8\xe7\x05\x0136\x96\x8a\x1b\x1bK\xc0\x8e\x8d%\xe3\xc7\x8b\x13\x89\x18\xb2\xb1\xd8, \x9a7O\x19\x15\x15\xa5\xe2\xc9\xa3\xdfTLy<1\x05W6\x16i\x8c\x1c|9\xe8\x90\x90\xe7QY\x0e\xce\x1c}\x98\xe29\x1f\x95\xa5\xe3\xcd\xd1Q<\x92\xffQY\x00w\x0e\x9e\x97\x8bB\x1b+\xd9\xdf\x13\xd0\xe8\xd15\x19\x916\xe6\x9f \x85\xf2G*S\xeb?\xfe,\x92\xcaB\xb9$\x95\x11\xd7\x91By%\x95\xa5f\x97t\x9f\x15\xcc1\xe9?\xc5\x9fi\xd2uN\xf4\"YY'\xcd\xa9\x94\xdc\x93\xcaVg\xa0T\xf6\x0d\xf2P\xba/T:\x1b\xa5\xff*EsR\xba.S$3\xa5\xb2P~J}\x04\xe5\x99\xa3\xe5\xaaTFt\x18\xc9[\xa9l(\x8bBD3Y*#\xd5\x00HY-\x95\x91\x1dF3\\*#\xfb\xa3g\xbbTFv\x1c\xcd|\xa9\x8c\xe8\xafd\x16Le\xb4\\\x98\xca\x88\x85\xa4\x01\xa8\x94\xec\x98\xca\x12/\x1b\xe3\xa0\xe3\xf92\x95\x15~\xa4\xe8\x194\x95\x11/\x0f E\x00RNMe\xc4FWF\xcb\xaf\xa9,\xd919\xd7\xa6\xb2\x04\xff)*\x14$g\xdf\x8c\xba\xc3n\x90\x93\x83S\x19!\x13\xa72R>Ne \x8dG\x7f\xdc\xd2\x1a\xba`\x9eNe\x84V\"\xe7\xecTFh%j\x8d\xffu\xb2Y\xb1u[_\xc0\xd0\xde \xd4\xc6q\xcdf0\xbbv{\xddU{k\x87o\x7f\x17\x1a\xaf\xfa\xa3\x9a\x18\x81\x9a\xac\x98\xf5\xc6\xba\x03\xf1U=v\xd8IC\xdf\x98\x9b\xb6n\xfa\x0b\xf8\xb8\xab\xfa{\xf9\x8dk\x90\x94\x10\x15W\xc1V\xc8~>\xb1Z\xb3\xcb\xbdP<\x0c\xa2\x18m\xd7\x85\xc6\xbfM\xb5\xdb\x1cw\xe3\xca\xd8\xedq8v\xa1\x9cQ\xcdt\x83{l\xd3\xf68@=`Hcs\x07\xed\x17\x04w\xcd\xfe\xde\x17\xf0\x1f\xf7\x81\xce\x85UG~G\x9f\x82\x04\x8f\xff\xea\x88\x89\xd87w\xbe%u/\x9f\xfdm=\x18\x1e\xc1\xbf\x981U\x02\x1e\xef\xdb^L\x9b\xb8\xfb/n\xdf\xe6zN\x0cY\xbdFUi\xac\x8e\xbf\x04\xf5\xb8\xa4\xae\xd6&\x10s\xf1_}v\x7f/\xe0_-6\xf7\xa1}\x14\x1d\xe6*\xbc\x11\xe3\xad\x14[\\\"\x0fvs5\x99\xd7\xd5\xf1_u\x7f\xdc\x0d\xf5aW\xab\x82\xce\xcb0;)\xfc\xb4b$\xee<\xd4u\xcc\xb6[\xf7 w\x17\xe1\xb7\x1f\xde_.\xcb\xce\xb9w\x81s\xef\x96z\xb7\xa4\xc2\xe4\xaa\x03s\xee]\x02$^\x04\x0e\xa7C\xe1\x9c{\xd7X*\xec\x0d\x9c{\xd72\x02\xc4]\x0c\xde^\x07mg\xc0\xdaE m:\x9c\xcd\xb9wK\xc0\xd7)\xd05\x19\xb6\xe6\xdc\xbb\x9c{\x97\xc3\x95\xc5\xf6\xfd\xc4\x00\xd8\x19l\xb5\x1b\xab\x19M\xddf9k?\xaa\xc3\xd0\x89\xf9\xd2|\xb6)k\xed\xa6\xb0mV\x18u\x90~\x1aq5\x1dgVc#\xe1[\xb0\xeea\xdfn\x8f;\xc7\x8a\x84\xb7\\\x10\xd5\xb3(\x10Wd9g_}\xb5R\xc1\x85\\\x84\x12 \xc6\x983y\x15\xd1\x0c]P\x97[w +\x1f\xf3\x99\xaf$\xdb\xfcz+\x9a\xd6\x03w{[\x9c\xa0s\xab\xe7\"\xaaokE[\x1d\x8dJ\xf6\xdc\x17\x0b\xd9,dGWq)\x0b\xa1\xc0B6\x0b\xd9\xde#Y\xc8Fc!\xfb\xd4X\xc8f!\xdbg,d\xb3\x90\x8d\xc6B6\x0b\xd9,d\xb3\x90\xad\x8c\x85l\x16\xb2Y\xc8f!\xdbg,d\xb3\x90\xcdB6\x0b\xd9\x96\x95\x10\x15Y\xc8Fc!\xfb\xaf\"d'\x0b\xbem\xbb\x0b\xc8\xbdm\xbb\x9b \xbd\xf2\xf0\x99v=\xd3w\xe5\xe1\xfa\xef\xcfW\xd6\x1d+l\xdb\\\xd4\x95\x95\xb4\x13\x0c\x9c\xd4z2o \xaa\xe34\xedp\xad\xa2i\xafC\x19p\"+\x19k<\xccj\xad$\xc8\xb6\xdd\x91\x05H\xd9*\x1f\xde_\xb2\xe0\x08,8FW\xdb(\x0bV\xc0\x82#\x0b\x8e\xde#YpDc\xc1\xf1\xd4Xpd\xc1\xd1g,8\xb2\xe0\x88\xc6\x82#\x0b\x8e,8\xb2\xe0\xa8\x8c\x05G\x16\x1cYpd\xc1\xd1g,8\xb2\xe0\xc8\x82#\x0b\x8e\x96\x95\x10\x7fXpDc\xc1\xf1{\x15\x1c\x97\xf1\x86.\xd9q\xcc\x91\x1co\x1e\x84w?\x8aHy\x81Pf HV@)\xb32\xca\xd2\x87\xb1T\xf9*\xe8\xcc\xbd\x86\x11\x98\xd2\x97\x96\xb1 .eA\x86\x9c\x15\xae@5\xdc\x93%-(%kA\xa6\xb4\x15t(\x1b\x97,o\xc1z\x89\x0b\x92e\xae\xa0+\xbd\xfc\x9e$uAi\xb9\x0b\x12%/H\x95\xbd\xc2={\x94\xc4\xa8\xd2\x17\x94\x96\xbf\x80&\x81AI\x19\x0cVKa\x90'\x87A)I\x0c\xb2d\xb1\xf0\xe3`\xe5\xed\x8fT\xe1\x0c\xf2\x18\x9cQ\"\x83\xf3\xc8d\x90(\x95A\x9e\\\x16\x1b\x82i\x92\x19\x94\x95\xcd A:\x83t\xf9\x0c2$4\xc2\x90\xf97\x82\x8c\x06%\xa44\x88\xc9i@\x9f\x9e\x11d5H\x9c\xc5%\xcbkAo(\xbd\x11$6H(eA\xa9\x0d\x92\xe46(-\xb9A\xa6\xec\x16\xeeW}\\z\x83|\xf9\xcd\xebO^1&\xc1A1\x19\x0e\xe8j\x12P\xe48H\x93\xe4 \xb6\x86\x9e)\xcd\x01\xc1o`\x99\xae\x90L\x07Y\x8dK\x97\xeb\x80P\xcb\x0c\xd9\x0er\xa5;\x88l\x0b]L\xc2\x03\xba\x8c\x07D)\x0f\xc8r\x1e\xd0Z=]\xd6\x83$i\x0f\x82\xf2\x1e\x94\x92\xf8 U\xe6\x83\x95R\x1f\x10\x9a7A\xf2\x83s\xc8~@)c\xe0I('\x01\x02E\x06\x84\x15R\xa0\xd7\xa1<0$\x07BiI\x10\xa2\xb2 \xe4J\x83^o\xea\x1b5\xfc\xb9N\x90\x08!\xa8d@P*\x84,\xb9\xd0\xeb*(#B\xae\x94\xe8\xf5\xa6\xe6\x81\xa1\xdd\x04\x8bI\x8a@\x92\x15!CZ\x844y\x11r$FH\x96\x19!\xf2\xb6%\xec\xceO\x95\x7f\xa8\x92#\xe4\xc8\x8e\x90*=B\xb8\xe29\x12\xa4\xd7\x99%\xf0Q\x1f\x19\x9a\x14\x19| \x9a\xbb\xb0\x1c e%I\x88\xc9\x92\x10\x96&\xbd\xe7\xe4J\x96P\xb0\xef&H\x97\x90$_\x82%a\xce\xed\xbf\xabz'\xb6au\xea\xa6mw\xc2\xb3t\xacT\xc8l\x99\x0c@4GOrQpl\xf6\xff\xf1\xfd\x9b\xcb\xab\xbf_\xbdyM>C\xed\xd8\x9ft\xf8\xd5\xdb\x7f\x10\x8f\x0f:7\x81\x81\x89U\x98\xad\x89\xfc\x8f\x7fM\xe4\x97\xb6\xd9~\xc4\xd6\x97#\xc5\xa0\xf2\x12\xcb\x7f\xc97\xad\xbd\x17\xb1\xbfWx[\xf7'\xb0\xfe1e{n\xa0n\xd4\x12\xd1\xb4\x9b\xec\\\x86&\\D\xb5\x99\xbc\x82\xfa/\xe7\x8e\xf28,\xe9uH\x15\xf3\x99x\x85\xab\xb7\xff0\x97\xb8z\xfb\x8f\xe05\xc6\xd4\xc2\xe4K\x98*\x10*\x10*|(\x8a\x95\xf0\xec\x8c\xdb\x07_\xab\xediW8\x9az\\\xd0\xc7j\x99z\xdf6\xf5\x83p\x84\xa7N\x16-\xad4\xa5*\x0f^U\x1d\xa8\x8e\x1e\xc5M_\x87\xb7{'\xf9\xe9\xc5\xe6\xd8\xd5\xc3\xd35N\x027\xc3j\x87\xde\x80\xd8\xc9\x08~fc\xc9\xeb\xe9\x1f\xce.k\x1d\xec\xee\xafS\x0en\x95\xee=\xbb\xc3\xc5\x13O\xd3\x12~']*\xbc}\xfc\xb4\xf3\xfb\x99\x1f\x81\xe9B\xd7\xb8-\x7f\xfc\x0e\x07/ \xc4\xcbJ\x93\xd7\x8b-\xea\x10\x1aT\xd9\xbe\xfaz]\xdc\xa1\x92\xcdJ\xfa\xa5*\x0c\xd2.\xc7[\xf3A\xde\x99YR\x04\xd4\xae\xab\x9du\xfb\xb09\xc3\x92\x98\xd2$G\x1dm\xd3 \xdc\xfd=<\x99\x9c\xbd\xbb}\x07\x1d\x0f\xb2;\x07\x1f\x0d\xa07\x12\xed\x11\xa17\xe6\xd4\x90c\x1bZ\xedfm\x18 [\xa5R<\x9b\xd7Y\xa45\xf6us\xdd\x8b\xdd\xed\xf5\xb4W}\xe6`A\xa9\xdd\xbf\xac\xd1\xf2d\x04}\x01C{'P\x9f\xc4\xb5\x04\\\x07\xf0n/?\xed\x85\xef%<\xc6\xab\xfd\xd8\xcf\xb6\xd5\xd7\xd8{\xdd\xcd\xb7\x9aG\x9d\xbf\xad\x1b\xcfl\xec\xe3\xae\xea\xef\xe5\xf7\x9a\x89\x8a\xf5\x11B\x15l\x85\xec\xab\x13\xcb2\xbb\xcc\x0b\xc5\x15\xa0\xcc\xddv\x9dol2\xdb\xec\xeb\x95\x99\xdb\xe3p\xec<\xf5<6\xd3\xcd\xeb\xb1\xed\xda\xe3\x00\xf5\x80Hcs\x07\xed\x17\xd1M\xd3\x9d\xfe\x02\xfe\xe3^4\xaa\xaa\xee\nt\xc2\x1c\x8e\xf4\x83\xfb\xaa(\xbb\xdb7\xef^Xo\xc3\xba\x97\xcf\xeb\xb6\x1e\x8c\xf6[\xc1TH\xa7\xbf\xc7\xfb\xb6\x17\xd0\x1c\xf77(\x94\xba/j\xdf\xc6\xba\x9fQ\x16V\x8f\xc0\xaaMUpz\xda\xd6\xe32\xac\xfa\x96FT\xc0}\xd5\xd9\xfd\xbb\x80\x7f\xb5\xd8\xac\x87\xf6Qt\x18\x0b\x7f#\xc6\xdb%\xb6\xb8\xb4\xea\xed\xb6jB\xab\xab\xe0\xbe\xda\xfe\xb8\x1b\xea\xc3\xaeV\x85\x9b_\xfb\xe4\x84\xd9Sg1\xaf\x93\xd8\xab\xf7\x19Ql\xac\xf5\xe9q\xd2\xcd\x0f\xd5]\xddxF\x80\xc5>&\xe6\xc0y\xe2\x9b\xe9\xcf\xba\xdf\xbb\xc8We\xc1Ws$\x13\x8e\xf8:\\{\x91\xd0\xe8\x90\x1d\x05\x00\x86z\xd8\x89\xc0\xa7\xa3\xb9\xbe\xf9l\x94\xff\xa9\xe9\x99\xaa\xef\x15.\xf4\xbe\xba\x13\x1f\xc4\xafG\xd1\x0f\x17\xeaw\x8f\xb3i\xbb\x1f\xe9V6\xa1\x80}\xdb\x0f \x90AAx\xc5q*\xf6\xaf\x95\x0dp\xf4O\x1eu\x13x_Qxy\xac?\xfe\xc7\xf8\xcc\x8eC\xa3\x15\x9d\xee\x93\xbf\xed&\xda\xc8\x07\xf7Z=4\x9e\xc3\x1f\xab\x1ez1\xbc\x80z\xe8\x0d\xf4\xd5\xe3\xc8';\xe0Vq-\x8fu?\xbf\xa7\xbe\x8a w>a\xde\xd4$F'`\xb8\xb1)\xb1\xd1\xf8\x03\xe75Z\xfc\xcay\x8dhs$\xc8\x00\xc3Ug\xe5\xbcF\x04\x08\xdc\xa5K&\x03\xe09\xf07\xe75*\x08z\xa7@\xdeI\x807\xe75Z\x0bsg\x80\xdcE \xeet\x80\x9b\xf3\x1a\xad\x01\xb6S`\xed\x0cP\x9b\xf3\x1aq^#\xcekD\x05\xad\x8bB\xd69\x805\xe75\xf2\x1d\x16\x05\xa9\x13 jJ\xd6\x9e\x14x\x9a\xf3\x1aq^#\n\x08\xcdy\x8d\xd0\xd6\xc0\xce\x9c\xd7\xc8\xe5)\n4\xe7\xc2\xcc\xdew\x03\xe75:5\xcek\x94\x01!\xc7\x01\xe4T\xf88\x01r\x17\xfai\xaa\xef\x9a\xb6[,\xb9\x9b\xa7q~ \xd52ko\xec<\x88\xc4\x97G\xef\xc7x\"\xbdW\xbf\x8d\xff\x8dY\xda~\xd7Y\xec\x82\xa9\xf5\xc6\xccz\x16\xe0\xd5\xdc\xb6\xd8\xdc\xea}4\xfd\xa0S\xbf\x99\n\xbb3\xeb\xfd`j\xfd\xdc\x13\xebEP\xa8/'@#\xf6\xd29\nWz/0Z\x96\xbd\xc8Z<-\xc3^\xb0\x94\x10-)\x10\xb0\x89hI\x95Q\x96\xde\x95e\xc1\x13\x01\x7fI9\xf5\x8a\x02\x14Q\x84\xa24DA\xc7(\n\x81\x14y(E\xc0]b\x16\xbd\x958Ei\xa0\"\x11\xa9(\x0cU\xa4a\x15\x89`E\xa8\x0fg\xe4\xcd+\nW\x90\xf0\x8a\x82\x80\xc5Z\xc4\"\x0b\xb2(\x84Y\xe4\x80\x16\x01g\xe4\x95\x0bOy\xdf\x0d\x9c\x1f\xe7\xd48?N\x06$\x15G\xa4R\x01\xa9\x04<*\x19\x8eJC\xa38?N\x1a\x0c\xc5\xf9qF;\x07\x00U\xa2\xcf%\xc0Ot\xf4\x89\x92\x1fg\x9e\x8e\xc0r\xe5\x0e\xb4\xc7\xa3fZ\xe4I\xea\x81Y\x16\x9de\xe2\x85\xc5\"\xf9\x94wa\xe8\x8e\x91|\x1a%\xb3.\xbc\xb2\xb6\xec\xa1d`xm\xed\xf0c\x921\x98\x0dn\xbc\xb9\x18\xc29\x18,\x97?\x98\xc6x\xa6\xe9\x18\xa6\xc6\xbav\x94\xd1\xd8\xf0\x07\x88^1\xe15z\x01 \\\x04f`R0\xeb\x832\xc2:\x13,\x1e\xa9\x12\x1e\xc3\x1bi\x02\xcd\x0de\x0dI\xda\xd4}\xa7w\x82\x1a\x10p\x93(\xb5\x85\x18\x82`p/'27\xf2K\xd9\xeb\xad\xda`*\x18\x9d\xde\xc5?\xd4\xb6\x8f\x8d\x9a\xc6\xb7\x8d\x98\xee\x89^:E\xf1\xa0\xdd\xd4\xd5\xb8\xebUh\x81\xfc\x8b\xbd\x8dT{+=\xfa\xaf\x1b\x01!n\xaa]\xd5l\"\xeb\x8e\x05\xfa`\xd3\x06v\x1b&\xdd^\xb3s\xdbJ7\xd4^r\xd9\xd66\xb6\x85\x1db\xda\x90\xaci\xf7&U\x90\xbc\x81U\xa3\x0b\x17Z\x94~\xfb\xee\xd3\x9b\x9fpz\xaf7\x1cS\xf3\xe4\x1a\x972\xaf\x9aA\xcf \xc6\xe5\xe3>\xd8 \xf4\xf4B\xc3\x11\xfe'\xab\xbek\xaa\xe1\xd8\x89~|c\xc9Nx\xd7\xde\xb5\xf8\xee\xce]\x8c\x9d\x1e\"\x1b\xf1\x90W\xf8R\xed0MXk?h\xe2\xebF\x1cT\x1e2\xa7\xbbz\xb0\x16v\xdd\xb5\xd1=u9\x97\xd2{\xba\xe9\xb6\xeba\xdfv\x02\xfac=\x98\xb4NNg\x9b\x1d\xe62\x1b\xdf \xcbf\xe0-\xcd\xd0xK\xb3\xbf\xdc\x96f'\xf7r\x0elYs\xbb(\xbb\xe5r\xf4\xca9\xf1d\x8cK\x19c\\e^\xce\x8cq1\xc6\xe56\xc6\xb8\xd0\x18\xe3:5\xc6\xb8\x18\xe3\xf2\x19c\\\x8cq\xa11\xc6\xc5\x18\x17c\\\x8cq)c\x8c\x8b1.\xc6\xb8\x18\xe3\xf2\x19c\\\x8cq1\xc6\xc5\x18\x97e%\x90\x1a\xc6\xb8\xd0\x18\xe3b\x8c\xeb9a\\\xbc\xcfY\xee&R\xbc\xcf\xd9\x19\x1b7\xbeC\x17\xefsV\xa2\x15y\x9f\xb3\xefs\x9f3\x9b\xb8}\xf5\xdb\x1c\xa7\x0cm\x82f\xe1Od\xf0v\"\x03\xe1P\xd5n\x0ew\xf2\xfb\x83i\x9a?\x0f}\x1b\xc1\xa9\x9ck\xc6.\x88w6\x03\x98\x0eP\x0d+\xbf\xb1\x82~\x8aBX1\x927\xe8\x1a\xa2\xee!\x8d\xe1%H\x0c \xfc.\xc1[\x8c\xdd\x8d\xba\x88w\x00(L\xed\xd2\x98\xddtbW\x93\xb9\x1e\x7f\x14^7H\xeb\x06Y\xdd\"\xbd,H\xe9Fod\x9c\xd0\x8d\xba\xa0\xf5\x85\xd2lnI2\x97\xc4\xe5\xa6Q\xb9\xe1F\xc1W\x9b\x1b\xc7\x0de\\;y\x8b\x18\x9bX\xbd\xa9\x14\x0c\xeb-~eX/\xd6-'cX\x8fa=\xb71\xac\x87\xc6\xb0\xde\xa91\xac\xc7\xb0\x9e\xcf\x18\xd6cX\x0f\x8da=\x86\xf5\x18\xd6cXO\x19\xc3z\x0c\xeb1\xac\xc7\xb0\x9e\xcf\x18\xd6cX\x8fa=\x86\xf5,+\x01N1\xac\x87\xc6\xb0\x1e\xc3z\xcf\x13\xd6\x9b\x8b\xe7\xbe2\xcf\x8fr\xe1\x05\xe7/\xf37\xa3V^M\xbb\xbeM\x87\x05P\x16\x8bd\xfcl\xcet\xe0-\xa3W\x02\xdf2:\xf4r.\x8e+\xe9\xc3\x9e-\xf0\xa2\x1a \xc2\xb8\xa8\x83f=l\xdep\xdd~\x9a}\x9c\x19Z\x891 \x9150\"I\x12\xf1\"\x9a\xa1\x0b\n\x95>q\x14B\x02)\xc4\x1aHYL(\x95\xa6\xb6\x9ck\x9b\xe0N\x8c\xca\x08\x8b\x86@\xd8\x95Q\xd9\xa6\x95\xaf\x1d\xbcrx\x9f\xba\xe4\xeb\x86\xf7\xaa\x03\x1c\xcap\xa3\xbe\xebH\x828\xa0^\xbb\x8c\x1f\xca\x9a%\xb8G\xa97\xcd\xd0=\xd9;\xe6N\x0f]d\x1fH\\\xab\xec\xc4N|\xa9\x9aA~WU\xdbj\xa8\xce\xc9h\xb8N\x7f\xe5\x1a\x0f\x17\x072\xbb\xa1\x8d\xd9\x8d2\xcf\x11\xb3\x1b\xccn\xb8\x8d\xd9\x0d4f7N\x8d\xd9\x0df7|\xc6\xec\x06\xb3\x1bh\xccn0\xbb\xc1\xec\x06\xb3\x1b\xca\x98\xdd`v\x83\xd9\x0df7|\xc6\xec\x06\xb3\x1b\xccn0\xbbaY \x1d\x9d\xd9\x0d4f7\x98\xdd`vc]\x99\x8b\xb2\x1b.<#\xb4\xdb\x9f\xb5\x020\xee\xbf\xe2\x90\x0b{\x07\xa9a]`\x9e7\x83\xb8\x19\xa0\xeb2\xfa\x84g\x8ei\xc8\xe6}\x9e\x9b\x02\xc6x\n\xc2\xfa\x16\x91\xcc x\n\xd2\x19q>#BhD\x9bLY\xac\xe1\x94%p\x1a\x84\x8a\x1b\xa3\xb1\x1aI\xb4F\xc6\xd5\xe3\xc4F\x12\xb3A.A9_\x945KeE\xe9\x0d\x1a\xbf\xa1\x8cRD\x17\x00\xd7\x0fm'\x8b\xb5\xdb)h\xab\xaf\x9b\xbb\x9d\xf5\xf2\xf9\xd1\xbd\x1e9\xd5A\xfe\xbf'\x11\x8d\x9c\xb7\x8c\x1e\xa7W\xb0\x9c\"5 ;\xc4\xcb\xb6\xdb\x8aNlaW\xf7\xc3\xb2V\xbc\x91\x1d\x1aod\xf7\xd7\xd9\xc8\x8e\x80Z\x05g'A\xfaj\xe1\xcd\xa1\xe7/\xb6\xb9sN\xb3\x98\xc3\xd2\xc6\x1c\x16sX\x931\x87\xc5\x1c\xd6d\xcca\x0d\xcca\xb9\x8d9,c\xcca1\x87\xc5\x1c\x16q\x96\xc4\x1c\xd6h\xcca\xd9\xc6\x1c\x16sX\x0ec\x0e\xcby\x0csX\xccay\x8c9,\xe6\xb0\x98\xc3b\x0e\xcb\xb2\x12L\x0csXh\xcca1\x87\xf5<9,\xde\xf0.m71\xde\xf0\xee\x8c\x8d\x1b\xdf\xaa\x8d7\xbc+\xd1\x8a\xbc\xe1\xdd_h\xc3\xbb\xe3\xe1\xae\xab\xb6b\xc4O\xab\xc3aW\x8b\xed\xf5aW5\xaf~\x93\xf7>\xb4\x97\xdd\xcf\xea\xe8\xf7\xbbj\xca\xf6U\xc1\xa1\x13_\xea\xf6\xd8\xef\x9e@\xbb\x03}\x19\x90ne7\xae\x87\x1e;\x96\x13\"\xb5\xbc\xfe`*\xfdL\x91Q\x1fQ\x18\\\xe0\x0e\x93\x83\xb3z(\xfff\x18\xba\xd9\xb5\x9b\x07\xf3\xb7\xca\xec?%\x7f\xc1v}\x94SL\xd5v\xf3O\x11\x02\x1ac\xb5\xb9\x0d\xc2\x0c\x16\xd9\xa5f\xb6\xa1TDvw\xf8\xf0\xfer9Qc\xf4\x85\xd1\x97\xa8\xeeC\x91N\x80\xd1\x17F_\xbcG2\xfa\x82\xc6\xe8\xcb\xa91\xfa\xc2\xe8\x8b\xcf\x18}a\xf4\x05\x8d\xd1\x17F_\x18}a\xf4E\x19\xa3/\x8c\xbe0\xfa\xc2\xe8\x8b\xcf\x18}a\xf4\x85\xd1\x17F_,+\x81!0\xfa\x82\xc6\xe8\xcb\xf7\x80\xbe\xc8\xff\xb5\x1c\xcc>!\xf1I\xd4J\x94\xbd\x08m\x94ET\xbe\xce\x04\xba\xf8\xd4S\x9fx\xaa\xd7hP<\xf5\x8b\xa6\x97\xea\xa8\x99h\xaa\xba\x19\xfe}\xa6\x95:\xf5Q\xcb\xc1\x0f\xa6R\xcfT\x1f\x9dZ\xc2\xb6y\x86 \xd9\x0eu\xbc &\xf3\x96\x03\xa2\x12\x15\xf67g_\x8d\xae\xcbP\x166\x00>\x8a\xc1\xea\xabZ,5\xf5\xd1\x1a\x11\xfedF-\\m\xf2L\xfd\xc0>\xd9+I\xe9\xe5\xc9q\x11\xa3\xbd\x1d\x1e\xab\x0e\xb9\x11\xf9\x90\xa8\xafC\\\xb8\xa9v\xf0\xff\xb4\xcdK\xed\xd0\xf7\xccn\xda\xfd\xbej\xb6=l\x8f\xd8\x18\x81\xa2\xe1\xcb\x07~\x11wu\xf3\x0bj\xd3jz8M\xfb\xc6;Y{\xa4\xe9\xc9\x14.Q\xedz\x94>\xbc\xb5\x1dZ\xd8\x8aAl\x06x\xbc\x17\xb8(XMU6M\xb1\xa9\x1a\xb8\xaf\x9a\xedN@\xa5\xf6\x1a\xf3x\x1bo\x0c\xea\x02\xbek\x9aJ(\x97\x9dZf\x1a\xc6[)\xdfo7B4\xa8z\xd4\xa1%qS\xd0\x17#\xef\xe3_\x88\xd4\"\xc4\x04\xc5\x8c\xb5\xac{h\x8f\xc3\xcb\xf6\xf6\xe5\xb6\x1a\x84\xa2I\xac\xb6\xf6\xf8\xfbT\xcb\xc1\xb3\x83\xffc\x90\x02\xdf\x85;Qm\xee\xe5kT}\"L\xd7\xc5\x02\x8b\xaf\xf5I6\x19i\xfe\xdcF\xd1'\x8b\x96\xcb\x88\xf6\xfc\xc99\xb7t\xa1\xbb\xe0DH\x98{\xb8\xd7+\xa2\x07\xd1\xc9\xeb\x06T\x9e\x7f\x8a\xea\x8b0\xb0R=\xf4\xf0\x7fE\xd7NL\x96\xfc\xf8A\xd6\xe5\xa5\xc9K\xa2Z\xd6\xe3\xadn\xfaAT\xce\xde\x1fJKEn<\x7f\x86\x97\x10\x8b9\x99l8\x17Y\x12h7\xb7\xa3w\xfa\xcbp+?\xc4\xb1\xd3i1a\x017\x19\xab\x9b\xdb6\xb3\xee\xb1\xdc5\xb846)^\xd3\x02\xfe8*5\xb7\xad\x96\x884T\xe6S\x88\xda\xe6\xe5\xe6\xbe\xf2\x0b\xde\xfdqs\x0f8\xcf\xbd\xab\x07\x1cBk\x8daN \xfd`\x83:wu\x1c\xda}5\xd4\x9b\x80\x82j\n\xe8L&d^\x08\xd7\x9b]-\xa7\x1b\xfdP\x0d\xbeg/\xd2BW\xbf\\\xbe\x14Mu\xb3\x13[\xc0\xfa\xf5F\xe1}Y7\x8a\xcd\x93\xcdb8\xdb\xf1U\xe4\xf6\xa6\xca\x03X\x1e9\x10\xca\x87\xc6~\x95\xfb\x1a\x0f\xdf\x8a8\xba\xec\xab\x07\xb5\xa4\x80\x85\x19\xdbQI\xed\x9b\xb6\xeb\xe4\xc0\x1f)\xc5\xbf\xf5bw\xfb\xb7yanP)\x9cu\xe8v\xb39v\xfd\x0b\xef\x0dm5E\xdb6\x8d\xd8\x0cZ\xc53\x0d\xf4Et\xf5\xed\xd3467\xe21V,]\x9e\xba\xd7R\xcc\xcd\x93\xf6\"]\xcb\x81\xa4mo\x8d\xa0\xeaqa\xc0\xba\xe5+\x1f\x0b\xe6\x1d\xc7\xa6\xd6E\xb1W\xde\xf3\xb1Vm\x83J\xe6A\xfa\xeb\x07\xe8\xf7m;\xdc\xcb)\xc3\xa6k{\x9f\xd8'oec:\x8c\xa9\xb6\xfb\xe0\xe0T\x0d\xa2\xd35 0E\x84q\x02\xc8\xaf\x0f\xc8%\x8b\x02\xfeN\xc4\xa5\xc0ZkY\xba(\xca\x17\x95&\x8c\xe8\x8cQ!\xca(\x8f3\n\xb8\x93\x0dJ&\x8dV\xb3F\xa5i\xa3D\xde\xa80q\x94\xc6\x1c%RG\xa1><\xf2HT\xee\xa80yDb\x8f\n\xd2Gk\xf9\xa3,\x02\xa9\x10\x83\x94C!\x05\x9c!\x9f\x14\xe7\x90\xceB\"\x9d\x8fE:\x0b\x8d\x94\xc6#\x15'\x92\xa8LRQ*\x89\xce%%\x93I\xe9lRt(\xfc\x1b\x81N*\xc0'E\x08%\xe2\x84\x8a@)\xa5\xcc\xba\x92I\xa5\xd0K\xf0\xa6\x95_\xeeQV\x89Z\xbe\x82\xbcR\n\xb1T\x98Y\xca\xa3\x96B=\xa8\x8fsK\xd9\xe4\x92\xc7\x9b\xbcZ\x8c]*E/\x91\x11\x1c\x02\xc1\x94\xc40E\x90\x83,\x8e)\xe6\xd3\xabg\x16\xa2\x99\xd2\x1b\x93N4\xc5\xea\x96A5erM!]\xb8\x18\xdbD\xa6\x9bh|\x13\x95p\"\xb4r:\xe5\x94\xc29\x85H\xa7B\xacS\"\xed\xb4\x8ew\x8a5h\x02\xf3t\x06\xea)Z:oO/\xc7>\x11\xe8\xa7|\xfe\xc9\xe3\x0e\xd7\x08\x03\x04Ta\x06*FAerP\x1e_\xea\xcb0\xf4qL`\xa1B\xc0F\x88\x87*OD\x15g\xa2\xfcTTI.\x8aBF\xa5\xb3QItT\x06\x1f\x95JH\x05\x19\xa90\xb1BgV\xa8\x9cT\x06)\x95\xc8J\x05\xaa\x9b\xc3Ky\\Y,\x12\xed\x91\xa01S\x81.\x8f\xeaD\x80\x9a*\xcaME\xc8\xa9\xf3\xb0S\xa5\xfab\x02?\x95BPM\x0c\x952B4\xbfE\x08\xe5G\xf3\xdb\x9c\x12G\xf3s4\xbf\xf3w\x8e\xe6\xb7\x8c\xa3\xf99\x9a\x7f\xb2\xa2\xdaZ\x8a\xb2\x96\xa4\xabq4\xffZ5-CK+\xa2\xa4\xa5\xebh\x1c\xcd\xbfF?KQ\xcf\nkg4\xe5\xac\xa0nFU\xcd\x1c\x13b\x8e\xe6\x9f\x1bA'\xa3\xce\x92\x9252\x8e\xe6')c9\xba\x18G\xf3\xfb\x0e\x8bja J\x18%V=E\x05\xe3h~\x8e\xe6\xa7h]\x1c\xcd\x8f\xb6F\xdd\xe2h~\x97\xa7\xa8\x9e\x95\xabfy\xdf\x0d\x1c\xcd\x7fj\x1c\xcd\x9f\xa1Z\xc55\xabT\xc5*A\xafJV\xab\xd2\xb4*\x8e\xe6OS\xa78\x9a\x7f\xb4s(R%\xfa\\\x82\x1aE\xd7\xa2\xcc\x8b\xda\x1b\x19_\xdfl^m\xee\xab\xa6\x11\xbb),^\xfd\xbb\x0f\x84\xc4\xeb#\xa6$\xe2\xbb\x1d\xde,\x8cU2?\xca\x91\xd6\xc4:)\x07\xf3\xb0x}\x9c\xfe\xed\xd9\xc6\xc4\xcf\x9b\xc3\xb6\xe1\x0f\x10y\x02\xc1\x83c\xf8\xa0 \xcbW\xb1tS\xd0\x99\xac\x06\x08?I\x13_\x1c\x11\xcdq\xef\x9f6\xbf\x84\x8f\x9f~\xfe\xf4\xe6\xfa\xf3\xdb\xab\xb7W\x9f\xae~\xfe\xe7\xd5\x7f\xbdy}\xfd\xf9\xed\xc7\xf7o.\xaf\xfe~\xf5\xe6u\xf4Ly^\xf4\xa0O\x1f\xfe\xf3\xdd\xfb7o\xa3\xc7\x91\x0e\xba\xfc\xe7\xbb\x8f\xde\x82\x19\x8d4\xb3^\x94\xd5\x18i\x1f\xf1>\x99\xbdaj\xfd\xd8\xe0\xdd\xaa\x91\xd9\xd5\xdbw\xa8E\x8a\xdd\xae}\x0c\x81\xdex\xd7\xfb\xc0h\xa5\xaa\xfc\x02de^\x80n\xcd\x17 \xff\x17\xda\x0ef\xb5\x0ca\x8d\xd1\xdb\xfd\x13\xbc\xd6\xd3g\xaca\xdc\x93\xf4#\x1flS{\xf9\xee\xfa\xefc\x8f=\xb9\x1b\x84\x8aoo\x0f\x02W:\xef\xabf\xdb\xdfW\x0f\x1eT|\xe6XWr\xe9\xbb\xda\xc8\xf7\xe4Nl\xef\xb4\xef\xd1'\xf4\x838\x18i\x017\x93\x10\xdd\xa1\xea\x86\xa7\xf9\x80\x16\xb8\xa4\xebz\x9bV\xbes\x86\xe5\xc5.\xe0\xddA4\xd3\xc0Yu\xfe\xb6\xeaD\xb5\xc5\xd5\xfa^4*\xe6\xbf\x13\x1bQ\x7fQ\x1f\xc3\xc0c\xdan\xb8\xae\xb7\xa1\x152\xc2s\x05 \xdd\x10\xf4U\xfdc\xaen\xde\xf6Q\x7f\xfd\xa2(\x15\xf4\x87\xe3\xd4l\xf6\xe3\xbf\xf1\xfa\x802\x956\xf7n\xba]\xfejy:\x88\x89\xf7\xbf\xbeo\x0f\xc1X{\xdf\x04T\x99w\x1a\xaa\x8cP\x9fXJ\n\x80]\xdd#\x1d1\x15z\xa2\x7f\xba\xfe\x05N`\xd4c\xacu\"y\x1f\xfd]O?o=\xe25\x01\xc6\x05\xd5Z\xd3\xc4\xf8\x19:t\xd5\x17\xcf\x00\xa5U\xe4\x15\xba`\xbc\x1d\xdaC\xf5\xebqzM\xe9K\x9a\xc1\xab\xee\xa1\xba\xeb\x04n\xae\xd46:Y\x93\xf7\x13V\xda8?p\x1e\x11yD\xe95\xc2\xa7n\xbaa\xee\xfe\x18}:\xe8\xd7\x1b_\xe3\xa1KR\x86\x8d+\xe3`\xab?%\xc7)te\xf5\x8b\xe1\xde^S\xc3\xca\xfa\x82 \xcc\x1b\xce\xf9\xe3T\\\xb5\x84\xe0\x98\xd7\xcc\nm\x9e\x8a~h;\x95|c\xfc*\x1e\xa6\x1c s\x07\xd3\x0eg\x8e\x8fM}\xb7\xa6M\xd0\xcc7\xef\xe9\xa1+\x12\xae\xe9M\x1c\xfd\x84!)\xbb\x91W<\xd7\xb5\xf0\xa65\x1a7\x91\xd4\xf8\xeb\xb8\x9f$\x1c\xaa^\xcf?\xd5\xae\x93\xbf\x1eE?\\\xa8\xdf=\xceT\x8e\xc1!\xb8\xe1\xa4\xe3T\xdc5ne\x03\x1c\xfd\xf9\x9db\x03\xc9\xb8i\x9do\x17C\x0bA\xf1\x01\x95v\x13\xd9\xfb\xffy\x0e\x7f\xacp/\xbb\x17\x98\x01H\xc3N=\x1c\x1b\x93)\x0b_\xb5\x8f\xb5\xa3\xab\xc5\x9fS{\x8fPU\xab\xd9ra\xdd\xc0\xdd\x87\xf7\x97\x13\xe7\xac\xd7\xe2z9\xf5w~\x07yX:\xcc6$} w\xd8\xa9\xca\x8f+{\xf2\x03\x07\xbf_\xec\x96q6\x879\xe3c\xbb\x9f\xca\x1dT\xa8:q\x10\xa8\xfc\xffRu\xe3M\x8a\x05g\xcc\x9a\x05{\xa6o\xc1{)\xb6y\xf7\xb0S\xfdJuz{\xeb\xb9\x92\xe3\x83~\xa9]\xab^y\xf6\x87D>\xbb&y\xd2\x98\xbci\xca\xcc4aY\xadk\x1ee\n[$a\x1b\xad\xb0:%\x9b|\xed\xe8O\x03Lgh\x8a\x92\xf1\xfc\xbc\x95\xd7\xdf\xed\xd48\xf6/\xe5f\xcc \x08u\xb3\xe9\x10\x92\x92\x1f\xed\x83\xdan\xd4\x94\xe1\xbe\xde\xb9\x9e\x9f\x07!\x0e\xf2\x111Er\x1c\xa2\xc7\x1c\xa4r\xaa\xbd0\xc8+\xf4\xed\x1ey\xd8^4\xfd\xb1\x87jw\xd7v\xf5p\xbf\xef\xf1\xd3ls\xdf\xb6\x8e!\x02s@vB\xeds\xeb|t\xcd\xae\x89\x0dlD7\xa8Db\xcdV3\xa7\xe2\xe2\xee\x02\xee\xab\x0eQ\xb8\x87\xfe\x85Z\xdfz\xb9\xaf6\xf7u\xe3\xba\xda\x92\xfbs]\xf1\n\xefM/`S\xf5\xa2\x7f1\xebg\xba\xf2\x8b\xc6\xd5\xf9\xc5\xfc\xa5\xdf\xb4\xcdP7G\x84\x13]\x97\xbc\x91\xef\x9e\xa6\x1e\x14E\x8d\x9f\x8e\x9bNT\xb8Q\xaf\x90]D\x8b\xc4\xf3[|'\x9c\xe9T\xb09g\x7f\xa7D\x99\xe8)\x08)\xc4\xc4\x04\x95\xcc\x17\xe9\x8d\xc9\x11\x9b\x03J8\xa0$:\xe7\x8f\x8fo\xca8\xa0\x84\x03J\xdc\xc6\x01%h\x1cPrj\x1cP\xc2\x01%>\xe3\x80\x12\x0e(A\xe3\x80\x12\x0e(\xe1\x80\x12\x0e(Q\xc6\x01%\x1cP\xc2\x01%\x1cP\xe23\x0e(\xe1\x80\x12\x0e(\xe1\x80\x12\xcbJ\xc0\xfd\x1cP\x82\xc6\x01%\x7f\x95\x80\x92\xd0\xf6\x90\x13\xa2r\xf1 \xec\xb7`hg+\xcd|Tz\x08\xed\xc4p\xec\x1a\xc5\x07\xd8R\xf9\xc5\x08\x88\xe0R\xd0\xddb\xcd\x04\xc5o\xb3\xfb\x91\x1f\xfa\xb8P\xbb^i\xac\xbe\xbd\xbd\xed\xc5 ?\xbf\xe6\xc5\x05k){\xb1\x19V\xddh\xa1\xdd\xfa\xdb\xb4S\xe5m\xb5\x9b\xe9\xa0\x9eE\x02\xe7\xc2\x80\xa3\x11U\xf9|\xed\xb8\xf8(\xd7\x95\xc1\xa6l\x8e{\xd1\xd5\x1b\xf37\xb5?\x92\x02m\xd5\xaa\xc8\xbdhL\xc3\x1f\x9bq!j1\xfdT\x1b\xfd\xedD\xdfOM\xa8\x96n\x8e(^>\x88\xc4\xf6\x9c\xbb?s\xe3.d{G\xf3\xee\xea}Mm]<\xd6\xe8\xa6>>G-R\xda=X\xab\xac\xc7\xddB\xbcTK\x12\xf6\x9f\xaena'n\x07\xbd\xfaev\x1d4\x93F\\_\x1dw\xb4S-'g\xa0(\xfbW\x87\xc3\x1f\xd8\x8a6e4\x9d\x1fjK\xeb\x0c\xd9\xa2z\xe3\xbe\xa1;\n$\x06\xeaf[o\xaaAL\xdc\x87jA^\xd3\xf3(\x1f\xb9\x0b\xfd4\xd5wM\xbb\x0cY0O\xe3\xfc\x12\xaae\xd6\xde\xd8\x9b\xb6\xdd\x89qS\x1e_4\xe0\x8f\xc1p\xc0W\xbfM\x14\xe8\xef\xaf\x0em7\xf4\xaf~\xd3\x14\xea\xef:L/\x10,8\xc5\n6\x18&x9'\xb2]\xa1\x81?\x98\xca=\xef\xc8@/\x8ae \xd4\xaa\xef\xdbM\x8dkyz+R1\x02j\x16)}\xea&\x9f\xd3\x8a\xef1\x98\x15$\x18]\xee\x0e\x85\xd2D\xe3\xc5\"\xe7\x05\x82\x03i\xa1\x81\x84\xc0@BX\xe0\xaa\xa0@\xcazz\xd9\x80\xc0H8`\x99`\xc0\xe8\xad%\x86\x02\x9e)\x10\xf0\x9b\x87\x01\x9e5\x080?\x04\xf0\x9b\x06\x00\x06\n\x13\x0e\xfe+\x14\xfa\xb7r\xacJ\n\xb6\xa3\x86\xfcQ\x02\xfer\xc2\xfdh{\x06\xa7\x86\xfaEC\xfa\xfe\x80\x80\xbe\xa4p\xbeo\x10\xcc\x17\x0f\xe5\xcb \xe4\x0b\xbe\xf9!\xfa\xf6\x87x|\x10\xe1\xf9\x00\xf2\xfb\n\x8a\x07\xef\xd1C\xf7\xe2\xa1I\xc4\xaa\xae\x0c\xda#\x85\xec\x0d\x91\x80\xbd`\xb8^\xb4\x16\xb1\xc8\x92\x92\x81z\xc40\xbd\x84 \xbd`\x88\xde\xea\xba\x97\x0d\xce\xf3\x87\xe6\xc5\x1f\x98e\xb0\xda\xa1>\x88]\xdd\x08#\x88\xc8\xa1\xe8e\xdbl\xcc\xeb\xdc\x0cT\xae\x1es#\x86G\xf9\xd66,\x8b\xeb6\xec\xdb\xedq'\xe4\xd7)\xf4\xe2Pu\xb8\xbf\xf6\xae\xdd<\xa8\xfd\xb1M\x13\xe0DhP\x08+\xce/\xddc\xd3\xa6:\xe0\xa7r{\xeb\xba\x96\x9c\x19\xc8\x96\x1b\xc7Y|\x88\xd0\x97u\xa6\x9e8X\x07\x9e\x04\xc2um{\x9b\x04NG8\x1b\xdd=\xf6\xa2{\xd8 \xd0\x9bw\xdf\x82\xf8Z\xf7\x83h6\xcb\x13\xf0\x00o\xdc\x88v\xe6\xda~_y~\xacz\xe8\xc4\xd0\xd5\xc2\x05\xa9\xad\xf8\xac\xe3\xf0\x1b\x87q\xf8\x0d\x87\xdf\xfcy\xc2o2\xa2o\x16\xde\xec\xe0\x9b\xc5O\xbf\x88\x1e\xb15\xe9\xe2r\x9a\xc8\xbc@\x08T-\x90\xf6P\xe9QJC\x03\xa6\x05\xe5\x0c|\xe1n\x1c\xd7\x96\xd7q\x0cs\x1c\x08\xc4\x81@\x1c\x08\xa4\x8d\x03\x818\x10h2\x0e\x04\x1a8\x10\xc8m\x1c\x08d\x8c\x03\x818\x10\x88\x03\x81\x88\xb3$\x0e\x04\x1a\x8d\x03\x81l\xe3@ \x0e\x04r\x18\x07\x029\x8f\xe1@ \x0e\x04\xf2\x18\x07\x02q \x10\x07\x02q \x90e%\x8228\x10\x08\x8d\x03\x81\xbe\x87@\xa0 \xcd\xb1\xdc\xcc>$\x0d\x8e\xa1\x16\xf7\xdd)\x81\xeb\xe6\xa7\xe5\xfa\xf7\x84\xbb\x0f\xdd1\x1a\xc60F+(\"\xcaW\x16\xfc\xbc;cA\xce@\xdd\xbfRZ\xfc5j\xb2\x01\x04\xdf\xfa^\xd7\xaa\xe0%\x9e\xa88c\x03\xe6\x1b\xedQ\x0b\xfc\n\x0c\x1f\xff\xb8\x90\"'\xa6}\xea\xbc#\xdc>N\x8aFns\xc2\x8cB\xc0\xbfU*}\xd4\xb3e\xff\xc7\x1am\xaf\xed\x9b\xe0\x85Ef\x8d\xea\n\x08X6\xf0x~>-\xa2\x0b\xe6#\xe3\xa2KV\xf3\xa2\x07\xf3u\x87\xdb\xe0\xd4Y\xef\xa5\xc0\x83\xf5\x85h\x9d\x81 W\x12\xaa\x0e\xc4%/eY\xa2e\xc0\xdf\xc9\xbaU\xe03\xae\xacp\x19\x95.K\x8b\x97t\xf9\xb2\x90\x80\x99'a\x06\xdc\xc9\x06%\x8b\x98\xabe\xcc\xd2Bf\xa2\x94YX\xccL\x933\x13\x05\xcdP\x1f\x1e\xa5N\xaa\xa4YX\xd4$\xc9\x9a\x05\x85\xcd\xb5\xd2f\x96\xb8YH\xde\xcc\x118\x03\xceP\xfa\x8cK\x9cg\x119\xcf's\x9eE\xe8L\x93:\x8b\x8b\x9dT\xb9\xb3\xa8\xe0I\x97<\x93E\xcft\xd93:\x14\xfe\x8d |\x16\x90>#\xe2'qBE\x10@Sf]\xc9\"h\xe8%x\xd3~\x11\x04\x19\x94Z\xbe\x82Rh\x8a\x18ZX\x0e\xcd\x13DC=\xa8\x8fK\xa2\xd9\xa2\xa8\xc7\x9b\xbcZL\x16-%\x8c\x92\xd5=\x828\x9a$\x8fF\xd4\x8c,\x894\xe6\xd3\xbbTZH(MoL\xbaX\x1a\xab[\x86`\x9a)\x99\x86\x96\x9c\x8b\xc9\xa6d\xe1\x94&\x9dR\xc5SB+\xa7\x0b\xa8)\x12jHD-$\xa3&\n\xa9\xeb\xa4\xd4X\x83&\xc8\xa9g\x10T\xa3\xa5\xf3\xf6\xf4r\xb2*AX\xcd\x97V=\xee\xe4a!q\xb5\xb0\xbc\x1a\x13X3%V\x8f/\xf5e\x18\xfa8&\xc8\xac!-($\xb5\x96\x17[\x8b\xcb\xad~\xc1\xb5\xa4\xe4J\x11]\xd3e\xd7$\xe15CzM\x15_\x83\xf2kX\x0c\xa3\xcbaT 6C\x84M\x94a\x03\xd5\xcd\x91b=\xae,\x99\x93\xf6H\xd0\xe4\xd8@\x97o\xee\xc2\x82lQI6\"\xca\x9eG\x96-\xd5\x17\x13\xa4\xd9\x14q\xf6t\xd3@\xcaw\xab\xb5\x9f\xaa\xa5\x0eZ{\xaa\xda\x12\x96\xfa\nu\xad\xddX\x83\x9e:\xc3\xd5\x8c\xcb\xddT9\x00\xdc\x18\x07\x80\xcf-\xad\xb0\x1c\x00\xeep\xc7\x01\xe0\xe7\x0f\x00\xf7mll\x87~[\xc3\xea2\n\xfc\x83+\n\xdc\xe5\xea\x95\xc7\xa1\x15\x15>\x9e\xc6\x81\xd8\x8b_9\x10\x9b2\xe2)\xcbb\x1a8\x10\x9bB2\xb8>\xfe\x939\x86\x1c\x8a\x81\x03\xb1\x0b\xb2\x0b)\xe4B\x12\xb7\xc0\x81\xd8ki\x85\x0cV\xa1\x08\xa9\x90\xce)p \xf6\x1a>!\x85N(\xcc&\x0c$2\xa1 \x97@\xa5\x12\x1c\x0b\x0e\x1c\x88=7\x02\x87@\x9d%%3\x08\x1c\x88M\"\x0fr\xb8\x03\x0e\xc4\xf6\x1d\x16e\x0d\x12H\x03J\x98q\ne\xc0\x81\xd8\x1c\x88Ma 8\x10\x1bm\x0d=\xc0\x81\xd8.OQ^ \x97\x16\xf0\xbe\x1b8\x10\xfb\xd48\x10;\x83\n\x883\x01\xa9D@\x02\x0f\x90L\x03\xa4\xb1\x00\x1c\x88\x9d\xa6\xfes \xf6h\xe7P\xfcK\xf4\xb9\x04\xb5\x9f\xae\xf5s 6$\x16\xe4,\x81\xd8F\x94U!\xb0\xaf\xf4\x92\xd6\xab\xdf\xe6\x82\xfd\xef\xaf\x94Z9\xfd]\xfd;\xb4\x7f\xda\xff\x9c\x06o\x9b\x8by\xe2\xb7G\x81\x98\x1a\xc2] r{V$}\xe0\xb3\x0d\xde^\xdc-/\xe0\xb1l\xc9o\x14\xb7=\x04U\xbe\xe8\x02\x17e\x85\xa8\xb8\xbeGS\xf7r\xb4\xbd\xb0\x86\x97\xa5\xe0\xe1%<\x0e\xa3\xfa]\x01\xf5.S\xbb\xf3#~$\xe5n\x95n\x97\xa5\xdaA\xe5\xc5\x8a\x07\x9af\x97\xa3\xd8\x85\xd6\xd1Iz]a\xb5\x8e\xa4\xd5\x15T\xea\xa2:]!\x95n\x8dF\x97\xac\xd0\x15\xd0\xe7\n\xabs\x11m\xae\xb82w\x1e]\xae\xb8*G\xd7\xe4\xf2\x14\xb9@\xa3\xc7\xf4\xb8bj\x1cM\x8bs|\x0c\xf8\xc7\xd7\xc2:\\L\x85[\xa9\xc1\x05\x14\xb8\xe8\xf4$\xaa\xbe\xd1\xe6/e\x95\xb7\x98\xee\x16/S\x9e\xe6fFv\x87\xc3\x98\xe2VPo[\xa1\xb6\xb95\xf2\x90\xd6VVi\x0b\xebl%T6\x92L\x14Q\xd8\xc8\xfa\x9a\x7f)<][\xf3\xfbr.;\x15Q\xd5R\x1a\x8b\xaa\xa8\xc5\xdb\x84\xac\xa6ehi\xee%\xbaB:\x1aIE\x8bkh\x14\x05-\xd8\x8a\xa9\xea\x19U;\xf3)g\x05t\xb3\x04\xd5,_3\x0b(ST\xbd\xac\xb0Z\x16(\x91\xb3\xa7f\xe9dF\x13s\xf8\xf3\xa8d\x8552\xbfB\x96\xab\x8f\xe1\x8a\x80\xab\xe0nu\xac\xac6\xe6\xfb\xf0\x8b\xeab\xbe\x85{\x9f&VV\x11\xcb\xd7\xc3<\xdaW\x96\xf2\x15U\xb9\xd24.\xb2\xc2\x95\xa8o\xa5\xa8[^m\xcb_\x1a\xaa\xc6@\xd3\xb5\x12U\xad\x04M\xcbY\xb5\xb2z\x96\xef\xa1X\xa1e9\xd7)\xbcJV\x9e\x8e\x15\xd2\xac\xca+V\xeb{\x12Y\xad\xa2jU\xcbWd =i\xf0#r\x9eI\xf4\xea\xb5{Y~\xbet\xbfp\xc2\xe1\xa5\x1c^\xaa,\xad\xb0\x1c^\xeap\xc7\xe1\xa5\x1c^:\xfe\x89\xc3K9\xbc4\xbex[\\~\xa6\n\xd0y\x12\xb4\xd7\x19\x87\x97rx\xe9d9b\xb5\xd7\x19\x87\x97\x9eZ!\xe1z\x9dt\x9d!^\x17\x91\xaf\x8b\x0b\xd8Q \xfb\x0c\"\xf6\xb9d\xec3\x08\xd9)Rv\xae\x98\x1d\x1c\xc3crvAA\x9b*i'\x8a\xda\xc5e\xed\xb8\xb0\xbdZ\xda\xe6\xf0\xd2h\xc9\xf2\xa4n\xa7+\x0e/\xcd\x11\xbdc\xb2w\x19\xe1\x9b\xa8\xe6F\xc5\xef\x04\xf9;\x1a\xe6\x97(\x81sx)\x87\x97R\xc4\xf1h\xab\xa6\n\xe4t\x89\x9c\xc3K\x17VX0\xe7\xf0R\xdbr\xe5s\xa73\x0e/M\x10\xd3\xd7\xc8\xe9Nw\x1c^\xea<\x81$\xc0sxi99\x9e\xc3KW\x8b\xf5e\xfa\x1cY\xb0\xa7K\xf6\x1c^\xaa,\xaf s5\xddW\x9e\x850\xa9_\x0b~~au\xf1\xbc\xa2\xf7\xb2\xdcJ\xfa\x8c\x95[\x0b\xa4\x7fX\xb9\xcf\x11\xce\xdb\x88\xaf\xc3u/~=\x8afC\xdcX\xf9\xad\xf8:|\xd4g|\x10\x1bQ\x7f\x91\xd3\x81\xe1\xd8\xe9W\xadt \x9d\xfe\xc1\xb8\xc69Q\xa5 \x82\xd1\x93.\x983\xdc\xd6q\x15}\xd8\xb3\x0d\xb6\x9d\xb5\xe5\xb5n\x81$\x8d4Jihu\x1c\x9bxlZ\xd3\xd6'O\x1f0\x00\xc4\x00\xd0hi\x85e\x00\xc8\xe1\x8e\x01\xa0?\x18\x00\x9a\xde\x08s\xecG\xbe_E?\xa8\x89}\x94\xfaq\xbc[F\x87\x8c\xff(c\xfc\x87\xf1\x9f\xc9\x18\xffa\xfcg2\xc6\x7f\x06\xc6\x7f\xdc\xc6\xf8\x8f1\xc6\x7f\x18\xffa\xfc\x878Kb\xfcg4\xc6\x7flc\xfc\x87\xf1\x1f\x871\xfe\xe3<\x86\xf1\x1f\xc6\x7f<\xc6\xf8\x0f\xe3?\x8c\xff0\xfecY \x14\x83\xf1\x1f4\xc6\x7f\x18\xff\xf9\xde\xf0\x9fs\xe0(r\x9c\x15\xc3u\xb5\x91O\xe5Nl\xefpY\xa3\xa7\x81)\xef\xf1\xe4\x9f\x17\xe7\x8el\n.q\xeb\xe9\x8e\x18`y\x8d\xd1\xcd\x94de\xea\xc6\xea\x83=\x08\xac\xb8\xaf\xae\x8f|\xb6\xcc\xca\xb2\x15\x9e\x87>\xa7\xfb\xc3\x8a\xb5)\xe7S\x89O\xc4\xf4(\xb8'\x03S\xf7,}\xf9\x93g\xd1]\x00\xc3\xf5\xac\xb8<\x01\xf5X\x0e\x16\xea\xa10\xd7v\x97l[\x0dU\x81RQ\xd7\x0b\xc7\x17\xa5\xbc\xee\xe2\x95\xda\x8f%\x1e\xaa!{\x81O=\xb3*\xef\x07\xaa7zz\x8bKT\xf5F\x7f \x08\xf9\x1c\xea\x95\x7f\xc3\"9\xdd\xc9ID?\xb4\x9dg\xfa\xaeK\xbci\xf7\xfbz\xc0\xa7\xed\xc5\xc9\xf3\xa7V\xb6\x91\xe8:\x0c\xbd\xe7{\xf9\xb2\xda\xed\x14\xd8\xa1G\x86\xfaf\xa7\xb0\x07\xe9LN\x0em5\xce.\xbf\xd3]\xdd\x0c\xa2;t\x88\xb5\xd4N\xca\x04\xc6m!\xe4 8\x96\xff\xa4\xf8\xa8\xa1T\xa6\xf8\xcb\xbbr\xa8\xee\xea\x06\xc7K/\x086\x1d2\x0ez\x9e\x01)\x0b\xfaBB\xefA<\xad$\xa8\xbc\x1d\xd8\xc7\xae\x183\xd77\xd8\x8a\xfcO\xad\xfcT}\xaf\xe4\xad\xf7\xd5\x9d\xf8\xa0p\x96\x0b\xf5\xbb\xc7\xd9\xaf\xf2}\x8bn\x10\x07<\xc8i\xd9\xbe\xed\x07\x10\xa8\xa7\xa0\x08\xe38uh\x87*w\xc3\x0d\xc2\xb8\xa2\x9b\xc0\xbb\xd6\x8f\x97\xc7\xfa\xe3\x7fL,\xb0Q\xf2,\xd9\xc8\x07A\xd8M\xb4i\x8f\xcdp\x8d\xce|\xb3\xce\xc7\xaa\x87^\x0c/\xa0\x1ez#P\xf6pl\xd4\x13\xbfU\x9a\xcdc\xed\xe8j\xf11D\x15\xc5\x82\x91\xda\xd9\x14\xbfn\xe0\xee\xc3\xfb\xcb\xb13\x9b\xf9s\x0f\x8f\xf7\xa2s\"fn\xfd{\xd3v\xca\x07\xb2\x02\x06w2\xb3q\xf9\xe5\x82r\x90\xdd2\xce\xe60g|l\xf7S\xb9\x83\xabJ\x9d8\x08\\\xad\xff\xa5\xea\xc6\x9b\x14\xf9D\x9d7\x0b\xf6L\xdfG\xear\x81,B\x8a\xaaN\x7f\xb3k7\x0fpBm\xeb#\xf3\xc7\x07\x86B\x1d\xc6P(C\xa1\xcf\x1a\nu|y\x0d\xfd:B\xd4\xf3)\xc9p\xa82\x86C\x13>\xff\x18\x0ee8T\x1b\xc3\xa1\x0c\x872\x1c\xcap(\xc3\xa1\x0c\x872\x1cJ\x9d%1\x1c:\x1a\xc3\xa1\xb61\x1c\xcap\xa8\xc3\x18\x0eu\x1e\xc3p(\xc3\xa1\x1ec8\x94\xe1P\x86C\x19\x0e\xb5\xac\x04\xa8\xc7p(\x1a\xc3\xa1\x0c\x87~op\xa8U\x90\x11\xe9\xb9x\x10O\xbe\xf2,\x94=\xcd\xc8T\xfa\xd5\xa2\x10N\xc5S\xd8h\xc1\xc5\x08\xd4\xe0\x12\xd9\xddb- a\x01\x83C\xf9!\x99\x0bx\xd7\xa0\xc8\x8e\xdf\xd0\xed\xedm/\x06\xf9Y:/.XK\xfc\xbd\x98\xc1M\xb2\xad~\xd5\xf4\xab\xb1\xa9\xb1n\xab]\x1fm-\xcf\x82\x89\xa3\x11U\xf9|\xed\xb8X\xac\xd0\x95\xc1\xa6l\x8e{\x84\xda\xf4\xdfp\x14\xdaT\x8d\xac\x8fZ-\xba\x17\x8di\xf8c3.\xd0-\xa6\xe5W\xe8m'\xfa~jB\xb5\xa4uD\xb1\xf7A$\xb6\xe7\xdc\xfd\x99\x1b\xd7\x93\x07\xd0j\xde]\xbd\xaf\xa9\xad\x8b\xc7\x1a\x81\xd9\xc73\xa9\xc5[\xbb\x07\xab9R\xbf\xdcv\xf8\xa0\x96j\xec?]\xdd\xc2N\xdc\x0ezU\xb0\x1e\xd4k\xc2L\xa6q\xddY= \xea\"\xb2\x9do\x9e\x14&Q\x1d\x0e\x7f`+\xdaT\xd6t~\xa8-\xad3d\x8bb\x0fmq\xa0A\xc2\xa2n\xb6\xf5\xa6\x1a\xc4\xc4\xc9\xa8\x16\xc4\x03uG\xb2\xdd\xd5\xcdfw\xdc.\xa6\xca\x95\xba\xca(\x01.\xee\x18\n\xca\xd6\xca\xb4|\xa5Y@\xe2bp\xf9|\xb5\xc43\x17U\xc0\xaf\x8bN\xf4Z\xfa\xc7\xc7kz\x1e\xe5#w\xa1\x9f\xa6\xfa\xaei\xbb\xc5\xba\xbey\x1a\xe7\x97P-\xb3\xf6\xc6\xde\xb4\xedNT\xa6:\xe7\xe5\xf8\xfbW\xbf\x19\xa8\xf8\xf7\x00\xc6\xef\x04.\xb0b\xb5\x90\x83\x17b\xb5[\x0f\xbb/'g\xf7t(\xff\x07\xd3J\x7f\x0e&?\x89\xa4\xa0%o4\xcd\xe8\xd8N\xd6p28\xbf[\xae\xf3r2I\xe6\x06\x95\xa5\x15\x96\xb9A\x87;\xe6\x06\xbf\x197x\xd2\x85\xfc\x90\xdf\xc8\x0d\xda\xf1 \xfa\xd9Z\xbeg\xc1z\x8b\xe0l\xe1D\xb5\xd3\x03\xad\x1a\x88\xaa]\xdf\x9a\x89\x89|\xa7\xa9AI/b\x9a\x06\xbb\xed\xda\xfd4p\x9d\xf8\x0b\x8ccL\".~e\x12\x912\x92*c\x12\x91ID\xb71\x89\x88\xc6$\xe2\xa91\x89\xc8$\xa2\xcf\x98Dd\x12\x11\x8dID&\x11\x99Dd\x12Q\x19\x93\x88L\"2\x89\xc8$\xa2\xcf\x98Dd\x12\x91ID&\x11-+A\x851\x89\x88\xc6$\"\x93\x88\xdf/\x89h8\x14oI\xe69\xf0J\x16\xc1#\x98\x9f\x11\xbd\xb1\xb2\xcc\x05\xb0\x9b\xffYf\xcf\xbc\x9cN\xf3%\xce\xb4<#x#z;e\xa6qG\xce\x98i]Q\x1f\xf4l\xc1\x1c\xab\xe6\xcfC \xe4<\x99\x9c'\x93\xf3dr\x9eL\xce\x93\xc9y2\x1d\xc6y29O&\xe7\xc9d\xde\x95y\xd7\xef\x8cw\x0d\xe5\xc9\xb4\xbe\xb7J\xe4\xc8\xb4?\x189=\xa62\x86R\x13\xbe\xfa\x18Je(U\x1bC\xa9\x0c\xa52\x94\xcaP*C\xa9\x0c\xa52\x94J\x9d%1\x94:\x1aC\xa9\xb61\x94\xcaP\xaa\xc3\x18Ju\x1e\xc3P*C\xa9\x1ec(\x95\xa1T\x86R\x19J\xb5\xac\x04 \xc8P*\x1aC\xa9\x0c\xa5~\xbfP*\xa7\xc7L\xcb=\xc8\xe91\xcf\xd8\xb8\xf1\xc4\x8e\x9c\x1e\xb3D+rzLN\x8f9g\xf4_\xfdv\x18Sf^\x1b\xba\xb8\xff\xfd\xd5\xb1AH\xf4\x8b\xd8b2\xcd\x00\xcaou\x98\xcf\xe3I?o\x1eN9\xfe\xc9'\\\xfdry\x82\xd6\x8en\x96\xe9!\xadEW\xf3\xaeF\x92\xd7\x94\xd6 \xf9\xcf\xcb\xa2\x8fx\xb6\x84\xffX\x97\xa2\xac\x85W \x88Pe\x9a\xe6\xd9\xd5=>\x94\xd6}[&@\x1d\xcb\xbd\xf0\xc1\x94 S\x82L 2%\x98@ \xce\x07\xecSDP\xff{\x881\x82\x8b\x97\x10\xb3\x81\xca\x98\x0dd6p2f\x03\x99\x0d\x9c\x8c\xd9\xc0\x81\xd9@\xb71\x1bh\x8c\xd9@f\x03\x99\x0d$\xce\x92\x98\x0d\x1c\x8d\xd9@\xdb\x98\x0dd6\xd0a\xcc\x06:\x8fa6\x90\xd9@\x8f1\x1b\xc8l \xb3\x81\xcc\x06ZV\x82\xd3b6\x10\x8d\xd9@f\x03\xbfg6\xf0\x14 \xf1\x95\xca@\x02\x142 \xbd\x80K\x19\xc9! y\x176\xbc\xa2\xf8\xa6\xdd\xed\x04~\xca\xfe]\x1f\xb2\xe9\xbfX\xbf\xef\xeb\xe6\n\xaf\x03\xff\xaf\xfe\xeb7fq\xa6\xbfy\x90\x1cu\\2\x95\xa32\xa7D\xc1\x1c\xed}\xc9\xe1\x8c\x0eW\xf28\xba\x14\xfa Fr\x94e#9\x87yfH&q\x98\xc4a\x12\x87I\x1c\xdb\xb2I\x1c=T\x97\x80q8k\x17\x939\x9e\xdf\x99\xcc\xb1\x8c\xc9\x1c&s&c2g`2\xc7mL\xe6\x18c2\x87\xc9\x1c&s\x88\xb3$&sFc2\xc76&s\x98\xccq\x18\x939\xcec\x98\xcca2\xc7cL\xe60\x99\xc3d\x0e\x939\x96\x95\xa0$\x98\xccAc2\x87\xc9\x9c\xef\x9e\xccq\x01\"\xbe\xc2\x19d \xc0 \xa4\x17\xef;\xe3rL\xa3\xfd\x1e n\x96\x02'\xa2\x15\xb5\x90\x03\x1d\xee9\xb9=\xdd_\x12\xb7\xb1u\xd22Kg\xfa\x98g\x0b\xcbLuJ\x92*#+[\xe3\xa6\x93\xd8n\xcb\xb4@\x83\xb5s\x14\x0e\xa0\xcb\x85\x94C\xd7\xb6\xb7g(\xcf^t\x0f;\xa1\xdc\xcb'K|\xad\xfba\xb1s3\x98\xeb{q\x12\xedL\xf3\x00\xd5\xa0_2\xb2V\xca\xf3c\xd5\x8f\xdb\x99\x9e\xce_\xbd7 \xa2\xaa,S9\x0ec*\x87\xa9\x9cgB\xe5\x9ct!\xe7\xb6w#\x94co\x8c\xac\x1f+E\xf5yv\xe8\xbd\xc5=\x80\xd5\xa0\xba\xac\xa4\x1a\x83\xaa]\xdf\x9aT}\xf2\xfd\xa5\xc6#\xbd@`\xda\xea\xb6k\xf7\xcb1k\xe9\xad:\xb9q\xa7\x03\x1a3?\x8b_\x99\xf9\xa1\x0c\xa9\xca\x98\xf9a\xe6\xc7m\xcc\xfc\xa01\xf3sj\xcc\xfc0\xf3\xe33f~\x98\xf9Ac\xe6\x87\x99\x1ff~\x98\xf9Q\xc6\xcc\x0f3?\xcc\xfc0\xf3\xe33f~\x98\xf9a\xe6\x87\x99\x1f\xcbJ\xf0\x17\xcc\xfc\xa01\xf3\xc3\xcc\xcf\xf7\xcb\xfc\x18\xf8\xc4[\x929\xd8S\xb2\x08\x1e\xe5\xfc\x8c\xd8\x0d\xa6\x0b8P\x99\x1bkeA\xc9\xa3\x1f\xd4\xe9#{#\xe7\xdcZ\xbd_4\x13\x8eG7B40fR\xb1\xa4}\xf9\xc0+\x1f[\xd9\xeb\xc6%6\x07\xa4\xa3/\xa9\x0fx\xb6\x84\x8e\xa9\xa5O\"\x9co>f\xfd\xaa4i]H\xb8\xddUw8\x05\xaboA\xdf+\xc5\xbf0|c\x8c\xe1\x9b\xb9\xa5\x15\x96\xe1\x1b\x87;\x86o\x9e\x05|\xa3\x87z:y\xa3X\x9b\xe5\xc8\xa4^Dz\xf4\\\xd64@\xe0\xbc`\x04\x87\x11\x1ce\x8c\xe00\x82\xc3\x08\x0e#8\x8c\xe00\x82\x03\x8c\xe00\x823\x19#8\xa31\x82\xc3\x08\x0e#8\x90L\x910\x823\xb3\xb4\xc6c\x04gf\x8c\xe0\x00#8\x8c\xe00\x823\x99\xffS\x94\x11\x9c\xd9\xdf\x19\xc1a\x04G\x19#8\x03#8N\x97\x8c\xe0|\x83\x82\xfc\xe9\x11\x9c\xb6iTf\x9d\xfe\xd5o\xd3?~\x1f\xd9\x9c\x00cc\xed\x11r9\x9ey\xa9\xcf\x9b\x92\xdc\xe8\xad\xa4\x8c\xc3\x93l-\x15L\xd7\x1d\x1d\x8af\xebL\x7fsz!}\xd4\xb3\xc5kL\xbd\x9f\x87\xfc\x87\n\xbfw\xe1K \xddz\x1dS\x1dk\xe60\xe6\xf1\x16\x8do\x85\x96\xb0l&\x9a\xe3\xde\xffA\xf5\x12>~\xfa\xf9\xd3\x9b\xeb\xcfo\xaf\xde^}\xba\xfa\xf9\x9fW\xff\xf5\xe6\xf5\xf5\xe7\xb7\x1f\xdf\xbf\xb9\xbc\xfa\xfb\xd5\x9b\xd7\xd13\xe5y\xd1\x83>}\xf8\xcfw\xef\xdf\xbc\x8d\x1eG:\xe8\xf2\x9f\xef>z\x0bf\xd4\xf3\xcczQ\xd6\xe9\xa4}\xc4\xfbd\x90\x03\x04\xdb\xcc\xddB\xd2\x02U!}\x1b\x95\x02\xe3\xbfC\xba\x87\xf4\x81\xf7\x98\xaa\xf2\x0b\x90\x95y\x01\xba5_\x80\xfc_h;\x98\xd52\xf0\xf9\x1f\xbf\xdd?\xc1k\xfda\x855\x8c{\x92~\xe4\x83mj/g5\xff}\xec\xb1'wr\xbc\xc1%\xf7\x83\xc05\xf0\xfb\xaa\xd9\xf6\xf7\xd5\x83s\x89t\xe1XWr\xe9\xdb\xda\xd9P\xd3\x17\xc6'\xf4\x838\x18\xd1i\xd3\x1e\x9bAt\x87\xaa\x1b\x9e\x143H\xb8\xa4\xebz\x9bV\xceF\x86\xe5\xc5.\xe0\xddA4\xd6\x00\xdb\xf9\xdb\xaa\x13\xd5\x16u\x9c^4[\x9c\xfai\xfc\xcf\xec\xedG(\x9a\xea\x00\xcb\xc2!1\xb9\xd9\xb5\xbdP~7U\x03M\x0b\xbb\xb6\xb9\x13\x9d\x9c\xfc\xe1\xa2\xbd\xb92r\"xa\xef\xf5\x82\x05j\xbb\xad\x90\x03Md({\xbc\x17Z\x95\x10\xf63\x81g\x0b,\xc5\xb1\xd1\xff8\xdf\xa8\xf6\xee\xc3\xeb7\x1f\xae\xdf\xbe{\xfb\x86\xf0\xd0O'|~\x8b\xffO82|\xdc8\n%\x95\x83:\xf8\xf8\xaa\xf7\x13\xfc_\xd1\xb5/\xd5\xc7\xb3\x9c>\xeb\xe6\xf7:2w4\xd4\xff\x16\x0d\xf3\xd3\xb8!\xa5\xecl7r\x0c\xdc\xd5_\xf0\xce\xca\x8f\x80\xe6I9}\xa1?\x17\xf6\xd5\x13lkTR\x90\x8f\xc2\xd1@\x1e\x10R\xe9F\x88\xea \x1eE'd\xef\x1d\x82\xcf\xc8\xec\x96L%\xac:\xbbx\xe2k\xb5\x19\x10T\xb3J\xe1\xba\x94\xf3J\xf6\x80\x12{\x97/\xc6\x1e\xd2;\xdc;\xbb\x00\xc2\x0c\x03\x8fQ\xd3\xf3\xd0\xda)\xe1\xb9\x82\x84n\x08\xfa\xaa\xfe1W7o\xfb\xa8\xd7EP\xae\x0c\xfa\xc3qj6\xfb\xf1\xdf\xf8\xe9\xfb\xa8@\xa5\xcd\xbd\x9bn\x97\xbfZ\x9e\x0ebf\xc9\xd7\xf7\xed\xc1{\xa3B\x13Pe\xdei\xa82B}|\xf0\xe4d&\x0d\xe9Th\xeb\x9b\xad\x7f\x81\x13\x18\xf5\x18k\x05Q\xdeG\x7f\xd7\xd3\xcf[\x8f\xe0U\x80~B\x1d\xdf41.P\x0c]\xf5\xc53@i\xbe`\x85b\x1co\x87\xf6P\xc9\xefUS$}I3x\xd5=Tw\x9d\x10[8\x1e\xda\x06\xb6G\\ \x0b\xa1\x1d\xe3\xfc\xc0yD\xe4\x11\xa5\xd7\x08\x9f:\xe7G\xf6d\xf1\xa7\x83~\xbd\xf15\x1e\xba$e\xd8\xb82\x0e\xb6\xfaSr\x9cBWV\xbf\x90\x1f\xa8\xd3j+V\xb6\xf2\x0c\x9f\xe6\x0d\xe7\xfcq*\xaeNIz:\x968\x93\xf3\x92>\x9b\x97\xbe\x0e\xd5]\xdd\xe07\xb3\xe3\xab\xd3\xa4N5\x87\xf8\xb2\x01\xae\nfh\xc4\xd7\xe1\xfaAx^O\xd1\xbb\x1d\xe5+|\xdb\x94\x1a3\xd77\x1b\x93\xca\xff\xd4\xa0Q\xd5\xeb\x89\xe8\xfb\xeaN|Pib/\xd4\xef\x1eg\n\xdd\x96n\xa4[\xd9t\x02\xf6m?\x80@|\x07\x99\x1f\xc7\xa9C;T\x1e\xce\x96\xdc\x00\xf1\xd0\x08\xef\x88\x82\x97\xc7\xfa\xe3\x7fh\xf6\xbe\xbd\x1d\xc11\x8bR\xf21\xb7v\x13\xe1\xbb\xe7\x1a\x9d\xf9F\xd5\xc7J\x0e\xbc\xc3\x0b\xa8\x87\xde\xf0p=\x1c\x1b\xf5`m\xd5;\xf7\xb1vt\xb5\xf8\x03\xab\x8abm7\xdb\xceV\x94\xeb\x06\xee>\xbc\xbf\x9c\x00{\xbd\\\xdb\xcbo\x00\xe7\x07\x91\x07\xb7\xdc\xb4\x9d\xf2\x81h\xaaI#l\x16\x7f\xe5\x97\x0e~\xc8\xd8-\xe3l\x0es\xc6\xc7v?\x95;(bv\xe2 \xf0\xf9\xfe\xa5\xea\xc6\x9b\x14QD\xe6\xcd\x82=\xd3\xa7\x89,\xf5X\xde\xff\x9b\x83\x9d8\xd8\x89\x83\x9d\x12\xf6\xff>]}_n\x00\xfe\x81\xbc\x01\xb8\xc7!o\xfe\xad\x8d\xa3\x908\ni2\x8eB\xe2(\xa4\xc98\ni\xe0($\xb7q\x14\x921\x8eB\xe2($\x8eB\"\xce\x928\ni4\x8eB\xb2\x8d\xa3\x908\n\xc9a\x1c\x85\xe4<\x86\xa3\x908\n\xc9c\x1c\x85\xc4QH\x1c\x85\xc4QH\x96\x95\x88\x08\xe1($4\x8eB\xfa.\xa2\x90N\x03E\x96QH\x13D\xf6M\xe2\x7f&\x8c\xe6\xe2A<\xf9J\xb5P\xd34\x97R\xe9A\xbd\x13\xc3\xb1k\x14\xc3`\xcb\xf9\x17#\xc4\x82\x8bSw\x8bU\x1c\x14\xe85\x04\x16\x00S.\xe0]\x83\xc26~\xbd\xb6\xb7\xb7\xbd\x18\xe4\x07\xe1\xbc\xb8`-\xae\xf7bF\xb8\xca\xb6\xfaU\x07\x11\x19\x9b\x1a\xeb\xb6\xda\xf5\xd1\xd6\xf2,U8\x1aQ\x95\xcf\xd7\x8e\x8be\x02]\x19l\xca\xe6\xb8\x17]\xbd1\x7f\xc3\xe7_S\xc1j\x9d\xe6^4\xa6\xe1\x8f\xcd\xb84\xb6\x98\x10_\xa1\xb7\x9d\xe8\xfb\xa9 \xd5b\xd2\x11\x05\xd6\x07\x91\xd8\x9es\xf7gn\xdc\x05Z\xe0h\xde]\xbd\xaf\xa9\xad\x8b\xc7\x1a]\xd7\xc7\x10\xa9eS\xbb\x07\xab\xd9\x89\xfcu\xe6\xed\xa0\x16I\xec?]\xdd\xc2N\xdc\x0ez=\xae\x1e\xd4\x00m\xa6\xb1\xb8\xe2\xab\x1e\x10u\x11\xd9\xce7O\nM\xa8\x0e\x87?\xb0\x15m\x12j:?\xd4\x96\xd6\x19\xb2E\xb1\x87\xb68\xd0 \xd5P7\xdbzS\x0dbbST\x0b\xe2\x81\xba#\xd9\xeet\xfe\xcfysV\xea*\xa3\xf8\xb6\xb8c(\xe5Zk\xc2\xf2ebA\x80\x8b\xc1\xe5\xf3U\xbf\xb8[\x8b*\xe0\xbc\xbe\x13\xbd\x16\xdd\xf1\xf1\x9a\x9eG\xf9\xc8]\xe8\xa7\xa9\xbek\xdae|\x85y\x1a\xe7\x97P-\xb3\xf6\xc6\xce\xf3U\xfb\xc2!U4$\x12@S0$\xfe\xf3\xdaD@\x81'\xee\xf1\x12\x0f\xc3\x98\xa4\xd30\xc7\xab_.a\xa7@\x0e<\x0c\x17\xd7\xaay\xd8\xcf<\xa2\xd1\xf2\xf6\x83\xa9\xe1s\x8de\x8c\xf8\xf0\xa0,\x95\xd90\x0b\xdd^\x87T^\xa3(\xab\xc1\xf908\x1f\xc6dE\x19\x8c\x14\xfe\"\x89\xbd\xe0|\x18k9\x8b\x0c\xc6\xa2\x08_\x91\xceVp>\x8c5,E\nG\x91\xc1Pp>\x0c\xce\x87\xc1\xf90\xa8\x0cDQ\xfe!\x87}\xe0|\x18\xbe\xc3\xa2\x8cC\x02\xdf@\xc9\xf6\x90\xc25p>\x0c\xce\x87Aa\x148\x1f\x06\xda\x1a\x0e\x81\xf3a\xb8\xf1\xe7\xcf>\xf1c4\xfd\xc4\xab\xdf\xc6\xcc\x06\xbf\x07\xf6\xe0\xb6\x99\xac1\x15Es\x92\x85\"\x96y\xe2\x07S\xb9?A\xe2 /\xaf5#\xd1\x96\xdb\xa5\xa9n\xadH\x95@\x86\x07o\xd9 \xaa\xe2\x0fA\x0d?\xba|MY\xff-\xae\xde\xd3\xb4\xfb\x1c\xe5>\xac\xd0g\xe9\xf3x \x8f\xc3\xa8:_@\x9b\xcfT\xe6\xbdz&M\x97_\xa5\xcagi\xf2Py\xc3\x0c\x06\x9a\"\x9f\xa3\xc7\x87T2\x92\x1a_X\x8b')\xf1\x05u\xf8\xa8\n_H\x83_\xa3\xc0'\xeb\xef\x05\xd4\xf7\xc2\xda{Dy/\xae\xbb\x9fGu/\xae\xb9\xd3\x15\xf7<\xbd=\xd0\xe81\xb5\xbd\x98\xd6NS\xda\x1d\x9f\xfa\xfe\xf1\xb5\xb0\xca\x1e\xd3\xd8W*\xec\x01}=:=\x89j\xeb\xb4\xf9KY]=\xa6\xaa\xc7\xcb\x94\xa7\xa8\x07\xa2IbzzA5}\x85\x96\xee&`BJzY\x1d=\xac\xa2\x97\xd0\xd0I\"pD?'\xab\xe7~\xa1+]9\xf7\xfbr.*\x17\xd1\xccS\x1a\x8b\xaa\x97\xc7\xdb\x84\xac\x95g(\xe5\xee\x05\xf8B*9I#\x8f+\xe4\x14}<\xd8\x8a\xa9\xda8U\x19\xf7\xe9\xe2\x05T\xf1\x04M<_\x11\x0f\xe8\xceT5\xbc\xb0\x16\x1e(\x91\xb3\xa7f\xa9\xe0f\xf1\xd2\xe1\xcf\xa3\x81\x17V\xc0\xfd\xfaw\xae\xfa\x8d+\x02\xae\x82\xbb\xb5\xef\xb2\xca\xb7\xef\xc3/\xaaz\xfbd9\x9f\xe2]V\xef\xceW\xbb=\xcav\x96\xae\x1d\xd5\xb0\xd3\x14l\xb2~\x9d\xa8^\xa7h\xd7^\xe5\xda_\x1a\xaa\x82HS\xad\x135\xeb\x04\xc5\xdaY\xb5\xb2j\xb5\xef\xa1X\xa1T;\xd7)\xbc:u\x9eJ\x1dR\xa4\xcb\xeb\xd1\xeb{\x12Y\x8b\xa6*\xd1\xcbW\xe4\xa1k\xdb\xdb\xa4H\xbb\xc8\xc7\xa3^\xbd\xdf\x8b\xeea'\x94{9h\x89\xafu?\x88f\xb3<\x01\x0f\xf0n\xc5\xaf\x9d\xe9\xbd\xd4\xabA\xdfmy#\x95\xe7\xc7\xaa\x87N\x0c]-\\\xeb+C\xfe\xf2\xbf^x\xb9V\x9a\xd7\xca\xaf\xecxL\xf3`\xed4?\xeav&\x83uo\xad\xc2\xb4\xae/=SX_3B\xf9\xc2\xea[\"\xdf3\xfa5}W\x7f\x11\x8d)\xca\xc9\xe9\xf1o\xf7\xb7\xf2\xfar\n1\x9clw\xbf\xd8t\xbf\x1a\x94pk\xcap_;\x13i>\x08q\x90\xc3\x8a)\x92\xe3\x10\xadh\xe2g\xba|]\xe8\x15l\xe8\xdb=.o\xf7\xa2\xe9\x8f=T\xbb\xbb\xb6\xab\x87\xfb}\x0f\xfb\xea 6\xf7m\xeb\x88\xe8F\xf5\x15\xb7\xe0\xf7\xadk\xeb\x02\xd7\x0dlD\x87\xca\xca\xa6m\xb6z)Y\\\xdc]\xc0}\xd5\xe1\xea\xd7C\xffB)_/\xf7\xd5\xe6\xben\\W[.\xf29\x07}\xbc7\xbd\x80M\xd5\x8b\xfe\xc5\xac\x9f\xe9\xca/\x1a\xb7o\xb1\x03\xfaK/'\x08us\xc4uH\xd7%o\x04\xec\xdb\xa6\x1e\x94\x18\xb2{R\xde+D\x1e\x84\xec\"z\x06:\xbf\xc5w\xc2\x99\xc1\x16\x9bs\xf6\xf7\xb40\xee\"Q\xdc\x81 n\xf8E\xf4\xb8Fc=\xafx\xdf^\xe0\x92\xa6\x92\xd6\xe5\x8bT\x0dW\xee\xc9\xb6n\xd8\xdb\xae=Y\xab \x8ew\x1cB\xce!\xe4\x1cB\xae\x8dC\xc89\x84|\xb2\x1c\xc9\xda\xeb\x8cC\xc8O\xad\x90|\xbdN\xc0\xce\x90\xb0\x8b\x88\xd8\xc5e\xec\xa8\x90}\x06)\xfb\\b\xf6\x19\xe4\xec\x14A;W\xd2\x0e\x8e\xe11Q\xbb\xa0\xacM\x15\xb6\x13\xa5\xed\xe2\xe2v\\\xde^-ps\x08y\xb4dy\x82\xb7\xd3\x15\x87\x90\xe7H\xdf1\xf1\xbb\x8c\xfcM\xd4t\xa3\x12x\x82\x08\x1e\x0d\xe5M\x14\xc29\x84\x9cC\xc8)\x12y\xb4USer\xbaP\xce!\xe4\x0b+,\x9bs\x08\xb9m\xb9\"\xba\xd3\x19\x87\x90'H\xeakDu\xa7;\x0e!w\x9e@\x92\xe19\x84\xbc\x9c(\xcf!\xe4\xab%\xfb2}\x8e,\xdb\xd3\x85{Z\x08\xf9\x18ehy\x99}G\xce\xa2\xea\xd4\x02\xbf;\x80\xaen~Z\xae\x81O\xc1\x92Cw\x8c\x04\xc1\xa6\x85J\x1a\xa55-Z\xd2\x8a\x84\xbf4\x1e<\xfbxOZ\xae;\x9e\xb0R\xf2\xf5\xe8/\x14g9\xbf\x94>\xe4\xf9\xc6Z.\xda\xf6y\xc8[!Ra\x8a\x00]\xdc4u\x92\xef\x9cp\x81\x80P( r\x1f\xca\x08\xcbO@\xc3*\x94\x15!A\x94Qx\x10eg\xacD*!\xa2\x8c\xb2\xe8\x05+h\x11\xafC\xa4H(\xcc\x88\xb2,r\xc4\xebM\x11%Q~DY\x12E\xe2\xf52\xa3KH,\x89\xb2\x1c\xa2\xc4\xeb\x0c;8\x91+Q\x96E\x97x\xbd\xdd\x89\xa1w0&\xc6\x16cg\xdapu\xdeqj\x88\xf0\x01@\x7f\xb8\xa9\x8f\x1cd\xb0\x02Ag\xee\x05\xe3\xc0\xfaIif\x00\xe2\xdc\x00d\xb0\x03\xe1\n\x98\xd0w\n?\x00\xa5\x18\x02\xc8\xe4\x08\x82\x0ee\xe3\x92Y\x02X\xcf\x13@2S\x10t5\x85\xc7\xd3\xb9\x02(\xcd\x16@\"_\x00\xa9\x8cA\xb8g\x8f\xfc\x01\x953\x80\xd2\xac\x01\xd0x\x03(\xc9\x1c\xc0j\xee\x00\xf2\xd8\x03(\xc5\x1f@\x16\x83\x10~\x1c\xaa^l\xe3\x1c\x02\x9c\x87E\x803\xf2\x08p\x1e&\x01\x12\xb9\x04\xc8c\x13bC0\x8dO\x80\xb2\x8c\x02$p\n\x90\xce*@\x06\xaf@\x182\xffF`\x16\xa0\x04\xb7\x001v\x01\xe8\xd33\x02\xc3\x00\x89\xb3\xb8d\x96!\xe8\x0d9\x07\x02\xcf\x00 \xa5,\xc85@\x12\xdb\x00\xa5\xf9\x06\xc8d\x1c\xc2\xfd\xaa\x8fs\x0e\x90\xcf:x\xfd\xc9+\xc6x\x07(\xc6<\x00]\xba\x07\n\xfb\x00i\xfc\x03\xc4\x04\xcbL\x0e\x02\x08~\x03\x9aH!&\x02\xb2\x1a\x97\xceF\x00\xa1\x96\x19\x8c\x04\xe4r\x12\x10\xd9\xb4\xb8\x18/\x01tf\x02\x88\xdc\x04\x90\xd9 \xa0\xb5z:C\x01I\x1c\x05\x04Y\n(\xc5S@*S\x01+\xb9\n 4o\x02_\x01\xe7`,\x80R\xc6\xc0\x93P\x8e\xb7\x00\ns\x01+\xb8\x0b\xafCy`\x88\xbd\x80\xd2\xfc\x05D\x19\x0c\xc8\xe50\xbc\xde\xd47j\xf8s\x9d\xc0c@P6\x86 \x97\x01Yl\x86\xd7U\x90\xd9\x80\\n\xc3\xeb-\x90$AY9~\x03H\x0c\x07dp\x1c\x90\xc6r@\x0e\xcf\x01\xc9L\x07D\xde\xb6\x05\xb7Y\xa7\xf2\x1d\x90\xc3x@*\xe7\x01\xe1\x8a\xe7\xf0\x1e^g\x16MA}dh\xdcG\xf0\x81h\xee\xc2\xec\x07\x94\xe5? \xc6\x80@\x98\x03\xf1\x9e\x93\xcb\x87@\xc1\xbe\x9b\xc0\x89@\x12+\x02\x8eT\x0f@\xfc\xfe\x9e\x03\x0e\xffQ\x0f\xf7ZXU\x9b\x9a#\x81\xb4P\xe6\xcdH\xearg\x0d\xa2&\xd0\x19\xef\xd6\xc9\xc1n\x19\xadw\xe6~\xf6\xe6|\x9e\xb2\x90;@\x07u\x01+Q\xb9\xe1.N\x0f\xcd\xcf\x1ca6Z\xf0\xc7\xf5\x92\xd20x\x97{t-\xfe\xc7\xb7x2n\xf4\xa0C\xde\xc7=\x1f\xe0P\xf5\xbdZ\x1c\xb6\xf7rW\xbf{\x9ca\xbett\xe3\xdf\x14\xc2q*fv_\xd9\x00\xf1<\x14\xde\xf5\xa31\xb1\xbco\xa7\x01+\xf0\xcb\xb7\xd8a7\x91\x9d\xa3\xdfs\xf8c\x85\xf9\xe6_@=\xf4f\x89\xbf\x87c\xa3\x9e\x99\xadZ\xc5|\xac\x1d]-\xfeH\xcev\xbc\xaf\xcd\xca\xf7\xf8\x0e\xa9\x1b\xb8\xfb\xf0\xfer\xcam\xa0G\xbe\x1e\x1e\xefE\xe7\xccS\xe1V\x986m\xa7|\xe0 o\xd2\xab\x9bW\x94|\x17\xe1\xc2\xa8\xdd2\xce\xe60g|l\xf7S\xb9\x83Cf'\x0e\x02\x1f\xf0_\xaan\xbcI\xb1I\xc9\xacY\xb0g\xfa\xa6$\xf3\x91\xd0\xf7\x00\xa9\xdc\x11s\xbakE\xfe\x88\x05\x91&\xef\x90\xfa\xe4\x18\x0f\xe7\xac\x0d\x8b_9k\x03e8P\x96Jb\x98\xe5k\xafC*\x85Q\x94\xc0\xe0\xac\x0d\x9c\xb5a\xb2\xa2dE\nU\x91DTp\xd6\x86\xb5\xf4D\x069Q\x84\x9aH'&8k\xc3\x1aB\"\x85\x8e\xc8 #8k\x03gm\xe0\xac\x0dT\xb2\xa1(\xd5\x90C4p\xd6\x06\xdfaQr!\x81Z\xa0\xe4$H\xa1\x158k\x03gm\xa0\x90\x07\x9c\xb5\x01m\x0d]\xc0Y\x1b\\\x9e\xa2\x04A.=\xe0}7p\xd6\x86S\xe3\xac\x0d\x19\xaa\x7f\\\xf1OU\xfb\x13\x94\xfed\x95?M\xe1\xe7\xac\x0di*>gm\x18\x8d\xb36hK\xcd\xdap\x8eD\x0d\xceM\xc9\xe7\xfb\xcf\xcf\x8a\xb2\x90\xcd\xb4\xd0lvW\xb77o\xb7\xf5\xb9\x8bQ\x95\xc6\x05\xa9\xbb\xc5\xca\x0d\xca\xccr\xf0 +\xcdi\xdb\xe5\x9f{\x87\xfc\xd9\xf2\x84\xa3\x11U\xf9|\xed\xb8X\x1a\x98\xb6;\xaf\xa09\xeeEWo\xcc\xdf\xf0\x99\xdfT\x8d\xac\x8fZ\x9b\xd1\x1b\x9e+\x85y\\\x0e[\xee\x88\x8f\xdev\xa2\xef\xa7&T\x0bHG\x8c\x96~\x10\x89\xed9w\x7f\xe6\xc6\x8do\x9c\xbf\xab\xf75\xb5u\xf1X\xa3\xe1\xfa\xa0\x00\xb5Tj\xf7\xe0a\xdc<\x7f\xe6\xed\xa0\x16F\xec?]\xdd\xc2N\xdc\x0ez\x0d\xae\x1e\xd4\xa0l\xa6\xae\xb8\xca\xab\x1e\x10u\x11\xd9\xce7O*/Au8\xfc\x81\xadh\xa3\x0d\xd3\xf9\xa1\xb6\\\xec\xdd\x8f=\xb4\xc5\x81\x067\xc0\xa8\x9bm\xbd\xa9\x061%\xafP-\x88\x07\xea\x8ed\xbb\xd3{$\xcc\x9b\xb3RW\x19\x05\xb7\xc5\x1dC\xf9\xd6Z\x07\x96/\x10\x8b\xeaY\x0c.\x9f\xaf\xfa\xc5\xddZT\x01\xe7\xf2\x9d\xe8\xb5\xd0\x8e\x8f\xd7\xf4<\xcaG\xeeB?M\xf5]\xd3v\x8bUt\xf34\xce/\xa1Zf\xed\x8d\xbdi\xdb\x9d\x18\xb9\xaab9u^\xe9\x15\xfdW\xbf\xcd\xd3\x9d\xfc\xfeJ\x11Z\xd3\xdf\xd5\xbfCIx\xfe?_\x12\x9e)\x07\x0f!\xfb\x8e\x9d\x96h\xf4WY\x1a\xadN\xd0\xa3\x112Bb\x1e}\xc4\x9f%/\x8f\x97Vs.!\xc7\x1at\xb0r\xc6\x8cs\x06P\xcf\xa3\xc3\x9d\xdd\xb4\xa7\xe5\xc8G\xe1\x86 \x0e\x11U\x02(K\xe9\xc5A\x08\x1a\x06\x91\x03A\x84a\x87,\xd4\x01/\xe1q\x18\x05\x1d\n`\x0e\x99\x90\x83W\x1a\xa6!\x0e\xab\x00\x87,\xbc\x01*o\x1c\xc6@\x83\x1br\xd0\x86\x90\xe0H\x02\x1b\nc\x0d$\xa8\xa1 \xd2\x10\x05\x1a\n\xe1\x0ck`\x86d\x94\xa1\x00\xc8P\x18c\x88@\x0c\xc5\x11\x86\xf3\x00\x0c\xc5\xf1\x05:\xbc\x90\x87.\x04\x1a=\x06.\x14\xc3\x16h\xd0\x82c\xd5\xc4?\xbe\x16\x06\x16b\xb8\xc2JX!\x80*D\xa7'QL\x816\x7f)\x8b(\xc4\x00\x85x\x99\xf2\xe0\x84@\xb8M\x0cM(\x08&\xac\xc0\x12\xdc0Q\x08J(\x8b$\x84\x81\x84\x128\x02IO\x8f\xa0\x08d\x10!\xb8\xd3}\"\x84\xe0\xf7\xe5\\\x9f/\x82\x1f\xa44\x16\x15=\x88\xb7 \x19;\xc8\x80\x0e\xdcZF!\xe0\x80\x84\x1b\xc4a\x03\nj\x10l\xc5T\xcc\x80\n\x19\xf8\x10\x83\x02\x80A\x02^\x90\x0f\x17\x04$|*XP\x18+\x08\x94\xc8\xd9S\xb3\x80\x02\xb3\x02\xeb\xf0\xe7\xc1 \n\xc3\x04~\x94 \x17$\xc0\x15\x01W\xc1\xdd\x18AY\x88\xc0\xf7\xe1\x17\x05\x08|\n\xa7\x0f\x1e(\x8b\x0e\xe4\x83\x03\x1eH \x0b\x11\x88\xe2\x00i0\x00\x19\x05H\x04\x01R0\x00/\x04\xb0~\xe7{\x1a\x00\x90(\xff'\x88\xff\xce\xaa\x95\x15\xfe}\x0f\xc5\n\xd1\xdf\xb9N\xe1\x95\xfc\xf3\x04\xff\x90\xb8_^\xda_\xdf\x93\xc8\xb2>U\xd4_\xbe\"qk\xee\xa4\xa0\xc5\xc8\xc7\xa3^\xfa\xdf\x8b\xeeagv\xfenoA|\xad\xfbA4\x9b\xe5 x\x807\xd9\xbbv\xa6c\xef\xab!\xbc\xa7\xb8\xa7\x16Y\xcb\xff\x94\\\xfa\xe4\xaf\xecx8\xf8\xb0*s>%g~\xe1\xc2\xa6f\xc8\x8f\x7f\xbb\xe7f\xc5W\xd9\xef\x1d\x0e \xf9\xf0\xb32\xe1\xeb\x8c\xf7\x0ew\xb1\x1c\xf8I\xd9\xef\xe7Y\xee\x1d\xde(y\xefs2\xdec\x07\xf4\x97>\x96\xeb>+\xcb=f\xb3w8;\xcdo\xef\x93\x16\x1d\x11\xf0\xa5\x02\xe0\x97\xb5\xe4pxe\x1c\x0e\xcf\xe1\xf0\x93q8<\x87\xc3O\x96\xa3\x19{\x9dq8\xfc\xa9\x15\xd2\x8f\xd7)\xc8\x19\x1ar\x11\x15\xb9\xb8\x8e\x1cU\x92\xcf\xa0%\x9fKM>\x83\x9e\x9c\xa2(\xe7j\xca\xc11<\xa6*\x17\xd4\x95\xa9\xcar\xa2\xb6\\\\]\x8e\xeb\xcb\xab\x15f\x0e\x87\x8f\x96,Oqv\xba\xe2p\xf8\x1c\xed9\xa6>\x97\xd1\x9f\x89\xa2jT\x83NP\xa1\xa3a\xc9\x89J4\x87\xc3s82\xf5P\xf7\x1bq\xec\xe9\xc5\xae\xad\x9e\x8c\xd3T\xf4uo\x95\xcb\xb3N\xa5\xd65=\xed\x13\xbe+\xca\xbc\xf7FY\xe4\x0e)\x8b\xdd'eS\xc3\x86\x8e\"\xb5\x9f>P)\xe1J-\x1cU}'\xdc\xb8\xb4[Q\x0d\xc7.\\^J\xeb)\x8b\xb4\xa1\xb2\xd4j\x05\x96\x04\x95\xed\xea\x1e\xf5$S\x97q\xf1|'\xa6\xcd\x0c\xc6\xd5\xbe\x883B\xabQ\x96\x05\x95i\xb2A\xa9>zZ\xaco\x8f\x9c\x9ei\xe9\x06\x17i\x876\xe0\xa7\x11w\xedP\xab=Q\xd4\xc0\xfaEtu\xafv* \x9c7\xcc\x81\xb0\xfb\xaa\xd9\xf6\xf7\xd5\x83s\xb1\x13H-\xae\xaf\x8d\xb5\xd2sh\xbd\xaf\xd0P\xefjU\x11\xd8\xcaw\xe3\xben\x04\x88f\xd3\xca \x8c\x7f\xad]\x89>\xb86\xda\xa3\x06\xe8=rs_5\x8d\xd8\xe1R\xa1\x9ck\x8b\xa1\xd7WU\xfb>\xcdF \xa7\x17\xcf>\x19\xca\xe6C\x91R(4\xe1\xaa\xbfN\xac\x96\x14\xcd\xd6\xdb\x86\xf1\xee-\x9a\xe3\xde\xff\x94\xbc\x84\x8f\x9f~\xfe\xf4\xe6\xfa\xf3\xdb\xab\xb7W\x9f\xae~\xfe\xe7\xd5\x7f\xbdy}\xfd\xf9\xed\xc7\xf7o.\xaf\xfe~\xf5\xe6u\xf4Ly^\xf4\xa0O\x1f\xfe\xf3\xdd\xfb7o\xa3\xc7\x05\x0e2\xd0KV\x81q\x0b\x1d\xd1\x1d\xaanx\xa2\xdd\x13\xeb\x045\x8f\xc8{U\x90\xc6r\xcaH\x1e}\x01\x02\xad;@\xd2\x98\x02K\x18D\xbf6[\xa3\xaf/[)\xe8\xebt\xee\x89\xf4^hP\x01B\x0b\xcf\xc8\xd8?\xbc\x81f\xcf\xad\xab\xa1\xc2\xb5uv5\x8f2cL1\x90\x94\x86:t\xe2\xb6\xfe\x1al!5*o\xda\xfd\xbe\x1e\x90\x93\x19\x99Zy\xea4<%\xdcy\xc2#\x00\xc4\xc7\x00\xd4&~\xd7\xf1\x8a\x00\xfdvC\\;\xa4\xf4\x88+\xd3\x13\xb6\xd3\xe7\xc5\xf86\xb6\xbf\xb3\xf4M\x1d\x97\x8b\x83N\x0f\xcdG\xa2\xcdV\x8c\xee{\x1d\xbd\xc3QM\xd8Gv\x1a\x1b\xb7\x82\xd4,\xe7\xb8+$\x1c\xaa^\xcfA\xd4\xde\x91\xbf\x1eE?\\\xa8\xdf=\xce0 \x03\xdd\xf8\xb7\x8dt\x9c\x8a{\xbf\xadl\x808`\xed\x1d\xe8\xc6\xad\xe7|{\x11Zd\x85\x8f\x13\xb4\x9b\xc8\xde\xc5\xcfs\xf8c\x85;\xd2\xbd\x80z\xe8\x0d\xc3\xd3\xc3\xb1Q\x8f\xd3Va\x0d\x8f\xb5\xa3\xab\xc5\x9fT{\xa7OU\xab\xd9*X\xdd\xc0\xdd\x87\xf7\x97\x13\xb4\xab\x97\x98zx\xbc\x17\x9d\x13\xc0v#b\x9b\xb6S>\x10\xa7\xebT\xe5\xc7\x05\xab\xfbJm\xd67k\x19gs\x983>\xb6\xfb\xa9\xdcA\xe1\xa5\x13\x07\x81o\x8f_\xaan\xbcI\x91U\xdcy\xb3`\xcf\xf4\xad\xe3.5\xa4H\x1c\x85\xea\xf47\xbbv\xf3p\x86]\xdb8d\xc2a\x1c2\xc1!\x13\x7ft\xc8D\xb8#\x99\xe4\xad\x05B&\xe6\xc1\x12\xcb\x9a*\xe1u\x9a\xd7p\xf0\xc4I\x03q\xf0D|\xd0S\xc6\xc1\x13\x1c<\xe16\x0e\x9e@\xe3\xe0\x89S\xe3\xe0 \x0e\x9e\xf0\x19\x07Op\xf0\x04\x1a\x07Op\xf0\x04\x07Op\xf0\x842\x0e\x9e\xe0\xe0 \x0e\x9e\xe0\xe0 \x9fq\xf0\x04\x07Op\xf0\x04\x07OXV\x02d\xe7\xe0 4\x0e\x9e\xf8\x1e\x82'&n\xe5\xe2A\xd8o\xc1\xd9\xc7\xe4\x82\x0b\xd1 H\xa5\x87\xd0N\x0c\xc7\xaeQ\xd0\x80\xad\x9f_\x8c\xd4\x08.\x05\xdd-\xd6LP\x11W i\x88\x04\xb9\x80w\x0d*\xc9\xf8\xad\xd8\xde\xde\xf6b\x90\x9f_\xf3\xe2\x82\xb5\x94\xdd\x8bY\xaa\xc5\x9c\x1c\xa0'\x8b\x04\xce\x85\x01G#\xaa\xf2\xf9\xdaq\xf1Q\xae+\x83M\xd9\x1c\xf7\xa2\xab7\xe6o\xf8\xb4\x19\xd0\x17WE\xeeEc\x1a\xfe\xd8\x8c\x0bQ\x8b\xe9\xe7\x15z\xdb\x89\xbe\x9f\x9aP-\xdd\x1cQ\xd1|\x10\x89\xed9w\x7f\xe6\xc6\xf5\xe4\x9c\xb5\x9awW\xefkj\xeb\xe2\xb1FI\xf5A;j\x91\xd2\xee\xc1Zw]\xee@\x7fPK\x12\xf6\x9f\xaena'n\x07\xbd\xfaU\x0fj84\x93F\\_U\x0f\x88\xba\x88l\xe7\x9b'\xc5\x02T\x87\xc3\x1f\xd8\x8a6z4\x9d\x1fjK\xeb\x0c\xd9\xa2\xd8C[\x0c\x81B\x8c\xa0n\xb6\xf5F\xc1\xf2\x1a\x06Q-\x88\x07\xea\x8ed\xbb\xab\x9b\xcd\xee\xb8]L +u\x95Q\xeaZ\xdc1\x14N\xad\x15\xd8[\x84\xd2G\xean1\xb8|\xbe\xea\x17wkQ\x05\x9cEw\xa2\xd7\x127>^\xd3\xf3(\x1f\xb9\x0b\xfd4\xd5w\x0d\xa6\x1c\xb6\x9d\x99\xa7q~ \xd52ko\xec\xda\xfc\xc3\xb3\xc4\xc36\x13\x1cJ>l\xc1\x9acTY\xb3\x08(\xb3\x19|O \xd9\x0f\xa6\x8a\xcf>\x8e\xcc\x0bjY\xf5=\x85\xdd\xc5H\xb0\x05\xa2V\xbc\xe5\x82\xa8\x8e\x1f\x01\xdc\xa3+\xd8\x85\xa2\xbb\xc2\xb1]C$6)\x18\x93\x14l\x1ce1\xd4\x01\xc8\x11]\xd1\xf6\xd2\x87\xe5FsQb\xb9b\xad\xa5\x8c\x10\xc7\x95V\x99\x08\xb0_0\x82+\xdaN\x14]\x02Rc\xb7\xa6\x08-\xaf\xbf!!rkH\x8a\xdb\x8a\xb5q\xe1\x98-j\xc4\xd6\xdax\xad@\xb4V\x99X\xadh\x17\x0e\xc5i\xe5Fi\x11b\xb4h\x11Z\xd1\xf8\xac\x15\xd1Y\xf1\xd8\xac\xb3DfEG\xe3\xf8XL\x88\xc9\x8a\xdevH\x18%JFce\xc4b\xc5Z\x94\x1c\x87u\xe6FY\x13\x81\x95\x11\x7fE\x8d\xbe\x8a\x85,\x95\x8f\xbc\x8avq usH\x88\xb9\"\xddZ\x88\xe1\x06\xf1{?\xcd\xbb\xdf4[+\xc8\n\xc7e9\x93V\xb5\x96w_\xe7\x810w\xc8\xf9J\x97_\xac\x0d\xd2\x1e\xae;\xdd\x8bC\xd5\xe1x\xdf\x88\x0bx\xfb\xee\xd3\x1bD\xeb;\xa1\xc0+\xfc\x9e\xba\x11\xf0\xbfu9\\\x17\x98\x95\x17\xbf\xbdE?T7\xbb\xbawR+\xb3h\xb1\x1b1<\n\xd1\xc0\xf0\xd8\xaa\xaa\x9c\x10 \x7f\x81\xed4:1t\xb5p\xc1R+\xbe)86\xc4a\x1c\x1b\xc2\xb1!\x7f\xaa\xd8\x90\x12\xa1!\x81\xc8\x10\xf8E\xf4\xe3\x9e\\\xf3\xc9\xc3\x0b\xa4\x12\xd5\x8a\x9d|\xbb\xa8\xe1\xca\xadb\x9b\xdd\xbc\xba\xf6\x04\xa6\n\x8ew\x1c\x99\xc2\x91)\x1c\x99\xa2\x8d#S82e2\x8eL\x1982\xc5m\x1c\x99b\x8c#S82\x85#S\x88\xb3$\x8eL\x19\x8d#Sl\xe3\xc8\x14\x8eLq\x18G\xa68\x8f\xe1\xc8\x14\x8eL\xf1\x18G\xa6pd\nG\xa6pd\x8ae%\xa2\x0482\x05\x8d#S\xbe\x87\xc8\x94\x19FcyZpP\xa3R\xa5\xe9M'\x8dx\xa6\x8d\x05J\xe4\xec\xa9Y\xb2\x93\x91\x98\x1c\xfe<\xa2Sa\xc9\xc9/8\xe5\xcaM\xb8\"\xe0*\xb8[l*+5\xf9>\xfc\xa22\x93o\x1d\xdc'1\x95\x15\x98\xf2\xe5%\x8f\x94\x94%$EE\xa34\xc9\x88,\x18%\xcaE)b\x91W*\xf2\x97\x86\xbadO\x93\x89\x12E\xa2\x04\x89\xc8Y\xb5\xb2\xf2\x90\xef\xa1X!\x0d9\xd7)\xbc\xc2P\x9e,\x14\x92\x80\xca\x0b@\xeb{\x12Y\xfc\xa1J?\xcbWd \xddg\xf0#r\x9e\x99\xf3\xea\xb5{Y~\xbet\xbfp\xc2\xe1\x9a\x1c\xae\xa9,\xad\xb0\x1c\xae\xe9p\xc7\xe1\x9a\xcf'\\s&\xc3\x16\x89\xd8\x9c\x0b\xc9\x1c\xb4\xa9\x8c\x8369hs2\x0e\xda\xe4\xa0\xcd\xc9r4k\xaf3\x0e\xda<\xb5B\xfa\xf5:\x05;C\xc3.\xa2b\x17\xd7\xb1\xa3J\xf6\x19\xb4\xecs\xa9\xd9g\xd0\xb3S\x14\xed\\M;8\x86\xc7T\xed\x82\xba6U\xd9N\xd4\xb6\x8b\xab\xdbq}{\xb5\xc2\xcdA\x9b\xd1\x92\xe5)\xdeNW\x1c\xb4\x99\xa3}\xc7\xd4\xef2\xfa7Q\xd4\x8dj\xe0 *x4x.Q \xe7\xa0M\x0e\xda\xa4h\xe4\xd1VM\xd5\xc9\xe9J9\x07m.\xac\xb0n\xceA\x9b\xb6\xe5\xaa\xe8Ng\x1c\xb4\x99\xa0\xa9\xafQ\xd5\x9d\xee8h\xd3y\x02I\x87\xe7\xa0\xcdr\xaa<\x07m\xae\xd6\xec\xcb\xf49\xb2nOW\xee\xff=\xf7\xb9=6w\xf5\xcdN\xc0\xd0>\x88\xc6= \xb9\xa9zq\x8d7\xaaT\xbbH\x8f\xf3\xde\xac\x8b\xd3\x89]\xf5$\xb6\x84bQ\xdayz\x0e\xe6s\xae\xd3\xcb\xcb\xd6\xbb\xba\xfc\xf8\xbf\xff\xd7xe\xa7C,M?N\xfd\x9d\xc7\xe8\xf65\xf7\xa2n\xd4\xb0!\xaf\"\xefy$\xbe\xc5~\x1e\xa0\x13\xc3\xb1kN\x9f\xfd^=\xfc\xb6\xef\xa5\xdbCu\xa7\x0f>\xbdg\xb3\x0bN\x07\xcez\xa3\xf5g\xfd\x15\xe1\x1a\x04\x94\x05\x1f\xb8\xf0\xe3\xd6\x88\xaf\xc3\xf5\x83xZI\x10y\xd7y}\xec\x861s}\x83i\xc8\xff\xd4\x82G\xd5\xf7J\xd5y_\xdd\x89\x0f\xe2\xd7\xa3\xe8\x87\x0b\xf5\xbb\xc7\x99\x1c\xaa\x15L$\xdd\xca&\x14\xb0o\xfb\x01\x04\xca\x08\xa8=\xb8\xc6\xabv\xa8r\xe3\xcd\xe9\x08\x95w(\xc2\xcbc\xfd\xf1?4\xa3\xd3\xde\x8e\x02\x96\xa5\x96\xf8\xb4\x7f\xbb\x896\xed\xb1\x19\xae\xd1\x99o\x10z\xacz\xe8\xc5\xf0\x02\xea\xa17\xba\\\x0f\xc7Fu\xc0\xad\x92*\x1e\xeb\x05\xf1\x14~\xe2\x174N\x9f\x0f\xe0\xd8o\xdf\x0f\xef/\x97\x95P\xdf\xef\xd3S\xc0\x0c\xceI\x03}\xef\x0c\xce\x19\xe4\xab\xd0\xe4\x7f\x1a\xab\xe5\xf8\xe4\xeb\x87\x8b1P\x0fz\x95~\xfe\xd4\xab\x06\x15e\xfd4\xeb\x1e:\x8e\x908,\xde-\x04S\x1c\xf2\xf4\x94#0\xea]\xc0\xbb\x06QR\x9cw\xb4\xb7\xb7\xbd\x18\xa0\xed`^\\\xb08\x96^\x0c\xf6\xc3!g\xef\xbf\xea\x99\xb5\xb1i\xfa~[\xed\xfa\x84\xf9\xfb\xecm\xe1hDU>_;.F\x1e]\x19l\xca\xe6\xb8\x17]\xbd1\x7f\xc3O\xedM\xd5\xc8\xfa(I\xf4^4\xa6\xe1\x8f\xcd8\xae.\xd6\x9e\xaf\xd0\xdbN\xf4\xfd\xd4\x84J\xb7=\"\xd2\xf8 \x12\xdbs\xee\xfe\xcc\x8d\xeb\xf9.\xb3\x9awW\xefkj\xeb\xe2\xb1f\x08\xf7\xbd\xa0\xd4\x0b\xdb\xee\xc1z\xc0_\x86Q\x1d\x94\x1ei\xff\xe9\xea\x16v\xe2v\xd0\xd2w=\xa8\xb5\x10\xb3b\x8cp\x85z@\xd4Ed;\xdf<)\x18\xb8:\x1c\xfe\xc0V\xb4_\xb3\xd3\xf9\xa1\xb6\xb4\xce\x90-\x8a=\xb4\xc5O_\xe4\x88\xebf[o\xaaAL4\xb8jA\xea\x86\x0b\xf64\xd3\xba']M\xe8\xcf\xb0B\xb3\x9aU\x1fw\xa73\xbb\xd94\xc0v\xb6\xdbY\\\x82\xa9\xb2J\xa7\xd2\xe32\xe1V\x1cv\xed\x93\x9ca\xbcj\xda\xad\xe9\x8eb\xd8\x98U\xcb\xfaVG{\xd5=FD\x8e\xed\xa6SA\xe8\xd6\x87Y\xf6\xbam5T/\xfb\xa1;n\xe4\xfc=\x17\xc3\xbd\xe8\xf09\x98j\xdc\x08\x10\xcd\xd0=\xc1\xcf\xcd\xd3\xbb\xdbSF\xa7\x13wU\xb7E\nN~\xe6\xb6\x8f\xb0\xaf\x9a\x91\xd5\x91\xa7\xea\xb4d\xdd\xc8\x1c\xe0\xfd\xbd\x11\xf7\xd5\x97\xba=v\x9a\xd8\xda\xd6\xfd\xe6\xd8+~\xc1\xd5Q\xed\x17#\xa1\x9f\xf2b\x0f\xda3\xff\xd6\\\xfd\"S=e\x1a\xf2\xc7\xfe\xf2z\xfc\x13\xb9\xcbL^f\xf9v\x13\xfaM\xfb\xd8,3\xc2z\xdai\xdb\x8b_I\x07zQC\xddtS=\xaf^\x9b\xf6\xc3b\xa86\x13\xbf\x1e\xf1\x01\x9fE\xf8-6\xf4s^Y4\xc7\x19\xd1\xf3\x12\xea\x06\x87\xa4\xd9\xdf\xaa\xcdP\xcfr\xe8\xbc\x84\xcd\xae\xb5!$\xa3\xc0\x9d\x9c\xee\x17\x06\xc7K\xfd\x04\xef;q[\x7f5\xb8q?T\x9dJ,\x0b\xffK\xbe'd\x19/\xe0c\x0b[\xb1\xd9U\xb2\xf8\xb0=\xee\xf7\xf6\x94\xf0$\xb1\xb1)\xb3\xddr?\xe3_\x10x\x18\x84\xd9\xc7p>\x958\xad\xe9XU\xdb\xd3%\xfe%\xeci\xd1@\xe3# \x0f\xad1E\x90\xac\x97\x0e\xcd\xed\x84\xd1]\x95\xaf\xf6\xd6r\xa5}\xe8P\xca\xdcI\xc4Tz\xd3\x7f\xb6V\x9fza\xb6ul\xb6czX-\x08\xfeH{\xfe.>N\xdd\xed\xa4dv7[v\xb1E\xf7\x9au-g\xb7rc\xf4\xab\xbb\xd3\xbc\x13\x95\xe9@\x05:\xcf\xba\x8eC\xb8q\x7f\xafw\x13QD\x18?\x17\xa3\x9f\xa3\x17\xceG\xbd`7\x9d\x8dv\xb1\x01\xebd,\xd4E\x1f\x11\x97[\xfd\xef\xa3\x0e\x15S\xff\xb6Z\x84\xf8.\xb9z\xfd\x87\xb7F\xe6\xb8O\xa8\x9c!0\xc8U\xdc.\xde\xb1\xce\xd3\xdc\xa7\x82\xff}\xeb\xf5\xe2\xf7\x04\xeew/\x84^\xab\xaewp\xe4\x84`\x18_\xe6}1\xe6\xd8d\xd7[\x92\xe5\xbb\x19<\xefgp\xbf\xa3\xc1\xf5\x9e\x86\xd0\xbb\x1a\xa2 \xcf\xeaAv\xe1\xcf\xb5!A\xa1\xa1w\xf2\xb6z\x086\xb6n(6v\xf2\x1e\x07\xca\xb4\xd0\xf9\xe5\xb1\xea\x9d.\xed\xaek\x8f\x873\x7f\x83\xe05\x1c[[x\x1f\xfe\xf0z\x9dg\x00\x88<\xd1\xeeA rR4\x9e\xf7.\xe8\xd5\x07n\xcd\xd0\xad\x13\xaf>\xed\x13\xe0\x1f\xb2!\x17\xc3\xcd\x0b\xbb\xcb.\x86\x1d\xbc\xf1\xd8\xfa'\xae\xfc\x03\x94s\x88\n\xb6\x93k\x98\xf2\x0fT\xf2\x97\xf6\xe0`\x10_B\xdbm\xc52(H\xfd\xb2\xaf\x86\xcd\xbd\xf3\x97\xba\xe9\x8f&(\xef\xfa\xf6\xd8lO\xb3Q:\xc7\xc0\xc8(\x18\x1b\x07W\x8d\x84\xa7\x9d\xf3t\xfai_H6\xd7O\xea\xee\xbf;\x88\xc61l\xe1Mv7\xeb\xd4\xae\xc6\x85\xfa\x97\xdf\x8b\xe7.L\xb7A;\xfaw\xf5/\xaf#\xdfMs\xde5\xed\xf3\xca\xfa\xe1\xef\xf2\xef^\xef\x84\x1bo\x0d\xfd\xe8\xdc;\xea+\x8f\xce^\x92<\xe4\x9f>oj\xfc\xeb\x0fbSh\x04D\xde?u,\xebN\xa0\x18\xd7\xc9\xce\xb2@\xa4<\xe0\xc6g\xe6\xe6\x1f\xd6\x8c%s6^O>\xfefn\x91\x1a\x03\xa1\xd6\xe0!u\xe6\xe6z\xa9\x9e\x9a\x97\xa4\x9d,\xf2\xb2\x1a\x0f\x8b65\x8c\xe5&.\xc8\x87=\xb9\xe0\xa0\xc5!\x0eThn\xcf\xb4\x91R\x85\x81\xa0\xb7(Q5\x99O\x11\x9d,\xde`\x91\xc6\"\xf4\x7f\xda\x13\xe0\xd5P'#\xde\x94 \xb4\xad\x8c\xe4)qy\xda\xeb \xb4[K\x063\x15j\xe5\x89\xa5\x9a\x9b.\x89\x8f\xac\x9a\xdb\xa8\x93\xfaGx_\x87 t\x96hG\x89w\x92`\xc1\x94E\xaf\x02\xa4+\xc1\x92\x12s\x19\xe9Z@\xbe\x1e\xb8 3\x97\x91\xaf\x0cIW\x07\x1f\xce\xe12\xd2#d[4\xad\x93m+T1\x9f\xc5\x07\xc3\xc9\xe2\xc3\xe2d\x84\xb7\x89\xb2\xa4\xbb\x96z\xdf\x08\xc3\xe7d\xc9\xf7\x8e0\xa4N\x96\xe8}\xf50;s\x13y\x15\x03\x19\xeb#\xf7\xa6\xc0\x81K\x10\xd0e\xe4^A\xef\x0fn\xb6\xcbe\xe4\x8bCR\x01\x80\x07\x12m<\x90\xcc\xed/4\x90\xd0\xc9Mr\x7f\n\x1cx\xc2z\xba\x8c\xdc1\xe8]\x82\xc7\x92\xc9x,I\xbco<\x96\x10\xc7\x92\x14\xa6\x89\xdc\xa3\x02\x07:p^\x97Q{\x1c\xa9\xb7%\xf44j\xb3A\nA\x1c\xf5e\x13\xc6.\xa3\x94*\x8bD\x0e\xf8s0\xca6\x9d\xec\xb2\x1cb9\xe0\xee\x84ev\x19\"\xa7\xfe\x0e\xa0n\xbd_\xc9R\x16\xd2\xb3\x8c\x1d\xba\xda\x95\x1f\xcc\x18\xa9\x8f\xd1\xc6\xb0`jle\xc41\xa5\xda\x87[\x07\xa8\xaebj\xd2d\x97m=e~\xaeT\xbe\x0e\xbd\x0b\xdc\x1e\xc4\xc6\x94XINf\xffE\x95E\xfc\x87\x93\xd3~\xfc\x87:\xcc>\xa7\xde\xda\xba\xfe\xdc\xc3(@\x99\x9a\xaec\x06\xc7\x8ez\n\x0f\xd9oU\xcd\x14\xcc\x81\x07{\xffB[\x13\xd3\x07\x87P%\xac\xb4*\xf2\xc9\xa8p:\x02\x9c\xe2\x05\xce\xa1\xe4\x8f'y]\xb8\x80\x7fxuw*\xd7\x8b,\x1f\x0b\x18\x7f\xb1\xbc\x9d\x89 ^h\xd3.\xb1\xdf%\xf3G\x04\xfe?\x01\x86\x9c+\xde\x17\x90\xed\x0b\x08\xf6\xdf@\xaa_%\xd2\xaf\x92\xe7]\xc2|\xc2\xd8q*\xc3{F\x04\xbf\xf4\xee\x9d\xf4\xf8':\x01\xa1=4\xcbM\x16\xd7\xad7\xb4\xc3\x9dSV\x0fN\xe1\xc2S\xb7\x90\x88\x1e\xfb\x94 ~\xc2Dgg\xba\xd1\x92\xd4\xf0\xf0\x97ZH\xeb\xfe&u\xf1\xce/\x93\xd5\xec\x10f\x11k\x8a\xd0\xfaH\xa8\x19\xce\x95Q,\xb0\x9e\x11m\xd85\xc9\xc4V\xacG\x9c\x9cJ\x97\x9a\xdd\x922QL\xf6\xa8\xb5\xbe\xbbV2\x1a\x9b\xa0`g\xf7\x80\x80,L\xf8\xfa\x8cy\x07\x8a\x08L\xb8\x0e\x10\xaf\x05\xb4\xd5\xd5h\xdf\x9e\x8c\xb8\xa2Zt-\x95\xb6\x8a\x1a\x1b6\x95\x11\xd6\xb2\x88\xedO\xbf\x03\xc4u\xd2\x84\xbb@\\\x1b%{\\1\xfe\xcc\x1cP\xd5\xd7\xd82fXY%\xdc \xca\xad\xa1h\x1f\x84K\x01\xf1r\xc0\xcf\xe2\xc2\xf8Yt\x1eX\xe8Y\xa4\x0b\x98\xb1\xa71\"N\x12\xee\x11\xe5\xee\xf0\xe3\xc8\x8f\xa3\xcf\x12\xee\xc2s}\x1cS4\xc0\xd8\x03\x19\xd5\xf7\xe27\xbc\x04\xf7\xabk\x96 \xd2\x05D\xb8\xf0wi\x96\xf0\x06S\x12\x94\xb9\x91%\xb7bb[Df\xf3\nl\xea>\xe4\x05\x89\x05\xe4\xb4\x95\x1fI\xeb\xf6\x95\x0d\x0bf\x91\xd3)\"Y\xa2<\x16\x11\xc1\xb2\xe4\xaf\xd0\xbe\xef!\xe1+U\xf2*(v\xc5d.\xef\x8d \xaa\x10tQ\xab\x84\x9c\x15\x96\x8bVd\x9f\xb0V\xde\x97\xb2\xc4R\x92\x08\xc8\x11\xcf&mE\x8e\xe0\xb0RlX)4\x9cYd\xc8\x16\x18\xb2\xc5\x85pW}\x06\xc9%\x96R\xa4\xfbUt\xfa\xf0\xcf\x9e\xe3u\x92\xa3\xfe%\xfed\x7f\x1c\xf5\x19B\x83\xcd5\x19Gs\xb8\xb5\x18\xe7;\xd3\xfd\xa6\xf4\xe8/\xa6\xaf\xac\x90YNE\x15\xef\xab\xdc\xff\x12\xf7 )\xa1Ycd\xc5\xdd\xf3\xbe.+\x9c\xf8D\x93\xb3\x95\xdb9\xbf\xc8\x13H\xfc1\x92\xce\xear\xb2S\xef\x97UQ\xc1\x83 v8\xd4\x06\xd7]X\x9b\x01\xc3+jd\xdeE\x8f\x90\xb1r\xe6\x1f\x14/\x08\x1f\x8d1\xff\x10_\x95\x89~_(#\xac\xc6\x14[\x89\x89\xaf\xc2|\x9b\x0frJ\xeb\x12V\\\x88-LXi!y\xca\x1c\x07f'\x97\x10\x1e\xfc\xa2\xc3\xca\x87&\xb6\xb2I\xb8\xb7\xb1K\x00?7n#\xb4-\xadu\xff\x9a\xcfM\x19\x91 \x10\xf0\xa333~t\xfe\x7f\xf6\xde\xbc\xcb\x8d\x1b\xc9\x17\xfd\xdf\x9f\"\xae\xde;#\xe9v\x89\xdaeK\xf7z\xce\xd5\xda\xaen[\xaa\x91J\xee;\xdd\xaf\x0f\x05\x92 \x99V2\x93\xcaLV\xa9<\xd3\xdf\xfd\x1d,\xb9a\x0dd\x82j\xd9\x9d8s\xa6\xadb\"\xb0\x05\x02\x81\x88_\x04\xcc\x059\xc3_\xd3\xd6\x89e\xd0w\x1a\xf3\xdd\x8b8&\x1fC4\xe3\xbd\xfd\xae\x14\xcfh\x8f2\xd8G1\xd6;\x0c\xf5F#\xbd\x98g\xb3\x81\xden\x9c7\x1a\xe6\x07*\xfaVc\xbcs'\xd8\x8d\xf0\x8ej>\xe3{<\xc3{T\xa3\xbb\xcd\xe0\x1ebl\x8fdhw\x19\xd9\x8d\x13o\xb5\xafa\x0d\xebV\xc3\x99|\x04\xff\x9f\x9f\xf1\xb5\xcf\x84\xd6]`\xdf\x03\x8e\xe4\xb1\xe0\x13\x85\xee\xf3\xcb\x9aG\xd2{\xce\xd8rIz+z\xf3I\xca\xf5\x1f\x9a\\\x16l\xd9\x1b==3gp4\x87r\xb4\xbf\x99\xd3\xad\x9a\xa22\xea\xe2I\xb9\xe8\x17B\xa3\xdc%\xa6\x95t%^\x84\xc8\x89h\xa1\xe7\x8b\x18\x9d\x8c\x16`\x80\x87\xc2\x98\x90\x16lIi\xc1\xc78\xde\xf7\xa0F'\xa8\x05C\x92Zp(O1\x8d\xa5zdY[F\xde}\x1c\xc2\x07!E\xec\x02\x08Q\xd9+\x84\xc0\x91\xd8\x16\xbc-!\\\x8a\xe6\xd0@\xee\x0c\x99\xd2\xb89\xa1\x01\x91\x17\x1a\x02z\x18\x88x\xf3P\xabj<\x1c\x0e\xff\xd6/ah8\x0f1\x8e\x95\xf3\x05\xb1\xb7\xc5\x93/\x1a\x1a\x16\xf1\xe5\x8c\x06\x84\x9b\xb8.\x9e\xdc\xd1\x10\xc2\x97xY\x89\xc8#\x0da2\x0b\x93O\x1aBHb\x9c\xb1m \xc4\xf0\xa1\x06\xe3\xce/\x0dC\xf0~\xbe\xad\xd3\xa0\x01\x11y\xa6!\x10\x0b\xd8/\x18\xd9\x10\x86\x1at\x10\xaaw\xb1\xf1\x13_\x04\x7f[\x10\xbc\xe3\xdbv\x810DC\xd5Q\x91\xfeu\x89\xf7Pvo\x01#&\xb3\x86^Bk\xbd9\x0b\x0e\x93\xf1~Q\xff7\x1b\x10?\x08\x18_\xf3\n\xb7;\xa8\xa9\xb7g\xcf%-\xc9\xebx\xd4g9\x02\xf6\xd9\x91\x8d&-bl@\xa4\x0d \xea\x14\xe3n\xa0\xb4\x13&\xea=\x1e|\x87\xc2\xd7\x8d\xd7\x8a\x00\x1b\xfdg\xa0\xa0\xec0\xc9\xdf'D)6\x984:\x9ct\x00j\xc7\n(u@J\xbd,\xe5\xb01D\x05\x96\x9a\xa1\xa5\xae\x8b\x93\xe5\x9a\xe4\x94.n\xd9\xe2\x02\x99z\xc5\x96\x8f8\xf8D\x97w)\xc0#\xbeP\x04\x10\"\x0c<\xa0S\xec\xad\xc2\xa7\xda\xf8u\xba\xc8\xe0S?\xfc\xd4!z\x11\xb3k\x17\xbf>\x01\xec\x04\xa2\xfa\xa0\xa8>0j\x00\x1c\xd5)\xedQ\xf2\x1e'\xf1\x07\xc8|\xdb\x86pe`RK\x0chjdpjdx\xea\x17\x06\xa8F\x83\xa8\x0e8\xeel\xfb\xdc\x0dS\x8d\"\xc7]`U\x84\x9c\xc0\x01V\x11=\x05To\x01\x0b[\xf5\x0b\xe4\xba\xc4\x85\xae\x86\x80W\x91\xb3\x02\xe8\x99\x014\x84\xf5\xa8V\\\x84\x81 \x02\x16\x08\xa2\x83Y\x03\xec\xe28@\xebon:cB[\x87\x81[\xf1\xde1\xec\xd4\xa2\xa6\x15\xbd\xe3B\xf6\x1c\xda\xeb\x15\xb4\xa0h/W\x00\xd5H^-,\xaf\x85\x82^}\xbd\xb7=@\xd2\xfb(\x14\xf8\x8aB\x93b\x98\xd0\xcb\x80H\xe6\xc32\x1e\xa2\xdb\xa2 \xdb\x85\x80\xb6\x01\x0b\x85\x0dj\x1d\x02{\x00a\x80\xd8\xe0\xbe\xc0\x80\xfe@(^\"h\x03wK0f\x02\xbfq\xdb\x12\x0f7\x11\x82\x9c\xc0\x9f\x0em\xc1l\xd1~\xf1n\xd8~\x19\xc0<\xc3\xd8\x07}\x9e\xb4e \x0b\xa1\xcf\x98\xb6\x0cj)\xd2\xb9\xd3#\x86d\xe2\x88\xc0\xd9\x00\xbd\x11\x0f\x9e\x0d\xe6\xabP\x8e\nC\x93\x05w\x07\x06t &\x19i+\x93\x8c\xc4\x96IF\xfa\x89!\x998*\xd46HJ\xa2\xe1\xb6\xc1\xac\x15\xcaT\x93\x98\x9c\xc4d]&1\x19\xceB\xff\x02b2287HP\x06\x00tC\xf97\x80w\x83\xf96l\x82\xf1P]$9\xe7\xfbQ\xdd\x82\xefg\\\xc0\xae\x98\xd2\xc1\x90\xdd\xc8\xa0\xdd`\xd8.\n\xb8[\xb3\x8d\xcf\xc9.\x8a\xdf\xd5^\x17\x04|7\x88cC\xe4+\x12\xc4\x1b(\xe3\xb0@\xde \xb28'v[\xe2\xc2y\xf1\x80^,\xa4\xd7K\xc6\x98\xe2\x13 \xea\x1d\x03\xeb\xc5J\x91h\xd0^\x0f\xb87\x04\xde\x8b\xe4(\xff\xe6\x1c\x01\xf2\x8d\x0b\xf3\xb5\"\xc5\x1c\x03\xb5\xa8\xc1\xe6e\x8d\x0c\xf8\xedC~\x01\xf6d#7Z;\x00\xa303\x8b\xad\x8c~\xae\xe6\x9a\xeeg\x1d\xbb/\xe5\xe2\x7f\xab,]\xd3g\xbbS:\x0e\xa1\xcaa\xc1T\xaf\xb2\xa4+\xf6\x8f3\xb2\xa1o\xe9\xa7\x03-\xab\x99\xf8]!\xf2\xe9@\x8b+^\x9d\x91cC\xa6\xb0\xcb\xcb\nh\x8d\xd8H\xbb\n\x0c\xdf\"\x81\x032@\xc3l\xbbT\xec@6\x1e\xfe\x1f\x12\x87%R\xf2\x1e\xd2\xaa\xec\x1c\xef\x89\xba-\xbbC\xe5{x\xce\x89\xa8\xe2\xe6\x92\x94P\xd2\xea\x04\x98\xee 4\xd5\x84 \x00!nW\x90W[Z\\&e\xbb\x06\xe6\xe7\xdd\xda&[\xe8\xb7\x98}\xba[\xd0\xd5\x8a\xae\xd8\x81\xbfy{\xf6\xbcE\x84\xefhY\x92\x0d-\xe1rK\x0b\xaah\x03\xcb\xbc\x10\x1f\xae\x92l\xc3\x05\x1f-\xab\xba\nlI \x07\xb6\xa8\xdda\xf6\xc6V\x7f\xf9.\xdf\xb5\x9d\xfa/\x93\x84(\xe8\x9e\x92\x8a\xae\xe0\x19)\x9a\x99\xfd\x1e\xee\xfe/\xd3\xc7\xbd1r\xf6\xf8\x1e\xee\xf5\xbe\xfc\x07\xff\x87\x07!_\x86C\xe4\xcbp\x8c<\x97Z\xc1\xe8x.\x07\x06mq3\xc6\xd3\xaa\xf0\xd8\xd5\x1b\x0b\x96\xd3!(\xcd\xd8M\xe7\x11\xe2\xc4j\x9a1\x9an\xb5\xd1~\x16\xd96x4\x0c\xa6\x1d{i\xc0\\Zg\xc5\x84\xb1\xb4a+\x8d\x98J\x1b\x96\xd2\x86\xa1D`'\x8d\x98I'V\xd2\xad^\x06c#U\x14\xa4:\xf3&L\xe48,d$\x0cd$\xec\xe3\x17\xc2<\x8e\xc6:\x8e\xc68\xda\xb0\x8d\x03\xe4\x97\x19\xc3\xe8\x90Fn\xcc\xa2\xf3\xca\xe8\xbe$z\xb0\x89\xbe\xfbA,,\"\x06\x83\xe8\xbd\x18\xfb\xaf\xc3>\xac!\xc6\x0c\xe55>\xa1\xee%\xbe\x89\x85\x88\x18B\xaf\xd1\xce\x87\x19\xfc\xca\xa6%\x00\x0b\xd8N\x93\x83 \x06\x03\xe83\xc9\xfb\xa6\xc89=^\xce\xc6\xf0\xb6\xd7p\x8eZ\x00\xafQ\x1cAe\xa4\xc1\xdb\xc7\x03\xa1\x18=\x87\x19\xd1\x8a\xcd\x0b\xc0\xe49@m.\xa6\xf0<\xda:8B\xd3\x8b\xb1\x8b\xc4l\x1e,\x1d\xa2\x15@\xb6\x04X\xcc\x1c\xb2M\x08h\x17\xf0\x0eM\xc4\xc6\xe8\x96\x00\x07fmdB\xb8#\xdd\x0f\xaa\xd5\xc5'\xcc\xda\xe2\x13km\xf1\xca\x7fQ\x02\xd6(l\x95\xbc\xe2\xaf-\x81+\xe5\x15\x89m \xa20\xb2\xb7\xd5\xc5z!\x9d\x14\x1fn\x8a^qB\xad\xf6\xc9\x86\xc44\xc0\x87\xb2z\xdd\xc4\xf9\xc8gh_\xe4\xab\xc3\x92\xf2\xd0\x9b\xa2\xc8\x8bY\xbf\x07\xfb}\xda\xf8\xa0HA\xd9\x8a\xe7\x97\xe2@_\x92%\xdb7y\xfe\xf1\xb0oD?\x93\xde+\xd9\xd9^\x17\xde\xbf\xfd\x91\xb7\xc7\xc3#\xaa-\xddu\xf8j%\x18\x8b\xd4\xddc\xff}\x91'L\x96\xf6\xad8\xa21\xbe5\n\xba\xce\x0bzRWa\x94H\x95,\x924\xa9\xae \xa3tU\x1f\x9b|\xcb\x16\x17J4F\x9e1\x01\x90\xb1C\x93\xb14\xe3\xe1\x19\xdcx_\xd2:\xe0\x9b\x8d\x91-:\xdb\x81b\xd5I\xa6b1\x16\x05%\x1f\xd9\xfe\x92\xa4f7{\xb6\x81\xbc\xa2ODt\xc8\xfa\x90-\x05\xd7\xb1\xde\xc9\x9d\xb8<\x14\x05Wl\xba*\x86X\xe5\x9ck=\xfd\xc8\xdfz\x81\xa1\xa0L\xa6\xd1\x13~\xda\x88\x9b\x12#\xc7Or\xee\xedkx\x95\xdf\x89\xb3D\x06\x8b\xf7\x84\xd6\xd5\x9e\xce\x04\xe7\x90}R\xce\x96\xf9\xae/\x0f\xdeq~-\x85\xba\".\x8c\xca\xfe\x82\x1b\xd2\xb3(\xaeR\x82\xc1o\xc2.\xd9l+X\xf4\xb6\x93\xb8\xac\xb2\xf3\xb29\xe3\xc4yY;9\xa1\xa4;\x92U\xc9\xb2\xac\xd9O1M\xe2\xd5S\xfb\xd9\xf4\x13\xdb6\x0b*nx\xc9\xaas\xc8h'\x8b\x14\xddd\x91_\xd0\xba\x93=\x06\xe2\xf3\xf7\x8d\xbd\xbd\x0fO\xb3\xab\x0f\xf51\xc4\xcfyR,\x92\xaa`\xac\xeah\xb7\x96,m\x84\xbf\xa4G\xea\xe9d\xfb\x9f\x8b\xa5\xd6v\xa8\x1c\xa3]\xfa\xf5 \xd9,\xedY\xcdDi\xb2\xe0\x9d\x91\xd2\xa8\x84\xf2\xb0\xdf\xe7\x05\x97\xcf{\xb2\xfcx\xfb\x90\xb1\xffaRY\xacEY\xf3f\xf7\xa8\xc9\xd7p\xa8\xc4\x96\xabY\xbcd\x9b\x9c\xacV\x89\xe0w\xd8\xd0\x8c\x16\\C\x14\x9aLYw\x93Q\x16\xd3XS{\xf9\x990\xf6\x80\xbbO\xe0\x8c\xb5\xcd\xf8[v\x834S\x93d\xf0\xfc\x0f\x7f\xe8 Jv\xb3[\xe79|\x0f\xb3\xd9\xac\xabx\xb2&Hv\xd5\xfd\x13\xc9\xaef\x8c\xf8\xab\"\xdf\xddX\xe7\xf9\xcd\xee\x8f\xb3YW\xfa%k\xb8\xc1>\x7f\xcf\xbbp\x9e\xdf\xf87\xf6\xfdME\x07\xee\xd7\xf9\x87:\x96{\x9e\xb1\xfc\x89\\\x90\xa0\xc1\xc0\xf7\xfc\xa4d\x94\x90\xfdO\xca\x1b\xaf\xf2|\xb6LIYj\xdd\x17M\xb1\xcfD\xef:\x9f\xfe/\xd3\xb8\x9a\x81\xdd\xf7\x0c\xec\xec\xaa\xda\xe6Yoh\xa2\xadWy~c6\x9b\xdd\xec/\x8a\x18\xd6\x8d\x9b\x86\xa5\xe2\xc3t\x8d\x92}x*\x06\xf9\xe2\xe5\xbb\xe7oO\xcf\xce\xdf\xbc\xbd\xd97\x0d\xb7\x0b\xa9\x92\x13\x04\xd5\xe1=\xf0\x0c\xef\x8fywd|hO\xbe\x87\x7f\xdb/f\xaf\xf2\xfc\xbff\xb3\xd9?\xbe\xe9\xb7~\xc2\x8eW\xf6\xcd^\x1c6?\x91\xa2\xdc\x92\x94\x0dZ\xedP\x7f\x80*\xed\x1e\xe1d\xad\x90}\x9f\xedZ\xc2\xbcY\xce$\xfc\xab\xff\xf1=w\x08(w8\xa5\xb5f\xa5\x99\xfa\xc9\xc7]\xef\xdbZqa7\x8e\xbd*G\xb8\x19mq\xd5X\xd2\x98\xc2& ]7\x1c6\xb7\x99\xc6<\xe3?\xb0\x03\xf6:\xd3\x9f\x1a9\xc6d\x1c\x9bw\xf6\x071\xf75\xa9F\x84d\xe9\x15W#M\xcawsl\x03YWT\x9cQ\\\xbb\xbf~\xfbzMH\xca\xb2\xba9\xa1oR\xb9\xf6\xd7\xd6y>[\x90\x82w\xf4\xf3\xed\xab\xd9\xaf\xd7\xc4\xf8\x84\xce\xd5U\x16y3\xd7\xd8\x17L\x8c\xc9?\xfe\xe9\xdd\x9b\xd7\xf5\x7f\x7f\xff\xfd\xf7\xdfwg\x94\xfd\xd6\xde#\xc4)\x983\x16\x96G\x86\xd0\xd4\x0e\xa5\x94\xeb\x05\xdd\x1cRR\xd4\x14\xf4\x8a\xec\xa3\x15mE\xfeIk&\x90\xdcz\"o\xaa\xcd\xed\xa3#\x9c\xc5E\xf4\xc3\xffaC\xfa U\xed\xe6\xd0\xeaN\xd0\xac\xde\x18Oz* Y~d\xfb\xa1UA\xd7IJ\xbbr\xa3\xde1g\xb4(\xf3La=yc['EY\xcd\xf9Lj\x86\x03\xf9 [\xbe\xfa\x8b{f\xb9\x04\xa0P\xbf\xc6Gu\xed \\3\xf1_\xbf\xcb3\xd1\xbfk'}\n\xbcg\xaf\xc9\x8eQ\xf9\xdf\xa2+\xff\xae|\xc2z\xa6|a\xea\xde\xe9Z\xaaJ\xfd\xb5\x11\xf3\x9b\x94pI\xd3\xf4\xd6\xc7,\xbf\x146\x84-)\xd9EOX\x00\xba\xec\xd4g\x80\x13\xa1\n(\\!\xb6b\xa71\xb6\xe0\xd9\x06\x88X\xee\x9a\xd4\x07\xcej\xf5\xaao\xf3t\xd5\xb3;pFe\xf7M\xc9- o~\x92Yj*\x9cd\xc3\x1dp\x83\xed\xa3zp\xda\xd5\xa4\xbe\xdd\xfe\xfdo\x7f\xbf\xf9d\xfc\xca\xf5\x89\xaa\x8b\xc7\x87\xc7\x88\xdc\x9d\xdd\xbb{\xaf\xbc\xd6[\x16\x80M\xb1_\xce6\xa4\xa2\x97\xe4jV\x1c\xb2*\xd9\xd1\xd9Kv\x03B[Kh\xfb5\x98u\xd4e\xbe\xd2\x94X\x87\x03\xf5\xfe=\xf9W9\x83N\xda2\xd1\x93\xfaM\xdc\xc7P+\xcd \xd4%c\x04\x07\xf80\xae\x91LD\xa2\x98\x0dE\xa2\xc41\x17\x892\xdch\xa4\x912\x1a\x91D\x19hJ\x12e\xb0AI\xa3\xd4\x18\x984\xb3\x92(\xc1\xc6%QF\x9a\x98\x0c\xb3%\xfc_WzS#\xcdM\x1a=\xa9j\xe8\x0d\x8d4=i\xf4tS\x94l'\x9aAJ\x94\x11f\xa9\x9a@4\xe3\x94(\x03MTMo\xa2\x19\xaaD\x89b\xae\x12%\x9e\xd1J\x94(\xa6+Q\xdc\x06,Q\x86\x9b\xb1t)j0k\x892\xc6\xb8\xa5\x11S\x8d]\xa2\x18t \x93\x94\x1ag\xf8\xd2\xc8-\x0c\x9by\x809L\x14#^\xcfq\x14;\xb0\x90\xbeSz\xa0\xb1L\x17\\\xb5\xf1\xacc2\x13\xc5\xd5\x83\x18\xe6\xb3\x1eAq\x05\xea/\xc5HS\x9a(\xe3\x0dj=r\xfa\x81;\xd2\xc4\xd6\xa3U\xf5\xccm\xa2\x0c5\xba\x89b\xb5V\x89b0\xc0\x89\xe24\xc3\x89\xa2\xd8%x\xc1\x99\xe4\xec\xf5\xffa\x1e{\xb0\x91N\x14\xdc\xe0]\x06;Q\\#u\x1a\xefDA\x9a\xf0DQf`\x8c9O\x14\xabQO\x14\xb3i\xaf\xf9\xcdh\xe0\x13\xc52+\x18c\x9f(.\x93\x9f(]\xc3\x9f(\x03\xcd\x7f\xa2x\x8c\x80\xa2\x84\x99\x02E1M\x85\xd3,(J\x04\xe3\xa0(\xc6\xf6\x15N\x8af.\x14%\xa2\xd1P\x94h\xa6CQb\x19\x10E1\x9a\x11E\xe9Z\x7fD\xe9\x9a\x14E\x19oX\x14%\x8ayQ\x94xFFQ\xfc\xa6FQ\x9c\x06GQ\x10f\xc7\xde\x87V\xe3\xa3(\xaaD\xd5\xccY\xa2`\x8dZvs\xa4\xa4\xe37J\xca\x0f\xdd\xa6IQ\x94\xce\xc72S\x8a\x12\xd1X)J\x1c\x93\xa5(q\x0c\x97\xa2\x8cYo\xa7\x11S\x92r\x982E\xf9G\x13\xc7\xbb#\xc5G\xda\xc6\xf0>\xab\x13;kv?\xdd\xe2\xb7HV\xbd<\xd0Z\x15s50\xe7~\xb6\\K\xf4\x9c\xcf\xd6\xfb\x8b5\xd7\xb3\x9e\xe7\xb92ZV\xc1\x11\xbe\x9dG\xa0Qg*D\x8c\xc7\x8e\xf7\x7f\x96\xac\x94d\xd2\x02E\x98\xa6\xf2\nZ\xd2O\x12\x95\xda5\x81=\x85\xf2\xc0\xa3\x8f\xd6\x87\x94\xad\x1c,\xe82\xdfqx\xe2\x8f\xec\x02}\xe3\xf4\xc5\xcd\xfa\xd0V\xd2I\x1b;\xa8\xa6\x916\xa5\x90\xd6\xd2G\x9bRD\xdf\x824\xefY=\xb5d\xd0\xd6D\xd0\xf6\x1ba\xcc\x04\xd0Z\xf2\xe7:\xf1\xf3\xb3deI\xfb\xcc\xe6WM\xfa\xdc\xc9\xd4\xfc,Y\xd9\xf34\x9b\xeb\xb29\xe2\x15\x7f\xcc\xcb\xcaRK\x99\xc7N\xb6\xe5g\xc9\xca\x9ak\x99\xd5T&\xbc\x89\xb9\xc3fY^4\x8b2Er\x85\x83t\x01 \xd4m#\xb9\x9e%\xabZ\x02pqp\xd2[\x8a6\x8c\xeb\xbaC\xcc\xcf\xde\xb5\xbb\\\x9b\xbd\xee\xeeVwvoW\xab;\xba\xb7\x9b{;\xd9\xb8\x8b\xcd+4z\xf7\xf6\xf7l\xf8~\x1d\xbaW\xc3\xf7\xe9\xa0=:p\x7f\xda8\xe1U\x92V\xb4(\xd1\xe7\xberx\x1b\xb6^\xff\xd06\xeeM\xe3a\xbd1\xd4\xc3\xc4\x8f\xe6\x03\xeb\xe9\x07\xb2\xa1\xaf\xbe\xd3P\xaeF;\x91\x8d`Y\xa7dS\xb6\xcb\x9e\x94LH\xb0O\x1c\x8bq\xfabZ\x07S_\xcd\x92b\x802\x84U\x84\x8c\x0b\xc4\xbf@/\x10\xf7LL*r\x08\x8d\x00\x15Y\xee;\xbe$-\x13\xb0\x15\xed\xbc\x82\xc5\x97@V\xf1md@\xab\xb5dY%=\xdf\x85\xe7\x8d\x93\xdf\x80J+\x86$\xa7\xf3)\xff\x87\xe1 \xe2\xd3\xa9\x0f\xdf\xf2~\x88X\x1a\xc4\xfb!\x82\xac\xfb\xfd\x90\xf6\xa4\xe4d\xadg\xa5\xa05V\xa3\xed\xf2\xcd\xa4\xd3~ \x9d\x96\xafj\xbd\x8b\xe5\xa6>Q\x16\x04\xa1\xd9\xf2\x9a#t\xdb\x1eo;\xb6\xf5W\xa3\xdb\x0e\xdf\xb8G\xde\xb4\x837\xec\xe0\xcdjg\x88I\xc5\x8d\xa1\xe2v\xa7\xd2\xa0\xe4\x8a\x85D\xa8\xb9rwO\xab\xe1\x9bk\xafZc\x9c^\xfe\x94\x18~ry\xc2\xcbIIE\xd3\x90\x0b\xc4g9\xf4\xf2\xe1\xdbh\x80VAQ\x96\xd5\xaf^\xeb\x14\x86\x19>\x95\x16\xd3\x0cgO\x971\x95W\xb6\x9bhD}\xc3\xb3w\xed\xf1\xc4)X\x8f'A\xa0g[\x0d>\xa08\x8d\x96\x05\x8ajN\xb0Yp\xba\xbc\xd7\x7f\xb6.`\x9b\xeaO\xd5Y6\x9f\xfd\x89:ck\xe0@\x82;\x9f\xa5s\xa5\xce\x0e~\x8e\xae\xa3h\x1a\xc8\x19\x9f\xa2\xb3\x8e\x06\x9c#b\xc5\xf5\xfc\x9c ;\xea\x011\x83\x10\x93\x16\xf4\xa2\x9c\xe7A4\xc7\x9bq_d,\xd6\x94\xd6Q\xdf\x87\xf3M\xc5\x94\xa2Q\xfe<,E\xa3\xb1*\xfeY70>\xe0& \xfa\x1eo\xb3\xbc\x94f[\xb5\xd0\xac\x8e\xae\x95r>\xd26\x92\x03\x1c\x0f\xb3y(\x03\x82:`\x1ecC\xb4\x03\xc8\xb6\x00\xf7\x04\x8b\x97\xb7\xdb\xe2\x00*wK\x84\xf4\xadm\xc1=\xb9\xe2\x13\x9b\xa2\xc4|\x16\x03\xbb\x02\xc8\xe7U\x02V\x01\xf9\xac\n\x9a\xe2\x08\xf9\xd3#0.Gw[\xdc\x8f\xa8!\x16\x08\xb34\x98\xa7\x91\x10M\x01\xb29\x98\xf6\xa2R\xa6\xbdh\xfc0\xd2^\x1c\x9bu\xbc-\xc6\xfc\xe3mA\xac\x11fu\xa6\xed8mG[ X\x85\xafu;\x8e\xcf\xa3\xde\x16\xef3a\xfe\x05\xf7,6j\xa1\xe5\xc8\xc6d^\xd7\x88Y\xee\xa51\xb2\xb1\xb7\x05\xfd\x96\xd7\x90\x0c\xed\xe6\x16\xddoxY\xdf\xef\x12\xeb`\x7f\xbb\xcbfl\x15\xc5\xfaf\xd7\xc8K\x92\xf3\x9d.\xef\xcer\xbf\xcf\xe5\xa9\xee\x8b\x86\x841\xfeX#\xb51\xaeY#A\xd7[\\8\xcfm[\xea\xc3dD\x86\xf9\xba\xf8\xde\xdf\xb2.\x8c\xd3X\x1f\xf2\xe6\x167\x0b\x0f1\xd0\xd6\xb3\xc0\xed\xc9\x8d_@\xb8 N\x14c0\x9f\x08\xe1%\x90n\x1d\xabG\x9b\x93\x1b\xe1\xd1v\xa25\xbf\x12'\xf6\x10?\xc0H\x1f\xc0@\xfb\xff`\xdb\xbf}m\xffu\x9d\xd3>wX\xd7\xd5f\xf7;\xcb\x15\xf2\xfb\x9d\xa5\xcb\xee_n\xa2\x87z,\x8d\x93\xc8\xdf\x05|\x96\xac\x82s\xc8/\x06\xfa\x98\xd50#ku; 0\xbb\xaa\xc1}\xd0\xeb.kO\x05\x87\xeb\x1a\x8c\xeek\xf0\xeaV.\xcdJwe\xc3(zf\xec%\xb8\xc6lG\xa3\xc10tn]\xb0(\xdd\xba(\x92\x04\\\x9dV\x1d\xec`q\xb2\x83\xc9\xd1\x0e\x16g\xbb\xf8\xbb\x1a\x82c\xf2\xc2\x83\xcb\x13\x0f^\xe5r\xf4\xd9\xab\xd0\xd3\xbc\xf2\xd09\x91\xf1!\x13m\xcda\xa1\x13m\xfd\xd0\x10\x8a\xb6\xe6\x80P\x8a\xba\x04\x1f\xeb\x8b\xde\xa2\x19\xae8\x03D\x94\xe5B\xe3\x908\xb6K\x0cn\xc3j\xbc\x15\xeb\xca\x12\xf1\xb2b\xbe\xa6\xe0/(\xb5R\x1e\x122\xd5\xd4R\xcf:\xf0\xbc\x96\xcb\x1a1\xbc\x95k9A\xcb!Gh\xa9\x9e\xa1q\xf3\xf7\x99\x0e[\xe7E\xdduI\xb7\x1c\xb9\x9e3\xd4|\xecz\xaf\xe4\xce\xa3\xd7v\xf8\xfa\x8eK\x9fi\xc3|\x04\x8f\xa5j?\x88\xdd\xfa\x8a\xf30\x1eu\x1c\x87\x1f\xc8\xc6#\xd9\xd9}\xd3\xb1l?\x98-G\xb3\xfdp\xb6\x1c\xcf\x96\x03\xdasD\xfb\x04\xe9\xa8cZ\xdf\x11\xfa\x95\xb9\xdb\xd0\xd0\xa3z\xfca=\xe6\xb8\x1ey`\x8f>\xb2-v\xc9\x81\xa2\xcej\x8btJ-\xbb\x0d\x12\xbb\xcd\x0d\x9c\x17\xeb\x10\x8fz\x8c\xdb\xed\x8d\xf8\xa3|\xe8a\xde}\x1fM==Q7P\xfd\xf53p-\x91\xd5\x03'\xbb\xaf\x89\xe6\xd1\xaf\xa1A\xd8\x8bh\xbc/\xfdW\xd1\x003 \xc3\xd1j\xf3\x97\x04\xbd\x92\xa6\xd4\xb5\xbd\x99\xa6|\x16\xf6p\x1a8\x0f\xc8h\x0f\xa8\xc1\xc8G\xd4\x00\xfd\x90\x1a\x84<\xa6\x06\xde\x07\xd5@}\xa7P\xd3R\x11\xcao\x89\xd5~\xb9\xca\x10\xac\xfe\xa6m\xf4\xad\xb1\x86\xb9\x16\x18#q\xad\x04\xecD`\xb2\"\xc9\x12\xd9\x8a$9\x0e\x17\xf2R\x97\xe3Y|\xf4\xf0V\xf9\xb9+<\xf5\xb7k\xe9\x19\x1e@\xd8\xd28j a\xdb\xcc\xc0\x80\xc2\xba\x04k\x8c*\xcfMf\x9e^\x89\xa8\x1f\xc62\xf3\x84G\x11\xf7\x0f\xbc\xde\xc1\xe4;\xf1Dc!G^\xb8\xc9\x87\xf7\xf8\xc8F\x1f\xf3\xe98\xf8.4\x99}\x86Q\x1dh\xf6\x19tz~ \xf3\x8c\xf9\xb0\xc0\x9c\xa4\xbf\x03\xa3\xcc\xf8S\xf5\x8b\x9d\xab\x11N\xd6\x08g\xebd\x8f\xf9\xed\xdac\x86\x9c\xba\x93Uf\xb2\xca\xf02YeB\xad2}U\x12\xa5\xa5\xa2-3\x1c$\x14\xac\xa5\xe6\x85!\xa9\x05j\x17\xeb\xe9'\xac\x04\xecD`\xb2\xcc\xc8b\xa77\x14\x04V\x97\xe3\xd9[\x82\x106\xbfI\x13\xcb\x10xk[{\x14\xcc\xb5%3\x08\xeeZ\x97`\xf5\xae\x9b\xf2\x02\x8ci/\x00s\xb8\xa9|\xdcO\x81\x01\xc3D\x85\x9e\x0e\x03\xdc\x1b\xdf\x9e\x16\x03\xdc*\xaa[Iu\xa6\xc8\x00\xc79^\x97\xe0T\x19\x16:\x1d\x9d\xcf\x98.\x03|\xa3\x04\xefH\xc1\x93:\x03\xc0l\xdbP\x8b7<\xccc/\x90\x1fy&\x16\x9a\xde\"\xf3l\xb8\xe8\xb8\xa3\xa8\xdcY8\xe0\xeb\x9b\x96\x98\x999\x00\x91\x9d\x03\x10\x01\x86\xbe)B$+\x19\x1d9\xea !D-\x807l\x10AE.\xe2\xd0PA\x1f\x0f\x0cI\xf1a\x9fU=\xf1\x07\xb4}\xf0%\xff\x00w\x16\x0e\x17S\x1c+u\x8b3)\x08\xf8\xe9\x03\xa2\x0dp'\x08\x01\\+\x80l 0\xc9B\x00\xdf&\x04\xb4\x0b\xb8\xe8h\xc0m\x8cnAFIC\xcb\x8cq\"\xa5\x01!\xcc\xda\xe2\x13km\xf1\xca\x7fQ\x02\xd6(l\x95\xbc\xe2\xaf-\x81+\xe5\x15\x89m \xa2\xdb\x0b\xc4\xcc\xf8\xc2\x8a'\xeb\x0b\xb82\xbf@\xb3\xccvT\x0bx\x91-`\xf3\xee\xd7\x05\xc1I\x18y\xe4\xcc\x08\x03X\x19\xe1\xce\x0c\x0382>T@]\xe2\xa1\x03\xea2\x08%`\xa5\xd6\x7f\xdc\xc3\xfaY\x08j\xa0.\xf5\xd1\x1a!k\x0c 2\xc7\x80o\xe1\xbc\xbe\xb3\x90,2`\xcc$\x03\xae>\x98\xdb\xafgixV\x99\xbe\xf3\xb8\xe7\xe0\xf5\xf9\x8eE\xa3!\xae\xe3p\x84#\xefygS\x9b\x8e\xa7\xb1\x08G\xb3\x97\xd9)w&\x84cl\xaac=\xd0_\x02\xb3\x18\x1cR\xfa\x1b\x87)\x8e\xf1LG\xf3M\x8f\xf6NG\xf0O\xdb<\xd4N\xfe\xb2s\xbb\xee\xa7\x1e,l\xcc\xdej\x8f\xd8p{\xac\xbd\n\x97O\xd9\xf2\xf8\xad1\x1av,\xdf5\xce{\xed\x1d1 F\x0d\x08\x1fv\xf4\xeb\x95\xf7B\xeb\x9fj\x88\xe8\xcdF]C}\x1e\xed\xafv\x92B}\xdbNj\xe8g80F!\xff\x84\xc5\xc8\xa5\x8a\xd9\x01\x08c\x0frQ\x10\xc6\x1d\x14\xa5\xd1\xc6\x1c?wD\xf4z;\xfc\xdeA\x9eo\xd4\x0b\x146\x86q0\x8b\x97Q\xfcL\xe2\xf5\x82#Z\x01TK\xe0\xf7\x85#\xdb\x02t{\x80\xf5\x88\x07\xb4\x0cA\xad\x03\xde2\x8e\xdcB\xdd\x12`\x1d?\x82}\x1c#\x0c\xdb\xe2\x17\x8bmA\x9c&\xa2\x04\xadZ\xe8\xba!\xc4g[\x82\xd7\x0e!R\xdb\x12H}\xb4\x98\xed\x91\xf1\x1a\x83\xb1Nu479>\xf4;\xdd\x03\xb8\x02\xcf\x0fX\xe7Z@\xe3\x10\xd4\x01\x98\x04\x89,\x93 \xe9\x97\xdf\x91 \x89\xe4\x9eG\x8a\x12\x84\x8b>\x801\xf0,1\xc9\x92\xb6L\xb2$p\xdd&Y\x82\x94%\xd1\x9c\xf9Hi\x82r\xe8\xe39\x0e\xc5m\x01\x9c\x86\x9d\xb6\x98\xae}\x9fs\x1f\xd7\xab\xb8\x0e\xfe\x01.\xfe\xc8N~\x94\x9b\xdf\xe3\xe8\xaf\x97\xde\xed\xea\xf7\xb9\x8eDq\xba\xfb\x91<\x86\x93a^\xa7?Z\xa6\xf8\x1d\xffHR>\x07O[\x02\xdd\xff\xde\xce\xbb\x80\x01\xb1\xa1\x01hp\xc00x@t\x80\x00\x0e\"\xe0]b\x84\x8b3\x14(`\x83\n8\xfbb\xebG\x0c\xc0\xc0\x94\x9caJ\xce\xc0\xcb\x94\x9c!49C\x1f\x05\x83\x02\xd8\x18\x933\xd4N\x82\x06cs\xd6K\x0f\xa5\xedE\x03\xb0\xc6\xfb|\xcd6/\xab\xf9\xa1H\x9c\x1f\x99n>&}s,F\xc7p\x03\xb1n/\xe3\x8d\xc2\xf2u\xe0\x0d\xa1\xf6\xc0\xc8\xd9\xd6a*[\x91\xe7\x9aKK\xfbj\xf1\xe5\xad\x89\x04c\xa2\xf4T`\x01\xb2\xd7\x80N\xb2L\x8d\xbe\xfe\x8e\x8fm7`\xdb\xdd#\xe6[\xeb\x96\xdb\xa9\xf3\xa4\xb6\xde:\x1d\xb5\x02y\x05\x06\xf0K_Z\xa8\x1c\xe2\x93\x17M3\x18\x89\xd1k!\x1c\x98W\xd3;\xf2\xbe7\x82\xe9\xackdfYG\x05\xbb\xe1\xc6\xc6\xb8\xd6k\xb2\xf3\xd2\xe2\xbe\xacX\xcd+\x1ee\xd3a:q\xd6\x1c\xc0\xc8CXy\xd2\x13'=\x91\x97IO\x0c\xd5\x135\xb9\x8c\x15\xfd\x8a\xb6\xf8|K\x97\x1f\xcf?\xbf\xe5]D\xcb\xf6e\xbe\xd22\xa9\xf7\xcd>+R\x11\xf5\x8b\x1e\x03oH9g\xb3\xed&\xc3\xbe\xba$Y\xe5\xfb.\xc9\xd6\xb9\xb3\xb94\xdf8\x7f\xaf\xc8\xe6\xc8\x07U|\x05\x95~&\xbb}J{\x8b\x02w\xba\x0b\xc0\xff\x7fg\x06\xd8\xffS\xe7\x1f\x1e\xde\xb9sG\x9fn\xb8{\xa7\xfd;\x9f^\xfe\xff\x8d\xd3u\x0b\xae_W\xff\xf1\x82\xa6\xc9\x05-&\xd6\xfa\xfd\xb0\xd6\xc3\xee\x02\xfc\x13Y\xebY\x91\x93\xd5\x92\x94\xd5\xf9\xe7\xe7\xf9n\x97T\xa1,\xc6d\xde\xbc\xfa\xac.\nJ\xe5\xe8\xf3'X\x98\x064>\x05\xfb\xa2\xe8\xfc\xea\"k\xe2[\xd7\xf7}\xfe\x05{7z|\xec\xf8\xae\xbf@`\xe1i\xf8\xcd\xdd\xe1\x14\x9e\x07M\xa4\x82\x89\xf7A\xe7\x7f\xb0\xed\x01p\xec\x030\xed\x050NwoO(\x7fX \xb1;q\xf7\xc4\xddH\xee~\xa8.\xeaW\xcc\xdd[RnU\xbe\xb6\x8c\x13^\xbe|\xf8\xea\xfe\x83;\x0f\xee\xdc\x7f\xf0\xfc\xe1\xbd\x07\x0f\xef\xdc}t\xef\xf1\xb3\x87\x8f^\xdey\xf1\xe2\xf9\xfd\xef^=}\xf1\xe8\xe1\xddWw\xea[\xd3\x96&\x9b\xad\xf6j\x7f\xcbp\x7f\xfe\xf9\x8c$x\xebioA\x0d\x1dU\x16O\xf9\xe2\xa7r\xd3m\xa9\xf9\xfb\xd3\xd5\xaa\xa0ei\xfcM\xb9E-\xe8r{\xff\x1e\xd0\x8c\xad\xf2\n\x88\xa8\xf9Mo\x8a\x96y\xb9\xcb\xcb\xbb+\xba\xff\xf8\xf0\xc1\xf2@~\xd9|\xfc\x95\x92G\xbf\xee7\x1f?\xdd\x7fTe\xbf\\\xae~\xbdx@\xd6\xcb\xfb\xab{\xdf~\x03\xf03I\x93\x15\xa9\xf2\xe2(\xfd\xb8 )\x9b\xc5\xbb\x8f>_\xd1\xdd\x9e\xee\xf6\xfb\xc7\xf7>?\xde^\xfd\xfa\xeb\xe3\xcbb\xb3~\xfc\xa0x\xf4\xcb\xe3\xed\xc3\xf5\xbd\xcb\x07\xd9\xbd\xf4\x1b\xe1\xfdD/\x88\xe2\xe7u\xf3NY\x91\x8f\xf5\xc5Qu\xeb\xbak^\x7fx\x871\xeb\x0f\x0d\xa3j\x9f\x0fa\xd0\xf3\xcf\xfc\x12\x87\x1el\xc8>yq\xe7\xbb\x87w\xef\x7f\xf7\xe2\xf1\xdd\xfb\x8f\x1f\xdf\x7f|\xf7\xf1\xbd\xc7\x0f_\xbdz\xf0\xec\xce\xd3\xc7w\xef|\xfb\xea\xee\xab{\xcf_\xbc\xbc\xf3\xe2\xfe\xb7O\xbf\xfb\xf6\xf9\xcb;\x8f\x1e=\\\xfc\xfa\xec\xaf\x8f\x1e\xfft\xf5\xe9\x87\xf2\xd3\x8b\xef\xde\xdd=\xbdL^\xee\xff\x90\xbc_<\xfa\xf9\xdd\xaaJ\xf7\x9b\xff\xfc^ir\x7fX\xe8\x16T\xf0\xf1\x92\x9b\x93xU\xe3\xfay\x17\xb8\x99\x9b\x8af+Z\xec\x92\xac\xba}vX\xfc\x99^\xbd\xa3\xcb\xfd\xbd\x87\x8f>\xde5\xd4\x1bj\xe7\x86n\x8bO/~\xbd\xf3\xe0\xe7m\xf5\xe7?m\xbf{\xfa\xfc\xf9\xcf\xbf\xa6\xa7\xdf\x91\xf3\xbc\xfc\xe3\xd5\x9d\xe4\xe3\xab\xff\xfb\xe7\xd3\x9f\x7f\xf8\x8f\xfb\xbf\xfc\xf9\xa7\"/\x7fP7\xf1R\x98C\x85\xb8\x1b\xca\x0e\xd7\xef\xa8\x98\x93\x92~:\xd0\xcc\x84\x84\n\xa5Xt\xae\xc8\x10&j\xb1\x9a\xb3[u7t\xb5\xed\xe6=\xa6*\xf6F\xef\xba5\xb8I=\xba\xff\xf0A\x97\xd2\xefO\xa1?\x13N\x13\xba\xe2J\xc1\xf9\xe7\x9e\x1e\xe6\xd4\x0b\xb8\xb9~\xbe4)4\xb6\x93\xba\xden\x83*\xed\xc9\x86j\x9b\"\xa0\xaa\xe2\x0b\xc1\xd5L\x93]\x82\xee\xe9\xfd\xfa\x86R}.\xd5:q\x8dt}\x9d\xacK\xc2\xc8\x0e\xb1\xf53\xd9 EK\xebvC\x99\"\xa5\x1b\xad\xc6&\xeb|\x8e\xb4S4MN\x14\x97\xfe\x83\x08@\xb5l1M\xc3\xeb\xd6\x19\xac7\x19u>Q\xbc\xc7\x0fF!\xfa:\xe2\xb6\xe3!eQ\x9a\xa2(\xd1@\xb5\xe0\xd0\x1dE\xd15HQ\x9c\xe4\x1d:\xa0w\xf2}\xd3\xee\xa4\x0d\xbe\x9e\x89\xe2\xd65E\xf9\xc2\x1a\xa7(V\xbdS\x14\x04\xdf\xfa\xa6\x0fj2\x0e\x9e@\xcc \x0c\xd6JE\xf1\x86\xaf\x84\xf6a\x84\x9e*\x8aO[\x15\x05\xd1-\x87\xe6*\x8a]\x7f\x15eL\x1b\xaaF+\xca\xc0CH\xd3qEq\xf6\xcf\xa6\xef\"\xaa\xbau_Q\xcc\x1a\xb0(x\xe2\xaa6,\xebk:\xb1\xfc\xfb\xb8C\xd7\xb1]\xfd\x9b\xd5\x19B\x86`\x14\xcf>S(\xbc\xabV\xe7R\x83\xd1\xfa\xae\xf7\xb5\xa7\xa3\x04(\x87\xbd\x0e\xf7t\x0f\xe3\x84\x99'I\xd3.,\x93a:*m\x0b\x1a\xf3\xaa3\xec\xb1L\xaf\x0e0\xe85M\xb0\x9c\xf2\xfd\xb3\xdd@\xc0p\xd6\x06,\x91\xd3\xa6\xe4\xba\xaej\xa7\xf2\x17<\x8b\x8d'\xb0\x95\x07\xec\x1c`>c\x9d\x8b\x14~\x9eZv7\xae\x95\x81'\xa6\xeb\x9c\xf4/m\xff\xbc2\x9f\x84X*\xcf\xd2|\xf9\xf1\xf4\x05Z^\x85\xd8\xff\x03\xdc\x10\xbc1RT\xdaM\x19\xb5I\xac\xc0F\xc3\xc5\xb3\xe9]\xd7\x81\xa8\xdf\xa0\xfd\xf3\x170:>\xc9?P\x12\x12$\xb1\xdc\x92$\xebe\x06uO\xb6\xf0tm\x0f\x8b[\xf7\xea\xa5\n\xf2\x9b\xd4\xdb\xa2Jvv\xef\xa1R\xe7\xfa\xbd;w\xbf\xbdu\xf7\xde\xad\xfbw\xce\xef<|\xf2\xf0\xfe\x93;\x8fg\xf7\xbe\xfb\xf6\x0fw\xee>i\x15\x8f\xec\xb0\x9b\x1bl \xb6\x8e\xd4\xeb\x92\x92\xb2\x9a/\xd8\xcc\x19f\x01\xc5\x16G^\xd5\xa6\xf1>\xdf\xc2@Y\xa7\xf30\xb8\xf8\x18l\xbc\x0c\x16\x8b\x10V\xa4\x05\xce\x800\xfc\x05\xac\xef\xfd\x87\xdd\x05^r\x98\xd5\xfc\x88beE*rL\xfa\x17\xb5\xeb\xba\xaf\xdcsK=\xef,B\x84\x99\xb4\x98l\xc07F\xb3\xe9\x06\xbc\xe6\x1b\xf0\x0dl\xec\x80,\xa6\x1c8v\xbbN\xfb\n\x1c\xbbu\xbf\x89\x07\x8e\xdd\x05\x97\xb9\x07\x8e\xdd\xb8\xd9\xf4\x03\xc7n\xd6c\x06\x82c\xb7\xef0 \xc1\xb1\xdbv\x9b\x87\xc0\xd7|\xa8\x99\x08\xf4S?\xdcT\x046s\x11\xf8N\x0d\xf7\x89a1\x1d\x81o\x12\x00\\&$\xb0\x99\x91 \x88n\x97\xecd\x83\xe9U\xfd\x1d\xd9`\x14\x16\x9c4\xf9I\x93\xef\x94I\x937\xff\x88\xd8\xe8\xe0\xdb\xec0i\xf2G\x91\xf7\x93&\xffO\xea\xc2\xa4\xc9\x7f\xf9\xf6'M~\xd2\xe4\xbdt\xbbd-(\x9b G\x9b\xd6\xa6\xee,\x86H\x94\x8d\xcec\x18\xa6iN:P\xbfL:P]lNhpp1\x1c1-\x12\xca1\x0d\x98\xd9A8\xa8\x01C\xa7{\x99\xb1\x84\xde\xda\x9d\xd5\x10\xa9\x05\xab\xe3\x1a\"5\xe0tbCh#A\x97>Q8}g\xdb\xce\xdd\xd6\xb4\xad;\xb6\xc1\xe3\xdc\x06?\xd7\x02\x82s\xc1\xbb\xa1Q\x93\x08\x116u[\x9cNo\xc0\x0d\x1c\x90\x83\x07\xbf\xd8\x94\x1f\xf9\x97\xb3.^\x11*\x8ao\xde\x01?\xf7\x10m\xfe\xbfTJ\x89#:\xc9_\xd0\x94n\xf8\x93\x11\xf2\xbf\xf2\xe2-\xbd$\x85\xdcG\x1a\xf3\xe8l\xe2\x90\xe7\xc6\xe1\x87\xa8\xc6\x8aJ\x1c\x9c\xd3\x12xf\x83v8`9\xf3\xc6f#2\x06m;\x16\xbf\x19\x97\x1e\xacm\x0e\xd4\xc6\xd0\x92\x01\xda\xcd:\x9e\xb3\x9d*\x16\xb3D\xaff\xd1\xfd\x1e\x8e4]^\x15\xc01\xdc\x10\xf6\x11%\x06\x13\x89\xa2\xb2\x92(v%*\xfe\xd35\x8e\xacA^Y\xe3`:Q\\\xd9\x81\xf0\xd4;y\x02\x8c \xc7\xe2\xb2\xd2\xd7\xb4\xf3\x9e\x91\x92\xbe\xa5\x9f\xd0{m]\xe0s\xe8J\x9b\xc0\xe61\xd9\x16\x8f>o\xb7\xd5\xc3b\xf7\xe9\x82f\x8f\xee}\x97}L?\xa7\x87_\xaf.\xbe\xfb\xf5\xf1/\x9f~Y\xee\x96M\xf5\xdefyG3\xfe\xca\xa4\xd8$\x90\x17\xf0gz\xb5 %\x85\x8c\xec(T9lhF\x0bRQ P\x15$+\xc9\x92\xd5\x94\xd4\xbcI\x1f:\xbd\xbd\xf6\x8ef\x15\\$\x04\x9e\xf3~\xc3\xcf\xf9\x15\xd9\xd0\x02\xfe\xbf\xf7w\xee\xdc\xb9\xfb\xea\xd1ww\xae\xc9Z\xa11\xdf\x82\xe0\xad\x1f\x0e\x0b\xf9\x9b-\xaf\x80\x9bL\xab%\xeb\xb9\x04<5\xef\xd65{\xa9D<\x95\xfayi6\xa4\x9c\x93\xd5/\x87\xb2\xda\xd1\x80l\xc8wg\xf7j\nkJ\x8f,\xa4\xbf\xa6\x9d\x05\\\xd9\xda\x1dRRi\xeb\xb4\xc8\xf3\x94v^\xe3m\xea\xaeIj{\x14\xa9\xa7k\xbd,\xabd\xc7\xb8~CJ\xfe\xccO\x8f\xfb\xe1\xc6\x92dY^\xc1\x82\x8a\xf7\x8c\x92\x0c\x96y\xf6\xcb!\x13?_&\xd5\xb6C\xac\xdeB\xf3=\xdc=X~\xbb'\xf7\x0f\x0f\xc8\xfe\xd7\x07\x9b{\xc5\xe3M\xb9\xff\xb4y\xb4y\xbc,\xef\x7f|\xbc<\xd4\xafj]\xe4U\x92m\xe6\xfb\xfc2@\x08\xdc\xed\xec\xc9\xc6\xe2\xbb/\x92\xbcH*\xf4\x00\x1b*\xe7\xf4su\xc6\xa9\xd4\xa7\x1eb\x8d\xf7\xb2\x82A\x04\xf6\xdfg\x10\xefU\xb9\xfa\xd4e\x04\xd7wM\x93\xfc7\xd4\x97eE\xaa\x83\x9b\x11\xd7I\xc6H\x924\xbd\x9a\x8f\xc8\x8f{\xfd\x8a\x96\xd7\xfb\xa2\xc2*(:\xd2|v\xa7)]\xeb\x03Y\x94\x15I\x8cqP\x83\xe8]\xcf\xf2x\x9d\xcb\xf29\x93\x1e\xf3\x0bZ\xe1\x92m\xfb\x88\x96\x87\xc5.\xa9\xe6\xdet&\xc2-\xba\xa2\xfb\xbc\xd4\xe3\x96~\xdf\xa7\x88\x14\x13eE\n\xcfD\x9dIy\x10c'\x1b6\x95CJ\xbd\xe8.\x0c\xa2a\xf3\x9b\n\xbf\xefu\xc4N\xb6d\xf2\xdcw&\x8c8D\xf1\x8e\xbas&\x1c\x03\x9f\xd7R\xe4\xa1\xe7(2I\x05M\x06\x0e\xa0\xd1\x97{\x03\x08\x98e] \xa1\x9f\xf3Z\xfdCL\xdcE^y4\x01,\x0f\xe5\xee#5\\\xafc\xff\xfe\x8a-f-\xd6a\x7fX|}\x9a\xde/$I\xf5g\x06\xfb\xd7\x00\xb3\xbe\xa2(T\xf9G\x9a\xb9\xe7~U\xdb\xd2\xe6\xe5\x96\x14\xfa\x8d\x0b\xab~\xa14\x9f]\x9e%\x1f\x91\x99\xf1\x92\x15\xcd\xaa\x9e\x8e\xea\xf8\xf8\x92.\xca\xa4\xc2eB)\xe9\xf2\xc0\x94\xdf\xf92\xcf*\xb24:\xa6\xb5J\xf2\x15b\xef\xb7\x8b<[\xcd\xcd)\xda\xec2\xe0z\xb7r\x92U\x05\x99W\x9fE\xd6}}\x7f\xabO\x9a5tj\xef\xc2![\x88\x07k\x07\xf7\xa3\xa5\xe0\xd5\xb3z\x97\x84\xc7\xdf\xde\xb9u\xe7\xee\xad;w\xcf\xef\xdcy\xc2\xff\xef\xaf5I\xee\x9f-\x07'\x16*\x08rq\x8d\xe3aeG>\xcf\xe3PYnI\xb6\xa1\x11\x88\x1d\xf6+v\x8d\x1e\x94\xc2\xc76\xd7\xad\xb3\x03-\xaa[ \x80\x91\xd5a\xbe\x10\x84LY\x90\x94\x18lS(\xb60\xa8l\xfe\xb9S\xd55{\x1a\\\xe7\n\x08E\xed}\xbdU\xda\x89\x0fz\xf6\xed\x98\x93O\xb3\xaaH\x8emCK\xb2\xa4JH:\xd7\x96\xb1K\xcd0\x91\xa1\xdf/\x0b\xcagW\x13j\x9ez\xbb$3\xec0\xadB\xb3\x8e/\xbb\x93\x86X@\xeb\xf8\xf1\xac\xde\xfb\xc6:N\xc3\xb7\xfa\xd8l\xa3\xfa\xca\xc4\xc2\x17\x9e\xb4\xfe\x91i\x9b\xb5\xf6\xab\xb7t\xf5\xe5\xe6\xab,\x96\x815Ve\x85\xaa1l\xff\xff\xbf\x05]?\x81\xeb\xff\xcfm\xfe\xfa~\xc2\xe6\xa0\xbc\xdd\x9d\x91\xeb\xca\x0c\xb1\x1d\x83\x8f?\x0fZ\xaae\xce\x84-\xff\xdc\xbdbp\x04\xa6\x12g\x17\x9bm\xebg\xcd\xbd\xe8ERV\xa7\xcd\xcb\xb2\x88i\xf8\xca\xefG%M\xd7s\xae\x8e~\x11o\xf9\xd7fz\xb9\xe0\x8f^\xd94\xd6\xdf\xef\xd8\xcf\x0e\x8b4Y\xfe\x99\xe2\xb73\xff\xc4\xc5\xbb\xeewk\xdf%\x9b,\xc96A[G\x186\x11\xc7#\x87L\xce\xf3\xf5\xba\xa4\xee\x0f\xc5u{~\xc8\xaaD\xf3\xe5+\x07nY\xd2\x95\x88\xc6*m\x17\xb4\xa6\xc6\x19)\xc8\xee9\xbf-\xe0\x07wX\x94{\x82w\xd52&h\x7f\x08\xb0d\xfcD>7\xd2\xabl\x1b\x0f\xa0p\xfd\xbak\x89\x9bQ\xbe;\xec\xf7i\x00C\xfdk\x01*\x84\x8c\x9e\x91C\xb5\x9d]\xdc]\xd0\x8a\xdc\x9dq\xbe\xc1k\xa0\xecN\xba\xa3\xbb\x9c]L\x0b\xb2\xach\xe1;M\xd6y\xb1#\xd5\x138$Y\xf5\xa8\xc6\xfdU\x9f\xe7e\xb2\x99\x1b\x1f\xc3C\xd7\xff\x95\xce\x97yY\xcd\xf7\xb4\x98/\xaetO6\x86\x10\xeb\xc5\x05-\x92\xf5\x95\xa0EW\xf7\x1e>\xbc\xfb8\x06\xa9\xb2~,\"\x9cX\xef\x04\x16+\x04\\C\xa2%T[\n{\xf6'\xca&\x9f;\xd8\xd9\x9f\xd8\xa2\xc2._\x1dR:\xb3,5\xcf\xdd\xf3T\xc0;\xde\xd2r\x9fg%^VHXH;\x96^\x1f\xe5\xaf\xbdN\xd6\x7f\xcb\xd7\xfc\x9f\xcb\xbc(x\xa3\xec\x8aP\xeb\x113ejP\x17q\xf6\xe9\xfcP\x18_k0\xec\x03;R\x81\x95\xa7\xf0\xfe\xed\x8f\xb7\x0bZ\xe6\x87bYCw\xb6\xa4\x82C\x96|:\xd0\xf4J\xda\x06\xd7\x89\x1c\x16kG\x8eI!U\xd2\"!i\xf2+]}\xa3\xfc\xb2/\xf2*_\xe6),\x0e\xeb5-`G\xcb\x92l\xe8\x0c\xce\xb7I)\xfb\x0c\xbbCY\x017\x13&\x19\x90\nRJ\xcaJ\xa5\x94g\x14\xae\xdd\xbe\x06\xcd\xf6c4(\x0f}\x81\x92nv\xb4\x9d\xf0\xf7o\x7f\xbc^\xc2\x9e0\xbe8\x94\x95B\xa8\xa0\xfb\x82\x964\xd3Z`U\xd7\x874\xbd\x82O\x07\x92\xb2q\xaf\xc4\xacH\xb2|\xfc7H I\xa6V\xfd\xc0\x1a\xbb\xbd\xc9\xf3MJg|\xcc\x8b\xc3z\xf6\xe2Pp%\xfc\xc3M\xd1WN\xac\xdc\xe6\x87t\x05\x0b\nl\xb0\n\x9d%\xc9\xf2,Y\x92\x94\xef\x0d\xb5\x95\x1bt\xb6\x99\x9d\xb0\xe9\xe1\x9ctmv\x0d\x92\x12\xb2\xbcb\x1cG\xf7\x15]\xdd\x9c}\xa3V:\xcd`\xcf&,Y\xd2\x13\xa8(\xdbP\x87\xf2@\xd80E@\xc7>IY_\xaa\x9c\x0fr\x91d\xa4\xb8\x02\x92\xa6|\xbc*\x04\x923H\xb5\xa5Wj3\xf4\xf3\x9e.+H*\xa8r8\x94|t\x82\xf9\xb3\x8a~\xe6K\xf34\xbb\x9a\xc1\x0f\xf9%\xbd\xa0\xc5 \xdf\xbe\xef\xdf\xfeX\xc2\xe56Yn\x15j\x8c\x00c3\x95\xcf\x96[\xba\xa3\xf0a[U\xfb\x0f'\xe2\x7f\xcb\x0f'\x90\x17\x90\xe5\xf2\xd7\x13\xce)K\x92Io\x0b\x1fiI+8\xec\xb5\xe9f#\xd4\xda\xa0\xc5\x05-\xc4@wd_\x8ae\xe7=\xad\xf2\x9a\x7f\xa1sk\x03\x0e\xf6I\xd3\xfc\xb2|\xa2\xcd\xfe\xff\x84\xd3u\xdb7\xb6\\\xfb\"\xbfHVt\xd5t\x9f\xfd\x91\x94\xe5aGW3\xbd\xfa\xd3\x0c~8??\x83?\xbe<\x87<\xab\xd9[l\x99\xab\x84\xa6+ \xf07\x95\xf1\xce\xaf\xf6\xf4\xef\x7f\xfb\xbbBL\xaa\x10le\xe4*\x0b\x01\xcc\xe7o_\xe4\xab\xc3\x92\x02\xc9\x80\x16E^\xcc\xf4\x9e\xec\xf7i\xb2$r\xcc\x05e<\x92_\xd2\x15\x9b\x96%Y\xb2\xbd\x98\xe7\x1f\x0f{\xf9\x02\\ \x0bR\xd2\x95\xec\xb4\xd6\x95\xf7o\x7f\xe4\xedn\xc9\x05_\xea]\x87\x1bW\x82\x1dI\xddM\xf6\xdf\x17y\xb2\x02\x92\xe9\xd1E\xa2Q\xbe\xc1\n\xba\xce\x0bzRWc\xd4H\x95,\x924\xa9\xae \xa3t\xc5\x97pA\x81\x0b\x80\xe2\x82\xae4jy\x06\xc2\xf0\xcc?\xe5;`\x067\xde\x97\xb4\x8e\x87d\xe3e\x0c\xc1\xf6\xb2\xe0\x08\x92\x91\x8d>\xbeEA\xb9\xcaX\x93\x9b\xddT\xd7\xf6u^\xd1'P19\xb8\x96\x180\xc2{*\xf7\xf4\xf2P\x144\xab\xd2+ \x17$I\xc9\"\xad7\x95*\x19\xd7\xebd\x99\x90\xd4({\x17\x875\x14\x94ITz\x02$[\xb1\x1d*\x1b\xe0 4~\x8a6\x1c\xbe\xa0\x9b$cW\x05\x81F3l\x97\x99\xe05\xb2O\xca\xd92\xdf\xe9\xf2\xe6\x1d\xe7\xf4\x12\xf2j+\xb6Q\xa6\xeeW\xb8!On\xba\xdbWWrk\xdc\x84\x1d\xbbi\xc0B\xdb\x90\xbc\x9b\xac;\x900\x9d\x8e z\xce\x84P\xee\xe92Y'K(\xe9\x8edU\xb2,\xbbLkx\x99\xcazP\xd6\x8a\x08\xd3\xa5z?\xb8O\xd0\x9f\xd8&\\P \xc2j\xd49\x06\xb5sO\x1e!d\x91_\xd0\xba\xe3\x1a\xfb\xf1\xf9\xfd\xc6\xde\xaeI\x8da\x8b\xc9(\x17\xf5\xbf\xf9b\xd6\xba\x11\xafq[V\x81\xb7g\xcf%\xa5\x1d\xad\xb6\xf9\xca\xa9. \xe5+X[\xdaw\xb4jm${\xa7B'\xe7\xa8U\xe5\xdaYA\xeaGN\x1d\x1d0\x1c\xd0\xd3k\xc1\xaa\xaf\x8f\xa0e\xd7\xdd\x87\x11\xf5\xea\xf1q\xc8\x1at\xfaP\xc2=V0\xf0\x18\x86\x95\xe5\x95\xe0\xed\xd9s\x9d\x87\x17$\xfb8\xf4vW\xd2l5\xa7\x19\x13\xb2_U\x84\x8f\xd6\xa5\xee\xf7*`\xd9-\xaf\xde\xd1l\xf5R\x90\x13\x8a\xcd2O2\xd1\x1d~\xc2\xf6\xe6@\xe2\x1e\xe0\xc6\xe5\x96rAN\xf4A@R\xf6e5#\xc0j\xdf\xac7\xef\x8a\xae\xc9!e\xccc\x9f\xdd\xee \x06\xdc\xfe\xd8\xa2\xeb\xb7\xbf\x1e+\x08\xb1\x99\xa6\xcf\x845:\\\xa6I3\xf6We\x9d\x0d2\x89\xf4\xe6\xf5\xbf\xfbl\xf1\\p\x81\x98d\"\xb0,\xe2\xb8%\xa2KI&\x8e[\xa6<\x90L6\xach\xaa\xaf\xdf\x9c\xbf|\xc2\xef8\xe2gXs\xd5\x94i\xb6\x19\x9cf\x95P\xf2\xdb\x03\\,\xe7\xf2PV\xf9Nn\xe4>'\xd5\xf1\x90%\x14\xf4\xd3!)\xe8\n\x16W\xb0\xc979?Y\xdb\xd3\xa1o\xb2\x97\x0bUK\x92\xe6\xdf\xf9Z\xdch\xf8\x85$\xc9\x1aEaO6rx\xd6\x13\xab\xfe@a\xc4\xe6\xcf\xf2\x9eS\x0b\xadA\xe7\x16OKcy\xf33D]\x11\xc8nu\x85[\xfa\xf5\xbc\xb0\xff\x94\x9a0)K\xa1\xc2\x9f\x91\x0d}K?\x1dhY\xcd\xc4\xef\n\x91Ol\x1b\xf1\xea\x8c\x1c\x9b\x02vV\x97\x15P\xae\x7frU\xb5\xcb\xfd\xb6g%q\x87ESG\x0cI\xd3\xbd8y>\x1e\xfe\x1f\"f\x87\xads}\xfb\xe8(\xcdk\xa5nw\xa8\"\xe4\x87\x13Q\x15\xcfKR\xb2\x8b\xe3 $UY_\x9dJ8d\x82\x11VB\xc3\xbdLdh\x88Ke\xd3e\x0f\xe6\xac\xebT\x93\xd4\x98\x02'\xff\xd3}\xfaq\x02\xb2\xf2Pqg\xd9\x11\xf2We\x8b\xb5\xb6\xae$\x1b\xb4\x05\xf0\x18\x13\x14\x90\xc4\xb1\x1a\xca\xb4`VBVq)\xd0\xfa\xf4GR\xa0\x03\xe6\xd0|\xcc\x82\xe5\xbc\x82\xc8\xefD\x0c{o\xda\xa2\xe0\x80C\xc9\x01\xef\xc5,\xae\xb2\x03V\x85\x07LJ\x0fx\x15\x1f\xb0\x0en\xbc\x02\xe4d}E\xdf\xeeR\xd6\xd9\x9f\xcb\xfb$\xdb\xc0\xe7\xdb\xac\x8d.{\xf2\x1e8\x99_\xb8\xa3\xde\xac\x83\xd9_\xdd\xdd}c\xbbP.\xe4\x8e-y\x1b\xbf!\xc9\xa3N\nF\xf4\xd4u\xc2d\x0f\x8f\xd8\x17U\x83W\xa0\xecx\x12a\xd2u\xbf\"]W\xeaB\x92\xef\xad\xbb@h\x0b\xaa\xe2d\xe3\x0b\x0c\x13v\xaaIj\x9a&b\xe1\xc6\x8e\x1cF3\xa0\xc2\x1c\x86u\x0e\xbdJ6l0\xf2Xh\x8f\x01A\xae'\xfb\x9b\xe1\x97\xb4\x19\xfe\x0b\xbad<\x17q\xe8\xe6\x10-\x9b\xfci\x06.;\x82g~X\xd1e\xb2#\xa9\xba\x07\x9c\xdc\xff\x82.\xf1\xdc\x8f\xe1{9\xa7\xab\x84\x0dpq`\xdd\xeb\xcc\xed\x97M8\xf3\xf5\xa5\x7f\x89&\x17\xa3q\x87(\xf1xD\x14\x0c\xa7\xd8\x19\xdf\xc2%\xad\x1fX\xaaV\xcd\x92\xc8\x9a\xf9\x9a\x8fSV\xba^B\x8b\xc5\x94\xbc\xe0\xe3\xd0@\x1b\xe42\xdf\xed\x0eYR]\xcd+\xf2\xd9\xc9\x8aL\xc6\xcc\xf7u\x98\xb9\x991\xfb\x15\xf2\xecP\x06\xd5`K\xbf*\xc8%\xdf\x1a1lw%\xe5N`\xe9\x02\xa8\xcf\x97\xee\xbc\xe9f<\xe3\xac\xf2#\xe9y=Wgy\x9e\x06\xab8\xfb<\xff\xaa\xc0O\xd3Fv\x9a\xf5\xd8r5Cjv \xff\xf3\xf5\xb2k\xd0s\xe8\xdeF\x86q\xea>\xdd\xda\xb7{\xd5\xebI2z!\xec<\xdb\x8a\"\x99K+\x98o\xbfB\x94\xf0\xc4\xbaN\xd6\x95+\xa6\\\xb5\xc5\xdf\xc8rY\x1c\x04\x19\xd29\\\\\xa7\x99\x9b\x8f\xf0\xec\xac\x91\x18\xce\xcb\xdd\xe4p_'C\x0fO\x12\xf7[N\xd368\x07\x9b\xcf\xb46b\xabZ\xbb\xa9\xc3H`\xe4\x1e6\x90\x93\xbb\xda\xf0\x0b~s\xfbd\xd8PeS\x14\x9c\xcai\xe8\x87*fjg\x97K\xd4\xb4\x18\xaf\xaf\x0e\x0c>\x1d*\xceCE\xb8\xbcz\xca\xf5a\xd7\xf5q\xcae\x0f8ILR|\xc8q\xd2\xa53\xf0L\xc9\x8b6b\"\xf8@i\xdf\xf6\x18\xc4\xcf\ns\xf5\xa6\xae%\xdd\x9b\xfa\xce\x9f;[\x8b\xcd]\xbdy\xb3\x0d\x9b4\xecb\x98\x86\x1f\xbc\x12]\"\x83\x97\xe1/\xf2\n\xf8T\x9c\x9a\xc1k\xd1\xbbB\xfa\xac+\xca\xd4\xa8u{S\xde\xcer\xfdk\x95K\xf7t\xd0D[\x068`\xb6\x15J\xa1S\x1e\xc9U\xa8 \x17\x8e\x8b\xb5\xb3X+\xc0.\xa8\xddV\x0bWE\xb7\xf5\xc2Q\xd3c\xc5hkZ-\x19G\xc0\xa9\xd9\xf9\xa0\xd9\xb4\xcf\x9b\xa8\xc8`\xa60\x05T\xf6F\xd4~\xd0c\x0e\xf1\xe7Db\xcc\x1b\xa9\x06\x05]\xd2\xe4\x82\xae\x063\x89\xda\x19p\xa8\xd0\xff|\x7f\xb4]mvT\xf3\xa9\xcc\x83\xd5\x10K\xf7L\xea\xf2\x18\xddD#fS\x95q\n\x8b\nC\xf2\xf16^\xe0\x1a\x88t\xf6X\xd0\x16{s\xa8\xca\x8a\xf0\x98\xac\xc8\xb7W\xd4\xce\xd0\xea\xc2\xb4-~\xe7\xdb\x02\x9cS\xe2`\xcc\xee\xed1o\x7f\x85\x1b\x87\xecV}\xc2e7u\xe6\xeavT\xa4#n\xc5z\x92\xd1\xcf{\x9a\x95\xc9\x05O\xd8]\x15d\xf9\xf1D\x84\xf4\x94P\xf2\xe9\x80\x92p;\xebrK\x97\x1f\xfd\x97 \xc4\xce\x1a\xb0\xd1\x0d\xb31\xf4P}\x97\x92r;\x00\xfe[\x8az\xea6G](\xd0\x17\xe4\xd6H\xb5\xa7E\x92[\x8cN\xc6m\xe6@O\xae\x0b\x91{\x1aI\xcdu\x95\xeeO\xe3\xcb\x0b\x9aU]\xbe\xec\xf2\x16\x9f0\xa0\xec\x93Y\x8f\xc6\x0f<\x9b\x00\xe3\x02\xc6`\xc92\xa9\xf8^\x97\x10\xda\xb2\xca\x0b\x8eM\xedW\xe2\x91\xa2I\xc9\x03\xb8\xeah\xb3t\xc93x\x03\xd9\xb3\xf9,\x12\xfe\xdfb\x7f\xe7\xeb:Z_\xe6\xe5\xebOH^t\x8c*2\xf8\x90G\xb35\x1b \xc8\xba\xe2\xce~1\x8c-)!_\xf2`,\x9b\xf5E2H\xffF.\xff\xe6V\xa6&\xfc\xf1\x84?>\x06\xfe\xd8\"\x99\x15 8@\x1cK\n\x012\xb8\xa9\xfat\xb9<\x88\xc4\xfb\xab\xe7\xca\xb5\x00!\x84\xbf\xce<1\x93\xa1\xd2\x8f\xc0p3@\xef\x0ci?\xe8\xac\xb7$\xa3*0\x1f\xe9\xbe\x02\xc2f\xaa8\x88\x90U\x99(\xe6\x84\x07\x7f/z\x12\xbd\x02\x92]\xf1\x87\xeb\xd0\xec\xaa+\x1eh^\xfd\"^\xad\x89Q\x8f\xc6\xa8C5\xf0F\xef\x16\xf4\xa2\xa8\xdc(^mU24\x8f\xda\xf5M#S\x18OH]\xbb\xd4\xeazfz\x90.\x19\xa8EF\xd2\x1f\xc7k\x8er)\xebg\x80\xb5\xf8\xc4\x97\xf2\x87\xe0\x0b\x8a\xfe\xb0\xf01\x04NeL>3\xca\x00\x101\x05\x8d+ \x0d\x1fS\xa444\x11\x13\xd18R\xd1\x8cJF\x13/\x1d\x8d/!\xcd\xc0\x944\xb1\x93\xd28\xd2\xd2\xc4NLcMM3:9\x8dF\x8f\xf0\xb1\x9a\x02\x8eb&\xa8\x19\x9d\xa2&z\x92\x9aQij\xe2'\xaa\x89\x98\xaa&v\xb2\x9a\x88\xe9j0 k\"\xa6\xac\xb1'\xad\x91\xb2z`\xda\x1a\x8d\x98)\x8d\x8d8\xb2\xbc\x89l\xc6\xa6\xb2\xd1\xc8\xe9\xa9m\x06'\xb71\xa6\xb7A\x19 5\x9b\x8d\xff\x94\x1e\x98\xe6F\x17\\u\xda\x1b1\xff\x9d\xdf]=\xf8\xf04\xbb\xfaP\x1f\xcb\xfcZ@\x8aER\x15l\xd38zR\xcbA\x92\xe6\xca\\\x88\x9bJ\x7f)\x98\xb4\xe2\x02U\xf4d\xa1\xab\x1b\xdd\xb6j\xedAa\x99\xb3\x9aq\xd3d\xc1\xbb'\xe5h\xc9c\xb4\xf2\x82\x9f@{\xb2\xfcx\xfb\x90\xb1\xffa\xe7\x8eX\xc7\xd2\xb4K\xf4\x037_\xc3\xa1\x12\x02\xa2\xde~\xfc\xf5M\xb2Z%b/6\xaf\x06\xae\xe4\xe5\xa8\xf1\xf4?U\xe4\x91X\x82>\xfd\x97\"k&\xdc}\x02g\xac\x7fl\xdf\xc9\xae\x92fB\x93\x0c\x9e\xff\xe1\x0f\x86c\xe0U\x9e\xc3:\xcf\xe1{\x98\xcdf\xffK\xfb\x99\x0d\x96dW\xfa\x0f$\xbb\x9a\xb1\xe6^\x15\xf9\xee\xc6:\xcfo\xea\x9f\xccf\xba\x9cO\xd6p\x83U}\xcf;x\x9e\xdf\xf87V\xf7&\xfc\x97A\xb6\x99\xea\xff\xc3<\xf6{\x9e\xb1\xff\x89\\\x90\xc1\x83\x87\xef\xb9\xae\xc1\xa8\x0e\x18iR\xdex\x95\xe7\xb3eJ\xca\xd22P\xd1\x05\xf6\xb1\xe8{\xa7\x82\xde\x962\x03\xcd\x14\xdc\xf7L\xc1\xd9U\xb5\xcd3\xc3$\x88\xd6_\xe5\xf9\x8d\xd9lv\xd3\xb4\xd0b\x02n\x18\x7f\xe3L\xc0\xa7\x05;+\xac\xd2\xa9\x98\x94\x17/\xdf=\x7f{zv\xfe\xe6\xedMU(\x82$/\x18\xc5\xdc\x80h\xc2<\x1d\x0f<\xd3\xf1\xc7\\\x9f >\x15O\xbe\x87\x7f\xdb/f\xaf\xf2\xfc\xbff\xb3\xd9?\xf4\x8fHvu\xc2\xd4\x18\xf6\xe5^\x1c\xde?\x91\xa2\xdc\x92\x94M\x92\xb9\xa3\xa6\xa9P[34\x95\xac\x95\x86\xdeg\xbb\xb6)\xde\x11\xce\x90\xfc\xab\xff\xf1=dIjd0s\xfb\n'\x9ds\x0f\xc5\xf2c#\x83j\x85\x12\x16W\xed\xf1^K\xc9\xcb$M\xd9\x0f2f\x9e\x1d\x89}r\xd7\x0d\xc7\xf5mv7\x9a\xf1\x1f\x98js\x9d\xe9\xb8\x8d\xc4f\xd2\x9c\xad\x16\xfb\x83X\xb1>\xc1F4f\xe9U\xad\xcfk\x97\xadFm\x92\xb7\xfa\xaa\xbe\xe3]\xbf}\xbdON^(\xea\xa6\xc5\x0dBf \x86k\xeb<\x9f-H\xc1;\xfd\xf9\xf6\xd5\xec\xd7kb\xc4B/\xd6U|\xde\xe45\xf6\x1d\x13\xcf\xbd\x9f\xfe\xf4\xee\xcd\xeb\xfe_\xbe\xff\xfe\xfb\xef\xf5\xb9g\xdf\xb5wK\xa1O\xe4l\xbb\xc8\xc3T\xe8\xd7\x87\xb2\x89G\xd8\x1cRR\xf4\xe9\xe8\xd5+\x8e\xbck\x8f\xc1\x13\xa0\xbb\x05]\xad\xda\x03\xf1D\x9e\xad\xca\x8d\xb4s< \xeb\xde\x87\xff\xc3\x86\xfdA\x9aP\x9a\xa3\xbd;\x89\xb3z\xfb=1(\x88d\xf9\x91\xed\xbd\xf6B\xb1NR\xaa\xcb\xb7z\x8f\x9e\xd1\xa2\xcc3#;\xcb\x9b\xff:)\xcaj\xceg\xfe{\xb8\xabSj>d\x0cP\x7fw\xcf/Q\x01\x8c\xad^\xe3\xe3\xbf\xf6\x04\xae\x998\xbb?\xac\x99\xe8\xfd\xb5\x13\x13\x1d\xde\xef\xd7d\xc7h\xfdo\xd1\xc5\x7f7~\xc8\xfa\xad|\xe7\xeb\xfc\xe9Z*\xb6\xfd5\x16+\x94\x94pI\xd3\xf4\xd6\xc7,\xbf\x14v\xde-7\xc5K\xc3\xac\xce\xa8}v:\x11\xca\x96\xc2cB\x10t\x9ad\x8c\x93m\x80\x08\xb6\xe9\x13\xfc\xc0\x99\xb8\xe6\xa1m\x9e\xaez\xa6a\xbe\x05\x92\xac\xe1=\x90\x96\x04\xc9z}Z\x9c|\xc3qp\x83\xed\xdfz\xb8\xda\xb5\xb5\xb6\xa2\xfc\xfdo\x7f\xbfi`\xce1\xeb\xddo\xc0\xbc\xe4|\xd8\x8c\xd4\xdd\xd9\xbd\xbb\xf7\xcak\x86e\xac\xff\xab\xa7U\xd76B(hu(2\x11\"P\xffq\xca\x875\xf9\xa3\x8f\xea\x8f\xd6\xf2a\xa9\xb6n\x0c\xa6\xb6SMRs\xe5\xc32\x9b\xd9#\xda\xd8\xdd\xdbK\x0c\x86\xcf)]5?\x0f\xda\x0d\xd5\x94\xf5}\xbc\xb1}\xca\xfa>\xc2\xc0>e}\x0f3\xaa\x8f4\xa9G6\xa8\x8f0\xa7\xc76\xa6G3\xa5\xc75\xa4G3\xa3\xfb\x8d\xe8\xd1L\xe8S\xd6\xf7\x7f\xa5\xac\xefC\xf4\xa5\xba\x8e+u\xdc&\xbf\xe8$T\xe2/\xdc\xa3U\xa2=\xf2\xd5s\x8b>\x8b{P\xdf\x9c\xef*.\xb2\xe1\x9f\x04\xa5\n\xc3Q}U\xd9\xe8\xcc\xc3\x92\x0c\xd4\x8e\xa9\xees\xbd\xd62\x02=k^H\xea\xc4o\xf2\xbfVI\xe37\xaa\xb9\xcb\xcd\xac\x81)\x96vI6_u\xd9\x1c&\x96\xfaJXJ\x1b\xdaOI\x96\xec\x0e\xbb\x9aw$\x9c\xaef\x0b\xc624\xabh\x01\x179\x0f\xb1\x160\xb6\x9a\xd6\x8e|\xae\x17\x1a\x07p\xb3\xcb\xfc\x9f\xc8g\xde\x0fA\x86w\xe3)\x1b\xe96OW\xb4\xe0\xbc[w\x91Ml\xcb\xb8p*\x9eJ\xed\xd0\x12\xc7\x13\xdc\xeb\xce\xcf.\xcf\xaa\xad)\xbc\xa6\xc7\xe2z o)!i\xfc\xa3\x92\xb5\xbd\xc9/h\x91\xf1L\xc5u'J\xcb\xf69\x93\xbf\xa3w\xceHa\xcf/\x04\xba\x1c\x9f\xee\xbf\xd3\xfdw\xba\xff\xd6e\xba\xff\xd6\xd5\xa7\xfb\xeft\xff\x9d\xee\xbf\xffj\xf7_w\xdb\x91\x81`:\x0c,\x02\x08,*\x04L=\x0cG\xc2\xbf\xe4Dw)\x8e\x01|9\x11O\x16\xb0\x97\x17\xea\xa5\xa3K\xf00/\xbd\xee?Lc\x1d\x04\xf0\xc2\x0c\xd6\x07\xee\xb2\x8f\xcd\x0b\xec\n\x80u\xf5\xbd\xf8#!]N@\x97\x1d\xce\xe5\x02s\x19g\x01\x0b\xe4\xf2\xc1\xb8T\x10\xd7\x08\x08\x17\x02\xc0\x15\x0e\xdf2\x80\xa7|\xd0\xadH\xc0-C\xcb=N\x89\n\xd9\x8a\x0c\xd8\x8a\n\xd7\x8a \xd6\xb2B\xb5T\xfc\x8b\n\xd3\x8a\x03\xd2\x8a\x06\xd1\x8a\x0b\xd0\xc2\xc1\xb3\xbc\xe0,$4\x0b\x03\xcc\xd2`YzkX\x88\x8e\x1b\x92\x85\x04d!\xe0X\xbd.\xc7\x84bE\x06b\xc5\x83a\xc5\x03a\x0d_]/\x00\xcb\x07\xbf\xaa\xc5\xb7x9\xc4c(\xa3\xd9\xa1g\"\xbe\x05go\xdf\x9c\xbdy\xf7\xf4\xc7\xf9\xbb\xf3\xa7\xe7\xef\xdf\xcd\xdf\xbf~w\xf6\xf2\xf9\xe9\xab\xd3\x97/\x9c\xdf\xbdxy\xf6\xe6\xdd\xe9\xf9\xfc\xec\xe5\xdb\xd37\xeeO\x7f~s~\xfa\xfa\x8f\x98/\xcf\x9e\xbe{\xe7i\xf7\xed\xcb?\xbd|~\xee\xf9\xe8\xd5\xd3\xd3\x1f;\x9f\xc83\xe3 j\xb0v[wm\xc0|'\xdehas\xc95\xdfN\xc6\x15\xb9\n\xf2\xf9\xc7\x8eC\xa1\xbbh\xceIwvRII)NB\xde\xc8\xbe$\xa9l|\xe6n\xab\xbfpzs\xfd\xdf;\x96\xfd\xc6\x0c.\xdf\xa8Y\x1d\xb8\x18\x14]\xe1\x16\xe1N\xc3}\xd3\xb8\xa5+=\xc6\xd0{\xd2\xfb\x19\xd7\x11a\x98\x0f\xed\x87`;\xbd\x03\xe2\xef\x8e\x96{\x8b,\xe4\xda\x96t-y\x02\xdb\xe7i\xbefi\xbd\x03\xf5/c\xba\xb0\xa04\x83\x82\xfeB\x97\x95\xb7'b\xdf\xe8\xfd\x10\x7f\x1f\xd3\x8b5I\xd2\xb6\xf9u\x92\x91t^\x914\xbd\x9a\x0b#\xd6 +\xfd\xf5+Z^GY\x1e\xc8\xa2d\xfa\x04\xea\xdb\xebY\x8e#\x9a\xe5s\xa6\xd9\xcc/h\x95#*\xf4\x04\xcb9\x1b\xfb[>\xf4\xce\xb4\xf2$\x0f\xa4X\x01\x9f\x1a\xe9~2\xb8X\xeay,\x0f\x8b]R\xcd\xabd\xa7\x05\xe2[<$+R\xd1[\xec\xfbo\xeaN \x87\x15\xcdVc\xc8p\xf0\xe6\xe4\xe6\xfcZ\xdd\x9cB,\xce\xcb\x8a\x14\xa3\xb8E\xd2\x19\xc5,\xbdI\xae\x8fT%-lA\xe5\xcc\xec\x98>XH\xf9b\xd9\x08\x0eW\xe3\xbb\x8eN\xa4u\xb1\xab\x0ba\xf4 \xdfQj\xfd\xcc\xa4\xffxt\x1f\xaf\xde\xe3\xd4y\xd0\xfa\x8e\x99\xe1c\xe89_J\xc7\xf1-\xca1\xf4\x1bE\xa7\xf8\xe2z\x8d\xb7\xfd\xe3\xe83\x8a.\xf3%\xf5\x18\xb3\x0e\xf3\xa5\xf4\x97Vw1\x88\x1a\x99\xde\x9d\xf3G0\xc2_;0{\x1br\xa5`\x9b\xaa\x1e\xbe_\xfe:Sd0Jq2\"+\x00\xe3\xb8\xd1\xc2C\x0c\x90:\x07!\xd3qlR\x12\xe0\xf7\x9b\x81x\xb0\"\xa1Q\x1a\xa3Mh\xc4\xc6\xe5\x19v\xc0H\x95\xbd\x81A\x91\xd6\xa0>$\x88\xb4\xdbLx\xaa\xdd\x1a\xcdt\\\xad\xd5\xba\xe3\x9c\xbc\xe4\x08\xca\xb2\xec\xbb\x81\xaa\xf0\xbf\xf0\xcbR\xf1\xf6c\xe4\x1dy\x94\xd7\xa3\xfe]M\xad8\n>\xdb\xe7/\x01\xa55\xb2}\xdd\x9f)\xd8s\n\xf6<~\xb0\xa7z\x16\x04\x9c9e\xd0\xa13\xf0\x11\x1dy\x8dv\xbe\xa5\xd3\xfbFG\xe2\x8a'u\n*2\xd7V\xb9\xfc~\xd0n\xa8\x9b2$\x81\xb7rP\xaf\xaf?\xd2lSmko\xa0\x11\x1c\xdd\x00\xa3]c\xee\x7f\x84\x18\xf4\x18\x1d\xd8\x88\xcb\x87I\x1f\x1d~\xfeE=\xfd\xc6\xe9\xa3u\x89\x87\xee\x07\x0f\xc2\x1f\xd0\xbbEG\xb7ED\xfb\x83\x05\xf1\x0f\n\xea\x1f\x84\x89\xd9\xbd\x1f\xbb\x9f v#\xff|\xd0^\xfct\xc8\x8b\xc3\x0e9\x99C1\x84r\xf5\xf7\xb4X\xd2\xacb\xa7)\x13X\xfc4++\xf2\x91v\xb2\xf5^\xe4\x15\x95\xec!\x8e7\xfdt^hH\xd4e\x9e\x95\xc9\x8a2\x86\xe46\xb2.\xe7T\xdb\x82\x96l=\xbf\xd0\x18\x19\x87\x14\x95\x84h\xfc'-\xf9\x88D\xf4F\x97\xdf\x9962\x83\x17\xc2\xc8f\xe6\xa2;\xb3\x87\xdd\x81\\\xd0*\x9f\x7f\xe1\xd1\x08U _\xc3\xcfT\xae\x0d\xdf\x13\xfc\xddG\xf9O\xee=W\x87\xe7]16\x18\xbaj&\xa0\x1e\xf2\xdd\xdb\xf7\x0d\xb7\xda#\xbc\xca\xa6\xeb\x13\xb2\xf3\xc1\x1aE=\xea'Cv_Dk\x90\x16s\x03\xae3\xd2~BV\x96\xc4\xcf\xa3o{\x11cq\xc0\x93\x00:fL\x0e\xc4\x8c\xcb\x01w\x1a\xe8Q\xf19\x101F\x07\xbcq:04V\x07\xc6\xc4\xeb\x98f\xecj\xcf\xf9\xc5\x9a\x12zD\xdc\x8e\x81\x96P\xa4\xaci\xa1\xc7\xc5\xef\x18\xc8\x1d\xf6\xd6\xd4\xd0\xb1\xe3x`|,\x0f\xc4\x8f\xe7\x81q1=0.\xae\xc7\xbcE\x8d\x9d\x8c\x16\xed\x03\xd1#~ f\xd4\x0f\xa0\"\x7f f\xf4\x0f8SH\x8f\x8b\x022\xedqc\x1ai!j\xbc\xb1A0:>\xc8@\xd0\x94Lzp\xd4\x10\xd8\x12J{\x8exGRi\xcc\xf9?0\x92\xc8$\xf6\xac\xa9\xa5}\xfd\x18\x17U\xa4\x10\xe31F\xc6\x04\xd3Q\xa2\x8b v\x84\x11\x18\xa2\x8c`|\xa4\x91B\xad2\xa4\x9a\x1e\x17{\x04\xbe\x90\x1cp%\x9cF\xc4!\x81-\xd3m@<\x92\x9d\x86\x86G\x1f\x15\x9b\x04\x01\x93\xe1\x8bQ\x02\xef\xb8\xbd\xb1J\x10\x16\xaf\x04\xc6\xb4\xa9#\xe3\x96\xc0\x17\xbb\x04\x9et\xd4\xbe\x84\xd4\x8eY\xc2\xc62\x01\"\x9e \x8c\x89\xa9G\xc55\x01.\xb6 \x06\xc57\x81ub\xbcqN\x10/\xd6 \xec\xbd\xd08-j\xdc\x13\x8c\x8c}RH\x99RWG\x8e\x86\x82\xc8\x11Q\xe0N`mJamJb\x1d+B\nbFIA\xf4H)@GK\x01&b\n\xf0QS\x80\x8c\x9c\x02sRks\x9ac|\x9c\x8d/\xb15:\x92\np\xd1T`\x1aF\xcc\xa8*\x18\x1bY\xa5\xd02$\xbc\x8e\x19k\x05Q\xe3\xad`4?x\xe3\xae\x00\x11{\x05\xbd\xe4\xd7z\x0c\x16\xb8n3j,\x16\xf8`\xb3\xdeo\xad1Y\xe6\xcfmqY\xe6\xaf\xb5\xd8,\xf3g\x86\xf8,\xf3\x87J\x8c\x16\x84\xe0\x96\xdb\nv\xc0~\x1c\x1cs]\xbe\x14\x9e\xd9\xde\xde\xf1q\xcdu1\xc4L\x99\xbbtd\x9csp\x7f\x8e\x83{n\xba\xa1\xc7r\x99\xbbq<\x1ct]\xec1]\xe6\x1e\x1d\x07\x17]\x97~l\x17x\xe2\xbb`\x98G\xc8\x10\xeb\x05n[\x911\xe6\xcbSG\x8f\xfd\xf2T\xb0\xc7\x809+\x1e!\x16\x0cl\xf1`\xce\x8e\xd8\"}\xa0\x83\xd9\xd1\xc3}\x06\x93\xb4\xc4\x89\xc1\x04\xbb\xf9\x1d\xc1n\x1c\xd1f0\x94q\xac\x91g\x03)F\x8fBs\x02\x12U\xbf>\n8Pw*\x08\x90(+\x85c\x12\xeb\xb1\xfc\xd6p\xf0F\xc4\xc1`\x01QYq\x07\x1e\x19\xe1\xdf\xf0\x10\x1f}\xe0\xc3\x1f\xc4F D\xc6 xP\x08\xa3q\x08q\x91\x08\x18,\xc2\x084B\\<\x02\n\x91\x10\x17\x93\x80@%D\xc7%x\x90 \xc3\xb0 FBN\xbcB\x14\xc4\x02\x12\xb3`\xac\x19\x84c\x18\x8dd\x88\x8de\xb0\xa3\x19\"\xe3\x19\x8e\x81h\x88\x8ci\xc0\xa2\x1a\"\xe3\x1a\xdc\xc8\x86\xe8\xd8\x06;\xba!\x00\xdf0\x1c\xe1`$f\xcb\x8a*\xca\x08\x94\x83\x15\xe7\xe0U)\x9cX\x07\x9c\xc6\x11\x0f\xef\xe0F<\xf8{\x13\x15\xf5\xe0\xc6=DC>\x8c\xc5>h\xe4\xb8FcT\x1e\xe2\xe2\x1fl\x08\x88\xf1\x18\x08\x84\xe3\xdf\x89\x83@\"!\xac\xee\xd4@4\x84\x9d\x8e\xc1\xc74\x1a\x13\x1129\x18\\\x84\x7f\x16P\xd8\x88`t\x84\xd9\x03\x17\x01!\x81\xc0H\xf8P\x12~\x9c\x84s\xd6B\xb0\x128\xb4\x84\x19/1\x1a1\x81\xc6L\x0cEM\xd8\xa7 \x85\x9c\x88\x8a\x9dp\xf4\xc5\xc0\x89\xa3\x10\x14\x1a5\x03\xa2\"*\xa6\xc2\x86\xaa\x18\x89\xab\xd0\xbb\xac\xe3,\xe2#-\x0dG\xc6\xf2\x0ccO\x14A\xf5\x95\xa3b\x0dr\xcdA\xca$\xdb\x9c-\xdb\x0c\xa3\x18A\xa1\x7f\xa9\xcb8\x9c\x94\xf3\xca9\xb4\xa4\x0b\x94u>i\x17M\xde!%\xde\xd1e^d\xa9wL\xb9\x17S\xf2\x1dY\xf6\x89\xe2\xb2\x88\xff\xdc\xeaN\x8c\x9c\xa0\x90a\xacDOE]\x9e\x93\xb2\xacT\x03\xe0\xe9\x8b\x93\xdadK\x8b\x93\xe6\x1dTc\x0f5e\xae\xb4js\xe5t\xe1\x9d.\xbc\xc7\xbc\xf0\xea\xa78VC@d\xe0\xe4W\xa5\xb3N>\\\x84n\xa0&\xae5.\x85\x91\xaf\xec\xdb~l\xa2Z%\xd1\xa9--\xad!\x89\xeb\xc0\xde\xff\xbb\xb1\xf7\xc5\x80\x14\xb4:R\xb6\x93~\xd6\x96zv`\xaf\x8ds>4\xd5\xac2\xe7A\x89e;|\xa7\x08C\xfe'\xce\xcb\xec\x93$\xdb\xc8.\xe4\x99\xe9\x00(]|\xfd\xb6\xe3\xb9A\xf0\xb5b21L\xb1f*1|\xd37\x91\x18>0\x9bF\xdcf\x91\xf1\xbe\x14\xc3\x1c\xfd\xdc\xd8/\x10\x93c\xd4\xd6\x9d\\\xd8\x13\xc0\x8ann\xa8\xa8\xea\xe3F\xda\xfaS\xbe~\xd5\xd5\xa5w\xfb4n\x87\xae\x8d\xd0\xb2\xd1\xfa\xb5]\xb2\x0c\xd5\xa9;l\xd0\xa1f\xd6\xa6\x8f\xa8GG\xd3\xa0\x8f\xa3;\xc7\xd1\x9a\x8f\xaa/\x9b\xc5\xf7\x10\x1d9\x86vl\x91\"o:{W\xdb\xb7\xfd''\xdd[\xc1\xb6W]\xfb\xd4\xb2G=\xfb\x13\xb57\xcd\xfb2\xde\x9e\xd4\xf7\xe3\x91\xf6b\x94}\x18\x7f\x0f\x8e\xdf\x7fG\xdc{f^O\xb2M\xa0\xbalyi\xc6x\xbe\xf5\x18\xce\xfb\xc2L\xef\xebn\xdfl*\x95\xa4\xe1W\xa5vIV\xb5\x0f\xcb\x86\x8d\x97\xd5\x9d+\xd0\x03\xe3`\xe5u\xac\x92\xf1I\xcb<\xe1\xc8MV_~\x93d\xeb\x94\xdf\x8c\xe7l\x8f\xcdEp \x8e\xeaN\xbe/B\xb2\xec@R\x19W\xc8.\xd8\x0dM\xa6\xd4R\xad\xa1\x1d\xf9\x1c\xd6\x80\x8f\x9eG]l\xe9Im\xdcHo\x93\x93t\xbe\xc8\xb3\x15\xf5q\x90\xa4\xc6*\xb0I\x95\xf7)\x10u\x81T\xf9\xaey_4\xcd\x97\x1fK\xc6\x97\xf3+J\xdc\xca\x99\xf5Z-\x9b\x131\xd5t%\x89\xb2f\x81\x11\xd5\xd9T2\xa8\xc0\xf0v\x9eT\xa9o\xafl\xf5a\x97\xaf\x0e)\xb5\xf1#\xbf\xe0>\xe5\xebzV\xe4\x17I\xc9\x04m\xb0\x85[0\xc6|\xdfP@N\x80\xfdr\xa5Q\xac\xef\xe92*\x95\x8f\x8d\xe3\x9e\x05Ov>\xe4w%\xd7\x81\xef\x1c\xb3\xd3\x1e\xd0%p[\xa5`6\x10\xe8\xb3}Z3e\xf047\xec\x81\x03\x1fMs\xbeT\xe4~\xa3H\x1e\x1b\xedV\xeaN>\xca\x92h\x12\xe4`[?@ t\xf0\x0buL\x0ba\xc2\x1d\xec\x02>\xa41\x0cm$\x8c\x02'\xf4\xc1&\xf81\x94\x11\x07\x00\xb8\x0e\x01g\x1b~\x1b+\xfe@8\xc2\x13Cbc\xf4\xf5\x97\xe7\x1d6Cl\xbc\xf2\xb0(\xf7d\xe9V6zVv\xc3\xef\x8aaO\xfb\xc2,\x9b:\xdd\xed\xea\xd1I\xb6J.\x92\x15?8\xea].9_\x04\xb8\x89T&]\"\xec\x13A\xe8L\xb7\x04)\x934ZJ\xb9\x84TOF\xd5\xce\x93f\x14\x83\x84\x93\xbe@`\xe7X\xac;\xc4\x90\xb3\xc0\xbdh\x16\xe6\x1d\xca\xb8eJ\xcam\x92m\x86\xaa\xdee\xb2\xc9\xe8j.7\xf5e\x92\xad\xf2K\xe4\xb9\xdb\xdd\xc9\xbb$\x9bKRL0\x04\xd1\xe9\x9c\xdf\xab\xfc2\xab\x92\x1d\x9d\xffB\x92t\xbe\x92\xd1MN:|\x02\xe6k\x9e\x11(\xcf\xe6\xab\xfc\xb0H)\xefKx\xf3\x1a-\xd1\x9bPB&\xed\xb5\x89o\xd3N\xdd&'\xc8B\xb8\xb7\xea\x15\xd5UZm\xadG\xef@M\x83\xc5m$'\xcf\x00\xe6\x18PO\x01\x0f\xff\xa0h*\xfeH\x1f/9hbx\xcaQ\xdd\xda%/\x7f\x85\x13\x8d\xcek\xcdy\x1c\xeb\x94\xf5\xf1\xef\xbbd\x93%\xd9\xe64[\xe7\xc1L|AR\xbe,I\xb6\x99'\xd9\xba\xeb\x1c\x11\x83P?\xa8G \xff\x06\xfco\xdcm[\xe3g/\x98v\xc8\xb35\x89\x17\xbc\x87l\x10Y\x15\xb5\xae\x02\xf2\xbf\xa5\xc9fk\xcc\xf4\x19\xb0\x89\x9aQ\x0bj@\xeah\x06nd$U^p\xa72\x8f\x1c\x06\x02K\x92\xad\xd8\x9f)\xbcy\xcb\x7f8d\xbf\xf0\xc0\xa6\x0e\xc9$[\xd1\xcf\xf3|\xbd.i\xb4\xdeq\x9a h\x8a\xd4Tb\xe7\x0b\xc5\x0f\x16I\xa5\x05\xbb\x88~\xcd\x0fY\x95\x84:\xf5-\x017\xf2\xde\x91\xechY\x91\xdd\xbe3EK\x92e9O\x06T\xcf\x07\xf0v;\xf5\xab|\xb7(\xab<3k\xd8\x8b2\xda\xb15jH'\xf3K3\xc1]t\x95\xa5\x91'`DTe\x90d\x12\xd3\xd5p\xb3\x92\x05\xc9<%\x8c\x9e\xf8/\xd3\x8a\x8b\\42\x8b\xb4p\xcc9\xe9\x9d\xbe\xfecM\xf0\xf4\xf5\x1f\x9d\x14\x0f\xd9B\x1cx\x16\x82u\xf7\x10\x9dk;fa\xad\xe7\xf9\x8em\x1e\x05\xf9\xe7<\x0b\x96M\x15\xee\xfc\x1df\xb1f5Q*\xd3\x8e|\x9e\x07},\xdci\xd8:v\x1d\xbd\x9d\x99\xb7\xa4\x8d\x1d\x12,\xca\x93\xees\xb3d\xfd\x0dH\x00!Wvj\xa3n\x87\xda\xb2\xa0\x84g\x99\xea\xfc\xad\xc7\xde\xe2O\x87=;\x0d\xe6\x01>\x8e\xfe\xe9\xd1\x1bN;\x82\xa6\xf3\x9d\x0e+\xb8\x9d\x1a\xdf\xd8\xeb\x92\x97i\xde\xb6\x0c\x80\xe0\x9c\xfe\x9a\x18\x86\xa5/\xb6\xe5#\xe3\"k\xdf\x9a\x177\xde\xc2\xaa\x8bJP\xb3\xf7\x82\xa6t\xd3\xb9A!&n%\xaa\xe4\xc5\x1c\xa3\x885\x9d@}]nI\xa1ob\xdb,6r\xbb\x1d\x85\xea\xdd`2G 2y^\xa0\x12\xb64\xe5\x99vH\x06d\xc9\x0f\xe7\x19\x9c2\xf1$I\xe5\x97\x99H\xc5\x93g\xb4\x1d\xaa\xcc\xd4\xcf\xdf\x9e\xc8\x97 \xd7\xcd\x05\xd5\x0e\x902\xbf\x14W\xa1<\xa3\xea\xe0Q+\x10l\xa7[)\x8bg\xacf\xae\n\xee\x85\x04\xbbXs,\xa8\xa3\x96\xba\xb0\xd6O\xedw\xb9\x88\x8b\x0c\xb1\x17\x1a\xd4\xc5feAR\x92\xe9\x88\x0f\xe4\xda`QR\xa6\xccZ\x813;8\x83VKbL\xe2\xac\xf6\xbaX\x17\\v,\x9f,\xe8\xdeg\x19\x95\x0b\x92\xd2\x8c\xc7\xf6uX\x89~^\xd2}%u\x94\xaa\xf3\xb2B\x7f\x11\xd5l\xb0\x82\x9f\xebQ\x95\xb0\xcb\x0b\n\xe5!\xa9\xb8\xe9\x83\x9da\xcb4a\xad\xd5\x97\xe8\xd2)\x02\xda\x81`\xf7>S\xe8?z.*\xe2\x19\xac\xca\x8d)\xba\xa4\x8b2\xf1\x9cr%]\x1e\x8a\xa4\xba\x9a\xf3\xe9Y\xba\xef\xb0+Z\x91D\x7f\x01\xcd&\xc4;\x837j\x8f\x9d\x8f\x1dS\xf8CR\xb2\xeb\xcd\x92\xa4A\xa6\x84-%+}\x12Q;T>K\xa3l\x0eG\xda\xd7\x99\xae\x97\x9a\xd7\xb4\"\x15\x85\xaa Y)\x84\xc2\x8e,\xb7I\xd6{\xd0\x85\xb7\x8c\xcd\xaf\x14\xc5\xc7?\x00/br\xf3\xf0\xe4\xe6|\xf2\xf4\xde\x0b\x0e\xdf\x17\xf4\"\"\x83oI\xb9\x1d\xc8\x90\x86g}\xf6\xa4\xa8\xe6%\xad\xe6\xea\xf6\xae\x8b\xb5\x87\xe0\xec%\xaf\xaa\xdb\xd7\x9b\x9f8\xd5$\xab\xe8\x86\x16\xc6/\\\x0e\x1f\xb0N\x03\xf8\xa6\x02\xdc\xd3\xd1,\xda\x19)\xaa\x92V?\xf0YQ\x97\x9b\xdf2\xaa\xb9\xde\x05/\x07\xd9\xfc!\x8c\x94\xd8[\x82Q\xd8\x16\xec|\xc7\xfe\x19\xa1\xb9\xd6)\x14\x81\x98\xda\xf7u\x91\xef\x84\x9dn\xbf\x87\xfcP\xed\x0fU\xfb\xb7v\x0ft(p\x9fO\xd4>5\x922\x02-\xb2\xdfG\xa0\xc2\xf9E\xba%\"\x90\xa3\x17LQY\xd2\x08\xa4\x9a\xf5k\x8f\x17E<\x89\xe04\x1av{\xc1\xa0\xeb\xc4\xae\xea]\xe0\x9b\xe3F\xd8\x0f\xcfi\xb6\xa2\x05\x8fG\x12\x1bB\x88\xa7\xfa\xc4\xb8 \xa9\xc1=\x10\x17w\xc1\xfej\xbf\xbb9\xc6\xdf2\xe1\xfe\xb0\xd0\\\xa6N\x89\xea\x92\xa7\xd5\xf4R\xec\xf4R\xec\xf4R\xec\xf4R\xacZ\xa6\x97b\xbbez)\xb6S\xa6\x97b\xa7\x97b\xa7\x97b\xbd\xbd\x99^\x8a\x85\xe9\xa5X\x98^\x8a\x9d^\x8a\x9d^\x8a\x9d^\x8a\xd5\xca\xf4R\xec\xf4R\xec\xf4RlS\xa6\x97b\xa7\x97b\xa7\x97b\xe3\xbe\x14+ \xe1fK\xb1)\xc8+\xda\xcb\xb2n\xcc\xb1\xfd\xcb\x1e\xfa\xd8\xfdY\x8bC\xb6}g$\x86\xc2&w?\xb7AvD \xc6+\xb7\xe5\x08\xc8e;\xf1\xb1\x18f7\xe5Qhf\x1b\xe9A\xb8\xe6\xb6\x08 \x1a\x9a\x97[(\x9e (\xe7\xac\xa8@\x87\xd4:\xc1.\x19\x0dX\xd4\x16\xa7\xf9D\x07\x1b!+j\x00$d=;( I@\x03*\xa1\xea\x8d\x01/\xb5\xa5a\xc4\x98A\xcd-\xd1\x88o9v1\xf6\x91X\xcc\x0e\xdao\x8b\x834xA\x1a&H\x7f[\x9cL\x01V\x98\x7f[P\x04\xac\xd0\xff\xb6x\xe8\xf8,|0\n?n$\xd7\xd8\x95M!\x02m1\x04\x0bth\x98\xc2\x06\xda\xe2\x19\xb4/\xfa\xac\xec\x13\xc55\xf4QQ\xac=J\x9d\x88V\x13\xc7\x0c\x0dl\xed\xd1\xea\x05\xb9\x8a\x82\xd7\xf4H\x9a*\xda^y]\xd7\xf7Z\x86\x9f\x9e\xc5\x9d\x92\xc7EJ\x1eg\xbewy\xd5\x02\xab6\xd2%p\xdbD\xc1\x92\xa5\xdf\xa9\x97\xbc\xafM\x02c\x14\x94\xd6\xae\xf0e\xf5\x93\x01\xa1F^5\xc2ZS\xb3Bt\xbf\xd7\xf3\xa3\x1a\x06\xd9\xad0(\xa5\xa2\x16%\xc8\x7f>\xda\x83\x1e\xdb\x87>\xa5\xa2\xee\x16\x9c7=\xb2?}JE=\xa5\xa2\x9eRQO\xa9\xa8\xfd\xbew\x84\xc3yJE\x8d\x99\x1c\x8c?\xde?\x0b(\x9f|\xb0W~JE-\x0b\xc6K?\xa5\xa2\x1e\xef\xb3\x9fRQ\x07\xfb\xf3\xf5.O\xa9\xa8c\xf9\xfa\x8f\xe1\xed\x0f\xf1\xf7#=\xfeA>\x7f\xbc\xd7\x7fJE=\x04\x03\x10\x17\x050\xa5\xa2v\xe1\x01p\x88\x80)\x15\xb5\x07%\x10\x88\x13\xf0!\x05F`\x05\x8e\x8a\x168\x1e^\xe0\x88\x88\x81\xa8\x98\x81)\x15u@\xc5)\x15\xf5\x94\x8aZ\xfd\xc2\x836\xf0\xe1\x0d\xa6T\xd4\x83\xf0\x07H\x04\xc2\x94\x8a:\xb1\"\xb8\xa6T\xd4\xf2:\xd8#6\xa5\xa2\xfem\xa6\xa2\x06k\n\x86\xd2\x9e\x83aJ$6%H\xf9g'Hq`\xb2piQ\x0c\x04\x02 a\xfd\x9c\xe7\xc1h\xb0mRV\x96\xdd\xc1~\xea\xed\x8b6\x1f\xb8\xd8u\x02\x7f\"\x8f:\xa1[\x0e\xda \"\xaf\xbc\x89\x9b\x82`\xa5\xd2%\xaf+\x02\x92\xcb\x16\xa4L\x96\"#=\xef\xbf\xfe\x9dK\x0ftk\x81\x9c\xaaY\xf7\xf2jp\x8e\xfd!\n\xd9\xef\x8fC\xda\xaf\xf5=\xaf\xb1x\xb0${\x91\xf6R\x82\x88\xe4\x9f\x8bCJ\x85\xce\xb3/\xf2%-Kn\xf1\x12\xf3a\xa0'\xe5)\xffy\xb9%Ivb\xd2\xfa\x92l\x99\x1e\x84\xed,M;\x1f3M\x8d\xb0\xf1\x1e\x96\xa2/R\x11\x91\xbd\xb0\x82\xe9H\x8bh\xb9nH\xed*\xccA\x14\xaa\x82d\xa50\xad\xed\xc8r\x9bd\x9a#\x9c\xf7b\x9eh\x86&\xe7R\xd82\xc59W\xcf\x95!.:\xe8\x16\x84\xe1\x98O\xb4ytb\x07\xed\x0bzq\xa4\x0d\xb4%\xe5v$\x93[\xa0\x14{RT\xf3\x92Vs\x93\x98\xa9\x8b\xe7\n\xe8\xeb=\x98\x8f\xc4\xde\xcf\xbc\x05\xf5\xc1\x04\xb5\xf8\x12\x03\x82s\xaa\x003]\xe0\x9f\xb2f\xc1\xcfHQ\x95\xb4\xfa\x81\xcf\x9c\x89e\xf8\x15\xa8\x9a\x9b\xbb\x84\xe2Hc\x17d\xf3\x8c\xac\xd8\xd7\x82\xe9\xd8\xf6W\xbee\x7f\x8a\xdc|\xab]F&\xac\x8ek]\xe4;\xa1\xb8\xef\xf7\x90\x1f\xaa\xfd\xa1j\xff\xd6\xee5\x85\nW\xf7\x8e\xd6\xc7\x16|\x1d\x97.\xd9\xef#S\xe4\xfc'\xf5\xc1\xc8\xa4)\xbb-eK\x1a\x99l\xb3\xfe\xed\xf1i\x10\xa3L\xd2\xe4%\x1d\xf6l\x84\xa3\xfd\xdea/vtO\xbbk\x8eUq\x9b:\xa7\xd9\x8a\x16\xbb$\xab\xe4\xe6\x13\xe2\xb3{\"^\x90\xb4\xa4\xc6@%=\x17\xab1\x13\xabC\xea\xba\xe4\xad/\xb2\x00|s\xe4\x8b0\x00\xff\x89\xe0;\x0f*G\xb4\x01\xf8\xfa'\x8a_;\x13eh\xe4\x81\x95`\xd5\x83\xd0Y\x10,\x03#\x10\xac\xc4\x1c\x91 04:\xc1J\x8dw\xca\x13\xa1\x00\x10!J\x01\x86G*X\xe9\x11T\xb4\x02\x8c\x8bX\x80\xa1Q\x0b\xf6n\xa7)\x9f/o\xe4\x02\x0c\x8c^\xb0\x12\xe3\x98eD\x04\x03\x8c\x88b\xb0\x13\xa4\x95/\x92\x01bF3\x80?\xa2\x01bE5\xc0\xa8\xc8\x06\x08\x8fn\x80\x18\x11\x0e0\"\xca\xc1!\x9f,w\xcf\xbaD\x8ev\x80#E<@\xfc\xa8\x07\x08\x88|\x80\xc1\xd1\x0fN\x19\xee\x8e\x80\x80AQ\x10VRMt\x84#\x12\x02\xa4\n\x80\x8c\x86\x80\xd8\x11\x11\xe0\x8d\x8a\x80\xb1\x91\x11\xe0\x8a\x8e\x00\x9c\n\xe4\xbd\xa7\xe2\xb5\xa4\x98\xd1\x12\xe0\x8d\x98\x00d\xcf\x86EN\x18I\xd5g\x84;z\x02bFP\xc0\xb8(\n#=y\xd0\xdb\x15\x9b\x11\xd1\x14Fz\xac?\x95%\xa2\x02\xa2DU\x00.x\x00|\xd1\x15\x80\x8f\xb0\x00\x17\xecz@\xa4\x05x\xe8YP\xa5\x11\xa2. x\xf2p\xd1\x17\x80\x9c!d\x14\x06\x0c\x89\xc4\x00\xfb\xcc\xc5\x89\xc8\x00\\T\x06 \"3\x00\x15\x9d\x01\xfeY\x0d\x8b\xd2\x00t\xa4\x06X\xa35 F\xc4\x06\x84Dm\xc0\x88\xc8\x0d\xf0L!2\x82\x03bGq\x80\xaf_\x16N\x1e\x14\xd1a\xa4\xe4\xc8\xcf(J\xd4\xc8\x0epDw\xc0\x88\x08\x0f#1[\x16GQFDz\x18\xe9\xd9\xaf\xa2\x9e\x08\x10\xb0F\x81\x805\x12\x04\"G\x83\xc0\xa8\x88\x10#9S\x94\x08\x0c\x8d\x141RrG\x8f@`\x04 \xe0\xa3H 4\x92\x04\x82\xa2I\xc0q\x829\"\x06 j\x00\x13Y\x02\xa1\xd1%\x10\x12a\x02\xf6A\x8e\x884 \xdc\\#\"P\xcc\xbcm\x8bB\x81\xc1\x91(fR\xb6\xe8\x148B\x84\nD\xe29d\xa4\n\xa0\xa3U@\x8bX\x01k\xd4\n4wcS\xe4\nX\xa3W\xc0\x7f\xa76G\xb1@P$\x8b\xe9kK4\x8b\xedSSD\x8b\xfe\xad\x95h`d\x0b \xa2[`\\\x84\x0b\x1c;\xca\xc5\xd4@\xbcH\x17\x1b\xf5H\xd1.:\xf9\x91\x11/\x00\xb6\xa8\x17\xf0\xed\x01_\xf4\x0b\x82\x805\n\x06\xc6\xbb\x0d\x1d\x111\xe0\xeb\x19x\"c\x00C\xc0\x11!\x03\x98\xfa\x98H\x19\xc0\x10rD\xcc\x80\xbf~\x9c\xc8\x19@D\xcf\x80\xbf3nP\x8f;\x92\x06\xf0\xe4\xed\xcf|\xda\xa3j`<\xcbb\"l\xc0\xdf\x0c \x9a\x02O\xb4\x0d\xf8'K\x14_\xd4\x0d\x84\x10BD\xdf\x00\x8e\x1e\xc6b\x0c\xc3#q\xac\xf4\x16\x14\x1b\x8d\x03\xbe\x88\x1c\xf0G\xe5\x00n2\xfcl\x8d\x9b\xb0!\x81;FB\x8eQ#\x02z\xc0=j\xdfH\xc6\x06\xf7h\x04\x8d^\xf0\xc1\x01?\x1a\xa5:\x00\xc8\x1a\xf4\x03\xb1\x03\x7f\xc0\x12\xfc\x03\x91\x03\x80\xc0\x19\x04\x040*\x10H\xa3\xc5\x03\x83l\xc1@\x10! \xc8\xc4\x18\xe6\xa0 \x18\x1b\x18\xa4Q3\x05\n\x01&X\xc8\xbc[\x1c\xf1\x10\xd6H\x0c\x19\x83\xd1\xaf%\xe9\xbd={^\xf7\x0d\x17\x8bq\xc6\x84IxF^.\x83:G\x9e\x12\xa3\xc4~\x94wp\x8e\xa1\xe1\xf6\xd4Fjq\xdbWR\xc2._\x1d\xd2a\x01J\x03r\x85\xb3s\xcf\x94H\xb8\xadbB:\xdb\x14!F\xcd\xf8\xb6{8\xa96F%\x16E67\xf3\x15\xcd\xf2\x9dgfz\xcbf\xe0\x07\x1f\x0f\x8a\xaf\x03B\x7f\xce\xf2<\x0dg\xb6%\\\x94\xae x\x99U\xc5UG%\xefn9\xc9\x04v\xb7\x13p\xb0\xd9\x05\xc9*&\x82\xc8\x8aTDU\xa4}=\xea\xf6\xa5\xef\x8fJ\x93\xb2\x12\x96\xcb=)\xaa\x84\xa9d\x1d\x15\xf7\xba\x0e\xbei\xbb\x9em\xb8\x146(f<:\xa5GQ\x82\xce;v\xbb\\m\xb2\xacd4\xb5}\x17\xf7\x87m\xd9\x96\xf6-i\xd9\x8e\xce\xad\xe8yE\xa4+\xaeY\x7f,\x16\xb5i\xb7O\xbb=\xdeng\xc59=\xce1\xf9\xc7\xa3\x8d\xa5\xab*\xd1O\x87\xe4\x82\xa44\xab\xc4\x1e\xd6>6\x10\xa4\x9f\x97t_I[\xbd1\x8e\xa2\x856\xd6#S\x1d\x87\xf2\xee*\\\x8d\xfc\"c\xb8p\x03\x94\x87\xa4\xe2P_n\xa4J\x13K\xdcF\xa3Zu\xe7\xd653\xddab\xa7C\x19wi\x92^\xfd\xce5\x010!\xb3\xd0\x1bs\x9f\x9ca\xfc\xda\xc8\xa7\xf4\x17S\xfa\x8bc\xa4\xbf\xe8\xdb[\x8c\xd7\"\xdf\xd5\xabWIR\x0b\xb6\xb6\xbc\xaf\xcd\x16/\xb4\x0d\x8c\xbe\x96 \xd3\x87e\x7f\x88\x1f{{\xa31\x95\xf0k1[\xd8\x1a\xc6\xd41\xe2\x0d\xda&\x9e\x9b\x95\x85\xbd\xda{PH-\x87e\xe4\xb8\x91\x9b\x08]\xc7sl\xbb\xf5\x1b\x84f\x83\xa4o\xd7f\x10z\x8c\xb3\x8da\xf5|\x87\xbba3(\xdaJ\xd6a^\x97\xaeb\xd1R\xfc\x19p\x94\x03\xd4\xb5\xff\x0d\xbdm\xa5\x00r\xfb7\xbe\x8a\x17#\xcc2_\xde(\xf3U\x9bd\x86R\x18\x84\xa5\xf0\xb1t\xbb\xae-\xceMHa.\x96\x85\xa7\x8b\x9b aKS\xee* \x19\x90%?\xf5t\xd5\xfa\xb4\x82\xc4p\xa5\xcd/3\xe1f\xc83\xda\xce\xa5\x0c\xff\xe2\x01\x90\xf92!\x8d\xb3\x86\xfbr:^\x0f\x9d\xde\x9aQ\xd2\xdb\xb1\xdcu-\xd2`0/hfjQ\x9c\xab'\xdcD\x81\xd5|\xab\xf7s\xaf\xdf\x9c\xbf|\xc2!\xc4\xd2\x9f%\xb0\xb8 \x97i\xa7YU+\xcdu\x88Z\x17\xaa\xa8\x11\x13\xb2Eo\xa4L6\x19\x11I\x85\n\xa6\xfa\x17\x82)6\xf9&\xe7x@\xecu\xc2,\x0b\xfb\x97\x89\x17\xb6\x8bD\x8fR{s\xfa\xc6\xc41\xc1\x17\x88\xfa\xd2\xd0\xa55\xdd\x19\xa6;\xc3\xb1\xee\x0c\xea\xdc{\x0fm\\\xb6<\x13\x85\x8e\xd6\x80U\x1a\x825\x85F~[6\xc6\x85\x06\xd0\xa8\xd4l\x95\xc3]i\xee\x8c'\x166rg9\xb1\x9e0\xf6\xf3\xa5\xb2\xe64q\x1e/\xbe\x93bx\x06\x130\x83\xce\xdd\xb9K\x86d-\xb1g'\x19\x94\x97\xc4\xf6j\xaa3#I5.\x17\xc9\xc0,$\xc6\xdc\x0d\xfe\xfc#\x833\x8f\x0c\xca9by)\xb5\xf2g\x1b\x19\x92g\xc4\x16\xfd\xef\xcd024\xb7\x88\xe5\x85TgV\x91!\xf9D\xdcyC\"d\x0cA\xe5\n \xcb 22\x1b\xc8\xd0< \xe6\xd7Nm10Qs\x7f\xc4\xcf\xfa\x115\xdf\x07.\xd3\xc7\xb0\x1c\x1f\x96 ve\xf7\x08\xcf\xeb\xe1|\xdd\xd4\x96\xd1\xa3\xc2\xe6\xf2\x18\x9a\xc5Cd\xeb0\x104\xe7\xef\x18\x91\xb9\xc3\x92\xb3\xc3y\xc4;\xf3t\xf8\xcf\xffx\xb99\\Y9\xdc\xfd\x18\x96\x89\xc3\xf2\x86\xa9+\x07G\xa4\xec\x1b#\xf2n\x98w\x92\xe9(\x1f\x91k\xc3\xf0rie\xcc\xb216\xbf\x8679\x84#\xa7\x06*\x9b\x869\xe8=,\x83\x86\x99\x86\x16T::_\x06v2092\xdc\xe3F\xe5\xc5\x08\xcc\x88\xa1\x07\xd9F\xc8\x82\xe1\xcd\x7f\xe1\xce|\xe1\xcbya\x9d\xa5\x90<\x17\x98\x0c\x17\xa6\xdc\x16#\xb3Z \xf3Y\x0c\xcbda\xc9\x15\x81\xc9^\x111o\x85\xa5\x17\x1a\xa7\x0d\xcaR\xe1\xcaH\x111\x17\x859\x0b\xc5\xd0\xfc\x13\xd6\\\x13#\xb2L\x18\xaf!\xce\\\x12\xa6@wS\xfe\x88x\x99#\x86\xe7\x8c0\xe4\x87\x18\x94\x19\xc2\x99\x05\x02\x9f\xff\x01\x95\xf9A\xda109\x1f\xe4\xa7\xdel\x0f\xc6\x14\x08\xe6\xd6\xb1q\xf6\xfe\xdc\x0e\x01Y\x1d\x90\xf9\x1c\xb4a\x8c\xc8\xe1`d\xe3\x11\x99\x1a4k\x8b1G\xc3\xb0\xec\x0c\xb6L\x0cqs0\x8c\xe3\x07T\xde\x05L\xc6\x85\xee\xb1b\xca\xb2 n3z~\x05Sf\x05\xeb\xcd\xc7\x94M\x01\x9bG\x01\x95A\x01\x97;\xc1\x9b5!(_\x82;S\xc2\xe0\x1c G\xcc\x8ep\xac\xbc\x08G\xcb\x88\x101\x17\x02*LF\x14w\xe6\x03k%K\xb6\x83*\xdc}`\xcdm\xe00-\xd8\xf3\x198*Ys\x188\xea\xf8\xf3\x168*[s\x15X\xeb\xc4\xc8O\xe0\xceL`m\xda\x86\xa0\x1a\x10\x05\xe8\x86K\xd9\xb2\x0e\x0c`\x1d\x7f\x8e\x01+Q\xf0\x82\xf0\xed\x81\xfb\x8e%\x07o\x16\x01Deo\xe6\x00'\x0d\xbf]m`\x9e\x00\xf3\x8b\x9d\xa8\x0c\x01\x8e\xdc\x00\xce\xac\x00\xce\x81\xba1y\xbdi\x18\x12\xeco\xee\xb27\xa4_\xeb\xb2tx\x9b\xfd\xcc>D\\\x1b\xdf\x1f\xee\xcb6\xa0\xe9\xc2\x91p\xed\xf6\xff\xb2@8;\xea\xcc\xca\x13^\xbc\x9aCc\xfb\xa7G\x16! \xb0^\xd9\xe1\x83\xc1\xa2\x80\xb0\x01\xad\xb8B{\x10pXoK\xc3\xeb\xfae`<`\xac'\x80\xc7\xd5\x15C'\xa0\xacr\x9eZ#M\x85\xf2\\&\xd9&\xa5\xdd\x10\xbd\xb6_=b\x86\xd8\x94G\xa5\xf0\xbc\x0b\x85\xd18\xe2a\xce|oA\xf9z\x13\x15y\xe6\xc6\x9eEC\x9f\x8d\xc5\x9fi\xe4*\xeb\x9bOq1hr\x1b\x19\x064\x16\x87\x86\x00_y\xdewB\xa1\xd1\xec\x8f\xb0\x84!\xd2\xect\x0c~\xfe\xd1\xb8\xb4\x90\xc9\xc1`\xd3\xfc\xb3\x80\xc2\xa7\x05#\xd4\xcc(\x88\x08(5\x04N\xcd\x87T\xf3c\xd5\x9c\xb3\x16\x82W\xc3!\xd6l\xef1\x8dD\xad\xa1qkC\x91k\x8ew\x8e0\xe8\xb5\xa8\xf85G_\x0c\x9c8\n\xc5\xa6Q3\xbe\xb3\x14\x11\xd7f\x7f_i\x14\xb6M\xef\xb2\xe9]\xa5\xd8h7\xef\xdbI\xe6\xa7]\xcco&\xc5C\xbdE\xc6\xbd\x1d\x03\xf9\x16\x82}C\xa2\xdf\x82\xf0ox\x04\x9c\xf5\x19 [/\xb0\xb8'?\x0e.\x08 \x87\xc6\xc2\x19\x07\x14\x1b\x0f\x17\x17\x11g\xc1\xc4\xc5F\xc5\xc5\xc6\xc5\x8d\xe7\x11\x146\x0e\x87\x8eS\xdf\"2\xbfC$\xee`\xa67\x88\xcc\xef\x0f9\xeel\xe6w\x87\xb0X9$Z\x0e\x8b\x97C \xe6\x021s>\xd4\xdc\x08\xdc\xdcQ\x91s\xc7\xc3\xce\x1d\x11=\x17\x15?g{G\xc8\xca\xcbn\x14\x9d\xb3\xa2\x05I7\xd8%\xe3x+\xc8i>q\xbd\x11\xe4\xac\xe8x\x1b\xc8Y\xcf\x8f\xad\xf3z\xf9\xado\x019\xea\xc5\xc0\xd8\xf9Pv\xce\x0e\xd8A\x1a\xee7\x7f\x10$\xcd\x88\x0c\xfb;?\x03Y\xcc\x8f\xbb\xf3`a|h\x18\xf7{>N\xa6\x00/\x02\x0fI\xc0\x8b\xc2\xf3\xd2\xf1Y\xf8 6\x16\x0f\x89\xc6\xf3\xbc\xd5\xe3y\xa7\xc73h\x1f8\xe8H\xb8<\x042\xcf\xdau\xd7:\x8d}`Gw\xed\x0d~L\xa7y<\xa7G\xce\xf6\x90N\xd4GtL\x0f\xe8\xc4|\x8a\xe3}\x10\x07\xac\xe9\x88\xca\x8egA\xbe\x1e\xf3\xe9@\x0bF\xaa\xfdfB\x84M\x88\xb0\xc8\x880\xb5\xa3\x16\xe0\x15\x1a\x17\xcd\xf1]\x92\x96\x0f\x1e\xfdV{\xf8Dc>k*P\x13\xe4\xca\xb0P-\x06\xd9\xf8\x8c\x89\xb3\x86\xf1\xc9\x12C\x0d\x0d\xad\\\x1d\x01h\xe6\xc1##tQ\x9dI=\xe8c\x04M\xb3R\xe1\xc1\x1a[\xe9\xda\x9f\x0b\x18\xa0(\x0cy\x10\xa0A\x0e\xf7(9\x12\xec6m\x0e\x7f\xe0\xa3\xf7\xa0\x87\xa4\xd6\x83\x0e\x8f{\xcc\xa3\xaf\x9d!6\xe2\xcb\xf6\x15\x0d\xc4n\xb4\xb2\xa5q\xc5L\xacheB'\x05\x95\xf1\xac,g\xa0bb3\xed\xb3\xde2\x8f\xe2\xa5\x1e\xff`\x17 \x18\xf0\xeaz %\xe0Hw\x8a\x19\xefA\xa8\x8a\x18\xa7\x80\xf1R3 \x17\xa7h\xb1P\xb4\x89\x15\xe3\xe7v\x912\x8a :t\xd4\xa0\x04?\xcb\xfaEN\xf8+!\xdd\x94\xb6\xf5\x1ej\xf4\xe3a\xaf\x81\xb8\xde\xfe\xe8e\xb0El\x82Q\xfc?\x88\xf3=qN\x16\xde\xf2\xe8\x17\xa8\x9a\xd6\xa7\xd1,5\xa7g\x01\xbc\xf4\x8f\xf7,\x80\xfbI#GU\x9f\xf1)\x96x\x11E\x8f|\xc2 \xb60\xdd\xa5C\xc4\xfd,\xd98\x1d\xc6\xb4k\xea\x81}\x11\xe5\xdb\xff\xcc\xd8\xb4\xa3\xfe\xf5v\x14\xf8\xde\x05\x18w_ :\xce{\xa4\\\xcf}E8\xda\xfb\xf4\xfcO\\\xf9\xd5\x17\xecP-\x0fz)Oy\x8d\x7f\xc4k\x80\xf2b\x08uC\xeb.CM\x1a\x98\xaf\xbf\x88|\xfcW0N\x84}\x1f\x18e\x8c\x0bu\x0e6O4\x16\xd5\xb1\x81\xcd\xf2D\x17\xc4\xc2\xa3\x98\xf1{\xe6\xf7o}\xf0\x7fc\xe6\x9dh\\\x830G4\xd6\\\xf4J\xd8\xe3`\x0dS`\x8f}5\xca\x1d\xb3\xd4\xa9\x8c\x91\xae\xd6\xed\xebV\x16\"\xc6\xb5\xda#Z\xe3\xc5\xb2F\x8bb\xb5\xc6\xaf\x9a\x80\xbc\xc8\xc8\xd5X1\xab\xeeh\xd5Aq\xaa\x83#T\xf9x\xd5\xc0Jkl\xea\xe0\xa8T\xa1\x92(\xd4,\xf1\xa8c\"Qy\xd4\xa9:\x1a\x03XzH\xf4\xa9=\xd2td\x8c)*\xba\x14\x1fI:\"\x86tD\xf4\xa8A`D\x8c\x11\x8d\x1b\x1d\x1a-.\xd4\x1f\x11\x1a-\x16\xd4\x16\x05:&\xfe\xd3\x18\xebYa\xa2<\x87\xc6wZc9\x07Fq\x1a\xe27\xad\x07\xa5\xd5K\xef>A\x07\xc6i\xb61\x99\xa6\xf9\xfd\xc6\xdf\xf6\xb8\xa8L\x11\x85\xd9!\xa7\xc7cF\x88\xc4\x1c\x17\x83\xa9p\xb9z\x18\x8e\x8c\xbb\x94\x13\xdd\xa58&\xc2\xd2\x19>h\x89\xaa\xf4\xc6S\xea\xa1U\xf8\x18J\xbd\xee?Lc\x1d\x141\x89\x19\xac/J\xd2>6odd@Ld?|dd\x1c\xa43\x02\xd2\x1e\xfb\xe8\x8az4\xce\x026\xd2\xd1\x17\xe3\xa8F7\x8e\x88kDD4\x86\xc72\x1a\"\x07}\xf1\x8b\x91\"\x17\x0d-\xf78eT\x9c\xa2\x1a\x978&\"\xd1\x10\x818*\xf6P\x8d5\x8c\x19eh\x8d/T\x83\xae\xd4\x98\xc28\xd1\x84\xd1\xe2\x08\xe3F\x10\xe2b\x07\xbdQ\x83\xf2\x96\xec\x8b\x17\x94\x9f9#\x05\xb5\x90:\xbd5l\xcc\x97;.\x10\x19\x11\x88\x88\x05\xecu9f\xfc\xdf\xa8\xc8?=\xd2/^\x8c_\xbc\xe8\xbe\xe1\xab\xeb\x8d\xe8\xf3\xc5\xf2\xd5\xe2[\x8d\xdf\x13:x?rO\x8d\xd93\xea\xe9j\x9c\x1e&B\xcf\x1b\x9b\xe7\x8f\xcas\xc6\xe3\xa1#\xf1\xec1x\x83\xa2\xef\x8e\x14ww\x8c\x88\xbb\xa3\xc4\xdaE\x8a\xb2S\xe3\xeb\x0c|\xd7\xba\xa9\xd4\x98:\xe3\xc7\x868\xba\no\xde5F\xcdY.\xad\xe6H9\xcb\xc7\xc6\xe88\xcb\xb7\xee\x888K%c\x14\x9c\xf1\xdb\xb1\x91o\xf6\x987cs&\xff\x87-\xc2\xcdI@u\x7f\x98\xe2\xd9\x02\x96\xda\x1d\xbdf$d'\x06\xd6X5\xcbr\x813>\xcdS\xc9\x19\x93f\xad\xeb\xb6\xa4\x0c\x8f@\xe3\xe6!\x85\x9a+\xf6\xcc\x12uf\x8d7\xb3\x0e\xc8\xeeq=Bt\x993\xaeL\xeb\xa2y\xaecF\x91\x8d\x8f\x1f\xab\xad\xc4\x92`\xebR\x19\x1b3\xa6\xc4\x89\x8d\x8c\x10kC\xad$\xbd66ltT\x98\x8c\x84\x91\xe4\xdax\xb0\x88\x91`J\x0cX\xcc\xe8/O\xdcWE\xb3\x15-vIV\xf1\xabn9{\x96\xe6\xcb\x8f\xa7/\xd0\xde\xd5-)\xb7H\xd9\xdc1\xdb\xeeIQ\xcdKZ\xcd\xb7\x94\xac\xbaGi\x80l\xb6\x86C%YE7\xb40\x8a\x01\x15\xcc\xd1\xef>`$I\xcf\xfa,c\x94\xceHQ\x95\xb4\xfa\x81\x8f\xe6\x9b\xce\x0fr:M3\xfdCg\xe8\x88\x89\x96\x8e\x8d'j\xd3\x0bR&KX\xb0v \xc9\xd6\xf9\x90\xa9\xe4\xb5\x03\xa7A\x8b,#\xfb\xfd8\x12\xf6\xb3\xe7y\xed\x95\x87%\xd93\xb1Q\xd6NK\xf9\xe7\xe2\x90R!\x9b\xf7E\xbe\xa4e)n\x7f\xf5\xac(vj\xfe\xe7\xe5\x96$\xd9I\xdf\xd2\xb2L\x0f\xe2\xde\xc8\xae\x93\xcdG\xec\xec l\x1c\x87\xa5h\xbb\xb6\xfc\x88V5W;i=p\xd7{PS\xa6\xcbS\xa8\n\x92\x95\xe2r\xb9#\xcbm\x925\xce\x04\xde\xda<\xd1\xaea\xbd)\x1c\xacO\x8d\xd0\xa2\xb8\xb1\x82OH\xbfw\x82\x03\xf7\x05\xbd\x18\xc9\x80c\xb7\xa1C\xa2\xc00E\xcd ]\xc0)a\xc0\x83x\xd5\x87\x08n%\xce\xe1\xef\xb2J\x1d\xb9T\\u\xa9\xe6\xc3dsC\x9eU\x17\xfc-\x16\x97m\x03\xf9\x0d\xfb\xcf\x81\xe4\xdb\x90\xe1\x81\x04\xd4\xfeq\x007?t\xf7{\xc8\x0f\xd5\xfeP\xb5\x7fkyS\xd6\xe6\x81\xbb\xa3\xfb\xd0\xc2\x84\x86\xd5'\xfb\xfd\xc0\x9a|}\xa5R6\x90\x04e\x1aH\xb6\xa4\x03\xab7\xf3\xdf\x8a\xdf\xce\xb6g;*/)\x0eme\xa0\xdf;\x04\x04g\xf7\xae\x19\x8d\x18\x16\x96\x97\xf3\xe6T\x95L*\xb6\xbfQ\xb5a\xdb\xe5]\xbd]\xd0\xe7\xae\"\x08\xcc\x02\xc0\xb4\xf1\x87\xcc\xaeecw\x86\"\xd5\x80Ys$\xa2\x07\xa2\x1c\xf2\xce\x0e\xf5N\xe6\xde\xc1\x8e\xadf>\xcc#\x1e\xe4\x86C<\xc6\x01n<\xbc]\x07\xb7\xc4)\x1e\xf6\x9b\x82\xach\x83S\x14\xca\xf5\x9e;\xc3\x92\xa2\xac\xe0\x19\xdd$\x19\xd7\x90\xa5\xcb\xac\xe3\n\x9349\xeaj\xcf\xef/38\xe5\xc6A\x92\x96\xddD\n\xdc\xb0\xd0%\x9f\xc3\x8aV\x1ca\xba\x157e\xd2\x0e\xa1\x1e\x1a\xbbEmI\xb6Jis\x99o&\x8c#\xc1\xba\x14\xeb\xae\x88\n\xcd\xcd\xbb\x9e\xd6-)aAi\xc6\xd1k\xf2.\\7x\x02I\xc5\xe7\xbdC\xae\x0f\x9d\x91\x90\xb2\x06\xb1\xd7\xf65)\xd9iv+_\xdfb\xea\x18\x1bM\xd6\x9b\x99\xf3dG\xa1\x17\xf2\xf0\x03W\x0d!)\xfb\xfe\x13\xb2\xdc\xb2k\xa2\xe4\xf9\x86>g\x07\xfa9i\x1es\x1a\xa1 \xbaL\xe7\xe7[\xcaI\xcb\xc5\x15\x8e\x97\xee@v\x12\x9f\xb3\xa7\x05\xa3\xdf\xb7L\xffH\xc9\x05\xe5S[\xe5\xed{\x94\xb9\x94\xe4;bG>\n\x87\xbd8:\xeaQ\xe7\xf2\xa0\x12\xb6\xac\xa6\xb5\x1b%M\xd77\xeb\xa0\x9c\x96\x9e81\x16\x1c\xe9\xd8\xe3\x89|\xb9<\x14e\xef\xdeY\xe6bR\x97y\x96\xd1e%\xd1\x88\xf5\x80/h\x91\xac\xafZ\xf9\x90\xd1Km\xb0IW\xe2\n\x0f\xd2\xe2J\xd6\x14\x07\xe8\xbe\xc8\xf3u\x0d\xf2\xec|\xcc\xf4\xe3$?\x94\xaa\xd0\xe7\x1d\x98\x99g\x88[\xf6\xd8\xfa4=\xce3n\xe6\xdd3\x1ae\x05\xe5.\xcf\xab-;(\x96E^\x96|\xb2\xb3\x9e\xf9W\xcc\xad\x1cF\xa9p8\xea\xc6XM\x18\xfb c?a\xec'\x8c\xfd\x84\xb1o\xca\x84\xb1\x9f0\xf6\x13\xc6~\xc2\xd8O\x18{G\xdd c?a\xec'\x8c=/\x13\xc6^\x96 c?a\xecG\xa0\xb0'\x8c\xfd\x84\xb1\xf7b\xec\xcd:\xecYJ\x1a\xed\x9d\nG*\xd3\xbf\xd9\xac\x90E~\xa8\x80\xd4\xd6\xb3\xc6\x82\xc8V\x93;\x03\x92JZP$-nZt\xb8\xa4x:\xe4\xa7\xc2\x99\xc2\xda\x0dNd\x18\xcb\x88\xbe\xad\xfd\x14\xc2\xcc\"\xfd\xb6\xba\x1d\x9d\x8d\x9c\xe7\x8c\xae=@\x8e\x89\xb4\x0d\xaen\xc5\x95!\xbaSMR{{\xf6\xbcf q\xd0\xf8\xa6\xf5\xb9\xb8\xa1\x0e\x9a\xd6}\xe3*\xd4\x86\xc7g \xa9w\x0fo\xa2g\xc2\x9e)k\x812\x9d\xf6\xbd\x8d0\xdcl:\xc6\xf3\xa8\x902\xf9!!\xb6/\x12\x8c\xfeH\x18\xef\x93T\xa8\x91\xb4\xcc5\xbf$D\xf0M*\xe44O%\x8c\xf7V*\xd4\xe4\xca\xa9\x8d\xc4\xf4Z\x82\xcds A\xdeK\xd0<\x98\x80\xb1s\x983q\xd9}~0\xda\xa3 \xf1\xbc\x9a`\x10\xca\x80\x19\xb5\x0eP\xf3\x8fx\xb0\xa7\x13\x90\xdeN\xd0<\x9e\xe0\x1a\x8b\xed\x1d\x83q\xdeO\x85\xd8X\x17\xa8&\x00:\x7f\xf08E\xc11\xc6q\xceQu\x8c\xdcW\xe9q\x90\xc2h'\xa9B\xac\xeb\xa7E:J!\x86\xb3T\xa1W\x07\x07`\x1d\xa6\x10\xe44\x85\xd8\x8eS\xb0;O\xc1\xa6\x05\x80\x1b\xe8jt\xa4\x82k\xe7\x81W3\x80\xb8NUp:V!\xaas\x15b:X\xc1\xe5d\x85q\x8eV\x88\xe8l\x05\xaf\xc3\x15\x86:]a\x8c\xe3\xd54cW{\xce/\x16\xe7+\x8cq\xc0\x1ah\x89\xb3\xce\xe2\x84\x85\x91\x8eX\x03\xb9\xc3\x1e\x88\xd1\x19\x0b\xd1\x1d\xb20\xde)\x0b\xf1\x1d\xb30\xce9\x0b\xe3\x1c\xb4\xe6-j\xecd4\xb7-Dw\xddBL\xf7-\xa0\\\xb8\x10\xd3\x8d\x0b\x0eW.\x8ct\xe7\x9a\xf6\xb8\xc1\xc1\x0bX'/\x8cv\xf4\x1a\x08\xea7.\x18\xee\xfe\x05\xb3\x0b\x18|G\xbc\xd5\x15\x0c\xa8\xf3\x7f\xa0K\xd8$\xf6j'\xb1\xe2\x16\x06o?\xc6\xb9\x87\x15b\xdcYlp\x11C\x1c71\xc4v\x15\x83\xc1]\x0c\xe3]\xc6\n\xb5Js \xc3H'2\xf8|\xab`w&\x03\xc6\xa1\x0cf\xdfW\x90c\xd9NCs,\x8cr2C\xc0d\xf8\x9c\xcd\xe0\x1d\xb7\xd7\xe9\x0ca\x8eg0\xcd\xc7X\x074\xf8\x9c\xd0\xe0tD\x83\xc7\x19\x0d\xaeY\xc2:\xa5\x01\xe1\x98\x06\x83s\x1a\xc69\xa8\x01\xe7\xa4\x86A\x8ej\xb0N\x8c\xd7a\x0d\xf1\x9c\xd6`\xef\x85\xc6iQ\x1d\xd80\xd2\x89\xad\x90\xd2]\xda\x10\xdb\xad\x0d\x91]\xdb\xe0ro\x83\xc1\xc5\x0d\x0677DsuCLw7Dwy\x03\xda\xed\x0d\x18\xd77\xe0\xdd\xdf\x80t\x81\x83Q:\x1b\x9d\xa5\x10\xe00u\xbb\xc3\x01\xef\x12\x07\x9c[\x1cL\xc3\x88\xe9\x1e\x87\xb1.r\x85\x96\xe60\x87\xa8Ns\x88\xea8\x87\xd1\xfc\xe0u\xa0\x03\xc2\x89\x0e\x1eG\xba\xcd\x0b\x8b\xf1\xffv\xaaIjF\xffo\xb2X\xce\x96yAg\xec\x12\x9c\xd1tvqw\xf6\\\xfc'\xda\xd7k\x0e|\xaa]\xbb\xc2\x18\xdeZ\x93\x19i\xa0Y{\xc17\xde\xd7\xf4\x94{\xef\xce\x9f\x9e\xbf\x9c\xbf\x7f}\xfa\xfa\xf4\xfc\xf4\xe9\x8f\xa7\x7f}\xf9\xc2\x9azO|\xcb\xbe4\xfc\xf9\xfc\xed\x7f\xbe9{\xf9\xda\xf0\x8b\xe5\xcf\xcf\x7f|\xf3\xce\x94y\x0f\xdb#\xbb\x1b\xea\x1d\x9f\x9b:\x14\x9c\xa9b\xcd\x0c%\xfc\xf2\x93g\xcd\xd4 \x93\x17\xdbz|F{6o\xd1\xc3\x13`=9\x019\xc0\x13`\xff\x9f]\x82z]T\xd3\xf9yF\xf1\x04^H\xd5\xe1\x9d\x12}\xd6\x9b\xe7'\xf0\xb4\xe9:\x93;\xbf\xb0\x8brY\x91\x82?j\xbf\xa5\x90\xef)\x07\x9eoI\xb6*\xb7\xe4c\xff\xca\xab\xac\x8dJ\x8d,\x99TK\xe9j#\xa95T\xa0\xac\xe8\xbe6\xd0\xf1W\xbai\xb1'EuU;.\x0c\x8d\x98Z\x90\x0f\xd3\xa8\xe4g\xf0fO\xb3\xfaK\xf5\xe1\xfe\x82\x92\x15\xb7\x83\x954\x13\xee\xdc\x82.ir!\x144Z\xa9)\x0e\xbb\xec\xa4v\x80\xfb\xaf\x97i^J\xc7\xf0\x92d\x90\xe5\xc0\xae\xe7\xb4hp\x06u[yQ7\xd5iAi\x94\xbf\n\x94d\x1bmg\xd6~\xfa\xee\x86LJ\xa8_\x11\xca\x0b8d\xf2\x1f\xa1\x9b\xf4\xcd\xdb\x17/\xdf\xce_\xbfy\xfd\xd2\xba7\xc5'\xef_\xf3\xff5\xfe\xa6\xfe\xd2l8\x0fu\xfb>\xb3u\xec \xf7Q\xdf\x12j\x19O\xdd&\xa7\xa3\x9e\xbb\xfe\xfa)]\x7fR\xcfx\x9d\xc0jE\xd3\xe4\x82\xcf!\x7f\x9c\xe9J\x909\x91\xc7\xdf\x8e\\\xc1*\xe1\xb6\x98&\x95\x07\xff\x00z\x01\xaa\x8d#\xfa\n.iA\xd9zW3S?\xb4^\xc8\x9ca\xb2\x0b\xf43YV\xe9U\xad,\x8b\x96L\xc4%\xed\xee\xe6\xd1\x85\xb9\xb2\xb3,B\x1c\x05\xd5\xd9\xe7E\xd5K\xb9\x03\xc3\xd1:\xdc|d\xdd\xfdr\xb8\xf9\xa5\xd4o\x85)\x93\xef\x1f\x93G\xae>\x02\xbf\xd1\xfe\x84\xefn=_\xed\x14\xd9\xbb\xd7L|\xed7\x9do\xf3\xbd\x96\\\x04\xf5t\x1c\"\x80\xba~\\\xb4m\xae\xf5U\x16\xe5 ?m\x04\xbbJ\x9b \x9f\xbb\x9a\xb7J\xee\x1e\xec\xf2)7\x89\xd7\xe3\xe4ZbU\x90\x0bZ\xbb\xb7\xf4\xd4^\x8e\x8e^\xcf\xf7\xe4\xd3\xa1\x95F\xb2\xf2I\xfbf \xd9\x14\x94\xe3\x05\xf3L\xc2\x9d\xfa\x82\xfa:'i\x96\x00R\x9fi\xce\xd9}\xb2\xa7i\x92\xd1\xfa\xda\xc8\xb6\xc9\xad<[\xd6b\xbb\xdeDW\xb0\xa0\xd5%\xc7\x15I[\xb4$\xb8\xcbW\"\xc9F\x06%\xdd\x13\x9ef\xb0\xcd\xccQ\xd6\xdd\xe6'\x97\xf4\xc8\xf2\x93\x9cr\xb9\xbe\xe7>\x82|-\x891y\xceS\xe1\xd5\xbb\x98\xb3\x8c\xfa\xb1\x14\xf7\x9d\x0f\xad\xda\x9b\xb6\x8f\x11*\x9c\xb6'\x8d\xabe\xdf\x8b\xd1\xf6\xa1\xb2\x07M\xfb\xcf\xc5H\xf8}'+tg\xab\x93\x9c\xb2K\xa7K\xc02\xe7\xa7\xf5FZM\xbas\xff\xcf\x93\xee<\xe9\xce\x93\xee\x8c\xda\xa4\x93\xee<\xe9\xce\x93\xee\x1cr\x86O\xbasD\xdd\x19\xab\x04\xd6 R\x19\xf7\xb4\x93P\xaf\xc7@}M!d\x96F\x9a\x96eP\xd8\x84\x17\xa4\xf5y\xf0n\xf23A| I\xb5\xed \xab\xb2U\x9b~S(y\x15;\xe3\xe8\x8ap\x8f\xf8\xb6\x89n\x93\xd8\xc6\x88l\xf3\x04\x8d\x16\xd5_@L;E\xf4Q\xc4\xb3d5\xbe\x92V}Q\xb6(4\xbev5L,q\xc6\xfb\xf4\xaeU\xdc\x11j>nk\xf5V\xb5\xee\x9c\xb2\xd1\x82oFF\xa2\x02\xael [\xd2O\x07\xea{S\xdb\x92SS\x8d\xf3\x12\x97\xe9\x9ab\xdd\xc2\x8aT\x04I\xbd\x07\xd2\xea\xd1n\xbcQ<\x0bf\xdfoU6-W2!\xbcm\xbftV\xb2\x97\x8f\x95#\x85\x92\xa5p\xabdtI\xcbR\x02\x1e\x0bZ\x15 \xbd\x10\x01\x8b\xfcE\xf7z\x81E\x93\"h\xe0\xffg\xef\xdb\x9a\xe4\xc6\x8dt\xdf\xe7W\xe4\xd1\x83G\xb2{J\xc7s\xce\x93b\xe5XMKc\xb7w\xac\xe9h\xb5vc\xd71\xd1bU\xa1\xba\xb9]E\x96I\x96\xa4\xf6\xae\xff\xfb\x06\x90\x00 \xe2N\x12=\xab\xb13\x1f\xe6\xd2E\xe2F \x91\xf9}\xc8\xc4\x81\xb7\xe2L\xb7\xbc\xd5_\x94\x99{\x1cL\xcd\xf3b\xbfg\"i\xbf\xa4sJ\xee\xf1\xf3U\xca\xdfV\xcaZ\x1d\xf3\x1d\xb5\xa6\x14\x9bb\xc3:\xb1\xa1\xa8/(\xba\x83\xd4_\xdf\x1a\xab1\xe2\x94g\xa1\x1a\xe3\xd3~H@\xe1\xff\x9f\x8bH\x031X\x93\xa3\x01\xfby\x16I\x967\x8a\x9f(\xda\xb6\xde\x94E\x7f\x8b\x81fr\x1b\xd3'\xc9t\x92\x15O\xb6Fd6:s\xa7\xd3\x8a\xf4\xc7\xb8x\xf2\xf6y\xda\x0d\x14\xd3@1\x0d\x14\xd3@1\x0d\x8e\x12)\xa6\x81b\x1a(\xa6\x81b\x1a(\xa6\x81b\x1a(\xa6\x81b\x1a(\xa6A\x08\xc54PL\x03\xc54\xb8\xdc\x10\x8ai\xa0\x98\x06\x8ai\xa0\x98\x86 \xf3!sL\x03\x04\x8f\x15hd\xde\x00,\xeb\x84\x9e\x0e\x05K=\xa0/|+\xf1\x8dI\xe9\xa9\x9dG$\xbd\x99C8H\x0c\xf7\xc0\x9a\xfb=S\xb9sv\xc0>\x97m\xc7\xaa\x0d\xd3\xcb\xb7o\x04\x97\xd7\xf9\xb92\x00\x8a\x92>\x15m\xcf&\xcc:\n \xd1\x81\x1b\xbc\xc97\x11\xd4\xf6\xf060\xb4\x98\xb7P\xa5\x00\xeaS\x0e\xf5W\xb2h\xd0\xc0\x08\x83Q\x8d\x99\x95\xb8+\xdc\x189\x84|\n\xc8=R^T\x8dU\xba\xa7\xda\xc8\xc1|\xcb\xeb\xe1;3\x7f\xf9_\xf1\xb5>9\x1b\x94\xd5\xa6\x11.:\xd7\x03\x1d\xb0\x82\xafjY\xe7]\xb9gp\xcf\xd8q\xdctU\xb5\xf6'\xfc\n\xe8?r-.!Kh\xeb\x83~\x15\\\xb1\xbf\xad\x9b\xb2\xbb;\xb4\x82+\xdd\xdc\xd5u\xcb\x90X\x1a\xc3\x8c\x06\x88\xa9\xb2KV\xb0aM\x87\xe9\xa9\xaa\xad\xc4\x0e\xd9\xeav\x05wE#\xa0\x94\xfb\xf6\x0c\x17\xcd7\xf2>\xb7\x1e\x13\xd2\x8a\x93\xe8\x90^\xc3\x85\x18\xdb\x96\xc1\xa6hY{6\x9a\x07\xb2s\xc6`\xa9\xacU\xd86\xbd\xf4\xba\xea\xca\xea$\xc0*\xbd\x8a5\x83C]\x95\x1d\xa2\xd7\x82\xbf\x15\xb7ms\xd5\xcb\xf8'\x95\x06\xd9\xf8\x13\xdd\xb2\xae\xd5\x86\xc7<\x9e\x11\xa1\xa8T\xa8\xd4\x95+TJ/\xe2\xb9\xa7 \xb8\xba<\x97\xd6^\nI\xa6\xbe\xf4<\x9el\xb8\x82\xd3\xc3\x8f\xf5\x13\xe9Q(\xb2\x8e\xee\x1fZN%\xd1\xfdCi\x94\x11B\xdd\xd6\x18\xd1\xfdCS\xa8\xa1\x85\xb4PfJh\x01\x1d\xb4\x80\nr(\x8c\x8c\xa4O^\xc2'\x1b\xd9\x13'z\xb2\x91\x9a\x1b\x03\"\xf91 \x90#\x03\x12\x83\xae\x87gC\xebuq\x10\xb6Y\xd0#\x06c+\x89\xe6\xcd\x80\xc7\n\xceFq\xe7\xcf\x00H\xcf\xa1\x01\xbe\xad\x0b\x82A\x95\xce|\x1a\x10\x9a\x9f\x10\x85\xed!wn\x0dp\xe7\xd7\x80@\x8e\x0d\x88uaF\xae\x0d\x08\xe5\xdb\x18*\x1c\xe7\xdc\x00W\xde\x0d\x08\xb5N\xb6\xcc\x1a\xd6\xe598\x8c\x02k\x8bf\x8f\xa4\xe5\x00Wj\x0eH\xe8K\xbe\x14\x1d\xa1\xb9\xb78\xcd\x9dVV\x9f\xf0N\xfb[\xa6\xacwz-\x0bR\xdf\x01y\xe6s\x9ca\xf2\xcc\xc93\xffR=\xf3P\x12\xf4\xb1w\x0c) \xd0\xa5:\xbc\xba<\x97%\xa9\xac\xe7\xf2\x7f\xbfc\xad \x8c\xf9+\xe7\xc3>x&\x8e0\xe0\x1d\xaam\x7fi\xa6\"M\xe4\xd7\x12\x06U\xbf\xee\xbf\xd2\xf5\xc5x\xf9\xa7d\xd6h\xe7:\xfd\xf3\xf2]Y\x06\x92\xcf\x0c\x8dr\x86*7\xec\xc8\x04U\xfd]\xd1\xf4#\xeb\x0b\x9d\x1f\xf5QL\x0f\xf3D\x9a:$\xe4A\xf0p\x86 \x08\xd3D:&,&\x02\xeb\x08\xac#\xb0N\x16\xef\x84\xb5&\xa0u\xad\x03\xae\x0b\x01h\xbd\x1dGP\x1aAi\x04\xa5\x11\x94FP\xdaT\xe5\x90\x04m\x11\x94FP\x1aAi\xd6\x03\x04\xa5\x11\x94FP\xda\xff\x0e\x946\x18\x04\xc6 \xf7B\x9b\x93\x84\xa9\x8d\x8405\xc2\xd4\x08S#L\x8d0\xb5/\x12S3u\x7f\x04\xe3\x9a\x1a\x9af\x15\x94\x18\x9a\xf6\x96}\xee\xde\xc9[\xbc\xae\xd0\xcd\x9d\x0c\xb3\x89\xedK]\x05v#\x9de\x13s\xf3\x1c\xdd5\xd6\x90\x1c%\xb1\x83\xa9\x12{\x7f\x1f?\xa7|\x96\xce\x07k\x92\xa6\x91H=\x92z\xfcE\xa9\xc7A1\x99d\x03\x9aTa\x9d\x18Pm\x89\xca\x11\xef\x10|5\xbe]o\xb2z4n\xe7[\xa0\xb3dlG(\xec\x17\xdd+]\x87-\xa8\x8ft$\xe9H\xd2\x91_\xb6\x8e\x0c\xea\xa8\xd1\xcd\xa7r&\xa3\x17\xd7{\xb2\\}\xaa\xdc\xa6R\xbf\xe0z-\xf6m=5VB\x16\xe3\\\xe5\xd3\xb4\xect\xb2\xd7\xbc\x91\xd5\xd4{yI\xdf\xe9`\xdfh\x91*\x14\xcds\x010\xca,\xec\xcfY\x8d\xf7J`\x14\xfbb\xe0h5\x01\x05f\xb4\xe1\xe8\xbe*X>9\xba0\x18%\xa1V\xc7mh\xa3:\xa7^!\xec(\xc2@\xb4\xb2\\'<\x9eA3n\x15\x1e\x15\x90\xe3r\xe1Q\x81\xe2\xa2\xe1\xf1\xc4\xe8\xe6\xdd7\x0c\x04\xcb*!X\x96`Y\x82e\xc9\xa6&\x9b\xfa\x17mSw\x8e\x13\x8f) \x84\xdb\xb8\x9d\x84?\x9c\xf7;\xefd\x9bx\xd8\xb4\x17\xa0\x00\x84:\xa0\x90\x86$\x0d\xf9\x8f\xab!\x7f\xe7\xd0\x90\xb6f\x9a\x058\xa8&\xcf\xc6\x1d\x86\x15\xae\x8a\x9a\x00<\x0c\x9d\x98\x8e9h\xce\x1b\xc1\x0d\x047\x10\xdc@pC/\x047\x10\xdc@p\x03\x19\xd3dL\x931\x9d\x0278\xec\xd09P\x83V\xcc$\x94\xe1\n\xb7\xd3\xc9&\xb0<\x9ce\xdd\xd1\xb0\xae\xeb=+*S{\xb4\xa7\x0d7\x0c`\xb7/nEW\xca\x9d\xda\xc9\xd1\xd1'\x14a\xb6\xae!\xc5G\x8a\xef\x0bW|.\x14\xc1\xd0<\xa9\x10\x82\x02\x0f\xb0<\xa9C\x12\xa0\x84\xb3G\xc1\x12\xdeWJ\x11\xbe\xda\xdcO\x07\x12\x94\xbb:\x0fF\xb0\x16i\xf8t\xad\x8a\xb29\xf5m6]\xac\xa1=\xf2]\xb2\x05aycH%\x92J\x8c\xd9\x82n=\x02\xa1,\x1b\xfa\xeb\xcf\xc7\xef'Z\x80\xc3K\xa8\x91\x7fy\xfa\xcb@\xfdHm\x8d\n^\xd6\x18R[\xa4\xb6\xd2\xd5\x96\xa1A\xe6h\xae\x19\x8e\xec\xbb!\x07\x8f5\xdb\xf5\xe4\x18\xd1\x0c-\xc6sZ\x96\x1cwn\x1cGF\x1cG\x1e\x9cI\xd9o\xdc\xf8d\x8eL7\xf3\xf2\xdbD\xc7\xcc\x93\xd5&S.\x9bG\xcf`\x935oMz\xb6\x9aG\xcdQ\xa3U6,\x17\xb1\x87\xf0\xd5\xf2\x07m\x93H\xd8\xdc}\x1b]\x10\x93qo\xdd\xd377\xdf\xc66\xb3\xf2\x94\xcd\xcc\xbd\x91e\xdd\xc4\x8c\x0d,\xcb\xe6\xa5oY\x19\xb7+c\xabZ\xbaM\x0d\x9b\x93,p\xd8\xa2rnO\xfdg\x1b>Q\xc1K\xaf\x9d\xa5#o\xab]L-\x1a,S\x04q\x1dP4\xfc\xbb\xde\x16e\xd5vPT\x98YF\x16\xad\x92\xdd\x1dO\xcd\xb1n\x99H\xfcz:n\x8bn\x18\xc3\xa2\xea\xef\xfb\xdd5\x8c\xfd\x95\xd7\x89\xb3\xbeu\xafP-\x03\xc7p\xdbd\xf2\x82\x9dwq\xae\x95&D\x16c\xe4\xb7\x1b\xbf\xd4\x8e\xf2\x98M\xb0\x9e\xf9\xa37\xa7&\x95|\x0cg\x07z\x05\xef\xaf~x\xde\xb0\xb6>5\x1by\x83\xb9\xf8\x84x\x12\x81\x7fl\xd59\x9cB\xc2\nq^\xc85\xdc\xfbm2\x8d\xe2j\xe3M\xbd\x87\xf5Id\x84\x92\x04\xdd\n\xae\xef\xcaV\xb6\x19\x0e|c\x93w}\xf7W%\x99%\xf1\xad\xfa\xc9\xf3'|i5\xc5\xa6c\xcdJ\\f.nZo\xd9\xad@`\xe4V\xfe\xfe\xea\x87\xaf[8\x16\xdd\x9d(\xda(\xa8?e`\xd6\xd09.w\x17\xa3\"\x8b\x15\xfd\x7fZ\xf0\x85j\xbe\xfa\x81W\xe6\xbd\xce\xf9\xc33l\xab(\xac\xbd\xabO\xfb-_#\xbc\xb3F9\x9b\xa2\xc2\xa5&\xb4\xb2Y\xcbS\xae\x84\xce\xf8\xf0\x08z\xf4\xc9\xea _\xa2U\xddA\xb1\xd9\xb0c\xc7\xb6\xcfV_\x99/]Tp\xe4\x03Vn\xd8\x19t\xac8\xb4pjOb1\x1f\x1b\xc6\xd7)\xd7\xb4e%\xef\xc7^\x97U\xd1<@\xb1\xdf\x8b\xfe\x9a\x99\x89\xd4\xfe\xf3`V\xc3>\x1f\xd9\xa6\x83\xb2\xe3\xaa\xf5\xd42\x95\x83K\x9dm\xa8w\xf0\xaazX)-\x8d\xb7\xdf\xbf\xbf\xfa\xa1E\x14\xd1(M\xde\xb5oV\xd2n\xee\xd8\x81\xc1\x87\xbb\xae;~8\xc3\x7f\xb7\x1f\xc4\xd9\x86\xaa\x96\xbf\x9e\x89\x99\xc2\xd5P-f\xbe\xe8)\xd7\xf4\xa7\xa35\xdc\x9dq\xad>\xe0\\\xfe(\xb6\x95\xa2\x83Cql\xf1\xb3\x8b\x96vuO0\x0b\x9bRn\x0dE+\x8d\xc7\xf6\x855\xfa\xbf\x86\x8b\xdd\xd06\xfe\xb9\x8eM\xfd\xb1\xdc\xb2m\xdf|\xa1f\xdb\xf6t`[+?\xe2\xaf\xe1U\x05\x7f\xb8\xbe\xbe\x84\xdf\xbf\xb9Vf\xd9\xfb\xab\x1fp\xc9<\x88+\xf3\x0b\xfb\x92\xf2\xeb\x87#\xfb\xe9\xcf?\x19\x85\x81\xa2\xfa+\xf5\x95q\xeb\x17\xe3wl\xea\xedi\xc3\xa0\xa8\x805M\xdd\x98\xb9\xbd~\x0d\xaf\x8e\xc7}\xb9)d\x9f\x1b\xc6\xe7H\xfd \x0d\xaaM\xb1\xe1k\xb1\xae\xefO\xc7\x9eM_\x17\xdc\xdc\xc2F[My\x7f\xf5\x83\xa8\xf7\xae\xf8(>\xf5A\x9b\x8d[\x9c\x8e\x85j&\xff\xef\x8fu\xc9\x8d:3\x83\x17\xc8J\xc5\x02k\xd8\xaen\xd8\x99zM\xecA]\xb9.\xf7e\xf7\x00\x15c[u:A(\x80\xe6\xa3\x95-\x90k\x19\xb5w\xf3G\xc5\nX\xc1\xd3\xf7m\xbf_\xf3\xfe\x8asD\xc5\x01\x9f9\x14Uqk\xf7O\x19\x04\xaa\xb8\xd53\xf3\xdb\xbe\xad;a_\x95-\xecN\xd5\x06\xe7*o\xa9\\\xd3\x83]\xa7\x1d\xf8p\x0df-N\xa9\xd8\xa7<\xd4t\x80\x86q\x8d\xca\x10\xc4/;U\x81\xb0\x86\xc5F\xdc\xcf\xf05\xbb-+\xe1Spc\xcfR\x90\xf6\x15\xf6\xb6\xbey'fz+\x13\xc9uwEe\xaeWx*7\x7fv8v\x0fri<\x83\x830\x0c\xd6\xd6\x82\x14\xcd\x14\xa7\xa7K\xeeWpE\x8f\xe7\x92\xd4\x9d|\xd0\xb2CQu\xe5f\x94TR\xcc\xf5\xc4\x8d\xd2{\xec(\xbc\x83\xfe\x89/\xc25\x83\x82WVn\xb5m\xd0\xda\xf7\xe4\x16R\xac\xeb\x8fL5\xdc\x99\xac\xd2\x93\xe4kT\xf7\x87W\xd5\xc3\x07\xb5a\xb6|\xc9\x16\xcd\xba\xec\x1a>\xe9\x03mP\xbaK\xe4\x9f\xd3\x8a\xc3$a\xfa\xb0s\x0d#\x14 \xb6am\x1b\x00z=jO\x1fM\x85K5\xf9\xf6\xe5Z4L\xea\xbd\x16\xda\xd3Q\x1c\xa9\xecj\xe1q=?U\xfc_|w\xc0o\xd6\xda\xb3\xdc\xdc\x0c\xb9\xb1\xd8\xe1\xb2VK\xa7\x15\x07\xdc\x86\xd4j\xe2\xd0\x9f8\xe0\x83\x18H\x7f\xb5\x00\xaf\x07\x07Z/\xf1\xcd\xe7\x82O.\xf8\xed\x0bq\x8cP\xac\x14\xd9\xb0\xa2\x1f\xb8\xb2\x82\xf3\xdf\xfc\xc6R\xd2\xdf\xd75\xec\xea\x1a^\xc2j\xb52\xcf\x0f\xf1\xea\x8a\xea\xc1\xfcsQ=\xacxE\xdf7\xf5\xe1\xe9\xae\xae\x9f\x99\x0f\xacV\xa6\x06.w\xf0\x94\xbf\xf6^4\xeb\xba~\xfa+\xfe\xde3\xc7\xf1&\xfb\xdd\xbf\xb9\xfa\xfam\xa4\xaf\x7f,>\x16\xb3:\x0b/\xc5^\xcfK\x9c\xd8\xb7\xb2}\xfa}]\xaf6\xfb\xa2m\x9d]\xc3\xaa\xf9\xa3\xd8b\xedq\xb3\x96Q\x9f\xfbN\xff\xbfH\xa7/\x1f\xba\xbb\xba\xb2\xba\x8d\xf5~_\xd7OW\xab\xd53\xfbcb\x97\x9f:~\x11\x9fY\x0cC\xca(\xf0\x17.p\x10^\xbfyw~uqy\xfd\xe3\xd5\xb3\x17\xd68\x0c\x13\xc1U4\x16\xee\xea\xfe\xff\x8ft\xff\xf7\xb5\xd9s\xd1\xf5\x17/\xe1W\xc7\xf5\xea\xfb\xba\xfe\xaf\xd5j\xf57\xf3\x91\xa2z8\xe3f\x03\x7f\xee\x88\x9b\xe6\x9f\x8a\xa6\xbd+\xf6|P\\\x0d\xb4;o\xd6cUR\xee\x8c*\xdeW\x87\xa1\x12\xd1\x041\xd9\xc4S\xff\xe7%T\xe5\xdeu\xf4\xcfQ\xf3h\xa6pC]\x8c\x8b\xd2\x1b\xca`\x83\xf5\xc3\xb0\xa5*\xad&2p\xae\x1f\x14X\xc97+\xbd\xb0\xaf\x1d[\xe6s\xeec\xac\xc4\x0f\xdc\x88\xf8Zy\xe8j\x17\xee\xa9v\xfc>zq\xbd*\xab\xf6\x0f\xcaF\xb6\\\x96\xde<\x81b\xd7I\x80DxI_?\xffZ/L\x1a\xe8\xaaZ\xb4\xc8\x99\x9c'Ovu\xbdZ\x17\x8dh\xf0\xe7\xe7\x0f\xab\xbf>\xc1\xbe\xa2\xcdi\x1a\xce\xa2\xba'\xfc)\xaeV\xb5\x1f\xfe\xf8\xee\xc7\xb7\xfa\xff\xbf|\xf9\xf2\xa59\xda\xfc\x99\xc1+\xc3\xbd]D/\xc8\x8d\x0e\xad\xd6S\xcb\x14*~{\xda\x17\x8d^\x8a\xfd2\x7fp\xcb\x86M\xeal8\x91*g\xfb\x99\xdc\xf7F\xbe\x9c\xb6\x81\x88\xf0,\xf8\xf0\xcf\xbc\xab\x1f\xe4Q\x87~\xcb\xd5\x07n\xa5\x16\xd7\x0b\xcb\x00+6\xf7|]\x0d\xe6\xf9\xae\xdc3SO\xa9\xd5w\xc9\x9a\xb6\xae\x1cSVz\xc9\xbb\xb2i\xbb\x1b1\xd2\xces\xaa\xf21\xfe\xa9\xd5S\xdf\x86u\"\x80\xa3\xb6'\xa2\xc7O^\xc0\x13\xd7\xdc\x1dwe\x85m~rf\x97\"Z\xfb\xb68\xf0\x92\xfe \x9b\xf6;\xc7c\xbc\xb5\xc6S\xa1&_\xec\xa4\xe18\xfe\x96\xf8-\xca\x16>\xb1\xfd\xfe\x9b\xfb\xaa\xfeT\x89Ut\x87\xc7\xe2OmW\x1f\xac\xa98\x9e4gF\x08\x02\xce$\\\xdeZ\x85|\x82T\xb7P\xe0\xf4\xd0\x8b\xfb \xa6\xa9\x9a)w\xf5~+O\xe3\x0c\xb5\x0b\x8f_\xce0\x90\xfe\xb6\x9c`zI\xa2\xe8~V\xc1S\xbe.UG-WOa\x0c?\xfd\xf9\xa7g\xd6\x04\x9c\xffu\xc7\x85\xbb>\xb0\xe8./\xe8\xb7\xabo\x7f\xfbm\xfb\xc4\xfal\xe0\xa5e\x9c@\x9d\x9e.W\x83\xc9\xd4*\xd5\x97&\xfe.\x0b3\xd3\xe4z\xe0\xfbs\x05\x08\x8b\xca\xfe\xad\xec\xee&\x02\xfa\x1eZ|\x00\x9a\xb1\xb9D\x8d\xc7\x1a\x93\xc2&\x00Q\xe3\xc9\\\x03\xfc\xb2\xa9q\x18F\xd3\x87\x9a\x8f\x97\xd8\x9c\xb5\xd5\x11pN\xc09\x01\xe7\x04\x9c\x13p\xde\x0b\x01\xe7\x04\x9c\x13pN\xc09\x01\xe7\x81w 8'\xe0\x9c\x80s!\x04\x9cK!\xe0\x9c\x80\xf3\x05\xd0*\x01\xe7\x04\x9cO\x03\xce{\x1b\xd6\x07b\xeb\xd8\xb9\x81G\xdb\xf0\xb9,K\x05\xf2\x060s\xbc%g\x80\xe8'G\xb8%\x1f\x86\x0d&Jt\\\xc5g\xd5\xed\xae\x1f\x08\xfa#\xe8\x8f\xa0?\x82\xfe\x08\xfa\x1b A\x7f\x04\xfd\x11\xf4G\xd0\x1fA\x7f\x81w \xfa#\xe8\x8f\xa0?!\x04\xfdI!\xe8\x8f\xa0\xbf\x05\xe0\x10A\x7f\x04\xfdE\xa1?J\xe39\xfa!\xedP)\x9dp\xa5\x13\xae\xdd\x17z\xc2\xd5\xfd\x99}\xe0z0\xf9\x93L\xfb\xa4\xbd&K\xbb\xbaR\x07e \xb5\xe3\xd6\x15\x0e\xba\x07\xc5\xe1'\xfa4\xe6\\\xea\xc7Y\x98\x8f\x0eB\x99I\n\xa18\xa8!\x94\x88I\xe1\xa5\x89PR,\x8e\x99\x94\x91[\x99*\x1a\xc9 \x8ePb\xadYF\"Y\xc5 R\xc9A%\xa1d \x94P\x96\xd1JVq\xc2\xa2q\x1a\x0f\x0b)&\xbb&\x8brBYB<\xa1\x04\x19\x19\x14\x0f \x85\x12\xa5\xa2P\x1c\xb8\xb9\x90tZ\n\xc5W\x8e\x05M.$\xaaP\xd2\x07'FZ\xa1\xc4F!J`\xa1L\xa0\xb1P\x1c\xa3\xb3\x94\xd2B \x12[(~z\xab\xff\xddKr\xa1\x04F-\x95\xf0B\x89\xd1^(&\xf9\x85\xb2\x80\x02CI \xc2P\xa6\xd3a(\xbea\x8aRc(\x99\x082\x14o[\x1c3q\x11ef\x95fPh(K\x884\xbb\x06\x8bXCYD\xaf\xd9M\x1e\xd3m(9I7\x14/\xf5\x86b\xb2\x1e(&\x0d\x87\x92\x87\x8cC\xc9F\xc9\xa1\xe4%\xe6P\xd2\xe89\x94(I\x87\x92H\xd5\x8d\x1e\x0e\x12v(.\xed\xef\xa4wPRI\x9e0\x85'\xcbJ#\xf2\xe4\xc3q:\x0f\xc5\xd1\xa1\x9c\xd4\x1e\xca\"\x82\xcf*\xcd\"\xfcP\xf2\xd1~Z5Y\xc8?\x94\xa5s$J\x04\xca\xe2\"t \x8a\xbeq\x85\xfc\x93\x85IuFe\xc9\x04;\xa3\xbf\xb9\xf2\xec8Z\xa5\xee\x99\x11\xb7)oA\xa7\x00\x94B\x1b\xdd$@W\x10\x0b\xa1+\x88\xe9\n\xe2,W\x10\xa7\x91\x8diW\xcd\xd8l\xa3\x02\x96m\xba1D\x03\x8e\xa2\x96\xa6\x13\x81\x91\xf4@\xa3\xd9k\x86?\xb9\xe2\x8a,\xce\x0e\xe4\x99\x01\xc1\xd2k\x85\xcd\xcf\xe5\xd5Q\xd0\xd1r~\x8d\x82\x8e\xd2\xb83\xc4\xeb\xad1\xa2\xa0#\n:\x9a\xc6k9\x1d\xffl\xecU^\xde*\x1bc\x15\xe7\xaa\xb2\xb1T\x14tDAG\x13\xf8\"\n:r0@K\xb8\x9f\x948\x1c\n:\xd2\x84\x82\x8e\x80\x82\x8e(\xe8\x88\x82\x8er\xf1\x1c\xd9\x18\x8e\xbc\xdcF\x1a\xab\x11\xe53\x12\x99\x8c\x14\x0e\x83\x82\x8e\x86\xb2\x16q\x12\x14tDAG\x14tDAG\xffhAG&8\x1e@\xe2\x83\x1c\x80\xfe\xfa\xf3\xf1\xfb\xaa\xcd\x9e\x8b\xe6C$\xc0\x8cp\xa01\x0b\xf0\xc8\x11A\xae\xf5\x99z\xe5\x87|v^\xf0NH[\xa1x\xd5\x04J@Y\xc8\xf7\x97\xe8/\x94\x90\x16\x93\x95\xe4kd\xaa^C\x89\x9d\xe0]\xa6\xe3\xac\xe2\xa4\xcesi:\x94\x85\xfa\xce*\xaf1/-\x1fd\x81\xee\xb3\xca2AQ\xbb\xb6\x8cz\x10\xc5\xa7\x0dQ\xb2\xe8D\xad*7\xa3\x88\x12\xb9vD>4o}w\x14\x9cG\xc1y\x14\x9c\x17%\x1b\x9d\xa5Qp\xde\\zR\x15\x92@R:\xdfL&.Q\x16\xd0\x97(\x0bHL\xdfB\xf745\x1b\xbd\x89\x92\x97\xe4D\xc9Fu\xa2\xc4 O\x94l\xb4'\n\x05\xe7Qp\x9e\x18)\n\xce\xd3e\x19\xfdj\x15\xd7Qp^\x9c\xb2E\x89\x85\xa5\xc5\xe9[\x14\n\xce\x9bF\xf7\xa2Pp\x9e\x90\x18=\x8cB\xc1y\xdd\x02\"\x19\x85\x82\xf3&\xd2\xd0v\x93)8/\x07u\x8d\x92\x97\xc0FI\xa3\xb1Q\xa2d6J\"\xa5=z\x98\x82\xf3\x84\xe4\xa4\xc0Q\x16\x11\xe1Vi\x14\x9c\xf7\xf3\x05\xe7\xcd\xbf\xb8gT\x8c\xa64\xcc\xeb{P\xdc\xd0u\xeb\x0c\x83\xb1r\xd6Q(\x9e\x10\n\xc5\xa3P\xbc,\xa1x\xe6,\x0d\xf1\xe0s9\xf8\xd6\xc7\xbe\xd7\x87C\xd9\x1d$\x03\xff'q6\xe7\xb2a\xbb\xf2s2\xe3~\xcf\x1en\x8e\xda+\xe0\x9b\xd9\xd625;\xaeW\xcf;\xaa\x8e\n\x15\xdd\x1d`\x0d\xb84\xe5\x92U\xea\xec\x1a\x89\x82\xb6kN\x1b\xfem\xf8j\xdd5\xf5A\xb2\xa6\xe4\xd6\xb9I?J\nMN\x06\xb8+\xaam{W\xdc3\xcb\x10\x18\xb5\xed\xe2\xbb\xf3\xfe;H/\xa3\xa8\xf8\x92\x11\xb8\xa0l\xd0\x96u\xac9\x94\x15\x03Vmj\xaex[I\xdb\x08\xd4T'\xafv\xf5\xc8M\xda\xdc\x15U\xc5\xf6\xf8x\xb1\xb9g]+K\xe6\xfd6&\xb0|\xcf\xe0\xdf\xc7+\x01\xf9\x05i\x0e\xa9\xdc\x01C\xafY\xa5\x1b>\xae\xef\xce\xaa\xd3A\x9f\"\xdf\xc0\xbb\xebW\xd7on\xde\xbf\xbdx{q}\xf1\xea\x87\x8b\xffx\xf3\xfa\xe6\xfd\xdbw\x97o\xce/\xbe\xbfx\xf3\xda\xf1,\x7f\xd2\xf1\xe7\xeb\xab\x7f\xff\xf1\xf2\xcd[\xc7/\xa3?KH\xe0Eb\xc5b\x93f\xcd\xb1h\xba\x07\xdf\xa8h\x8f`&\x85T]1\xc9R\xf3\xa4D\xf6.\xaf08o\x1c:\x90:\xaeV\\p\xb4G\xa6\xf3\x82\x81\xda\xc6\x1f]=\xd6\xff\xfaX\x9d\x19\xcd\xc8\xa4N\x19\x05\xba9\x06<\xe5\xe4\xee\x94\xb9-\x83n\xfa\xab\x8d\x7f8\x91+\xf6\xdd~\x01\x99\x0ds\x8c\x89\xe3X\x8b\xffP\x8b\xcbNP\x12P\xc7\x0e\xbb\xc1=\xee\xa3\xcdWs\x98\x84^\xd8\x9d\xf6\xb2\xb5|\xe4\x0b9\xd4r\xd4P\xa3\x15\x950`\xd5\xf8\xb6\xecX4B\xa3Tl\x05o\x7f\xbc~#\xce\x995\x0cYp\x01\x95\xad\x19|\x0b\xca\xfc\x1d\xd5\xdf\x0e\xfe\x02k\xbbb\xbd/\xdb\x9ef,\xf4\xb9\xb0f\xdd'\xc6*\xe8>\xd5\xd8\xa8v\x15\xb2/\xccu\xffX\xe6\xc5h6\xe7\\\x96\xd6\x92\xb4g\xaeg).l\xf4\xa2\xe5g/=\xdf\xb2\xb3,\xe1\xc5\xcbm\x826\xf6-\xb1\xa8\xa3\x19]ZZ\xebt\x83%\xe5\xe3\xdb\xbb\xb9\xdc\x91=\x93\\KP\xd4\xff=y\xb2O\x9b0\xda\xa4\x18\xec\xb7\xd5\x92uCf\xb9]>\x99\xe5d\x96\x93YNfy/d\x96\xff\xfd\x9b\xe5=\xa8\xe7\xda\xce\xc7t\x86\xfa#\x0e\xe4@]X\xea\xc6\x95Z\xd0cDh\x89\xcc\x86jgE\x13\xa9\xe9w,\xba\xbby\x1bu\xc8^h\xf7\xe5FhG\x91\x9fi<\x1fE\x8d.{\n#\xa6d\x81_p\xe31\xff\xdb\x91\x91\xd1\xa1\xc8&\xd0Af\x11^B\xc8V\xa3\xfd\x9f\x1c\xd7\xd0%\xab\xd2^yoo\xdc\xd7\x9d\xa9\x1dP\xcf?\xebL\xcb\x88\x86\xea\x1c\x9d2\xd5,\x1a7\xc9\xe9K\xf8\xafns\xf4\xc7Q\xeb\xa4\xbd\xba\xf3F\x85\x05w\xea\xd8\x89\xe8\xec\xf1`\xe1h\xb0\xbc\xb1`Y#\xc1\x82q`\xdd\xb2(\xb0\x9c1`\xf1\x08\xb0\xd9\xf1_9\xa3\xbf\xbax\xecW\xce\xc8\xafh\xdcW\xe6\xa8\xaf`\xcc\xd7\x9c\x88\xafptW\x86\xd8\xae\xa4\xc8\xaeiQ\\\x0bc\xb8\xf2Fp\xf9\x82\x8a\xb2Fo\xe5\x8f\xdd\xca\x1a\xb9\x95\x16\xb7\x955j+\x14\xb3\x959b\xcb\x17\xaf\xd5\xa5Fk\xcd\x8d\xd5\xc2\xb8,G\x81\xeeH\xad\x05qZ\x9e(\xadi\xce\xb8.\xf1\xfd?_tV(6+\xdc\x8e\xacqY\xa1\xa8\xacL1Y\xcb\"\xb2\x1c+\xc9\xb5\x95\xe7\x8d\xc6\xea\x9c\xb1XK#\xb1\xa2\xa1F\x81(\xac\xa4\x18,wH\xc6\xb4\xf8+w\x19\xd6q\xec\xc5\x91W\xa9\x83\x91\x12u\x15\xeewR\xc4\xd5\xc4x+\xfbxz\x86X\xabh\xa4U8\xce*\x16e\xe5\x1d\xa5)\x11V)\xf1U\xae\xe8\xaa\x85\xb1U\x89\x91U\xf3\xe2\xaa<\x91L)1U\x19#\xaa<\xad\xb0f\xda\xa2X*W\xecT\xc6\xc8)w\xdc\xd4\xa2\xa8)W\x94T\xee\x18\xa9`\x84\x94+t\xc4\x15\x1d\x95/6*kdT\xfe\xb8\xa8\xf4\xa8\xa8\xa4\x98(\x89c\xa4DD\xc9G\xa3\xf1P\xceh(w\xed\xa9Q.\xf1H\xa8 qP\x89QPV7rG@\xe5\x8c\x7frF?\xe5\x8d}\xca\x1b\xf9\xb4l>$E=\xa5\xc4<\x0d\xdb\x8a?\x08d\xe1Ud\xea\xfa\xb1\xa1@\xdf\xddc_0GF9K\x13\x1aC\x1c\x19qdQ\x8e,\xc4RM\xe0\xc9\\\xc5\xcc\xe2\xca\x9c9T\x93\xe9\xb2\xd8mfI\x17\x98\xcdg\xca:\xba\x98l9\xa3D\x17\x93\xa51G\x88x[cD\x17\x93Ma\x88\x16\xb2C\x99\x99\xa1\x05\xac\xd0\x02F\xc8\xa102r?yy\x9fl\x9cO\x9c\xef\xc9\xc6\xf5\xd0\xc5dt1\xd9\x04N\x86.&s0.K\xd8\x96\x94\xbb\xba\xe8b2M\xe8b2\xa0\x8b\xc9,\xfe!\xc6\x80db?\xe8b2)9y\x0d\xba\x98\x8c.&\x1b\x97\x92\xc6O$p\x13t1\xd9|\xe6a\xfe\xd7\x8d2\x0e1\xb6A\xa9\xef\xd4x\xdd\xf1\xb9\xec\x8b\xd7n\xe8\xccy\xa9\x07\xf1\x08\x9a\xa4A\xf7\xc4#\x10\x8f\xd0\xfdBy\x04'\x82?\x8bJ\x18\x954\x87M\x98\xc3\x1f\x8cr'\xc0\x88:P!\x86.\xd5\xa7\xf2\xe79\xc2]&\xa8\x94\xa9\xa16\x0b\xb2(\x803\x93\xc2P\x9b\x9d\x7f\xc0\x99}\xc0\xd99\x94\xd0MM\xfe\xec\n\x10\xea\xaf\xfcyJ\x96\x05\x08dZ\x80@oQ<\x19\x17 \xb9\x9192/@\x14\xe9\xca\x9b\x81\x01\x02Y\x18\x00R21\x00\xb8\xb31\xc0\xb2\x8c\x0c\xf6\x04\xc3\xfc\x0cfV\x06\x98\x99\x99\x01\xec\xec\x0c\xb0(C\x03\x84\xe6\x89\x99\xa9\x01&fk\x00\x7f\xc6\x06\x08fm\x00_\xe6\x06\x98\x9e\xbd\x01\xbc\x19\x1c g\x16\x07\x08\xa9\x1a\xbf\xa2\xf1\xe8S\x88-\xdf\xd8j[\x92\xdd\xc1Q\x98\x0cQwfx\x00o\x96\x07\x08gz\x80\xfc\x9dL\xcc\xfa\xe0(\xc9Nn\xe1x(\x94\xfd\x01<\x19 \x00re\x81\x80\xf0n\x16\xde\xcf\xc2\x19! \xf6)\xc0\xe7\x02\xf9\xbf\xd1\xc2\xc4mZIF\n7\xc8\x99\xc6\x0d\\\xa9\xdc -\x9d\x1b\x90\xef8\xc7]#\xdf\x91|\xc7/\xd5wt\x7ff\x8f\xd7\x16\xf4\x19-o\x91\xfb\x87\xaa\xbd\xe8&\xae\xe0;\xd6\nJ\xd3\xde\xbc\xce\x04\xcf^m\xf6\xa7\xad\xd0\x9a\xb8\xac\x15\xb2?\x1a\x94]S\xf7\xe4fP\x0fD\x13\xeb\xd8\x99(f8\xa6\xf3\xb2\xe9LH{\xe7\xf6\xf0\x9c\x1bWzZ@\x14\xaf9\x96\\\xc7d\x17\xd7\xe7\xe4\x86\x1c\xbf`\x9a\xbdY\xc6A\xd8\xddM0\x0e&\xbb\xbca\xa77\xe6\xf6\x06\x1d\xdf\xf4\xe6\xe6r~Sl\xd5\x05\x0e\xb0\xa34\xe9\xa4z]\xe0T'\xd8\xef\x06\xe7t\x84#\xae\xf0|g\xd8\xe9\x0e/u\x88\x83\xf3\xc7\xe5\x14Ow\x8b\x83\x8eq\xcc5\x0e8\xc7\xb3\xdc\xe3\x90\x83\x9c\xd9E\x9e\x8d\xc7\x05\x1c\xe5\xe8r\x8f\xaf\xcd\xcc\xeer\xdca\x0e\xb9\xccQ\xa7\xf9Q:<\xdfuNt\x9e\xe3\xee\xb3\xdf\x81\xce\xe9BG\xf6\xc9\xd8N\x19w\xa4\xa3\x9f\x07\xfc'\x06\xfdQUYS.\xa2\xf8\xe2\xaa\x8cf\xa8M\xb2\xed\xea\x86muK\xaf\x1fu>\xd0\xbdGL\xf7H\x01\xdd#E\xf7H\xe5\xbaGJ\xb9\xe7\xd6j\xc2\x19\xb6\xde\xd7\x9b{\xd3K\x9e\xb0\x98\x08\xe8!\xa0\xa7#\xa0\x07\x8b\xf6\xc1 \xd3\x90\x1e\x15\xf3d\x03>~\x00\xe6\xdd\xe0\xc6X\x13]w9R\x1d\x0d\x87{\xe1v*,Wb\x92\x03\xe1V\xe1\xe3\x88\xefr7\xb6N\xc4\xf7\x17AV\xd2|\xc0\xe0'\xe1\x04\xf3\x17{\xf5\xc4+>\x03\xd9\xdc3\xe0\xff\xe4\xfe\xe1\xa8E\x83\xaa\x8e\x8e\xcc\x0bx-\x0f\xd9\xbe\xd3\xb3v\xea#\xf5\x02^\x99\x960\xdf\x1f\xfe\xf3\xd4\n\xf7\xb1\x11\xd4\xc4\x1d\x83\xfa\xc8\x84\xd3n;\xd5\xc6 {\n,6\xf7U\xfdi\xcf\xb6\xb7\xb2\xc0\xbe h;vt\x99\xdf\xb2\x82\x91\xa95\xfax\x9e\xaa6\xf5\xe1\xb8g\x9dYO`*\xcau\xa3O\xc6\xb4\x14\xb0\xda\xee\xe1T\xd6\x89\x18\x91\x8d\x0bM\xc0\x11\xddU.\xc3y\xdc\x93|\x01\x9ec\xa27\xb2\xad\x01\xc0\x86\x7f\xaaB\x8b\x9f[uMQ\xb5;\xd6\xf0\x0f\xf6\x9aU\xf5\xe1\xba)6\xe9p\xed\xb1\xe8\xee\"_\xcb\xbf\x11\x8a\xc0\xd8\xd1}1\xc2%\xaewp\xac\x9b\xee\xb9\xc4r\xb4Ql\xb5P\xb1\xa6\xd8\x8c7\x11c\x8b\x92\xd1\xc4J5\x9c\xaa[\xf1\x95\xba\xfa\x9e\xf5\xf3~]\xb4\xecf\xcb{=\xa5\x0f\xfc-\x10o)'DV\xd2\xb0}\xf1\xc0\xdb\xe7\xa8\xcc=\n\xc3\x88\xc3\xe8H\xb7]\x05\xef\xf3\xc5\xf9\xbbo\xff\xafQz\x0bE\xb5\xfd\xca\x1a\x01\xd9{9JPVh\xdc\x942o|t*\\\x16M\xa1\x96E\xc24hY\xb5\xbda\x15\xb7\xfb\xad\xf3\xb5\xeb\xba\xde\xb3\"\xc50\xd2K\x01\xfc\xb7\x00\xf2\xb6e\x8b\xff]\xec\xf7\xb0i\xea\xb6\xfd\x06g\x8a\x18\x01P\xedn\x91\xc1\x18\xca\xeb\xee\xca\x91M1\xd2y\x0d\xdb\xb0\xf2#[\xdej\xa3\xa0Y\x0d\x1fy}\x81f\xbb[\x81\x1fk\xb4\x92Z&\xf4\x14\xd7\x0f\xaa\x168\xf2\xc7X\xc7\x9a\xb6\xdf\xec\x90\xf0\xbe\xae\xe1\xd8p\x8b\xa7\x83\x02\xb8\xf9\xa3&\x17\xde\x93\xbaf\x02;\x95\xc54l{&\x8a\xd7f\xdb\xb5\xea\xc8\x1b9\x06}U\xe2tysb\x8aq\xaa\xd4\xab\xb0.\xaa{8\xd4\xdb\xd3\x9e}\xad\x0c\x9dw\xac\xda\xca\"\xbe\xea\x15\x8c*IYI\xa3e\xd1\xd5\xb0+\xf6m\\\xb7 \xdbjXn\x93y)Q\xebM7(G\xebshO@\xc3\xbaSS)[O\xf8\x82lk\xb4\\<\xa8-\xcc\x951\x03\x93\xbc\xae\xb1\xfe\x85\x90{\x13\x06\xf3\x16\xe8b\xa3$\xa5s\\a\xf3 :\x19@\x9c\x1f\xa0\xd1\x14\xb3,\xcd\x0b\xd0\x845<\xdam\x93\x95\xfbQ\xb3\xcd\xad\x1e\x1em[p\xb0\xfb\x94\xdeA\xb3k\xd6\x92p[\xfa\xe0\xb5\x9b!\xaa\xf4\x97Z\xfdFq\xf2j\xff\xb1 \x0d\x16\xe2\x11\xf2\x00`Aof{\x03\xe6:\xd2|\x83XwF-r\xcc\xac\x94I-}\x88!\xf6h\xf5U\xcb6\xa7\xa6\xec\x1e^\x0f)\x86\xf8\x18\xdd\x8f\xfd\xc2u\xd1\x96\x9b\xaf\xfe'\x00\x00\xff\xffPK\x07\x08Sp_\xf4\x13y\x01\x00\xbd \x15\x00PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(\xd4`4t\xc7\x01\x00\x00\xbd\x01\x00\x00\x11\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x00\x00\x00\x00favicon-16x16.pngUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(6B\xc8\xd7\x7f\x04\x00\x00u\x04\x00\x00\x11\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x0f\x02\x00\x00favicon-32x32.pngUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(\x8e\x10\x9f\xf1}\x02\x00\x00\xe3\x05\x00\x00\n\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\xd6\x06\x00\x00index.htmlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(]\x12r 9\x03\x00\x00T \x00\x00\x14\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x94 \x00\x00oauth2-redirect.htmlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(Sp_\xf4\x13y\x01\x00\xbd \x15\x00\x0c\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x18\x0d\x00\x00swagger.yamlUT\x05\x00\x01\x80Cm8PK\x05\x06\x00\x00\x00\x00\x05\x00\x05\x00_\x01\x00\x00n\x86\x01\x00\x00\x00" + data := "PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00 \x00favicon-16x16.pngUT\x05\x00\x01\x80Cm8\x00\xbd\x01B\xfe\x89PNG\x0d\n\x1a\n\x00\x00\x00\x0dIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\x00\x00\x01\x84IDATx\x01\x95S\x03Luq\x1c\xfd\x8c\xf1\xc3\xec0\xa7)\xcda\xb6k6\xb2\x9b\xf9\xb2k\xc85/\xdb\x8dqx\xc6\x94m\xcc{\xef\x7fO\xff\xf3l\xdc\xed\xf2\xe0\xfe\xf8\xc9\xffP\x14\x11/\x14[\xa3P\xc4\xa1\xbc?\xf1t>7\x12s\x13\x03\x85\xca7IR a\xb5j\x8f\xa71\xbe]\x88\xf6\xb9L\xf0\x1c\x93\xcf\xda\xe3)\x10\x93f\x8d\xe4\x06\x13\xcf\xde<\x9b\xd14\x95\x8a\x92\x81OA\xcfF\x89\xdd<\x9b M\xe6}L\xe4\x07\x15\xc5\xf5\xe3\xffI\x0c{\xd6\x8d\xffs\x994\xbasfh\xae?\xafk\x1aprw\x10 <\xb9\xdb\xc7\x86\xa6\xd1\x19I\n\xa8\xb1\xd7\x84y3g\x171T$\xb5c\x7fq\xfbbq\xbfk\x8e'\x1dQ\xb0\xc2,\x92\x0bx|;F\xe5\xf0\xef\x00\x83\xf2\xa1\x1fx|?q\xbd\xcb\xc2\x16\x80ZF\xf0\xc4J\xf3\xe3\xe4n1\xcc\x17k`:}\xcby\xe8\x98\xcbB\xc7|6z\x97r\xd14\x9d\x06\xd3\xf9\x8a\xe4\x94\x90\x8b\xb6\xd9\x0cP\xebc@\xd0|\xbe*\xc94\xc8\xa7\x98'\xcdh\x00\xe3\xd92\xa6vK}\x0cB\xa4\xf0+D\n\xc7\x81)\xb0\x10\x9a\xe3\xa9\xd8\x8bx\xe4(\xa2\xbb\x8dl\x0d\x01\xb6\x8a-\xf378\xbe\xdd\xc7\xa6\xb6\xc9\xd9\xc6d\xd8\\m\xf4\x0c\x92 uQ\x0e\xd2\xf5\xb3\xd1\xf1w\xdfQ\x16\xb34a$\xa1\xc4\xc4(V\xbcF\xd9\xdf\xa4\x91\xe9\xb0&,\x12+\xcd\x93\xcf\x1c\x1cb\xdc\xca\x00qt\xeb\xcc-\x14\x89\xfe\xfc\x0fm2j\x88\xec\xccs\x18\x00\x00\x00\x00IEND\xaeB`\x82\x01\x00\x00\xff\xffPK\x07\x08\xd4`4t\xc7\x01\x00\x00\xbd\x01\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00 \x00favicon-32x32.pngUT\x05\x00\x01\x80Cm8\x00u\x04\x8a\xfb\x89PNG\x0d\n\x1a\n\x00\x00\x00\x0dIHDR\x00\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\x00\x00\x04|ID\xc4\xcf\xd0@\x04&%\xad\x1e\x16\x0f\xf7\x8d\x97AR\xfa\xca\xe7l\x87\x05\xf8\xd2\xfb\x0c\x84\x1d\x0dLVY\xdc/ju\x13\x1a\x88\xd2\xa0\xaaa\x82|nzp_\xf4\x03\xc8 \xd4;^\x8a9}\xeeu\x9a\x91 `\x04\x14s\xec\xe1\x0c\xc6]\xa3\x05``\xd1w\x12*~ \x00\xf3\xae\xd3\xa0\x9cb\x82\xa2bx(\xb3n\x1fqx\xd2\xf2\xda4\x1d\x8a}\x1ck\xd4>\x9cI+\xeb\xb3\xf4k\xc8u`L\x93\xf3]4\xb5\xd0\xc3\xe33\xd9\xee\xd7\xf2\xd9\x19\xea\x18\xc9\xc1Y:\x18\xfb(-\xadN\x82\x06e\xd5\x1f0\xa2\x1dV\xf8\xbe0\xc1\x985\x01\xf8\xd2~\\\xa6\xa5\xb5)&\xf6\x98V\x80l\xe4\x03\xf8\x03\x04\x00s\x9a^\xec\x85\x00\xf4+\x0b\x00\xe1:G\xf2p\x96\x0e\xc4,\xe46\x1e5\xbbP\xdd\x15J\x80}\xce\xa4\xe2\xc8{m\xa4\xe2\xc3\xc2\x01\x07\xc0\xdb\xa4\x18-\xa1\x931\xba\x10S\xfa%\xb6P`\x10\x19v\x99#|Gg\x9b \x10W\xf6\x8dI1\xba\x92\xd66\x17E\x12\xfa\xd9\xa8\xf3UTe\n\x1b\x95\x9d\x81f\xe5\x18\xa5umc\x81\x86\xa6\xeb\xec \x804\xcbg\x17\xa19\xfa\xc6\xf7<\xa3\xbd\xf2\x0e\x7f\x02\x80\x97Y\xc7\xac\x184$h\xa3v\xba! \xcc{\xcd\xb4!\xb1\xd8\x92%h\xe3\x93\xdc\xd3_\xda1\xe6\xaei\xcf\x83\xa6p\xbc$\xf0\xb2\xda\x94\xa2q\x14B@\x13\xdb\xff\xf3\xd7\x0d\xfaA\xb9\xc5n{\x8e\xd6Y\x08\x01u\xc1'~\x16\x8e\xe9\x04\xa2\xfbA+\xc74\x0c\x98\xab\xd7:\xfc0\xd1v\xaf$\xa2#\xb7\xf1\x08\xfdm!OXh8\x10j|g\xd1\xe0a\xb2\x99\x04\x9a[y\x9a\xbdk\xf24C$\xa0\x9e#\x9f\xa3\xa8\x001\xc6\x1a\"\xc0\xe4i\xa6\xcc0\xf3\xf7\xb7\xf5XE\xb8\xe0\xa1\xc9\xc2\x0c\x90\x83\x80$\x838\xdf\xd6\xe3\xd4\x82FNG\x0f\x876\x8a\xbf1\xa8d(\xa7@\x8cQX\x90\xdb\x19\x9f\xc5YG\xe9\x9e\x00\xa5y3]\x9aJ\xe1\"\x00\x00\x00\x00IEND\xaeB`\x82\x01\x00\x00\xff\xffPK\x07\x086B\xc8\xd7\x7f\x04\x00\x00u\x04\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\x00 \x00index.htmlUT\x05\x00\x01\x80Cm8\xb4T]O\xdc:\x10}\xdf_1\x98\x07\xe0\n\xc7\x17V\x17]\xa5I\x1e(\xad\x8aDU$\xd8\x87\xaa\xaa*'\x9ed\x0d\x8e\xbd\xb2\x9d\xfd\x00\xf1\xdf\xab8\xc9\x86v\x11\x95\xaaV+\xad\xc7s&\xe7\x8cg\xc6N\xf6(\x85\x0f\xb7\x1f\xaf\xa04\x16\x9c\xe7^\x16 \xa4\xf3V\xe6\x8d\x97FC\xdeh\xa1\x10\xf2F*\x01\x94f\x93d\xef\xe2\xd3\xdb\xdb\xcf\xd7\xef`\xeek\x95M\x92v\x01\xc5u\x95\x12\xd4$\x9b\x00$s\xe4\xa25\x00\x92\x1a=\x87b\xce\xadC\x9f\x92\xd9\xed{\xfa?\xe9!/\xbd\xc2\xecf\xc5\xab\n-\xcc.\x13\xd6y:TI}\x0f\x16UJ\x9c\xdf(tsDO\xc0o\x16\x98\x12\x8fk\xcf\n\xe7\x08\xcc-\x96)\x99{\xbfp1c\x85\xd0w.*\x94iD\xa9\xb8\xc5\xa805\xe3w|\xcd\x94\xcc\x1ds\x9d\x14m$\x9bF\xd3\xff\xa2\x93g\x9e(\xd0\xedh\xcb\xc2\xe8AU\xd6\xbcB\xb6\xd0\xd5 [\xf2e\x8b\xd3\xe9\xe9zz\x1a\x05\xc0\xc9\x07t) \x1e\x02\xec\xf7\xf8N\xce\xd6'g?\xf0\x05\xcf\xc8\x17*\xd2\xd9\x10\xda\xd0\x9b\x8f\xfd\n\x90\x9b5u\xf2A\xea*\x86\xdcX\x81\x96\xe6f\xfdf\x8b\x9b%\xdaR\x99U\x0c\xb46\x0f\xd4\x15\xd6(\x95s\xeb\xe8\x12\xad\x97\x05W\xbb\xb1t\x13C\x178`O\x93\xde\xf8\xe7x0\xe2\x1cKcq\xdc\xf3\xd2\xa3}5?\xa9\xe7h\xa5\xdf!\xcd\x8d\xd8\xec|Xs[I\x1d\xff;\xa6\x97\xf3\xe2\xbe\xb2\xa6\xd1\"\x86\xfd\x92\xb7\xbf\x91\xaa\xfdO\xd8\xb6^ \xebF\xb35[\xfa\xbe\x9eB.A\x8a\x94\x8c\xe3@\xb2\x84 \xb9\xcc&}\xc1\x0b+\x17\x1e\x9c-\xfe\xc8\xb0\xd1\xeeVEw\x8edmz\x81=\xfb;R\xces-\xb82\x1a\xe9\xc2\xa2C\xff\x8aj\xb7YI-\xcc*2Z\x19. \x85\xb2\xd1E\xfb\x16\x1c\x1e\xc1\xe3\xd0\x1b\xc6\xe0<< \x1c\xdc\xc6y\xac{\x7fa\xb4\xf3\xd0HH\xa1\xbf\xd8\xb3\xcb\xf3p\xd8\xc3\xb1\x87\x8dU1\x90h\xc82\xda\xf0Z\x91\xe3-,L\xfdM\x8a\x18\x0e\xf6\xc7c\x1c<\x83\x11\x17WR\xdf\x87\xd9\xf1\xb6\xc1\x11\xea\x0e\xe8b\xf8\xb2u\xc1\xcfyD}P\xc4\x17\xd2\x1d\xbf\x14w\xb3\xad\xd8u\x08\xdd\xc6|}\xa6\xa4\x9aJ\xea_)uA\xd1\x85Y\x85Z\xce\xacz\x89K\xf1\x8di|\x0cd\x14\xbe\n.2\x8c\xf1\xd1P\xf6\xbe5\xa1\xbe\x8d\x0c\xce\xa70\xd6c\xff\x12\xd6\x0dv\xc2\xba\xf7\xf9{\x00\x00\x00\xff\xffPK\x07\x08\x8e\x10\x9f\xf1}\x02\x00\x00\xe3\x05\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00 \x00oauth2-redirect.htmlUT\x05\x00\x01\x80Cm8\xc4VMo\xe36\x10\xbd\xfbW\xbc\xf0\x10I\xb0\xab\xa0=*Q\x82\"\xd8C\nl\xb7\xd8 \xbd\x04\xc1\x82\xa6\xc66\x1b\x99\x94I\xca\x86k\xfb\xbf\x17\x94eK\xb2e\xd4=u\x0e\x968\x9cy\x9a\x8f7\xa4\x1fn2-\xdc\xba \xcc\xdc<\x7f\x1c<\xf8\x07r\xae\xa6)#\xf5\xd3\xdb+{\x1c<\x8cu\xb6\x86V\xb9\xe6Y\xcaL\xa9\xc2\xc8k\xef\xbc\xda?kO+\x8c,\xdc\xe3\x00\x00\x82\xd2\x12\xac3R\xb8\xe0\xbe\xd2LJ%\x9c\xd4\n\xa6T\x08#l*\xad\x97%7\xd0\xbct\xb3_\x90b%U\xa6W\xb1.H\x91\x89\xed\x8aO\xa7d\xde^\xbeS&\x0d \xf7\xad\xb2\xbb\xef\xf8ZR\xee\xd5qGHk\x9c\xd8\xfae\xd7\xca\xd4\x08o&o\xecZ\xca\xae\xb5\xb4\x7f\xf2\\f#,\x8a\x11\xb81\xf7\x83\xe3\xb6\x9c \xbc\x13:\xa3\xad\xd3\x9f\xa4\xb6d\x8c6w\xb1#\xeb\xc2:\xfa\\\x0b\xees\x8dg\xdc\xce\xa2v\xae^\x16E\x93g\xc72\xb6\xe5\xd8\xd7LM\xc3\x9f\xa3&\x9e\x1d(\xb7\xd4\x07r\xf4\xb6\xc4\x8d\xb8\xe8\xdf\xc4\xce\x8dA\x8aE\x11\xdb\"\x97.d\xb7,j\xef\xc5\x13m\xbep1\x0b\x8f\xcd\n\x97#9\xfa\xc1\x8d\x89\xb0\x81\x7f\xbe\xcb\x0f\xa4\x08X\x80!\x96\xb1\xa1\"\xe7\x82\xc2 \x0dF\x08X\xc2\x82\x08C\xbf{\xbfk\x80\xabP\x17\x05\x9e\xf0\xdb\xeb\xb7\xdf\xe3\x82\x1bKa\xb0\xf1\x08\xfe\x9b\x7fi\xa9\xc2\xcam\x17\x8c:9\xa2M\x9b\xf0\x93\xd6#,y^\xd2iA\x0fb\xc8\x95F\xe1\x93\xd6H\xd3\x14\x8c\xe1i\xef\x80\x04\x19\xf9\x96\xbd}\x7fy\xd6\xf3B+R.\xdcc\x9d!\xed\x8e\x9a\x08 6\xad\xea\xd5\xa4\xa8+\xb8g\\\x9a6\xfc\xebr$l!\xd7t\xf3\xbf\xb1\x153\x9a\xf3xJ.d\x93\\\xafX\xb4\x8f\x96\x0bA\xd6>\xeb\x8c\xd8v\xfb_}K7\xd3F\xfe]\xb1\xa1\x82h%q{\x8b\x9b6\x88/\xc4i }\xc07u~}\xe5\xad\xfd\xc9\x98\xe7q\xd8_}o\xf1\x92%\x9dx\x15\x9f\xd3yO\xbdX]\x1aA\xc9>t\xd6o\x93\xd3\x92\xf2\x04l\xc5\x8d\x92jz\xc1jN\xd6\xf2\xa9\x87\xfa\xb5]\x05\xcc\xf9\x1acB\xa9,\x9f\xd0\x08\x05\xb7\x962\xec\xdb\xb6\xe2\x16b\xc6\xd5\x942H\x05KfI\x06\x7f\x9c\x98\xa8\xc0\xd5\x9c\xa2\x0c\x13\xa3\xe7U\x8e\xb55;'Nk\xe6\xd0\x9d;\xd4%^\x14\xbd\xd5\xf7\x92QN\x8e.\x1c`\x079m\xe3\x9e\x8a\xfe\xed\xa2\xad\xe0y>\xe6\xe23\xdc\xf8u\xa7=\xa3\xf6\xa1\x98\xb4\x17g\xa9\xf4\x1dA\xa8Z\xe4\xf6\x88_\xfc)\xf8\xd5N\xcf,\xea\xb4\xabS\xf2\xd2\xe0v\x10\x90\x82\xbd\xb3\xe1\xc1g\xc8>\x120\x0c{\x1d\xbd\x1c\xd1\x7fd\xb4\xbf\x82|\xf7\x9f\xd0\xa7\x1e\x82\xc5`H\xc0\x94F3p0$H.\x0f]v3\xaa\x9b\x1c\x83EW}\xba4\x12O`_\xb5!H5\xd1 \x9a\x0c\xaa\xcd\x04\x8cE\xe7M:\xe1\x08\xfe\xefQ\xab\x02\xfe\xb7A\xeb\xb6k\xbb\x05{\xef\x8e\xde\x84\xcb\x9c\xb2\x8f\x04\xd7U\xf9\x9aQ:\xbe\xf51\xf1\x1a\xaaW\x97uR\xdd\xe7\xf59\x974\xb7\xfc5s\xd0\xc4P\xdf\xdd\"\xd7\x96\xc2\xdab7x\xb8;\xfc\x01\xfa'\x00\x00\xff\xffPK\x07\x08]\x12r 9\x03\x00\x00T \x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00 \x00swagger.yamlUT\x05\x00\x01\x80Cm8\xec\xbd\xfb{\x1c9\x8e \xf8\xbb\xff\n\x9c\xef\xbeU\xd5\xb4\x9dz\xf8\xed\xdd\x9a[\xf9Y\xea*\x97\xd5\xb6\\=\xd3s\xbdif\x043\x93\xa5\xc8\x88t<$\xa5k\xfa\x7f\xbf\x8fd\xbc3H\x82\x11\x91\xb2l\x13\xbb\xdf\xb4K\x19\x04I\x10\x04@\x00\x04\x93K\xb2X\xd0\xf8)\xec\x1dM\x0e\xf6n\xb1p\x1e=\xbd\x05\x90\xb24\xa0O\xe1\xf8\x97\xe3\xf7?\xc3]X\xbc;}\x0e\xafIJ/\xc9\x06\xfc\xc8Kn\x01\xf84\xf1b\xb6NY\x14>\x85\xbdcx\xf7\xf2\xfd\x19\xb00\xa5\xf1\x9cx\x14\xe6Q\x0cIJR\n\x9f2\x1a3\x9a\xdc\x81\x80.\x88\xb7\x814&aB<\xde0\xd9\xbb\x05pA\xe3D 9\x9c\x1cL\x0en\xadI\xbaL\xf8\x18\xf6\xc99I\x96\xfb>]\x07\xd1fE\xc3t\xff\xe2pFSrX\xfbS\xb2_\x8c\x18`AS\xf9\x0f\x80$[\xadH\xbcy\n/\xca/\x8ba@\xd5\x18|\x9a\x12\x16$y\xa3hMc\xc2Gu\xe2\xd7\x1b\xe6\xbf\xc64YGaB\x93\xa2\x0f\x80\xbd\xa3\x83\x83\xbd\xea?[$9\x86$\xf3<\x9a$\xf3,([Oj_'\xde\x92\xaeH\xbd=@\xbaY\xd3\xa7\x10\xcd\xfe\xa0^\xda\xf8a\x1d\xf3\xe1\xa5\xac\xde\xbf\x84j>\xed_4\xe8@\x8b\x12\x1ah\xa7\xcc\xef\xfa\xc0\x80\x1d\x8c=p\x88.C\x1a\xab~,zH\xd2\x98\x85\x0b\xc5G~B?\x0dB\x00\x9cUW$}\n\x19\x0b\xd3\x87\xf7\xbb\xa7*\xf7C\xc5\x15'/ I\xa3\x98&r\n@B\x1f\x12\xfa)\xa3\xa1G!\xccV3\x1aw \x12\x1bBGL\xcdHi\x98\xadT\x13\xbd\x0b,\xbc \x01\xf3\x95\xbf\xf3\xfdvA\x95?{A\x94\xd0\xee\xd6>\x9d\x93,H\x9fj\xbbhp\xfe\xbf\xdf5\x0d\xf3)\x9c\xc6t\xce\xae YFY\xe0s\xba\xc4)\\\xb2t \x07\xc0B1\xd7 \xbc\x8fTkN\xbd\x80pB\x81\x9f\xadV\x1bIV\xd5\xf2\x16s\xaf\xaf\xde\xb1\xf8\x0b\xf84\x8cR\x9a\xe4r\x8aK\xac\x9ap\xd0R\xac$Y\x1d\xebs\xf1\x17=V\x0d\xa1s\x1e{/\x9a\xb1\x04\x88\xa4\x03\\.\x99\xb7\x84\x98\xcei\x9c@\x1a\xe5x\xa3y\x0dm\x07\xbeB\xaa\xf6c\xb6bK\xcc6\x9d\x84\xf5bJR\xeaOI\x87\xcc\x01\x1b\xfc\xdd;.\xa7\xc4^Mz\xe7\x9b\xcd\xafm\xc0;9%\xf8\xd6\xcbg[H\xf4\xbd\x16\xcaE\x1ce\xeb\x0e!$\xc7I\xe2\x98l\xb6~c)]u\xca-\x83\xd83 =1\x16\xa5L5\xa2\x07D\x17`\x96\xac\x885\x02\xa3tE\"AIX\x0e\x0bTo\xdc\xc6Xt\x8a\xd7\x02\xf4\xdc%!\xe71\xa5\xac\x02x\xcd\x17\xaa%\xe7\xef\xd4\xf7rK\xdesFTO\x8d#Ch\x08\xad\x8e@\xd1[\xa7'\xcc\x9a\x82\x7f\x11\xadi\xa8\xf9yM2\x95\x08\x83\xbc\x87$\x9b\xcf\x99\xc7\xb8\xf10\xcfB?\xd1|\xac\x11\x88H\xdd\x83\xd5>\xe3\xe9\x1fK\x0dT\xd0\xf4\xa9d\xa9\xb7k\x1av( \xc9!Z\xda\x97\xc4/0\xc5>\x8d;5N\x8eL\xfe\xae\xc3\xb7\xbdV9\xee\x93\xda\x0f\xaf\xf8\xdf\x95\xbdX,wMm\x8aN\x94\x1aSb\xd6\xf2\x86\xb5\xba\x1485\"9YSo\xc7B9$+\xe5\xd6\x06\xdc\xf6\xe6'\x91O\x19\x8b\xa98\xfe\x98\x91i\xc7\x0c\xc8qsH\xd8\"\xa4\xfet\xb6\xd1\x7f\x86\x91\xac\x05\xbc\x17(\x9fm `I\xca\x97\xe8\x9cn\x12H\x97$\x85\x94\x86$L\x13\xa0Wk\xea\xa5\x90\xaa\xb7b\x01KrA\xc5 I\x9aqy=\x8f\xa3\x95i\xa48\n\x81\x05\x958\x90 \x98Fs\xf3wz\xfbc\x1b\x94\x16\xc96\xa0\x18\xa9\xf69z\xc9\xa0\x9c\x1f\xff\x1f\xb9`,\x84t\xc9\x12\xb9\x8a\xab,I\xc5Z\xa0PI\xa6\x02\x92\xa61\x9be)\xd5\x88\x8e\x1cH\xb8\xf9\xb6\x89+\xe6\x07$\x85\x80\x12\xb9+\xa29\xa4K*i\xcd\xb9Z\xfc\x17'6\na\xb9 \x96\xc4\xae>3Q\x05Oh$\x91-\xf6\xa5\xdd\xce\x04ND\xccg\xd6\x8b|A\x82L+\xda+\xb0\xc2\\8\xe2\x8a\xc5\x80\x98\xaec\x9ap\xd9\xcf\xe7\"\xfb\x855a:{\x18\xac\xb8\xb0\xea\xab\x10\xcb\x15+\xe4r9\x17\xcb(!\x0b\x82]\xd7qt\xc1|\xad\xd5\x9e\x8f\xf04 \x9ePn\xefjzN\xd9,\xa6I\x94\xc5\x9e~\xf1q\x0c\x8a`N4c\xe2\x99\x125\x01 \xe8\xde\xc1j\x04\x1c\xbcu\x86\xf9\xccr\x0c`=\x0e\x0eY\xc8\xf4\x86M\x13\xacG\x04\xbdF\x05r\x93\xdb|n\xb9\xd5\xeb`\xf0\xbft\x03~\x8bW\xf0!d\xa5s\xc5[gw`EWQ\xbc\x91\xfe\xcc4\x8a\xc9\x02\xdf?\xc0\x8a\xa61\xf3\xccJ\\\x02^\xc3T\x80\xdb\xcaM@l\xec&\xf4b\xa9\xbeLe\xa1\x93*\xe8\xcdX\x16z\xaa\x82\x9e\xbd\x8d\xa6\xbb$\xd8\xb2\xf7\xf3\xd3\x0f\x05g\x17BV\xca\x16\xc1\xdc\xde:\x03/\n\xe7\x0c;#\xa4\xd9$A\xee\"\x1c\x9d\xad\xb9\xcd\x9e\xcf>e$LY\x8a\x1c\x10\xf4\x19\x14\xf4\x1a\x188\xa9j\x06'U\xed\x99\xcaI\xd5\x1dI\xd57\x92\x93\xdb\x82\xb5\x900\x82\xc5%\xb7#\x11Z\xc9\xd5|\xf3\xe0Hm\xcdp\xf6\xac\xe6\x04\xab\x00'X\x15\xe0\x04\xab\x80\xde\x8c\xf5\x1d \xd6\xf7\x92}\xb5\x92\x15\x89*\xdf v\xa2\x95\x86\xfe:b\x86\x98B\x05\xb6\x9cm\xc5\xd5=8\xba\x0f7\x9f\xb3P\x19\x86\xef\x82\x9e\x8c\xa5\x8f\xc8v\xc1]x\xff\xf3\xf1\xbb\x97/\xa6?\x9f\x9d\x9dZ\xb6|w\xfc\xdb\x8b\xb7o\xa6\xa7o\xdf\x9dY\xb4,#\xad\xfd:\xc6F`\xbb\xa01\xd9\xa7\xf0B\xa0\x9a\xd1<\xa2'\x99\xd2\n\xa1\x08 \xcd\xa8\x17\xad8\x12\xf8%\x9b\xd18\xa4)M\xe0$\\\xc44\xc1\xec\x86\x1a4H\xaa\x18\x9f\xa6\xcf\xdf\"\x9f\x9eF\xb1\xcd\x14lE\x87\x84\xb3%K\xf2\x85\xe0\xa3[F\x97\xc2\xf3Z\x0e\x91\xd9\xcd\x9b\xad\xd6\x81p\xbeR\x1f.\x974\x94Q\x07J\x12\x11m\x95i\x10\xba\xd8r\x03\xecg\xf4\xb2\x18v5#\x02\xebl\x160/\xd8\x00\x11\x99\x95l\x16\xe0\xd5\xfd\xc9)$4\xbe`\x9e\xb9\x89\xcdh\xdf\xe5r\xfa\x83\xf0,\xd4\x06\x1b\x04@.\x08\x0b\x08n\x90\xa5\x1fXH\x99\xa4\x957\xb6\x1fF>\x05\x9az\xb7\x10\xa8\xd8\x1c\xe6\x8c\x06>_\xa7\x90\x05\x95*\xe1\xff\x1d\xa5\x90k5\x19\xb7\xc3\x8cm\xc1.h\x08>I\xc9\xdd$\x8d3/\xcdbS3/\xca\xba\x12R\xdb %\xaa9\xa3G\x02&\xaf\xa7\x80u\xcc<\x84\xe5`\xa5i\xect\x8cO\xc3\x08)\xf7-\x15\x0bY\xe1\xa8\x0b\xb6\xa8\xed\xc5\xf8\xf3\x88\x85\\y\xb0Pl\xd04:\xa7\xa1L\xa4!\x92\x00,\x149\xd5H\xeb\x85\x84\xf9\xe4&\xb70\x9c\xfe\xdb\xdb\xb3\x97O\xe1lI\xf3V\x15\xdf\x93\x10N\xc2T&\x83 \x10\x95\xc2.\x11b\xce\xcb\x924Z\xf1\xf3\xc12\xf21\x03\xa9\xe5\x1d\xe4\xe9\x19>\xcc6\xb0\x88\x16\xd1:\x8e\xd2h\xa2\xc5\x81\x957\x85\xac)l\xc4,d\xe9\x1dH\xa3\x94\x04r\xc3\x89s\x90\xe0|\x88\xe6\x06d\x85TP|\x96\x8fI\xa4\xe9\xbc_S\xaf\xe83Od[S\x8f\xcd\x99'\xd6\xb6[\xaf\x98rDQ\xaci\xda\xf1E\xa6\xe8k9\xaa\xfa\x10\x99_O\x10m\x0e\xb8L\x07j'\x8ar\xfe\x8f.\xa7\xc4S\xc8/\xad\xb8\xd0\x8b\x87\x1df\xd1'^\xb4\xd6\xc8:\x04\x9d\xaf\xd4\xf9\xa8\x88\xf6\xc5\xc9IR\xed\xe4\x05\xdf\x80|\x1b\xe5d\x04\xe6\xd30es\xd6)\xe25\x89\xaa\x86\x8e\xbf\\6\xbd&K\xcf\x90\xd1x\x17\xa2\x0b\x1a\xfb1\xb9\xecF\x80\xcaxl\x88\xe9\xffFd\xdb\xe7+#r\xe5N\xe4\x1fs!\x99\x7fbJ\xa1\x97\xe9\x8b9\x1a\x91\xc0\x98/\xb1\xdca\xc2>\xe4\xb2\xbbX\xf0D\x9b\xc8Xe\x01\xe6\x18\xf3<@\x13N-e\xeb\xa4\xad\x86Z\xfc\xc5\x88[\xbf,\x8dd\xc3\\\xccT\xd9\x8a\xfc \x04G\x81\xb0\x03\xc7\x8c\x04$TY$#\xc8\x00\x83\xb5a\xdc\x10f\xab\xc2\x88\x02g=\xd8X\x0c\x18{\x00g\x03\xb44\xbc\x02\x17J\xef\xf7\xd1\xf5\xe2\xce\xdb\x9c\xc61\xdd\x9d\x16p\x1cp\x939 \xa1i\x1a\xec\xfc\xcaL.\xf6lE\x94\xca\x00\xfd[F\xe3Mu\x0b\xe7]~\x8b\x91\x93\xb6\xb8\xd1(\x06.\xba\xe0\xe2U4\xd8\xdf\xba\x01s?\x11p\x9b]\x82\xe9\x9e\"\xd8 C\xdfW\x1c\xed^\xb8\x04\xed\xcd?\xc0\xcf\xc0\x1co2\x9dp\x8b\xaf\xf4w\xa0\xf3\x8f\xf4\xa72\xec\x99\xb6\xf8\x14c@J\x18\xef6\x1f\xd8\xdf\xe8\x83\x9d\xdd,/p\x8f~\xbf\\\x82\xf5\xb59\xed-s \xda\xbb\xe6\x12\x90\xac\x8bJ$1{\x16\xc1\xbe\xc7aw\x85\xado\xaak\xe4q\xbd&I\x13T\xd7\xd8%\xe8\xd4\x94\x04C\x0c\x1e%\xe1q\xf2\xddt\xc9]\x02\xaaC@w\nX\xb5\x82f\x0e@\xaa\x16+\x84\x16\xea\x05\x10\x97\xe2%\xe8\xcf\x1bm\xc00\xbd\x043\xebK\xb0\xbd,o@\xc7w\n\xfe\xca\xbc\x04\xa3\xfa\xb4X%\xb3\n\xc5*Q\xe3\x85\xfa\xe2#\xc3\xb5\xfa\xe23\x9b\xdb\xd6y\x13\xa3N\xb0R\xd1vJzl5\xddKQ\x8fw\x01\xbf\xc06\xee5\xfc\x02\xeb5_\xc6/\xba\x1d\xedJ\xbe\x04k\x0bC}1_\x82\xf9z\xbe\x84\x1d\xa8\x13\xd3\x85} h\xb1\x82\xbf\xbc/\x01=#\xb0\x9a\x15\xd8\\\xe7\x97\x80\xd5\x03\x05\xa0\xaf\xf6#\xf1\xa5Q\x9f\x0b\xfe\x12\xac\xa8\x08\xd6\x94\x04\xab+\xff\x12\xcc\xb6\xda6XeP\x82\x1d[V`\xbb\xd00nA\x00 v7\xd5+\xc0\x17\x07\x90\xf0\x8d-\x03\xaet\x80\x05\xc6\xe6\x02\xf6Z\x16\xdb\xacy\xdb%\xb1Z\x0ekI\xd0G\x16Xg\xc8\xf7b\x10\xeb\xcc\xf8\x1e\xbd|\xe1\x8cxD!\x02$\xa6z\xb9\x02l9\x02 \xbd\x8a\x12H\xb0\xbe\xd9\x8fcz4\xc3[2\xbb-\xa3[LO\x82\xe5x\xa0\xc7\x98\xc0\xa6\x94\x81\x84\x1e\xa3\x82\x9e#\x03\xfb\xe2\x06\x12z\x8e\x11\x06\x8c\x13\xfa\xdc\x1f\x93\xd0C\xd0\xd4\x01\xe5\x02\xec\x06[\x01S\xc1\xb8\xf7\xca$\xd8\xdd.\x93`\xab-+\xb0\x11!M@\x0b\x94&\x0c`\xcaali\xad_+\x18\xc8\x9a\xd6:\xb7\x82A=\x8f\xac\x87%\xf4\xdb,#\x17U\x90`ePJ\xb0)\xb0 \xa1'\xbf\xf6\xe5T\xfb\x9b\xc1\x12z\x0e\x13\x06\x0c\x15\x9c\xacw\xb2^\x0b\x03\x98r\x18[:Y\xff\x05e=\xa2\xd4\x83\x15\xbeb\x9f\xd9K{\xab\xb2\x0f\x12z\xb2l_fu\xe2\x1e\x01N\xdc;qo\x00'\xee\xbf\x98\xb8\x1f\xb1\x00\x85\x84^e($X\x16\xa3\x90\xd0o\x9f\xf4\xd8#\xbd\xf7G\xff\xbda[\xaaB\xc2 \xd6\xc4\xe4@tA\xff\xe2\x15\x12\xfa\x96\xb0\x900\xb0\x90\x85\x04\xbb\x0c\x87.\x18\xbd\xa8\x85\x84\x91K[H\xb8\xfe\x02\x17\x12\xfa\x89) #\x17\xbb\x900j\xc9\x0b }\xe78z\xf9\x0b \x16E0$\xd8\x8f\x7f\xac\x82\x18\x12F,\x8b!\x01Y\x1c\x03\x8fOrI\x8f\x12\x19\x12\x90\x852$Hy\x8e\xcd\xf2\x93\x80\xcf\xf5+\x00Y:CB\x0f]\xd8G\x0bZ\x14\xd3\x90\xd0K\xf5\x99.@nC\x8fn\xfa*\x17\xec\xb5I4B\xe4\xf5\xcam\xc0]\xb8D\xa3\x1bZ|CB\x9fK\x99m\xb0\x93v\x16\xe58P\xf8\xa2\xb9\xa9(\x87\x84\xc1\xa59$\xe0\xd2\xe8-X\x1c'i04\xb6/\xe7\xa1A\xa6N/4U\xfb\x90\x80\x90p\x18\x89v\xad\xb7\xab\x0c\x15A$\xa0\x17V[\x1dD\x02\x12\xd7\xa0J!\x12\x8c\x19\xfe\xa8\xa1\x18\x93\xc5QX0\x87$\\\x9a8\"I\x1c\x95\xc8m\xaa/\"\xc1\"\xdd\x1bWkD\xc2x\x15G\n|\xe3\xd6\x1d)\xb0\xee\xa2\xfaH\x81{w5H$\x0c\xafD\"A[\x8fD\xc2\xc82 e\xc2!\xb7\x1d\xd6TC\xa2\xb31\xc9\xb0fXn^!&a2\xbdp\xe6V\xcd\x8c\xd2b\xb34\xb1\xfa\x9bU\xc6\x9a'\xf9g\x8e\xcb:\xc0q\x19\x92\xcbLuU$ W\x08c\xc1\x0e\xab\xb4\xd2\xc0\xa1\xe0\x01\xdb\xaa+j$\xb5J,]\xb5W$\xac\xc9\"g\xa6m\nj7\xa7~K\x86\xf4*\x9d*\xc39\xc6\x051\xc6\ns\x1a*M\x92\xa2\xffB\xeb\xf2\x7f\xa6\x11\xcc(\xacI\xc2\xf5}\x1a\xc1)Y\xd0w\xf4SF\x93t\"\x7fW \x13\xf5:\x04\x1a\x8e\x96\x93\x8c\xc2*JR\xa0\xc5e\xab\xa0+\xe6 \xce\x82\x03 `~\x95^)J\xe4Q\x94\xcf_\xfc#\x7f\xa6X\x1e3\xb3 M*\x7f\x1c0\xd5 \xaaN\"\xc1\xceS\x81L\xb5\x9d/I\xc2\xb7\xe4\x1d`i\x92\x07\xaf\x18?\x19KQ\xe6C\x94.i|\xc9\x92\xed55KG9\x94j3\xc8\xd5\xa4\xab\x19\xf5}n\xbf\x85\xb0\xe0L^\xee\x91\xbc\x92N\xc2M\xadNo\x1c\xdf;\x1d\x7f\xf6\xa2X\xe2\xf0Y\xb8\x10\xf2\x88&i\x81\x0d\x96$\x81\x8c\xf3O\x9d2\x9d\xe4(Z\xbc\x8fV\xd5\xb8\xff\xd4\xc9\xc1\x98\xae\xc5\x99\x1c\x9e\x91\xb8\\\xa4\x9f\xe0\xf0\x7f\xea\x1a5\xc8\"8\xf3'8\xeal\xf1\xaf\xc6\x1fU\xdc\xd3\x12?\x89\xad\xfciK\x9e\xc4\x95}\xca\xc1\x95}\xd2 \xbck.\xfb4g\x01\xffa\x97\xb5\x9f\x8a.\xae\xad\x00\xd4v\xd7\xedS\xf6\x08}\x17]Tv\x03\xd7\x9d\xb5V:\x97A\xae\x90I\xae\x1bb\x9afq(\x85w]\x8eMJ\xed-\x84\xfc\x825-\\1\x03.\x9c\xf5\x1ay\x02o\xc3`\x03QH\xe5]\xb8yBS\x88bh\x0e\x17\x8a\x0b\xe93\xcaU\xd7d\\j),\x99\x0e\"\xca\xf1\xa9\xe8\xd8\x12\xd3\xf9d\x04)\xc3lEc\xe6\x15\x7f\x13\x91Z\x8f\x84|>BQ OCN\xf8,,u~Ki\x9d\x08l\x01M\x92\x8a\x84\x1cW\x08Y\xc2I}N-\xe9\xd9D\xbfc\xe2*\xb6A\x8d\xbc\x01[1,u\xc5\xb7\x85\xe1\xa82\x9e\xa4\xf9Q\xe7`\xfe\xb5\xfc\xb5\x81\x8d\xf3f\x9b\xd8s\x08\xe8<\x05\xbaZ\xa7\x1b`)\\\xb2 (\x94\"\xc7\\l\x10\xd9 \xa7\xf3l\x03\x94xK \xeb\xf5\x17\xa4b\xdd\x04\xac\xda\xebhYk\xc1)*84\x824\xce\xa8\xb8\xd5\xcdB\x9fy\xfc\xec$\xef\x86\x97\x14\x14\x1f\xe6\x8cTG\xc7B/\xc8\xfc\x96\xddF\xf2xK~\xdd\xb5\xbdbB\xe5\xd5\x8c]n\xb7Ts\x82\x96p\xf9p\x92\xb4V\xab5\x85\x88o\x02n\x8cH\xe3Dl\xafj?\xf2-7\xc9w\x13[\x84Q\xbb\xf2C\xb1\x1b\x9b]H\xca\x0c]\xd8Y\x14\x05\xb4\xe6\x0d\xe8X\xc0\x98^\xd0\xb8\xd1T\xb7x\xf9\xd7\xed\x85c\xb5#DL\xbbwB\x03\x0f\xef\x83J{ZT\xc3\x18w\xa2\xf6u\x0fe%\xa5}\x16\xce#\xd9\xb0\xab\xe4\xa1\x8cB\x15\xc5\x0ee\x18\xaaY\x9e\xa9Q\xee\xf0u-\xcetc\x0b\x1d\x8aY\x8cz\xce\xd7\x97z2z\xf7Lf\xa51\xe0\x83\xb0\x0c\xf5%\x9c\x10\x08P\xa7qS\xa9&\xfd\xd9\xa0\x00\xb3\x0b\xcat\xea\xb7-\xc5T\x15[R 4\x97`\xba\xa1\x95\xf8\xb5%\x95,J)i#o\xa8X\x9a\xd9\xb9\x01#\x96J\xb2*\x914Ni\xa4qK\"]s)\xa4\xd1J \x8dV\xfa\xc8T\xf2h\x04\xb1\xaa/md\xdc\xb6\xd8RF\xc6\x91\x02j\xb4\x80/Yd\x92\x8f\x05\xa0K\x14\x15\xc5\x87\x0c\xf8lJ\x13\xa1\xa8\x02h\xca\x80E \"\x9do\xa8\x0d\xe8\xdcx\x04\xbb\xd4>F.\x10\xa0K\x0b\xe5\xac\x81\xc1\x87\xbd\x8b\x80-%\xf4\x95\x91\x13W\"H\x90\x17\x81\xae_i \xecM(,iQdE\xef8\x9b=\x87\xbe\xafd\xb5\xa0\xe8\xbbH\x16XG\xbag\x84\xe55D\xe9\x9eFQ\x1e\xd3\xe81%{z\x94\xeaA\xd4\xb0\xc10\xa1\x91\x01\x91\xcc\x87e<\xc4\xb0% \xfb\x05\x8b\xbe\x01_b\xc7\xa2w\xb0\x1c\x01\xd8\x96\xd2\xb1\x1c\x0b\xf4\x18\x0f\xd8\xdf\xab\xb5\xd8\xc0u0\xc6\xc6\xb7\x01\xbbq+\x18\xf3\xde\xac\xcd}Y\xacv\xa8\x00\xb3E\x9b`\xdc\xb0M\xe8\xc1<\xfd\xd8\x07\xadO*\xe8\xc9Bh\x1dSA\xaf\x9eF\xd2;\x0ddH&\x1e\xb5T\x0d\xca\xb0\x91\x80/Mc\xc9W\xb6\x1ce[\x93\xc0r8\xd0cH\xe0d\xa4\n\x9c\x8c\xc4\x82\x93\x91fdH&F\x94x\xc9y\x1a\x85\xceBJZ\x94t\xb1d-[\xa6rb\xd2\x89\xc9\x02\x9c\x98\xb4g\xa1\xef@LbJ\xa3Xq\xb2\x85\xa0\xb4*\x85b\xc7\xbf\x16\xbck\xcd\xb7\xf6#mQ\x86O\xcfJ}u\xb7\xf63\xe6c\x9d\xda\xdc\xcar.m \xce\xa5\xed\\\xdaC\x90\xdf(\x97v\x93\x92_\xa4\xd7\x8e+p}znP\xb9\x87\xa7>`I.\xc8\x14\x9e\xfa\xa4\xee\xaaO\xa4\x1a\xcb\x0b\x92\xe5_\xb7\x1d\xf6\xc5\xdfo\xb2\xc7\xfe\x86\xc8\x9d\xce\xd8\x81\x04\xa3\xc1d\xc6\x0e\x86h\x82\x04DG\x80\xec\x0c\xcc\xf1\x05 \x08\x89(A\x1fk\x90\x80F\x86\x8c;H\xd0G\x1f$\xe85f\x130\x11\x02 \xfax\x84\x84\xdd\xf4l\x8ePH@R\x1cw\x8c\x970B\xccBB\xdf\xc8\x85\x84\xaf\xf2) mt\xa3\xf8H\xe7<\xcf?1>\x8a\x80r\xde\x14\x9fbNJ\x12\xc6\x8a}H\xb0\x8a\x80H\x18\x1e\x07)\xf0\x8c\x12\x0d)\x90\x0d\x8d\x89\x14xF\x88\x8cH\x18)>\"\xc1\x98v8\xb2bB\xa5\x1a\"\xb7\xb7\xd9\x95 \x01\x89\xcef\xb3X:\x17\x10\x930\xa5\x14Z\xbb\x1f\xb4\xd8,S \xfb\xb8\"$\x98\"1\x12\x90+\x84\xd1\xa1Cc3\x12L\x11\x1a \x88\xbd\x81\xd9\x17\xd7j\x19\xbaw\xac\x0cC\xf9*\x8d\x0f\xa3\xd20\xc7\x84$\xf45.\xdc;V\x86+$\xbb\x8c\x1bI\x18\x1e=\x92\xe0\xde\xb1\xaa\x813\n\x94\xd0\xdf(0\xc6\xa9\xf2\xcf\x1c\x97u\x80\xe32$\x97\x99ba\x12\x90+daz\xf6\x8c\x8e5p(x\xa0g\xe8\xac\x13\x97{\xb9\xca\xbd\\\xe5^\xae*\xc1\xbd\\U\x0b\xcd\x9b_\xa8\xaa\x04\x8c{\x8c\xaa\x00\x17\x9c\xbfA\xc1\xf9\xef\xe31\xaa/\x10\xab/ \xfb\xe5\xba\xdeE\xd4~\xbb\x97\xb6\x1bb\xc4.\xdcC_\x18j)\x0c?\xf7\xd0\xd7\xb8\xc45?Q\xe5\x1e\xfa\x1a\x83\x8au\x8b\xb9j\xef\x1e\xfar\x0f}\xdd\xdc\x87\xbeZ\xc9j\xa2l\x92\xe9b\xb9H\xf0(\xf3\xd5d\xa5%\xcd\xe5r\xf1\xf9\xadb\xec74YM\xccbT\x97\x88\xc0\xe8\xae\x98\x831\xc9K\x7f\xe6*\x00\xe3\x9f\xfb\x8a\xae\x98\xe7\xe7q\xb17\xaa\x8c\xacZ\x99\x06.\x9b\x83\xda\xce\xa9\xc3\x97\xbb\xb1f\xb8\xe1\x8d~?\xea\x1b\xbf\xef]\xe4'\x89\xe5=\x16\xff\xd1\x91\x0c$%\xa7>\xad\xac\xfbY/\xc96\x88g\xbd\xf22x\xd8e\xa9\x05HE\x17\xca<&\x89w\xcc;\xde*^w\xb7\xbc\x05X\x06\x85\x8c\x81\x1f\xeb\x90\xcf\x97\xb8\xecd\xca-2\xd2\x16u\xd9iO\xda3\xb9\x08\xce%\xf2\x9d\x16g\x1a\xefz\xaf\x89\xa8\x858\xaa \x91G\x91viD|\xd5w\xbes\x9a\x1b\xe8\xa3\xec\xdd]\x19\xaf\xc3\x8e\xb4\xae\\\xa2v2P+\x17F-[\xf2%\x16\x07F}\xc2R\x911T\xefQ\x916$\xde\xc6\xaa\x10\xe3\xee\x98\xd7\xf1*\xd3\x86Z\x98-n\x9a7\x86\xadI\x1bj\x8f\x1ds\xdf<\xc7-\xb5q\xc7\x87\xb1\x81\x9b\x07I\x18\xa7bo\xb2\x8au\xf5\x04r\xf8.W\x9f\xcfO\xca\x1f\xb7\xfe\xdf\xdf\xfa\xb7\xb4\xc3v:S\xa1hnu\xb4\x12~Da,cS \xa4\x99\xedr $\xb8\\\x82\x1b\x94K\xe0.\xfa\x8f\x15\xc1\xff\x8e/\xfa\xe7\xb1\x13\xfdU\x7f!\x04\x93f\xf0\xc4|\xdd_\xb6\xbaUL\xe1&\xc7Pn\x88\x04R\xc4s$\x18\xed\x1a3~0Fx$ \xba\x02dw`\x8e\xf9H@\xc8G \xee\xda\x7f7\xec\xa6gs\xd4H\x02\x92\xe2\x83\"H\x12n\xdeM8\xd4\x1d{|8#o`\xbc\xbe\x85\xf2}\x15\x9fbN\x13\x12\xc6\x8a>I\xb0\x8aAI\x183\x12U`\xbc\xd6xT\xd1\xe9HQ) \xa3\xc5\xa6$\xb8\x1b\xf6%\xd8l\x0e\xcb\x037b\x12\xdf\xe85'S\x14L\x02r\x850\xeaj\x9c\xb8\x98\x04StL\x02b\x87`v\x87)^&\x01\xd1\x19 ;\x04s\x04M\x02run\xd8}{S|M\x02jW\xc8\xc1\x15rp\x85\x1cJp\x85\x1c\xba\xb8\xa7\x12:\xe8\xda\x0ey,r[\xec\xb8\xfc\x0c\x97\x9fq\xa3\xf23\\\xad\x87\x1cL]\xdb&N\xb8Z\x0f\xc3\xbbp\xb5\x1e0\xd4r\xb5\x1e$\xec\x98\xb8\xe6*\x05\xae\xd6\xc3\x18Tt\xb5\x1e\\\xad\x87\xaf\xbc\xd6\x83\x18\x80\xa9\xd6\xc3[\xfeQ\x99\xae(\x9a\xe8j=\x88\xcfo\x15c\xbf\xa1y\x8ab\x16\xa3zM\x04\xc6]^\xd3t\xb5\x1e\xdap=\xb5\x1e\xf2\xd3\xb6`\xeb!\x0f\xe7\xdc\xd0\x0b\xa3\x86r\x0e\xdft\x8d\x06\x19s\x16+\xabx\x8dFJ;\xdc\xbb\xfc\x02\x8f\xfa-\x1a\x89j%\x7fWc+b\xd5\x02\x9b2\xcdM\"S>Ic\x9d\xde\x16\xc5~\xe7&\xe1\x8a}g\x12M(\xe4!\xf2(W\x8d\"\x9e`Bd\x08\x11\x99G\x0by\xa0\x81\xfa\xd3\x99\xc27^\x80\xc9\xbd[\xc0{\x81\xee\xd9\x06\x02\x96\x08\x8b\xed\x9cn\x92\xdc\xfa\xa3! \xd3\x04\xa4O\x8d\xaf\xd5\x92\x98\x123\xebq\x90y\x1c\xad\xf4c\xc4P\x05\xd0\x94\xe1@\x82`\x1a\xcdM_\xe9\xdd]mP\xba\xbf\xda\x80`\x97\xda\xc7\xc8\x05\x82rVB\xcc\x8b\xe5\x11&\x1d?\x1e\xf25[eI*V&g\x0d\x0c\xbe4\x8d\xd9,K\xa9!\xe3\x15H\xb8\xf9\x16\xc9)f\x05$\x15\xc9\x83\xa9<=\x17q\x1e\xc9\xb7\xe2\xbf8y\x11\xe8\xda\x0b\x80#o\xf5\x91a##I\x8b\"+z\xc7\xd9\xec9\xe1F2\x7fd\xb9\xa0Z\xdfn\x1d,\xb0\x16\xc9\x88\x05\xe9!\xa6\xeb\x98&\xe2\xde\xeb9\xdd\xe4\x87\xfc5a\xfa\xeb\x16X^\xab\xfa)\x84k\xb5\xe8\xb9t\xcd\x85+BX\xca\x88t\x87\x9b\xb2\xf5Q\x1eO\x0e\x88'\x94\xd2\xbb\x9a~R4\x8ai\x12e\xb1\xa7[h\x0c\x13\x1a\x19\x10\xc9|X\xc6C\x0c[\x02\xb2_\xb0\xe8\x9b\x83\xb7\xce\xcc\x1fY\xf5\x0e\x96#\xe0\x90\x85Lgx4\xc1r,\xd0c< \xb7.\xfec\xab\x0d\\\x07c\x90\x7f\x1b\xb0\x1b\xb7\x82\x0f!+\x932\xbcuv\x07Vt\x15\xc5\x1bq\xea\xe2\x7f&\x0bl\xdf\"\x9e\x193\xcf\xa4r%`\xb5C\x05\x98-\xda\x04\xe3\x86mB\x0f\xe6\xe9\xc7>h}RAO\x16B\xeb\x98\nz\xf54\x92\xdei C2\xf1\xf3\xd3\x0f\x05\xff\x16\x02S\xca\x0c\xc1\xc2\xde:\x03/\n\xe7\x0c7\x17\x94a#A\xee\x13\x0cm-\xf9\xca\x96\xa3>e$LY\x8a\x1a\n\xd8\x0f\x07z\x0c \x9c\x8cT\x81\x93\x91Xp2\xd2\x8c\x0c\xc9\xc4o$\xbf\xb6\xc5d!9\x04#K\x9eF\xa1\xb3\x90\x92\xf9\xf6\xc0\x90\xd7\x92\xb5l\x99\xca\x89I'&\x0bpb\xd2\x9e\x85\xbe\x031\xf9^2\xa9^N\xdap\xb2\x85\xa0\xa4\xa1\xbf\x8e\x98\xd6\xc7^\x81\x1d\xffZ\xf0\xae5\xdf\xda\xf3\xec9\x0b\x8dWo+\xe8\xc5B\xe6k\xa7M\xb8\x0b\xef\x7f>~\xf7\xf2\xc5\xf4\xe7\xb3\xb3S\xabv\xef\x8e\x7f{\xf1\xf6\xcd\xf4\xf4\xed\xbb3t\xbb2\xa4\xd7\xa7S\\\xa8\xaf\x0b\x1a\x93|\n/\x04\xa2\x19\xcd\xe3V\x92\xf9,\xd0\x89\x00\xca\x8cz\xd1J\xdc~\xf9%\x9b\xd18\xa4)M\xe0$\\\xc441s|\x0d\x1a\x84T\x8cM\xd3\xe3o\x91OO\xa3\x18?|;\xb1 \xe1l\xc9\x92\x9c\xfc|d\xcb\xe8R\xf8+\xcb\xe11\x9b\x19\x97Wt\x8a|\x1e\xe1\x8d\x97E;x/\xeb \xda\xa0\x02\x1d\xf6syY\x0c\xb8\x9a\x0b\x81u6\x0b\x98\x17l\x80\x88\xc4\x106\x0bp\x02\x0e\xe0\xe4\x14\x12\x1a_0\xcf\xd4\x00?\xcew\xb9\xdc\xfd N\xf1\xb5a\x06A-\xa9\xaa\xf4\x8e\x1a\xf1q\x19\x92\x88\x88\xae$,\xa7\xfb~\x18\xf9\x14h\xea\xe9/=q`\xf3\xea\x9eU\xc8\x82J-\xf0\xff\x8eR\xc8\xb5SW\x1aR\x17,\xd8\x05\x0d\xc1')\xb9\x9b\xa4q\xe6\xa5Y\xe7\xed\x8b\n<\xfc\xfd6S\"\x86\x04s:F\x01\xc6\x92+`\xa73l\xb4\x05\xea\x96 \xd8\xaa\x08\xdcmA\xb0Ck+\x94\xc7\xbc9\x08\xe8\xdb\x83\x80\xbeAhD\xd3\xac\xa6js\x8b\x10\x06\xdc$\x04\xb4\x14)$Ha\xc9e!K\xef\xe4i\x9a2s\xb3,\xa7\x02\x91\xean\x97\x84b\xb7w~\x94\x8f\xe6u\x1ce\xeb\xf7k\xea\x15\xfd-\xf8\x1fD^\x07\x9b3O\xace\x97\x982U\x9c1\xb2 \xee\xdd\x05\x99[X\xe4T\xc9\x14\xab;\xad\xb4\x14A\x10\x99a\x95\xa7\x1d6\xeb\xcc\xe4\xb8D\xa6\xa3\xc0\x87\xbd\xfc$;w\xd5h%\xb8\xdbN7\xe8\xb6\x93\xabF;\xd6\x1d\xa3\xeb\xacF\xdb+\xf9Z_,V\xc8\xa8\xa4\x99}m.\x16+[\xdd*\xe6v\x93\x93\xb0o\x88\x80\xd0\xa7o\x1b\xd1\x03\xa2\x0b0'q\xa3D\x89)\x91\x1b\x89\x04\x99\xccmJ\xe76\xa9\x95\np\xb6\xbd\xa98\xeb\x98\xbd\x8d\x95\xdam\xa8J\x86X\x0e\xbd[\xc8\x94\xe2mH\xf26\xa6y\x1b\x12\xbd\x91\xa9\xde\xf8\xc3\xc6X\xe9\xde\x96 \xdfc\xa5|\x8f\x9d\xf4=Z\xda\xf7\x88\x89\xdf\xba\xd4\xef\xd1\xa4\xa1>\x01\x1c\xb5q\xb0I\xe0\xa81\x03r\xdc\x80O\x05\xc7\x1e\x0b\xc12\x1d\xdc\x88\xac\xcc\x89\xc5&\x84\xa3)\x04\x16T\x02\x8b\xb4p\xbd\xe2\xdf\x06\xeb\xd8\x81Q!\x96\x9f\xa3\x97\x0c\xd0 \xe2(T69\xcc\x12\xb0I\xe2_-q\xc7M\x17\xef\x9b0n\x13\xc9\xc5\x13\x1aId\x8b}i\xb73-\"\xb4\x96\x8bl\x11\x91\xb5\xc2\x8f@GB\x8b\x04\xfa\xd1R\xe8\x87&\xd1\x0fK\xa3\xc7\xcb\x9b\x11S\xe9\x0d\xc9\xf4\x83\xd3\xe9\xcd \xf5(\xd64\xed\xf81\xd3\xea\xdd\xfbB\xee}!\xf7\xbeP\x03\xdc\xfbB\xf9\x0d\x1b\xf4\xfbBy\xfa\xba{_\xc8\xdd\xb8\xe9\xf8\xfd&\xdd\xb8q\xef\x0b\xe5`\xea\x1aw\x15\xa6\x83\xb0_\xaek\xf7\xf2\x0f\xfa\xa5\x9a]?N\xe3^\xfe\xd9!q\xcdo\xd6\xb8\x97\x7f\xc6\xa0\xa2{\xf9\xc7\xbd\xfc\xf3\xb5\xbd\xfcSd\x1c\x97\xd7O\x8b?\xe4\x8d\xba.\x9f\x9e\x16\x9f\x94\xf7O\xcbF\xf9\xa7\x8d[\xa7\xa7\xad\x1fo\xec\xc5\xd3\xd6\xd4\xeb\xf0%Le\xed\xa5P\xa3\xa5\xbb\x8c\x92t\x9a\xc5\xac7\x02s _G\x14 \x86p\xa6\x81@\x12Ld\x92`\x0c\xb7\x1b\xe7+\x01\x11JGa\x1a\x18&\xaf\x9e\xde\xda\x06\x04\xd504\xa3+\xc2\xb4\x99/\xa8y^\xd2Y\xc2\xd4w\\\x01\x87\xa7\xb8\xd4\x90o\xc0\x93p\xde\xe5Xk}\xb5}1\x97\xf3|\xeb\x0d\xb2\x02\x9c\xd3\xd29-\x9d\xd3\xb2\x06\xcei\x19oJ\xcb\x04\xeb\xb7l\x9b2\x05\xb8bA\x12\x9c\xeb\xf2\x06\xb9.\x9d\x0f\xca\xee\x80\xef|P;$\xae\xd9{\xe2|PcP\xd1\xf9\xa0\x9c\x0f\xea\xab\xf1A\xed\x19\x9dP\xfb\x7f\x8a\xd3\xdd\xbfr\xe7\x90\xce\x1b\xb5\xe5\x8c\xd2\xbdF}\xda\xbch\x7f\xe3]R\xa3\x1eZ5\x8e%\x83\x15\xa2w*\x19\x1a\x9b\x1cJ&w\x92\xd6\x994\x92S\xc4\xe0FB\x18i\x08\x17\x12\x02\xcb \xf7\x91\xdayd\xa4\x92\x99F\x06\xb7\x11bnF\x97\x91\x11\x07\xc6]\xd4\xdfY\x84:2\xda\x9e\x18]\xae\x8b;0v\xfd~\x93\x0e\x8c]9.k\x92\xd63\x83+\xbd\xcf\xed\x8c\xda\x0f\x1d\xa3QF\x9e\xc2\xc8\xa7\xd3JH\xd5\x94z\x83\xe1\xf9\xb6\xe6\xe3\x17y\xd1\xb3(\x93\xd6\xa7\x17\x85\xa1\xdc\x02\x1cM\xde\xae4\x06\xced\x11\x9d|Y\n{\xb3\xb3M{x\xaf #\xf0\xee\xe5\xfb\xe2>\xd0:\x8e\xfc\xacQq\xe6.\xb7\xed\x83<\x9dw\xff\x8f$*\xec\x1bk\xf3\xe1\xb7\xc8\xa7\"\xef6\xab\x8b\x9e\x91vnm\x90Sn\x1dv\xfa\xbc\xf5\xbc;\xcbX\xe0O\x9b\x14\xaa\x83\x81\xf7\xbc\x80\x1fN\xa7\xea:~\xa6\xf6\xd1j\xc5\xfaU\x18_h5\x9f\xb2Y\xef\xa1&4\xbe\xa0q\xff\xa9*\x17\xc8\xd0\xb6\xb5\x87\xea\xa0_ZU-[\xc38WQ\xc8\xce{Z\x8d\x00\xf4\x8a\xac\xd6\\\xa9\x8a\xf2\x9e$\x8d\xe2\xbb\x9cb\x1d\xdf\x8a{\x00^\x14\xa89\x17\x8cS\x14_\x1c\xadU?!\xc6\x0b\xf51?R|2\x0b\"\xef|\xacN\x0e\x0f\x14\xdf\x90\xf5h\x13\xe9\xea\"\xa4\xe9e\x14+\xa6aD_\xa2^\x10F\xee\xb6\x158\x07oI\xc2\x90vid0w\x10\xb0$\xa5\xe1\x94\xf8\xfe`\xc6\xdb;|r49|\xf8x\xf2\xe0\xe1\xe4\xf0\xe9\xd1\xc3\x87\x0f\x1e\xb6\xef5\x80i;6D\xf8\x19\x0d}\x1a\xafX\x98\x16\x8d\x06\x8e\xf0`r\xf8`\xd2\xb5D\"\x9a\x84\x18\xd1*\x8a\xa9\xb0\xfd\x0b\xa5\x19\x85\xc5\xd0\xba\xef\x9e\x8cp\x1aH\xaf\xa6,\xf4\xe9\xd5X,\xba\x17\x85]\xcb\xc2!^{\x82\x13h\xa29\xbfY\xf6\x96z\xeb\xa7\xfb\xfb\x07\x13\xf1\xff\x04W<\xaa\xba\xdf{\xa0S\xe1\xaf\x08\x0bd|U\x86M\xc3\x86J\xdfO6\xa1\xc7\xc2\x85l\xde\xe5\xb6x/?\xa8n\xdfhL\x93\x1a\xafU\xc7\x88\xc6h^\xd3\x14\x984v\xc4@X\x02^\x16\xc7\xc2\xcb\x0e\xc9&\xe4=\x89\xfbf\xf2f\x0f\xff\xa6\xe0\x89\xdd\xdb9\xb5\x99\xee\xc2\xdei\x90\xba\x0e\x12W\xdb\xe7\xa6_\xd6\xf7B\x9f\x8b\xf3J\x1c\x92@\x1e\x83\xf8\x82\ni\x9f\xec\x07$\xa5\xba\xc2\xfc\xaf\xa94S\xe5wRG\xd8\xac\xea.W\xe3\xac{\\0\xdeR\x08\xb4\xd3\x15M\x89j5z9\xac\x96\x94t\xfa\xc0\xc0\x84\x16\x8c\xa8A\xea(\x16j\x8a\xfc\xdb\x8a\x15/JVQ\xb2\xccf\x9d\x1a\x11\xc4\x84\xd8b\xa9\xb9\x9a*\xfb\x93\x0ers\x7f\x87\x8aOR\xa6\xab\xa3m7\xa7\xbd\xa3\x83\xc3Gw\x0f\x8f\xee\xde;8;x\xf0\xf4\xc1\xbd\xa7\x07O&G\x8f\x1f\xfd\xe5\xe0\xf0\xe9\xc1\x81Jf\x87\xd9j\x9a^\x19\xe55v\xa2*\x1b) I:\x95\xbcg^\xc5Q\xd2\xcd\x96$Y\xea~G\x92\x17\xea\xb3{\xf9\xf2\xc1\xab{\xf7\x0f\xee\x1f\xdc\xbb\xff\xfc\xc1\xd1\xfd\x07\x07\x87\x0f\x8f\x9e<{\xf0\xf0\xe5\xc1\x8b\x17\xcf\xef=~u\xfc\xe2\xe1\x83\xc3W\x07\xba+\xddk\x12\x9b*\x93\xa0\x88\x00hBp\xd0$\x005>\xc3\xacu\x01\xc65/\xc0\xbc\x12`\xb3\x1a0\xe2\x8a\x08\xba\x8c\xc9\xff\xf7\x1e\xe86\x80<5O\xf5\x04A\x11b,\x02\xf8$%7i<\xe5\xe93\xb9I\xa3\x12\xa9\x147sh\x1e\xb7/\xc2$\xbbQ\x83\"\xeb\xf5M\x1a\x8e\xd8{y\xb4\xf5&\x8d\x8b^0\x9f\x86\x1e\xbdIc\xe2:%Jh<\xd2A\xaea\xdd\xce\xa8\xb7\xbcw\x044\xf4\"\x9f\xfa\x90\xf7`\x9e\x92\xb4\xd6\x0e}\xba>\x7fp\xdf\xcb\xc8\x1f\x8b\xf3\xcf\x94<\xfc\xbc^\x9c\x7f\xba\xf70\x0d\xff\xb8\xf4?_\xdc's\xef\x9e\x7f\xa4r\x05i\xdd\x06\x80\xd5\xba8\x8dkp;\x01\x96x\x80r?\x81\xc9\x05\x05\xbd\xfa\xeb\xeaNo\xc0\x19)h\xa6\xdeM\xda\x08zC\xcd8Y@M\x18p\xc6\x19\xca\x08\x01\xd3\xf2\x15`6\xc8P\x94\x86\x11\xa8\xad\xd8*\xee$Z\x81;\x89\xe6`7Qw\x12u'\xd16\x98W\x02lV\x03F\\\x11w\x12u'Q\xc4\xa8\xdcI\xd4nP\xee$\x8a\x1a\x97;\x89\xba\x93\xa8I\xdb\xdd\xa8\x93\xa8RQJ\xf4\x83R\x94\x95c+v\xc9\xf5\xf7\\\xd3\xd9;;\xd98\x9b\xd8\xd9\xc4J@\xaf\x06\x8c\xb8\"\xeb\x98J\x9e7\xca~}\xf9~c\xc9~\xe4\x9abW\xb4\xb4\xcf\xcc\xaaK\x02\x9a\xba\x15fCN\x8f\x044\xde\xfa\xe1]y@\x97`rGH\xd8E\xcfq\x94\x99\x9f9\xd8E\xc7)[\xd1$%+\x83f\xeb\xd9y/g\x89\x04\xd1\x1fjL(\xa9Q\x8eI\xe5\x8a\x92`V\x14\x12\x90\xbb\n,v\x16\xa0\x05\x96\xd5b\xc0\x88B\xab\x02\x842\x91`A(\xb0$\x16\xe0\xd5\x8b\x04\x0bv)\x00\xadj$`\xd7\x0f\xec\xd7\x10F_\xc7\xb2\x1e\xbai\xc4\x16#-Gh\xac\x93\x0e\xf0(;{\xfe\xe8\xfe\xdf\x82\xf3\xf0\xd3\x7f\xfe\xfd\xe5\xe5\xe2\xd1\xef\xe1\xc37\x8f\xdf\xae\x1e\xbd\xca\xfeq\xf0\xf2\xed\xfd\xd9\x1f\x17\xd9\x1f\x0f\xe3\xcb\x9f\x0fWg\x1f\xfe\x1a\xbf\xcb\xde\xbc\xf9\xc7\xc5\xf1\xf1\xa7\xb3'\xbf\xff\xf1\xdb\xe2\xf4\xe0\xdd\xf1\xfe\xd9\x8b\xf5\xc3l\xff\xc9\xd1\xf1\xa7\xf8\x1f\xf3\xff\xf8\xeb\xfb\xf5\xb3\xbf\xfd\xf4S\xd9q\xbf\\\xbb\xbd\"\xd9\xeeO\xa9\x0et\xb7?_\xd3\x14\x88\x14\x1a@\xf8?=\x1a\xa7\x84\x85\xb9&\xc9?\x1f;\xf5\xae\xfb\x16M\xc7}\x19y\xb1\xa61\x16h\x93\xe1\x99\x18\xfc\xd67\x86\xab6[\x9b\xe8\xea\xee\x96\x1b\xbeW\x86`\x8d\x96E\xfd\xfa\xed\xc1\xb9|A\xc4Y\x06\xeb\xcapQ\x9a\x02\\\x94\xc6,\xe2\xc7TA\x08#\x02E\x04@\x13\x02\xf0&\x03j\xad\x0b0\xaey\x01\xe6\x95\x00\x9b\xd5\x80\x11W\xc4Ei\\\x94\x061*\x17\xa5\xb1\x1b\x94\x8b\xd2\xa0\xc6\xe5\xa24.Jc\xd2v7*J\xe3\xf2\x05K0N\x16P\x13\x06\x9cq\x862B\xc0\xb4|\x05\x98\x0d2\x14\xa5a\x04j\xbb|Aw\x12\xcd\xc1\x9dDw\xbf\xdd\xea\xe0N\xa2\n@\xaf\x06\x8c\xb8\"\xee$\xeaN\xa2\x88Q\xb9\x93\xa8\xdd\xa0\xdcI\x145.w\x12u'Q\x93\xb6\xbbQ'Q\x97/\xd8\xd5~\xd0\xc9\xc6\xd9\xc4\xce&V\x02z5`\xc4\x15q\xf9\x82mp\xf9\x82_\xa2c\x97/\xd8\x00\xb3\xa2\x90\x80\xdcU`\xb1\xb3\x00-\xb0\xac\x16\x03F\x14Z\x15 \x94\x89\x04\x0bB\x81%\xb1\x00\xaf^$X\xb0K\x01hU#\x01\xbb~`\xbf\x860\xfa:~\xfb\xf9\x82\xf7u\xd9i'\xa1\xd08\xedl\xb4\xbd\xfb\x07\xf7\xd5\x8d\xf2\xc7\xcb\xf2\xb46\xd9\x14\xfc\x88&\xe1^\x0dE\xaf<\xc5\xfd\xca\xf5AS\xeb\xd2\x80ec\xa8^\x15\x1a;O\xb1W\x02`c`@\xb6\xeb\x19\xee8\x1dP\xa5\xd35L]-\x84\xaa\xd9\xf5V~7XZ\x88\xed\xd9\xdfA\xd0r\x0f\\\x90\x80\x8f\xf5\xf0\xe1\xd5\x86\xae\xd6t\xb5^?9\xbaz\xb2\xdc|\xfe\xfc\xe42^\xcc\x9f\xdc\x8f\x1f\xfe\xf1d\xf9`~ty?<\n:q\xae\xb3\x99\xfa\x8dK\xd4l0B\xa6\x1c\xae\x17\x85\xc9:\x9b\x1d~\xf6\xfe\xf03\xba\xfetp\x91\x1d}^\x9c/\xce\xef?\xa1sr\x10~\xba\xfc\x1c\xfa$\xfc\xf4`u\xdf{\xb4&\xf7\xb2\xfbd\xfd\xf9\xfe\xe2(~\xb2H\xd6\x9f\x16\x0f\x17O\xbc\xe4\xde\xf9\x13/\xeb~\xed\xf1\"JY\xb8\x98\xae\xa3\xcb\x01\xaf\xeb\xd6M\xa6\xc3\x03\x95eT:\x8d\xd61\x8bb\x96\x8eB\xc2V\x7f\xfdD\xd7^Kv\xa13\xad[\xc2\xc1\xa5[\x0fM\xb7\xde\x92\xb6\xb5\xb4k'm\x058i[\x03\xc4l\x9c\xb4\xdd\x9d\xb4\x1d\xdf@}V\xdc\xb7\xc8m\xd30J\xab\xa7\xf0*\x1c=\xc5|z\xc5\x85;I\x96\x1d\xa2\xdd\xa7\xeb\x98z$m \xbd\x96\xc4?\xbb\x82\xd9F\x9c\x93\xf2\xdf\xb7\xa4{L\xc2\x84xi\xad\xce|\xcb\x02OcF/(\x10H\xabO\xf3W+Y\x9a\x08\xdc\xc5\x0bF;\xd4\n\xd5\x0c\xb6\x86xv\xd5\xfe\xd9\xe6\xa1\x1bh\xaa\x83g\xcf\x9f\xbd<:x\xf9\xf8\xc5\xfd\x87\x8f\x1e<~\xf6\xe4\xe1\xf1\xcb\x07\x8f\x1f\xdf{\xf6\xe8\xc9\xd1\xe3\x07\x8f\x8f\x9e<<~~\xf0\xf0\xe5\x83\xc3\xfb\xf7\x1e\xdc\x7fr\xf0\xea\xd9\x8b\xe7\xc7/\x8f\x1e\x1c?:zv\xef\xf9\xf3G\x0f\x9f\xdd*F`\xabM\xaed\x89\xf7T\xbe\x81s\xc1\xb8\xf4jMk$\xd5\xd1}j\xd6\xee+\xbdPzq\xf0\xf8\xc1\xe1\xbd\xc7/\x9e\x1c\xde{\xf2\xe4\xde\x93\xc3'GO\x1e\xbczu\xff\xd9\xc1\xf1\x93\xc3\x83G\xaf\x0e_\x1d=\x7f\xf1\xf2\xe0\xc5\xbdG\xc7\x8f\x1f=\x7fy\xf0\xf0\xfe\xfd\x97G\x87\x8f\x9e?{u\xef\xd9\xfd'\x0f\x1fn\xfd\x98v87\xb5JK\xaf\xb2VIG\xb5z0hO0\xf9\x8e\x0dbmN\xb5\xa1\xa2A\xd1\x9a\x051:\xc5\xb5\xe2\x96\xac\xa2,4f\x95\xdd,\xbf\xbaO\xc3h\xa5\xff\x045\xf7\x02J\xf6KRr\xde\xf54N\x05&rI\xe8\xd3\xf7\xde\x83N\xe5\xba\xa2\xab~\xef*\x19\x9a}:{\xf3\xe0\xc1\xdf\xb3\xc3{\x8f?\xffm\xf6\xca\xfb\xfb\xd5\xfd\xbf<\x7f\xb59>Y\xd0\x07\x7f\xff\xedt\xfe\xcbIv\xf1\xf9\xd9?\x1e>y\xb3\xf9\xf4s\xf2\xe9\xc5\xe3\xf7\x87'\x97\xec\xe5\xfa/\xec\xc3\xec\xe1\xef\xef\xfd4X/\xfe\xf3'E\xd7\x06\x9b\x10AH@\x11\x13\nTZ~A\xd1\x13\xea4M\xcb\x03\xe0\xfei6\xfb\x85n\xdeSo}\xf4\xe0\xe1\xb9*\x01\x14L\xaf\xdfI\xb0\x1f\xc9\xf1\xc5\xe7\x83\xfb\xbf/\xd3_\xfe\xba||\xfc\xfc\xf9\xef\x9f\x83\x93\xc7\xe4,J^o\x0e\xd8\xf9\xab\xff\xf8\xe5\xe4\xf7\x9f\xffv\xef\x8f_\xde\xc4Q\xf2\xb3JXy\xf2\xbda\xa9FLk\x82e;u\xd8'\xa1\x9f2u\xa0\x1fF\xe8I\xe6\x00\x8d\xaa\xe2\x82H\xab\xe2\x94c]\x90dzIBn\x93\xf6i\xde\x0ce\x1d(\xce\n\xbc\x93,\x19\xa3\x8b\x87\xf7\x1e\xdc\xef\xea\xc1\xf4t\xde \x15\xaf\xdd\xe6\x98M\xfe\xe5^\xb9\xd5\x1fcN\x8a\xf3K~\x9eyY8\xda\xcb\x04\x1b\xf3\xe9\x05q:\xa9\xde`\xa2$\xf6\x96\xf5SI\xe7\x01\xa6\xe33\xf1\xda\xfb\x05\x0d\xd3d\xd4\x83K\xfb\x99myr\xc9\x1fB\x9d\xc8\xbek?+\x16\xaa1\xf8\x96:\xab\x9f\xc0\xe4\x04 \xc9\xbc%\x90\x04\xf6\x9a\xfd\xfc\x94\xd0\xd0\xdf\x83\xcb%\xf3\x96\xe5k\xe2\xad\xa7\xd8\xf9Qc\x1e\x05At\xc9\xcfr4\xf4\xd7\x11\x0b\xd3\xa7\xb0\xf7\xfa\xe5\x99X\xb5\xff\xb7\x0b\xe7\x84\x9fq\xe5\x83\xf2\x0dl\xe2\xf9\xfcU\xe4g\x01\x05?\xf2\xb2\x95\x18\x1e?!F\x97\xc5h'\x10D\xd1\xb9xd\xf7\xeaj\x9a\xffm\xd5\xf9\xa6\xb9\x17\xc5\xf2\x0c%\x9e5\x97\x0e\x8f\xbb\x89\x7f\xbe\xefG^\xb2\x9f\xac\xa9\x07>\x8b\xa9\x97F\x0d\x9a\xd7Nr|\xb4V+\x94\x08=7\xde\nqf\x96\x87:\x89YR\xb6\xf1\xb9\x8a\xca\xff\xa39\xa6\x9f\xf2dA\x93c\xea\xe0\xe1\xfa\xea\xeab\xaf\x9b\x1eV8P\x84[\x93\x85\xf2\xa9\xfbS\xb2\xa0\xdbg5I\xd1\xed\xf7\x84;\xfc\xb1\xfa\xae\x03\xb6bJ'\xf1\x1br\xc5V\xd9*\xef\x1e\xa2\xb9\x94\xcb\xb0\xa6q{\xcc\xa3\x0d(\xbd\x9a\xacX\xb8\xe5\xedU\xe1o\x8c\xb7!\x9b\xa2P\xfavs\xd6\xc9\xfdJ\x8b\x98\x92\x94\xcf%\x06\xfa)#\x01\xa4K\x96H1\xde=\xea\xa3\x07\xe8a\x93\xab\x9d\x0d;\xa0I\xc2EE\x88\x1f\xf8c\xa1\xf8\xf3\xdf\xac\xdd(\xc7A\x00\xe9U\x02+\x92zK.9\x1a\xfe\x14)qjmG\xf2\xa8\xc8\x1b\x17^\xf7\xb9N\xe23\xb9-\xda\xb6\xf4\xa8\xc88\xd3+-\xde\x01(\x15\xe9 \xfd0\x8a-\xdd\x17\xd9\xbdv\xc2HgV\xaf\xce|\xdbU|C\x97\xa3\x82\xb0\xd50'\xdb\x91\xfdo\x12\xf4\xc9y\xdaU\x91\xa0\xf1\xc8I\xe8\xf2\xcb\xe5\xbf\x8cc)+=u\x12L\xc6\xbc\x04\xa3g\n\xb5\x8c\x1a\x0f\x9e\x04\xc4\x94\x019m0\xf9\xf4$\xa0F\x0d\x96\x0e+\x135\x01GQ\xc0SD\x02\x96.\x12P\xde? h*\x15`\xe1 \x94\x80#\xaf\x84\xfe\xa3Q\xf8\x06%\xa8=\x84\x12P\xdd\"|y\xe8E\xc5.'\xaaO\xc0\xce@\x02F\xe2\x16\xf0\x85<\x8a\x12\x8c~E H\x92\x83\x05\xd9\xa1@k\xfc\xca\x8a\xf20\xd8\xeb(\xc1\xe8\xdd(\xa0\xef\xd8F\xf0CJ\xc0z#%X\x0c\x17\xe1\x99\x94`\xf6OJ\x18\xb3o\x95\xc7R\x02\x82_1|\xaa\xf4aJ@\xcd\xc7\xe4\xcf\x94\x80B\x85\xf3mJ\xd0{8%\xd8w\xaa\xf2vJP\xfb<\xf3\xdfQ\xea\x1d\xa1\xda\x11\xcb+\x01\xb3\xc8\x12\x10B\x10M0\xc0\xcb\x8fN\x8c\xb8\x1c\x93D:%[\xe7\xd1~\xfeU\x80u\x94\x94\xbb\xc9\xc6\x83\xfa,\x8e\x88\xef\x91D\xa4\xad\xb1EH}H\xafnut\xdd\xf9!\xa4\x11\x10\x98gAP\x7f\xfd\xde\x8b\xc2$[\xe1<\xa9c8]g\x91\xdf\xe5\xd5(G\xac\xa2fK\xb9\x9f-)\x9f\xd2*KR\x98\xd1j\x9a\xefS\xff\xecj\"~N\xb2\xf5:\x8aS\xea\xc3\xac$\xc7*\xf2i\x02,\xf4\x82\xcco\xdaz\x1fo\x0bw\xc8\xed\x8f?\xc44\xcd\xe2\x10\xc8<\xa51\xefC\xdeC\xfb\xf1\x0e|\xbc\x9dlB\xaf\xfe\x05\x8d\xe1\xf9\x92z\xe7gW?\x02\xa9y/%B\xd2\xfc<\x16\x1e\x16rI6?Nj_*s_\xc6\xf2u\xb8l\n\x97M\xd1\x02\xd4y\n1\xf7\x02,\xceP&rI\xe8\xd3\xb7\xcb\xa6p\xd9\x14\xc63\x0e\x8a\x9e0\xf8\\\x83\xb0H\xecG2\xc2)\x06{~A\x0d\xcexn\xc0\x9cV\x86\xf6\xc45\xbaJ\xc1)\xb0\x96\xd8\x84\xc6\xcf\x7f\xb6\x8e\\\x9c]Uv\x05\x0b\x17\xf9!\xa9\xf6\xf5H\xfa\xdb\xe3\x06\xc6td-\xeeuR\x0dJ\xa4\xdb\x91\xa4\x02|\xd2U>\x1eL47\x1d\x92L\xdd\x9aNv\xa6\xf6,\x9c\xf7\xd3\x02}Sk\\N\nn\x13\xaa\x98\xb3\xf3F\xb1`>\xf1\x7f\x15+\xc5\xff\x8f\x8e\xf7\xe0A\x15\xabl\x7f\x90\xb3\x17\x1c\x1et\x7f#XH\xfc_\xab\xe5\xbe\x0b{\xdd\xd2\xb1\xe3\x07\x9f\x06\xec\x82\xc6n\xb7\xbb\xdd.\xe0\xfb\xd9\xed]\x15\x0b\xbf\xf5\xdd>\xe4^G\xcf\n\x07\xfa\xab\x1a\xed\x0d\xd5\xcf\xbf%nA\xc9\xfb|\xb2m\xdd\xdd5B\x1e\xe1K\x81\xbau\xbf)\x8dD\xe6\xc8\xf1\x8a\x85\x11\\\xb2\x98\xc2<\x8aWe\xca\x9b\xca\x95\xd4\x89\xeb\x87\xdc\x97\x14\xc5\x10F\xe9\x8f0\x8f\xa3\x15\xfc\xf5\xfd\xdb\xdfx/3\x92\xd0\x87\xf7\xef\x16\xf7\x15E\x87%\xba\x84\xc6\x8c\x04\xec3\xf5a\xb6Ii1\xf4\x1b\xe2cS-d\xeeKK\xa3\xfc\x16f\xed;\xe7\x9c2\xedH\xe7\x9c2\xcfS\x82y\xb6\x12\x9cs\n\xcc\x9d8\xe7\x94sN9\xe7\x14\x86\xed\xbe\x84s\xca\xde\x99$U\xf0%\x11\x17\x04<\x9a$\xf3,\x086\xe0\xd3\xbc,B\xe8CL\x0b\xab\xa3\x86e\xe7z\xd8d\x88\x8aG\x0c;l\xa2\xbbm[H\xdc\"H\xc5<+\xa2h\x83\xaf5\xa2\xacH \xed\xb9\xda\xe4\xfb]\xd2\x17\xd6\xa9$\xabl;\xb2u\xfa\x82vX\x94\xc2\x82\xecc\x9fvb\xeb\xb4O\xad\xecRn\xebq\x836\xff\xe0\xab\xb1O\xe5\xba\xd5\xbe\xfbr\xf6\xa9i_tj\xbb\xf7\x17\xcf\xd8\x7f\xd0\xfb\xbf\x9c~b\x7f\xfc\xe7?\xa2_^\xbd\xfa\xf9\xe5\xe7\xbf>\xf6\x8e~>=\x9e_\x1c\xbd|\xf5\xc1;Y^\x1dlN\xc9\xe2\xf2\xe5\xf2lspqz\xfc\x97\xd7\xaf\x97\xcf_&\xc1/\xffA\xee\x1f\xcf\x0f\xb2g\x7fY\xcd\xdf/\xa37\xcf\x17\xbf\x7f\xf6_\xbf\x8a\xff\xf1\xee\xe4\xc5\x9b\xb3\xe3\xcb\x97\x8b\xbf\xfd\xed\xf2\xaf\xd1\x9b\xbc\xdb\xb1E\xd0\xf8\xb4\xed4\xd6u\x06\xa9!\xe3\xbbsE:\x8d\xf3\x01'\x0c\xa5AnP\x15:\xcb\xd2d\x84#\x0e'\x83]DF\xa3\x1b\xa5\n\xd1\xc6\xb6\xd9\xd0\xb6\xed\xaf\xc3\xc0\xee6\xae5\x885&\xef\x00\x96A\x99\xea\x9a\x89\x9a\x0d\xe8/`#a\x11G\x1e\xc5@\xea,\xa9\xb4]\x1a\xady\x93.\x1fj\xfe\x19\xb0\xb0\xa8\xad\xd6\xb04aX\xb9\xa5>\x97R\xadM\x91\xe3n\xaa\x83\xd6\xf6\xd8\xd6\x9f\x9dzS#\x9btRI\xa9\x1f\x0d\xbb\xc3\xa0\x0f\xd5z\x10\x8b\xb7\xa1\xf7\x06\xed\x9b\x9c\xd7k\xfbf_\x9c:\xe64Nr\xa4\x88\xb3R\xed\xba\x7f\xe8\x83\x17\xb10\x91\x07\x94(\xac\xb6S\x1a\x01 \xa3tY\xc6\x1a4\x1b\xea\xba\x0f'\xdf\xd6\xde\xd3\x1e\xb9\xf2\xe5P\xcdJ$\xd1\n\xdd)\xfc\x0f\xe9\x95\x08\x87\xf1\xf94\x0b#\xec\xfa\x10\xc6\x8f\xb6\xd3\x98~\x1a\xd5*\xe3<9T\xdf\xe5\x0b\xb2xB\x96\xf1\xc3\xab\xe52}\x10\xaf>]\xd0\xf0\xe1\xd1\xe3\xf0<\xb8\n\xb2\xcf\x9b\x8b\xc7\x9f\x9f\xfc\xf1\xe9\x0fo\xe5u\xa2j\xedOI\xeb\x9c\x89\xa2\x18~\xa1\x1b>y\xb1\\|\xd3,hHc\x92\xb6\x1c\x02\x1d\x98{\xfb\x95k\xb3\xbb\xfd\x9e\x86)\\0\x02\xcf\xc5<\xe1\xf7hC\x164\x86\xff\xef\xc3\xc1\xc1\xc1\xe1\xab\x87\x8f\x0fnw`\xd0\xbf\x92\x89\xef^vz\xf7\xe7l\xd6\xf1\xddWe\x15\x1d*\xaa\xe2\x0cF\xac\xaf\xb9C\xfc?\xb2$]Q\xfd\xb1\x13\xd5\xd1\xe1\xe4\xa8\xab\x979U\x19\xf0\xeeH\xdb\x01\xb6\xfd)bF [e\x01I\xb5|9\x8b\xa2\x80\x92.\xc9P\xc3?'A\xd2=\x1f\xdd\xcd\x8b\n^&)\xe3v;\xe76\xe1\xddm\xb9)=\x12\x86\x91\xb8\x9e\x91%\xd4oW\xb3\xa9\xc0\x8b\xc2?\xb2P6\x12\xc5(\n17\x8d\xc2`\xf3c\xab\x95\x8a\xce:\x96\xdbU\xad\x00-\x8b!\x96\x1b\xc1Zz\xb6\xb2\xe9\xa3\xc6N\xdd\x16\xf9\x91\xbe\xdai\xe9\x18\x94~\xc1b\x91\x9cgPB_\x81\xee<\x83\x0d\xb8\x161\xea<\x83\xce3\xe8<\x83p\x8d60\xda3X\xdc\xb8\x8d\xe5KBU\xab^\xae\x0d\xe9\xd9\xa8\x95=\xb2\xf0\x01\x9e\xf1V\xe2\x16i\xb0\x81h\x9e\xfb2d\xe9;y\xca\xc9[\x8c\xe3\x0d\xb4\xf6\x92\xbd\xfd\xa5\xf6\xcbH\x9aW[ \xaa\x97\xee\xfd\xeel+\x13\xab\xaa\xd2f\xf7j\xbc\xba\xff\xa7\x98=\x0b\x05\x97\x14\xfe\xebm\x9fU\x87\xc7Jzv\xea\xcdou\x0e\xe3y\xc4\xc2\xee\xcf\x14\xee\x9cNr\xd4\xbcS\x19I\xa3\x95\xf8a\xc0\x1e#\x90\xb0p\x11P\xb1\xd9\xba\x86w\xb3\xf7Z\x8b:8I\xa7\x9aj\x7fF\"Y\xba\xecp\xe7\x0e\x0f\x83\xd4\xfc\x7fe\x01A\x9d$<\xceJ\xce\xb4X\x9d\x9d\xfafk\x9f]\xb3+\xd6\x9a\xe9\x8e\xbb\xa9\xce\x17d\x8b\xf20\xa2\x0e\xe84\xb04\xd2Pa\x14\x0d0\x8cG0m\xb4\xcf\x14\x19\xda\nM\xafk\xe9Nd\x0d\xb0\xedO\xe1\xd8Zg\xb3\x80y7\xfb\xf00\xec\x00\xd0\xc3\x9c\xb6\xb0{i=\xa4\xc7\xd7\x94\x85\x8b}\x9f\x06t!\x9e\x0f\xe3FE\xfe\xefc\xdf\x8f\xffU\xfc\xc4\xa20\xe9ca\xd4p\xdd\xea\x1c\xdc3\x19\x02;\xf6\xbc\xe3\"\xa41\x87\x17E\xbb\xb2MO{\xc3^\x04[*>\x12\x04P#\x91\x8cb\x92j\xe2y\x9b\xb6\xce{/ \x9f\xff\xc5B\xedY\xeb\x07\xa4Q\xb2\xeb\xc0xN\x0e\xdd\x83\xe7\xdam\x81z2]\x8b!Y\x92\xb8{\xcfk\x9b\xe5\xe9\x05\xeav\xdf\xe3\xd9\x05e\xb2\x96\x8b\xbeeU\xf53Y\x9b\x99\x05U\nA6[\xb1\xb4\xb6 \x8bMe\x97Y\xbc\xd5~k\\\xb9P\xa2@\xc2\x9c\xb0\\T\x05\xecS\xc6\x8a\x1c\x06Q<\xabdU\xd4\xc6\xb3\xb2\xba\\\x90\xdb\x05\xb9[0\x82\x15|}\x0e>\x17\xe4\xde\x02w\x16P\x7ff:\x0b|\xe7An\x84U\xa5%tcn\xc8'v\xdb\x12\xdf\xa7\xeb\xf3\x07\xf7\xbd\x8c\xfc\xb18\xffL\xc9\xc3\xcf\xeb\xc5\xf9\xa7{\x0f\xd3\xf0\x8fK\xff\xf3\xc5}2\xf7\xee\xf9G\x8fZh\x10\xc6\xdc\xae\x07>\xe8U`}vA/%\xac\xd9\xa2\xc6\xcdb\xdc\x96\xe6\xe81\x06{m\x13\xea\x8f3\xbbI\xc6\xdc\xd5\xc9\xc7\xca\x00sI\x07\x8d\xa6N\xad5\xc0\xb6?\x97t\xe0\x92\x0e\x9a\xe0\x92\x0eJ\xb8\xae3\xc9p\xbf\x06?\x9fV\xee\x83\")\xa1\xe9f\xd8\xbb\x7fp\xa8F\xfd\x0b\xdd\xc0\x9a$\xc9e\x14\xfb\xc0\x12\xb8\x8c#\xb4wW\x1d\xe1\xb3\xf3\xee\xee\xffY\x9ae\xe2\xb7\xef\xc2\xdb\xab\x99M\x83\x1a\xda\xd9\xbc]s\x1b]~\x98Oi\xdb\x074hJ=\xacU\x0b?\xf6\xdf2\x1aod\xc2J\x16\xc74\xac;\xd3`F\xd3KJ\xc3\xbaO[\\\xf4\xd8\xf6s\xddx\x1f\xb7\x95\xa57\xecp5\xec\x84\xa3rUk\x9a(\xdd\xd4\x03\x8c\x80\xaf\xebL2H|\x97\xeb5\x92\xaf\x1a%|\xb3p&_B\x9d\xba \x9b1\xc8V\x12\xcb\x85\xdb\x04\xdc\xf4p\x1b\x0bY\xcaH05\xc6\xcf\x14\xed\xfb\xb6\xf3b*Vq\xaa~\xeaP\xb6W\x15\x86]\xb1p\x9a\xb2\x95\xa6\xe7\xad\n\x98\xfd\xe4N\xd5\xbe\x97\x88\xd1\x87\xc3H\xd8\xb9c\x8a\x1d0vl\xec\x83\xe8\xab\x19\x19\xe3\x7f\xa1~\xae\xcc\x8a\x9d\xea\x82c.8&\xc0\x05\xc7$\xb8\xe0\x98\xf3\"6\xc1\xb6?\x17\x1cs\xc1\xb1\x1a\x8c0\xf0\x1e\xee\x86\n\\p\xcc\x05\xc7j\xa0\x13\xf1.8\xd6\x01N\xad\xb9\xe0\x98\x0b\x8eu\x81\x0b\x8e\x95p]g\x92q\xbc\xab]\x9e\x88\xaf*L\xd6\xe9\xa9u\x01\xb3\xe6l\xbe\xb7\x80\x99\xda+\xedbf}\x8e.\xc3\x0e>4L\xe3N\xf53\xc0\x00\xed}\xb5\x03\xe1\xfc\x06\x8c \x1e\xda\x1e\xe1\x0c\x07\x0c\x1e\x9dO\x1cT\x08\x06(\x8c\xb1\xc3q\xa5\x8c\x8fim\x9f\xea\xe5\xf5'\xbe\xc9\xcb\x8eZ\x02\xfbVg\xf7\xd6\xc2\xba\xe9Z\xe9\xa0\xa2z(\xd5n\x99\xc7\xf9\x95z\xd5x~'Am<\xefc\xefw\x8d\xb0\x1deHid1\xa0\x17I:`@\x16b\xbb\x08%6\x98\x00~\x98\xb3 \xa51\xcc6rR\x92!\x92\xc2\x9ft\xe3%42\x94\xf8\xff\xc4t\xfe\x14\xf6\xfe\xef}\x9f\xce\x85x\xe2\x16\xcc\xbb\x1a%\x86\x97\xa6@\x18R\x0d\xd2\x7f\x17\x06\x93U5\xdc/\xce\x17\xe7\xf7\x9f\xd099\x08?]~\x0e}\x12~z\xb0\xba\xef=Z\x93{\xd9}\xb2\xfe|\x7fq\x14?Y$\xebO\x8b\x87\x8b'^r\xef\xfc\x89\x97\xcd\xb7\xfa\xf9\x83\xb0\x80v:\x9d\xf4'\xe2$%i\xa6Y;\xd5]\x8f4:\xa7\xddE<\x0d'\x9f\xe2\xf4\xda\xb3\xa8\\\x9de\x94m{G\x1fWQ\xc8\xce\xd5o\xa3\x1bU\x06\xf3i\x98\xb2T\xf9\xe0\xbd\x11\xc1%\x9d%L\xe5\xdb@\xb4O\xa8\x97\xc5,\xddL\xbd(L\x89\xd7?n\xe9\xd3\x94\xb0\xc0`\x9e+\xdasAi\xbcDd\xdeM]J]\xa0fa\x1a\x93iz5\x15&D\xf7r\xe9\xb9\xb7\xd6\xcb\xc1\xd6\x8fU\xca\xcan\xe6P\xe1\xd7_\x96B`?|\xf2\xe8\xe0\xee\xc1\xe1\xdd\x83\xc3\xb3\x83\x83\xa7\xe2\xff\xffc\xbbC/Z\xadX\x92\xecf\xcb\xc4JW\x9cq\x1e`\xa2\x14\x87\x15\xb9\x9a^G\x1f\xde\x92\x84\x0b\xba\xf3\xae\xb2\xb5ORj\x9f\x12\xd0\x04,\x07\xf4\xb4V\xab\xf6\xd7a\x90\xbal\xb0\xe6l\xf0\xd9`\xadl\x80qg\xd3\xc3\xae\xb2\xb7\xbak\xf9*\xdf\x84\xc9m\xe5)4[\xd0hS\x08k=\x0f_\xe3\n\xcc\x96\xb3v\xf8z\xaby\xf76\xb3\xcab\xd6\xd9\xcb*kYgm\xa8,e\x0dq\xccV\xb2\xb6\xb1\xc6B\xd6*{\xbd\xaa\xd7\xda\xc6\x06\x9d\xa5\xb7\x8b\x0d\x8d\xb56\xb1\xa1-\xce\x1e6 \xd1\xda\xc2\x9a\xb6Z;\x18\xb77\xb6\xcd\x08\xa4\x05\xac\xb7\x7f\x95\xd6\xaf\xd9\xf6\xed;n\x93\xd5\x8b\xc4\x8b\xb1xu\xf6\xee\x80\x0d\xa06\x0d\x8d\x16\x9b\xc1,\xd4\xdb\xb8c`7Z\xb7C;1\xda\xb5\x16\x1d\xec\xc4\xa6\xddirle\xccJ\x1c\x16\x86PM\xfb\x15Y\x96\xd50=\x12\xfa\xfc\x9f4\x99\xc0\xb3\x0d\xf8tN\xb2 \x05\x96BL\xd3,\x0e\x13\x88\xc2@\x16\xa0\x92\xa6R\x89\xab\x1a\xd1$\xff\x9b:\x0d\xae\x99\x91Z\x98\xa1R\xd7\xd5\xfe\xacXA]\xb2\xc4\xd9\x92\xd6f#\n]H\xb4\x13x\x93%\"7\x82\xb2tIc\xd8\x93\xe3\xdf\xbb\x03{RR\x88\x7fGM\xd1\xb5W\n\x91\xbdI\xed\x87\x9a\xe9\xda\xa2\x82n~k\xb2\xa0\xaai\xf0q\xf3\xdfA\x86'&[T\xd8\x16\xac\xb5A\x1c\xa2\xfa\x0f\xd8\x8a\xa5\xba\x01\xac\xc8\x15[e\xab|\x0c\xdc\xc2\x17\xee[X\xd3X\x0c\xae\xe7\xa8n\xbc\x0d\xed\xdc\xd6F\xd3\x1bc|\x1b\xa7\xe1\xdc\xd6\xdb\xed\x94G-\x93AnD\xe0\xdc\xd6\x9a\xf683\x1d\x81\xc8\xb9\xad\x9d\xdbZ\x80i\xcb\xec\xda\xcf\xeb\xdc\xd6\x1d\x80\xe5\x80~\xd6\xf8^\x879>\xdc\xb7\x8c\xf7\xc6~\x1bws\xf9Y\xa2\xfe\"f^}.\x7f7\xf6\xdb\xbe\x85k\xb6\x0d\xd1J\x1ek\x17\x0e_\xe1\n\xcc6\xa1v\xf8\xce!\xab$\x8e\xd9\xfe\xd36v\x0e\xd9\x12p\x96\x9e\x01\x89s\xc8\xd6\xa0\xef\xb8M\xf6\x1c\x12/\xc6\x96s\x0e\xd9\x06\xa0\xec\xb6\xa1\x9d\x18-6\x8b\x0e\xc6p\xc8\x8e\xed{\xc5X{\xc3\x9e\xe0\xfd~,?\xcds\xbc_\x9d\xc1\xb7[\xef!\xe2\xf6\x9dagU\xf7\xc7\xfab\xe8\xe9\x822\x96\x05\xef}\x96\xfe\xd6\x9f\xe3\xfd\"\xa2k\xa4'\x0e\xbe?!\xa6}\xee\xc0\x89\xb3\x06\xdc\x04q\x86\xa8\xf84L\xae)\xda!*<\xe9m\xf6]=w0\xb6\xb8)\xa5\xcd:\x8a\x82\xa7}\xb6U\xfd\x81#~\xe2\xa6\\8\xf0?\xe6\x98\x81c\xfeZv\x94\x95G(\x88\xa2\x84N{x\x0cd \xbaOK\x16\xce\x03\xc9\x98\x01IR\xfb\xc3Y\xd9\xde\xaa\x958,\x88\x0e\xab\xc3\xda4\xa6 \xb5;q\xaecz1\xcd\xe7n\xe5*\x19\xca\xda-\x8d8\x8c\xc1%O\x17(\xe5\xbd\xc9\xe4\x9b\xe4\xef\x8a\xd9D\xc1 y*E.Y\x1b\xc3\x8a\\\xf5m\xc9\xec\x98u\x11q}!\xb8\xcc\xaa\xdd\x00\x97\x07?\xb3\xb7\xb3|\xb6\x9bv\xab\n\xe1!R\x18\xc9\xa3n\x86\x80$K\xbe\x1b\x12\xb6\x08\xf9,Y8\x8f\xfam\x08\x8eA\x84\x01\xb8\xa4_\xb0\x0b\x1a\xb6nH\xde\xea\x18\xd8V\xc3\xce&\x16[dk\xaf\xe5\x13,0Yf4\xe92~N\xabl\x9f\xda'\xaaUU\x98\xc1cg\x01\xbd1d\x00\x8d4\xd2\x07\xb7\x8aow#\x91vk\xc3&)\x89S\xa3\x11\xa74>}z5\x8d\xe6\xf3NEgh,\x03\x16\xd3,LY`\xdd\x98\xebX\xeaOgA\xe4\x9d'\xe6\x94\x80\xb6\x84\xb0\xb4$\xd7\xd9,`\x1e\x9c\xd3\x8d\xa8T\x14\x85\xa5 \xb7\xb5?\xfb\x8a\x9f\xbdJ\xfeh\x8f\xb5\x9cj\xc59\xd6\xa2\xc2\xdf\x07\xd1\x10HN\xf5\xad\x93\\c\x8c\xefi\xe87\x8a1\xa5\x11d\x06\x04\xbb)V\xd3K\x84)\x18\xa7\xeb\xd4\xae>,\xe8=\x00\x1a\xc9\xb0\xe5I\x18\xe7(\x0fbj\x8d9\xec\xedm\x8dV.\xf3\xb3fa\xc6\x8eZ\x8d\xca\xd1\x8fd\x18\xed\xa4\xe8bgi \xd0\xc8\xc9\x02\x10\xa5r\x94\xde\xaf\xceRA`\x9a\x08\x18'\x03\xba\xb2A`\x1e\x17\x18\xddzf\xba\x80\x896\x80\x99\xa7\x04\xf3l%\x18K\n\x01n\xee\x05 \xbc\x9f\x05\x98\xc8%\xa1O\xdf\x8aZ{\xbd\xebh\xa2\x8a\x03\x0db=C\x0f`\x1e\xa3\x04S\x16\xac\x84/P\x8a\x88\x83\xb6\x1c\x11`\x08 (bB\x81J\xcb/(zB\x9d\xa6\xd6%\x8a\xc0\\\xa6\x08z\x8dd`\xb9\"@\x96,\x02\xec\xe0\x8c\x19w\xa6\xf2E0\xa0'kC\xdfU\xd03n#WAO\xbf\x17\x91j\xce\xac\xe2l\xfbs\x15\xf4\xaeUm\xb9\nz\xd8\xde\x07\xaa$\x8c:2\x0e\xc8\xa0\x86\xbe\\\x05\xbd\xads-Dqy(\xabp\xf5\xf2TT\x8e\x8a1\xc3\x069\xce\xda\x91>obr\x01\xe0\x9d \xd6z\x1b\xe9\xa0\xb3\xd3\xce\xe4jJ/\x98\xcf\xf9bJ,\xa3\x05\\\xe4U^\xafK\x16\xfa\xd1\xa5\x15\x82\x15\x0b\xa79\x925\x8d\xfb`\xf0\xa3l\x16P\x81d*\x03\x02S?\x8b{D\xcc\xa2\xcb0e+:\x08\x89\xe0\x9a\xe9<\x96n\xaaiml\xc3\xd0\xc8\xa1!q\xf4\xdcE\x8b\xe8b\x9f\xb3I\x94\x90\"\x17\xd7\xc6\xa1W>\xd9Q\xe0\xb8\xd5\xd1y\x97#/Q4\xbc\x1e\x07\xde\xeb\xe8\x82\x93#\xf4\x8a u\xbb\xf0\x1a\xb3h\xe9\xe7R\xc2e\xc2\x0b\xfb\xf1v1\x91)_\x9e\xdb\x1f\xc1#!\xcc(|\xbc\x9d\xd2\xab\xf4\xf6\xc7;\x8d\xd6\x1fo\x97=\xe6\xf1\xba\xdb\x1f\xef\xc0\xc7\xdbI4O/IL\xa7\xd9z\x11\x13\x9f\xde\xfeXk\x96\x07@\xa2$\x9d\x96\x9d\xcd\xbeM'\x9b{\xd9\xc44;\xf7\xb2\xc9HV\x8d{\xd9d\x0b\xdc\x91T\xfd\x99\xc9\xdb\xfa\x9d\xbfl\x92\xb24\xc0\x9a,\x12\xea\xb3\xb1i\xd7\xd0\xb7V-\x1b\x87\xc7\xab\xae0u\x94\xa8o\xff(P6\x16\xa5\xdf\xbd\xc1~O\xb2\x14\xa9\x97>]G Sfz\xf5r\xba}w\xd9\xe4\xd6\x873\xe7T5rC_]\xea\x9c\xaa\x0d\xb8\x16\x0d\xe6\x9c\xaa\xce\xa9\xea\x9c\xaap\x8d\xc7\x0fk\xa7ja\xf7\x8c\xf1\xea\x88\x95\xb3T\x96\x96(\x9dE\xb7:\xfai}\xd2\xa8A!l\xc7-\xbf\xea\xee\x9d8\xea\xb4\xcd\x8b(m\xa4Y6\xa6\"~\xec\xb0\xdcT/3+\x16]\xd7\x7fn\xb1E\xca1\x94\x1f\xecv\x1c[E\x02u\x07\x8c\x92\xfdd\xab;uGXR9\xbd\xf2\xa1O\xd74f\x91\xbf\xed\xfe\xba\x88R\x16.\xaa\x9f\x85G,Ih\xfe\xef\x98rA\xc8\xff\xab\xef\x94\xad-9\xa4\x9b}\xb7y\xb0\xe5\xa1\xa6\xdbC#\xb1*\xeb\xa2u\x9f\xbd,\x0e.\xb6m\x0dg0lkS!8E\xfb9\x0by\xd7$\x086\xd3\x98&Y\xa0\xc9\xfe\xed}\x92\xd9\xdb\xd0dOoI\"O\x19\x07\x93\x83\x12\xba\xd3E\xc8,II\xd75\n #\xf7\xb6\x17F\xd75\xb10\x9ar\xf1?\xbd\xa0\xa9\xc2\xf19j\x972\xb8\xd0\xaf\xc4Y\x1a\xa5\xba\xc3\xb4\xe9\xe8\xa19x\x8c`\xe2\x19\x8e\x1c\x08\x12\"\x8f\x1b\xa6\xc3\x86]O\x9d\xae\xb2\\\x03\xc8\xcc\x7f\xab\xa5\xc2\xd9I\x9f\xa4-\xd268\xfa\x9aJ\xcdH\x99\x0c:7\xaeZ\xd9\x84\xcd^W\x91\x82\xea\x86\x9aDV)\xd8\xed\x18B\xeb\xa2N/\x1c_M\x80M\x96\xefUM\x8c\x1b\xbf\xf2\xb5 Q\x83\x88\x85\x89\xb8\xa8T6h\xa0\x92\x8d\xb7\xb3\xea](\x0dyJq\xa1\xb4\x0e\x0c.\x94&\xc1\x85\xd2\x9c#\xb2 \xb6\xfd\xb9P\xda8\xa1\xb4\xc6\x1d\xafS\xae\n\xe1\xb9P}\xad\xef\xfa\x86\xdc\x1a\xf8?\x88\xdad\xb0\"W]\xd7\x0f%|m\xb14\x17C\xab\x83M\x1f\x1d[8\xb7\xban\x061\x93l\x96\xac\x89\xfa\x1e\x86\xcd\\\x93F\xb5\x88&h.\xfa\xd8t\xf1\x86\\\xfd\xae\xdaT\x12\x12\xe5\x8b\x01`\xd9\xd7^\xf7\x99]\xeb\xd1\xefX\x0dk\x87\x1b7\xf0\xebb\xd4\xc5Q]\x1c\xb5\x13\x10\xcc\x0c8y\x07F\x99\x07=\xfasqT\x17Gm\x82\x8b\xa3\x96p]g\xcf/\x1aG\xddky\x07\xff,\xfey\xe2\x17\xaf\x15X\x07Z\xf59\xf5\xedo`\xb6\x01Vh\xca\xdd;\xee\x14\x0b\x93\xbb\xd5\xca\xc9\xd7~\xeaY\xa9b\xef\xa8wj\x162\xa0ge8h\xe3s\x12\x9f\xa2^\xbd\xf5a\xae\xef!\xcd\x10\x93\xc3\xb4\xd4\x17\xe4\xef6v\x10\xb1\xb8\x01\x8aL\x13\x85\xb3\x91\x11\x86@\x956\xfe6b?\xea\xc8\xdb\x88\x9d\x98cn#u\xa6\x8d\xb6i\xfa0D\xda\x06\x98\xe3\xbdO\x89_\xfb\x91\x1b\x11S\xeb\xec\xc1Rc\xb2J\xb0\x8f\xaf/\xf7\x0b\xa7Q_\xc5Y\xb4\xbf\xd51 \xf9\xc5\\\xbcTN\xcb/s\x9f^K\xdf:-\xfa\x05\xb5\xa8FA\xa1\xdd\x89\x96\\}\xf2b\x97\\\x9d\xcb\xb9\xa4/W\x17\xed\xd5\\]|\xc1M\xc1-\xe6q\xccl\xc1\xcc\xbb\xcd\xf1Rk\x00\x9d\xcas\xa9%u\xd0\x87\x8e\xb4\xf2\xc5\xd0C\x99si\xdd\xb2_\xdcbp\xe4\xc2R\xca\x0d\xd6\xddv\x99./$9\xf3\xf7\xba \x8dz\xdc\x15\xf7\xcd8nTV\x8b\x82K\x1a\xf3\xecZ\x8f\xdd\nKL\xe1F\x91\x10S\xa4\xee\xba|\x986\xb4w\xaa\xcb\x87\xa9\x83\xcb\x87\x91Paw\xf90[\xe0\x02J\xea\xcf\xf4F\xcdw\x9f\x0f\xa3\xb1\xcc\x0c\x16\x9d\xbdU6\xd0&\x93\xa0b\x0c\xdd\x1eq\x9e-:\xecB6\xf2\x88ge\x87\xb8t\x81FS'\xdd\x1b`\xdb\x9fK\x17p\xe9\x02M(\xe9\xe6\xd2\x05\xae\xcb4\xef\x9f.\xc0|~@+|\x12\xcd\xe4\x81\xfb\x07\x87jL\xbf\xd0\x0d\xacI\x92\\F\xb1\x0f,\x81\xcb8\xaa;\xab{9cP.\xe7\xfd?K\xd3\xa9w6B\x8e\xe1V\xc7\xd8\x1a\x1f4\x9d\xcf@B_y\x8b\xf9{v\xc4`F\x96?\x0e\xa2\xbb\x04\xae\xbeG\xdes\x94\xb9\xb9kz\x11\xe4\xe0\xe1\xfa\xea\xea\xe2V\xd1\xd5\x0d0\xd1\x9c\xad]\x03\x9b>:\xac\x91\xbe\xe1\xb9\xaf\xe8\x806D\xe6w\xbd\xe9y\xff\xe0\xbe\x1a\xdd\xab(\x0b}\x08\xa3\x96\x10\xdd\x89\xcc\xbf\x88R\xda;\xc6(j^h\"\x8c\xf2\xf7FU\x8f\x1b\x15k\xfc\xc2\x82}W\x82p\xb7\xe1H\xb1\xa8j)\xa8\xd8\xb3CBl\x91\x9c>\xb6\x99\xf5^\xadZ\xf6\xda_v\x01\xae\xdf#y\x05\xdb2\xa6u\xd1\xd9\xcc\x85\xb1\x8c\x9b\xcctm|\xab.\xb3\xe4\xb6\xdb\x1fa\xceh\xe0W\x15j64\x91\xb5f\xc2h\xbb\xd7\x98\xb2U\xa7\x9c\xa9\xd9\x11\xafi\x9a\xd8!\x9c\xc0\xc9\xbcv;\x90S\xbb\"\xee\x9a\x86>\x0b\x17\xd5]\xab\x1f\xd8\x84\xe6\xa5\xb0a/\xbf\xecp*\x8aZ\xef\xfd\x08,\x85\x98\xa6Y\x1c&@B\xa0\xabu\xba\x91\xdd\x97\xf8\xe40&\xf9\x7f\x7f\xaf\x12\xeeFH\x06\xc5\x15s\xe4\xd9SwAZy\xad|\x04\xdc\xddW\xc9G@\xac\xbf>>\xa8\x03kaW\xb5\xec%\xa7\xa4\x98*\xf7\xc3~\xe3\xca\xb9\x85l\x92\xe6\xcb\xa2\xdcie\xce\xcbV\x91a\x954B`\x98\x88\xbaX+r5m\x96\xd0\x87,\xe4\xf2\x86\xc4\xb4\xee\x1a\nI\x18%\xd4\x8bB?\xd9\x85\x10\xb9\x11\x1bs\xc5BW%\xa0\x016}t\xb9\x0d\xb6\x98\xab\xf7\x06\x7f\xfc\xf0\xfe\x81\xfd\x16\xff_Q\xba\xa4\xf1\x94\xab\x86\x7f\xe7\xa7\x9a0\xe2J\xbf^\xb6\x9b\xab\x14\x9a\xa4M\xed\x81\xb4l\x94\xbbr,\xf9!T8\x0b\x17\xc3\x05\x88\xb4E\xf4\xe2\x03\xdb\xe8f\xef{\xf5\x9eJ\x971M\x96Q\xd0\x9f \x0f&\x0f\x94jl\xa0\xfa\xbaw\xef\xbe\x02q\xb5 \xd35\x0dI\x90v\xb8\x8a\xd0\xdd\x1c\x1c\xde\xac-\xa4`\xb1\xb16\x90,S2|\xfbH<\x03\xd4\xef\x16\x02\xa9}\x1b\x8f\xd3|#\x8aW{$\xaef\xdb\x9b\x89o\xa2&P\xf1G_>\xde\xdb\xf7\x19'\xc4,\x13\x0b\xea\xd3\x80.D\x85\xd6\xfd?\xcb\x7f\x1f\xfb~\xfc\xaf\xfd\x98^\x92\xd8/\xce\x13\xdbg\xb1\xbb\xdbg\xa3\"\x97\xb7\x86\xe7V\xe7\xe8r?\xcf\xb1\xe7\x1d\x17\xb9\x0fsxQ\xb4+\xdb(Ne\x9d\xcb\xd9\xe1\xd9yt\xf9\xe4a\xea_\xac\xc8gr\xee_\x9e_\x1ee\x0f\x1e\x1d\x1d=\xa2~\x96\x05\xe4\xc8\xdb\x96\x1e\xeb\xed6\xd2\x9f\xddv`#\xdc\x13\x16>\x87]\x19|\xbb\xbd\xda\xae4J\x0c\"\xc9`\x84\x98\nx\x9b\xf1~\xc5^6\x1c\xcfn\x7f\xdf\xedL\xcbc>\x05o\xb771\x82\x89\x9d\x8f\xad\x00\xe7c\xeb\xea\x11?;\xe7c\x1b\xc9\x8as>\xb6-pGp\xf5g\xce\xc7\xe6|l\xa3\xaa\xba\xbe\xa2\xc6\xf9\xd8\x1ap-\x1b\xdc\xf9\xd8\x9c\x8f\xcd\xf9\xd8\xe0\x1a\xad\xb3\xe1'OY\x0b\xb1<\xc9}\xf1\xeb\xccX\xb7\xdbe~J+R\xce\xbeb\x7f\xdbN\xb33\x8b\xec\xc9\x82^$h\xf9\x1cL\xd9\x98\xb5d\xcb=\x0d\xb6 \x9c-Y\xc2\xf9\x807*\x98\xabf6].\x99\xb7\x14?f \x8d\xe1\x92\x05\x01\xc4\xd4\xa3\xec\x82\xd6\x06\n\xf3,\xb4\xc9\xca\xb1p\x03\xec\xca\x06\xeb\xd8\xa8\xb6I\x8cm\x96\xb0,\xb8\xd3s\xeb\x0f\xdc\xabvN\xa7wt\x1d\x10\x8f\xf6\xe0\xc9zK$3\xe6\x06}H/!\n\xe9\x04\xcfN\xce\x01U\x80s@u\xf5\x88\x9f\x9ds@\x8dd\xe28\x07\xd4\x16\xb8\xf3\xa9\xfa3\xe7\x80\xd2\x96\x10l\x9b\xcd*\xad\xa0\xa0\xb3\xada\x03C\x8d\x9b]\x19m\xceq\xe6\x1cg7G09\xc7\x99s\x9c9\xc7\x19\\\xa3U9\xc0q\x16\xc5\xa5\x16\xbdy\x89je\xd2\xc5\x08 i\xdfO\n\xd7\xef\xc5`\xa1N\xccz]\xc3[\x1d\x93\x97\xb9\\\xc2-\xa1h%\xae1\x0f\xc8\x87\xb1\xf01\xdc\x08C)\xca\xf9\xe0\xcbY\x97=\xf8\xa4\x82\x84\x06\xf3\xe9,\n\xfd\xe9\x8d\xba^\xfd\xf5\xde9\x95pA\x82\xa9\x17\xadV,I\x98\xba\x88\xa2\xa3i\x1b\xbai\x8aSW\xa5\xb0\x19\xc9\xd9\x8bV3\xfbQ\x96&)\x11\x95\x15\xa7\xbd+g|?\xaa\xe7\x15m\xa9\x8f\x1a\xfdJ\x0f\xf7\xd7\xafF\\n\xf0\xeew\x9e\xdbm\xc6\xdd\xf6\xbcTC\xa225W\xf8w\xb7\x8b\x02h\xf7\x9b\xc2\x04\xf4\xd0\x98K\x84\x16q)\xb7\x83M;\xedzv\xf0\x17\xd1\xbdv\x81\xd62z\xc8\xb9\xb2\x1c\xca^\x82*\x9a\xd1n\xd3fc\xce\xda\x15\xa7\xb7q\"\x18\xd9\x05X\x0bp\x01\xd6\xae\x1e\xf1\xb3s\x01\xd6\x91\\a.\xc0\xba\x05.\x8e\xa1\xfe\xcc\x05X]\x86\xff\xa8\xaa\xae\xaf\xa8q\x81\xca\x06\\\xcb\x06w\x81J\x17\xa8t\x81J\xb8F\xebl\xcc\xd3\xe7\xb5\x07'\x9b\xae+~p\xccB\x96n\xa6\xeb(\xca\xebyZ\xfanDs\xe0\xcd\xb7\x0bA#N\x9f\x16G\xca]\xe9s\xe7F\x19\x87\x99\xdaG~\x0bF\xdar\xb9\x7fu\xacdpF\xac\xc5k;4\x9e\xaa\n\x18kVm\x16\x85Y2\x08C\xb5\xcdSr\x85l\xd9\x93#\xb8\x02b\xe1b\x083\xbc\x91(`\x15\xf9Y@\xcd\xac\xc0\xbf\xbf\xd9,\xc0\x892U\x08\x02\xcd\xb2\xb1p\x1e\x88qO\xc5\xd9\xc6[\x92p\xa1\xb4\xda\x0c\x18V\xe8\x85\xdfji\xf9\xb4\xd6\"\"\x81\x08\xd9S;&\x9d\x05\x91w\x9eL\xd74\x9en(\xc1>\"8\x90M\xcbiZs\xe9\xf3\xfcM\xbb\x1cSE0iX\xddp^\xdd\x05-I\x18f$\xb8\xbb\x8e\xa3\x0b&|\xd1\x83i*1B\x85\xf1\xbb\xa3\xadt\x18\xef\x93,]\xee_\x1c\xcehJ\x0e\xf7scy\x9b\xbc%\x1d\x8f\xf3/\xaa\xe7\x11\xf3\xca\xdb\xf4\x8a%\x92\xb2\xf9\x17yK\x99%\xc4\xa2\xf0\xc4\xafZ\xf7%\xd01$\x99\xe7\xd1$\x99gA\xd9z\x82\"\x9a\x95k\xa5I\x87:\xe8|\x0d\xbbJ_\xe1\xcd\xa7Y\xdcQ\x14\xbf\xfa\xddp\x9e\xc29\xd1\x00\x8e\xe1\xc3\xbb_\xf7c\x9aDY\xec\x15\xbe\xfe%I!\x0b\xd9\xa7\x8c\x06\x1b`>\x0dS6gT\xde\xfd\xe4}C4W\"\x14O|\xd0\x98\x91\x80}\xa6\xfe-\xe5w\xeb8J#/\n`\x96\xcd\xe74\x86\x15M\x12\xb2\xa0\xf9ES97XeI\n^\x14\xa6\x84\x85@T\xee\x1a\x80\x80\x92$U\xf7\x15\x85\x14n\xef\xdf\x06oIb\xe2\xa54\x96o\x07\x05$I!\xa1\x8b\x15\x97\x13\x91|I\xf4\xc3\xbb_\xf7\x92\xf6K\x98M\x10\x83\x8a\xb9\xf8Ih\xa8\xe9\x95\xa3\x9bgA\xb0\x81O\x19 8\x05}I\xdf\xbc+A\xc9\x1f\x88\xb8F\xabD\xf2\x91\x0fe\x7f\x11E\x8b\x80N\x04\xcdf\xd9|\xf2\"\x93[\xec\xe3\x8fr&\x02m\xb2\x8c\xb2\xc0\x87\x19U;;\x01\x08x$\x8cB\xe6\x91\x00\xe6Q\xbcR\xf7\xfc\x03\x9d,&w8iE\xb2\xca\xed\xc9\xed\xf2\xd5\x1f\xcf\xa3\xeb\x94\xfa?Nn\xa9\x9b\x9f\x84\xb0\xe6\xc4f\x1e\xbd\x03)%\xab\x04\xb2$\x93\x8fU\xc5\xd4\x8bVk\x16\xf0\x91\xa6\x91 \xc6\x8c\x85$V\xbd\xb4\x01R\xe8l\xd6\x82\x07\xe5C\xb0\x1bu\xd7\xf4jM\xbd\x14X\ni\x04Y\xc2{\xc9\x83\xf8aJ\xaf\xc4R\x1f\x87\x9b \xfc\x1c]\xd2\x0b\x1a\xdf\xe1\x84P\"\xfb\xf0\xee\xd7$\xbf\xdd\xccQ\xa5K\xaa\xeeX\x08#\n\x1f\x97i\xba\xfexG\xfeo\xf2\xf1\x0eD1\x84Q\xfe\xeb\x1d\xc1\x8d\x1e \xf3W\x87\x1bo\xccn!\xa4)dk b\xee\x9a~\xa5\xa4\x17\xa4Y\x91u\"YK\x8c<\x8d\x8a\x9d\x05>\x9d\xb3\x90\xa5B\xf7\x11\xd53+\x00\xf3(\x08\xa2\xcb\xe4\xa9fm\xff\x0dN\xe6\xd5\x8c8[\x08\xb5\xeaS\xbf\x9c4\xff#I\x92lE\xfd\x89\x0e\xd1q\x08?\x9f\x9d\x9d\xc2\xeb\x97g\x10\x85\xc5\x16\x94{l\xc3h\xe0\x03Q\xb6\xfe\xaf\xf6\xb68\xdb\xac\xe9?\xff\xeb\x9f\xca\x06\xb9\xa3\x8a\xf3\x83\xe47\x90\xb9\xbcb\x85r=/\x9e\xff\xe5*s\xa2\x1bu\xa5\xff\xe5sc\x84\xd3\x8c\xfa\x9c\xdc\x1e\xf1\xb8l\x89\xa2\xf3l\x9d?\x1a\x9c\x88\x83\x9b\xaf\x91O\x82\xafT?\x0b&\x14c\\\x12y\x9d~U\xdbC\xbe\xdcD\xa4\x98\x12\xff\xf7E\xc4| \xa1\x9a\xb1 \x1f\xa0\x10\x1f1\x9dG1\xbdS \xe0xI\xcaf,`\xe9\x06BJ}\xc1F3\nB\xe4\xc5\x17\x9a\x99\x88\xb9\xc8\xc3\x85h$\xf6\xec\x04~\xf8\x90P\xb8\xa017\xbc8\x958{r\x99%\xf9\x93\x84d\xa1\x9b\xfd,\xa6\xe4\x9c\xcb\xa0\x1c\xf1\xe4G5G\xfd\x16\xa5\xf4)\xa4\\\x87\xcc\xf3\xb0\x0e\x11\xf3\xc8eW\xfe|t\xb0\x01rAX@f\x81V\\r~\x8c\xe6s\xe61\x12\x18t\xd9,\x9bCL\xb9&\xa2wD&\x05K\x8bNE\x04j\x1e\xc5\xd5\xbeT\xa2\x9a\xd1\x05\x0bC>\xd9K\x96.5\xcae\xb3\xa6\x13\xc9\xffd\xcd\x92\x89\x17\xadt\xd2\xf8\xbd\xd8\xa9 \x887\xdc\xb8\xa0\x08\xdbR\n~\xe0\xe3\xe3v\x9dx\xfbZn\xed\xf6\xfd\xc2\nVl\xb1La\xa6\x11Jb\xd2\"\xa2\xc6V\xeb\x80r%+\xcf4\xc9\x9azl\xce\x93\xb2\xa2\x8c\xff\xf2\xc1\xa7\xcbHf\xf5\xa9\xc43\x1f\x8f\\\xc2\xee\xfe^J\x0f)\x1c>\x85S>~.\x17\xf2\xa9\x90\x92\xe8,\x84\xe7\x7f\xf9\x8bFM\xbe\x8a\"\x98G\x11\xfc\x04\x93\xc9\xe4\x7f*?\xe3\x83!\xe1F\xfd\x01 7\x13>\x8cWq\xb4\xfaa\x1eE?\xaa?\x9dL\xd4\xfa\x8f\xcd\xe1\x07\x8e\xea\x83\x98\xc8Y\xf4\xc3\xff\xe0\xb8~\x84?52\\\x87\xef_z\xda\x1d\x19h\xf7WrAF#\x1e\xfc$lC\xde\xcb\x08\x14b\xc9\x0f\xaf\xa2h\xe2\x05$I\x0c\x04\x92C\xe4\x8d\xe4\x1ck\x0d\xd5cPP\xae$\xdd=\x03\xe9N7\xe92\n5\xc4\x93\xa3z\x15E?L&\x13\xb56( \xf7\x83\xf6\x1b\xc1|\x82\xac}\xa9\xca\x91\x9cH\xa2\xbex\xf9\xfe\xf9\xbb\x93\xd3\xb3\xb7\xef~T) \xc8\xbb\x95\x8c\xaa\xefXv\xad'\xe7}\x039_GjJ\nR>\xfd \xfe\xc7z6y\x15E\x7fN&\x93\x7f\xa9?&\xe1\xe6\x0e7Cy\x8b\xb54\xa2\xde\x908Y\x92\x80\x13Y?\x11\x1d \xdb\xa3\xd0\x0c\x81\xcd[\x03\xf8\x10\xae\xaa!\x88\x01\x8a\x0d\"\xbe\xfa\xbf~\x82\x90\x05Z\x06\xd7\x8fK\xc1\xc9\xfcp+\xe8\\\xc8\xe2\xe2\xa0\x01\xb3Mev\x15\xdaCT\x9d\x9au[\xbd>\x9d\x93,\x10\xb6XwW{\x1d&\xd5>?\xbfO\xc4\x0f\xdc\\\xdd\x03R\xd3v\\\x13rNP\xe9\x06\xc9!\xdd\x9d\x95\xaa%\x0c6\xc5\xb9r\xcbYP\x9a\xc9@\xe6\xa90\xdb\xba;\x12~\x8c\xbd\xfd\xbd\xee\xaer\x9dX\x0cY\x9cv\x8b\xc8\x1d\xdc\x9eG\xd1dFb1\xd9\xab\xfd\xcd\xe4\xf3mIEq\xf6\xea\xc4\xa7>\x8a\x8a\xa1\xde\xe68\xb8:\xec\xfc\xe4\xaf\xef\xdf\xfe\xd6\xfd\xcbO?\xfd\xf4\x93\x9a\x07x\xbb\xca\xe7R\xdd\xbe\x0cs#H\x9e\xeb\xb2$\xb7Fb\xba\xc8\x02\x12w\xe3\xdbF#kOUf\xcb\x1d\xa0\xab\x19\xf5\xfd\xca\x80\xb9#\xcd\xf1.tD\xe1\xbd\xa9\x99\x14sq\x90\xfd\xf8\xbf9\xe9>\xe6\xce\x84\xd2l\xab/N\xf7\x06\xc9\xc5\xcfS\xcd\x01\x84x\xe7\\\x06U\x07\xe29\x0b\xa8Zo\x142\xeb\x94\xc6I\x14j\xb7m\xee\x89\x9b\xb38I\xa7b\x85\x7f\x82C5\xe6\xb2\x01g\xca\xe2\xfb#{\x0d\x06\xa0\x1d\xd5mA\xcb\xdbO\xe1v\xd7\xaem\x92a\"gy\xfb\x8e\x0e\x9f\x98\xdfod\xc5q\xfe/9\x85\x7f\xd76\xe0\xf3k}o;\xc9\x93y~\xe0j\xf2\x9a\xe4\x06\x96\xc0%\x0d\x82\xbb\xe7at)3\xf3\x97$\x01\x02^\x96\xa4\xd1\xcars5Y\xfe\x8e4\xe0[\xfb@\n\xcf\xdap8\x03+\x0eWD\xb2twg\x1f\xc5f,\xf8|\x19\x05\xbedr9r\xb9\x95YX\xee\x0f\x90\x1e\xc0nTr\xcbt\xf7#\x860)\x95\xf3\x0f\\\xae\x15$\xdcr\x0d\x15\x1e\xd3\x7f\xfe\xd7?\x7f\xd4l\xa41x\xae\xd9\xa1\x9e\xed\x04\xa98\xca\xc3\xc9\xd1\xe1Q\xd2\x95\xd2.a[Q\xa7,\x0d\xe8\xd32r!\xdcP\xba\xb8L\x01k\xb2`a-NY\x87\xc6\xa9\xb3\xfaP\xba\x0es\xd9Z\xfbs\xaeZ\xba\xe22\x12\xb4q\x10}\x14$\xa4W\xa9)aNs\xfc7\x1e\xfes\xf2\xfd\xb7\xea\xd0_\xf4_\xd4\xbc\xe4\xff\xcc\xbd`$I\xa4\xab\xef\x94,\xe8;y\xc9d\"\x7fW \xfbT^$\xe3h9 )\xac\xa2$\x05*|K\xc2!\xd5\xd1T\xf122\xd8\x10 ca\xfa\xf0\xbe\x8e\x04J\xbf\x87|\xfa\x9d\xcf_\xfcC&\xd4q}Yx5k.4U@\xa8N\"\x99\x97'\x90\xa9v\xe0%I \xa1\xe9\x1d`iR8k\x13\xc8B\xc9\x80\xbe\xf4_]\xb2V\xe6\xb8\xdeY\"n\xf1\x15\x81\xc8w9\xaf\x16\xcbZ\xf0\xae\x14\xba\xf3\xdc\x07&\x9a\xec\x1fwo\xa0w\xa7\xcfs\xfb\xadb\xf8\xdc\xbaT\xc71C\xc8B\x19\x97\xa0\xbe\xf4/\x97]\xd7\xda\x8c\x14\xcd\x14\xf8U\xa1LEV\x8f\xaf\xcc\x06aaJ\x17\x1d~\xa3\x82\xc3X\x98\xde;j\xfd\x9a\xcba\xab1\xf84%,p!X\x17\x82u!X .\x04+\xc0\x85`\xb7\xc1\x85`]\x08V\x05.\x04\xebB\xb0\x02\\\x08\xd6\x85`]\x08\xd6\x85`%\xb8\x10\xac\x0b\xc1\xba\x10\xac\x0b\xc1\xaa\xc0\x85`]\x08\xd6\x85`]\x08\xb6\x06c\x84\xc3\\\x08V\x80\x0b\xc1~+!\xd8\xeert\xb2\xf6\\\x15\x1c\x9d\x9c\xd3\xba\x16l\x1c&[A\xc7<\xcaHr\x11*/\xda \xa7R\x1e>\xcb\xc3\xabeHR\xb8\x82\x16-\x9f\x89\x881\xf2m\xaf\x0f3N\xe0-WxQ(\xce\x8a\xd1|\x9e\xd0\x94\x1f\xbf\x9a\xc3\x85\x9a+;\xa1i](\xb2\xf0\xa9\xec\xab\xf6\xb7\xaa&h\xbb\xac\x93\xc2I\xd0\xe9\x18\xe8 \xa2\x1c\x9f\x8a\x8e\xadCy>\x19A\xca0[\xd1\x98y\xc5\xdf\xc4n\xf3HX\xd6\x83\xba\\\xd2\xb0 |\x16\x96\x8e\xa8\x96\xf9y\"\xb0\x054I*\x12J\xd7M\x96pR\x9fSKz6\xd1\xef\x98\xb8\xad\xd0o\x07y\x03\xb6bX\xea\x8ao\x8b\xb0\xa9*\",\x9d\x94u\x0e\xce\x83\xacY\xd0\n^J\x97D\xfdO's\x08\xe8<\xcd\xbd_,\x95\xe2\xb00\x1a\x85\x7fUn\x10\xd9 \xa7\xf3l\x03\x94xK \xeb\xf5\x17\xa4b=\xae]\xb5\xd7\xd1\xb2\xd6\x82STph$\xae1\x03\xff\x07\x0b}\xe6\x91\x94\x96\x91\x96\x9c\x82\xe2\xc3\x9c\x91\xea\xe8X\xe8\x05\x99\xdf2 \x89\xec\xa5\x0cu\xb5VL\x04Nk\x1eX.\xba\x1b\xa9\x1d\x0dd\x1fN\x92\xd6j\xb5\xa6 \xac\xe8\x98&y\x84[l\xafj?\xf2-7\xc9w\x13[\x84Q\xdc\xf2_\x17\xbb\xb1\xd9\x85\xa4\xcc\xd0\x85\xdd\xaeFW\n\x9f\xd6/\x1dK\x1b\xd3\x0b\x1a7\x90\xea\x965\xff\xba\xbd\xa4\xac\x961\x11\xd3\xee=\xd2\xc0\xc3\xfb\xa0\xb2Fx\x14\xfb4\xbe.\x12\xb4o\xc1\xff-\xefgO{w|\xff\xcf\xbc\x14Q\xf1\x08\x89\xe6\x1ayu\x8b<\xff\xef<\xe8/\xa33\x10\x85\xe5\x83\xb39\x82\xae\xdb\xe4\xb7\x8aY\xdf\xec\xcb\xe4\xaaD\x86^\xe9P\xa96\x1f\xc1\xe8\x8a\xc7\xf8\xb2G\xcfD\xc0\xe5!\xf4\xc9B\xd0g\x1b\xf4\xca5\x10](\x10\x1a3\x0dF\xc83\xe8\x99e\xa0\x8c\xcd\xe2r\x0c\x06e\x18\xf4\xca/\x00\x12\xb4\x1ff) \xc5e\x17\xf4\xc9-\xd0E\xfcP\x99\x05#\xe7\x15\xa0\xb2\nF\xcc)0f\x14\x8c\x94O0$\x9b\xc0:\x97`\x84L\x82\x91\xf3\x08\x0cY\x04\xa3\xe7\x10\xec&\x83`\xf4\xfc\x01|\xf6@\xbf\xdc\x01\x0d\xd1M\x99\x03\xa3\xe5\x0d\xe0\xb2\x06:\xdc\x16j\xf9:r\xc6\x80)_``\xb6\x80&W\xc0h\x9e\x18\xf3\x04p\xf6\xcb\xb89\x02\xa6\x0c\x01\xf3\x98\xfae\x07\x14\x92\xbd\x03\xa1)7`\xc4\xcc\x80\x01y\x01\xdd\xd9<\xba\xac\x80qs\x02\xf4\x19\x01c\xe4\x03\xa0\x02\xda\x86\\\x00t&\x80:hg\x9f\x05\xa0\xc6\xd5\xe9 \x1f%\xfeoC,l\xec\xdfL\x13t\xdc\xbfG\xd4\xbf;\x980R\xc4\x1f\x15\xef7G\xfb1\xb1~-\x15m\xe3\xfc\xd8(\xbf*\xc6?B\x84\xdf\"\xbe\xdf?\xba\xaf\x89\xa1c#\xfb#\xc7\xf55#\xea\xe4\xd4^\x11\xfd\xc2\x11\xdb\x81O\x11\xcf\x1f9\x9a\xaf\x8e\xe5\xf7\x8d\xe4\x0b\x8f@\xd7\xc0\xbb\xe3\xf8\xe3F\xf1U\x07?c\x04_\x15bTE\xef\xc7\x8d\xdd\xf7\x8f\xdc+\xa2\xf4\xbdb\xf4\xc6x\xbc]4\x1e\x1d\x8b\xb7\x8c\xc4\xdb\xc4\xe1\x95Qx\xf5h\xb0\xd1P\\\x04\xde2\xfen\x11}\xef\x9c\xda\xb8\x91w\xd5\xa6\x18\x10u\xef\xf4S(c\xee\xfd\"\xee\xba\xe8\xfa\xf8\xb1\xf5\xe1\x9c\x84\x8e\xabc\xa3\xeaM\x15\x89\xbf\xc7\xd9\xe3\x1ag\x0b\x9b\xbb\xc5)\xc1\xdd\xe2t\xb78+p\xb78\xdd-\xce\n\xfaDZ\x94\xc8\xdc-\xcem\x18)\xea2,\xee\xd2#\xf22J\xece\xf4\xe8\x8b1\xfe\xb2\x83\x08\xcc\xaeb0;\x88\xc2\xd8\xc4a\xfaFb\xb42\xdc\x14\x8b\x191\x1a\x83\x8d\xc7XFdF\x8f\xc9\x98\xa32\x83\xe32\xee\x16\xa7qd\xfd\xe24\x9d\xa8\xdc-\xce>\x11\x1bS\xccf\x9c\xa8\x0d2\x14a\x8c\xdcX\xc4n\x8c\xb7\xe9,\xe37\xee\x16\xa7\xbb\xc5\x89\x89\xec\x18\xa9j\x1b\xdd\xc1\xc7w\xdc-\xce\x16\x8c\x1c\xedq\xb78\xeb\xd07\xf6\xd3\x89\xcc\xdd\xe2\xb4\x88\x04\x0d\x89\x05u\xa2s\xb78;\x1b\xa0\xa2G\xee\x16\xe7x\xb1$w\x8bsp\xa4i\x1c\x9eCG\x9b\xf0\xf1&\xdc-\xce\xf6\xd3\xda\xadSd\xfes\xa3*n\xf1\xb74\xca\x8b\xbd\xce\xa3\xadk;-gxuk\xa7\xf6~%t\x1f\xc9U7s:/\xe6\x88\xa9i\x9et<\x15\xbf\x8bq2*\x1ft\xac\xa8\xd1}\xf1&K\x97\xb2\xd5\xadb\xec7\xf4\xeeM}\xeeuhU6\x16\x04hV5.\x08P\xe81\xf9d\xf0\xb6\"Q\x0e\n\x8c\x01\xa9\x15\xb9\x9a\xae\xe8*\x9a\x96\xf1\x13M\xdc\n\x950\xab\xac\xee\x9b^M\x13\xb6\x98\x8aK\x9b;\xed\xe33\x9dzQ\x92\x8a\xb7vg\x9bth\x06\xb0\xb23>\x9b\x0b\x1a\xb3\xf9F\xf6G\xfd\xa3\x07\x0f\x0e\x9f\\Ww \xf5\xd6G\x0f\x1e\x9e\x1f\x8e\xdf!\"\xea-\xf7\x9eM\xd0;\xdf\xe3\xefN\x9f\xb7\xf0\xb9\x98\xb7\x8by\x9b\x1c\xbe\x18\x9f)\xb8\x98\xb7\x8by+\xbft1o\x01.\xe6\xbd\x0d.\xe6\xedb\xde*p1o\x17\xf3\x16\xe0b\xde.\xe6\xedb\xde.\xe6-\xc1\xc5\xbc]\xcc\xdb\xc5\xbc]\xcc[\x05.\xe6\xedb\xde.\xe6\xedb\xde5\x18#\xfe\xe8b\xde\x02\\\xcc\xfb[\x89y\x1b\xeb;\xceHx^\x86\x91g$ \xa1G\x91\xf5\x1d\x83\xe0Y\xfe}\x19X\x16\xaeY\xf9G!o\x83\x00\xbc\x88K-Nl\x02 \x0b\x17\x01-\xaa%v\xc7\x9d+\xac\xf9\xcf76\xf0\\P\xebf\x04\x81|\x1aF\xab\xde\xee\x0f\xb2\xea\xae_)\xc1\xd0\x1c\xe3|x\x1e\xb1\xeaQa\x02itN\xc3\xdcq \x87^\x94\xa1\xe5\xa2\x8b\x84\xf9\x80T\xe7\xe4\xdf\xde\x9e\xbd|*4\xbd\xfc.W\x99Lx5N\xc24\x17&\xa5'\xa9.Q:\x11J\x03\xab\xbb\xb3\x84-B\x92f1M\xca\x04\x0enN.\xa2E$\xb6\xef\xb6\x16n\x10\xa4`\x93\"\x86[\xfew\xbeAd\xa8\x81\x85[n-\xf7l\xb3\x00\xf7l\xf3\xf7\xf5ls\xa5\x00P\xd9\x0f]8\xf6\xeb\xba\xe9\xdd\xe9\xf3\xf6$\\F\x84\xcb\x88\xd0o\xca\x1d\x04\x13FH?d\x8a\xcc\xc3R\xa5\x8c\x9b\x82\xe8\x1e\xb9\xe8\xfb\x82\x80{\xe4b\x87\xc45?\xcf\xe0\x1e\xb9\x18\x83\x8a\xee\x91\x0b\xf7\xc8\x85\x80o\xfe\x91\x0b\x83\x13d\xffOqB\xd59CrkS\xe9\x08)\\\x1f\xfc\xa0\x87w\x86\xe4Xo\x15\xe4\xb8\xd9\x8e\x10\x95\xe9\xd7\xebT\xa9qg\x18\xcc/\x9d+C\xdb\xd4\xec\xc6\x18\xd3\x891\xb2\x0bC\xed\xc0\xb0s_ Nh9W\xa2Ng\xf9y\xac\xc9\xc8\x05\xb8\x82l\x12\xdcQ\xcc\x1d\xc5\x8c\x96[1>!gT\xa3\x13?\x16c\xf3\xa4\xb4\xe2\x7f\xd9\xf5\xf0\xec4\xac\x18\xd34\xba\x0ci\x9c tkM\n\xbd\xe0\xdf\xbe\x15\x0dKU+\xb4i\x10\x94\xefK\xe5KR\xe4~\x8bp\x18_\xf1\x94y\"\xc8[N\x83K\xefJ`\xd6\xe5w\xa72\xae\xf5\x9d\xff|c\x15r\x9d\xc07C\n\xe4\x8b2`\x1b\x9b\xb5\xb3\x04\xedU\xcd\x9c!\x92n\x8ehC\x17K4Ai\xf9H0\x10\x0d\x10\x84\x03Sh\x07p\xe43\x85x\x00\x87\x06\xbb\ncZJ\x12z\xd9KJlypY\x17\xf6\x01k\xdbI\x02\x86D\x95,)\x89\x94\xa4q\xe6\xf1\xae\xaa@\xbb(I\x1c\x96\x82\x8dso'6\xc1\xd1Q\x9c\xc7\xce\x15\x89\xb8\x15\xbfW\x0b \x82#\xe74\x14g\xd8F\x86 \xe9\xac\xa0+\xa1\xd8Mb\xe9\xf2\xeft\xbb\xa3J\x99iw\xdbj\xe5\x02^\x02\\\xc0\xeb\xbb\nx\xd5\xec\x8a\xf2HU\xe7j~J*\xcfV\xc2\x97\xb0m\x89\x14\xc0\xbf\x15+\xea\x0eT\xee@uC\x0eT\xda\x03KkK\xc8\xd3J\x9d\xfb\xabCL!\xda\xcb\xb3L\xdd\xe8\xe7\xaa\xaf\xbd\x1d\xc6=\xe2\xb8`X\xdfH\x83\x0b\x86\xed\x90\xb8\xe60\x8e\x0b\x86\x8dAE\x17\x0cs\xc10\x01\xdfj0L\xed\xa9K\xa6+\x9a\x12\x9f\xa4D\xed\xa3\xfb\xef\x96\x8f.y\x937iD\xc4\xbc@\x08\xd7\x02]\xe9\xba\x8b\xe9\x82%)\xe5\xa7k\xae\xefKTu\xbd\xdf]\xa6\xaa\xd9Y\xfe\xc5\x8d\xf5\xcb\x15\x13\xbf!\x96d\x9d\x06\x9d\x1f \xccA\xe9j\xccB\x96\x1a\x9c{\xddS\x93\xa0\x9c\xa0\x04\x84\x1b\xcd\xde\x02\xcc\xa4\xaci\x96\xb6\xd8,HZ\xdfg\xc2\x96P\"\x93\xfb\xb2a\\\xd4\x81\xef\x99\xde*\x10/\xe3x7\xed\xb9\x88\xbf\xc9\xed\xfaCu\x1e\xe7\xbf\x94\xb3S\xe2\x13;\xbe\xb6\xe7\x0e\x14\x1b\xcbg\xc9: \n\x87\xb5\xfd\x0c5<\x96\xf7T\x9enr5\x97-\x164\xe1g\x86\\\xb8rN+'kB&\xedgi;*j\xbf\x08\x9b\xbe\xff\xecrf\xdc\x13z\xb8\xee}j\xd4_\x131\xac\x1f\xe8\xe2)<\x17\xa62\x1csQ\xb6\xd7\x893\xd9\xacfQ\x7f\x17\x1d\x9e\xa5dG\xd5\x91\x9d\x8f1\xff[Q?-YF\x97!D!\xd0\xab\xbc\"\x92\x12\x9b\x98\xdd\xf1\xd9\xdb7?\xe6\x85\xf5<\xd5ue\x90\xae\x0d\xb1\xba\xe2\xca\xb9\x1c@\xbed\xdd\xab\x94\xc5\xec\x1a(\xf2\xe1\xdd\x89t$\xf8\x91\x97\x89Z}?D\\\x93\xf3\xa3\xea]oIX\xf8c\xee*\xca\x03^JL\xb5+\xd9,\x94\x16\x0f?/\xc2\xdb\xb5\xfc\xabr\x96\xd3%I\x96\xd73\xd5\x9fI\xb2\x94z&Y\x92\xa3\x07\x0f\x81w-\xc3\x04\xe5\xfc\xd7\x117\xe9D\xe4\xf2\xc3\xbb\x13\xb5\xee=\xe1r4\xcb#H\xb2\x14\xaa\x0c:*[\x88%/\xba\xf1\x99\x1f\xee\xa5y\xd5-=\x950\xe2\xa4j(S\x19\\\x93\xad\xa1\xfe\xe6B\xa7*\xada\xc9\x7f\xbe\xb1\xba\xb4N\x90:| \xee\xd2\xaa7#s\xb8\xc7\x15\xc6|\\!w\x0d\xe5\x1c\xcf\n?V\xc1\xff\x85\xbd\xdc\xd6\xbf.\xcbR\x80\xcb\xb24\xba\xb2\xbf\x9a,K\xd5D\x84\x9e\xa9I\xfa\xfeN\x95\xba\xd2Q\xbaT\xca?:\xa3\xaa\xf9\x9b3\xaav`T\xb9\xc4J\xeb\xcc\x1e\x97X\xe9\x12+]be\x05.\xb1\xd2%V~\xf5\x89\x95\xf2\xc4\x83\xc8\xa7\x94\xe6\xdb\xdby\xc3kP\xf3\x17\xd4\x9f&\xe8\xf4\x19\x14\x08n\x15\xd3\xbd\xa1\x0e\x03\xd51{\xc0iLs\xee7X/\xee\x15\x82&\xd8\x9d\xf3\x11\x0e\xe2\x82+Q\x87\x9b\xfc8\xd3\xe2\xe4\x02\xdc;\x04\x12\xdcY\xe6\x06\x9de\x86E\x87\xaf\xb9\xce\x7f\xa5\xa1\x12\xba\x9f\xd2\xd0\xa7\xf1\x8a\x85i\xf5\xa6N\x10y\xe7\xc9~@R\x9a\xa4jU\xf5\x9a\xa6\xbf\x8aO\x9e\xf1\xefs%\x9d'\x11\x8a\xbf\x83@\xd4\xa9\xa5\x9amo\x15s\xbb\xa1\xbaJ\xccc\xca:\xa2u\x03\xb4\xd5\x80\xdc'\x83\xdfpM\xe2t\x9a\xd0t\xba\xa4\xc4\xa7\x1d\x92\x08L#\x07\xe3\xe89h<\x7f`\x14_\x05`r\xd8u\x05\x1a\x10\xe4\x023\xc9J\xf7\xdc)\x89\xd3\x84\xa6?\x0b\xcam/\xb7\xfcH0\xed\xc9\x8b..\x19\x97Ev\xbb~\xdc\x00\xef\xf4\xb0\x17\x90OW\xe6\x8b\x89\xe9\x89\xf4>\xc3J\x8cR\xfaMA\xcc:\xa0\xd6\x1dp^f d\xbd\xbe\xde.\xcd\xe6c\x01\xcf\xb9h\x0b\x93,\x01\x8f\xac\xa5e&\xb5I\xf1\xe78\x0b\xf2l\xf7u\x1cq\x99\xa8\x1f\")\xd7S\x06\xff\xf9\x7f\x88\x84\xcf;\xba\xdb\x06\xf2\xf0,\xd3\xeb\x83Z#\x10yM\xe5\xa3\x08\xf2\xb5\x01a\xdf\xf1Qi\x10\xe6\x07n\xb2^\x07\xfc\x14\xcf\xa2pO\x93^\x01\"Y\x83B\x1a\x930\x11 \xa7\xb0\"\xde\x92\x85\x1dQ\x1d bt\x9d\x92\xbb\x00\xc4\x92.)[,5\x17v\x10(pr.e\xea\xc2H\x96\xdd\xf8$\xa5w9>\xc5\x97\x01I\xd2\xa9Z\xaf\x150\xe2\x8e\xd6\x0bq\xc0N\x100\xc2\\\x02J\x0f\x16\x80\x9a)\xa0g\x0bf\xfdX~\x86\xd2\x93\x05`\xf8\xa8\x003\xc9\xc1\x86\xec\x80'=R\x9f\xb6>\xee\xd6\xab\x05\x08\x96\xf5\xa2\xd5\x8a\xa5\xda\x92M\xc8\x19\xa1f\x92\x0f\x8cwGE\xfe\xa3\x94\x9a\xb5\x0b\xa9m\xe0?]\xd3\xf0.H\xc0|\x92FqrM\x1d\xb6\xe91\x8f\xc5%\x14!\xbf!\xca\xd2u\x96V\x7f[\xc7\xf4B\x92K\x81M\x84h\xae}\x0e\xa5\xc6\xbc\xa6\xfe\xc8z}M=\x89\xfd\x91;O\xaf\xa9Kz\xc1|\x1az\xf4\x9a\xba+\xf9\xaf2{4\xf6(\x17\xd4QB\xe3\xa9\xe19\xb3\xb1\xc6\xd70\xe6\xa4\xc0k\xe4\xa4ToF G\xeeYy\xf0\xce\x85\x8a\xd4R\x9d\x99\xa3\x9d\xf7\xca\x01\xa3\xb5\xcc\xda*\xbd2RF\x7f\xef\xd3x\xeb\x13E^\x04\x81\xc1\xcab>\xbbJdLH\x84\xc6f\xb9\x91)\x1d\x99\xd2\x8c\xfc\xdf\xb9\x83\xe2ga\xdf\xfd\xe5p\xa2\xb3<\xa5\xef5\x8cRY<\xee*\x81%\x8d\xa9\x08R\x08\x196\x01\xf8;\xdd\x8b)\xfc\x91%)\x90EL\xa9~\xba\x91\xb4\xbc\xe5%\xe79\x8b\x93T\xdb\xbf\xb8X\xb6\xa2$\xccg%\x87~\xbc^\x8b\xfbM~D\x131\xb8<\xbc\xc5Q':\x05\x9d^)\x8as\x9a\xf2m^pK\xbf\xf1\xfa\x98\x08\xe2\xce\xa5QN<\xbe2I1\x8c\xce\x88M\x05*\xedP\x88\x95\x9d\xf1\xbc\xbe\x03\x18\x97\xf1\x8d6\xa5y\xbc\x12\xfcL\x9e\x92\xe8\xf4\"J\xe9\xd4< \xc8Q\x80\xc5H8\x881(\xc4R\x13,\x06\x00\x96\x83\x80\x02=\xeaK\xb4(\xaa\x03\x0d3C\x0d\xfa:\xdc\x85\xf7'\xaf\x7f{\xf9b\xfa\xe6\xfd\xeb\xe9\xd9\x7f\x9e\xbe\x9c~\xf8\xed\x97\xdf\xde\xfe\xfd\xb7\x01\x18N\xdf\xbd\xfc\xfd\xed\xd9\xcba\x18\x9e\xbf}\xf3\xe6\xe4l\x10\x8e\xb7\xa7o\xdf\x1f\xff\x8aDQ\x84d\x06\xd2\x03/\xef\x9b\xf0\x9e-B\xea\xbfI\x16g\x9b5\x95i.|\xedE\x81\x00\xf1\x13\x1aS\x1eK)<%\xa5\xe9\xa1\x95\xd6-P\xae\xe9S\xf8=J\xb5\x1e\x92\x16\xa8\xd7\xe5)\x9c\n\x83\x87\x048t&\xafF\x13zl\x1c\x9b\x93\xaa\x848\xcaB\xed}\xa2:\xd8\x1d\x9b%\xe8bf\xdd`v\x914\xc1R\xd6A\x0fy\x07\xe8\x93}\x05=\x96\x0f\xb0&Y\x1b\xac\xdc.M\xe8A=\xe8IA\x0eH\x07M\x13\xfa\xf0]\x01\xf6[\xa2\x00\xdb\x05\x87\xfe\x8b\x0e}\x17\xde\xd2\xe9\xd3\x04\x94\x0b\xa8 )[\xd1$%+\x83\xd3\xbe\x82\x1e\x04\xc1\xfaS\x9bPz5\xccg\xcf&\x0c\x18!z\xa9\xaa\xc1\xb1\xd0\xa7WvC\xb3\xe3{{y[f\x9e\xd8\x0dk\x97\x14\xebc\x82p\xad\xde,\xcf\xb0\x8e)\xb7\x98\xef\xf0\x7fH'\xe6\x1d\x88pt\x94\x9f\x0b\x83[\xba\xd7*\xa7\x19\x9f\x0b\xce\x0e\xa9\xd9-\xa6O\x85e?\xc3,\x80\xa5\xbc\xb6\x95\xd3\xce\xb2o\x81\xb3\xec\x9deo\x06g\xd9\x9b\xbe\x06g\xd9\xdb\xe9@ \xce\xb2W\x82\xfd\x96(\xc0v\xc1\xa1\xff\xa2C\xdf\x85w\x96}\x01\xce\xb2\x97`/o\x9de\xbf\x0d\xd7m\xd9\x0b\xb18\xbd\x88R\x16.\xa6\xa2\xaa/f1,\x17\xc2N\x14V<{3\xc6c%zz\x8e\x04+rl\xf9\xf3E\x11 \xe2L\xfa2\x0f\x0fU\xc1\xba\"`$\xe2\xcfFd\xe5\xc2\xe4f5\xa4\x97\x11\xc75\x0f\x98\xc7\xf9Gp\xad\x81\xe7\x02n\x88Ne\xd1\xd1)IS\xe2\x9d\x7f\xe9\xb0Um\x06SD\x92\xa9\x04\x8b\xb1\x80\xe5x \x17\x8d\xd4\xb7\xb4\xaa,\xc7\x04=\xc6\x05\x86\x1c\xe4n\xe810\xe898\xc0d1w\x83mns7\xf4\x9c+\x0c\x98/\xe0\xb2\xa3\xbb\xc1R`\xb5\xa1\x10`\xc6L\xean0\xe6Ww\xc3\x97\x1c\xb4\xad\x08n\x03.o\xdb\x1am3\xcf\xbb\x95\xcdm\x8d\x0d\x99\xfd\xdd\x0d\xd8\x9cpk\xc4\x8d\x1cr\xebL\xf1n\xb0\xcd\x1f\xef\x06sVy7\xf4fd;\x8fN\x01\xbd\xbb\xb3\xb5\x99\xea\xa0\xcfa\xef\x86\x11\x06\x8a5\xa9\x9a\x80\xcc\x82\xef\x86/$\xfb\xfb\xf8\x0b`\x18\x91\xc1\xfeh\xd5\x84\x01\x8e\xa3\x02\x06P\x1b\x06R\x1c\xfa:\x94\n\xe8s\xc0nC\xff\x1dY@_\xc6\x81\xe1\xcc\x03C\x19h\x90\x03\xaa\x80\x1e\x8e\xa8\x02\xf0w\x0f\xbaa\x00\xfd\x06\xd0\xcd\xfe\xf6B7 \xee4t\xc3\x97\x986\xfaFA7|\x89!\x9b\xb3n\xd5\x80\xbd\x8aa\x8dXwu\xa3\x1b\xec.tt\xc3\x97 ?\xf6JH7|\x89\x11\x9b/\x95t\xc3\x97\x18\xab\xc5\xb5\x94n\xf8\x12\x83F^l\xe9\x86/1`\xbb\xab1\xdd\x80\xbf0\xd3\x0d\xd7?\xef!\xa7s\xe3\x0d\x1d+l\x16\xb7y\xbaA\x1a\x176$\xefi\x11\xf7\xb5\x84\xbf\xa23\xa8U\xb6A\x01C\x8ct\xfbhX\x01\xee\xf0\x89\x81\x9e\xe2A\x82;|\xf6\xe6\xeb\x02\xfao\xc5\x02\xfa2\x0e\x0cg\x1e\x18\xca@_\xfa\xf0YUc\xb3\xa5\xa0\xa4\x9c\xe9\xd9\xce.0\xdem\xeb\x86A\x1be\xd86)$\xe9t\x1e\x10\xe5+}z\x18\xcchv\x19\xa5M\xb8\x0b\xcf~}\xfb\xfc\x97\xe9\xc9\x8b\xe9\xab_\x8f_[fS\xb6\xa1\x8d\xed\xf8\xd9\xfb\x97\xbf\xe1\x93D\x9b\xd0Ff\x99q\xda\x846\xb2\xdfN\xb0\x89\xa7M(\xd3P\xc7#[\xffS\xb8\x04\xb9\xb9\xfdW\x01Y\xd4^\xee\x94E\x19\x9f\x05^t~\xf2\xa2W|FB)\x06\x80\xc9\xec\x10S\x83m\xe8\x9d\xbd\xd4\x84\xc1\xfbd\xb08\xb6\xc8\xd1\xd8\x86\xd1\x86\xdf/\xe8 \xc1:\x1d\xaa \xa3\xcd\xa1\xd7\x12\x0c9wIx.\x8e;\xef\xd9Bfps\x1b\xad\x08\xf1\x89\x0c\xab\xe2\x02y\x0f\xd4,\x04\x92\xe3\xc7\x1f\xbf\x86\xcdI\xf6\xd6\xbc\x16_f\xdb\x88\xeb\xfav\xa7Iy\x84\xbc$I~,\xcc\xdf&%\xf9]{+\\\x95C\x0eG\x8dJF$\x14}\xdc\xeb\xa1\xf7\xfbh\xfbj.\xf86}\xad\xa0\x1e\x16P\x0f*H\xe8C\x0b \xbd\xe5\xf8 \x012@x\xac\xb3\x99\xfa\xc5\x1c\x1d\xf4&.\x0c\"0\x07\xea\x1f=xp\xf8\xa4O\xd3\x81\x84\x86a\xc4\x06\xf1&\xa1\xb7>z\xf0\xf0\xfc\xf0k\x1c\xfe\x10\x8b\xec4\x9b\x05\xcc\xfb\x85n\x1a>\xbes\xbai\x95\xf2\xef\x81:K\xa8\xac\xe1]s\xfb\xfd^\xca&K\x84\xb6\xe9\xb8M\x18\xb4>C\xce\xf5\xa5\xb7x\x1d\xb3(fi\xef-}\xadc/Fm3\xd8\x9e\x92\xa7\xaf\xcc\xe9)\xd2\x07\x10\xb3\xf7\x16\xed)\xcc{\x12\x14\x06\x10\x15\x86\x89\xf1\x01\xc4\x85!\x04\x86\xa1\x02\xfc\xcb\x0d\xbc\xbf\xe8\xde\x99\xe0\x1eQl\x0f\x11\xda\x03\xd6\xa4\x9f\xd0\x831\xc4\xf5\xb5\x8f\xba\xdfe\x95\x02z\x0e\xd7n\xa8\xfct\x16\x85S|h\xccrTv\xa3\x99m>\x930e!\x9d\xda\x9d\x93\xec\xceG\x16\xe7\"k9o/\xdd\xad\x95\xa5\xe5\nH\xe8!\x06\xadU\xa35\xb1\xa0\x17\xc1\xa0\xaf\"\xecE8\xe8G<\xe8\xaf\xf6\xaew\x98}\x94\xdc\x0e\xd4\xdb(\x8a\xad\x9f\xa4\xedEo;\xb9&a\x80\x02\xbb\x861\xf6SV\x96\x03\xb3\x1c\x92\x8d\x97\xbc\xe7H\xb0\x1ep[\xe7\xea\xaf\\\xa1>\x17\xf7\x06\x8f\xc5\xb5\xc1\xa1\xb7\x19\xf3\"\xa5\xb5\xfb\xb5$M\xe9j-n2\xa6\x11\xacX\x12P\xe2\x03\x91w\x16\x8d\xf8\xe4\x9d\xc6.\x8fj-U\xb8\x9b\xf0FAo\x16\xea&\x83\x03\xb5\x9a\x18n2d\xd2\xc8~L\xb9\x05\x98\xec\x18s\x1e\x8c\x91l\x80\"\x1d\xa0\x92\x11P\x04\x04\xbc\xd6\xb0\xcaAA\xcd\x14\xd0\xb3\x05@g\x90\xe0\xd6\xb3\x00\x0c\x03\x15`&9\xd8\x90\x1d\xf0\xa4\xb7\xcc\xde@\xe5i`220V\xb5\xd1\x96F\xb2\x02\x96\x11\xacr$,\x16\x03\x97\xf7\xd07\xc3\xa1g.C\xcf\xac\x05\xfb\xfc\x84A\x99\x08x\x0br\xac\xec\x02\xab<\x02\xeb\x8c\x01\x0b\xae\xb1\xd8\xc0HK\xa6G\xe78\x0b\x06\x1d\xad\xef1\x02\xc3\xf4mL'lT]\xc4\xc8\x11\x98\xba#\xc6\xb8\x11!b\xe2\x8a8\xb7\x02!\xd96\xe2l\xde!m>9\x88z\x88\xb4\x85A>K\xdaz\xf6\xd0=G*Ag\xe4\xb9\xe7HM\xccY\xc11|x\xf7\xeb~L\x93(\x8b=*\x9e\x17\x95\xbb%\x0b\xd9\xa7\x8c\x06\x1b\xe0[(e\xf3\xe2q\xe8T\x16?T\"\x94O4\xc4\x8c\x04\xec3\xed|\xedW\x82x\xd8\xd7\x8b\x02\x98e\xf39\x8d\x8bE\x9b\xc8\x97'\xe4\xdc`\x95%\xe5\x96\x06\xa26I\x02J\x92T\xddW\x14R\xb8\xbd\x7f\x1b\xbc%\x89\x89\x97\xd2x\"^5\xe6G'H\xe8bE\xab\xb7\xd8?\xbc\xfbu/i\xbf\x82\xda\x041\xa8\xb2$\x93\xbaW\x8en\x9e\x05\xc1\x06>e$\xe0\x14\xf4%}\x8bg\xdf9%\x7f \xb0P\x8d\xe4#\x1f\xca\xfe\"\x8a\x16\x01\x9d\x08\x9a\xcd\xb2\xf9\xe4E&\xdf6\xfd\xf8\xa3\x9c\x89@+_\x9f\x87\x19m\xbf\x10_\x07\x02\x1e \xa3\x90y$\x10{H\xdd\xf3\x0ft\xb2\x98\xdc\xe1\xa4\x15\xd5\x16nOns\xe1%^$\xf1<\xbaN\xa9\xffc\xf7\xb3\xd1\x12NBXsb3\x8f\xde\x81\x94\x92U\x02Y\x92\x11N\x0eY\xb8j\xcd\x02>\xd24\x12\xc4\x98\xb1\x90\xc4j\xcbU<\x82\xb2Y\xd3\xa4|w\x7f\xa3\xeeZ\x8a:`\xe2\x99\xf7,\xa9W\xdcL\xe9\x95X\xea\xe3p3\x81\x9f\xa3KzA\xe3;Z\xab\xe4\xc3\xbb_\x0b\xab\x87\xa3\xe2bZ\xf9\xad\x90\xa0\x14>.\xd3t\xfd\xf1\x8e\xfc\xdf\xe4\xe3\x1d\x88b\x08\xa3\xfc\xd7;\x82\x1b=\x12B$v'\xa7\x88\x1a!M![\xe7%G5\xfd\xd2\xf8\x82\xc6\x924+\xb2N$k\x89\x91\xa7QYwT\xb8\xff\x98|0\x85\xa8\xbdt\xf3(\x08\xa2\xcb\xe4\xa9fm\xff\x0dN\xe6\xd5\x8c8[\xac\xe3\x88\xebZ\xbf\x9c\xb4\xb0\x08\x92$[Q_S\xdf\xf4\xdf\xb8n\xfa\xf9\xec\xec\x14^\xbf<+\x9e\xa8\xf9\xf0\xeeW\xb9\xc76\xe2\xb9q\xb5\xe1\xf0_\xedmq\xb6Y\xd3\x7f\xfe\xd7?\x95\x0d\xf2w\x9a9?H~\xcb\xd5\x88X\xa1u\x1c\xf9\x99G\x81\x84R\x85\xa9\xd3\xd7\xfe\x0d\x8e\xab\xb2 \x89x\x93\x87p\x9aQ\x9f\x93\xdb#\x1e\x97-Qt\x9e\xad!\xbf\x88\x083\x92h\x92\x0b#S\x1d\x95\x0f\xef~\x15c\\\x92\x0b\xc1\x82\xab\xda\x1e\xf2\xe5&\"\xc5\x94\xf8\xbf/\"\xe6\x03 u\xf1\x159@!>b:\x8fbz\xa7@\xc0\xf1\x92\x94\xcdX\xc0\xd2\x0d\x84\x94\xfa\x82\x8df\xe2b\xaf`5]\x9ad\x14r1\x1b.\xa8h$\xf6\xec\x04~\xf8\x90\xd0\xa2r\x12\xa7\x12gO.\xb3$\x7f\x92\x90,t\xb3\x9f\xc5\x94\x9cs\x19\x94#\x9e\xfc\xa8\xe6\xa8\xdf\xa2\x94>\x85\x94\xeb\x90y\x16zr\x87\xf1y\xe4\xb2\xcb\xcb\xe2\x98\x86i\xb0\xa99\xbf5\xe2R<\x994\x9f3\x8f\x91\xc0\xa0\xcbf\xd9\x1cb\xca5\x11\xbd#\x8a\xc9\xb0\xb4\xe84K\xa8/\x8d\xbcb_*Q\xcd\xe8\x82\x85!\x9f\xec%K\x97\x1a\xe5\xb2Y\xd3\x89\xe4\x7f\xb2f\xc9\xc4\x8bV:i\xfc^\xec\xd4\x04\xa2t)\x05E\xd8\x96R\xf0C\xfe\x1a>]\xad\xd3M\xbe\xb5\x7fT+A\xb6X\xa60\xd3\x08%1i\x11%`\xabu@\xb9\x92\x15\x1b\x06\x925\xf5\xd8\x9cy\x90\xd0\x15 S\xe6)2Ew\xf0\xa6z\x1b\xb0V\xd2\x1b.\x8ef\x14\x88<\x0c\xd4\x0c\x9c-;\xa6(\x1c4\x8b.\xd4<\x9d\x93 \xdf\n\x9do\xb0!F\xf6\xf18\xdc|\xacN<$\x04\x12\xcfX\x1a\xf3M\xac\x1ea'\xaaBG\x90 \xcaY\x0fH\xf7\xd2r\xe9,\x14\x8d\x1c\xe1\xaci\x16\xb6\xcc\xbf\xd2\xaaS\xb0\xe6i\xb1q\x026\x13\xc3\xce\xf5H\x02I\xb6^G\xb1\xd0\xe0k\xe2\x9d\xefg!\xff\x1f\xae\xb7%_t\xef\xa0\\\xd1\xab\x0d\x9bh\x0eY*\x05[!\x1e\x12.X\x89\xef3)+`AC\x1a\x93T\x0c\x9e\x9f\xb3\x8aZP\x9d\xf8\xf8x\xe4\x12v\xf7\xf7\xf2\x8ap\xe6\x87\xc3\xa7p\xca\xc7\xcf\xe5B>\x15R/\x08\xfe\xfc/\x7f\xd1\xa8\xc9WQ\x04\xf3(\x82\x9f`2\x99\xfcO\xe5g|0$\xdc\xa8? \xe1f\xc2\x87\xf1\xff\xb3\xf7\xaeMr\x1b\xc9\xd9\xe8w\xfe\x8a|yN\x98\x94=\x9c\xb1\xe4\xf7|\xa1_9L\x91\x94vl\x89\x9c\x97Cjc\xc3\xb1\xd1\xc2tW\xf7`\x89\x06z\x01\xf4\\,\xef\x7f?Q7\xdc\xba.Y\x85\xea\xe1\xac\x94\xf9E\xd44\x90\xa8J\xd4\x0d\xf5<\xf9\xd4\xf7u\xb5}\xbe\xae\xaa\xaf\xec\x97\x9e\x9e\xda\xe7\xbf|\x0d\xcf\xb9\xabO\xa2\"\x1f\xab\xe7\xff\xc0}}\x05\xbf:\xc6p\x97\xbf\xbf\xb9c\xf7\x8d'v\xff\x91\xddd\xc9\x82\x07\xdf\x8a\xb5!\x7fJ\x82\x08\xe5\xcd\xf3\xef\xab\xeatYdM\xe3 \x90,\"\xbfI\xd6qp\xa3\xbd\x0c\x96\xc8u\xa1\xfb\x17O\xe8.\xee\xdb\xeb\xaat\x04O\x96\xea\xfb\xaaz~zzj\x9f\x0d\xba\xc0=w^#\x1a\x9f\x08klT\xb9\x93s\x19\xd47o/_\x7f8\xbf\xf8\xf8\xfe\xc3W\xae]\xb2\xbe\xa1\xba\x1f,\x1f\xed\x0e\xe7\xff\xf6\x84\xf3\x87\xca!\x11\xc7C\xf9\xf2[\xf8\x87\xdd\xd5\xe9\xf7U\xf5\xeb\xe9\xe9\xe9\xdf\xec\x17g\xe5\xfd _\x86\xf2;vr\x11\xf5SV7\xd7Y\xc1\x83\xec\xae\x88+\x84\xd3R8\x8a\x90\xaf'\x05\xf8Tn\xfb\"\x88\x02\x8a\x0e\"\xae\xfa_\xdfB\x99\x17\xce\x06\xee.\x97\xa5%\xf3\x8f[\x11g=\x16\xeb\x0f\x0d\xb8\xba\xef\x97]z\xf6\x90Go\x9aW\xbdj\x93\x8c/K\xcc\x8fzfXR\x9d\xf1\xef\xf7S\xf1\x03_\xae>\x83l0\xdb\xf1\x99P\x89\x06\x1a\x1d\xca\x16b~X7\xb5\x94\xc5\xbd\xfe\xae<\xd8,\xe8\x96\xc9\x90\xad[f\xda\"\x94&\xf61\x9e\x9d=3?J\xcd\x89\xba\xc8\xe2k\x17\x98j\xd1O\xd7Uuz\x95\xd5\xa2\xb2wg\xf7\xa7\xff\xfdTFQ|{\x19\xfd\xd9?EEQ\x9fr\x1f|:4^\xf2\x1f\x97\xef\xdf\x99\x7f\xf9\xf6\xdbo\xbf\xb5\xb7\x01~_\xbf\xe7\"\xd7\x91\x15\x1f\x0e\xd4\"H~\xd7\xed\x1b\xa6\xb7W7\xfb\"\xb3\x08Z\x1f\xba\xe1\xb7\xacX\xbfl9\x01\xb6\xbdb\xabU\xbf\x809\x91\xcbq\x93\xbb\xcc\xb2{3XR\xac\xc5\x87\xec/\xff\xceC\xf7\x8b\xdaL\x18mT\xeb\x97c\xee j\xf8y\xe9\xf8\x00\xc9\x96\x9f\xf9\x18\xd4\x7f\x10\xaf\xf3\x82\xd9\xe7\x0d=f]\xb0\xba\xa9Jg\xb7U;q\xe2\xc4\xd8\x85x\xc3\xdf\xc2\xd7v\xcf\xdd\x0d\x82\x97\xa0\xae\xff&|\x06\x03p\x96\xea\xa9\x88\xe5\xd3\x97\xf0\xd4\xd4k\xc7a8\x95\xb5|z\xe2\xf2'\xea\xf7.\xdbr\x9f\xffGV\xe1\xdf\x9c7\xf0\xfaM\xae\x0f\xad\xe4\xf9Z}p\x8d\xdb\x9al\x0dy\x03\xb7\xac(^|.\xab\xdbR\x8c3\xd7Y\x03\x19,\xf7M[m\x03;\xd7\xb8\xc9\x9f\xc8\x05\xfc\xa4\x1f\xe8s\x8b\xbb\xe2\xf0\x06l\xf9\xb8\xcad\x936?\xec\x17\xd1\x19u;\xbf\xae\x8a\x95\x12\xa1\x15%\x97]9/\xbb\xfe\x01r\x07\xd0\xecJv\x19\xf3sD\x11N\xbb\xc9\xf99\x1f\xd7t\x08\x0f\xb6\x86\xf4\x8e\xe9\x9f\xff\xeb\xcf_9:R\x8a67~\xa0\xbb\xd9\x89Pq\x97_\x9f~\xf3\xf57\xcdSG\x13\x92\xffm\xb3\xcd\x004x\x01\x97\xac\xbe\xc9\x97_\x1d\xfaP\xd7h\xdciP\x89g\xdf\xfc\xf3??\xb3\x83W\xd0\xec\x97K\xd64\xeb}\xd1\xdd=\x1c'\x13\xc1VvF\x90\xd5\x19x\xa1\x1c;\x0d\xc5\xbb\x7f\xe1\xd9\xbd@1|\x9c%\x07o\xe9\xc1\xcf\xe4iQ\x0c\x1e\x0cs\xe7!\x8e\xf4G1s\x9c\x8c\x1c\x8b\x12\xfa\x9c&r\xdc\xf7\xe7\x95\xab\x0f\x15\xa6\xf7\x96 P\xe5\x02\x9c\xac<\xea\xbd\xc3\xe0\xdd{U\xd7\xbd\xa2\xf0\xa9\x1f\x89\xd9\xc9\x93\x86\x13o\x87\xb1\x18\xbb\xab\xaa#\x99v\xac\xec:V`},\x98\xeep\x18*\xa5\x1e*\x9a\xee\x97GG\xbc\xd2\x07\xa3\xb8\xba\x05\xcb\x83\x1e\xe3\xe3\x12!\xe5\xc6\x13\xf6h?\xed\x12UA\xc0\x0c\xe6\xd2P\xf3\xa06TM\x01][\xf0\xcf\x8f\xdde\xa8yR\x1b\xa6\x1di\xf3\x87\x1cB\xc2\x0e\xf8\xd0#\xe7\xd3\xc9\xc5n\xa6+^\xf8\x1aU#TM\xc2e\xab\x11\x02\xd5\xa9\x8a\x87\xd67N\xf5\xc0i<\xbcJ\xcfN\xe5\xe60\x8d\xe6Tu\xc0*,\xa7z\x9e_\x1f9\xd5\x93\x02\xd4\x8dS=\x12\xa9M\x9c\xeaqa\xca\xc2x\x0d\xe14\xe5\x1b-\xe6\xbc\x92\xbe!2\xbd|L9\xdaW@{\xe7\x8dL\x92\xcc\x01\xef\x04\xe3\x0d0\x04\xad\x98?\xde)B\x98\xde\xbc\x12\x8bL\x89\x0e\xc8e\xe4\xbf\xcb\xc0\x9f\xcaM\x88\x7f\xfa\xday\xd8\xf2;q\x90\xb2\xa0\xb8\x15\x05\x0f\x1a\\\xb3\x9a \x82\x8f\x18\xc3N\x01\xfe\xc8\x9e\xd5\x0c\xfe\xb2oZ\xc865c\xee\xea*FSU\xf3v\"\xb6\x18\x9d\xcf\x17\xd4\xc7-\xcbJU+Y\xf4W\xbb\xdd\x1f\xb2\xe6\x1aV\x15\x93t\x12E\xab\xe6\xae\x1b\xd7\x04\xdd\xdeY\x98\x15\xbe$\x807|\xa5?\xda\xa0VTh\xb1(\xcf\x14l>dw\xdb\xe9K\xb6\xd9\xc1}._\x826\xef?\xf8/a\xc3\xf7\xae)\xfd\xe5\x95\xb6\xd2g*.\xc4\xb1\xf8\xfeJHC\x96\x02\x02J\x02\xfah~\xcb\xb04\xb6\x80\x02@`!@\xbbG]\x89\x1e\x8a\x86\x86K(\xd2FG\xf3+\xa3\xa3\xf9\x07FG\xf3\xa3\xee \x12\xcb\x0f\xfbl\x96\xe6\xca\x0c1\x9b\x7f\x8bdl\x81c\x1dD\x8cw\x80\xfe\xb2\xef-\xe2\xf5\x01vI6\xb5\xa0m\x97\xb1ED\x0f\"#\xc8\x0d\xb9A3\xb6\x98v\xa7-\xbcKh\x0b}\xe1\x10\xff\xd2!\xf6\xc5\x07n\xfa\x8c\x0d\xb5\x0546t.\xa6\xb6\x88\x80`\xf7S\xc7\x16\x9c\xaa\xaamF \xd1\xaf\x8a\x8e\xe6\x0f\x8bX\xcc\x12\xe4\xef\xfah~\xb1\xb2\xbf\xc2\xbc\x80\xc0\xf1:t\x9c\xa6\x95\xfd\xc4heO+{\xbf\xd1\xca\xdew5\xd0\xca>l\x0e\x94F+{\xab\x85w m\xa1/\x1c\xe2_:\xc4\xbexZ\xd9k\xa3\x95\xbd\xb4\xf0\xf1\x96V\xf6\x87\xf6\xd0+\xfbG(\x0d\xd9\xb7\xd9\xc7Q\x9e\xa0\xa1'\xb2$\xd8!'\xb4}\xbe\xd1\x00\x11o\xa4se*\xbb\x17\xa3\x96\xd5\xd0\xdeV\xdc\xd7\xba\xc8\x97B\xaa\x92\xb7ZO\x9b\x13\x02\x96\x0b)P\xb9\xc8\x84z\xe6\x97\x86\xad\x065X H\xa6\xd2\x02\xca\x02\x81\xe5\x0154\xb2U\xe0\xaa*\xb0L\x10Q.\xf0p\x90\xcd\x16Q0\x88,\x1c`X\xccf\x0b\xe56\x9b-\xb2\xae0\xa3\xbe\x80cG\x9b-p\xc0\x9a\x9a\x1e\xc0\xbcLj\xb3y\xf9\xd5f\xfb\x92\x85\x0e\x1d\x82\xa7\x86\xe3m\x07\xbb\x1d\xf3\xbc'l\xee`oH\xf6\xb7\xd9\xb0\x9c\xf0`\xc7#\x0ey0S\xdcl\xa1\xfcq\xb3\xf9Y\xe5f\x8bn\xc8a;:\xda\xa2\x1f\x17\xbaf\x1a\x9a\x9b\xc3n\xb6\x04\x05\xc5.\xa9\xc6\x86d\xc1\x9b\xed\x0b\x8d\xfd1\xfb\x050/\xc8\x10\xfei5\xb6\x19\x1bG\xdafD\x1bfF\x1cb7\x94\xb4\xc5|`O-\xbeGj\x8bm80\xbf\xf1\xc0\xdc\x064k\x03J[\xc4F\x946|\xee\x81\xd9f\xc4oF\xdc\xc2\xb3\x17\xcc\x86\xc8i0\xdb\x97\xa86:\xa3\xc0l_\xa2\xc8~\xd6\xad\xdd\xb0\xa9\x18\xc1\x8e]\xa9\x1bf\x0bK\xe80\xdb\x97\x08?6%\xc4l_\xa2\xc4\xfe\xa4\x12\xb3}\x89\xb2\x06\xa4\xa5\x98\xedK\x14\x1a\x99\xd8b\xb6/Q\xe0\xb0\xd4\x18\xb3\xe1\x13f\xcc\xf6\xf0\xf5\x9e\xf3u\xee\xcd\xd0 \xf2\x16\x90\xcdc6\xd71=f\x8b\\\x11\xc7\xae\x84\xff\x8e\xbeA\x83\xd8\x06\xda\xe6,\xd2\xc3\xd10m\xf4\xf1\x89\xb1\xc8\xe1A\x1a}|F\xb7km\xf1]Q[l\xc3\x81\xf9\x8d\x07\xe66\xa0/\xfd\xf1\x899\xe2\xc9l2r\xd8\xe3T\x87\xe6\xcdm3\xdb\xac\x8e2\xaf\x9b\x04\x1d(e\xb6\xd9\x0d-\x8cQ:\xb6\xd8#\xa9\xcc\x16yP\x95\xd9\"\x8f\xaf2[\xf8\xa1Vf\x9bu\xd4\x95\xd9\xe2\xbf\xc2\xa5\xa5:\x16\xcblA\x87e\x99-\x9a\xbd4\xb6\xd9\xfdd\xf6p\x1c\xc0\xd18\xb4d\xc5\x8f\x03\x1d\xa4\x05\xd3\xa1\xc6\x96\xac\x0eQ\xaf`\xcew\x974\xec\xf1`\x11\xae\xf3\x122\xe7\xa1af\x9bS'\xc4\x01cA\xfe\xcc\x87\x91u\xc7\x8e\x05\xf9\xb2\x1dQf\xb3~\x8ch\x18\xfas/b\xde\x8f\x99\xed\xc3\x0e\x93\xd7\x16\xb7\n\x8aX\x01EDAZL,\xa4E\x8f\xe3\xb3\x06\x90\x19\x83G\xf0a\xf4\xda\xa2\x83\x0b\xb3\x02\x0c\xb1\x87\xd4k\x9b\x15h\x98\x17l\x88?\xbc^\xdb\x97-\xfe\x9c\x15\xd9\x11\x0e\xb7\xd7\x96\xe4\x90{m\xa1t\xdc\xb1\xcdz?s\xbe\xebw\xf1\x87\xe0k\xfb\x02e\xd7\xa5\x0e)l\xe4\xc8\x13;\xe6D\x0e\xe93\x82\x19\xddE#\x07\xf3\xc8\x80\xc2\x8c\xa0\xc2\xbca|FpaN\x80a\xee\x00\xfe\xe5\n\x1e?t\x1fm\xe0N8l\xcf\x19\xb4g\xbc\x93\xb8A\x0fR\x0c\xd7\x0f^\xea\xb8d\x15m\x91\xc5\x0d+*\xff:\xab\xca\x05\x1e\x1a\x0b,UXi\xae\xee\xff;+\xdb\xbcd\x8b\xb0\xef\xa4\xb0\xef\xa3\x80\xef\xa2\xe0q>|t\x0f\x9e,\x03\xdf\x80\xb4\x88a0xj\x0c\x0e\x16D\x05\x0cb'\xc2\xa8\xc0A\\\xf0 ~\xda{\xd8b\xc6LrG\x98\xde\x92Llq#mT\xbc\xc3\xc65i3&\xb0\x07(c\xdcd\x15X\xb0\xc0\"\x85\xec\x92G\x96\x04\xbb\x03\x1e\xba\xb9\xfa#\x9fP_\x8b\xbc\xc1W\"mpn6\xa3\x12)\x1d\xe4\xd7fm\xcb\xb6;\x91\xc9\xd8V\xb0\xcd\x9b\x82e+\xc8d\xce\xa2\xd7\x9f\xcci4\xed\xa8\x0e\xa8\xc2\xe6\xc0{\x07z\xff\xa0\xee[p\xa0\xde&\xa65y\x984\xf29>n\x01\x86\x1d\xe3\xe7\xc1x\xc3\x06\xa8\xd0\x01\x8a\x8c\x80\n \xe0g\x8d \x0e\n\xaa\xa6\x80\xae-\x00\x9aA\x82{\x9f\xda0\x0dH\x9b?\xe4\x10\x12v\xc0\x87>\x90\xbd\x81\xe2i`\x18\x19\x98U\xb5w-\x8dl\n\xd8\x86\x10\xc4\x91\x08x\x198\xdeC,\xc3!\x92\xcb\x10\xc9Z\x08\xe7'\xccb\"\xe0W\x90\xa9\xd8\x05A<\x82`\xc6@@\xab \xe8\xc0\xc8\x95L\xc4\xc3q+\x184Z\x1fQ\x02O\xf5C\x96NXT]`\xe4\x08Of\xc4\x18W\"\x04&n\xc1\xb9-\x0e\xb3\xc3E\xdc\xb8|\xeerM\x0f\x1d\xfc\xa0\xce\x0b\xe4\xa1\x92\xe7\xc2\xaa\xff\xe7\xaf\x90\xbf\x1cCg\xfa\xbf{V\xdf\x9f\x1d\x1c\x81\xf8\xe1\xe2\xb5:\xb5\xb7/\x90\x1e\x14\x06\x1e\xc6g\x17\x96\xb0/\xd9\xdd\x8e-y\xa5Y]WuW\x84\xc1=\x89N0\x14\xfe\x0f\xdb\xae\xa3\xb5.\xab\x95\xa1\xb1\xbb\x17\x08\xae\x85\x9e\x12\xdb\x0b*\xc3\x8a\xb5Y^\x18\x86\x1c\xd7\xdcj\x9dS=s\xa9o\x0e\xe5\xb7/\xf6\xb5u\x15\x85\xe8\xf9\xb8\x8e\x03\xf0\n>}\xf8\xf1\xacfM\xb5\xaf\x97\xea\x98g\xd1c\xf6e\xfe\xd7=+\xee\x81w\xa36_\xe7lpF\xb0\x83\x17\"\x8fi\xd0G\x18;\xce\n\xae\xab\xb6ZV\x05\\\xed\xd7k\xd6\x1d\x99z*O\x9f\x90u\x83\xed\xbe\xe9\xba5d\xf6eI\xc1\xb2\xa6\xb5?\xab*\x19<={\n\xcb\xeb\xac\xce\x96-\xabO\xc5i\xce\xe2\xc0\xea\x86m\xb6\xac\xec\xc6\xaeO\x1f~|\xd6\xc0.\xb3\x9c\xb2\xccM\x14\xaa\x93e\xb2?\xb55\x9c\xa5-\xe2\xab\x1e%\"\xf9\xe5\xc3\x978\x95d\xb9d\xbb\x96\xad\xbe:\xb5\x1c\xaf\xcd\xed\xbc\x84\x1d\x0fv\xbed'\xd0\xb2l\xdb\xc0\xbe\xd9g<\x1cR\xbcj\x97\x17\xbc\xa4\xf2\xd8]\xb8\xca\xcb\xac\xb6\xaf^\xc5A(\xf7;\xa6N$i\xaf\xd9\xbd\xfd\xd1r\xa8\x83\xbc\xe5_\xdb\xfbf\xa8\xba\xd9\xb2;\xf1\xaa_\x95\xf7\xa7\xf0\x87\xea\x96\xdd\xb0\xfa\xc4\xb92\xf9\xf4\xe1G\xbd\xf2Q\x07\xa4\xdb\x1f,FP\x06\xbf\\\xb7\xed\xee\x97\x13\xf9\xdf\xe6\x97\x13\xa8j(+\xf5\xeb\x89h\x8d\xcb\xac\x84j'\xcf\xe5.\xec\xd5\xe6\xb3\xd0~\xa7dG\x1d\xcfe\xf5\x8d8\x98=ka\x9b\xed\x1a\xd9\xb4D\xc9\xdb\xaa\xd3\x1e\x15[\x80\xb9<4%\xb3\xef\xd4\xad\xab\xa2\xa8n\x9b\x97\x8ew\xfb\x8fp\xbe\xeek\xc4\x9b\x85>\x0f\xbf\xab\xb4X\x154\xcd~\xcbV\x0e\x8d\xd3\x7f\xe4s\xd3\x1f>~\xbc\x80\x1f\xde~\xd4\xc7\xd4|\xfa\xf0\xa3\xecc\xe2\xf0w\xc7\xe2\xe1\xe0t\xe5\x8f\xf7;\xf6\xe7\xff\xfa\xb3\xf5\x06P\x07\xb4\xe7\xa5joj\x1a\x11ohWW\xab\xfd\x92AV\xca)\xccNa\xfbGx\xd5K\x834\xe2\\\x9e\x8c\xc7\x8c\xadx\xb8\x97\xd9\x92\x8f-U\xf5y\xbf\x03\x95\x8c\x08WY\xe3 \x18V>-\x15q`~U\xc3uv#\x9a\xe0v\xd0\x87V\xb2\x13e\xbaJ\xfc\xdf7U\xbe\x82\xacta,\xb2\x80b\xf8\xa8\xd9\xba\xaa\xd9\x89v\xc0\xfdfm~\x95\x17y{\x0f%c+\xd1\x8c\xaeDr\xafhj.\xaadU\xf2a\xb6\xdc0q\x93\xe8\xb3\xa7\xf0\xfcS\xc3\xb4z\x12\x8f\x12o\x9e|\xcc\x92\xed3+\xb3\x8d\xab\xf6W5\xcb>\xf31H9>\xfd\xca\xde\xa2\xdeU-{ -\x9fC\xd6\xfbr){\x18\xaf\x87\x1a\xbb\x96\xfb\xbafe[\xdc\x0f6\xc0\x1d\xc3\xa586i\xbd\xce\x97yVx\xe6\xb2\xab\xfd\x1aj\xc6g\"v\"\x04e\xf2V?t\xdf\xb0\x95\\\xe6\xe9~iuu\xc56yY\xf2\xca\x8a\x93\xfe\xed\x05;<\xfb\xdb5\x1a_\x8a\x9e\xda@\xd5^\xcb\x81\xa2\x9c\x8eR\xf0\\.C\x81mw\xed\xbd\xea\xda_\xd9'A\xb1\x1a\xbdr\x0cJ\xa2\xd2\x02)\xc8\xb7\xbb\x82m\xbb\x13\xde\x9b\x1d[\xe6\xeb| \x0d\xdbfe\x9b/-lQ\xd1Wg,\x81\x10\x1f=\xd8U\xd2O|8\xbab\x90\xc9\x0f\x82\xc1\x02\xe7`\x1d\xa3\xc5\x83\xae\xaa\x1b{\x9bV!P]\xc1x\x0e\x1b\xa2d\xbf\xbc*\xef\x7f\xe9\xbfz\xb2\x12\xb2\xfa*ok\xde\x89\xed%4\xba\xd2sDVT\xaa\xe9Af~\xb5|t\x16\x13\x8d,\xe1\xd5xY8Y\xfeu\xab:K\xd3\xbc\xd0\x1d\xa7\xc8\xafD\xb1\xd5<\xd2@\xb3\xdf\xed\xaaZ\xcc\xe0\xbbl\xf9\xf9l_\xf2\xff\xf0y[\xb6\x0bs\x0fR\x13\xbd}aS\xada\xdf\xca\x81M\x0f\x0f\x0d\x1fX\xb3\xd5*\x97c\x05lX\xc9\xea\xac\x15\x85\xe7\xdfYZ\x0f\xca\xe8\x8f\x97G\xbeB\xf3\xf3\xde\xdee\xbc\xf1\xc3\xd7/\xe1\x82\x97\x9f\x8f\x0b\xaa*\xd9P\x14\xfc\xf5?\xfd\x93c\x9a\xfc\xbe\xaa`]U\xf0-\x9c\x9e\x9e\xfe\xab\xf52^\x98\xac\xbc\xb7_\x90\x95\xf7\xa7\xbc\x18\xdf\xd7\xd5\xf6\xf9\xba\xaa\xbe\xb2_zzj\x9f\xff\xf25<\xe7\xae>\x89\x8a|\xac\x9e\xff\x03\xf7\xf5\x15\xfc\xea\x18\xc3]\xfe\xfe\xe6\x8e\xdd7\x9e\xd8\xfdGv\x93%\x0b\x1e|+\xd6\x86\xfc) \"\x947\xcf\xbf\xaf\xaa\xd3e\x915\x8d'@\xb2\x88\xfc&Y\xc7\xc1\x8d\xf62X\"\xd7\x85\xee_<\xa1\xbb\xb8o\xaf\xab\xd2\x11\xb4\x92\xe7k\xf5\xc15nk\xb25\xe4\x0d\xdc\xb2\xa2x\xf1\xb9\xacnK1\xce\\g\x0dd\xb0\xdc7m\xb5\x0d\xec\\\xe3&\x7f\"\x17\xf0\x93~\xa0\xcf.\xee\x8a\xc3\x1b\xb0\xe5\xe3*\x93M\xda\xfc\xb0_Dg\xd4\xed\xfc\xba*VJ\x88V\x94\\v\xe5\xbc\xec\xfa\x07\xc8\x1d@\xb3+\xd9e\xcc\xcf\x11E8\xed&\xe7\xe7|\\\xd3!<\xd8\x1a\xd2;\xa6\x7f\xfe\xaf?\x7f\xe5\xe8H)\xda\xdc\xf8\x81\xeef'B\xc5]~}\xfa\xcd\xd7\xdf4O\x1dMH\xfew\x97\xd5\xd9\x96\xb5lH\xb7}!F\xde\x97\x8a\xaa3p\x91\x97/\xa7[\xd95\xfb\xeb>\xaf\xd9\xea%\xb4\xf5~\x18t\xcb\x07\xb5\x89x\xd1f\x9b\xd1\xd3/Y}\x93/\xb9\xb3\xb3e\xd5l\xab\xe6\xec*k\xd8Y\xdb\x11\x04\xcfn\xbe\xbebm\xf6\xf5YY\xad\xd8\"/\xd7\x95\xbc}\xd3g}6\xfb\xed6\xab\xef_\xc2\x0f\xac}W\xad\xd8y\xb9\xae\xe0\xaf{Vk\xdcAm\xdc\x00w!\xf4\xa6\xf4XY\xed\x98\x8c\xf4\xf9jt\xf7\x13]a t\x0dJ\xfc\xec\x9b\x7f\xfe\xe7gv\xb4\x0c\x9a\xfdr\xc9\x9af\xbd/\xba\xbb\x87\x03s\"\x9cL-H\x16\x93\x98\x0c\xcd\xea\x15\xbc \x92\xfe\xe8_85\xcb\x9d\x0f\x00\xefC\xc4\x15\xdf8\xa0r\xc4.M\xdf\xc4\x9c\xa2\xd9\x1e\x19\xf2t\x0fr\n\x87\xa7y\xcc\xf8\xcd[xh\x9eG\x15y\xd3\xb2R0%\xa2\xee/Y{[\xd5\x96\x88z\xeeE4)\xeb\xbd\xcb\xeb\xac,\x99 hE\xdc\xec\xdd\xd3\xdbVe\xfe\xd9\xc6y\xf38\x17[\xa3G\xeb&\xed\x9d\xef\xa0\x1co\xdd\x01\xea\xdd\xd2\xcf\x8dq\xf8\x19(\x9a\xdb\xc7\x85\x19\x83\x8e\x98\x86bb\x9f\xedv\x8b\xe8\x9b\xe74\xc7M\x8e!\xd0Zo\xbf\xda\xe7\xc5j1\x9e\x0f\x03n\xdfT\x98\xe1\xd9\xf3\xf4\x15\xdb9\x9fn\xa7\x05:)\x81\xde6\xefk\x0c\xea\x9a\xacu\x921\x11\xad^\\&\xa9k\xdbj\xb5/\x98\x1b\x9eG\x1c\xd2\x11\xf5P\xe5\xd7z}\xe3\xe6%\x86=sy\xcd\x96\x9f\x9b\xbdy\x9d\xdf]\xf5\x93,Y>\xf8\x88\xe4\x8b\xe0\x9feI\xcf\xcd\xa2\x9cr\x89\xb6hV\x9fg4\xbe\xd1\x8ai\xf0\xbc\x83\xb2\xf0\xff\x19,\xca:&T\x07\x0cX\xbd\x9aXU\x07n:B\xd5_\xf7\xaci\xc7\x8f\xed\x18T\x93\x15\xa16\xa2RI#*\x15Q\xa9z#*\x15Q\xa9z#*UKT*\xb3\x11\x95J\x1bQ\xa9\x88JET*\xe4*\x89\xa8T\x9d\x11\x95jhD\xa5\"*\x95\xc1\x88Je\xbc\x86\xa8TD\xa5\xb2\x18Q\xa9\x88JET*\xa2R\x0d,\x05\xad\x85\xa8T\xc2\x88J\xf5[\xa1R\xc5\xd3\x98\x9a\xfbr\x99\x97J\xd5\xc4Bb\xba\x94\xd7t\x1c&\xc1[R7\xda\xa8K\xea\x1e\xf5\xeb\xa3e.\x8d\xaa?4\xe9\xeb\xaa\xaa\n\x96\x1dn\x04u\x9b\x08\x86\xdf\xbd\xc8\x9f\n\x0dJI\xa1G\xfe\xc6\x01\xd5F\xc0\x9f4\x02\xfe\x08\xf8\xeb\x8d\x80?\x02\xfez#\xe0\xaf%\xe0\xcfl\x04\xfci#\xe0\x8f\x80?\x02\xfe\x90\xab$\x02\xfe:#\xe0oh\x04\xfc\x11\xf0g0\x02\xfe\x8c\xd7\x10\xf0G\xc0\x9f\xc5\x08\xf8#\xe0\x8f\x80?\x02\xfe\x06\x96\x02\x84!\xe0O\x18\x01\x7f\x04\xfc\xf5r\xe0\xacm\xce\x8a\xaceM\xebD\x01\x7f\x14\x97t\xe7#]\xb2\xb6\x03\x04\xe5\xdd\xbd\xc2\xf8\x8b\x86\xb56`\xf0\xd0\x8d\xba\xf0\xd1b\x84\xf2\xf8\x07\xdb\xe11\xce\x9d\x07\xd7Y\x1f\xae\xd3\xe6\xda/\x802y\xb2\xb1\xbd;,\x9e\xa3\xdb<\xa5\x03D \x01\x81\x85\x01\xa6\xa8\xd20{*\xdaBq1\xa73\xf3\xe6\x88\xe3[!5>\x06~\x8c\x0c\"p2w\x05\xb2\xf6\x1a\x8d\x95A*\xbc\x0c\"13\xa7C\x1e\\4n\x06\xf3\xb13\x08\xc6\xcf\x9c\xae\xd4\xbe~\x10\x86\x06\xa9q4\x08\xc4\xd2 \x14Os\xb7\xec\x0ek\xc3bj\x90\x1aW\x03\x1c\xb6\x06)\xf15\x98\x8d\xb1A\x1c\xce\x06\xa9\xb06\x88\xc2\xdb\xdc\xdd!k\xd8\xca\x8f\xb9\xc1qp78\"\xf6\x06\xc7\xc1\xdf \x10\x83\x838\x1c\xce7\x04\xe3\xb08H\x8b\xc7A\x00&\x07\xe1\xb8\x1cD`s\x88!\xf3+\x04>\x07)0:\xf0\xe1t\x80_\x9e!\xf0:\x08\\\xc5\x05\xe3vNo\x02\xd3C`w\x10P\xca\x84\x18\x1e\x04\xe1x\x90\x1a\xcb\x83H<\xcf\xdd\xae\x1a?\xa6\x07\xf1\xb8\x9e\xd5\x1f\x7f\xa2\x0f\xdb\x83d\xf8\x1e\xe0a*\xc0\xe0|\x10\x86\xf5\x81os>\x12\xf3\x03\x84_\xc7\xfe_\"\xfc\x0f\xa2\x82\x8b\xc7\x01\x01Q\xcb\x08<\x10b1ApG5\x1d6\x08x|\x10\x90\x18!\xa0qB\xc0E=\x1c/\x84 \xcc\x10\x9c\xb8!\xa4\xc2\x0e!\x14?\x84\x99\x18\" \xc2\x1b\x80%\xc21\xf0D\xc0\x94\xd1\xd1\x13\xd2a\x8b\x80\xc1\x17a\x06\xc6hu\xc8/t\xe1\x8c\x90\x1ak\x04/\xde\x08\xb1\x98\xa3\xd5\x9b\xfcFu\x7f\xae#\xb0GpB$\xe0\xc4 !\n\x87\xb4\xbar\xe2\x93\x10\x8bQZ\xbd\xc9u\xa0c\xd7,\x1dV (\xbc\x12\"0K\x08\xc3-!\x06\xbb\x84`\xfc\x12<\xb3\xad\x07S\x82\x00\\ \x8beB\x0c\x9e \xa1\x98&\xb8+\x1e\x83mZ\x9d\x0d\x90Cl\x97\xc1a\x9c\xce\x0eQn\xdc8'\xa4\xc5:\xc1\x87w\x82\x1b\xf3\xb4\xde\x13\x8b\x85B\xc2\xb6\x1b\x80\x89B\x10.\n\x03ltl7U\x9b\x97\x9b\xc5\xae\xba\xb5I#\xa3v&\xfc\xa7\xf7\xef\xeajW5\xac^\xec\xea\xbc\xaa\xf3\xd6\x83\x88\xcdz\xdaX\xbbT\x03\x8aF\xe5R#8\xabm\x97m\xf2R\xbc\x8b\xc3\xc2\x8e\x9e\xd1_(\xf7\xb9\x99\xd8\xa3\x18\xfcU?\xce\x84\xc7Jk]@\xa0G\x94\x99\xdd\xb5v\x8c\xd1\x1bO\xef\x8e\x92\xd2\xa2\xfd\x1f\xdb\xfe\x8c~\xbe\x0e0\xff\xa7\xda\x8e\xcd\x9aF\xee?_d\x1b\xf6Aj\xb8\x9e\xca\xdf-\xce\xfe\xbag\xf5\xbdp\xc3\xdd\xf2\x182\xd8VM\x0bLlj\x8a\xddP\xc3\xadm\xd5f\x16\xf4\x13\x1d\x00\x87j\xbc\xef`}\xf1xQ\x7f\xf1\x8fr\xbf\xbd\x92\xbbe:\xb5e\x90Ga\xdbO\x19\x86hY\xed\xcbv!\x9c\xd9\x86\x9e\xdb\xac\x81\x86\xb5'\x90\xb7\x8dF\x11\x1a\xd8\x97\xb2\x01\xae\xe4F\xe9m\xde\x8c\xdf\xa97\x0d\xf7\x90\x88\x80\xca\xc8\x9d8\xea\xf2s\x87\x8e\xe8\x88\xf3\x89Qz.\xa5\xe7\xf6F\xe9\xb9\x94\x9e\xdb[RZA\x08\xa5 \x88N@\xe9\xb9s\xa9\x03\x11\xb4\x81$\x94\x81p\xba\x00\xa5\xe7\xce\xa1\x07\x84P\x03\"h\x01\x94\x9eK\xe9\xb9\x94\x9e\x8b\x85\xf5\x93B\xfa1p>\xa5\xe7\xda.\xf3\xc2\xf6\x01\x90=&\xf94\x04\xaa\xa7\xf4\\J\xcf\xc5\xc0\xee\x94\x9e+l\x0e\xb4N\xe9\xb9&O^\xf8<\x16:\xb7\xce\x0d\x94\x9e{h\x94\x9e\x1b\x01y\xfb\xe1\xeeP\xa8;\x00\xe6\x0e\x86\xb8\xc3\xe0mJ\xcf\x0d\x83\xb0)=\xb7\xb3\xdfez\xae\xeb\x88\xf3\x1e4=\xfd\xcc\x86\xb3\xe0\xe8cr\x82E*\xf01SCh\xcd\xda}]\x8aM%\x85\xaa)\xd4\xb5C*\xc5V\xd0f\xb2g\"\xa0G\xde\xed\xdd\xe8\xe3)\xbc\xe7\x13^U\x8ao\xc5j\xbdnX\xcb?\xbf\xc6\xc5\x85\xc1V\xf6\x04Z\xce\xcb\x97\xf2Y\x83\xbf\xf5\xa7\xb6\xaf\xb3b\x84hY6 \x8c\x1b\x03\x86 \xca\xf2\xd9\xe28\xf9(W\x95\x11\xa1,\xf7[V\xe7K\xfd7\xd1\xdb\x96Y\xc9\xeb#wE\xaeY\xa9\x03\xbf/\xbb\x8d\xa8\xc9\xf2\xf3\\x+X\xd3\xf4!\x94[7\xfb\x86\x87\xfa3\x0b\x8c\xe7\xd8\xfd\x91\x83;A\x84\x0d\xe1-\xf2m\x8e\x8d\xae\xb8\xb6c!X\x80b\xb9I9l\xc1\ns\xdd\x17\x13\xf0RnI\x0c\xfft\xbe\x86\x82\xad[\xb5\xfb\x95\xb7r8\xd4\x8bF\xb1\xbf*;\x88|\x08\x8f\xf3\xd5=\xb0ly\x0d\xd9n\xf7\x05\xa38\x84\xbb\xfb\xfb]\xb1\x1c\xdc\xc1#*Zh\x05m\xbdg\xc0\xff\x91\x97\xab|\x99\xb5\xacCZT\x04\xc5\x85\xaa!\x0d\xdd\xe5\xe5\xb2\xd8\xaf&K\xc2L>\xa5\x83\xba&oL\x00\xa7\x83\x1dX>t\x0f(\x1f\x93\xc1\xe5\xd3y3y[\x93*\x88Ut\xcd\x1a\x85p\x8b\xee\xd5\xf7G\xde\xe5NUo\xca7eUO\xf6\xafuo\x1c?BFf\xee\x8b=\x94\xf3\xb6 }\x1b^m\xcdnX=r\xeaz\xad\xea\xea\xe9+\xcd\x07D\x8a\x9a\x99\xfb\xc8\xc8\x0f\x7f\x06+\x05\xe6W\xd5+V?T\x08\xec\xc2\x13\xcf\xc2\x94'~\x95\xc2\n\x7fS:\x0f\x16\xf1 #\xbbB\xcbO\x8c\xa8M\x90\xb5\x90\xc1&\xbfa%H\xd76%\n\x93\xcf':J\xa4E\xa1\xad\xfd\x02\x94\n\xd2\xa2pX( \xc4\xe9\xcc\x8c\x0486\xc6R\x93A\xc0O\x08\x81\x08R\x88\xbb\x02\xa4E\x11K\x14\x81`\xb2\x88\xd3\x15iQ\x90\x16E,\xa1\x04\xe2H%\x90\x8aX\x02Q\xe4\x12ww -\x8a0\xb2 \x04\x12N \x8et\xe2\x1b\x82q\xc4\x13HK>\x81\x00\x02\n\x84\x93P \x82\x88\x82\x182I\x8bBZ0I\xc5\xe9\x8d\xb4(H\x8bbbi\xc8,\x80\xe7d\x00\x86\xd4\x02a\xc4\x16\xf0!\xd1\x91\x04\x17@\xf8%-\n\x87E\x11`\x80\xb4(\x94E\x91c \x88 \x03\xa4E\x81!\xce\xc01\xc83\x80)#iQ\xa4%\xd6\x80\x97\\\x03\xb1\x04\x1b\xab7\xd2\xa2\xc0\x11r\xac\xdeH\x8b\x02I\xd4\x81`\xb2\x0e\x90\x16\x85\xd1b\x88\x0d\xfa\xc9\x07}\xe7\x98/\x02\xd0\xd8G\xf2\x0b\xf1{7n\xcb\xcb\xbb\x1c\xa1\x81G\xd8V\xab}\xc1\xcc#\xf7\xe0:\xe9\xf0\x89\xae\xde#\x1d\xb3\x87a\x19\xda\x98\x9f%\x831|\xd9}{\xd21\x1a\x87\xa57ggrw\xa5\x9ep\xd9fw\xf6\xbe\xe6\xe8\x0dWY\xc3\x16\x9d\x90\x9e\x8b\xbe\xe0sT\x95\xfb&\x89\xa7\xd1\xcc\xb6`evU0\xa7\xa7CVko6\x8a/x\xbf\xb2D\xa7\x91m\x145\xcf\xa9\x99Mu\x93\x0f\x17\xaf'\xfehV\xa3Y\xed\xc1g\xb5\xb8\xe5\x7f\xbf\x8b`B\xab\x04\xcd;o\x9a\xbc*\x1d\x0b\xff\xeeC\xfeuwu7wd\xcb\xe5~\xbb/\x84\x94D\xefLt\xa4\xcc\xc3v3\xb8U\x97=\xda\x19\xa4\xaf\xa1g\x16\x19\x84b8\x93\xc8?\xe7J\x03\xaa\xdfl\xac\xd9\x92\xe57\xcc\xc0\xac\x999\xa3\xd8\n\x0b\x9e\x8e\x05>\x02\x9b\xa7\x83\x81\xb7t\xd2\xbc\xd45D_\xf1\xa1p\x80s\xe3\xdf\xa8\x93\x16\x8c\xc89*\x8f\xa5\xabE!sVoH\xaaZ\x18Bg\x93\x81\x15\xc3\x94\xa1\xab\xa3&b\x93\xaf3\xd3p\xd4\x7fkv\xb7\xd0\xa4<\xfe\x8d&\xe5#L\xca\xaeO\xcd\xdf\x07$\xe5Y`T\xfb\xb6i3\x91\xf7\xb6\xf0\x93\xee\xbb\xae\xfd\xbe\xbfmJ\x96\xd1(\xbf\xd8\\<\x08\x8e{\xa5q\xe8\xf6\x89\x8e\xd3#]qx\xb82Q\x0b\x03\xabO\xa0U\xc1\xd4hU0\xb1\xb0U\x01\xa0B\xe8\xea\xf6\x03\xf2\xfa`,18y\xbe/_\xe8\xfd\x86\xf2+\xdd\xc8M\x15\x99|\x9c@.\x96\x01e\x93\xdf0\x99\xdf\x9b-?\x9fH\xb5\xd3\x06\x1a\x11>h\xb227\x1e\x1b\xb9\xbcf\xcb\xcf\xe1){\x8e*{WF\x13\x7f\x06\xb5\xde\xc9B\xc9\x10V\xda\x9c\x97F+&Z1=\xae\x15SSd\xcd5C\xad\x92.\xe5\xa5\xdd\xd2H\xdc\n\xecF\x8e\x96k\xfc\x0e\x8cr\xf4D\x87\xe0\x91.\x86Th\x1eG\xe7\xea_\xdd\x8e\xd5y\xe5\xc9\x14Du\x13\xc7\x11#k!3o\xdb\xca\xf1>\xc5?\x07\xc3\xa45\xbc\xe5\xadh8\xfb\x0eg\xccAC\xb3\xc8I\xaa\x93<\xf2F,?\xf2\xa5\x90~i\xaf\x95xL\xd3V\xb58 \xc6r\xb78\x1e!o\x84.\xb7\x16\x1c/\x96b\x9b\x11\xb2\x1d\x7f3u.\xfe\xbd\xd5r(M+\xd4\xb3\x8d\xde\xc4J\xcc\xb8\x12\x90k\x81\x9e\"\xacE\xf0\xb3\x9au\xd8E\xa9\x84 3U\xebk\x8b\xac|\xb5\x14\xb2\xdb\xbe\xec8\xd5\x86\xc7yI\xeao\xb8M\xc19\xe7\x0eI8k\xa0\x083Za$\xdd~\xa4s\x87\xe8\xdc\xa1\xa8s\x87<[\x88j\xae\xf2\xae\x92\xfd\xfb\x87z\xfa\xa4\xb5\xb04Z\x0b\xd3Z8z-\xdc\x97\xbci\xb3Z\x1c\x1bx \xd5\xe8Z\x85L\xee\x1aUB\x1f\"\xd3]\xa4T \xfb\xbaL\xfb\xba\x9aQ\xa7\xf5\x0b\x15\xd9:x\xa1\x1e\x019)\xf0u\x84\x8a+\xe5\xb0GZmR\xc8\x0c\x0b#)d\x1e1\xb8\xfe6J\n\x99)\xa2H\n\x99\xa4\x90)\xec\xb7\xa6\x909\xa5\xd8\xb2\x9b|\xc5\xca%\xeb6\xf0\xf4\x1f\xec;t\xaf\x8a\xe2\xad\xba\xa8gJ\x15\x05\xe8;\x8d\xbbq\x83\x9b\x9e\xe8\x1a>\xd2\x8d\xb8q\x04\x86\xf6w\xb9\xb4\xc7\xed\x8f\x01\x9d$J'\x89Z\xaf\xa4\x93D\x85\xd1I\xa2\x87F'\x89\xd2I\xa26\xa3\x93D\xe9$Qat\x92\xa8\xbdM\xd3I\xa2\xd2\xe8$Q:I\x94N\x12\x15F'\x89\n\xa3\x93D\x85\xd1I\xa2\xd2\xe8$Q:I\x94N\x12\xa5\x93D\xa7\x86=\xd5\x91N\x12\x15F'\x89\xfeVN\x12\xedm\xf4\x85\xa8\xf1\x0b\x85G\x8d\xc1\x99\x83\xefk\"\\\n#\xc2\xe5o\x94pi\xceP\x1a\xc0\x91\xf1\\\xcb!\x10\xfa\xe1\xe2\xf5\xb4\x12\xc4\xba$\xd6\xa5o_\x12\xb3\xb5\x07\x04\xcd\x124k\xbd\x92\xa0Ya\x04\xcd\x1e\x1aA\xb3\x04\xcd\xda\x8c\xa0Y\x82f\x85\x114K\xd0,A\xb3\x04\xcdJ#h\x96\xa0Y\x82f \x9a\xb5\x19A\xb3\x04\xcd\x124K\xd0\xec\xc0R\xc0d\x04\xcd\n#h\xf6\xb7\x02\xcd\xba\xc4\x0f(\xa1<,[\x97\x12\xca\x8f\x18\\\x7f*4%\x94\xa7\x88\"%\x94SB\xb9\xb0\xdfjB\xf93oF\xf9\xd9\xaf\xfa_\x8b\xeb\xac\xb9v\x9d&\x7f\x90_\xdeq\x9a\x04B\x03U\xd9\xff\x85\xfb2\xa6\x9c\xffV\xf2\xcd\xa3\xf8R\xad\x93\x9b\xe0\xdd\x96\xc7\xeck'g%\xe08 1\x8c\x047\xf3 \x8aw \x1eaq\xe8e\x1d$\xe0\x1cD2\x0e\xac8-\x8eo0\x8bm\x10\xc55\x80\xac0\x1f\xf7\x0fX\xa6A\x0c\xcf\xc0\x85\xfe\xa1X\x06\x899\x06(\x86AB~\x81\x97]\x90\x88[0\x87Y\x10\xcc+H\xc0*H\xcc)\xf00\n\x92\xf3 \x8e\xc3&H\xce%\xc03 \xe2x\x04\x8e\xa0\xfbX\x04\xc98\x048\x06\x81a\x0b\xc3>\xbe&f\x0f\xf8\xb8\x033\x99\x03\x0e\xde\x80wy\xe2\xe5\x0c\xe0\xd6/i\xf9\x02>\xb6\x80\xbfLqL\x01=\xb2\x1b\x1c\xfax\x02 Y\x0238\x02ff\x8f\x8b!\x90\x96\x1f\xe0f\x07\xa4\xe0\x06\xa0\xc0m\x0f/\x00\xcd\n\xb0\x03x\xe1\x8c\x00\xbb/\xe3fy\x12.@H\xb0\xb0<\x00\x7fL\xd0\x1c\x80\x08\x06\x80\x19XH\x84\xfe\xa3\xb0\x7f?\xf2\x8f\xc1\xfd\x9dQ\x0c\xc5\xfc\xb1\x88\xbf\x0d\xefO\x80\xf6\x07`\xfd\xf1H\xbf\x03O\xc7\xa2\xfc\x891~G\x89\x8c-5\n\xdd\xd7\x9b\xb2\x06\x7f\x16l?1\xb2o\xc7\xf5cQ}\xb1#`*\xb8\x19\xd3O\x8b\xe8\xdb>\xfc\xbch\xbe\x0dn\xb4!\xf9iq\xfcx\x14\xdf\x82\xd8G\xe1\xf5^l>\x0c\x99G\xe3\xf2\x81\xa8|\x08&oE\xe4\xed\xa5\xc1\"\xa384>\x10\x8b\x0f@\xe2\x8dUK\x8b\xc2\xdb:\xc5\x0c\x04\xde\xb8Oa\xc5\xdf\xe3\xd0w\x17\xd2\x9e\x1eg\x9f\xdf\x92\xd0\x18;\x16a\x1fO\x91\x88D\xcf\xa0,O\x95\xd79\x01\x0e\xb4\xd1I\x1a\xd2(\xa7\x93r:{\xa3\x9cN\xca\xe9\xec-\x06k\xb1:\xa3\x9c\xceCK\x84\xbb\xccC^\"\xb0\x97$\xe8Kr\xfc\xc5\x8b\xc0\x1c\x01\x839\x16\ns\x04\x1c&\x04\x89\x89\xc5b\x9cc\xb8\x0f\x8dI\x88\xc7`\x11\x99@L&9*\xe3\xc7ef#3\x94\xd3\xe9-Y\x1cRctE9\x9d1\x98\x8d\x0f\xb5I\x83\xdb \xc1\x08/v\x13\x80\xdexs\xeb\x02\x11\x1c\xca\xe9\xa4\x9cN\x0c\xb6\xe3\x8dj(\xbe\x83Gx(\xa7sb\x89\xf1\x1e\xca\xe9\x1cZ,\xfactF9\x9d\x01X\xd0\x1c4\xc8\xe8\x8er:\x8d7\xa0\xf0#\xca\xe9L\x87&QN\xe7l\xac)M\x9bC\xe3Mx\xc4 \x97\xd39\xcal\x19x2\n\xf3\x8a\x8bF\"\xba\xe2\x0fj4\xac\xa5<*[\x1d\x1c\xa8\x08\x90\xe0 k\xe3\xc7\xb97\xa9gS\xddt\xf9<\"\x0e\xcd\xd9\xaf\xf2\xbf\x0b\xfe\x14W.\xcf\x85\xb8ltRd\x1fI]\xe9Mu\x03\xdbj\xb5/\xcc\xa7G\xfeP\xddH7Ot\x95\x1fi.\xcfM%N\xbb\x96\xa19\\\x1b\x8f\xca4\xbav\xa2\xa9\xdc\xc5\xa7f\x85\xf8 n+u\xfd\xe1\xbb\x13\xe5\x96\x8f\x12\xc5~\xc5C\xc6W \xbcc\xf6\x1d\x12\xf8k\xecjd\xfb*=/\xf36\xcf\n\xb5\x0f\x0dS\x96Ag\xdb\xaal\xaf\x0f\xf6\xb0\xdb\xac(\xeeq\xe3\xca\xf0R\xc4\xa8\".O:\xa6\xfcu_\xd5{K\x7f\xf5\xbe\x1c\xef6;\xf2\xed\xa9V\xb7c\xf5\x92\xafI7r;Y\xa4m7m\xf6\x99 $\xaa\x9b\x84$]\xc6\x86\x0d\xaa,t\x81Z\xd9^\xdb\xb2*\x9b|\xc5x\x07\x11\x9b\xfa\xa6f\xd0^\xd7\xac\xe1\xed\xe7\x91\xc4\x86\xb7\xd8Z\x7f\xb5\xfe\x895\"\x12\x8dL\x89\x1f\xf4\xcf]\xd6X0\x15\x807j\x1fD\xb5\xea\x7f>\xfd\xff\x8cy1\xac\xad\x16\x8f\xac\xf6\xf2\x1b\xbfZ\xc3\xcfL\xb5\x01\xd1\xa7?\x8a&\"\xffW,\xd6\x1cp\xfe0H\xf6\x96\xc1+\xcfV\xa7\xd3P}}\xf6/\xe3P!\x98_r\xc1\x18\xc2\xfbR+\xd5\x0f\x17\xaf'\xfe\x88\xf5E\xac\xafT\x8b\x1db}\x11\xeb\xcbl\xc4\xfa\x12F\xac\xafC#\xd6\x17\xb1\xbelF\xac/b} #\xd6\x17\xb1\xbe\x88\xf5E\xac/i\xc4\xfa\"\xd6\x17\xb1\xbe\x88\xf5e3b}\x11\xeb\x8bX_\xc4\xfa\x1aX\n\x06\x0e\xb1\xbe\x84\x11\xeb\xeb\xf7\xc0\xfa\x1a0\xa0\x06~\\_\x92\x83;:\xb8Y\xbe\xb6\x01\xe0\xdcV\xea\x84\xf0uU\x9fhEz)\x1e?r\xf6T\xd2\x00\x9e\x9e\x8c\xc3\xfbT\xa0\xd4\xfc\x07\xfe\xa1\xf5T\x01\xefO\x13\xb2\xc8lt1#[L\xe1~\xea\x06#CL_2&\x89u\x7f\xed4\x9f7\xf9\x0d+\xa1i\xb3v\xdf\x18yb\x9d\xa7'\xbaR\x8f\x94'6\x89\xca\xd0\xda/\x80\x7f\xe9\xe2,r\x0b\xe0\x1c\xb4\xff\xe38c^ \x02vb\x91\xa7\x1a\x80\xa8\n \xe0<\xc0\xd5\x07\x90\xdbB\xdaB\xa1=\xa73\xf3\xfe\x8e\xe3s'5\xc4\x07~\x98\x0f\"\xa0>w\x05\xb4\xb06\x06\xee\x83T\x90\x1fD\xc2~N\x87<\xb8h\xe8\x0f\xe6\xc3\x7f\x10\x0c\x01:]\xf5\xe2\xdbx\x18\x10RC\x81\x10\x08\x07B($\xe8n\xd9\x1d\\\x88\x85\x05!54\x088x\x10RB\x840\x1b&\x848\xa8\x10R\xc1\x85\x10\x05\x19\xba\xbb\x83^\x82\xf8\xfa\xcdQ\xa0C8\"|\x08\xc7\x81\x10!\x10F\x848(\xd17\x04\xe3\xe0DH\x0b)B\x00\xac\x08\xe1\xd0\"D\xc0\x8b\x88!\xf3+\x04\xc4\x08)`F\xf0A\x8d\x80_\x9e! G\x08\\\xc5\x05C\x8fNo\x02\x96D\xc0\x8f\x10P\xca\x840$\x04A\x91\x90\x1a\x8e\x84HH\xd2\xdd\xae\x1a?, \xf1\xd0\xa4\xd5\x1f\x7f\xa2\x0f\x9e\x84d\x10%\xe0\x916\xc0@\x95\x10\x06W\x82\x0f_\x88\x84-\x01\xe1\xd7\xb1\x85\x99\x08\xc2\x84\xa8\xe0\xe2\xa1L@\xd42\x02\xd2\x84XX\x13\xdcQM\x07o\x02\x1e\xe2\x04$\xcc h\xa8\x13pQ\x0f\x87\xc8\x16\xdc\xb0\xad\xf5\x9eX8\x17\x12\xb6\xdd\x00X\x17\x82\xa0]8\x10\x92\xd7&\xa1\xc5\x19\x10\x18+m\xc9\xbc \x90\xd2\x8b\x0f\xef/\xde_\xbe\xfaqq\xf9\xf1\xd5\xc7O\x97\x8bO\xef./\xde\xbe>\xff\xfe\xfc\xed\x9b\x80\xbb\xde\xbc\xbdx\x7fy\xfeqq\xf1\xf6\xc3\xf9\xfb\x90\x1b\x7f~\xff\xf1\xfc\xdd\x0f\xe1\xf7]\xbc\xba\xbc\x0c*\xe1\x87\xb7\xff\xf1\xf6\xf5\xc7\xa0[\xbe\x7fu\xfe\xa3\xf5\x06\x9dq\x19\x11@\xec\xae\x8a\xc6\x8e/E\x1b\x10oR|\xfb\xcb\xce\xa9\xf6\x82\xc4oL0\x94\xedCO\x9f\xddno\x82\xce\xa6\xe0\xac\xe6(M]\xaf \xc5#w\x8dL\xd8\x1e\xa0\xe3\xa8'\x8f\x9b\xd3\xe1\xc3\xc7\xbf\x0f\x94\x1a\xba\x9c^\xf9PX\xed\xc54(\x0b&X\x07\xf6\x18Y\xa5\x0b\x94y\x1a\xefa)G?\xe3\n)\xf9\x13)\xcb(;\xcaa\xe1\xe4\xdf\x1d\xa5\xe2\x0dj\x90#\xcd\xe7\xa1k\x070\xb4\xcb\x9a\x86\x85\x15Mw\xc9\xc3\xc2\xe9_\xd2\x15\xef\x8a\xb1\x12j\xf6\x17\x91\x00\x1dTJ9\n\x1c\x96Q\xfe=] \xd7Y^\xd8\x8a\xb6\xce\xcb\xacXHi\x08 \x0e\x1d\x99\xaf\xf0\xec\x9e5\xcff\xef\x86gW\x0d_q\xcf\xf6\xf3\xac\xac\xe6\x17\xa6\xac\x16\xfc\x0bbq\xc3\xdaj\xa63\xec\x00\xfe\x91\xbf\xb0\x0fR~\xa2o'M\x9b\x95\xab\xac^I\xed\x0e\xa5\xa8\xb2\xa9nX]f\x87g\xbc\xf4\xe6\x96(i\xf6W\xdb\xbc]\xb4\xf96E\xc2\xd4*k\xd9\x0b\xee\xcbx\x9d\xd6qa\xe5\xeaa\x1e(\x94?\xdcJGn\x9a\x924\xa7\xda\x11\xaa\xef\xe0z\x0fB\xf3\x08\x15\x1c@\xe9\x1e!]a\x1bm\xb0\xfa\x91\xb7\xf0n\xe80\xad2\x12Z\x1b)V\x1dI \x945mV?PoSO|\xa0\xce\x86i&za:Z\xf8-\xab\x9a\xa9w\xb7\xe5_\xa6\xb5\x9a\x01=#\x9bmT\xdbe\x1b\xd5\xcc\x0e+<*c\x7f\xe1D.\xa9\xfb\xb3\xda\xc73\x91'\xa59;\xbe\xbb\xc3\x97\xec\xae]|f\xf7\xe6\xb7\xe2}'^\xb4\xb8\xcd\xdb\x82\xbd\x84\xff\xb1\xf5W\xfd|\xad&\xc3\xff\xa9\xa8\x16bA\xc6\xff\xe7\"\xdb\xb0\x0fR\xc3\xf1T\xfenq&9\xbe\xdc\x0dw\xcbC\xc8`[5-0AX\x10L\x07\xc3\xadbt\x9e\x19\x00\x07CS\x85\xc0:dIY(^\x7f\xf1\x8fr\xcf\x1b\x1fo{:\xf3~\x90\xe6m\xc3J\x87!Z\xf2Qh!\x9c\xd9\x86\x8f\xdb\xac\x81\x86\xb5'\x90\xb7\x8df\x085\xb0/e\x03\\I\x12\xc4m\xde\x8c\xdf)F\"H\xb3pQ*A&\x0fg=w\xf9\xc3\xc5\xebi\x05H7\x88t\x83|\xb3\x04f\x06\x80\x08r\xb1l\xba\xa4\x1b\x84 \x12'!\x11\xc7\x10\x88I7(!Y8\x84(\x1cD\x12&\xdd\xa0\xb9\x84\xe0\x082p\x12\"p8 \x98t\x83\xe6\x90~C\x08\xbf\x11d_\xd2\x0d\"\xdd \xd2\x0d\xc2\x92u\x93\x12ucH\xba\xa4\x1bd\xbb\xccK\xc6\x0d \xe2bTqB\x08\xb8\xa4\x1bD\xbaA\x182-\xe9\x06 \x9bC\x98%\xdd \x93'/)6\x96\x10k\x9d\x1bH7\xe8\xd0H7(\x82\xc8\xea'\xb1\x86\x12X\x03\xc8\xab\xc1\xc4\xd50\xd2*\xe9\x06\x85\x11SI7\xa83\xd2\x0dR\xd6\xe9\x06i\xb9\x15\xc9]\x1a\xf8\x1a}MN`\xc8\xc9]#\xfc\xb5'A 4V\x83R\xd3u\xd2\xc3\xb2\x0e\xbf\x1c\xd3\xd0\xc8\xdc\xfbB\x8cBdY\x8e\xc9\x1c4\xb2\x05\x1f\x9e!\xe8b\x05>,\x13\xf0\x90\xfd\x97\x97/% ?\xf8[/\x89\xb5\xce\x8a\xc6\xa3\x89\x05F\xf67\x9e\xf1\xed\xeb,\x9e\x8b\xed\xccn\x14\x9b\x1b\xc9\xe0F\xb0\xb6\x83\x98\xdaz@\xbc\xa9\xda\xd1~\xd7h\x18\x14?\x8e\xc6\x1f\xf9\x97l\xb5\xaaY\xd3hx~8\xea\xf5\x9e\x12\xbcW]H5\xd0T\xd6\x82v\x17L\x06Ky\xf0\x99*.k`]W\xdb\x07)q\xcf\xca9\xfd\xcc\xeem\xc5\x9eL3\x8a\xde\x92\xa9\xa5z\xcd\xda}]\n\xf0B\xf16\x14\xaf\xa7\xe3\xc2\x08\xc8a3\xd9\x9b\x175\xd0\xa3\xa2\x9d\xdfr\n\xef\xf9\x87\x95\x14\xb7\x83j\xbdnX\x0bU\x0d\xe3\xe2\xc2\x002mX\x9b8Z\x96\x0dhC\x10e\xf9lq\x9cl\xfe\xaa\xca\x88P\x8a\\\x82|\xa9\xff&\xc6$\xa5\xeb'w\xdf\xafY\xa9\x03\xbf/;\xc0c2}\x9f\x0bo\x05o\xf3]\x08%D\xb0ox\xa8?\xb3\xc0x\x8e\xdd\x1f9\xb8\x13\xce\x91!\xbcE\xbe\xcd\xb1\xd1\x15\xd7j\xba\x8e\x8d\x8a$\xc1\xb0a\x0b\x96\xdf\x9c\xfc\xd7\x91\xb7\x9d\xdc\xfa\x1e\xfe\xe9|\x0d\x05[\xb7\ne\xc9[\xb9\xec\xd6+\x1f\x81\xe3\xc9\x0e\"\x1f\xc2\xe3|u\x0f,[^C\xb6\xdb}\xc1(\x0e U\xfd\xfd\xaeX\x0e\xee\xe0\x11\x15-\xb4\x122\x90\xc0\xff\x91\x97\xab|\x99\xb5\xacC\xf4\xf5\x19\x7f\xfcB\xd5\x90\x86\xee\xf2rY\xecW\x93\xad\x87L>\xa5\xa3TL\xde\x98 \xe8\x0c\x90>q\xac\xde\x90S8r\xf6\xe9|\xba\xb2\x9dTA\xec\xd6\xd4\xacQL*\xd1\xbd\xfa\xfe\xc8\xbb\xdc\xa9\xeaM\xf9\xa6\xac\xea N\xaa{\xe3\xf8\x1122s_\xecUU\x15l\xc4\xe2\xed\x06\x9f\xc9/\x86W[\xb3\x1bV\x8f\x9c\xba^\xab\xbaz\xfaJ\xf3\x01U\xaff\xe6>2\xf2\xc3\x9f\xc1J\xc1-\xa9\xea\x15\xab\x1f*\x04a\x87R\xeb\xa9\xf4\xec\xd7]/f\xe9<\x97Z\xaf\x10\xb5\xe8\xe8\xae\xe7\xd9\n\x8aY/\xfa\xa5/=\x7f\xa3\xebnT\x1d}\xa2\xeb\xff\xc8EGm\xdc\xb9(J\xee \xda\xc7\"\xa5:EC\x9dE\x07o\xf1\x01\xc1\xe2C\xd4\x01\x90H\xb0\xb4(.\x9f\xc3_\x90LhR>\x9f\x97\xd1\x97\x9a\xd3\x87g\xf5%\xe2\xf5\xc51\xfb\x1c\xee\x02\x85Ag\xb2\xfbR\xf3\xfb\x02\x19~\x899~a,\xbf@\x9e\x9f\xab\x0dGH\x81&\xe5\xfa\xa1\xd8~ \xf9~s\x19\x7fQ\x9c\xbfD\xac\xbf\x18\xde\x9f\xc3\x19Z\xfa\xf3\x08\xdc\xbf\xe3\xb1\xff\x8e\xc2\xff\x0bc\x00&\xe7\x00bY\x80Iy\x80x&`0\x170\x9c\x0d\xe8\x1d\nq\"\x9f\xb3\x19\x81^\x81O\xd4\x82\n\xc1\x0b\x0cYu\x05s\x03]\x93 Z\xd6\x13W\xbe\x84\x0c\xc1\x10\x8e`b\x96`\x1cO\xd0\xd5\x82PR\x9e\x91\\A\x8b\xb7\x16%\xe3\x99\x86/\x88&\xbd!8\x83A\xacA\x9f\n^\x0cs\xd0\xe7\xd3\xca H\xc4\x1f\x0c\x0f&\x9eC\xe8\xab[\x04\x8f0\x92I\xe8bb$c\x13\xa2\xf9\x848F!\x96S\x88\x88r8\xaf0\x84Y\xe8\x16\xe6L\xc2.\x0c\xe4\x17\xcec\x18\xfa\x02\x1a\xc02<\x02\xcf\xd0[:kKO\xc76D\xf0\x0d\xe3\x19\x87\x16w\xadW\x803)\xeb\xd0\xc7;\x8cd\x1eZ|\xf9\x857\x11\xecC\xb7\xe8\xa6Kr35\x0719\x0b\xd1\xceCL\xc9D\xc4p\x11\xc3\xd9\x88A|\xc4\x08Fb('\xd1#\xa3\xe9.\x1d\x96%\x86e&Fp\x13\x03\xd9\x89\x8e\xea\xc60\x14-\xae\x10\xc2\x991,EG\x93\xf7\x8bf&d*z\x053\x8f\xc1VL\xd5\x16\x03\x18\x8b!\x9cE\xb3\x1c\xa6K\x0c\xd3\xfb\xfd\xee\x12\xc2\xc4\x93\xa2\\\xf7\xa0D0C\x88R\xae\xbb\x9c\x02\x98H\xf2\x94\xeb\x06\x87\xf8e\x10\xa1j|#f\xe7!\x95\xece\xaf,dkf\x0fK>u=\xf7\xa1h\xa8\xbdy\xa4$\xbf\x105\xb5\xb7\xe0\xf2\x1d\x93\xae\xda\x9bG\xe6\xf2\xe1)\xac\xbd\xe1$.\x1f\x96\xd6\xda\x9b]\xde\x12+n\xd9\xce\xc7\xd5=\xb2\x96\xde9\x04!i\x89\xf0\xe1\x96\xb3D8\xc0IYz\x1d\xe1\x86\xe3\x94\"\x96\xfd\x90|\xf8\x9bW\xc0\xd2[\x1f\x9c\xbc\x1dF\xba2\xc9\xa3\x10\xa2\x95\xadC!\n|\x82\x95\xde\xfe\x80\xe9\x11\x08\xa9Jo0\x00%S\x89p\x83k\x90\xc1\x02\x95\x08\x19\xca\xb4\"\x94H \xca\x18\x01J\xa4\xfc\xa47\xd8\x98\x06\x8c\x12\x9eL\xf0$\xffkO'8i\x1e\x81\x02\x94\xf9P\xc2|\x13)\xbe\x89\xbf\x0f\x17\xafI\x88\x8f\x84\xf8\x92\x0d\x87Q\xe4=\x12\xe2\xc3P\xf6\x92\x10\xf6b\xe8z$\xc4\x97\x90\xa4\x17B\xd1\x0b\"\xe8\x91\x10\xdf\\Z^\x04)/ %/\x9c\x90GB|s\x88x!4\xbc\xc4$<\x1c\x05/!\x01\x0fK\xbf3\xec\xac\x93\x10\xdf\xd8\x10\x84;\xec*)\x98lGB|(\x8a]\x0c\xc1\x8e\x84\xf8l\x97yIu\x01\x94:\x8c\xcc\\\x08\x9d\x8e\x84\xf8H\x88\x0fC\x9a#!>ashr$\xc4g\xf2\xe4%\xc6\xc5\xd2\xe2\xacs\x03 \xf1\x1d\x1a \xf1E\xd0\xdf\xfc\xe4\xb7P\xea[\x00\xf1-\x98\xf6\x16Fz#!\xbe0\x9a\x1b \xf1uv\x0cj[\x8a6\x17@k\xc3\x93\xda\x82\x84\xf8\xf2\xe1\xc8=>\xf0\xac\xbfd\x84\x87\xc9\xdd~\xc8WS\xd1\xbd\xe1\x88\x94\x8b\x13\xd3F\xc3`\xaf\x8e\xd1\xd6\xfbX\xe1\x97\x14\xd2\x18g\n+o\x1c\x1a\x19o\xd4%\x9dFF&4p\xd4\x1f\x05\xfe\xd7\xe4\xe5\xa68\xac\xfdH C\xbby\xa2C\xf0H\x052t\xcd\x1e\x07\xa6\xe5U\xd6\x08\xda\xd3q\x1c\xf9\xd6\xe9\x96E?\xc6\xcdGp\x05O\x1a\x1d\x15\x8a\xd8R\x0bfbx\x0b\xff\x1b:*\x14\x13D5\x0c\xf5\x11\xd4\\\x15\xdd\x03\xe4s\xf8\x9f\x97R\xadJK\x0cZ\xcep\x14W\xb6\xf9\x8deuo\xe3_\xd1a\x9b\xc2\xe8\xb0\xcd\xdf\xd5a\x9bz\x11\x10B\xe9\x99,\x1c\xb4\x11\xa5G\x1aQz\x88\xd2\xd3\x1bQz\x88\xd2\xd3\x1bQzZ\xa2\xf4\x98\x8d(=\xda\x88\xd2C\x94\x1e\xa2\xf4 WID\xe9\xe9\x8c(=C#J\x0fQz\x0cF\x94\x1e\xe35D\xe9!J\x8f\xc5\x88\xd2C\x94\x1e\xa2\xf4\x10\xa5g`)\xe8\x15D\xe9\x11F\x94\x1e\xa2\xf4<^J\x0f\x9d\xda\x16{$\x16\x9d\xdav\xc4\xe0\xfa\xdb(\x9d\xda\x96\"\x8atj\x1b\x9d\xda&\x8cNm\x1bPS\xcf~\xed\xb8\x89\xae\xa3\xdc\x06!\xd4\x1c/MXU\xf4T}\x08k^\xcaR\xf3\xe6)\x0fv\xd1\xcf=\x7f\xd3\xafQ\xd4\xd5\xafV\xab\xda\xc5gU?=v:\xab\x8d\xce\x11E\n\xf3\x92R\xbd\x98\x84\x97\x16\xe5\xa1\xa3z\x1e\xe0\xa2e\xb6\x1e\"* \x80\x19-\x90v\x8a \x97\xa6\xa5\x96\"\x89\xa5\xe1\xb4R\x7f\x80\x12SJ\x9d\x84\xd2h1-U\xc8\x08\xe2\xdd\xc4\x1b\xf1\xee\xa4\x11\xef.\xcd\xc0B\xbc;\xe2\xdd\x99\x8dxw\xc2\x88wwh\xc4\xbb#\xde\x9d\xcd\x88wG\xbc;a\xc4\xbb#\xde\x1d\xf1\xee\x88w'\x8dxw\xc4\xbb#\xde\x1d\xf1\xeelF\xbc;\xe2\xdd\x11\xef\x8exw\x03K\xc1\x81\"\xde\x9d0\xe2\xdd\x11\xef\xee\xef\x81w\xd7\xe1\xce\xb6\xf2w\x17L\xce#\x94\x10\xa0\x02\xf6X\x03\xeb\xba\xda\x8e\xea\xd1$\xacH\x12~\x858F\xccA\xa8\x18\x9eB\xa6\x99\x14b\xaa\x10[\xe8\xe3\x93\xe8n\xaa\x96\x19Y\x12\x03'Ot=\x1f)SB\xd4+)O\xc2q\xf6\x9dg\xf7\xc8y\xe6\x9d\xe7^\xfbYw\x9e\x1b\xfdg\xdc9\x1d\xf87\x8cR\x9dk\x17\x0d\x82\x0f\n\x10\x02\x84\x7f4@$\x04\x83K#\x18\x9c`\xf0\xde\x08\x06'\x18\xbc7\x82\xc1[\x82\xc1\xcdF0\xb86\x82\xc1 \x06'\x18\x1c\xb9J\"\x18\xbc3\x82\xc1\x87F08\xc1\xe0\x06#\x18\xdcx\x0d\xc1\xe0\x04\x83[\x8c`p\x82\xc1 \x06'\x18|`) I\x82\xc1\x85\x11\x0cN0\xf8\xe3\x85\xc1\x93\xc0\xca7U\xcb\\\xc7I\xfd\xcc\x7f\xef\x00eq\xb5\x04\x937\xf9\x0d+\x0f\xea;B\x93\xc5\xbdOt\x8d\x1f)\x8e,\xaa\xf48\xf0+o\xa2~\xd0\xfe\x8d\xe3\x0c\x13^\xe7\xf8\x93\xa3\xe4\x06\xbc\xedv\xcc\x0e\x0c\xc84\xec\x9a-\xb3\x96w\x82\x8b\x9a\xad\xf9BM\xc2\x0e\xbf\xc8\x074\xbf@^6-\xcbV\n\xdcZ[\xd7V\xd0\xa9\x86\xf0\x11R5V\xfbh%>\x88Vr\x11\x99\xaf\xe1\x97\x82\x95\xcf\xd53\xbf\x82o\xbf\x85\xaf\x7fQ\x0b\xd4\xacU\x95\xe5\x93\x88\xd5\xdd-\x13\x9bz_\x9f\xc2y Y\xe1\xd8\xf0\x94\xdb\x88\xcb\xaca\xcd\x89\xdal\x15K\x9c\x89\xe2\x8d\xf5\xfe\x9f\xdf\x7f|\xbbx\x7f\xf1\xf1\xfc\xfd\xbb\xc5\xa7w\x97\x17o_\x9f\x7f\x7f\xfe\xf6\x8d\xed\xfb\xc0\xfb&\x01X\xb9w(\x1b\xbc\xb0=\x11y\xc7\x9f\xde^\"\xaf|\xf5\xdd\xe5\xc7W\xe7\xef\x90W\xbf{\x8f\xbep\xf1\xc7\xf3\x8f\x7fX\xfc\xfc\xf6\xa3\xed\x16\xcd\x02\x08\xaa\xaaj-\xee.\xf48NOs\xf7Vi\x88\x86\"\xcd\xdd\\\xa4\x857\x1a\xd3}\xae\xa6c\xba\xde\xd7\x80L\xf78\x9a\x91\xf9roc\x92\x16\xd5\xa4\xfa\x9bq\xe3\xa74>\xc5\xbe\x97C\x14\x13\xdagY\xab\x96&r\xc7\x9d\x8f\xf4\xba\xb5J\xae\x8e\xc7\xa1\x9c\xd6{>\xcf`\x86\xf7\xdci\x7f\xf1\xd6@\x0chEe\xf5\xa2\xda\x0d\x8b\xeb\xd8\xf40=\xeeOo/_N\xff0p\x7f\xaf\x16/q\xceU\xe3zi\xfa\xe3HGD\xf2\xc0f<\xe9\xdd\xfb\x97\x93\xff\x1f\xc5h\x96\xe7\xbe\xf5N\x9f\xd1\xff2~\x9a\x004nX\x8b~\xae\x9c\n\x13\x0c6\xf8^\xf0G\xf1H\xb6\x1a\xf4\x84\xbe\x0e\xfb2\x17\xbc\x05Q|\xde\xfc\xf9?\x1c\xce\x9a]\x91\xb7\xb1\xb8\x12/\xc1\xe0\xd92d\xe5\x88\x1d\xe7\xebM\xaf\xa4\x93eU6y\xa3\x8fk\xedh\x9b\xe7oNd\xd7\xe6\xcb\xb7\x13\xbd\x89f\xaf\x93\xed}\x8d*#\x97\xf4\xfa\xa88\xeeO\xae\x9f\xe4\xd8q\x801\xd2A\x88\xc2\xe8 \xc4\xdf\xd5A\x88\xe2K6\x84\x83*?\x9b?\\\xbc\x9ex#\x0e*qP}\xb3\x1ff\xae\x01\xe2\xa0\x12\x07\xd5z%qP\x85\x11\x07\xf5\xd0\x88\x83J\x1cT\x9b\x11\x07\x958\xa8\xc2\x88\x83J\x1cT\xe2\xa0\x12\x07U\x1aqP\x89\x83J\x1cT\xe2\xa0\xda\x8c8\xa8\xc4A%\x0e*qP\x07\x96\x82\x0fH\x1cTa\xc4A%\x0e\xea\xe3\xe5\xa0\x1aO\xcf\xa2#\x10\xc1\x1fF:\x02\xf1\x88\xc1\xf5\xb7Q:\x021E\x14\xe9\x08D:\x02Q\x18\x1d\x81\xa8s)\xce~\x15\xf4,\xd7\xd9\x87\xcf\x04\xc9k\x98S\xb12\x9crX\xf5\xd9\x15\xe7oN$\xe9K\x1co\xf8L\xf9;\xc8\xb5x\xa2c\xf2\x88S-l,\x8d(\x96\x977a\xc2\x0b5xyN\x8eT \x8fs\x17\xf1\x1a\x03\x11D\xa7H@n\xc3\xa8p \x12I\xd3#\xb0\xc9\x11\xf3R#\x82\x12#\xbc\x8d\xc2\xc5r\x0fe\xb7cY\xed!lv$\x8b=\x90\xbd\x1e\xc1Zw\xa6A\xb4\x9e$\x88\x878\xb9\xd3\x9f\xfc\xe0m\x0c\xd2\xfc\x89\x0f\xa1\x0d\xc3t\x97/\xe9!\xa4\x91\x98\xee\xf0$<\x046\x18i\x11\xcd\xa6\xbf\x153\nJK\x9c\xe8\x10\x9d\xe6\xf0\xa0I\x0eGLqx\xa8\x04\x87c\xa57\xda\x81q\x12\x95\xa1%\x1a\x10\xfbpY\xc6l\xb9_\xc3\xf5\xdd\xf0\xba\xa8\xb3\x96-$\xae=\xef\xc9\xdb\xec.\xdf\xee\xb7z\xb5*]\xf2\xef\xec~(\xe7\xcfr\x16f\x9b\xdd\xa5)D\xc83s\x0b!\x1e\xfd\xcc\xbc\xc4=sSe\xc5\xe2\xaa*W,6=G=\x91;\xe2/y\xc7\xea%\x9f4\xa5O\xc8\xdajk\xfa6\xb8*\xaa\xe5\xe7f\xb1c\xf5\xe2\x9eeq\xd9;\x88\xd4\xa0\xaex\xdd4'\x1f\xcc\x8b \xfc\xc1\xa3{\x10s\xb8\x1cVP\x13\xb8\x9a\xb2\xd5\x98F\x8cU\x9a\xae\x0d\xbf?\xb6\xe9Z\xce5\xe8 {\xf0 \xaf\xda\xb9N\x99\xcczJK7YIz\xb9\x9c\xa9NT~G\xde6\xd0\xec\xaf\x9a]&hf\xfd&\xddgvo\x9c\xdc\xff\x8e&v\xcc\xbc>\x9a\xd6\xb5\xac\x7f\x17\xb1\xa4\xf3\xb9\x0es\xd4`\x1b+\xd4\xefh\xc3\xd6;\xa3\xc6a\x1a\x83i\x0c6\xdf\xfe\xd8\xc6`\x17\\\xa1\xfb\xa8\xad\x01vC\xe5p\xd8\x90#*_Z\xf7\xc7P\xf4\x83\xee\xba\x9a\x9d\xa2?\xa9\xa1.\xacCD\xe63\xbb\x1f\x15\x91\xff\xbfFQ\xba\x92)\x14^\xd7)i)}\x13]Sd\xcdu^n\xd0S\xddd~;\xfc\n\xd3\x1e\xd5\xebP\xf7\x8f\xe6\xaeKu\xc9\xdf\xd1\x1cf\xed\xc7qSP\xbe)\xd9j\xa1V\xff\xb7y\xb9\xaan\x03'\x07m\x83a\xcb\xb8\xf4\xdf\xe6\xe5B=\x8e\x7fe$y\x96\x855\xbb\xaan\xcb6\xdf\xb2\xc5_\xb2\xbcX\xac\x14\xc8\x19\xf5,\xd1\x88\x16k\x91$R\x95\x8bU\xb5\xbf*\x98\xa8G\x94;o\xd1\x0f\x9e'kr\x8c\x87\xf9\xd1\xa7n\xfbGa\xf0\x07\xbd\xac\xe3\x8c_\xc9ANw9\xd3\xeb7\xec\x87\xd8\x8e\xc39\xce\x97]\xf7GZT\x8c\x7f\xa3E\xc5\x11\x16\x15\xc1\xf3\x1d\x1fS\xf2r\xb3\xc8\xcbu\xe5\x98\xf6.\xe5e\xe7\xfc\xaan\xf2S\xf7\nE\x1c\xf1QW\x142 k\xabZ\xcfk\xe3\x99o\xe0F\xfd\xfeh\xe7=^\xab\xc7\xd1\xd0\x14\x8d#\xba\xa54mV\xb7\x8bkgZ\xbc\xd7\x89\x7f\xaa\x05\xc7\xd8\xda\xdb\x1f\xa4\xccL\xd6*\x12T\xd7`\xc4\x99`\x82k&31W\xfc\xcf\x0c\xde\x7f\xe0?X\xdd\xedK>\xdbZ\xd2\xae\xf2r\xc5\xee\x16R\xe2\xeb\xc8\x15\xf7Ok\xd2\xcey\x91T\xd5\xf3\x06\xf2rY\x8b\xfc\x1f>\xe4g\xcbk\xe0\xd3\xae\x98\\\xc6q\xb1g\xfa\xc9\x1dV;m+/!\x93\xdb\x9d\x82)\xb7\xcd\xeee\xaa\x9c\\\x14\x89<\x7f\xb6\xac\xb6\xdb\xbc\x95\xb9\x98\xadL3v\xf9[V\xe5_T\x86\x88\xcc\x87qf~\xfer)\x9e\xf4\x9dX\xec\xfdQ\xac\xbf~\xe96=ZVo\xbb\xaf\x03\xf1\xbaLZc#w?\xe5M\xa3\xdd}\x97\xb7\xafxW\xfc\xc5\xcc\x0e\x95Mc\xb1/\xdb<~\x94\xee\xdf?o\x8f/\xf8\x0b\x9a\xd9\x06>\xe6[\xd6\xb4\xd9v\x07\xa2d\xaa5\x8c_z\xde\xa8\xd2\xc3J\xa8 Z\x9d\x15\xf9\x0d+Y\xd3t\xcbOs(\xdaj{\xd5\xb4Ui\xdb\xe0\xd7\x818\x94a\x1b\x9aM\x95nl\xd88\xfc\xf1\x9a\x89\x9c;\xd9\xeet\x06\x99\xa8\xfeu\xd6\xc0\x15c\xe5\xa0\xdc\xf0\xfcs^\xd8z:\xb7j/\xc56:'\x0dk\xbf\xd2\x8a~\x0ds&\xc1/\xa7\x9dNv \x919\xc6\xbf7o\xaa\xa5\xa2D\x8b/ig\x02\xa9\x12\xc8\xaa\xcau\xbe\xd9\xd7l\x05\xdb\xbc\xb9b\xd7yvc\xcb\x9c\xdd\x8a&\xad\xbf\x87\x84j\xe1\x8cS\xdf\xd3\x0eX\xaf@\x95\x07>\xb3]\xdb\xa7\xd0\xee\xcb\x92\xf1Y8\xab\xef\xe5t\x085\xcbVS\x05\xc6\xa1\xbd\xab\xb4Z\xe4/\x97\xfb\xedsS?\xfe\xea\x17\xc8\x8a\xdb\xec\xbe\xe1A\xcf\n\xfb(4\x1a\x05^\xcb\x02\x1a\x07\x01L5\x7f\xd6o}\xb0<\x19\xea\xa9\xe8\x9f\x9fM\x96<\xb6\xdc\xf8mU\xe6mU+\x9d\xdb\xdc\xc2\xb5\xef:.\xff\xe8\xba\xc9\xdb{\xc3.\xaf\x9cM\xc5\xc3\xd4\x97\x08j\xcd\xa5\xcdu\x04\xec\x8c\xcfw:\xb2\x95\x8el\xc5\x1e\xd9\n\xa8>8\x94\x90\x96\xb5\x1a\xd1\xed\xf3\x126\x1f.^\xf7\x9f\xe1\xea\xdb\xb1\x81\xdbkV\x9b\x1a\x91eE\xb2\xacj\xe9C\xe8v\xd4\xb2\xf2\x1d3\x9eO:boa\x18\x19c8\xf4\x1d\x97\xd5\xb6/\xb73\xc3\xabf;&2g\xbf\xcb\xea\xee%y\xd2E\xc6a\x11-\xd3\x9602NVs\xeep\x0c\xbf\xc1P\xfb\x1c&'g\xa3\x0fB+\x0b\xad\xfb#m~\x8c\x7f\xa3\xcd\x8f#l~8\x13@H\xf4\xde\x0b\x96\x80mr&\xd1\xfb\xb4\xc1\xf5\xcb\xb5\x93\xe8}\x8a(\x92\xe8=\x89\xde\x0b\xfb\xcd\x8b\xde\xbb\xf7\xf5\xcf~]Ve\xb3P\xfb\xc8.\xc1\xfb\xe1\x17\xf0\x10\xe3\x9e~vJ\xd6\xd6Rh|I\xaf\xca\x93m\xbb\xff\x89\x0e\xc8#\xdd\xed\xbf\xc9\x8a\xc50fI?\x98\x9d\x1b\xf8\x9e\xb5\x8e\x7f\xf3\xde\xbbX\xf2o\x07\xf9>7\x93n\xda;\xb6\xec\xfd\x1b\xf6 *\xeb\xff\x1c\x85\xf4\x1b\xf5\xeem\xfa\xc8Mz\xbb<[\xc8\x16}\xd2\x0dz\xfc\xf6\xbc\x7fs\x1e\xfd\xae\xdd\x1b\xf3\xb8\xf7\x9dpS\x1e\xb5%\xef\xdb\x90\xf7o\xc7c6\xe3qu\x8f\xdb\x88\x87jo\x93\x9d\x8d\xd9\x86O\xb9 \x1f\xba\x05\x1f\xb0\x01\x8fn\x94s\x07\xa0T\x1b\xef\xe9\xb6\xdd\x91\x9b\xee\xfe\xea\xa5\xddp\xc7l\xb7\xe37\xdb\x8d\x05\x9e\xae\x0el\xbb\xf1jG\x91\xad\xf8\x1dbydp6^0I\xc3\xee\xd8%\xd9\xb0\xa3\xfd:\xda\xaf3\xfd\xfe\x98\xf6\xeb\x86\x1f,\xb6F8\xbcFw\x08\xfd\xbf\x1d\x0bz\xd2E\x07\xbe\x8e$|\xd2\x7f\x93\xb5B\x9a\xb7\xfb$[\xb1\x82m\xc4\x04\xd6\x9c\xfd\xaa\xfe\xa7\xaaE\x05\\\x9fd\x831\xe1\x8d\xbe\xe9M\xef\xaaO\xb5\x11{2\xfd\xdfE\x96\x8d\xfcN\xeb\x1e\xd6yRa2\xa6\xd6\x98\x9e\xa2\xae{\xb4\x9fo}\xc5\x17\x862j\xfb\x12\x1d\xaf/\x99\xbb\xf3\xcc>Ai\xdc\xa2\x1c|1\xc0uX@M\xe5\xc3k'\xcf\xd7]\xf2\x8a-\xaf\xff\xe5\x9b\x17\xac\xe4\x83\xf2\xaa\xeb\xa1\x8e\x83\x12\xb8\xb5BxN\xb94\xd3&@\x0eKr\xad\xf0\x85j}\xf0\xfc\xf9\xb5\xee\\\xdak\xdd\\g\xb5\xab-\xc4UUzU\x0b\xb1\xe1\x0b\x10\xd2\xd4\xf2\xc7\x9a-Y~\xc3V\xb6\xb2ac\xd7\x8f-S\xa27\xffRV\xdf\xac\xd5gV6p\xcd\n\xa1ii\xe5\x1b\x01dK\xb1VV_\x19\x0e\xa2\xcfm)\xf51\xabr\xd0\xba\x94&\xb9P\xe5\xaf\x96\xb9\x80i\xbb\x8ff\x9b\xab\x9bJj\x10T\xb7r\xdb\xb6*\x1d\x1c8\xcf+\xbd\xca\x8a\xac\xb4e\xe4%\x1c \xac9\xfc\xd2Pm&\xdb\xf2H\xcft\x83m%\xaf\xab|x\x9e\x92h\x10J\x82[VG\xef\x8a\xf3\x17\x98\x95\xaap.\xb5\xf7w\xef?\xbe})t3\xe5\xb5\xddA\x8c\xfc\xf6\xf3Ropu\xba\xec\x8d\xb3\x11(\xdd>\xb5x\xb6w\xd7|Sf\xed^\xf6\x1f\xb9\xc2\xe0\x8dpSm*!\x8a\x17K\\\xea;\xd1\xf0\xbb@|*g\x85@\xc4\xaaaGcwK\xf1%ym9.&o\x07\x8a\xe9\xe6\xda\xa8\x96:\x15)T\x83C\xb7[\xb6\xadj\x06\xcd>o5\x82at\xb6,\x04l\xd7M\xd81\x9f\x92\xa6\x89\xbfo1E1\x19\xc6\x9ag=s\xca\xee\xed\xb0\x9f\xba\x98T\xa3B\x0e\x90\x9a\xb1R\xc7\x00\xc0\x19}\xb9%\xcd\xed%f\x161\xb3\xb0\xcc,\x17\xf1Am\x1a\x98\xbe\x04\xbc\xc9\xd6&Gg\xc6/\x17\x12\xe2\x93F\x1b\x0fiV\x0bt`\x1b\x1d\xd8f6:\xb0M\x18\x1d\xd8vht`\x1b\x1d\xd8f3:\xb0\x8d\x0el\x13F\x07\xb6\xd9\xdb4\x1d\xd8&\x8d\x0el\xa3\x03\xdb\xe8\xc06at`\x9b0:\xb0M\x18\x1d\xd8&\x8d\x0el\xa3\x03\xdb\xe8\xc06:\xb0mj\xd8\xc3\xb3\xe8\xc06at`\xdb\xef\xe1\xc0\xb61\x9bh\xe0j\xf419\xbej\x84\xb8v?\x1dR\x02\x0dR\xa83x\x80\x94c\x1c\x9b\xc0I9\xc6G\x0c\xae?;\x96r\x8cSD\x91r\x8c)\xc7X\xd8o?\xc7\xd8\xccg\xaf\xeaC:\xfbY\xcd\x86\x9c+\xe9\xd6Dn\xff0\xbc\xae\xa3\xb2\x8f\xee\xee\xd3\x8d]\xa4\xf5\x91\xa3':2\x8f\x94\xad>\xac\xdfc\xe3\xab\x0f\xcbvtB\xea\xef\x9b\xb1\xde\xd4\xcb/Tsc\x19t\xed\xfb\xfc\xcba[p\xfaS\x8c\x1b\xd9#\xfb%7&\x08\xab\xa6\xfd\xe2A\x18\x94aF\x10V\xaci\xf5\x0c\x8a\x8f\x04+\xdb\xda\xd9K\xdc\xc3@o\xd6\x01\xa17D\xbf\x95\x86\xe9\xbd\xd2\x965\x93\xc3\x98[^\xb87\xe4\x8b\x94\xe6\xcf\xa5\x1dZ\xc8\xcb\x976)=\x8c\xbe \xd5\xdf\xbaDp\x84\xbfa[\x81\xb6\xaa>\xc3\xae\x98\x1cia\xb2e\xc5\xbf\xfaEA\xec\xb2\xfbC\x8b\n\xa2O\xbe\xb6\xb7\x88@\x8ek0=@\xfdN\xca%\xb8\xb8I\xbd\x8d\x82\xd8;\xf6\x05Q\xf0\x81\xb2b\xe1I\xa6\xe8-(\x88\xe1!\x99\x94g\x14\x12\xf5\x9b\xa6\xd3#\xbc\x89E\xf2(2B\x18\xc4\x9e\x88\xa3MR\xf3\xf9\x10\xf7\xc5#\xd2\x17\xa5\xcb\xd6\xdc\xaa\xaf\x14\xc4\xdd\x83\xe1\xf5\xc5@\\@f\x1e\x88\x8e,\x90\x14\x84\xa7a\x18\xdd\xe1\x0b\xab\xe3p\x0d\xfa\xb6l\xeb\xfbA\xea\xca\xe8\xd5!F`\x90\xc4\x85\x9a\x15\xec&+[\xd8\xb26[em\xe6*\xef\xa8\xb4j^\x91\x1f\x1d\xe2#rP\x00\xf5\xa3\xcd\x19\xb6\xda\x1f\xc6=u\x00\x02\x14y\xd3\xca\x0c\xd4]V\xb7\xf9R \x1867\xdd\xa2\xe9\xd9p\xe9_nD*\x98#\x9bk]W\xdb\xd1\x13\xf4:\xa4o\x1eb\xe3\x00U\x84~\xee\xf6$ky&l\xffd\xed\x99\xa8Q\x934n\x82\x1e}g\xf0r[\x12C\xb4\xa1\x1e\x0d\xe8\xc7\x03\xad\x0f&F\xeb\x03Z\x1fh\xa3\xf5\xc1\xd4h}p\xdc\xf5\x01\xaa\xe5\xa3\xde1\xbe\xde\x07u\xb6g\xaa\xda\xc9\xf1\xa6\xd0\x0d\x92Y!wd\xae\xc0\x80T\x1a\x92\xbe\xeap8LlUI\xac\xae\xe7;\xf2[q\x91\x1cV\xde\x11\xbe\xf1rL\xc6\xc7\xe8O\xc5\xac\xd1K\x19s\xe1\xbbT\xa5\xd9QC\xc7\xcb\x1a)J\xbf\x15F\xe9\xb7\xbf\xd1\xf4\xdb\x83\xea\x08\xf0e\x84i\xc4\xe5\xdd\x8e\xf1\x15\xab\xeeW\xdf\x0b(\xffv\xfc\x1b\xe5\xdf\xfa\x9ajo\x94\x7fK\xf9\xb7f\xa3\xfc[a\x94\x7f{h\x94\x7fK\xf9\xb76\xa3\xfc[\xca\xbf\x15F\xf9\xb7\x94\x7fK\xf9\xb7\x94\x7f+\x8d\xf2o)\xff\x96\xf2o)\xff\xd6f\x94\x7fK\xf9\xb7\x94\x7fk\xee \x94\x7f{`\xd8\\H\xca\xbf\x15F\xf9\xb7\x94\x7f\xfb8\xf3o\x9bz\xb9\x18\xeb\xf1\xdb\xca}x\xe5\xa8\xec=}dP\xf6\x8e\xa1\xc1\x04\xf1pZ\x83\xd0\xb4,K\x1dVM\x8b\xac\xc3\xe1\x95Au\x18\xab\x8e'\xac\x01eAc\xa2EY\xd0\xd2\x8e\x1c\\\x7f\xfe.eA\xa7\x88\"eAS\x16\xb40\xca\x82\x1edA\xef\xcb\xabJ\xd4a1`\xe1\x04\x1e\xf5\xf5I\xfb\xb0\x9d\xf9\xd5=\xe4\xe0\xf4\xaf\xce\x99H\x9f\xee\x1b\xd6\xc1\xd2L\x07\xd7|\x0c\x98\xa9\x04\xea\x86G\x9ba\xddG\xfe\x91\xa5W\x8f\x9b\x88#\xe9\x15\x01Jap\x1d0=\xd3\x9b\xe7\xec\x84\x90;wV\xa8\x0dw\"W\xc2\x1a\x86\x9f\xc2\xe5\xac\xe1o'\x03((\xfd\x06\xf1B\xa4\xe1\xd3n\xb0/P\xda4\xdd&7'\xda\xf4\xbd\xdb\xe3\x0f\x97a\x13\x94]\x13\x1c#\\VM`\x9c&\xd94\xb9!\x91\x06\x1d$\\\x06MP\xf6\x0c:Ha\xd5ve\xcc\xa8\xb3\xe2\xd4%\x0e\x1a\x944>\xcd\xac\xf6\x85d\xd9\xa83\xed\x80\x7f\x1f\xa1\x82\xf1%\x83\xe0\xa8\xfc\xa8* \xde:\xbe`\x86%\xc2$\xc1\xa5\x1c\xacS\xbc\xe9-a\xa9-+W\xda\xabiu\xe4J\x7f\xc5\xd4\xd9P[h\xda\xaaV\x0b2\x91\xf6\xca\xbf\x8d\x0b6Lm5\xba\xea\x8b\xe7\xc8u\x15g\x9dk\x8f\x83\xd3\xe8K\x1eV\xde\xdf_\x88%2[\x89\xb4[\xca\x9d0{\xa0\xdc\x89\xdfS\xee\xc4\xb4\x8f\xe2\xcf0\x9bx3\x90tej\x85\xf3 t\xb6\x992\xca\xadH\xf3\x85C\xb9\x15\x94[a6\xca\xad\x10F\xb9\x15\x87F\xb9\x15\x94[a3\xca\xad\xa0\xdc\na\x94[A\xb9\x15\x94[A\xb9\x15\xd2(\xb7\x82r+(\xb7\x82r+lF\xb9\x15\x94[A\xb9\x15\x94[1\xb0\x14\x0f\x00A+\x15!\xd9\x8ca\xc03\x14\xbb\xf1\xe2\xb7\xe7y\xb9,\xec\xcb\x83\x86\x15\xeb\x17\xbd\xce\x8e\xa5\x11\xf4|\ny\x82\xf0\x03Tm\xfa\xc8\x1e]\x174\x1f\xf5\xc7\xbci\xf6\x12y\xb0OX\x03\xec\xbd\xf7j\xd9B\x1d\x96nv\x05\xba\xeb&L\xd0\xfe\xef-\xab\xb7\x0d\x98O\x83\xed\xcd\xa3m\x97\x0c\xdd\xdfVe\xfe\x99\x19\x04FzC\xbc`\x08\x88\x11\xf4O\x1d\x1c\xac~\xbd\xdff\xe5\x8b\x9ae+\xc1\x06\x13\xeb>_\x8c\x00\x13'P<\x81\xd6\xca\x93\x80\xe3\xd4Q?v(\xae\xa5Q\xd0\xfe\xc7&\xdf\x94Y\xbb\xaf\x19\x9a\x18\x07\x7f\xeeS1\x8e<\xe5\xf5\xcf\\\xd4Y\xeb\x16f\xc5\xbe\x150\xf8\x1dUT)^\x0e.r\xfa\x92\x0e$\xf1\xa0\x03\xcb\xa5\xee\xaa\xf8*FL{\xa8x\x012f\xa0\xca\xe4\xdb\xb8Gt\x08m!\xa1\x05\xf5x\xfd\xe93h6\xe2\xcf\xcb\xeb\xac\xde\x885\xa1\xd7M\xbf\x1a<\x01\x91\x01\xb6\x16$/\xb7\x92(\xc06\xbb[|\xe1\x00\xe8\"\x8c\xda\xd56\xbb\xcb\xb7\xfb\xed4\"^grt\xec{\xfe2+\x81\xdd\xb0Z\x85286\x92\x95\xf2\x18B4(\x891R\xab,\xf7\xea\xce\x8a\x94\x86\x9ae\x0d; \xf3\x0e\"-\x83\xe4u\xe5\x0f\xe2~\xc7g\x07\xaf\xac12p\xd8\x19\x07\x02\x03<(\xa5\xee\x87\x02\x88\x10\x7f0\xf5\xca[\x0f\x19O\xbe\xa9\x959.\xdb\xbc\\\xf0\x0f\xd5\x81&\xff\x8cY\x18[O\xc3S\x0f\xb6[\x9e5\xe2\x0b\x1aVlYd\xd3L\x92\x893\xd1\xe2\xd4\xd5\xda\xa1\xa9\xbe\x98\xf2u\x89\x02\x83\xcf\xa6\xaeP'\xd0V\x1b\xb9\xa1%\xc0\x86V\xa7\xdc\x18]e\xdbAj\x8ey\x03\xf2\xe7Au\xf9B@\x7f}\xab\x14\xfd\xbc\x06v'_\xa0|\xd9b\xe9\x90\x97\x96\xc9\xfb\xb2\xc8\x9ak>u\xe9D\x14\x1b\x858\xe3a\x95=OaX\xa3\xc7\x9cH\xe2\xa1\xe0\xc1Uum\x9b\xd8\x96Y\xb1\xdc\x17\x1dt\xb3\xde\xf3/,\xf3\x03\xf7\xe5\xf0<\x06\x1e\xbbj\xdfB\xde\x8a\x8c\x8dr\x03\xd5\x8d\xf8N\xed\xb6\x10\xe0\x8f\xd7\xac\x94U5W\xa0\x1eo\xc8\x98\x9f:^\x96\x9eL\x86\x98\xbc\xe1s\xfd*o59,\x1b4\x1f\xa3\xbf\xdb\xeb\xaaa}v\x95\xf9\xa1\xc3\xd7\x987#\x1a\xe6\xa0E\x88\xaa\xf5U0zZ\xe5\x1dN+7\xdb\x05\x97\xd0\xfc\xd4\xd1\xfb;\x85\x9f+\x11\xd6]u\xcbj\x9d\x11\xa9_\x17[ \xec\xd5\xdal\xf5~\xab\xa8\x82\xf9i\xdb}\xd1\xe6\xbb\"\x97\x85\x1b?\xfb\xe0\x86Q\xaf\x1b\xe4\xf7\x8cD\xbb\x87o\xa6y&s\x7f\x84v\xb4\xf5\x80\x05\x92r\x16FR\xce\xbfQ)\xe7\x837*\xf2\xf4\x0c mN\x01g\xc3\xd6\x9eTl6%\xe2\x91N\xb34\xd2iN\xb3\xce\x0b\xcd.\x93\xad\x96t\x9a\x11\x99dm\x8a,\xb2\x98\x0c2\xd2iN\x98-\x16\x92)\x16\x94%F:\xcds3\xc2\"\xb2\xc1\x92d\x82\x85g\x81\x91N\xf3\x9c\xac\xaf\x90\x8c\xaf\x88l/\xd2i&\x9df\xcf*)8{\x8bt\x9aQ\x99Z1YZ\xa4\xd3l\xbb\xcc\x9b\x8d\x15\x90\x89\x85Q!\x0e\xc9\xc0\"\x9df\xd2i\xc6dS\x91N\xb3\xb09\x19S\xa4\xd3l\xf2\xe4\xcd\x8a\x8a\xcd\x88\xb2\xce\x0d\xa4\xd3|h\xa4\xd3\x1c\x91\xc9\xe4\xcfb\n\xcd`\n\xc8^\n\xce\\\n\xcbZ\"\x9d\xe6\xb0\xcc$\xd2i\xee\x8ct\x9a\x95\x91N3\xe94\x93Ns\xff\xb7\xe8\xe0\xfa\x15\x86I\xa79E\x14I\xa7\x99t\x9a\x85\x91Nsf\xd2i>\xfb\xb5\xfb\xb7\xfc-V\xb8\xb9\xd3m\x1e\x9e\xc2o\x96l\xee/\xe9\xfc\xed\xb2\xbc\x8b\xe4H\xb9\xf9\xf0A\xea\xaa\xc7\xaf\xd8l#xD\x11\xc7p\xba\xcb^\xa8\x02\xb3\xd7\x9fZq9\\o\x19\xa7\xb6\xec\x8c&x#\n\x08\xf6\x0b\"\xa2\x80\x8e*\xc4r`\x1c\xfe\x82\xf4\x95\x93\xf2`\xbcL\x98\xd4\\\x18<\x1b&\x11\x1f&\x8e\x11\xe3p\x17\xa8\xa8<\x93\x15\x93\x9a\x17\x13\xc8\x8cI\xcc\x8d c\xc7\x04\xf2c\\m\xb8c\xce`\x192\x8992(\x96LB\x9e\xcc\\\xa6L\x14W&\x11[&\x86/\xe3p\x86\xd6L>\x02g\xe6x\xac\x99\xa3\xf0f\xc2\x983\xc9\xb93X\xf6LR\xfe\x0c\x9eA\x13\xcc\xa1 g\xd1x\x87B\x9c:\xf2l&\x8dW\x19\x19\xb5\xa0B\xf0iBV]\xc1\x9c\x1a\xd7$\x88\xd6C\xc6\x95/!\xb3&\x84[\x93\x98]\x13\xc7\xafq\xb5 \x94\x06r$\xc7\xc6\xe2\xadE\xe9\x1f\xa7\xe1\xd9\xa0\xc9\"\x08\xaeM\x10\xdb\xc6'\x1f\x1a\xc3\xb8\xf1\xf9\xb4\"o\x89x7\xe1\xc1\xc4so|u\x8b\xe0\xdfD2p\\\x08f2\x16\x0e\x9a\x87\x83c\xe2`\xb98\x88(\x87\xf3qB\x189nE\xe3$\xac\x9c@^\xce\x85U\x03\xed\xc4@\xe7(\x81\x92\x10\xa82\x12\x02%!\xd0\xdeH\x08\x94\x84@{K\x9a\xec\x10\x92\xea\x10\x94\xe8@B\xa0s\xd3\x1b\"\x92\x1b\x92\xa46\x84'6\x90\x10\xe8\x9c\x84\x86\x90t\x86\xc4\xc9\x0c-*\x95!a\"\x036\x8d\xa1\x0dKb\x08Ma !\xd0\x91\x05'-\x90\x10(*U!&Q\x81\x84@m\x97y\x93\x13\x02R\x1302\x97!i $\x04JB\xa0\x98\xe4\x03\x12\x02\x156'\xdd\x80\x84@M\x9e\xbc \x06\xb1\xe9\x05\xd6\xb9\x81\x84@\x0f\x8d\x84@#\xd2\x08\xfcI\x04\xa1)\x04\x01 \x04\xc1\xe9\x03a\xc9\x03$\x04\x1a\x96.@B\xa0\x9d\x1d#E E\x9b\x0bH\x0f\xc0'\x07\xfcV\x85@\xc7\x8ag\xb62\x8f\xaf\x1a\x95\xb9G;\x8f\\\xe6`\xd1\xb7\xeb\xbci\xab:_f\xc5\"/\xd7\xd5\xd9\xaf\x92\xe1\xe7Ru\xfbCw\xcby\xb9\xae:\x197^\xcf\xde\xdbT\xcbM\xba\xd55\x1d)\xb6\x8d\xfd=\xd1\x95~\xa4jm\xbc\x8a\x87K\xf9QQ\xf8%\xa3\xd7?\x0d\x8b\xd2\x814E\xa67k\xd9\xc0\x0b\xce]\xb3le\xa3\x8a;\xdd\x82\xd757\xb5G\xea`\xe5\xc8\x135\xaf\xb2&_\xc2UQ-?\x8bz\xdb\xaf\xf7\x95 P\xe5\xe2&\x9e\x96\x88B\x858;TZ\xb6\xdb=\xec#1\x1bo\xd2^ke\xdff\xcb\xeb\xbc\xb4\x08\xb1\x08>V^.rKJ\x1b\xe0^\xa9\x8b\xdd\x0d8\x17\x18\x967\xc0\x03r\xe4\xc4\x8aY\xbc@wt\xe4\x08\xb0\xab\xd9\xcd\x03\x0f\x00\xd7Ys\x9d\xb83:E\x85\xc4j\xa7]4\xac]\xb8\x86]m\xa8\x9a\x02\xba\xb6\xdc\x1c\xc7#\x8f.sRU\xa6\x86iv\xda\xfc!\x87\x90\xb0\x03>\xf4]C\xbb\xc8\xea\xb6a\xed\x1f\xc4\x1bp5]A\xcbl\x17\xee\"\xa3\x8a\x8a*\xa2*\x1e\x7f\x1c\x13{\xf4\xb23\xf0a\xcfr\x0f\xff\xe9\x81\x8a\xd7\x8b\xfa>\xd0\x03\xa7\xf1X\xd7\xd5V\x8f\xe3P\xed\xdb\xdd\xbe\xed\xff\xd6\x8f\x1d\x16oBA\xff\xc1\xeb\xd0K\xcd>\xcc\xf3\xb2\xdd\xee\x81\x9e$\xfa\x87\xe2\x02<\xd0#\xd9M\xbeb\xe5\x92=\xd0\xe3\xba\xf6\xd7/\x7f\x1c\xd3\x12\x1f\x81\xab\x86y\x14\x94!Y\xf9F\x8b:9\x92\x8d\xbe\"\xbae\x92\xd8T\x84\x8f\xac\\\xb1z\x9b\x97\xad\x1aT\xe4\xf4cZ\xd1\xdcdE\xc3\x9ciff\xea \xb8\xe8\x83\x80\x9b\xcd0\xf3\x18N\xabZ\x1a*\xd6!+\xe4 \xf5j\xa7\x9f!=>\\\xc3Z\x1aN\xc9Z\x1a\"\xfa\x80|\x03\xa0\xdc\xb9\xb5\xad\xfb\xeb\x10o\x00\x02\xdf\x02D\x10=\xbd\x0e[#\xe2\xef\xfaR\x90\x86&~z=\xf5\xc4P\x1f\x01T[(\x11\xd4\xebp\x97\xb5\xd7hB\xa86\x13\xd6\x13L\x0c\xd5\x86'\x88z]\x0d \xa4\x01DQm3 \xa3\xda\xc2\x88\xa3^w\x8a\xd4\x16D \xd5\x16J$\xf5:\\Wu\x10\xa1T[\x10\xb1\xd4\xeb-FG[\x1a\x8ah\xea\xf52&\xa2b\x08\xa7\xda\x92\x11O{\x87s\x08\xa8\xda\"\x88\xa8\xda\x92\x10R\xb5\xe1\x89\xa9^W#\xe2\xaa\x9f\xa0\xaa\xed\x08DUm\xc7\"\xacj;\x02qU[\x08\x81U\x1b\x9a\xc8\xea\xf54$\xba\x8a\xf6\xed'\xb4j\x0b\"\xb6z\xbd\x89q\x02Kp\xd5\xd6\x86\x11]\xb5\x85\x12^\xbd\x0eC\x94\xbb\xa5\xcd&\xc0j\xf3\xa8xK\x0bX:z?\x97z\x0b]e\x06\x11e\xbd\xdeZM\xa4E\x10f\xb5\x85\x948\x90@\xeb\xf45^\xcd\"\x88\xb4\xda\x82\x08\xb5NO^]pi1\xa4[\x7f\xfbDi\x84K\x8b!\xe1\xfa\x1c\xb6(\xbdpiiH\xb9\xda\x90\xfcRm^\x92\xae\xb6\x00\xb2\xae6\x8f\x90\xaf\xb0\x18\xf2\xae6\x8c\x7f\xa7\x16h2R\xaf\xb6\xb8\xe0\xe3I\xbe\xda05\x8f \xfdj\x8b\"\xffj\xf3D<\x1d\x19X\x1b\x92\x14\xac\x0dC\x0e\x1e\\\x8b kC\xbe\x95p\xd2\xb06\xe9\x8dNE\xd0\x16\x9a\xcc\xe6\xdc\xf1\x0cIb\x0bJ^\xa3S\x11\xe6&\xa5E$\xa3%IB\xc3'\x9f\xd1\xa9\x08)\x92\xcbB\x92\xca\xd0\xc9dt*\x02\x9d\x8a\x80^%\x05%{\xc9\xaf%:\x15\x81NEH\x95\x80\x85\xcc\xfd\xf1&\\\x05$Za4\xffC\x12\xab\xe8T\x04:\x15\x01\x93\xf0D\xa7\"\x08\x9b\x93\xb8D\xa7\"\x98\x84\xbcZ\xf0 \xc6\xbe\x88\x06A4\x08\x1f\x06\x80\xeb\xabD\x83 \x1a\x84\xedJ\xa2A\x08#\x1a\xc4\xa1\x11\x0d\x82h\x106#\x1a\x04\xd1 \x84\x11\x0d\x82h\x10D\x83 \x1a\x844\xa2A\x10\x0d\x82h\x10D\x83\xb0\x19\xd1 \x88\x06A4\x08\xa2A\x0c,\x05$M4\x08aD\x83\xf8\xad\xd0 \x82\xe9\x02UU8\xc8\x02UU\x8ch\x02\xfc\xf2\x11\xf3a\xc4\x0e\xe0\x97\xab\xbf?^R@W\xe1\xa1\x8d)\x01\xbc\x92C\x88\xef\xa0\xd6\xbdYK\x00^\x1c\xa7\xac\xda\x85L\xc5^\xb8\x94*=;\x19s<\x8cj-\x11\xc8\xaa*\xd0\xf8#\x8f\xca\x87\x8b\xd7\x847\x12\xde\xe8\xddl\xc3\xecW\x01\xe1\x8d\x847Z\xaf$\xbcQ\x18\xe1\x8d\x87Fx#\xe1\x8d6#\xbc\x91\xf0Fa\x847\x12\xdeHx#\xe1\x8d\xd2\x08o$\xbc\x91\xf0F\xc2\x1bmFx#\xe1\x8d\x847\x12\xde8\xb0\x14\xd8\x0f\xe1\x8d\xc2\x08o\xfc\xbd\xe2\x8d\xd3\xccR\x13\xea\xf8s\x9f\x08\xaa\xb1\xc7\xac(\x06\xb9\x9fzg\xb1]JU\xefM~\xc3Ju,\x9f\x11\x98\xec=\xaa_\x1f-<\xe9\xca\xbcm\xbf\x00\xf4#\xc3X\xd5\x8bl\xb5\xaaYc\xb9\n\xb5\xff\x81\xd9B\x00\xc3#GP\xac\xfe\xdb\xf4\xec\x82g\xf6-,\xed\xef_\xe1\x8a-\xaf\x81\x95\xcbj%v)E\xd77OqK\xfez\xcbf\xdf,v\xfb\xab\xcf\xccz\xa8\x98'\xba\x80\x880 \x006\xc0E\x18\x02\xa2\x0c\x11`\x9b\xd3\x99y\xc7\xc5\xf1\x01\x92\x1at\x03?\xf0\x06\x11\xe0\x9b\xbb\x02Y{\x8d\x06\xe0 \x15\x08\x07\x91@\x9c\xd3!\x0f.\x1a\x8c\x83\xf9\x80\x1c\x04\x83rNW\n,\x08\x02\xe6 58\x07\x81\x00\x1d\x84\x82t\xee\x96\xdd\x01xX\xa0\x0eR\x83u\x80\x03\xec %h\x07\xb3\x81;\x88\x03\xef \x15\x80\x07Q \x9e\xbb;\x0cN\xa8\xf0T\xe1\x08`\x1e\x1c\x11\xd0\x83\xe3\x80z\x10\x08\xecA\x1c\xb8\xe7\x1b\x82q\x00\x1f\xa4\x05\xf9 \x00\xe8\x83p\xb0\x0f\"\x00?\xc4\x90\xf9\x15\x02\xf4\x83\x14\xc0\x1f\xf8\xc0?\xc0/\xcf\x10 \x04\xae\xe2\x82\xc1@\xa77\x01\x14\"\x00A\x08(eB`\x10\x82\xc0AH\x0d\x10B$H\xe8nW\x8d\x1f(\x84x\xb0\xd0\xea\x8f?\xd1\x07\x18B2\xd0\x10\xf0\xd8\x17`\xc0C\x08\x03\x10\xc1\xb7\xe3\x1f $\x02\xc2\xafcS1\x11\xa8\x08Q\xc1\xc5\x83\x8b\x80\xa8e\x04\xc8\x08\xb1@#\xb8\xa3\x9a\x0ep\x04<\xe8\x08H\xe0\x11\xd0\xe0#\xe0\xa2\x1e\x0eBB\x10\x10 N0\x12R\x01\x92\x10\nJ\xc2L`\x12\x10\xe1\x0d\x00(\xe1\x18 %`\xca\xe8\xe8 \xe9\x00K\xc0\x80\x960\x03\xb8\xb4:\xe4\x17\xba\xc0KH\x0d`\x82\x17\xc4\x84X \xd3\xeaM~\xa3\xba?\xd7\x11\x80&8q\x17p\x02\x9b\x10\x05nZ]9AO\x88\x05>\xad\xde\xe4:\xd0unf2\x00\x14P (D\x00\xa1\x10\x06\x86B\x0c \n\xc1\xa0(xf[\x0fP\x05\x01`\x15\x16 \x85\x18\x90\x14B\x81RpW<\x060\xb5:\x1b\xc0\x91\xd8.\x83\x03N\x9d\x1dB\x1c\xed\xee\x00O!-\x80\n>\x10\x15\xdc@\xaa\xf5\x9eX\x80\x15\x12\xb6\xdd\x00\xa0\x15\x82\xc0V\x18\x00\xaec\xfbK\x96\x17l\xe5F\xa7\xae\xaa\xaa`\xd6\xad\xe3nC\xc2y\x15\xf6K_\x96G!v+\xb8\xbdfj\xbfgxV/\xef\x07W\x8c\x95\xeaj{;\xa8\xabmwX\xad\x00w\xe5\xa6\xb8Q\xeb\x15\xd4%\xb6X`k\xa0\x1e4=\xedZ\xfd\xddz\xdbsY\xce\xb3N\xcdW\xfdK\x80 \xe6[\x10;F\xac\xdc[\xa4kA\xa0\xed\xdf\xbd\x7f\xf7fq\xf9\xf1\xd5\xc7O\x97\x8bO\xef./\xde\xbe>\xff\xfe\xfc\xed\x1b\xf4\x1d\xfc\xff\x02/?\x7f\xf7\x03\xf2z\xa7s\x9d#\x1aT\x05W\x92+*\x9e\xd8F \x1f\xa4\x9a\xb1Z\x95\xf4gT\x8b\xdf\x9e\xe7\xe5\xb2\xb0/\x0f\x1aV\xac_\xf4R\xcd\x96F\xd0\x1d\x96\xbd\x90\x871?@\xd5\xa6\x8f\xec\xd1\xf5\xaa\xcd\x8a\xfe\x8c\xebf/\x91\x07\xfb\x845< ~p\xea\xb7\xa5\xa2}\xe9fW\xa0\xbbn\xc4\x0c\x18\xfe\xbde\xf5\xb6\x01\xf3a\xd2\xbdu\x15p\xf7\xd0\xd9\xe8\xfe\xb6*\xf3\xcf\xcc\x90\x83\xdc\x1b\xe2\x05C@\x8c\xa0\x7f\xea\xe0d\xfc\xeb\xfd6+_\xd4,\x93z\xd5b\xdd\xe7\x8b\x11`\xe2\x04\x8a'\xd0Zy\x12p\x9c:\xea\xc7\xf6\x95\xec\xd3\x18\xfb\x1f\x9b|Sf\xed\xbef\xf0\x9c\xdd\xb9?\xa5?]Tu\xcbg\x99\xffd\xf7WY\xc3\xac\x837\xc0-\xbbj\xf26\x05&0\xaa\xb1rk\xac\x91\xfe\xad\xc8\xcb\xcf\xae\xa1g\xb9\xaf\xf3\xf6~!\xbeh\x96m\xea\x12z\xde\xc9\xf4\xf1\xc6\x9a\xb0m\x96\x17^(]\xbb\x02\xe5\xca^gk\xba|o1UUn\xf5D \xc1\xab\xae\x12\xeaWs\xa9\xfa\xa3\x18\xe49\"3\x86v\xbf\xf2>\xfe\x0dM\x8b\xa5\xdf\xce \xe4\x83s!N\xc4\x88\xaa\xaepPn\xe4\x17\x81\x00@\xa7\xcb\xbb\xcd\xbet\x9f3\x81;\xff\"(@\xab\xace/\xb8\xafdA\x92Gg\xd8C\xb4\xcdKy\xbc\x86\xab)\x8f\x17\x92m%\x00\xf0\x82\xb5\xcc\x17\xa0e\xb5\xdd\xe6M\x83\x9d4\xfb\xcbG\x13\xe3\xe0\xcf\x87\xa7\xbbL-\xd1\x94\xd7?sQg\xad\xebJ\xfc[\x01\x83\xdfQE\x05A%+\x06\x179}I\x07\x92x\xd0\x81\xe5\xcb\x9ae\xad\xfc*FL{\xa8x\x012f\xa0\xca\xe4\xdb\xb8Gt\x08m!\xa1\x05\xf5x\xfd\xe93h6\xe2\xcf\xcb\xeb\xac\xde\x885\xa1\xd7M\xbf\x1a<\x01A\x12_\x0b\x92\xd7\xf4D\x8c\xa9m\xb3\xbb\xc5\x17\x0e\x80.\xc2\xa8]\xe9ch&\x11\xf1:\x93\xa3c\xdf\xf3\x97Y \xec\x86\xd5*\x94\xc1\xb1\x91\xac\x94\xc7\x10\xa2AI\x8c\x91Ze\xb9CEB[^\xf2\xde\xd6\xb0\x032\xef \xd22H^W\xfe \xeew|vp\xce4\x80\x0f\x1cv\xc6\x81\xc0\x00\x0fJ\xa9\xfb\xa1\x00\"\xc4\x1fL\xbd\xf2\xd6C\xc6\x93oje\x8e\xcb6/\x17\xfcCu\xd1\x7f\xa8\xce\x98\x85\xb1\xf54<\xf5`\xbb\xe5Y#\xbe\xa0a\xc5\x96EV;\xf6\x88\xb6y)Z\x9c\xbaZ;4\xd5\x17S\xbe.Q`\xf0\xd9\xd4\x15\xea\x04\xdaj#7\xb4\x04\xd8 \x80\x02\xfe\xd5lt\x95m\xab}G%6o@\xfe<\xa8._\x08\xe8\xafo\x95\xc5\x97\xd7\xc0\xee\xe4\x0b\x94/[,\x1d\xf2\xd22y_\x16Ys\xcd\xa7.-\xf2a\xa3\x10g<\xac\xb2\xe7)\x0ck\xf4\x98\x13I<\x14<\xb8\xaa\xaem\x13\xdb2+\x96\xfb\xa2\x83n\xd6{\xfe\x85e~\xe0\xbe\xec\xdfL#bW\xed[\xc8[\x91\xa1Qn\xa0\xba\x11\xdf\xa9\xdd\x16\x02\xfc\xf1\x9a\x95\xb2\xaa\xe6\n\xd4\xe3\x0d\x19\xf3S\xc7\xcb\xd2\x93\xc9\x10\x937|\xae_\xe5\xad&\x87e\x83\xe6c\xf4w{]5\x83C\xaa\xcc\x0f\x1d\xbe\xc6\xbc\x19\xd10\x07-BT\xad\xaf\x82\xd1\xd3*\xefpZ\xb9\xd9.\xb8\x84\xe6\xa7\x8e\xde\xdf)\xfc\\\x89\xb0\xee\xaa[&g\x9d+\xd6\xbd.\xb6\x12\xd8\xab\xb5\xd9\xea\xfdVQ\x05\xf3\xd3\xb6\xfb\xa2\xcdwE.\x0b7~\xf6\xc1\x0d\xa3^7H\xe1\xe9\xd9`\xea\xcc=\x99\xea\xb3\x02\xfb\x11o\xbbl\xa3N\xd6:\x1c\xa5F\x8f\xe9/\x1c\xcb\xf8\xf5\x7fV\xed\xde\x94\xc8#\xcd\xb9\xae\xf3\xe8\xfa\xb1\xbbva\xcd\x19\xf1\x0e\xa4^\x86`\x9b\xb7\x05{ \xffc\x1ba\xf5\xf3\xf5\xa0\xca\xff\xa9\xe8\xb5Y\xd3\xc8]\xbd\x8bl\xc3>\xb0\xbf\xeeY\xd3\x9e\xca\xdf-\xce\xfa\xa3/\xb9[\x1eB\x06\xdb\xaai\x81 \x92\xaa`\xb7\x1an\x15\xedkf\x00\xf6\xf6\xef]\x15\x02\xeb$#\xf72s\xbd\xa9\xd9\x1f,\xa7\x87\xc6\x81\xd8\x8e\x8d\x1f7\x0c\xd1\x92w\xdc\x85\xec4\x96\xcbo3>e\xb5'\x90\xb7\x8df\x857b\xe4\x93P\x88\xd8;\xb8\xcd\x9b\xf1;\xb5UD\xa4\xd1\xf5YkXI\xc6\x83<7m\xbdLc\xf7\x03\xa94\x8e\x7f#\x95F\xdc\x12 \"\x12\xc7d[%\x95FD\x92X\x9b\"A,&9\x8cT\x1a\x13&\x82\x85$\x81\x05%\x80\x91J\xe3\xdcd\xaf\x88D\xaf$I^\xe1 ^\xa4\xd28'\xa1+$\x99+\"\x91\x8bT\x1aI\xa5\x91T\x1a\xb1\x89XI\x93\xb0b\x12\xb0H\xa5\xd1v\x997\xd1* \xc9\n\xa3A\x18\x92\\E*\x8d\xa4\xd2\x88I\x94\"\x95Fas\x92\xa1H\xa5\xd1\xe4\xc9\x9b\xf0\x14\x9b\xecd\x9d\x1bH\xa5\xf1\xd0H\xa51\"I\xc9\x9f\xa0\x14\x9a\x9c\x14\x90\x98\x14\x9c\x94\x14\x96\x90D*\x8daIG\xa4\xd2\xd8\xd9\xefR\xa5\xb1\xe7\xfd\xf5\x8b\x9e\x17b\xe4}y\x98\xd82\xfa\x88T\xe90\xac\xcc\xae\n\xb9\xf1\"\x11A\x1e\xb6\x01\x9a+\xb4\x18%m\xce$\xc6\x08bFy)\xef\x1d\xfc\xadf\x7f\xdd\xe75[\xbd\x84uV\x8c`%\xe3\x97\xba.r\x0f\xe4\x9e~f\xf7\xb6\xa2O\x00R\x85\x88fj\xd4\xafY\xbb\xafK\xa9\x03(\xa1>\x05\x05w\xf0\xa9\xd8\xbd\xdaL\xb6yD\x0dxE\xdd\x90\xe8)\xbc\xe7stU\x8a\xcf\xdbj\xbdn\x98\xa0\x95\x8f\x8b\x0b\x83\xdd\xf7\x86\xb5\x89\xa3e\xd9\xcb0\x04Q\x96\xcf\x16\xc7\xc9>\x82\xaa\x8c\x08e\xb9\xdf\xb2:_\xea\xbf\x89\x01B\xf1\x0d\xe4F\xce5+u\xe0\xf7e\xb7w6Y1\x9f\x0bo\x05k\x9a>\x84r\xb7i\xdf\xf0P\x7ff\x81\xf1\x1c\xbb?rp'0\xb5!\xbcE\xbe\xcd\xb1\xd1\x15\xd7j\xe4\xde\x86^\xcb}\xd5a\x0bVd\x86}1\xc1[\xe5.\xca\xf0O\xe7k(\xd8\xbaU\x1bvy+Gp\xbd\xce\x15[\xc2\xb2\x83\xc8\x87\xf08_\xdd\x03\xcb\x96\xd7\x90\xedv_0\x8aC\x0c\xbe\xbf\xdf\x15\xcb\xc1\x1d<\xa2\xa2\x85V\xd0\xd6{\x06\xfc\x1fy\xb9\xca\x97\x82V\xa5\xc0!\x15Aq\xa1jHCwy\xb9,\xf6\xab\xc9*6\x93O\xe9\xd0\xb9\xc9\x1b\x13X\xef`\xd3\x98\x0f\x9b#\x1a\xca\xc8\xd9\xa7\xf3f\xf2\xb6&U\x10\x0b\xff\x9a5\n\x94\x17\xdd\xab\xef\x8f\xbc\xcb\x9d\xaa\xde\x94o\xcaj\xca\x9b\xd3\xbdq\xfc\x08\x19\x99\xb9/\xf60}\xd4\x96Xjx\xb55\xbba\xf5\xc8\xa9\xeb\xb5\xaa\xab\xa7\xaf4\x1f\xb0;jf\xee##?\xfc\x19L\xb0\xef\xa1\xaaW\xac~\xa8\x10\xd8$\x93\x9f\xf95\x93\xcf~\xed\xfe-\xd4q\xff\xa6\x04\x8b\x9d*\xca\x9d\x88\xf2\x80\xfcV\xae+\xd1\x16\xe5d\xdd\xff\xa0\xe4uu(\xcc\"\xcaOt<\x1e\xbb\x86\xb2\x8d\x97\x11E\xeb\xc2)!{\x11\x06\xcc\x16}j\x0d\xe4p\x05d\x9c\xfe\xb13\x9a\xe0\x8d( H+\x88\x88\x02:\xaa\x10K]q\xf8\x0bR\xd3\x98\xa4U\xf8L\xd7\xdd,x6p\xf9D\x07\xe3\x91j\x9f\xf5\xc1Z\x18\xca\xa8\xad\xfd\x02\xa0\x97\x8fm\xe1}\x00 \x1e\x02#\xee\xbcS\xa9M\x1ab\x9f \x90\xdb5\xfd\xb5\x93\xe7k\xb6\xc7\x15[^\xff\xcb7/\xb4\xfcZ/\xe3\xe6t\xd7\xf6\xd9\x0c\xaeM\xebq\xafy\xf8Z\x1f<\x7f~\xad\x11\xd4AW*\x86\xb4\x98\xaa\x8er.\x86/@lo\xca\x1fk\xb6d\xf9\x8d\xeddm|\xec\xfa\xb1\xa5\x9f\xb0U\xe0\xaaRm\xb0\xaa\x14\x96k\xbe\xca\xbc\xba\x07\x87\\V\xb6\x14\x8a\xa1J\x05\xd4>\x0fV\xb7\xa5\xfc\xc6\xaa\xcaA\xebR\xfb\xda\x02\xd9\xa9\x96y\xd61H\\\xe8\xc5\xcd\x90\x9aQ\xad\xb9G\xfbs=\xaf\xf4*+\xb2r\xe9\xd9\x14N0@\x94\x955)\x0b\xb0mF\xf2^f\xba\xc1\xb6\x92\xd7U^\x0e\x88Z\xa2A\xf4\xe4\x9e\xb2\xdajEY\xfe\x02\xb3R\x15\xce\x85\x18\xbc{\xff\xf1\xedK\xf1\xed\xa5\x08<\xf2#&\x17\xfb\xcc\xe7e\xab\x96w\xdd\xde~\xe3l\x04j\xed\xa7\x88+\xf6\xee\xaas@\x9an9\xc1\x1b\xe1\xa6\xdaTba\x15\xbbS\xdew\xa2!\xfd\x86?\xe1&+\x84\x9at5\xech\xecn\xc9vR\xae\xda\xe8.o\x07\xbb\xee\xe6\xda\xa8\x96:]\xe8\xaa\xc1A\xc5\xae\x81mU3h\xf6y\xab\xd5\x7f\x8d\xce\x96\x85\x90\xbc\xee&\xeci\x18\xe8\xe0kat\xf0\xf5o\xee\xe0\xeb\x83w9&\xd3\x0d\x16\xde^^\x9d\xc9\xd1\x99\xf1\xab\x80(v\xc2\x88b\x97fn&\x8a\x1dQ\xec\xccF\x14;aD\xb1;4\xa2\xd8\x11\xc5\xcefD\xb1#\x8a\x9d0\xa2\xd8\x11\xc5\x8e(vD\xb1\x93F\x14;\xa2\xd8\x11\xc5\x8e(v6#\x8a\x1dQ\xec\x88bG\x14\xbb\x81\xa5\xa0;\x11\xc5N\x18Q\xec\x88b\xf7\x98(vt\x1av\xecQ\xc3t\x1a\xf6\x11\x83\xeb?\xc7\x99N\xc3N\x11E:\x0d\x9bN\xc3\x16F\xa7a\x9b\xa9\xe2g\xbf\x8ey\xb8\xae\xa3\xb2\x07\xd404c\xbcgM\xc2.\xcb\xcd\x04\xf27S\xd9\xad\xbf'\xda\xb8\x8d\xc7\x11E\x0d\xf3\x91\xbf\x9d\xae\xc1\xeb\x1e\xc2h\xdf\x08\xe4\x03\x07\x1f\xe8+C \xdf\x1e\xac\xd2K\xf7\x0e {'\xaek8\xcd\xdbSW/\xc9\xdbG\xf1\x0e\xaf\xe0|z7.^)\xa9\xdd8bw8\xad[\xd1\xb7-\xfe0\xa4n\xe7\x0bt\x12\xba\x93tz'\x95\x1b\xd16|4n\xaf\x0b\\[HM\xe0NI\xdfF\x91\xb7\xc3\xa9\xdb\xfe\xc0\xc4\xd3\xb6!7\xb5\x187i;!e\xdbM\xd8vW\\,p\xcc5w\xe9E\x1e\xac%\xb4\xf5l\xd6\xbe\x14Dg\x1d\xffFtV_\xab\xec\x8d\xe8\xacDg5\x1b\xd1Y\x85\x11\x9d\xf5\xd0\x88\xceJtV\x9b\x11\x9d\x95\xe8\xac\xc2\x88\xceJtV\xa2\xb3\x12\x9dU\x1a\xd1Y\x89\xceJtV\xa2\xb3\xda\x8c\xe8\xacDg%:+\xd1Y\x07\x96\x82ZHtVaDg%:\xeb\xe3\xa4\xb3\x8e\xd9\x14\xb62\x8f\xaf\x9a\x1c5\xaf\x899G.\xf3\x83Q\x97\xce\xfa\x83\x93\xfb\xcb\x1c|\xa6\x01\xd7\xf7\x93\xbe\xd3\xc0q\xea\xbc\"HN\x9dC+\xd9\xc9\xf0$u\xd9\xa3e=\xc9\x00\x1c\x83\xe8\xe4c\xe6x7\xab0\xbb=\x89\x99GN\xd6\x11\x92q\x94\xa8^IYFN\x82\n+\xdb\xda\x89\xba\xda\x90^p\xa1\xbd\xe0kD\xd2|\xa8/7y\x94vU:\x8f\xb6\x97\xe6\x0d\xbe4\xff1\xf7\xd2p\xafJ\xda\xa4\x94\xfau\xa9\xff\xd3\x87\xd8\x0f\x8efwzk\xab\xea3\xec\x8ali\xdc\x08\x95\xa6N{\xe7\xcft\x9fh\x1c\x1c\x17\xff\xa9\xc6\x81\xb1\x19\x97T\xc7f_\xe6w\xfd\x19\xf7\xb8\xc0\xf4\xae\x1c{\"\xf2\xf4\xf6\x85GK\x13\xf0\x81 \xa9\xec\xe4\xe9\xa3\x89Yq\xdd\xd4%\x0e\x90\x13\xd4\x10\xbf\xda\x17\x12ASl<\xc8ZT\x08\x8eTuG\x9dB\xcb\x88\x0d\xa9aR}[\xb6\xf5}O%+\x07\xd3\xb8\xe7\x08}\xb1\x89_\xb3\x82\xddde\x0b[\xd6f\xab\xac\xcd\x10\x0cG5HJ&\xf9\xb0\x17\x0f\x89\x93\xea\xa2\x18\x1e\x98i\x91\xd2\xb4\x958$\xba(\xc4g=4y\xb9)\x06\x8b\xbbg\xa6\xfd\xfe\xbe`\xfc\xbfF\x9a$\xefl\x9d\xb7~\xa1\xc3??J\xd1\x1d_\x08\xfa;[A\x917\xed1\x89]\xa6\xdb\xcfL\xab\xa8\xc9\x85D\xf8\x92F\x84/\"|\xf5F\x84/\"|\xf5F\x84\xaf\x96\x08_f#\xc2\x976\"|\x11\xe1\x8b\x08_\xc8U\x12\x11\xbe:#\xc2\xd7\xd0\x88\xf0E\x84/\x83\x11\xe1\xcbx\x0d\x11\xbe\x88\xf0e1\"|\x11\xe1\x8b\x08_D\xf8\x1aX\n\xf2\x0d\x11\xbe\x84\x11\xe1\x8b\x08_D\xf8\x9aW\xe6\xa4\x84/\x13\xa7\xcbu\xc0\xf1`\x07\xa0;\xd5\xcc\x80\x166\x06z\xd7\xe0\x01b\xca\xec\x1c\x1dPc\xcc\xe7\x1f\x9b\x1e\xa3nx\xe4\xdc.\x1e\xde\xc7y\x0e\xb2\x8fI\x85\xda\xdf\xc2l\x11Aj\x9e\x98\x87)\x86\xe6\x8a%\xadaR\xc6\x98W\x95\xca\xc9\x1a\xf3\xf3\xc6<\xcc1o\x13\x93\xe6kh\xd2\x02\xf8c\xa8\x17\"\x0d\xcb!\xc3\xbf@iiyd8&Y\x10\x97,\"F\x18>Yp\x9c\xd2q\xcap\xac\xb2 ^Y@\x90\xc2\xaa\x9d\x8c]6\x8f_\x86b\x98\x1d-\x08X\x1aZ\x82\xb7\x8e/XR\xa2Z\x18U-)Y\x0dW\xe7d\x845\x14em\x1ei\x8d\x8e\x8fVF\xc7G\xffv\x8e\x8fF01\x9d_/Nr\xe6\xc4\x9b\x81\xef39\\\xda\xf8\x19F4MiD\xd3L\xf3\x85C4M\xa2i\x9a\x8dh\x9a\xc2\x88\xa6yhD\xd3$\x9a\xa6\xcd\x88\xa6I4MaD\xd3$\x9a&\xd14\x89\xa6)\x8dh\x9aD\xd3$\x9a&\xd14mF4M\xa2i\x12M\x93h\x9a\x03KA\x99#\x9a\xa60\xa2i\x12M\xf3q\xd24\xe9\x98\xe9\xb03|\xe9\x98\xe9#\x06\xd7\x7f@2\x1d3\x9d\"\x8at\xcc4\x1d3-\xec\xb7z\xcc\xb4f\xee\xb7w\x1di\xbf\xc9\xb7\xfb\"k\xd5\x86\xf6\xaej\x0e\xb9\xf8\x97\xea\x12\xd0\xd76\xc0\xee\xd8r\xdf\xf2ze\xd0\xd6Y\xd9db\xcfR~\xc35m\xbe\xcd\xc4\x8f\x9b\x8c7\x191BH\x9f#\xc6\xbd\xf6\xfbDW\xfe\x91\x92\xeb7Y\xb3\xc8\xcbu\xe5\xe1\x93\xe9\xcb\xf4\xd0\xca\xff\xcd_\x8e8\xe7\xf4\xaa\xda\xb7*\x1c\xfdp\xaa\xe2i$%Z\xcb ^\xa2\x06/\xc8mV\xb6\xcc \xf6\n\x18\x8c\x02\xc1\xad\xc2\xe0\x00\x00?d\xcd\x1fEAtL\xb6\xd9]\xbe\xddoa_\xe6\xad\xd8\xc0\xbe\xad\xea\xcfp\xab\x80J\x89\x8f\xb5wv\xa2\xd9\x8e\xd5\xbcp\xa6\xefQ^k\x1e\xdc\x07\xaa\xf3\x0fY\xf3\xa9\xe9+\xa6\xce\xa5\xad\xd6\xe2%g\xcbVR\n\x96U\xa9\xb0\xe6\xb1+9\x8cx\x1a\x94\x9a+\xf2f8sh,\xe38Mg\x95\xb5\xd9\xcc\x00Za-\\\x93y\x93\xb5\x99X\xf9\x95\xf7\xa24\xfd\xf8\xba\xae\xc5\xb1\xbd\xf2CJ\x80\xce\xe5\xaa\xb0\xe0F\xa0G\xa8\xaa\x14\xd3\xd5O\x9f.?:P\xc1\x82\x95\x9b\xf6\x1av5[\xe7w\xb2\x7f\x8a\xf1\x9a\x0f\xf1\x0d\xe3\xdf6-\x93\xa5\x91\x85\xd8\x17m\xbe+l8\x9a.cW\x04#\x90XT\x9b\xc8H\xe3\x02\xf9c\xb5\x19o\xe6\x14\xd5f4&\xc5\xc6\xd3p\x01\xbbae\xfb\x88e\x85\x85\x1b\xeb\xaf\x88\x90s\xcb\xda\xb6\xce\xaf\xf6\xad;\x03\xc5W]i\x9e\x8c\x18\xc0U]\x1a&\x00\xd2\xact\xe3\xa1\xa1b\xa1\xcd\xdb\xe9{s\xc2\xe6\xbd\x1d\xeb\xf1y\xb9bw\xd8\xc7\x1f\xae\xb3\xccf[\x80\x9a\x0c\xd7k\xb5\xbd\xe5=\xea\x95nq\xf2SX1\xe2?\xb3\xfb\x17\xf2\xfbi\x97\xe5\xb5k\x1b\x87\xdb\xf4\x14\xfc\xac\x94\xbd\x15\x95]\xe0(\xa6(\xa0\x9c\xb6\x1b\xfe\xd9\xa6yG\xb0b7\xac\xe0-R|Dfm+\xbe\xeb\xbaMg\xab\xc3\xe1\xd0\xd4:\x00+\xbd\x8b\xf2\x1d\xdb\xe4\xe5wE\xb5\xfc|\xd2\xfd\xedm\xb9\x9a\xfc\xe5\xf55[~\xfexg\xef\xd4\xe5\xaa\xbb\xf6\x0d+\xf2\x1bV\x7f\xbcs\x00\x8f?f-\xabO\x86k\xde\x06\xb6\xd9=\xff\x10\x90\x99\xa8+\xb5\xa3\xd0^\xb3\x86\xa9\x81\xd1\x1ck\\\xa4E\x9c\x9b\x01\x9b\x02\x9a\"_\x8a=\n\xf9\n\xe4\x08\xa1\x08\x88\xb7\xacf\xc0\xb6y\xdbZ\xc9P\xab\xbd\xa4\xb0\xca\x81\xdfV\xd3~>\xb0\x8d\xfc\xae\x8d0\xe8\xd6\xf6C\xeay;\xc8\xa5\x90\x9b\xc9fm\xe0KV\xdf\xe4Kv\xda\xf9 n\xb90\xe2\x96\x13\xb7\xbc7\xe2\x96\x13\xb7\xbc7\xe2\x96\xb7\xc4-7\x1bq\xcb\xb5\x11\xb7\x9c\xb8\xe5\xc4-G\xae\x92\x88[\xde\x19q\xcb\x87F\xdcr\xe2\x96\x1b\x8c\xb8\xe5\xc6k\x88[N\xdcr\x8b\x11\xb7\x9c\xb8\xe5\xc4-'n\xf9\xc0R\xf0|\x89[.\x8c\xb8\xe5\xbf\x07n\xf9U\xb5\x1a\xce}yy\xf0'+\xff\xdb\x84\xfd\xfc\xbf5[\xbf\x84g\xff\xcf\xd9`\xe3P\x91\xe6N\xdb\xbbSE\x9a\xeb\x91)\xa9\xfc\xf4L\xf9\x98\xd2\xee\x14\x90e&\xde\xb5w\xeaZ\x93\xfc\xed\x0f\xac\xfdx\xd7H\x80o\xcd\xda\xe55\x1f\xe4\xef\x1a\xc1\x93\x1d\xa2\xb7#>\xdd\xe0&\xf5\xf3\xc3P\xea\x90A\x1b\x14O\xa3\x82\xcf\x9e\xf4\xa5 \xa6\xefg\xe6\xeb9\x18zX\xb9\xdf\x8e\x97%\xe6\xf0\xda.yu\xf9\xda\xf6\x13\xaf\xc7\xe8\xa5J\x8e\x8e\xcb\xbd\x9d\x02e\x11\x17\xfb\xae\xae\xb2\xd52k\xda\x8fwp\xa5\xff=\\\xd2\x19\xa9N\x83\xbb\xd4\xcf\x0fCuj\xc3\xb9D\xed]w&\xb7\x8d\x99\x13%\xd5\xe4:\xe1\xd8\x8b,\x0d\xa8G\xee\xc3\x13?^3\xb8*\xaa\xe5g\xf5<\xc3\xb5\xed\xddu\xd6\\G\x16d\xf4J\xf8\xc3\x86\x8by\xee\xd7\xb4\x9d\xb0\xacV\xac\xd9e\xb6\x13i\xbd\x0fUu\xe3\x9f\xbe\xc2\x8d\xd6\xa1\x80\xd7\xd5\xca\xf4\x11g&w\x81\x97\xe0\x05\xa8H\x8fB\xd0\xe9e\xf0g\x1aA\xb5x\x85\xae\xd1\x83\x9e}\x90\xab\x04\xbe\xa8nN\xf4\xbe\xf43\xc3\x8duv\xbb8\xb6X\x15\x7f\xf3\xd5\xbe\xdd\xed\xbb%\xc8@R\xe6Y\x03E\xb5\xd9\xb0\x1a\x9e\xd7\xd9\xadz\xd8W\xa7\xf0\x93Ub\xc9\x8e\xe9\x96U\xf9b\xc5\xbf=\xb7y\x997m\xbe4\xc5\xb8\xa86\x8fX\xccj\xdbl\x16^5#\x7f\xc3\x94\xe6o\x9e\xe0\xd2*\x93\xe6m\x04\xe0\xd1\x08\x93\xe6\x0b\xae\xb4/#\x9d%\\z\xaeA\x06B\x1aNML\x1a.0\xd2\x10\xe1\x91\x86\x0e\x924|\xa8\xa4\xa1\xb4\xc6\xa4\x05DM\x1aRJLZ\xa0w\xdcx5\xb6^\xa7kp\xfew\xf7\x82\xe1\xb6\xcev;V\xf3\x0f\x97\xda\xc5\x11\xea\xadU\x072g\xe5J}\xc6f\xb5\x83\xa624Y\xd1\x06\xf2\xb2iY\xb6\x12\xdf\xdb\xd9\xad\x1c\xe6\x1d\xd8Up\xcd/\xc5s$C]\xd7\x9a\x95#M\xaa\xa0\x8a\x0bv$\x1f\xf7\xbb~\xe1\xab\xaf\xe6\xd4~f\xf7g\xbd\x1e\x9abW\xf2o\xa7I(<\xee\xb0\x81\n S\xb8x\x97\xd3\x9d\x12\xf6\xd2\x12^M\xb5\xf54\n\xa7h#\x04T\xe6\xd5w\xaf\xcf\x7f\x92\xfb\xd2?V\x9b\xbe\x99\xf3\x18\xef\x97\xed\xbef\xba\x92B\x13\xb8\x94r{\x0e\x92]{'|v\x9b\xddE\xb51\x97\x11WB\xec\xfa\x81\x0f\x06+\xb9t\xe0\x8b\x04\xb33\xd4\x1a\xc1,\x08\x0c\x98\x01g\xfc\x19\xd2Cl\x03\x05<]B\\Y\x92 \xfe\"\x17\xa9\xafFb\xb7\xb5L\x82\xd1\xf4\xc0\xc3/\xb7\xa1%R\xe9\x8d*\xa8\x16\xe3\x85\xab{_1[\xcb\xe2\xca;i\xfa\xa7\xc9\xd6\x93\x18\x81\x88\x02\xa0\xfb\x05\xc4\xa6G8\xfc\x1d0\xe4\\cP\xd2\x14 o\x92D\xea4 |\xa2D\xa2T\x89\xb8d \x87;\x1ePt\xba\xc4\xec\x84\x89\xd4)\x13\x81I\x13\x89\xd3&\xc2\x12'\x02S'\\m\xb8K\xaa\xc0&O$N\x9f@%P$L\xa1\x98\x9bD\x11\x95F\x91(\x91\"&\x95\xc2\xe1L$Y\xf8\x93)\x8e\x92Nq\xbc\x84\x8a\xa3\xa4T\x84%U$O\xab\xc0&V$M\xad\xc0'W\xc8eD@zEx\x82\x85w(\xfc\n\x91b\x91 \xc9\xc2\xbb!\x80ZP!R-BV]\xc1\xe9\x16\xaeI\xf0\xaa\xbaa\x88\x84\x0bl\xf9\x12&]\x84\xa4]$N\xbc\x88K\xbdp\xb5\xa0\xc6\x9f|\x11\x9d~a\xf1\xc6\x9f\xe6K\xc0H\x95\x82\x81\xce#@\xa4a\x04%bxx\xd3Q\xc9\x18>\x9fVRf\xa2\x94\x8c\xf0`\xe2\xd32|u\x8bH\xcd\x88L\xcep\x91[\x93%h\xa0S4pI\x1a\xd84\x0dD\x94\xc3S5B\x925\\\xe9\x1a\x89\x126\x02S6\xe6%m\xf8\x02\x1a\x90\xb8q\x84\xd4\x0do\xe9\xac-=]\x02\x07\"\x85#>\x89\xc3\xe2\x8e_\xe6J\xe3H\x9c\xc8\xe1K\xe5\x88L\xe6\xb0\xf8\x92_\x86\xae\x8fcDB\x87\x8bu\xeeJ\xeaH\x9f\xd6\x91<\xb1\xc3\x9e\xda\x912\xb9\x03\x93\xde\x11\x9e\xe0\x11\x94\xe2\x11\x91\xe4\x11\x9a\xe6\xe1L\xf4p\xd3\xee\xf1\xc4{l\xb2GD\xbaG`\xc2\x87\xa3\xba1I\x1f\x16W\x83\x84\n\\\x97\xc0%~8\x9a\xbc8\xb3\xd2\x91\xfa\x914\xf9\xc3\x93\xfeq\x9c\x04\x90Tm1 $$\x0d\xa4O\x04\x19Z\x9boY\xd3f\xdb]$2\x84\xfb\xf2\xfd\x98\xf7\x1b\xf2\xbb\x9a\xdd\xe4\xd5\xbe\x91\xfc\xb6S\xf8\xbe\xaa\x15\xc9\xad\x81\x7f\x83\xafO o\x9f5\x8e7{+\xae\x15\xcd\x7f\x95g|\xac\xb6\xbd\x121\x82\xea\xfa\xe9\\|\xb5/pS\xb5\xfdw\xa7,\xc9\x8fY\xd3\xbe\xae\xb6\xdb\xdczHW_T\xf8\xf6[\xf8\xfa\xc4:\xd5\xf2\x1a\xf0\xaf\xd1&oD \x0e\x1d\xfa\xe3\xf6\xf1\xae#\xa5yp\xdf\x9a\x15\xec&+[h\xef\xe4i\x89\xe6U\xc9\x96\xb5\x19\xffY\xec3\x9a\x8a\xdef\x9bf\x80\xe0\xcb\x05\x88JS\x95\xc7\x186\xb2\x17\xae\xd8\xb2ZMO\xd7te\xcf\xc0\x909:\xe7l\xaa!m\x95\xce\xa6\"-;\xdf\xfe\xa2\xbf\x9bI\x8b\x02kI\xcb\x0e\x03\xd1&\x01hc\xe0Y\xd2\xb2K\x08\xca\x86@\xb2A\x80,i\xd9\xcd\x85a#@\xd8$\x10l8\x00KZvs\x80\xd7\x10\xd851\xe8\x8a\x83\\\x13\x02\xaeX\xb8\xd5\xf0%EZvcC\x00\xac\xd8UR0\xb8JZv(H5\x06P%-;\xdbe^\x105\x00B\xc5(\xb5\x85\xc0\xa7\xa4eGZv\x18\x90\x94\xb4\xec\x84\xcd\x81EI\xcb\xce\xe4\xc9\x0b\x84\xc6\xc2\xa0\xd6\xb9\x81\xb4\xec\x0e\x8d\xb4\xec\"\xe0N?\xd8\x19\nu\x06\x00\x9d\xc10g\x18\xc8IZva\xb0&i\xd9uv\x0c(3E\x9b\x0b\x801\xf1 &F\xcb.\xf1\xd9TV\x10\xc3\xa9=\"\xf2Y\x83\xa0\x17\xcf\x97\xfa\xe8KX?\xa0\x83\xd0\xb2[Wj\xdd\xd6\x81,Y\xcar(o#\xed\x05|\xf7\xe1\xfd\xab7\xaf_]~\\\xfc\xf4\xfe\xcd[\xab\xd4\x8d\xe5\xf2\xef~|\xff\xfa?1\x17^\xfe\xe9\xddk\xccu\xaf\x8c\x17v\x9a9\x01\xa5\xf5\xef5t\xe8\xe3O\xd5\x8a\x0d\x14\x92\xc4\xce}'\xa2\xc3\xa3m\x811A\xe0\xba\x07`&|\xb8x\xdd\xc1\x99\xa6\xb6\xef\x8a\xfaK\xf8oVW/\xe4\xd4/:?\x7f\xbe\xd0<\xb2\x8c[\xe6\x97r\x10+\xf1\xd7\x01\xf6\xdc\x0e\x94\x82\x04*\xc5\x9f#r\xcc\xe5\xb8V\x08\xe5\xbd\xdb,o\x1b\x0b\x94 \xe6\xf8;\xb5\x8b\xba\x14P{+\xd5\xb52\x85\xc1\xa3\x8a\xcb\xdf\xf8Ai\xf9\x1f\x93\x166\x83\xd7\xd7l\xf9\xf9\xe3]\x9f\xce\xddC\xd5|\xc1\x8a+\xec+ci\xff\x7f\xf6\xde\xb4\xcb\x8d\x1bI\x14\xfd\xee_\x11W\xef\x9d\x914]\xa26K\xb64W\xf7Li\xb3\xabmY\xd5R\xc9}g\xfa\xf5-\x81$H\xa6\x95\xcc\xa4r\xa9\x12\xd5\xd7\xff\xfd\x1dl\xb9b d&\xcb\xb2\x8d8s\xa6\xe5b\"\x00\x04\"\x02\x81X\x80\xe3A\xc3\x15\xf7\x91\xe9|>\xd1\x96gC\x14\xb4;,;S\xb7\xa2\xf2\xbc\x9c\xb8\x0e\xca\x8b\xff,\xbcb\xf2\x12I\x97\x87\x9b\xec-\xfeb\xbe\xaf\xea\xba\xfe\xcd\xbe\xdb\xff\xda\x90|\xf3\xab\xbcW\xca\xf8v_\xf5j\x9f \xe9\xbeu\x97Q\xff\xd5>\xf9\xc3\xd5\\b\xe5\xf3^_x\xa9\x0fBv\x83\xd3\xb5\xef\xde\xb1\x04\x84\xec\x86\x90\xdd\xa0\x87\x90\xdd\xc0!d7\xf4!d7\x84\xec\x06\x13\x84\xec\x86\x90\xdd\xc0!d7\x84\xec\x86\x90\xdd\x10\xb2\x1b\x04\x84\xec\x86\x90\xdd\x10\xb2\x1bBv\x83 BvC\xc8n\x08\xd9\x0d!\xbb\xa1\x01SD\x9aCv\x03\x87\x90\xdd\xf0g\xc8n\xd8\x90\xbc\xa9\xa2\xda\x8fK\xb0\x1f\xab\xe7\xbf>\xf1o\x19\xe5\xf9c7G@\x13^\xb6\x0b\x9c\xc56\xf4\x93\x94\xe2\xd6\xeb\x13Q\xf2\xb8\xeb\x187fKh\x8e\xe7\x88\xb8^\xb9[gdI\xab\xe0\x1e\xbf1\x9a.\xcfw1In\xff\x8bM\xd2\x16\xe5;\x16_\x9f\xc6$\xe1\xd3\xe2\x0f\x14U5\xe5\xf1\x1e$:\x90\xdd\x00C\xcb\xec\x88\xa8\xc89\x05\xb5\xc1\xc0\x06\xd6\xaf\xd4\xa4\xaf\"$X\xf8G\xdeL\xef\xcfX}%\xf6\xfb\x9b[\xf3\x90\xf5\xed\x92\x89\x9ao\xd0\x00)\xa4\xb8\xb3_8]/\x19+ \xda\xf9\x84\x9d\xff\xc6\xf8\xb1A\xf3!\x15\xe1\x1c\xc7\xed&;\xbc9}\xd6\x95\xf9P\"\x1e\x82\xa8.\x0f\"\xc6 \x07!\x88\x1a\x82\xa8\xc6/C\x10\x95C\x08\xa2\xf6!\x04QC\x10\xd5\x04!\x88\x1a\x82\xa8\x1cB\x105\x04QC\x105\x04Q\x05\x84 j\x08\xa2\x86 j\x08\xa2\x9a \x04QC\x105\x04QC\x10\xb5\x01S\x04\xb4B\x10\x95C\x08\xa2\xfe\x19\x82\xa8\xec\xff7\x10\xb4\x8e\x90\\\x12e \xaa\xe9\x84V\x81E\x1e\xf8RAU\xb6E4U\xd1\xc4\xe1S\x1e\xe4\xfa\n\xc0\x14;\x95>\x1a\x1e;5\xc7L\x9f\x89\xafZ1S\xc1f\xfc\xef\xadP\xa96<\xda@\xf0\x95\x9a\xd4\x17\x1a\x1e\xad)\xd1\x84\xd6P\xf8\x02Fn\x12\xd4`\x1c\x078CT\x9c\xdf\xb4\xbc\xea\xf4\xcb`\x1c\x1b\x00oi\xd1\xe0U\x19+U\xf3\x911\"\xfe\x93\xd2Z\xdc\xdbd|(\xa5\xd1\xd8\x18\x92\x92\xee\xc9\xca\x89\x91\xae\x8aK\x92Q\xeeO\xdd\xedbq:\xe4\x8e\x1b\x12\xc3\xb54\xb9%\x11\x9adv\x91n\xb7$Y\xe6\xf2\x81mS\xb7\xdc\xf0c\x9b\x0f<\xa5\xeb(y\xcaC\xd3\xc2<\xac\xcd\xbej%#Cd\xba\x86\x13\xeeu$q\xceC\x1f\xc6\xd9\x16),i\xc1\xdfU\xdfP\xee\x14$\xf5\x94\x15)\x16$\x81\x0dI\x961\x05\x02\xeb\xe8\x82\x9a\x1c\xa5\xd5\xc2\xf0\xb8\x80\xa9O5 \x812\x13n\xa6\xa2ZJ\xb6\xbf\xcd)Mx\xd4#\xb2\xb9\xc4\xd5@\x8f *\x14\x07\x98:\x95A\x88*nT\xcf2\xca!-\x8b[\xe9\xea\xd6\x92\x14\xbc.=i\xd2\xda\x80O\\\xfa\x9f\xc1\xf7*\xa3\xc0\xd4qF\xc9b\xd3\xb8j\xbe\xea\x97\x0f\x98~\xd2_\xc8_D\x83%K\xf9;\xd9ln1<#\xe4\xef9\xb3\x0d\x16\xa4`\n\x9e\xcfX<%*I\x93\x8b@\x04_\xace\xf5\xe5\x8c\x7fi@\xd8j\x0fq\xba\x8e\x16&\xc2U|\x90\xd1mzA\x97\xb0\xca\xd2-'\xe1\xdb\xe7?\x18}\x15\xdc\x98\x8arikK\xc7;\xf7e\x1fU!\x9dJ[\x14\x9b,\xbd\xd4\xbe\xd5mJD\x01\x9f\x15@>(\xde{N@\x01;\xf1\xe8\xb2S\x14\xf9\xb6\xd2\x1d\xbd\xa3\x19\xeb\xd2\xac\x0c^\xcb\xe3\xe5\x92\x9d\xe6\xf9:J\xc2\xe4T\xcb}#\xde\xa1/\xa2\"\xa6\x16\x8e\xe2\xfe\xb5:lVG\x01*\xd5\x96\xacR\x19g\x8a\x92E\\\x9a\x1f^I\x93[\x8b\x0d1G\xcd\xf3r\xb1\x11\xe9`\xeb\xa8\x907r\x08\xf9\xe7\xde{R\xa4Y\x0e\x0b\x1e,'e\x91nI\x11-,aX5\xc0\"\xd5|\xa0v\x95sq\x99\xc5y^\x90\xc2*\xc0\xe1\xb9wd\x82\xc8\xc4)\"\xce$\x91\xa9\xd3D\xf0\x89\"\x13\xa5\x8a\x0cK\x16\xb1\xa0\x0b\xcf\xbd\x0bkzH\xda\x88_\xe2\x88g\xea\x88\x8d\x87\xab\xa4\x12l\xf2\xc8\xc4\xe9#\xa8\x04\x92 SH\xc6&\x91\x0cJ#\x99(\x91dH*\x89\x05Yx\xee\x1d\x9dR\xe2\x97T2yZ 6\xb1d\xd2\xd4\x12|r\x89wz\x89\x7f\x82\x89S\x15\x86\xe7\xde=\xd2Ml\x9b`x\xee]\x0bCROl\x1c\x14\x9e{W\xe0LC\xf1JDq\xbd\xb4<$\x19\xc5\x853<\xf7\xde\x81A\xc9)\xe1\xb9w\xcfT\x15\x9fd\x95\xf0\xdc\xbb\xe5\xdb\xc9SW\x9c\xa3\x0b\xcf\xbdO\x91\xc8\xe2Je\x19\x98\xccb\xc0\x15\x9e{\x0f\xcf\xbdK\xf0Nr\xf1Ms \xcf\xbd+\x18\x92\xf4b@\x15\x9e{\x9f>\x01f*^\xf4H\x82\xf1I\x83\xe9>\xf7\x8e\xa8\xc8n\xa4y\x0c\xaf\xc8n&\x9b\x84\x8a\xecP\x91\xad\xfb=Td7 Td\x87\x8a\xec\x1a&\x0d\xad\xf9\x04\xd6\xbc\xc2j\xa1\"{l0m@(m\x92@\x9a\x7f\x18-Td\x8f \x9f\xf9\x04\xcf&\x0e\x9d\xe1\x02g\x13\x86\xcd\xb0A3\x8d=\x1c*\xb2\xdb\x80\x08\x93a\xad$\xef\x10Y\xa8\xc8F\x05\xc6\x86\x84\xc5BE\xb6\xe93g(\xcc#\x10\x86\xa97\xf6 \x82\x85\x8a\xecP\x91\x8d u\x85\x8al\x0ec\x82[\xa1\"[\x87\xc9\x19\xce\x1a\x1a\xcc2\xee\x0d\xa1\"\xbb\x0f\xa1\"{@\xd0\xca\x1d\xb2\xf2\x0dXy\x84\xab\xbc\x83U~\xa1\xaaP\x91\xed\x17\x9c\n\x15\xd9\x15\x1c\" 5\x05\xcfy\x04\xa3\xf0\xa1(\xb5Q\xfbV7o\xd3e\x19\xd3s\xe9{\xc9\xcd\x05\xce\xaf\xf8\x87?\xcb\xefZ5\xceq\x94s\xa7\xa9\xc0\xa5\xfc8\xb9\xa8\x94\xe3%H\xda\x8a\xe76F\xf9\xc5\x17[\xf4\xac%T\x13\x8a\xdf \x10d\xae|Fy@d\x95\\\xa7\x02_NU\xdbFN\x7fD\x9f\xca\xebR\x9a\xcb\x12\xab\x81-\xd8Z&y\x99w\xcb\xa1\xad\xa3l\xb1G\x8b\xc9\x1a\xcf\x89\x13\xc5\xad\xc2\x13\x97\xf7\xfb\xea\xef\xb5n\x9fK\x87I\xb8\x93\xbb+\x1e\xc2\xaf)\xab\x8di\x94\xd5=k\x10*L\xed\xc1 \xe2\xccm\xe1\x1a\x1ej\xee\x08i\xe7\x9b\xfe\xa3\xd3!\xda\x1c\xa2\xcd}pK\x8e\x80\x10m\x0e\xd1f=\x84h3\x87\x10m\xeeC\x886\x87h\xb3 B\xb49D\x9b9\x84hs\x886\x87hs\x886\x0b\x08\xd1\xe6\x10m\x0e\xd1\xe6\x10m6A\x886\x87hs\x886\x87hs\x03\xa6\x88\xfc\x85h3\x87\x10m\xfe\xa3D\x9bm\xf7\x7f\xcbXXb\xb9\x06\xbcs\xe5h\xa3\x85\x88\x9c MU\xdd\x03N\xea\xc3\xba&\xf8\xd7\x0f\x166\xe2\xcf\xf0#%\x17L\x11p_\x8cp*\xf4\x8a\xf1W\xb4\x90W\x9b\xb2\xbd\xcf#\xac\x0d\xf2V\xf2\x8f2\xd8\xae\xa0\xbe\x96|E\xe2VtK\xe300E\xee\x8d\x8f:\xd7\x97}\xaa\x99\x8b\xfb>o\xff\x8bk;qe\xab\xed\x9d\xe7\x06\xf9\xdfI\\\xcf\x14\xaa\xb7\x0cS\xfb&\xf3\x8a\xbe\xbc\x17!\xb5\\L\xb9\x17\xaeB\xc5\xf5B\x91\x959;\xb4~\xa0YB\xe3\xea\xca\xec\x84~*\xda\xb1\xdc(\x07~{\xea\x0cN$6n\x844n\x82\xcc\x8b4c\xf2/\xeeK\xe6\xd6\x85\xbc\x8d\xb6\x8d\xc05\x977\xa7\xcf\xc4e\xb3\xe2,\xaf\xdcA1]\x93\xc5^\xceT\xb9#Zy\nz|\xf2\xcb/6_\xc1\xc4\x1d^qH\x8b\xdb\n\x11\x83\xd6\x13nx,\xda\xb0\x10\x9doCLZ@\x88I\x87\x98t\x0d!&\x1db\xd25\x84\x98t\x11b\xd2z\x081i\x05!&\x1db\xd2!&\x8d\xb4\x92BL\xba\x82\x10\x93nB\x88I\x87\x98\xb4\x06BLZ\xfbM\x88I\x87\x98\xb4\x01BL:\xc4\xa4CL:\xc4\xa4\x1b0E|0\xc4\xa49\x84\x98\xf4\x9f!&\xdd\x08\x8c6\xf0\xd8b\xd2\xbdxc\xfd\x9e1\x0f;V\xaf_26a\x8b\x96\xd1\x8f%\xcd\xdb\x8ex\xbe'F\xb9\x8axIte\xb2\xa4\x99\xe4\x01\x1e\x18\xedFX\xb9\x97?\xcdZ\xce\xa4\x91\x8f_\x03\xe8\xdf\x05u\x95\x8d\x93\xb2\xd8|\xae\"\xcf\xeb\x8c$\x85\xa5V\xfc\xfa\x1bZ\x94Y\x92W!\xf4\xf7\xc7e\xb1I\xb3\xe8\xb3\xf0\xc9\x1f\x01\xc7 \xbc\x81\x8c\"\xe2?)3Y\xea\xff\xccf\xd7%\xe2V8\xf6;\xde\xf9Wj\xee_h\xf8\xb5I\xa2&\x14\xbfA\xb0\x8c4\x89ow\x17Y\xde\x03u\xf7\x03\x88\xc0\x1c\xe0\x01Rl\xd0\x81;\x98*x\x07\x03\x03xV\x84\x9e/\x85\x8e\x0e\xe4\x81w0\xcf\x8aJ\x06\x19\xbc\x02z0uP\x0f<\x03{\xe0\x1b\xdc\xb3s\xf6\x80wC'\x0e\xf2\x01.\xd0\x07S\x06\xfb`t\xc0\x0f\x86\x05\xfd`\xaa\xc0\x1f\x0c\n\xfe\xd9\xc5\x01\xfb\x8e\xe8A\x82\x80p\xc0@ \x1c&\x18\x08\x9e\x01A\x18\x16\x14t\xa9`\\`\x10\xa6\x0d\x0e\x82G\x80\x10\xfc\x83\x840 P\x88P\x99\xb8\xd7E'\x08\x18\x82+h\x08x\xf3\x0c\x11<\x04O+\xce;\x88h\xc5\x86\x7fk\x14?\xca \x03\x8a\xe0\x15T\x84\xa9\x03\x8b00\xb8h\xe7+\xd4\xbb\xa3\x83\x83\x8cF|\x05\xea\xed\xd1\xa9\x82\x8d\x80\x8f\x99\x01&\xe8\x08~\x81GpE\n\x06\x06 \x01\x81\xd7\xe2\x8c\x9c(\x18 \x83\x88\x8b\x0fJ\x02b\x96\x03\x82\x9304@ \x8e\xd7\xd8&\x0bT\x02>X \xc8\x80%\xa0\x83\x96\x80\xa3\xba\x7f\xf0\x12\xbc\x02\x98\xe0x\xa9t\xa2@&\xf8\x063ad@\x13\x10\xe4\xf5\x08l\xc2!\x82\x9b\x80\x19\xa3E\x12\xa6\x0bt\x02&\xd8 #\x02\x9eF\x84\x85\xf3\x05\xd3\x89\x03\x9f\xe0\x0c~\xc2\xd0\x00\xa8\x11\x9b\xfb%ST \x14\x1c\xaf\x99\xda\xdf3\x1d\x12\x145\xa2r\xbct:0`j\xc4&\xec@\x8b\xd7l\xba\xc0)\xa0\x82\xa70 \x80\n~AT\x18\x12H\x05\xef`*\xb8\xde>u\xbd8\x89\x0fra\x03\xab0$\xb8\n\xbe\x01V\xb0O|H\xa0\xd5\x88\x0c\xf1\x12\xea\xb0\x80\xabU \xdc\xaf\xa1N\x1ax\x05W\xf0\x15\xec\x01Xc\x9b\xa1\x81Y\x98\x90w=\x02\xb4\xe0\x15\xa4\x85\xde\x9b\xa9\n\xe8\xa7]\x94!\"T\xa8\x84\xe6%)\xe8\xad\"\xda\xea\xa8l\x8b\xf6*\xe01FXG\x174\x87\x1d\xcd\xb6Q.J\x7f\x8b\x14\xe8'\xba(\x0d\x1e\x0f\xc6J\xd2*\x91\xdb\xb8\xd0\xe5\xf5\xdc\x80\x0d\xaa\xaf\x8a\xdd\xee\x87V\x0c\xafs\xb1\xb0\x885V1U\xc6du@U\x83K\x85W;?\xed\xc8:J\x0c+\xd0\x1a`\xfd\xa1p\xa6S\xee\x08i\xfcU\x95\xfb\xea\xe2\xab\x02\n[\xb4\xd1\x1egL\xe8\xa7\xe2\xfc\x03\xdd\x9b\x0b\x03\xadL\xe2t[\xc9\xbb\xa7\x0d\x9cQ\xf7\xaf\xa2\xf9\xec\x9f\xd2\xe7K\xf2\\8\xb9O\xc9\x9a\xbe\x11\x89\x003\xf1\xbb\x01\x99(l/Ti\xf4\x8e\xe9\xdcm\x9a\x17@\xb9\xe7\x94\xbb\\5M\x8b\xb4 \x86\x10+\x9a\x00\x96\x0b\xb8% \x8c~0\xde=\x9f?\xffGRn\xe7\xc2%\xa7\x8ay\x1a\x95#&\xa7M\x93D\x8b\xb4L\x8as\x8e\xcc\xa4\xdf.I\x0e9-\x8e\xf8]\xdd2T\x91\xf3\x14\n\xc6\x80K\xe1\x8d\xbd\x8cr\xef\"e\x91N0\xbc(\xf9\xb8-\x98\xa1\xfaX@\xa8>\x0e\xd5\xc75\x84\xea\xe3P}\\\xc3\xa4\x89\n>I\n^ \n\xa1\xfaxl2\xc2\x80D\x84I\x92\x10\xfc\x13\x10B\xf5\xf1\x98\x84\x03\x9fd\x83\x01\x89\x06\xa1\xfa8T\x1f\x87\xeacl\xa2\xc0\xa4I\x02C\x12\x04B\xf5\xb1\xe93g\"\x80G\x12\x00\xa6\xb6\xd6'\xf8\x1f\xaa\x8fC\xf51&\x90\x1f\xaa\x8f9\x8c \xd6\x87\xeac\x1d&g@~h0\xde\xb87\x84\xea\xe3>\x84\xea\xe3\x01Atw\x00\xdd7x\xee\x118\xf7\x0e\x9a\xfb\x05\xccC\xf5\xb1_P/d\xd0\xa3\xd1\xc6v\x08~-\xbd\xa7G\xad\xc6Gp\xb9\xa1\x89\x88\xe4q\x86\x16\x01P\xbe\xcd\xca0\xf6\x96\x14\x8bM\x97\xb1\xd7\xd1\x05M\x18\xa6\xde\x81|\xc2Y\xd6\x11\xec\xd9\x07\xba7\xcd\xb3\x13\x18\x96\x91`\"\xb7\xb8\x8cW>s\xa7\x9f\x0cq\xca\x10x\x156\xe6\xae\xbau\xc7\xa7\xc5g \xee'\xb7\x85\x82g\xf0\x9aQ*M\xf8Y>]\xadrZ\xb0\xe3q{\xb8\xd0\x085\xe4\xb4\x98\x98Z\x06\xc7\x8d\x86\x88b|H~\x91\x93\xe1\xa4L\xca-\xcd\xa2\x85\xfa\x1b\xd7\x86\x0b\x92\xb0\xf9\x08\xaf\x15\xe3!I\xf82\xa9\x1c\x85\x9d\xe3\xc1 \xc7\x16\xd3<\xafI(\\ke\xceH\xfd\x81z\xd2\xb3\x8d\xfe\xc0\xc4\xed\x84\xe75\xe4\x8d\xa3m\x84\xa5.\xffV\x05\xb7MQ{\xe1Dnr\xb0\x0c\x85\x97q'\xb8,\\F\xcd?\x9d\xac \xa6\xabBz'#y\x97\xbb2\xea\xb9\xff[\x08\x88\xe8\x84\xd1y\xbe\x07J\x16\x1b \xbb\xddoH\xc5f\xeeA\xdd\xdeF\xcbF\x0b~E\x03\xe5\xf3+\xb2\x92\x02\xfbG\x94,\xa3EuA~MA\xfe\xa1d\xa4&\xba(Y\xc4\xe5\xb2c\xb2\x13\xd1K\x15\x8a\xec\xac\x18\x0fl7<\xe4lkm\xe4\xdft\x94\xcb\xbb\x93\xbc\xb3Z\x9d)p\xf5\x9b\xd1\\f p\xf1\xaa\xe5\x91\x89\xdcLJS\xb4N:\x17R@%\x8d\xed.\x04e\xc6.\xec\x93\xd6\x11I\xf6\xac\xaf9\xc9\xa3\x05?\x93\xae\xa2\xb8\xa0\x19\xe38J\xeb\xcf\xf5n\x0c+\xb3\x81\x93\xe1\x00\x91\x18\x85X$@/\x14\x0cM\x8f\xb2\xe0\xf3\xba\xf5e\xd2\x14)g\x92\xd4\xd4iR\xf8D\xa9\x89R\xa5\x86%KY\xd0y\xde\xf322aj\xea\x94)\xcf\xa4\xa9\x89\xd3\xa6\xfc\x12\xa7\x0d\x03b\xd4\xf6 \x84\x07\x1b\x87\xc6\xad\xc1;vmE\x15\x1el\x1c\x94\xd6;qL\x1bpqm\x982\xb6\x0d\xa3\xe3\xdb0,\xc6\x0dS\xc5\xb9aP\xac\xdb.\x0e\xd84\xdf\x83\xc4\xbc\xe1\x80qo8L\xec\x1b<\xe3\xdf0,\x06\xeeR\xc1\xb888L\x1b\x0b\x07\x8fx8\xf8\xc7\xc4a@\\\x1c\xa12q\xc9\xbf\x13\xc4\xc7\xc1\x15#\x07\xbcy\x86\x88\x95\x83\xa7\x15\xe7\x1d3\xb7b\xc3\xa5\x02\xbb\xae\xa7\x9f4\x1dX\x9f\x10\x0c\xc6B\xbc\x86\xf6d\xffy\xdd\xf4*\x83\xa9\xe43\xbc\xc1\xc0!\xbc\xc1\xf0\xa7z\x83\xa1\xf6@M\x90>\x1f\xde`P\x10\xf2\xe7\xa7\xf1N\xf9\xfa*\x94?\xc2\x88\x10\xeb\xa7\x98\xd4G\x11\xf2\xe7C\xfe|\x0d\x93\xfa\x1e|\xfc\x0e^>\x87\x90??\xd6\xbf0\xc0\xb70\x89_\xc1\xdf\xa7\x10\xf2\xe7\xc7\xf8\x10|\xfc\x07\x03|\x07!\x7f>\xe4\xcf\x87\xfc\xf9\x90?_\x84\xfc\xf9\x1a0\xd9\xe1!\x7f\xde\xf4[\xc8\x9f\xd7~\x13\xf2\xe7C\xfe\xbc\x01B\xfe|\xc8\x9f\x0f\xf9\xf3!\x7f\xbe\x01S\xe42\x87\xfcy\x0e!\x7f\xfe\xcf\x93?\xdf\xa4\xe4\xc8\x04\xef\xf0|\xc0\xd0\xbb\xd9\xc3\xf3\x01\x07$\xae\xfb\xe2\xfb\xf0|\xc0\x14T\x0c\xcf\x07\x84\xe7\x038\xfc1\x9f\x0fh\xc4\xc3\xd8\x8f\xe4\x03\xc97\xb39\xc9\xe9L\x96+\xcd\x8e\x8b\"\x8b\xe6e!\xbd\xd0E7\xaa\xdf\x8f\xe3\xb7\xf2\x864\x02\xd8\xf1i\xf7\xbe\x90\x991U\xc7\xb5\x91\x96s\xad.\x14\xc5\x8e\xf0\xea5\xcd\x88\x9f\x9d\xbeC\x8f\xb5L\xa2\"\xef\x8e\xa5\x93\xb3\xa0\xcfT\xb8\xe8&\x07\x19\xbd\xf1\xda\xfdPN\xf2\xfa\xbb$*D&[\x0e\x8b]y\x04[\xbaM\xb3=7v\xd9\x9f\xf96O\x8b,Z\xe4\xd7ec\xa2\x08\xd3\x1bx;C\xa3\x97\x99\xa1\x9d\x9d9\x13C\x93\xffe\x9c\xa36Na\xf8\xdak}\xab\xcf\x9f\x9d\xbeSt\xaa25\xf8\xeaqR-v%;M\xae\xa2u\x83\x1fn\xa4\xb2\xa30\x9b$O:\xaa\xa6B\x97m\xda+ \xc9\xfe\xb0c\xecE\xfbE\x8f@\n\x91\xe7(\xce\xe3\\\x95\xf090b\x0b\xc5\xa2\x9bD\x17WwJ\x7f2\x01\xd46Q,^\xd3B\xf2\xb8d\xf1\x06\x8de\xfc\xa9%\xcdZ\x11\xd4K\xeb\x1b)\xea\xefj\xdb\x1b!\xa5\x8b]9H\xadw,|ck3\x06\xd0m\x0e`[;\xb0e\xde\x8c\xd8(\xc0\xc0\xab0L\xfc\xb4\xb9\xd9\xb6\xbclCE\x88\x95\x0e\xc6\x0c&K\xab\xe1\xfc<\xec\x94\x00<\x1cT\x9b\x1a\xe0\xc7b}\xb3\xc3\x88\xc0\x8c\x04\x02\x97I\xf8\xf2\xb9l\xa8\xe9\x02<4\xc8\x89\x1e\x18M@`4\x1b\xa3\xbd\x95\x84\xb3r\x9a\xa2n\x8f\xd5\xd4)\xec\xd0VM\xcb?\xd2D\xa1\xa5F\xd7W\"\xc0\xe41Q\xbf\xea\xfc&\x02\xac\xde\x13\xf5\x89=\x91t\xdc1\xbb\x87N\xe3YQ\xfdLw\x00\xaf\xc1\\I8\xf6t\xdeC\xd8\xf2\xb8\x08\x18\xe5w\xe9\x0f\xbee\x1c6\x91\xc5q#\xa0\xa1\x04ATy\x88+\xb0\xc4\xd8\xd8Tn'\xe9R))Z,T\xe0!Z\xc9$\x94(\xe7\x89Z\x954\xc9\x0cu)\x93*\xb0%\x9e\xa4_\x92\x82\xdc\xca\x8b\xac\\\xb0S\x9d\xdd\xa0\xfd\xb9\xd6\x0d\x08\x83\xb6\xa5\x83\xb5\xf2\xd2\xd3\xb9\x03u\xadf\xc8\xead\x8b\x1em\xf7T\xea\xa1H:\xb3\x9a\xe6\x14\xda=\x81\x8e\x1eOK|\xa6:mv\x86\xdd\xed\xaa\xf2/46\x04\x9e\\/\xe2td\xc1\x03q-\x8fCu\x1akz\x1a\xaa\xd2-u2kv,\x7f:\x8e\xe3\xd7+\x9e?\xb3\xcb\xe8\x82.)\x7f\xbexFgL.\x8a\x0d\xcd\xc4c\xc6\xd5\x8c\x13\xa6'\x8al\x0f\xc7\xc9\xfe\xf5\xaa\x1f\xdc\xcb\xe8\x9adK\x1e>/R\xaeZ\xb6$\xa9\x82|\xac\xa9\xac\x96\xcc\xaa\xd8%_\xdf9\xdd\x90\x8b(-3\x19+[F\xf9\xa2\xccs\x93\x07\xf0m\xd3\\B\xf0ip\x01r\xf8\xc2=\x10\xa3\xcd\x1b\xc1)\xb5\xca\xaf\xf8\xe5y\xf5'4\xcb\xd4X\xce\xa3^\xa0\x07\xc57\xe9e\xd2\xbd%\xd0@\xa7eN?\xa2>4\xe6(H\xd2\xd5\xf3\xe5\xa0\x0d\x88\xae\x00\xd9\x1d\x04Y\xec@\x90E\xed\x87\x13\xc9\xe2\x98L\x9e6\xf4\xf2z\xda\x80X#\xcc\xea\x04q\x0c\xe2h\x02\x8fU\xf8R\xc5qx@\xb0\x0f\x9a\xec\xa76\xb8\x17\xdc\xb1\xd8\xa8\x85\xc6-\xb2.\x87\xaa\x0d\xe8\xb5\xd0\xe7W\xb5\xc1\x9em\xd5\xfd\xd6\x9c{\xd5\x06D&V\xb7\x81\xfb\x82\xbf\x1a\xbc\xb3\xb4\x1c\xf8\\\xd5p:8L\x06W\x1b\\\xce\x07\x05~\xd9]\x0ed\xd6\xca,=\xc8q\x0e\xcd\xfc\xd2\"3LzpV\x98\x16['S\xac\x99#\xd6\x86!\x19c\xfa\x1e\xbbYdm\xe0i>:\x99\x15Bo\xba\xff\xdd\x14\x82P\xb0\xcb\"\xfdsw#\x8f\xffK\x9a\xa4F\x15\xe3\xd4Sdk\x9a-\xb8\x9bc4\xc6\xb34j<\x9a\x01E\xfa\x81&\xf2:O1tu\x0f\x02\xdbLH\"\x07d\xba\xbd\xf2\xa7\xd7g/\x1e\xf3\xfb\xb7\xc4w5G\x90\x04N\x92Bz\xc8+Ik\xde\xf3\xa3E(\xae=\xd3w\xd6H\xeaRu\xff\xfc1\x91t\x9d\xf2Ku\xbawc)3I\xc9\x87\xda8\xd9q\xf2H^\x0b!n\x8a`s\xe5\xfc o\xf4\xe0\x9f\xd7&\x93D\xc4\x03\x07owt\xa1\x10\xc9 \x94\xbc\xadV\\\xf6,\x1bM\x90E\xf0\x9d\xc0\xde\xec*Z6\x93\x07\xda\x1dWa\x07k\x12\x01G:\"\x7f\xa0\x11\xfb\xe9\xc4\xc0,\xf1\xaf/&\xcf`H\x84k\\t\xeb\xc0\x91\xad\xc1Q\xad\xc1\x11-;g}\x01\xd1\xfcn\x98Z\xbfK8\xc4n\\8Z\xfe\xe2\x16\xc4\xb7UP\x10A\xb0v PC\x0e}\x00P\xbb\x9d\xe971C\xd0O\xf1\xca\x88\xd8^?\x92g\xdce\xcd\xfb\xab)zg;\xaa8\xc2<\x86\xadt\xdah\x9d)Rw\xb0qk\xb7\xfeaQ9}\x8d0\xe8\xea\x84!\x14,\xd9\x8e\xf3\x93F\xd9\x10\x116M\x88K\xb7\ncs\xa6\x8d\x91\xb4\x81\xabh\x88\x9e\x8d4\xca\xad\x113\x84\xa7\xc2\x85\x1f\xdc\xae@\xa7\xe9/\x00\xe1\x02\x9c\xcc\xfd\xe7v\xfd}Q^ \x97\x9b\x0fIa\x84{\x0f\x85i\xa0\x1eh5\x9e\"\xdae\x8et\x8d\x14\x1a\x97;\x1d\xb1\xb6\xae. \xc8\x8d\x1e\x10\xb4\xc5Q\xf7\x8f)7\xd3D\xa6,Q\xa9 :-\x08\xa2\xa3\x07$\x85\xbf$\xd1\x99*\x8ad\x8d \xd9\x17\xd1\xb2\x80\xce\xc5s/\x9c=Z\x84\xa2\xb3+J\x84\x8d\x10\xe1\xa2C^\x91!\x8c\x8fW\x80wD\xc8\xfaP\xbf_4\xe8\xd0\x91 L\x14\xc8/\x02\xc4c<6]\x8a\x8e\xfeL\x16\xf91Or\xba\x88\x0f*\xda3I\xa4\xc7\x12\xe5\xd1Fx\x84\xa0\xea\xa3;\xe6\xc8\x8e6\xaa3\xf0(j\x8c\xe4Xu\x889\x82ci\xe6\x92\xea\xe9\xa26\x93FlL\xd1\x1a\x9fH\xcd$Q\x1a\xcf\x08\x8d\xd1+\xcb\xef}\xae\x0b\xc1\xd4\x03\x04b5{l\xd4g\x9e\x1ae\xcd\x00Z\xee\xd3\xf3\x9d\xa1\xd8\xda\x88\xc5\x8c \xf4\xc5a\xe0`\xc3^\x81\x97\xa3\x81\xa5X\xacZ\x14\xdf\xba:\x05\x9d\xe2-\xb0\x8dD\xb7a\xeb\n\xb9\xa0Qn\xda\xfbs\xa7\xe8\x07lEZ\xe0\x14\xda\xd1\xc1\xab\x0e\xbe^\xc1\x164\xe62\xaet\xb6\xc66\xba\x84V\x81w|\xa9W\xc0\x0d\xba\"n\xb01\x81\xe1\x1c\xa3\x0b\xc5\xa2\xf0hK\x17\xc7\x15w\x83\xaa\x07;\xb0W\xb6_TjEcC\x05fM\xe2P\x0dzm\xe24\xc1-\x1a\x05\xb4E\xa8\x02l\xf6\x028\xb2A\xcc\x96\xd6\xf0h`\x0f\x95Y\xd3iu\x9d\x95N\xa6k\xc2\xf4\x1a\x0f\xfa\x05\xac\xea\xcf\xbd2V\xf5\x83\xbd\x9aR~\xa4\x11|\x87\xceti\xcdQz\xb3\xcf\x81\xfd$\x80fGC\xd2\x01\x9a\xed\xc7$\x064\xf1\x1c4E\xa0\xd9\xd1\xc0d\x81\x1a\xbc\xd5z_\x14t\xe5\xb0\x12\xf90\xe5\xd4/\x90\x15`U3\xe6b\xd9f\xe3\xc1\xfe?K\xf9\xac\x00\xf7\x01\xd6;\xdcn\xc4d\x0b\xc3\xd7\xe0\xf4\xbc\xb8g\x0d\x8e\x12[\x01n\x07\x1f\xb8\x9d|\xe0Z\xe0\xc6gNRC5nd\xac\xdf\x8e\xc9\x9ey\x0d\x8e\xda]\x01_(\x91|s\x08\xac\xd8P\xc9\x13\x02\x82\xdb\xd8\x00(L\xa3\xdc\xc6\x80\xe2\x8e!i\x0d6*\xf7\x8b\x8a\x05 \x12\x1fj@T\xf9\xfe6.j\xeb\xc0\x048{\x01TO`/H\x16\x80\xea\x0b\xd0\xfd\x81+\xe1\xa2\x06t\xcf\xe0\xd5;\xb8cc5\xa0D\xa8 \x88xY\x0d\x93E\xcejp+\xc3\x1a\xdcj\xb1\x06\xc4n\"\xc0k\xd5|\xd7\x0d\xa1>k\xf0^;\x84J\xad\xc1\x13\xfbh5\xdbB\xe3\xacp\xc1\xe6\x8e\xa0\xb9\xc9\xf2\xa1\xbd\x9aZ\x00\x9a+\xf0\xfc\xe0\n\xa3\xd7\x80\xee\x1c\xbc\x06\x00A\x91H\x08\x8a\xa4\x0d\x7f E\x82O\xa6A\xf3\x93\xe5CG)\xb8\x004c\xe0Y\"\xe8\x92\x1a\x82.\xf1\\\xb7\xa0K\x90\xba\xc4'\xbb\x08\xcdQ\x96\x0f\x9du\xec\x02\xb0\x1c\x87\xe26\x0fN\xf3\xe12w\x95\xbb\x00O\x06p\xe52\xd5\x80\xcdj\xaa\x01\x97\xdfT\x83W\xa6S\xb3\x196\xe7\xa9\x06t\xf6\x13\n\x1b\xe6\x01Q;\x1c:#\xaa\x06\xac\xa8\npgI\xa1\xd0\xa0\xdf1\xb5\x01~\xe4\x1e\xc9UN\\\xe6\xb2{\x01\x98Q\x0dJ\xc8\xb2\xe0\xd3<\xd9b.\xc4\x170I\x92V\x0d\x8e\xa2|\x01\xc6\xd2|\x01BS\x99C\xb2\x02\xece\xfa\x02\x8c\xc5\xfa\x02P\x1a\x19\xa7\x8b\xad\xe5\xfb\x02\x90\n\xd8^\xca/\x00\x85\n\xaf\xfe<\xd3\xc4\x9c\x837\x95\xfd\x0b\x18\x94Jf\xc1'\x92\xcc\xacW\x00\x08\xf0I/\xaba\x92D\xb3\x1e:l\xcaY\x0d\xa6|\x14+7\x98\x84DMj\xcce\x01\x0c\x18\x8b\xa5\x97\xe7\xf2Q\x9dz`Z\xc9\xd2K\xd2\x04\x19k\xf9\"\xddi\xc4\xdcB\x97O\xfd\x1c\x17\xcb\xf7\xca\x18\x16\xb3k=\x1f\x91\xb6\x9ew\xb7\xfei\xf3Ru\xf9\xf1VD6d`\xcf\x98\x17\xe08\x1a\xb8\x0e\x05\xc6\xccW\xc0X\xef\xa6\x0cX\xc04vf\xc2\x8e\xce\xb0\x17\xa0\xcd=\x05\xf7\x08\xcd\x8e%s\x1e*\x98\xf3\xef\xd5\x8f\xfa\xbd\xdae\xc1\xa8O\xdc'\xa5)\xf3K\xc1\x95c\n\x93\xe7\xe8+\x9c\x93e\xea\x0b\xf0N\xec\xd4\xe6\xeb\x0b\xd0f\xed\xcbn\xec,e\x0db\x98\xcfM\x80\xc7l\xc9\xfe\x1e\x9f\xd9/\xa0\x9b\xdf/;1z\xa0\x0d>g\xab\xe2\xb2\xab-S\xf6\xbf\x00\xa7\xb3\xc4\xa5\x13\x1dZ\xd1\xb9\x16\xe0\xd0\x8c(\x04\x08\xed\x08\x96j\x01\x01\xa2\x9f\xf1\x0e*\x97\x8bp\xc2*\x02\x01.\x9dn\xd1\xea\x08\xea\xdaB\x06v\xddn\xac4P?\x1a\xea\x0d\xd4\xcf\x984v\xf9\xa9Q\x95\xa1v\n\xdc^1`\xb70\xf1\xbb\xedb\xc2.\x8c\xadLPX\xa6\xa9OP\xd8\xae\xa8JAu7\xbaVA\x80\xf7\xc6f\x12;s\xdd\x82\xech\xbcZ5U2\x08p\x8a\xad\xbb\xaaA\x80s\xa4\x80\x1a-`\xea\x1c\x04\xb8\xf4\xa3\x82\xe9j\x1e\x04\xe0*\x1f\x04\xa0\xa8\x02h\xca\x00\xaa\x16B\x80\xd96\xe8\x03*B\x0d8vi|\x8c\\ \x98\xb4RB\xe2\xc3\xc4\xf9\x01U5!\xe0wFN\x8f\x9a\n\x04:\xfc\xb5\x94M\xc0f\xef`I\x8b\"+Z\xe2|d\x0e\x9d\xa9\xe3\xb5\xa0\xe8\x0c\x1d\x0f\xacW\x9c\x99\xe3[\xa1\xe1\x1a\xbd\xe9\xf1\xb7\xd6G>\xd5\x1a\x02\xd0\xa5\x11v&t2 \x92\xf9\xb0\x8c\x87\x18\xb6\x00d\xbf\xe0\xd17`j<\x04x\xf4\x0e\x9e#\x00|\xd5\x87\x00\xcf\xb1\xc0\x80\xf1\x80O\xca\xa5\x00\x0f\x01n\x82W\xfa\xa5\x00\xac\xe0\xd6\x80H\xd7D\xe3\x92i\x9d\xa8\xef\xb1\xbbC\x0d\x18\x11m\x83S`\xdb0\x80y\x86\xb1\x0fz?\xa9a \x0b\xa1\xf7\x98\x1a\x06\xf54\xd1\xbe\xd3B\x86d\xe2\x89JV\x04\xa0\x0c\x1b\x01\x98\xf2\x15\x01\x9e|\xe5\xcbQ\xf8$t\x01\x9e\xc3\x81\x01C\x82\xa0#M\x10t$\x16\x82\x8et#C2\xf1d\xd58\x02<\xb4$\xaa2G\x80'k\xf92UP\x93AM*\x08j\xd2\x9f\x85\xfe\x04jr\xc2B#\x01\x1e\x8a\x12Yt$\xc0\x8f\x7f=x\xd7\x9bo\xfdy\x16[\x92$`\x10\x0b\xe1\xcb\x93\x04\xf8\x17) \xf0-U\x120\xb0`I\x00.\xc2\xa8\x03L\xf1\x92\x07:sY\x91W \x93\x80\xab+d\x12\xe0\xa7\x16\x04LT\xd4$`\x92\xd2&\x01\xbes\xc1\x969!\xd1Y\xdf\x18m\x02~\x9c\x9e\x85ON|\x85\xba\xa9\xda\xb7\xfcI\x80_\x11\x94\x13\x1d/\x92\xc2\x95B p\x14D \x10z\xd2\x95u\"\xc0\x9d{\xa2\xc0Q\"%\xc0c\xcf\xf0\xd9-\x10ES\x02\xbc\xb6\x08L\x01\x95\x00\x0f\xb4\xbeJ\xd93W\xda\x89\x0fSX%\x00\x97]\xedD\xa3\xcd\xbeF\x14Y \xf0\xc9\xc0\xee\x02N\x8b\xf8\x95cYQ)i\xd7~4\xb8^K\x80=\xfb\x10\xc1\x82vI\x9e\xaa\x8eK\x80\xa9\x9aK\xf6eV\x026\xa1?H~\xb5\xa1\xe2K\x80\x93\xa6\xda\xea/\x01\x8e\xb6\x83*\xc1\x04\x0c\xbb\x0c\xf9\xea\xb3\xac\x8d\xb9a\xd6\xdc9S\xfd\x98\x00Df\x9d\xbd\x96L\xc0\xf8\x8a2\x85g\x9a\xba2\x85m\xca\xea2\x85s\xfa\x1a3\x01\xc3+\xcd\x04h\xeb\xcd$\xeaq2\x1d^@\x1fV\x03%`\xca\x17\xd0-uk\xf2\xe7\xb0\xd2\x7f\x94\x956\xd5\xbf pP\x13Q\x1e\xe1Y\x11\xd7j\xdbY\x9f\xd1\xd5q-loN\x9f\xd55r\x0cvd-\x17\xb6\xa6\x84\x96\xd1\xf5\xec\x9d\xd0O\xc5y\xcfSk$\xa0\xd1]/\xe7\xde\xdb\x02\x15~\xa5\xfd\xd9?\x8b\x14\xe6\x14v$g\xfbM\x91\xc2)Y\xd37\xf4cI\xf3b&~\xef \xf9\xc8(\xc2\x9b3tl\xca\x14\xb6i^\x00U\xf9\xd5q\xd3\xdd\xc8\xcdi\xcf \x99_t\xe9\x89\x9b\xb0\xd6\xd9|\xf8?d\x11\x83\xb8<\xa1\x8c\x8b\xbc\xe1\n\x88\xba&|s\xaa\x9c}\xce9\x92\xaeX\\\x92\x9c\xb1\xf8\x11DE.\xfd\xca\x11;,\x08\xf1^BZlhv\x19\xe5\xf5\x1a\x98\x0d\x11\xd1e\xcdt\x82\xfat;\xa7\xcb%\xdb\xef\x13X3\xa6\xaaxqK\xf3\x9c\xaci\xce\xb6\xe8\x8cv<\x07\x8b4\x13\x1f.\xa3d\xcd\x85\x95\xe6\x85j\x02\x1b\x92C\xc9\x16\xb59\xcd\xd6\xdc\xd4\x97o\xd3m=\xa8\x7f\xe9\x94BFw\xfc\x0c\x02OIVQ\xf6 \xdc\xfd\x0f\xdd\xc7\xad9r\xf6x\x02\xf7Z_\xfe\xca\xff\xa3\xbb\xa4\xa6ZR\xbcp\xe6\xfe\xb5\xab\xfc\xd4\xe3]\xb5\xca\x0f>\x83D\\_ e\xdc\x0c\xcd\xdb\xe0o\xfd\xc4\x92\xa9\xc0\xc9\xeeb2k{\x93\x80OV\xc0\xf4[<\xf7\xa4\xbd\x135\xa6\xa0h\x9aB\xa2+* \x1a]84\xba`\xc8T(4@\xbd\xe8\x0b\x82,\xca\xc2^\x00d\xb5\xf6\xed\xb6\xbe\xa3\xd0\xc7\xe5\xea\x9b\xaa\xb0\x07S\xd0\xe3\xf4q\xbbN5\xee\xc2\x1d\xd1\xc5$\x19\xe8\x0e\xa7\xb5\x8b\xb00aA\x8e3\x02\xee*\xc0\xf9\xc2\xc8\xe2QXS\x93\xc9\x82\x10SP\xe3\xcaoq\x91\xc8J\x1e'gcx\xdb\x99\x85\x82Z\x00g\x86 \x02\xcb\xc8\xec\x11\x17\x0f\xf8\x16\xbcX\"\x82\xc6B\x17\x8f\x02\x17K\x85\x88\x8d)\x8c\x0c1\xd2u\xe3,X\x99\x88\xd9\x1c\x85)\x88^\x00\xd9\x13`\x0bP\x90}\x82G\xbf\x80\xcf\x0eD\x08F\x13<\xb2\x01U\x0c \x91\xdb\x87\xbb\xd5\xdb\xa5\xccjp\xa9\xb5\x1a\x9c\xfa_\x80\xc7\x1a\xf9\xad\x92S\xfd\xd5\xe0\xb9RN\x95X\x83\x17\xe6\x91j\xb2\x85\x04[\x80\xe1\xb6\x050E\x15\xc8E\xc4.\x1f6+\x18\xd9-xt\x0dA\xbe\x83|\xff\x0e\xe4\xdb\x91k1Qm\x01B9 j \x90,\x80]\xfc\xa0\x1d\x82vp~\x1b\xb4\x83\x05&K\xa9G\xe8\x07T\n=\x8e\xaf\x10<\x85\xe6'(\xe5\x1d\x13\x8do\x03&\xc5\x1d\xfb>\xc7\xd8\xd4\xf6\xabJi\xc7\x89\xa1\x00w\n{31\x1d\x81p`\xea:v\xcc\xd8Tu\xf7\x8b\x1c\xf6\x14u\xf7x\xb3\xc0\xbc\x81y%\x1c\x94y}\x9c?z\xf65\xb8tLK\xa0%\xbf\x85\xf46\xb2\x9b\x9c1\x0e\x8a\xd9j\xab\\\xde\x0f\x97S\x05\xe9F\xc1\x9c5\xd0\xae\x92\xda=\xa1\xc5\x83u\x8e\x1c\xce\x1db?\xbc\xfb\xb9<*\x87\x86\x16\x97\xcb\xc9!G\xe2\xe1\xb5\xe8\xf9%t\x93\x19\xe4{`\x1a\xb2\x81\xc3\xe1m\x18\xe2_\xd0\xfb\x11\xb4O\xfdu}\x05\xbaCS\xc7\x1f\xe0q\xa4\xd0\x9c\xf2\x0d2\xaa;\xc9k?5\xa7\xf9\x0f>\x9f\xd7(\x06\x1d\xc8;\x07\xef\x1a\x1b\xee\xa4=\xc1\xd9Z\x9c EUNuz'+\x88\xe9\xaa\x00\xba\xdd\x15{\x88\n\xb8\x8c\xe2X)K\x86U1\x9d\xe8\x80\x91b\xbe\x07J\x16\x1b \xbb\x9d\x9aw\xa3\x00\xbb;\xfby\x9a\xc6\x94$\x88y6\x90\xb0\xd9\xf2\x15N\xa1\xc8J\n\xec\x1fQ\xb2\x8c\x16L\xf1\x88\xf2\xafjv\xfc\xc3\xde\xbaD\xc9\".\x97\xb49U\"\x8f?\xb2\x9a\xa7KI\xeeXj\x9c\xb6\x99~\xab\xaf\x04`\x14}w\x92\xb7h\xd7\x19p\xca\xb8&\xa3\xf9\x8e.*?C\xcd\xbd\x8cAg\x92\xfd\xa2u\x92f\xf2\x93\xb6\x98\xb7N\xecy\x93\xb5\x1aJ\xa3E\xd1\x8c^\xd0,\xefiJ<\xd9%\x82.\xc9\xa3F\x15~F\x0d\xfc\xc5\xb0R^\xc1\xde\x94\xd8lI3\xfb\xb0\xf5\xe2\xde.i\x17\x05\xf1\xbd\x8a\xf6\x97i\ny\xba\xa5\xe7;\x92\x91--h\xa6\xadeo\xe8\xed\xe6*6\x8b\xd9[\x85\xec\xd5 \x9a\x0dm5\xfe\xadz}q\xf5`\xa5P$\xaa\xba\xdf\x19\xbc\xf8\xf4\x18\xb1\xcfxV\xb2\xf7\xaf\x9c\xc0\xef6\xddy\xc3\x14WLx\\/\xa1U\x168U\xa9\x1b\xba\xd7U\x12\xc6\xcb#j|~\xf7F\xe8\xf9y\xb2\xfb\"\xc6\xdc\x15\x81\xbb'\x02}G\x84\xfd~\x88_;<\xae\xb8\x9b\x9d\x92\xd0\\\xdd9\xbfi8\xa3{n\xeb}\xa2_\x8f\x91g\xb5\xe9\xcei\x983\xda:M\xd71\x9d\xf1\xff\x9e\x97\xab\xd9q\xb2GS\x90}r^f.\xf12\xef \xc7\xf0\xee\xcd\x8f\xb7+\x17qB\xb6r\xdb-\x93\xe8cI\xe3}m>K\xb3d\xbf\xa3rcm\xa0\xc9i\x16\x918\xfaL[iD|J\x8b4\x86y\xb9Z\xd1Lq\xe8L8\xf2\xc5\x18Ea\xed\"M\n\x12%U-n\x13\x0b3\xcf\xae\xdd\xbe\x06\x8b\x0d\xc9\xc8\xa2\xa0\xd9\x8c/MLrf\x11\xac\xf9\xed\x12r\xa7\x7f\xf7\xe6\xc7\xeb9\xecH\xb1\x11h\xab\x00W\x13\x1f\xfbpU\xc6\xf1\x1e>\x96$f3[\x8ay+s\x81\xcd\xf0\x06\xc9!J\x9a\xcd\xde3\xb4\xb7\xbb\x8b\xf5\xbc\xcc8'\xbd\xbf)F\xc5\x11\xd5F3\x9b\x123\\\xd3$Z\xb4\xb4\x0eSxM\xec7\xe8l=;b\x93\xe7\x92\x7fmv\x0d\xa4\xbb\x9e,\x16tW\xd0\xe5\xcdv^\xd8I\x02;F\x8ehA\x8f\xa0\xa0d\xcbTCI\xd8\xb4v\x19]\xa4\xdb]\xc44`\xc2v\xf9\x0d\x85y\x94\x90l\xcf\xc3\x0c\x05\x0f)t2g\x8bM\xdb$\x91\xc5\xf6\x117\x13\xca\x9c*;\x80-\x14S\xf8\xe9\n\x8e\x93\xfd\x0c\xbeO/\x99Uq\xc4\xb7\xc5wo~\xcc\xa5l\x949mco\"\xcf\x17\x1b\xba\xa5\xf0~S\x14\xbb\xf7G\xe2\x7f\xf3\xf7G\xcc\xf4NR\xf9\xeb\x11_wf\xf3\xa7\x9co\xf9\xcc\x98\xd9R\xee\x98D\xefwm\x8c4\xbb\xa0\x99\xe0\xdc-\xd9\x89\xb8\x89\x18O\x91V\x9a\x91k\x84Hdg\x11\xb6\x93\xc7qz\x99?n\xd1\xf5\xdf\x99\xa1\\\x8d\x82-\x82\xac\xed]V\x03\xe5\x8a \xcf\xcb-]\xce\xdaM\x8f\x13\xf8\xfe\xec\xec\x14\xbe{q\x06i\xa2XR\xf0\xe2\x9e\xeb\x10\x02\xff\xe8\xb2\xd0\xd9~G\xff\xf9\x8f\x7f6\x10\x81\xda\x87\x12\xb5nb\x7f\xe4\x14\xdae\xe9\xb2\\P~\"\xcf\xb24\x9b\xb5G\xb0\xdb\xc5U\x06\x1a3\xe7\x08\x9b\xa3\xd8\xd0\x17d\xc1\xe4&M?\x94\xbbJ\xf53\xed\xbd\x94\x83m\x0d\xe1\xdd\x9b\x1fy\x7f\xfcj\x80bC\xb7\x0d\xbeZ\n\xc6\"jx\xec\xdf\x17i\xc4ti;\x86+:\xe3\xa2\x91\xd1U\x9a\xd1#\xd5\x84a\"E4\x8f\xe2\xa8\xd8CB\xe9Rm\x9b\\d\xb3\x8bND.M\x98\x02H\xd8\xa6\xc9X\x9a\xf1\xf0\x0cn\xbc\xcb\xa9zk\x9d\xcd\x91-:\x93@\xb1\xea$\xe9\xd6!\xcc3J>0\xf9\x92\xa8f7[\xee\xb9\xb4\xa0\x8f\xc5\xcd\x08\xab2Y\x08\xaec\xa3\x93\x92\xb8(\xb3\x8c\x1b6M\x13C\xacr\xca\xad\x9e\xf6\xa5Tj\x81!\xa3<\xd8x\xc4w\x1bq\xc0c\xe8\xf8N\xces\xfd*^\xe5G\xf9\x84\x0d\x90mV-\xa5\xb5\xdf\xd1\x99\xe0\x1c\xb2\x8b\xf2\xd9\"\xdd\xb6\xf5\xc1[\xce\xaf\xb90W\xc49\xb7#_pC\xe6\x15\x8a\x13\xa0`\xf0\x9b\xb0\x8d\xd6\x9b\x02\xe6-q\x12gl\xb6_V{\x9c\xd8/U\x8a#\xe4tK\x92\"Z\xe4\x8a\xfd:\x89 x\xf3\xd4\xbc7\xbdbb3\xa7\xe2`\x1a-\x1b\x9bLog\x91\xaa\x9b\xcc\xd3\x0b\xaa\x06\xd9b N\xbf\xaf\xcc\xfd\xbd?N\xf6\xef\xd56\xc4\xf7y\x92\xcd\xa3\"c\xacj\xe9Wi\x16\x12\xa7j\xd1\x04>\xa2\xc8\xc9\xe4\x9f\xab\xa5:\xd6\xdb\xd9F\x9b\xf8\xd5\x0eY-\xed\xa9b\xa28\x9a\xf3\xc1Hm\x94C^\xeevi\xc6\xf5\xf3\x8e,>\xdc.\x13\xf6?L+\x8b\xb5\xc8\x15o6\xb7\x9at\x05e!DN\xb1x\xce\x84\x9c,\x97\x91\xe0wX\xd3\x84f\xdcB\x14\x96L\xae\x86\xc90\x0b2*l/>\x11\xc6\x1ep\xf71\x9c\xb2\xbe\x19\x7f\xcba\x90\x8a4Q\x02\xcf\xfe\xf2\x97\x96\xa2d'\xbbU\x9a\xc2\x13\x98\xcdfM\xc3\x93uA\x92}\xf3O$\xd9\xcf\x18\xf2\x97Y\xba\xbd\xb1J\xd3\x9b\xcd\x1fg\xb3\xa6\xf6\x8bVp\x83}\xfe\x8e\x0f\xe1,\xbd\xf1o\xec\xfb\x9b\x1d\x1b\xb8\xdd\xe6\xd7\xee\\\xee9\xe6\xf2WrA\xbc&\x03O\xf8N\xc90!\xc7\x1f\xe57^\xa6\xe9l\x11\x93<\xef\x0d_t\xc5>\x13\xa3k|\xfa\x1f\xbayU\x13\xbb\xef\x98\xd8\xe9\xbe\xd8\xa4Ikj\xa2\xaf\x97izc6\x9b\xddl/\x8a\x98\xd6\x8d\x9b\x9a\xa5\xe2\xd3\xb4\xcd\x92}x\"&\xf9\xfc\xc5\xdbgoNN\xcf^\xbf\xb9\xd9\x8e\xce\xd4\x0b\xd9E'\x10v\xa7\xf7\xb5cz\xdf\xa5\xcd\x99\xf1\xa9=~\x02\xff\xb6\x9b\xcf^\xa6\xe9\xbff\xb3\xd9\xaf_\xb5{?b\xdb+\xfbf'6\x9bW$\xcb7$f\x93\xee\x0e\xa8=\xc1.\xee\x16\xe2h\xd5A\xfb.\xd9\xd6\x88y\xb7\x9cI\xf8W\xff\xe3 O\xe0\xe8\x9c\xe1:\xbdU+\xcd\xccO>o%\xb7\xcapa'\x8e]W\x8fp\xef\xdf|_9\x00\x99\xc1&\x11]\xd7l6\xb7\x99\xc5<\xe3?\xb0\x0d\xf6:\xb3\x9f*=\xc6t\x1c\xa3;\xfb\x83\xa0\xbdBU\xa9\x90$\xdes3Rg|W\xdb6\x90UA\xc5\x1e\xc5\xad\xfb\xeb\xb7\xaf+DR\x97\xa9\xee\x84\xbdI\xe5\xda_[\xa5\xe9lN2>\xd0O\xb7\xf7\xb3\xcf\xd7\xc4\xfc\x84\xcd\xd54\x16y7\xd7\xd8\x17L\x8d\xc9?\xfe\xf5\xed\xeb\x9f\xd4\xbf\x9fa#\xeb|\xa1\x1b\xde\xc9J\x9aJ\xed\xb5\x11\xf4\x8dr\xb8\xa4q|\xebC\x92^\n\x1f\xc2\x86\xe4\xec\xa0'<\x00Mvj3\xc0\x910\x05:\\!D\xb1\xd1\x19[\xf0d\x0dD,\xb7B\xf5\x9e\xb3\x9aZ\xf5M\x1a/[~\x07\xce\xa8\xec\xbc)\xb9\x05\xe4\xc9O2\x8b\xc2\xc2QV\xdc\x017\x98\x1c\xa9\xc9\xf5\x8e&\xeat\xfb\xcf\x7f\xfc\xf3\xe6\xe3\xf1+\xd7F\xda]<>=\x86\xe4\xee\xec\xde\xdd{\xf9\xb5\xd6\xb2\x00\xac\xb3\xddb\xb6&\x05\xbd$\xfbYV&E\xb4\xa5\xb3\x17\xec\x04\x84\xf6\x96\xd0\xfak\xd0\xdb\xa8\x8bt\xd93b- o\xf7\xef\xc9\xbfJ\nZq/iA\xa2\xb8Wi\xd3N|\xed%\xbd\xf6\xa6%\xc0\x94\xecZ\xf4\x1cBM4\xdaDWW\x86\xe9D.\"\x01zG\x91\x80i\xdcE\x02\x86;\x8dz\xa8\xb4N$\x01\x03]I\x02\x06;\x94z\x98*\x07S\xcf\xad$\xc0\xdb\xb9$`\xa4\x8bIC-\x11\xce\xdb\xf7\xbb\x1a\xe9n\xea\xe1\x93\xa6F\xbf\xa3\x91\xae\xa7\x1e\xbe\xbe+J\xf63\x99CJ\xc0\x08\xb7\x94B0\x99sJ\xc0@\x17U5\x9a\xc9\x1cU\x02&qW \x98\xcei%`\x12\xd7\x95\x00\xbb\x03K\xc0p7V_\x8bj\xdcZ\x02\xc68\xb7z\xc8\xba\xce.\x01\x1a[B\xa7\xa5\xc69\xbez\xe8\xe6\x1aa\x1e\xe0\x0e\x13\xa0\xad\xd6\xb1l\xc5\x96J(\xd7.=\xd0Y\xd6W\\\xcay\xd6p\x99 \xb0\x8d`\n\xf7Y\x0b\xa18\x02\xb5\x97b\xa4+M\xc0x\x87Z\x0b]\x7f\xc3\x1d\xe9bk\xe1*Z\xee6\x01C\x9dn\x02\x8c\xde*\x01\x1a\x07\x9c\x00\xab\x1bN@\xc7/\xc1\x01\xe7\x923\xb7\xffU?wo'\x9d\x00\xdc\xe4m\x0e;\x01\xb6\x99Z\x9dw\x02\x90.<\x01\x1d\n\x8cq\xe7 0:\xf5\x04\xe8]{\xd5oZ\x07\x9f\x00\x03U0\xce>\x016\x97\x9f\x80\xa6\xe3O\xc0@\xf7\x9f\x00\x87\x13P\x80\x9f+P\x80\x8e\x14V\xb7\xa0\x80 \x9c\x83\x02\xb4\xfdw8i2w\xa1\x80 \x9d\x86\x02&s\x1d\n\x98\xca\x81(@\xebF\x14\xd0\xf4\xfe\x08h\xba\x14\x05\x8cw,\n\x98\xc4\xbd(`:'\xa3\x00\xb7\xabQ\x80\xd5\xe1(\x00\xe1vl}ht>\n\xe8j\xd4\x9e;K\x00\xd6\xa9evGJQ\xc6$\x7f\xcc4\x9c\x81\x92\x8eP_\xe8\xca]\x85P'{\x05\x14fc\x14\xf2\x12h|\x18\x1aw\xb4G\xbf\xfcQ)\x1f\xc7\xbe\xfd\x05\x17\xb8\x0e\xd9b\xba\x1b\xcb4\x9b\xca\x94\x1b\xca\xf4\x9b\x89a#\x11\xab\xbe%\xd9\x07Z\xdf\xb7\xf8T\x99-\x08Km\x1e-\x87Zi\x9aG$\x0d\x12\xdc\x7f<\xd2\xf0\xa1\xb1\xe4F\xf7`d\xa1\x8d\x83\x83\xe5j\xd8t\x02\x1c\xeaM%\xc4|\xcc\xfa\xe8i\xb4\xec\xbcJ)4O\x1c\xcb\x80AN?\xca\x1a\xa2\xa6Au\x0cy\xc9\xef\xf6Y\x951[\xb9\xc6EF?R\x92\xd3\x1b'\xcfoV\xf5\xf5\x87\xb3<\xc9\xa2\x88Z>\xfa[\x10\xa7\xad\x10u\xcf:\x1di\x87\x8e}a\xd2x\xb3\xc8\xd3hixW\x92\x91\xb7os\x8a\xa9\xf3v\xafH\xb1\xd8h\xdfh\xd47e$\xe2\x0d\x7fL\xf3\xc2\xd0\xaaC\xc6\x86Nz\x1a-\x8doB\xb2\x96\x1dz\xb7\xca\xe61\xafA\xce\xab5 \xb7$\x1drK\xd7\xdf\xff\xab\x9d\xbb\xf1\xe2\x8b\xebO\xa3\xa5R\x1e\\\x93\x1c\xb5\xd6\xb1\xbe_\xe9\xbae\x87\x98\xca&h)\x83\x96\"h)\x81\x81\xd6\xc1 \xc1\xd7\xdf\x89\x81\x17\xf5\x81b\xee/\xe2\x83\xc4{\xa0h\x9b\xf8\xe0e\x14\x174\xcb\xd1\x06\x83\xdb\xe7\xd1\xde\xed\xad\xac\xdd\xda\xe5\xd7\x9av\x98k\xdd\xd2\x81\xed\xfa;\xf9\x00\x07\x8e\\\x8d\x9a\x90\x95NZ\xc5d\x9d\xd7\xcb\x1e\xe5L\xbf\xb0O,\x8b\xe1q?\xc9\x9fj\x1d\xf4\x8ab\x80\x15\x85\xb5\xa0\xb4\x0b\xc4\xbf@/\x10O@ \xb6\xb5\x0f\x0e\x0f\xdbZ\xca\x1d_\x92\x9a \xd8\x8a\xca\x84V\xa6\xf9\xf8\x12\xc8&.A\x06\xb4=\xac1\x7f\xad\xef{\xff\x0e\x8ca\xb5\xdfqr\x1e\xf3\xff\xd0lD\xe2r\xd2\xde\xf4\x0dO\xa4\x8b\xa5A<\x91.\xef<\xb5>\x91^\xef\x94\x1c\xadq\xaf\x14\xb8\xc6\x1a\xc3M\xbe \xe6\xf0\x17o\x0es\x96P*@j\x84\xa3\xcej\"\x8cb\xder\x84Y\xdc\xb1\x84\x8d\x0c\xfd\xc5\xd8\xc5\xc3\xa5\xfe\xc0\x12?X\xda\x07K\xba\x99!\x82}l\x1d\xabk[m\xee\xd3f\x0bY,$\xc2F\x96\xd2\x1dV\xc3Ek\xa7M\xa4%\xef\xeb\xac\xea\x01C\\\xf6u\xb0p\xf18\xe4\x02q*\xfb\x9e\\\\\x82\x06h\xfb\x15\xe3\xcf\xfd\xe2-V\xe1\xd3\xe1\x944xu8wZ\\\xb8\xbc\xad\xd9\xbb#\x9ao\xc5\xefm\x0cjs\xe2\x18\x8c\x9b\x93@\xd0\xf2\xe8zoO\x1c\x87b\x80\x1d]\x0c\x92\xb4\x84lq\xc94\xd2N\xe3\xb6\x9d\xae\x81\xe6}\x0b\xf3\xeb\x16\xcc\xfe\xa3\xcb\xf3\xb9\xee9\x17\xcbs\noy\xb3\xa7{\xb1\x19\xa4+\xf8@\xf7\xb9\xac\xd1\xa2 aV\xa7\xac\xca*RQUS\x1b\x9a\x1at\xab,\xdd\xf6\xfb7\xcd\x06\xac3b@\xe2\xf8<]\xe9~Qh\xcd\xcf\xbeZ\x1f|5\xaa\xb4\xea\x03A41\x00\xae)8ex\x02i\x94\x0br\xf1\xa2\xa9\x8a(ti\x7f\xd1\x96$\xfb\xdfv.\xc67\n\xc5\xc8\xaa:J. \"\xa5\x90\xcf\x99-\xaa\xc8\xa9mM\xda\x80\xccE\x8a\xf0\x0e\x8f\xfcY&\xc9y\xbe\xc3\xa3m\xaa\x84\xb7\xa6\xad\x94^)\xbc\x8d5Tv\xcdW\x1a\x84\xa71Ypu\xf4\xa6\xa1\x99\x1a\x1fj\xde \x04\xcb\xaaM\xf9t\x8f\xa1k\x01#9\xa0\xf7\x80a\x0d\x0e\xcc\x80\xc0\x0e\xe6\xe7\x0dk@\xf4\x03\xc8\xbe\x00\xf7\xca\xbc\x93\xb7k\xb0\xd4\xa35A\xb9\x07F\xbc\xd1U\x03\xeeUy\x97\xda\x14\xf0\x1b\xbd\xfc\x8dyA\xdec\x15\x90/\xc7\xa31\x8e\xd0?-\x04\xe3\x1eb\xacA\xf7$c\x0d\x88\x05\xc2,\x8d\xf9\xcd\xbb\x1a\x10]\x01\xb2;\x08\xb2\xd8\x81 \x8b\xda\x0f'\x92\xc5\xb1OK\xd6\xa0}d\xb2\x06\xc4\x1aaV'\x88c\x10G\x13x\xac\xc2\x97*\x8e\xe3\x1f\xcb\xac\xc1\xf0lf\x0d\xee\x05w,6j\xa1q\x8blzh\xb3\x06\xf4Z\x98\x1f\xdf\xac\xc1\xfd\x0cg\xf3[\xfb\x83\x9c5 \x9f\xe6l6\xb0_\xce\xd0\x06\xef\xe7:\x1d\xf8\x08\xfa\xe1\xce\x1a\x0e\xf7\x84g\x0d.\xe7\x83\x02\xbfg=\x1d\xc8\xaa\x04o\xd7\x03\x9f5\xc8q\x8ey\xea\xb3\x87\xcc0\xe9)\x9e\xff\xac\xc1\xf1\x10h\x0dC\x9e\x04\xd5\xf7\xa8{&\xb4\x86E?\xba.@\x08\xbd\xce\x7f/\xc0\x14 \x10\xd0\xc9\x0c\xa8a\xe4\xf1_\x937P\x83SO\xe9r jp4\xc7h\x8c\xc1\x99\x06Zlc\x92\x0e\xb4\x08e\"\x82\xf67lN\x82\x02e&\x8dx\xd2\xb4\x85\xe8\xbb,-wowt\xa1\x10\xad\xd9\x1f\xaa\xfbz\xc4\xb5S\xb2\xd1\x04y\x11<>QE\x99D\xd0\xe9\xa8\x13\\\xe0#\x171'\x19$4\xe6Gpt#\xf2#li\xc3_HF\xc4\x90\xa8\xd2\xb8\x88\xd2\xc0h\xd2\xe0H\x92ye\xff\xbc\x89\x0e\xae\xd0j3lk\xcea\x90+\xe4\xcea\x90\xe1\xdf?\x1d\xa1\x87F\xbf\xb5D\xfc[I\xb3\xfd\xd3h\xe9\xfdf\xd5|`\xbeB\xb7P\xce\xd8\xdc\x8c\x02\xf4i\x0f`\xdf\x97\xfb\xe9\x0f\x8e\x06\x964\x08\xd0\xa6B\x80\xd3\x14\xb2\x19B\xfd\xb4\x08\x18\x85O\x9f\x04\x0c\xb69\x9b\xd3\"aX\x9a\xb8\x02l\xba\xb8\x82\x8e&\x01\xdb\xa0u\x07I]\xc2\x06\xe8\x926@\x9f\xb8!\xfe\xdc\xad\"\xd3et\x80-\xab\x03\x9c\xa6\xe0\xe8\x9d\xb7\x83\xaf\x97\xe1\x01\x8d\xfd\x18_\xb9S\xb7\x1cT\xc1S7\xf7\xad\xe4\xa9[\x0e\xa8\xe8Q\xe0\xbd\xa9\xcf[k\xa69\x8f\x0cPP\x86\xd3\x87E\xdf\x98N\x1c8q\xed\xb1\xd6T\xe7\x8b O\x16\xfa3\x85\xcfiBg\xcd\x83\x8dF\xd6\x042\xaf\x02@\x06\xe2Z\x80sy\xdf\xcd\xa0\xfdo\x82\xbdOs\xad\x0f\xd8Y\xabw\xbd\x8f\xf5{\xe5&E_\xf3\x03^y\x88W\xac\xdc5\n\x02\xb4w\xfc\x80\x97*\xefm\x8f\xc3_\x1b\xaf1\x8c{u\xbc\xc63\xc5\xeb\xe3\x8dQM\xf6\n\xb9\x82\x96\x86F\xbdF\xae\xa0w\x1d\x0d\x0c\x93\xa1\xa0\x9e\x0f\xa1\x9e\x8b\x8c$\xf9\x8af\x19\x1d\xaf\xe5\xc2\n\x1db\x85rZ\x14\xf1d\x1b\xa8T\x07X\x11\x96\xad\xbagNF\x8a\xea\xf1\\6\x10\x8e\x82\x11\x81\x7fy\x9b\xed\xd2oN\x9f\xd5\xb5Q\xd6\x93l>\xe4(\x9bw\xf7\xf2i\xdf\xed\x98\xf7\xf7_\xa3D\xd8\x1d\xdb\xba\xe3\xb3\x00\x0bB@x\xcb\x0d\x07j\x01\xd6S2\x18\x0f\xd7\x02\x9c\x8d\x1d\x07m\x01\xfa\xe3\xb6\x00\xfb!Y\x80=\x06\x01\xc6\x03\xb8\x80iz0\x1f\xc9\x058(e\xb7?\x04\x8c8\xa4\x0b\xf0=\xaa\x0b\xd0\xd8t\x02\x1cS2G\x81MV\x9e\xfaUg\xf8\xc8\x9f\xb4\xc7y\xf5\xa3\xee\xb4)\x7f\xd2\xdb?.\xabP}\xe2\x8e\xf8\x8c8\xec\xeb\x85\xae\xefzo\xc3\xf0\x83\xbfj?\xea\xf8\xaf\x90\x0cu\x02\xa8\xf6#\\\x01\x02F:\x04\x04\x840\xe5(+H\xc0\x84\xb6\x90\x80)\xc3\x94f\xf7\x82\x00\x075m\xfa\x7f\xa8\xc3A\x80\xc9\xed q\x0f\xb3$\x0ebE\x18\\\x13\x02\x9c\xcc\xacuS\x08p\xb4\x1d\xe4\xb2\x10`4|\xac]~Q\x1b\x9eQ\xf1\x99\x1d\x1d\x02|76\x83\xd11\xde\xf5\xa1\xf0L\xe3\x00Q\xd8\xa6t\x83(\x9c\xd3;C\x04\x0cw\x89\x08\xd0:F$\xeaq2\x1d6\xa8/g\x832:X\xe4\xcfa\xa5\xff(+mr\xd4\x08\x18o\x8ax\xbanZmG;p\x18\xec\xc8Z\xaeW=A-\xff\xea\xb96\xa1\x9f\x8a\xf3^\xc2\xb9\xd3\x8d\xd5K\xe8\x97S\xea\xedl\n\xbfR\xea\xec\x9f\xf21@\x92\xe7\xe2%\xc3S\xb2\xa6o\xe8\xc7\x92\xe6\xc5L\xfc\xdeA\xf2\x91M\x9f7g\xe8\xd8\x94)l\xd9!\x88\xaa\x0b[\xe2f\x04\x97g\xc2yNH\xe321%\xa9\x8aD;6\x1f\xfe\x0f\xe1\x05\x90\x89v\xfc\x11\xc6\xc6\x8b\x81\xabN\xdb\xe6T\xc5\x9b\x14\x1cI\x97\xdb/I\xce8\xf7\x08\xa2\"WoH\xe6P&Bje\x86\xdce\x94\xd7k`\xb6/D\x975\x87 \xeaW/\x93D \xac\x19SU\x8c'\x9f\x0b\xc9\xd9\xce\x9b\x89\x07Bkd\x8b4\x13\x1f\xf2\xe7L21\x93\xea\x85\x91\x0d\xc9\xc53\x80\xcdi\xb6\xe6\xa6\xbe|\x9bn\xebAi_g\xca\xe8\x8e\x1f\"\xe0)\xc9*\xca\x1a\x9e\xb4i\xcf\x91\xb3G\xf7Q\x1b\xf1\x90TG\xf0r\x0f\xc9\xcb\xb1\xbeS\xee\xde\xf1v\x9e\xc6\xf5e~\xda\x16\xfaV\xa0\xbd\xd8\xcf\x88\xc0\x8c\x04B.\x90\x84\x89s\x81$\xc7\xe1.\xc1Qp\xb8\xd0\xae!E\xc7~\xdb\x9d\xe9p\x84\x8f\xf2\xfeV ;\xc3\xaf\x14\xabq\x1c\xf4j\xb1\xba\x9b\x81W\x8c)\xf0\xf6\xcduy.\xa4\xeb\xb4`B\xb3v|\xb4q\xe2t\x1d\xff\x0b\n\xa1\xf6\x9e\xed\x9aoo\x81\xdfV\xa5{\x87\xcb\x88\xc2\x8c\x06\xbe\xd4\xe4\x1d\xdd;]\x96^\xfel\xb9>\xd6]`\xc0\xc3+\x1dl\x06\xe7\xdb4\xcf\xb1\xd4\xd8\x94\xa2\x1e\xff,Kc\x84\x13?\xcf\xa2@r\xb1\xee\xbd/\xe8\xbd\xf9\x05\xc3$1\xa8\xfcC\xa8\xfc\x90\xa0\xf5%\xaf\x8e\xe6\xad1\x08\xeb\xf3\xa5\xacOG\xeb\xf5]s\x8dw\xca\xda>\x81\xd6\xd9\xdd\xe5\x14\x10f\x94\x8fW\xc0?\xa7\x8a\xdbb\x07\xce\xaa\xea\xb8\x1e\xac8lx\xc0\xe8\x8c\x10`A \x08\xafz\xc8\xac\xfa\xe23\xab\x069;\x04\\} \xd8\x9a\xde\xe4>\xb1\xcb\x0f\xff\x80\xc9N\xe3\x9d&\n\xd3\x95\xb8NTg#\x1d(\x02F\xbbQ\x04\x84$\xa7Q\xb6\x84\x80 -\n\x01\xd3F\x16\x0f\x9e\xe44\xccM#\xc0\xe4\xac\x91=\x0c\xdb\xdcM\xee\x1b\x01#Y\xfbw\x98\xf2dr\xf7H\xc4\xb6~C\xb6\xd4\xa4;\xa3\xaf\xf3H\x8b\xb0\xff\x92o\x1b\xa6u$)\x9c\xd3\xbb\x93\x14\xe6C9\x95\x048\\K\x02\xfa\x0e&\xd9x\x9c\xae\x08\xdb\xe0\x97\xb3\x0d\x86\x84\xb9?\xc3*\x1b\x1c^\x02\xc2:\xffA\xd6\xd9\xcfq\xd6j3\x89\xfb\x0cB>[\xc8g\x13\x10\xf2\xd9|\xf3\xd9\xda\x1ef\x94\xf4\xa1s\xda\xf8%Y\xde\xce\xeb4\xd3<\x10\x86\x92\xe2\xfeS^F\x04f$\x10r\xda$\x98\xf1I\x06\xf2\xbe\x04M\xc1\x15'&\x18\xd2\xd7~\x97\xb9iC.w\xac[\x8f\xb9\xe4\xb1\xc62\xe8\xb2G\x05\xde\xbe\xd2\xe6\xf3a\x0c\xdaO\x88\xc10 \xef?'\x06vy5?+\x06.[\xd6n\xc9Z\x9e\x18\x03\xcb\xf6\xab\xc0\xfb\xa91\x03\x9e\x86\xd1\xa7}n\x0c\\\xb3\x04\xe7L\xc1\xf1\xf4\x18T]\xd8/\xd8w^\xaf\xef\xb4\xfe\x01AX\xa8F\x8b|\xa7\xcc\x86\xc7~\x0b\xbd\xfd\x153\xf8\xf2\xc82\xe5\xcbf\x00\xee\xd7\xcd\x00\xf1@\x83\x8bD\x88\xc7\xde,\x9c\x8d\xe1m\xe7\x13\x0c\xa8\x05p>\xbb\x80\xc0\xa2\xbc\xd3\x03\x9fZp\xf1\xc0\x90'\xd2\xccT\xed?\x9c\x06\xf5\x18\\\x8f\xa7\x81\xfd\x153\x1bS\x1c\xea\xe9;\xeb\xa3j\xe0\xc6\x0f\x88>\xc0\xfe\xc0\x1a\xe0z\x01dO\x80yl\x0d\xf0}\x82G\xbf\x80{]\x06p\x82\xd1\x04\xe3!\xbe\x0f*\xb66\xc9K3\x80Pf5\xb8\xd4Z\x0dN\xfd/\xc0c\x8d\xfcV\xc9\xa9\xfej\xf0\\)\xa7J\xac\xc1\x0b\xf3H5\xd9B2\xd5\x83m\xe0|\xb4\x0d\xf0\x8b\x88]>\xcc\x8bQ\x80\xef\x16<\xba\x86 \xdfA\xbe\x7f\x07\xf2\xedxi\x07\xffF\x1c\x92o\x8c\x9f9\xde\x90\x03<\x0b`\x17?h\x87\xa0\x1d\x9c\xdf\x06\xed`\x01\x9f'\xeb\x90\x9cc\xfc\xcc\xf9\xa4\x1d\xa0\xf9\n\xc1Sh~\xc2\xf3\x92\xfb\x99;\xf0]j\xccsw\xc0]\x9b\xd8W\xe9\xd4\xf7\xd8g\xef\xa0\xe9\\\xf6\xe9\x04\x13kn\x03\xfa <\x04.\xed\x03u\xc8g\xf0\xa0K\xa0\x03=\x85\x07h1\x140\xe9\x93x0\xecY<\xf0\x18\xb3\xc7\xdby\x0eL\xe6\x97\xf5\x005\x9eA/\xec\x19\xb1\xad\xd2\x0c\xff\xca\x1eL\xf9\xd2\x1e\x03\xc7k{`{q\x0f*\xfd3\xber\xc2\x90\xf1\x0d8\xdd\x8a\xd1\xaa\xd6D\x19\xc0\xaaR{\xc2\x0c\xe0\xd0`\x95\xd9\xb4\xc9304\x81\xc6\x88M$\xd6X\x93h`@\"\x0d4\x8c\xcd\xd1\xaf\xf55\x90\xf9\xbc\xd8\x07\xd3_\x1c0\xfc\x05\xbfv\xaaB+\x9d\xc0\x95\xa9 :\xf5IT\xf0/\xb3\xe3#oH\x9e\xce\xaa\x1a[f\xa7\xcfi\xb0*\x07\x9bR\x18\x96An*\x83s\x88\xbc\xa3\xfc\xcdT\xfa\xe6R\xadv\xb5j*w\x1b\x83ul\xbe\x83!\x07\xdfB>\xbd\xc5j\xce\xbb7\xe4\xdc\x1b\xeb\xd5\x0c\x89\xf8\x8e${\x97\xfe\x1e\x91\x03\xd1\xe79[\xc9\xd9\xb8<\x88\xa92!F\xe7BL\x90\x0d\xa1\xcb\x87\x18\xac\x1d\xf4Y\x11\x0e9\xb7gF8\xcd\x18\x97 \xe3\xc8\x8f\xc0\xd8\xadS\xe5H\xe0\xb2$\x9c3\x06\xc4\xac\x01\x91+1\xf91\xdey\x9av\x93\x1a&\xcc\x9a@\xb9;\\\x99\x13_,\x91|s(\xac\xd8\x1a\x04u\x11\xcd\xed|t\x13\xccA,\x04\xff\xe3$\x00\xe1TD.\n\xc2\x89\x88\xc24\xdai\xe8\xe6\x8e \xb3+,\xf9\x15^\x19\x16\x8e\xa4\x06;\xc3X\x98\xc5\xc9(n&qf[ z\x01TO\xe0\xce\xb9@\xf6\x05\xe8\xfe\x00\x9by\xe1\xd13x\xf5\x0e\xf8\x08\x0cR\x84\x9a\xe0\x11\x859@\x1c\x06\xa3\x0ckp\xab\xc5\x1a\x10\xbb\x89\x00\xafU\xf3]7\x84\xfa\xac\xc1{\xed\x10*\xb5\x06O\xec\xa3\xd5l\x0b\x8d\xd3\xc5\x8aM\xde@s\x93\xe5Cwr\x87\x07W\xe0\xf9\x01\x1b\xc4\xf5\xe8\x1c\xbc\x06\x00A\x91H\x08\x8a\xa4\x0d\x7f E2Q\x1a\x08R\x95 RA<\x18\x03\xcf\x12A\x97\xd4\x10t\x89\xe7\xba\x05]\x82\xd4%\x93%\x8d \xb5 *q\x04\xcfq(n\xf3\xe04\x1f.\xc3\xa5\x90x3\x006\x8d\xc4?\x91\xc47\x95d`2\x89\xdb\x83\xaf\x83)\x13J\xc6\xa7\x94\\]R ^T\x05\xb8\x13KPh\x1a\xc9'CSK|F>]z\x89+\xc1\x047\xaai\x93L\x06\xa4\x99L\x9ch\x82J5q$\x9b(MeO7qEF\x05XSN\x90\x1a\x19\xa7\x8b\x9d\x89'h\x05\xecN>A\xa2\xc2\xab?\xcf\x14\x14\xe7\xe0m\xc9)S\xa7\xa7\xa0\x13T\x86\xa5\xa8L\x9c\xa428M\xc5v\x99\xa2\x85\x1bLB2E\xbaJ\xb8\x88&\\D\xc3!\\D\xe3{\x11M;\x07\x0b\x95\xde\xa5\xbd\x88FE\xbc\xaa\x0c\xaf\xd3\xd6\xed\xd4=Y\xd4\xa4u\xb5s\xa44\xbc\xbaI\xf3\xe2\xbc\xcc\"\xebG\xbac\xbc\xee\xf046CLs\x9c6\x8a\x97\xf6xl\xf8\xda\xfb\xb8\x1b%\xabt\x90\xd2\xa3[\x12\xe1\x14\xc4%\x9d\xe7\x11\xea\xea\x18\x15\xdd\x94\x8b\x7f\x92\xac\xd2\xaf4\x7f\xef\xe7rm\xc43\xf9\\\xa9\xbb\x99\xea\xa4\x9a3\x82\xb1:\xf3\xd4\x8c\xbb7\xbf\xde7\xfay\x19F\xc9eE}\xea\x9d\xde\xd8\xbf\xd6\xddcM\xf1\xaf\x14\xf5\x85\xc9\xf2\xb1\xc97f\xf2Jh\xbd\x10\x16\x1b\xd7f\xd9\x1a\xfcVV\xc3\xd3\xe8\x8f\xb2\xb4\xf2\x16<\xe8 \x1f\xd8fi\x9e\xa3F\x10\xc1>V\xad@Z\xdb\x98\x04S\xf3\x9bS8\xdb;H\x97\xd1]{H\xd5\x0df\x17i\xf5\xe0\x9f*\xac\xf0\x1dx/\xd0\xa6\xf7\x1a\x97B/y\x96\x06f\xcf\xb4I\xfe\x8c~@\x8b\x0c\xba\xce\x97F\xff\xb1U\x12\xad\xbeak\xcbA\xf2\xa8\x93\xc8\xc1\x9a\xc7 \x97\x8eq\x1be\x13\xa3}\xb4\xf29DB\xc3\x91(\x1c\x898\x84#\x91\xef\x91\xa8\xb7\xdd`w\xb4\xce\xc1\xe8\xd9\x86.>\x9c}z\xc3\x87\x88\xde\xb2\x16\xe9\xb2g\x88\xb6\x1d\x90KR\x90\xee\x17-\x06^\x93\xfc\x9cQ\xdb\x8e\x86}uI\x92\xc2\xf5\x9d\xee|\xd1\xea.N\xd7\xd6\xdf\x0b\xb2>\xf0\xfe;\xfdY\x8c~\"\xdb]L[\x8b\x02w\x9a\x0b\xc0\xff\x7f\x83\x02\xec\xffu\xe9\x0f\x0f\xee\xdc\xb9\xd3'7\xdc\xbdS\xff\x9d\x93\x97\xff\x7f-\xb9n\xc1\xf5\xeb\xdd\xffxN\xe3\xe8\x82f\x81\xb5\xfe8\xac\xf5\xa0\xb9\x00\xbf!k=\xcdR\xb2\\\x90\xbc8\xfb\xf4,\xddn\xa3\xc2\x97\xc5\x98\xce;/>u\x17\x05er\xb4\xf9\x13\x0cL\x03=>\x05\xf3\xa2\xf4\xf9\xd5\x86V\xc7\xb7\xb6\xefM\xa7\xbf\xde0Z|l\xf9\xae\xbd@`\xe0i\xf8\xdd\x9d\xb0;<\x0f=\x95\n:\xde\x87>\xff\x83I\x06\xc0\"\x07\xa0\x93\x05\xd0\x92\xbb%\x13\x9d?,\x85\xda\x0d\xdc\x1d\xb8\x1b\xc9\xdd\x0f\xba\x8b\xfa\x05s\xf7\x86\xe4\x9b._\x1b\xe6 /^x\xf8\xe2\xce\xf3\xe7\xcf\xee\x7f\xfb\xf2\xf8\xf9\xc3\x07w_\xdeQ\xa7\xa6\x0d\x8d\xd6\x9b\xde#\xf45\xc3\xfd\xf0\xf3)\x89\xf0\x81\x82\xd6\x82j\x06\xdaY\xbc\xce\x17\xaf\xf2u\xb3\xa7\xea\xef\xc7\xcbeF\xf3\\\xfb[\xe7\x145\xa7\x8b\xcd\xfd{@\x13\xb6\xcaK \xa2\xe5W-\x12-\xd2|\x9b\xe6w\x97t\xf7\xe1\xc1\xd7\x8b\x92\xfc\xb2\xfe\xf0\x99\x92\x87\x9fw\xeb\x0f\x1f\xef?,\x92_.\x97\x9f/\xbe&\xab\xc5\xfd\xe5\xbdo\xbe\x02\xf8\x99\xc4\xd1\x92\x14iv\x90q\\\x90\x98Q\xf1\xee\xc3O{\xba\xdd\xd1\xedn\xf7\xe8\xde\xa7G\x9b\xfd\xe7\xcf\x8f.\xb3\xf5\xea\xd1\xd7\xd9\xc3_\x1em\x1e\xac\xee]~\x9d\xdc\x8b\xbf\x12qx\xf4\x82t2\x0e\xec\xbc\x93\x17\xe4\x83:8v\x13\x0c\xec-\xaf?\xb8\xc3\x98\xf5\xfb\x8aQ{\x9f\x0fa\xd0\xb3O\xfc\x10\x87\x9e\xac\x8f\x9c<\xbf\xf3\xed\x83\xbb\xf7\xbf}\xfe\xe8\xee\xfdG\x8f\xee?\xba\xfb\xe8\xde\xa3\x07/_~\xfd\xf4\xce\xf1\xa3\xbbw\xbeyy\xf7\xe5\xbdg\xcf_\xdcy~\xff\x9b\xe3o\xbfy\xf6\xe2\xce\xc3\xaf\xbf~q\xef\xee7\xcf\x9e\xbe\xbc\xff\xf4\xebG\x0f\x1f<\xb4\xca\x8fp/\xf4;\xbd\xff\xf0[\xf9\xc7\x81\x1b\xd56\xd7\xaas/-\xdd\xd3\xab+\xaa\xdd\xfc\xbc\xfc\xe4k\xa2Q\xef\x16=n\x7f|\xfbj\xaf'\x1e\xf7n\x92A~\xda0\xeaq%\xd0H\x9a\x82-\xdd\xe2\x0c\x81*\xade\xf4R\x1b0\x81k\"\xd5\x14\xb4YF\xaf^\xbc{v\xf2\xb7\xe7w\xee\xad\xf2\xe7\xa7\x19\xf9\xf6U1\x7f\x93\xef\x9f\xde\xbd\xfcf\xfe\xf1\xec\xd5\x83\x07\x7f/\xef\xde\xff\xf6\xf3\xdf\xe6/\x17\x7f\xff\xf4\xf5_\x9e\xbd\xdc\x1f\x9f\xac\xe9\x83\xbf\xfft\xba\xfa\xe1\xa4\xbc\xf8\xfc\xf4\xbf\x1f>z\xb5\xff\xf8}\xfe\xf1\xf9\xb7o\xef\x9e\\F/v\x7f\x89\xde\xcd\x1f\xfe\xfcvY\xc4\xbb\xf5\x7f=\xe9t\xb9+\xe7}\x0f*\xb8x\xc9\xceI\xbc\xa9v\xfd\x9c\x0b\\\xd1\xa6\xa0\xc9\x92f\xdb()n\x9f\x96\xf3\x1f\xe8\xfe-]\xec\xee=x\xf8\xe1\xae\xa6\xddP\xf7=4{<\xbe\xf8|\xe7\xeb\x9f7\xc5\x0f\x7f\xdd|{\xfc\xec\xd9\xcf\x9f\xe3\x93o\xc9Y\x9a\x7f\xb7\xbf\x13}x\xf9\xbf\x7f8\xf9\xf9\xfb\xbf\xdd\xff\xe5\x87WY\x9a\x7f\xdf\x15b\xf9\x8e\xa9PwC\xd9\xe1\xfa\x9dn\xf6SN?\x96T\xfb\x16\x9e/\xc6\xacqD\x06?U\x8b\xb5\x9c\xed\xa6\xbbf\xa8\xf50\xef1S\xb15{\xdb\xa9\xc1\x8e\xea\xe1\xfd\x07_71\xfd\xf1\x0c\xfaS\x114\xa1Kn\x14\x9c}j\xd9aV\xbb\x80\xbb\xeb\xcf\x17:\x83\xc6\xb4S+q\x1b\xd4hG\xd6\xb4'\x14\x1eM;\xb1\x10\\\xcb8\xdaF\xe8\x91\xdeW'\x94\xe2S\xdem3\xad\x93\xaem\x935Qh\xd9aj\xfbL\x0e\xa2c\xa55\x87\xd1!Qg\x18\xb5\xc5&\xdb|\x9aHRz\x96\x9c\x00\x9b\xfd\x83\xb88\xc0 b=\x0b\xaf\xd9f\xb0\xdd\xa4\xb5\xf9\x048\xb7\x1f\x8cA\xf4e\xdc\xb71]\xce6\xcaR\x140Yz7XlG\x01}\x0bR\x80\x15\xbd\xc5\x06t\x12\xdfEv+np\x8dL\x80\xdd\xd6\x14p\xc5\x16\xa7\x00\xa3\xdd)\x00\xc1\xb7.\xf2\x81Bc\xe1 \x04\x05a\xb0U*\xc0Yv\xe8;\x86\x11v\xaa\x00\x97\xb5*\x001,\x8b\xe5*\xc0l\xbf\n\x18\xd3G\xd7\xa2\x150p\x13\xea\xd9\xb8\x02\xac\xe33\xd9\xbb\x88\xa6v\xdbW\x80\xde\x02\x16\x80G\xde\xb5\x86e\xfb\x9eM,\xff>n\xd3\xb5\x88\xab[X\xad\xa5\xbf\x08Fq\xc8Y\x07\xc3\xdbby&-\x98\xde\xd8\xfbcm\xd9(\x1e\xc6ak\xc0-\xdbCK0=\x91z\xd6\x85\x81\x18\xba\xad\xd2\xb4\xa0S\x1eu\x8cv\x01\x96K\xf56\x80y\xe7\xc7\xe2m\xec\xf2\xed\xbd]\x83@\xb3\xd7z,\x91\xd5\xa7d;\xae\xf6v\xe5+\xdc\x8b\xb5;\xb0\x91\x07\xcc\x1c\xa0\xdfc\xad\x8b\xe4\xbf\x9f\x1a\xa4\x1b\xd7\xcb\xc0\x1d\xd3\xb6O\xba\x97\xb6\xbd_\xe9wB,\x96\xa7q\xba\xf8p\xf2\x1c\xad\xaf|\xfc\xff\x1ea\x08\xde\x19\xc9\x8a\xdeI\x19%$\xc6\xc4F\xcd\xc1\xb3\x1a]3\x80\xd8?A\xbb\xe9\xe71;N\xe4\xef)\xf1\xa9\x07ZlH\x94\xb4\xae`\xb6\x13[D\xba6\xe5\xfc\xd6=\xb5T^q\x13%\x16E\xb45G\x0f;m\xae\xdf\xbbs\xf7\x9b[w\xef\xdd\xba\x7f\xe7\xec\xce\x83\xc7\x0f\xee?\xbe\xf3hv\xef\xdbo\xfer\xe7\xee\xe3\xda\xf0H\xca\xed\xb9\xc6\x07b\x1a\x88Z\x97\x98\xe4\xc5\xf9\x9cQNC\x05\x14[\x1cxU\xab\xce\xdb|\x0b\x03u]\x9f\x87\xc1\xc6\xc7`\xe2e0x\x84\xb0*\xcd\x93\x02\xc2\xf1\xe7\xb1\xbe\xf7\x1f4\x17x\xc1\xd3\xac\xce\x0f\xa8V\x96\xa4 \x87\xc4\x7f\xa1B\xd7\xf9!{\xe1\xf9\xe2W\xd3\xd5\"Mr\x9a\xe4\xe5A;!\xbb\xdd!\xd1s\xde\x92\xd9\xd1\x87\xec\x87^DK\xb6\xf9\x1e\xb2\x0f\xa63\xd2\x9cf\xe7\xa4\x99\x1ba\xec\x06\x9b#\x01\xfd\xdd\x03\x9f\xaf\xc1\xe0\x82f\xf9\xd0\xf2\n\xae\xd7}u\xf3\xdd\xa6\x9a#\xbb\x9do\xfb;j+Fo\xc2\x9b\xc6\x9e\xadm\xa2o\x06\xda\xfd\x1bP\x83\xec\xef\xe3`\xf0\xae\xbbM\x9c\xa6\xa9\xdb\xde\xd7\x015\x16\xdc\xfe\x0e\xba=\x1eP\x03l.\xa8a\xbf\x87a\xdb\xe9\x15\xee\x80\n4v\x00\xd8\x06\x0fN\xe7\x85\xc1&\x00\x97]\x006\xdb\x00\x8c\xd4\x01\x17\x85`$\x954\xb6\x02\xa0\xf8\xe4\xfe\x83.\xa3h\xed\x06@q\xf5\x80\x81kl\x88\x83\xf5e\xdc\xe4\x0f\xd6\xa3\xdd\xb68X\xb7&;\xe3`\x1d\xf6m\x8e\x83ue\xb1?\x0e\xd6\xa7\xc1\x169X\x7ff\xbb\xc4\xda\xa5\x8f}\x02cm\x14\xd0\xd9)0lK\xd1\xd8,\xe0\xd2\x98z\xdb\x05t\xf6\x0b\xa0q\x8dM,h\xe1W\\3\x1eSC/\x0f\xb2\x98\xc2\xde\xdfj\xfa\x07\xdb\xfbw\x19\x15\xbc\xa1\xd5\x13\x87\x8d#T{\x9b^U \xb0\xce\xbe\xc6\x10%K\xdaKPq\xb6o\x1a\xd5\x9a\x88\x9c>y\x06Fb\xcd\xd2R\x7f#\xe9\x18\xa4\xec\x1c\x91\x17d\xab\xd1^\x1e\x88\xd1\x07\x8b\x06^c\x7fFI\xa8\xfa\xbb\xd7\xfbQ\xafl\x04X\xa5\xd6%\xb76\x01s\x12\x08F\nY\x0d\x06\x85$\xc01A@L\x12\xec*J~\xe0RT\x02\xac\xeaJ\x80\x8d\xa6\x80\xa3+LB[DV\x8e\x9b\xfd\x0d\x193\xdf\x94g\xcf\xbe\xf9\xfao\xf1\x87\xe4\xe3\x7f\xfd\xfd\xc5\xe5\xfa\x9b\x9f\x93\x87\xaf\xbe}\xbd\xfd\xe6e\xf9\xdfw^\xbc\xfez\xfe\xcbE\xf9\xcb\xc3\xec\xf2\xfb\xbb\xdb\xb3w\x7f\xcd\xde\x94\xaf^\xfd\xf7\xc5\xf1\xf1\xc7\xb3G?\xff\xf2\xd3\xfa\xf4\xce\x9b\xe3\xdbg\xcfw\x0f\xcb\xdb\x8f\xee\x1d\x7f\xcc\xfe{\xf5\xbf\xff\xfav\xf7\xf4oO\x9e(\xb7\x87_\xa5\x87\x90\x90-\xed\x97D\xa3v\xf3\xae\xeb\xc4\xd8\xdc\x8c\x02\x8cn\x14p\x11\xdb\xe1N\x01\x8b\xce\xb52\xad\xd6\xb5\x02\xa0s\xaf\x00z\x8c~\xdaP\xebj\x01\xf4\xc0\xbb2fq\xbb\x80KU\xd8\x95\xc4odh(\xb0h@\xa7\xfesk?\x87\xeeCi>\xa7\xde\xb3k='\x15a\x02J\x1a\\6\xe0\x9a\xa3\xdeu\x03N\xf7\x0d\xb8&6vB\x06W\x0e\x1c\xba_\xab\x7f\x05\x0e\xdd\xbb\xdb\xc5\x03\x87\x1e\x82\xcd\xdd\x03\x87\xee\\\xef\xfa\x81Cw\xebp\x03\xc1\xa1\xfb\xb7\xb8\x84\xe0\xd0}\xdb\xddC\xe0\xea\xde\xd7M\x04\xfd]\xdf\xdfU\x04&w\x11\xb8v\x0d\xfb\x8eap\x1d\x81\x8b\x08\x006\x17\x12\x98\xdcH\xe0\x85\xb7\x896\xf8`ZM\xff@>\x98\x0e\x0b\x06K>X\xf2\x0d\x08\x96\xbc\xfeG\x84\xa0\x83K\xd8!X\xf2\x07\xd1\xf7\xc1\x92\xff\x8d\x86\x10,\xf9\xab\xef?X\xf2\xc1\x92w\xe2m\xa25d\xd9x\x05\xdaz}\xf6\x83\xc50\x11fm\xf0\x18\x86Y\x9a\xc1\x06jC\xb0\x81\x14\x98\x82\xd0`\xe1b8\xe0\xb5H\xa8\xc04`\xa8\x83\x08P\x03\x06O\xf30c(\xbd5\x07\xaba\xa2\x1e\x8c\x81k\x98\xa8\x03k\x10\x1b|;\xf1:\xf4 \xe0\xf8\xad}[\xa5\xad\xea\xbb\x1f\xd8\x06Gp\x1b\xdc\\\x0b\x08\xce\x05\xa7@\xa3\x88\x08\x13\x08u\x0d\xd6\xa07\xe0&\x0e\xc8\xc9\x83[m\xca\x8f\xdc\xcb\xa9\xc0\xa9B\x05\xb8\xe8\x0ex\xda\xc3d\xf4\xbf\xaa+%\x0e\x18$\x7fNc\xba\xe6OF\xc8\x7f\xa5\xd9\x1bzI2)G=\xe6\xe9\xb3\x89E\x9fk\xa7\xefc\x1awLb\xef;-\x81\xdflPO\x07\x0c{\xde\xd8\xdb\x88\xb4E\xdb\x96\xc5\xaf\xe6\xd5/\xd6\xd6\x17jcp\xc9\x02\xedj\x1d\xcf\x98\xa4\x8a\xc5\xcc\xd1\xab\x995\xbf\x87\x03\x91\xcbi\x02X\xa6\xeb\xc3>\x02\xa6`\"\x01]V\x12`6\xa2\xa6\x7f\x91\xc7rk\x90S\xd7X\x98N\x80\xedv <\xf6\xc6=\x01\xda\x0b\xc7\xa6e\xa5/I\xf2\x9e\x92\x9c\xbe\xa1\x1f\xd1\xb2\xb6\xca\xf0w\xe8J\x9f\xc0\xfa\x11\xd9d\x0f?m6\xc5\x83l\xfb\xf1\x82&\x0f\xef}\x9b|\x88?\xc5\xe5\xe7\xfd\xc5\xb7\x9f\x1f\xfd\xf2\xf1\x97\xc5vQ5o \xcb[\x9a\xf0\x07U\x85\x90@\x9a\xc1\x0ft?'9\x85\x84l)\x14)\xaciB3RP Pd$\xc9\xc9\x82\xb5\x94\xd8\x9c\x97>4F{\xed-M\n\xb8\x88\x08<\xe3\xe3\x86\x9f\xd3=Y\xd3\x0c\xfe\xbfww\xee\xdc\xb9\xfb\xf2\xe1\xb7w\xae\xc9V\xbe5\xdf\x02\xe1\xad\xef\xcb\xb9\xfc\xcdt\xaf\x80\x1dMm%\xf7\xef\x12p\xb4\xbc\xabZ\xb6\xae\x12q4j\xdfK\xb3&\xf99Y\xfeR\xe6\xc5\x96z\xdc\x86|wvOaXQz`%\xfd%I\x16pck[\xc6\xa4\xffd\xe3\xd7>\x86\x87n\xff\x99\x9e/\xd2\xbc8\xdf\xd1\xec|\xbe\xefG\xb21\x88\xd8(.h\x16\xad\xf6\x02\x17]\xde{\xf0\xe0\xee\xa3)P\xe5\xea\xb1\x08\x7fd\xad\x1dX\xac\x10p\x0b\x89\xe6Pl(\xec\xd8\x9f(#>\x0f\xb0\xb3?\xb1E\x85m\xba,c:3,5\xbf\xbb\xe7X\xa4w\xbc\xa1\xf9.Mr\xbc\xae\x90i!F\xc9\x13\xa0\x97\x02\xf6\xe9y\x99i\x9fW\xd00\xae9\xb5\x80\xc11\xbc{\xf3\xe3\xed\x8c\xe6i\x99-T\xae\xcd\x86\x14P&\xd1\xc7\x92\xc6{\xe9\xcc[E\x92X\xac\x1fHW\xec\xdf\x1dT9\xcd\"\x12G\x9f\xe9\xf2\xab\xce/\xbb,-\xd2E\x1a\xc3\xbc\\\xadh\x06[\x9a\xe7dMgp\xb6\x89r9f\xd8\x96y\x01\xdc\xaf\x17%@\n\x88)\xc9\x8b.\xa64\xa1p\xed\xf65\xa8\xe4\x85\xe1\xa0\xbcV\x05r\xba\xde\xd2\xa4\x90\x83c\xf3\xba\x9e\xc3\x8e\xb0\x85,\xf3\xa2\x83(\xa3\xbb\x8c\xe64\xe9\xf5\xc0\x9a\xae\xca8\xde\xc3\xc7\x92\xc4l\xdeKA\x15\x89\x96\xcf\xff\x06\xc9!J\xbaM\xdf\xb3\xcen\xaf\xd3t\x1d\xd3\x19\x9f\xf3\xbc\\\xcd\x9e\x97\x19\xb7\x9a\xdf\xdf\x14c\xe5\xc8\xf2MZ\xc6K\x98S`\x93\xed\xe0Y\x90$M\xa2\x05\x8993w{\xb9Ag\xeb\xd9\x11#\x0f;\x1d\xc2\xb5\xd95\x88rH\xd2\x821\x15\xdd\x15tys\xf6U\xb7\xd1I\x02;F\xb0hA\x8f\xa0\xa0L\x02\xca\xbc$l\x9a\xa2\x02c\x17\xc5l,E\xca'9\x8f\x12\x92\xed\x81\xc41\x9fo7g\x913H\xb1\xa1\xfbn7\xf4\xd3\x8e.\n\x88\n(R(s>;\x86\x8f-+\xfd\xc4\x97\xe68\xd9\xcf\xe0\xfb\xf4\x92^\xd0\xec\x88\xcb\xdb\xbb7?\xe6p\xb9\x89\x16\x9b\x0e6\x86\x80\xb1Y\x97\xcf\x16\x1b\xba\xa5\xf0~S\x14\xbb\xf7G\xe2\x7f\xf3\xf7G\x90f\x90\xa4\xf2\xd7#\xce)\x0b\x92\xc8\xf0\x08\x9fiN\x0b(w=r\xb3\x19\xf6\xfa\xa0\xd9\x05\xcd\xc4D\xb7d\x97\x8be\xe7#-R\xc5\xbf\xd08f\x01\xcf\xce\x89\xe3\xf42\x7f\xdc\xa3\xfe\xbf\xc3\xc9\xaa\x1e\x1b[\xae]\x96^DK\xba\xac\x86\xcf\xfeH\xf2\xbc\xdc\xd2\xe5\xac\xdf\xfc8\x81\xef\xcf\xceN\xe1\xbb\x17g\x90&\x8a\xbd\x85\xc8\xec#\x1a/\x81\xc0?\xba\x8cw\xb6\xdf\xd1\x7f\xfe\xe3\x9f\x1ddr\xcfg+#WYhLN\xbf]\x96.\xcb\x05\x05\x92\x00\xcd\xb24\x9b\xf5G\xb2\xdb\xc5\xd1\x82\xc89g\x94\xf1HzI\x97\x8c,\x0b\xb2`\xb2\x98\xa6\x1f\xca\x9d|\xb2-\x879\xc9\xe9R\x0e\xba7\x94wo~\xe4\xfdn\xc8\x05_\xeam\x83\x1b\x97\x82\x1d\x89\x1a&\xfb\xf7E\x1a-\x81$\xfdr \xd1)\x17\xb0\x8c\xae\xd2\x8c\x1e\xa9f\x0c\x1b)\xa2y\x14G\xc5\x1e\x12J\x97| \xe7\x14\xb8\x02\xc8.\xe8\xb2\x87-M@x\x8a\xf9\xa7\\\x02fp\xe3]NU\x01#\x9b/c\x08&\xcb\x82#HB\xd6\xfd\xf9\xcd3\xcam<\x85nv\xb3\xbb\xb6?\xa5\x05}\x0c\x05\xd3\x83+\x99\xb4E\xf8H\xa5L/\xca,\xa3I\x11\xef\x81\\\x90(&\xf3X UW3\xaeV\xd1\"\"\xb1V\xf7\xce\xcb\x15d\x94iTz\x04$Y2 \x95\x1d\xf0\xac1\xbe\xedU\x1c>\xa7\xeb(a\xb6\xbdH\x1f\xd3\x88\xcbL\xf0\x1a\xd9E\xf9l\x91n\xfb\xfa\xe6-\xe7\xf4\x1c\xd2b#\xc4(\xe9\xca+\xdc\x90[-\xdd\xee\x8a\xbd\x14\x8d\x9b\xb0eG\x03\x98\xf7\x04\x92\x0f\x93\x0d\x07\"f\x841E\xcf\x99\x10\xf2\x1d]D\xabh\x019\xdd\x92\xa4\x88\x16y\x93i5OI\x197Je90\xe3\xa7\xf5\x83}\x07}\xc5\x84pN\x81\x087Oc\x1b\xec\xed{r\x0b!\xf3\xf4\x82\xaa\x81\xf7\xd8\x8f\xd3\xf7+w\xdf\xef\x8f\x93\xfd{\xb5a\xe6LdI6\x8f\x8a\x8c1\xbde\x0cJw\x918m\xcd\x9f\xd3\x964\xc9\xce4\x0cW\x80b\x0c\xf3\xbe\x01\xd0\xecG\xed\xe9-V8U\xcc\x17Gs>0\xa9\xf7r\xc8\xcb\xdd.\xcd\xf8>\xb1#\x8b\x0f\xb7\xcb\x84\xfd\x0f\xdb\x1d\xc4\x9a\xe5}.\xefn\x86\xe9\n\xcaB\x88\xb5\x12\x1d\x9e7L\x96\xcbH\xc8Q\x95\xef\xc8\x86Wl\xd2e\xae\x06\xce\xfa\x11\x84nb|!,|\xb8\xcb\xcc\xc4\xc5\x07.)r`\xa4\"\\\x94\xc0\xb3\xbf\xfc\xa5\xa7\xa4_\xa6)\xac\xd2\x14\x9e\xc0l6\xfb\x8f\xce\x8f\xac;\x92\xec\xbb\x7f&\xc9~\xc6:z\x99\xa5\xdb\x1b\xab4\xbd\xd9\xfd`6\xebj\xe0h\x057X\xb3w|Xg\xe9\x8d\x7fc\xedn\xc2\xbfz\xba\xa7\xdf\xf6W\xdd\\\xef9\xe6\xfaWrA\x06M\x16\x9e\xf0\xbd\x9ea\xf4\x9c[\x94\xdfx\x99\xa6\xb3EL\xf2\\;5\xd15\xfbT\x8c\xb8\xf1y\xb7\x97\xd6\x9c\xabI\xdfwL\xfat_l\xd2\xa47m\xd1\xef\xcb4\xbd1\x9b\xcdn\xf6\x17SL\xf9\x86\xe6\x17\xbe\xcc\x9c\x0c\x18*\xb0\x06'\x82\x08\xcf_\xbc}\xf6\xe6\xe4\xf4\xec\xf5\x9b\x9b\xdd\xa3\xaa@,\x18A\x87Z \xd7M\xffk\xc7\xf4\xbfK\xbb3\xe7S\x7f\xfc\x04\xfem7\x9f\xbdL\xd3\x7f\xcdf\xb3_\xbb\x9f\x90d\x7f\xc4\xcc\x06\xf6\xddNl\x9a\xafH\x96oH\xcc\x88\xa2\x1b`\x7f\xf2\xdd~z\x9dD\xabN\x17\xef\x92m\xdd \x1f\x02g6\xfe\xd5\xffx\x02I\x14k\x18H\xd7s\x8bS\xce\xf8\xb1p\xf1\xa1\xd2\x1b\xca`\x83\xf9\xbe\xdeR\x95V\xbb\x8c\xe2\x98\xfd\xb0\xa4+R\xc6|Om\"\xbb\xae\xd92o\xb33\xc6\x8c\xff\xc0\x8c\x88\xeb\xcc~\xac\xb4+\xd3\xbclm\xd8\x1f\xc4\xfa4\xd1U\xaa,\x89\xf7\xcaF\xee\x1dY*\xf3\x04\xc8\xaa\xa0b\xa7\xe5\xa7\xa4\xeb\xb7\xaf7\x91I\x03]u+,r\xe9\xe9\x80k\xab4\x9d\xcdI\xc6\x07\xfc\xe9\xf6~\xf6\xf9\x9a\x98\xab\xb09\xbb\x863\xef\xee\x1a\xfb\x8a\xa9\xd5\xc6\x0f\x7f}\xfb\xfa\xa7\xe6\x7f?y\xf2\xe4I\x97\xda\xec\x9b\xfaT&\xf6\xf6\x94\x89\x82\xdc\xe8\x84\xd5Z\xe6r\x17\xca\xe8\xba\x8cI\xd6\xc4\xd2o\xcc>\\\xd2z\x93:\x02\xba\x9d\xd3\xe5\xb2\xde\xae\x8e\xe4\xbe\xd7:\xcb56\x90\x15\x9f\xe8\xfb\xffdS}/\x0e)\xf5\x96\xdb$\xdcL \xd7\xe3\x9e\x01F\x16\x1f\x98\\\xd5\xe6\xf9*\x8aiWO)\xe9;\xa5Y\x9e&\x1a\x96\x95\xa7\xe4U\x94\xe5\xc59\xa7\xf4\x13\xb8\xdb\xc5R}\xc6/o\x90_\xdd\xb3\xebD\x00Mo\xd7\xf8\x8c\xaf=\x86k:\xdemOe&\xc6|\xed\xa8\x8f\x85\x8f\xf6'\xb2e\x98\xfe\xa7\x18\xda\xff\xd2|\xc6F\xdb\xf9\xca6\xe4\x93\x954\x1c\xdbk)\xd6\"\xca\xe1\x92\xc6\xf1\xad\x0fIz\x99p)\xda\x90\x1c\x08,\xca\xbcH\xb7=Vl3\xcd\x910x:\x9c$\xc4\xbb\xd1!c\x90d\x0dD\xb0G\x13\xdd{\xce\xa6\x8aS6i\xbc\x14l\xd2\xe8\x9d\x9f\xf8%\x87\x81\xa2u\xfaM\xed\xf6\x1b\xed\xf8\x9b\xdc\xf57\xca\xf97\xbd\xfboB\x07\xe0\xd4.\xc0 \x9d\x80\x187\xe0\x84\x8e@\xb3+p\x9c3\xb0\x87L\xe7\x1cD\xba\x07\xc7:\x08{\xe8\xfa\x0e\xc3\xc1.C\xc3\xfb\xf3\x96\xad\xd8\xe88t\xef\xd2\x03\x9d\x87}\xc5\xa5\x9c\x89\x1d\xf7\xa1}\x04\x13\xbb\x10uN\xc4I\xdc\x88\x13;\x12\xfb\xae\xc4\xd1\xce\xc4\x16\xae\xa2\xe7X\x1c\xe7Zt\xf8\xdb\x8c\xeeE\x84\x83Q\xeb \xf1p2\xea\xdb\xff\xaa\x9f\xfb W#v\xf2.w\xa3}\xa6N\x97\xa3\x97\xd3\xb1\x7f\xc4\x1e\xe9xt\xb8\x1em\xceG\xbb\xfb\xd1H\x15\xac\x0b\xd2\xed\x84\xec\xbb!G9\"Q\xae\xc8!\xceH=)\x9c\x0e\xc9\xc9\\\x92\x86\xfe;\x9c4\xa9crr\xd7\xe4\xc4\xce\xc9i\xdd\x93\x16\x07e\xdfE\xd9wRN\xe5\xa6\x9c\xd0Q9\xb5\xab\x12\xeb\xacD\xb8+\xd1\x0eK\x9c\xcbR\xe3\xb4\xd49\xb6\xf0\xae-\xbb\xe3\x12\xed\xbaD9/{\x83\x9f\xd2\x819\xb9\x0bsJ'\xe6\x94n\xccq\xeb\xedte\xba\x9d\x99\xca\x9d\xc9@\\wRy\x07\xf9Q\x98/\xe9\xa7(/8a\xe5/\xb2\xc5\x8e\xac\xa3\xa4Q\x94\x02]\xcb\xbc\xfe\xa0\x93\x9aX\xfdY\xaaB\xe5\x1a\xad\xb7\n\xad\xafQ\xefi\xe4W\xd5\xb7\xf2\x84aPF\x84\x9c\xfe\xff\xed\x1eh\x14~\xe5\xc7e\xff\x94'm\x92\xe7\xc2MpJ\xd6\xf4\x0d\xfdX\xd2\xbc\x98\x89\xdf;H>\x96\x94\x9d\xf67\x94\xa3c$\xa0\xb0M\xf3\x02(?\xd7\xf2Cp\xa3\x89\xe6\xcaO\xe7\x84Z\x99\xa6\xb2\x8d\x98R\xef\x8c\xc6\xd1\xf3\xf9\xf0\x7f\x88{\xbc\x98\xceV\x1e\x8e\xc6q|\xd5i\xdb\x9c\xaa\xb8\x06\x8c#\xe9r\xf6%\xc9!\xa7\xc5\x11DE\xae\x1c49\x94\x89`\x84\xa58#_F\xf2\xba(\xb77=\x1f\xe0N\xcf\xfd\xfc\xe9\"\x8b\xd6\xdb\x9b\xbek\xa4G\xf7\xe6\xb2\xb3f\xe6\xca]\xb2\xce\xc9\x15\xe0\xc1\xfc\xd6dk\x18\xc46\xfa\xc4\xeb\x11\xb8\xccI\xd8\xc3\x90:\x13\xb2\xa7A\xabI\xce\xf6E\xdcb\x05\x0d\x8faxY\xe6v\xbf9}\xd6\xe7\xe19I>T<\xfc\x9c&\xe9\xf6\xf5e\xe2q\x7f\xce\x80b/u\x97a\x93\xa3\xd5\xdf\xf8&\x9d^&lg\xdf\x91\xac\x88\x16\xccN\x14\xf5\x0dR\xe3+&\xbf\x9a*kt)uk\x8a\xad\x1d\xe0Y\x1a\xd5\xbb\x17\x117XH\xb3\xb551n\xd4\x90Dv\xd9:\x1b\xfe\xf4\xfa\xec\xc5cnh\x8b\x1f\xa5U\x1bq\xe7\xd4IRH\x9b\xa4r\xe8\xb5\x0c\x13\xb1\xe6m6\x157 \xe7\x90\xd1\x8fe\x94\x89c\xd2:]\xa7\xdc$\x98\xf59\xaf\x9aP\xcd\"\xd5\x94\xf2\"+\x17\x0c]m]\xf1\xad>Q\xbb}cU\xd3L\x1aN*\xee\xa3[d\xbe!~\xa0\xc9\x0cN\x8a\xb6\xad\xae\x10*v\xe1\x14\x13\x7fksE}z\xe8\xe2\xb4\xb1\xfe\xbb\xc4\xe3\x02\xa7\x0e\x0f\xb9\x99\x827\xa8i$f$\xad\xfcf\x9cm\x1d]\xd0D~]&Q\xc1#^P\x92\"\xdd\xdeT\xccO?\xed\xd2Ds\x0be\xf7*\x0d\xa5Q\xda\x9a\xca\xec\xfcTx\x9b\xc3\xe4\xb7\xf3\xb1\xc1\xdd\xbdS\xff.\x964\xa1\"\xca\xd8\xc0\x90\x91H\x1eo\xe7$\xa7\xe7b\x1aE\xca\xec\xb44[\xb2Sm\n\x94\x9dy\x1bs\xad\x88\x7f=\x17\xf3n\"\xbc+I\xf1\x04\xee\xfe\x9f\xaa\xfb\x1aw\xf3S\x1e\x1aT\xa2\xd5\xe8>] \xf2\xd5\xb10^\xb3K\x81\xd4]\xb3\x8f\xae\xb3\x8f\x9a\xf7Yt}\xf9U\xffO\xe0!;Q\x94\xf9c\xb8\x0b\xac\x15\x1b\xde\x9d\xff\xf3\xb0\xb3L$\x8eH\xee]\xaf\xace%eZ\x0b\x8c\\\xf4!\x8er>n\xc9D\xea7\xa5\xfd\x1b\x8c\xe4\x92hN\x81\xc6\x9a\x13)\xd5]\x175\x11H\x9b\"\xa0\xb4W)\x89(\x97>Z\xd8\x05\xee\x15-\xc8\x92\xa87\xbbQ\xf2\x86\xbb(\x91\x0f\xea\x9c\x8df\x18\xdd\xd1\xd9 \xbeEw\xae\xa0\xc7(\xfd\xd0\xc3\xd6fD\x01}\xad!@\xaf;\x04\xe85\x88\x00\xd7\x8c\xc6k\x13\x01#u\x8a\x9e\xd2\xfdn<4\x8d\x80\x91\xfa\xa6\x87O\xe8\x1fC\x04\xd1W\xf7\x08\xe8i \x01:y\x10`\xbd\xfe\\\xcb\xd7\x13h&\x01f\x13j\x94\x96R\xc8q\xba\xaa5\xa7\x86.\xe9\n\xa6\x9aas\xef\x12\xf7\x10\x8b\xc9-\xd2H\x0d\x80q\x86\x8f\xa1\xd0\x92$~\xd7w\xa7o\xfe7\xc1j7\xeal\x1a\xf6KM&\xce\x95\x8ag\x1a\xf8\x9e\xc0\x9d\x8aE\x96Q\xbe\x8b\x89\xab<\xda\xbc,\xb2=D\xc92Z\x90B\xda\xf2y\xb9^\xd3\x9cY\\RP\xd9\xe2T\xc3\xec7\x97\xd73\xc7\x11\x9b\x9f\x1a\x1aSx\x8eq\xc95\xba\xceuc\xf30\xd1JZ\xe2\xd6\xf6\x0d\xbaV\x97\x90\xc31\x13\x92\xea\xf2\xd5\xfdv\x9e\xda+\xe4m\x8b#\x9a\xab3\x98\xe8K\xfeM%\x17\xe5\x9b\xf42\x814\x01\xfaI\xe5M\xf0\xd1\x1c\x9f\xbd~uSd\x835\x10.\xda\x9el\xb9\xaa9\x8f \x88N$\xd1\x14\x9d\xca,\x1a<\xfawoNx\xf6\x08,\xd3E\xc9\x93\xc8n\xa4L\xa3B\xbaZ\xdd\xe2W\xbc\xdf\x14\x8bW\x87\xc2+\xbfz\x03M\x94\x88=\x82\x9d\xcd\xe0\xb5L2j\x8c\xaf\xf3\x12\xa0\xff \xbf'\xf9F\xa8\x95|C\xee=x\xc8\xdf\x95\xe1\xe1\x85z\xe4\xbb\x94m_\xfc\x1c\xf3\xee\xcd ;9\\\xcfE\xaaC\xcb\x91&N\xe7|VM:s\xc2*T\xcbh\x99\\/dRJwFzaP\xc6\x0cB9\xc9\x16\x04c#y\x96\xcd\xe74Y\x9e\xd3\x84\xcc57-\xfe\x96\xa6OoH\xcd\xef\xbb7\xc1\x0b\xa8\\\xac\xbd_m6\xc7[\x9a,_\x88\xceD\x9e\xdaB\x1c\xbd\xa5\xb9@Z\x14\x92\xd7M\xc2\x8d\xcb\x0d\xe5\xd96\xa4?E\x88\xf2\xf6F\xcc\x10\xb0\xd6\xb5\n\x15!\xc4s\x1b\xed\xbb\x93\xd0M\xae5-\\1>c\x95~1~\x8b\x81\x84\xfb3\x8e\x9f\x8aS\xb1\xbfgR\x1e\xa7\xbf(K\xda\xeb\x86\n\x9bM1\x81cfj\xd7\x0c\xd69\xd3\x9b\x9aZ(\xb5\x17U\xff\xcd\xd4d,\x0cc&\x0d\xd5\x06\x1bB/!\xf4r\x05\xa1\x97\xbe\xee\xc1x\xac\x1b\xcd$\xb67\xa7\xcf\xd4 \xed>l\x8e@6\x1e\xaa\xee\xba\xda\x0e\xc5\xc9\x1a%fX\xf5\xe0S\xd6pJg\xc90\\\"\x9b\xd8Bt}\xd6\xe0'$e\xafy3\xc8\xb6\xe5\xb5\xd26\xd27\xec\xce\xde\xbd\xf8\x06O\x16\x18\xf6`0\x9d\xdd\x0d{1X\xf6c0\xed\xc9`Se\xaa\x9d\xdd'\x04#<]Zd\x1a\xefx\x0d&\x8f\x17T\x13\xd1{\xbd\xc0\xe1\xf9\x02\xe4L\xa7\xf2\x80\xc10/\x98\x16\x8f\xd5\xdb^\x83\xb77\x0cFz\xc4\xb4\x08+\xaf\xbc\xc1+\x06\x83=c`\xf6\x8e\x81E\xc6\x04\x18\xdfYv\xca\xc7d\xde2pX\xb70\x85\xd7\x0c\xbc=g\x00\x13{\xcf\xa0\xe7A\x03\x1b\x95\xedR9\xc6\x9b\xd6A\xd5\xe0\xba;-\xd6\xeay\xd5\x00=\xde\xde\x12\x8e\xf4\xb0\x81\xc3\xcb\x06=O\x1b\xd8\xc6:\x85\xc7\x0d4^7k\xa7\xf6\x05\x1d\xed\x81\xeb\xe0\xe3\xd5\x99\x8bn>)\xc6\x13\x07]o\x1c\x0c\x9f\xd5D\x9e9py\xe7@\xeb\xa1\x83Q\x03\x1f\xe5\xad\xeb\xa0+R\x93\xc7\x8e\xff\x8a\xf6\xda\x81U\xd0\xfc\xbdw\xa0\xf3\xe0Y\xcd[\xad\xd9i5r\x9b\xado\xb7\x9a{\x1e\x86\xea\x94\x0d\x7f\xff\x8fP\xe1)o\xdc\xb5y\xa7\xf5\x01\x8d|Tx\xa2\xa4\"\x01\xd6\x9b\xfc\xaf\xc8\x926\xbf\xeb\x8b%\x89\xc6$\x1d|l\xeca\x1asz\xec!\x93\xa7\xc9\xde\xdfq\x87J\x01\xb6\xa9\x8fNZjaS L\xad?\x8e\xcecj\x0b\x83\xcci\xd2q\xa55\xb5 \x82g/x\xf6\xae\xc4\xb3\xa7\xd9UZ\xdc\xf4\xe6\xf4Y\xbd\xaf\xf1\xdd\xbf\xd1\xa2\xe1\xb2\xe1+\xe0\xde\xbf\xf2\xd1.\x9b\x03\xef_F\xe7\x8e\xd5\x9628xl\xc7\xcf/\xeb}z\xd7\x8e\xa3\xbe\x9a\xd0\xe1\xe3p\xf9\xd8\x9d>n\xb7\x8f\xdb\xf1\x83\x9d\xf5\x94\xce\x9f\xe9\xdc?h\x07\xd0@\x17\xd0\x10'\x90k\xa0(7\xd0\x18G\x90\xd5\x15\xe4r\x06Y\xddA\x08\x19\x9a\xd4%\xe4\xf2(\xc0Tn\xa1!\x8e\xa1\x03\xb8\x86t\xce\xa1Q6\xf2\x84.\"\x8b\x93\xc8\xe0&\xc2\x8f\\\xb3\xb0\x138\x8b\xdc\xee\"\x9d\xc3\xc8:\xea\xa9\x9cFz\xb7\x11\x9e`\x9a\xa5\x1e\xee<\xea\xa1j\xa4s\xe9\xdcGX\x07\x92\xc6\x854j\x86\x13:\x92\x10\xae$\x933i\xec\x14\xa6t)\xb9\x9cJ\xben%\xbbX\x0es-i\x9dK\xbd\xaeZ\xb4RVn}\x03\x0c?os\xf9m.\x9cP\xa52!$\xa3\xeb(/h\xd6\"\x92xa7\x1c&\xc3a\xf2\x8a\x0f\x93\xbd#\x9e\xa7{4\x1f\xe8\x1f\x9d\xa8h\xd7\x83\x9b\xf5\xc9\x82`14\x7f\xfb\xc8\xbe!\x89\xb3n\xa7O\xe4\x04k2' \xf4\xff\x94I\x9dP\x9dE\xbb\x89\x9d\xa0K\xee\x14\x9f\xdb\x12<\xc1:}\xd3\xc4[S\x1e\x94\xeci\x95\xa6N\x85p\x13s_\x94\xb8\xd2bG\x8cO\xb7Y\x1fM\xe6\xe6#\xb0\x8a\x8ex \xed\xf5\xca[x\xba\xdem\x0f\xe1\xd1\xb0\xaf\x81qC\x9e\x95\x869\xbaK\x86I\xb4Rm\xfc2\xad\xce\xd8\x96!\x9az\xf3G\xdexb\x0f\x0czq\xbc\xc7.d\x1d+\xc0\xb1\x15\xd4\xe6\x86X \xc5<\xf2\xbf\xe4a\x8e\xe7\x19\xcb\x06\xc1~\x0c\xf6\xe3D\xf6cw\xa0&%\x83\xd1h\x8df\x12[\xcff4\xa8\xb6\x869\x82\xd6f\x1dM\xa3Y\xa5\xa9*G*\xc6\x1ci5\xd5V\x92@\xd72\x8d*\xb2\xe4tV\xd0dI\xb3m\x94\x14\x15\x85\xbe\xa3\xc5\xd38]|x\xba\xff\x9e\xbfh\xeb\xad\xfc\xf9c\xb4\xe7Q\x8f\x1a(I\xf7He1H\xf9\x8ed\xcc\xdc+\xce7\x94,\x9b\x8f\xe1\x82\xcd\xe66[\xdc\x1a9\x85\n\x93)\x0ea\x8bA\xe8\x1c,\x0e\xeb\xdd\xa5\xd0NIV\xe4\xb4\xf8\x9e\xcf\xf8\xab\xce\x8f|5O\x9e7Wg\xd8\xd2LCOy\xcf\xb4\x86\x02b\xb8\xc2s\xc2\x87\xc9=\x1f\x06J\x0d\n\x95u&\xdf\x04+\xfd\xc1\xae\x83\x05\x90\xdd\xee0\xa8]G,f\x94$9M\xf22\x87\x05\xd9 ;@\xec\xe4\xea\xcfY\x19\xcb\xf0\xc3.K\x174\xcf\xc55y\x9c\x1e\x1a|r\xcf\xe6?s7\xe3\x91.f\x13%\x8b\xb8\x14\x17\xee\xc5q\xe3c\xe0\xa7\xf8*E#\xaf\xae\xd6\x14\xa30\xbc\xc6\xc0 \xa8\xaea\xbf\xae9\xdf\xf1\x87\xb6\x0b\nEF\x92\\\xdc\xd1\xb7%\x8bM\x94\xd0n\x94\x82\x8f\xa2\xa5\x81\x14X\x96\xa2\xfb~7\xa2\x89]\xce\x8b\xa8\xefhG\xa2[\x92\x82\xdeb\xed;_\xf0\xdb$\xfb\xfaU\xc1\x08\xc9\xd0+%p\x0d\x18l\xcaI\x80U\x1f+\xb0\x8e\x1c\x9c\xa3\x07\xb3\x9e\xae~\xb6\xeak\x05\xee\xd8\xb1\x8dT\x80!\x17\xb8I\xe6\xd0\xeb\x9d\x8f\xda\xfa]\x01g\x95E\xba\xddF\x85\xd6\xa5\x8f\xe4D\xed\x08e\xc7\x0c\xad\x90g\xa1\xad\x99\xd8w\xbee\x7f\x9a\xb8\xfb\x8b\xea\x91\xf8\x89\x11w\xe7\xb5\xcax\xb8\x8d2\xbd\x04iY\xec\xca\xa2\xfe\xdb.\xa3\x17Z\xf5\xc9\x8f\x12\x07\x1bc\xa5\xd1'\xc6Kv\xbb\x891r\xfe\x93g\x8d\x89Q\xd3\x8bhI\x93\x05\x9d\x18m\xb5\xfe\xf5\xb6\xa9\xb1?\x98\"Js\x9a\x9d\x1b2^\x87\xf6\xdf\xda\xe4\x85\xc0\xb7N\xd4u\xc6#\x0f\x9c\x9dU\x86\xbb\x14>\xa1][\xae\xcfV\xa1\x1b\x0c\xb3\xd6\x8aO\xc6\x19\xea\xf3)\x8c\xb9\x14\x0e\xc5h]\x18\xb7\x05t\xf6I&\n\xab;\x81\xb91!\xdc \xc2l\xf8OA\xa8\x998\xd5\xfc\xe5\xae\xe6:z\xe5\x98\xe1\xaf\x11\xc51\x9b{1\xac\xe5\xb3\xd7\xaf^\x9d\x9c\x0dj\xfb\xfa\xf4\xf5\xdb\xe3\x1f\x1dMe4\xe9\xf1\xc0\xf9\xba\xd5X\x1b\xdeF\xeb\x84._\xe5\xeb3y\x85\xbax\xe1\x8b'\x96\xf1\x9f\x9a\xafJ\xe8\x15P\x1b\xaa\x9dM\xab\x8c:`\\\x9b\xc7\xf0sZh\xdeTCa\x10t~\x0c\xa7|\x1f%\xb1\x1d\x8d\xe9P\xd6\x06\x0f\x86\xc6\x18\xf8\x02\xb2\xb4L\xb4\xf1\xd2&\xe0N\x15\x02\x1a]\xdf\xbfg\xfd\xd6|\xc2k\x03Rw\x80\x87\xfe\x00\xe7\x01\xa7\x06\x0f\xb2\x83k\x87\xef\x02\xea\xd4\xd8\x06\x0fj\x80'E\x188\xce\x97m\xf0\xe1\x0b\x05x\xd6T\x80](\xf0_,\xf0]0\xe4\x99U\xdbD\x7f\x82\xed~\xba\xa5yA\xb6\x06\x1f[\xe3C\xfcD]\xee\x966T\x87:\xb3\xe9\xdf\x86\x01#q\x92\xba\x1eD\x94,\xe9'\xdc\x10p|\x88\xd7OU\xb8\x11\xd7\xfd\x94\x14\xf0\xd9B\xd9.\xd5\xce\xdcc\xa7\xf6\xb4\xa0G\xf2=\xc6m$\xde\x88\x14\xff\xe4\xc6\x9a\x15!?\xfd\xd7g{6f\xfb>\xda\xd8oM\x9fp\x0bq\x1e,D|\xcb`!\xd6\x10,\xc4`!\xda\x00\xa9;\xc0C\x7f\x80\x87\xe1\xe1Av\xc0\xef\x01\x02\x82\x85\x88\x00\xecB\x81\xffb\x81\xef\x82\x05\x0b\xb1\x07\x03F\xe2$u\xb0\x10\xf1[\xe8\xef\xc2B\xe4j\xe5\xfc\"-\xa2d}\xce\x0bP\xdd\xd6\xa2\x93\xa08UR\xf3\xd2\xd5\xf6\x8b\x12e\xcf\x1e]\"\x8c\xe5\x9b\xe7\xca\x91\xcc\x98\xe7\x85t#\xd7nw\xe5X\x16a\x9a\x8a\x80Ft\xd2L+.S\x86c\x15G\x0b~\x93\x05\xe34\x03O\xc4\xcc\xe09\x17\xb5A\xe7\xa4(\xc8\xe2\xc3U\xb9\xb3\x1b#<\xb7\xe4\xd2\x08@\xf4 \xc8~\xa1\"\x14r\xb7G\xf6\x0d\x1e\xfd\x83!\x05J\x0f\x1e\x03\x00\xcfA\x80-\x89J\x0f\xd8\xd4*=x\xce\x05\x06\xcc\x07\xec\xc9Yz@*\x80.(\x85`L\xe4\xd2\x831\xbdK\x0fW98\xac\xea\xea\x02.m\x0c\x8dN\x9f^\x86=y*p$\x9d\xe9\x01\x9b\x8a\x86F\xa8KYs'\xa8\xe9\x01\x9b\xb6\xa6\x07s2\x9b\x1e\xbc\x19\x0fw\x82V\xe0\x8d\x1e\xbb\xe77A\x9f:\xa7\x87\x11\x03r\x99\x04mp$\xdf\xe9\xe1\x8at\xa7\xcf9\x0f\x86\x11\x0d\xf0&x\x1b\x06\x1c\xd4\x15\x0c\xa0\x1e\x0c\xa4 \xf8\x1e\xe0\x15\xf8\x1c\xa0\xba\xe0/\x19\n|\x17\x1c\x86/:\x0c]\xf8A\x07~\x05\x1e\x07\x7f\x05\xee\x94G=\x0c\xa0\xcb\x00z\xe0\x93&\xf5`I\xa5\xd4\xc3UL\xcb\x99\xe8\xa8\x87\xab\x18\x9a\xb94\xca\x0c\xd8\xccO4BS\x82}\x1fpy\xa3z\xb8\nr\xba2O\xf5p\x15#3\xe7\xae\xea\xe1*\xc6\x84\xc8~\xd5\xc3U\x0c\xce\x91?\xab\x87\xab\x18\x18.\x03W\x0f\xee\xbc\\=\x1c~^CNg> \xc0(\x84\xa6$a=\x88M\x14CBO\x0b\xcd\xd72\xfb\x02\xcf&\xa8\xa8\x9f\x82!\xc6!\xde\xcb\xae \x1cJ<\xc4Q@8\x94\x18\xc1_$\x14\xf8.8\x0c_t\x18\xba\xf0W}(\xa9\xaff\xc0RFP\xc4|[e\x1f\xac\xf7W\xf6a\x10\x03\x0fc_\xa5\x99\xceW1\xd1\\\xbbg\x83\xc1\x8c\x81\xcbHj\xc3-x\xfa\xe3\xebg?\x9c\x9f\x8c\x1e\xa6\x9fSU\x00:]\xa0\x0d\xa3\xc7\xeaE\xd2!v\xbc\x80g\xdc\x9c~\x1b\xadE\x86\x1e\xb3=TH\x81g \xa8\x92,\x0f\x94Q\x02D\xe2u\x9b\xf3\xc3\xc6.\xb0\xb7\x0b\xca\xaa\xe86\xafV3_ \xd0\x87K\x92\xcbc\x85\xbc\xe6\x93\xa8\xea\xb4\xda\xe9a\x9fI-\x7f9u\x1e <\xf68\x9f\x9d\xad\x1e\xab\xfb[\xdf\x9d\xdcc\x17\xf7\x98\x9d\x00\x9f9\n\xf0\xd6q\x83\x84q\x80 \xee\xcay\xff*(\x1bx\x13\x0b\x06\x11\x8c\x01]\xde{\xf0\xe0\xee#\x9f&\x03 \x07\xc3\x88\x07\xfc2\xa0\xc5\xee\xde\x83\x87\x1f\xee~\xc9\xc3\x1cb5\x9c\x96\xf38Z\xfc@\xf7-\xbf\xc9\x07\xbao^v\xe5\xb7\xe7\x979\x15\x97\xbb5\xea\xad\x7f\xaet\x00\x12\x116u\xab\x0d\x83\xe8=\xe4\xecVy\xcevY\x94fQ\xe1-Z\x07\x1d\xa3\x1a\x1dfP\x9e\x92\xee+\xe3\x9e*q\x00q\xbcE\xc5S\x19z\x12\x08\x06\x10 \x86\xa9\xc1\x01\xc4\x82!\x04\x83\xa1\n\xf0\xea\x06\xe8\xaf\xfa&W|\x13\xa8\xbd!Jo\x00\x8d\xfd\x94 \x8cQw\x07\x1f\x9d_\xa2o\xd5\xcaoX\xb8!1K=M\xce\xdd\xeewd\xef\xb8^\xe7\xfb\xcf$)\xa2\x84\x9e\xe3\xecl\x9c}\x8d\xb0\xab\xd1z\x11\xaf\x0d\xd1\x9b\x05\x92\x82\x02<\xd4 zk@O\x1e\xbc\x08\x00\xbe\x1b\x81\x17!\xc0\x8f\x18\xe0\xaf\xf6\x0f;\x1c\x1f%\x8fU\xefLm#\xd0\x0dV\xec~\x9a\xc9\x8b~8\xfd `\x80\x02?\xc0X\xfc\x945r\x00\xc8\xae1\x9e=\xcf\x1e]^;\xac\x03\xe9G\xb6a<\xe3\xb5 \xc7\xbc4\xc1U!!\x9c@F|\x8dZ\x1aR\x14t\xbb\xe3\xd5\x11E\n\xdb(\x8f)Y\xf2\xb7\xb6\xd6\x9bB\xbe\x95\xd2\xf4 5\xd2\xc1\xda\x842*<\xb3r\x9b\xfcrHC\x14Y\xe0C\xdc*\xdb\x8b\x0c\x87[!\xb5\x10n\x85l\x81-\x1ai\xb3\xa6\x0eu+\x17*>\x88 \x9e=\xe6\xe7\x1b\xdd\xf3\x8c\xe3yF\xec\xf0\xb1\xb9AQ\xb8\xd6\xfa;\xc3g\xb8\x80\x18:\xf4\x85X*\x04\x97;\xb67\x8fN\xec\xdb\x9a3\xec\xe4\xd1\x93a:\xad}\x13\x1b\x072Gw\xec\xdb0:bc\x88\xc6t\xd0ib3\xfa\xfeMW\xc6\xe3_\x80\xeab\xe0\xef\x0fk\x1e)1^Y\xff#co\x81#\\X\x1f.\xac\xe70\x11=\xc3\x85\xf5=p\xa0v\x1f\x16p\x95\x87\x10.\xac\xb7,\xc5\xe4g\x92pa=\x87p4\xe9\x03\xc2h\x1b{4qWo\xa18Q;B|\xedU\xb8\xb0~\xda1\xba\xca\x86\x86\xe2\x0d\x17\xd6\x03\xe0\xcae\xdc\x851\xc3\xfa\x0f\x17\xd6[\x16\xc6m\x01\x85\x0b\xeb\xc3\x85\xf5V\x03!\\X\xdf\xfe\xc6e\xa2\x08\xc0%\xff\x87\xebHq\xf3u\xab\xb16\x84\xebH\xdd\x19\x13\xe0\xc7\xd0\x18\x03_\x00\xaa0\x11w\xaa\x10`\x0b7\xb5\x01[\x80\x88\xd4\x1d\xe0\xa1?\xc0y\xc0\xa9\xc1\x83\xec\xe0\xda\xe1\xbb\x80:5\xb6\xc1\x83\x1a\xe0I\x11\x06^\x85\x83>|\xa1\x00\xcf\x9a\n\xb0\x0b\x05\xfe\x8b\x05\xbe\x0b\x86<\xb3j\x9b`\n\x00\x9da\x8c\xeaC\xfcD]\xee\x966\xa0\xa36\n\x06\x8c\xc4I\xeap\x1d)~\x0b\xfd]\\G\x1a.\xac\xf7m\x19,\xc4\x1a\x82\x85\x18,D\x1b u\x07x\xe8\x0f\xf00<<\xc8\x0e\xf8=@@\xb0\x10\x11\x80](\xf0_,\xf0]\xb0`!\xf6`\xc0H\x9c\xa4\x0e\x16\"~\x0b\xfd]X\x88\xbfajt\xb8\xb0\xbe\x0f\xe1\xc2\xfapa\xbd\xeb;\xaf\x01\x80\xe7 \\X/\x00\xa9\x00\xba\xa0\x14\x82\xd7\x9d\xf0\xe1\xc2z7\x84\x0b\xeb\xf5\x80M[\xd3C\xb8\xb0\xde\x0e#\x06\xe42 \xda\x10.\xac\xc7\x9a\xe0m\x18pPW0\x80z0\x90\x82\xe0{\x80W\xe0s\x80\xea\x82\xbfd(\xf0]p\x18\xbe\xe80t\xe1\x07\x1d\xf8\x15x\x1c\xfc\x15\xb8S\x1e\xf50\x80.\x03\xe8\x81O\x9a\xd4C\xb8\xb0\xdeoh~E\xe1\x02\xb0\x99\x9fh\x84\xf8\x0b\xddpy\xa3z\xb8\nr\xba2O\xf5p\x15#\x0b\x17\xd6{\x0e.\\X\xdf\x80\xc3\xcfk\xc8\xe9\xcc'\x01\x18\x850\\X\xaf\x07\x7f\x0b\x0c\x15\xf5S0\xc48\xc4{\xd9\x15\x84C\x89\x878\n\x08\x87\x12#\xf8\x8b\x84\x02\xdf\x05\x87\xe1\x8b\x0eC\x17\xfe\xaa\x0f%\xe1\xc2z\xe7\x85\x14z\x18\xcc\x18\xb8\x8c\xa46\xf8^i\xa1\x07\xcf\x8b.\xf4\xe0y\xfd\x85\x1e\xf0\x97b\xe8a\xd0U\x19z\xf0?\x85 @\xde\xb8\xe1\x89\x15u?\x87\x1e\xbc\xa3\xfbm\x18\xcc\xcf\x83\xd5\x1c\"\x86\xda\x87\xd1\xc3\xf4s\xaa\n@\xa7\x0b\xb4a\xf4X\xbdH:\xc4\x8e\x17\x80\xbd\xa8\xc4\x03e\xb8\xb0\xde\xf6\xa9\xd7\x1e\xe7\xb3\xb3\xe1.\xd2T\xe0\xb7\x93{\xec\xe2\x1e\xb3\x13\xe03G\x01\xde:n\x900\x0e\x10D\xf4E\x9c\n\xbc\x89\x05\x83\x08\x06\xbe\x17t*\x18D8\x18F<\xf0\xbf\xb8S\xc1\xd5\x0es\x88\xd5\x80\xbd\xd8\xd3\x03\xe5\x0477\xfb^\xf4\xa9`\x10\xbd\x87\x9c\xddv\xfe\x17\x80*\xb8\x821\xee\xc2\x85\xf5\x16\xf0T\x86\x9e\x04\x82\x01D\x82ajp\x00\xb1`\x08\xc1`\xa8\x02\xbc\xba\x01\xfa\xab\xbe\xc9\x15\xdf\x04jo\x88\xd2\x1b@c?e\x02c\xd4\xdd\xc1G\xe7\x97\xe8[\xb5\xf2\x1b\x16nH\xe1\xc2z=\xe0\xb5!z\xb3@RP\x80\x87:Ao\x0d\xe8\xc9\x83\x17\x01\xc0w#\xf0\"\x04\xf8\x11\x03\xfc\xd5\xfea\x87\xe3\xa3\xe4\xb1\xea=\\Xo\x82\x03\x8c\xc5OY#\x07\x80\xec\x1a\xe3\xd9\xf3\xec\xd1\xe5\xb5\xc3:\x90\xc2\x85\xf55\xd8V3\\X\x8f\x88\xbf:w&\xf7n\x14n\x85lA\xb8\xb0\x1e\x13\xc6\xf2\x8c\xe3yF\xec\xf0\xb1\xb9AQ\xb8pa=z[s\x86\x9d\x1e\xc3\xbb7?\xde\xceh\x9e\x96\xd9\x82BB\xb6\x92i\xcb$\xfaX\xd2x\x0f\x8c\x93\x8bh\x15\xc9\x13P!o:1e\x01\xe44\x8bH\x1c}\xa6K}\xad\xd6.K\x8bt\x91\xc60/W+\x9a\xa9\xabRf\xe2VN1\x17\xd8\x96y%Q@\n\x88)\xc9\x0b=\xbe4\xa1p\xed\xf65XlHF\x16\x05\xcd\x18&\xca\xedP\xc8\xe9zK\x93J\xdc\xdf\xbd\xf9\xf1z\x0e;Rlx\x07ZtU]\xba\xbe7\x86fU\xc6\xf1\x1e>\x96$fTY\n\x9a\xc9.8un\x90\x1c\xa2D\x8f\xe0=\xeb\xfe\xf6:M\xd71\x9dqZ\xcc\xcb\xd5\xecy\x99\xf1\x02\xb7\xf77\xc5\xe89\xca|\x93\x96\xf1\x12\xe6\xfc\x1a\x19}\xb9\xc2\x82$i\x12-H\xcc\x05D\xdf\xe3\x0d:[\xcf\x8e\x18 y\xa9\xde\xb5\xd95\xa6#\xf8m\xab\x8b\x05\xdd\x15tys\xf6\x95\xbe\xe9I\x02;F\xd4hA\x8f\xa0\xa0d\x9bC\x99\x97\x84M_T\xea\xef\xa2\x98\x8d\xaeH\xc5\xa5\xa6QB\xb2=\x908\xd6\xd3n\xbf\xa3\xf2\xc6\xd5bC\xf7\xfa.\xe9\xa7\x1d]\x14\x10\x15\xec\xb8Q\xe6\xea\n\x1d\xce\x0c\xf4\x13_\xca\xe3d?\x83\xef\xd3KzA\xb3#\xae\xda\xde\xbd\xf9Q\x7f\x8c\x16;/C\xc3\xd8U\xcf\xaf\x8b\x0d\xddRx\xbf)\x8a\xdd\xfb#\xf1\xbf\xf9{~\xff@\x92\xca_\x8f8\x97-H\x02)\x97&N\x81\xbe\xea\x16P\xee\xe4}@\x86\xfehvA3A\x86-\xd9\xe5\x82e\xd8\x0c\xf8\x01K^\x1c\xc4}\x0e\x91\xb8;\x96\xe8\xe7\xb6J\xe38\xbd\xcc\x1f\x1b\xd6\xee\xdf\xe1dU\xcf\x80-\xf9.K\xd9\xb6\xb4\xac&\xc97\xc4[\xa4[\x93\xc6|\xcb\xa5-\x87\xb4\xd8\x08!O\xba\x9a\x05nH[\x8cnw\xc5^\x8a\xe7M-\xb2-\xf7\xb1\xcc\x0d\x8a\x84O\x90\xbb\x15\xa3\xed.\xa6l\xa3\xe3\xcc\x0f\xf9\x8e.\xa2U\xb4\x80\x9cnIRD\x0bM\x8a\x0f\x97\xb7\x01&\x85\x8f\xe1m\xb08^1\xd51\xa7\xea\x9e\x8e\x86\xc1\xd0\xb3\x0dT\x05\xf8<\xbd0\x18\x1bb\xaa\x92\x9d\xbb\xd3t\x8d\xe6\xfdq\xb2\x7f_\x1b\xee$\x01\x92\xcd\xa3\"c\xc2g\x19\x95\xd4\xd1=t$N\x93\xb5X\x11\xd2_2\xa65\xb9\xd2\x17\xa3\x9a\xf7\xcd\xa9f\x9f\xca*\xd2\xb0\xd9\xa9b\xfc8\x9a\xf3\xa1J\xbd\x9eC^\xeevi\xc6w\xce\x1dY|\xb8]&\xec\x7f\xd8~)\xd6\x9b[%]t\xdc\xa2\xd1\x1a\x0f\xe9\n\xcaB(\x1f%\xce9S|d\xb9\x8c\x84l\xc3\x9a&4#\x05\x1f0;:TE\xfb\xc7\x1a}'\x96\xa8\xdf\xcf\x8bO\x8410\xdc}\x0c\xa7l\xbcL\x8e\xe5\xd0I\xf3&\xbdg\x7f\xf9\x8ba\x9bz\x99\xa6\xb0JSx\x02\xb3\xd9\xec?\xb4\x9f0\"\x90d\xaf\xff\x91$\xfb\x19\xeb\xfae\x96no\xac\xd2\xf4\xa6\xfe\xb3\xd9L\xbf\xf7D+\xb8\xc1P\xbc\xe3\x83>Ko\xfc\x1b\xc3q\x13\xfee\xd0\xa7&<\xbf\x9ais\xcfA\x9b\xbf\x92\x0b2\x9a8\xf0\x84\xdbV\x0c\xfb\x08*D\xf9\x8d\x97i:[\xc4$\xcf-D\x10Cb\x0d\xc4|\x1a\x8d\xf4\xfdj\xa8S\x91\xe7\xbe\x83<\xa7\xfbb\x93&\x06\x02\x89\x91\xbcL\xff\x7f\xf6\xfe\xaeKn\xdcH\x17\x85\xef\xfd+b\xeb}\xd7H\xf2T\xa7N\xf7\xecs\xa3\xbd\xe55jI\xdd]\xde\xddR\x1d\xa9\xda>^^^)V&\xaa\x8a#&\x99M2KU\x1e\xfb\xbf\x9f\x85/\x12 \x02@\x80D\xca=\x9e\xc4M\xb7*\xc9\xc0\x07\x81@ \"\x9e\x07\xcd\x93\xd5j\x85k\xe2ap\x9ex\x7f\x17\x13H\x0c[\xea\xa8\xf1\x97\xcf\xe5\xa0\xbd~\xf3\xe1\xd5\xfb\xf3\x8b\xcbw\xef\x9f\xfa\xbc#\xe3D\xf3W&\xab\xf3\x0f\xd7\xff\x8c\x0c\xd7\xf7\x8d\x87g\x83\x0f\xd5\xf3\x17\xf0/\xfb\xab\xd5wM\xf3\x9f\xab\xd5\xea\xef\xf8\x83E\xfdp\xc6\xcd5\xfe\xf4^\x1a ?\x15mw[T|\x10\xfd\x0d\xf7\x0d\xd3\xb4fO\xb5\xe5\xf5\xa4\xd2\x9f\xeb\xddX\xadh\x94\x98\xd8\xe2\xa9\xff\xf1\x02\xea\xb2\xf2NP\x7f[\x90\x99\xc8\x0fmb\x1c\xb5\x1e\xd4\xc66\\=\x8c\xa6\x8a\xd6\xd8\xf2\xba\x8c\x07\xedjt\xa4\x1d:d\xcf\x7f\x8c\x98!\xcf\xf8Yt%~\xe0\xa6\xdcc(\x8c]\x85\xef8\x8aQ\xc5\xadA|u\xb7\x92A\x8d\xd7\xd5\x83>79\x07\xde\xc1t\x84\xe2\xbag\xd2\x9a\xe1\xe7m\xb7\xc9\xcf\x1e\xbbU\xa8\x03\x9dn\xa2<\xc1153\x1f]7\xcd\xea\xaahE\xe7\xee\x9f=\xac\xfe\xfaH\x8e\x96\xbb\xf9\xafP&C\xe0$\xe6\x0f\x8dF\xd34fH\xb5\x8eQ\x83\xc3_\x07\x1az3\xbe0\xb8\xe4\xbf\xea\xd8\x10D\xd9\x177e-\xc6nl\x8c%s|`\xc8\xb5)j\xf3\xafZ\xbc\x0ej\x8c\xfbr\x8f9\xd5qw\xba\xe0\xfap\xfc\xf2\xde\xf1\xf0\x9etU\xa8\xefo\xd3\xf3\xa4\x96\xaf\x07\x86\xff\xafr\xd7\x14]'\xfdP\x17\xc5\x0d{\xcf~9\xb0\xae_\xc9\xdf'B~9\xb0\xf6A\xbc\xce\xc5\xf11`\xb0k\xba\x1e\x98p\x86\x08\xef\x89\xf1\n\x12h\x8fv\x08!\xb9\xf3\xe5E \xf1\xa2?\xe2\x7f\xea\xc3\xeeJ\x9e\xca\xb5\x0b\xcd\xf0\xe3L\xb3I\xcc\xaen\x9aC\xdd\xaf\x85\x90\xe9\x12\xfd\\t\xd0\xb1\xfe\x0c\xca\xbe\xd3^\xc0\x0e\x0e\xb5\x9c\x08[\xe9H\xf9\\\xaa\x1c\xabH$\x0c\x8bF%\xdd\xdfl\n\x98}\x8d\xf3\xdbf\xcb\xce\xeb\xeb&9\x1e\xa6\xcc\xc1u\xddl\xd9\xba\xac\xaf\x9bi\\\x8b4\xcf\xb5\xbbb\x8d\xd2U\xa2\x82\xfc\xc2\xc4/\xdf A\xe1\xa0\x9f(0\xd5\xbc\x8c\x93\xf3\x05\xa2\x1c\x91\xf3\xc4\xd9_`KZYU\xd9\xf5\xac\x161z\xd2\xf35\xeb?7\xed'\xd2\xb3\x81O\xe8<\xbb\xb9-\xea\x9aU\x1d\xe9a\xaf~\xdb5u\xf9 \xbfp\xda\x11\"\xd6\xe6\xe2\xe9\xd5\xdf\xfb8\xb3\x03\xdf\xb0\xddo\x92\xee\x824H$\xddu\x91\xb0\xb8\xb8\x91J\x1a\x9bb\xbf_\x93\x1fN\xf9\xcc7e(\xbf\xcey\xfc\xeaPV\xdbu_\xdc\xd0\xe6\xc5M\x13R\x1b\x1e\xe9[\xb6G\xa5\xbbYMhF\x93w\xce\x84\x03\xe3\xfb\xa2Gs\xbf\x82+\x7f\xd8\xebv\xcd\xf6P1!\xc4y(\xc0\xf3\x9b$\\\xc9q\x9e\xeb\xf0\xb4)\x9a\xec\xcd-\xdb|\xea\x0e\xbb\xe9 \xca_\x7f\x925Om\xb3?\xc8\x96\x9c\xdb\xbcNr+[w\xdbO \x1f\xdd\xb6\x06G\xb9\xa8=\x88\xec\x86\xa3k\xdb\x91fn\xe8\xcek\xc36.L\n\xbb\x9aa\xff\xd6o\xf1=[\xc9J\xd9\xb9?<\xd4\x9b\xb2\xbeI\xde\xb8;\xf9\xdeT\xa3\\5M\xc5\x8a\xf1\xfb\x0f*\xd7\xf8\xbbw\x00&m!\xe6\xf5\xa8\xb7f\xf6\x1f3\x7f\x92\x07\xe3\x94\xd5\xa3\xdf8e\xf5\x9c\xb2zNY=p\xca\xea9e\xf5\x9c\xb2zNY=\xb2\x9c\xb2zNY=b\xa4NY=f9e\xf58\x85\x9e\xb8r\xca\xea\xc1\x1e9e\xf5\x9c\xb2zNY=\xd3r\xca\xea9e\xf5\x9c\xb2z\x86r\xca\xea9e\xf5\x9c\xb2zNY=\xa7\xac\x9eSV\xcf\xaf.\xab'\x14\x8f\xfa\xc2y=2\xb0J\x0e\x82\xd9\xc1i\xf4\xeby\x03\xd1\x9e\xfc\x84\xe0\xebv\xa8\xd9\n0\x87\xde\xb6\x82\xc9)!\xe4\xc8h\x0d\xe3M\x1e0'\x1c\x874\xdb \xc1%\xe8\x89\x1e\x0d\xb8y\x97U\xd8\xc9\x941\xbc\xe6\x0f\xac\xe5\x0b\xa9e\x0b\xa6y\xc3h\x0b\x02h\xb9Bg\xe1\xa0\xd9\xacp\xd9\xec@\x99\xe8\xef4\xbe\xe3\x0d\x91\xcd\x0e\x8eI\xdbl\"\xcd\x13\x16[\x12\x10\x13\xc1\xafio\x903\xdb\x9c \x98?\xe0\xb50\xd4E\nr\xd1\x03Z\x0bBY\x0b\x82X\xe8)?[\xa8*o\x90*[x*\x1e\x98\xca\x16\x92\xf2\x05\xa3\x96\x84\xa1\xd0\x90\x13r\x16q\xf5\xcd\xdc0\x937\xa443\x98\x84\x84\x91\xa2\xf6\xa7cP\x87w\xd0\x99\xe1\xa214\x84\x8d\xefo\xe2u/\x0b\x0e\xc9`\x90!\xce\x0d\x0be\x08\x08-\x0b\x05Mf\xf9t3\\\x18\xfeQ\x03mJ\\\x12\xe8 F1<\xc1\x9dhX\xc7\xf5\xf0\xd2C9\xee\xbb\x7f\xc7\xfa:+pC\xe9l,X\xe3\xef[4@\x93\x10\x9a\xb1\xbdX\x0b\xc31\xc1@\x8c?\x04\x13\n\xbe\xa0\xa3@\x0d\xb8\xc4B-\xd3 \xcb\x82\xf0\n!\xb0\x92\x1eRA\x02\x18\xb10J\xa6\x00\nR\xb35S\x16\x85K\xa6\xe1\x91%\x81\x11$\x10\xb2(\x042\x0dy\xe4\x0cvx\xc3\x1cS\xdf\xef4\xb4\x91'\xa8\x91-\x9c\x917\x90A\x0baD\x83\x17\xc4\xb0\x05%`\xe1x\xf6\xdd\xda\xa8\xae\xe7px\x82\x18\x98 \x84$\xac&\xe7\x0cC,\n@\xb8\x01\x87|\xa1\x86|A\x86\xf9_7\x1aX\x88\x85\x14\xb4\xfa\xc6\xc3\x08\xa8%\x8e9\xf9\x03A\x03\xa2\x8c%!\x82\x98\x83p\xf4&\x92]\x846\x9c\n\xe9\x83\x8b\xb9B\x1e\xa2xW1\x8c\x15\xf2\x18\x86\xad\xc2\xa4!\x98*\xaf4\x1bK\xd5\x1f\x01\xf8\x80\xe1\xa6\xbc\xc7\xbb(^\xca\x83\x95\"\x0b\xc40R\x08>*.\x0f\xc1E\xa58\xb4!\x82\x87r\x1a\x90\x13\x07e,\x90M\xfb\xb0\xef\x9b\xd5p\xfb\x04yu8\xb7~\x04\x17\xb9q\\Gn\xe8\xa0\xbd\xaa\x89\xd1\x13.\xca\x08_\x83a\x0c\xc3\xfe\x9b\xfd\xea\xb54\x0c\xf5\xc0\x91G\xc2\x0f\x80FW\x8a\x07E=\x05={g\xa07\x02\x87\x00\x9d\xd3\x858\xe0\xe64\x11^@3\"\x06\x052#\xcf9\x00\xe6\x99Z\xd6\x05,\xd3\xe6\x1d\x02RF^\x9c\x80\x93\x13>=\x0eH\xf6\x8c\xbb\x17\x88<\xb7\xdf\x8d\x8d%Lp\xb7\x81H\xe3\xd0\x86\x85\x1bu\xa1\x16\xce\x1f\xcc\x8fGh\x8f\xb5V\x82\xdf\xd0\x9a\x9b\x93\xf5A\x7f\xd1Z\x13\xb4\xd7\x8c\x9e\xf6\xe2\x04\xfc\xedX9\xa1\x87\xd3\xfb2\x12f\x13\x8e\xac\x95\xaa\xf3\xaa\xe8\xca\x8d\"\x87/ml\xaew[\x0f\xe1\n\x7f\xcd\xd4\n1\x8f\xf0+\xbe)\xd6\xdd\xa1\x83M\xb1\x17\x97e\xe8 \x98\xfas{\xa8\x98\xb8,\x81\x0f\xc0\x86u\x9dpy\x05\x9f\xb4\x0c\n\x15\x875\xaf\"\x1a\x0c\x18%J\xaf\x82YS\xc0}\x19\xe6\xcd\x83d\xa2\x8b\xedA\x1aGl}\xd7\xf4l\x8d7D\x96\xe0\x86\x1c\xdb\x92\x85\xbb\x94\xad\x0b\xfc\xb7\xa8p T\x00Z\x8c\xf7W\xc2\x16-K\xf8\xe64\x10\xf7\x95}8\xff\xfe\xed\x9b\xd7\xeb\x9f>|\xbf\xbe\xfc\xd3\xc5\x9b\xe8\xfdi\xf8[\x17\xef\xdf\xfc\xe1\xdd\xe5\x9b\xf4\xb7\"\xf7\xa9\xf9\xde{w\xf1\xee\xc3K\xdf\xd5j\x00\xc6\xf5j\xe9\xfd\x8b!\x7f\xcd\xf2\xa1\xbc\xa9\xd9\xf6\xa7\xee\xe6R\xc57${\x03_r\x9d\xf8\xc9\x0c\xdd\xfai\x01d\x19v\x0b\x0f\xd6p(\xde\xf1\x7f.\xee\x1a\x8b\xdc\xf5\xea\x1f\xcf\xe7p!\xf6\xa5\xa2\xf2\x8b\xf8\xc2\xd7F{\xee\xd2\x1cK\xdc\x12\x96\xc5\xa8\xce\xb9_s,\xfe\x9b6\xc7BX\xe3@\\\xe7\x10\xbd\\R\x16\xe2\x90B\xcc87K\xf4\xe4b\x17b\xaf!\xa1\xe7\xbcD\xee\xf04\x1e$~g]h\xd3K\x17\xcaG\x80\xb4\x0f\x01)\x1f\x83pnB\x1f\xc7o\x025\x1f\xfb\xf2\xd7 '\\) \xe9\xb5\x07\x87r\xac\xd8\xc3\xf58\x16\xea|\xa2\xe9\x8d\xe8m\x93\x90\xb5\xa7\xd4-J\xdc<9D\xcc\xc5\xbd\x94-\xe3\x16\xcc\x99J\xe6\xdd\x952\xb9X\xfe\xaf0n\xbc\xc2\xc4\x89\xd3\xb8\xb3\xf9\xbaAp\xab\xba\x18{\x19\xf6\xb3\xb0\xa2\xaeNV\xd4\xc9\x8a\x82\x93\x15\x85\x16\xe2\xe4\xa4ms'+\n\xe8C\n4\x1d,\xcb\xc9\x8a2\n\xe5#@\xda\x87\x80\x94\x8fq\xb2\xa2\xa8\xb5\x9f\xac\xa8\x84-\xeaWkE\x89e\xbf\x0e\xf1\x00\x0cO\xc6\x07-\xbe\xd4\xc7yq\xfc\xba\xa2K.\xa1\x96\xd0R\xa3\xcc\x81\xd7\xda\xb9\xc8'\xc2\x1b}\xe7\xfa\xe0f\x1dna\x17\xee\xf5a\x90PQ\xca\x9c\xe9?7\xfc\xfd\xeb\xaa\xdc\xf0o'f\x0c\xf2\x8d+n$\xac7U\xc9\xea~]\xf4}\xb1\xf9tL\xd7\xa6\xd1\xa2\xb5'\xc6/\x0ba\x17\x8b\xd5\x05\xc3`\x10vNB}@\xac\x13\x904\x0b\xbc\x10+\x85\x84\x8a!\xcc\xfa>-\x94\xf4\x0d\xcf\x9b\xf4\xb6Cb\xfb\xc1\x9f\x00\x82\x17\xc2B\x9d\x16\xbdp\xd1d\x11\xbc\xa0)$x\xf9\x12\x0d\xa2\xa8\x95i\xa1\xa7\xa6\x90\xc4\xa1\xe9+\xb1\x84\x15\xbc\xa4\xa4\xb1\x90\x04NS]\xc2\xc9-x\xa1\xa4\xbc\xe0\x05O\x84\xc1K\xd2d\x89\x9f\xeatI\x12K\xd9/\xcd\xe2\xa6\xddx\x9e\x9b\xd7\x88\xb8\xe5\xaaK q\x07/G\xd6[\xd4\xf3 \xa4\x0f\x0e\xd0LN\xbb$\x1e\x1euI\x1c%\x981R\x90r\xa8\xd4\x85z\x18\x98\x96\xb4\xd9\xadK\xca\xc7\x84y\x1f\x14\xe6|\xd4\xe4C\xe8\xe4\xb5\xd8aT\x97p\xba\x14^\x12\xc7 \xb1\xef\xb4\x84+\xbcx\xd2\xb0\xf0r\xccn\x04\x93\xa6\xf0r\xcc\xe6\xf8\xf9\xb5\xf0B\xcd\x18# \x9bf\x95\xe1%\x9ek\x86\x97c\x0e[([\x0d/\xc7l\x0d\x9e\xef\x86\x97c\xb6#\x921\x87\x97c6(\x90s\x87\x97c6&\x9e\xb5\x87\x97p.\x1f^\x8e\xd7\x8f\xd4\x93GJ\xc2`T\x18\x96P\x88\x17\xecn9\xb7$X:)\x16\xce\xaf\xc4N\x8fFetI5\xach\xdeV]N\x06\xba\xb7\x9c\x0ctQ\xd2\xa6\xb5.)\x1f\x13\xe6}P\x98\xf3Q\xbf\x94\x81>D3H\x9fT\xf6\xde\xcd\x92\xc5\x0b\x9a;\x8b\x97\xe4\xc9\x98>\x15\xb5\x06Y_W\xc5\x0d\xf5\xa5\x99\x1f<\x9e\x8da\x97\xaf\xe0\xdb\x1f\xdf\xbd\xfa?\xeb\xf3\xd7\xeb\xef~|\xf9=!saZ\xa6\x12^~\xfb\xe1\xcd\xdbp\xb2\x85]\xa6\x02\x08\xd9\x1av\x99\nx{\x1eJ\xda\xb0\xcb\x90\xc2\xb1l\x18\xd2N!\xb2\xc8\x85\xb2\xfd\xae*n\xa0\xac\xb7\"\x84\xa2\xd8$\xe1\xdbj\xd3|:\x7f\x1d\xcd\xe6\xb0\xcb\xb0\xa4\xa0\xa4;B\x13#\xa9v\x995Gg\xa9$B\x88\xd9.\x8b\x9aFw\xe2\xc9B\n\xcd\xdaeQ\xfb\xc8C\x97j\xef\xca\xf2J\x98\x9f\x1f\xca\x1b\x99m\xc4\xf7y\xed\x8a\x16\xd1^\x0d\x91 \x8a+k(\x94\xcc\x98\xfb9\xb5\xbdR\xaa\x0d\xea\x18\"\x8e\x02-\xa2\xbd\xfb\x9f=w\xfd\x99E\x9a\xdd\xbdD\xc1\x14\x1a\x1d2\x1e\xde\xfd\xad\x1f\xd7P\xc7\x08\x89K\xd1\xfd\x86\xba\xcb`\x17\xb5\xe2\x85\xbe\x83\x12wObOd\xa1\xf6G\x96$=\x94\xbc\x90\x12\x17\x91\xe7\xceY\xbc$\x0d\n$\x0f\x0c`\x1c#\xb1\x92<@\x90>H\x80s\x98\xc4\xca\x97iZ\xea\xeeL%S!\x8a\x8bR\xae\xc4\n%\x85\xc5.\xc9\xe3\x9az\x86\xd9\xc7.\xc3\xc0\xcb\x11\xdb\xa5[\x14kH\xc2\nMY\x9b *+q\x10\x92\xa6{\x82\xb2J\x18\x08H\x1c\x0cHWS\x89\x83\x02\xa9\x03\x03s\x14\xd4\xf1\x1b\x95\xa6\x9a\xa8\x8aI\xd0x\xc6\x84\x81\xa6N\x9e\xa7\x96R\x95R\xe2X\xd2\x17>\xccUGGk\x11=\xf1px\x83\xde\x94x3\xb8\x15\xdb\xd4\xce\xe5\xffv!\xd4\x18\xaf\xe9\xea\xe1\xafE\xdd\x975[\xc7\xed\xd0\xb8\xfd\x19\xb1;I\xfa\x8a\xa6\xa5H\xca\x9a0B\xb2\x10\x97Cdf\x06\xb6\x06\xa2`\xff\x96\x10\x0c\x11\x10\xa5#\xcd\xb6\xf6\x19\xaa\xdf\x1e\xf7\xc8\xfb\xb7\xac$/;\xeeE7\xa4\xd9\xfet\x9c\x14\xf4\xfc\xb5\x1c&g\xb9\xba\x8b\xd4VT\xe8H\"\xe3\xe7\xd5\xcb \x9b\x9f\xf7\x8a\xd0\xc8\xbee\xe9\xdb\xa5|j^}\xea\xe8Q\xdfH\x7f7\xa84\xa7fSm\x85\x15UP5\x05\x95\x91O\xfd\x10\x14\xcer\x15\xe3\x8c\xc9+\xc3\x16\xa2L\xbe\x89\xfd\x13\x9c~\xe6\xa7\x9f\xd8<\xf8\xbc\xc1l\x1d\xd7\xceI\x98\xb1K'[\xc4\x9e\x99amyl\x98\xb0\xfd\x12\xb2]r\x9aoA[\x05\xb5S0\x1b\x05\xb3O\x96\xde\x1f\x10\xb4G\x02\x9d\xc5\xed\x10\xaa\x0dB\xb4?\x88\xb6G\xdc\xee \xa8\x80\xb1,W\x06c\x89\xda\x1a\x81!\x0e\xcc&\x8f}A\x10\x86\xdb\x15^\x9b\x82 q\xd2\xbcLv\x04nC\xe4\xb3\x1f\"\xb6\xc3\xd0p\xb2\x02\xf7,$t\x00\xa7\x8b'\xbel\xa2\x0b&\xbaTB\x8b\x84\xb8<\xf2,\x8c\xc0\x92\xa0\xda\\\xc8\x02\x08\xbe:\x9d\xf4\xc8t\xa7U\x9der;\x93\xed\xf5\xc0\x05K\x98g\x16\xffk\xc2\x8e\xe0\xacat\xfd\xfaM\xf7\x85<\xaf\x8b8^%\xab\xab\xd9v\x87\xdfu\x19\xb7k\x16^W\xf7\xbbb\x84\x06\xe4\x0f=e@M\xb0\xce\xc4\xa3\xc6\xbf\x03z\x1c\xdb\xc7\xa9<[Tf-:\x97\x16\x91=+\x89/\xcb\x9a\xd2\x7f\x9b:PS9\xb1B\xbcW\xa9LW\xa9\xdcV'\x1f)\x9c|\xa4\xd3r$\x1f\xa9\xc7\xc6\x8cN7\xcc\xbe\x8c\x18\xc1Q\x99\x93\xae\x05y\x93\xd2\xe7\xb2\xc7\xf6Mk\x95\x7f\xdf\x9c\xc3j4e/\xfa\x8dU\xbb\xa9w\x1c\xe6\xa2)\xe3\xe3i\xd7\x18\xcai\xd7\x18Jtr\x9fv\x0d\xa3\x9cv\x8d\xd3\xae\xf1\xcf\xbdk\x84r'\xd0.aS\xd3\xcb[G\x96\xb0\xec\\\x8f\x8f\xe6I\xdb,\xb6eyp\xf8\xe1}\xd0\xa7\x7f!\x88\xa8_\xb0c\x1fkS%\xd8\x19\x10k9D[\x0fa\x9b\x03\xa2\xe3\xadK\xcc\xf6\x80(\xf2<:\\\x10\x1f2\x82-\x02!{\x04\xfc6 \xc4\x9a\x18\x8e\x98D\xed\x13\xa0\xcaG\xba\x1ee\x06\x9e\xbff\x02\xd9#\xf3Z\x1b\xceO\x9cm\xc7\xf8F\x04e\xf2E\xf9{\xb1\xbb\x0fN\xbb\xe1i7<\xed\x86V9\xed\x86\xa7\xddP\xfdD\x99\xca\xa7\xdd\x10\xfeK\xee\x861t\x84\xb7\xbb\xbe\xa9\x1fd\xa9O\x96\x96\xcfq\xe4\xff\x02\xb9<\x01\xe0\xf3\x06\x00\x99K\x1e\xd5k\xb8.\x8b\xb0\xc5\xcf\xb0h\"|\xf0Kv\x8b\xe3\xaa\xf2(\xa7{*\x93{\xb4M@j\x17\xd0\xb8\xdaI[\x00\x18\x93;J\x83\x1eec\xcf]%\x05\x8c$\x0b\x9de\x1dF\x06\xf5PWgq\xab\xa70\xaa\x8fl\xe9\x01\x81\xa9<\xea\xa9\xec\xe9q\xcet\xc2'\x8d\xf1.\x12D\xd0L\x9e0\x03zR51\xa2$\"\xc7y\xc6\x15\x1d\xe7\xd5#u\x10(v\x9d,$\x93X\x17RO\x81\xdc[\x88\x9b\xca\xc3c$\x93Y\x17\xca<\xd2%>\xe4\x902\xec@\x1fz\xa2i=y8LQHg\x0e'\xf5\x88\xd4\x93tnp\x02#x\xae\xe6\x91\xc9\xabsU8\x1d\x8f(]w\x90\x8a;\x8d\x80;W\x1f\xa8\x14\xdb\xb9\xea\x8b\x93h\xe7\xaa)\x81&;W\x95D\"\xec\\\xd5A\x12\xd5\xf5\x9eLp\x9d\xa7}\x961\x97\xc2O\x1d\xe5\x9f\x0e\xb1NG\xf7\xad\xf8~\xf5\xc5\xec\x9b\x08s4m#\x0c\xf9\x1ft9\x196c!\xf5\x14\xc8\xbd\x85\x93a\x93\xdb\xb0\xa10.\xcb\xbe\x84Y\"\xa3\xfc\x90\xc4\xa9@\x9d\x08Q\xec\xbdY\x12>\x06\x8d+9\x0e\xf2\xa1\xbdG\xe4E\x8e\x02\x82h\xaf\xc59\x90\x89\xe0!\xbcP\x19u\xf2\xb1\x1cG\xe9\x01\xccB\xf0j\xdb%a\xd6$,`\"g\xf1\x8c\xcac\xc7nY\xc8\xac\xc43Z\x10\xe9>\xdd\xe3Dg\x1b\x16\x80,\x82$\xdcICk\xd1|\xa4\xa2G \x81E8\xc2\x1d\x1c\xd4\xa6a\x1d\x1ace\x8bi\xfb\xa0\xa6'hy\x8a\x86'\xacP\xe2\xf4$MM\x02\x0b\x1b\xa1c@\xec\x1c\xd0\xf9\xd7\x88\x9d\x04jG!\x85y-\x7f\xe5\xb4\x1d\"/\xe3Z\x1a\xdf\x1a\x85r\x0c\xe8cC\xb3+\xf7)\xcf\xa3K\x98\xd4\x11\xc2\xc4\x8a.\xdehg\x80\xd4!\xa0.[R\xc7\x80\xd69\xa0/\xd8\xbc\xd5R\x96j\xce\x85\x9a\xb2Li\x8b\x944\x1e\xb1e\x02i\xcb3K\x9d\xb1\xf0\xfe\xf0\\\xac2_E\x01.X\xafL\x9f\xac8\xdb\xab\xcf\x9e\xc8\xc9\xc4v$\xf2\xaf\x80j\x89(\x95\x98:\x89(\x92\xe8\xa7%\xac\xe2\xa8\xdaX^IXI$\xab\x87\xd8\xb5y\x01\xc5\x10[-\xc4Y\x80/I\x92\x02\x98YCl\xb1'/\xc8/\x91}3\x93\xa3\x14\xc73Q\x99I\xbd\xf8\x9c\x1f\xcb\x8e\xce\xcd\xe5\xcb\xdf!\xf1n8\xcb\xdd\xb7\xcc\xa3H\xa0\xa0\xd4\x90d\xf0`\x83dY\xa8\x95\xc4\xeb\xe8/\xd1\xf9\x0dQ\xdfYJ\xc6\xb4\xef\x0d\x7f\xdet\xe0\x8d\x88\xb7,!\x87Z\x96\xe4Lj\xfd\x1a\xc5\xd7\x90\x9eU\xed\x15\x14\xc9\xb6\x96eN\xce\xb5\xff\xcdX\xe6\xb5,_\x80\x84>\x18\xed\x915\x84c\x03\xf1HO,\xceC8v\xc4\xd6#\x10\xc2\x0d\x84\xe1\x82\xf8N.KBl\x87\xd0; \xf6\x10\x80\x18\xd5\xa1|7]\xe2SD\x97\xd8\x00\x03}\x90\x81:\xd0I\x91\x1cB\x1c'\xeaV&t\x80\xe6F&{\xd1\x13j\xf4\x0eU4[\\\x16\xca\xbc\x88\xaf\xe7\xa8c|y\x8f([@\xae\xbcrY\xc2\xd9\xe5\xb2\xa09\xe6\xeau\x04w%\xcb\xc9\xd28Y\x1aC9Y\x1aG\xd5L'K\xe3di \x854\xd0'K\x03(Cu\xb24\xfe\xc1\x96F\xcc\x0f\xa6\x9e\n\x0fLx)\x06Qn\xb2,\x92\x7f\xcc\xab\"b\xdfs\x11\x1e\xce\xed\xc9\xe7\xc6\x8f\x8a\x93\x85\x86\x8dS\xe2\xe6\xb9\xb9\"h9Y\x16\xda\xa1\x11\xfc\x9c,\x84\x1d(V\x0fD\x10u\xb2\x10*\x02be@\xc1\xd8\xc9\x92\x8a\xb4So\xd1\xda\n \xed\x05\x1a\xf6N\x16\x82\x8e4\x8b^`Q\x1c\x9e,Q4\x9e,\xc7lDl\xc9O\x0b\x1d\xa5\x17\x155\xa2\xf8fb\xf5dIE\xecE\x05\xca\x1e\xa4\xe2\xf6dIE\xef\xc9\x12\xc7\xf0\xc9B\x9e\x08\xb1|wY\xc8\xe2b{\x92Y\xc2\x08?\xf5Lz\xc5\xb4\xb4C\"\xe6O\x96#\xe9\x16\x8a\xfd\x0di\x83\x00qS\xcc. \x07\x1f]\x12F\x03\x12G\x04\xa8\x07\"](\x06\xf0\xb4\xd0g\xa8.\xd4\x0f\x05\xe9\x1f\x0bR?X\xd2\x01j\xf2J8\xf5^\x16:\xb2P\x96\x84\xfe&\xf43\x1dk(\x0b\x01q(\xcb1\x9aM\xc6\xef\xc9r\x8c&\xe4E%\xca\x92\x86M\x94\xe5\x18}\xa3\xa2\x15e9F\x0b\xe2\xf8EY\x8eQw\x02\xa2Q\x96c4\x82\x88q\x94\xe5\x18\x0dHC=\xcaB\xc7>\xca\x92\xbf\xdd)\xa6s:X2(\xce\x0f\xa4\x94%\x04\xa7\x94\x85\xb8\xddS\xb7\xf9\x7f\xa0\xc1\x19\x81\\\xca\x92bQ\xc4]k\xba\x9c,\xcd\x93\xa5\x19{\x1a\x12>\x14\xa4\x7f,H\xfd`\xc7\xb64)POYdO\xc3\x80OY\xa2\xb0OY\x92&V\xda\xb4J\x02\x82\xca\x92\xfc!i\xa0PY\xe6BCe\x99 \x10\x95e<\x96t\xb0\xa8,\x8b \xa3\xb2P\xb0\x06f\xc9\x05\x1f\x95% D*\x0b94e\x97\xe4y\x97\xac>\x88\xe0RYf7\x87\xe6\xf1\x91%\x1a\xeb\xb2\xcb\xec6\x91\x86(\xc5.\x94%\x1f\x0c\xd5\x94\x17\xf29\xa6\xb41 \x98\x1a\x94\x84^\xaf\x19\x80\xa7\xca\x12\x01\xa9\xcaB\xd0\xfd\x14\x8d\x1f\x83\xad\xcaB\xdb\xb9\x08\xbb\x16\xa1\xd5\xb2P\xda.\x0bYW$-\x82\x84\x05\x10E\xca\xe9B\xee<$\x0d\x00\xc4\x81/vI\x1a\x08H\x1b\x0c\xa0@d\xecr\xdc\xe6\xa4\xec\x82)\xd0\x1a\x82\xb8 \xf8&\x8e\xc0\xd3%\x16\xaf\xb7K\xd2\xf8\xa5\xd8\xf2$\x80\x8e]\x8e\xd0\x960\xa4V\x16\xe2\xca\xa2\xae)\xa2JI\xe8,y\xca\x12\x95 \xb1\xc3\x90\xd0iHS# \x9d\x87\x94\x01\x80T\x05r\xbc\x86\xd0UGV\xc51Sm\xa4(\x8d\x841\xa3-R\x98\xa3.\xb2\xb7\x82\x96\xed4\\u\x00\xf4+K\xa4\x96\xb0\xf48\x0cX\x96\xb0}\x16\xb0\xcb\xa2z$\xae=\xa2\xca\x924\xce\x84e\x19U\x8d\xd1\xce\x00\xa9C@U\x84\xa4\x8e\x01\xads@W{y\xab\xa5(\xb9\x14\xf5vb$\x18J\xb8N\x9a\xb2Z\xa4>\xfe\x91\xa9\x933\xc1\xcc\x8e\x1c#\x01v6\xa4\xf9\x07\xc3U\xef( W!8 ~\xb1T>T\xf1\xe0\x8a\xc6{?\x01\xf2!\xf4'p\xf2\xda\x9c4\xbaT\x11\xfe\x8fGOw\xf3\xa7\xb3M\xbb\xeb&\xb6\xa5\xa6\xb0Y)j\xf6@\xe0\xc9j\xb1\xb447\x01\x0d\x19\xc2\xe9\xa6\x8e\x8e2\xb6\x02\xed\x94\xb0\xe0k\xd3\xe5\xe5I\xe8J\x98an\xec%:;&\x1bD0\xc4\xe5\xddd\xfd\x1b\xab'@%%\x11\xee\xa4q4\x1b\x1e^\n*4\xef^\x18\x0c\x0e\xa1a \x7fjQ\xf0K[5\xc7\x13\x83\x90\x14 \xaaxo\x92\x0bU\xc0\xb2\xf4\x9bp\xa2\x0d\xb5\x0d\xbe4\x19\xea\xfbn\x92\x0b\xf5\xcd@\x8a\nU\x84'\xc1\x84\xfaz8=\xc4\x9f\x08B\x93\x9f\x8f\xd4\xda\xd9h\xc5\xa6\xff\xed\xb8\xc5\x116[\x0fT E\xe1\xe5\xd1R\xde\xb4\xfe\xd8\xee?<\x17:~\x84\x8f\x1d\x81\xf4\xfc\xa8\xa5\xe9\xb5\x12t\xf1&\xdd/\x15\x1d3\x01\x17Z\x13\x88\xe0\xd5\xc6\x95\x9cYbv\xe5\xb1\x02WQ/\xb5\xd7;\x1d\x0eEGg\x8e\xd3\x1aZ\xc8\xd9\x13jN\xad.\x18\x9eM\x15\xb6;n\xe79F\xff\xd4\xdd\\\xf2A\x11\xef9\xc3c.\xa7\xaf\xe0\xc3\xf9\xf7o\xdf\xbc^\xff\xf4\xe1\xfb\xf5\xe5\x9f.\xdeL\xe6\xa4\xfb\xfb\xc5\xfb7\x7fxw\xf9&\xf4\xbb\xb5\\\xb0'\xde]\xbc\xfb\xf0R\xae\x93ae\x84\xdaa\x0d\xee\xdf\xf4\xe0Z}\x95\x1f\x8d\xf7\x95\x7f4\x89(\x80\x1d\xeb\xba\xe2\x86\xe9\\o\xe3rn=\xa2\xde\xfe=\x17\x1f\xbd\x0b='{\xf1\x1c.\x84mRT\x1d\xf6A\x06\xaf\x9b\xf91\x82N\x8d\x99TR\x88\x0f5\xc1\x14A=\xa6Q[d\xb2\xa4<\xfe\xd141\x9874\x93\x1f\xd4\xf1\x80.t*\x06<\x9d$\x19\xfe\xc9\xf2AG\xdf \xf3\xe5\xe4\xed?y\xfb\xffy\xbc\xfdnT:A\x8be8\x1cz&\xa7wj\xfa'\xa6wZ\x06\xe7N`\xe6\x04&\xe4<\x91\xbe\xa9\x98q\"\xa2\xd30\x03\x96Q\x97\xc8\xf4K\x92\xb78\xd0\xe4\xea\xf3\xa6\xa7c)\xfb\xc1b\xf3V8=\x08\xc5\xac7\xfc\x19\xdb\x82\xf3>\xe3\x1cz\"\x96\x1cP\xad9\xf0Zt\x90\xc9\xaa\xf3\xf6 \xb1\xec|\xcfb\xd6\x1d,a\"\x9e8j\xe4{\x81\xb0\xdb\xe0\xa0q\x9d3 *q\xb9s\xeeDA<\xf9\xd1v\xae,\x8b,\x07O\xe6A9F\xd3G\x11e\xbde\xf7s\xe6\x18r\xc0\xa6\xd5\x8e/dq`n\xd9\xbee\x1d\xab{q\x9cn\xd9]\xd3\xb33\xfe?\xf2\x8c{\x06M\xab\x8e\xbb|G`\xd2Cop\xcc\x8f~\x0cc\x89[ZV\x05qWC\x90\x92\xaclQ\xb0\xba\xa7\xafV\xcc\xd4\n\xbdR_\xc3\x9d\x03KC\xabF\xcc\x13 \xa9\xe6\x08\xa5\xa2!\xd4P\xe8t\xd3t\xbb\xa6[]\x15\x1d[\xdd}}\xc5\xfa\xe2\xeb\xd5k\xb6y\xd5\x945\xf9\xd3lY\xdd\xec\x82c\\\xec\x9aC\x1dR\xc1\xf8\xa4T\x0d\x19\x8c\x9a\x02\xfa\xe6\x13\xab\xa5\x05S\xc8z\xcbZ\xf4V\x0c\n\xff\xd3\xa6\xdc\x15\x95\xaap\xd8_\xde\x8a]\xe4\xf2\x96\xa9\x1f\xe0\xbad\xd5V\xecU5\xafE9\xe8\xca\xdd\xbeb;1\xff\xc5w=t}\xb3\x83\x1d\xebo\x9b\xedt\xd9u\xd0\xb2_\x0ee+\xfd>7\xcdM\xb3o\x9b\xbe1\xc6t[\xf2\x0e^\x1dx\xf3\x8c\xb1\xad\xd8\x8dh\xb1\xfa\xbf\xa6}\xcf>\x17\xed\x96<\xdai\xea\xa75\x84\x8f\x8f\xe4=gN\xbe\xbf)\x03\xd1\xe6\xd3\xb9\x10|\xdcoud\x9c\x1d\xb2\xe4\x9b#\xb2Pf\x8a\x7f\xe2{f\x89\xa9\xa2ehT\x7f\x12\xf5\xa6\x08\x80m\xf5K\x8f;\xfd\xff|\x10\xe4\\\x88\xcd\xd0\x8b\xa2-vt\xbd\xcc\xf7\x83C]\xf6\x0f\xeb\xbep62\xeb{r\x1d\xb3\x1e\xcc\x7f|b\xda/4\xf5\xa1Kz\x83\x7f\xfam[|\x16Kc\xcdj~\xeeq\xde\xb8j\x9a\x8a\x15c\x9e\xcb\xb0C\x1a\x7f\xb7>\x8b\x1c\x11;\xe2(\x13\xc3\xf6\xf2\x17\xae\xf0\xf9_\xcd\xf1\x84]\xb3=T,6\xda\xff\xcf\x81\xb5\x0f\xaf\xf4\x18^4M\xf5\x9eu{\xbe\xa1\x90\xbf\xc0\xbei\x9c\xe4\xb0\xd3\x02\xff\xb5,p\xa7\x93\xfcs\x0d]\x1aV\x8f\xf8\xf3c\xfe\x87\xb2\xee\x10\xd50\xd8 \xfe \xc3{\"\xcc\x02\xfdo>\xe4zn\x9ao?\xb3^\xd7\x83\xf4\xfe\xe2\x95\xea%i\xce\x8e*Jj\xa6.y\xde\xca\xf5|d\x1f\xe8i\xeaf\x9c\xba\xea\x8bY\x9aP\xff\xad\xd8l\xda\x83\x0e\x82\x8d\x9bNh\x97\x0b\xcf#\xfatvD\xcc\x9f\xcb\x97\xfc\xa8\xfb\xab\x9e\xd0\xd1\xb8\xb0wrO\xf7O\xf3q\x0c\xd6\xe7\x01\xf5y\xda+K8\x83\x03]\x8c\xb2x[-\x0b\xbe0 \xaf\xc6\xd1\x9a\xb3\x97\xaa\xb7\x99\xab\xdf`\xfcPK\xd60\"N\xadj\xe4\x17\xfa\xe2\x8e\xe9\xb0\xb9F\xa8,4S\x14i\xc7T\xcd\xf0\xe3pL\xd54Cz\x17\x9a,\x9fw\x0d\x9e6\x95\x8c\x9b\x8a\xf8^\xb6q}\xd8\x89\xc9c\x7f\xf6\x84\x9d\x04\xd3\xe2s\xb6\x13S\xce\xcc=\xa5i\xc7\x80J\xf2\x86\xb20P<\x99\\\xd6\xd0\x19^;s\xe8\xcd\x0b#\xc7\xa5\xc5\xc7N/\xde\xfa\x86\x0f\x1a\xf5c`\xddO\xfe\x12\xa6\x90\xd9\x9f\xe1\x8f\xeah\xf8R\xee\x9a\xc9\xdf\xc2:Z\xc6\xbc.\x93\xa1\x99\xbek\x0d\xf98\xca\xfa\xd7\xbe\x81_x\xdb\xd3\x06\xda\xd3\xc1\x19\xa3=\x91\x94:\xe4\xf2\xb8\x9c<\xc0{\xc3\xef\xe0\xf4y\xef\x1e\xc1\xc5\x9fX\xcfZ\xed\x025N\xdc\xe6\x87!\x05]<^\x0c\xf0+\xea\xb07#\xf4b\xd8\xab\x11x3\xe2\xdd\x18\xdf\x9cz8\x80\xe2\xe5@\xbe]p\xee\xa8Y\xa3\x9c#\x89sdX\xd0\"\xd7\xae\xeb\x84\xed\x9e8a6\xc3\xab\x9eI3>`M\x1c\xf9g\xfeWK\xe3A\xcb6\xac\xbcc\xdb\xd9\x13h\xda\x18\x08\x98\xd79\xb3u\xbdfu\xd02\xf6\x9b\xd4\x81\xd7b\xe6\xf4l\x13\xc5\xd3<\xcc\x94^b\xb78\xc2|f4\xcd\x98Q\xf1E[#\x07\xe66]\x19#B\x8c5\x96\xb4\xc4\xde\x1d\xfa\xae/\xeamY\xdfd>\xd9\x92V\x86\xf3.\x9c\x96\xc5?\xf9\xb2\x80\xe0\x90\x04&\xa6y\xb2l\xc6_\xe1\xc9\xa1\xfeJ\xef~\xf5Swr\x99\x0d\xe5\xab\xa90\xd4zY\xb3\xfb=\xab\xbb\xf2\x8eq\xcb\xaao\x8b\xcd\xa73~\xb8h>w\xd0\x89\xe1\x80\xae\x10>\xd8\xcd-\xdb|\x8a\x1f4\x08+k\xc6BGFc\xee\xa6\xfa\xa1\x12\xa8\xba\xe4e\xde\xc9\xf7\xa6\xcb\x9ct\xd8 \x1f\x9eG\x07\xd6\x9e\xb5e\xe3qH\xa1\xcb\x0c\x8d\xef\xab\x9f\xdab\xd3;\xbb\xef\xacc\xb6=\x8co\xeeX\xdd\xdb\x99\x11\xe3\xdc\x12\x03\x06\xecN\xc1\xfd\xc7\xf2\x83\xc89\xe2\xb3\x80O\xb0rS\xf6b\xad\xab\x04\xa8\xaeoZ\x91\x9eg\xbfty\xcb\x9f\xef\xa0fl\xcb\xb6|\xb2n\x8ajs\xa8\x8a^\xe0\"\xdbf\xdf\x96\xe2\xff\xe5\xfan\xae\xa1\xeb\x8bO\x92\x84\xe0\x13\xabm\xef\x0b\x9fk\xa3\xc3ECP\x8a\x96\x0dfd\x0d\xc5u\xcf\xf8b\x91\xdd\xb8-:h6\x9bC\xdb2\x9fgFM\x10\xfb\xb4\xae\xfe\x166\xa6\xf6\xc5\x8dRp^\x0b_?0\xb1\xf2\x87?\xab\xc1\xd3Kj\x96\x99&P\xa3\x9e\\Qd\xca\xc5\xb2\x8e\xfe6U\xf5Z\xbe^\xff\xfc\x7f\xfb\x06\xaexG\xbaN~\xd4\x8b\xe2\x86\xbdg\xbf\x1cX\xd7\xaf\xe4\xef\x13!\xf2\xf0\xc7_\xe7\xe2\xf8\x10\xf0\xb3M\xd7\x03\xbb\xbe.7%\xab\xfb\xca\xdc5\x91\xf4\xach\x87\x90\x15\xe4\xcb-\x95\xfe\x19\xde\x1f\xf1?\xf5aw\xc5Z>\xf9\x140\xd5\xc80-\xa7\x04\xfafW7|\xd2\xae\x85\x90\xe9\xbe\xf2\xb9\xe8\xa0c\xfd\x19\x94}\xc7\xe7\xd0A\xe8\xcfC-'\xc2\x16\x9a\xfe\x96\xb5\x9f\xcb.\x94\xc0\x14\xd4\x803\xd4\xb1\x92\x90\xa0\x83\x87W_n6\x87\x9dX\xb6\xdbW\x93c\x01A c'\x89c\xe8\xe1\x93\x13s\xbe\x13\x13\xef`x\x02X{\xc8\xf8\x80\xf1\xbd\x95\x98\xa9\x01\xf3\x89\xed{(\xf8H\xb5\x87\xba\xe6\xea^,%\xd6\x9e\xc1\xa6\xa8\xb9n14z\x0fE\xfd R\x1c\xc9\xd3\xd55<\xc8s\xf5\x8bD\xbcN\x13\xf5h\x13u\xae\x05>\xd8\xddR^\x16\x93\x9b4WG\x93\x8c\xa5\xbc\xac*M\xbb\x95|@a\xd6uWp$\x85\xc3\x1f_\x1fZ'\xe5}\x81\x03\xe0%\xfc\xfc\xfe\xc7g-\xeb\x9aC\xbbaP\x17;\x85$>\xd4\xe5/\x07V=\x00\xefX_^\x97\xca\xee\xed\x15\x82\xc2eI\x02\xe8X[\x16U\xf9W\x86\x1c\xd0\xc5\xda\xdf4\x15\\\x1d\xae\xafY\xab\xa1\x17+99d\xdbaw\xe8\x06x3\xdf2*Vt\xbd+\xab\xa9\x19T\xd5\x03\xfcr(*>\x02[9>J\xb4\x18\x89'E\x07e\xed\xbe\xfc\x91W\xf9\xec\xa6in*\xb6\x12}\xbf:\\\xaf^\x1fZ1w?>\x95-\x16\xe2\xba\xdb\xe6Pm\xf9v\xc9;\xedH\xda\x14uS\x97\x9b\xa2\x12\x1a\xc0\xad\xe9 [\xdd\xac\xce\xf8P }\xf8h\xf5H,\xb5\xa6\xe7\x9b9\xdb\xf7l\xfb\x14\xf3\xca\x9c\xd7\xb0\x17\xcac\xc3\xce\xa0g\xc5\xae\x83Cw(xwe^\xfd\xbe\xe4\x86s\xcd\xd5\xe4-\x83\xab\xb2.\xda\x07\x19\xfa|\xd83\x97\x91SL\x9a\xfe\x96=\xb8Uq\x9d\xbb\xe9\xa1\xec\xf9\xca?t&\xdc\xa6\xe7\xe7\x88\xe6\x1a^\xd6\x0f+\xf8\xa1\xf9\xcc\xee\xb8\xf5\xc0\x17\xfa\xcf\xef\x7fT+\xdc\x91\xc7E\xf0\xe9\xe7\xce\xbf\xcd-\xdb1\xf8x\xdb\xf7\xfb\x8fg\xf2\xbf\xddG\x81\x0e\xa8\x1b\xf5\xeb\x99\x98=\xdc>i\xc4\xaa\x10=\xeeX\x0f\x87\xbd#O\xe2\x85\x90zX{\xc7Z\xd9\xe5]\xb1\xef\xe4T\x10-\xee\x9b\x01T$\xf6\xe7R\xaa\xaa\xa2\x83\xebFl3\xcf\x91o\xf1[8\xbf\x1e[\xc8?\xdf\xbem\xb8F\xd9\x0e\x9d\x10\xfbq\xd7\x1dv\\\x91!\x02^\xd6\xf0\xc3\xe5\xe5\x05|\xff\xe6\x12T\x00\xe1\xe7\xf7?\xca\x05\xf5 6\xf4\x02\xfe<\x9d\x8e\x97\x0f{\xf6\x97?\xff\xc5\x11\x07\xfa\xacS\xeb\xef.7\x1f1\x92\xfb\xb6\xd9\x1e6\x8c[\x07\xacm\x1b\xe7b\x11\xd1\x9a1\xdb\xbf\x13\nZl\xb1Z\xf5o\xf8Zm\x9aO\x87\xfdpT\xbb*\xf8\x19\xb4\xa9Q\xb5\x02\xbc+\xa2\xee\xdb\xe2N|\xfa\x9d1G\xb7r\x92\x16\xba\xa9\xfc\xff\xef\x9ar\xcb\xedMD\x94\xacX,\xbf\x96]7-;\xd3/ryE_^\x95\x15\xdf\xff\xf9^\xd5\xe9#2W\x11\xed\x1d\xdb\"\xf2\x9a\x9a\xab\xa1\xfa\x86\x89\x87\xc5\xdaX\xc1\x93\x9f;\xa6y\x01y\xaf\xf9\xf4\xe0k]\xce\x8f\xa2.n\xb0^^\xb5L\xeezJ\xe0\xea)\xe2Lmz\xf6\x1cz\xae3\xaf\x0f\xf5F\xce`\xde^\xb5\xe6\xc5^\xc7\xcf\xe1\xe6\xe9\x17\x1f\xd6F\x1c\xda\xddC\xaf\xd2\xd5W\x07~\x92\xe6\x1a\x98\x9d ;\xb2\xecu%\x07\xfe\xb1\xc4!u\x98\xf7W\xec\xa6\x14g\x00G\x98\xe0\xfau\xd5\xc5\xc3\x9e\xad\xe4|,\xf6e\xb7\xda4;LK}\x10+\xa2\x93\x07m\xbe\xe0\xea\xe9\xea\x86'*\xea\xc7v\xfb\xfeA-\xa1\xa7\xb0\xe3\x06\x8a#\xee\nY\xcc\xa23\xc2v\x1eL\\i;w{\xb6)\xaf\xcb\x0dtlW\xd4}\xb9\xe9\xec\xa9.\xd6H\xc2V\x1c\xc0\xe3\xc6v\xe9\x9f\xf82\xbeb\xda,36Zg_U\x9bSq\xd5\xdc!\x1b\xb4\xec\x92\x9a\x92\xde|\xabI\x0b>\xbe\xac\x1f>\x8e\xac#E\x0dE{U\xf6-_4\x81\x96h=XT\xcdd,\xe4I\xc5\xfe\x14\\[ \x85*[r\xe5\x9a\x1bf]\xdaz\x98L\x99\x0b=q\xab\xf2J4O\xe9\xd1\x0e\xba\xc3~\xdf\xb4b\x07\xda\x17\x9bO\xcf\x0e5\xff\x0f\xdfw\xe4w\xec\xb0U\xe2n\xb8\xcd5\x1cz\xa9 \xf4\xf2\xeb@fH\x94r-\xc2\x0d\xabY+\x0e\xd0\xf2p4d\x01\xbc\x9c\xe8#\xf9 l\xf9o\xee\x0bq\x08\xf9\xfa9\\\xf0\xf6\xf1u\xa7\x9aZ\x98h\xd5W\xff\xfa\xaf\xc86\xf0]\xd3\xc0u\xd3\xc0\x0bX\xadV\xff\xcb\xf9\x99w\xb6\xa8\x1f\xdc\x1f\x8a\xfaa\xc5\xab\xfb\xaemvO\xae\x9b\xe6\xa9\xfb\xc8j\xe5\xea\xf9\xf2\x1a\x9e\xf0W\x7f\x16\x0d\xbcl\x9e\xfc\x0b\x7f\xf7)\xfc'\xa2\xdb\xb0\xf7\xff\x8e\xf7\xfd\x9bH\xdf\x7f_\xdc\x15\xb3;\x0f/\x84\xad\xc1\xa5\xce\xe8i\xd9=\xf9\xaeiV\x9b\xaa\xe8:OGe\x13\xf8\xc3\xb2\xed\xc6\x0bn]\x93\x11\x18\x86\xe0\xdf\"Cp\xf1\xd0\xdf652\x08\xb2\xf6\xef\x9a\xe6\xc9j\xb5z\x8a}h9\x00O\xd0\xdf\xc4$\x10\xc3B\x1d\x15\xfe\xd2\xb9\x1c\x94\xd7o>\xbcz\x7f~q\xf9\xee\xfd\xd3\xa9R\x04%^N\x14\xbc\x02Y\x05>\x1c\xff32\x1c\xdf7\xeeH\x88\xa1x\xfe\x02\xfee\x7f\xb5\xfa\xaei\xfes\xb5Z\xfd\xdd}\xa8\xa8\x1f\xce\xb8\x19\xc3\x9f\xdc\xcb\xcd\xfb\xa7\xa2\xedn\x8b\x8a\x0f\x12\xdePl(\xa6\xb5!U\x95\xd7\x93\x8a~\xaewcU\xa2!bB\x8a\xa7\xfe\xc7\x0b\xa8\xcb\n\x9d`x\xfd\x93\x99t)\"\x14\x9bO\x83\x0e\xd2\x06%\\=\x8c\xdb\xbb\xd6\x92\x9f\xcb\xaa\xe2?(\xcc=\xdf\x12mq\x8f\x91\xed\xfa\x19?\x1b v\x82\x157m\x1es\x1bw\xd0\xd8\\\x9bk4\xa8\xfcb\xb6\xc0A5\xd6\xd5\x83\xb6\xe7\x9d\xc3\xd6`6\xa9S}\xaf\xcfx\x8f\x9f=\xb6\xc5\xa9\x03\x85\xaeZ\x9e \x98\x9a=\x8f\xae\x9bfuU\xb4\xa2\xd1\xf7\xcf\x1eV\x7f}${,\xedb\xd7\xc4\x17U>\xe2\xcfq\xf5l\xfd\xf4\xfb\x0f\xef\xde\xda\x7fy\xf1\xe2\xc5\x0bw\xec\xf9s\xe3\xd9R\xda\x13\x0d_.j3\x95\xf6\xf5\xa1\x1b\xb0\n7\x87\xaahm9\xee\xeb\xbd\xc8\xca\x1b\xb7\xc13`\xbb+\xb6\xdd\x8e\x1b\xe2\x99\xda[''Rc{\x92\xde\xbd\x8f\xff\xce\xbb\xfdQ\xb9P,B1=\x88+\xbd\xfc\x9e#\x06b\xb1\xf9\xc4\xd7\xdex\xa0\xb8.+\xe6\xea7\xbdF/X\xdb55:\x9d\xd5\xc9\xff\xbal\xbb~-F\xfe\x05|\xedJ\x1a\x1e\x14\xd4\xa3\xea\xb9o\xe2\x1a\x15\x00\xad\xf5\x91\xe8\xff\xa3\xe7\xf0\x08\x9b\xd9v\xb7V\xb2\xf5\x8f\xce09\xa2\xddo\x8b\x1d\x97\xf5\xbfe\x13\x7f\x87>\xc8\xdb=y.\xd6\xf8\xf3ke\xd8\xda\xdfX~\xa1\xb2\x83\xcf\xac\xaa\xbe\xfaT7\x9f\xa5\x9f\xf7V\xb8\xe2\x95c\xd6\x9d\xa8\xf6t:\x93\xc6\xd6d\x8eIE`T\xc9'\x8e@\x8a\x8bic\x0b\xfc(&\xb1\x9eC\xb7M\xb5\xb5\\\xc3b \x94\xf50\xf7@y\x12\xd4\xd4\xb3e \xf1\xc3\x8c\x83'|\xfd\xea\xee:\xc7V\xedE\xf9\xcb\x9f\xff\xf2\x14\x99\x9cK\xbe\xb7]\x01\xfe\xc9E\xb7\xb9\xa8\xafW\xdf|\xfdM\xf7\x08\xf9\x8c\xfa\xff,\xabz`\xeakY\x7fhk \x1f\xd0\x7f\xecN\xf1\xe8S<\xfa\x98\xf1h\x1b\xa7\x89\xf8\xba)9\xb5\xc6kJ\xda\xfb\x8bW\xba\x91N0\x1aw\xb3g\xf7\xb1\x93\xe6s\x8f\xba\xce\xbd\x9f?| \xcf\xe84\xf7\xbb\xcc\xf39\xcc\xb3\xb9\xcb\xbd\xce\xf2\x05\xae\xf2\\\x8e\xf2\xb0\x9b|\x96\x93<\xaf\x8b\xdc\xeb \xcf\xeb\x1e\xf78\xc7\x17\xba\xc6\x9d\xe1v\xad\xe6\xdcn\xf1\x85N\xf1\xcc.\xf1\x05\x0e\xf1\xdc\xee\xf0l\xce\xf0\xbc\xae\xf0l\x8e\xf0\xb8\x1b<\x9b\x13\xdc\xe7\x02_\xe2\x00G\x1d\xde\x88\xd5\xe9\xea\x9be\xcen\xc4\xb9=\xd3\xb5\x8d8\xb6\xa3v\x92c\xf8\x85w\xd0\x99\x0e\xed\xd1\x81\x8d\x8d\xefo\xe2ugve\xbb\x8e\xec\x0cn\xec\xacN\xec\xe9f\xb8\xd0\x81\x8d8\xad\x97\xb8\xac\x83>[\x8f\xbb:\xea\xacv\xfdctG\xb5\xfb\xee\xdf\xb1\xbe\xcerQS:\x1bsO\xfb\xfb\x16uM'8\xa6m?\xc4B\xa7t\xd0%\xedwH\x87\xdc\xd1\xe8(P]\xd11G\xf4\xd4\x0d\xbd\xc0 MpA\xa7;\xa0\x11\xf7o\xcc\xf9\x9c\xc9\xf5\x8c\xd4l\xcd\x94\xacN\xe7\xcc.\xe7\xac\x0e\xe7\x9c\xeef\xaf\xb3y\xea\xc1\x9b:\x9a\xf3\xb8\x99\xb39\x99\xf3\xba\x98i\x0e\xe6\xa8{\x99\xe8\\\xa6\xb8\x96\x1d\xc7\xb2[\x1b\xd5\xc9\x18v*\x13]\xca\x04\x87\xb2\xd5\xe4\x9c\xce\xe4\xcc\xae\xe4|\x8e\xe4|n\xe4\xf9_7\xeaB\x8e9\x90\xa5\xfa\x0e8\xef\xe6x\xee\x86\x0be\xdf_\xbcR\xb2\x1c\x7f\xddMsg\xd0\x81\xee\x9b\xae\xa4'3\xef\x15\xb75B.M\xc9c\xde\xca\xea\x9a0O:\xce\xd6\x9a7\xc7\xf6\x1f\x94\xd4\x9f\x96\xd1_\xcfH\xe5?\xaf\xfb/\x99\xca\xaf&\xd0\xd8'\xddf\xfd\xad\x15OR\x0d\xc5Fx\xbcM\x96\x11\xf1\xd7\xbe\x1c2\x98\xf4\xec\nO\xd6D\x82\xd0]Y\xaf\xb7\xe64\x87\xd3\x94\xfa\x95L)\xa7k?\x95u\xb9;\xec\xf4\xdcQ\xc0\x0e=-\xf8\x94a5\xb7\xd8\xe4\x95\x0b \x01\x15Z\xd6\xae\xb8\xd7\x1f\x9a\x06\xb5\xf0\xfb\x0f~*\xeeE;\xa4\x18\xd1\x8c\x97\xbc\xa7|\xd3b\xad\x98\xbb\xba\x89|`\xc7\x89\x0b\xe7u\xd9\x97\x16n^\xbaY\xc0\xbc<\x11vM\xdd\xdfb@ok\x8a\xbbt3\x9d\x02G\x88\x87\xb8\x95\x0b7\xcd\x1dk\xeb\x82\xab|\xdd\x88\xce\xb3|\xf4\xbd\x04\xe4\x95\xb3P\xd9\x0b\xc7\xb6\xab\xc7Oq\x9cS\x1c\xe7\x14\xc7\xd1\xe5\x14\xc7\xd1\xaf\x9f\xe28\xa78\xce)\x8es\x8a\xe3\x9c\xe28\xc6\xbfOq\x9cS\x1c\xe7\x14\xc79\xc5qNq\x9cS\x1c\x07Nq\x1c\xeb\xb1S\x1c\xe7\x14\xc7\xd1e\xfe\xd7\xcd\x14\xc7\x91\xb7\xdc\x1d\x1c*\xa2\x89\x0d\xee\xde\xc7\xaa\xef\x0d]\x7f\xb8|y\xf9\xf3\x87\xf5\xcfo?\\\xbcyu\xfe\xdd\xf9\x9b\xd7\xc1\xe7^\xbf\xb9x\xf7\xe1\xfcr}\xf1\xe6\xfd\xf9\xbb\xf0\xa3\x7fxwy\xfe\xf6{\xca\x93\x17/?|\x88\xd4\xfb\xfe\xcd\xef\xdf\xbc\xba\x8c<\xf4\xdd\xcb\xf3\x1f\x8dG\x86K^)\x9d\xf5\xfb\xba\xb5\x03\xf3\x83\x18i1\x96\xc2\xf25\xb8\xff\xd4W\x90\xd7\x12\x1a~Yk\xbe\x04\x07=\xd8\xc8 q\xba\xdc E%\xfb\xae\xa8T\xe5\xabp]\xf6\x87s\xab\xb3\x7f7<\xfb\x83\x1b\\V\x03\xdb\x83P\x83\xb2)\xc2#lTl\xbb\xc6=M\xb1&\x86\xdb\x12\xebgZC\xa4c>\xb5\x1dr\xda\xb9\x0d\x90\x7f\x0f\xd4l}d\xa9\xd7n\x0b\xd3\x93'Q&\x91\xea\xf5\x94v\x1b\xa0\x7fY\xd2\x84+\xc6jh\xd9\x7f\xb0M\x1fm\x89\\7n;\xe4\xdf\x97\xb4\xe2\xba(\xab\xb1\xfa\xeb\xb2.\xaau_T\xd5\xc3Z:\xb1fy\xe9\x1f?\xb0\xee1\xc9\xf3P\\u\xdc\x9e =\xfb\xb8nhB\xebf\xcd-\x9b\xf5\x1d\xeb\x1b\xc2\x0b\x96b\xb9\xe4}\x7f/\xban\x0c\xab\xa0\x1b+\xda-\x88\xa1Q\xe1'$\xc4\xa2\xc7\xb1;\\\xed\xca~\xdd\x97;\xea5\xb8\xd3\xcb|u\xc0\x8a\xd5\xdb%b\xe4M\xe4\xa70\xe7\xaf4\xcc\xa9\xae\x88\xef\xfa\xa2]4[\x94\x9cE\x93\xc5\x1ad\xbd\xa5N.(h\x99\x1a\x99\x1d\xb7\x07[\xa5_<\x0b!\x10j\xfc`\xd8DN\x13M[\x88b\x07\xc5\xb6R\xefc\x98\xfd\x13\xb1}\xa2vO\xd0\xe6!\xdb;\xf8\x84\xcfa\xe7|)\x1b'\xf6Q\x8ea\xdfLl\x8a/n\xd7D\xeb?\x8e=3\xb1e\xbe\xa4\x1d\x83\xdb0_\xca~\x19m\x17D\xd5\xa8K\x88\xc4\xfcH\xc6\x9az6L\x92\xf1\x83fG\x00%\xf8\xe2\x80\x8d\x91\xb4\xb8\x80 lK\xc56z\xf8\xe7\xbd\xcfb\xb61\xe0HZb\x118\xc22\xdfZaY@Y\x13\xed`\x92l\x17\xccC\x9d,.J\x1a\xaan,1\x0b\xd5\xac&\xfd\xd6\x08\x9d\x0eu\\\xb3\xd7\xbb\xdc\x83\x139\xc0/\xe0Y\xf43m\xe9\xff\xc6\x17\xa8\xe6S\x06\x99\xd5\xc1Q.I\xfd\xdd\x94%|\x91Z\xb0\xe7\x97T\x11\xe8\xb4\xd7\xed9\xf1\x96\x9cxK\x8e\xcf[2\xdd\x0b\x12\xf6\x9c.i\xd3\x99yW\xa4:\x87\x07\xaf\x8c\xb4\x9eqSy\xe5\xcd\x91-\x93\x970\xf4\x8dz~\xd6j\xd0U!\xf7\x19yg\x90\xd5\xd6\x1fY}\xd3\xdf\xeap\"\x9a]=dV\x87\xfal?D\xe8\xb4zaV\xaf\xd1\xc4~8\x19\xc3\xf3\xf7\xbf\xac\xbb\xdfrc\x18\xa6\x9d_\x04\x0f\x80\x08D\x00\xc8\xab\xc5M\x8f\xcb\x08\x17\x00\x0fd\x00&\xb0\x01\x90>\xea\xf0z4\x1f!\xacF\xf1\xf8\xac\xb5\xf8\xcb\xa1i\x0f;\xe2`\xceMBT_\x7f\xcf\xda\x0d\xab{\xbe\x9br\x85%v\xb3\xae/>1\xe3\xe2\x89\xbb\xa6gjz\xc8\xed\xcd\xdd\x9d\xaf\x9cT\xd6MSw\xe5\x96\xf1 )\x9cl\xe6\xcc\xe9o[\xd6\xf1\xef\xf9\x85\xfa\xc8gH\xdb\xab\x1c\x8f?\xb1N\xf4H\xc2?\xcc\xf9\xce\xad\x91\x15\xbc\x96^:|\x16\xfd_\xab\xff\xdb\xec\xc8\x1d\xeb\x9b\xf5\x17\xee\x8d4\x05\x9ak\xf8\x03S\xdfF\xac q\xbd\xb9\xfa\xa7\x08\xbfO\xbb\x17\xfdb\xbc3l;\x0c\x80\xee\xf2\xd7\xcf\xfe\x0d9\xd5\x1e\xe1\x82a\xd7\x9eP\x8dO\xb6(t\xaf\x9f\xcfY}\x19]Q\x0eh\x07B{\xa4\x7f\x87\xec=w\x98,>\xede\x04\xf3@\xe4.\x93\x9c\xa0\x1e\xc8 \xec\x81\xf0\x8d&\x8b\x00>\x90\x11\xe4\x03Q\xa0\x0f\xcc\x05\xfb\xc0\x12\xc0\x0f6b\x0f{1_\xbc\xb7\x9b,\x00\xfe \xb2\xa4!\xe5\xbd\xe1d\x19\x00\x08\x11w\xd8{o9\xc9\x0d\x04\x82\xe5` \xc8\x0f\x08\x82e\xa0 X\x06\x0c\xc2\x97(\xda\xc8lp!\xc8\x0e\x19\x82\x9c\xb0! A\x87 '|\x08\x82\xb7\xa1,\x83\x11ak\x1c\xbd\x11E\xaa\x9a(\xb8\x08\x16\x03\x8c\x10\x81\xd8\xbd(\xb3aG\xe0\xbb\x1b%\xb2\xc5\x07\xeeG\xa1\xec\xff3\xa1H\x98\xda\xf3\xde\x92\x12k\xc72X\xd2D\x98\x00)\xa1w\xa5d\x81'An\x88\x12 0%X\x0eU\x9aH\xeb\x91[S\x96\x81\x97 \x86\xe9\x81\xd0\xdd)\x04 \x13\xf8.mH\x004\xf9e8 \xed\x8b\xc0M\x900\x181\x90\x13D\xfb\x1d\x05;A\x1a\xe0 \xd0\x1b\x00\x16\x02\x9f \x06~\x82\xc8\xcd*\xb1\xbbU\x02\xa3D\x05C\x01\x01\x10\x05\xe8\x1d+\x8b\x80Q@\x03G\xc1,\x80\x14x\x07&\n\x94\x82|`)\xf0\xb7\xc2\x99iY\x81S\xb0\x10<5\x11\x85\xdd\xc2\x92\x19N\x05\x99!U\x10\xbe\x8b\x05\xbb\x8d\x05\xbb\x8f%\x17\xc4\nr\xc2\xac ;\xd4\n\x80\n\xb7\x02\n\xe4\n\xe8\xb0+ B\xaf\x00\xbf\x9f\x05\xbf\xb1\x83\x0e\xd4\x89\xdd\xd1B\x86b\x01\x0d\x8e\x05X7r\xc2\xb2`)4k\"\x0b\xb9\xbb%'X\x0b\xb2\x02\xb6`\xf1|\x88\x02\xb7\x80\x00\xde\x02\xeb\x1e\x17\x17\xc4\x05\xa1\xd3\xcc\x14\xcc\x05\xb1\xbc\xdb\xe8\xb3^P\x17\xfe\xb8\x0f\xd8\x85?\xed\x80\xbb\xf0\xc7\x10\x80\x17\xfe\xe0\x04\xe4\x05)\x89\xcf\xe3\x0b\xfe\x8c\xff<\x89\xd0\xba|\xa9\x84h\x7f}\xc7O\x8c\xd6\x05\x01]\xe1M:r\xa2tr{\x8e\x938=4\xc3\x05\x83\xe1\xcd8^\"\xb5.~P\x18\xde\xa2\xe3$V\xebb\x83\xc3 \x02\x10\x83y\x11!\x04,\x06a_\x11\n\x1a\x8b\xbc\xe3\x82\xc7\"/\xf8Ad\xc1\x17\x8f\x00&\x03\x1f\xa0,\xd8\x10\x1fT\x08\x8c\x9c\x1d\x17/4[\xa4\x07h\x06\xa7\xb4\x9b\x7f\xa2\xb4\x9b\x00\\\x0d\xe6N\x1c/tm\xa6\xc4\xec0\xb6`B\xe24\xaeOJ\x1c\xd0\x8dJJHT/\xa5\xe7$\xea\xbe\xfcW\xcb\x83G3\x0ef+\x88\xde\x9bw\x10\xd1\x11\xf1\x05\x0f\xf9\xb3\x0fb\xf9\x07\xb93\x102\xe7 D\xb2\x10\x16\xe7!\xe4\xcdD\xa0\xe4\",\xc8F\xc8\x9b\x8f@\xcaH\xc8\x9b\x93@\xc8J\xc8\x9e\x97\x10\xc9L\x98\x97\x9b\x80\n\n\xe6+d\xc9X \xe6,\xa0o&\xe51,\xced\xc8\x9d\xcb\xe0\xcff\xc8\x9c\xcfp\x8c\x8c\x86\xcc9\x0d\xd4\xac\x86\xccy\x0d\xe1\xcc\x86\xec\xb9\x0d\xfe\xec\x86\x84\xfc\x86\xf9\x19\x0e\xa80\x1f\xad\xaa,\x0b\xb2\x1c\xbcy\x0eQ\x93\"\x98\xeb@\xb38\xf2\xe5;\x843\x1e\xe2\xad\xc9\x9a\xf5\x10\xce{\xc8\x96\xf9\xb04\xf7\xc1\x11',\x1a\xd4x\xc8\x9b\xff\xe0\xcb\x80X\x9e\x03A\x08\xfc\x07\xf3 \x88\x99\x10\xdepjb6\x84_\x0e\x12cZ\x9c\x13\x9128\x94\xbc\x88\xf8(\x90r#\x92\xb3#\xf0\x08\\\x86\x0c B\x8eD,K\"\x9e'\x11\x1c\xb5\x94\\ Z\xb6\x04\x9e/\xb18c\x82\x9c317k\xc2?L\xa4\xcc\x89\xac\xb9\x13\x81\xb6 3qQ\x06\x85#\x0d\xc9\xa8\xc8\x9aS\xe1\xcb\xaaX\x98W\xe16\xd9\xcd\xb3\xc8\x9fi\x11\xc9\xb5\xc0\xb3-\xf0|\x8b\x9c\x19\x17\x99s.\x8e\x91u\x91\x92wA\xcc\xbcH\xca\xbd\xa0g_x\xf2/|\x11wz\xcc=\x9e\x83\x91\x94\x85A\xce\xc3@;\x94;\x17#o6\x86'\x1f#wFF\xee\x9c\x8c\xe5s\x84\x94\x97A\xcb\xcc\xb0s3\xf0\xec\x8c\xe0\x19\x0c\xcb\xd0H\xcb\xd1\x88\x07\xf2 /\x84\xf24\xc8\x99\x1a \xb9\x1a\xc4l\x8d\x19\xf9\x1a\xb1\x8c\x8d\xbc9\x1b_>k#\xfe\xb9\x8f\x99\xb7\xe1\xcd\x94\x88N\xaa\xe3\xe5n$\xb5\xe9\xb8\xf9\x1b\xde\x0c\x8e\x7fL\x0eG,\x8b\xe3\xcb\xe7q`\x99\x1c\xf1\\\x8e\xd9\xb16OFG,\x18\xef\xcb\xea\x88\xbc\x87gvD^\ngw\xd0\xe3\xff\xf92<\x029\x1e\xa4\x08*\x16[\x8fez,\x10\x1c\xc8\xf7\xf0g|\x9c\xa8\xc7\x92s@2g\x81\xe4\xa2\x1e\x8b\xe6\x82,\x98Z\xc1\x8c\x90\xd9r\x8f\x90\x17rb=;\xb1\x9e\x1d\x87\xf5\xecoh\x92Q\x1a=\x89~))\xcd\xc8\xd8\xcf\x92\x13\x8d\xc4f7M2\"\xcd\xdf\xff\xe6\xf7\x05\x04\xf2\xcb\x90\xefA\xf9\xf8\xe2\xb5\xa4\x0f\xff\x87\xa6g\xc9_\xfc\xae\xe9\x1d\xaey\xd2\x07\xf7&\x8b\xa5/q\xde\x06\x1a?\xb2L:\xb1\x1f\x0do\xe5\xaf\xd9\xbee\x9b\xa2g[\xbee\xb0k\xd6\xeat\x9a\x8fRX\xf7\x11\xca\xba\xebY\xb1U\x89W\xc3\xde\xdc\xb1\xde\x0d\x13r\x15X\xb2n\xaa(D\xf0b+\x9d\xc5\xe55|\xacX\xfdD\xc9\x7f\n/^\xc0\xd7\x1f\x95\x03\xba\xe8U'\x84\xd3\xea3\x13\x81\xed\xaf\xa7\x07\x8c\xf3Z\xe4\x0eM\xfe*C\xe9\x9b\xa2c\xdd\x99J.\x10m\x15~+}\x0e\xee\x1b\xf8\xc3\xbb\xcb7\xebw\x17\x97\xe7\xef\xde\x9a\xc7\xe6\x15e\x84}\xd0\x17\x8f\xcc\xe0s\x7fz\xf3!\xf8\xfb\xcbo?\\\xbe<\x7f\x1b|\xe6\xed\xbb\xc8\xcf\xeb?\x9e_\xfe\xb0\xfe\xc3\x9b\xcbw\x93Y\xa1\xdc\x1f\xf1\x86\xab\xef\x84M\xc0\xe3f\xe3\xf8J\xcc\xb4\x07\xe0\xaa\xf2\x9d\\\x86\xa8\x17Kp\xcc\xa9y\xa1U\x7fy\xc7\xf0\x04)tS@\x9f\xf4\x7f\x1eo\x07\x8d\x1d\xa9n\xbej\xf6f\xd3\x9f\xfe\xc1\x10\xfa\xa0\xf8\xe7RD\xaa)\xf0\x1c\xfb#\x98l\xc5r\xa7O\x96\xff\xf6\xdd\xf3\xc9\xbf\xadQ\x98!o\x9ccS\xc9\xe3/v\x1d\xe2\xa4w\xa79\xed\xbc\xb5I\x05\x9e\xb8\x84\xad\x19\xfaG!\x81m\x8d)96\xe4P\x97\"\xd1s\xe0<\x14\xff\xd3\xed+\x93W\xd5\xef\xb6\xe52\x0di\xb2'u\xdc\x91\xf1R\xbe)H\x13\xbb~\xea\xa1:\x7f}\xa6}\x8a\xac=\x1bn\xfat\xc6\xc9e\xe83-\x14\x8a\x0d$ZAc\xe7\xe3\x8f\xa6'\xd6\x0b\x82\xc2\xa9\xf9\xf3+O\xaaG\xac\xa5\x80(|\x8f\x89\xe9\xc8eV\x93#\xae\xac}vSv\xcb\xc9g;e\xb6\x9e\x82\x1f\xcf\x17\x9a\xa2\xeea\xf1m\x99\xb6%G\xb7c\xf2V\x9c\xb4\x0d\xa3\xf6\xd4\x97\xf5(\xfa-\xab\xa8m\x15\xb2\xaeR>\"\xf6\xbc\xcf\xc2\xa2~P\xecY\x8f\x95\x95\xf0qeI\xfa\xc4\xe3Kq[+\xb3\xb5\x95do}!\x8b\xeb(6\xd7\xf1\xad\xae\xfcv\xd7\x17\xb4\xbcB\xb6W\x8a\xf3\x7f\xb9\xfd\x15\x0e\x9c\xcf\xb5\xc1rYaN\xfb$)\xb3\xf6`\xf2w\xe4\xde,\xd7aw\xf2\x8b\x9f\xfc\xe2\xc7\xf4\x8b\xbb\xd6:\xf5$@ \xea\x16N\xd3\x0b\x836\x9fp\x06\x98\xf2\xdb\xa3\x9f\x02\x9dW\xfee\xbf\x94\xcf~\xc2\x87\xeec\xafG\xb8\xdeg\xb6\xfewh\xeb\xdb\x19L\xf5.\xa0\xc6`\xa9\xf71\xd4\xcfl5:\xe6s\x19\xe9'c\x9e\xc4?o\xcc\xbb\x892\x14\x7f\x12s\x99?R\xd67\xaa M\x8dm\x00]h^\xbf7\x12<\x08\xf3z\x12\x91A\x86\xd8\x89\xc4 \xcf\xd8\x11\x18\xe4\x01<\xf2\xe2<\x989\xe2\x82\x8c\xd1\x1f\x86H\x06ap\xd0Syp\x16Z\nxr\x06G^\x9c\x9e@\xfc\xabm\xd9Y\xdb\x8eP \xa7\xec\xa5\xe7k87+\x98\x9c\xac\xb3\x9d\xa9\xd1\xa1\x9f\x1e\xc4(\x87\xaf\xd0\x81+v\xc8\n\x1c\xac\x08\x87)\xe2\x01\xca9\x1d\x1f\xc3\xe9\x84\x9f\x7fO.\x0bb\xee+r\x92\xcdv\x86%\x9e^\x8f~n\xcd|b=\xe6Y5\xe7)\xf5\x8b\x9cO\xf1\x93\xa9g\xf9e<\x8d\xe2\xc6\xd1\x9c\x13h\x8e\xb3\xa7g\x8f~g\xe8&gH\xec\x8b\xe3\xc3K\xd7\xa7sB\x9a\xc6\xa3_\"Z\x85\xa4Kp\x0d2Wo\x18\x1fGIr\xb5\xc5\x91tD\x16\xcd\x90_\x1f,\xd7\x02G\\\xfb\xf8\\/\xeb\x9b\xc4\xc3\xa8\xe7\xbaGTuX\x13.z\xcd\xa3\xf5\xb4\xd96\xdf\x81E\xc9H;\xa8\xb8\xfa\x8b\xdc\xf5\xa9\xcd\xf2\xdf\xc7$\x0cY\x1f\xf9\xf4\x07\xa0:\xc4\xedI6=\xe2\x8a\x9e\xa9K\\A9\xf4\x89+u\x8eN\xc1\xa4d\xd4+\x80X\x13\xe1\xb3\xf5\x12\x0bB-\xe8]Y\xf7\xc3\x8aNT`\xfc\xdd\xf5$\xa1\x1f]\xc9\xca{\xd9+\xd6\x8fMS\n<$\x7f_=S\xd6\xd7\x95p$\xaf\xf9\xa4_K\xca\x1d\x9a\xd4\x9d\xba\xb5\xb3\xa8\xebCQ)\xb6\x1e(\xebQ&p\x99NE\xbb\xe2>\xad\x82\x98\xbc\x88we\x94\xa7\x9cW\xa8\xbc\x9b\xa6\xa8\xd6WM\xbde\xb1-AI\xe3/\xf0AU\xeeG\x90\xefB\xd17;\x8d+\xba\xaa\x9a\xcd\xa7\x8eo4\xeb\x07V\x84}\x19^/\xb4\xaaN2\x95\xb1\xad\x12\xca\xab\x05.\xd4\x9d\x9cj\xc7\x91\xc8X\xe3\xa2R\xed\xec\xe5_\x1fv\xcd\xf6P1\xdf|\x14\xfe\xe0\x97\xe2\xbb^\xb4\xcd]\xd9q\xcd\x97\x9c\xf8!'\xc6z?H \x0e\x80\xdf\x17\xe9H\xd4nm\xc5\xf5$\xfa&\xd0\xc4rN\x1a\x0f\n\xd7b\xc8\x82\x0f\xf69\xe8>7\x05<\x9bJ\xc0\xfd\xe9\xeeh\x9f\xebI\x99<\xcc\xc3t^<\xbc\xe3\xc2\xf0\x0c\xeb\xf8\x00m8\x9dNQ\xc2\x10\xc3K\xa1\xc4lw\x00g^E\x1e\xbc\xff7|\xf3\xaf\xb2\x03\xc7\xa5d\x0e>)\xf0\x86)r\x089\x91\xe2\n\x1d\xe2J\x9dRC\x9ar\x07\xbf\x82O\xa9\x8c\"\x9b\x08j\xa0)}\xf0)~\x8ad\xc2\x06\x00\xa1M XG<$I\xdf\x10\x8epq\xaf\\\x18\xb6\xfd\xf2\xca\x98f\x84\x85\xd7\x1d\xae\xba}\xb1 \x1b\x1bVP\x1a\xf9}\x12\x07\x0b[m\x83n2\x9ak\x1a\xb2e\xbd-\xef\xca\xad\xd88\xf4*W3_\xd2\xc6H\x82PS\x08\x7fD\n\xbap\x03'\x93AZ\xac\xa5BJ\xca\xd2Q:\xd7`\xe8\xc5,\xe5\xe4~ \xf0\xcfXj\xf6\x00\xc2\x04\x18\xfeh\x9e\xc9;w\xe2vU\xd1\xdd\x96\xf5\xcd\\\xd3\xbb+oj\xb6]\xabE\xfd\xb9\xac\xb7\xcdg\xe2\xbek\xae\xe4]Y\xaf\x95(\xae\x18\x92\xe4\x18\xfb\xf7\xb6\xf9\\\xf7\xe5\x8e\xad\xff\xa3(\xab\xf5Vq\x86\x04\xe5\x88\x01X_\x0b\x9e\xdd\xa6^o\x9b\xc3U\xc5D[\xd2\xabwd\xc9\xd6\xa4\n\xc2\xac\xd7\x815\xc6\xd9u\x07\xa6\xcd+\x99\x0d\xa2\xbf\xa8k\xd2:\xdfz\xf1\nt,X\xdaB\n\xce\x19\xa0l\x03\xd3] 2\x7fH2'\xe9;\xb1\xb9\x14\x90I\x99S\x81\xd7\xbdM\x8a\xce\xaft\xa1\xd9\xe7\xda\xb0\x1f\xe7\xdaec\xf3\xf7CyS\x97\xf5\xcdy}\xdd$O\xe2\xbb\xa2\x12\x9f\xa5\xaco\xd6e}\xed\xe4\x12\x90\xa6s\xb1\xdd\xb6\xac\xebH_A\xc2\xdeo\x91PM\xf4\xb3y\x0d\x9f\x1fd\xd4\xbc\xd0\x88~\xe1\xa3+\xfa\xa6\x15\x19S\x82=\x0b\n\xd8\x14\xf5\x96\xff\x99\xc1\xbb\xf7\xe2\x87C\xfd\x1f\x82\xdc\xc3\x10Y\xd6[v\xbfn\xae\xaf;\xb6\xbcu\xe1\xe0\xe69\xafJS\x10tP\xd6\x9bV\xb0\x10\xb0-\xb0bs\x0b|^\x8f\x1e\xc7\xa17\x85\xb2*\x1d(d\xcd\x7f\xe2\nE\x04\x86v\xc5\x83$\x88\x96:A\x84\x91\xd8\xa6\xd9\xed\xca^2\x8b\xf7*\xab\xc1\x81Zn\x9a\xfa?\x14\xdb\xaat\x90!\xcc\xe5\x1f?\x08\xa9\xdf\n\xfd\xf5G\xa1j>\x0eVG\xcf\xda\xdd`x\x88\x01\xc5I\x96?\xfeTv\x9d\x16\xf2m\xd9\xbfl\xdb\xe2\xe1\xa3\xe9\xe2\x93\x9fg}\xa8\xfb25q\xcfG\xea\x11\xfa\"\x97\xe5\x8eu}\xb1\xdb\x83\xa8Q}\x1b\xfb\x13\x94\x9dj\x15l\x0f\x8c\x1f\xb4\xaa\xf2\x8e\xd5\xac\x9b\x12\xc7h\xcddv\xa7ovW]\xdf\xd4\xf8\xb1\xe2\xaai*V\xd4\xb8\xc2B~\x0b\xf7\xe5\x8f\xb7L$\x89\xc8o\xad\xb9\x8eE\x17n\x8bN\xf2\xec\x8c\xed\x81'\x9f\xca\x8aw\xaa9\xf4\xd0L\xb3\x13\xc7W;\xd6?]\xc1y\xaf\x11'\x93\x07\x9bz3\x9d\xb2r\xca c\x9a\xfdr(\xef\x1aI\x90\xce\xdb%\xdc\xe6\xf5\x83\xccfq'\xe1uysh\xd9\x16vew\xc5n\xcb\xe2\xcef^\xdf\x89\xc9\xa3\xb7P\x914ID3\xcf_\xb2/A\xd5\x03\x9f\xd8\xbe\x1f\xc9\xd5\x0fu\xcd6\xac\xeb\xc4\xe5\x03|\x16C\xcb\x8am\xe7$\x18\xbcmzu\xb9\xc5\xc7\x0f\x87\xdd\x13l\xfe?\xfd\x08E\xf5\xb9x\xe8\xf8p\x15\xd5tZYk\xe6\x95l\x8c\xb1d\x02\x01\x0d\xfdE\x8c\xcd\xc2\x8cN\xeb\x9f\x1fw\xa0\xb6\x03~>\x96\xd9z\xbb\xa6.\xfbf2\x8a\xfd-+-\xceI\xbd\x10\x80\xef\xcdwe\xff`\x1c1\xa4\x9a\x9e\xee5z3\xb4*\x14 \xb3\"\x13V\xa6]\x8a`\xb8\xdea~cH\xb3\xe1\xfe\xc8\x1eH\xd9k\x8d\xd7\x94\xb4\xf7\x17\xaft\xaf\x92w\xdft\x1b\x12\xdbr\xf3\xe6$\xa1{s`m\xf8\xf7\xe7\xc0K\xa1%u\x84]:\xb4O\xcfne,\x15)\xf3~\x9dq\xc7\xa6\xed\xd9\x99vm\xca\xbe\x1d\xda\xb9I\xdf\x07\xdf\xbd\xe3\xdf(\xe7\x0e\x8e\xef\xe1\xfe]<\xb4\x8f\x87w\xf2x\xbfr\xee\xe6 \xfby\xce\x1d\x9d\xb2\xa7\x93vu\xd2\x04\x9a\xb3\xc0\x97\xee\xee9\xf6\xf7\xe8\x0e\x1f\xee\xc6\x82]\xde\xfe\x0c\xc3\x8e\xef\xee\xf3\x94\x9d>\xb4\xbb\x17U56D\xf7\x1f\x83=%\x1c@Op\xa5Xl\xe0\xd7\x0fW\x02\xafs~\xac\xd20\xec\x1a\x8b2\xba\xac\xe1\xe6\xfd\xc5\xab\xd1\xd6S|\xcd\x1d|\xbee-\x9b\xecc\x9b\xa6\x95\x0f\n\x9eien\x0e\x14\xcf\\\xa3\n7\x8f\xd9M\xabo\xfa\xc9\x0f\xcdnl\x14\xca\xf2\xdc\xb2=\x13\xd7\x93|[\xb4\xc3\xc8\xfa\xf8\xc8\xad>\x8a\xe91e#\x97\xe4\xcd1\x038\xc9\xdbd\xbe\xa7\xe4\xa5\x98\xc0\x98\xc6![\xbf\x8em\x8aLp\xdc\x1eEW\x02\xae\xfc\xb3Z\x9f\xb8\xdd\x99\xd0\x1a\xbf\xf6\xceh_\xce\xb7,MK\xd2\x10\x88\xd9\x94\x8b\xad\xc9\xb0\x1d\x89[\x90\xc1\x91\x8e\\ij\x8dv.Kqj#b\xd6!n\x17\xfa,B\x7f\x9bsY\x81$\xfbo\x81\xe5gXz\x86@\xc4\xe6\x8bX{Y\x96\xd5\x12\xabn\x99=\x17\xb0\xe4H\xd1\xa9l&\x0c\xad2\xae\xd6a4\x0c\x01\x934b\x8d\x7f\xb0VHT\x0d\xbc\x1f\x974A\x17\xd8\x1f\x1b\x1d\xa9#\xad\x1bw\xcd\xc4k\xb7\xa6\xd8\xd2u\"V\x86\xa9\x93Bk\xc4\xbb>f4z\xd6\x9a\x18\xdbn69\xbc\x1e\xf0fL\xa6\xca\x02M\xae\xb5\xb8\xde\xda\x0b\xd2T}-\xa7F\xca\x8e5\xcc\xa65\xe5x;\xe9\xb8\xf3\xb2\x9e\xbeWls\xfbo\xdf|\xc5\xeaM\xa3\xae\xc8\x12\xbf\x0ew\xba\xa9\xd7\xf4\x14\x18\xfa6\xa7\x11\xce\xcb\xb4F8\x9bcw[\xb4,\xa9f\xf9\x86\xfa\xcaf\xcf\xf8\xc7U?\xb6l\xc3\xca;Tc\x0dv\xde\xf8\xd9\xa6\xa9<\xdcFQ\xc7\xd9\xe6\x13\xab;\xb8e\x95\xb8\xac\xa1\xa8\xa1\xd8\x88\xa3\x82:\x10)Q\xcd\xe7Z\xde\xe6\xd0\xd4\xc68\xab\xcb\x9e\xc5\xf5\xe5\xcd\xa6\x14.\x1e}H\x1e`\x80\xcdg\xe9Qkj6\xfd,\xa4)\x97\x1cM\xdcNf+\xfa\x1a\xfe*\x84g.\x90w\xd6\\3\x18\xc2\xb3\x98\xde\xa0\\\xb3\x19\x90\x19MoE\xfa\xccvDX\xfe\xd0\x8c3\x1cr\xcfr\x98\xcet^\xae\x8a\xaa\xa8\xdd\xdcn\xe2\xc4\xa4\xe2!\xb0\x9bi\xe2j\xc7\x1a\xd9\xd97\xd0\x8c\"\x96\\<3\xba\\u\xa1\xdd.\x13S\x84\xa6OXxo\x8a\x8a\xd5\xc2\x1fbL%v\xbf\x11N\x12q\xa0\xeb\x8d\x9b\xc9\xed\x8f8\xbdMQ\xcd\xdf\xc1w\xb9kZ\x06\xdd\xa1\xecE\xf8\x80\x9b\x87\x9b\xaa\xe4\xb5iGt\x17\xd4\x7fcG\xa8\x8ao\xd7\xd4\xe5\xa7\xa8\xeb\xc8\x1a\"\xf5\x8a\xf1\xa5o\x0f\xbb\xa2\xfe\xaae\xc5V4[\\\x07\xaa}\xe5\xcet.\xb7\xac\xee\xcb>\x8cE\x08\x19WZ\x80\xe9;\x90\x00\xd4\xa2\x1a\x7f\x1c\xbe=q\xe1\x93\xff+\xae\x90\xea\xee\xd0\xc1\xa6\xd8K5+\xcf\x8b\xfa\xcf\xed\xa1\x1a\xd9\xf76\xac\xeb\xa4/H\x8f\xdeD\x9c\xd8\x82\xf9O\x9b\xdb\xa2\xac\xcf\xdc4\xddMu\x90\xd7\xdbV\x95\xf1 ?\xdb\x17\xbco\x87\x8dl\x83fw\x91\xb5\xa3\xbe\x86b\xbf\xafJ\xe9\x83\x7f\xecP|w=?\xb2\xf5mQwRO\xef\x8a\xcdmY[\xc9,\xa2f\xeaM2YR\xb6g$\xebc\xb9@\xe2\xbef1xn\xeb\xe5\x0c\xdf\xb7\xec.\xe3\x04\xbf-\xba\xdb\x99\x13\xd2I2\x10\xc8\x91~\xdd\xb1~=]\xde\xbax[\x08\xc1V\x8aW\xdd\xb4\x81\xe1'!\xb5\xac{v\x83\xa4\xe7@$}\x06\xbc\xc3\x00\xb1\xa1\x80\xf0p\x0c\x1f\xed\xa2h\xfb\x8e\xf5?\x88Q\x99~n\x19}Z\xbbM\x88\xce _\x9a\x07\x17%\xd7\x96\x9c(| \x1a\xcf\xf1\x7ff\xa8n\xccu\xc9 l\xda\xf6\xeb\xb6\xd9 5Q\xec\xf7\xd0\x1c\xfa\xfd\xa1\x1f\xff6\xae\x01C\x82He\xc9\xda\xa6ASf\x90U\xec\xf7\x19\xa4\x88\xf9\xa2\xb2-2\x88cw\xdc\x1e\xdb\xb0\x0c\xa2\x86\xef7n/\x13\xf5$\xb9bX\xea\x91\x17\xad\xcf\xda\xf8\xe4\xaa\xb2\xa4\xe5\xf9k\xebC\x8b\xaa\xf9\x88\"\x8e\x8d\x12\x88\x90\xf9\xcf\xef\x7f|\xd6\xb2\xae9\xb4\x1bu\x10\x12G\xc2C]\xfer`\xd5\x83:\x9f\\\x97j\xf4zE>\x80e\x0b\x8380\xb4eQ\x95\x7f\xc5\xb2\xa0A\xf6\xb5o6M\x05W\x87\xebk6\\\xb6\xaf\xb2Rd_`w\xe8\x86\x13)\x14=T\xac\xe8\x90\x8cU\x10\xb9\x0b\x0c\x1e={$\xbc\xe4\xc5\xa6g\xedJ\x1c\xc6E0\xa4c7\xfc\xc8\xad\xbf\xf4\xcf\xef\x7f|\xdc\xc1\xbe\xe8oE\x05\xa8\xb8\xc1\xc1\x82\xd7\xc6\xc5\\\x1f\xaa\xea\x01~9\x14\x15\x1f\x95\xad\x1c3U\x85\x18\x9d'\x85H\xdcF\x05|\xe4\xd5{\xef\xfb\xff\xf8T\xb6^\x88\xecn\x9bC\xb5\x85+y\x04G\xa5m\x8a\xba\xa9\xf9AC\xe8\x04\xbc\xc6'lu\xb3:\xe3C(L\xd1G\xabG:\xb8\\l6l\xdf\xb3\xedS\xfcJ]q\xcf\xcb^8\xee7\xec\x0czV\xec:8t\x07A\x1d,\xb3\x8a\xf6e\xc5[\xd77\xd2\x14.k\x91aQU\xf8\xd8=\xec\xc5\x1c*z\xfe\xf4\x03^\xa5\xe45\x80\xb2\xd7\x0c\xbd\x8a\xe1\x9eO\x06v/>\xe5\xcb\xfaa\x05?4\x9f\xd9\x1dk%2\xff\xe7\xf7?\xbak\x97\x17\xe9\xa5\xe0b\xd0$y^\xba\xcd-\xdb1\xf8x\xdb\xf7\xfb\x8fg\xf2\xbf\xdd\xc73\x99x\xa3~=\x13\xb3lc\x1c[\xab\x07\xf4\x16\x1e\x10\xa1>(D_=\xf5\xb1\xf6\x8e\xa98\xfa\xae\xd8wr\xca\xf0\x1e\x08*\x0f\x95m(\xf4\x95\xb0\xe5;@.*\x07\xb1\x0bTU\xf3\xb9{\xee\xf9v\xbf\x85\xf3\xeb\xb1\x07\xfc\x93\x0b:\x9c-\xdb\x0e\x9dT\xde\xbe\xc3\x8em=\xb7{\xfc\x16^\xd6\xf0\xc3\xe5\xe5\x05|\xff\xe6\x12\x9aZ/#\xb9@\x1f\x84\xa7\x0b\x9f\x99\x7f\x9eN\xf1\xcb\x87=\xfb\xcb\x9f\xff\x82>\xac\x88\x01\xf8\xb7VsHnq\xe2+\xec\xdbf{\xd80\x91\x89\xd4\xb6\xd3$r]~\x0b/\xc7\x13R\x07E\xcb\xf8\xcb\xa8\xdf\xa6\xd8p\x9d\xd04\x9f\x0e\xfb!5\xf3\xaa\xe8\xd8\x16\x1a\xfc\x0e\x14\x9fz\x03\xde}\xd1.\x91e\xd7\xdf\xb2\x9d\xb1\x16\xb6r1\x14\xba\x1bC\x06RQOo\xe4\xd1E6J,\xfb\x96]7-;\xd3/s\x99E_^\x95U\xd9?\x086{\x1d\xee\x12*\xaa\xbd\x9b\xe0d\xc6\xd2\xd4*\xd4+^\x10\xebn\x05O~\xee\x98v\x14\xf0Q\xe1\xd3\x8e\xeb\x199\xef\x8a\xba\xb8\xf1\xf5\xf8\xaae\xc2\xc1\xa1\x85\xae\x9e\xe2\xb3\xe5m\xd3\xb3\xe7\x8a\xa3Z\xe5\x15\x16\xa2\xedJ\xdf(>\xa1\xea\xc1\xcc7\xc6q'\xbc4\"U\xdaM5\x96EO,h\x19\xdf\x1d\x98\xf2_\x0f\x993\x03x{\\_W\xec\xa6\xack\xdf\xa1\xe5s\xd9\xdfz\x94\xfe\xc3\x9e\xad\xe4|.\xf6e\xb7\xda4;\x9f\xc6\xfc V[\xa7E\x85\xedD\x16\xeb\x95G\x91\x88\x0e\n_\xf5\xe0[V\x11\x86=\xdb\x94\xd7\xe5\x06:\xb6+\xea\xbe\xdct\xee\x92A\x888d\x89\x98\x14\xc1\x93\x1d\xcd\xe2\xf8\x89\xab\x8e+\xa6\xfdj\x86\xc1\xe0\xd8\x06jS-\xae\x9a;\x8f\xb1!\xbb\xaa\xa6\xf3\xb4\x9b\xb1\xd6||Y?|4\x1c\xdf5\x14\xedU\xd9\xb7|\xf1\x05Z\xa5t\xb4#\xae\xa8\x9a\xfaFE\x0f\xdcO\xc6\xb5\xa6P\xfa\xb2UW\xae9e\xd6\xa9\xad\"d\x9a]\xe8\x89_\x95W\xa2\xa9J\xafw\xd0\x1d\xf6\xfb\xa6\xed\xe5}\x11\x9bO\xcf\x0e5\xff\x0f\xdf/\xe5\xf7F\xe1d\xc2\xa2A\x8d\x87\xe6\x1a\x0e\xbdT>z9w\\\xf1\xe9h@Q\xc1\x0d\xab\x05]\xe6VE2\x06\xa3\xfa%\xa2\xef\xe4'r\xebys_\xf0 \x0c_?\x87\x8bB\xa51\xab\xa6\x17\xc3\x86X\xd6\xf0\xea_\xff\xd5\xb3M}\xd74p\xdd4\xf0\x02V\xab\x15\x9an/\x06\xa1\xa8\x1f\xf0\x1f\x8b\xfaa\xc5\xab\xfe\xaemvO\xae\x9b\xe6)\xfe\xd8j\x85\xef=\xe55<\xe1\"~\x16\x8d\xbel\x9e\xfc\x0b\x97\xf1\x14G \x04\xe4\xfc\xdd?6\xdfD\xc6\xe6\xf7\xc5]\xb1xp\xe0\x85\xb0\xad\xb8\xf4\x05\xa3PvO\xbek\x9a\xd5\xa6*\xba.0\x08\xb2I\xfc\x05\xd9\x1f\xe3%\xbc^dt\x86\xe1\xf9\xb7\xc8\xf0\\<\xf4\xb7M\xed\x19 \xd9\x92\xef\x9a\xe6\xc9j\xb5\xc25\xf108O\xbc\xbf\x8b $\x86-u\xd4\xf8\xcb\xe7r\xd0^\xbf\xf9\xf0\xea\xfd\xf9\xc5\xe5\xbb\xf7Oq\xd7\x9b\xacJN4\x7fe\xb2:\xffp\xfd\xcf\xc8p}\xdf\xe0#%\x86\xea\xf9\x0b\xf8\x97\xfd\xd5\xea\xbb\xa6\xf9\xcf\xd5j\xf5w\xfc\xc1\xa2~8\xe3\xe6\x1a\x7fz/\x0d\x90\x9f\x8a\xb6\xbb-*>\x88\xfe\x86\xfb\x86iZ\xb3\xa7\xda\xf2zR\xe9\xcf\xf5n\xacV4JLl\xf1\xd4\xffx\x01uYy'\xa8\xbf-\xc8L\xbc\x14\xcc1\x9bO\x83\x1e\xd4\xc66\\=\x8c\xa6\x8a\xd6\xd8\xe2\xee\x8e\xab\x07\x9d\xdd\xecH;t\xc8\x9e\xff\x181C\x9e\xf1\xb3\xe8J\xfc\xc0M\xb9\xc7P\x18\xbb\n\xdfqTd\xc1\xadA|u\xb7\x92A\x8d\xd7\xd5\x83>79\x07\xde\xc1t\x84\xe2\xbag\xd2\x9a\xe1\xe7m\xb7\xc9\xcf\x1e\xbbU\xa8\x03\x9dn\xa2<\xc1153\x1f]7\xcd\xea\xaahE\xe7\xee\x9f=\xac\xfe\xfaH\x8e\x96(J%K\x9c\xceG\x98\xa6\x0c\x15|H\xe4\xecV>SK\xec\x99Lp\x10q\xf9\xa6m\xd9\xa6\x87MQm\x0e\x95v7Z\xc2\xae\x0f\xdc:\xb6+8\xd4\xe3hv\xa2\xff\xcd\xa1\x87\xb2g\xad\xdc\x1f\x9a;q>\x18\x0eL\xf0\xc7[V\xcb\xae@\xd1\xda\xf3\xd9<6\xda\xb5\x88|\x00s\xc0\xa7\xbc;\x9b\x96m\xcb\x01nV\x98`\xb9\xcf\xb7Mg\xd73p\x97\xd9\x95\x98\x9f\xa1\x1cS;De\xe3\x97\x94M\x1f\x9b*.\xfc\x90>\xfa\xa9A\xa2r\x15\xecZ\xac\xf1_\xa9+\x1e\x15*\x8ek\xd6+6|\x02\xb6\x15\xbex1\x95\xd4\xd50\xb2y\xb6\xc4\xdd\xa1\xea\xcb}U\xcaF\xd8\xf2\xc5\x83\xf8\xcc\xb6\x11&\xa3\xefW&q\x8a\x89h\x0cq-U\x11\x1f\xd0k\xe7\xdad\x91\xfd9\x04\x8b\x14=P\xdf\xb4\xb2\x03\xfb\xa2\x15#\xa7 .\x8a\xf9\x9e/\xd9^LAi\xbd\xeeY+\xef\xb0\x15~\xbd\xfa\xa3\x12\xb6k\xc6\xa4\xbd\x96\x89[r\xec\x86\xeb\x1f\x9f|\xac?*Z\xa2\x81k\x7fZ\xe1\xc7\xdb\xe1\xd55\xab\xfb\xb6d\xdd\xc7\xd1x\x13\x879\x0f\x1c'\xf1\x8e\x0f\x9f)\x8d\xaaA\xeb\xf3Lla\xa5\xe8\xa4]\xac\xbc\x87\"\xa8>\xb5h\xf9v7fiOk\x9c\xe6\xf0\x13H\x91l\x81\xba!z\xe7\x1c\xe9\xff\xc6g\xcc\xa6\xa8\xd1\xcd\xd0\x0e\x87a@\x896Z\x04\xfaO\"\nT\nM<\x0c\x90\xa9\n, \\\xcb\x8c_\x9e\xecY\x0b\xfb\xa2l\x9f\xf5m\xd9\x0c\xc7zw\xbed\xe8\x91+T\xf7e\x1c\xd5\xf1\x99\xa1s}\xa3\xd7\x88n\x1d\xef!\xe9\x12G\xab\xfa\xf1-\xcb&\xe2\x7f\x16>\x9b\x8d\xc4\xb3\x8e\xc0UD\x89\xf8\xae\xa4\xb5\xaf \xb4\xd7_hu5ME^[u\xd3\xab\xcb\xb6\xd6S\xbf%\xd2y\xea\x93V\xf7\xc6k\x9e\x9aFp^\x8e\x89`m\xb1\x11}R\xfa\x98k\xc9\xba\xe9\xbfR\xff\x94\xe0\xdf\xee\xb0\xdfW\x0f:X\xc7\x7f\xfa\x8d\xfe\x0e\xf6\xa8z\x86C\x10-f\x81\xf5\xaf[\xeb]\xf4}\\\x86-\xc76\xe7\xbc\x87:\xffq.B\x15\x001S8f$\"5\x90`\xfb!ASc>\xc2.\x00\xcb\xfb0\x8fz $h\xda\x07\xdc\xb3\x9e\xd2\xf0y\xc4\x04\x8e\x18\xa7\xff\x8b \n&\xf2J\x07\xe1\xb8\x9c\xb3`*\xb0v\x12 \xd0\x81w\xa8\x0c`\xee\"rh\x0d \xfc\xed0z\x83\xe0+\xe1o4\x9b\xea`\"g \xdf\xc1D\x94b?\x98Ns\x12\x05\x02\x04;\x9c\x87\n\xc1\x10h%t.dF0$Y\x1c \xbe\x0ey\xb6\x14\x88\xdc\x83g\xf4/p\x93jh\xffj\xdaQF\xfau\x17\xc8N\xe6l\xe2y\x01e1\x17F\xb2+\x97\xb0\xf3E\xdd@\xf1\x9d#\xe3\xfe\x17\xd8\x01I{`\x96\xded\xdb \x03{\xa1\x7f7L\xeb\xc2\xfc\x1d1>\x16\xcbvEG\x9c\xa4\xf1q\xfe\xbcpgt\xe5]c{\xa3\xf7S\xa0\xfb\xe3\x82\x05\x87\xee\x92\x91o\xea\xdb)\x17\xb9.s\xed\x97YwL\xdf\x9e\x99\xb2k\x86\xbb\xbeh\xe7\xb4$\x19\x84B\xd8\x8c\xc9\xb0{:\xfb'L;\x87\xedA\xe3G\xad\xaa\xc9\x8a\xef\x1e\x8f7W\xb8\x9a\x14\xbb\xb7\xc2\xaam|`r\xba\x1e\xfe\xac\xfc\xb8\xba-c\xab\x13Nv\xa7\xfb/\xbc\xe4/\xffe\xee\xbf\xc0=\x16Q\xdb\xcbk\xf2\x99\x02\x9ea\x12<\xd7!\x07\x8d\xbf\x9f\xb5\x1bn\x89\x158\xfaD\xbf\xac\x11x\x14Z\x81Lv\x9a\xc7F\x8b\xdag\x0bZ\x9e\xc9&\xf3\x18\x01\x8e\x7fU\x16\xec\xf3\xca\xe2|d\xf3\x85YT82\xa9\xa1\xa9=)?\xb2D,\xc38'N|\xa0e\x99\xb4F\x0f\xb6\xfa\xd7x\xff\xc4\xe8\xe9\xee\x9b\xe6\x93G\xd8\xbe*6\x0e\xb6\x11d\x86\xc8\xbeb\xa2\x1e_\x8c:\xa1\xcf\xa18\xf5\xa4\xdf\x93\x8au\xf7\x0euy?\xa6\xf8\x8c}\x1b\x1f\xc7z\xa1RY\xd6\x1eKR\x96h/h\xdfeR\x97\xb5M+S\\=RIh\xee\xf6P\xc9\x90&.O\x1d\x0d\xa0\xe8#\x9d\xcc\xd8\xb9@\xdb\xfb\x86\xda\xa2\xf8p!\xda\xffM\xdd\xb7V\x1e\xe6\xf8\x89\xe5\x9a\x95\x18jWV\xcb*vW\xd4=\xdf\x81\x8am\xd1\x17\xc1\xa3\x94\x0e\x9a\x14\xf2.'<\x1c\xa4\x1e\xa2\x9a\xb5Hod\x94S\x9a\x81\xc2\xe0\xeb\xca\xfa\xa62\xceP\x8f\x8d\x0b\x13,a\xfco\x93\x93\x98\x8c\xab* f\xe8\x95\x0f\x13_\x12_5\xed\x96q\xa3\xbc2\x82@'\x8b\xf2dQ\x1e\xdf\xa2\x9c\xce\xfd\x05\xa6eP\xd4\x1c\x1bsH\xa5I6,\x87E65'IS>\xcc=\xe5\x9d)a\xb59\x93ujd\x99\x9a\xc8\x8bqN\x85\x19\xa7\xbc\xc6\x94\xdf\x90\xea\xbd\\S\xc1-*\xbe\x99df\x99\nsL\xe5e\x98\xca\xca/\x15d\x97\xea\x97qK\xe5d\x96\x8a\xf3J\xcdf\x95\xca\xc9)\xd5\xc7\x19\xa5r\xf2IE\xd9\xa42sI\x05\x99\xa4\xe6\xf0H\x859\xa320F\x91\xf8\xa2\xd2\xb8\xa1\x162C\xe5\xe5\x85\xf2\xc5)\xb2rB\xe5g\x84\xca\xca\x07Ec\x83\xca\xca\x05\x15b\x82\xca\xcc\x03\xe5c\x81\xea\xa9\x1cPs\x19\xa0$\xdb\x13\"\x10\xe7\x7fZ\xc0\xfe\xe4\xe1~\nn\xf1A\xde\xa7\xf8\xfe\x9f\x8f\xf3)\xc4\xf8\x14nGV\xb6\xa7\x10\xd7S&\xa6\xa7e\x99\xcf\x81d\xc3&u\xf11 y\xf9\x8f\xe8\xed\x9f\xcb}\x14g>\xa2\xb7\x01\x1d\xc3|\x9cG\x1e\xc6#/\xdf\x11\xbd\xe1\xc9\\Ga\xa6#o\xc5\xfe4\xa7\xf08ff8\x9an\x9a^~\xa3\x10\xbbQ\xb4\x93x^\x13\xb5\xa3\x0bY\x8d\xc6.F9\x8d|\x8cF\xd3\xcc\xab\x99|F34k\x9c\xc9(\xbe\xec\xf2\xb2\x18%r\x18y\xfb\x0c\xd1|B?\xd3Mp9\x03iP ;oQ\x88\xc1'\xccY\x94\xa9;\xd9\xd8\x8a\x0c\xa6\x9ed\xae\"\x12SQ\xc6\x0e's\x14y\xe2[`\xf7\x9b\xcaP\x14\xe4'\nv3\x9e\xf3i\x0d\xc2\x1c\n\"\x8cn(J64\xd3\x0c^B3$\xfe:\x917\x8a\x19[\xefoAn\x82\xa1\xac\xf4B8\xb9PFj!\x97X(\x1f\xad\x90y\xce2k\xc8I)\x84\x12\n]\xe5\xa5\x13B\xc8\x84rS \xa5\x11 y 'N6\x1e!%\xd0}yQ\x1e`:\xc2\xc4\xcf\x9c\x93\x17X\x12N\x19\x0c*\xdc\xd8\x8e23q\xd0+\xe7t]%1\x910\x96J\x98;\x990s:\xe1\xe9\xbaJ\xab\xe4L-$%\x17\xe6M/$$\x18fO1<]W)KRJ\xe2\xe2\xa4\xc4\xdci\x89\xa7\xeb*\xcdBKP\xcc\x9c\xa2x\xba\xae\xf2t]\xe5\xe9\xba\xca\xd3u\x95\xf1tFB\x0e\xdf\xe9\xbaJ\xca\xe0PR\x1c\xe3\xa3@JsLNt<]W\xa9\n%\xf1\xf1t]\xe5\xf24\xc8\xd3u\x95\xc9)\x92n\x93O\xd7U\xe6J\x9f\xcf+M4*\x82\xd1\x03\xc8\x80\xd3\x83\xf9X=\xaf\xbc\x82\x84\xd7\x83e\x98=\x98\x8b\xdb\xf37\xbb\xaa\xc4xE\xb1{0\x13\xbf\xe7\x15&P;\x04\x0c\x1f,\xc0\xf1\xf9\x05\xb2>\x86\xe5\x83\x9cx>\x88c\xfa \x17\xae\x0f\x16a\xfb \x1d\xdf\x0790~\xb0\x00\xe7\x17\xd0O\x9e\xd3\xb1.\x99\xf1~p$\xcc\x1f\xe4\xc7\xfdA\x02\xf6\x0ff\xe3\xff\x82:<\x8c\x01\x84Y8@\xaf\xa8\x01\x1f\x18\xc0\x02\x822\x01\x88x@\xc8\x8d \x84(.\x10\x96b\x03!\x84\x0f\x04\x9a \x14=I\xd3\xad\xa4\x9cxA\x88b\x06\x81\xd8\xb2y\xd8AT\x94\xde#\xc2\xf8A\xc8\x89!\x84e8BT\x9e\xda\xe8\xfd\x86\xcd\x02\x1c&\xcc\xc6b\xe2\xa2|\xf8L8\x02F\x132\xcd9\"V\x13\xc8xMp0\x9b\xe0\xc5m\xc2p6\xc6\xd1\x99\x10\xc5o\x02\xf1\xf49\x1b\xc7\x89J\xd3\xf9\x89~,'x\xf1\x9c0mq>L'\xc4]\x0d8\xb6\x13\x92\xf0\x9d\xd8\xd3\x1e\x8c\xa7\xefQ\x0c\xe7\xe9>\xeb\x15\x9a\x84\xf7\x04\xf0a>!>^\xd6\x97\xca\x85\xfd\x841\xfd\xd7\x8b\xff\x84\xc4\xb6y\xe6}2\x16\x14\x95b\xa6\x9e\xfb\xf0\xa00iQ\xac\xc1\xc6?\x96\xe2Bay\x103\x80\x11\x85\xf8\x97\x80i\xe7\xb2aE!\x82\x17\x85\x19\x8d\x0b\xb8\x0e\xe7`G\xbd\xc2\xf4\xf5\x1f\x01\xfc(\x841\xa40\xa3w\xf3\xb1\xa4@\xc4\x93\xc2\x8cV\x05\xc6<'\xb6\x14B\xf8R\x10\x8d\xf2bLaF\xb7f`M\x81\x807\x85xSb n\x94\xd1_\x80?E\xe5\xd9\xc0\x8d8\x06\x15\xa28T\xa0\x0f\xc4b\xd4T>\\*\xa4bS!\x88O\x85i\x0f\x96`Ta\xf9^A\xc1\xab\x02q\xd4a\x01n\xd5+\xf0\x8a\xa5cW!>.@\x18\x1b\x88\xe0X!>\xa1u\xa1\x0e\x1f\xcc\xc2\xb4\x06\xc5\x110\x9e@\xc0\xb6\xc2q:\x9b\x11\xe7\n\x8b\xb1\xae@\xc7\xbb\xc2\xf1\x86#\x0d\xfb\x1a\x147M\xc4K\xc1\xbfB\x1c\x03\x0b\xb4A\xa0huH\x18\xa8l\x98X\xf0\xe1b\x81\x86\x8d\x85x\xff)}\xca\x8a\x93\x850V\x16\x08mZ\x8a\x99u\x04\xa2\xa9[\xb3q\xb4\x8e$\x8d\xab\xf5bi!7\x9e\x16<\x98Z\xc8\x8c\xab\x85\xf1\xd4\x8b`k\xc11\xd3\x92\xf0\xb5\x8e,\x81\xb7\xf5al!\x03\xce\x16\x9b\x188\xd6\x16\x96\xe2m\x1di\x18\xfe\x16(\x18\\|\xb5\x04`\x86^\x80\xa3\x826\xdao)y\xef/^\xe9\xb6\xd1 \x8e\x17\xdc*L\xbf\xdeE\x18\x93\x86\xbdc\xf5N\xfe\xa8\x1c\xc7\"\xf1S\x04\x01\xb5\xf9)\xb7\x93\xb2\x83]\xb3=T\xf3p\xbf\xb3\xee\x1e\xb4\x1a9\xb1\xed\x95\xa2\x94v\xbe\xf2\xfc\x8ad\x13\xcc:\xe7\xdb\xeb\x88\x12\xc1j\xc7\xb0H\xfe\xe3\x99\xed'\xb1\x84\xeb\x86\xe9]{\x84\xeb\x8e\xcfL\x9b\xc6\xea\xbeu\xac\xd1\xc5\xedr4\xbcQ\x95\xd1J\xd0\x7f\x12Q\xcaRh\xf8a\x10MX\xbe\x93\xb2\xdb2\xe3\xd7'{\xd6\xc2\xbe(\xdbg}[6\x96\x9bd\x84\xca\x1e\xa9\xa7n\x05\xba\x7f\xe3\xe8\x1bx]\xfdL\xdf\xc0\x9e\xb5]\xd9Y~\x06\xde\xf3\xf5\x96\xd5\xcdn\xce,\x1d\xdf\xb6l8\xfeg\xe13\xe3J\x12\xc4\xef\nU\x8f(\x1bd\x9d\xc7t\x8b|:\x01)}\xd14U\xba\x12i\x9a\xca\xa7B\x9a\xa6\xb2y\x03\xf8\x1f\xca\xfa\xba\x99\xa5.\xea\xa6_K\x85\xbeN\xb8q:\xe5\x0dd\xc4\x8d!\x89\x8e7\xef\x1d}\xb4\xdf\x1b+%]w\x9b\xebl\xad[e\xf4O\x8a\xc8{M\x97Y\xe7\xd4\xfc\x0d\x1c\xb1CG\xeb\xd1\x8d\x7f\\\xa8\x92S\x8fV\x06Wls\xfbo\xdf|\xa5\xf1F6j),\xca5>\x07m\xbe\xee\xda\xcd\x91{\x84\xd6\xe5\x06\xdb,},\xe1E\xa88\x8d\xbf\xd2#\x10\xea\xdc\xb6\xeb\xbfX\xe7\x8c\xba\xc2\x9d\xf3|\xab\xae\xd7L%\xf1\x1e\xa2\x1b\x91,\xd8r\x1a\x0b\x8a\xdd3_\\\x84\x9b\x96\x9e\xae\xa6\x0e\xf8\x94e!\x1c\xbf\xe3\xfeeY(\x1fI\x96I\xeb\xc0&\xc4\x90\x7f\xd3\xcc\x86!\x07\x855Q\xfb\xa6\xf9\x04\xfb\xaa\xd8\xa0Y\xd9 }\x8b\xfb\x8a\x89\x8aC\x1e\x89\xc4A\x89y%\x92\x06\xc6n\xa15.\x87\xba\xbc\x1f]\xcd\xd1i<\x15\xe8\x1b\x14\xe5S]_\x15UQo\x96\x0e\n\xbd\xab\x93zQ?\xaf\xfe\xed\xf3-\x0bu\xd2\xd6W}\xd1\xf6\x98?F\x16y\x8c\xe3*\xe2\x8b\xf5t\xacRk\xa3\xf1\xack(\x9b\xaf\x06\x1d\x15\x95%\x17\x90\xe1\xd9n\xfc[\x8dg\x9b n1\x91\xab\xd8M+\x92\xb7\xc7\x13\x8b?\xedb\xa7]\xec\xb4\x8b\x9dv1\xaf\xac\x7f\x86],8\xdf\x82_ \xde\x1f\xa7/\xa6S\x81\xfdr(\xef\x8a\x8a\xd5\xbd\xdcV\x9c\x87\x11\x81\xec~\xc3\xf6\xbdL!.Q\xfa\x83\x11\x918\xcc\xdaI\xbe\xaf\xfatR\xaf W.\x12r\x00\xe8\x0ee/\xfcT\"\xec^\x95\x1e\xba\x85\xc1 a\x8emhd\xccnR\x87c\xd2o{{W\x1b\xaa\xdd\xb8\x81\xb7\"e\x14\xac>\xdb\xe2\x90\xfe;=?\xf1j\x9ex5\x8f\xc1\xabiG\x9cP\x07b\xccIi\xbd\xa4\xa4%\xc7\x9b~\xd6\xa1\x80\xd7\xce\x02&;0e8a\xea\xb0$\xcd\xeb\x88\xd3\xd0;\x1f\xac\xb1\x9c\xe7\x11\xc4\xbd\x7f\xa3\xbbjA\x83\x1c!\xb4\x06\xa1\x87\x8b@H\xe5\xb8\xccS\x04+?b\xcb\xc4,\xfb\xf8^\xebZ\xf3%n\xc7\x1b!-n\xaa\xa3\xa2<\xe6;\xc1p'\xf6\x93\x9c\xde8\xb5\xc4K\xcc\x08\x1f{\x14\xb2\xb3 \x16v\x06'n\xc8\x9eV\xa8\x02\xf5H%\x99.\xb6\x87Jf6`\xd2Z\xb6a\xe5\x1d\x83\xa2\x0fv-S\x97\x02m\xee\x1bZ[bC\x84(\xd1\x89\x95k\xe4\xd7\x06m\xdc\x88u\x1b\xf4\xce\xa0Q]\xc7Kc\x89\xb0\xec\x00\xa4\x17\xd0\xf5\x8dH\xde\xa9*\xe9\x99\xe9\xca\xfa\xa6b\xa6W\xc6\xa8V\xba`F\x81|\x16\x0f\xaf\x18\xd9+5\x1f\x0f>\xcf\xbfj\xda-k\xd9V\xb8~\x90H)J>=11C;$\xd2#%\x90\x1e\xdb\x1b\xf2\x99^\xbb;4y\x874\\3_(\xc07\xd6\x98i;\x88\xec\xd4\xb2\xa4\xac\xcb_Ix\xef\xb8\xbd\x99g \x84E\xb9\xbd\xc9\x03\xcf\xb2\xd0W\xa6\x85$\x14\x81\xfcQ\xa9K\xc7\x03\x12\x1b\x0bC\xa5\x0c(\xd91uB\xa5\x1cJ\xa5|\xcb*\xe1{(j(6\xc2\xf8v;|\xce\x0d\x01\xf7\xe4\xda|\xae\xa5\xdf\xa2\xa9\x0d\x1d\xa5\xc8\xa3\x04}Z\xb3)\x8b!kN\xd8\\F\xfa\x99+\xef\x9aKr\xeb\xf1|\n\xcf\x865{\xc199*\xb2\x04\xbf\xa9\xf4\xfe$\xbe\x16\xfbz\xafdV\x8b\xf6\xd8\x88\x0f5&\x1e\x8e\xc9.b\xa0\xf9w\xdb\xc9\xcf\xe6\x8e\xdc\xdbw\x97o\x9e\x0b\x02\x02\xe5\xa6\x92H\xfeRl\x91\xe7\xb5\xb6\xe8\x06\x82+9G<\x10m\xa9\xc0\xddJ\x06\xec\x17\x9f\xaf\xbf\x1c\xcaVN\x8a\x9b\xe6\xa6\x11hb\xaaW\x03\xdfpl\x9f\xc6k\x9f?\xc3\x924:p~\x83\xcd\x98d?\x86\xf6]\x98\xb2N\xae\x8b\x93\xeb\xe2X\xae\x8b\xe9\xd8G-#\xafef\nx\x86I0L3\xaae\x96l\x8e\x0d\xfa{\x96\xcf\"L\xc9L\xf3\x108\x9f|&\x01\xf3H\xb6<\x91\x17\xa3^\x0e\x93.{\xb7,\xff\x86\xd5{)\x96\x83\xfbUl\xeb\x99O\xa8\xec1\xa4\xc2T\xcasH\x94\xfdd\xc9\xb3h\x92\x85xDX\x90 \xb9_F\x8d<\x93\x14\x19\x85\xe2\xc7\xe9\x90g\x13!\xcf\xa2@\xe6\x87Wl\xc4\xe2\xe4\xc7sh\x8f}d\xa4Q\xc2\xe3\xb9T\xc7\\\x8b#\xe2\x82$\xc7s\xe8\x8d\xc34\xc6\x19\x08\x8cI\xd4\xc5i\x14\xc5\x0b\xc9\x89\xe7\xd2\x12\x03\x1a5\xf7\x9d\xeb\xb2R\x11\xe7'!\xceJ?L#\x1e\x9eG9\xec\x19\xe0\x10\xd9p:\xcd\xf0H'\x8c\xadq\x0f\xc1pO\xa5\x16\x9eK*,\xc9\x83\x11\x818\x9d\xf0\x02\"a\x0f\x85pp\x8b\x0f\xd2\x06\xc7\xf7\xff|T\xc1!\x92\xe0p;\xe6\x11\x03kM:\x11\x16\xa2\x04\xceD\x06\xbc\x80\x06\x18_I\xd8V\xbe\x80\xfa\x97\xd77\x91\xd6\xa3\xa4\xbfK\xe9~\xa3\\\xb5\x01\x8a_\x12\xb9/\xce\xc1\x99F\xe8\x8b\xcbp8\xee\x16\xd3\xf7R\x07\x83B\xd9\x1b\xee7\x89\xa67\x91\xa0\xd7\xe5\xfc\xcb@\xca\x1b\xa5\xe3\x0d\x13\xf1\xc6(x\xbd\xa3\x94B\xbbK!\xdc\xc5\xa8v\x17\x92\xec\x12\xe9u\xe7\x11\xebz\xa8k)d\xba\x19it=\xadpf\xda,\xd2\\\x08\x10\xe4f\xa4\xc6\xc5Iq\xe7\xd2\xe1z\xa9o\x17\x90\xde\xa2\xc7\x90 \xb5-\xc6\xbb\x89\xd1\xd9\xe6#\xb2\x9dOa\x8b\xd0\xd5\xce\"\xaa\x0d\x92\xd2\xd2\xe9hID\xb4\xca\x8fA\xa1\xa0U\x8fF\xc9gQFV\xbcv*\xedg\x9cj6\x81d\x96H/\xebtc\x01\xa5,:\x8d\x17\x10\xc7:\xde\x16\x942v\x1eY\xac\x8f\x186/%\xec\xb2\xf9@\xa2\x81\xa5\x10\xc0\x9a\xdb\nF\xfa*O3\x18\x99k\x88\xe85|\x82\x98M\xee\x8a\x13_xi]1BW;\xca\x9b\x89\xca\xd5{\xe4\xc3\xe8[\xa9\xc4\xad$\xcaV\x1aYk\x94\xa65\x81\xa0\x95\x848\x1f\xe5\x1a\xa3\x9d\x87\x8eu\xcc\x89\xc0\"\xfd\xb4\x9683r*t\x8c8xhW\xcd\xb8\x83O\x967c\xdc\xdf0\xe3\x1fV\xd0\xc3\xfc;\x89d\xb5O\x0fZx)U\x83\x0e\x0d\xab\xf9\x99hT\xfd\x04\xaa\xf4\xa6\xa0\xee\x939t\xa9\x03-*\"\xcfG\x94\xea\xa5H\xa5\xb7\x7f.-j\x9c\x10\x95\xde\x06t\x0c\xf3\xd1\x9fz\x88O\xbd\x94\xa7\xf4\x86'\xd3\x9c\x86 N\xbd\x15\x139[\x9cq\\@d*\\\xc1\x13q\xd3M\xd3Ka:\x8b\x99(\x9c\xd1K\xed\xe8B\x92R\x0b\xa1\x1a\xa6'\xf5\x11\x93Z-\x9dOI:C\xb3\xc6 H\xe3\xcbn.\xe9(\\a\xde\xdfD\xbaQo\x9f!\x8a\x91\xf5\x13L\x06\x973\x90\x06\x05fQ\x89\nVH\x8f\xb4\x10Wd\x98>4Sw\xb2\x91\x85\x8e+&\x9d&\x94D\x10\x9a\xb1\xc3it\xa0\xa1\xc4P\xab\xdfT\"\xd0 \x05h\xb0\x9bq\xb4\x835\x08sX=1\xf6\xce(o\xe7L3x K\xa7\xf8\xebD\x1e\x06\x98\xf5\xb7`)''L\xb2 f\xb3o\x0el\x9b\x860\x9cw3#\xe3\xa6\xcb\xb5\x99\x8fe\xd3\xd0\xb2d\x04Nz\xa1\x93$\xf0dB\x9f\xc3l'\xd3\xc3L.\x08% DI\xe8\x05\xed\xbb\xe4\x85R\x92\xc1\x94K81`\xda\xb9\x0c\x90J\xcap\xe5\x83UF\x81\x95\x93\xe6\xcc\x83V\x86\xfb\xb4\x14^i \xbbr\xd9\xae\xe6\xa0-O \x91\x13H$\x1bH\xc4\x9a6\x1e\xa8H\xc8\xa0K\xc4\x8c`\xa2\xe6\xe0z\xd3\x0d\xcaaq\x1d\xd9\x8e\x0c\x03M\x16\x19c3\xe1&^9\xff+\n8\x89AN\x82\xa6W\xc8\xf0\xea\xbd\xc0\x93\xe8\xb6\x16\x1b%\xc8\x0f?\x89\x01PrCP2\x83P\"0\x94\xc5@\x94\xbcP\x14\n\x18e\x01\x1c%/ E\xce\xd6\x08$%/(\x85\x00K\xc9\x0eL\x89@S\xe6\x81SPAA\xc0J\x16\xc8\n\x11\xb4\x82\xbe\x99\x04dY\x0ce\xc9\x0df\xf1\xc3Y2\x03Z\x8e\x01i\xc9\x0cj\xa1\xc2Z2\x03[\xc2\xd0\x96\xec\xe0\x16?\xbcE*.\x12\xc0e>\xc4\x05\x15&`/\x1e\x90\xcb\"\x98\x8b\x17\xe8\x125)\x82`\x17\x9a\xc5\x91\x0f\xf0\x12\x86\xbc\xc4[\x93\x15\xf6\x12\x06\xbed\x83\xbe,\x05\xbf8\xe2\x84E\x83\x1a\x0fy\x010j\x19!\x1dZ\n\x82! ?\x82@\x18\"\x14\xc6\x9bO\x9f\x08\x87\xf1\xcbA\x92\x8c\x17\x83bR\x06\x87\x02\x8c\x89\x8f\x02 \x1c\x93\x0c\x8f\xc1S\xb03@d\x08 \x99\x18L&\x0e\x94 \x8eZ\nX\x86\x06\x97\xc1\x013\x8b!3d\xd0\xcc\\\xd8\x8c\x7f\x98H\xd0\x99\xac\xe0\x99@[\x90\x99\xb8\x08B\xe3HC 5YA5>X\xcdB`\x8d\xdbd\x17h\x93\x1fj\x13\x01\xdb\xe0p\x1b\x1cp\x93\x13r\x93\x19ts\x0c\xd8M\n\xf0\x86\x08\xbdI\x02\xdf\xd0\xe17\x1e\x00\x8e\x0frA\x07]\xc4A8I0\x1c2\x10\x07\xedPn0N^8\x8e\x07\x90\x93\x1b\x92\x93\x1b\x94\xb3|\x8e\x90\x8094h\x8e\x0d\xce\xc1\xe19\xfa\x0c\x86\x81p\xc2\x10\x9d\xf8\x89'3L'\x00\xd4\xc1\xa1:\x93\x16\xe6\x02\xeb\x04\x8f\xad\x18`\x87\x0e\xd9!\x82v\xa8\xb0\x1d\x02p\x07R\xa0;8x\x87\x1e;\xc9\x03\xe0\x81\x08\x84\x87\xde\x9e`J\xd0r \x0fx\xa0\xa8\xb8\xa6\xf5B|\x02 \x9f\xb4\x9e\xcc\x05\xfaP\xa0>i-\xf1\x8ci>\xc0\x8f\x17\xf2\x03~\xd0OZ\x17\x92\x81?1\xe8O\xb0\xfaPzZld3C\x80\x12@@a\x18\x10\xa9\xc3\xbe\xdc4z\xa7\x17\xc2\x81\x92\x00A~H\x90\x9bG7\x13\x144[?\xc7\xa1A\xf1Q\xc5\xe4,\x83\x07%\x03\x84\"\xb9\xa2\xb1l\xd1\x10L(\xaa\x00\x808D\x90\x1d,\x14\x86\x0b\xc5\x00CY;\x96\x0d6\xb4\x0c8D\x84\x0ee\xefz2\x80\xc8+\xcd>[\x90!D\x11\x10Q\xb4\xc31\xcd\n\xc4\x01\x99\x830\xc2\x15\x8a\x8b:\"\xe0\x8e\x16\xd9\xeeK\xd0G\x8e0\xf5\x94\x8b?\n\xb7#7\x06)3\n\xc9\x87C\xca\x8aD\xc2\xb0H9\xd1H\xe0\xc5#\xe5E$y0I\xd9QI(.)?2\x89\x80M\x82\xe9\xec\x1e\xb33\x8d\xc8uU\x89\x9e\xfer`-\x175>\xa3\x85\x9c\xf2\xa0Oy\xd0\x99\xf2\xa0\xa7\x0d\xf5\xa4\x1b\x93qs\"\xabY\xc9\x8a\xc1\xe7\xcc;\x01\xe5\x90;\x93\xcf{;\x11\x96h\x8c~\xa8\xc9\xf1s\x0e \xcd\x05\xa0\x8d\xf0\xb0\xae\xdd\xcci\x8851Pi\xae\x1f\xd5\xbe\xdcWf\xf8\xea\x94fC\x9az\xdfm\xea\xb6\xeb36\xd5\x90\x16i*~E\xb9n\xf9\xb4\xbd\x0e6\xae?B\xb2z\x04\xfdF8a\xcfq)$]\xf6\xed^\xe9\xed\xc8C\x80n\x11\x88\x1b\xa1cs]\x07\x99.\xec\xf6\x81\xb0\"\xa8\xb7\x05Vm\xea\xf5\xdb\xe1\xf6\xa3\x97n\xfb\xaf\xda^\xd0\xee\xe4\xcb\xb4'Wf;\x02\x03Wh\x87\xda2\xe7\xba\xec\x01\xe1fIr\xd1nV\xbdS\x9c\x9b%\xdc\xc2\xb7\xe1\xcd\xb5\xees\xb6\x02\xecU\xd9\xf5\x12\xd3\xb6/\xda\xbe\xe4&_k\xe1\xda\xc6\xaa\x86\xcfd\x81\xdaDP\xcdz[\xe9g\xcb\x0b6\x11?|\"\xdbqC\xd8,\xc50\x93wL\xaf\xb2C'\x1f\xae\xe0l7\xdc2=f\xeb-\xaf\xc6\n\xb6\xce\xd5RSG\xe1\x0ce\x84(\x1f\xaf\xda\x89\xef\x9b\x8b\xf4\xcaT\x8f`\x1a$\xde\x04k\xa5.\xd5\x17pe\xda\xc9\xae\xa6\xb0j^\xa4\x14,E@]\x0e\xc9\xc08\xb3\x19k6\xae(\xf4u\\\x04\xc4L\x89\xe8\xd1!\x95\x98l\xe1\xd2\x9bHs\x0c\x88\xa0\xf9\x10\xed\x0c\x81\x80,\xdb\xc2\x84\x98M\xe0mmx\x80\x17\xad\xda\x89,\xc4\x16\xf0Y\x023[\xbbtMO\xc4y-\x00\x7f+\x16-tC\xcet\xef\x8f+\xdc\xf8&o\xe9\x05pnC,\x90\xc6\x1b\xd7\"*\x81\xe5\xe05\x1a\x1d4\x8b\xafB\x1cT\x90q\x0b\"A\xd1-\xd2q\xb3\xb4\xdb`\x04-\xb9?\xce\x112\xf3\xd4\x0d\xf1\x937\xbdQ\xceZ\x9a\x7f\n\x9f\x08\xf2\x9dl!~\x1a\x87\x1c\xcd_z2\x87H\x1fN\x97\xfc\xcf\xdc\x82Qq\xaeElT\x15'\xac!vxi\xd8j\xde\xbe\x1d\x11\xe5v\x98\xc0m\x13\xe90\xa53\xa9{<*$d\xad\x8f\xc5\x7f\xf2\x87<}\x99k\x01\xf8\xa7\xb6\x0c^\xf8<\x01@hW.\x9b@\x16\x9c\x03g\xa6g\xc0y\xd5k\xcc\xa4y\x08\x0c!\xa6\xaf\xc0\xa5\xbeY\xe6)0\x049\xc9\x1e_\xc4q\x1a:4\x05\x05\x86\x84\xc2I\xb7\xcfQu'\xdd\x8e\x94\x93n\xff\xaf\xaf\xdb\xd3|\xfcI\xbe\xe9\xa4\xd3\xa0%jra\xbe\xf5[\x86\x93\xa1-\xcf:%\xca2\xb91?~\xfa\xa5vu\xd23={\xd4v29\xfc.\xe8\xe1\x8c\xb3/\xc2\x9aE>\xfa\x06N\xaeq\xc7i\xae\x13\xebx(\x9b\xd1\x08\xe7eZ#\xfe1\x86\xc1\x17\x88\xa8\xce# \xfd\x07FI3\xd1~\xfecB\x9fi\xf4\x9e\x04\x1a\xcd\x85\xcd_H\xe3\x19\x1a\x8a\xd9\xd4\x9dY\xc2\x98q\xbaN\xeb\xf5!Kj)E\xa7:\x9bHa\xe9|\x9ct\x95\xfd+\x8bV\xceQ\x1b_$H\x99\xac\x1e\x16\x04'\xad\x150[\x0d\x18\xcb\xce\x10\xe76tF\x03g/w\xbc\x9b\xd9\x968!49\xe4\xc2\x91\xe7\xbc\x9f;3>P\xd6\x97\x9c\xc9\x949a\xc64\x04z82\xfd\xec\x98\xa8\xd9\x80\x1b\x0d=\xca\x85\xe9\xdd\x0f\xc2\x9bYF\xe6K?\xe7e>\xb6\xcbl<\x97^\x86\xcb~>\xb7e.V\xcb0\x9f\xe5,&\xcb\xd9\x1c\x96\xa2\xbf\xd3\x93\xb1\x97\xbdr6o%\n\xdd\xf10V.\xe1\xaa\x14\xbc\x94\xd3\xde t*s\xf8)\xfd\\\x94\x0bY(I\xfc\x93t\xae\xc9\x05,\x93\x0b\xf8%\x11\x85\x91\x91E2/\x7fd6\xe6\xc88gd6\xb6H\x1fO\xe4\x12\x86H\x94\x0d\xb2\xa7\xf0@\xcee\x80\xf4\xb2=\xce\xe4yD\x18\x1e\xbd\x1b\xa5\x17g\x11\xdeAg29\x8e\xac\x8d\xd8\xf8\xfe&^\xf72\xdeF\xc9\xd3h\x88s\x19\x1b3p5.ci\x9c\xcc\xf2\xe9f\xb8\x90\x99Q\x0d\xb4)q \x07c\x90`\xd0\xc3\xbb\x18e\\t\xc9\xd7\xe8,\x8b\xee\xbb\x7f\xc7\xfa:\x8bS\x91\xd2\xd9\x18\x8f\xa2\xbfoQ\xee\xc4\x04\xd6D\x9b`j!Sb\x90#\xd1\xcf\x8e\x18\xe2EDG\x81\xca\x85\x18cA\x9c\xf2\x1f.`>$p\x1e\xa6\xb3\x1d\"\xdc\x821\x86\xc3L\xdc\x86H\xcd\xd6LY\xc4d8e.\\\xc2Y\x88p\x14.b'\x9c\xb2\x11\xe6\xe4!\xf42\x10Ni\xd9\xa6\xac\x83y\xf8\x06\xb31\x0d\xe6\xe5\x18\xa4\xb1\x0bFy\x05\xd5)9\xc6(\xa8\x1e\x0br :\xa4{nmTV\xb80s \x913\x90\xc0\x16h59'C\xe0\"n@\x97\x0b0\x1f\x0b`>\xfe\xbf\xf9_7\xca\xf9\x17c\xfb\xd3\xea{\xca\xf0'm\xf0){\x9f\x8f\xd5\xcfo\x03gd\xf2C9\xfc\xa6\xec}VKr\xf0\xf6\xa1\x87\x91)W\x1f\x85\xa5/\xca\xcf\x17g\xe6\x0br\xf2\x11\xd9\xf8\xa6<|h\xff\xacQ\\\xce\xbd7\x06\x9d\xa7\xac{\xf1\xda\xad\xd94\x154z\x81\xd38\xf6\x069\xdd\xd8\xc4\xb1N\xbc!\xc6?,\xe7\xb3\xf9\xf7(\xa3^Ow\"\xa3\xfcy\xde\xa3\xb1\xd5\xd4\x0c\x9cy8[\x1e\xadz\x17z2\x9b\x1b\x0f&\xf9#\x80\xb2\xe2\xa1|x\xb4\xb6\xce\xe1\xc0\x0b\xb3\xdf\xd1\xea\x9dIm\x87\xd1\xd8\xa1\x04v\xb4V$\x91\xd6\xf9\xe9\xea\xd0\xca\x08\x01Lk\xa2d\xa4\xa5\x9b\xee,(!\x9d\x8f\x8a.\xd8\x99H\xe0\xd3\xd3\xa1>\x91rn\xec\x80!.H6\x87\xd1\xccMC\xb23\x08\xe6\x12\xd4U\x98N.\xac\x1f\x16P\xc8 \xb7\xe3D\x1c\x8d<\x0e\xed\x1b\x04\x93yqZ1\xefR\x83h\xc7!+1\x9c\x8f!\xccO\x06\xb7\xb0\xe9\xe9\xd4o\xe8\xcc\xd6%\x8d\xf4-J\xf7\x96\xa1s\xc9\xe4n\x88\xdb\x1flb;\n\xad\x9b\x97\xd0\xcd\xdb\xa5\x04\xa0\xea\x1c\x9e\xb6)'[\x90\x8d-\xd1\xa6[\xc2\xbd&\xfe\xfa\x1b\xb3\xa3v\xf6/^kN\xa6\xb5\xe5\x1ck:\x0e\xa7\x04\x8eA\xeb\xa5\xbcj\x13.\xb5\x85,j\xa3\xd1\xaf\xe4\x8d\xfci\x8b\x99\xd3\x14[\x94\x127r\xa6edK\x9b\xf0\xa4\xe5dH\x8bp\xa3\xa9\\\x1a\xde\xf8Uq\xb5)\x87l\x9a\x97\xdf\xbe:\xffI\xfa\x0b~ln\xc8)5\xbb\xeef]\xd6[v?]qe\xdd\xb3\x1b6*V\xcc\x00\xabtE\x80/Tv\xc7\xea\xfe\xc8 \xb5\xe2q\xeb/\x01\xc5V\xf4}[^\x1d\x10~Z\xaci\xb2\xa0\xc8\xcc\xc0\x86\x0fQ\x96X\xe4\x9a\\Y\x82{L\xe0\xfa\xba\xc5\xbb\xd3K=.\xe6\xc1a\x18,\xf8\xdc\x16\xfb=Wa\xb7L%c~b\x0fB)\x89&!\x02\x8b)\xeb\xa2,\xb2\x81\x1d\x94u\xd7\xb3b+\x08\xdd\x8a\xcf\"\x02\xeb\xbfr}\xc2w\xf7A\xc8x\xc3\xa7\xd6\xd0ZV\x83\xfc\x83\xceH\xb3\x1a\xac\x89\x02\xc7\xafo \xd49H\x9f\xd8\xc33\xe9u\xde\x17e\xdbI\xd7 \xd7U\xb4V\xfb\xdb,\x9af\x12\x17BW\x95\x1b\xb1\xc1\x9b\xadV5~\xe6Mf\xbb\xb2\x17\xda\xe7 \xdc\xbb]c\xed\xc1\xec\x9em\x0e\xb1}\xc9V\x08\xc6\xe6\xd4\xf5\xeda#N\xc6\xaaE\xc2\xb0\xadA\xa8\x01n\x1e\xde\x8bw'7\xfeU\xcdMX\xff\xe8\xc1%\xab\x1e$\x1f\xce\x9a\xc0\x93\xe9\xee<\x81\x0f\xf8\xb2\xa9l0|\xc6\xbe\xbaw$\xbe/\xba\xf3\xfa\xba!\x8f\xc3M\xd1\xad?\x17u\xef:L=\xc7\xc6C\xe0\x10\xfc}\xd1\xfdQ\xc8\xd2V\x8f6.\x0fu\xd9\x8bp\xf8\xe7\xa6\xfd\x04\x9fU\"\x8f\xdcm\xfb{\x11\x97g-\xafae4\x8b\x1f\x87\xf24\xea\xe7nl\xd2\xb8\xd9\xdep\xa3u\xd3\xcb\xc4\xb4MS\xab|(L\x00\x1f\xd2\xd1j\xbe\x1f\xd7\x80\x10\xa2\x12\xce\x82\xdf\xe5\xbd\xb0\x8c\xc8\x9fe[\xf4\x05\xb1\xefV\x06\x89_\xdb\xbe.\xfaB\xe4}\xd5\x0fB:\xb4\xac?\xb4\xb5vQko\xbfp4\xd4\xdb\x8a\xb5\xc6B\x87\xf3\x1e~\xfa\xf9\xc3\xa5!\xceN\x9a\xa9X}\xd3\xdf\xc2\xbee\xd7\xe5\xbd\xccD\x15\xa9\xe8\x02s\xc4\xf8q\x9c/ ^\xab\xacL\x9a\x19\x0c\xb9\xd7s\xa8tPn\xb1}~\xd2i\xaenlTps\x03e-G\x8b\x7f\xb1xw\x95\xe0\x93\x01\x91\xd5\x80\x08\xe4<\xc92\xd7\xc2\x80\xb8\xe8\x89\x91i\x16)\x1a\xbf\xdbI\x16_\xa4H\x97\xb8\x85#6\xdaqo(\xbb\x11\xc6\xf1\x89=|5\xee\xfb\xfc \xdd5\x9b\xb2\x18O\x18X\x9b\xc4\xcc\xf4\x9a,\x93&\xc8]^(\xdc\x0e\x8a1\xa3\x12\xb6\xec\x8eU\xfcK\x0b\xffS\xd1\xf7\xc5\xe6\xd6\x0cG\x1b\x8b\xc6\x9e\xb3\x93\x84\x0d\x8da\xfc\x96\xdd\x94\xf5\xb7U\xb3\xf9t6\xfc\xedM\xbd\x9d\xfc\xe5\xd5-\xdb|\xba\xbc\xe7\xbb\x1e*\xe55\xab\xca;\xd6^\xdeO\x12b~,z\xc6\x0fdmQw\x85\xca\xbf\xda\x15\x0f\xfcx\xa39\x98\x0f\x9d\x00\x86\xdc\xb2\x8e\xa9\xc5\xeb1\x90~\x97\xd5@2di}f\xfc\xc9\xafa\xac&\xc9\xfd\xc1\x80\x97\xc8s\xaf\x1e\x95\xef\xc4\x97\x10\xa6\xc2d \x83\xbb\x8ea\xae\x92\xb7\x1e[%!+\x0fSC\xc7\xd0\x8d\x88\xa2\xf1\xea\x01Twx\x9e\x0e\xd9\xf7\xd9\x0c8Ybf\x9c\xaf1\x19\x8f\x19\x8b\x0f\x18\xde\xc9uy\x9fLu\xb5 \xda\xa28\xb0/o\x19\\q\x8d\xa2d\xe9I{\x7f[t\xb7)v\x02\x17d(\x13\xe0\xef\x8f!\x88-\xeb\xf6E\x14\x0c\xa5\xda\xf4\xb6\xd8\xc9\xc7\x87\xa0\xc7\xabf\xcb\x0cYS1\x14\xf7\x86\xab\x1f$P\x9c\xcb\xd3\xed$X\x89\x96\x90\xc7J\xcb\x88o{\xa6\x93\xff\x1e\xab\x87\xdb\xe2\xf3:\xd1\xd8\xb2V\x0f\x1f\xd1\xe6\xd0\xef\x0f\x03*\xc6\xd8m\x1ew\xdc\x10\xbba-<\xe1\xb3K\n}\xba\x82\x9f\x84\n7\xa4\xd4M\xfd\xd5\x96\xf5\xac\xdd\x95u\xd9\xf5\xe5\xc6\xb0\x03\x8f\xacp\x10w\x94)g\xfa\xd5d\xf1#\xa3\xad\xb14\x05!\xfakjk\x9a\x8f\x7f\x19\xb3\x0e\xb3D\x8d_\xfc\xc6\x97\xdf*5_\xc7:!\x8b\xa7+\xb2\x04;$K\xb8[\xb2xmVY\xa2\xe6%\x84\xcdSY\x08R\xe2\xa6\xa2,s\xb7\xa1p\xe3}\x8e1Yb\xfb\x80]\xe2=\x99\xbd\x87\x05\xe7\x18\xd6\xfe\xc5[\x9cYb\x1d\x9bo.\xbach\xf8\xd7\x9c\x1f\x9d\xe3(D\x1a\xb7\xd4\xe5f \xd3\xe7c\xe5x\x8b\xd5NU\xfd|\x89l\x93\xb4~98\xb3\x80\xb4#\xbdD\xcf/\xbaF\x7f=\xc9~\xb0\xc0^\xfd\xd2r1\xb5\xf26\x10\x0d|\x1aM\x8e\x99\xbe.r\xc5\xda\xa5%\xa2Gn\xb5\xbd\x13u!%G\xf4'@\xf0 \x10|\x02\x04\x9f\x00\xc1'@\xf0PN\x80\xe0\x13 \xf8\x04\x08>\x01\x82O\x80\xe0\xc0\xbb'@\xf0 \x10|\x02\x04\x8br\x02\x04\xabr\x02\x04\x9f\x00\xc1\x0b \xa3'@\xf0 \x10L\x00\x04\xf7\xe5\x8eu}\xb1\xdb\xa78\x12m\xfff9\xba`\xf6-\xbb+\x9bC'\xc3\x90+\xf8\x8e\x9f E,\xb2\x83\xdf\xc1\xd7gP\xf6\x8f\xe5\xb0\x7f\x16\x7f\x15Sd[Z\x89\x1c\xf6]\xdab%\xeb6\xda\xd4\x7fp\xd7\xf4\x835\xaaj\xfc\xb1\xe8\xfaW\xcdnW\xf6f\xe5\x96\x82\x83\xaf\xcf,5\xcb[\xc4\xad\xd1\xae\xecDMH\xecy\xe8\xef\x18\xd6\x8d\xf9\x90\x87\xab\xe0\xfa{\x99\xdc\xc5\xe7\xfb\x94X\xf5rt\xa1\xf4\xc5Mg\xf8\xe3\xe5V\xa1w\x1a\x91\xa6\xd5\xc99\xbae\x82\xd0\xd0\x88>o\xda\x87}\xdf\xacD\xe2XW\x8e4\x8e\xaf\xf8\xf9z\xd3\x7f[\xf6/\xdb\xb6\xa0\x13\x98\xb2\xfb\xbe-\xd6We\xdf\xad\x05\x1d\xab\xe3|\xa5\x84hYeE\xae\xd09\xe5\x1c\xeb\xf0\xf8\xe9\xa4\x1f2Qoz\xd8\x94l\xb1\"\xd0<\xdc\x8b\x0dWe/\x83k\xe3\x80\x97\x02bpP\x97o\xb3\xba;\xb4l\xf0\x9a\x0dl\x91\xe2\x8b\xf5\xc5'\xd6 \xb7\x94\xc4\xa1\x98\xd8\x10%OV(\xf7q\xb1*\xa5\x04\x03\xb1\xa7k\xe4\x07\xfa\xfe\xb6e\xc5\x16\xba\xe2Z\x9f\xf5\xe5\xdf\xf9x\n\xc0\x81@\xb45\xb5\xf2,\xc0A\x1e\xdb\x86\x0f\xdd\xdf\xaf\xba\xf2\xa66\xa9:?\x947\xf5OC\x14\xdd\x19e\x13\xc0\xfe\x15|8\xff\xfe\xed\xfa\xa7w\xaf\xdf xq\xf3\xd7\xd7\xe7\xef\xdf\xbc\xbaD~\xb8|\xf3\xff^\xfe\xfc\xf2G\xe4\x97\x1f\xdf|\xff\xf2\xd5\x9f\xd6/\x7f:\x7f\xfbn-4\xb9\xfc\x9e\n\xab\xee\xaf\xd9\x93\xe3\xa1\xba5\xea{\x99\x16&:\x0f;\xfe\x8b\xf48\xf4\x1d\xf0\xcdd\xc0\xcd\xde\x1c\x8a\xb6\xa8{\xc6\xba\xd1\xbe\xf6t\xdc\xd3\xaa\xe1\xf4\xaf(U\xe5neU\xcd?\x9d\xdayT\x1d-\xe3\xebit\x18\xb8\xa3\xf9\xdc\xf9\x8bY\xd1\xa4kb\x8b\x12\x06\x15\x1f\x88\xd7\xcdF\xcd\x16%\xfe\x8e\xb5R?H~W\x1d\xad\x93\xd9\x9b\x97\xf7X#\xd4\x97{\xee\xfeIf\xdcI\x0c\x91\xdd\x0c\x19\xa4\xe3\xfd\x14\x15>\x98\xc9\xee\x13\xa0y\xcf\xee\xfbCQ9\x86\x1e\xdfF\xf7Zi+\xb7\x9f\xfd\x8c\x92'\x9a\xee\x99\x81\xe1\x89\xf6<\xf4\xa3\xec\xdcU\xb1\xf9\xf4\xb9h\xb7\xdd\xc4\xe58\x19lU\xdd\xcb]Y7R\xd7\x1a\x1f\x1aZ\xb6k\xeed\xfa\xae\xb4\xea\x05\xe8\xca\\\x9bC\xc2\xfd\xa1\xbfM\xca3\xe7\xa3\xce\xdauY_7\xa9Y\x1c\xff\xff\x96]?\x87\xc7\xff\xbfg\x86\xc3\xfb\x99\xdb\xa4\x0f\xa2\x06\xde\xa8\xc7\xc3\xcb\xfe\x1d\xddl\x8f\x85\x874\xa7\xc7\xc8\x7f\xd0\xb2_\x0ee\xcb\xb6\xea\xbdN\xf8z\x0dq\n\xf5e\xfc\x85\x8f\xab\xcc\x81n\xae\xc5N!\x16\xb8\xf0\x99\xef\x8a~\xb8\x9c\xc6\x16\xab\xa7\xf7\xb7\xcd\xf6\xe1qg\x1f\xbb\x84\xf1%+\x96v\xb8\x96\xaa\x93\x06\xf7m\xb9\x13\xee7!k\xd8X\x9b\x9a9\xf1\x8d}\xf1\xd0M-\x90k68\xfe\xae\x99\xe1\xb5\xf4\x8f\xe1wl\x80]^3\xa92n\x8a\x0e\xaarW\xf6\xc3\xc8\x99\x91G\xa3\xed\xaa\x91\x16\xd6}\x12m\x89\xf5G\xf4bh\xba\x94\xcd\x98\xc2\xbc\x19rF\xf4\x9b)\xddB\xe0m\x1ays\x14\xe3\x16\xa5\xc4\x10\x8a\xd5\xdclev\xdf\xb6\x11\x81z\xcd\xea`\x88\x91zJ\x86$L\xf1\xdaE9N\x97\xb2\xd3p<\xd6\xf5\xe5N\xf8\x05\xefJ\xae\x16w\n\xe8\xb8\x9a\xac\x0bR+\x02?\xfd\xbdn\xcf\x13\xa9#\x0f\x9d\x0ci\x8a\xbfnUxON\xe4\xe9`\xeb}\xfc\xa9SS\xc7z\xa5\x07\x87\xb7\xb7\x0d\xeb\xe0\xb7u\xd3\xffVE\x14\xa5>\xe6\x9b\x9c@]_\x0f\xf3y*K\xefn\xc8\x9e`\xceSa\xd6R\xbf\x9ao*\x96\xd7\xe3\x10\xf3\xfd@\x0e\xd7\x13V\x0el]\xd67\x1ciJ\x0e\x9e\xcc\x12)@\x0c\xc1S\x9d\xcd\xa3\x93\xcbD\x0d\xa2\xdd\x03\x81\xc7\xf4\x8b5\xe2\x8b\xf2\xafi\xe6\x9fY\xad{,-|u\x9d\x02\x9f3.\xee\xa3\xd8sm\xdc\x96E\xcf\x8cJ\xc5'\xe1\xe7+v/.?\x94\x9d\xd9\xdc\x16\\#6n\xba\x1c\x7fT\x07\xbf\x06)\xdd\x99\xfc\xca\xc2\x0c\xbc.\xcaJ\xbc\x84\x9fZ\xf4\x84\x99\x84\xe5\xf4\xfe\xaf\x06U\x1aOC\xfe\x9d>\x8a\xf2_\x87\x04\x88\xc9$p\x0d\xbao\xdb\xa6\xd8n\x8a\xae'\x1f\xfe\xbe}\xff\xee\xe5\xebW/?\\\xfaO\x80\x93G\xbe\xfd\xf1\xdd\xab\xff\xe3\xfb\xf1\xc3\x9f\xde\xbe\xf2\xfd\xf6r\xf8q$+\x0b\xd7\x8ek\x19\xab\x93\xc6qI\x98\x1f\xfa7i\xc5\xeb\xd5sy\xff\x81\xb5w\xe5\x86\x8d#\x04\xef/tK\xe5\xaec\x9e\x0c\xfd\xedz\x0e\x7fem\xa3\xf0G\xc2\xc5\xc7\xeb\xd1\x0b\xda+A\x0c\x9a\xd3_\xf1Ws\x1b\xbe\x1f;`\x1c\xfbt\xc6\xaa\xbch\x0c>\x17\xfc|;\xde\xad&\xd4\xc3\xbd\xda\xd0\x04}\x87@\xda\xc8K\xcd\x84\xfb\xcb\xdb,\xfeE\x9cV\xf1?.nT\x01\x1a\xb54\x02?\xf5\xd5h\"\x10\xe2o\xd4K\xb4U/g5K\"6\x07v\x8d\x9dp+\xf6LV\x1fX?\x97\xf7\xef\xa5\xd6\"\x9f\xd6\xfa\xfb\xb58n\xa7:\xb7`:\xcf\xb5 m\x16\xf0\x83<\xa2\xfdw\x08HbR\x17\xc2S\x18[\xed\xe8c\xe6\x8aG\x1f0V=\xfa\xfbK\xeb\x01\xea\xea\x87\xa0\x9d\x91G\x0b\x18\x02\xdf_\xbcr4\x01\xda\x9bdm\x80J9\xa6F\x80$\xad\x806\xefx\x9a\x01\x92\xb4\x03\xda\xb8\xe3i\x08p\xb5\x84o[wu\xc5\xb0b\xd5?ExKO>g\xea\x0d\xaf)y\xe6\xfc\x8b\xea\xa6D\x10Y\x7f\xbfn\xadw\xd0\xf7\xf0w\x01\x01\xa1\x01\xe5,\xe4=\ny\x00i\xe2\x89 (\x0d\xc8\x87\x90\x108\x0dp\x80ZP8\x05\xa8\x06\x0eXm\x14\x89A\x9f\xfc#\x13\x07\xae\x89\xa7,\xf0\x1a\x90\xc7&\x0cb\x03\x0c\xc8F\x17\xfe\xb7\xe9i\x82\x8al\x08\x83\xda \x04q\x00\x07\xdc\x06_\xc8\x87\xe3\x05\xbcA\xf0\xcb\xcb\xe2\xff\xfe\x80\x83\xdf \xec\xe5\xf1\x81\xe0 0\x18\xb2\x04\x10d\x81\x81\x91%\x8e\x1e\x13\"<\xbfE:$K\x0c \x07\xd1\x0e\xca\x12\x04\xca\x01\xa5\xb3\xb2\xc4\xbb,K\x044\x07\xb4\xde\xcb\x12\x05\xcf\x01]Z\xcc\x1dh\x969@\xba\xa0@\x1b\xeb\x1d|Tv\x84\x86:\x93\x85\xd6\xb3\x9c\xc0:\x88\x82\xeb`>\xc0\xce#\xcd;\x00\x94\xeeg\x84\xdf\xf1\x12\x84\xe0\x81\x0f\x86\x07\x84\xc6f\x85\xe3\x81\x0f\x92\x07\xd1\x96P7\xb0\xde\x07\xcd\x83\xd8\xdeeC\xf4\x80\xbc\xd7\xce\x85\xea\x81\x07\xae\x17\xac\x99h\xad$B\xf7\x00\x85\xefA\xf6\x86D\xa0|\xa2\xc2{\xac\x01\xc8f\xe0W\xff=\n\xed\x83\x98f\x8e\xad\x84\xac0?\x08B\xfd +\xdc\x0frB\xfe \x04\xfb\x03X\x04\xfd\x83\x8c\xf0?\x88B\x00a.\x0c\x10\x96@\x01\xb1\x11{\xf8\xff\xd8\xfb\x9a\xe6\xb8q$\xed{\xff\x8a\x8c\xbex\xde\x08[\x8ewn\xeb\x9b\xbf\xd6\xeb\x98\xfeZK=\xb3s\xd2P,Hb\xa8\x8a\xac&A[\x9a\x88\xfe\xef\x1bD\x12$H$>H\xa4z6&\x80\x8b\xad\xaab\x12\x00A \xf1 \x13\"\x832\x81\x9c\x9d\xc9\xf0=\xd8\x10\xc2\xe7\x0f\xd0\x84\xf8 M\x88\x0b\xd4\x04\xaa\x19\x9c\x01\x9b\x90\x1a\xb4\xb9\xb2e\x85p\x02k\x18'\xb0\x86rB\xf2x\x08\x86tBDX'\x18\xa1\x9d\x00dx'D\x83\xd06^\x9e\x14\xeai\xcd\xe1\x87\xaa\xa8W\xe1\x9e\x00\xa9!\x9f+c\xe3\x11\x82V\xd8'\xb8C?\xc1\xdb\x0fi!\xa0\x86\xa1)\x18\xd4\x0c\x03\x1d\xca\x9eP\xd0(\xed\xcaX\xedI\xbc2\xfe-\x0d\xf5\xcax\x19\xa1a\xf1JV\xfeS\xc4KT\xd6a\x0e\x92\xa0wS\xb3\xd5\x92\x01\x18\xceAO\x07^8~\xee\x93D\xec\x0e\xb60\x8d\xa4\xc4Y\xe8\xb8\n\xd3^|HEb8\x05\x11JA\xf6\xa1#\x84\x82\xd2\xac3\x85N\xd0a\x13\xb1!\x13\xabp \xb2M\xee\xf9\"9DB)\xf6\xcdWaGx\x84d\x0c\x8d\xa0\xc3\"\x92B\"t\x10\x84a\xcf\x13\x0ea\x85B\x90O\x84\x1aN\xac\xe1\x0f\xfbC\x1fv\x87=\x98\x81\x0ef_\xed\ny\xd8\x1b\xee0\xf5\xa8\nq\xac\xcbc\x7f\x10\xf4T\xa1&\x89\xaa\xc6\x86\xea\x05l|\x83\xbf\x9b'\x0d\xe3\x84\xd7\xf10?;0R9E\xa0\xf6[j\x1e\x14\xb7\xb7\xa2\x94\xd5\x84\x83~\x7fWt\xe7\xb6*\xc5\xf7\xd3*\x8f\xd3\xe44\xde1\xb3[s\x12p\xaaNU\xdd\x9f\xc6\xdbjNn\xe6\xd5N\xe2tn\x9a#\xbd\xd2}\x12\xfbd\x99\xf3h\x8d\x0c\xd9\xbdzt\x84\xea\xcaG=\x19\xea\xb3=\xc8\x04\xb6Y\x07\x9au\xa0Y\x07j\xfd8\xeb@\x1d\x17f\x1d\xa8Y\xc2M\xc6\x92u\xa0D\xc9:\xd0\xac\x03\xc5+\xb3\x0et,Y\x07\x9au\xa0Y\x07\x9au\xa0Y\x07\x9au\xa0Y\x07\nY\x07\x9au\xa0Y\x07\xba(Y\x07\x9au\xa0Y\x07\x9au\xa0Y\x07\x9au\xa0\x90u\xa0Y\x07:\x97\xac\x03\xb5J\xd6\x81f\x1dh\xd6\x81f\x1d(\x02`Y\x07\xea\xd0\x81.\xd4*^\xe1\xe7$\xf9T\x97x\xc5\x9e\xea\x17\x9db\x92v\x08a\xac\xbc\x89<\x19\xee=r\x99)\xc1\xe2\xb1\xc2L\xe6\x84n\xa6#\x843[kj5\x1f\x8b\x8bK\xa0$6^\x88\xc1'&\x08\x0bmh\xa9\x8d\xf7\x86\x9b\xe46N\xc1\x8d\xf7\x16\xb1\xa2\x1bJv\xe3\x97_\xf8z+N|C\xc9o\xe2\xfb+,\xc1q\x88p\xe2oa q\xe2\x99\xcc\xb0\x14'@hRr\x1c\x9fD\xc3!\xccp\xbc3X\xfc\"\x0c\xaf0\xc7?6\xb0\xf8\xc59NyNP\x83\xe1\x96\xe8\x845,^\xfd\x8a\xb7\xb3\xb0\xc4\xe8V\xa4W\xac\x13l\x1e\x96\x18\xc1N\xb8\xb9X\x82\xa2\x9d\xa8\xa6c\x89\xe9\x00,\x11\xd2\x9d\xc8\xbe\xc0\x12%\xdf\xd9`1\x0c\x19\x9be\xab\x88'\xdc9[d<{\x84<\xf1-\xdc%\xe6q\x0f\xffaR\x0c\xcay\xb8\x05=\x1eIOlG0\xcbz\"\x84=\x1eiOL\xa5\x13\xe4=\x0ekn\x81O\xb8>\xb1K\xa3\xf4\x89|\x82\xab\xa2-\xf4\x89_\xcfS\xc4>n\xb9\xcfn\x9f2U\xf4\xe3\x92\xfd\xd1\xd2'Z\xfc\xc4)\x7fb\x16@=\x87\x04j\x8b\x08*R\x06\xb5I\x08\x15/\x85r\x88\xa1\\\xf2\x97x\x01LX\x10\xb5I\x12\x15-\x8a\"\x1b\xc4-\x8c\xe2\x95F9\xc4Q\xdc\xf2(n\x81T\xfa\x18\x89\x12I\xc5\xc9\xa4\x96B)\xa7T*\x1e\xc6\xa7\xb8\x07N\xc1\x94G2\xc5,\x9a\xf2\xcb\xa6\xbc\xc2)\x7f\x9f\xb0\x89\xa7<\xf2\xa9\xbd\x02*\xab\xee\xa6$\xc8%%\x9a\x1b4m\xec\xcf\xc5\xdd\x98\xee\xed\x0dmw\xfe\x81\xc9\xd9\x1a\x9fj-\x8c\xbe\xfb\\?I\xf1\x164cQ\x8bGymq\xdd\xce\xb1\xec\x04\x13F\xa5\x8e\xa59\xd1\xf6u\xcf\x0c\xff\xd59\xe2\xba\xf1l\xeb_\x8a;1\x9e\x81y\x81\xdf\xaf\x8c\x0c\xdd\x88\x99\x9f\x06sC\x1f\x0885\x9d\x04\xa1\xf0&\x05P\x19\x97\xc8F\x16\xc7\x8d\x0d\xdap`\xbf2\xaf\xda\xa3\xfeS\xf7\xa7\x1b\x04>4Ji@e\xeb\x13\xec\xcd\xa6\xaa\xccl\xd7\xca\xc8\xfa\xdd\xf9Vt\x98\x8a\xac\x92\x9d\x06Z;\xe8k\x1c\x08\x07\xc4\xaa\xbeU\x1d>\x03Z\xf5C\xe8\xf0\xe2$~W\x8f\xdd\xbb'd\x93GS\xa1#I\x7fl\x0e\xe2\xf3\xc4lZ\xa3\xcf\x1ey]U\xdf\x1d\xcd\xd4S\xd8\xd5\xf8\xf1\xbc\xda\xa9\xd7\x1e?\xc3\x9ck{F\xf8\xc9N\xc8\x84wS\xe7\xc0\x8e=2\x98\x9f\xce\x86\xd5\xd8\x0eyg\xf0\x8d\xa6\xf5I\xcb\xa0N\xad\xbd\xfc\xfc\xe9'\xdfA\xcb\xeb_}\xf8\xfc\xe5\xe3\xfb+\xcf\x0f\xae>\xfe\xcf\xd5\xafo\x7f\xf0\xfc\xe2\x87\x8f\x9f\xde\xbe\xff\xfb\xf5\xdb\x1f?\xff\xf4\xf3\xb5r4\xcc_N'/\x87k\xe6_\xba.\xab\xbbZ\x9d\xbb\xbczdFg\"\xdc)1_]'\xca\xbe\xad\xe4\x1ah\xba\xeb\x0b\x95\xb4o\x95\x96P\x15G\xf79\xean\x1c\x00]\xd4\xd0\xd7\xe8z-*4\xcc\xf0\xa3\x03\xb5\xbaW+\x86\xe1d/\xa8\xf6\xb3yc}b\xdex\xd5\x01\x9a\xd0\xeaTw}hJ\x84\xbd\xd7\x14\xd1W\xd1\xe2\x12\xa4zlR\xc7\xc0m\xdb\x9c\xe0\xca\x92<\x10\xe3\xe1\x8d\xfd\x91\xe2\x8b\xe0\xb6W\xeb\xe6\xa2Z\xa8\x02\x19\xfaA\xdd\xf8 u\x1e\xcb{\xdc\xf7\xa7\xa2~\xd5\x8a\xe2\xa0f3)\x1ee_\x1c\xad]\xd2\xe0\x1f\x9e\xf5[\x83L\x88\xd5\xb3\xe6\x15\xebg\xacZ\x18\x18\xfe\xfe\xd1\xfd\xc6\xf7%\xf6\xc1MQ>|+\xdaC\xb7\"iV\xcfhu\xdb\xb7\xa7\xaan\xd0\x0b0\xc6\x0d\xb4\xe2\xd4|\x1dS\x8a\xaa\xdd\xf6\xd0\xbf\xe3\xa5\xa7\xfe(\xaby\x12\x88\x14(\xeb)\xf4\xe2\xc7\xe1\xf2\x17\xeb\x99Q\x19]\xbee5*,\xd47]ug\xceS\x8b\x97V[^\xa1\xd8\xeb\x19o\x9ai\x9b\xd6a\xda?\xf7c\xc5\xa3W\x80\x9bJ*\xdd\x9f\xb5\x06\xe8/\x8c\x17\n\x9f\xce\x83x\xea\xd4\xbb1v\xfaT\xbbb\x1e\xda{\xd6\x07\xf1(\xdb\xe2\xfa\xa6\x92\xddu'\x9b\x96\xceB\xb3%{\x9f8Zz\xc5\xa0\xfb\xb1\xf0\xa7\xdcs\xee\xfba\xe8\x96\xf2]%\xdf\xaa>\xc2\xac\xbf+2 \x1f\xa6\x92KO\xfe\xd1\xd0\xad(\xb4\\\xcc\xb0J\xc01x\x16\xa3'&\xea\xaeo\xc5D\xf8\x83\xa8\x95\xe7\x8b\xae\xb5,\x1eD\x87\\\xf9\xa9\xaa\xabSq\x1cSz\x1a\x06\x97{\x0e\xac\x04\"NjW\x86\x06\xab\xfa\x8e\xacE\xdd\x0cw\x1d\xa6\x1b\xe8\x8a[M\x0f\xe2\xe7\xc3\x03\xa8\x0f#?X6\xf5HLB\x8f\x9c\x0b\x1a\x1a\xc6\xf2uU\xdf6[\xb5\xf9\x1b_R\xeb\xf5\\\xb8\xbds-\xb4wQ6-\xba\\\x07\xfd\xc6u\xb3\x93\xa1R\xdb\xea?\xf5\xa06\xcci\xac\xa8W\x99vU>U\xeb\x05=\xf77\xc7\xaaT\xaf\xc8wF\xb5\xd4+9\xe5FV\xee\xce0\x11\x0c]XP\x17\xfb_\xf0K\xc3i\x8bx\xc3\x97~W\x92\xcfE\xbe>k_+\xecgy},\xbf\x7f\x15\xe7[E\xfaU\xee\xf7{\xaf?\xe5\xf4\xa0\xfe \xef\x89\xf2\x9c\x9e\xdfk\xda\xe01=\xb7\xb7\xc4\xe2)\xb9\xbd\xa4\xa0\x87\xf4\xc7{G\x9b=\xa3\xf5T\x89\xd3\x89kvZL\x04\x17\xf0Y\x89D&\x08hL.\xbf\xa4\xf5e\x83\xfa!\xb4\xb0\x82\xde;\xe8\xfa\xf2~\xb8\xec\xd8\x94\xc5\x98N\x9d\x18\x00\xa6\xb6e\xaa\xbc=)\xfe\xdc\x1eD\xfb\xee\xc9\x9c\x0c\x8d\xe9\xc9\x9c\x9a^\xc1\xcf_>|\xfcr\xfd\xee\xef\xc4\\`|\xf9\xf6\xf2\xbd\xfd\xe1\x87\x8f\xe3\xa7\xd3\xcc\xe24FO*\xf4\xddi3\x8e\xb7\xbfi\xe5<\xed\xaa\xf4\xec\x1706_WK\xe9\x91\xde^\xbe\xc7\xee\xab:(\x0b\x03\x8eZ6\xf2\xcd\xe2\xaf\x19\xda\xeaJ\x81\xcb\xa3\xba\x05q\xed\xd0\x17o\x96\x7fNW\x0f\x8d\xb7.\x1f\x07\x9cQW\xf5[\xb5\xcc`\xa3\xa6\x1f\xdb\x0f\xf8R\x0d\xbcM\xa0\x06\xae\xa3K0m\x83\x1f*I\xd5\xb0\xd3s\xf4o\xcc\x195\xc2nu0\x9f.\x98M\x11\xec\xd4\x02\xcb\xfd*`.\xfd\xaf_\xf9\xbbK\xf3\xbb[\xed\xab\xda\xbb\xde\xec:u\xbe\xbb\x15\xbe\xb8t\xac\xac9\xb4\xbd)\xaa^\xb5+Y\xb7\x86 \x9e\xf7(y\xdd\xaa\xddD\xbdn\x94R7^\x95\x9b\xa0\xc7MP\xe2\x12\x13\x06\xa3\xde\x96Wi\xcb\xa6\xb1\x0d\xabk\xd9t\xb5.Em\x8a\x96\x96\xd4\xcd\x12\x84\xaa=\xdf\xec\xd5\xca:u\xb1;\x15\xb1\x84\x16v\x1b\xc4\x02\xc1\x15t\xa7\xe6u\xd6\xb7R\xfd\xfb]\xf8\xdei\nWT\xb4\x1a\xe6lm+\x83\xaa5M\xcf\xba\x1a\xe5\xeb\xc50Q\xc3:v\xb4i1E\xad\xea\x95b:\x14\xaaAm\xaa-S\x8b\xd7\xa3\xda\xd7\xfeN\xb5u\x97\xfa4\xa6\xb1!\xc5\xa9\xbbmA\x95\xe9\x06}\xe9R\x8a\x93\xa8)\xf5\xaaI\xdd:R\x9f\x82\x94\xec\x85X\xd5hH/\xbaV\x8a&hD#\xd4\xa1\xdbu\xa1\x84\n3\xa4\x05eR\x81\x12w\xfe}\x894'h>\xd7\x1a\xcf\x14u'\xa1\xe6L\xd2q\xaeu\x9b\x9c\x8aM\xa7Vs-`[\xeb3y\x94\x99l\x9aL^5f\x9c\x0e3\xa8\xc0\x8c\xd4^\xc6\xa8.-y\xa2}\xb7X\xfd\x9c_c\x19\xa9\xae\x8c\xd0U.\xaa\xcc\xa9\xa5LRQ\xda\xaaI>\xbd$\x9fRr\xff\xd3\x0d\xaa#C\xbaH=}OL\xd7n\xba;\x92I\x0bp\xd7r\"\xd24e\xa8\xe9q\xc3\xd8\xac\x1f\x94\xcd\xe4\xa7\x12D\xda\x83xz\xa1\x91\x91N\xfc\xd6\x8b\xba\xb4\x0e\xc9[m3\x1c\"2\xb7\x93\xaf\xedNT\x98\xfe[o%\xf0\xd8\xce\x97\xe3\x80[\xb4~15O\xda\xb3R\xa94\xe5*m\x99>\xac\xf3\xe6 \n\xb8\xab\xbe\n5F[\xd1u\x1aRW\x87O\xce\x06\xe5\xc2E8\xb7*Y\xd1\xf0\xe2\x1c\x8b'(\xa4,\xca\x87q#F\x8b\xcef\xd8t\xf5\xc8f\x92Q=\"\xa7\xfa@6\xe7WG\xf1U\xe8xt\x9f\xf4\xe0\xb2:\xf5\xc7BjA]4P\xcby\xdc\xe2b\xbc\xceg/\x9a\xa9\xd0\x86\xe16\xd6\xd4\xf4N>\x0c\xb3Q9\xecb.\xe0R\xd4\x07E`\xc9\xc7\x91\xc3\x1a\xb3\xc6\\LU\xbeV\x9fG\x0eD\xb7\x9c@\x1b\x9a\xa4\x80\xc3M\xd7\x191\\\xcfv\xd1\xdd\xb3\x98\x10\xff\x94\x94\x96P_3\x9a\x08 \xe7[lL\x1cxWt\xab\x89h\xd1\x06\xfd\xb5\xae\xb3\x91?e\xd8\xb6\xf7Re \x99N V\xd3\x89\xaa\xc9\"I\x88U\x0f\xba.\x90r\xb8\x12\xa1C\xf5\xe3\x14\x9f\x8a\xeeo\xeaF\xb0:\x03\xb9\xaf\x15K|\x0b\xdf\x9a\xf6\x01\xbe\x8d\x90\x1ebR\xf2\xd1\x16\xd9\x9eE;T\xe2b\xd5\x8a\x1d\xe72\x85\xda\xf0\xa9\xe8~\xed\xe6\n\x17\x8bT-E)\x11\xc0\xd69[t\x85\x10yt<`\xfc\xd2\xd0\xb7\x0e\x7fM+C\xd2\xa3\xdcp\xc8\xe6N\xa8\xe9C!\x0b\x94\xf2<\xa1\xd2\xa6\x15\xb2o\x87y[\xf1\xbe\xda=P\x80j}8\x8a\xd6\xc8\xbb\x04\x9f\xd7\x14\xc8\x8f\xbf^^\x11H\xdbQ\xd4w\xf2~\x98\xd2o\xabG\x1c\xe7\x8a\xfdR\xd3\x938\x17m!\x05\xde\x1do:\xac\x88\x83\x87B\x87NO\x15X\xc0r;O\x0c\xb5:\xe4\x87\xe6n\xe9\x8e+5\xbe\xf1\xce:\xfa\xc5UI\xb3\x8eT\xfa=Ih\x84\x80\xf9\xa0Pu\x99\xf5\xa9\xa7\x8b \x98F\xcfUm,\xcf{\xa4\xa77=\x9e\xb7M\xba\x04\xf2\x12@8g\x1e\xd7m\x9e\xdf\x85\xe2\x80\xb0(\xe9\xfd\x9c\xb0\xaf2T\xf0\x0f\xe2\xe9\xd5\x9cl\xee%\x14]\xd7\x94\x95BB\x15\xa6O\x1b,j\x1c\xf5kl$T\x1dL\x1b\xa7\x96\x8d\xce\xcc\x86\x06\x87\xc1A\x1bF\x88\"I\x94[xol\xaf-C\xe6\xab+\x89@e\xbd\xdc\xbf\x13wU\xfd\xee\xd8\x94\x0f/\xa7\xcf>\xd6\x87\xd5'\xef\xefE\xf9p\xf5h\x85\xfa\x98\x96>\x88c\xf5U\xb4W\x8fDL\xf5\x0f\x85\x14\xed\xcb\xa5\x9f|\xc2\x1cj:^\xa7\x1f\xfa{\x98y:1N\x18\xcb\xbe\xf3\xf7\xdc\xfeL|c\xce\xbd\x95==\x05\xaf>&\xd7\x03\xf5\x9b\x90\xff\x16\x11\x0d\xa2\xafY\xf9q!\x07\xee\xea1\xdae\xbbi\x0e\x84\xfa\xb79L\xa1B\xe7\xb6)\x87\x96\xdf\x1cG\xa6y\x16\x01\x18\xcfn\xb6\x10\xbf\xa4\x8f\x1d\xfa/Z\x05rj\xb8\x9c\x1a\x8e\xb4\x96S\xc3AN\x0dG\xdf'Qj\xa2\x8dD\x08N\xc8+\xa3E(X\x12\xa4(X\x12\x04)\xae\x17\xddQU6\xa9\n\x16^\xc1\n\x166\xd9\n\x96\xb0x\x05\x0b\x9b\x84\x05KN\x0d\x97S\xc3!\xdc\x93S\xc3\x19%MJc\x99\x9395\\X~\x83%\x94\x14-,\xc5\xc1\x92S\xc3m\x93\xee`\xc9\xa9\xe1T I}\xb0\xe4\xd4p2A\x14\x84%\xa7\x86\xdb()\xb2\xab\x9cS\xc3q\xc8\x90\xb0\xf0\x8a\x91\xb0\xc4I\x92\xb0\x04\x85IX\"\xe5I\x8b\x1f\xe7\xd4p\xaap\xca\x99\xb0$\x89\x9a,k95\x1cwj8\xff\x0eE\x83\xceH\xe8\xe8\x0ca\xd3\xa7\x88\x05 \x90/\x0e\x08\x1c\xb6\xe2\xb7\xbej-``\xce\x19\xb0\xee\"y\xdftb\xb6\x89!\x8f\xea\xf9\x8cJ\xa1a\xa4!\xed\xdb\xdc\xaaD\x15\x8a\xa9\xb06\x12o{y\xaf\xe4Y\xd6\x01Hx\xef1\xbd\xc1`\xed\xea\xf1\x05\xca\x8c\n\xd9\xb7\xa2\xbb\x80\x8fEy?\xd5|\x92e\xa1\xea\xc8\xcezS\xa8Aj\x93Br\xca\xa26\xac]j\xdd\x1a\xde[\x95F\x0e* MY\xf6\xad\x9d.\xe8\x9d\xd2\x0d|\x15\xb5~C\xf4u\xeb\n\xfdIC\x9f\x8aJ\x9e~G?3\x0b!\xa9:h\xc5\xadh[\x04\xa4\nMXT'\xb5\xdb\x9c\xa5h\xe7\xe2 \xbf\xbb\x15kjE\x97o\xf7\xcd\xd1Z\x06\x1d\x87\xd4\x9c\xc4\xa9aa\xd8\x07CZr0o\x93\xebF\x8a\xd7esR0;\x0eH\xfd|`E\xbbX=\xff\xb7\xb7_~\xfa\xfc\xd3\xa77\xc3\xe4P\x1e\xaba\\\xbdT\xe6Q\xf9u|\x02\xf1xnT\x9e\x11\xf1(5\x1c^7\xd2\xce\xc3T\x16\xc7\xa3\x9a0O\x8d\x95U\xf0\xa6\x97\x06\x94>\xfe\xf2\x1fC\xc5\xff1\x9d\xb4\xf5\xa7NX\x99\x8c\xa4B\x9d\xb2\xbc\x1fW\xcc1\xf3\xe5\x14\xfad\x98[FP\xcdQO\xcb0\xa7\xe9`\xc1\xb2\xa9kQ\xaa\x93\xe3\xa6\x1b\x0e>Laf\xb83\x0c\x1e\xab\x87\x85\xff\xe0K\x82<8nM\xa7\xc6\x06\x91\xc4\xedj\xca,\xdc\xc9\xa2>\x14\xed\xe8\x16M\xb0\xd3M\xdb\x14\x87\xb2\xe8T\xe5\xcc\xd4v\xae^)\xc4)\xed\xe4\x93vsI\x88_\x13\xbd\xe5\xe4\x91vsH\xe4\xe9x\xce\xf3\xf1\xd2\xb8#\xe8\xcf\x96=\x17o\xb4\x873\xf2\xf1C\xc9\xdcP\x14/\xb4\x85\x03J\xe2\x7f\x12\xb8\x1frZa\xe5x\xb8\xf9\x1dFn'\x86\xd7a\xe4t\xdc|\x0e+\x97C\xf38\x84\x8bO\xcdR{\xf9\x1b\xe4j,s\x14w\xb3\x9b\xb7!9\x1b\xcfR\xec\xe1jB\xab4\x17G\xe3\xe6g|5H\xe3e\xac\x13\xf7\xa83\xf7\x98\xf8\x984.\xc6zK\xec\x05\x97\x93\x83\x91\x04\xff\x92\xc6\xbd\x04\xa8\x05'\xe7\x12\xc1\xb7P\xe0\xeb\x16\x9e\x85\xba\xfew\xba\xed;\xb9\x95\xb8\xc6\x879\x15_K#\xb8\x94M<\xca\x1atJ\xe6O\x02\xdc\x89\x8f7\xf1s&\x8e^\x89\xe7J\xc2<\x89\xcd\x91$\xf1#Q\xdc\xc8\x1e^\x84\xe4!\xc2|\x08\x1b\x17B\xde\x7f5\x92\x92\xf8\x0f\x9b\xefH\xe1:Hn#\x89\xd7\xb0y\x0c^\x0e\xc3\xc3_\xd8\xb0\xae\xcd[pq\x16\x8c|\x057W\x11\xcbSDp\x14\xd1\xfcD\x1c7A\xc0\xf8\xd4]c\xb1\xe6\x10\x1f\x11\xcdED\xf1\x10\xab\xca\xf3\xf2\x0fI\xdc\x03\xc55p\xf2\x0c\x9c\x1cC\xca\xf3\x8e\xe0\x16\xc2\xbc\xc2<\xf9\xbb\xbdj\x0d\x18\xeeHv\xe5Ho\xb5;\xb5\x95#\x99\x15g\"+*\x89\x95\xdc\x9e\xc0\x8a1y\xd5\xd8O\x8b\x1dvR\xd2*;M\x15\x91\xa2j\x99\x9e\x8a\xdc+\xfa\x86\x0cgJ\xaa\x94tTcZ\xa9U\xdd\x16\xa9\xa8v\xa4\xa1\xda\x9d\x82\xca\x95~\x8a\xec_G\xda)\x8aH\xe2L7\x15J5\xe5\x89l\x91\x99IX\x94\xcc$d&!3 \x99I\xc8LBf\x122\x93\xb0\xfa*\xb4Jg&Af&!3 \x99I\xc8LBf\x122\x93\x90\x99\x84\xcc$d&!3 \xff\xe7\x99\x04*2!%*\x81\x88C`\x8cA \x90\xb0\xa4D@\xb1I\x80d\x86J\x17%C\xa5\x19*\xcdPi\x86J3T\x9a\xa1\xd2\x0c\x95\xae\xbe\n\xad\xd2\x19*\xcdPi\x86J3T\x9a\xa1\xd2\x0c\x95f\xa84C\xa5\x19*\xcdPi\x86J3T\xfa\xaf\x83J\xe94-\xcc)Z\xa4\xa8\x0f\xa2=U\xb5\xbc(n\xca\xea\xe2\xe3WQ\xcb\xe8D\x18\xea'\xf3\xa3\xb07f\x85\x94mu\xd3\xcb\xe7\xce\x95\xf1 \x9e8\xb6\x89l\xfb\xcd\xaa>\x88G\xda\xd0M\xd3\x1cE\xb1N\x05:Y\xb2\xbe]<\xf0\x17\xea\xf9\xbc\xd5\xbd\x8a\xf1\x04]U\xdf\x1d\xc5\xd0\x07\xafp\xd1;\x17U\xfb\x12\x8a\xaek\xcaJm\x93\xc6\x15\x0b\xc4p\xf5\xc5\x0b{ M\xaf\x8f\xb2\x8fXR\x07\xc5\x8c1\xc1A|\x15\xc7\xa1\xf31\x01\x8c\x94Eyo.zF\xca\x17C\xfa\xffEt\xe7\xa6\xee\xc4;qW\xd5\xef\x8eM\xf9\xf0r\xfa\xecc}X}\xf2\xfe^\x94\x0fW\x8f\xc3+\xb1\xba\xfe\x838V_E{\xf58\xf9\xaf?\x14R\xb4/\x17\xb9]\xe0T<\x0d\xaf\xcbo\xbdh\x07\xe7\xa6\xefT\xf6\x17\xf5\x1a\xaa\x96w\xce\x11?\xf5h\xf4\xd0_\x8c8r\x88\x10\x83c5\xbeb/[\x8d&z\x1cQ#\xe8y\xc6\xce\x98?\xa7?\xdf\xb5\xc5ALIt~l\x0e\xfdQ\xfc\x15!\xb9\xe8~\x1c\xfc\x8c@\x8f\x8cS\xbcI\x0c\x14\xe73\x9c\xd4\xfdt\xcf\x9a\xb7uZ\xf2\x87\x03\x94\xc3H\xab\xbb\xbe\xd3\xd6\x1cw[\xf4\xea\xa2\xd5\x13\xfa3t-^1\xe2z\x9dm\xfd\xc2\xdd\x95\xbf\x1c\x0b\xd6\x1etCO\x97B\xe2\xe2\xa1zWG\xb7\xe8\xfa s\xa4\xbe\xd2kQo\x844\x8c?[8-\xab\xae\xeb\x9a[\xf9mX'\x87I\xe3|>\"B\xa0\xba\xa98\xc2\xf7M\xfdj4\xf2=\x94\xcd\xe9T\xd4\x07\x93\xf78\xf4\xaa\x19\xc6'r\x8a\x02\x9a\xa7\x94q\xabclaF\x9bj\x88\x0fs\x988\\\xc0g\x85\xad\x16\xc7\xae1\xcc\x0d\xadY\x98o\xe0 \xa4(\xe5\xb0\xe8+@\xb4\x98\x9b\xa0\x9b6x\x0c\xb8PC\x01w\xd5WQ\xcf\x1d\xa6X\x06\xd3\xa2\xae\n^\xd0\xe2\xeb$\xa7n\x1d<\xca\x1b!j\xc5\x8f\x8c{,}\xc3\x97PI\xd5\xef\x86\xb9%\xbc:\xd2\x15\x1334\xd7\xb5\xea\xa0\xe9\xe5\xab\xe6\xf6\xd5\xa1\x90bvatu\xae\xaa\xe1e2\x93\x7f\xfd\x17\x86\xbaT\x0b\xd7\xa7\x15Ey?8\xa9\xe3Fs\xb2\xaf\x86\x83x\xac\xa4\x19\x96\x13\xf9\xf6\x0d5z5\xfc>b|~\x18\xbc\xe7r\x98\x88\xde`\x9d\x91\xc6\x18\x9b\xd1!]\xa1:\xf00\xfd\xf2\xc2\xf8%\xf1$\x8e\xcd]U\x9a\x8d\x9c\x9eA+N\xcdWq\x98\xe3\xc8.?\xfce\x01\x98\xa8\xedB\xd5\x8d;\xbc\x11\xaaW\xa8\xf8\xcb\x89\xac\x99\xde\x14y\xdf6\xdf\xa6`\xb0M\xe1J\xcb\xe9i\xd1;\x8b\x98\xa5a\x1f\xacC\x94\xe4\x14\x9f4?\xe5\xd3\x08j\x9fE;\x98\x16\x07\x13\xd6\xf8y\x04\x06\x0eP\xddb\x8f\x8d\x0d\xea\xc4\xf4T\x97\x89\xfb|\xb3\xf3\xa2^\n 4\x9c\x87 \xe7\x9f^\xcc\xfa\xb6\x19\x99\x9f\xaa.\x8f\xfdAQS\xaf\xd6\xc7\xf1w\xfd\xe0dt\xea5\x93j\x82\xa8$\x0ev\x05\xd2\x17\xb2i\x87\x89\xb5?\x1e\xa0\xe8e3\xb8\x1f\x98\xbbO\xdfG\xea\x97]OU\xd7\x18\xfdv\xdd\xc9BZ\xe3u\xe5n\xd2\xce\xa6$\x15\x02N'\xd1\xcf;0j\x03\xdc\xca\x00>]\x00\x9b*\xc0\xa9 \xa0@\xaaHE\x00\x97\x1e\xc0\xaf\x06\xd8\xa5\x05\xe0U\x028u\x00\xbc*\x00\x87\x06 Q\x01`u\xb7$\xf8\x7f^\xf6?\x91\xfbgf\xfe\x13x\x7fn\xd6\x9f\x8d\xf3\xe7e\xfc\xd9\xf8\xfe0\xdb\xcf\xc6\xf5\xbb\x98\xfe\x14\x9e\x9f\xe4\xf5 p\xcd\x9eo\xd28}\x82\xc3\xdf\xc9\xe0\x13x\x8as\xa1tb)\xfe\x15t'o?\xf3\xf4T\xff~\x17\xbe73co\xf3\xf5\x0cl=+W\xbf^\x0c\x13y\xfa\xb1\xa3M\x8b)\xcc\xbc\x97\x9av\xb0\xf2AN\xde\xa6\x01\xe3\xf9x\xfb\xda\xdf\xa9\xb6\xeeb\xe2c\x1a\x1bb\xe1\xddm\x0b2\xf0\x1b\xf8\xf7%\xdd\x92\xc8\xbd{\x99w7\xef\xeec\xdd\xc9^\x88e\xdcC|\xfb\x9amO\xe0\xda#\x98\xf6\xed<;\xc1r\x878v&\x86\x9d\xb8\xf3b\xa4\xb0r\xeb\xcc\xcc:+\xaf\xce\xc9\xaa;9\xf55Q\xb9\xe6\xd3y\xd8t6.\x9d\x97I\x8f\xe3\xd1\x83,z$\x87\x1e\xc3\xa0[\xfc\xb9}\xb7X.\xd5\xcf\x9dG2\xe7\x11\xbc\xf9\xa2\xca\x9c\x9c93c\xce\xc7\x97\xf3\xb1\xe5\xfb\x9fn\x90)\x0f\xf1\xe48}\xd3>\xec/\xc7\xc2\xa4+L\xfa\xae\xb8iz \x05\x9c\x8fE]\xcf`\xabz\x9a\nH\xaet\xb6\xa7\xd1\x96J\xde\xe5\xa13\xfe\xbb\x17\xed\xd3[\x04\xe2\x87\xfbjV/\x9a\xe2\xe0\x02O\xef5\xc6\x8d0\xcb\"\xc5\x93\x89\x9f\x0e-\x87o\xc5\xcc\x1ex:\xd2\xd58}\x97V\xff\xad\xde\x0f\xcd\xb0\xa8\xab^\x1b\x97\x8d\xd6\xbe\xfc\xf2^\x0f \\hB\xdd\xfa\x1ew\xa8\xbb\xba\xf5<\xd1LV\xf3T\x0fT\xfa\xedQ\xb7\x98\xc6\xc1\xf0\xdd\xc5\xeaYDA\xa7K\xa6\n\xf6\xc3\xa6)\xac\xd5\xca\x14\xc5a\x017\x8f\x05$\x97\x05\xe9|\xd6\xcaZq\xec\x1a\x8b\xd3\x02\x06^ke\xceb\xb9 \x9d\xe9ZY\x1b\x9f\xdc\xfa&\x9c\x8c\x17\xb8X/\xd8\xc4|\x81\xc5~A\x0c\xcea\xb3`\x10\x1c\xf7\x8cl\x18\xf8\x181\xd8\xc4\x8aA\x1a3\x06\xc4\x04\x0f1=\xb8\x9c\xe8\xc1\xcb\x94A*[\x06\x91\x8c\x19X\xac\x19\xf8\xda\xe2:\x83,\x8dA[\x19K\xa5\xd1\xac\xc9\xc4\xf8 @\xac\x81k\x85\x00\x8f\x9a\xcbE\xb2\x81\xaf'!\xf8\xf6\x00/\xe1\x06\x81p\\N\xe2\x0d8\xc97\xf0\x07\xe5&\x91p\xc0H\xc4A\x90\x8c\x83\xbd\x84\x1c\xa4\x90rT\x8f=\x9d\xf5Ykt\x80n\x029G\xd8\xc2\xb9\xcb\x19\xa4\x9bF\xd2\x11\xe6\xfa\xb33P\x97\x9b\xac\x83t\xc2\x0e\xf8I;H#\xee \x8d\xbc\xa3_Q\xb2\x92l\x94\x1e\xb0\xd3z\xc0I\xedA\x14\xbd\x07\x9c\x14\x1fx\x03z\xd3\xa8>\xea\x1d'\x83z# @H&\x01 \x83Th\xefnj\x10\\r\xeb\xc0\x12\xef \xf1\x8dY\xffw\xd2\x85\xd4\xb4\xe7\x0c\xf4\x0d\xd5#\x8d:\\\x19SD\"\x19\xee\xcbB!\x027\x8d\x08d\xd0o2\x9d\xb8\xb2&\x89\xc0\xdf4\x82\x11B\xbc\x1b\xf8\xc2\x7f#\xc8Fp\x1ez\x1fO:\xbamX\xa0s\x12\x01 \x1b:#DDB\xb0\xddAB\x12\xb6\x91\x92@\x06\xb1%\x92\x93\x10\"(!\x10\x1c\x1c\n\x0f\xf6\xf4R,a \x11\xa4%\x90a\xc2I\xe4%\xc4\x11\x98\xb0\x8b\xc4\x04g\xc7\x04\xc9L\xe0#4\xc1]\x0bk\xa4\xb1\x92\x9b\x90Hp\xaeLQ\x81\xc4\xcc\x94'0\xd3\x9e\xe0\x0f'\xa6\x02\x8a\xa9\x90b.\x1a\x148\xa9P`\xa7C!\x9a\x12\x85\x18Z\x14\xe2\xa9Q\x88\xa4G\x81\x0e1\xa6\x83N\xe3\xc9\xb4P\x98q4]\nq\x94)P\xcd\xe0\xa4N!\x95>]\xd9\"\xc2\x8f9 U`%U!y<\x04\xc9U\x88 X!@\xb2\xba\x18\xba\x18n\xd0\xb8l\xb4\xb6\x99\x1b\\\xc4\xa6u\x9b\xe9A\x0c`\xbb\x1ew\xe6\xcf\x1c\xc1ks\x83\xde\x8d`LL \x16+20h\xdb\x11%8^\xb7-V\x10\x0bc\xc4 apyn\xd4\xf2\xa1\xc1\xf2\xc41\xbc\x01\x82+#?'\xaav\xbe\x93aH[\x08r\xdf\xf4(\xf3\x0eq\xf3\xf2\xd7\xcb\xeb\xbf\x9b\x07{\xe4(\xffud \xde\xebF\\\xcaB\x8a\xcd\xa3}&2\xb4\x1d:H(\x14\xae\xeb\xe9)\x7fM\xe3{\x8c\xb6\xe3\xed\xb9\xa2\x97\xf7\xff\x9c\xfa\xedS[l\x88\xf2\x1f\xaem\xda\xea\x9fj\xa6\\wG\x14\xf1/s\xccT:m\x93c\xa6\xe2\xe8\x19\x84\x95\xad>\xca1S[h\x98D\n\x86\x99~I\xa0^\x12h\x17b\xc2`$Xx\xc9\x156b%L\xaa\xb0\x11*9f*\xc7Lm >r\xcc\xd4\xd8\xd1\xa6\xc5\x14J#&\x8c(\xc7L\x19%\xc7LA\x8e\x99\xca1S9f\x8a\x8b,`#\nxI\x828\x82 H\x0eD\x12\x031\xa4@\x8e\x99\x9am%\x81\xfe9f**fJ\xe1\x02UK\"^QY\xadh%\xba\xc2\xddThE\x07g\xd1\x9e\xaa\x0eAZ\xd9\x80x\x14e?y\xf1C\x0f\x8f\xf3\xb7\x8e\x06Qo\xfd\\+\x15r\xe0\x04\xf8\x14N\xa8\xee\xb6\x1d\xf6\xbfS\x97=/\xda\xef\x80\x14\xbd\xb6|\xf6\xc0 2\xce\xdf9%e\xa1\xed\x12\x16F\xd8\x11\x8b_;\xce Aba\x03\"\xb1x\x15\xe4I\xa0$\x16.h\x12KXG\xbe\x13\xa6\xc4\xb2\x1b\xac\xa4\xfb.\xac&O\x00.IkAEy\x1a\x88I\x1a\xf4\xaa\xca\xf7\x01\x9a\xa4!\xaf\xd6<\x19\xea\xd4F\"\x00O\xf2\xcah\x10\x14K\x02\x14\x8a%\x01\x10u\xbd\xe8\x8e\xaa\xb2A\xa5Xx\x01S,l\xb0)\x960x\x8a\x85\x0dB\xc5\xe2S\xa5\xa7\xc1\xa9\xf4\\\xe1P\xa6G\x02\xadX\xf6\xc2\xad\xa41\x17\x04\x8be'\x10\x8b\xc5\xa1Q\x0f\xba\x14^\x9dz\x9c\xc7\xb1\x13\xa6\xa5'S\x8fZ=\\\x9b4\xe0\xd62\xe7\xd3\xac\xb3\x80\xb8X\xd2\xa0\\\xcb\x9c\xf2hH\xe7!\x11\xd6\xb5\xefD\xaa\xd7\xd3\xc0^,A\xd1\xb6W\xc3\x1e\x01\xffbqHa7@\xc1X\\v\x08}`\x128\x8c%\xbesB@1\x96P/\x04Ac,\x1b\xa0c,\x94z2\x11F\xc6\x12\xd4\xb7\x87\x14\xeea\x8d\xbb\xb7\xd7bAf,!\xa8\x19\x0b\xa5uO\x82\x9d\xb1D\x80\xcfX\xb6C\xd0X\\\xdd\x14\x84\xa3\xb10\x81\xd2X\x9cu!Fb\x12LmY#\xd4\xf0i\xe0\xb5}\x07R\x11\x9f\x08i\xdbU\xb65\xf2\xbc@7\x16\xafN\x9eV\xca\xd3Zy.\x00\x1c\x0b\x1b\x0c\x8e\x85\x17\x0c\xc7\x12\x07\x89c \x02\xe3X\"\xe1\xf1\xc5\x8f\x83\xcay\x87v\xde\xa5\x96\x8e\x07V\xc3\xfa\xf9h\xf0|\xfcq\x18B\xc7B4\x88\x13N\xc7\x92\x04\xaa[\xd6H-='\xd4n\xdc\x86\x05p\xc7\x92:F\x82\xe0\xfbh.BUo\x1e\xf1\x05\x0e8\x1e\x8bg\x1f\xe6K\xb5\xe3K\x15\x13\x0d\xd3c\xd9\x00\xd6\x13\xf7^@\xe1+\xbd6B\xf1\xf8\xcf\xb8I\xc7\xff\x8baQ\xc4\xffN0\xcf\xb9\xb8\xab\xeaU\x17-szM?@\xd4L\xa8\x9d\x9c\xf1\xa9\x0e@\xd0\n\xe4\xb9\xc62^\xeb[\x8bGym\x9d\xc7\xe5|J\xce}2u\xae\x04\x18\xf6\xb5\\z\xf8\xef\x08\xf6\x14]\x87(\xd6/\xc5\x9d\xf8\"~\xebE'/\xf0\xfb\x95\x91\xdfz\xd1\xe2\x196\x83\xb9\xa1\x0f\x04\x9c\x9aN\x82\xd0'\xb9\x1d\xcdm\x99ld\x11+^\xf6D\x0f\xb8\x92\xfd(\xf3\xaa=\xea?u\x7f\xba\xc1=\xbd\x06\xe0\x0c\x14\xe8vu\xad\xd9\xd4\xb2\xe9ky\xad\x8c\xac_\xf0oE\x07\x9d\x90/U`\xc1\x88!v\xd0\xd78\x10\x0e\x08\xc3|\xab\xba\xa0\x86}I*\xc5\x04\xb2\xbc]\x0e\xf0/\xbf\xbc\x1f\xedY\"\xf5[!\xd4\x98\xde\xa9S\x1f\xdf\x87\x00_\xe7\xc6:\xc6\xebu\x9b\x8a\xc3\xa1\x15\xdd\xb4Q\xef;1\xbe}j\xce\xaf\x115-\xeaR\xa3\x12\x95\x99[\xec\xb6\xaf\x0f\x13\x9a4\xbe\xb3\x89\x15\x13\xbe\x8a\xdd\x88\xa1Vz\xa2X\xd5\xce0U\xd4\x08\xb8\x0d\x17\xbd\xe8\x96\xd5\x9c.q\xcc\x1f\xb3I}f\"\x1etxStU\xa9\x16\xda\xdb\xea(E;\xccTB\xcc?\xdf5\x8d\xc8\x1c2\x90\xce\xd4\xe5\x90\x818\x16\x0e\x91\x7f\xab\x8fr\xc8@\x0e\x19\xd8\xc6\x90\x91\x10\x02\x1b\x0f\xc6\xcb\x80\xb1q_a\xd6\x8b\x8d\xef\xca!\x03\xffv!\x03\xa3S\x8c{.\xb5P6\xadz-\x94\x95\xbf\xfc\xf5r\xf8{\x18}\xc3;\xd3\x0es\x80\xf2r\xb0\x9b\x865L\xcf\xbb\x1e?\x12s4k\x7fd\xb3\"*\xde1R\xbb\xb7\xf9\xcf\xb8\x8d\xdb&\xbf\xc8rra\xbf[\xc4\xe9\xf0\xc2\xda\xe9\x05\xca\xf1\x85\xd4\xca\xb28\xc1\x10p\x84\x81~\xe6\xc0\xef\x10\x83\xeb\xe1CN\x8f\xba\xc1a\x06N\xa7\x19B\xe2\xb6\x04\xe7\x19\x18\x1dh\x08:\xd1\xb0\xd7\x91\x86\x14g\x9a\xea\xb1\xb0\xa0m\xb7SM\xd8\n\x8a\xd9R\x9ck\xc2\\N\x8f\x9a\xe6pC\x9a\xd3M\xbf\xa2d%\xd9\\q`w\xc7\x81\xd3%\x87(\xb7\x1c8]s\xc8\xe9Q\xa9\xdb\xect\xe9\xe1\xdf5=*\xa7\xbb\xef\x05\xaa-w?\n\xab\x9e<\xba-0\xf5\xf2~\xdb#.&\xc7\xf0\x99\xa3.\xc8\xbd\x83w@\x85FL\xc2\x0e\xc2\x1e\xd7*\x15\x91\xe5\x88;v\x11\x0c\xd5f\xdbK\x84w\x13\xce\xfd\xc4\xb3\xec(<{\x8a\x1cB\xb3\x7f\x87\xc1\xbc\xc7\xc8!4\x8b\xc2\xb9\xdf\x88\xdaq\xf0\xee9\"v\x1d\xec\xfb\x8e\x1cB\x83e\xd3>%y\xa7\xc2\xbdW\xc9!4f\x89\xdb\xb50\xef[r\x08M\x0e\xa1I\x08\xa1\xe1\xdd\xd3\x80\xd3)4\xa6\x9a\xe1\xcf\x17Y\x19\xb6(Y\x19\xb6(\x7f\xb42\xcc\xde\x00o\xdaqS\xca\xb0N\x94}[\xc9\xa7\x0f\xb3\x872\xf4\xf5\x83\xde\x05cW\xab\xcd\xd1w\xff\x1b\x00\x00\xff\xffPK\x07\x08\xba\xce\xd4\xf9\xfb\xe6\x01\x00\xbf\xfa\x18\x00PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(\xd4`4t\xc7\x01\x00\x00\xbd\x01\x00\x00\x11\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\x81\x00\x00\x00\x00favicon-16x16.pngUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(6B\xc8\xd7\x7f\x04\x00\x00u\x04\x00\x00\x11\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\x81\x0f\x02\x00\x00favicon-32x32.pngUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(\x8e\x10\x9f\xf1}\x02\x00\x00\xe3\x05\x00\x00\n\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\x81\xd6\x06\x00\x00index.htmlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(]\x12r 9\x03\x00\x00T \x00\x00\x14\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\x81\x94 \x00\x00oauth2-redirect.htmlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(\xba\xce\xd4\xf9\xfb\xe6\x01\x00\xbf\xfa\x18\x00\x0c\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\x81\x18\x0d\x00\x00swagger.yamlUT\x05\x00\x01\x80Cm8PK\x05\x06\x00\x00\x00\x00\x05\x00\x05\x00_\x01\x00\x00V\xf4\x01\x00\x00\x00" fs.Register(data) } diff --git a/client/docs/swagger-ui/swagger.yaml b/client/docs/swagger-ui/swagger.yaml index 304b5ebf84..614425587d 100644 --- a/client/docs/swagger-ui/swagger.yaml +++ b/client/docs/swagger-ui/swagger.yaml @@ -17,249 +17,316 @@ paths: deployment: type: object properties: - deployment: + deployment_id: type: object properties: - deployment_id: - type: object - properties: - owner: - type: string - dseq: - type: string - format: uint64 - title: DeploymentID stores owner and sequence number - state: + owner: type: string - enum: - - invalid - - active - - closed - default: invalid - description: >- - - invalid: Prefix should start with 0 in enum. So - declaring dummy state - - active: DeploymentActive denotes state for deployment active - - closed: DeploymentClosed denotes state for deployment closed - title: State is an enum which refers to state of deployment - version: + dseq: type: string - format: byte - title: 'Deployment stores deploymentID, state and version details' - groups: - type: array - items: + format: uint64 + title: DeploymentID stores owner and sequence number + state: + type: string + enum: + - invalid + - active + - closed + default: invalid + description: >- + - invalid: Prefix should start with 0 in enum. So + declaring dummy state + - active: DeploymentActive denotes state for deployment active + - closed: DeploymentClosed denotes state for deployment closed + title: State is an enum which refers to state of deployment + version: + type: string + format: byte + created_at: + type: string + format: int64 + title: 'Deployment stores deploymentID, state and version details' + groups: + type: array + items: + type: object + properties: + group_id: type: object properties: - group_id: - type: object - properties: - owner: - type: string - dseq: - type: string - format: uint64 - gseq: - type: integer - format: int64 - title: >- - GroupID stores owner, deployment sequence number and - group sequence number - state: + owner: type: string - enum: - - invalid - - open - - ordered - - matched - - insufficient_funds - - closed - default: invalid - description: >- - - invalid: Prefix should start with 0 in enum. So - declaring dummy state - - open: GroupOpen denotes state for group open - - ordered: GroupOrdered denotes state for group ordered - - matched: GroupMatched denotes state for group matched - - insufficient_funds: GroupInsufficientFunds denotes state for group insufficient_funds - - closed: GroupClosed denotes state for group closed - title: State is an enum which refers to state of group - group_spec: + dseq: + type: string + format: uint64 + gseq: + type: integer + format: int64 + title: >- + GroupID stores owner, deployment sequence number and + group sequence number + state: + type: string + enum: + - invalid + - open + - paused + - insufficient_funds + - closed + default: invalid + description: >- + - invalid: Prefix should start with 0 in enum. So + declaring dummy state + - open: GroupOpen denotes state for group open + - paused: GroupOrdered denotes state for group ordered + - insufficient_funds: GroupInsufficientFunds denotes state for group insufficient_funds + - closed: GroupClosed denotes state for group closed + title: State is an enum which refers to state of group + group_spec: + type: object + properties: + name: + type: string + requirements: type: object properties: - name: - type: string - requirements: + signed_by: + title: >- + SignedBy list of keys that tenants expect to + have signatures from type: object properties: - signed_by: + all_of: + type: array + items: + type: string title: >- - SignedBy list of keys that tenants expect to - have signatures from - type: object - properties: - all_of: - type: array - items: - type: string - title: >- - all_of all keys in this list must have - signed attributes - any_of: - type: array - items: - type: string - title: >- - any_of at least of of the keys from the - list must have signed attributes - attributes: + all_of all keys in this list must have + signed attributes + any_of: type: array items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair + type: string title: >- - Attribute list of attributes tenant expects - from the provider - title: PlacementRequirements - resources: + any_of at least of of the keys from the list + must have signed attributes + attributes: type: array items: type: object properties: - resources: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: >- + Attribute list of attributes tenant expects from + the provider + title: PlacementRequirements + resources: + type: array + items: + type: object + properties: + resources: + type: object + properties: + cpu: type: object properties: - cpu: + units: type: object properties: - units: - type: object - properties: - val: - type: string - format: byte - title: >- - Unit stores cpu, memory and storage - metrics - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair + val: + type: string + format: byte title: >- - CPU stores resource units and cpu config - attributes - memory: + Unit stores cpu, memory and storage + metrics + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: >- + CPU stores resource units and cpu config + attributes + memory: + type: object + properties: + quantity: type: object properties: - quantity: - type: object - properties: - val: - type: string - format: byte - title: >- - Unit stores cpu, memory and storage - metrics - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair + val: + type: string + format: byte title: >- - Memory stores resource quantity and - memory attributes - storage: + Unit stores cpu, memory and storage + metrics + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: >- + Memory stores resource quantity and memory + attributes + storage: + type: object + properties: + quantity: type: object properties: - quantity: - type: object - properties: - val: - type: string - format: byte - title: >- - Unit stores cpu, memory and storage - metrics - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair + val: + type: string + format: byte title: >- - Storage stores resource quantity and - storage attributes - endpoints: + Unit stores cpu, memory and storage + metrics + attributes: type: array items: type: object - title: >- - Endpoint describes a publicly accessible - IP service + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair title: >- - ResourceUnits describes all available - resources types for deployment/node etc + Storage stores resource quantity and + storage attributes + endpoints: + type: array + items: + type: object + properties: + kind: + type: string + enum: + - SHARED_HTTP + - RANDOM_PORT + default: SHARED_HTTP + description: >- + - SHARED_HTTP: Describes an endpoint + that becomes a Kubernetes Ingress + - RANDOM_PORT: Describes an endpoint that becomes a Kubernetes NodePort + title: >- + This describes how the endpoint is + implemented when the lease is deployed + title: >- + Endpoint describes a publicly accessible + IP service + title: >- + ResourceUnits describes all available + resources types for deployment/node etc - if field is nil resource is not present in - the given data-structure - count: - type: integer - format: int64 - price: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination - and an amount. + if field is nil resource is not present in the + given data-structure + count: + type: integer + format: int64 + price: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and + an amount. - NOTE: The amount field is an Int which - implements the custom method + NOTE: The amount field is an Int which + implements the custom method - signatures required by gogoproto. - title: >- - Resource stores unit, total count and price of - resource - order_bid_duration: - type: string - format: int64 - title: GroupSpec stores group specifications - title: 'Group stores group id, state and specifications of group' - version: + signatures required by gogoproto. + title: >- + Resource stores unit, total count and price of + resource + title: GroupSpec stores group specifications + created_at: + type: string + format: int64 + title: 'Group stores group id, state and specifications of group' + escrow_account: + type: object + properties: + id: + type: object + properties: + scope: + type: string + xid: + type: string + title: AccountID is the account identifier + owner: type: string - format: byte - title: >- - DeploymentResponse represents details of deployment along with - group details + state: + type: string + enum: + - invalid + - open + - closed + - overdrawn + default: invalid + description: |- + - invalid: AccountStateInvalid is an invalid state + - open: AccountOpen is the state when an account is open + - closed: AccountClosed is the state when an account is closed + - overdrawn: AccountOverdrawn is the state when an account is overdrawn + title: State stores state for an escrow account + balance: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + transferred: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + settled_at: + type: string + format: int64 + title: Account stores state for an escrow account title: >- QueryDeploymentResponse is response type for the Query/Deployment RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -335,6 +402,9 @@ paths: version: type: string format: byte + created_at: + type: string + format: int64 title: >- Deployment stores deploymentID, state and version details @@ -362,8 +432,7 @@ paths: enum: - invalid - open - - ordered - - matched + - paused - insufficient_funds - closed default: invalid @@ -371,8 +440,7 @@ paths: - invalid: Prefix should start with 0 in enum. So declaring dummy state - open: GroupOpen denotes state for group open - - ordered: GroupOrdered denotes state for group ordered - - matched: GroupMatched denotes state for group matched + - paused: GroupOrdered denotes state for group ordered - insufficient_funds: GroupInsufficientFunds denotes state for group insufficient_funds - closed: GroupClosed denotes state for group closed title: State is an enum which refers to state of group @@ -505,6 +573,20 @@ paths: type: array items: type: object + properties: + kind: + type: string + enum: + - SHARED_HTTP + - RANDOM_PORT + default: SHARED_HTTP + description: >- + - SHARED_HTTP: Describes an endpoint + that becomes a Kubernetes Ingress + - RANDOM_PORT: Describes an endpoint that becomes a Kubernetes NodePort + title: >- + This describes how the endpoint is + implemented when the lease is deployed title: >- Endpoint describes a publicly accessible IP service @@ -536,19 +618,79 @@ paths: title: >- Resource stores unit, total count and price of resource - order_bid_duration: - type: string - format: int64 title: GroupSpec stores group specifications + created_at: + type: string + format: int64 title: >- Group stores group id, state and specifications of group - version: - type: string - format: byte + escrow_account: + type: object + properties: + id: + type: object + properties: + scope: + type: string + xid: + type: string + title: AccountID is the account identifier + owner: + type: string + state: + type: string + enum: + - invalid + - open + - closed + - overdrawn + default: invalid + description: |- + - invalid: AccountStateInvalid is an invalid state + - open: AccountOpen is the state when an account is open + - closed: AccountClosed is the state when an account is closed + - overdrawn: AccountOverdrawn is the state when an account is overdrawn + title: State stores state for an escrow account + balance: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an + amount. + + + NOTE: The amount field is an Int which implements + the custom method + + signatures required by gogoproto. + transferred: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an + amount. + + + NOTE: The amount field is an Int which implements + the custom method + + signatures required by gogoproto. + settled_at: + type: string + format: int64 + title: Account stores state for an escrow account title: >- - DeploymentResponse represents details of deployment along - with group details + QueryDeploymentResponse is response type for the + Query/Deployment RPC method pagination: type: object properties: @@ -580,7 +722,7 @@ paths: QueryDeploymentsResponse is response type for the Query/Deployments RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -661,7 +803,13 @@ paths: in: query required: false type: boolean - format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + in: query + required: false + type: boolean tags: - Query /akash/deployment/v1beta1/groups/info: @@ -696,8 +844,7 @@ paths: enum: - invalid - open - - ordered - - matched + - paused - insufficient_funds - closed default: invalid @@ -705,8 +852,7 @@ paths: - invalid: Prefix should start with 0 in enum. So declaring dummy state - open: GroupOpen denotes state for group open - - ordered: GroupOrdered denotes state for group ordered - - matched: GroupMatched denotes state for group matched + - paused: GroupOrdered denotes state for group ordered - insufficient_funds: GroupInsufficientFunds denotes state for group insufficient_funds - closed: GroupClosed denotes state for group closed title: State is an enum which refers to state of group @@ -839,6 +985,20 @@ paths: type: array items: type: object + properties: + kind: + type: string + enum: + - SHARED_HTTP + - RANDOM_PORT + default: SHARED_HTTP + description: >- + - SHARED_HTTP: Describes an endpoint + that becomes a Kubernetes Ingress + - RANDOM_PORT: Describes an endpoint that becomes a Kubernetes NodePort + title: >- + This describes how the endpoint is + implemented when the lease is deployed title: >- Endpoint describes a publicly accessible IP service @@ -870,14 +1030,14 @@ paths: title: >- Resource stores unit, total count and price of resource - order_bid_duration: - type: string - format: int64 title: GroupSpec stores group specifications + created_at: + type: string + format: int64 title: 'Group stores group id, state and specifications of group' title: QueryGroupResponse is response type for the Query/Group RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -952,7 +1112,7 @@ paths: enum: - invalid - open - - matched + - active - lost - closed default: invalid @@ -960,7 +1120,7 @@ paths: - invalid: Prefix should start with 0 in enum. So declaring dummy state - open: BidOpen denotes state for bid open - - matched: BidMatched denotes state for bid open + - active: BidMatched denotes state for bid open - lost: BidLost denotes state for bid lost - closed: BidClosed denotes state for bid closed title: State is an enum which refers to state of bid @@ -979,10 +1139,74 @@ paths: custom method signatures required by gogoproto. + created_at: + type: string + format: int64 title: 'Bid stores BidID, state of bid and price' + escrow_account: + type: object + properties: + id: + type: object + properties: + scope: + type: string + xid: + type: string + title: AccountID is the account identifier + owner: + type: string + state: + type: string + enum: + - invalid + - open + - closed + - overdrawn + default: invalid + description: |- + - invalid: AccountStateInvalid is an invalid state + - open: AccountOpen is the state when an account is open + - closed: AccountClosed is the state when an account is closed + - overdrawn: AccountOverdrawn is the state when an account is overdrawn + title: State stores state for an escrow account + balance: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + transferred: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + settled_at: + type: string + format: int64 + title: Account stores state for an escrow account title: QueryBidResponse is response type for the Query/Bid RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -1044,58 +1268,131 @@ paths: items: type: object properties: - bid_id: + bid: type: object properties: - owner: + bid_id: + type: object + properties: + owner: + type: string + dseq: + type: string + format: uint64 + gseq: + type: integer + format: int64 + oseq: + type: integer + format: int64 + provider: + type: string + description: |- + BidID stores owner and all other seq numbers + A successful bid becomes a Lease(ID). + state: type: string - dseq: + enum: + - invalid + - open + - active + - lost + - closed + default: invalid + description: >- + - invalid: Prefix should start with 0 in enum. So + declaring dummy state + - open: BidOpen denotes state for bid open + - active: BidMatched denotes state for bid open + - lost: BidLost denotes state for bid lost + - closed: BidClosed denotes state for bid closed + title: State is an enum which refers to state of bid + price: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an + amount. + + + NOTE: The amount field is an Int which implements + the custom method + + signatures required by gogoproto. + created_at: type: string - format: uint64 - gseq: - type: integer - format: int64 - oseq: - type: integer format: int64 - provider: - type: string - description: |- - BidID stores owner and all other seq numbers - A successful bid becomes a Lease(ID). - state: - type: string - enum: - - invalid - - open - - matched - - lost - - closed - default: invalid - description: >- - - invalid: Prefix should start with 0 in enum. So - declaring dummy state - - open: BidOpen denotes state for bid open - - matched: BidMatched denotes state for bid open - - lost: BidLost denotes state for bid lost - - closed: BidClosed denotes state for bid closed - title: State is an enum which refers to state of bid - price: + title: 'Bid stores BidID, state of bid and price' + escrow_account: type: object properties: - denom: + id: + type: object + properties: + scope: + type: string + xid: + type: string + title: AccountID is the account identifier + owner: type: string - amount: + state: type: string - description: >- - Coin defines a token with a denomination and an amount. + enum: + - invalid + - open + - closed + - overdrawn + default: invalid + description: |- + - invalid: AccountStateInvalid is an invalid state + - open: AccountOpen is the state when an account is open + - closed: AccountClosed is the state when an account is closed + - overdrawn: AccountOverdrawn is the state when an account is overdrawn + title: State stores state for an escrow account + balance: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an + amount. - NOTE: The amount field is an Int which implements the - custom method + NOTE: The amount field is an Int which implements + the custom method - signatures required by gogoproto. - title: 'Bid stores BidID, state of bid and price' + signatures required by gogoproto. + transferred: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an + amount. + + + NOTE: The amount field is an Int which implements + the custom method + + signatures required by gogoproto. + settled_at: + type: string + format: int64 + title: Account stores state for an escrow account + title: >- + QueryBidResponse is response type for the Query/Bid RPC + method pagination: type: object properties: @@ -1125,7 +1422,7 @@ paths: } title: QueryBidsResponse is response type for the Query/Bids RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -1220,7 +1517,13 @@ paths: in: query required: false type: boolean - format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + in: query + required: false + type: boolean tags: - Query /akash/market/v1beta1/leases/info: @@ -1283,10 +1586,89 @@ paths: custom method signatures required by gogoproto. + created_at: + type: string + format: int64 title: 'Lease stores LeaseID, state of lease and price' + escrow_payment: + type: object + properties: + account_id: + type: object + properties: + scope: + type: string + xid: + type: string + title: AccountID is the account identifier + payment_id: + type: string + owner: + type: string + state: + type: string + enum: + - invalid + - open + - closed + - overdrawn + default: invalid + description: >- + - invalid: PaymentStateInvalid is the state when the + payment is invalid + - open: PaymentStateOpen is the state when the payment is open + - closed: PaymentStateClosed is the state when the payment is closed + - overdrawn: PaymentStateOverdrawn is the state when the payment is overdrawn + title: Payment State + rate: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + balance: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + withdrawn: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + title: Payment stores state for a payment title: QueryLeaseResponse is response type for the Query/Lease RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -1348,54 +1730,143 @@ paths: items: type: object properties: - lease_id: + lease: type: object properties: - owner: + lease_id: + type: object + properties: + owner: + type: string + dseq: + type: string + format: uint64 + gseq: + type: integer + format: int64 + oseq: + type: integer + format: int64 + provider: + type: string + title: LeaseID stores bid details of lease + state: type: string - dseq: + enum: + - invalid + - active + - insufficient_funds + - closed + default: invalid + description: >- + - invalid: Prefix should start with 0 in enum. So + declaring dummy state + - active: LeaseActive denotes state for lease active + - insufficient_funds: LeaseInsufficientFunds denotes state for lease insufficient_funds + - closed: LeaseClosed denotes state for lease closed + title: State is an enum which refers to state of lease + price: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an + amount. + + + NOTE: The amount field is an Int which implements + the custom method + + signatures required by gogoproto. + created_at: type: string - format: uint64 - gseq: - type: integer format: int64 - oseq: - type: integer - format: int64 - provider: - type: string - title: LeaseID stores bid details of lease - state: - type: string - enum: - - invalid - - active - - insufficient_funds - - closed - default: invalid - description: >- - - invalid: Prefix should start with 0 in enum. So - declaring dummy state - - active: LeaseActive denotes state for lease active - - insufficient_funds: LeaseInsufficientFunds denotes state for lease insufficient_funds - - closed: LeaseClosed denotes state for lease closed - title: State is an enum which refers to state of lease - price: + title: 'Lease stores LeaseID, state of lease and price' + escrow_payment: type: object properties: - denom: + account_id: + type: object + properties: + scope: + type: string + xid: + type: string + title: AccountID is the account identifier + payment_id: type: string - amount: + owner: type: string - description: >- - Coin defines a token with a denomination and an amount. + state: + type: string + enum: + - invalid + - open + - closed + - overdrawn + default: invalid + description: >- + - invalid: PaymentStateInvalid is the state when the + payment is invalid + - open: PaymentStateOpen is the state when the payment is open + - closed: PaymentStateClosed is the state when the payment is closed + - overdrawn: PaymentStateOverdrawn is the state when the payment is overdrawn + title: Payment State + rate: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an + amount. - NOTE: The amount field is an Int which implements the - custom method + NOTE: The amount field is an Int which implements + the custom method - signatures required by gogoproto. - title: 'Lease stores LeaseID, state of lease and price' + signatures required by gogoproto. + balance: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an + amount. + + + NOTE: The amount field is an Int which implements + the custom method + + signatures required by gogoproto. + withdrawn: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an + amount. + + + NOTE: The amount field is an Int which implements + the custom method + + signatures required by gogoproto. + title: Payment stores state for a payment + title: >- + QueryLeaseResponse is response type for the Query/Lease RPC + method pagination: type: object properties: @@ -1427,7 +1898,7 @@ paths: QueryLeasesResponse is response type for the Query/Leases RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -1522,7 +1993,13 @@ paths: in: query required: false type: boolean - format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + in: query + required: false + type: boolean tags: - Query /akash/market/v1beta1/orders/info: @@ -1558,19 +2035,16 @@ paths: enum: - invalid - open - - matched + - active - closed default: invalid description: >- - invalid: Prefix should start with 0 in enum. So declaring dummy state - open: OrderOpen denotes state for order open - - matched: OrderMatched denotes state for order matched + - active: OrderMatched denotes state for order matched - closed: OrderClosed denotes state for order lost title: State is an enum which refers to state of order - start_at: - type: string - format: int64 spec: type: object properties: @@ -1700,6 +2174,20 @@ paths: type: array items: type: object + properties: + kind: + type: string + enum: + - SHARED_HTTP + - RANDOM_PORT + default: SHARED_HTTP + description: >- + - SHARED_HTTP: Describes an endpoint + that becomes a Kubernetes Ingress + - RANDOM_PORT: Describes an endpoint that becomes a Kubernetes NodePort + title: >- + This describes how the endpoint is + implemented when the lease is deployed title: >- Endpoint describes a publicly accessible IP service @@ -1731,17 +2219,14 @@ paths: title: >- Resource stores unit, total count and price of resource - order_bid_duration: - type: string - format: int64 title: GroupSpec stores group specifications - close_at: + created_at: type: string format: int64 title: 'Order stores orderID, state of order and other details' title: QueryOrderResponse is response type for the Query/Order RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -1819,19 +2304,16 @@ paths: enum: - invalid - open - - matched + - active - closed default: invalid description: >- - invalid: Prefix should start with 0 in enum. So declaring dummy state - open: OrderOpen denotes state for order open - - matched: OrderMatched denotes state for order matched + - active: OrderMatched denotes state for order matched - closed: OrderClosed denotes state for order lost title: State is an enum which refers to state of order - start_at: - type: string - format: int64 spec: type: object properties: @@ -1961,6 +2443,20 @@ paths: type: array items: type: object + properties: + kind: + type: string + enum: + - SHARED_HTTP + - RANDOM_PORT + default: SHARED_HTTP + description: >- + - SHARED_HTTP: Describes an endpoint + that becomes a Kubernetes Ingress + - RANDOM_PORT: Describes an endpoint that becomes a Kubernetes NodePort + title: >- + This describes how the endpoint is + implemented when the lease is deployed title: >- Endpoint describes a publicly accessible IP service @@ -1992,11 +2488,8 @@ paths: title: >- Resource stores unit, total count and price of resource - order_bid_duration: - type: string - format: int64 title: GroupSpec stores group specifications - close_at: + created_at: type: string format: int64 title: 'Order stores orderID, state of order and other details' @@ -2031,7 +2524,7 @@ paths: QueryOrdersResponse is response type for the Query/Orders RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -2122,7 +2615,13 @@ paths: in: query required: false type: boolean - format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + in: query + required: false + type: boolean tags: - Query /akash/provider/v1beta1/providers: @@ -2154,6 +2653,14 @@ paths: value: type: string title: Attribute represents key value pair + info: + type: object + properties: + email: + type: string + website: + type: string + title: ProviderInfo title: Provider stores owner and host details pagination: type: object @@ -2186,7 +2693,7 @@ paths: QueryProvidersResponse is response type for the Query/Providers RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -2254,7 +2761,13 @@ paths: in: query required: false type: boolean - format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + in: query + required: false + type: boolean tags: - Query '/akash/provider/v1beta1/providers/{owner}': @@ -2284,12 +2797,20 @@ paths: value: type: string title: Attribute represents key value pair + info: + type: object + properties: + email: + type: string + website: + type: string + title: ProviderInfo title: Provider stores owner and host details title: >- QueryProviderResponse is response type for the Query/Provider RPC method default: - description: An unexpected error response + description: An unexpected error response. schema: type: object properties: @@ -3708,6 +4229,57 @@ paths: description: Invalid request '500': description: Server internal error + /bank/total: + get: + deprecated: true + summary: Total supply of coins in the chain + tags: + - Bank + produces: + - application/json + responses: + '200': + description: OK + schema: + type: object + properties: + total: + type: array + items: + type: object + properties: + denom: + type: string + example: stake + amount: + type: string + example: '50' + '500': + description: Internal Server Error + '/bank/total/{denomination}': + parameters: + - in: path + name: denomination + description: Coin denomination + required: true + type: string + x-example: uatom + get: + deprecated: true + summary: Total supply of a single coin denomination + tags: + - Bank + produces: + - application/json + responses: + '200': + description: OK + schema: + type: string + '400': + description: Invalid coin denomination + '500': + description: Internal Server Error '/auth/accounts/{address}': get: deprecated: true @@ -3807,7 +4379,7 @@ paths: parameters: - in: body name: delegation - description: The password of the account to remove from the KMS + description: Delegate an amount of liquid coins to a validator schema: type: object properties: @@ -3861,7 +4433,7 @@ paths: type: string description: bech32 encoded address example: cosmosvaloper16xyempempp92x9hyzz9wrgf94r6j9h5f2w4n2l - delegation: + amount: type: object properties: denom: @@ -4022,7 +4594,7 @@ paths: parameters: - in: body name: delegation - description: The password of the account to remove from the KMS + description: Unbond an amount of bonded shares from a validator schema: type: object properties: @@ -4076,9 +4648,15 @@ paths: type: string description: bech32 encoded address example: cosmosvaloper16xyempempp92x9hyzz9wrgf94r6j9h5f2w4n2l - shares: - type: string - example: '100' + amount: + type: object + properties: + denom: + type: string + example: stake + amount: + type: string + example: '50' tags: - Staking consumes: @@ -6876,150 +7454,17 @@ paths: type: string '500': description: Internal Server Error - /supply/total: - get: - deprecated: true - summary: Total supply of coins in the chain - tags: - - Supply - produces: - - application/json - responses: - '200': - description: OK - schema: - type: object - properties: - total: - type: array - items: - type: object - properties: - denom: - type: string - example: stake - amount: - type: string - example: '50' - '500': - description: Internal Server Error - '/supply/total/{denomination}': - parameters: - - in: path - name: denomination - description: Coin denomination - required: true - type: string - x-example: uatom - get: - deprecated: true - summary: Total supply of a single coin denomination - tags: - - Supply - produces: - - application/json - responses: - '200': - description: OK - schema: - type: string - '400': - description: Invalid coin denomination - '500': - description: Internal Server Error - '/cosmos/auth/v1beta1/accounts/{address}': + /cosmos/auth/v1beta1/accounts: get: - summary: Account returns account details based on address. - operationId: Account + summary: Accounts returns all the existing accounts + operationId: Accounts responses: '200': description: A successful response. schema: type: object properties: - account: - description: account defines the account of the corresponding address. - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - QueryAccountResponse is the response type for the Query/Account - RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: + accounts: type: array items: type: object @@ -7196,48 +7641,30 @@ paths: "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" } - parameters: - - name: address - description: address defines the address to query for. - in: path - required: true - type: string - tags: - - Query - /cosmos/auth/v1beta1/params: - get: - summary: Params queries all parameters. - operationId: AuthParams - responses: - '200': - description: A successful response. - schema: - type: object - properties: - params: - description: params defines the parameters of the module. + title: accounts are the existing accounts + pagination: + description: pagination defines the pagination in the response. type: object properties: - max_memo_characters: - type: string - format: uint64 - tx_sig_limit: - type: string - format: uint64 - tx_size_cost_per_byte: - type: string - format: uint64 - sig_verify_cost_ed25519: + next_key: type: string - format: uint64 - sig_verify_cost_secp256k1: + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: type: string format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise description: >- - QueryParamsResponse is the response type for the Query/Params RPC - method. + QueryAccountsResponse is the response type for the Query/Accounts + RPC method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -7425,87 +7852,7 @@ paths: "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" } - tags: - - Query - '/cosmos/bank/v1beta1/balances/{address}': - get: - summary: AllBalances queries the balance of all coins for a single account. - operationId: AllBalances - responses: - '200': - description: A successful response. - schema: - type: object - properties: - balances: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - description: balances is the balances of all the coins. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - next_key: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - QueryAllBalancesResponse is the response type for the - Query/AllBalances RPC - - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - value: - type: string - format: byte parameters: - - name: address - description: address is the address to query balances for. - in: path - required: true - type: string - name: pagination.key description: |- key is a value returned in PageResponse.next_key to begin @@ -7552,31 +7899,203 @@ paths: in: query required: false type: boolean + format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + in: query + required: false + type: boolean + format: boolean tags: - Query - '/cosmos/bank/v1beta1/balances/{address}/{denom}': + '/cosmos/auth/v1beta1/accounts/{address}': get: - summary: Balance queries the balance of a single coin for a single account. - operationId: Balance + summary: Account returns account details based on address. + operationId: Account responses: '200': description: A successful response. schema: type: object properties: - balance: - description: balance is the balance of the coin. + account: type: object properties: - denom: + type_url: type: string - amount: + description: >- + A URL/resource name that uniquely identifies the type of + the serialized + + protocol buffer message. This string must contain at least + + one "/" character. The last segment of the URL's path must + represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in a + canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary all + types that they + + expect it to use in the context of Any. However, for URLs + which use the + + scheme `http`, `https`, or no scheme, one can optionally + set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the + official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. + value: type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message + along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values in + the form + + of utility functions or additional generated methods of the + Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by default + use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the last + '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield + type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with an + + additional field `@type` which contains the type URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom + JSON + + representation, that representation will be embedded adding a + field + + `value` which holds the custom JSON in addition to the `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } description: >- - QueryBalanceResponse is the response type for the Query/Balance + QueryAccountResponse is the response type for the Query/Account RPC method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -7594,26 +8113,188 @@ paths: properties: type_url: type: string + description: >- + A URL/resource name that uniquely identifies the type of + the serialized + + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's path + must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in + a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary + all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can optionally + set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in + the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. value: type: string format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values + in the form + + of utility functions or additional generated methods of the + Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the + last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield + type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with + an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom + JSON + + representation, that representation will be embedded adding + a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } parameters: - name: address - description: address is the address to query balances for. - in: path - required: true - type: string - - name: denom - description: denom is the coin denom to query balances for. + description: address defines the address to query for. in: path required: true type: string tags: - Query - /cosmos/bank/v1beta1/params: + /cosmos/auth/v1beta1/params: get: - summary: Params queries the parameters of x/bank module. - operationId: BankParams + summary: Params queries all parameters. + operationId: AuthParams responses: '200': description: A successful response. @@ -7621,30 +8302,29 @@ paths: type: object properties: params: + description: params defines the parameters of the module. type: object properties: - send_enabled: - type: array - items: - type: object - properties: - denom: - type: string - enabled: - type: boolean - description: >- - SendEnabled maps coin denom to a send_enabled status - (whether a denom is - - sendable). - default_send_enabled: - type: boolean - description: Params defines the parameters for the bank module. + max_memo_characters: + type: string + format: uint64 + tx_sig_limit: + type: string + format: uint64 + tx_size_cost_per_byte: + type: string + format: uint64 + sig_verify_cost_ed25519: + type: string + format: uint64 + sig_verify_cost_secp256k1: + type: string + format: uint64 description: >- - QueryParamsResponse defines the response type for querying x/bank - parameters. + QueryParamsResponse is the response type for the Query/Params RPC + method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -7662,46 +8342,231 @@ paths: properties: type_url: type: string - value: - type: string - format: byte - tags: - - Query - /cosmos/bank/v1beta1/supply: - get: - summary: TotalSupply queries the total supply of all coins. - operationId: TotalSupply - responses: - '200': - description: A successful response. - schema: - type: object - properties: - supply: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - + description: >- + A URL/resource name that uniquely identifies the type of + the serialized + + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's path + must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in + a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary + all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can optionally + set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in + the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values + in the form + + of utility functions or additional generated methods of the + Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the + last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield + type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with + an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom + JSON + + representation, that representation will be embedded adding + a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + tags: + - Query + '/cosmos/bank/v1beta1/balances/{address}': + get: + summary: AllBalances queries the balance of all coins for a single account. + operationId: AllBalances + responses: + '200': + description: A successful response. + schema: + type: object + properties: + balances: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + NOTE: The amount field is an Int which implements the custom method signatures required by gogoproto. - title: supply is the supply of the coins - title: >- - QueryTotalSupplyResponse is the response type for the - Query/TotalSupply RPC + description: balances is the balances of all the coins. + pagination: + description: pagination defines the pagination in the response. + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total - method + was set, its value is undefined otherwise + description: >- + QueryAllBalancesResponse is the response type for the + Query/AllBalances RPC + + method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -7722,31 +8587,99 @@ paths: value: type: string format: byte + parameters: + - name: address + description: address is the address to query balances for. + in: path + required: true + type: string + - name: pagination.key + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + in: query + required: false + type: string + format: byte + - name: pagination.offset + description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + in: query + required: false + type: string + format: uint64 + - name: pagination.limit + description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + in: query + required: false + type: string + format: uint64 + - name: pagination.count_total + description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + required: false + type: boolean + format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + in: query + required: false + type: boolean + format: boolean tags: - Query - '/cosmos/bank/v1beta1/supply/{denom}': + '/cosmos/bank/v1beta1/balances/{address}/{denom}': get: - summary: SupplyOf queries the supply of a single coin. - operationId: SupplyOf + summary: Balance queries the balance of a single coin for a single account. + operationId: Balance responses: '200': description: A successful response. schema: type: object properties: - amount: - description: amount is the supply of the coin. + balance: type: object properties: denom: type: string amount: type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. description: >- - QuerySupplyOfResponse is the response type for the Query/SupplyOf + QueryBalanceResponse is the response type for the Query/Balance RPC method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -7768,6 +8701,11 @@ paths: type: string format: byte parameters: + - name: address + description: address is the address to query balances for. + in: path + required: true + type: string - name: denom description: denom is the coin denom to query balances for. in: path @@ -7775,42 +8713,76 @@ paths: type: string tags: - Query - /cosmos/distribution/v1beta1/community_pool: + '/cosmos/bank/v1beta1/denom_owners/{denom}': get: - summary: CommunityPool queries the community pool coins. - operationId: CommunityPool + summary: >- + DenomOwners queries for all account addresses that own a particular + token + + denomination. + operationId: DenomOwners responses: '200': description: A successful response. schema: type: object properties: - pool: + denom_owners: type: array items: type: object properties: - denom: - type: string - amount: + address: type: string + description: >- + address defines the address that owns a particular + denomination. + balance: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. description: >- - DecCoin defines a token with a denomination and a decimal - amount. + DenomOwner defines structure representing an account that + owns or holds a + particular denominated token. It contains the account + address and account - NOTE: The amount field is an Dec which implements the custom - method + balance of the denominated token. + pagination: + description: pagination defines the pagination in the response. + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total - signatures required by gogoproto. - description: pool defines community pool's coins. + was set, its value is undefined otherwise description: >- - QueryCommunityPoolResponse is the response type for the - Query/CommunityPool - - RPC method. + QueryDenomOwnersResponse defines the RPC response of a DenomOwners + RPC query. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -7831,73 +8803,192 @@ paths: value: type: string format: byte + parameters: + - name: denom + description: >- + denom defines the coin denomination to query all account holders + for. + in: path + required: true + type: string + - name: pagination.key + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + in: query + required: false + type: string + format: byte + - name: pagination.offset + description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + in: query + required: false + type: string + format: uint64 + - name: pagination.limit + description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + in: query + required: false + type: string + format: uint64 + - name: pagination.count_total + description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + required: false + type: boolean + format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + in: query + required: false + type: boolean + format: boolean tags: - Query - '/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards': + /cosmos/bank/v1beta1/denoms_metadata: get: summary: |- - DelegationTotalRewards queries the total rewards accrued by a each - validator. - operationId: DelegationTotalRewards + DenomsMetadata queries the client metadata for all registered coin + denominations. + operationId: DenomsMetadata responses: '200': description: A successful response. schema: type: object properties: - rewards: + metadatas: type: array items: type: object properties: - validator_address: + description: type: string - reward: + denom_units: type: array items: type: object properties: denom: type: string - amount: - type: string - description: >- - DecCoin defines a token with a denomination and a - decimal amount. + description: >- + denom represents the string name of the given + denom unit (e.g uatom). + exponent: + type: integer + format: int64 + description: >- + exponent represents power of 10 exponent that one + must + raise the base_denom to in order to equal the + given DenomUnit's denom - NOTE: The amount field is an Dec which implements the - custom method + 1 denom = 1^exponent base_denom - signatures required by gogoproto. - description: |- - DelegationDelegatorReward represents the properties - of a delegator's delegation reward. - description: rewards defines all the rewards accrued by a delegator. - total: - type: array - items: - type: object - properties: - denom: + (e.g. with a base_denom of uatom, one can create a + DenomUnit of 'atom' with + + exponent = 6, thus: 1 atom = 10^6 uatom). + aliases: + type: array + items: + type: string + title: >- + aliases is a list of string aliases for the given + denom + description: |- + DenomUnit represents a struct that describes a given + denomination unit of the basic token. + title: >- + denom_units represents the list of DenomUnit's for a + given coin + base: type: string - amount: + description: >- + base represents the base denom (should be the DenomUnit + with exponent = 0). + display: type: string - description: >- - DecCoin defines a token with a denomination and a decimal - amount. + description: |- + display indicates the suggested denom that should be + displayed in clients. + name: + type: string + title: 'name defines the name of the token (eg: Cosmos Atom)' + symbol: + type: string + description: >- + symbol is the token symbol usually shown on exchanges + (eg: ATOM). This can + be the same as the display. + uri: + type: string + description: >- + URI to a document (on or off-chain) that contains + additional information. Optional. + uri_hash: + type: string + description: >- + URIHash is a sha256 hash of a document pointed by URI. + It's used to verify that - NOTE: The amount field is an Dec which implements the custom - method + the document didn't change. Optional. + description: |- + Metadata represents a struct that describes + a basic token. + description: >- + metadata provides the client information for all the + registered tokens. + pagination: + description: pagination defines the pagination in the response. + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total - signatures required by gogoproto. - description: total defines the sum of all the rewards. - description: |- - QueryDelegationTotalRewardsResponse is the response type for the - Query/DelegationTotalRewards RPC method. + was set, its value is undefined otherwise + description: >- + QueryDenomsMetadataResponse is the response type for the + Query/DenomsMetadata RPC + + method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -7919,262 +9010,159 @@ paths: type: string format: byte parameters: - - name: delegator_address - description: delegator_address defines the delegator address to query for. - in: path - required: true + - name: pagination.key + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + in: query + required: false type: string - tags: - - Query - '/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards/{validator_address}': - get: - summary: DelegationRewards queries the total rewards accrued by a delegation. - operationId: DelegationRewards - responses: - '200': - description: A successful response. - schema: - type: object - properties: - rewards: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - DecCoin defines a token with a denomination and a decimal - amount. - + format: byte + - name: pagination.offset + description: >- + offset is a numeric offset that can be used when key is unavailable. - NOTE: The amount field is an Dec which implements the custom - method + It is less efficient than using key. Only one of offset or key + should - signatures required by gogoproto. - description: rewards defines the rewards accrued by a delegation. - description: |- - QueryDelegationRewardsResponse is the response type for the - Query/DelegationRewards RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - value: - type: string - format: byte - parameters: - - name: delegator_address - description: delegator_address defines the delegator address to query for. - in: path - required: true - type: string - - name: validator_address - description: validator_address defines the validator address to query for. - in: path - required: true - type: string - tags: - - Query - '/cosmos/distribution/v1beta1/delegators/{delegator_address}/validators': - get: - summary: DelegatorValidators queries the validators of a delegator. - operationId: DelegatorValidators - responses: - '200': - description: A successful response. - schema: - type: object - properties: - validators: - type: array - items: - type: string - description: >- - validators defines the validators a delegator is delegating - for. - description: |- - QueryDelegatorValidatorsResponse is the response type for the - Query/DelegatorValidators RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - value: - type: string - format: byte - parameters: - - name: delegator_address - description: delegator_address defines the delegator address to query for. - in: path - required: true + be set. + in: query + required: false type: string - tags: - - Query - '/cosmos/distribution/v1beta1/delegators/{delegator_address}/withdraw_address': - get: - summary: DelegatorWithdrawAddress queries withdraw address of a delegator. - operationId: DelegatorWithdrawAddress - responses: - '200': - description: A successful response. - schema: - type: object - properties: - withdraw_address: - type: string - description: withdraw_address defines the delegator address to query for. - description: |- - QueryDelegatorWithdrawAddressResponse is the response type for the - Query/DelegatorWithdrawAddress RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - value: - type: string - format: byte - parameters: - - name: delegator_address - description: delegator_address defines the delegator address to query for. - in: path - required: true + format: uint64 + - name: pagination.limit + description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + in: query + required: false type: string + format: uint64 + - name: pagination.count_total + description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + required: false + type: boolean + format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + in: query + required: false + type: boolean + format: boolean tags: - Query - /cosmos/distribution/v1beta1/params: + '/cosmos/bank/v1beta1/denoms_metadata/{denom}': get: - summary: Params queries params of the distribution module. - operationId: DistributionParams + summary: DenomsMetadata queries the client metadata of a given coin denomination. + operationId: DenomMetadata responses: '200': description: A successful response. schema: type: object properties: - params: - description: params defines the parameters of the module. + metadata: type: object properties: - community_tax: - type: string - base_proposer_reward: - type: string - bonus_proposer_reward: + description: type: string - withdraw_addr_enabled: - type: boolean - description: >- - QueryParamsResponse is the response type for the Query/Params RPC - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - value: - type: string - format: byte - tags: - - Query - '/cosmos/distribution/v1beta1/validators/{validator_address}/commission': - get: - summary: ValidatorCommission queries accumulated commission for a validator. - operationId: ValidatorCommission - responses: - '200': - description: A successful response. - schema: - type: object - properties: - commission: - description: commission defines the commision the validator received. - type: object - properties: - commission: + denom_units: type: array items: type: object properties: denom: type: string - amount: - type: string - description: >- - DecCoin defines a token with a denomination and a - decimal amount. + description: >- + denom represents the string name of the given denom + unit (e.g uatom). + exponent: + type: integer + format: int64 + description: >- + exponent represents power of 10 exponent that one + must + raise the base_denom to in order to equal the given + DenomUnit's denom - NOTE: The amount field is an Dec which implements the - custom method + 1 denom = 1^exponent base_denom - signatures required by gogoproto. - title: |- - QueryValidatorCommissionResponse is the response type for the - Query/ValidatorCommission RPC method + (e.g. with a base_denom of uatom, one can create a + DenomUnit of 'atom' with + + exponent = 6, thus: 1 atom = 10^6 uatom). + aliases: + type: array + items: + type: string + title: >- + aliases is a list of string aliases for the given + denom + description: |- + DenomUnit represents a struct that describes a given + denomination unit of the basic token. + title: >- + denom_units represents the list of DenomUnit's for a given + coin + base: + type: string + description: >- + base represents the base denom (should be the DenomUnit + with exponent = 0). + display: + type: string + description: |- + display indicates the suggested denom that should be + displayed in clients. + name: + type: string + title: 'name defines the name of the token (eg: Cosmos Atom)' + symbol: + type: string + description: >- + symbol is the token symbol usually shown on exchanges (eg: + ATOM). This can + + be the same as the display. + uri: + type: string + description: >- + URI to a document (on or off-chain) that contains + additional information. Optional. + uri_hash: + type: string + description: >- + URIHash is a sha256 hash of a document pointed by URI. + It's used to verify that + + the document didn't change. Optional. + description: |- + Metadata represents a struct that describes + a basic token. + description: >- + QueryDenomMetadataResponse is the response type for the + Query/DenomMetadata RPC + + method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -8196,57 +9184,50 @@ paths: type: string format: byte parameters: - - name: validator_address - description: validator_address defines the validator address to query for. + - name: denom + description: denom is the coin denom to query the metadata for. in: path required: true type: string tags: - Query - '/cosmos/distribution/v1beta1/validators/{validator_address}/outstanding_rewards': + /cosmos/bank/v1beta1/params: get: - summary: ValidatorOutstandingRewards queries rewards of a validator address. - operationId: ValidatorOutstandingRewards + summary: Params queries the parameters of x/bank module. + operationId: BankParams responses: '200': description: A successful response. schema: type: object properties: - rewards: + params: type: object properties: - rewards: + send_enabled: type: array items: type: object properties: denom: type: string - amount: - type: string + enabled: + type: boolean + format: boolean description: >- - DecCoin defines a token with a denomination and a - decimal amount. - - - NOTE: The amount field is an Dec which implements the - custom method - - signatures required by gogoproto. - description: >- - ValidatorOutstandingRewards represents outstanding - (un-withdrawn) rewards + SendEnabled maps coin denom to a send_enabled status + (whether a denom is - for a validator inexpensive to track, allows simple sanity - checks. + sendable). + default_send_enabled: + type: boolean + format: boolean + description: Params defines the parameters for the bank module. description: >- - QueryValidatorOutstandingRewardsResponse is the response type for - the - - Query/ValidatorOutstandingRewards RPC method. + QueryParamsResponse defines the response type for querying x/bank + parameters. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -8267,45 +9248,36 @@ paths: value: type: string format: byte - parameters: - - name: validator_address - description: validator_address defines the validator address to query for. - in: path - required: true - type: string tags: - Query - '/cosmos/distribution/v1beta1/validators/{validator_address}/slashes': + /cosmos/bank/v1beta1/supply: get: - summary: ValidatorSlashes queries slash events of a validator. - operationId: ValidatorSlashes + summary: TotalSupply queries the total supply of all coins. + operationId: TotalSupply responses: '200': description: A successful response. schema: type: object properties: - slashes: + supply: type: array items: type: object properties: - validator_period: + denom: type: string - format: uint64 - fraction: + amount: type: string description: >- - ValidatorSlashEvent represents a validator slash event. + Coin defines a token with a denomination and an amount. - Height is implicit within the store key. - This is needed to calculate appropriate amount of staking - tokens + NOTE: The amount field is an Int which implements the custom + method - for delegations which are withdrawn after a slash has - occurred. - description: slashes defines the slashes the validator received. + signatures required by gogoproto. + title: supply is the supply of the coins pagination: description: pagination defines the pagination in the response. type: object @@ -8324,11 +9296,13 @@ paths: PageRequest.count_total was set, its value is undefined otherwise - description: |- - QueryValidatorSlashesResponse is the response type for the - Query/ValidatorSlashes RPC method. + title: >- + QueryTotalSupplyResponse is the response type for the + Query/TotalSupply RPC + + method default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -8350,27 +9324,6 @@ paths: type: string format: byte parameters: - - name: validator_address - description: validator_address defines the validator address to query for. - in: path - required: true - type: string - - name: starting_height - description: >- - starting_height defines the optional starting height to query the - slashes. - in: query - required: false - type: string - format: uint64 - - name: ending_height - description: >- - starting_height defines the optional ending height to query the - slashes. - in: query - required: false - type: string - format: uint64 - name: pagination.key description: |- key is a value returned in PageResponse.next_key to begin @@ -8417,221 +9370,644 @@ paths: in: query required: false type: boolean + format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + in: query + required: false + type: boolean + format: boolean tags: - Query - /cosmos/evidence/v1beta1/evidence: + '/cosmos/bank/v1beta1/supply/{denom}': get: - summary: AllEvidence queries all evidence. - operationId: AllEvidence + summary: SupplyOf queries the supply of a single coin. + operationId: SupplyOf responses: '200': description: A successful response. schema: type: object properties: - evidence: + amount: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + description: >- + QuerySupplyOfResponse is the response type for the Query/SupplyOf + RPC method. + default: + description: An unexpected error response + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: type: array items: type: object properties: type_url: type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. value: type: string format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular + parameters: + - name: denom + description: denom is the coin denom to query balances for. + in: path + required: true + type: string + tags: + - Query + /cosmos/base/tendermint/v1beta1/blocks/latest: + get: + summary: GetLatestBlock returns the latest block. + operationId: GetLatestBlock + responses: + '200': + description: A successful response. + schema: + type: object + properties: + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + block: + type: object + properties: + header: + type: object + properties: + version: + title: basic block info + type: object + properties: + block: + type: string + format: uint64 + app: + type: string + format: uint64 + description: >- + Consensus captures the consensus rules for processing + a block in the blockchain, - representation of the deserialized, embedded message, with - an + including all blockchain data structures and the rules + of the application's - additional field `@type` which contains the type URL. - Example: + state transition machine. + chain_id: + type: string + height: + type: string + format: int64 + time: + type: string + format: date-time + last_block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + last_commit_hash: + type: string + format: byte + title: hashes of block data + data_hash: + type: string + format: byte + validators_hash: + type: string + format: byte + title: hashes from the app output from the prev block + next_validators_hash: + type: string + format: byte + consensus_hash: + type: string + format: byte + app_hash: + type: string + format: byte + last_results_hash: + type: string + format: byte + evidence_hash: + type: string + format: byte + title: consensus info + proposer_address: + type: string + format: byte + description: Header defines the structure of a Tendermint block header. + data: + type: object + properties: + txs: + type: array + items: + type: string + format: byte + description: >- + Txs that will be applied by state @ block.Height+1. - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } + NOTE: not all txs here are valid. We're just agreeing + on the order first. - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } + This means that block.AppHash does not include these + txs. + title: >- + Data contains the set of transactions included in the + block + evidence: + type: object + properties: + evidence: + type: array + items: + type: object + properties: + duplicate_vote_evidence: + type: object + properties: + vote_a: + type: object + properties: + type: + type: string + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + default: SIGNED_MSG_TYPE_UNKNOWN + description: >- + SignedMsgType is a type of signed + message in the consensus. - If the embedded message type is well-known and has a custom - JSON + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + timestamp: + type: string + format: date-time + validator_address: + type: string + format: byte + validator_index: + type: integer + format: int32 + signature: + type: string + format: byte + description: >- + Vote represents a prevote, precommit, or + commit vote from validators for - representation, that representation will be embedded adding - a field + consensus. + vote_b: + type: object + properties: + type: + type: string + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + default: SIGNED_MSG_TYPE_UNKNOWN + description: >- + SignedMsgType is a type of signed + message in the consensus. - `value` which holds the custom JSON in addition to the - `@type` + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + timestamp: + type: string + format: date-time + validator_address: + type: string + format: byte + validator_index: + type: integer + format: int32 + signature: + type: string + format: byte + description: >- + Vote represents a prevote, precommit, or + commit vote from validators for - field. Example (for message [google.protobuf.Duration][]): + consensus. + total_voting_power: + type: string + format: int64 + validator_power: + type: string + format: int64 + timestamp: + type: string + format: date-time + description: >- + DuplicateVoteEvidence contains evidence of a + validator signed two conflicting votes. + light_client_attack_evidence: + type: object + properties: + conflicting_block: + type: object + properties: + signed_header: + type: object + properties: + header: + type: object + properties: + version: + title: basic block info + type: object + properties: + block: + type: string + format: uint64 + app: + type: string + format: uint64 + description: >- + Consensus captures the consensus rules + for processing a block in the + blockchain, - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - description: evidence returns all evidences. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - next_key: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total + including all blockchain data structures + and the rules of the application's - was set, its value is undefined otherwise + state transition machine. + chain_id: + type: string + height: + type: string + format: int64 + time: + type: string + format: date-time + last_block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + last_commit_hash: + type: string + format: byte + title: hashes of block data + data_hash: + type: string + format: byte + validators_hash: + type: string + format: byte + title: >- + hashes from the app output from the prev + block + next_validators_hash: + type: string + format: byte + consensus_hash: + type: string + format: byte + app_hash: + type: string + format: byte + last_results_hash: + type: string + format: byte + evidence_hash: + type: string + format: byte + title: consensus info + proposer_address: + type: string + format: byte + description: >- + Header defines the structure of a + Tendermint block header. + commit: + type: object + properties: + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + signatures: + type: array + items: + type: object + properties: + block_id_flag: + type: string + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + default: BLOCK_ID_FLAG_UNKNOWN + title: >- + BlockIdFlag indicates which BlcokID the + signature is for + validator_address: + type: string + format: byte + timestamp: + type: string + format: date-time + signature: + type: string + format: byte + description: >- + CommitSig is a part of the Vote included + in a Commit. + description: >- + Commit contains the evidence that a + block was committed by a set of + validators. + validator_set: + type: object + properties: + validators: + type: array + items: + type: object + properties: + address: + type: string + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for + use with Tendermint Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + proposer: + type: object + properties: + address: + type: string + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for + use with Tendermint Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + total_voting_power: + type: string + format: int64 + common_height: + type: string + format: int64 + byzantine_validators: + type: array + items: + type: object + properties: + address: + type: string + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for + use with Tendermint Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + total_voting_power: + type: string + format: int64 + timestamp: + type: string + format: date-time + description: >- + LightClientAttackEvidence contains evidence of a + set of validators attempting to mislead a light + client. + last_commit: + type: object + properties: + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + signatures: + type: array + items: + type: object + properties: + block_id_flag: + type: string + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + default: BLOCK_ID_FLAG_UNKNOWN + title: >- + BlockIdFlag indicates which BlcokID the + signature is for + validator_address: + type: string + format: byte + timestamp: + type: string + format: date-time + signature: + type: string + format: byte + description: >- + CommitSig is a part of the Vote included in a + Commit. + description: >- + Commit contains the evidence that a block was committed by + a set of validators. description: >- - QueryAllEvidenceResponse is the response type for the - Query/AllEvidence RPC - - method. + GetLatestBlockResponse is the response type for the + Query/GetLatestBlock RPC method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -8819,137 +10195,577 @@ paths: "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" } - parameters: - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean tags: - - Query - '/cosmos/evidence/v1beta1/evidence/{evidence_hash}': + - Service + '/cosmos/base/tendermint/v1beta1/blocks/{height}': get: - summary: Evidence queries evidence based on evidence hash. - operationId: Evidence + summary: GetBlockByHeight queries block for given height. + operationId: GetBlockByHeight responses: '200': description: A successful response. schema: type: object properties: - evidence: - description: evidence returns the requested evidence. + block_id: type: object properties: - type_url: + hash: type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + block: + type: object + properties: + header: + type: object + properties: + version: + title: basic block info + type: object + properties: + block: + type: string + format: uint64 + app: + type: string + format: uint64 + description: >- + Consensus captures the consensus rules for processing + a block in the blockchain, - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: + including all blockchain data structures and the rules + of the application's + state transition machine. + chain_id: + type: string + height: + type: string + format: int64 + time: + type: string + format: date-time + last_block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + last_commit_hash: + type: string + format: byte + title: hashes of block data + data_hash: + type: string + format: byte + validators_hash: + type: string + format: byte + title: hashes from the app output from the prev block + next_validators_hash: + type: string + format: byte + consensus_hash: + type: string + format: byte + app_hash: + type: string + format: byte + last_results_hash: + type: string + format: byte + evidence_hash: + type: string + format: byte + title: consensus info + proposer_address: + type: string + format: byte + description: Header defines the structure of a Tendermint block header. + data: + type: object + properties: + txs: + type: array + items: + type: string + format: byte + description: >- + Txs that will be applied by state @ block.Height+1. - * If no scheme is provided, `https` is assumed. + NOTE: not all txs here are valid. We're just agreeing + on the order first. - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) + This means that block.AppHash does not include these + txs. + title: >- + Data contains the set of transactions included in the + block + evidence: + type: object + properties: + evidence: + type: array + items: + type: object + properties: + duplicate_vote_evidence: + type: object + properties: + vote_a: + type: object + properties: + type: + type: string + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + default: SIGNED_MSG_TYPE_UNKNOWN + description: >- + SignedMsgType is a type of signed + message in the consensus. - Note: this functionality is not currently available in the - official + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + timestamp: + type: string + format: date-time + validator_address: + type: string + format: byte + validator_index: + type: integer + format: int32 + signature: + type: string + format: byte + description: >- + Vote represents a prevote, precommit, or + commit vote from validators for - protobuf release, and it is not used for type URLs - beginning with + consensus. + vote_b: + type: object + properties: + type: + type: string + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + default: SIGNED_MSG_TYPE_UNKNOWN + description: >- + SignedMsgType is a type of signed + message in the consensus. - type.googleapis.com. + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + timestamp: + type: string + format: date-time + validator_address: + type: string + format: byte + validator_index: + type: integer + format: int32 + signature: + type: string + format: byte + description: >- + Vote represents a prevote, precommit, or + commit vote from validators for + consensus. + total_voting_power: + type: string + format: int64 + validator_power: + type: string + format: int64 + timestamp: + type: string + format: date-time + description: >- + DuplicateVoteEvidence contains evidence of a + validator signed two conflicting votes. + light_client_attack_evidence: + type: object + properties: + conflicting_block: + type: object + properties: + signed_header: + type: object + properties: + header: + type: object + properties: + version: + title: basic block info + type: object + properties: + block: + type: string + format: uint64 + app: + type: string + format: uint64 + description: >- + Consensus captures the consensus rules + for processing a block in the + blockchain, - Schemes other than `http`, `https` (or the empty scheme) - might be + including all blockchain data structures + and the rules of the application's - used with implementation specific semantics. - value: - type: string - format: byte + state transition machine. + chain_id: + type: string + height: + type: string + format: int64 + time: + type: string + format: date-time + last_block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + last_commit_hash: + type: string + format: byte + title: hashes of block data + data_hash: + type: string + format: byte + validators_hash: + type: string + format: byte + title: >- + hashes from the app output from the prev + block + next_validators_hash: + type: string + format: byte + consensus_hash: + type: string + format: byte + app_hash: + type: string + format: byte + last_results_hash: + type: string + format: byte + evidence_hash: + type: string + format: byte + title: consensus info + proposer_address: + type: string + format: byte + description: >- + Header defines the structure of a + Tendermint block header. + commit: + type: object + properties: + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + signatures: + type: array + items: + type: object + properties: + block_id_flag: + type: string + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + default: BLOCK_ID_FLAG_UNKNOWN + title: >- + BlockIdFlag indicates which BlcokID the + signature is for + validator_address: + type: string + format: byte + timestamp: + type: string + format: date-time + signature: + type: string + format: byte + description: >- + CommitSig is a part of the Vote included + in a Commit. + description: >- + Commit contains the evidence that a + block was committed by a set of + validators. + validator_set: + type: object + properties: + validators: + type: array + items: + type: object + properties: + address: + type: string + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for + use with Tendermint Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + proposer: + type: object + properties: + address: + type: string + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for + use with Tendermint Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + total_voting_power: + type: string + format: int64 + common_height: + type: string + format: int64 + byzantine_validators: + type: array + items: + type: object + properties: + address: + type: string + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for + use with Tendermint Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + total_voting_power: + type: string + format: int64 + timestamp: + type: string + format: date-time + description: >- + LightClientAttackEvidence contains evidence of a + set of validators attempting to mislead a light + client. + last_commit: + type: object + properties: + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + signatures: + type: array + items: + type: object + properties: + block_id_flag: + type: string + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + default: BLOCK_ID_FLAG_UNKNOWN + title: >- + BlockIdFlag indicates which BlcokID the + signature is for + validator_address: + type: string + format: byte + timestamp: + type: string + format: date-time + signature: + type: string + format: byte + description: >- + CommitSig is a part of the Vote included in a + Commit. description: >- - Must be a valid serialized protocol buffer of the above - specified type. + Commit contains the evidence that a block was committed by + a set of validators. description: >- - QueryEvidenceResponse is the response type for the Query/Evidence - RPC method. + GetBlockByHeightResponse is the response type for the + Query/GetBlockByHeight RPC method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -9138,88 +10954,96 @@ paths: "value": "1.212s" } parameters: - - name: evidence_hash - description: evidence_hash defines the hash of the requested evidence. + - name: height in: path required: true type: string - format: byte + format: int64 tags: - - Query - '/cosmos/gov/v1beta1/params/{params_type}': + - Service + /cosmos/base/tendermint/v1beta1/node_info: get: - summary: Params queries all parameters of the gov module. - operationId: GovParams + summary: GetNodeInfo queries the current node info. + operationId: GetNodeInfo responses: '200': description: A successful response. schema: type: object properties: - voting_params: - description: voting_params defines the parameters related to voting. + default_node_info: type: object properties: - voting_period: + protocol_version: + type: object + properties: + p2p: + type: string + format: uint64 + block: + type: string + format: uint64 + app: + type: string + format: uint64 + default_node_id: type: string - description: Length of the voting period. - deposit_params: - description: deposit_params defines the parameters related to deposit. + listen_addr: + type: string + network: + type: string + version: + type: string + channels: + type: string + format: byte + moniker: + type: string + other: + type: object + properties: + tx_index: + type: string + rpc_address: + type: string + application_version: type: object properties: - min_deposit: + name: + type: string + app_name: + type: string + version: + type: string + git_commit: + type: string + build_tags: + type: string + go_version: + type: string + build_deps: type: array items: type: object properties: - denom: + path: type: string - amount: + title: module path + version: type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - description: Minimum deposit for a proposal to enter voting period. - max_deposit_period: - type: string - description: >- - Maximum period for Atom holders to deposit on a proposal. - Initial value: 2 - months. - tally_params: - description: tally_params defines the parameters related to tally. - type: object - properties: - quorum: - type: string - format: byte - description: >- - Minimum percentage of total stake needed to vote for a - result to be - considered valid. - threshold: - type: string - format: byte - description: >- - Minimum proportion of Yes votes for proposal to pass. - Default value: 0.5. - veto_threshold: + title: module version + sum: + type: string + title: checksum + title: Module is the type for VersionInfo + cosmos_sdk_version: type: string - format: byte - description: >- - Minimum value of Veto votes to Total votes ratio for - proposal to be - vetoed. Default value: 1/3. + description: VersionInfo is the type for the GetNodeInfoResponse message. description: >- - QueryParamsResponse is the response type for the Query/Params RPC - method. + GetNodeInfoResponse is the request type for the Query/GetNodeInfo + RPC method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -9407,107 +11231,306 @@ paths: "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" } - parameters: - - name: params_type - description: >- - params_type defines which parameters to query for, can be one of - "voting", - - "tallying" or "deposit". - in: path - required: true - type: string tags: - - Query - /cosmos/gov/v1beta1/proposals: + - Service + /cosmos/base/tendermint/v1beta1/syncing: get: - summary: Proposals queries all proposals based on given status. - operationId: Proposals + summary: GetSyncing queries node syncing. + operationId: GetSyncing responses: '200': description: A successful response. schema: type: object properties: - proposals: + syncing: + type: boolean + format: boolean + description: >- + GetSyncingResponse is the response type for the Query/GetSyncing + RPC method. + default: + description: An unexpected error response + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: type: array items: type: object properties: - proposal_id: + type_url: type: string - format: uint64 - content: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the - type of the serialized + description: >- + A URL/resource name that uniquely identifies the type of + the serialized - protocol buffer message. This string must contain at - least + protocol buffer message. This string must contain at + least - one "/" character. The last segment of the URL's - path must represent + one "/" character. The last segment of the URL's path + must represent - the fully qualified name of the type (as in + the fully qualified name of the type (as in - `path/google.protobuf.Duration`). The name should be - in a canonical form + `path/google.protobuf.Duration`). The name should be in + a canonical form - (e.g., leading "." is not accepted). + (e.g., leading "." is not accepted). - In practice, teams usually precompile into the - binary all types that they + In practice, teams usually precompile into the binary + all types that they - expect it to use in the context of Any. However, for - URLs which use the + expect it to use in the context of Any. However, for + URLs which use the - scheme `http`, `https`, or no scheme, one can - optionally set up a type + scheme `http`, `https`, or no scheme, one can optionally + set up a type - server that maps type URLs to message definitions as - follows: + server that maps type URLs to message definitions as + follows: - * If no scheme is provided, `https` is assumed. + * If no scheme is provided, `https` is assumed. - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results - based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) - Note: this functionality is not currently available - in the official + Note: this functionality is not currently available in + the official - protobuf release, and it is not used for type URLs - beginning with + protobuf release, and it is not used for type URLs + beginning with - type.googleapis.com. + type.googleapis.com. - Schemes other than `http`, `https` (or the empty - scheme) might be + Schemes other than `http`, `https` (or the empty scheme) + might be - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the - above specified type. + used with implementation specific semantics. + value: + type: string + format: byte description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values + in the form + + of utility functions or additional generated methods of the + Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the + last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield + type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with + an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom + JSON + + representation, that representation will be embedded adding + a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + tags: + - Service + /cosmos/base/tendermint/v1beta1/validatorsets/latest: + get: + summary: GetLatestValidatorSet queries latest validator-set. + operationId: GetLatestValidatorSet + responses: + '200': + description: A successful response. + schema: + type: object + properties: + block_height: + type: string + format: int64 + validators: + type: array + items: + type: object + properties: + address: + type: string + pub_key: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the + type of the serialized + + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's + path must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be + in a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the + binary all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can + optionally set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results + based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available + in the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty + scheme) might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the + above specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + URL that describes the type of the serialized message. @@ -9614,80 +11637,15 @@ paths: "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" } - status: - type: string - enum: - - PROPOSAL_STATUS_UNSPECIFIED - - PROPOSAL_STATUS_DEPOSIT_PERIOD - - PROPOSAL_STATUS_VOTING_PERIOD - - PROPOSAL_STATUS_PASSED - - PROPOSAL_STATUS_REJECTED - - PROPOSAL_STATUS_FAILED - default: PROPOSAL_STATUS_UNSPECIFIED - description: >- - ProposalStatus enumerates the valid statuses of a - proposal. - - - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default propopsal status. - - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit - period. - - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting - period. - - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has - passed. - - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has - been rejected. - - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has - failed. - final_tally_result: - type: object - properties: - 'yes': - type: string - abstain: - type: string - 'no': - type: string - no_with_veto: - type: string - description: >- - TallyResult defines a standard tally for a governance - proposal. - submit_time: - type: string - format: date-time - deposit_end_time: - type: string - format: date-time - total_deposit: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - voting_start_time: + voting_power: type: string - format: date-time - voting_end_time: + format: int64 + proposer_priority: type: string - format: date-time - description: >- - Proposal defines the core field members of a governance - proposal. + format: int64 + description: Validator is the type for the validator-set. pagination: - description: pagination defines the pagination in the response. + description: pagination defines an pagination for the response. type: object properties: next_key: @@ -9705,12 +11663,10 @@ paths: was set, its value is undefined otherwise description: >- - QueryProposalsResponse is the response type for the - Query/Proposals RPC - - method. + GetLatestValidatorSetResponse is the response type for the + Query/GetValidatorSetByHeight RPC method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -9899,42 +11855,6 @@ paths: "value": "1.212s" } parameters: - - name: proposal_status - description: |- - proposal_status defines the status of the proposals. - - - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default propopsal status. - - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit - period. - - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting - period. - - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has - passed. - - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has - been rejected. - - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has - failed. - in: query - required: false - type: string - enum: - - PROPOSAL_STATUS_UNSPECIFIED - - PROPOSAL_STATUS_DEPOSIT_PERIOD - - PROPOSAL_STATUS_VOTING_PERIOD - - PROPOSAL_STATUS_PASSED - - PROPOSAL_STATUS_REJECTED - - PROPOSAL_STATUS_FAILED - default: PROPOSAL_STATUS_UNSPECIFIED - - name: voter - description: voter defines the voter address for the proposals. - in: query - required: false - type: string - - name: depositor - description: depositor defines the deposit addresses from the proposals. - in: query - required: false - type: string - name: pagination.key description: |- key is a value returned in PageResponse.next_key to begin @@ -9981,516 +11901,223 @@ paths: in: query required: false type: boolean + format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + in: query + required: false + type: boolean + format: boolean tags: - - Query - '/cosmos/gov/v1beta1/proposals/{proposal_id}': + - Service + '/cosmos/base/tendermint/v1beta1/validatorsets/{height}': get: - summary: Proposal queries proposal details based on ProposalID. - operationId: Proposal + summary: GetValidatorSetByHeight queries validator-set at a given height. + operationId: GetValidatorSetByHeight responses: '200': description: A successful response. schema: type: object properties: - proposal: - type: object - properties: - proposal_id: - type: string - format: uint64 - content: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type - of the serialized + block_height: + type: string + format: int64 + validators: + type: array + items: + type: object + properties: + address: + type: string + pub_key: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the + type of the serialized - protocol buffer message. This string must contain at - least + protocol buffer message. This string must contain at + least - one "/" character. The last segment of the URL's path - must represent + one "/" character. The last segment of the URL's + path must represent - the fully qualified name of the type (as in + the fully qualified name of the type (as in - `path/google.protobuf.Duration`). The name should be - in a canonical form + `path/google.protobuf.Duration`). The name should be + in a canonical form - (e.g., leading "." is not accepted). + (e.g., leading "." is not accepted). - In practice, teams usually precompile into the binary - all types that they + In practice, teams usually precompile into the + binary all types that they - expect it to use in the context of Any. However, for - URLs which use the + expect it to use in the context of Any. However, for + URLs which use the - scheme `http`, `https`, or no scheme, one can - optionally set up a type + scheme `http`, `https`, or no scheme, one can + optionally set up a type - server that maps type URLs to message definitions as - follows: + server that maps type URLs to message definitions as + follows: - * If no scheme is provided, `https` is assumed. + * If no scheme is provided, `https` is assumed. - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results - based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results + based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) - Note: this functionality is not currently available in - the official + Note: this functionality is not currently available + in the official - protobuf release, and it is not used for type URLs - beginning with + protobuf release, and it is not used for type URLs + beginning with - type.googleapis.com. + type.googleapis.com. - Schemes other than `http`, `https` (or the empty - scheme) might be + Schemes other than `http`, `https` (or the empty + scheme) might be - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the - above specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the + above specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a - URL that describes the type of the serialized message. + URL that describes the type of the serialized message. - Protobuf library provides support to pack/unpack Any - values in the form + Protobuf library provides support to pack/unpack Any + values in the form - of utility functions or additional generated methods of - the Any type. + of utility functions or additional generated methods of + the Any type. - Example 1: Pack and unpack a message in C++. + Example 1: Pack and unpack a message in C++. - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { + Foo foo = ...; + Any any; + any.PackFrom(foo); ... - } + if (any.UnpackTo(&foo)) { + ... + } - Example 2: Pack and unpack a message in Java. + Example 2: Pack and unpack a message in Java. - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } - Example 3: Pack and unpack a message in Python. + Example 3: Pack and unpack a message in Python. - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) + foo = Foo(...) + any = Any() + any.Pack(foo) ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... - Example 4: Pack and unpack a message in Go + Example 4: Pack and unpack a message in Go - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) ... - } + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and - the unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will - yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a - custom JSON - - representation, that representation will be embedded - adding a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - status: - type: string - enum: - - PROPOSAL_STATUS_UNSPECIFIED - - PROPOSAL_STATUS_DEPOSIT_PERIOD - - PROPOSAL_STATUS_VOTING_PERIOD - - PROPOSAL_STATUS_PASSED - - PROPOSAL_STATUS_REJECTED - - PROPOSAL_STATUS_FAILED - default: PROPOSAL_STATUS_UNSPECIFIED - description: >- - ProposalStatus enumerates the valid statuses of a - proposal. - - - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default propopsal status. - - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit - period. - - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting - period. - - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has - passed. - - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has - been rejected. - - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has - failed. - final_tally_result: - type: object - properties: - 'yes': - type: string - abstain: - type: string - 'no': - type: string - no_with_veto: - type: string - description: >- - TallyResult defines a standard tally for a governance - proposal. - submit_time: - type: string - format: date-time - deposit_end_time: - type: string - format: date-time - total_deposit: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - voting_start_time: - type: string - format: date-time - voting_end_time: - type: string - format: date-time - description: >- - Proposal defines the core field members of a governance - proposal. - description: >- - QueryProposalResponse is the response type for the Query/Proposal - RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use + The pack methods provided by protobuf library will by + default use - 'type.googleapis.com/full.type.name' as the type URL and the - unpack + 'type.googleapis.com/full.type.name' as the type URL and + the unpack - methods only use the fully qualified type name after the - last '/' + methods only use the fully qualified type name after the + last '/' - in the type URL, for example "foo.bar.com/x/y.z" will yield - type + in the type URL, for example "foo.bar.com/x/y.z" will + yield type - name "y.z". + name "y.z". - JSON + JSON - ==== + ==== - The JSON representation of an `Any` value uses the regular + The JSON representation of an `Any` value uses the + regular - representation of the deserialized, embedded message, with - an + representation of the deserialized, embedded message, + with an - additional field `@type` which contains the type URL. - Example: + additional field `@type` which contains the type URL. + Example: - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } - If the embedded message type is well-known and has a custom - JSON + If the embedded message type is well-known and has a + custom JSON - representation, that representation will be embedded adding - a field + representation, that representation will be embedded + adding a field - `value` which holds the custom JSON in addition to the - `@type` + `value` which holds the custom JSON in addition to the + `@type` - field. Example (for message [google.protobuf.Duration][]): + field. Example (for message + [google.protobuf.Duration][]): - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: proposal_id - description: proposal_id defines the unique id of the proposal. - in: path - required: true - type: string - format: uint64 - tags: - - Query - '/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits': - get: - summary: Deposits queries all deposits of a single proposal. - operationId: Deposits - responses: - '200': - description: A successful response. - schema: - type: object - properties: - deposits: - type: array - items: - type: object - properties: - proposal_id: + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + voting_power: type: string - format: uint64 - depositor: + format: int64 + proposer_priority: type: string - amount: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - description: >- - Deposit defines an amount deposited by an account address to - an active - - proposal. + format: int64 + description: Validator is the type for the validator-set. pagination: - description: pagination defines the pagination in the response. + description: pagination defines an pagination for the response. type: object properties: next_key: @@ -10508,10 +12135,10 @@ paths: was set, its value is undefined otherwise description: >- - QueryDepositsResponse is the response type for the Query/Deposits - RPC method. + GetValidatorSetByHeightResponse is the response type for the + Query/GetValidatorSetByHeight RPC method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -10700,12 +12327,11 @@ paths: "value": "1.212s" } parameters: - - name: proposal_id - description: proposal_id defines the unique id of the proposal. + - name: height in: path required: true type: string - format: uint64 + format: int64 - name: pagination.key description: |- key is a value returned in PageResponse.next_key to begin @@ -10752,51 +12378,53 @@ paths: in: query required: false type: boolean + format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + in: query + required: false + type: boolean + format: boolean tags: - - Query - '/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits/{depositor}': + - Service + /cosmos/distribution/v1beta1/community_pool: get: - summary: >- - Deposit queries single deposit information based proposalID, - depositAddr. - operationId: Deposit + summary: CommunityPool queries the community pool coins. + operationId: CommunityPool responses: '200': description: A successful response. schema: type: object properties: - deposit: - description: deposit defines the requested deposit. - type: object - properties: - proposal_id: - type: string - format: uint64 - depositor: - type: string - amount: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. + pool: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + DecCoin defines a token with a denomination and a decimal + amount. - NOTE: The amount field is an Int which implements the - custom method + NOTE: The amount field is an Dec which implements the custom + method - signatures required by gogoproto. + signatures required by gogoproto. + description: pool defines community pool's coins. description: >- - QueryDepositResponse is the response type for the Query/Deposit + QueryCommunityPoolResponse is the response type for the + Query/CommunityPool + RPC method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -10814,217 +12442,138 @@ paths: properties: type_url: type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in + value: + type: string + format: byte + tags: + - Query + '/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards': + get: + summary: |- + DelegationTotalRewards queries the total rewards accrued by a each + validator. + operationId: DelegationTotalRewards + responses: + '200': + description: A successful response. + schema: + type: object + properties: + rewards: + type: array + items: + type: object + properties: + validator_address: + type: string + reward: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + DecCoin defines a token with a denomination and a + decimal amount. - `path/google.protobuf.Duration`). The name should be in - a canonical form - (e.g., leading "." is not accepted). + NOTE: The amount field is an Dec which implements the + custom method - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. + signatures required by gogoproto. + description: |- + DelegationDelegatorReward represents the properties + of a delegator's delegation reward. + description: rewards defines all the rewards accrued by a delegator. + total: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + DecCoin defines a token with a denomination and a decimal + amount. - Schemes other than `http`, `https` (or the empty scheme) - might be + NOTE: The amount field is an Dec which implements the custom + method - used with implementation specific semantics. + signatures required by gogoproto. + description: total defines the sum of all the rewards. + description: |- + QueryDelegationTotalRewardsResponse is the response type for the + Query/DelegationTotalRewards RPC method. + default: + description: An unexpected error response + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string value: type: string format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } parameters: - - name: proposal_id - description: proposal_id defines the unique id of the proposal. - in: path - required: true - type: string - format: uint64 - - name: depositor - description: depositor defines the deposit addresses from the proposals. + - name: delegator_address + description: delegator_address defines the delegator address to query for. in: path required: true type: string tags: - Query - '/cosmos/gov/v1beta1/proposals/{proposal_id}/tally': + '/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards/{validator_address}': get: - summary: TallyResult queries the tally of a proposal vote. - operationId: TallyResult + summary: DelegationRewards queries the total rewards accrued by a delegation. + operationId: DelegationRewards responses: '200': description: A successful response. schema: type: object properties: - tally: - description: tally defines the requested tally. - type: object - properties: - 'yes': - type: string - abstain: - type: string - 'no': - type: string - no_with_veto: - type: string - description: >- - QueryTallyResultResponse is the response type for the Query/Tally - RPC method. + rewards: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + DecCoin defines a token with a denomination and a decimal + amount. + + + NOTE: The amount field is an Dec which implements the custom + method + + signatures required by gogoproto. + description: rewards defines the rewards accrued by a delegation. + description: |- + QueryDelegationRewardsResponse is the response type for the + Query/DelegationRewards RPC method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -11042,252 +12591,146 @@ paths: properties: type_url: type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. value: type: string format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } parameters: - - name: proposal_id - description: proposal_id defines the unique id of the proposal. + - name: delegator_address + description: delegator_address defines the delegator address to query for. + in: path + required: true + type: string + - name: validator_address + description: validator_address defines the validator address to query for. in: path required: true type: string - format: uint64 tags: - Query - '/cosmos/gov/v1beta1/proposals/{proposal_id}/votes': + '/cosmos/distribution/v1beta1/delegators/{delegator_address}/validators': get: - summary: Votes queries votes of a given proposal. - operationId: Votes + summary: DelegatorValidators queries the validators of a delegator. + operationId: DelegatorValidators responses: '200': description: A successful response. schema: type: object properties: - votes: + validators: type: array items: - type: object - properties: - proposal_id: - type: string - format: uint64 - voter: - type: string - option: - type: string - enum: - - VOTE_OPTION_UNSPECIFIED - - VOTE_OPTION_YES - - VOTE_OPTION_ABSTAIN - - VOTE_OPTION_NO - - VOTE_OPTION_NO_WITH_VETO - default: VOTE_OPTION_UNSPECIFIED - description: >- - VoteOption enumerates the valid vote options for a given - governance proposal. - - - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option. - - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option. - - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option. - - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option. - - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option. - description: >- - Vote defines a vote on a governance proposal. - - A Vote consists of a proposal ID, the voter, and the vote - option. - description: votes defined the queried votes. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - next_key: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - QueryVotesResponse is the response type for the Query/Votes RPC - method. + type: string + description: >- + validators defines the validators a delegator is delegating + for. + description: |- + QueryDelegatorValidatorsResponse is the response type for the + Query/DelegatorValidators RPC method. default: - description: An unexpected error response. + description: An unexpected error response + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte + parameters: + - name: delegator_address + description: delegator_address defines the delegator address to query for. + in: path + required: true + type: string + tags: + - Query + '/cosmos/distribution/v1beta1/delegators/{delegator_address}/withdraw_address': + get: + summary: DelegatorWithdrawAddress queries withdraw address of a delegator. + operationId: DelegatorWithdrawAddress + responses: + '200': + description: A successful response. + schema: + type: object + properties: + withdraw_address: + type: string + description: withdraw_address defines the delegator address to query for. + description: |- + QueryDelegatorWithdrawAddressResponse is the response type for the + Query/DelegatorWithdrawAddress RPC method. + default: + description: An unexpected error response + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte + parameters: + - name: delegator_address + description: delegator_address defines the delegator address to query for. + in: path + required: true + type: string + tags: + - Query + /cosmos/distribution/v1beta1/params: + get: + summary: Params queries params of the distribution module. + operationId: DistributionParams + responses: + '200': + description: A successful response. + schema: + type: object + properties: + params: + description: params defines the parameters of the module. + type: object + properties: + community_tax: + type: string + base_proposer_reward: + type: string + bonus_proposer_reward: + type: string + withdraw_addr_enabled: + type: boolean + format: boolean + description: >- + QueryParamsResponse is the response type for the Query/Params RPC + method. + default: + description: An unexpected error response schema: type: object properties: @@ -11305,182 +12748,243 @@ paths: properties: type_url: type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. value: type: string format: byte + tags: + - Query + '/cosmos/distribution/v1beta1/validators/{validator_address}/commission': + get: + summary: ValidatorCommission queries accumulated commission for a validator. + operationId: ValidatorCommission + responses: + '200': + description: A successful response. + schema: + type: object + properties: + commission: + description: commission defines the commision the validator received. + type: object + properties: + commission: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - + DecCoin defines a token with a denomination and a + decimal amount. - JSON - ==== + NOTE: The amount field is an Dec which implements the + custom method - The JSON representation of an `Any` value uses the regular + signatures required by gogoproto. + title: |- + QueryValidatorCommissionResponse is the response type for the + Query/ValidatorCommission RPC method + default: + description: An unexpected error response + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte + parameters: + - name: validator_address + description: validator_address defines the validator address to query for. + in: path + required: true + type: string + tags: + - Query + '/cosmos/distribution/v1beta1/validators/{validator_address}/outstanding_rewards': + get: + summary: ValidatorOutstandingRewards queries rewards of a validator address. + operationId: ValidatorOutstandingRewards + responses: + '200': + description: A successful response. + schema: + type: object + properties: + rewards: + type: object + properties: + rewards: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + DecCoin defines a token with a denomination and a + decimal amount. - representation of the deserialized, embedded message, with - an - additional field `@type` which contains the type URL. - Example: + NOTE: The amount field is an Dec which implements the + custom method - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } + signatures required by gogoproto. + description: >- + ValidatorOutstandingRewards represents outstanding + (un-withdrawn) rewards - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } + for a validator inexpensive to track, allows simple sanity + checks. + description: >- + QueryValidatorOutstandingRewardsResponse is the response type for + the - If the embedded message type is well-known and has a custom - JSON + Query/ValidatorOutstandingRewards RPC method. + default: + description: An unexpected error response + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte + parameters: + - name: validator_address + description: validator_address defines the validator address to query for. + in: path + required: true + type: string + tags: + - Query + '/cosmos/distribution/v1beta1/validators/{validator_address}/slashes': + get: + summary: ValidatorSlashes queries slash events of a validator. + operationId: ValidatorSlashes + responses: + '200': + description: A successful response. + schema: + type: object + properties: + slashes: + type: array + items: + type: object + properties: + validator_period: + type: string + format: uint64 + fraction: + type: string + description: >- + ValidatorSlashEvent represents a validator slash event. - representation, that representation will be embedded adding - a field + Height is implicit within the store key. - `value` which holds the custom JSON in addition to the - `@type` + This is needed to calculate appropriate amount of staking + tokens - field. Example (for message [google.protobuf.Duration][]): + for delegations which are withdrawn after a slash has + occurred. + description: slashes defines the slashes the validator received. + pagination: + description: pagination defines the pagination in the response. + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } + was set, its value is undefined otherwise + description: |- + QueryValidatorSlashesResponse is the response type for the + Query/ValidatorSlashes RPC method. + default: + description: An unexpected error response + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte parameters: - - name: proposal_id - description: proposal_id defines the unique id of the proposal. + - name: validator_address + description: validator_address defines the validator address to query for. in: path required: true type: string + - name: starting_height + description: >- + starting_height defines the optional starting height to query the + slashes. + in: query + required: false + type: string + format: uint64 + - name: ending_height + description: >- + starting_height defines the optional ending height to query the + slashes. + in: query + required: false + type: string format: uint64 - name: pagination.key description: |- @@ -11528,61 +13032,28 @@ paths: in: query required: false type: boolean + format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + in: query + required: false + type: boolean + format: boolean tags: - Query - '/cosmos/gov/v1beta1/proposals/{proposal_id}/votes/{voter}': + /cosmos/evidence/v1beta1/evidence: get: - summary: 'Vote queries voted information based on proposalID, voterAddr.' - operationId: Vote + summary: AllEvidence queries all evidence. + operationId: AllEvidence responses: '200': description: A successful response. schema: type: object properties: - vote: - description: vote defined the queried vote. - type: object - properties: - proposal_id: - type: string - format: uint64 - voter: - type: string - option: - type: string - enum: - - VOTE_OPTION_UNSPECIFIED - - VOTE_OPTION_YES - - VOTE_OPTION_ABSTAIN - - VOTE_OPTION_NO - - VOTE_OPTION_NO_WITH_VETO - default: VOTE_OPTION_UNSPECIFIED - description: >- - VoteOption enumerates the valid vote options for a given - governance proposal. - - - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option. - - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option. - - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option. - - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option. - - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option. - description: >- - QueryVoteResponse is the response type for the Query/Vote RPC - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: + evidence: type: array items: type: object @@ -11759,334 +13230,9 @@ paths: "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" } - parameters: - - name: proposal_id - description: proposal_id defines the unique id of the proposal. - in: path - required: true - type: string - format: uint64 - - name: voter - description: voter defines the oter address for the proposals. - in: path - required: true - type: string - tags: - - Query - /cosmos/mint/v1beta1/annual_provisions: - get: - summary: AnnualProvisions current minting annual provisions value. - operationId: AnnualProvisions - responses: - '200': - description: A successful response. - schema: - type: object - properties: - annual_provisions: - type: string - format: byte - description: >- - annual_provisions is the current minting annual provisions - value. - description: |- - QueryAnnualProvisionsResponse is the response type for the - Query/AnnualProvisions RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - value: - type: string - format: byte - tags: - - Query - /cosmos/mint/v1beta1/inflation: - get: - summary: Inflation returns the current minting inflation value. - operationId: Inflation - responses: - '200': - description: A successful response. - schema: - type: object - properties: - inflation: - type: string - format: byte - description: inflation is the current minting inflation value. - description: >- - QueryInflationResponse is the response type for the - Query/Inflation RPC - - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - value: - type: string - format: byte - tags: - - Query - /cosmos/mint/v1beta1/params: - get: - summary: Params returns the total set of minting parameters. - operationId: MintParams - responses: - '200': - description: A successful response. - schema: - type: object - properties: - params: - description: params defines the parameters of the module. - type: object - properties: - mint_denom: - type: string - title: type of coin to mint - inflation_rate_change: - type: string - title: maximum annual change in inflation rate - inflation_max: - type: string - title: maximum inflation rate - inflation_min: - type: string - title: minimum inflation rate - goal_bonded: - type: string - title: goal of percent bonded atoms - blocks_per_year: - type: string - format: uint64 - title: expected blocks per year - description: >- - QueryParamsResponse is the response type for the Query/Params RPC - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - value: - type: string - format: byte - tags: - - Query - /cosmos/params/v1beta1/params: - get: - summary: |- - Params queries a specific parameter of a module, given its subspace and - key. - operationId: Params - responses: - '200': - description: A successful response. - schema: - type: object - properties: - param: - description: param defines the queried parameter. - type: object - properties: - subspace: - type: string - key: - type: string - value: - type: string - description: >- - QueryParamsResponse is response type for the Query/Params RPC - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - value: - type: string - format: byte - parameters: - - name: subspace - description: subspace defines the module to query the parameter for. - in: query - required: false - type: string - - name: key - description: key defines the key of the parameter in the subspace. - in: query - required: false - type: string - tags: - - Query - /cosmos/slashing/v1beta1/params: - get: - summary: Params queries the parameters of slashing module - operationId: SlashingParams - responses: - '200': - description: A successful response. - schema: - type: object - properties: - params: - type: object - properties: - signed_blocks_window: - type: string - format: int64 - min_signed_per_window: - type: string - format: byte - downtime_jail_duration: - type: string - slash_fraction_double_sign: - type: string - format: byte - slash_fraction_downtime: - type: string - format: byte - description: >- - Params represents the parameters used for by the slashing - module. - title: >- - QueryParamsResponse is the response type for the Query/Params RPC - method - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - value: - type: string - format: byte - tags: - - Query - /cosmos/slashing/v1beta1/signing_infos: - get: - summary: SigningInfos queries signing info of all validators - operationId: SigningInfos - responses: - '200': - description: A successful response. - schema: - type: object - properties: - info: - type: array - items: - type: object - properties: - address: - type: string - start_height: - type: string - format: int64 - title: >- - height at which validator was first a candidate OR was - unjailed - index_offset: - type: string - format: int64 - title: index offset into signed block bit array - jailed_until: - type: string - format: date-time - title: timestamp validator cannot be unjailed until - tombstoned: - type: boolean - title: >- - whether or not a validator has been tombstoned (killed - out of validator - - set) - missed_blocks_counter: - type: string - format: int64 - title: >- - missed blocks counter (to avoid scanning the array every - time) - description: >- - ValidatorSigningInfo defines a validator's signing info for - monitoring their - - liveness activity. - title: info is the signing info of all validators + description: evidence returns all evidences. pagination: + description: pagination defines the pagination in the response. type: object properties: next_key: @@ -12103,23 +13249,13 @@ paths: PageRequest.count_total was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - title: >- - QuerySigningInfosResponse is the response type for the - Query/SigningInfos RPC + description: >- + QueryAllEvidenceResponse is the response type for the + Query/AllEvidence RPC - method + method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -12137,9 +13273,176 @@ paths: properties: type_url: type: string + description: >- + A URL/resource name that uniquely identifies the type of + the serialized + + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's path + must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in + a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary + all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can optionally + set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in + the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. value: type: string format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values + in the form + + of utility functions or additional generated methods of the + Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the + last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield + type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with + an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom + JSON + + representation, that representation will be embedded adding + a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } parameters: - name: pagination.key description: |- @@ -12187,174 +13490,203 @@ paths: in: query required: false type: boolean + format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + in: query + required: false + type: boolean + format: boolean tags: - Query - '/cosmos/slashing/v1beta1/signing_infos/{cons_address}': + '/cosmos/evidence/v1beta1/evidence/{evidence_hash}': get: - summary: SigningInfo queries the signing info of given cons address - operationId: SigningInfo + summary: Evidence queries evidence based on evidence hash. + operationId: Evidence responses: '200': description: A successful response. schema: type: object properties: - val_signing_info: - title: >- - val_signing_info is the signing info of requested val cons - address + evidence: type: object properties: - address: - type: string - start_height: - type: string - format: int64 - title: >- - height at which validator was first a candidate OR was - unjailed - index_offset: - type: string - format: int64 - title: index offset into signed block bit array - jailed_until: + type_url: type: string - format: date-time - title: timestamp validator cannot be unjailed until - tombstoned: - type: boolean - title: >- - whether or not a validator has been tombstoned (killed out - of validator + description: >- + A URL/resource name that uniquely identifies the type of + the serialized - set) - missed_blocks_counter: - type: string - format: int64 - title: >- - missed blocks counter (to avoid scanning the array every - time) - description: >- - ValidatorSigningInfo defines a validator's signing info for - monitoring their + protocol buffer message. This string must contain at least - liveness activity. - title: >- - QuerySigningInfoResponse is the response type for the - Query/SigningInfo RPC + one "/" character. The last segment of the URL's path must + represent - method - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - value: - type: string - format: byte - parameters: - - name: cons_address - description: cons_address is the address to query signing info of - in: path - required: true - type: string - tags: - - Query - '/cosmos/staking/v1beta1/delegations/{delegator_addr}': - get: - summary: >- - DelegatorDelegations queries all delegations of a given delegator - address. - operationId: DelegatorDelegations - responses: - '200': - description: A successful response. - schema: - type: object - properties: - delegation_responses: - type: array - items: - type: object - properties: - delegation: - type: object - properties: - delegator_address: - type: string - validator_address: - type: string - shares: - type: string - description: >- - Delegation represents the bond with tokens held by an - account. It is + the fully qualified name of the type (as in - owned by one delegator, and is associated with the - voting power of one + `path/google.protobuf.Duration`). The name should be in a + canonical form - validator. - balance: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. + (e.g., leading "." is not accepted). - NOTE: The amount field is an Int which implements the - custom method + In practice, teams usually precompile into the binary all + types that they - signatures required by gogoproto. - description: >- - DelegationResponse is equivalent to Delegation except that - it contains a + expect it to use in the context of Any. However, for URLs + which use the - balance in addition to shares which is more suitable for - client responses. - description: >- - delegation_responses defines all the delegations' info of a - delegator. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - next_key: + scheme `http`, `https`, or no scheme, one can optionally + set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the + official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. + value: type: string format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message + along with a - was set, its value is undefined otherwise - description: |- - QueryDelegatorDelegationsResponse is response type for the - Query/DelegatorDelegations RPC method. + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values in + the form + + of utility functions or additional generated methods of the + Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by default + use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the last + '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield + type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with an + + additional field `@type` which contains the type URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom + JSON + + representation, that representation will be embedded adding a + field + + `value` which holds the custom JSON in addition to the `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + description: >- + QueryEvidenceResponse is the response type for the Query/Evidence + RPC method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -12543,171 +13875,88 @@ paths: "value": "1.212s" } parameters: - - name: delegator_addr - description: delegator_addr defines the delegator address to query for. + - name: evidence_hash + description: evidence_hash defines the hash of the requested evidence. in: path required: true type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean tags: - Query - '/cosmos/staking/v1beta1/delegators/{delegator_addr}/redelegations': + '/cosmos/gov/v1beta1/params/{params_type}': get: - summary: Redelegations queries redelegations of given address. - operationId: Redelegations + summary: Params queries all parameters of the gov module. + operationId: GovParams responses: '200': description: A successful response. schema: type: object properties: - redelegation_responses: - type: array - items: - type: object - properties: - redelegation: + voting_params: + description: voting_params defines the parameters related to voting. + type: object + properties: + voting_period: + type: string + description: Length of the voting period. + deposit_params: + description: deposit_params defines the parameters related to deposit. + type: object + properties: + min_deposit: + type: array + items: type: object properties: - delegator_address: - type: string - validator_src_address: + denom: type: string - validator_dst_address: + amount: type: string - entries: - type: array - items: - type: object - properties: - creation_height: - type: string - format: int64 - completion_time: - type: string - format: date-time - initial_balance: - type: string - shares_dst: - type: string - description: >- - RedelegationEntry defines a redelegation object - with relevant metadata. description: >- - Redelegation contains the list of a particular - delegator's redelegating bonds - - from a particular source validator to a particular - destination validator. - entries: - type: array - items: - type: object - properties: - redelegation_entry: - type: object - properties: - creation_height: - type: string - format: int64 - completion_time: - type: string - format: date-time - initial_balance: - type: string - shares_dst: - type: string - description: >- - RedelegationEntry defines a redelegation object - with relevant metadata. - balance: - type: string - description: >- - RedelegationEntryResponse is equivalent to a - RedelegationEntry except that it - - contains a balance in addition to shares which is more - suitable for client + Coin defines a token with a denomination and an amount. - responses. - description: >- - RedelegationResponse is equivalent to a Redelegation except - that its entries - contain a balance in addition to shares which is more - suitable for client + NOTE: The amount field is an Int which implements the + custom method - responses. - pagination: - description: pagination defines the pagination in the response. + signatures required by gogoproto. + description: Minimum deposit for a proposal to enter voting period. + max_deposit_period: + type: string + description: >- + Maximum period for Atom holders to deposit on a proposal. + Initial value: 2 + months. + tally_params: + description: tally_params defines the parameters related to tally. type: object properties: - next_key: + quorum: type: string format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: + description: >- + Minimum percentage of total stake needed to vote for a + result to be + considered valid. + threshold: type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise + format: byte + description: >- + Minimum proportion of Yes votes for proposal to pass. + Default value: 0.5. + veto_threshold: + type: string + format: byte + description: >- + Minimum value of Veto votes to Total votes ratio for + proposal to be + vetoed. Default value: 1/3. description: >- - QueryRedelegationsResponse is response type for the - Query/Redelegations RPC - + QueryParamsResponse is the response type for the Query/Params RPC method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -12896,401 +14145,36 @@ paths: "value": "1.212s" } parameters: - - name: delegator_addr - description: delegator_addr defines the delegator address to query for. + - name: params_type + description: >- + params_type defines which parameters to query for, can be one of + "voting", + + "tallying" or "deposit". in: path required: true type: string - - name: src_validator_addr - description: src_validator_addr defines the validator address to redelegate from. - in: query - required: false - type: string - - name: dst_validator_addr - description: dst_validator_addr defines the validator address to redelegate to. - in: query - required: false - type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - tags: - - Query - '/cosmos/staking/v1beta1/delegators/{delegator_addr}/unbonding_delegations': - get: - summary: >- - DelegatorUnbondingDelegations queries all unbonding delegations of a - given - - delegator address. - operationId: DelegatorUnbondingDelegations - responses: - '200': - description: A successful response. - schema: - type: object - properties: - unbonding_responses: - type: array - items: - type: object - properties: - delegator_address: - type: string - validator_address: - type: string - entries: - type: array - items: - type: object - properties: - creation_height: - type: string - format: int64 - completion_time: - type: string - format: date-time - initial_balance: - type: string - balance: - type: string - description: >- - UnbondingDelegationEntry defines an unbonding object - with relevant metadata. - description: >- - UnbondingDelegation stores all of a single delegator's - unbonding bonds - - for a single validator in an time-ordered list. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - next_key: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - QueryUnbondingDelegatorDelegationsResponse is response type for - the - - Query/UnbondingDelegatorDelegations RPC method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: delegator_addr - description: delegator_addr defines the delegator address to query for. - in: path - required: true - type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean tags: - Query - '/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators': + /cosmos/gov/v1beta1/proposals: get: - summary: |- - DelegatorValidators queries all validators info for given delegator - address. - operationId: StakingDelegatorValidators + summary: Proposals queries all proposals based on given status. + operationId: Proposals responses: '200': description: A successful response. schema: type: object properties: - validators: + proposals: type: array items: type: object properties: - operator_address: + proposal_id: type: string - consensus_pubkey: + format: uint64 + content: type: object properties: type_url: @@ -13467,96 +14351,78 @@ paths: "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" } - jailed: - type: boolean status: type: string enum: - - BOND_STATUS_UNSPECIFIED - - BOND_STATUS_UNBONDED - - BOND_STATUS_UNBONDING - - BOND_STATUS_BONDED - default: BOND_STATUS_UNSPECIFIED - description: |- - BondStatus is the status of a validator. + - PROPOSAL_STATUS_UNSPECIFIED + - PROPOSAL_STATUS_DEPOSIT_PERIOD + - PROPOSAL_STATUS_VOTING_PERIOD + - PROPOSAL_STATUS_PASSED + - PROPOSAL_STATUS_REJECTED + - PROPOSAL_STATUS_FAILED + default: PROPOSAL_STATUS_UNSPECIFIED + description: >- + ProposalStatus enumerates the valid statuses of a + proposal. - - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status. - - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded. - - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding. - - BOND_STATUS_BONDED: BONDED defines a validator that is bonded. - tokens: - type: string - delegator_shares: - type: string - description: + - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default propopsal status. + - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit + period. + - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting + period. + - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has + passed. + - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has + been rejected. + - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has + failed. + final_tally_result: type: object properties: - moniker: - type: string - identity: + 'yes': type: string - website: + abstain: type: string - security_contact: + 'no': type: string - details: + no_with_veto: type: string - description: Description defines a validator description. - unbonding_height: - type: string - format: int64 - unbonding_time: + description: >- + TallyResult defines a standard tally for a governance + proposal. + submit_time: type: string format: date-time - commission: - type: object - properties: - commission_rates: - type: object - properties: - rate: - type: string - max_rate: - type: string - max_change_rate: - type: string - description: >- - CommissionRates defines the initial commission rates - to be used for creating - - a validator. - update_time: - type: string - format: date-time - description: >- - Commission defines commission parameters for a given - validator. - min_self_delegation: + deposit_end_time: type: string - description: >- - Validator defines a validator, together with the total - amount of the - - Validator's bond shares and their exchange rate to coins. - Slashing results in - - a decrease in the exchange rate, allowing correct - calculation of future - - undelegations without iterating over delegators. When coins - are delegated to - - this validator, the validator is credited with a delegation - whose number of + format: date-time + total_deposit: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an + amount. - bond shares is based on the amount of coins delegated - divided by the current - exchange rate. Voting power can be calculated as total - bonded shares + NOTE: The amount field is an Int which implements the + custom method - multiplied by exchange rate. - description: validators defines the the validators' info of a delegator. + signatures required by gogoproto. + voting_start_time: + type: string + format: date-time + voting_end_time: + type: string + format: date-time + description: >- + Proposal defines the core field members of a governance + proposal. pagination: description: pagination defines the pagination in the response. type: object @@ -13575,11 +14441,13 @@ paths: PageRequest.count_total was set, its value is undefined otherwise - description: |- - QueryDelegatorValidatorsResponse is response type for the - Query/DelegatorValidators RPC method. + description: >- + QueryProposalsResponse is the response type for the + Query/Proposals RPC + + method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -13768,23 +14636,54 @@ paths: "value": "1.212s" } parameters: - - name: delegator_addr - description: delegator_addr defines the delegator address to query for. - in: path - required: true - type: string - - name: pagination.key + - name: proposal_status description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. + proposal_status defines the status of the proposals. + + - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default propopsal status. + - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit + period. + - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting + period. + - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has + passed. + - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has + been rejected. + - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has + failed. in: query required: false type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. + enum: + - PROPOSAL_STATUS_UNSPECIFIED + - PROPOSAL_STATUS_DEPOSIT_PERIOD + - PROPOSAL_STATUS_VOTING_PERIOD + - PROPOSAL_STATUS_PASSED + - PROPOSAL_STATUS_REJECTED + - PROPOSAL_STATUS_FAILED + default: PROPOSAL_STATUS_UNSPECIFIED + - name: voter + description: voter defines the voter address for the proposals. + in: query + required: false + type: string + - name: depositor + description: depositor defines the deposit addresses from the proposals. + in: query + required: false + type: string + - name: pagination.key + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + in: query + required: false + type: string + format: byte + - name: pagination.offset + description: >- + offset is a numeric offset that can be used when key is unavailable. It is less efficient than using key. Only one of offset or key should @@ -13819,27 +14718,34 @@ paths: in: query required: false type: boolean + format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + in: query + required: false + type: boolean + format: boolean tags: - Query - '/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators/{validator_addr}': + '/cosmos/gov/v1beta1/proposals/{proposal_id}': get: - summary: |- - DelegatorValidator queries validator info for given delegator validator - pair. - operationId: DelegatorValidator + summary: Proposal queries proposal details based on ProposalID. + operationId: Proposal responses: '200': description: A successful response. schema: type: object properties: - validator: - description: validator defines the the validator info. + proposal: type: object properties: - operator_address: + proposal_id: type: string - consensus_pubkey: + format: uint64 + content: type: object properties: type_url: @@ -14014,77 +14920,82 @@ paths: "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" } - jailed: - type: boolean status: type: string enum: - - BOND_STATUS_UNSPECIFIED - - BOND_STATUS_UNBONDED - - BOND_STATUS_UNBONDING - - BOND_STATUS_BONDED - default: BOND_STATUS_UNSPECIFIED - description: |- - BondStatus is the status of a validator. + - PROPOSAL_STATUS_UNSPECIFIED + - PROPOSAL_STATUS_DEPOSIT_PERIOD + - PROPOSAL_STATUS_VOTING_PERIOD + - PROPOSAL_STATUS_PASSED + - PROPOSAL_STATUS_REJECTED + - PROPOSAL_STATUS_FAILED + default: PROPOSAL_STATUS_UNSPECIFIED + description: >- + ProposalStatus enumerates the valid statuses of a + proposal. - - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status. - - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded. - - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding. - - BOND_STATUS_BONDED: BONDED defines a validator that is bonded. - tokens: - type: string - delegator_shares: - type: string - description: + - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default propopsal status. + - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit + period. + - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting + period. + - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has + passed. + - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has + been rejected. + - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has + failed. + final_tally_result: type: object properties: - moniker: - type: string - identity: + 'yes': type: string - website: + abstain: type: string - security_contact: + 'no': type: string - details: + no_with_veto: type: string - description: Description defines a validator description. - unbonding_height: + description: >- + TallyResult defines a standard tally for a governance + proposal. + submit_time: type: string - format: int64 - unbonding_time: + format: date-time + deposit_end_time: type: string format: date-time - commission: - type: object - properties: - commission_rates: - type: object - properties: - rate: - type: string - max_rate: - type: string - max_change_rate: - type: string - description: >- - CommissionRates defines the initial commission rates - to be used for creating + total_deposit: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. - a validator. - update_time: - type: string - format: date-time - description: >- - Commission defines commission parameters for a given - validator. - min_self_delegation: + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + voting_start_time: type: string - description: |- - QueryDelegatorValidatorResponse response type for the - Query/DelegatorValidator RPC method. + format: date-time + voting_end_time: + type: string + format: date-time + description: >- + Proposal defines the core field members of a governance + proposal. + description: >- + QueryProposalResponse is the response type for the Query/Proposal + RPC method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -14273,390 +15184,378 @@ paths: "value": "1.212s" } parameters: - - name: delegator_addr - description: delegator_addr defines the delegator address to query for. - in: path - required: true - type: string - - name: validator_addr - description: validator_addr defines the validator address to query for. + - name: proposal_id + description: proposal_id defines the unique id of the proposal. in: path required: true type: string + format: uint64 tags: - Query - '/cosmos/staking/v1beta1/historical_info/{height}': + '/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits': get: - summary: HistoricalInfo queries the historical info for given height. - operationId: HistoricalInfo + summary: Deposits queries all deposits of a single proposal. + operationId: Deposits responses: '200': description: A successful response. schema: type: object properties: - hist: - description: hist defines the historical info at the given height. - type: object - properties: - header: - type: object - properties: - version: - title: basic block info + deposits: + type: array + items: + type: object + properties: + proposal_id: + type: string + format: uint64 + depositor: + type: string + amount: + type: array + items: type: object properties: - block: + denom: type: string - format: uint64 - app: + amount: type: string - format: uint64 description: >- - Consensus captures the consensus rules for processing - a block in the blockchain, + Coin defines a token with a denomination and an + amount. - including all blockchain data structures and the rules - of the application's - state transition machine. - chain_id: - type: string - height: - type: string - format: int64 - time: - type: string - format: date-time - last_block_id: - title: prev block info - type: object - properties: - hash: - type: string - format: byte - part_set_header: - type: object - properties: - total: - type: integer - format: int64 - hash: - type: string - format: byte - title: PartsetHeader - last_commit_hash: - type: string - format: byte - title: hashes of block data - data_hash: - type: string - format: byte - validators_hash: - type: string - format: byte - title: hashes from the app output from the prev block - next_validators_hash: - type: string - format: byte - consensus_hash: - type: string - format: byte - app_hash: - type: string - format: byte - last_results_hash: - type: string - format: byte - evidence_hash: - type: string - format: byte - title: consensus info - proposer_address: - type: string - format: byte - description: Header defines the structure of a Tendermint block header. - valset: - type: array - items: - type: object - properties: - operator_address: - type: string - consensus_pubkey: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the - type of the serialized + NOTE: The amount field is an Int which implements the + custom method - protocol buffer message. This string must - contain at least + signatures required by gogoproto. + description: >- + Deposit defines an amount deposited by an account address to + an active - one "/" character. The last segment of the URL's - path must represent + proposal. + pagination: + description: pagination defines the pagination in the response. + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total - the fully qualified name of the type (as in + was set, its value is undefined otherwise + description: >- + QueryDepositsResponse is the response type for the Query/Deposits + RPC method. + default: + description: An unexpected error response + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of + the serialized - `path/google.protobuf.Duration`). The name - should be in a canonical form + protocol buffer message. This string must contain at + least - (e.g., leading "." is not accepted). + one "/" character. The last segment of the URL's path + must represent + the fully qualified name of the type (as in - In practice, teams usually precompile into the - binary all types that they + `path/google.protobuf.Duration`). The name should be in + a canonical form - expect it to use in the context of Any. However, - for URLs which use the + (e.g., leading "." is not accepted). - scheme `http`, `https`, or no scheme, one can - optionally set up a type - server that maps type URLs to message - definitions as follows: + In practice, teams usually precompile into the binary + all types that they + expect it to use in the context of Any. However, for + URLs which use the - * If no scheme is provided, `https` is assumed. + scheme `http`, `https`, or no scheme, one can optionally + set up a type - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup - results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) + server that maps type URLs to message definitions as + follows: - Note: this functionality is not currently - available in the official - protobuf release, and it is not used for type - URLs beginning with + * If no scheme is provided, `https` is assumed. - type.googleapis.com. + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + Note: this functionality is not currently available in + the official - Schemes other than `http`, `https` (or the empty - scheme) might be + protobuf release, and it is not used for type URLs + beginning with - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of - the above specified type. - description: >- - `Any` contains an arbitrary serialized protocol - buffer message along with a + type.googleapis.com. - URL that describes the type of the serialized - message. + Schemes other than `http`, `https` (or the empty scheme) + might be - Protobuf library provides support to pack/unpack Any - values in the form + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a - of utility functions or additional generated methods - of the Any type. + URL that describes the type of the serialized message. - Example 1: Pack and unpack a message in C++. + Protobuf library provides support to pack/unpack Any values + in the form - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } + of utility functions or additional generated methods of the + Any type. - Example 2: Pack and unpack a message in Java. - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } + Example 1: Pack and unpack a message in C++. - Example 3: Pack and unpack a message in Python. + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... + Example 2: Pack and unpack a message in Java. - Example 4: Pack and unpack a message in Go + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } + Example 3: Pack and unpack a message in Python. - The pack methods provided by protobuf library will - by default use + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... - 'type.googleapis.com/full.type.name' as the type URL - and the unpack + Example 4: Pack and unpack a message in Go - methods only use the fully qualified type name after - the last '/' + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } - in the type URL, for example "foo.bar.com/x/y.z" - will yield type + The pack methods provided by protobuf library will by + default use - name "y.z". + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + methods only use the fully qualified type name after the + last '/' + in the type URL, for example "foo.bar.com/x/y.z" will yield + type - JSON + name "y.z". - ==== - The JSON representation of an `Any` value uses the - regular - representation of the deserialized, embedded - message, with an + JSON - additional field `@type` which contains the type - URL. Example: + ==== - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } + The JSON representation of an `Any` value uses the regular - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } + representation of the deserialized, embedded message, with + an - If the embedded message type is well-known and has a - custom JSON + additional field `@type` which contains the type URL. + Example: - representation, that representation will be embedded - adding a field + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } - `value` which holds the custom JSON in addition to - the `@type` + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } - field. Example (for message - [google.protobuf.Duration][]): + If the embedded message type is well-known and has a custom + JSON - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - jailed: - type: boolean - status: - type: string - enum: - - BOND_STATUS_UNSPECIFIED - - BOND_STATUS_UNBONDED - - BOND_STATUS_UNBONDING - - BOND_STATUS_BONDED - default: BOND_STATUS_UNSPECIFIED - description: |- - BondStatus is the status of a validator. + representation, that representation will be embedded adding + a field - - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status. - - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded. - - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding. - - BOND_STATUS_BONDED: BONDED defines a validator that is bonded. - tokens: - type: string - delegator_shares: - type: string - description: - type: object - properties: - moniker: - type: string - identity: - type: string - website: - type: string - security_contact: - type: string - details: - type: string - description: Description defines a validator description. - unbonding_height: - type: string - format: int64 - unbonding_time: - type: string - format: date-time - commission: - type: object - properties: - commission_rates: - type: object - properties: - rate: - type: string - max_rate: - type: string - max_change_rate: - type: string - description: >- - CommissionRates defines the initial commission - rates to be used for creating + `value` which holds the custom JSON in addition to the + `@type` - a validator. - update_time: - type: string - format: date-time - description: >- - Commission defines commission parameters for a given - validator. - min_self_delegation: - type: string - description: >- - Validator defines a validator, together with the total - amount of the + field. Example (for message [google.protobuf.Duration][]): - Validator's bond shares and their exchange rate to - coins. Slashing results in + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + parameters: + - name: proposal_id + description: proposal_id defines the unique id of the proposal. + in: path + required: true + type: string + format: uint64 + - name: pagination.key + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + in: query + required: false + type: string + format: byte + - name: pagination.offset + description: >- + offset is a numeric offset that can be used when key is unavailable. - a decrease in the exchange rate, allowing correct - calculation of future + It is less efficient than using key. Only one of offset or key + should - undelegations without iterating over delegators. When - coins are delegated to + be set. + in: query + required: false + type: string + format: uint64 + - name: pagination.limit + description: >- + limit is the total number of results to be returned in the result + page. - this validator, the validator is credited with a - delegation whose number of + If left empty it will default to a value to be set by each app. + in: query + required: false + type: string + format: uint64 + - name: pagination.count_total + description: >- + count_total is set to true to indicate that the result set should + include - bond shares is based on the amount of coins delegated - divided by the current + a count of the total number of items available for pagination in + UIs. - exchange rate. Voting power can be calculated as total - bonded shares + count_total is only respected when offset is used. It is ignored + when key - multiplied by exchange rate. - description: >- - QueryHistoricalInfoResponse is response type for the - Query/HistoricalInfo RPC + is set. + in: query + required: false + type: boolean + format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + in: query + required: false + type: boolean + format: boolean + tags: + - Query + '/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits/{depositor}': + get: + summary: >- + Deposit queries single deposit information based proposalID, + depositAddr. + operationId: Deposit + responses: + '200': + description: A successful response. + schema: + type: object + properties: + deposit: + type: object + properties: + proposal_id: + type: string + format: uint64 + depositor: + type: string + amount: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. - method. + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + description: >- + Deposit defines an amount deposited by an account address to + an active + + proposal. + description: >- + QueryDepositResponse is the response type for the Query/Deposit + RPC method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -14845,46 +15744,48 @@ paths: "value": "1.212s" } parameters: - - name: height - description: height defines at which height to query the historical info. + - name: proposal_id + description: proposal_id defines the unique id of the proposal. + in: path + required: true + type: string + format: uint64 + - name: depositor + description: depositor defines the deposit addresses from the proposals. in: path required: true type: string - format: int64 tags: - Query - /cosmos/staking/v1beta1/params: + '/cosmos/gov/v1beta1/proposals/{proposal_id}/tally': get: - summary: Parameters queries the staking parameters. - operationId: StakingParams + summary: TallyResult queries the tally of a proposal vote. + operationId: TallyResult responses: '200': description: A successful response. schema: type: object properties: - params: - description: params holds all the parameters of this module. + tally: type: object properties: - unbonding_time: + 'yes': type: string - max_validators: - type: integer - format: int64 - max_entries: - type: integer - format: int64 - historical_entries: - type: integer - format: int64 - bond_denom: + abstain: type: string + 'no': + type: string + no_with_veto: + type: string + description: >- + TallyResult defines a standard tally for a governance + proposal. description: >- - QueryParamsResponse is response type for the Query/Params RPC - method. + QueryTallyResultResponse is the response type for the Query/Tally + RPC method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -15072,29 +15973,110 @@ paths: "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" } + parameters: + - name: proposal_id + description: proposal_id defines the unique id of the proposal. + in: path + required: true + type: string + format: uint64 tags: - Query - /cosmos/staking/v1beta1/pool: + '/cosmos/gov/v1beta1/proposals/{proposal_id}/votes': get: - summary: Pool queries the pool info. - operationId: Pool + summary: Votes queries votes of a given proposal. + operationId: Votes responses: '200': description: A successful response. schema: type: object properties: - pool: - description: pool defines the pool info. + votes: + type: array + items: + type: object + properties: + proposal_id: + type: string + format: uint64 + voter: + type: string + option: + description: >- + Deprecated: Prefer to use `options` instead. This field + is set in queries + + if and only if `len(options) == 1` and that option has + weight 1. In all + + other cases, this field will default to + VOTE_OPTION_UNSPECIFIED. + type: string + enum: + - VOTE_OPTION_UNSPECIFIED + - VOTE_OPTION_YES + - VOTE_OPTION_ABSTAIN + - VOTE_OPTION_NO + - VOTE_OPTION_NO_WITH_VETO + default: VOTE_OPTION_UNSPECIFIED + options: + type: array + items: + type: object + properties: + option: + type: string + enum: + - VOTE_OPTION_UNSPECIFIED + - VOTE_OPTION_YES + - VOTE_OPTION_ABSTAIN + - VOTE_OPTION_NO + - VOTE_OPTION_NO_WITH_VETO + default: VOTE_OPTION_UNSPECIFIED + description: >- + VoteOption enumerates the valid vote options for a + given governance proposal. + + - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option. + - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option. + - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option. + - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option. + - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option. + weight: + type: string + description: >- + WeightedVoteOption defines a unit of vote for vote + split. + description: >- + Vote defines a vote on a governance proposal. + + A Vote consists of a proposal ID, the voter, and the vote + option. + description: votes defined the queried votes. + pagination: + description: pagination defines the pagination in the response. type: object properties: - not_bonded_tokens: + next_key: type: string - bonded_tokens: + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: type: string - description: QueryPoolResponse is response type for the Query/Pool RPC method. + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + description: >- + QueryVotesResponse is the response type for the Query/Votes RPC + method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -15282,315 +16264,144 @@ paths: "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" } + parameters: + - name: proposal_id + description: proposal_id defines the unique id of the proposal. + in: path + required: true + type: string + format: uint64 + - name: pagination.key + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + in: query + required: false + type: string + format: byte + - name: pagination.offset + description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + in: query + required: false + type: string + format: uint64 + - name: pagination.limit + description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + in: query + required: false + type: string + format: uint64 + - name: pagination.count_total + description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + required: false + type: boolean + format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + in: query + required: false + type: boolean + format: boolean tags: - Query - /cosmos/staking/v1beta1/validators: + '/cosmos/gov/v1beta1/proposals/{proposal_id}/votes/{voter}': get: - summary: Validators queries all validators that match the given status. - operationId: Validators + summary: 'Vote queries voted information based on proposalID, voterAddr.' + operationId: Vote responses: '200': description: A successful response. schema: type: object properties: - validators: - type: array - items: - type: object - properties: - operator_address: - type: string - consensus_pubkey: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the - type of the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's - path must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be - in a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the - binary all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can - optionally set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results - based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available - in the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty - scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the - above specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any - values in the form - - of utility functions or additional generated methods of - the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and - the unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will - yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the - regular - - representation of the deserialized, embedded message, - with an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a - custom JSON - - representation, that representation will be embedded - adding a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message - [google.protobuf.Duration][]): + vote: + type: object + properties: + proposal_id: + type: string + format: uint64 + voter: + type: string + option: + description: >- + Deprecated: Prefer to use `options` instead. This field is + set in queries - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - jailed: - type: boolean - status: - type: string - enum: - - BOND_STATUS_UNSPECIFIED - - BOND_STATUS_UNBONDED - - BOND_STATUS_UNBONDING - - BOND_STATUS_BONDED - default: BOND_STATUS_UNSPECIFIED - description: |- - BondStatus is the status of a validator. + if and only if `len(options) == 1` and that option has + weight 1. In all - - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status. - - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded. - - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding. - - BOND_STATUS_BONDED: BONDED defines a validator that is bonded. - tokens: - type: string - delegator_shares: - type: string - description: + other cases, this field will default to + VOTE_OPTION_UNSPECIFIED. + type: string + enum: + - VOTE_OPTION_UNSPECIFIED + - VOTE_OPTION_YES + - VOTE_OPTION_ABSTAIN + - VOTE_OPTION_NO + - VOTE_OPTION_NO_WITH_VETO + default: VOTE_OPTION_UNSPECIFIED + options: + type: array + items: type: object properties: - moniker: - type: string - identity: - type: string - website: - type: string - security_contact: - type: string - details: + option: type: string - description: Description defines a validator description. - unbonding_height: - type: string - format: int64 - unbonding_time: - type: string - format: date-time - commission: - type: object - properties: - commission_rates: - type: object - properties: - rate: - type: string - max_rate: - type: string - max_change_rate: - type: string + enum: + - VOTE_OPTION_UNSPECIFIED + - VOTE_OPTION_YES + - VOTE_OPTION_ABSTAIN + - VOTE_OPTION_NO + - VOTE_OPTION_NO_WITH_VETO + default: VOTE_OPTION_UNSPECIFIED description: >- - CommissionRates defines the initial commission rates - to be used for creating - - a validator. - update_time: + VoteOption enumerates the valid vote options for a + given governance proposal. + + - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option. + - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option. + - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option. + - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option. + - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option. + weight: type: string - format: date-time description: >- - Commission defines commission parameters for a given - validator. - min_self_delegation: - type: string - description: >- - Validator defines a validator, together with the total - amount of the - - Validator's bond shares and their exchange rate to coins. - Slashing results in - - a decrease in the exchange rate, allowing correct - calculation of future - - undelegations without iterating over delegators. When coins - are delegated to - - this validator, the validator is credited with a delegation - whose number of - - bond shares is based on the amount of coins delegated - divided by the current - - exchange rate. Voting power can be calculated as total - bonded shares - - multiplied by exchange rate. - description: validators contains all the queried validators. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - next_key: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total + WeightedVoteOption defines a unit of vote for vote + split. + description: >- + Vote defines a vote on a governance proposal. - was set, its value is undefined otherwise - title: >- - QueryValidatorsResponse is response type for the Query/Validators - RPC method + A Vote consists of a proposal ID, the voter, and the vote + option. + description: >- + QueryVoteResponse is the response type for the Query/Vote RPC + method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -15779,321 +16590,143 @@ paths: "value": "1.212s" } parameters: - - name: status - description: status enables to query for validators matching a given status. - in: query - required: false - type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false + - name: proposal_id + description: proposal_id defines the unique id of the proposal. + in: path + required: true type: string format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false + - name: voter + description: voter defines the oter address for the proposals. + in: path + required: true type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean tags: - Query - '/cosmos/staking/v1beta1/validators/{validator_addr}': + /cosmos/mint/v1beta1/annual_provisions: get: - summary: Validator queries validator info for given validator address. - operationId: Validator + summary: AnnualProvisions current minting annual provisions value. + operationId: AnnualProvisions responses: '200': description: A successful response. schema: type: object properties: - validator: - description: validator defines the the validator info. - type: object - properties: - operator_address: - type: string - consensus_pubkey: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type - of the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be - in a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they + annual_provisions: + type: string + format: byte + description: >- + annual_provisions is the current minting annual provisions + value. + description: |- + QueryAnnualProvisionsResponse is the response type for the + Query/AnnualProvisions RPC method. + default: + description: An unexpected error response + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte + tags: + - Query + /cosmos/mint/v1beta1/inflation: + get: + summary: Inflation returns the current minting inflation value. + operationId: Inflation + responses: + '200': + description: A successful response. + schema: + type: object + properties: + inflation: + type: string + format: byte + description: inflation is the current minting inflation value. + description: >- + QueryInflationResponse is the response type for the + Query/Inflation RPC - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can - optionally set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results - based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty - scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the - above specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any - values in the form - - of utility functions or additional generated methods of - the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and - the unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will - yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a - custom JSON - - representation, that representation will be embedded - adding a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - jailed: - type: boolean - status: + method. + default: + description: An unexpected error response + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte + tags: + - Query + /cosmos/mint/v1beta1/params: + get: + summary: Params returns the total set of minting parameters. + operationId: MintParams + responses: + '200': + description: A successful response. + schema: + type: object + properties: + params: + description: params defines the parameters of the module. + type: object + properties: + mint_denom: type: string - enum: - - BOND_STATUS_UNSPECIFIED - - BOND_STATUS_UNBONDED - - BOND_STATUS_UNBONDING - - BOND_STATUS_BONDED - default: BOND_STATUS_UNSPECIFIED - description: |- - BondStatus is the status of a validator. - - - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status. - - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded. - - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding. - - BOND_STATUS_BONDED: BONDED defines a validator that is bonded. - tokens: + title: type of coin to mint + inflation_rate_change: type: string - delegator_shares: + title: maximum annual change in inflation rate + inflation_max: type: string - description: - type: object - properties: - moniker: - type: string - identity: - type: string - website: - type: string - security_contact: - type: string - details: - type: string - description: Description defines a validator description. - unbonding_height: + title: maximum inflation rate + inflation_min: type: string - format: int64 - unbonding_time: + title: minimum inflation rate + goal_bonded: type: string - format: date-time - commission: - type: object - properties: - commission_rates: - type: object - properties: - rate: - type: string - max_rate: - type: string - max_change_rate: - type: string - description: >- - CommissionRates defines the initial commission rates - to be used for creating - - a validator. - update_time: - type: string - format: date-time - description: >- - Commission defines commission parameters for a given - validator. - min_self_delegation: + title: goal of percent bonded atoms + blocks_per_year: type: string - title: >- - QueryValidatorResponse is response type for the Query/Validator - RPC method + format: uint64 + title: expected blocks per year + description: >- + QueryParamsResponse is the response type for the Query/Params RPC + method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -16111,260 +16744,106 @@ paths: properties: type_url: type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. value: type: string format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: validator_addr - description: validator_addr defines the validator address to query for. - in: path - required: true - type: string tags: - Query - '/cosmos/staking/v1beta1/validators/{validator_addr}/delegations': + /cosmos/params/v1beta1/params: get: - summary: ValidatorDelegations queries delegate info for given validator. - operationId: ValidatorDelegations + summary: |- + Params queries a specific parameter of a module, given its subspace and + key. + operationId: Params responses: '200': description: A successful response. schema: type: object properties: - delegation_responses: - type: array - items: - type: object - properties: - delegation: - type: object - properties: - delegator_address: - type: string - validator_address: - type: string - shares: - type: string - description: >- - Delegation represents the bond with tokens held by an - account. It is - - owned by one delegator, and is associated with the - voting power of one - - validator. - balance: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - description: >- - DelegationResponse is equivalent to Delegation except that - it contains a - - balance in addition to shares which is more suitable for - client responses. - pagination: - description: pagination defines the pagination in the response. + param: + description: param defines the queried parameter. type: object properties: - next_key: + subspace: type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: + key: type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - title: |- - QueryValidatorDelegationsResponse is response type for the - Query/ValidatorDelegations RPC method + value: + type: string + description: >- + QueryParamsResponse is response type for the Query/Params RPC + method. default: - description: An unexpected error response. + description: An unexpected error response + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte + parameters: + - name: subspace + description: subspace defines the module to query the parameter for. + in: query + required: false + type: string + - name: key + description: key defines the key of the parameter in the subspace. + in: query + required: false + type: string + tags: + - Query + /cosmos/slashing/v1beta1/params: + get: + summary: Params queries the parameters of slashing module + operationId: SlashingParams + responses: + '200': + description: A successful response. + schema: + type: object + properties: + params: + type: object + properties: + signed_blocks_window: + type: string + format: int64 + min_signed_per_window: + type: string + format: byte + downtime_jail_duration: + type: string + slash_fraction_double_sign: + type: string + format: byte + slash_fraction_downtime: + type: string + format: byte + description: >- + Params represents the parameters used for by the slashing + module. + title: >- + QueryParamsResponse is the response type for the Query/Params RPC + method + default: + description: An unexpected error response schema: type: object properties: @@ -16382,182 +16861,130 @@ paths: properties: type_url: type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. value: type: string format: byte + tags: + - Query + /cosmos/slashing/v1beta1/signing_infos: + get: + summary: SigningInfos queries signing info of all validators + operationId: SigningInfos + responses: + '200': + description: A successful response. + schema: + type: object + properties: + info: + type: array + items: + type: object + properties: + address: + type: string + start_height: + type: string + format: int64 + title: >- + Height at which validator was first a candidate OR was + unjailed + index_offset: + type: string + format: int64 description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... + Index which is incremented each time the validator was a + bonded - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an + in a block and may have signed a precommit or not. This + in conjunction with the - additional field `@type` which contains the type URL. - Example: + `SignedBlocksWindow` param determines the index in the + `MissedBlocksBitArray`. + jailed_until: + type: string + format: date-time + description: >- + Timestamp until which the validator is jailed due to + liveness downtime. + tombstoned: + type: boolean + format: boolean + description: >- + Whether or not a validator has been tombstoned (killed + out of validator set). It is set - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } + once the validator commits an equivocation or for any + other configured misbehiavor. + missed_blocks_counter: + type: string + format: int64 + description: >- + A counter kept to avoid unnecessary array reads. - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } + Note that `Sum(MissedBlocksBitArray)` always equals + `MissedBlocksCounter`. + description: >- + ValidatorSigningInfo defines a validator's signing info for + monitoring their - If the embedded message type is well-known and has a custom - JSON + liveness activity. + title: info is the signing info of all validators + pagination: + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total - representation, that representation will be embedded adding - a field + was set, its value is undefined otherwise + description: >- + PageResponse is to be embedded in gRPC response messages where + the - `value` which holds the custom JSON in addition to the - `@type` + corresponding request message has used PageRequest. - field. Example (for message [google.protobuf.Duration][]): + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } + title: >- + QuerySigningInfosResponse is the response type for the + Query/SigningInfos RPC - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } + method + default: + description: An unexpected error response + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte parameters: - - name: validator_addr - description: validator_addr defines the validator address to query for. - in: path - required: true - type: string - name: pagination.key description: |- key is a value returned in PageResponse.next_key to begin @@ -16604,61 +17031,204 @@ paths: in: query required: false type: boolean + format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + in: query + required: false + type: boolean + format: boolean tags: - Query - '/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}': + '/cosmos/slashing/v1beta1/signing_infos/{cons_address}': get: - summary: Delegation queries delegate info for given validator delegator pair. - operationId: Delegation + summary: SigningInfo queries the signing info of given cons address + operationId: SigningInfo responses: '200': description: A successful response. schema: type: object properties: - delegation_response: - description: >- - delegation_responses defines the delegation info of a - delegation. + val_signing_info: type: object properties: - delegation: - type: object - properties: - delegator_address: - type: string - validator_address: - type: string - shares: - type: string + address: + type: string + start_height: + type: string + format: int64 + title: >- + Height at which validator was first a candidate OR was + unjailed + index_offset: + type: string + format: int64 description: >- - Delegation represents the bond with tokens held by an - account. It is + Index which is incremented each time the validator was a + bonded - owned by one delegator, and is associated with the voting - power of one + in a block and may have signed a precommit or not. This in + conjunction with the - validator. - balance: - type: object - properties: - denom: - type: string - amount: - type: string + `SignedBlocksWindow` param determines the index in the + `MissedBlocksBitArray`. + jailed_until: + type: string + format: date-time description: >- - Coin defines a token with a denomination and an amount. + Timestamp until which the validator is jailed due to + liveness downtime. + tombstoned: + type: boolean + format: boolean + description: >- + Whether or not a validator has been tombstoned (killed out + of validator set). It is set + once the validator commits an equivocation or for any + other configured misbehiavor. + missed_blocks_counter: + type: string + format: int64 + description: >- + A counter kept to avoid unnecessary array reads. - NOTE: The amount field is an Int which implements the - custom method + Note that `Sum(MissedBlocksBitArray)` always equals + `MissedBlocksCounter`. + description: >- + ValidatorSigningInfo defines a validator's signing info for + monitoring their - signatures required by gogoproto. - description: >- - QueryDelegationResponse is response type for the Query/Delegation - RPC method. + liveness activity. + title: >- + val_signing_info is the signing info of requested val cons + address + title: >- + QuerySigningInfoResponse is the response type for the + Query/SigningInfo RPC + + method default: - description: An unexpected error response. + description: An unexpected error response + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte + parameters: + - name: cons_address + description: cons_address is the address to query signing info of + in: path + required: true + type: string + tags: + - Query + '/cosmos/staking/v1beta1/delegations/{delegator_addr}': + get: + summary: >- + DelegatorDelegations queries all delegations of a given delegator + address. + operationId: DelegatorDelegations + responses: + '200': + description: A successful response. + schema: + type: object + properties: + delegation_responses: + type: array + items: + type: object + properties: + delegation: + type: object + properties: + delegator_address: + type: string + description: >- + delegator_address is the bech32-encoded address of + the delegator. + validator_address: + type: string + description: >- + validator_address is the bech32-encoded address of + the validator. + shares: + type: string + description: shares define the delegation shares received. + description: >- + Delegation represents the bond with tokens held by an + account. It is + + owned by one delegator, and is associated with the + voting power of one + + validator. + balance: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + description: >- + DelegationResponse is equivalent to Delegation except that + it contains a + + balance in addition to shares which is more suitable for + client responses. + description: >- + delegation_responses defines all the delegations' info of a + delegator. + pagination: + description: pagination defines the pagination in the response. + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + description: |- + QueryDelegatorDelegationsResponse is response type for the + Query/DelegatorDelegations RPC method. + default: + description: An unexpected error response schema: type: object properties: @@ -16847,63 +17417,216 @@ paths: "value": "1.212s" } parameters: - - name: validator_addr - description: validator_addr defines the validator address to query for. + - name: delegator_addr + description: delegator_addr defines the delegator address to query for. in: path required: true type: string - - name: delegator_addr - description: delegator_addr defines the delegator address to query for. - in: path - required: true + - name: pagination.key + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + in: query + required: false + type: string + format: byte + - name: pagination.offset + description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + in: query + required: false + type: string + format: uint64 + - name: pagination.limit + description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + in: query + required: false type: string + format: uint64 + - name: pagination.count_total + description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + required: false + type: boolean + format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + in: query + required: false + type: boolean + format: boolean tags: - Query - '/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}/unbonding_delegation': + '/cosmos/staking/v1beta1/delegators/{delegator_addr}/redelegations': get: - summary: |- - UnbondingDelegation queries unbonding info for given validator delegator - pair. - operationId: UnbondingDelegation + summary: Redelegations queries redelegations of given address. + operationId: Redelegations responses: '200': description: A successful response. schema: type: object properties: - unbond: - description: unbond defines the unbonding information of a delegation. - type: object - properties: - delegator_address: - type: string - validator_address: - type: string - entries: - type: array - items: + redelegation_responses: + type: array + items: + type: object + properties: + redelegation: type: object properties: - creation_height: - type: string - format: int64 - completion_time: + delegator_address: type: string - format: date-time - initial_balance: + description: >- + delegator_address is the bech32-encoded address of + the delegator. + validator_src_address: type: string - balance: + description: >- + validator_src_address is the validator redelegation + source operator address. + validator_dst_address: type: string + description: >- + validator_dst_address is the validator redelegation + destination operator address. + entries: + type: array + items: + type: object + properties: + creation_height: + type: string + format: int64 + description: >- + creation_height defines the height which the + redelegation took place. + completion_time: + type: string + format: date-time + description: >- + completion_time defines the unix time for + redelegation completion. + initial_balance: + type: string + description: >- + initial_balance defines the initial balance + when redelegation started. + shares_dst: + type: string + description: >- + shares_dst is the amount of + destination-validator shares created by + redelegation. + description: >- + RedelegationEntry defines a redelegation object + with relevant metadata. + description: entries are the redelegation entries. description: >- - UnbondingDelegationEntry defines an unbonding object - with relevant metadata. + Redelegation contains the list of a particular + delegator's redelegating bonds + + from a particular source validator to a particular + destination validator. + entries: + type: array + items: + type: object + properties: + redelegation_entry: + type: object + properties: + creation_height: + type: string + format: int64 + description: >- + creation_height defines the height which the + redelegation took place. + completion_time: + type: string + format: date-time + description: >- + completion_time defines the unix time for + redelegation completion. + initial_balance: + type: string + description: >- + initial_balance defines the initial balance + when redelegation started. + shares_dst: + type: string + description: >- + shares_dst is the amount of + destination-validator shares created by + redelegation. + description: >- + RedelegationEntry defines a redelegation object + with relevant metadata. + balance: + type: string + description: >- + RedelegationEntryResponse is equivalent to a + RedelegationEntry except that it + + contains a balance in addition to shares which is more + suitable for client + + responses. + description: >- + RedelegationResponse is equivalent to a Redelegation except + that its entries + + contain a balance in addition to shares which is more + suitable for client + + responses. + pagination: + description: pagination defines the pagination in the response. + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise description: >- - QueryDelegationResponse is response type for the - Query/UnbondingDelegation + QueryRedelegationsResponse is response type for the + Query/Redelegations RPC - RPC method. + method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -17092,24 +17815,86 @@ paths: "value": "1.212s" } parameters: - - name: validator_addr - description: validator_addr defines the validator address to query for. - in: path - required: true - type: string - name: delegator_addr description: delegator_addr defines the delegator address to query for. in: path required: true type: string + - name: src_validator_addr + description: src_validator_addr defines the validator address to redelegate from. + in: query + required: false + type: string + - name: dst_validator_addr + description: dst_validator_addr defines the validator address to redelegate to. + in: query + required: false + type: string + - name: pagination.key + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + in: query + required: false + type: string + format: byte + - name: pagination.offset + description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + in: query + required: false + type: string + format: uint64 + - name: pagination.limit + description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + in: query + required: false + type: string + format: uint64 + - name: pagination.count_total + description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + required: false + type: boolean + format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + in: query + required: false + type: boolean + format: boolean tags: - Query - '/cosmos/staking/v1beta1/validators/{validator_addr}/unbonding_delegations': + '/cosmos/staking/v1beta1/delegators/{delegator_addr}/unbonding_delegations': get: summary: >- - ValidatorUnbondingDelegations queries unbonding delegations of a - validator. - operationId: ValidatorUnbondingDelegations + DelegatorUnbondingDelegations queries all unbonding delegations of a + given + + delegator address. + operationId: DelegatorUnbondingDelegations responses: '200': description: A successful response. @@ -17123,8 +17908,14 @@ paths: properties: delegator_address: type: string + description: >- + delegator_address is the bech32-encoded address of the + delegator. validator_address: type: string + description: >- + validator_address is the bech32-encoded address of the + validator. entries: type: array items: @@ -17133,16 +17924,29 @@ paths: creation_height: type: string format: int64 + description: >- + creation_height is the height which the unbonding + took place. completion_time: type: string format: date-time + description: >- + completion_time is the unix time for unbonding + completion. initial_balance: type: string + description: >- + initial_balance defines the tokens initially + scheduled to receive at completion. balance: type: string + description: >- + balance defines the tokens to receive at + completion. description: >- UnbondingDelegationEntry defines an unbonding object with relevant metadata. + description: entries are the unbonding delegation entries. description: >- UnbondingDelegation stores all of a single delegator's unbonding bonds @@ -17167,12 +17971,12 @@ paths: was set, its value is undefined otherwise description: >- - QueryValidatorUnbondingDelegationsResponse is response type for + QueryUnbondingDelegatorDelegationsResponse is response type for the - Query/ValidatorUnbondingDelegations RPC method. + Query/UnbondingDelegatorDelegations RPC method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -17361,8 +18165,8 @@ paths: "value": "1.212s" } parameters: - - name: validator_addr - description: validator_addr defines the validator address to query for. + - name: delegator_addr + description: delegator_addr defines the delegator address to query for. in: path required: true type: string @@ -17412,182 +18216,519 @@ paths: in: query required: false type: boolean + format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + in: query + required: false + type: boolean + format: boolean tags: - Query - '/cosmos/upgrade/v1beta1/applied_plan/{name}': + '/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators': get: - summary: AppliedPlan queries a previously applied upgrade plan by its name. - operationId: AppliedPlan + summary: |- + DelegatorValidators queries all validators info for given delegator + address. + operationId: StakingDelegatorValidators responses: '200': description: A successful response. schema: type: object properties: - height: - type: string - format: int64 - description: height is the block height at which the plan was applied. - description: >- - QueryAppliedPlanResponse is the response type for the - Query/AppliedPlan RPC - - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: + validators: type: array items: type: object properties: - type_url: + operator_address: type: string description: >- - A URL/resource name that uniquely identifies the type of - the serialized + operator_address defines the address of the validator's + operator; bech encoded in JSON. + consensus_pubkey: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the + type of the serialized - protocol buffer message. This string must contain at - least + protocol buffer message. This string must contain at + least - one "/" character. The last segment of the URL's path - must represent + one "/" character. The last segment of the URL's + path must represent - the fully qualified name of the type (as in + the fully qualified name of the type (as in - `path/google.protobuf.Duration`). The name should be in - a canonical form + `path/google.protobuf.Duration`). The name should be + in a canonical form - (e.g., leading "." is not accepted). + (e.g., leading "." is not accepted). - In practice, teams usually precompile into the binary - all types that they + In practice, teams usually precompile into the + binary all types that they - expect it to use in the context of Any. However, for - URLs which use the + expect it to use in the context of Any. However, for + URLs which use the - scheme `http`, `https`, or no scheme, one can optionally - set up a type + scheme `http`, `https`, or no scheme, one can + optionally set up a type - server that maps type URLs to message definitions as - follows: + server that maps type URLs to message definitions as + follows: - * If no scheme is provided, `https` is assumed. + * If no scheme is provided, `https` is assumed. - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results + based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) - Note: this functionality is not currently available in - the official + Note: this functionality is not currently available + in the official - protobuf release, and it is not used for type URLs - beginning with + protobuf release, and it is not used for type URLs + beginning with - type.googleapis.com. + type.googleapis.com. - Schemes other than `http`, `https` (or the empty scheme) - might be + Schemes other than `http`, `https` (or the empty + scheme) might be - used with implementation specific semantics. - value: - type: string - format: byte + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the + above specified type. description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a + `Any` contains an arbitrary serialized protocol buffer + message along with a - URL that describes the type of the serialized message. + URL that describes the type of the serialized message. - Protobuf library provides support to pack/unpack Any values - in the form + Protobuf library provides support to pack/unpack Any + values in the form - of utility functions or additional generated methods of the - Any type. + of utility functions or additional generated methods of + the Any type. - Example 1: Pack and unpack a message in C++. + Example 1: Pack and unpack a message in C++. - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } - Example 2: Pack and unpack a message in Java. + Example 2: Pack and unpack a message in Java. - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } - Example 3: Pack and unpack a message in Python. + Example 3: Pack and unpack a message in Python. - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... - Example 4: Pack and unpack a message in Go + Example 4: Pack and unpack a message in Go - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } - The pack methods provided by protobuf library will by - default use + The pack methods provided by protobuf library will by + default use - 'type.googleapis.com/full.type.name' as the type URL and the - unpack + 'type.googleapis.com/full.type.name' as the type URL and + the unpack - methods only use the fully qualified type name after the - last '/' + methods only use the fully qualified type name after the + last '/' - in the type URL, for example "foo.bar.com/x/y.z" will yield - type + in the type URL, for example "foo.bar.com/x/y.z" will + yield type - name "y.z". + name "y.z". - JSON + JSON - ==== + ==== - The JSON representation of an `Any` value uses the regular + The JSON representation of an `Any` value uses the + regular + + representation of the deserialized, embedded message, + with an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a + custom JSON + + representation, that representation will be embedded + adding a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message + [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + jailed: + type: boolean + format: boolean + description: >- + jailed defined whether the validator has been jailed + from bonded status or not. + status: + description: >- + status is the validator status + (bonded/unbonding/unbonded). + type: string + enum: + - BOND_STATUS_UNSPECIFIED + - BOND_STATUS_UNBONDED + - BOND_STATUS_UNBONDING + - BOND_STATUS_BONDED + default: BOND_STATUS_UNSPECIFIED + tokens: + type: string + description: >- + tokens define the delegated tokens (incl. + self-delegation). + delegator_shares: + type: string + description: >- + delegator_shares defines total shares issued to a + validator's delegators. + description: + description: >- + description defines the description terms for the + validator. + type: object + properties: + moniker: + type: string + description: >- + moniker defines a human-readable name for the + validator. + identity: + type: string + description: >- + identity defines an optional identity signature (ex. + UPort or Keybase). + website: + type: string + description: website defines an optional website link. + security_contact: + type: string + description: >- + security_contact defines an optional email for + security contact. + details: + type: string + description: details define other optional details. + unbonding_height: + type: string + format: int64 + description: >- + unbonding_height defines, if unbonding, the height at + which this validator has begun unbonding. + unbonding_time: + type: string + format: date-time + description: >- + unbonding_time defines, if unbonding, the min time for + the validator to complete unbonding. + commission: + description: commission defines the commission parameters. + type: object + properties: + commission_rates: + description: >- + commission_rates defines the initial commission + rates to be used for creating a validator. + type: object + properties: + rate: + type: string + description: >- + rate is the commission rate charged to + delegators, as a fraction. + max_rate: + type: string + description: >- + max_rate defines the maximum commission rate + which validator can ever charge, as a fraction. + max_change_rate: + type: string + description: >- + max_change_rate defines the maximum daily + increase of the validator commission, as a + fraction. + update_time: + type: string + format: date-time + description: >- + update_time is the last time the commission rate was + changed. + min_self_delegation: + type: string + description: >- + min_self_delegation is the validator's self declared + minimum self delegation. + description: >- + Validator defines a validator, together with the total + amount of the + + Validator's bond shares and their exchange rate to coins. + Slashing results in + + a decrease in the exchange rate, allowing correct + calculation of future + + undelegations without iterating over delegators. When coins + are delegated to + + this validator, the validator is credited with a delegation + whose number of + + bond shares is based on the amount of coins delegated + divided by the current + + exchange rate. Voting power can be calculated as total + bonded shares + + multiplied by exchange rate. + description: validators defines the the validators' info of a delegator. + pagination: + description: pagination defines the pagination in the response. + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + description: |- + QueryDelegatorValidatorsResponse is response type for the + Query/DelegatorValidators RPC method. + default: + description: An unexpected error response + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of + the serialized + + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's path + must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in + a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary + all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can optionally + set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in + the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values + in the form + + of utility functions or additional generated methods of the + Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the + last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield + type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an @@ -17623,86 +18764,89 @@ paths: "value": "1.212s" } parameters: - - name: name - description: name is the name of the applied plan to query for. + - name: delegator_addr + description: delegator_addr defines the delegator address to query for. in: path required: true type: string + - name: pagination.key + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + in: query + required: false + type: string + format: byte + - name: pagination.offset + description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + in: query + required: false + type: string + format: uint64 + - name: pagination.limit + description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + in: query + required: false + type: string + format: uint64 + - name: pagination.count_total + description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + required: false + type: boolean + format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + in: query + required: false + type: boolean + format: boolean tags: - Query - /cosmos/upgrade/v1beta1/current_plan: + '/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators/{validator_addr}': get: - summary: CurrentPlan queries the current upgrade plan. - operationId: CurrentPlan + summary: |- + DelegatorValidator queries validator info for given delegator validator + pair. + operationId: DelegatorValidator responses: '200': description: A successful response. schema: type: object properties: - plan: - description: plan is the current upgrade plan. + validator: type: object properties: - name: - type: string - description: >- - Sets the name for the upgrade. This name will be used by - the upgraded - - version of the software to apply any special "on-upgrade" - commands during - - the first BeginBlock method after the upgrade is applied. - It is also used - - to detect whether a software version can handle a given - upgrade. If no - - upgrade handler with this name has been set in the - software, it will be - - assumed that the software is out-of-date when the upgrade - Time or Height is - - reached and the software will exit. - time: + operator_address: type: string - format: date-time description: >- - The time after which the upgrade must be performed. - - Leave set to its zero value to use a pre-defined Height - instead. - height: - type: string - format: int64 - description: |- - The height at which the upgrade must be performed. - Only used if Time is not set. - info: - type: string - title: >- - Any application specific upgrade info to be included - on-chain - - such as a git commit that validators could automatically - upgrade to - upgraded_client_state: - title: >- - IBC-enabled chains can opt-in to including the upgraded - client state in its upgrade plan - - This will make the chain commit to the correct upgraded - (self) client state before the upgrade occurs, - - so that connecting chains can verify that the new upgraded - client is valid by verifying a proof on the - - previous version of the chain. - - This will allow IBC connections to persist smoothly across - planned chain upgrades + operator_address defines the address of the validator's + operator; bech encoded in JSON. + consensus_pubkey: type: object properties: type_url: @@ -17877,13 +19021,136 @@ paths: "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" } - description: >- - QueryCurrentPlanResponse is the response type for the - Query/CurrentPlan RPC + jailed: + type: boolean + format: boolean + description: >- + jailed defined whether the validator has been jailed from + bonded status or not. + status: + description: >- + status is the validator status + (bonded/unbonding/unbonded). + type: string + enum: + - BOND_STATUS_UNSPECIFIED + - BOND_STATUS_UNBONDED + - BOND_STATUS_UNBONDING + - BOND_STATUS_BONDED + default: BOND_STATUS_UNSPECIFIED + tokens: + type: string + description: >- + tokens define the delegated tokens (incl. + self-delegation). + delegator_shares: + type: string + description: >- + delegator_shares defines total shares issued to a + validator's delegators. + description: + description: >- + description defines the description terms for the + validator. + type: object + properties: + moniker: + type: string + description: >- + moniker defines a human-readable name for the + validator. + identity: + type: string + description: >- + identity defines an optional identity signature (ex. + UPort or Keybase). + website: + type: string + description: website defines an optional website link. + security_contact: + type: string + description: >- + security_contact defines an optional email for + security contact. + details: + type: string + description: details define other optional details. + unbonding_height: + type: string + format: int64 + description: >- + unbonding_height defines, if unbonding, the height at + which this validator has begun unbonding. + unbonding_time: + type: string + format: date-time + description: >- + unbonding_time defines, if unbonding, the min time for the + validator to complete unbonding. + commission: + description: commission defines the commission parameters. + type: object + properties: + commission_rates: + description: >- + commission_rates defines the initial commission rates + to be used for creating a validator. + type: object + properties: + rate: + type: string + description: >- + rate is the commission rate charged to delegators, + as a fraction. + max_rate: + type: string + description: >- + max_rate defines the maximum commission rate which + validator can ever charge, as a fraction. + max_change_rate: + type: string + description: >- + max_change_rate defines the maximum daily increase + of the validator commission, as a fraction. + update_time: + type: string + format: date-time + description: >- + update_time is the last time the commission rate was + changed. + min_self_delegation: + type: string + description: >- + min_self_delegation is the validator's self declared + minimum self delegation. + description: >- + Validator defines a validator, together with the total amount + of the - method. + Validator's bond shares and their exchange rate to coins. + Slashing results in + + a decrease in the exchange rate, allowing correct calculation + of future + + undelegations without iterating over delegators. When coins + are delegated to + + this validator, the validator is credited with a delegation + whose number of + + bond shares is based on the amount of coins delegated divided + by the current + + exchange rate. Voting power can be calculated as total bonded + shares + + multiplied by exchange rate. + description: |- + QueryDelegatorValidatorResponse response type for the + Query/DelegatorValidator RPC method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -18071,158 +19338,432 @@ paths: "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" } - tags: - - Query - /ibc/channel/v1beta1/channels: - get: - summary: Channels queries all the IBC channels of a chain. - operationId: Channels - responses: - '200': - description: A successful response. - schema: - type: object - properties: - channels: - type: array - items: - type: object - properties: - state: - title: current state of the channel end - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - default: STATE_UNINITIALIZED_UNSPECIFIED - description: >- - State defines if a channel is in one of the following - states: + parameters: + - name: delegator_addr + description: delegator_addr defines the delegator address to query for. + in: path + required: true + type: string + - name: validator_addr + description: validator_addr defines the validator address to query for. + in: path + required: true + type: string + tags: + - Query + '/cosmos/staking/v1beta1/historical_info/{height}': + get: + summary: HistoricalInfo queries the historical info for given height. + operationId: HistoricalInfo + responses: + '200': + description: A successful response. + schema: + type: object + properties: + hist: + description: hist defines the historical info at the given height. + type: object + properties: + header: + type: object + properties: + version: + title: basic block info + type: object + properties: + block: + type: string + format: uint64 + app: + type: string + format: uint64 + description: >- + Consensus captures the consensus rules for processing + a block in the blockchain, - CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED. + including all blockchain data structures and the rules + of the application's - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - ordering: - title: whether the channel is ordered or unordered - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: >- - - ORDER_NONE_UNSPECIFIED: zero-value for channel - ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - counterparty: - title: counterparty channel end + state transition machine. + chain_id: + type: string + height: + type: string + format: int64 + time: + type: string + format: date-time + last_block_id: + title: prev block info + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + last_commit_hash: + type: string + format: byte + title: hashes of block data + data_hash: + type: string + format: byte + validators_hash: + type: string + format: byte + title: hashes from the app output from the prev block + next_validators_hash: + type: string + format: byte + consensus_hash: + type: string + format: byte + app_hash: + type: string + format: byte + last_results_hash: + type: string + format: byte + evidence_hash: + type: string + format: byte + title: consensus info + proposer_address: + type: string + format: byte + description: Header defines the structure of a Tendermint block header. + valset: + type: array + items: type: object properties: - port_id: + operator_address: type: string description: >- - port on the counterparty chain which owns the other - end of the channel. - channel_id: - type: string - title: channel end on the counterparty chain - connection_hops: - type: array - items: - type: string - title: >- - list of connection identifiers, in order, along which - packets sent on + operator_address defines the address of the + validator's operator; bech encoded in JSON. + consensus_pubkey: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the + type of the serialized - this channel will travel - version: - type: string - title: >- - opaque channel version, which is agreed upon during the - handshake - port_id: - type: string - title: port identifier - channel_id: - type: string - title: channel identifier - description: >- - IdentifiedChannel defines a channel with additional port and - channel + protocol buffer message. This string must + contain at least - identifier fields. - description: list of stored channels of the chain. - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total + one "/" character. The last segment of the URL's + path must represent - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the + the fully qualified name of the type (as in - corresponding request message has used PageRequest. + `path/google.protobuf.Duration`). The name + should be in a canonical form - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while - keeping version + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the + binary all types that they + + expect it to use in the context of Any. However, + for URLs which use the + + scheme `http`, `https`, or no scheme, one can + optionally set up a type + + server that maps type URLs to message + definitions as follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup + results based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently + available in the official + + protobuf release, and it is not used for type + URLs beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty + scheme) might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of + the above specified type. + description: >- + `Any` contains an arbitrary serialized protocol + buffer message along with a + + URL that describes the type of the serialized + message. + + + Protobuf library provides support to pack/unpack Any + values in the form + + of utility functions or additional generated methods + of the Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. - number the same However some consensus algorithms may choose - to reset the + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will + by default use + + 'type.googleapis.com/full.type.name' as the type URL + and the unpack + + methods only use the fully qualified type name after + the last '/' + + in the type URL, for example "foo.bar.com/x/y.z" + will yield type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the + regular + + representation of the deserialized, embedded + message, with an + + additional field `@type` which contains the type + URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a + custom JSON + + representation, that representation will be embedded + adding a field + + `value` which holds the custom JSON in addition to + the `@type` + + field. Example (for message + [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + jailed: + type: boolean + format: boolean + description: >- + jailed defined whether the validator has been jailed + from bonded status or not. + status: + description: >- + status is the validator status + (bonded/unbonding/unbonded). + type: string + enum: + - BOND_STATUS_UNSPECIFIED + - BOND_STATUS_UNBONDED + - BOND_STATUS_UNBONDING + - BOND_STATUS_BONDED + default: BOND_STATUS_UNSPECIFIED + tokens: + type: string + description: >- + tokens define the delegated tokens (incl. + self-delegation). + delegator_shares: + type: string + description: >- + delegator_shares defines total shares issued to a + validator's delegators. + description: + description: >- + description defines the description terms for the + validator. + type: object + properties: + moniker: + type: string + description: >- + moniker defines a human-readable name for the + validator. + identity: + type: string + description: >- + identity defines an optional identity signature + (ex. UPort or Keybase). + website: + type: string + description: website defines an optional website link. + security_contact: + type: string + description: >- + security_contact defines an optional email for + security contact. + details: + type: string + description: details define other optional details. + unbonding_height: + type: string + format: int64 + description: >- + unbonding_height defines, if unbonding, the height + at which this validator has begun unbonding. + unbonding_time: + type: string + format: date-time + description: >- + unbonding_time defines, if unbonding, the min time + for the validator to complete unbonding. + commission: + description: commission defines the commission parameters. + type: object + properties: + commission_rates: + description: >- + commission_rates defines the initial commission + rates to be used for creating a validator. + type: object + properties: + rate: + type: string + description: >- + rate is the commission rate charged to + delegators, as a fraction. + max_rate: + type: string + description: >- + max_rate defines the maximum commission rate + which validator can ever charge, as a + fraction. + max_change_rate: + type: string + description: >- + max_change_rate defines the maximum daily + increase of the validator commission, as a + fraction. + update_time: + type: string + format: date-time + description: >- + update_time is the last time the commission rate + was changed. + min_self_delegation: + type: string + description: >- + min_self_delegation is the validator's self declared + minimum self delegation. + description: >- + Validator defines a validator, together with the total + amount of the + + Validator's bond shares and their exchange rate to + coins. Slashing results in + + a decrease in the exchange rate, allowing correct + calculation of future + + undelegations without iterating over delegators. When + coins are delegated to + + this validator, the validator is credited with a + delegation whose number of - height in certain conditions e.g. hard forks, state-machine - breaking changes + bond shares is based on the amount of coins delegated + divided by the current - In these cases, the version number is incremented so that - height continues to + exchange rate. Voting power can be calculated as total + bonded shares - be monitonically increasing even as the VersionHeight gets - reset + multiplied by exchange rate. description: >- - QueryChannelsResponse is the response type for the Query/Channels - RPC method. + QueryHistoricalInfoResponse is response type for the + Query/HistoricalInfo RPC + + method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -18411,179 +19952,55 @@ paths: "value": "1.212s" } parameters: - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false + - name: height + description: height defines at which height to query the historical info. + in: path + required: true type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean + format: int64 tags: - Query - '/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}': + /cosmos/staking/v1beta1/params: get: - summary: Channel queries an IBC Channel. - operationId: Channel + summary: Parameters queries the staking parameters. + operationId: StakingParams responses: '200': description: A successful response. schema: type: object properties: - channel: - title: channel associated with the request identifiers + params: + description: params holds all the parameters of this module. type: object properties: - state: - title: current state of the channel end + unbonding_time: type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - default: STATE_UNINITIALIZED_UNSPECIFIED + description: unbonding_time is the time duration of unbonding. + max_validators: + type: integer + format: int64 + description: max_validators is the maximum number of validators. + max_entries: + type: integer + format: int64 description: >- - State defines if a channel is in one of the following - states: - - CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - ordering: - title: whether the channel is ordered or unordered - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: |- - - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - counterparty: - title: counterparty channel end - type: object - properties: - port_id: - type: string - description: >- - port on the counterparty chain which owns the other - end of the channel. - channel_id: - type: string - title: channel end on the counterparty chain - connection_hops: - type: array - items: - type: string - title: >- - list of connection identifiers, in order, along which - packets sent on - - this channel will travel - version: + max_entries is the max entries for either unbonding + delegation or redelegation (per pair/trio). + historical_entries: + type: integer + format: int64 + description: >- + historical_entries is the number of historical entries to + persist. + bond_denom: type: string - title: >- - opaque channel version, which is agreed upon during the - handshake - description: >- - Channel defines pipeline for exactly-once packet delivery - between specific - - modules on separate blockchains, which has at least one end - capable of - - sending packets and one end capable of receiving packets. - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while - keeping version - - number the same However some consensus algorithms may choose - to reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the version number is incremented so that - height continues to - - be monitonically increasing even as the VersionHeight gets - reset + description: bond_denom defines the bondable coin denomination. description: >- - QueryChannelResponse is the response type for the Query/Channel - RPC method. - - Besides the Channel end, it includes a proof and the height from - which the - - proof was retrieved. + QueryParamsResponse is response type for the Query/Params RPC + method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -18771,257 +20188,29 @@ paths: "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" } - parameters: - - name: channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: port_id - description: port unique identifier - in: path - required: true - type: string tags: - Query - '/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/client_state': + /cosmos/staking/v1beta1/pool: get: - summary: >- - ChannelClientState queries for the client state for the channel - associated - - with the provided channel identifiers. - operationId: ChannelClientState + summary: Pool queries the pool info. + operationId: Pool responses: '200': description: A successful response. schema: type: object properties: - identified_client_state: - title: client state associated with the channel - type: object - properties: - client_id: - type: string - title: client identifier - client_state: - title: client state - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type - of the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be - in a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can - optionally set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results - based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty - scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the - above specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any - values in the form - - of utility functions or additional generated methods of - the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and - the unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will - yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a - custom JSON - - representation, that representation will be embedded - adding a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - description: >- - IdentifiedClientState defines a client state with an - additional client - - identifier field. - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved + pool: + description: pool defines the pool info. type: object properties: - version_number: + not_bonded_tokens: type: string - format: uint64 - title: the version that the client is currently on - version_height: + bonded_tokens: type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while - keeping version - - number the same However some consensus algorithms may choose - to reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the version number is incremented so that - height continues to - - be monitonically increasing even as the VersionHeight gets - reset - title: |- - QueryChannelClientStateResponse is the Response type for the - Query/QueryChannelClientState RPC method + description: QueryPoolResponse is response type for the Query/Pool RPC method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -19209,250 +20398,363 @@ paths: "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" } - parameters: - - name: channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: port_id - description: port unique identifier - in: path - required: true - type: string tags: - Query - '/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/consensus_state/version/{version_number}/height/{version_height}': + /cosmos/staking/v1beta1/validators: get: - summary: |- - ChannelConsensusState queries for the consensus state for the channel - associated with the provided channel identifiers. - operationId: ChannelConsensusState + summary: Validators queries all validators that match the given status. + operationId: Validators responses: '200': description: A successful response. schema: type: object properties: - consensus_state: - title: consensus state associated with the channel - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form + validators: + type: array + items: + type: object + properties: + operator_address: + type: string + description: >- + operator_address defines the address of the validator's + operator; bech encoded in JSON. + consensus_pubkey: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the + type of the serialized - (e.g., leading "." is not accepted). + protocol buffer message. This string must contain at + least + one "/" character. The last segment of the URL's + path must represent - In practice, teams usually precompile into the binary all - types that they + the fully qualified name of the type (as in - expect it to use in the context of Any. However, for URLs - which use the + `path/google.protobuf.Duration`). The name should be + in a canonical form - scheme `http`, `https`, or no scheme, one can optionally - set up a type + (e.g., leading "." is not accepted). - server that maps type URLs to message definitions as - follows: + In practice, teams usually precompile into the + binary all types that they - * If no scheme is provided, `https` is assumed. + expect it to use in the context of Any. However, for + URLs which use the - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) + scheme `http`, `https`, or no scheme, one can + optionally set up a type - Note: this functionality is not currently available in the - official + server that maps type URLs to message definitions as + follows: - protobuf release, and it is not used for type URLs - beginning with - type.googleapis.com. + * If no scheme is provided, `https` is assumed. + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results + based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) - Schemes other than `http`, `https` (or the empty scheme) - might be + Note: this functionality is not currently available + in the official - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a + protobuf release, and it is not used for type URLs + beginning with - URL that describes the type of the serialized message. + type.googleapis.com. - Protobuf library provides support to pack/unpack Any values in - the form + Schemes other than `http`, `https` (or the empty + scheme) might be - of utility functions or additional generated methods of the - Any type. + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the + above specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + URL that describes the type of the serialized message. - Example 1: Pack and unpack a message in C++. - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } + Protobuf library provides support to pack/unpack Any + values in the form - Example 2: Pack and unpack a message in Java. + of utility functions or additional generated methods of + the Any type. - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - Example 3: Pack and unpack a message in Python. + Example 1: Pack and unpack a message in C++. - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } - Example 4: Pack and unpack a message in Go + Example 2: Pack and unpack a message in Java. - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } - The pack methods provided by protobuf library will by default - use + Example 3: Pack and unpack a message in Python. - 'type.googleapis.com/full.type.name' as the type URL and the - unpack + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... - methods only use the fully qualified type name after the last - '/' + Example 4: Pack and unpack a message in Go - in the type URL, for example "foo.bar.com/x/y.z" will yield - type + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } - name "y.z". + The pack methods provided by protobuf library will by + default use + 'type.googleapis.com/full.type.name' as the type URL and + the unpack + methods only use the fully qualified type name after the + last '/' - JSON + in the type URL, for example "foo.bar.com/x/y.z" will + yield type - ==== + name "y.z". - The JSON representation of an `Any` value uses the regular - representation of the deserialized, embedded message, with an - additional field `@type` which contains the type URL. Example: + JSON - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } + ==== - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } + The JSON representation of an `Any` value uses the + regular - If the embedded message type is well-known and has a custom - JSON + representation of the deserialized, embedded message, + with an - representation, that representation will be embedded adding a - field + additional field `@type` which contains the type URL. + Example: - `value` which holds the custom JSON in addition to the `@type` + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } - field. Example (for message [google.protobuf.Duration][]): + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - client_id: - type: string - title: client ID associated with the consensus state - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while - keeping version + If the embedded message type is well-known and has a + custom JSON - number the same However some consensus algorithms may choose - to reset the + representation, that representation will be embedded + adding a field - height in certain conditions e.g. hard forks, state-machine - breaking changes + `value` which holds the custom JSON in addition to the + `@type` - In these cases, the version number is incremented so that - height continues to + field. Example (for message + [google.protobuf.Duration][]): - be monitonically increasing even as the VersionHeight gets - reset - title: |- - QueryChannelClientStateResponse is the Response type for the - Query/QueryChannelClientState RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + jailed: + type: boolean + format: boolean + description: >- + jailed defined whether the validator has been jailed + from bonded status or not. + status: + description: >- + status is the validator status + (bonded/unbonding/unbonded). + type: string + enum: + - BOND_STATUS_UNSPECIFIED + - BOND_STATUS_UNBONDED + - BOND_STATUS_UNBONDING + - BOND_STATUS_BONDED + default: BOND_STATUS_UNSPECIFIED + tokens: + type: string + description: >- + tokens define the delegated tokens (incl. + self-delegation). + delegator_shares: + type: string + description: >- + delegator_shares defines total shares issued to a + validator's delegators. + description: + description: >- + description defines the description terms for the + validator. + type: object + properties: + moniker: + type: string + description: >- + moniker defines a human-readable name for the + validator. + identity: + type: string + description: >- + identity defines an optional identity signature (ex. + UPort or Keybase). + website: + type: string + description: website defines an optional website link. + security_contact: + type: string + description: >- + security_contact defines an optional email for + security contact. + details: + type: string + description: details define other optional details. + unbonding_height: + type: string + format: int64 + description: >- + unbonding_height defines, if unbonding, the height at + which this validator has begun unbonding. + unbonding_time: + type: string + format: date-time + description: >- + unbonding_time defines, if unbonding, the min time for + the validator to complete unbonding. + commission: + description: commission defines the commission parameters. + type: object + properties: + commission_rates: + description: >- + commission_rates defines the initial commission + rates to be used for creating a validator. + type: object + properties: + rate: + type: string + description: >- + rate is the commission rate charged to + delegators, as a fraction. + max_rate: + type: string + description: >- + max_rate defines the maximum commission rate + which validator can ever charge, as a fraction. + max_change_rate: + type: string + description: >- + max_change_rate defines the maximum daily + increase of the validator commission, as a + fraction. + update_time: + type: string + format: date-time + description: >- + update_time is the last time the commission rate was + changed. + min_self_delegation: + type: string + description: >- + min_self_delegation is the validator's self declared + minimum self delegation. + description: >- + Validator defines a validator, together with the total + amount of the + + Validator's bond shares and their exchange rate to coins. + Slashing results in + + a decrease in the exchange rate, allowing correct + calculation of future + + undelegations without iterating over delegators. When coins + are delegated to + + this validator, the validator is credited with a delegation + whose number of + + bond shares is based on the amount of coins delegated + divided by the current + + exchange rate. Voting power can be calculated as total + bonded shares + + multiplied by exchange rate. + description: validators contains all the queried validators. + pagination: + description: pagination defines the pagination in the response. + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + title: >- + QueryValidatorsResponse is response type for the Query/Validators + RPC method + default: + description: An unexpected error response + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 message: type: string details: @@ -19633,82 +20935,391 @@ paths: "value": "1.212s" } parameters: - - name: channel_id - description: channel unique identifier - in: path - required: true + - name: status + description: status enables to query for validators matching a given status. + in: query + required: false type: string - - name: port_id - description: port unique identifier - in: path - required: true + - name: pagination.key + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + in: query + required: false type: string - - name: version_number - description: version number of the consensus state - in: path - required: true + format: byte + - name: pagination.offset + description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + in: query + required: false type: string format: uint64 - - name: version_height - description: version height of the consensus state - in: path - required: true + - name: pagination.limit + description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + in: query + required: false type: string format: uint64 + - name: pagination.count_total + description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + required: false + type: boolean + format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + in: query + required: false + type: boolean + format: boolean tags: - Query - '/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/next_sequence': + '/cosmos/staking/v1beta1/validators/{validator_addr}': get: - summary: >- - NextSequenceReceive returns the next receive sequence for a given - channel. - operationId: NextSequenceReceive + summary: Validator queries validator info for given validator address. + operationId: Validator responses: '200': description: A successful response. schema: type: object properties: - next_sequence_receive: - type: string - format: uint64 - title: next sequence receive number - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved + validator: type: object properties: - version_number: + operator_address: type: string - format: uint64 - title: the version that the client is currently on - version_height: + description: >- + operator_address defines the address of the validator's + operator; bech encoded in JSON. + consensus_pubkey: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type + of the serialized + + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's path + must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be + in a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary + all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can + optionally set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results + based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in + the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty + scheme) might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the + above specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any + values in the form + + of utility functions or additional generated methods of + the Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and + the unpack + + methods only use the fully qualified type name after the + last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will + yield type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with + an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a + custom JSON + + representation, that representation will be embedded + adding a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + jailed: + type: boolean + format: boolean + description: >- + jailed defined whether the validator has been jailed from + bonded status or not. + status: + description: >- + status is the validator status + (bonded/unbonding/unbonded). type: string - format: uint64 - title: the height within the given version + enum: + - BOND_STATUS_UNSPECIFIED + - BOND_STATUS_UNBONDED + - BOND_STATUS_UNBONDING + - BOND_STATUS_BONDED + default: BOND_STATUS_UNSPECIFIED + tokens: + type: string + description: >- + tokens define the delegated tokens (incl. + self-delegation). + delegator_shares: + type: string + description: >- + delegator_shares defines total shares issued to a + validator's delegators. + description: + description: >- + description defines the description terms for the + validator. + type: object + properties: + moniker: + type: string + description: >- + moniker defines a human-readable name for the + validator. + identity: + type: string + description: >- + identity defines an optional identity signature (ex. + UPort or Keybase). + website: + type: string + description: website defines an optional website link. + security_contact: + type: string + description: >- + security_contact defines an optional email for + security contact. + details: + type: string + description: details define other optional details. + unbonding_height: + type: string + format: int64 + description: >- + unbonding_height defines, if unbonding, the height at + which this validator has begun unbonding. + unbonding_time: + type: string + format: date-time + description: >- + unbonding_time defines, if unbonding, the min time for the + validator to complete unbonding. + commission: + description: commission defines the commission parameters. + type: object + properties: + commission_rates: + description: >- + commission_rates defines the initial commission rates + to be used for creating a validator. + type: object + properties: + rate: + type: string + description: >- + rate is the commission rate charged to delegators, + as a fraction. + max_rate: + type: string + description: >- + max_rate defines the maximum commission rate which + validator can ever charge, as a fraction. + max_change_rate: + type: string + description: >- + max_change_rate defines the maximum daily increase + of the validator commission, as a fraction. + update_time: + type: string + format: date-time + description: >- + update_time is the last time the commission rate was + changed. + min_self_delegation: + type: string + description: >- + min_self_delegation is the validator's self declared + minimum self delegation. description: >- - Normally the VersionHeight is incremented at each height while - keeping version + Validator defines a validator, together with the total amount + of the - number the same However some consensus algorithms may choose - to reset the + Validator's bond shares and their exchange rate to coins. + Slashing results in - height in certain conditions e.g. hard forks, state-machine - breaking changes + a decrease in the exchange rate, allowing correct calculation + of future - In these cases, the version number is incremented so that - height continues to + undelegations without iterating over delegators. When coins + are delegated to - be monitonically increasing even as the VersionHeight gets - reset - title: |- - QuerySequenceResponse is the request type for the - Query/QueryNextSequenceReceiveResponse RPC method + this validator, the validator is credited with a delegation + whose number of + + bond shares is based on the amount of coins delegated divided + by the current + + exchange rate. Voting power can be calculated as total bonded + shares + + multiplied by exchange rate. + title: >- + QueryValidatorResponse is response type for the Query/Validator + RPC method default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -19897,63 +21508,75 @@ paths: "value": "1.212s" } parameters: - - name: channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: port_id - description: port unique identifier + - name: validator_addr + description: validator_addr defines the validator address to query for. in: path required: true type: string tags: - Query - '/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_acknowledgements': + '/cosmos/staking/v1beta1/validators/{validator_addr}/delegations': get: - summary: >- - PacketAcknowledgements returns all the packet acknowledgements - associated - - with a channel. - operationId: PacketAcknowledgements + summary: ValidatorDelegations queries delegate info for given validator. + operationId: ValidatorDelegations responses: '200': description: A successful response. schema: type: object properties: - acknowledgements: + delegation_responses: type: array items: type: object properties: - port_id: - type: string - description: channel port identifier. - channel_id: - type: string - description: channel unique identifier. - sequence: - type: string - format: uint64 - description: packet sequence. - data: - type: string - format: byte - description: embedded data that represents packet state. - description: >- - PacketState defines the generic type necessary to retrieve - and store + delegation: + type: object + properties: + delegator_address: + type: string + description: >- + delegator_address is the bech32-encoded address of + the delegator. + validator_address: + type: string + description: >- + validator_address is the bech32-encoded address of + the validator. + shares: + type: string + description: shares define the delegation shares received. + description: >- + Delegation represents the bond with tokens held by an + account. It is + + owned by one delegator, and is associated with the + voting power of one + + validator. + balance: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. - packet commitments, acknowledgements, and receipts. - Caller is responsible for knowing the context necessary to - interpret this + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + description: >- + DelegationResponse is equivalent to Delegation except that + it contains a - state as a commitment, acknowledgement, or a receipt. + balance in addition to shares which is more suitable for + client responses. pagination: - title: pagination response + description: pagination defines the pagination in the response. type: object properties: next_key: @@ -19970,48 +21593,11 @@ paths: PageRequest.count_total was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while - keeping version - - number the same However some consensus algorithms may choose - to reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the version number is incremented so that - height continues to - - be monitonically increasing even as the VersionHeight gets - reset title: |- - QueryPacketAcknowledgemetsResponse is the request type for the - Query/QueryPacketAcknowledgements RPC method + QueryValidatorDelegationsResponse is response type for the + Query/ValidatorDelegations RPC method default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -20200,13 +21786,8 @@ paths: "value": "1.212s" } parameters: - - name: channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: port_id - description: port unique identifier + - name: validator_addr + description: validator_addr defines the validator address to query for. in: path required: true type: string @@ -20256,62 +21837,80 @@ paths: in: query required: false type: boolean + format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + in: query + required: false + type: boolean + format: boolean tags: - Query - '/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_acks/{sequence}': + '/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}': get: - summary: PacketAcknowledgement queries a stored packet acknowledgement hash. - operationId: PacketAcknowledgement + summary: Delegation queries delegate info for given validator delegator pair. + operationId: Delegation responses: '200': description: A successful response. schema: type: object properties: - acknowledgement: - type: string - format: byte - title: packet associated with the request fields - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved + delegation_response: type: object properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while - keeping version + delegation: + type: object + properties: + delegator_address: + type: string + description: >- + delegator_address is the bech32-encoded address of the + delegator. + validator_address: + type: string + description: >- + validator_address is the bech32-encoded address of the + validator. + shares: + type: string + description: shares define the delegation shares received. + description: >- + Delegation represents the bond with tokens held by an + account. It is - number the same However some consensus algorithms may choose - to reset the + owned by one delegator, and is associated with the voting + power of one - height in certain conditions e.g. hard forks, state-machine - breaking changes + validator. + balance: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. - In these cases, the version number is incremented so that - height continues to - be monitonically increasing even as the VersionHeight gets - reset - title: >- - QueryPacketAcknowledgementResponse defines the client query - response for a + NOTE: The amount field is an Int which implements the + custom method - packet which also includes a proof and the height from which the + signatures required by gogoproto. + description: >- + DelegationResponse is equivalent to Delegation except that it + contains a - proof was retrieved + balance in addition to shares which is more suitable for + client responses. + description: >- + QueryDelegationResponse is response type for the Query/Delegation + RPC method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -20500,125 +22099,84 @@ paths: "value": "1.212s" } parameters: - - name: channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: port_id - description: port unique identifier + - name: validator_addr + description: validator_addr defines the validator address to query for. in: path required: true type: string - - name: sequence - description: packet sequence + - name: delegator_addr + description: delegator_addr defines the delegator address to query for. in: path required: true type: string - format: uint64 tags: - Query - '/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments': + '/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}/unbonding_delegation': get: summary: |- - PacketCommitments returns all the packet commitments hashes associated - with a channel. - operationId: PacketCommitments + UnbondingDelegation queries unbonding info for given validator delegator + pair. + operationId: UnbondingDelegation responses: '200': description: A successful response. schema: type: object properties: - commitments: - type: array - items: - type: object - properties: - port_id: - type: string - description: channel port identifier. - channel_id: - type: string - description: channel unique identifier. - sequence: - type: string - format: uint64 - description: packet sequence. - data: - type: string - format: byte - description: embedded data that represents packet state. - description: >- - PacketState defines the generic type necessary to retrieve - and store - - packet commitments, acknowledgements, and receipts. - - Caller is responsible for knowing the context necessary to - interpret this - - state as a commitment, acknowledgement, or a receipt. - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height + unbond: type: object properties: - version_number: + delegator_address: type: string - format: uint64 - title: the version that the client is currently on - version_height: + description: >- + delegator_address is the bech32-encoded address of the + delegator. + validator_address: type: string - format: uint64 - title: the height within the given version + description: >- + validator_address is the bech32-encoded address of the + validator. + entries: + type: array + items: + type: object + properties: + creation_height: + type: string + format: int64 + description: >- + creation_height is the height which the unbonding + took place. + completion_time: + type: string + format: date-time + description: >- + completion_time is the unix time for unbonding + completion. + initial_balance: + type: string + description: >- + initial_balance defines the tokens initially + scheduled to receive at completion. + balance: + type: string + description: balance defines the tokens to receive at completion. + description: >- + UnbondingDelegationEntry defines an unbonding object + with relevant metadata. + description: entries are the unbonding delegation entries. description: >- - Normally the VersionHeight is incremented at each height while - keeping version - - number the same However some consensus algorithms may choose - to reset the + UnbondingDelegation stores all of a single delegator's + unbonding bonds - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the version number is incremented so that - height continues to + for a single validator in an time-ordered list. + description: >- + QueryDelegationResponse is response type for the + Query/UnbondingDelegation - be monitonically increasing even as the VersionHeight gets - reset - title: |- - QueryPacketCommitmentsResponse is the request type for the - Query/QueryPacketCommitments RPC method + RPC method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -20807,116 +22365,106 @@ paths: "value": "1.212s" } parameters: - - name: channel_id - description: channel unique identifier + - name: validator_addr + description: validator_addr defines the validator address to query for. in: path required: true type: string - - name: port_id - description: port unique identifier + - name: delegator_addr + description: delegator_addr defines the delegator address to query for. in: path required: true type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean tags: - Query - '/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_ack_sequences}/unreceived_acks': + '/cosmos/staking/v1beta1/validators/{validator_addr}/unbonding_delegations': get: summary: >- - UnreceivedAcks returns all the unreceived IBC acknowledgements - associated with a - - channel and sequences. - operationId: UnreceivedAcks + ValidatorUnbondingDelegations queries unbonding delegations of a + validator. + operationId: ValidatorUnbondingDelegations responses: '200': description: A successful response. schema: type: object properties: - sequences: + unbonding_responses: type: array items: - type: string - format: uint64 - title: list of unreceived acknowledgement sequences - height: - title: query block height + type: object + properties: + delegator_address: + type: string + description: >- + delegator_address is the bech32-encoded address of the + delegator. + validator_address: + type: string + description: >- + validator_address is the bech32-encoded address of the + validator. + entries: + type: array + items: + type: object + properties: + creation_height: + type: string + format: int64 + description: >- + creation_height is the height which the unbonding + took place. + completion_time: + type: string + format: date-time + description: >- + completion_time is the unix time for unbonding + completion. + initial_balance: + type: string + description: >- + initial_balance defines the tokens initially + scheduled to receive at completion. + balance: + type: string + description: >- + balance defines the tokens to receive at + completion. + description: >- + UnbondingDelegationEntry defines an unbonding object + with relevant metadata. + description: entries are the unbonding delegation entries. + description: >- + UnbondingDelegation stores all of a single delegator's + unbonding bonds + + for a single validator in an time-ordered list. + pagination: + description: pagination defines the pagination in the response. type: object properties: - version_number: + next_key: type: string - format: uint64 - title: the version that the client is currently on - version_height: + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: type: string format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while - keeping version - - number the same However some consensus algorithms may choose - to reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes + title: >- + total is total number of results available if + PageRequest.count_total - In these cases, the version number is incremented so that - height continues to + was set, its value is undefined otherwise + description: >- + QueryValidatorUnbondingDelegationsResponse is response type for + the - be monitonically increasing even as the VersionHeight gets - reset - title: |- - QueryUnreceivedAcksResponse is the response type for the - Query/UnreceivedAcks RPC method + Query/ValidatorUnbondingDelegations RPC method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -21105,80 +22653,152 @@ paths: "value": "1.212s" } parameters: - - name: channel_id - description: channel unique identifier + - name: validator_addr + description: validator_addr defines the validator address to query for. in: path required: true type: string - - name: port_id - description: port unique identifier - in: path - required: true + - name: pagination.key + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + in: query + required: false type: string - - name: packet_ack_sequences - description: list of acknowledgement sequences - in: path - required: true - type: array - items: - type: string - format: uint64 - collectionFormat: csv - minItems: 1 + format: byte + - name: pagination.offset + description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + in: query + required: false + type: string + format: uint64 + - name: pagination.limit + description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + in: query + required: false + type: string + format: uint64 + - name: pagination.count_total + description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + required: false + type: boolean + format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + in: query + required: false + type: boolean + format: boolean tags: - Query - '/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_commitment_sequences}/unreceived_packets': - get: - summary: >- - UnreceivedPackets returns all the unreceived IBC packets associated with - a - - channel and sequences. - operationId: UnreceivedPackets + /cosmos/tx/v1beta1/simulate: + post: + summary: Simulate simulates executing a transaction for estimating gas usage. + operationId: Simulate responses: '200': description: A successful response. schema: type: object properties: - sequences: - type: array - items: - type: string - format: uint64 - title: list of unreceived packet sequences - height: - title: query block height + gas_info: + description: gas_info is the information about gas used in the simulation. type: object properties: - version_number: + gas_wanted: type: string format: uint64 - title: the version that the client is currently on - version_height: + description: >- + GasWanted is the maximum units of work we allow this tx to + perform. + gas_used: type: string format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while - keeping version + description: GasUsed is the amount of gas actually consumed. + result: + description: result is the result of the simulation. + type: object + properties: + data: + type: string + format: byte + description: >- + Data is any data returned from message or handler + execution. It MUST be - number the same However some consensus algorithms may choose - to reset the + length prefixed in order to separate data from multiple + message executions. + log: + type: string + description: >- + Log contains the log information from message or handler + execution. + events: + type: array + items: + type: object + properties: + type: + type: string + attributes: + type: array + items: + type: object + properties: + key: + type: string + format: byte + value: + type: string + format: byte + index: + type: boolean + format: boolean + description: >- + EventAttribute is a single key-value pair, + associated with an event. + description: >- + Event allows application developers to attach additional + information to - height in certain conditions e.g. hard forks, state-machine - breaking changes + ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx + and ResponseDeliverTx. - In these cases, the version number is incremented so that - height continues to + Later, transactions may be queried using these events. + description: >- + Events contains a slice of Event objects that were emitted + during message - be monitonically increasing even as the VersionHeight gets - reset - title: |- - QueryUnreceivedPacketsResponse is the response type for the - Query/UnreceivedPacketCommitments RPC method + or handler execution. + description: |- + SimulateResponse is the response type for the + Service.SimulateRPC method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -21367,83 +22987,24 @@ paths: "value": "1.212s" } parameters: - - name: channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: port_id - description: port unique identifier - in: path - required: true - type: string - - name: packet_commitment_sequences - description: list of packet sequences - in: path + - name: body + in: body required: true - type: array - items: - type: string - format: uint64 - collectionFormat: csv - minItems: 1 + schema: + $ref: '#/definitions/cosmos.tx.v1beta1.SimulateRequest' tags: - - Query - '/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/{sequence}': + - Service + /cosmos/tx/v1beta1/txs: get: - summary: PacketCommitment queries a stored packet commitment hash. - operationId: PacketCommitment + summary: GetTxsEvent fetches txs by event. + operationId: GetTxsEvent responses: '200': description: A successful response. schema: - type: object - properties: - commitment: - type: string - format: byte - title: packet associated with the request fields - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while - keeping version - - number the same However some consensus algorithms may choose - to reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the version number is incremented so that - height continues to - - be monitonically increasing even as the VersionHeight gets - reset - title: >- - QueryPacketCommitmentResponse defines the client query response - for a packet - - which also includes a proof and the height from which the proof - was - - retrieved + $ref: '#/definitions/cosmos.tx.v1beta1.GetTxsEventResponse' default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -21632,80 +23193,374 @@ paths: "value": "1.212s" } parameters: - - name: channel_id - description: channel unique identifier - in: path - required: true + - name: events + description: events is the list of transaction event type. + in: query + required: false + type: array + items: + type: string + collectionFormat: multi + - name: pagination.key + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + in: query + required: false type: string - - name: port_id - description: port unique identifier - in: path - required: true + format: byte + - name: pagination.offset + description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + in: query + required: false type: string - - name: sequence - description: packet sequence - in: path - required: true + format: uint64 + - name: pagination.limit + description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + in: query + required: false type: string format: uint64 + - name: pagination.count_total + description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + required: false + type: boolean + format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + in: query + required: false + type: boolean + format: boolean + - name: order_by + description: |2- + - ORDER_BY_UNSPECIFIED: ORDER_BY_UNSPECIFIED specifies an unknown sorting order. OrderBy defaults to ASC in this case. + - ORDER_BY_ASC: ORDER_BY_ASC defines ascending order + - ORDER_BY_DESC: ORDER_BY_DESC defines descending order + in: query + required: false + type: string + enum: + - ORDER_BY_UNSPECIFIED + - ORDER_BY_ASC + - ORDER_BY_DESC + default: ORDER_BY_UNSPECIFIED tags: - - Query - '/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_receipts/{sequence}': - get: - summary: >- - PacketReceipt queries if a given packet sequence has been received on - the queried chain - operationId: PacketReceipt + - Service + post: + summary: BroadcastTx broadcast transaction. + operationId: BroadcastTx responses: '200': description: A successful response. schema: type: object properties: - received: - type: boolean - title: success flag for if receipt exists - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved + tx_response: type: object properties: - version_number: + height: type: string - format: uint64 - title: the version that the client is currently on - version_height: + format: int64 + title: The block height + txhash: type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while - keeping version + description: The transaction hash. + codespace: + type: string + title: Namespace for the Code + code: + type: integer + format: int64 + description: Response code. + data: + type: string + description: 'Result bytes, if any.' + raw_log: + type: string + description: >- + The output of the application's logger (raw string). May + be - number the same However some consensus algorithms may choose - to reset the + non-deterministic. + logs: + type: array + items: + type: object + properties: + msg_index: + type: integer + format: int64 + log: + type: string + events: + type: array + items: + type: object + properties: + type: + type: string + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + description: >- + Attribute defines an attribute wrapper where + the key and value are - height in certain conditions e.g. hard forks, state-machine - breaking changes + strings instead of raw bytes. + description: >- + StringEvent defines en Event object wrapper where + all the attributes - In these cases, the version number is incremented so that - height continues to + contain key/value pairs that are strings instead + of raw bytes. + description: >- + Events contains a slice of Event objects that were + emitted during some - be monitonically increasing even as the VersionHeight gets - reset - title: >- - QueryPacketReceiptResponse defines the client query response for a - packet receipt + execution. + description: >- + ABCIMessageLog defines a structure containing an indexed + tx ABCI message log. + description: >- + The output of the application's logger (typed). May be + non-deterministic. + info: + type: string + description: Additional information. May be non-deterministic. + gas_wanted: + type: string + format: int64 + description: Amount of gas requested for transaction. + gas_used: + type: string + format: int64 + description: Amount of gas consumed by transaction. + tx: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type + of the serialized + + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's path + must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be + in a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary + all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can + optionally set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results + based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in + the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty + scheme) might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the + above specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any + values in the form + + of utility functions or additional generated methods of + the Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and + the unpack + + methods only use the fully qualified type name after the + last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will + yield type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with + an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a + custom JSON + + representation, that representation will be embedded + adding a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + timestamp: + type: string + description: >- + Time of the previous block. For heights > 1, it's the + weighted median of - which also includes a proof, and the height from which the proof - was + the timestamps of the valid votes in the block.LastCommit. + For height == 1, + + it's genesis time. + description: >- + TxResponse defines a structure containing relevant tx data and + metadata. The - retrieved + tags are stringified and the log is JSON decoded. + description: |- + BroadcastTxResponse is the response type for the + Service.BroadcastTx method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -21894,204 +23749,81 @@ paths: "value": "1.212s" } parameters: - - name: channel_id - description: channel unique identifier - in: path - required: true - type: string - - name: port_id - description: port unique identifier - in: path - required: true - type: string - - name: sequence - description: packet sequence - in: path + - name: body + in: body required: true - type: string - format: uint64 + schema: + type: object + properties: + tx_bytes: + type: string + format: byte + description: tx_bytes is the raw transaction. + mode: + type: string + enum: + - BROADCAST_MODE_UNSPECIFIED + - BROADCAST_MODE_BLOCK + - BROADCAST_MODE_SYNC + - BROADCAST_MODE_ASYNC + default: BROADCAST_MODE_UNSPECIFIED + description: >- + BroadcastMode specifies the broadcast mode for the + TxService.Broadcast RPC method. + + - BROADCAST_MODE_UNSPECIFIED: zero-value for mode ordering + - BROADCAST_MODE_BLOCK: BROADCAST_MODE_BLOCK defines a tx broadcasting mode where the client waits for + the tx to be committed in a block. + - BROADCAST_MODE_SYNC: BROADCAST_MODE_SYNC defines a tx broadcasting mode where the client waits for + a CheckTx execution response only. + - BROADCAST_MODE_ASYNC: BROADCAST_MODE_ASYNC defines a tx broadcasting mode where the client returns + immediately. + description: >- + BroadcastTxRequest is the request type for the + Service.BroadcastTxRequest + + RPC method. tags: - - Query - '/ibc/channel/v1beta1/connections/{connection}/channels': + - Service + '/cosmos/tx/v1beta1/txs/{hash}': get: - summary: |- - ConnectionChannels queries all the channels associated with a connection - end. - operationId: ConnectionChannels + summary: GetTx fetches a tx by hash. + operationId: GetTx responses: '200': description: A successful response. + schema: + $ref: '#/definitions/cosmos.tx.v1beta1.GetTxResponse' + default: + description: An unexpected error response schema: type: object properties: - channels: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: type: array items: type: object properties: - state: - title: current state of the channel end + type_url: type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - default: STATE_UNINITIALIZED_UNSPECIFIED description: >- - State defines if a channel is in one of the following - states: + A URL/resource name that uniquely identifies the type of + the serialized - CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED. + protocol buffer message. This string must contain at + least - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - ordering: - title: whether the channel is ordered or unordered - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: >- - - ORDER_NONE_UNSPECIFIED: zero-value for channel - ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - counterparty: - title: counterparty channel end - type: object - properties: - port_id: - type: string - description: >- - port on the counterparty chain which owns the other - end of the channel. - channel_id: - type: string - title: channel end on the counterparty chain - connection_hops: - type: array - items: - type: string - title: >- - list of connection identifiers, in order, along which - packets sent on + one "/" character. The last segment of the URL's path + must represent - this channel will travel - version: - type: string - title: >- - opaque channel version, which is agreed upon during the - handshake - port_id: - type: string - title: port identifier - channel_id: - type: string - title: channel identifier - description: >- - IdentifiedChannel defines a channel with additional port and - channel - - identifier fields. - description: list of channels associated with a connection. - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while - keeping version - - number the same However some consensus algorithms may choose - to reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the version number is incremented so that - height continues to - - be monitonically increasing even as the VersionHeight gets - reset - title: |- - QueryConnectionChannelsResponse is the Response type for the - Query/QueryConnectionChannels RPC method - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in + the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form @@ -22252,296 +23984,34 @@ paths: "value": "1.212s" } parameters: - - name: connection - description: connection unique identifier + - name: hash + description: 'hash is the tx hash to query, encoded as a hex string.' in: path required: true type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean tags: - - Query - /ibc/client/v1beta1/client_states: + - Service + '/cosmos/upgrade/v1beta1/applied_plan/{name}': get: - summary: ClientStates queries all the IBC light clients of a chain. - operationId: ClientStates + summary: AppliedPlan queries a previously applied upgrade plan by its name. + operationId: AppliedPlan responses: '200': description: A successful response. schema: type: object properties: - client_states: - type: array - items: - type: object - properties: - client_id: - type: string - title: client identifier - client_state: - title: client state - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the - type of the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's - path must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be - in a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the - binary all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can - optionally set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results - based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available - in the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty - scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the - above specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any - values in the form - - of utility functions or additional generated methods of - the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and - the unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will - yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the - regular - - representation of the deserialized, embedded message, - with an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a - custom JSON - - representation, that representation will be embedded - adding a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message - [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - description: >- - IdentifiedClientState defines a client state with an - additional client - - identifier field. - description: list of stored ClientStates of the chain. - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } + height: + type: string + format: int64 + description: height is the block height at which the plan was applied. description: >- - QueryClientStatesResponse is the response type for the - Query/ClientStates RPC + QueryAppliedPlanResponse is the response type for the + Query/AppliedPlan RPC method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -22730,277 +24200,255 @@ paths: "value": "1.212s" } parameters: - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false + - name: name + description: name is the name of the applied plan to query for. + in: path + required: true type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean tags: - Query - '/ibc/client/v1beta1/client_states/{client_id}': + /cosmos/upgrade/v1beta1/current_plan: get: - summary: ClientState queries an IBC light client. - operationId: ClientState + summary: CurrentPlan queries the current upgrade plan. + operationId: CurrentPlan responses: '200': description: A successful response. schema: type: object properties: - client_state: - title: client state associated with the request identifier + plan: + description: plan is the current upgrade plan. type: object properties: - type_url: + name: type: string description: >- - A URL/resource name that uniquely identifies the type of - the serialized + Sets the name for the upgrade. This name will be used by + the upgraded - protocol buffer message. This string must contain at least + version of the software to apply any special "on-upgrade" + commands during - one "/" character. The last segment of the URL's path must - represent + the first BeginBlock method after the upgrade is applied. + It is also used - the fully qualified name of the type (as in + to detect whether a software version can handle a given + upgrade. If no - `path/google.protobuf.Duration`). The name should be in a - canonical form + upgrade handler with this name has been set in the + software, it will be - (e.g., leading "." is not accepted). + assumed that the software is out-of-date when the upgrade + Time or Height is + reached and the software will exit. + time: + type: string + format: date-time + description: >- + Deprecated: Time based upgrades have been deprecated. Time + based upgrade logic - In practice, teams usually precompile into the binary all - types that they + has been removed from the SDK. - expect it to use in the context of Any. However, for URLs - which use the + If this field is not empty, an error will be thrown. + height: + type: string + format: int64 + description: |- + The height at which the upgrade must be performed. + Only used if Time is not set. + info: + type: string + title: >- + Any application specific upgrade info to be included + on-chain - scheme `http`, `https`, or no scheme, one can optionally - set up a type + such as a git commit that validators could automatically + upgrade to + upgraded_client_state: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type + of the serialized - server that maps type URLs to message definitions as - follows: + protocol buffer message. This string must contain at + least + one "/" character. The last segment of the URL's path + must represent - * If no scheme is provided, `https` is assumed. + the fully qualified name of the type (as in - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) + `path/google.protobuf.Duration`). The name should be + in a canonical form - Note: this functionality is not currently available in the - official + (e.g., leading "." is not accepted). - protobuf release, and it is not used for type URLs - beginning with - type.googleapis.com. + In practice, teams usually precompile into the binary + all types that they + expect it to use in the context of Any. However, for + URLs which use the - Schemes other than `http`, `https` (or the empty scheme) - might be + scheme `http`, `https`, or no scheme, one can + optionally set up a type - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a + server that maps type URLs to message definitions as + follows: - URL that describes the type of the serialized message. + * If no scheme is provided, `https` is assumed. - Protobuf library provides support to pack/unpack Any values in - the form + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results + based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) - of utility functions or additional generated methods of the - Any type. + Note: this functionality is not currently available in + the official + protobuf release, and it is not used for type URLs + beginning with - Example 1: Pack and unpack a message in C++. + type.googleapis.com. - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - Example 2: Pack and unpack a message in Java. + Schemes other than `http`, `https` (or the empty + scheme) might be - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the + above specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a - Example 3: Pack and unpack a message in Python. + URL that describes the type of the serialized message. - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - Example 4: Pack and unpack a message in Go + Protobuf library provides support to pack/unpack Any + values in the form - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } + of utility functions or additional generated methods of + the Any type. - The pack methods provided by protobuf library will by default - use - 'type.googleapis.com/full.type.name' as the type URL and the - unpack + Example 1: Pack and unpack a message in C++. - methods only use the fully qualified type name after the last - '/' + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } - in the type URL, for example "foo.bar.com/x/y.z" will yield - type + Example 2: Pack and unpack a message in Java. - name "y.z". + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + Example 3: Pack and unpack a message in Python. + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... - JSON + Example 4: Pack and unpack a message in Go - ==== + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } - The JSON representation of an `Any` value uses the regular + The pack methods provided by protobuf library will by + default use - representation of the deserialized, embedded message, with an + 'type.googleapis.com/full.type.name' as the type URL and + the unpack - additional field `@type` which contains the type URL. Example: + methods only use the fully qualified type name after the + last '/' - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } + in the type URL, for example "foo.bar.com/x/y.z" will + yield type - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } + name "y.z". - If the embedded message type is well-known and has a custom - JSON - representation, that representation will be embedded adding a - field - `value` which holds the custom JSON in addition to the `@type` + JSON - field. Example (for message [google.protobuf.Duration][]): + ==== - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while - keeping version + The JSON representation of an `Any` value uses the regular - number the same However some consensus algorithms may choose - to reset the + representation of the deserialized, embedded message, with + an - height in certain conditions e.g. hard forks, state-machine - breaking changes + additional field `@type` which contains the type URL. + Example: - In these cases, the version number is incremented so that - height continues to + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } - be monitonically increasing even as the VersionHeight gets - reset - description: >- - QueryClientStateResponse is the response type for the - Query/ClientState RPC + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a + custom JSON + + representation, that representation will be embedded + adding a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): - method. Besides the client state, it includes a proof and the - height from + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + description: >- + QueryCurrentPlanResponse is the response type for the + Query/CurrentPlan RPC - which the proof was retrieved. + method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -23188,273 +24636,263 @@ paths: "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" } - parameters: - - name: client_id - description: client state unique identifier - in: path - required: true - type: string tags: - Query - '/ibc/client/v1beta1/consensus_states/{client_id}': + /cosmos/upgrade/v1beta1/module_versions: get: - summary: |- - ConsensusStates queries all the consensus state associated with a given - client. - operationId: ConsensusStates + summary: ModuleVersions queries the list of module versions from state. + operationId: ModuleVersions responses: '200': description: A successful response. schema: type: object properties: - consensus_states: + module_versions: type: array items: type: object properties: - height: - title: consensus state height - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height - while keeping version - - number the same However some consensus algorithms may - choose to reset the - - height in certain conditions e.g. hard forks, - state-machine breaking changes - - In these cases, the version number is incremented so - that height continues to + name: + type: string + title: name of the app module + version: + type: string + format: uint64 + title: consensus version of the app module + description: ModuleVersion specifies a module and its consensus version. + description: >- + module_versions is a list of module names with their consensus + versions. + description: >- + QueryModuleVersionsResponse is the response type for the + Query/ModuleVersions - be monitonically increasing even as the VersionHeight - gets reset - consensus_state: - title: consensus state - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the - type of the serialized + RPC method. + default: + description: An unexpected error response + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of + the serialized - protocol buffer message. This string must contain at - least + protocol buffer message. This string must contain at + least - one "/" character. The last segment of the URL's - path must represent + one "/" character. The last segment of the URL's path + must represent - the fully qualified name of the type (as in + the fully qualified name of the type (as in - `path/google.protobuf.Duration`). The name should be - in a canonical form + `path/google.protobuf.Duration`). The name should be in + a canonical form - (e.g., leading "." is not accepted). + (e.g., leading "." is not accepted). - In practice, teams usually precompile into the - binary all types that they + In practice, teams usually precompile into the binary + all types that they - expect it to use in the context of Any. However, for - URLs which use the + expect it to use in the context of Any. However, for + URLs which use the - scheme `http`, `https`, or no scheme, one can - optionally set up a type + scheme `http`, `https`, or no scheme, one can optionally + set up a type - server that maps type URLs to message definitions as - follows: + server that maps type URLs to message definitions as + follows: - * If no scheme is provided, `https` is assumed. + * If no scheme is provided, `https` is assumed. - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results - based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based + on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) - Note: this functionality is not currently available - in the official + Note: this functionality is not currently available in + the official - protobuf release, and it is not used for type URLs - beginning with + protobuf release, and it is not used for type URLs + beginning with - type.googleapis.com. + type.googleapis.com. - Schemes other than `http`, `https` (or the empty - scheme) might be + Schemes other than `http`, `https` (or the empty scheme) + might be - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the - above specified type. + used with implementation specific semantics. + value: + type: string + format: byte description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a - Protobuf library provides support to pack/unpack Any - values in the form + URL that describes the type of the serialized message. - of utility functions or additional generated methods of - the Any type. + Protobuf library provides support to pack/unpack Any values + in the form - Example 1: Pack and unpack a message in C++. + of utility functions or additional generated methods of the + Any type. - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - Example 2: Pack and unpack a message in Java. + Example 1: Pack and unpack a message in C++. - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } - Example 3: Pack and unpack a message in Python. + Example 2: Pack and unpack a message in Java. - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } - Example 4: Pack and unpack a message in Go + Example 3: Pack and unpack a message in Python. - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... - The pack methods provided by protobuf library will by - default use + Example 4: Pack and unpack a message in Go - 'type.googleapis.com/full.type.name' as the type URL and - the unpack + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } - methods only use the fully qualified type name after the - last '/' + The pack methods provided by protobuf library will by + default use - in the type URL, for example "foo.bar.com/x/y.z" will - yield type + 'type.googleapis.com/full.type.name' as the type URL and the + unpack - name "y.z". + methods only use the fully qualified type name after the + last '/' + in the type URL, for example "foo.bar.com/x/y.z" will yield + type + name "y.z". - JSON - ==== - The JSON representation of an `Any` value uses the - regular + JSON - representation of the deserialized, embedded message, - with an + ==== - additional field `@type` which contains the type URL. - Example: + The JSON representation of an `Any` value uses the regular - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } + representation of the deserialized, embedded message, with + an - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } + additional field `@type` which contains the type URL. + Example: - If the embedded message type is well-known and has a - custom JSON + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } - representation, that representation will be embedded - adding a field + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } - `value` which holds the custom JSON in addition to the - `@type` + If the embedded message type is well-known and has a custom + JSON - field. Example (for message - [google.protobuf.Duration][]): + representation, that representation will be embedded adding + a field - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - description: >- - ConsensusStateWithHeight defines a consensus state with an - additional height field. - title: consensus states associated with the identifier - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total + `value` which holds the custom JSON in addition to the + `@type` - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the + field. Example (for message [google.protobuf.Duration][]): - corresponding request message has used PageRequest. + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + parameters: + - name: module_name + description: |- + module_name is a field to query a specific module + consensus version from state. Leaving this empty will + fetch the full list of module versions from state. + in: query + required: false + type: string + tags: + - Query + '/cosmos/upgrade/v1beta1/upgraded_consensus_state/{last_height}': + get: + summary: |- + UpgradedConsensusState queries the consensus state that will serve + as a trusted kernel for the next version of this chain. It will only be + stored at the last height of this chain. + UpgradedConsensusState RPC not supported with legacy querier + operationId: UpgradedConsensusState + responses: + '200': + description: A successful response. + schema: + type: object + properties: + upgraded_consensus_state: + type: string + format: byte + description: >- + QueryUpgradedConsensusStateResponse is the response type for the + Query/UpgradedConsensusState - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - title: |- - QueryConsensusStatesResponse is the response type for the - Query/ConsensusStates RPC method + RPC method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -23643,285 +25081,240 @@ paths: "value": "1.212s" } parameters: - - name: client_id - description: client identifier + - name: last_height + description: |- + last height of the current chain must be sent in request + as this is the height under which next consensus state is stored in: path required: true type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean + format: int64 tags: - Query - '/ibc/client/v1beta1/consensus_states/{client_id}/version/{version_number}/height/{version_height}': + /cosmos/authz/v1beta1/grants: get: - summary: >- - ConsensusState queries a consensus state associated with a client state - at - - a given height. - operationId: ConsensusState + summary: 'Returns list of `Authorization`, granted to the grantee by the granter.' + operationId: Grants responses: '200': description: A successful response. schema: type: object properties: - consensus_state: - title: >- - consensus state associated with the client identifier at the - given height - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized + grants: + type: array + items: + type: object + properties: + authorization: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the + type of the serialized - protocol buffer message. This string must contain at least + protocol buffer message. This string must contain at + least - one "/" character. The last segment of the URL's path must - represent + one "/" character. The last segment of the URL's + path must represent - the fully qualified name of the type (as in + the fully qualified name of the type (as in - `path/google.protobuf.Duration`). The name should be in a - canonical form + `path/google.protobuf.Duration`). The name should be + in a canonical form - (e.g., leading "." is not accepted). + (e.g., leading "." is not accepted). - In practice, teams usually precompile into the binary all - types that they + In practice, teams usually precompile into the + binary all types that they - expect it to use in the context of Any. However, for URLs - which use the + expect it to use in the context of Any. However, for + URLs which use the - scheme `http`, `https`, or no scheme, one can optionally - set up a type + scheme `http`, `https`, or no scheme, one can + optionally set up a type - server that maps type URLs to message definitions as - follows: + server that maps type URLs to message definitions as + follows: - * If no scheme is provided, `https` is assumed. + * If no scheme is provided, `https` is assumed. - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results + based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) - Note: this functionality is not currently available in the - official + Note: this functionality is not currently available + in the official - protobuf release, and it is not used for type URLs - beginning with + protobuf release, and it is not used for type URLs + beginning with - type.googleapis.com. + type.googleapis.com. - Schemes other than `http`, `https` (or the empty scheme) - might be + Schemes other than `http`, `https` (or the empty + scheme) might be - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the + above specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a - URL that describes the type of the serialized message. + URL that describes the type of the serialized message. - Protobuf library provides support to pack/unpack Any values in - the form + Protobuf library provides support to pack/unpack Any + values in the form - of utility functions or additional generated methods of the - Any type. + of utility functions or additional generated methods of + the Any type. - Example 1: Pack and unpack a message in C++. + Example 1: Pack and unpack a message in C++. - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } - Example 2: Pack and unpack a message in Java. + Example 2: Pack and unpack a message in Java. - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } - Example 3: Pack and unpack a message in Python. + Example 3: Pack and unpack a message in Python. - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... - Example 4: Pack and unpack a message in Go + Example 4: Pack and unpack a message in Go - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } - The pack methods provided by protobuf library will by default - use + The pack methods provided by protobuf library will by + default use - 'type.googleapis.com/full.type.name' as the type URL and the - unpack + 'type.googleapis.com/full.type.name' as the type URL and + the unpack - methods only use the fully qualified type name after the last - '/' + methods only use the fully qualified type name after the + last '/' - in the type URL, for example "foo.bar.com/x/y.z" will yield - type + in the type URL, for example "foo.bar.com/x/y.z" will + yield type - name "y.z". + name "y.z". - JSON + JSON - ==== + ==== - The JSON representation of an `Any` value uses the regular + The JSON representation of an `Any` value uses the + regular - representation of the deserialized, embedded message, with an + representation of the deserialized, embedded message, + with an - additional field `@type` which contains the type URL. Example: + additional field `@type` which contains the type URL. + Example: - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } - If the embedded message type is well-known and has a custom - JSON + If the embedded message type is well-known and has a + custom JSON - representation, that representation will be embedded adding a - field + representation, that representation will be embedded + adding a field - `value` which holds the custom JSON in addition to the `@type` + `value` which holds the custom JSON in addition to the + `@type` - field. Example (for message [google.protobuf.Duration][]): + field. Example (for message + [google.protobuf.Duration][]): - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + expiration: + type: string + format: date-time + description: |- + Grant gives permissions to execute + the provide method with expiration time. + description: >- + authorizations is a list of grants granted for grantee by + granter. + pagination: + description: pagination defines an pagination for the response. type: object properties: - version_number: + next_key: type: string - format: uint64 - title: the version that the client is currently on - version_height: + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: type: string format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while - keeping version - - number the same However some consensus algorithms may choose - to reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the version number is incremented so that - height continues to - - be monitonically increasing even as the VersionHeight gets - reset - title: >- - QueryConsensusStateResponse is the response type for the - Query/ConsensusState + title: >- + total is total number of results available if + PageRequest.count_total - RPC method + was set, its value is undefined otherwise + description: >- + QueryGrantsResponse is the response type for the + Query/Authorizations RPC method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -24110,87 +25503,178 @@ paths: "value": "1.212s" } parameters: - - name: client_id - description: client identifier - in: path - required: true + - name: granter + in: query + required: false type: string - - name: version_number - description: consensus state version number - in: path - required: true + - name: grantee + in: query + required: false + type: string + - name: msg_type_url + description: >- + Optional, msg_type_url, when set, will query only grants matching + given msg type. + in: query + required: false + type: string + - name: pagination.key + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + in: query + required: false + type: string + format: byte + - name: pagination.offset + description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + in: query + required: false type: string format: uint64 - - name: version_height - description: consensus state version height - in: path - required: true + - name: pagination.limit + description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + in: query + required: false type: string format: uint64 - - name: latest_height + - name: pagination.count_total description: >- - latest_height overrrides the height field and queries the latest - stored + count_total is set to true to indicate that the result set should + include - ConsensusState. + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + required: false + type: boolean + format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. in: query required: false type: boolean + format: boolean tags: - Query - '/ibc/connection/v1beta1/client_connections/{client_id}': + '/cosmos/feegrant/v1beta1/allowance/{granter}/{grantee}': get: - summary: |- - ClientConnections queries the connection paths associated with a client - state. - operationId: ClientConnections + summary: Allowance returns fee granted to the grantee by the granter. + operationId: Allowance responses: '200': description: A successful response. schema: type: object properties: - connection_paths: - type: array - items: - type: string - description: slice of all the connection paths associated with a client. - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was generated + allowance: + description: allowance is a allowance granted for grantee by granter. type: object properties: - version_number: + granter: type: string - format: uint64 - title: the version that the client is currently on - version_height: + description: >- + granter is the address of the user granting an allowance + of their funds. + grantee: type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while - keeping version + description: >- + grantee is the address of the user being granted an + allowance of another user's funds. + allowance: + description: allowance can be any of basic and filtered fee allowance. + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type + of the serialized + + protocol buffer message. This string must contain at + least - number the same However some consensus algorithms may choose - to reset the + one "/" character. The last segment of the URL's path + must represent - height in certain conditions e.g. hard forks, state-machine - breaking changes + the fully qualified name of the type (as in - In these cases, the version number is incremented so that - height continues to + `path/google.protobuf.Duration`). The name should be + in a canonical form - be monitonically increasing even as the VersionHeight gets - reset - title: |- - QueryClientConnectionsResponse is the response type for the - Query/ClientConnections RPC method + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary + all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can + optionally set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results + based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in + the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty + scheme) might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the + above specified type. + title: >- + Grant is stored in the KVStore to record a grant with full + context + description: >- + QueryAllowanceResponse is the response type for the + Query/Allowance RPC method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -24379,161 +25863,144 @@ paths: "value": "1.212s" } parameters: - - name: client_id - description: client identifier associated with a connection + - name: granter + description: >- + granter is the address of the user granting an allowance of their + funds. + in: path + required: true + type: string + - name: grantee + description: >- + grantee is the address of the user being granted an allowance of + another user's funds. in: path required: true type: string tags: - Query - /ibc/connection/v1beta1/connections: + '/cosmos/feegrant/v1beta1/allowances/{grantee}': get: - summary: Connections queries all the IBC connections of a chain. - operationId: Connections + summary: Allowances returns all the grants for address. + operationId: Allowances responses: '200': description: A successful response. schema: type: object properties: - connections: + allowances: type: array items: type: object properties: - id: + granter: type: string - description: connection identifier. - client_id: - type: string - description: client associated with this connection. - versions: - type: array - items: - type: object - properties: - identifier: - type: string - title: unique version identifier - features: - type: array - items: - type: string - title: >- - list of features compatible with the specified - identifier - description: >- - Version defines the versioning scheme used to - negotiate the IBC verison in - - the connection handshake. - title: >- - IBC version which can be utilised to determine encodings - or protocols for - - channels or packets utilising this connection - state: - description: current state of the connection end. + description: >- + granter is the address of the user granting an allowance + of their funds. + grantee: type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - default: STATE_UNINITIALIZED_UNSPECIFIED - counterparty: - description: counterparty chain associated with this connection. + description: >- + grantee is the address of the user being granted an + allowance of another user's funds. + allowance: + description: >- + allowance can be any of basic and filtered fee + allowance. type: object properties: - client_id: + type_url: type: string description: >- - identifies the client on the counterparty chain - associated with a given + A URL/resource name that uniquely identifies the + type of the serialized - connection. - connection_id: - type: string - description: >- - identifies the connection end on the counterparty - chain associated with a + protocol buffer message. This string must contain at + least - given connection. - prefix: - title: commitment merkle prefix of the counterparty chain - type: object - properties: - key_prefix: - type: string - format: byte - description: >- - IdentifiedConnection defines a connection with additional - connection + one "/" character. The last segment of the URL's + path must represent - identifier field. - description: list of stored connections of the chain. - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total + the fully qualified name of the type (as in - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the + `path/google.protobuf.Duration`). The name should be + in a canonical form - corresponding request message has used PageRequest. + (e.g., leading "." is not accepted). - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height + + In practice, teams usually precompile into the + binary all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can + optionally set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results + based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available + in the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty + scheme) might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the + above specified type. + title: >- + Grant is stored in the KVStore to record a grant with full + context + description: allowances are allowance's granted for grantee by granter. + pagination: + description: pagination defines an pagination for the response. type: object properties: - version_number: + next_key: type: string - format: uint64 - title: the version that the client is currently on - version_height: + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: type: string format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while - keeping version - - number the same However some consensus algorithms may choose - to reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the version number is incremented so that - height continues to + title: >- + total is total number of results available if + PageRequest.count_total - be monitonically increasing even as the VersionHeight gets - reset + was set, its value is undefined otherwise description: >- - QueryConnectionsResponse is the response type for the - Query/Connections RPC - - method. + QueryAllowancesResponse is the response type for the + Query/Allowances RPC method. default: - description: An unexpected error response. + description: An unexpected error response schema: type: object properties: @@ -24722,6 +26189,10 @@ paths: "value": "1.212s" } parameters: + - name: grantee + in: path + required: true + type: string - name: pagination.key description: |- key is a value returned in PageResponse.next_key to begin @@ -24768,1940 +26239,2250 @@ paths: in: query required: false type: boolean + format: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + in: query + required: false + type: boolean + format: boolean tags: - Query - '/ibc/connection/v1beta1/connections/{connection_id}': - get: - summary: Connection queries an IBC connection end. - operationId: Connection - responses: - '200': - description: A successful response. - schema: +definitions: + akash.base.v1beta1.Attribute: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + akash.base.v1beta1.CPU: + type: object + properties: + units: + type: object + properties: + val: + type: string + format: byte + title: 'Unit stores cpu, memory and storage metrics' + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: CPU stores resource units and cpu config attributes + akash.base.v1beta1.Endpoint: + type: object + properties: + kind: + type: string + enum: + - SHARED_HTTP + - RANDOM_PORT + default: SHARED_HTTP + description: |- + - SHARED_HTTP: Describes an endpoint that becomes a Kubernetes Ingress + - RANDOM_PORT: Describes an endpoint that becomes a Kubernetes NodePort + title: >- + This describes how the endpoint is implemented when the lease is + deployed + title: Endpoint describes a publicly accessible IP service + akash.base.v1beta1.Endpoint.Kind: + type: string + enum: + - SHARED_HTTP + - RANDOM_PORT + default: SHARED_HTTP + description: |- + - SHARED_HTTP: Describes an endpoint that becomes a Kubernetes Ingress + - RANDOM_PORT: Describes an endpoint that becomes a Kubernetes NodePort + title: This describes how the endpoint is implemented when the lease is deployed + akash.base.v1beta1.Memory: + type: object + properties: + quantity: + type: object + properties: + val: + type: string + format: byte + title: 'Unit stores cpu, memory and storage metrics' + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: Memory stores resource quantity and memory attributes + akash.base.v1beta1.PlacementRequirements: + type: object + properties: + signed_by: + title: SignedBy list of keys that tenants expect to have signatures from + type: object + properties: + all_of: + type: array + items: + type: string + title: all_of all keys in this list must have signed attributes + any_of: + type: array + items: + type: string + title: >- + any_of at least of of the keys from the list must have signed + attributes + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: Attribute list of attributes tenant expects from the provider + title: PlacementRequirements + akash.base.v1beta1.ResourceUnits: + type: object + properties: + cpu: + type: object + properties: + units: type: object properties: - connection: - title: connection associated with the request identifier - type: object - properties: - client_id: - type: string - description: client associated with this connection. - versions: - type: array - items: - type: object - properties: - identifier: - type: string - title: unique version identifier - features: - type: array - items: - type: string - title: >- - list of features compatible with the specified - identifier - description: >- - Version defines the versioning scheme used to negotiate - the IBC verison in - - the connection handshake. - title: >- - IBC version which can be utilised to determine encodings - or protocols for - - channels or packets utilising this connection - state: - description: current state of the connection end. - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - default: STATE_UNINITIALIZED_UNSPECIFIED - counterparty: - description: counterparty chain associated with this connection. - type: object - properties: - client_id: - type: string - description: >- - identifies the client on the counterparty chain - associated with a given - - connection. - connection_id: - type: string - description: >- - identifies the connection end on the counterparty - chain associated with a - - given connection. - prefix: - title: commitment merkle prefix of the counterparty chain - type: object - properties: - key_prefix: - type: string - format: byte - description: >- - ConnectionEnd defines a stateful object on a chain connected - to another - - separate one. NOTE: there must only be 2 defined - ConnectionEnds to establish - - a connection between two chains. - proof: + val: type: string format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while - keeping version - - number the same However some consensus algorithms may choose - to reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes + title: 'Unit stores cpu, memory and storage metrics' + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: CPU stores resource units and cpu config attributes + memory: + type: object + properties: + quantity: + type: object + properties: + val: + type: string + format: byte + title: 'Unit stores cpu, memory and storage metrics' + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: Memory stores resource quantity and memory attributes + storage: + type: object + properties: + quantity: + type: object + properties: + val: + type: string + format: byte + title: 'Unit stores cpu, memory and storage metrics' + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: Storage stores resource quantity and storage attributes + endpoints: + type: array + items: + type: object + properties: + kind: + type: string + enum: + - SHARED_HTTP + - RANDOM_PORT + default: SHARED_HTTP + description: >- + - SHARED_HTTP: Describes an endpoint that becomes a Kubernetes + Ingress + - RANDOM_PORT: Describes an endpoint that becomes a Kubernetes NodePort + title: >- + This describes how the endpoint is implemented when the lease is + deployed + title: Endpoint describes a publicly accessible IP service + title: >- + ResourceUnits describes all available resources types for deployment/node + etc - In these cases, the version number is incremented so that - height continues to + if field is nil resource is not present in the given data-structure + akash.base.v1beta1.ResourceValue: + type: object + properties: + val: + type: string + format: byte + title: 'Unit stores cpu, memory and storage metrics' + akash.base.v1beta1.SignedBy: + type: object + properties: + all_of: + type: array + items: + type: string + title: all_of all keys in this list must have signed attributes + any_of: + type: array + items: + type: string + title: >- + any_of at least of of the keys from the list must have signed + attributes + title: >- + SignedBy represents validation accounts that tenant expects signatures for + provider attributes - be monitonically increasing even as the VersionHeight gets - reset - description: >- - QueryConnectionResponse is the response type for the - Query/Connection RPC + AllOf has precedence i.e. if there is at least one entry AnyOf is ignored + regardless to how many - method. Besides the connection end, it includes a proof and the - height from + entries there - which the proof was retrieved. - default: - description: An unexpected error response. - schema: + this behaviour to be discussed + akash.base.v1beta1.Storage: + type: object + properties: + quantity: + type: object + properties: + val: + type: string + format: byte + title: 'Unit stores cpu, memory and storage metrics' + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: Storage stores resource quantity and storage attributes + akash.deployment.v1beta1.Deployment: + type: object + properties: + deployment_id: + type: object + properties: + owner: + type: string + dseq: + type: string + format: uint64 + title: DeploymentID stores owner and sequence number + state: + type: string + enum: + - invalid + - active + - closed + default: invalid + description: >- + - invalid: Prefix should start with 0 in enum. So declaring dummy + state + - active: DeploymentActive denotes state for deployment active + - closed: DeploymentClosed denotes state for deployment closed + title: State is an enum which refers to state of deployment + version: + type: string + format: byte + created_at: + type: string + format: int64 + title: 'Deployment stores deploymentID, state and version details' + akash.deployment.v1beta1.Deployment.State: + type: string + enum: + - invalid + - active + - closed + default: invalid + description: |- + - invalid: Prefix should start with 0 in enum. So declaring dummy state + - active: DeploymentActive denotes state for deployment active + - closed: DeploymentClosed denotes state for deployment closed + title: State is an enum which refers to state of deployment + akash.deployment.v1beta1.DeploymentFilters: + type: object + properties: + owner: + type: string + dseq: + type: string + format: uint64 + state: + type: string + title: DeploymentFilters defines filters used to filter deployments + akash.deployment.v1beta1.DeploymentID: + type: object + properties: + owner: + type: string + dseq: + type: string + format: uint64 + title: DeploymentID stores owner and sequence number + akash.deployment.v1beta1.Group: + type: object + properties: + group_id: + type: object + properties: + owner: + type: string + dseq: + type: string + format: uint64 + gseq: + type: integer + format: int64 + title: >- + GroupID stores owner, deployment sequence number and group sequence + number + state: + type: string + enum: + - invalid + - open + - paused + - insufficient_funds + - closed + default: invalid + description: >- + - invalid: Prefix should start with 0 in enum. So declaring dummy + state + - open: GroupOpen denotes state for group open + - paused: GroupOrdered denotes state for group ordered + - insufficient_funds: GroupInsufficientFunds denotes state for group insufficient_funds + - closed: GroupClosed denotes state for group closed + title: State is an enum which refers to state of group + group_spec: + type: object + properties: + name: + type: string + requirements: type: object properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: + signed_by: + title: >- + SignedBy list of keys that tenants expect to have signatures + from + type: object + properties: + all_of: + type: array + items: + type: string + title: all_of all keys in this list must have signed attributes + any_of: + type: array + items: + type: string + title: >- + any_of at least of of the keys from the list must have + signed attributes + attributes: type: array items: type: object properties: - type_url: + key: type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. value: type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON + title: Attribute represents key value pair + title: Attribute list of attributes tenant expects from the provider + title: PlacementRequirements + resources: + type: array + items: + type: object + properties: + resources: + type: object + properties: + cpu: + type: object + properties: + units: + type: object + properties: + val: + type: string + format: byte + title: 'Unit stores cpu, memory and storage metrics' + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: CPU stores resource units and cpu config attributes + memory: + type: object + properties: + quantity: + type: object + properties: + val: + type: string + format: byte + title: 'Unit stores cpu, memory and storage metrics' + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: Memory stores resource quantity and memory attributes + storage: + type: object + properties: + quantity: + type: object + properties: + val: + type: string + format: byte + title: 'Unit stores cpu, memory and storage metrics' + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: Storage stores resource quantity and storage attributes + endpoints: + type: array + items: + type: object + properties: + kind: + type: string + enum: + - SHARED_HTTP + - RANDOM_PORT + default: SHARED_HTTP + description: >- + - SHARED_HTTP: Describes an endpoint that becomes + a Kubernetes Ingress + - RANDOM_PORT: Describes an endpoint that becomes a Kubernetes NodePort + title: >- + This describes how the endpoint is implemented + when the lease is deployed + title: Endpoint describes a publicly accessible IP service + title: >- + ResourceUnits describes all available resources types for + deployment/node etc - representation, that representation will be embedded adding - a field + if field is nil resource is not present in the given + data-structure + count: + type: integer + format: int64 + price: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. - `value` which holds the custom JSON in addition to the - `@type` - field. Example (for message [google.protobuf.Duration][]): + NOTE: The amount field is an Int which implements the custom + method - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: connection_id - description: connection unique identifier - in: path - required: true - type: string - tags: - - Query - '/ibc/connection/v1beta1/connections/{connection_id}/client_state': - get: - summary: |- - ConnectionClientState queries the client state associated with the - connection. - operationId: ConnectionClientState - responses: - '200': - description: A successful response. - schema: + signatures required by gogoproto. + title: 'Resource stores unit, total count and price of resource' + title: GroupSpec stores group specifications + created_at: + type: string + format: int64 + title: 'Group stores group id, state and specifications of group' + akash.deployment.v1beta1.Group.State: + type: string + enum: + - invalid + - open + - paused + - insufficient_funds + - closed + default: invalid + description: |- + - invalid: Prefix should start with 0 in enum. So declaring dummy state + - open: GroupOpen denotes state for group open + - paused: GroupOrdered denotes state for group ordered + - insufficient_funds: GroupInsufficientFunds denotes state for group insufficient_funds + - closed: GroupClosed denotes state for group closed + title: State is an enum which refers to state of group + akash.deployment.v1beta1.GroupID: + type: object + properties: + owner: + type: string + dseq: + type: string + format: uint64 + gseq: + type: integer + format: int64 + title: 'GroupID stores owner, deployment sequence number and group sequence number' + akash.deployment.v1beta1.GroupSpec: + type: object + properties: + name: + type: string + requirements: + type: object + properties: + signed_by: + title: SignedBy list of keys that tenants expect to have signatures from type: object properties: - identified_client_state: - title: client state associated with the channel - type: object - properties: - client_id: - type: string - title: client identifier - client_state: - title: client state + all_of: + type: array + items: + type: string + title: all_of all keys in this list must have signed attributes + any_of: + type: array + items: + type: string + title: >- + any_of at least of of the keys from the list must have signed + attributes + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: Attribute list of attributes tenant expects from the provider + title: PlacementRequirements + resources: + type: array + items: + type: object + properties: + resources: + type: object + properties: + cpu: + type: object + properties: + units: + type: object + properties: + val: + type: string + format: byte + title: 'Unit stores cpu, memory and storage metrics' + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: CPU stores resource units and cpu config attributes + memory: + type: object + properties: + quantity: + type: object + properties: + val: + type: string + format: byte + title: 'Unit stores cpu, memory and storage metrics' + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: Memory stores resource quantity and memory attributes + storage: + type: object + properties: + quantity: + type: object + properties: + val: + type: string + format: byte + title: 'Unit stores cpu, memory and storage metrics' + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: Storage stores resource quantity and storage attributes + endpoints: + type: array + items: type: object properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type - of the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be - in a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can - optionally set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results - based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty - scheme) might be - - used with implementation specific semantics. - value: + kind: type: string - format: byte + enum: + - SHARED_HTTP + - RANDOM_PORT + default: SHARED_HTTP description: >- - Must be a valid serialized protocol buffer of the - above specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any - values in the form - - of utility functions or additional generated methods of - the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } + - SHARED_HTTP: Describes an endpoint that becomes a + Kubernetes Ingress + - RANDOM_PORT: Describes an endpoint that becomes a Kubernetes NodePort + title: >- + This describes how the endpoint is implemented when + the lease is deployed + title: Endpoint describes a publicly accessible IP service + title: >- + ResourceUnits describes all available resources types for + deployment/node etc - Example 2: Pack and unpack a message in Java. + if field is nil resource is not present in the given + data-structure + count: + type: integer + format: int64 + price: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - Example 3: Pack and unpack a message in Python. + NOTE: The amount field is an Int which implements the custom + method - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and - the unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will - yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a - custom JSON - - representation, that representation will be embedded - adding a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - description: >- - IdentifiedClientState defines a client state with an - additional client - - identifier field. - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while - keeping version - - number the same However some consensus algorithms may choose - to reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the version number is incremented so that - height continues to - - be monitonically increasing even as the VersionHeight gets - reset - title: |- - QueryConnectionClientStateResponse is the response type for the - Query/ConnectionClientState RPC method - default: - description: An unexpected error response. - schema: + signatures required by gogoproto. + title: 'Resource stores unit, total count and price of resource' + title: GroupSpec stores group specifications + akash.deployment.v1beta1.QueryDeploymentResponse: + type: object + properties: + deployment: + type: object + properties: + deployment_id: type: object properties: - error: + owner: type: string - code: - type: integer - format: int32 - message: + dseq: type: string - details: - type: array - items: + format: uint64 + title: DeploymentID stores owner and sequence number + state: + type: string + enum: + - invalid + - active + - closed + default: invalid + description: >- + - invalid: Prefix should start with 0 in enum. So declaring dummy + state + - active: DeploymentActive denotes state for deployment active + - closed: DeploymentClosed denotes state for deployment closed + title: State is an enum which refers to state of deployment + version: + type: string + format: byte + created_at: + type: string + format: int64 + title: 'Deployment stores deploymentID, state and version details' + groups: + type: array + items: + type: object + properties: + group_id: + type: object + properties: + owner: + type: string + dseq: + type: string + format: uint64 + gseq: + type: integer + format: int64 + title: >- + GroupID stores owner, deployment sequence number and group + sequence number + state: + type: string + enum: + - invalid + - open + - paused + - insufficient_funds + - closed + default: invalid + description: >- + - invalid: Prefix should start with 0 in enum. So declaring + dummy state + - open: GroupOpen denotes state for group open + - paused: GroupOrdered denotes state for group ordered + - insufficient_funds: GroupInsufficientFunds denotes state for group insufficient_funds + - closed: GroupClosed denotes state for group closed + title: State is an enum which refers to state of group + group_spec: + type: object + properties: + name: + type: string + requirements: type: object properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type + signed_by: + title: >- + SignedBy list of keys that tenants expect to have + signatures from + type: object + properties: + all_of: + type: array + items: + type: string + title: >- + all_of all keys in this list must have signed + attributes + any_of: + type: array + items: + type: string + title: >- + any_of at least of of the keys from the list must + have signed attributes + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: >- + Attribute list of attributes tenant expects from the + provider + title: PlacementRequirements + resources: + type: array + items: + type: object + properties: + resources: + type: object + properties: + cpu: + type: object + properties: + units: + type: object + properties: + val: + type: string + format: byte + title: 'Unit stores cpu, memory and storage metrics' + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: >- + CPU stores resource units and cpu config + attributes + memory: + type: object + properties: + quantity: + type: object + properties: + val: + type: string + format: byte + title: 'Unit stores cpu, memory and storage metrics' + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: >- + Memory stores resource quantity and memory + attributes + storage: + type: object + properties: + quantity: + type: object + properties: + val: + type: string + format: byte + title: 'Unit stores cpu, memory and storage metrics' + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: >- + Storage stores resource quantity and storage + attributes + endpoints: + type: array + items: + type: object + properties: + kind: + type: string + enum: + - SHARED_HTTP + - RANDOM_PORT + default: SHARED_HTTP + description: >- + - SHARED_HTTP: Describes an endpoint that + becomes a Kubernetes Ingress + - RANDOM_PORT: Describes an endpoint that becomes a Kubernetes NodePort + title: >- + This describes how the endpoint is + implemented when the lease is deployed + title: >- + Endpoint describes a publicly accessible IP + service + title: >- + ResourceUnits describes all available resources types + for deployment/node etc - server that maps type URLs to message definitions as - follows: + if field is nil resource is not present in the given + data-structure + count: + type: integer + format: int64 + price: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an + amount. - * If no scheme is provided, `https` is assumed. + NOTE: The amount field is an Int which implements the + custom method - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) + signatures required by gogoproto. + title: 'Resource stores unit, total count and price of resource' + title: GroupSpec stores group specifications + created_at: + type: string + format: int64 + title: 'Group stores group id, state and specifications of group' + escrow_account: + type: object + properties: + id: + type: object + properties: + scope: + type: string + xid: + type: string + title: AccountID is the account identifier + owner: + type: string + state: + type: string + enum: + - invalid + - open + - closed + - overdrawn + default: invalid + description: |- + - invalid: AccountStateInvalid is an invalid state + - open: AccountOpen is the state when an account is open + - closed: AccountClosed is the state when an account is closed + - overdrawn: AccountOverdrawn is the state when an account is overdrawn + title: State stores state for an escrow account + balance: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. - Note: this functionality is not currently available in - the official - protobuf release, and it is not used for type URLs - beginning with + NOTE: The amount field is an Int which implements the custom + method - type.googleapis.com. + signatures required by gogoproto. + transferred: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. - Schemes other than `http`, `https` (or the empty scheme) - might be + NOTE: The amount field is an Int which implements the custom + method - used with implementation specific semantics. - value: + signatures required by gogoproto. + settled_at: + type: string + format: int64 + title: Account stores state for an escrow account + title: >- + QueryDeploymentResponse is response type for the Query/Deployment RPC + method + akash.deployment.v1beta1.QueryDeploymentsResponse: + type: object + properties: + deployments: + type: array + items: + type: object + properties: + deployment: + type: object + properties: + deployment_id: + type: object + properties: + owner: type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. + dseq: + type: string + format: uint64 + title: DeploymentID stores owner and sequence number + state: + type: string + enum: + - invalid + - active + - closed + default: invalid description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: connection_id - description: connection identifier - in: path - required: true - type: string - tags: - - Query - '/ibc/connection/v1beta1/connections/{connection_id}/consensus_state/version/{version_number}/height/{version_height}': - get: - summary: |- - ConnectionConsensusState queries the consensus state associated with the - connection. - operationId: ConnectionConsensusState - responses: - '200': - description: A successful response. - schema: - type: object - properties: - consensus_state: - title: consensus state associated with the channel + - invalid: Prefix should start with 0 in enum. So declaring + dummy state + - active: DeploymentActive denotes state for deployment active + - closed: DeploymentClosed denotes state for deployment closed + title: State is an enum which refers to state of deployment + version: + type: string + format: byte + created_at: + type: string + format: int64 + title: 'Deployment stores deploymentID, state and version details' + groups: + type: array + items: type: object properties: - type_url: + group_id: + type: object + properties: + owner: + type: string + dseq: + type: string + format: uint64 + gseq: + type: integer + format: int64 + title: >- + GroupID stores owner, deployment sequence number and group + sequence number + state: type: string + enum: + - invalid + - open + - paused + - insufficient_funds + - closed + default: invalid description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs - beginning with + - invalid: Prefix should start with 0 in enum. So + declaring dummy state + - open: GroupOpen denotes state for group open + - paused: GroupOrdered denotes state for group ordered + - insufficient_funds: GroupInsufficientFunds denotes state for group insufficient_funds + - closed: GroupClosed denotes state for group closed + title: State is an enum which refers to state of group + group_spec: + type: object + properties: + name: + type: string + requirements: + type: object + properties: + signed_by: + title: >- + SignedBy list of keys that tenants expect to have + signatures from + type: object + properties: + all_of: + type: array + items: + type: string + title: >- + all_of all keys in this list must have signed + attributes + any_of: + type: array + items: + type: string + title: >- + any_of at least of of the keys from the list + must have signed attributes + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: >- + Attribute list of attributes tenant expects from + the provider + title: PlacementRequirements + resources: + type: array + items: + type: object + properties: + resources: + type: object + properties: + cpu: + type: object + properties: + units: + type: object + properties: + val: + type: string + format: byte + title: >- + Unit stores cpu, memory and storage + metrics + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: >- + CPU stores resource units and cpu config + attributes + memory: + type: object + properties: + quantity: + type: object + properties: + val: + type: string + format: byte + title: >- + Unit stores cpu, memory and storage + metrics + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: >- + Memory stores resource quantity and memory + attributes + storage: + type: object + properties: + quantity: + type: object + properties: + val: + type: string + format: byte + title: >- + Unit stores cpu, memory and storage + metrics + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: >- + Storage stores resource quantity and storage + attributes + endpoints: + type: array + items: + type: object + properties: + kind: + type: string + enum: + - SHARED_HTTP + - RANDOM_PORT + default: SHARED_HTTP + description: >- + - SHARED_HTTP: Describes an endpoint + that becomes a Kubernetes Ingress + - RANDOM_PORT: Describes an endpoint that becomes a Kubernetes NodePort + title: >- + This describes how the endpoint is + implemented when the lease is deployed + title: >- + Endpoint describes a publicly accessible + IP service + title: >- + ResourceUnits describes all available resources + types for deployment/node etc - type.googleapis.com. + if field is nil resource is not present in the + given data-structure + count: + type: integer + format: int64 + price: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an + amount. - Schemes other than `http`, `https` (or the empty scheme) - might be + NOTE: The amount field is an Int which + implements the custom method - used with implementation specific semantics. - value: + signatures required by gogoproto. + title: >- + Resource stores unit, total count and price of + resource + title: GroupSpec stores group specifications + created_at: type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in - the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default - use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last - '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON + format: int64 + title: 'Group stores group id, state and specifications of group' + escrow_account: + type: object + properties: + id: + type: object + properties: + scope: + type: string + xid: + type: string + title: AccountID is the account identifier + owner: + type: string + state: + type: string + enum: + - invalid + - open + - closed + - overdrawn + default: invalid + description: |- + - invalid: AccountStateInvalid is an invalid state + - open: AccountOpen is the state when an account is open + - closed: AccountClosed is the state when an account is closed + - overdrawn: AccountOverdrawn is the state when an account is overdrawn + title: State stores state for an escrow account + balance: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. - representation, that representation will be embedded adding a - field - `value` which holds the custom JSON in addition to the `@type` + NOTE: The amount field is an Int which implements the custom + method - field. Example (for message [google.protobuf.Duration][]): + signatures required by gogoproto. + transferred: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - client_id: - type: string - title: client ID associated with the consensus state - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while - keeping version - number the same However some consensus algorithms may choose - to reset the + NOTE: The amount field is an Int which implements the custom + method - height in certain conditions e.g. hard forks, state-machine - breaking changes + signatures required by gogoproto. + settled_at: + type: string + format: int64 + title: Account stores state for an escrow account + title: >- + QueryDeploymentResponse is response type for the Query/Deployment + RPC method + pagination: + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total - In these cases, the version number is incremented so that - height continues to + was set, its value is undefined otherwise + description: |- + PageResponse is to be embedded in gRPC response messages where the + corresponding request message has used PageRequest. - be monitonically increasing even as the VersionHeight gets - reset - title: |- - QueryConnectionConsensusStateResponse is the response type for the - Query/ConnectionConsensusState RPC method - default: - description: An unexpected error response. - schema: + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } + title: >- + QueryDeploymentsResponse is response type for the Query/Deployments RPC + method + akash.deployment.v1beta1.QueryGroupResponse: + type: object + properties: + group: + type: object + properties: + group_id: type: object properties: - error: + owner: type: string - code: - type: integer - format: int32 - message: + dseq: type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: connection_id - description: connection identifier - in: path - required: true - type: string - - name: version_number - in: path - required: true - type: string - format: uint64 - - name: version_height - in: path - required: true - type: string - format: uint64 - tags: - - Query - /ibc_transfer/v1beta1/denom_traces: - get: - summary: DenomTraces queries all denomination traces. - operationId: DenomTraces - responses: - '200': - description: A successful response. - schema: + format: uint64 + gseq: + type: integer + format: int64 + title: >- + GroupID stores owner, deployment sequence number and group + sequence number + state: + type: string + enum: + - invalid + - open + - paused + - insufficient_funds + - closed + default: invalid + description: >- + - invalid: Prefix should start with 0 in enum. So declaring dummy + state + - open: GroupOpen denotes state for group open + - paused: GroupOrdered denotes state for group ordered + - insufficient_funds: GroupInsufficientFunds denotes state for group insufficient_funds + - closed: GroupClosed denotes state for group closed + title: State is an enum which refers to state of group + group_spec: type: object properties: - denom_traces: + name: + type: string + requirements: + type: object + properties: + signed_by: + title: >- + SignedBy list of keys that tenants expect to have + signatures from + type: object + properties: + all_of: + type: array + items: + type: string + title: >- + all_of all keys in this list must have signed + attributes + any_of: + type: array + items: + type: string + title: >- + any_of at least of of the keys from the list must have + signed attributes + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: >- + Attribute list of attributes tenant expects from the + provider + title: PlacementRequirements + resources: type: array items: type: object properties: - path: - type: string + resources: + type: object + properties: + cpu: + type: object + properties: + units: + type: object + properties: + val: + type: string + format: byte + title: 'Unit stores cpu, memory and storage metrics' + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: CPU stores resource units and cpu config attributes + memory: + type: object + properties: + quantity: + type: object + properties: + val: + type: string + format: byte + title: 'Unit stores cpu, memory and storage metrics' + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: >- + Memory stores resource quantity and memory + attributes + storage: + type: object + properties: + quantity: + type: object + properties: + val: + type: string + format: byte + title: 'Unit stores cpu, memory and storage metrics' + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair + title: >- + Storage stores resource quantity and storage + attributes + endpoints: + type: array + items: + type: object + properties: + kind: + type: string + enum: + - SHARED_HTTP + - RANDOM_PORT + default: SHARED_HTTP + description: >- + - SHARED_HTTP: Describes an endpoint that + becomes a Kubernetes Ingress + - RANDOM_PORT: Describes an endpoint that becomes a Kubernetes NodePort + title: >- + This describes how the endpoint is implemented + when the lease is deployed + title: >- + Endpoint describes a publicly accessible IP + service + title: >- + ResourceUnits describes all available resources types + for deployment/node etc + + if field is nil resource is not present in the given + data-structure + count: + type: integer + format: int64 + price: + type: object + properties: + denom: + type: string + amount: + type: string description: >- - path defines the chain of port/channel identifiers used - for tracing the + Coin defines a token with a denomination and an amount. - source of the fungible token. - base_denom: - type: string - description: base denomination of the relayed fungible token. - description: >- - DenomTrace contains the base denomination for ICS20 fungible - tokens and the - source tracing information path. - description: denom_traces returns all denominations trace information. - pagination: - description: pagination defines the pagination in the response. + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + title: 'Resource stores unit, total count and price of resource' + title: GroupSpec stores group specifications + created_at: + type: string + format: int64 + title: 'Group stores group id, state and specifications of group' + title: QueryGroupResponse is response type for the Query/Group RPC method + akash.deployment.v1beta1.Resource: + type: object + properties: + resources: + type: object + properties: + cpu: + type: object + properties: + units: type: object properties: - next_key: + val: type: string format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - QueryConnectionsResponse is the response type for the - Query/DenomTraces RPC - - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: + title: 'Unit stores cpu, memory and storage metrics' + attributes: type: array items: type: object properties: - type_url: + key: type: string value: type: string - format: byte - parameters: - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - tags: - - Query - '/ibc_transfer/v1beta1/denom_traces/{hash}': - get: - summary: DenomTrace queries a denomination trace information. - operationId: DenomTrace - responses: - '200': - description: A successful response. - schema: + title: Attribute represents key value pair + title: CPU stores resource units and cpu config attributes + memory: type: object properties: - denom_trace: - description: >- - denom_trace returns the requested denomination trace - information. + quantity: type: object properties: - path: - type: string - description: >- - path defines the chain of port/channel identifiers used - for tracing the - - source of the fungible token. - base_denom: + val: type: string - description: base denomination of the relayed fungible token. - description: >- - QueryDenomTraceResponse is the response type for the - Query/DenomTrace RPC - - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: + format: byte + title: 'Unit stores cpu, memory and storage metrics' + attributes: type: array items: type: object properties: - type_url: + key: type: string value: type: string - format: byte - parameters: - - name: hash - description: hash (in hex format) of the denomination trace information. - in: path - required: true - type: string - tags: - - Query - /ibc_transfer/v1beta1/params: - get: - summary: Params queries all parameters of the ibc-transfer module. - operationId: IBCTransferParams - responses: - '200': - description: A successful response. - schema: + title: Attribute represents key value pair + title: Memory stores resource quantity and memory attributes + storage: type: object properties: - params: - description: params defines the parameters of the module. + quantity: type: object properties: - send_enabled: - type: boolean - description: >- - send_enabled enables or disables all cross-chain token - transfers from this - - chain. - receive_enabled: - type: boolean - description: >- - receive_enabled enables or disables all cross-chain token - transfers to this - - chain. - description: >- - QueryParamsResponse is the response type for the Query/Params RPC - method. - default: - description: An unexpected error response. - schema: - type: object - properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: + val: + type: string + format: byte + title: 'Unit stores cpu, memory and storage metrics' + attributes: type: array items: type: object properties: - type_url: + key: type: string value: type: string - format: byte - tags: - - Query -definitions: - akash.base.v1beta1.Attribute: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - akash.base.v1beta1.CPU: - type: object - properties: - units: - type: object - properties: - val: - type: string - format: byte - title: 'Unit stores cpu, memory and storage metrics' - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: CPU stores resource units and cpu config attributes - akash.base.v1beta1.Endpoint: - type: object - title: Endpoint describes a publicly accessible IP service - akash.base.v1beta1.Memory: - type: object - properties: - quantity: - type: object - properties: - val: - type: string - format: byte - title: 'Unit stores cpu, memory and storage metrics' - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: Memory stores resource quantity and memory attributes - akash.base.v1beta1.PlacementRequirements: - type: object - properties: - signed_by: - title: SignedBy list of keys that tenants expect to have signatures from - type: object - properties: - all_of: - type: array - items: - type: string - title: all_of all keys in this list must have signed attributes - any_of: - type: array - items: - type: string - title: >- - any_of at least of of the keys from the list must have signed - attributes - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: Attribute list of attributes tenant expects from the provider - title: PlacementRequirements - akash.base.v1beta1.ResourceUnits: - type: object - properties: - cpu: - type: object - properties: - units: - type: object - properties: - val: - type: string - format: byte - title: 'Unit stores cpu, memory and storage metrics' - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: CPU stores resource units and cpu config attributes - memory: - type: object - properties: - quantity: - type: object - properties: - val: - type: string - format: byte - title: 'Unit stores cpu, memory and storage metrics' - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: Memory stores resource quantity and memory attributes - storage: - type: object - properties: - quantity: - type: object - properties: - val: - type: string - format: byte - title: 'Unit stores cpu, memory and storage metrics' - attributes: + title: Attribute represents key value pair + title: Storage stores resource quantity and storage attributes + endpoints: type: array items: type: object properties: - key: + kind: type: string - value: - type: string - title: Attribute represents key value pair - title: Storage stores resource quantity and storage attributes - endpoints: - type: array - items: - type: object - title: Endpoint describes a publicly accessible IP service - title: >- - ResourceUnits describes all available resources types for deployment/node - etc - - if field is nil resource is not present in the given data-structure - akash.base.v1beta1.ResourceValue: - type: object - properties: - val: - type: string - format: byte - title: 'Unit stores cpu, memory and storage metrics' - akash.base.v1beta1.SignedBy: - type: object - properties: - all_of: - type: array - items: - type: string - title: all_of all keys in this list must have signed attributes - any_of: - type: array - items: - type: string + enum: + - SHARED_HTTP + - RANDOM_PORT + default: SHARED_HTTP + description: >- + - SHARED_HTTP: Describes an endpoint that becomes a + Kubernetes Ingress + - RANDOM_PORT: Describes an endpoint that becomes a Kubernetes NodePort + title: >- + This describes how the endpoint is implemented when the + lease is deployed + title: Endpoint describes a publicly accessible IP service title: >- - any_of at least of of the keys from the list must have signed - attributes - title: >- - SignedBy represents validation accounts that tenant expects signatures for - provider attributes - - AllOf has precedence i.e. if there is at least one entry AnyOf is ignored - regardless to how many - - entries there + ResourceUnits describes all available resources types for + deployment/node etc - this behaviour to be discussed - akash.base.v1beta1.Storage: - type: object - properties: - quantity: + if field is nil resource is not present in the given data-structure + count: + type: integer + format: int64 + price: type: object properties: - val: + denom: type: string - format: byte - title: 'Unit stores cpu, memory and storage metrics' - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: Storage stores resource quantity and storage attributes - akash.deployment.v1beta1.Deployment: + amount: + type: string + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + title: 'Resource stores unit, total count and price of resource' + akash.escrow.v1beta1.Account: type: object properties: - deployment_id: + id: type: object properties: - owner: + scope: type: string - dseq: + xid: type: string - format: uint64 - title: DeploymentID stores owner and sequence number + title: AccountID is the account identifier + owner: + type: string state: type: string enum: - invalid - - active + - open - closed + - overdrawn default: invalid - description: >- - - invalid: Prefix should start with 0 in enum. So declaring dummy - state - - active: DeploymentActive denotes state for deployment active - - closed: DeploymentClosed denotes state for deployment closed - title: State is an enum which refers to state of deployment - version: + description: |- + - invalid: AccountStateInvalid is an invalid state + - open: AccountOpen is the state when an account is open + - closed: AccountClosed is the state when an account is closed + - overdrawn: AccountOverdrawn is the state when an account is overdrawn + title: State stores state for an escrow account + balance: + type: object + properties: + denom: + type: string + amount: + type: string + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + transferred: + type: object + properties: + denom: + type: string + amount: + type: string + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + settled_at: type: string - format: byte - title: 'Deployment stores deploymentID, state and version details' - akash.deployment.v1beta1.Deployment.State: + format: int64 + title: Account stores state for an escrow account + akash.escrow.v1beta1.Account.State: type: string enum: - invalid - - active + - open - closed + - overdrawn default: invalid description: |- - - invalid: Prefix should start with 0 in enum. So declaring dummy state - - active: DeploymentActive denotes state for deployment active - - closed: DeploymentClosed denotes state for deployment closed - title: State is an enum which refers to state of deployment - akash.deployment.v1beta1.DeploymentFilters: + - invalid: AccountStateInvalid is an invalid state + - open: AccountOpen is the state when an account is open + - closed: AccountClosed is the state when an account is closed + - overdrawn: AccountOverdrawn is the state when an account is overdrawn + title: State stores state for an escrow account + akash.escrow.v1beta1.AccountID: type: object properties: - owner: + scope: type: string - dseq: + xid: + type: string + title: AccountID is the account identifier + cosmos.base.query.v1beta1.PageRequest: + type: object + properties: + key: + type: string + format: byte + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + offset: type: string format: uint64 - state: + description: |- + offset is a numeric offset that can be used when key is unavailable. + It is less efficient than using key. Only one of offset or key should + be set. + limit: type: string - title: DeploymentFilters defines filters used to filter deployments - akash.deployment.v1beta1.DeploymentID: + format: uint64 + description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + count_total: + type: boolean + description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in UIs. + + count_total is only respected when offset is used. It is ignored when + key + + is set. + format: boolean + reverse: + type: boolean + description: >- + reverse is set to true if results are to be returned in the descending + order. + format: boolean + description: |- + message SomeRequest { + Foo some_parameter = 1; + PageRequest pagination = 2; + } + title: |- + PageRequest is to be embedded in gRPC request messages for efficient + pagination. Ex: + cosmos.base.query.v1beta1.PageResponse: type: object properties: - owner: + next_key: type: string - dseq: + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: type: string format: uint64 - title: DeploymentID stores owner and sequence number - akash.deployment.v1beta1.DeploymentResponse: + title: |- + total is total number of results available if PageRequest.count_total + was set, its value is undefined otherwise + description: |- + PageResponse is to be embedded in gRPC response messages where the + corresponding request message has used PageRequest. + + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } + cosmos.base.v1beta1.Coin: type: object properties: - deployment: - type: object - properties: - deployment_id: - type: object - properties: - owner: - type: string - dseq: - type: string - format: uint64 - title: DeploymentID stores owner and sequence number - state: - type: string - enum: - - invalid - - active - - closed - default: invalid - description: >- - - invalid: Prefix should start with 0 in enum. So declaring dummy - state - - active: DeploymentActive denotes state for deployment active - - closed: DeploymentClosed denotes state for deployment closed - title: State is an enum which refers to state of deployment - version: - type: string - format: byte - title: 'Deployment stores deploymentID, state and version details' - groups: - type: array - items: - type: object - properties: - group_id: - type: object - properties: - owner: - type: string - dseq: - type: string - format: uint64 - gseq: - type: integer - format: int64 - title: >- - GroupID stores owner, deployment sequence number and group - sequence number - state: - type: string - enum: - - invalid - - open - - ordered - - matched - - insufficient_funds - - closed - default: invalid - description: >- - - invalid: Prefix should start with 0 in enum. So declaring - dummy state - - open: GroupOpen denotes state for group open - - ordered: GroupOrdered denotes state for group ordered - - matched: GroupMatched denotes state for group matched - - insufficient_funds: GroupInsufficientFunds denotes state for group insufficient_funds - - closed: GroupClosed denotes state for group closed - title: State is an enum which refers to state of group - group_spec: - type: object - properties: - name: - type: string - requirements: - type: object - properties: - signed_by: - title: >- - SignedBy list of keys that tenants expect to have - signatures from - type: object - properties: - all_of: - type: array - items: - type: string - title: >- - all_of all keys in this list must have signed - attributes - any_of: - type: array - items: - type: string - title: >- - any_of at least of of the keys from the list must - have signed attributes - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: >- - Attribute list of attributes tenant expects from the - provider - title: PlacementRequirements - resources: - type: array - items: - type: object - properties: - resources: - type: object - properties: - cpu: - type: object - properties: - units: - type: object - properties: - val: - type: string - format: byte - title: 'Unit stores cpu, memory and storage metrics' - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: >- - CPU stores resource units and cpu config - attributes - memory: - type: object - properties: - quantity: - type: object - properties: - val: - type: string - format: byte - title: 'Unit stores cpu, memory and storage metrics' - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: >- - Memory stores resource quantity and memory - attributes - storage: - type: object - properties: - quantity: - type: object - properties: - val: - type: string - format: byte - title: 'Unit stores cpu, memory and storage metrics' - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: >- - Storage stores resource quantity and storage - attributes - endpoints: - type: array - items: - type: object - title: >- - Endpoint describes a publicly accessible IP - service - title: >- - ResourceUnits describes all available resources types - for deployment/node etc + denom: + type: string + amount: + type: string + description: |- + Coin defines a token with a denomination and an amount. - if field is nil resource is not present in the given - data-structure - count: - type: integer - format: int64 - price: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an - amount. + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + google.protobuf.Any: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of the + serialized + protocol buffer message. This string must contain at least - NOTE: The amount field is an Int which implements the - custom method + one "/" character. The last segment of the URL's path must represent - signatures required by gogoproto. - title: 'Resource stores unit, total count and price of resource' - order_bid_duration: - type: string - format: int64 - title: GroupSpec stores group specifications - title: 'Group stores group id, state and specifications of group' - version: + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in a canonical + form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary all types that + they + + expect it to use in the context of Any. However, for URLs which use + the + + scheme `http`, `https`, or no scheme, one can optionally set up a type + + server that maps type URLs to message definitions as follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the official + + protobuf release, and it is not used for type URLs beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) might be + + used with implementation specific semantics. + value: type: string format: byte - title: >- - DeploymentResponse represents details of deployment along with group - details - akash.deployment.v1beta1.Group: + description: >- + Must be a valid serialized protocol buffer of the above specified + type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message along with + a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values in the form + + of utility functions or additional generated methods of the Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by default use + + 'type.googleapis.com/full.type.name' as the type URL and the unpack + + methods only use the fully qualified type name after the last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with an + + additional field `@type` which contains the type URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom JSON + + representation, that representation will be embedded adding a field + + `value` which holds the custom JSON in addition to the `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + grpc.gateway.runtime.Error: type: object properties: - group_id: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of the + serialized + + protocol buffer message. This string must contain at least + + one "/" character. The last segment of the URL's path must + represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in a + canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary all types + that they + + expect it to use in the context of Any. However, for URLs which + use the + + scheme `http`, `https`, or no scheme, one can optionally set up + a type + + server that maps type URLs to message definitions as follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the + official + + protobuf release, and it is not used for type URLs beginning + with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) might + be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message along + with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values in the + form + + of utility functions or additional generated methods of the Any + type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by default use + + 'type.googleapis.com/full.type.name' as the type URL and the unpack + + methods only use the fully qualified type name after the last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with an + + additional field `@type` which contains the type URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom JSON + + representation, that representation will be embedded adding a field + + `value` which holds the custom JSON in addition to the `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + akash.escrow.v1beta1.Payment: + type: object + properties: + account_id: + type: object + properties: + scope: + type: string + xid: + type: string + title: AccountID is the account identifier + payment_id: + type: string + owner: + type: string + state: + type: string + enum: + - invalid + - open + - closed + - overdrawn + default: invalid + description: >- + - invalid: PaymentStateInvalid is the state when the payment is + invalid + - open: PaymentStateOpen is the state when the payment is open + - closed: PaymentStateClosed is the state when the payment is closed + - overdrawn: PaymentStateOverdrawn is the state when the payment is overdrawn + title: Payment State + rate: + type: object + properties: + denom: + type: string + amount: + type: string + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + balance: + type: object + properties: + denom: + type: string + amount: + type: string + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + withdrawn: + type: object + properties: + denom: + type: string + amount: + type: string + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + title: Payment stores state for a payment + akash.escrow.v1beta1.Payment.State: + type: string + enum: + - invalid + - open + - closed + - overdrawn + default: invalid + description: |- + - invalid: PaymentStateInvalid is the state when the payment is invalid + - open: PaymentStateOpen is the state when the payment is open + - closed: PaymentStateClosed is the state when the payment is closed + - overdrawn: PaymentStateOverdrawn is the state when the payment is overdrawn + title: Payment State + akash.market.v1beta1.Bid: + type: object + properties: + bid_id: type: object properties: owner: @@ -26712,34 +28493,241 @@ definitions: gseq: type: integer format: int64 - title: >- - GroupID stores owner, deployment sequence number and group sequence - number + oseq: + type: integer + format: int64 + provider: + type: string + description: |- + BidID stores owner and all other seq numbers + A successful bid becomes a Lease(ID). state: type: string enum: - invalid - open - - ordered - - matched - - insufficient_funds + - active + - lost - closed default: invalid description: >- - invalid: Prefix should start with 0 in enum. So declaring dummy state - - open: GroupOpen denotes state for group open - - ordered: GroupOrdered denotes state for group ordered - - matched: GroupMatched denotes state for group matched - - insufficient_funds: GroupInsufficientFunds denotes state for group insufficient_funds - - closed: GroupClosed denotes state for group closed - title: State is an enum which refers to state of group - group_spec: + - open: BidOpen denotes state for bid open + - active: BidMatched denotes state for bid open + - lost: BidLost denotes state for bid lost + - closed: BidClosed denotes state for bid closed + title: State is an enum which refers to state of bid + price: type: object properties: - name: + denom: type: string - requirements: + amount: + type: string + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + created_at: + type: string + format: int64 + title: 'Bid stores BidID, state of bid and price' + akash.market.v1beta1.Bid.State: + type: string + enum: + - invalid + - open + - active + - lost + - closed + default: invalid + description: |- + - invalid: Prefix should start with 0 in enum. So declaring dummy state + - open: BidOpen denotes state for bid open + - active: BidMatched denotes state for bid open + - lost: BidLost denotes state for bid lost + - closed: BidClosed denotes state for bid closed + title: State is an enum which refers to state of bid + akash.market.v1beta1.BidFilters: + type: object + properties: + owner: + type: string + dseq: + type: string + format: uint64 + gseq: + type: integer + format: int64 + oseq: + type: integer + format: int64 + provider: + type: string + state: + type: string + title: BidFilters defines flags for bid list filter + akash.market.v1beta1.BidID: + type: object + properties: + owner: + type: string + dseq: + type: string + format: uint64 + gseq: + type: integer + format: int64 + oseq: + type: integer + format: int64 + provider: + type: string + description: |- + BidID stores owner and all other seq numbers + A successful bid becomes a Lease(ID). + akash.market.v1beta1.Lease: + type: object + properties: + lease_id: + type: object + properties: + owner: + type: string + dseq: + type: string + format: uint64 + gseq: + type: integer + format: int64 + oseq: + type: integer + format: int64 + provider: + type: string + title: LeaseID stores bid details of lease + state: + type: string + enum: + - invalid + - active + - insufficient_funds + - closed + default: invalid + description: >- + - invalid: Prefix should start with 0 in enum. So declaring dummy + state + - active: LeaseActive denotes state for lease active + - insufficient_funds: LeaseInsufficientFunds denotes state for lease insufficient_funds + - closed: LeaseClosed denotes state for lease closed + title: State is an enum which refers to state of lease + price: + type: object + properties: + denom: + type: string + amount: + type: string + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + created_at: + type: string + format: int64 + title: 'Lease stores LeaseID, state of lease and price' + akash.market.v1beta1.Lease.State: + type: string + enum: + - invalid + - active + - insufficient_funds + - closed + default: invalid + description: |- + - invalid: Prefix should start with 0 in enum. So declaring dummy state + - active: LeaseActive denotes state for lease active + - insufficient_funds: LeaseInsufficientFunds denotes state for lease insufficient_funds + - closed: LeaseClosed denotes state for lease closed + title: State is an enum which refers to state of lease + akash.market.v1beta1.LeaseFilters: + type: object + properties: + owner: + type: string + dseq: + type: string + format: uint64 + gseq: + type: integer + format: int64 + oseq: + type: integer + format: int64 + provider: + type: string + state: + type: string + title: LeaseFilters defines flags for lease list filter + akash.market.v1beta1.LeaseID: + type: object + properties: + owner: + type: string + dseq: + type: string + format: uint64 + gseq: + type: integer + format: int64 + oseq: + type: integer + format: int64 + provider: + type: string + title: LeaseID stores bid details of lease + akash.market.v1beta1.Order: + type: object + properties: + order_id: + type: object + properties: + owner: + type: string + dseq: + type: string + format: uint64 + gseq: + type: integer + format: int64 + oseq: + type: integer + format: int64 + title: OrderID stores owner and all other seq numbers + state: + type: string + enum: + - invalid + - open + - active + - closed + default: invalid + description: >- + - invalid: Prefix should start with 0 in enum. So declaring dummy + state + - open: OrderOpen denotes state for order open + - active: OrderMatched denotes state for order matched + - closed: OrderClosed denotes state for order lost + title: State is an enum which refers to state of order + spec: + type: object + properties: + name: + type: string + requirements: type: object properties: signed_by: @@ -26847,6 +28835,20 @@ definitions: type: array items: type: object + properties: + kind: + type: string + enum: + - SHARED_HTTP + - RANDOM_PORT + default: SHARED_HTTP + description: >- + - SHARED_HTTP: Describes an endpoint that becomes + a Kubernetes Ingress + - RANDOM_PORT: Describes an endpoint that becomes a Kubernetes NodePort + title: >- + This describes how the endpoint is implemented + when the lease is deployed title: Endpoint describes a publicly accessible IP service title: >- ResourceUnits describes all available resources types for @@ -26873,30 +28875,26 @@ definitions: signatures required by gogoproto. title: 'Resource stores unit, total count and price of resource' - order_bid_duration: - type: string - format: int64 title: GroupSpec stores group specifications - title: 'Group stores group id, state and specifications of group' - akash.deployment.v1beta1.Group.State: + created_at: + type: string + format: int64 + title: 'Order stores orderID, state of order and other details' + akash.market.v1beta1.Order.State: type: string enum: - invalid - open - - ordered - - matched - - insufficient_funds + - active - closed default: invalid description: |- - invalid: Prefix should start with 0 in enum. So declaring dummy state - - open: GroupOpen denotes state for group open - - ordered: GroupOrdered denotes state for group ordered - - matched: GroupMatched denotes state for group matched - - insufficient_funds: GroupInsufficientFunds denotes state for group insufficient_funds - - closed: GroupClosed denotes state for group closed - title: State is an enum which refers to state of group - akash.deployment.v1beta1.GroupID: + - open: OrderOpen denotes state for order open + - active: OrderMatched denotes state for order matched + - closed: OrderClosed denotes state for order lost + title: State is an enum which refers to state of order + akash.market.v1beta1.OrderFilters: type: object properties: owner: @@ -26907,189 +28905,162 @@ definitions: gseq: type: integer format: int64 - title: 'GroupID stores owner, deployment sequence number and group sequence number' - akash.deployment.v1beta1.GroupSpec: + oseq: + type: integer + format: int64 + state: + type: string + title: OrderFilters defines flags for order list filter + akash.market.v1beta1.OrderID: type: object properties: - name: + owner: type: string - requirements: + dseq: + type: string + format: uint64 + gseq: + type: integer + format: int64 + oseq: + type: integer + format: int64 + title: OrderID stores owner and all other seq numbers + akash.market.v1beta1.QueryBidResponse: + type: object + properties: + bid: type: object properties: - signed_by: - title: SignedBy list of keys that tenants expect to have signatures from + bid_id: type: object properties: - all_of: - type: array - items: - type: string - title: all_of all keys in this list must have signed attributes - any_of: - type: array - items: - type: string - title: >- - any_of at least of of the keys from the list must have signed - attributes - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: Attribute list of attributes tenant expects from the provider - title: PlacementRequirements - resources: - type: array - items: - type: object - properties: - resources: - type: object - properties: - cpu: - type: object - properties: - units: - type: object - properties: - val: - type: string - format: byte - title: 'Unit stores cpu, memory and storage metrics' - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: CPU stores resource units and cpu config attributes - memory: - type: object - properties: - quantity: - type: object - properties: - val: - type: string - format: byte - title: 'Unit stores cpu, memory and storage metrics' - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: Memory stores resource quantity and memory attributes - storage: - type: object - properties: - quantity: - type: object - properties: - val: - type: string - format: byte - title: 'Unit stores cpu, memory and storage metrics' - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: Storage stores resource quantity and storage attributes - endpoints: - type: array - items: - type: object - title: Endpoint describes a publicly accessible IP service - title: >- - ResourceUnits describes all available resources types for - deployment/node etc - - if field is nil resource is not present in the given - data-structure - count: - type: integer - format: int64 - price: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. + owner: + type: string + dseq: + type: string + format: uint64 + gseq: + type: integer + format: int64 + oseq: + type: integer + format: int64 + provider: + type: string + description: |- + BidID stores owner and all other seq numbers + A successful bid becomes a Lease(ID). + state: + type: string + enum: + - invalid + - open + - active + - lost + - closed + default: invalid + description: >- + - invalid: Prefix should start with 0 in enum. So declaring dummy + state + - open: BidOpen denotes state for bid open + - active: BidMatched denotes state for bid open + - lost: BidLost denotes state for bid lost + - closed: BidClosed denotes state for bid closed + title: State is an enum which refers to state of bid + price: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. - NOTE: The amount field is an Int which implements the custom - method + NOTE: The amount field is an Int which implements the custom + method - signatures required by gogoproto. - title: 'Resource stores unit, total count and price of resource' - order_bid_duration: - type: string - format: int64 - title: GroupSpec stores group specifications - akash.deployment.v1beta1.QueryDeploymentResponse: - type: object - properties: - deployment: + signatures required by gogoproto. + created_at: + type: string + format: int64 + title: 'Bid stores BidID, state of bid and price' + escrow_account: type: object properties: - deployment: + id: type: object properties: - deployment_id: - type: object - properties: - owner: - type: string - dseq: - type: string - format: uint64 - title: DeploymentID stores owner and sequence number - state: + scope: type: string - enum: - - invalid - - active - - closed - default: invalid - description: >- - - invalid: Prefix should start with 0 in enum. So declaring - dummy state - - active: DeploymentActive denotes state for deployment active - - closed: DeploymentClosed denotes state for deployment closed - title: State is an enum which refers to state of deployment - version: + xid: type: string - format: byte - title: 'Deployment stores deploymentID, state and version details' - groups: - type: array - items: + title: AccountID is the account identifier + owner: + type: string + state: + type: string + enum: + - invalid + - open + - closed + - overdrawn + default: invalid + description: |- + - invalid: AccountStateInvalid is an invalid state + - open: AccountOpen is the state when an account is open + - closed: AccountClosed is the state when an account is closed + - overdrawn: AccountOverdrawn is the state when an account is overdrawn + title: State stores state for an escrow account + balance: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + transferred: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + settled_at: + type: string + format: int64 + title: Account stores state for an escrow account + title: QueryBidResponse is response type for the Query/Bid RPC method + akash.market.v1beta1.QueryBidsResponse: + type: object + properties: + bids: + type: array + items: + type: object + properties: + bid: type: object properties: - group_id: + bid_id: type: object properties: owner: @@ -27100,448 +29071,112 @@ definitions: gseq: type: integer format: int64 - title: >- - GroupID stores owner, deployment sequence number and group - sequence number + oseq: + type: integer + format: int64 + provider: + type: string + description: |- + BidID stores owner and all other seq numbers + A successful bid becomes a Lease(ID). state: type: string enum: - invalid - open - - ordered - - matched - - insufficient_funds + - active + - lost - closed default: invalid description: >- - invalid: Prefix should start with 0 in enum. So declaring dummy state - - open: GroupOpen denotes state for group open - - ordered: GroupOrdered denotes state for group ordered - - matched: GroupMatched denotes state for group matched - - insufficient_funds: GroupInsufficientFunds denotes state for group insufficient_funds - - closed: GroupClosed denotes state for group closed - title: State is an enum which refers to state of group - group_spec: + - open: BidOpen denotes state for bid open + - active: BidMatched denotes state for bid open + - lost: BidLost denotes state for bid lost + - closed: BidClosed denotes state for bid closed + title: State is an enum which refers to state of bid + price: type: object properties: - name: + denom: type: string - requirements: - type: object - properties: - signed_by: - title: >- - SignedBy list of keys that tenants expect to have - signatures from - type: object - properties: - all_of: - type: array - items: - type: string - title: >- - all_of all keys in this list must have signed - attributes - any_of: - type: array - items: - type: string - title: >- - any_of at least of of the keys from the list - must have signed attributes - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: >- - Attribute list of attributes tenant expects from the - provider - title: PlacementRequirements - resources: - type: array - items: - type: object - properties: - resources: - type: object - properties: - cpu: - type: object - properties: - units: - type: object - properties: - val: - type: string - format: byte - title: >- - Unit stores cpu, memory and storage - metrics - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: >- - CPU stores resource units and cpu config - attributes - memory: - type: object - properties: - quantity: - type: object - properties: - val: - type: string - format: byte - title: >- - Unit stores cpu, memory and storage - metrics - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: >- - Memory stores resource quantity and memory - attributes - storage: - type: object - properties: - quantity: - type: object - properties: - val: - type: string - format: byte - title: >- - Unit stores cpu, memory and storage - metrics - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: >- - Storage stores resource quantity and storage - attributes - endpoints: - type: array - items: - type: object - title: >- - Endpoint describes a publicly accessible IP - service - title: >- - ResourceUnits describes all available resources - types for deployment/node etc - - if field is nil resource is not present in the - given data-structure - count: - type: integer - format: int64 - price: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an - amount. + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. - NOTE: The amount field is an Int which implements - the custom method + NOTE: The amount field is an Int which implements the custom + method - signatures required by gogoproto. - title: >- - Resource stores unit, total count and price of - resource - order_bid_duration: - type: string - format: int64 - title: GroupSpec stores group specifications - title: 'Group stores group id, state and specifications of group' - version: - type: string - format: byte - title: >- - DeploymentResponse represents details of deployment along with group - details - title: >- - QueryDeploymentResponse is response type for the Query/Deployment RPC - method - akash.deployment.v1beta1.QueryDeploymentsResponse: - type: object - properties: - deployments: - type: array - items: - type: object - properties: - deployment: + signatures required by gogoproto. + created_at: + type: string + format: int64 + title: 'Bid stores BidID, state of bid and price' + escrow_account: type: object properties: - deployment_id: + id: type: object properties: - owner: + scope: type: string - dseq: + xid: type: string - format: uint64 - title: DeploymentID stores owner and sequence number + title: AccountID is the account identifier + owner: + type: string state: type: string enum: - invalid - - active + - open - closed + - overdrawn default: invalid + description: |- + - invalid: AccountStateInvalid is an invalid state + - open: AccountOpen is the state when an account is open + - closed: AccountClosed is the state when an account is closed + - overdrawn: AccountOverdrawn is the state when an account is overdrawn + title: State stores state for an escrow account + balance: + type: object + properties: + denom: + type: string + amount: + type: string description: >- - - invalid: Prefix should start with 0 in enum. So declaring - dummy state - - active: DeploymentActive denotes state for deployment active - - closed: DeploymentClosed denotes state for deployment closed - title: State is an enum which refers to state of deployment - version: - type: string - format: byte - title: 'Deployment stores deploymentID, state and version details' - groups: - type: array - items: - type: object - properties: - group_id: - type: object - properties: - owner: - type: string - dseq: - type: string - format: uint64 - gseq: - type: integer - format: int64 - title: >- - GroupID stores owner, deployment sequence number and group - sequence number - state: - type: string - enum: - - invalid - - open - - ordered - - matched - - insufficient_funds - - closed - default: invalid - description: >- - - invalid: Prefix should start with 0 in enum. So - declaring dummy state - - open: GroupOpen denotes state for group open - - ordered: GroupOrdered denotes state for group ordered - - matched: GroupMatched denotes state for group matched - - insufficient_funds: GroupInsufficientFunds denotes state for group insufficient_funds - - closed: GroupClosed denotes state for group closed - title: State is an enum which refers to state of group - group_spec: - type: object - properties: - name: - type: string - requirements: - type: object - properties: - signed_by: - title: >- - SignedBy list of keys that tenants expect to have - signatures from - type: object - properties: - all_of: - type: array - items: - type: string - title: >- - all_of all keys in this list must have signed - attributes - any_of: - type: array - items: - type: string - title: >- - any_of at least of of the keys from the list - must have signed attributes - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: >- - Attribute list of attributes tenant expects from - the provider - title: PlacementRequirements - resources: - type: array - items: - type: object - properties: - resources: - type: object - properties: - cpu: - type: object - properties: - units: - type: object - properties: - val: - type: string - format: byte - title: >- - Unit stores cpu, memory and storage - metrics - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: >- - CPU stores resource units and cpu config - attributes - memory: - type: object - properties: - quantity: - type: object - properties: - val: - type: string - format: byte - title: >- - Unit stores cpu, memory and storage - metrics - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: >- - Memory stores resource quantity and memory - attributes - storage: - type: object - properties: - quantity: - type: object - properties: - val: - type: string - format: byte - title: >- - Unit stores cpu, memory and storage - metrics - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: >- - Storage stores resource quantity and storage - attributes - endpoints: - type: array - items: - type: object - title: >- - Endpoint describes a publicly accessible - IP service - title: >- - ResourceUnits describes all available resources - types for deployment/node etc + Coin defines a token with a denomination and an amount. - if field is nil resource is not present in the - given data-structure - count: - type: integer - format: int64 - price: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an - amount. + NOTE: The amount field is an Int which implements the custom + method - NOTE: The amount field is an Int which - implements the custom method + signatures required by gogoproto. + transferred: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. - signatures required by gogoproto. - title: >- - Resource stores unit, total count and price of - resource - order_bid_duration: - type: string - format: int64 - title: GroupSpec stores group specifications - title: 'Group stores group id, state and specifications of group' - version: - type: string - format: byte - title: >- - DeploymentResponse represents details of deployment along with group - details + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + settled_at: + type: string + format: int64 + title: Account stores state for an escrow account + title: QueryBidResponse is response type for the Query/Bid RPC method pagination: type: object properties: @@ -27567,16 +29202,14 @@ definitions: repeated Bar results = 1; PageResponse page = 2; } - title: >- - QueryDeploymentsResponse is response type for the Query/Deployments RPC - method - akash.deployment.v1beta1.QueryGroupResponse: + title: QueryBidsResponse is response type for the Query/Bids RPC method + akash.market.v1beta1.QueryLeaseResponse: type: object properties: - group: + lease: type: object properties: - group_id: + lease_id: type: object properties: owner: @@ -27587,1493 +29220,375 @@ definitions: gseq: type: integer format: int64 - title: >- - GroupID stores owner, deployment sequence number and group - sequence number + oseq: + type: integer + format: int64 + provider: + type: string + title: LeaseID stores bid details of lease state: type: string enum: - invalid - - open - - ordered - - matched + - active - insufficient_funds - closed default: invalid description: >- - invalid: Prefix should start with 0 in enum. So declaring dummy state - - open: GroupOpen denotes state for group open - - ordered: GroupOrdered denotes state for group ordered - - matched: GroupMatched denotes state for group matched - - insufficient_funds: GroupInsufficientFunds denotes state for group insufficient_funds - - closed: GroupClosed denotes state for group closed - title: State is an enum which refers to state of group - group_spec: + - active: LeaseActive denotes state for lease active + - insufficient_funds: LeaseInsufficientFunds denotes state for lease insufficient_funds + - closed: LeaseClosed denotes state for lease closed + title: State is an enum which refers to state of lease + price: type: object properties: - name: + denom: type: string - requirements: - type: object - properties: - signed_by: - title: >- - SignedBy list of keys that tenants expect to have - signatures from - type: object - properties: - all_of: - type: array - items: - type: string - title: >- - all_of all keys in this list must have signed - attributes - any_of: - type: array - items: - type: string - title: >- - any_of at least of of the keys from the list must have - signed attributes - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: >- - Attribute list of attributes tenant expects from the - provider - title: PlacementRequirements - resources: - type: array - items: - type: object - properties: - resources: - type: object - properties: - cpu: - type: object - properties: - units: - type: object - properties: - val: - type: string - format: byte - title: 'Unit stores cpu, memory and storage metrics' - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: CPU stores resource units and cpu config attributes - memory: - type: object - properties: - quantity: - type: object - properties: - val: - type: string - format: byte - title: 'Unit stores cpu, memory and storage metrics' - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: >- - Memory stores resource quantity and memory - attributes - storage: - type: object - properties: - quantity: - type: object - properties: - val: - type: string - format: byte - title: 'Unit stores cpu, memory and storage metrics' - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: >- - Storage stores resource quantity and storage - attributes - endpoints: - type: array - items: - type: object - title: >- - Endpoint describes a publicly accessible IP - service - title: >- - ResourceUnits describes all available resources types - for deployment/node etc - - if field is nil resource is not present in the given - data-structure - count: - type: integer - format: int64 - price: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. - NOTE: The amount field is an Int which implements the - custom method + NOTE: The amount field is an Int which implements the custom + method - signatures required by gogoproto. - title: 'Resource stores unit, total count and price of resource' - order_bid_duration: - type: string - format: int64 - title: GroupSpec stores group specifications - title: 'Group stores group id, state and specifications of group' - title: QueryGroupResponse is response type for the Query/Group RPC method - akash.deployment.v1beta1.Resource: - type: object - properties: - resources: + signatures required by gogoproto. + created_at: + type: string + format: int64 + title: 'Lease stores LeaseID, state of lease and price' + escrow_payment: type: object properties: - cpu: - type: object - properties: - units: - type: object - properties: - val: - type: string - format: byte - title: 'Unit stores cpu, memory and storage metrics' - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: CPU stores resource units and cpu config attributes - memory: + account_id: type: object properties: - quantity: - type: object - properties: - val: - type: string - format: byte - title: 'Unit stores cpu, memory and storage metrics' - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: Memory stores resource quantity and memory attributes - storage: + scope: + type: string + xid: + type: string + title: AccountID is the account identifier + payment_id: + type: string + owner: + type: string + state: + type: string + enum: + - invalid + - open + - closed + - overdrawn + default: invalid + description: >- + - invalid: PaymentStateInvalid is the state when the payment is + invalid + - open: PaymentStateOpen is the state when the payment is open + - closed: PaymentStateClosed is the state when the payment is closed + - overdrawn: PaymentStateOverdrawn is the state when the payment is overdrawn + title: Payment State + rate: type: object properties: - quantity: - type: object - properties: - val: - type: string - format: byte - title: 'Unit stores cpu, memory and storage metrics' - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: Storage stores resource quantity and storage attributes - endpoints: - type: array - items: - type: object - title: Endpoint describes a publicly accessible IP service - title: >- - ResourceUnits describes all available resources types for - deployment/node etc + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. - if field is nil resource is not present in the given data-structure - count: - type: integer - format: int64 - price: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - title: 'Resource stores unit, total count and price of resource' - cosmos.base.query.v1beta1.PageRequest: - type: object - properties: - key: - type: string - format: byte - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - offset: - type: string - format: uint64 - description: |- - offset is a numeric offset that can be used when key is unavailable. - It is less efficient than using key. Only one of offset or key should - be set. - limit: - type: string - format: uint64 - description: >- - limit is the total number of results to be returned in the result - page. + NOTE: The amount field is an Int which implements the custom + method - If left empty it will default to a value to be set by each app. - count_total: - type: boolean - format: boolean - description: >- - count_total is set to true to indicate that the result set should - include + signatures required by gogoproto. + balance: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. - a count of the total number of items available for pagination in UIs. - count_total is only respected when offset is used. It is ignored when - key + NOTE: The amount field is an Int which implements the custom + method - is set. - description: |- - message SomeRequest { - Foo some_parameter = 1; - PageRequest pagination = 2; - } - title: |- - PageRequest is to be embedded in gRPC request messages for efficient - pagination. Ex: - cosmos.base.query.v1beta1.PageResponse: - type: object - properties: - next_key: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: |- - total is total number of results available if PageRequest.count_total - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. + signatures required by gogoproto. + withdrawn: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - cosmos.base.v1beta1.Coin: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - google.protobuf.Any: + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + title: Payment stores state for a payment + title: QueryLeaseResponse is response type for the Query/Lease RPC method + akash.market.v1beta1.QueryLeasesResponse: type: object properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a canonical - form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all types that - they - - expect it to use in the context of Any. However, for URLs which use - the - - scheme `http`, `https`, or no scheme, one can optionally set up a type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the official - - protobuf release, and it is not used for type URLs beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might be + leases: + type: array + items: + type: object + properties: + lease: + type: object + properties: + lease_id: + type: object + properties: + owner: + type: string + dseq: + type: string + format: uint64 + gseq: + type: integer + format: int64 + oseq: + type: integer + format: int64 + provider: + type: string + title: LeaseID stores bid details of lease + state: + type: string + enum: + - invalid + - active + - insufficient_funds + - closed + default: invalid + description: >- + - invalid: Prefix should start with 0 in enum. So declaring + dummy state + - active: LeaseActive denotes state for lease active + - insufficient_funds: LeaseInsufficientFunds denotes state for lease insufficient_funds + - closed: LeaseClosed denotes state for lease closed + title: State is an enum which refers to state of lease + price: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above specified - type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message along with - a - URL that describes the type of the serialized message. + NOTE: The amount field is an Int which implements the custom + method + signatures required by gogoproto. + created_at: + type: string + format: int64 + title: 'Lease stores LeaseID, state of lease and price' + escrow_payment: + type: object + properties: + account_id: + type: object + properties: + scope: + type: string + xid: + type: string + title: AccountID is the account identifier + payment_id: + type: string + owner: + type: string + state: + type: string + enum: + - invalid + - open + - closed + - overdrawn + default: invalid + description: >- + - invalid: PaymentStateInvalid is the state when the payment + is invalid + - open: PaymentStateOpen is the state when the payment is open + - closed: PaymentStateClosed is the state when the payment is closed + - overdrawn: PaymentStateOverdrawn is the state when the payment is overdrawn + title: Payment State + rate: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. - Protobuf library provides support to pack/unpack Any values in the form - of utility functions or additional generated methods of the Any type. + NOTE: The amount field is an Int which implements the custom + method + signatures required by gogoproto. + balance: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. - Example 1: Pack and unpack a message in C++. - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } + NOTE: The amount field is an Int which implements the custom + method - Example 2: Pack and unpack a message in Java. + signatures required by gogoproto. + withdrawn: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - Example 3: Pack and unpack a message in Python. + NOTE: The amount field is an Int which implements the custom + method - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... + signatures required by gogoproto. + title: Payment stores state for a payment + title: QueryLeaseResponse is response type for the Query/Lease RPC method + pagination: + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total - Example 4: Pack and unpack a message in Go + was set, its value is undefined otherwise + description: |- + PageResponse is to be embedded in gRPC response messages where the + corresponding request message has used PageRequest. - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - grpc.gateway.runtime.Error: + title: QueryLeasesResponse is response type for the Query/Leases RPC method + akash.market.v1beta1.QueryOrderResponse: type: object properties: - error: - type: string - code: - type: integer - format: int32 - message: - type: string - details: - type: array - items: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all types - that they - - expect it to use in the context of Any. However, for URLs which - use the - - scheme `http`, `https`, or no scheme, one can optionally set up - a type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning - with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) might - be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message along - with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in the - form - - of utility functions or additional generated methods of the Any - type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default use - - 'type.googleapis.com/full.type.name' as the type URL and the unpack - - methods only use the fully qualified type name after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - akash.market.v1beta1.Bid: - type: object - properties: - bid_id: - type: object - properties: - owner: - type: string - dseq: - type: string - format: uint64 - gseq: - type: integer - format: int64 - oseq: - type: integer - format: int64 - provider: - type: string - description: |- - BidID stores owner and all other seq numbers - A successful bid becomes a Lease(ID). - state: - type: string - enum: - - invalid - - open - - matched - - lost - - closed - default: invalid - description: >- - - invalid: Prefix should start with 0 in enum. So declaring dummy - state - - open: BidOpen denotes state for bid open - - matched: BidMatched denotes state for bid open - - lost: BidLost denotes state for bid lost - - closed: BidClosed denotes state for bid closed - title: State is an enum which refers to state of bid - price: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - title: 'Bid stores BidID, state of bid and price' - akash.market.v1beta1.Bid.State: - type: string - enum: - - invalid - - open - - matched - - lost - - closed - default: invalid - description: |- - - invalid: Prefix should start with 0 in enum. So declaring dummy state - - open: BidOpen denotes state for bid open - - matched: BidMatched denotes state for bid open - - lost: BidLost denotes state for bid lost - - closed: BidClosed denotes state for bid closed - title: State is an enum which refers to state of bid - akash.market.v1beta1.BidFilters: - type: object - properties: - owner: - type: string - dseq: - type: string - format: uint64 - gseq: - type: integer - format: int64 - oseq: - type: integer - format: int64 - provider: - type: string - state: - type: string - title: BidFilters defines flags for bid list filter - akash.market.v1beta1.BidID: - type: object - properties: - owner: - type: string - dseq: - type: string - format: uint64 - gseq: - type: integer - format: int64 - oseq: - type: integer - format: int64 - provider: - type: string - description: |- - BidID stores owner and all other seq numbers - A successful bid becomes a Lease(ID). - akash.market.v1beta1.Lease: - type: object - properties: - lease_id: - type: object - properties: - owner: - type: string - dseq: - type: string - format: uint64 - gseq: - type: integer - format: int64 - oseq: - type: integer - format: int64 - provider: - type: string - title: LeaseID stores bid details of lease - state: - type: string - enum: - - invalid - - active - - insufficient_funds - - closed - default: invalid - description: >- - - invalid: Prefix should start with 0 in enum. So declaring dummy - state - - active: LeaseActive denotes state for lease active - - insufficient_funds: LeaseInsufficientFunds denotes state for lease insufficient_funds - - closed: LeaseClosed denotes state for lease closed - title: State is an enum which refers to state of lease - price: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - title: 'Lease stores LeaseID, state of lease and price' - akash.market.v1beta1.Lease.State: - type: string - enum: - - invalid - - active - - insufficient_funds - - closed - default: invalid - description: |- - - invalid: Prefix should start with 0 in enum. So declaring dummy state - - active: LeaseActive denotes state for lease active - - insufficient_funds: LeaseInsufficientFunds denotes state for lease insufficient_funds - - closed: LeaseClosed denotes state for lease closed - title: State is an enum which refers to state of lease - akash.market.v1beta1.LeaseFilters: - type: object - properties: - owner: - type: string - dseq: - type: string - format: uint64 - gseq: - type: integer - format: int64 - oseq: - type: integer - format: int64 - provider: - type: string - state: - type: string - title: LeaseFilters defines flags for lease list filter - akash.market.v1beta1.LeaseID: - type: object - properties: - owner: - type: string - dseq: - type: string - format: uint64 - gseq: - type: integer - format: int64 - oseq: - type: integer - format: int64 - provider: - type: string - title: LeaseID stores bid details of lease - akash.market.v1beta1.Order: - type: object - properties: - order_id: - type: object - properties: - owner: - type: string - dseq: - type: string - format: uint64 - gseq: - type: integer - format: int64 - oseq: - type: integer - format: int64 - title: OrderID stores owner and all other seq numbers - state: - type: string - enum: - - invalid - - open - - matched - - closed - default: invalid - description: >- - - invalid: Prefix should start with 0 in enum. So declaring dummy - state - - open: OrderOpen denotes state for order open - - matched: OrderMatched denotes state for order matched - - closed: OrderClosed denotes state for order lost - title: State is an enum which refers to state of order - start_at: - type: string - format: int64 - spec: + order: type: object properties: - name: + order_id: + type: object + properties: + owner: + type: string + dseq: + type: string + format: uint64 + gseq: + type: integer + format: int64 + oseq: + type: integer + format: int64 + title: OrderID stores owner and all other seq numbers + state: type: string - requirements: + enum: + - invalid + - open + - active + - closed + default: invalid + description: >- + - invalid: Prefix should start with 0 in enum. So declaring dummy + state + - open: OrderOpen denotes state for order open + - active: OrderMatched denotes state for order matched + - closed: OrderClosed denotes state for order lost + title: State is an enum which refers to state of order + spec: type: object properties: - signed_by: - title: >- - SignedBy list of keys that tenants expect to have signatures - from + name: + type: string + requirements: type: object properties: - all_of: - type: array - items: - type: string - title: all_of all keys in this list must have signed attributes - any_of: + signed_by: + title: >- + SignedBy list of keys that tenants expect to have + signatures from + type: object + properties: + all_of: + type: array + items: + type: string + title: >- + all_of all keys in this list must have signed + attributes + any_of: + type: array + items: + type: string + title: >- + any_of at least of of the keys from the list must have + signed attributes + attributes: type: array items: - type: string + type: object + properties: + key: + type: string + value: + type: string + title: Attribute represents key value pair title: >- - any_of at least of of the keys from the list must have - signed attributes - attributes: + Attribute list of attributes tenant expects from the + provider + title: PlacementRequirements + resources: type: array items: type: object properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: Attribute list of attributes tenant expects from the provider - title: PlacementRequirements - resources: - type: array - items: - type: object - properties: - resources: - type: object - properties: - cpu: + resources: type: object properties: - units: - type: object - properties: - val: - type: string - format: byte - title: 'Unit stores cpu, memory and storage metrics' - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: CPU stores resource units and cpu config attributes - memory: - type: object - properties: - quantity: - type: object - properties: - val: - type: string - format: byte - title: 'Unit stores cpu, memory and storage metrics' - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: Memory stores resource quantity and memory attributes - storage: - type: object - properties: - quantity: - type: object - properties: - val: - type: string - format: byte - title: 'Unit stores cpu, memory and storage metrics' - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: Storage stores resource quantity and storage attributes - endpoints: - type: array - items: - type: object - title: Endpoint describes a publicly accessible IP service - title: >- - ResourceUnits describes all available resources types for - deployment/node etc - - if field is nil resource is not present in the given - data-structure - count: - type: integer - format: int64 - price: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - title: 'Resource stores unit, total count and price of resource' - order_bid_duration: - type: string - format: int64 - title: GroupSpec stores group specifications - close_at: - type: string - format: int64 - title: 'Order stores orderID, state of order and other details' - akash.market.v1beta1.Order.State: - type: string - enum: - - invalid - - open - - matched - - closed - default: invalid - description: |- - - invalid: Prefix should start with 0 in enum. So declaring dummy state - - open: OrderOpen denotes state for order open - - matched: OrderMatched denotes state for order matched - - closed: OrderClosed denotes state for order lost - title: State is an enum which refers to state of order - akash.market.v1beta1.OrderFilters: - type: object - properties: - owner: - type: string - dseq: - type: string - format: uint64 - gseq: - type: integer - format: int64 - oseq: - type: integer - format: int64 - state: - type: string - title: OrderFilters defines flags for order list filter - akash.market.v1beta1.OrderID: - type: object - properties: - owner: - type: string - dseq: - type: string - format: uint64 - gseq: - type: integer - format: int64 - oseq: - type: integer - format: int64 - title: OrderID stores owner and all other seq numbers - akash.market.v1beta1.QueryBidResponse: - type: object - properties: - bid: - type: object - properties: - bid_id: - type: object - properties: - owner: - type: string - dseq: - type: string - format: uint64 - gseq: - type: integer - format: int64 - oseq: - type: integer - format: int64 - provider: - type: string - description: |- - BidID stores owner and all other seq numbers - A successful bid becomes a Lease(ID). - state: - type: string - enum: - - invalid - - open - - matched - - lost - - closed - default: invalid - description: >- - - invalid: Prefix should start with 0 in enum. So declaring dummy - state - - open: BidOpen denotes state for bid open - - matched: BidMatched denotes state for bid open - - lost: BidLost denotes state for bid lost - - closed: BidClosed denotes state for bid closed - title: State is an enum which refers to state of bid - price: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - title: 'Bid stores BidID, state of bid and price' - title: QueryBidResponse is response type for the Query/Bid RPC method - akash.market.v1beta1.QueryBidsResponse: - type: object - properties: - bids: - type: array - items: - type: object - properties: - bid_id: - type: object - properties: - owner: - type: string - dseq: - type: string - format: uint64 - gseq: - type: integer - format: int64 - oseq: - type: integer - format: int64 - provider: - type: string - description: |- - BidID stores owner and all other seq numbers - A successful bid becomes a Lease(ID). - state: - type: string - enum: - - invalid - - open - - matched - - lost - - closed - default: invalid - description: >- - - invalid: Prefix should start with 0 in enum. So declaring - dummy state - - open: BidOpen denotes state for bid open - - matched: BidMatched denotes state for bid open - - lost: BidLost denotes state for bid lost - - closed: BidClosed denotes state for bid closed - title: State is an enum which refers to state of bid - price: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - title: 'Bid stores BidID, state of bid and price' - pagination: - type: object - properties: - next_key: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - title: QueryBidsResponse is response type for the Query/Bids RPC method - akash.market.v1beta1.QueryLeaseResponse: - type: object - properties: - lease: - type: object - properties: - lease_id: - type: object - properties: - owner: - type: string - dseq: - type: string - format: uint64 - gseq: - type: integer - format: int64 - oseq: - type: integer - format: int64 - provider: - type: string - title: LeaseID stores bid details of lease - state: - type: string - enum: - - invalid - - active - - insufficient_funds - - closed - default: invalid - description: >- - - invalid: Prefix should start with 0 in enum. So declaring dummy - state - - active: LeaseActive denotes state for lease active - - insufficient_funds: LeaseInsufficientFunds denotes state for lease insufficient_funds - - closed: LeaseClosed denotes state for lease closed - title: State is an enum which refers to state of lease - price: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - title: 'Lease stores LeaseID, state of lease and price' - title: QueryLeaseResponse is response type for the Query/Lease RPC method - akash.market.v1beta1.QueryLeasesResponse: - type: object - properties: - leases: - type: array - items: - type: object - properties: - lease_id: - type: object - properties: - owner: - type: string - dseq: - type: string - format: uint64 - gseq: - type: integer - format: int64 - oseq: - type: integer - format: int64 - provider: - type: string - title: LeaseID stores bid details of lease - state: - type: string - enum: - - invalid - - active - - insufficient_funds - - closed - default: invalid - description: >- - - invalid: Prefix should start with 0 in enum. So declaring - dummy state - - active: LeaseActive denotes state for lease active - - insufficient_funds: LeaseInsufficientFunds denotes state for lease insufficient_funds - - closed: LeaseClosed denotes state for lease closed - title: State is an enum which refers to state of lease - price: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - title: 'Lease stores LeaseID, state of lease and price' - pagination: - type: object - properties: - next_key: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - title: QueryLeasesResponse is response type for the Query/Leases RPC method - akash.market.v1beta1.QueryOrderResponse: - type: object - properties: - order: - type: object - properties: - order_id: - type: object - properties: - owner: - type: string - dseq: - type: string - format: uint64 - gseq: - type: integer - format: int64 - oseq: - type: integer - format: int64 - title: OrderID stores owner and all other seq numbers - state: - type: string - enum: - - invalid - - open - - matched - - closed - default: invalid - description: >- - - invalid: Prefix should start with 0 in enum. So declaring dummy - state - - open: OrderOpen denotes state for order open - - matched: OrderMatched denotes state for order matched - - closed: OrderClosed denotes state for order lost - title: State is an enum which refers to state of order - start_at: - type: string - format: int64 - spec: - type: object - properties: - name: - type: string - requirements: - type: object - properties: - signed_by: - title: >- - SignedBy list of keys that tenants expect to have - signatures from - type: object - properties: - all_of: - type: array - items: - type: string - title: >- - all_of all keys in this list must have signed - attributes - any_of: - type: array - items: - type: string - title: >- - any_of at least of of the keys from the list must have - signed attributes - attributes: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - title: Attribute represents key value pair - title: >- - Attribute list of attributes tenant expects from the - provider - title: PlacementRequirements - resources: - type: array - items: - type: object - properties: - resources: - type: object - properties: - cpu: + cpu: type: object properties: units: @@ -29144,6 +29659,20 @@ definitions: type: array items: type: object + properties: + kind: + type: string + enum: + - SHARED_HTTP + - RANDOM_PORT + default: SHARED_HTTP + description: >- + - SHARED_HTTP: Describes an endpoint that + becomes a Kubernetes Ingress + - RANDOM_PORT: Describes an endpoint that becomes a Kubernetes NodePort + title: >- + This describes how the endpoint is implemented + when the lease is deployed title: >- Endpoint describes a publicly accessible IP service @@ -29172,11 +29701,8 @@ definitions: signatures required by gogoproto. title: 'Resource stores unit, total count and price of resource' - order_bid_duration: - type: string - format: int64 title: GroupSpec stores group specifications - close_at: + created_at: type: string format: int64 title: 'Order stores orderID, state of order and other details' @@ -29209,19 +29735,16 @@ definitions: enum: - invalid - open - - matched + - active - closed default: invalid description: >- - invalid: Prefix should start with 0 in enum. So declaring dummy state - open: OrderOpen denotes state for order open - - matched: OrderMatched denotes state for order matched + - active: OrderMatched denotes state for order matched - closed: OrderClosed denotes state for order lost title: State is an enum which refers to state of order - start_at: - type: string - format: int64 spec: type: object properties: @@ -29345,6 +29868,20 @@ definitions: type: array items: type: object + properties: + kind: + type: string + enum: + - SHARED_HTTP + - RANDOM_PORT + default: SHARED_HTTP + description: >- + - SHARED_HTTP: Describes an endpoint that + becomes a Kubernetes Ingress + - RANDOM_PORT: Describes an endpoint that becomes a Kubernetes NodePort + title: >- + This describes how the endpoint is + implemented when the lease is deployed title: >- Endpoint describes a publicly accessible IP service @@ -29374,11 +29911,8 @@ definitions: signatures required by gogoproto. title: 'Resource stores unit, total count and price of resource' - order_bid_duration: - type: string - format: int64 title: GroupSpec stores group specifications - close_at: + created_at: type: string format: int64 title: 'Order stores orderID, state of order and other details' @@ -29425,7 +29959,23 @@ definitions: value: type: string title: Attribute represents key value pair + info: + type: object + properties: + email: + type: string + website: + type: string + title: ProviderInfo title: Provider stores owner and host details + akash.provider.v1beta1.ProviderInfo: + type: object + properties: + email: + type: string + website: + type: string + title: ProviderInfo akash.provider.v1beta1.QueryProviderResponse: type: object properties: @@ -29446,6 +29996,14 @@ definitions: value: type: string title: Attribute represents key value pair + info: + type: object + properties: + email: + type: string + website: + type: string + title: ProviderInfo title: Provider stores owner and host details title: QueryProviderResponse is response type for the Query/Provider RPC method akash.provider.v1beta1.QueryProvidersResponse: @@ -29470,6 +30028,14 @@ definitions: value: type: string title: Attribute represents key value pair + info: + type: object + properties: + email: + type: string + website: + type: string + title: ProviderInfo title: Provider stores owner and host details pagination: type: object @@ -30676,362 +31242,5256 @@ definitions: Redelegation: type: object properties: - delegator_address: - type: string - validator_src_address: + delegator_address: + type: string + validator_src_address: + type: string + validator_dst_address: + type: string + entries: + type: array + items: + $ref: '#/definitions/Redelegation' + RedelegationEntry: + type: object + properties: + creation_height: + type: integer + completion_time: + type: integer + initial_balance: + type: string + balance: + type: string + shares_dst: + type: string + ValidatorDistInfo: + type: object + properties: + operator_address: + type: string + description: bech32 encoded address + example: cosmosvaloper16xyempempp92x9hyzz9wrgf94r6j9h5f2w4n2l + self_bond_rewards: + type: array + items: + type: object + properties: + denom: + type: string + example: stake + amount: + type: string + example: '50' + val_commission: + type: array + items: + type: object + properties: + denom: + type: string + example: stake + amount: + type: string + example: '50' + PublicKey: + type: object + properties: + type: + type: string + value: + type: string + SigningInfo: + type: object + properties: + start_height: + type: string + index_offset: + type: string + jailed_until: + type: string + missed_blocks_counter: + type: string + ParamChange: + type: object + properties: + subspace: + type: string + example: staking + key: + type: string + example: MaxValidators + subkey: + type: string + example: '' + value: + type: object + Supply: + type: object + properties: + total: + type: array + items: + type: object + properties: + denom: + type: string + example: stake + amount: + type: string + example: '50' + cosmos.auth.v1beta1.Params: + type: object + properties: + max_memo_characters: + type: string + format: uint64 + tx_sig_limit: + type: string + format: uint64 + tx_size_cost_per_byte: + type: string + format: uint64 + sig_verify_cost_ed25519: + type: string + format: uint64 + sig_verify_cost_secp256k1: + type: string + format: uint64 + description: Params defines the parameters for the auth module. + cosmos.auth.v1beta1.QueryAccountResponse: + type: object + properties: + account: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of the + serialized + + protocol buffer message. This string must contain at least + + one "/" character. The last segment of the URL's path must + represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in a + canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary all types + that they + + expect it to use in the context of Any. However, for URLs which + use the + + scheme `http`, `https`, or no scheme, one can optionally set up a + type + + server that maps type URLs to message definitions as follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the + official + + protobuf release, and it is not used for type URLs beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above specified + type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message along + with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values in the + form + + of utility functions or additional generated methods of the Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by default use + + 'type.googleapis.com/full.type.name' as the type URL and the unpack + + methods only use the fully qualified type name after the last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with an + + additional field `@type` which contains the type URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom JSON + + representation, that representation will be embedded adding a field + + `value` which holds the custom JSON in addition to the `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + description: >- + QueryAccountResponse is the response type for the Query/Account RPC + method. + cosmos.auth.v1beta1.QueryAccountsResponse: + type: object + properties: + accounts: + type: array + items: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of the + serialized + + protocol buffer message. This string must contain at least + + one "/" character. The last segment of the URL's path must + represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in a + canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary all types + that they + + expect it to use in the context of Any. However, for URLs which + use the + + scheme `http`, `https`, or no scheme, one can optionally set up + a type + + server that maps type URLs to message definitions as follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the + official + + protobuf release, and it is not used for type URLs beginning + with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) might + be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message along + with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values in the + form + + of utility functions or additional generated methods of the Any + type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by default use + + 'type.googleapis.com/full.type.name' as the type URL and the unpack + + methods only use the fully qualified type name after the last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with an + + additional field `@type` which contains the type URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom JSON + + representation, that representation will be embedded adding a field + + `value` which holds the custom JSON in addition to the `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + title: accounts are the existing accounts + pagination: + description: pagination defines the pagination in the response. + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + description: >- + QueryAccountsResponse is the response type for the Query/Accounts RPC + method. + cosmos.auth.v1beta1.QueryParamsResponse: + type: object + properties: + params: + description: params defines the parameters of the module. + type: object + properties: + max_memo_characters: + type: string + format: uint64 + tx_sig_limit: + type: string + format: uint64 + tx_size_cost_per_byte: + type: string + format: uint64 + sig_verify_cost_ed25519: + type: string + format: uint64 + sig_verify_cost_secp256k1: + type: string + format: uint64 + description: QueryParamsResponse is the response type for the Query/Params RPC method. + cosmos.bank.v1beta1.DenomOwner: + type: object + properties: + address: + type: string + description: address defines the address that owns a particular denomination. + balance: + type: object + properties: + denom: + type: string + amount: + type: string + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + description: |- + DenomOwner defines structure representing an account that owns or holds a + particular denominated token. It contains the account address and account + balance of the denominated token. + cosmos.bank.v1beta1.DenomUnit: + type: object + properties: + denom: + type: string + description: denom represents the string name of the given denom unit (e.g uatom). + exponent: + type: integer + format: int64 + description: >- + exponent represents power of 10 exponent that one must + + raise the base_denom to in order to equal the given DenomUnit's denom + + 1 denom = 1^exponent base_denom + + (e.g. with a base_denom of uatom, one can create a DenomUnit of 'atom' + with + + exponent = 6, thus: 1 atom = 10^6 uatom). + aliases: + type: array + items: + type: string + title: aliases is a list of string aliases for the given denom + description: |- + DenomUnit represents a struct that describes a given + denomination unit of the basic token. + cosmos.bank.v1beta1.Metadata: + type: object + properties: + description: + type: string + denom_units: + type: array + items: + type: object + properties: + denom: + type: string + description: >- + denom represents the string name of the given denom unit (e.g + uatom). + exponent: + type: integer + format: int64 + description: >- + exponent represents power of 10 exponent that one must + + raise the base_denom to in order to equal the given DenomUnit's + denom + + 1 denom = 1^exponent base_denom + + (e.g. with a base_denom of uatom, one can create a DenomUnit of + 'atom' with + + exponent = 6, thus: 1 atom = 10^6 uatom). + aliases: + type: array + items: + type: string + title: aliases is a list of string aliases for the given denom + description: |- + DenomUnit represents a struct that describes a given + denomination unit of the basic token. + title: denom_units represents the list of DenomUnit's for a given coin + base: + type: string + description: >- + base represents the base denom (should be the DenomUnit with exponent + = 0). + display: + type: string + description: |- + display indicates the suggested denom that should be + displayed in clients. + name: + type: string + title: 'name defines the name of the token (eg: Cosmos Atom)' + symbol: + type: string + description: >- + symbol is the token symbol usually shown on exchanges (eg: ATOM). This + can + + be the same as the display. + uri: + type: string + description: >- + URI to a document (on or off-chain) that contains additional + information. Optional. + uri_hash: + type: string + description: >- + URIHash is a sha256 hash of a document pointed by URI. It's used to + verify that + + the document didn't change. Optional. + description: |- + Metadata represents a struct that describes + a basic token. + cosmos.bank.v1beta1.Params: + type: object + properties: + send_enabled: + type: array + items: + type: object + properties: + denom: + type: string + enabled: + type: boolean + format: boolean + description: >- + SendEnabled maps coin denom to a send_enabled status (whether a + denom is + + sendable). + default_send_enabled: + type: boolean + format: boolean + description: Params defines the parameters for the bank module. + cosmos.bank.v1beta1.QueryAllBalancesResponse: + type: object + properties: + balances: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + description: balances is the balances of all the coins. + pagination: + description: pagination defines the pagination in the response. + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + description: >- + QueryAllBalancesResponse is the response type for the Query/AllBalances + RPC + + method. + cosmos.bank.v1beta1.QueryBalanceResponse: + type: object + properties: + balance: + type: object + properties: + denom: + type: string + amount: + type: string + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + description: >- + QueryBalanceResponse is the response type for the Query/Balance RPC + method. + cosmos.bank.v1beta1.QueryDenomMetadataResponse: + type: object + properties: + metadata: + type: object + properties: + description: + type: string + denom_units: + type: array + items: + type: object + properties: + denom: + type: string + description: >- + denom represents the string name of the given denom unit + (e.g uatom). + exponent: + type: integer + format: int64 + description: >- + exponent represents power of 10 exponent that one must + + raise the base_denom to in order to equal the given + DenomUnit's denom + + 1 denom = 1^exponent base_denom + + (e.g. with a base_denom of uatom, one can create a DenomUnit + of 'atom' with + + exponent = 6, thus: 1 atom = 10^6 uatom). + aliases: + type: array + items: + type: string + title: aliases is a list of string aliases for the given denom + description: |- + DenomUnit represents a struct that describes a given + denomination unit of the basic token. + title: denom_units represents the list of DenomUnit's for a given coin + base: + type: string + description: >- + base represents the base denom (should be the DenomUnit with + exponent = 0). + display: + type: string + description: |- + display indicates the suggested denom that should be + displayed in clients. + name: + type: string + title: 'name defines the name of the token (eg: Cosmos Atom)' + symbol: + type: string + description: >- + symbol is the token symbol usually shown on exchanges (eg: ATOM). + This can + + be the same as the display. + uri: + type: string + description: >- + URI to a document (on or off-chain) that contains additional + information. Optional. + uri_hash: + type: string + description: >- + URIHash is a sha256 hash of a document pointed by URI. It's used + to verify that + + the document didn't change. Optional. + description: |- + Metadata represents a struct that describes + a basic token. + description: >- + QueryDenomMetadataResponse is the response type for the + Query/DenomMetadata RPC + + method. + cosmos.bank.v1beta1.QueryDenomOwnersResponse: + type: object + properties: + denom_owners: + type: array + items: + type: object + properties: + address: + type: string + description: address defines the address that owns a particular denomination. + balance: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + description: >- + DenomOwner defines structure representing an account that owns or + holds a + + particular denominated token. It contains the account address and + account + + balance of the denominated token. + pagination: + description: pagination defines the pagination in the response. + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + description: >- + QueryDenomOwnersResponse defines the RPC response of a DenomOwners RPC + query. + cosmos.bank.v1beta1.QueryDenomsMetadataResponse: + type: object + properties: + metadatas: + type: array + items: + type: object + properties: + description: + type: string + denom_units: + type: array + items: + type: object + properties: + denom: + type: string + description: >- + denom represents the string name of the given denom unit + (e.g uatom). + exponent: + type: integer + format: int64 + description: >- + exponent represents power of 10 exponent that one must + + raise the base_denom to in order to equal the given + DenomUnit's denom + + 1 denom = 1^exponent base_denom + + (e.g. with a base_denom of uatom, one can create a + DenomUnit of 'atom' with + + exponent = 6, thus: 1 atom = 10^6 uatom). + aliases: + type: array + items: + type: string + title: aliases is a list of string aliases for the given denom + description: |- + DenomUnit represents a struct that describes a given + denomination unit of the basic token. + title: denom_units represents the list of DenomUnit's for a given coin + base: + type: string + description: >- + base represents the base denom (should be the DenomUnit with + exponent = 0). + display: + type: string + description: |- + display indicates the suggested denom that should be + displayed in clients. + name: + type: string + title: 'name defines the name of the token (eg: Cosmos Atom)' + symbol: + type: string + description: >- + symbol is the token symbol usually shown on exchanges (eg: + ATOM). This can + + be the same as the display. + uri: + type: string + description: >- + URI to a document (on or off-chain) that contains additional + information. Optional. + uri_hash: + type: string + description: >- + URIHash is a sha256 hash of a document pointed by URI. It's used + to verify that + + the document didn't change. Optional. + description: |- + Metadata represents a struct that describes + a basic token. + description: >- + metadata provides the client information for all the registered + tokens. + pagination: + description: pagination defines the pagination in the response. + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + description: >- + QueryDenomsMetadataResponse is the response type for the + Query/DenomsMetadata RPC + + method. + cosmos.bank.v1beta1.QueryParamsResponse: + type: object + properties: + params: + type: object + properties: + send_enabled: + type: array + items: + type: object + properties: + denom: + type: string + enabled: + type: boolean + format: boolean + description: >- + SendEnabled maps coin denom to a send_enabled status (whether a + denom is + + sendable). + default_send_enabled: + type: boolean + format: boolean + description: Params defines the parameters for the bank module. + description: >- + QueryParamsResponse defines the response type for querying x/bank + parameters. + cosmos.bank.v1beta1.QuerySupplyOfResponse: + type: object + properties: + amount: + type: object + properties: + denom: + type: string + amount: + type: string + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + description: >- + QuerySupplyOfResponse is the response type for the Query/SupplyOf RPC + method. + cosmos.bank.v1beta1.QueryTotalSupplyResponse: + type: object + properties: + supply: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + title: supply is the supply of the coins + pagination: + description: pagination defines the pagination in the response. + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + title: >- + QueryTotalSupplyResponse is the response type for the Query/TotalSupply + RPC + + method + cosmos.bank.v1beta1.SendEnabled: + type: object + properties: + denom: + type: string + enabled: + type: boolean + format: boolean + description: |- + SendEnabled maps coin denom to a send_enabled status (whether a denom is + sendable). + cosmos.base.tendermint.v1beta1.GetBlockByHeightResponse: + type: object + properties: + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + block: + type: object + properties: + header: + type: object + properties: + version: + title: basic block info + type: object + properties: + block: + type: string + format: uint64 + app: + type: string + format: uint64 + description: >- + Consensus captures the consensus rules for processing a block + in the blockchain, + + including all blockchain data structures and the rules of the + application's + + state transition machine. + chain_id: + type: string + height: + type: string + format: int64 + time: + type: string + format: date-time + last_block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + last_commit_hash: + type: string + format: byte + title: hashes of block data + data_hash: + type: string + format: byte + validators_hash: + type: string + format: byte + title: hashes from the app output from the prev block + next_validators_hash: + type: string + format: byte + consensus_hash: + type: string + format: byte + app_hash: + type: string + format: byte + last_results_hash: + type: string + format: byte + evidence_hash: + type: string + format: byte + title: consensus info + proposer_address: + type: string + format: byte + description: Header defines the structure of a Tendermint block header. + data: + type: object + properties: + txs: + type: array + items: + type: string + format: byte + description: >- + Txs that will be applied by state @ block.Height+1. + + NOTE: not all txs here are valid. We're just agreeing on the + order first. + + This means that block.AppHash does not include these txs. + title: Data contains the set of transactions included in the block + evidence: + type: object + properties: + evidence: + type: array + items: + type: object + properties: + duplicate_vote_evidence: + type: object + properties: + vote_a: + type: object + properties: + type: + type: string + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + default: SIGNED_MSG_TYPE_UNKNOWN + description: >- + SignedMsgType is a type of signed message in the + consensus. + + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + timestamp: + type: string + format: date-time + validator_address: + type: string + format: byte + validator_index: + type: integer + format: int32 + signature: + type: string + format: byte + description: >- + Vote represents a prevote, precommit, or commit vote + from validators for + + consensus. + vote_b: + type: object + properties: + type: + type: string + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + default: SIGNED_MSG_TYPE_UNKNOWN + description: >- + SignedMsgType is a type of signed message in the + consensus. + + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + timestamp: + type: string + format: date-time + validator_address: + type: string + format: byte + validator_index: + type: integer + format: int32 + signature: + type: string + format: byte + description: >- + Vote represents a prevote, precommit, or commit vote + from validators for + + consensus. + total_voting_power: + type: string + format: int64 + validator_power: + type: string + format: int64 + timestamp: + type: string + format: date-time + description: >- + DuplicateVoteEvidence contains evidence of a validator + signed two conflicting votes. + light_client_attack_evidence: + type: object + properties: + conflicting_block: + type: object + properties: + signed_header: + type: object + properties: + header: + type: object + properties: + version: + title: basic block info + type: object + properties: + block: + type: string + format: uint64 + app: + type: string + format: uint64 + description: >- + Consensus captures the consensus rules + for processing a block in the + blockchain, + + including all blockchain data structures + and the rules of the application's + + state transition machine. + chain_id: + type: string + height: + type: string + format: int64 + time: + type: string + format: date-time + last_block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + last_commit_hash: + type: string + format: byte + title: hashes of block data + data_hash: + type: string + format: byte + validators_hash: + type: string + format: byte + title: >- + hashes from the app output from the prev + block + next_validators_hash: + type: string + format: byte + consensus_hash: + type: string + format: byte + app_hash: + type: string + format: byte + last_results_hash: + type: string + format: byte + evidence_hash: + type: string + format: byte + title: consensus info + proposer_address: + type: string + format: byte + description: >- + Header defines the structure of a Tendermint + block header. + commit: + type: object + properties: + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + signatures: + type: array + items: + type: object + properties: + block_id_flag: + type: string + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + default: BLOCK_ID_FLAG_UNKNOWN + title: >- + BlockIdFlag indicates which BlcokID the + signature is for + validator_address: + type: string + format: byte + timestamp: + type: string + format: date-time + signature: + type: string + format: byte + description: >- + CommitSig is a part of the Vote included + in a Commit. + description: >- + Commit contains the evidence that a block + was committed by a set of validators. + validator_set: + type: object + properties: + validators: + type: array + items: + type: object + properties: + address: + type: string + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for + use with Tendermint Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + proposer: + type: object + properties: + address: + type: string + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for + use with Tendermint Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + total_voting_power: + type: string + format: int64 + common_height: + type: string + format: int64 + byzantine_validators: + type: array + items: + type: object + properties: + address: + type: string + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for use + with Tendermint Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + total_voting_power: + type: string + format: int64 + timestamp: + type: string + format: date-time + description: >- + LightClientAttackEvidence contains evidence of a set of + validators attempting to mislead a light client. + last_commit: + type: object + properties: + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + signatures: + type: array + items: + type: object + properties: + block_id_flag: + type: string + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + default: BLOCK_ID_FLAG_UNKNOWN + title: BlockIdFlag indicates which BlcokID the signature is for + validator_address: + type: string + format: byte + timestamp: + type: string + format: date-time + signature: + type: string + format: byte + description: CommitSig is a part of the Vote included in a Commit. + description: >- + Commit contains the evidence that a block was committed by a set + of validators. + description: >- + GetBlockByHeightResponse is the response type for the + Query/GetBlockByHeight RPC method. + cosmos.base.tendermint.v1beta1.GetLatestBlockResponse: + type: object + properties: + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + block: + type: object + properties: + header: + type: object + properties: + version: + title: basic block info + type: object + properties: + block: + type: string + format: uint64 + app: + type: string + format: uint64 + description: >- + Consensus captures the consensus rules for processing a block + in the blockchain, + + including all blockchain data structures and the rules of the + application's + + state transition machine. + chain_id: + type: string + height: + type: string + format: int64 + time: + type: string + format: date-time + last_block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + last_commit_hash: + type: string + format: byte + title: hashes of block data + data_hash: + type: string + format: byte + validators_hash: + type: string + format: byte + title: hashes from the app output from the prev block + next_validators_hash: + type: string + format: byte + consensus_hash: + type: string + format: byte + app_hash: + type: string + format: byte + last_results_hash: + type: string + format: byte + evidence_hash: + type: string + format: byte + title: consensus info + proposer_address: + type: string + format: byte + description: Header defines the structure of a Tendermint block header. + data: + type: object + properties: + txs: + type: array + items: + type: string + format: byte + description: >- + Txs that will be applied by state @ block.Height+1. + + NOTE: not all txs here are valid. We're just agreeing on the + order first. + + This means that block.AppHash does not include these txs. + title: Data contains the set of transactions included in the block + evidence: + type: object + properties: + evidence: + type: array + items: + type: object + properties: + duplicate_vote_evidence: + type: object + properties: + vote_a: + type: object + properties: + type: + type: string + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + default: SIGNED_MSG_TYPE_UNKNOWN + description: >- + SignedMsgType is a type of signed message in the + consensus. + + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + timestamp: + type: string + format: date-time + validator_address: + type: string + format: byte + validator_index: + type: integer + format: int32 + signature: + type: string + format: byte + description: >- + Vote represents a prevote, precommit, or commit vote + from validators for + + consensus. + vote_b: + type: object + properties: + type: + type: string + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + default: SIGNED_MSG_TYPE_UNKNOWN + description: >- + SignedMsgType is a type of signed message in the + consensus. + + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + timestamp: + type: string + format: date-time + validator_address: + type: string + format: byte + validator_index: + type: integer + format: int32 + signature: + type: string + format: byte + description: >- + Vote represents a prevote, precommit, or commit vote + from validators for + + consensus. + total_voting_power: + type: string + format: int64 + validator_power: + type: string + format: int64 + timestamp: + type: string + format: date-time + description: >- + DuplicateVoteEvidence contains evidence of a validator + signed two conflicting votes. + light_client_attack_evidence: + type: object + properties: + conflicting_block: + type: object + properties: + signed_header: + type: object + properties: + header: + type: object + properties: + version: + title: basic block info + type: object + properties: + block: + type: string + format: uint64 + app: + type: string + format: uint64 + description: >- + Consensus captures the consensus rules + for processing a block in the + blockchain, + + including all blockchain data structures + and the rules of the application's + + state transition machine. + chain_id: + type: string + height: + type: string + format: int64 + time: + type: string + format: date-time + last_block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + last_commit_hash: + type: string + format: byte + title: hashes of block data + data_hash: + type: string + format: byte + validators_hash: + type: string + format: byte + title: >- + hashes from the app output from the prev + block + next_validators_hash: + type: string + format: byte + consensus_hash: + type: string + format: byte + app_hash: + type: string + format: byte + last_results_hash: + type: string + format: byte + evidence_hash: + type: string + format: byte + title: consensus info + proposer_address: + type: string + format: byte + description: >- + Header defines the structure of a Tendermint + block header. + commit: + type: object + properties: + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + signatures: + type: array + items: + type: object + properties: + block_id_flag: + type: string + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + default: BLOCK_ID_FLAG_UNKNOWN + title: >- + BlockIdFlag indicates which BlcokID the + signature is for + validator_address: + type: string + format: byte + timestamp: + type: string + format: date-time + signature: + type: string + format: byte + description: >- + CommitSig is a part of the Vote included + in a Commit. + description: >- + Commit contains the evidence that a block + was committed by a set of validators. + validator_set: + type: object + properties: + validators: + type: array + items: + type: object + properties: + address: + type: string + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for + use with Tendermint Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + proposer: + type: object + properties: + address: + type: string + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for + use with Tendermint Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + total_voting_power: + type: string + format: int64 + common_height: + type: string + format: int64 + byzantine_validators: + type: array + items: + type: object + properties: + address: + type: string + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for use + with Tendermint Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + total_voting_power: + type: string + format: int64 + timestamp: + type: string + format: date-time + description: >- + LightClientAttackEvidence contains evidence of a set of + validators attempting to mislead a light client. + last_commit: + type: object + properties: + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + signatures: + type: array + items: + type: object + properties: + block_id_flag: + type: string + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + default: BLOCK_ID_FLAG_UNKNOWN + title: BlockIdFlag indicates which BlcokID the signature is for + validator_address: + type: string + format: byte + timestamp: + type: string + format: date-time + signature: + type: string + format: byte + description: CommitSig is a part of the Vote included in a Commit. + description: >- + Commit contains the evidence that a block was committed by a set + of validators. + description: >- + GetLatestBlockResponse is the response type for the Query/GetLatestBlock + RPC method. + cosmos.base.tendermint.v1beta1.GetLatestValidatorSetResponse: + type: object + properties: + block_height: + type: string + format: int64 + validators: + type: array + items: + type: object + properties: + address: + type: string + pub_key: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of the + serialized + + protocol buffer message. This string must contain at least + + one "/" character. The last segment of the URL's path must + represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in a + canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary all + types that they + + expect it to use in the context of Any. However, for URLs + which use the + + scheme `http`, `https`, or no scheme, one can optionally set + up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based on + the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the + official + + protobuf release, and it is not used for type URLs beginning + with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message + along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values in + the form + + of utility functions or additional generated methods of the Any + type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by default + use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the last + '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with an + + additional field `@type` which contains the type URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom JSON + + representation, that representation will be embedded adding a + field + + `value` which holds the custom JSON in addition to the `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + description: Validator is the type for the validator-set. + pagination: + description: pagination defines an pagination for the response. + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + description: >- + GetLatestValidatorSetResponse is the response type for the + Query/GetValidatorSetByHeight RPC method. + cosmos.base.tendermint.v1beta1.GetNodeInfoResponse: + type: object + properties: + default_node_info: + type: object + properties: + protocol_version: + type: object + properties: + p2p: + type: string + format: uint64 + block: + type: string + format: uint64 + app: + type: string + format: uint64 + default_node_id: + type: string + listen_addr: + type: string + network: + type: string + version: + type: string + channels: + type: string + format: byte + moniker: + type: string + other: + type: object + properties: + tx_index: + type: string + rpc_address: + type: string + application_version: + type: object + properties: + name: + type: string + app_name: + type: string + version: + type: string + git_commit: + type: string + build_tags: + type: string + go_version: + type: string + build_deps: + type: array + items: + type: object + properties: + path: + type: string + title: module path + version: + type: string + title: module version + sum: + type: string + title: checksum + title: Module is the type for VersionInfo + cosmos_sdk_version: + type: string + description: VersionInfo is the type for the GetNodeInfoResponse message. + description: >- + GetNodeInfoResponse is the request type for the Query/GetNodeInfo RPC + method. + cosmos.base.tendermint.v1beta1.GetSyncingResponse: + type: object + properties: + syncing: + type: boolean + format: boolean + description: >- + GetSyncingResponse is the response type for the Query/GetSyncing RPC + method. + cosmos.base.tendermint.v1beta1.GetValidatorSetByHeightResponse: + type: object + properties: + block_height: + type: string + format: int64 + validators: + type: array + items: + type: object + properties: + address: + type: string + pub_key: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of the + serialized + + protocol buffer message. This string must contain at least + + one "/" character. The last segment of the URL's path must + represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in a + canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary all + types that they + + expect it to use in the context of Any. However, for URLs + which use the + + scheme `http`, `https`, or no scheme, one can optionally set + up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based on + the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the + official + + protobuf release, and it is not used for type URLs beginning + with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message + along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values in + the form + + of utility functions or additional generated methods of the Any + type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by default + use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the last + '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with an + + additional field `@type` which contains the type URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom JSON + + representation, that representation will be embedded adding a + field + + `value` which holds the custom JSON in addition to the `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + description: Validator is the type for the validator-set. + pagination: + description: pagination defines an pagination for the response. + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + description: >- + GetValidatorSetByHeightResponse is the response type for the + Query/GetValidatorSetByHeight RPC method. + cosmos.base.tendermint.v1beta1.Module: + type: object + properties: + path: + type: string + title: module path + version: + type: string + title: module version + sum: + type: string + title: checksum + title: Module is the type for VersionInfo + cosmos.base.tendermint.v1beta1.Validator: + type: object + properties: + address: + type: string + pub_key: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of the + serialized + + protocol buffer message. This string must contain at least + + one "/" character. The last segment of the URL's path must + represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in a + canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary all types + that they + + expect it to use in the context of Any. However, for URLs which + use the + + scheme `http`, `https`, or no scheme, one can optionally set up a + type + + server that maps type URLs to message definitions as follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the + official + + protobuf release, and it is not used for type URLs beginning with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above specified + type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message along + with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values in the + form + + of utility functions or additional generated methods of the Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by default use + + 'type.googleapis.com/full.type.name' as the type URL and the unpack + + methods only use the fully qualified type name after the last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with an + + additional field `@type` which contains the type URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom JSON + + representation, that representation will be embedded adding a field + + `value` which holds the custom JSON in addition to the `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + description: Validator is the type for the validator-set. + cosmos.base.tendermint.v1beta1.VersionInfo: + type: object + properties: + name: + type: string + app_name: + type: string + version: + type: string + git_commit: + type: string + build_tags: + type: string + go_version: + type: string + build_deps: + type: array + items: + type: object + properties: + path: + type: string + title: module path + version: + type: string + title: module version + sum: + type: string + title: checksum + title: Module is the type for VersionInfo + cosmos_sdk_version: + type: string + description: VersionInfo is the type for the GetNodeInfoResponse message. + tendermint.crypto.PublicKey: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: PublicKey defines the keys available for use with Tendermint Validators + tendermint.p2p.DefaultNodeInfo: + type: object + properties: + protocol_version: + type: object + properties: + p2p: + type: string + format: uint64 + block: + type: string + format: uint64 + app: + type: string + format: uint64 + default_node_id: + type: string + listen_addr: + type: string + network: + type: string + version: + type: string + channels: + type: string + format: byte + moniker: + type: string + other: + type: object + properties: + tx_index: + type: string + rpc_address: + type: string + tendermint.p2p.DefaultNodeInfoOther: + type: object + properties: + tx_index: + type: string + rpc_address: + type: string + tendermint.p2p.ProtocolVersion: + type: object + properties: + p2p: + type: string + format: uint64 + block: + type: string + format: uint64 + app: + type: string + format: uint64 + tendermint.types.Block: + type: object + properties: + header: + type: object + properties: + version: + title: basic block info + type: object + properties: + block: + type: string + format: uint64 + app: + type: string + format: uint64 + description: >- + Consensus captures the consensus rules for processing a block in + the blockchain, + + including all blockchain data structures and the rules of the + application's + + state transition machine. + chain_id: + type: string + height: + type: string + format: int64 + time: + type: string + format: date-time + last_block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + last_commit_hash: + type: string + format: byte + title: hashes of block data + data_hash: + type: string + format: byte + validators_hash: + type: string + format: byte + title: hashes from the app output from the prev block + next_validators_hash: + type: string + format: byte + consensus_hash: + type: string + format: byte + app_hash: + type: string + format: byte + last_results_hash: + type: string + format: byte + evidence_hash: + type: string + format: byte + title: consensus info + proposer_address: + type: string + format: byte + description: Header defines the structure of a Tendermint block header. + data: + type: object + properties: + txs: + type: array + items: + type: string + format: byte + description: >- + Txs that will be applied by state @ block.Height+1. + + NOTE: not all txs here are valid. We're just agreeing on the + order first. + + This means that block.AppHash does not include these txs. + title: Data contains the set of transactions included in the block + evidence: + type: object + properties: + evidence: + type: array + items: + type: object + properties: + duplicate_vote_evidence: + type: object + properties: + vote_a: + type: object + properties: + type: + type: string + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + default: SIGNED_MSG_TYPE_UNKNOWN + description: >- + SignedMsgType is a type of signed message in the + consensus. + + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + timestamp: + type: string + format: date-time + validator_address: + type: string + format: byte + validator_index: + type: integer + format: int32 + signature: + type: string + format: byte + description: >- + Vote represents a prevote, precommit, or commit vote + from validators for + + consensus. + vote_b: + type: object + properties: + type: + type: string + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + default: SIGNED_MSG_TYPE_UNKNOWN + description: >- + SignedMsgType is a type of signed message in the + consensus. + + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + timestamp: + type: string + format: date-time + validator_address: + type: string + format: byte + validator_index: + type: integer + format: int32 + signature: + type: string + format: byte + description: >- + Vote represents a prevote, precommit, or commit vote + from validators for + + consensus. + total_voting_power: + type: string + format: int64 + validator_power: + type: string + format: int64 + timestamp: + type: string + format: date-time + description: >- + DuplicateVoteEvidence contains evidence of a validator + signed two conflicting votes. + light_client_attack_evidence: + type: object + properties: + conflicting_block: + type: object + properties: + signed_header: + type: object + properties: + header: + type: object + properties: + version: + title: basic block info + type: object + properties: + block: + type: string + format: uint64 + app: + type: string + format: uint64 + description: >- + Consensus captures the consensus rules for + processing a block in the blockchain, + + including all blockchain data structures and + the rules of the application's + + state transition machine. + chain_id: + type: string + height: + type: string + format: int64 + time: + type: string + format: date-time + last_block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + last_commit_hash: + type: string + format: byte + title: hashes of block data + data_hash: + type: string + format: byte + validators_hash: + type: string + format: byte + title: >- + hashes from the app output from the prev + block + next_validators_hash: + type: string + format: byte + consensus_hash: + type: string + format: byte + app_hash: + type: string + format: byte + last_results_hash: + type: string + format: byte + evidence_hash: + type: string + format: byte + title: consensus info + proposer_address: + type: string + format: byte + description: >- + Header defines the structure of a Tendermint + block header. + commit: + type: object + properties: + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + signatures: + type: array + items: + type: object + properties: + block_id_flag: + type: string + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + default: BLOCK_ID_FLAG_UNKNOWN + title: >- + BlockIdFlag indicates which BlcokID the + signature is for + validator_address: + type: string + format: byte + timestamp: + type: string + format: date-time + signature: + type: string + format: byte + description: >- + CommitSig is a part of the Vote included + in a Commit. + description: >- + Commit contains the evidence that a block was + committed by a set of validators. + validator_set: + type: object + properties: + validators: + type: array + items: + type: object + properties: + address: + type: string + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for + use with Tendermint Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + proposer: + type: object + properties: + address: + type: string + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for use + with Tendermint Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + total_voting_power: + type: string + format: int64 + common_height: + type: string + format: int64 + byzantine_validators: + type: array + items: + type: object + properties: + address: + type: string + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for use with + Tendermint Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + total_voting_power: + type: string + format: int64 + timestamp: + type: string + format: date-time + description: >- + LightClientAttackEvidence contains evidence of a set of + validators attempting to mislead a light client. + last_commit: + type: object + properties: + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + signatures: + type: array + items: + type: object + properties: + block_id_flag: + type: string + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + default: BLOCK_ID_FLAG_UNKNOWN + title: BlockIdFlag indicates which BlcokID the signature is for + validator_address: + type: string + format: byte + timestamp: + type: string + format: date-time + signature: + type: string + format: byte + description: CommitSig is a part of the Vote included in a Commit. + description: >- + Commit contains the evidence that a block was committed by a set of + validators. + tendermint.types.BlockID: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + tendermint.types.BlockIDFlag: + type: string + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + default: BLOCK_ID_FLAG_UNKNOWN + title: BlockIdFlag indicates which BlcokID the signature is for + tendermint.types.Commit: + type: object + properties: + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + signatures: + type: array + items: + type: object + properties: + block_id_flag: + type: string + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + default: BLOCK_ID_FLAG_UNKNOWN + title: BlockIdFlag indicates which BlcokID the signature is for + validator_address: + type: string + format: byte + timestamp: + type: string + format: date-time + signature: + type: string + format: byte + description: CommitSig is a part of the Vote included in a Commit. + description: >- + Commit contains the evidence that a block was committed by a set of + validators. + tendermint.types.CommitSig: + type: object + properties: + block_id_flag: + type: string + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + default: BLOCK_ID_FLAG_UNKNOWN + title: BlockIdFlag indicates which BlcokID the signature is for + validator_address: + type: string + format: byte + timestamp: + type: string + format: date-time + signature: + type: string + format: byte + description: CommitSig is a part of the Vote included in a Commit. + tendermint.types.Data: + type: object + properties: + txs: + type: array + items: + type: string + format: byte + description: >- + Txs that will be applied by state @ block.Height+1. + + NOTE: not all txs here are valid. We're just agreeing on the order + first. + + This means that block.AppHash does not include these txs. + title: Data contains the set of transactions included in the block + tendermint.types.DuplicateVoteEvidence: + type: object + properties: + vote_a: + type: object + properties: + type: + type: string + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + default: SIGNED_MSG_TYPE_UNKNOWN + description: |- + SignedMsgType is a type of signed message in the consensus. + + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + timestamp: + type: string + format: date-time + validator_address: + type: string + format: byte + validator_index: + type: integer + format: int32 + signature: + type: string + format: byte + description: >- + Vote represents a prevote, precommit, or commit vote from validators + for + + consensus. + vote_b: + type: object + properties: + type: + type: string + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + default: SIGNED_MSG_TYPE_UNKNOWN + description: |- + SignedMsgType is a type of signed message in the consensus. + + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + timestamp: + type: string + format: date-time + validator_address: + type: string + format: byte + validator_index: + type: integer + format: int32 + signature: + type: string + format: byte + description: >- + Vote represents a prevote, precommit, or commit vote from validators + for + + consensus. + total_voting_power: + type: string + format: int64 + validator_power: + type: string + format: int64 + timestamp: + type: string + format: date-time + description: >- + DuplicateVoteEvidence contains evidence of a validator signed two + conflicting votes. + tendermint.types.Evidence: + type: object + properties: + duplicate_vote_evidence: + type: object + properties: + vote_a: + type: object + properties: + type: + type: string + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + default: SIGNED_MSG_TYPE_UNKNOWN + description: |- + SignedMsgType is a type of signed message in the consensus. + + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + timestamp: + type: string + format: date-time + validator_address: + type: string + format: byte + validator_index: + type: integer + format: int32 + signature: + type: string + format: byte + description: >- + Vote represents a prevote, precommit, or commit vote from + validators for + + consensus. + vote_b: + type: object + properties: + type: + type: string + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + default: SIGNED_MSG_TYPE_UNKNOWN + description: |- + SignedMsgType is a type of signed message in the consensus. + + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + timestamp: + type: string + format: date-time + validator_address: + type: string + format: byte + validator_index: + type: integer + format: int32 + signature: + type: string + format: byte + description: >- + Vote represents a prevote, precommit, or commit vote from + validators for + + consensus. + total_voting_power: + type: string + format: int64 + validator_power: + type: string + format: int64 + timestamp: + type: string + format: date-time + description: >- + DuplicateVoteEvidence contains evidence of a validator signed two + conflicting votes. + light_client_attack_evidence: + type: object + properties: + conflicting_block: + type: object + properties: + signed_header: + type: object + properties: + header: + type: object + properties: + version: + title: basic block info + type: object + properties: + block: + type: string + format: uint64 + app: + type: string + format: uint64 + description: >- + Consensus captures the consensus rules for processing + a block in the blockchain, + + including all blockchain data structures and the rules + of the application's + + state transition machine. + chain_id: + type: string + height: + type: string + format: int64 + time: + type: string + format: date-time + last_block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + last_commit_hash: + type: string + format: byte + title: hashes of block data + data_hash: + type: string + format: byte + validators_hash: + type: string + format: byte + title: hashes from the app output from the prev block + next_validators_hash: + type: string + format: byte + consensus_hash: + type: string + format: byte + app_hash: + type: string + format: byte + last_results_hash: + type: string + format: byte + evidence_hash: + type: string + format: byte + title: consensus info + proposer_address: + type: string + format: byte + description: Header defines the structure of a Tendermint block header. + commit: + type: object + properties: + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + signatures: + type: array + items: + type: object + properties: + block_id_flag: + type: string + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + default: BLOCK_ID_FLAG_UNKNOWN + title: >- + BlockIdFlag indicates which BlcokID the + signature is for + validator_address: + type: string + format: byte + timestamp: + type: string + format: date-time + signature: + type: string + format: byte + description: >- + CommitSig is a part of the Vote included in a + Commit. + description: >- + Commit contains the evidence that a block was committed by + a set of validators. + validator_set: + type: object + properties: + validators: + type: array + items: + type: object + properties: + address: + type: string + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for use with + Tendermint Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + proposer: + type: object + properties: + address: + type: string + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for use with + Tendermint Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + total_voting_power: + type: string + format: int64 + common_height: + type: string + format: int64 + byzantine_validators: + type: array + items: + type: object + properties: + address: + type: string + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for use with Tendermint + Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + total_voting_power: + type: string + format: int64 + timestamp: + type: string + format: date-time + description: >- + LightClientAttackEvidence contains evidence of a set of validators + attempting to mislead a light client. + tendermint.types.EvidenceList: + type: object + properties: + evidence: + type: array + items: + type: object + properties: + duplicate_vote_evidence: + type: object + properties: + vote_a: + type: object + properties: + type: + type: string + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + default: SIGNED_MSG_TYPE_UNKNOWN + description: >- + SignedMsgType is a type of signed message in the + consensus. + + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + timestamp: + type: string + format: date-time + validator_address: + type: string + format: byte + validator_index: + type: integer + format: int32 + signature: + type: string + format: byte + description: >- + Vote represents a prevote, precommit, or commit vote from + validators for + + consensus. + vote_b: + type: object + properties: + type: + type: string + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + default: SIGNED_MSG_TYPE_UNKNOWN + description: >- + SignedMsgType is a type of signed message in the + consensus. + + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + timestamp: + type: string + format: date-time + validator_address: + type: string + format: byte + validator_index: + type: integer + format: int32 + signature: + type: string + format: byte + description: >- + Vote represents a prevote, precommit, or commit vote from + validators for + + consensus. + total_voting_power: + type: string + format: int64 + validator_power: + type: string + format: int64 + timestamp: + type: string + format: date-time + description: >- + DuplicateVoteEvidence contains evidence of a validator signed + two conflicting votes. + light_client_attack_evidence: + type: object + properties: + conflicting_block: + type: object + properties: + signed_header: + type: object + properties: + header: + type: object + properties: + version: + title: basic block info + type: object + properties: + block: + type: string + format: uint64 + app: + type: string + format: uint64 + description: >- + Consensus captures the consensus rules for + processing a block in the blockchain, + + including all blockchain data structures and the + rules of the application's + + state transition machine. + chain_id: + type: string + height: + type: string + format: int64 + time: + type: string + format: date-time + last_block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + last_commit_hash: + type: string + format: byte + title: hashes of block data + data_hash: + type: string + format: byte + validators_hash: + type: string + format: byte + title: hashes from the app output from the prev block + next_validators_hash: + type: string + format: byte + consensus_hash: + type: string + format: byte + app_hash: + type: string + format: byte + last_results_hash: + type: string + format: byte + evidence_hash: + type: string + format: byte + title: consensus info + proposer_address: + type: string + format: byte + description: >- + Header defines the structure of a Tendermint block + header. + commit: + type: object + properties: + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + signatures: + type: array + items: + type: object + properties: + block_id_flag: + type: string + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + default: BLOCK_ID_FLAG_UNKNOWN + title: >- + BlockIdFlag indicates which BlcokID the + signature is for + validator_address: + type: string + format: byte + timestamp: + type: string + format: date-time + signature: + type: string + format: byte + description: >- + CommitSig is a part of the Vote included in a + Commit. + description: >- + Commit contains the evidence that a block was + committed by a set of validators. + validator_set: + type: object + properties: + validators: + type: array + items: + type: object + properties: + address: + type: string + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for use + with Tendermint Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + proposer: + type: object + properties: + address: + type: string + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for use + with Tendermint Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + total_voting_power: + type: string + format: int64 + common_height: + type: string + format: int64 + byzantine_validators: + type: array + items: + type: object + properties: + address: + type: string + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for use with + Tendermint Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + total_voting_power: + type: string + format: int64 + timestamp: + type: string + format: date-time + description: >- + LightClientAttackEvidence contains evidence of a set of + validators attempting to mislead a light client. + tendermint.types.Header: + type: object + properties: + version: + title: basic block info + type: object + properties: + block: + type: string + format: uint64 + app: + type: string + format: uint64 + description: >- + Consensus captures the consensus rules for processing a block in the + blockchain, + + including all blockchain data structures and the rules of the + application's + + state transition machine. + chain_id: type: string - validator_dst_address: + height: type: string - entries: - type: array - items: - $ref: '#/definitions/Redelegation' - RedelegationEntry: - type: object - properties: - creation_height: - type: integer - completion_time: - type: integer - initial_balance: + format: int64 + time: type: string - balance: + format: date-time + last_block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + last_commit_hash: type: string - shares_dst: + format: byte + title: hashes of block data + data_hash: type: string - ValidatorDistInfo: - type: object - properties: - operator_address: + format: byte + validators_hash: type: string - description: bech32 encoded address - example: cosmosvaloper16xyempempp92x9hyzz9wrgf94r6j9h5f2w4n2l - self_bond_rewards: - type: array - items: - type: object - properties: - denom: - type: string - example: stake - amount: - type: string - example: '50' - val_commission: - type: array - items: - type: object - properties: - denom: - type: string - example: stake - amount: - type: string - example: '50' - PublicKey: - type: object - properties: - type: + format: byte + title: hashes from the app output from the prev block + next_validators_hash: type: string - value: + format: byte + consensus_hash: type: string - SigningInfo: - type: object - properties: - start_height: + format: byte + app_hash: type: string - index_offset: + format: byte + last_results_hash: type: string - jailed_until: + format: byte + evidence_hash: type: string - missed_blocks_counter: + format: byte + title: consensus info + proposer_address: type: string - ParamChange: + format: byte + description: Header defines the structure of a Tendermint block header. + tendermint.types.LightBlock: type: object properties: - subspace: - type: string - example: staking - key: - type: string - example: MaxValidators - subkey: - type: string - example: '' - value: + signed_header: type: object - Supply: - type: object - properties: - total: - type: array - items: - type: object - properties: - denom: - type: string - example: stake - amount: - type: string - example: '50' - cosmos.auth.v1beta1.Params: - type: object - properties: - max_memo_characters: - type: string - format: uint64 - tx_sig_limit: - type: string - format: uint64 - tx_size_cost_per_byte: - type: string - format: uint64 - sig_verify_cost_ed25519: - type: string - format: uint64 - sig_verify_cost_secp256k1: - type: string - format: uint64 - description: Params defines the parameters for the auth module. - cosmos.auth.v1beta1.QueryAccountResponse: + properties: + header: + type: object + properties: + version: + title: basic block info + type: object + properties: + block: + type: string + format: uint64 + app: + type: string + format: uint64 + description: >- + Consensus captures the consensus rules for processing a block + in the blockchain, + + including all blockchain data structures and the rules of the + application's + + state transition machine. + chain_id: + type: string + height: + type: string + format: int64 + time: + type: string + format: date-time + last_block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + last_commit_hash: + type: string + format: byte + title: hashes of block data + data_hash: + type: string + format: byte + validators_hash: + type: string + format: byte + title: hashes from the app output from the prev block + next_validators_hash: + type: string + format: byte + consensus_hash: + type: string + format: byte + app_hash: + type: string + format: byte + last_results_hash: + type: string + format: byte + evidence_hash: + type: string + format: byte + title: consensus info + proposer_address: + type: string + format: byte + description: Header defines the structure of a Tendermint block header. + commit: + type: object + properties: + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + signatures: + type: array + items: + type: object + properties: + block_id_flag: + type: string + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + default: BLOCK_ID_FLAG_UNKNOWN + title: BlockIdFlag indicates which BlcokID the signature is for + validator_address: + type: string + format: byte + timestamp: + type: string + format: date-time + signature: + type: string + format: byte + description: CommitSig is a part of the Vote included in a Commit. + description: >- + Commit contains the evidence that a block was committed by a set + of validators. + validator_set: + type: object + properties: + validators: + type: array + items: + type: object + properties: + address: + type: string + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for use with Tendermint + Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + proposer: + type: object + properties: + address: + type: string + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for use with Tendermint + Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + total_voting_power: + type: string + format: int64 + tendermint.types.LightClientAttackEvidence: type: object properties: - account: - description: account defines the account of the corresponding address. + conflicting_block: type: object properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all types - that they - - expect it to use in the context of Any. However, for URLs which - use the - - scheme `http`, `https`, or no scheme, one can optionally set up a - type - - server that maps type URLs to message definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning with - - type.googleapis.com. - + signed_header: + type: object + properties: + header: + type: object + properties: + version: + title: basic block info + type: object + properties: + block: + type: string + format: uint64 + app: + type: string + format: uint64 + description: >- + Consensus captures the consensus rules for processing a + block in the blockchain, - Schemes other than `http`, `https` (or the empty scheme) might be + including all blockchain data structures and the rules of + the application's - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above specified - type. + state transition machine. + chain_id: + type: string + height: + type: string + format: int64 + time: + type: string + format: date-time + last_block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + last_commit_hash: + type: string + format: byte + title: hashes of block data + data_hash: + type: string + format: byte + validators_hash: + type: string + format: byte + title: hashes from the app output from the prev block + next_validators_hash: + type: string + format: byte + consensus_hash: + type: string + format: byte + app_hash: + type: string + format: byte + last_results_hash: + type: string + format: byte + evidence_hash: + type: string + format: byte + title: consensus info + proposer_address: + type: string + format: byte + description: Header defines the structure of a Tendermint block header. + commit: + type: object + properties: + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + signatures: + type: array + items: + type: object + properties: + block_id_flag: + type: string + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + default: BLOCK_ID_FLAG_UNKNOWN + title: >- + BlockIdFlag indicates which BlcokID the signature is + for + validator_address: + type: string + format: byte + timestamp: + type: string + format: date-time + signature: + type: string + format: byte + description: CommitSig is a part of the Vote included in a Commit. + description: >- + Commit contains the evidence that a block was committed by a + set of validators. + validator_set: + type: object + properties: + validators: + type: array + items: + type: object + properties: + address: + type: string + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for use with + Tendermint Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + proposer: + type: object + properties: + address: + type: string + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for use with + Tendermint Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + total_voting_power: + type: string + format: int64 + common_height: + type: string + format: int64 + byzantine_validators: + type: array + items: + type: object + properties: + address: + type: string + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for use with Tendermint + Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + total_voting_power: + type: string + format: int64 + timestamp: + type: string + format: date-time description: >- - QueryAccountResponse is the response type for the Query/Account RPC - method. - cosmos.auth.v1beta1.QueryParamsResponse: + LightClientAttackEvidence contains evidence of a set of validators + attempting to mislead a light client. + tendermint.types.PartSetHeader: type: object properties: - params: - description: params defines the parameters of the module. + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + tendermint.types.SignedHeader: + type: object + properties: + header: type: object properties: - max_memo_characters: + version: + title: basic block info + type: object + properties: + block: + type: string + format: uint64 + app: + type: string + format: uint64 + description: >- + Consensus captures the consensus rules for processing a block in + the blockchain, + + including all blockchain data structures and the rules of the + application's + + state transition machine. + chain_id: type: string - format: uint64 - tx_sig_limit: + height: type: string - format: uint64 - tx_size_cost_per_byte: + format: int64 + time: type: string - format: uint64 - sig_verify_cost_ed25519: + format: date-time + last_block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + last_commit_hash: type: string - format: uint64 - sig_verify_cost_secp256k1: + format: byte + title: hashes of block data + data_hash: type: string - format: uint64 - description: QueryParamsResponse is the response type for the Query/Params RPC method. - cosmos.bank.v1beta1.Params: - type: object - properties: - send_enabled: - type: array - items: - type: object - properties: - denom: - type: string - enabled: - type: boolean - description: >- - SendEnabled maps coin denom to a send_enabled status (whether a - denom is - - sendable). - default_send_enabled: - type: boolean - description: Params defines the parameters for the bank module. - cosmos.bank.v1beta1.QueryAllBalancesResponse: - type: object - properties: - balances: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - description: balances is the balances of all the coins. - pagination: - description: pagination defines the pagination in the response. - type: object - properties: - next_key: + format: byte + validators_hash: type: string format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: + title: hashes from the app output from the prev block + next_validators_hash: type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - QueryAllBalancesResponse is the response type for the Query/AllBalances - RPC - - method. - cosmos.bank.v1beta1.QueryBalanceResponse: - type: object - properties: - balance: - description: balance is the balance of the coin. - type: object - properties: - denom: + format: byte + consensus_hash: type: string - amount: + format: byte + app_hash: type: string - description: >- - QueryBalanceResponse is the response type for the Query/Balance RPC - method. - cosmos.bank.v1beta1.QueryParamsResponse: - type: object - properties: - params: + format: byte + last_results_hash: + type: string + format: byte + evidence_hash: + type: string + format: byte + title: consensus info + proposer_address: + type: string + format: byte + description: Header defines the structure of a Tendermint block header. + commit: type: object properties: - send_enabled: + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + signatures: type: array items: type: object properties: - denom: + block_id_flag: type: string - enabled: - type: boolean - description: >- - SendEnabled maps coin denom to a send_enabled status (whether a - denom is + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + default: BLOCK_ID_FLAG_UNKNOWN + title: BlockIdFlag indicates which BlcokID the signature is for + validator_address: + type: string + format: byte + timestamp: + type: string + format: date-time + signature: + type: string + format: byte + description: CommitSig is a part of the Vote included in a Commit. + description: >- + Commit contains the evidence that a block was committed by a set of + validators. + tendermint.types.SignedMsgType: + type: string + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + default: SIGNED_MSG_TYPE_UNKNOWN + description: |- + SignedMsgType is a type of signed message in the consensus. - sendable). - default_send_enabled: - type: boolean - description: Params defines the parameters for the bank module. - description: >- - QueryParamsResponse defines the response type for querying x/bank - parameters. - cosmos.bank.v1beta1.QuerySupplyOfResponse: + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + tendermint.types.Validator: type: object properties: - amount: - description: amount is the supply of the coin. + address: + type: string + format: byte + pub_key: type: object properties: - denom: + ed25519: type: string - amount: + format: byte + secp256k1: type: string - description: >- - QuerySupplyOfResponse is the response type for the Query/SupplyOf RPC - method. - cosmos.bank.v1beta1.QueryTotalSupplyResponse: + format: byte + title: >- + PublicKey defines the keys available for use with Tendermint + Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + tendermint.types.ValidatorSet: type: object properties: - supply: + validators: type: array items: type: object properties: - denom: + address: type: string - amount: + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for use with Tendermint + Validators + voting_power: type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - title: supply is the supply of the coins - title: >- - QueryTotalSupplyResponse is the response type for the Query/TotalSupply - RPC - - method - cosmos.bank.v1beta1.SendEnabled: + format: int64 + proposer_priority: + type: string + format: int64 + proposer: + type: object + properties: + address: + type: string + format: byte + pub_key: + type: object + properties: + ed25519: + type: string + format: byte + secp256k1: + type: string + format: byte + title: >- + PublicKey defines the keys available for use with Tendermint + Validators + voting_power: + type: string + format: int64 + proposer_priority: + type: string + format: int64 + total_voting_power: + type: string + format: int64 + tendermint.types.Vote: type: object properties: - denom: + type: type: string - enabled: - type: boolean + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + default: SIGNED_MSG_TYPE_UNKNOWN + description: |- + SignedMsgType is a type of signed message in the consensus. + + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + height: + type: string + format: int64 + round: + type: integer + format: int32 + block_id: + type: object + properties: + hash: + type: string + format: byte + part_set_header: + type: object + properties: + total: + type: integer + format: int64 + hash: + type: string + format: byte + title: PartsetHeader + title: BlockID + timestamp: + type: string + format: date-time + validator_address: + type: string + format: byte + validator_index: + type: integer + format: int32 + signature: + type: string + format: byte description: |- - SendEnabled maps coin denom to a send_enabled status (whether a denom is - sendable). + Vote represents a prevote, precommit, or commit vote from validators for + consensus. + tendermint.version.Consensus: + type: object + properties: + block: + type: string + format: uint64 + app: + type: string + format: uint64 + description: >- + Consensus captures the consensus rules for processing a block in the + blockchain, + + including all blockchain data structures and the rules of the + application's + + state transition machine. cosmos.base.v1beta1.DecCoin: type: object properties: @@ -31077,6 +36537,7 @@ definitions: type: string withdraw_addr_enabled: type: boolean + format: boolean description: Params defines the set of params for the distribution module. cosmos.distribution.v1beta1.QueryCommunityPoolResponse: type: object @@ -31207,6 +36668,7 @@ definitions: type: string withdraw_addr_enabled: type: boolean + format: boolean description: QueryParamsResponse is the response type for the Query/Params RPC method. cosmos.distribution.v1beta1.QueryValidatorCommissionResponse: type: object @@ -31556,7 +37018,6 @@ definitions: type: object properties: evidence: - description: evidence returns the requested evidence. type: object properties: type_url: @@ -31617,6 +37078,104 @@ definitions: description: >- Must be a valid serialized protocol buffer of the above specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message along + with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values in the + form + + of utility functions or additional generated methods of the Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by default use + + 'type.googleapis.com/full.type.name' as the type URL and the unpack + + methods only use the fully qualified type name after the last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with an + + additional field `@type` which contains the type URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom JSON + + representation, that representation will be embedded adding a field + + `value` which holds the custom JSON in addition to the `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } description: >- QueryEvidenceResponse is the response type for the Query/Evidence RPC method. @@ -31926,7 +37485,6 @@ definitions: type: object properties: deposit: - description: deposit defines the requested deposit. type: object properties: proposal_id: @@ -31951,6 +37509,9 @@ definitions: method signatures required by gogoproto. + description: |- + Deposit defines an amount deposited by an account address to an active + proposal. description: >- QueryDepositResponse is the response type for the Query/Deposit RPC method. @@ -32587,7 +38148,6 @@ definitions: type: object properties: tally: - description: tally defines the requested tally. type: object properties: 'yes': @@ -32598,6 +38158,7 @@ definitions: type: string no_with_veto: type: string + description: TallyResult defines a standard tally for a governance proposal. description: >- QueryTallyResultResponse is the response type for the Query/Tally RPC method. @@ -32605,7 +38166,6 @@ definitions: type: object properties: vote: - description: vote defined the queried vote. type: object properties: proposal_id: @@ -32614,6 +38174,14 @@ definitions: voter: type: string option: + description: >- + Deprecated: Prefer to use `options` instead. This field is set in + queries + + if and only if `len(options) == 1` and that option has weight 1. + In all + + other cases, this field will default to VOTE_OPTION_UNSPECIFIED. type: string enum: - VOTE_OPTION_UNSPECIFIED @@ -32622,15 +38190,35 @@ definitions: - VOTE_OPTION_NO - VOTE_OPTION_NO_WITH_VETO default: VOTE_OPTION_UNSPECIFIED - description: >- - VoteOption enumerates the valid vote options for a given - governance proposal. - - - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option. - - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option. - - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option. - - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option. - - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option. + options: + type: array + items: + type: object + properties: + option: + type: string + enum: + - VOTE_OPTION_UNSPECIFIED + - VOTE_OPTION_YES + - VOTE_OPTION_ABSTAIN + - VOTE_OPTION_NO + - VOTE_OPTION_NO_WITH_VETO + default: VOTE_OPTION_UNSPECIFIED + description: >- + VoteOption enumerates the valid vote options for a given + governance proposal. + + - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option. + - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option. + - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option. + - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option. + - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option. + weight: + type: string + description: WeightedVoteOption defines a unit of vote for vote split. + description: |- + Vote defines a vote on a governance proposal. + A Vote consists of a proposal ID, the voter, and the vote option. description: QueryVoteResponse is the response type for the Query/Vote RPC method. cosmos.gov.v1beta1.QueryVotesResponse: type: object @@ -32646,6 +38234,14 @@ definitions: voter: type: string option: + description: >- + Deprecated: Prefer to use `options` instead. This field is set + in queries + + if and only if `len(options) == 1` and that option has weight 1. + In all + + other cases, this field will default to VOTE_OPTION_UNSPECIFIED. type: string enum: - VOTE_OPTION_UNSPECIFIED @@ -32654,15 +38250,32 @@ definitions: - VOTE_OPTION_NO - VOTE_OPTION_NO_WITH_VETO default: VOTE_OPTION_UNSPECIFIED - description: >- - VoteOption enumerates the valid vote options for a given - governance proposal. + options: + type: array + items: + type: object + properties: + option: + type: string + enum: + - VOTE_OPTION_UNSPECIFIED + - VOTE_OPTION_YES + - VOTE_OPTION_ABSTAIN + - VOTE_OPTION_NO + - VOTE_OPTION_NO_WITH_VETO + default: VOTE_OPTION_UNSPECIFIED + description: >- + VoteOption enumerates the valid vote options for a given + governance proposal. - - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option. - - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option. - - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option. - - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option. - - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option. + - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option. + - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option. + - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option. + - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option. + - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option. + weight: + type: string + description: WeightedVoteOption defines a unit of vote for vote split. description: |- Vote defines a vote on a governance proposal. A Vote consists of a proposal ID, the voter, and the vote option. @@ -32729,6 +38342,14 @@ definitions: voter: type: string option: + description: >- + Deprecated: Prefer to use `options` instead. This field is set in + queries + + if and only if `len(options) == 1` and that option has weight 1. In + all + + other cases, this field will default to VOTE_OPTION_UNSPECIFIED. type: string enum: - VOTE_OPTION_UNSPECIFIED @@ -32737,15 +38358,32 @@ definitions: - VOTE_OPTION_NO - VOTE_OPTION_NO_WITH_VETO default: VOTE_OPTION_UNSPECIFIED - description: >- - VoteOption enumerates the valid vote options for a given governance - proposal. + options: + type: array + items: + type: object + properties: + option: + type: string + enum: + - VOTE_OPTION_UNSPECIFIED + - VOTE_OPTION_YES + - VOTE_OPTION_ABSTAIN + - VOTE_OPTION_NO + - VOTE_OPTION_NO_WITH_VETO + default: VOTE_OPTION_UNSPECIFIED + description: >- + VoteOption enumerates the valid vote options for a given + governance proposal. - - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option. - - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option. - - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option. - - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option. - - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option. + - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option. + - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option. + - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option. + - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option. + - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option. + weight: + type: string + description: WeightedVoteOption defines a unit of vote for vote split. description: |- Vote defines a vote on a governance proposal. A Vote consists of a proposal ID, the voter, and the vote option. @@ -32774,6 +38412,30 @@ definitions: type: string description: Length of the voting period. description: VotingParams defines the params for voting on governance proposals. + cosmos.gov.v1beta1.WeightedVoteOption: + type: object + properties: + option: + type: string + enum: + - VOTE_OPTION_UNSPECIFIED + - VOTE_OPTION_YES + - VOTE_OPTION_ABSTAIN + - VOTE_OPTION_NO + - VOTE_OPTION_NO_WITH_VETO + default: VOTE_OPTION_UNSPECIFIED + description: >- + VoteOption enumerates the valid vote options for a given governance + proposal. + + - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option. + - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option. + - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option. + - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option. + - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option. + weight: + type: string + description: WeightedVoteOption defines a unit of vote for vote split. cosmos.mint.v1beta1.Params: type: object properties: @@ -32914,7 +38576,6 @@ definitions: type: object properties: val_signing_info: - title: val_signing_info is the signing info of requested val cons address type: object properties: address: @@ -32922,31 +38583,47 @@ definitions: start_height: type: string format: int64 - title: height at which validator was first a candidate OR was unjailed + title: Height at which validator was first a candidate OR was unjailed index_offset: type: string format: int64 - title: index offset into signed block bit array + description: >- + Index which is incremented each time the validator was a bonded + + in a block and may have signed a precommit or not. This in + conjunction with the + + `SignedBlocksWindow` param determines the index in the + `MissedBlocksBitArray`. jailed_until: type: string format: date-time - title: timestamp validator cannot be unjailed until + description: >- + Timestamp until which the validator is jailed due to liveness + downtime. tombstoned: type: boolean - title: >- - whether or not a validator has been tombstoned (killed out of - validator + format: boolean + description: >- + Whether or not a validator has been tombstoned (killed out of + validator set). It is set - set) + once the validator commits an equivocation or for any other + configured misbehiavor. missed_blocks_counter: type: string format: int64 - title: missed blocks counter (to avoid scanning the array every time) + description: >- + A counter kept to avoid unnecessary array reads. + + Note that `Sum(MissedBlocksBitArray)` always equals + `MissedBlocksCounter`. description: >- ValidatorSigningInfo defines a validator's signing info for monitoring their liveness activity. + title: val_signing_info is the signing info of requested val cons address title: >- QuerySigningInfoResponse is the response type for the Query/SigningInfo RPC @@ -32965,26 +38642,41 @@ definitions: start_height: type: string format: int64 - title: height at which validator was first a candidate OR was unjailed + title: Height at which validator was first a candidate OR was unjailed index_offset: type: string format: int64 - title: index offset into signed block bit array + description: >- + Index which is incremented each time the validator was a bonded + + in a block and may have signed a precommit or not. This in + conjunction with the + + `SignedBlocksWindow` param determines the index in the + `MissedBlocksBitArray`. jailed_until: type: string format: date-time - title: timestamp validator cannot be unjailed until + description: >- + Timestamp until which the validator is jailed due to liveness + downtime. tombstoned: type: boolean - title: >- - whether or not a validator has been tombstoned (killed out of - validator + format: boolean + description: >- + Whether or not a validator has been tombstoned (killed out of + validator set). It is set - set) + once the validator commits an equivocation or for any other + configured misbehiavor. missed_blocks_counter: type: string format: int64 - title: missed blocks counter (to avoid scanning the array every time) + description: >- + A counter kept to avoid unnecessary array reads. + + Note that `Sum(MissedBlocksBitArray)` always equals + `MissedBlocksCounter`. description: >- ValidatorSigningInfo defines a validator's signing info for monitoring their @@ -33029,26 +38721,41 @@ definitions: start_height: type: string format: int64 - title: height at which validator was first a candidate OR was unjailed + title: Height at which validator was first a candidate OR was unjailed index_offset: type: string format: int64 - title: index offset into signed block bit array + description: >- + Index which is incremented each time the validator was a bonded + + in a block and may have signed a precommit or not. This in conjunction + with the + + `SignedBlocksWindow` param determines the index in the + `MissedBlocksBitArray`. jailed_until: type: string format: date-time - title: timestamp validator cannot be unjailed until + description: >- + Timestamp until which the validator is jailed due to liveness + downtime. tombstoned: type: boolean - title: >- - whether or not a validator has been tombstoned (killed out of - validator + format: boolean + description: >- + Whether or not a validator has been tombstoned (killed out of + validator set). It is set - set) + once the validator commits an equivocation or for any other configured + misbehiavor. missed_blocks_counter: type: string format: int64 - title: missed blocks counter (to avoid scanning the array every time) + description: >- + A counter kept to avoid unnecessary array reads. + + Note that `Sum(MissedBlocksBitArray)` always equals + `MissedBlocksCounter`. description: >- ValidatorSigningInfo defines a validator's signing info for monitoring their @@ -33073,32 +38780,45 @@ definitions: type: object properties: commission_rates: + description: >- + commission_rates defines the initial commission rates to be used for + creating a validator. type: object properties: rate: type: string + description: 'rate is the commission rate charged to delegators, as a fraction.' max_rate: type: string + description: >- + max_rate defines the maximum commission rate which validator can + ever charge, as a fraction. max_change_rate: type: string - description: >- - CommissionRates defines the initial commission rates to be used for - creating - - a validator. + description: >- + max_change_rate defines the maximum daily increase of the + validator commission, as a fraction. update_time: type: string format: date-time + description: update_time is the last time the commission rate was changed. description: Commission defines commission parameters for a given validator. cosmos.staking.v1beta1.CommissionRates: type: object properties: rate: type: string + description: 'rate is the commission rate charged to delegators, as a fraction.' max_rate: type: string + description: >- + max_rate defines the maximum commission rate which validator can ever + charge, as a fraction. max_change_rate: type: string + description: >- + max_change_rate defines the maximum daily increase of the validator + commission, as a fraction. description: >- CommissionRates defines the initial commission rates to be used for creating @@ -33109,10 +38829,13 @@ definitions: properties: delegator_address: type: string + description: delegator_address is the bech32-encoded address of the delegator. validator_address: type: string + description: validator_address is the bech32-encoded address of the validator. shares: type: string + description: shares define the delegation shares received. description: |- Delegation represents the bond with tokens held by an account. It is owned by one delegator, and is associated with the voting power of one @@ -33125,10 +38848,13 @@ definitions: properties: delegator_address: type: string + description: delegator_address is the bech32-encoded address of the delegator. validator_address: type: string + description: validator_address is the bech32-encoded address of the validator. shares: type: string + description: shares define the delegation shares received. description: |- Delegation represents the bond with tokens held by an account. It is owned by one delegator, and is associated with the voting power of one @@ -33153,14 +38879,21 @@ definitions: properties: moniker: type: string + description: moniker defines a human-readable name for the validator. identity: type: string + description: >- + identity defines an optional identity signature (ex. UPort or + Keybase). website: type: string + description: website defines an optional website link. security_contact: type: string + description: security_contact defines an optional email for security contact. details: type: string + description: details define other optional details. description: Description defines a validator description. cosmos.staking.v1beta1.HistoricalInfo: type: object @@ -33249,6 +38982,9 @@ definitions: properties: operator_address: type: string + description: >- + operator_address defines the address of the validator's + operator; bech encoded in JSON. consensus_pubkey: type: object properties: @@ -33420,7 +39156,12 @@ definitions: } jailed: type: boolean + format: boolean + description: >- + jailed defined whether the validator has been jailed from bonded + status or not. status: + description: status is the validator status (bonded/unbonding/unbonded). type: string enum: - BOND_STATUS_UNSPECIFIED @@ -33428,60 +39169,85 @@ definitions: - BOND_STATUS_UNBONDING - BOND_STATUS_BONDED default: BOND_STATUS_UNSPECIFIED - description: |- - BondStatus is the status of a validator. - - - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status. - - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded. - - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding. - - BOND_STATUS_BONDED: BONDED defines a validator that is bonded. tokens: type: string + description: tokens define the delegated tokens (incl. self-delegation). delegator_shares: type: string + description: >- + delegator_shares defines total shares issued to a validator's + delegators. description: + description: description defines the description terms for the validator. type: object properties: moniker: type: string + description: moniker defines a human-readable name for the validator. identity: type: string + description: >- + identity defines an optional identity signature (ex. UPort + or Keybase). website: type: string + description: website defines an optional website link. security_contact: type: string + description: >- + security_contact defines an optional email for security + contact. details: type: string - description: Description defines a validator description. + description: details define other optional details. unbonding_height: type: string format: int64 + description: >- + unbonding_height defines, if unbonding, the height at which this + validator has begun unbonding. unbonding_time: type: string format: date-time + description: >- + unbonding_time defines, if unbonding, the min time for the + validator to complete unbonding. commission: + description: commission defines the commission parameters. type: object properties: commission_rates: + description: >- + commission_rates defines the initial commission rates to be + used for creating a validator. type: object properties: rate: type: string + description: >- + rate is the commission rate charged to delegators, as a + fraction. max_rate: type: string + description: >- + max_rate defines the maximum commission rate which + validator can ever charge, as a fraction. max_change_rate: type: string - description: >- - CommissionRates defines the initial commission rates to be - used for creating - - a validator. + description: >- + max_change_rate defines the maximum daily increase of + the validator commission, as a fraction. update_time: type: string format: date-time - description: Commission defines commission parameters for a given validator. + description: >- + update_time is the last time the commission rate was + changed. min_self_delegation: type: string + description: >- + min_self_delegation is the validator's self declared minimum + self delegation. description: >- Validator defines a validator, together with the total amount of the @@ -33518,17 +39284,24 @@ definitions: properties: unbonding_time: type: string + description: unbonding_time is the time duration of unbonding. max_validators: type: integer format: int64 + description: max_validators is the maximum number of validators. max_entries: type: integer format: int64 + description: >- + max_entries is the max entries for either unbonding delegation or + redelegation (per pair/trio). historical_entries: type: integer format: int64 + description: historical_entries is the number of historical entries to persist. bond_denom: type: string + description: bond_denom defines the bondable coin denomination. description: Params defines the parameters for the staking module. cosmos.staking.v1beta1.Pool: type: object @@ -33544,7 +39317,6 @@ definitions: type: object properties: delegation_response: - description: delegation_responses defines the delegation info of a delegation. type: object properties: delegation: @@ -33552,10 +39324,17 @@ definitions: properties: delegator_address: type: string + description: >- + delegator_address is the bech32-encoded address of the + delegator. validator_address: type: string + description: >- + validator_address is the bech32-encoded address of the + validator. shares: type: string + description: shares define the delegation shares received. description: >- Delegation represents the bond with tokens held by an account. It is @@ -33579,6 +39358,12 @@ definitions: method signatures required by gogoproto. + description: >- + DelegationResponse is equivalent to Delegation except that it contains + a + + balance in addition to shares which is more suitable for client + responses. description: >- QueryDelegationResponse is response type for the Query/Delegation RPC method. @@ -33595,10 +39380,17 @@ definitions: properties: delegator_address: type: string + description: >- + delegator_address is the bech32-encoded address of the + delegator. validator_address: type: string + description: >- + validator_address is the bech32-encoded address of the + validator. shares: type: string + description: shares define the delegation shares received. description: >- Delegation represents the bond with tokens held by an account. It is @@ -33660,8 +39452,14 @@ definitions: properties: delegator_address: type: string + description: >- + delegator_address is the bech32-encoded address of the + delegator. validator_address: type: string + description: >- + validator_address is the bech32-encoded address of the + validator. entries: type: array items: @@ -33670,16 +39468,25 @@ definitions: creation_height: type: string format: int64 + description: >- + creation_height is the height which the unbonding took + place. completion_time: type: string format: date-time + description: completion_time is the unix time for unbonding completion. initial_balance: type: string + description: >- + initial_balance defines the tokens initially scheduled to + receive at completion. balance: type: string + description: balance defines the tokens to receive at completion. description: >- UnbondingDelegationEntry defines an unbonding object with relevant metadata. + description: entries are the unbonding delegation entries. description: >- UnbondingDelegation stores all of a single delegator's unbonding bonds @@ -33710,11 +39517,13 @@ definitions: type: object properties: validator: - description: validator defines the the validator info. type: object properties: operator_address: type: string + description: >- + operator_address defines the address of the validator's operator; + bech encoded in JSON. consensus_pubkey: type: object properties: @@ -33882,7 +39691,12 @@ definitions: } jailed: type: boolean + format: boolean + description: >- + jailed defined whether the validator has been jailed from bonded + status or not. status: + description: status is the validator status (bonded/unbonding/unbonded). type: string enum: - BOND_STATUS_UNSPECIFIED @@ -33890,60 +39704,104 @@ definitions: - BOND_STATUS_UNBONDING - BOND_STATUS_BONDED default: BOND_STATUS_UNSPECIFIED - description: |- - BondStatus is the status of a validator. - - - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status. - - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded. - - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding. - - BOND_STATUS_BONDED: BONDED defines a validator that is bonded. tokens: type: string + description: tokens define the delegated tokens (incl. self-delegation). delegator_shares: type: string + description: >- + delegator_shares defines total shares issued to a validator's + delegators. description: + description: description defines the description terms for the validator. type: object properties: moniker: type: string + description: moniker defines a human-readable name for the validator. identity: type: string + description: >- + identity defines an optional identity signature (ex. UPort or + Keybase). website: type: string + description: website defines an optional website link. security_contact: type: string + description: >- + security_contact defines an optional email for security + contact. details: type: string - description: Description defines a validator description. + description: details define other optional details. unbonding_height: type: string format: int64 + description: >- + unbonding_height defines, if unbonding, the height at which this + validator has begun unbonding. unbonding_time: type: string format: date-time + description: >- + unbonding_time defines, if unbonding, the min time for the + validator to complete unbonding. commission: + description: commission defines the commission parameters. type: object properties: commission_rates: + description: >- + commission_rates defines the initial commission rates to be + used for creating a validator. type: object properties: rate: type: string + description: >- + rate is the commission rate charged to delegators, as a + fraction. max_rate: type: string + description: >- + max_rate defines the maximum commission rate which + validator can ever charge, as a fraction. max_change_rate: type: string - description: >- - CommissionRates defines the initial commission rates to be - used for creating - - a validator. + description: >- + max_change_rate defines the maximum daily increase of the + validator commission, as a fraction. update_time: type: string format: date-time - description: Commission defines commission parameters for a given validator. + description: update_time is the last time the commission rate was changed. min_self_delegation: type: string + description: >- + min_self_delegation is the validator's self declared minimum self + delegation. + description: >- + Validator defines a validator, together with the total amount of the + + Validator's bond shares and their exchange rate to coins. Slashing + results in + + a decrease in the exchange rate, allowing correct calculation of + future + + undelegations without iterating over delegators. When coins are + delegated to + + this validator, the validator is credited with a delegation whose + number of + + bond shares is based on the amount of coins delegated divided by the + current + + exchange rate. Voting power can be calculated as total bonded shares + + multiplied by exchange rate. description: |- QueryDelegatorValidatorResponse response type for the Query/DelegatorValidator RPC method. @@ -33957,6 +39815,9 @@ definitions: properties: operator_address: type: string + description: >- + operator_address defines the address of the validator's + operator; bech encoded in JSON. consensus_pubkey: type: object properties: @@ -34128,7 +39989,12 @@ definitions: } jailed: type: boolean + format: boolean + description: >- + jailed defined whether the validator has been jailed from bonded + status or not. status: + description: status is the validator status (bonded/unbonding/unbonded). type: string enum: - BOND_STATUS_UNSPECIFIED @@ -34136,60 +40002,85 @@ definitions: - BOND_STATUS_UNBONDING - BOND_STATUS_BONDED default: BOND_STATUS_UNSPECIFIED - description: |- - BondStatus is the status of a validator. - - - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status. - - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded. - - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding. - - BOND_STATUS_BONDED: BONDED defines a validator that is bonded. tokens: type: string + description: tokens define the delegated tokens (incl. self-delegation). delegator_shares: type: string + description: >- + delegator_shares defines total shares issued to a validator's + delegators. description: + description: description defines the description terms for the validator. type: object properties: moniker: type: string + description: moniker defines a human-readable name for the validator. identity: type: string + description: >- + identity defines an optional identity signature (ex. UPort + or Keybase). website: type: string + description: website defines an optional website link. security_contact: type: string + description: >- + security_contact defines an optional email for security + contact. details: type: string - description: Description defines a validator description. + description: details define other optional details. unbonding_height: type: string format: int64 + description: >- + unbonding_height defines, if unbonding, the height at which this + validator has begun unbonding. unbonding_time: type: string format: date-time + description: >- + unbonding_time defines, if unbonding, the min time for the + validator to complete unbonding. commission: + description: commission defines the commission parameters. type: object properties: commission_rates: + description: >- + commission_rates defines the initial commission rates to be + used for creating a validator. type: object properties: rate: type: string + description: >- + rate is the commission rate charged to delegators, as a + fraction. max_rate: type: string + description: >- + max_rate defines the maximum commission rate which + validator can ever charge, as a fraction. max_change_rate: type: string - description: >- - CommissionRates defines the initial commission rates to be - used for creating - - a validator. + description: >- + max_change_rate defines the maximum daily increase of + the validator commission, as a fraction. update_time: type: string format: date-time - description: Commission defines commission parameters for a given validator. + description: >- + update_time is the last time the commission rate was + changed. min_self_delegation: type: string + description: >- + min_self_delegation is the validator's self declared minimum + self delegation. description: >- Validator defines a validator, together with the total amount of the @@ -34324,6 +40215,9 @@ definitions: properties: operator_address: type: string + description: >- + operator_address defines the address of the validator's + operator; bech encoded in JSON. consensus_pubkey: type: object properties: @@ -34501,7 +40395,12 @@ definitions: } jailed: type: boolean + format: boolean + description: >- + jailed defined whether the validator has been jailed from + bonded status or not. status: + description: status is the validator status (bonded/unbonding/unbonded). type: string enum: - BOND_STATUS_UNSPECIFIED @@ -34509,62 +40408,85 @@ definitions: - BOND_STATUS_UNBONDING - BOND_STATUS_BONDED default: BOND_STATUS_UNSPECIFIED - description: |- - BondStatus is the status of a validator. - - - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status. - - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded. - - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding. - - BOND_STATUS_BONDED: BONDED defines a validator that is bonded. tokens: type: string + description: tokens define the delegated tokens (incl. self-delegation). delegator_shares: type: string + description: >- + delegator_shares defines total shares issued to a + validator's delegators. description: + description: description defines the description terms for the validator. type: object properties: moniker: type: string + description: moniker defines a human-readable name for the validator. identity: type: string + description: >- + identity defines an optional identity signature (ex. + UPort or Keybase). website: type: string + description: website defines an optional website link. security_contact: type: string + description: >- + security_contact defines an optional email for security + contact. details: type: string - description: Description defines a validator description. + description: details define other optional details. unbonding_height: type: string format: int64 + description: >- + unbonding_height defines, if unbonding, the height at which + this validator has begun unbonding. unbonding_time: type: string format: date-time + description: >- + unbonding_time defines, if unbonding, the min time for the + validator to complete unbonding. commission: + description: commission defines the commission parameters. type: object properties: commission_rates: + description: >- + commission_rates defines the initial commission rates to + be used for creating a validator. type: object properties: rate: type: string + description: >- + rate is the commission rate charged to delegators, + as a fraction. max_rate: type: string + description: >- + max_rate defines the maximum commission rate which + validator can ever charge, as a fraction. max_change_rate: type: string - description: >- - CommissionRates defines the initial commission rates to - be used for creating - - a validator. + description: >- + max_change_rate defines the maximum daily increase + of the validator commission, as a fraction. update_time: type: string format: date-time - description: >- - Commission defines commission parameters for a given - validator. + description: >- + update_time is the last time the commission rate was + changed. min_self_delegation: type: string + description: >- + min_self_delegation is the validator's self declared minimum + self delegation. description: >- Validator defines a validator, together with the total amount of the @@ -34602,17 +40524,24 @@ definitions: properties: unbonding_time: type: string + description: unbonding_time is the time duration of unbonding. max_validators: type: integer format: int64 + description: max_validators is the maximum number of validators. max_entries: type: integer format: int64 + description: >- + max_entries is the max entries for either unbonding delegation or + redelegation (per pair/trio). historical_entries: type: integer format: int64 + description: historical_entries is the number of historical entries to persist. bond_denom: type: string + description: bond_denom defines the bondable coin denomination. description: QueryParamsResponse is response type for the Query/Params RPC method. cosmos.staking.v1beta1.QueryPoolResponse: type: object @@ -34639,10 +40568,19 @@ definitions: properties: delegator_address: type: string + description: >- + delegator_address is the bech32-encoded address of the + delegator. validator_src_address: type: string + description: >- + validator_src_address is the validator redelegation source + operator address. validator_dst_address: type: string + description: >- + validator_dst_address is the validator redelegation + destination operator address. entries: type: array items: @@ -34651,16 +40589,29 @@ definitions: creation_height: type: string format: int64 + description: >- + creation_height defines the height which the + redelegation took place. completion_time: type: string format: date-time + description: >- + completion_time defines the unix time for redelegation + completion. initial_balance: type: string + description: >- + initial_balance defines the initial balance when + redelegation started. shares_dst: type: string + description: >- + shares_dst is the amount of destination-validator + shares created by redelegation. description: >- RedelegationEntry defines a redelegation object with relevant metadata. + description: entries are the redelegation entries. description: >- Redelegation contains the list of a particular delegator's redelegating bonds @@ -34678,13 +40629,25 @@ definitions: creation_height: type: string format: int64 + description: >- + creation_height defines the height which the + redelegation took place. completion_time: type: string format: date-time + description: >- + completion_time defines the unix time for redelegation + completion. initial_balance: type: string + description: >- + initial_balance defines the initial balance when + redelegation started. shares_dst: type: string + description: >- + shares_dst is the amount of destination-validator + shares created by redelegation. description: >- RedelegationEntry defines a redelegation object with relevant metadata. @@ -34733,13 +40696,14 @@ definitions: type: object properties: unbond: - description: unbond defines the unbonding information of a delegation. type: object properties: delegator_address: type: string + description: delegator_address is the bech32-encoded address of the delegator. validator_address: type: string + description: validator_address is the bech32-encoded address of the validator. entries: type: array items: @@ -34748,16 +40712,28 @@ definitions: creation_height: type: string format: int64 + description: >- + creation_height is the height which the unbonding took + place. completion_time: type: string format: date-time + description: completion_time is the unix time for unbonding completion. initial_balance: type: string + description: >- + initial_balance defines the tokens initially scheduled to + receive at completion. balance: type: string + description: balance defines the tokens to receive at completion. description: >- UnbondingDelegationEntry defines an unbonding object with relevant metadata. + description: entries are the unbonding delegation entries. + description: |- + UnbondingDelegation stores all of a single delegator's unbonding bonds + for a single validator in an time-ordered list. description: |- QueryDelegationResponse is response type for the Query/UnbondingDelegation RPC method. @@ -34774,10 +40750,17 @@ definitions: properties: delegator_address: type: string + description: >- + delegator_address is the bech32-encoded address of the + delegator. validator_address: type: string + description: >- + validator_address is the bech32-encoded address of the + validator. shares: type: string + description: shares define the delegation shares received. description: >- Delegation represents the bond with tokens held by an account. It is @@ -34832,11 +40815,13 @@ definitions: type: object properties: validator: - description: validator defines the the validator info. type: object properties: operator_address: type: string + description: >- + operator_address defines the address of the validator's operator; + bech encoded in JSON. consensus_pubkey: type: object properties: @@ -35004,7 +40989,12 @@ definitions: } jailed: type: boolean + format: boolean + description: >- + jailed defined whether the validator has been jailed from bonded + status or not. status: + description: status is the validator status (bonded/unbonding/unbonded). type: string enum: - BOND_STATUS_UNSPECIFIED @@ -35012,60 +41002,104 @@ definitions: - BOND_STATUS_UNBONDING - BOND_STATUS_BONDED default: BOND_STATUS_UNSPECIFIED - description: |- - BondStatus is the status of a validator. - - - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status. - - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded. - - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding. - - BOND_STATUS_BONDED: BONDED defines a validator that is bonded. tokens: type: string + description: tokens define the delegated tokens (incl. self-delegation). delegator_shares: type: string + description: >- + delegator_shares defines total shares issued to a validator's + delegators. description: + description: description defines the description terms for the validator. type: object properties: moniker: type: string + description: moniker defines a human-readable name for the validator. identity: type: string + description: >- + identity defines an optional identity signature (ex. UPort or + Keybase). website: type: string + description: website defines an optional website link. security_contact: type: string + description: >- + security_contact defines an optional email for security + contact. details: type: string - description: Description defines a validator description. + description: details define other optional details. unbonding_height: type: string format: int64 + description: >- + unbonding_height defines, if unbonding, the height at which this + validator has begun unbonding. unbonding_time: type: string format: date-time + description: >- + unbonding_time defines, if unbonding, the min time for the + validator to complete unbonding. commission: + description: commission defines the commission parameters. type: object properties: commission_rates: + description: >- + commission_rates defines the initial commission rates to be + used for creating a validator. type: object properties: rate: type: string + description: >- + rate is the commission rate charged to delegators, as a + fraction. max_rate: type: string + description: >- + max_rate defines the maximum commission rate which + validator can ever charge, as a fraction. max_change_rate: type: string - description: >- - CommissionRates defines the initial commission rates to be - used for creating - - a validator. + description: >- + max_change_rate defines the maximum daily increase of the + validator commission, as a fraction. update_time: type: string format: date-time - description: Commission defines commission parameters for a given validator. + description: update_time is the last time the commission rate was changed. min_self_delegation: type: string + description: >- + min_self_delegation is the validator's self declared minimum self + delegation. + description: >- + Validator defines a validator, together with the total amount of the + + Validator's bond shares and their exchange rate to coins. Slashing + results in + + a decrease in the exchange rate, allowing correct calculation of + future + + undelegations without iterating over delegators. When coins are + delegated to + + this validator, the validator is credited with a delegation whose + number of + + bond shares is based on the amount of coins delegated divided by the + current + + exchange rate. Voting power can be calculated as total bonded shares + + multiplied by exchange rate. title: QueryValidatorResponse is response type for the Query/Validator RPC method cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse: type: object @@ -35077,8 +41111,14 @@ definitions: properties: delegator_address: type: string + description: >- + delegator_address is the bech32-encoded address of the + delegator. validator_address: type: string + description: >- + validator_address is the bech32-encoded address of the + validator. entries: type: array items: @@ -35087,16 +41127,25 @@ definitions: creation_height: type: string format: int64 + description: >- + creation_height is the height which the unbonding took + place. completion_time: type: string format: date-time + description: completion_time is the unix time for unbonding completion. initial_balance: type: string + description: >- + initial_balance defines the tokens initially scheduled to + receive at completion. balance: type: string + description: balance defines the tokens to receive at completion. description: >- UnbondingDelegationEntry defines an unbonding object with relevant metadata. + description: entries are the unbonding delegation entries. description: >- UnbondingDelegation stores all of a single delegator's unbonding bonds @@ -35133,6 +41182,9 @@ definitions: properties: operator_address: type: string + description: >- + operator_address defines the address of the validator's + operator; bech encoded in JSON. consensus_pubkey: type: object properties: @@ -35304,7 +41356,12 @@ definitions: } jailed: type: boolean + format: boolean + description: >- + jailed defined whether the validator has been jailed from bonded + status or not. status: + description: status is the validator status (bonded/unbonding/unbonded). type: string enum: - BOND_STATUS_UNSPECIFIED @@ -35312,60 +41369,85 @@ definitions: - BOND_STATUS_UNBONDING - BOND_STATUS_BONDED default: BOND_STATUS_UNSPECIFIED - description: |- - BondStatus is the status of a validator. - - - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status. - - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded. - - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding. - - BOND_STATUS_BONDED: BONDED defines a validator that is bonded. tokens: type: string + description: tokens define the delegated tokens (incl. self-delegation). delegator_shares: type: string + description: >- + delegator_shares defines total shares issued to a validator's + delegators. description: + description: description defines the description terms for the validator. type: object properties: moniker: type: string + description: moniker defines a human-readable name for the validator. identity: type: string + description: >- + identity defines an optional identity signature (ex. UPort + or Keybase). website: type: string + description: website defines an optional website link. security_contact: type: string + description: >- + security_contact defines an optional email for security + contact. details: type: string - description: Description defines a validator description. + description: details define other optional details. unbonding_height: type: string format: int64 + description: >- + unbonding_height defines, if unbonding, the height at which this + validator has begun unbonding. unbonding_time: type: string format: date-time + description: >- + unbonding_time defines, if unbonding, the min time for the + validator to complete unbonding. commission: + description: commission defines the commission parameters. type: object properties: commission_rates: + description: >- + commission_rates defines the initial commission rates to be + used for creating a validator. type: object properties: rate: type: string + description: >- + rate is the commission rate charged to delegators, as a + fraction. max_rate: type: string + description: >- + max_rate defines the maximum commission rate which + validator can ever charge, as a fraction. max_change_rate: type: string - description: >- - CommissionRates defines the initial commission rates to be - used for creating - - a validator. + description: >- + max_change_rate defines the maximum daily increase of + the validator commission, as a fraction. update_time: type: string format: date-time - description: Commission defines commission parameters for a given validator. + description: >- + update_time is the last time the commission rate was + changed. min_self_delegation: type: string + description: >- + min_self_delegation is the validator's self declared minimum + self delegation. description: >- Validator defines a validator, together with the total amount of the @@ -35414,10 +41496,17 @@ definitions: properties: delegator_address: type: string + description: delegator_address is the bech32-encoded address of the delegator. validator_src_address: type: string + description: >- + validator_src_address is the validator redelegation source operator + address. validator_dst_address: type: string + description: >- + validator_dst_address is the validator redelegation destination + operator address. entries: type: array items: @@ -35426,16 +41515,29 @@ definitions: creation_height: type: string format: int64 + description: >- + creation_height defines the height which the redelegation took + place. completion_time: type: string format: date-time + description: >- + completion_time defines the unix time for redelegation + completion. initial_balance: type: string + description: >- + initial_balance defines the initial balance when redelegation + started. shares_dst: type: string + description: >- + shares_dst is the amount of destination-validator shares created + by redelegation. description: >- RedelegationEntry defines a redelegation object with relevant metadata. + description: entries are the redelegation entries. description: >- Redelegation contains the list of a particular delegator's redelegating bonds @@ -35447,13 +41549,19 @@ definitions: creation_height: type: string format: int64 + description: creation_height defines the height which the redelegation took place. completion_time: type: string format: date-time + description: completion_time defines the unix time for redelegation completion. initial_balance: type: string + description: initial_balance defines the initial balance when redelegation started. shares_dst: type: string + description: >- + shares_dst is the amount of destination-validator shares created by + redelegation. description: RedelegationEntry defines a redelegation object with relevant metadata. cosmos.staking.v1beta1.RedelegationEntryResponse: type: object @@ -35464,13 +41572,23 @@ definitions: creation_height: type: string format: int64 + description: >- + creation_height defines the height which the redelegation took + place. completion_time: type: string format: date-time + description: completion_time defines the unix time for redelegation completion. initial_balance: type: string + description: >- + initial_balance defines the initial balance when redelegation + started. shares_dst: type: string + description: >- + shares_dst is the amount of destination-validator shares created + by redelegation. description: >- RedelegationEntry defines a redelegation object with relevant metadata. @@ -35491,10 +41609,17 @@ definitions: properties: delegator_address: type: string + description: delegator_address is the bech32-encoded address of the delegator. validator_src_address: type: string + description: >- + validator_src_address is the validator redelegation source + operator address. validator_dst_address: type: string + description: >- + validator_dst_address is the validator redelegation destination + operator address. entries: type: array items: @@ -35503,16 +41628,29 @@ definitions: creation_height: type: string format: int64 + description: >- + creation_height defines the height which the redelegation + took place. completion_time: type: string format: date-time + description: >- + completion_time defines the unix time for redelegation + completion. initial_balance: type: string + description: >- + initial_balance defines the initial balance when + redelegation started. shares_dst: type: string + description: >- + shares_dst is the amount of destination-validator shares + created by redelegation. description: >- RedelegationEntry defines a redelegation object with relevant metadata. + description: entries are the redelegation entries. description: >- Redelegation contains the list of a particular delegator's redelegating bonds @@ -35530,13 +41668,25 @@ definitions: creation_height: type: string format: int64 + description: >- + creation_height defines the height which the redelegation + took place. completion_time: type: string format: date-time + description: >- + completion_time defines the unix time for redelegation + completion. initial_balance: type: string + description: >- + initial_balance defines the initial balance when + redelegation started. shares_dst: type: string + description: >- + shares_dst is the amount of destination-validator shares + created by redelegation. description: >- RedelegationEntry defines a redelegation object with relevant metadata. @@ -35562,8 +41712,10 @@ definitions: properties: delegator_address: type: string + description: delegator_address is the bech32-encoded address of the delegator. validator_address: type: string + description: validator_address is the bech32-encoded address of the validator. entries: type: array items: @@ -35572,16 +41724,23 @@ definitions: creation_height: type: string format: int64 + description: creation_height is the height which the unbonding took place. completion_time: type: string format: date-time + description: completion_time is the unix time for unbonding completion. initial_balance: type: string + description: >- + initial_balance defines the tokens initially scheduled to + receive at completion. balance: type: string + description: balance defines the tokens to receive at completion. description: >- UnbondingDelegationEntry defines an unbonding object with relevant metadata. + description: entries are the unbonding delegation entries. description: |- UnbondingDelegation stores all of a single delegator's unbonding bonds for a single validator in an time-ordered list. @@ -35591,13 +41750,19 @@ definitions: creation_height: type: string format: int64 + description: creation_height is the height which the unbonding took place. completion_time: type: string format: date-time + description: completion_time is the unix time for unbonding completion. initial_balance: type: string + description: >- + initial_balance defines the tokens initially scheduled to receive at + completion. balance: type: string + description: balance defines the tokens to receive at completion. description: >- UnbondingDelegationEntry defines an unbonding object with relevant metadata. @@ -35606,6 +41771,9 @@ definitions: properties: operator_address: type: string + description: >- + operator_address defines the address of the validator's operator; bech + encoded in JSON. consensus_pubkey: type: object properties: @@ -35767,7 +41935,12 @@ definitions: } jailed: type: boolean + format: boolean + description: >- + jailed defined whether the validator has been jailed from bonded + status or not. status: + description: status is the validator status (bonded/unbonding/unbonded). type: string enum: - BOND_STATUS_UNSPECIFIED @@ -35775,60 +41948,81 @@ definitions: - BOND_STATUS_UNBONDING - BOND_STATUS_BONDED default: BOND_STATUS_UNSPECIFIED - description: |- - BondStatus is the status of a validator. - - - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status. - - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded. - - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding. - - BOND_STATUS_BONDED: BONDED defines a validator that is bonded. tokens: type: string + description: tokens define the delegated tokens (incl. self-delegation). delegator_shares: type: string + description: >- + delegator_shares defines total shares issued to a validator's + delegators. description: + description: description defines the description terms for the validator. type: object properties: moniker: type: string + description: moniker defines a human-readable name for the validator. identity: type: string + description: >- + identity defines an optional identity signature (ex. UPort or + Keybase). website: type: string + description: website defines an optional website link. security_contact: type: string + description: security_contact defines an optional email for security contact. details: type: string - description: Description defines a validator description. + description: details define other optional details. unbonding_height: type: string format: int64 + description: >- + unbonding_height defines, if unbonding, the height at which this + validator has begun unbonding. unbonding_time: type: string format: date-time + description: >- + unbonding_time defines, if unbonding, the min time for the validator + to complete unbonding. commission: + description: commission defines the commission parameters. type: object properties: commission_rates: + description: >- + commission_rates defines the initial commission rates to be used + for creating a validator. type: object properties: rate: type: string + description: >- + rate is the commission rate charged to delegators, as a + fraction. max_rate: type: string + description: >- + max_rate defines the maximum commission rate which validator + can ever charge, as a fraction. max_change_rate: type: string - description: >- - CommissionRates defines the initial commission rates to be used - for creating - - a validator. + description: >- + max_change_rate defines the maximum daily increase of the + validator commission, as a fraction. update_time: type: string format: date-time - description: Commission defines commission parameters for a given validator. + description: update_time is the last time the commission rate was changed. min_self_delegation: type: string + description: >- + min_self_delegation is the validator's self declared minimum self + delegation. description: >- Validator defines a validator, together with the total amount of the @@ -35849,182 +42043,223 @@ definitions: exchange rate. Voting power can be calculated as total bonded shares multiplied by exchange rate. - tendermint.types.BlockID: - type: object - properties: - hash: - type: string - format: byte - part_set_header: - type: object - properties: - total: - type: integer - format: int64 - hash: - type: string - format: byte - title: PartsetHeader - title: BlockID - tendermint.types.Header: + cosmos.base.abci.v1beta1.ABCIMessageLog: type: object properties: - version: - title: basic block info - type: object - properties: - block: - type: string - format: uint64 - app: - type: string - format: uint64 - description: >- - Consensus captures the consensus rules for processing a block in the - blockchain, - - including all blockchain data structures and the rules of the - application's - - state transition machine. - chain_id: - type: string - height: - type: string + msg_index: + type: integer format: int64 - time: - type: string - format: date-time - last_block_id: - title: prev block info - type: object - properties: - hash: - type: string - format: byte - part_set_header: - type: object - properties: - total: - type: integer - format: int64 - hash: - type: string - format: byte - title: PartsetHeader - last_commit_hash: - type: string - format: byte - title: hashes of block data - data_hash: - type: string - format: byte - validators_hash: - type: string - format: byte - title: hashes from the app output from the prev block - next_validators_hash: - type: string - format: byte - consensus_hash: - type: string - format: byte - app_hash: - type: string - format: byte - last_results_hash: - type: string - format: byte - evidence_hash: - type: string - format: byte - title: consensus info - proposer_address: + log: type: string - format: byte - description: Header defines the structure of a Tendermint block header. - tendermint.types.PartSetHeader: + events: + type: array + items: + type: object + properties: + type: + type: string + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + description: >- + Attribute defines an attribute wrapper where the key and value + are + + strings instead of raw bytes. + description: |- + StringEvent defines en Event object wrapper where all the attributes + contain key/value pairs that are strings instead of raw bytes. + description: |- + Events contains a slice of Event objects that were emitted during some + execution. + description: >- + ABCIMessageLog defines a structure containing an indexed tx ABCI message + log. + cosmos.base.abci.v1beta1.Attribute: type: object properties: - total: - type: integer - format: int64 - hash: + key: type: string - format: byte - title: PartsetHeader - tendermint.version.Consensus: + value: + type: string + description: |- + Attribute defines an attribute wrapper where the key and value are + strings instead of raw bytes. + cosmos.base.abci.v1beta1.GasInfo: type: object properties: - block: + gas_wanted: type: string format: uint64 - app: + description: GasWanted is the maximum units of work we allow this tx to perform. + gas_used: type: string format: uint64 - description: >- - Consensus captures the consensus rules for processing a block in the - blockchain, - - including all blockchain data structures and the rules of the - application's - - state transition machine. - cosmos.upgrade.v1beta1.Plan: + description: GasUsed is the amount of gas actually consumed. + description: GasInfo defines tx execution gas context. + cosmos.base.abci.v1beta1.Result: type: object properties: - name: + data: type: string + format: byte description: >- - Sets the name for the upgrade. This name will be used by the upgraded - - version of the software to apply any special "on-upgrade" commands - during - - the first BeginBlock method after the upgrade is applied. It is also - used + Data is any data returned from message or handler execution. It MUST + be - to detect whether a software version can handle a given upgrade. If no + length prefixed in order to separate data from multiple message + executions. + log: + type: string + description: Log contains the log information from message or handler execution. + events: + type: array + items: + type: object + properties: + type: + type: string + attributes: + type: array + items: + type: object + properties: + key: + type: string + format: byte + value: + type: string + format: byte + index: + type: boolean + format: boolean + description: >- + EventAttribute is a single key-value pair, associated with an + event. + description: >- + Event allows application developers to attach additional information + to - upgrade handler with this name has been set in the software, it will - be + ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and + ResponseDeliverTx. - assumed that the software is out-of-date when the upgrade Time or - Height is + Later, transactions may be queried using these events. + description: >- + Events contains a slice of Event objects that were emitted during + message - reached and the software will exit. - time: + or handler execution. + description: Result is the union of ResponseFormat and ResponseCheckTx. + cosmos.base.abci.v1beta1.StringEvent: + type: object + properties: + type: type: string - format: date-time - description: |- - The time after which the upgrade must be performed. - Leave set to its zero value to use a pre-defined Height instead. + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + description: |- + Attribute defines an attribute wrapper where the key and value are + strings instead of raw bytes. + description: |- + StringEvent defines en Event object wrapper where all the attributes + contain key/value pairs that are strings instead of raw bytes. + cosmos.base.abci.v1beta1.TxResponse: + type: object + properties: height: type: string format: int64 - description: |- - The height at which the upgrade must be performed. - Only used if Time is not set. - info: + title: The block height + txhash: type: string - title: |- - Any application specific upgrade info to be included on-chain - such as a git commit that validators could automatically upgrade to - upgraded_client_state: - title: >- - IBC-enabled chains can opt-in to including the upgraded client state - in its upgrade plan - - This will make the chain commit to the correct upgraded (self) client - state before the upgrade occurs, + description: The transaction hash. + codespace: + type: string + title: Namespace for the Code + code: + type: integer + format: int64 + description: Response code. + data: + type: string + description: 'Result bytes, if any.' + raw_log: + type: string + description: |- + The output of the application's logger (raw string). May be + non-deterministic. + logs: + type: array + items: + type: object + properties: + msg_index: + type: integer + format: int64 + log: + type: string + events: + type: array + items: + type: object + properties: + type: + type: string + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + description: >- + Attribute defines an attribute wrapper where the key and + value are - so that connecting chains can verify that the new upgraded client is - valid by verifying a proof on the + strings instead of raw bytes. + description: >- + StringEvent defines en Event object wrapper where all the + attributes - previous version of the chain. + contain key/value pairs that are strings instead of raw bytes. + description: >- + Events contains a slice of Event objects that were emitted + during some - This will allow IBC connections to persist smoothly across planned - chain upgrades + execution. + description: >- + ABCIMessageLog defines a structure containing an indexed tx ABCI + message log. + description: >- + The output of the application's logger (typed). May be + non-deterministic. + info: + type: string + description: Additional information. May be non-deterministic. + gas_wanted: + type: string + format: int64 + description: Amount of gas requested for transaction. + gas_used: + type: string + format: int64 + description: Amount of gas consumed by transaction. + tx: type: object properties: type_url: @@ -36183,84 +42418,272 @@ definitions: "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" } + timestamp: + type: string + description: >- + Time of the previous block. For heights > 1, it's the weighted median + of + + the timestamps of the valid votes in the block.LastCommit. For height + == 1, + + it's genesis time. description: >- - Plan specifies information about a planned upgrade and when it should - occur. - cosmos.upgrade.v1beta1.QueryAppliedPlanResponse: + TxResponse defines a structure containing relevant tx data and metadata. + The + + tags are stringified and the log is JSON decoded. + cosmos.crypto.multisig.v1beta1.CompactBitArray: type: object properties: - height: - type: string + extra_bits_stored: + type: integer format: int64 - description: height is the block height at which the plan was applied. - description: >- - QueryAppliedPlanResponse is the response type for the Query/AppliedPlan - RPC - - method. - cosmos.upgrade.v1beta1.QueryCurrentPlanResponse: + elems: + type: string + format: byte + description: |- + CompactBitArray is an implementation of a space efficient bit array. + This is used to ensure that the encoded data takes up a minimal amount of + space after proto encoding. + This is not thread safe, and is not intended for concurrent usage. + cosmos.tx.signing.v1beta1.SignMode: + type: string + enum: + - SIGN_MODE_UNSPECIFIED + - SIGN_MODE_DIRECT + - SIGN_MODE_TEXTUAL + - SIGN_MODE_LEGACY_AMINO_JSON + default: SIGN_MODE_UNSPECIFIED + description: |- + SignMode represents a signing mode with its own security guarantees. + + - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be + rejected + - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is + verified with raw bytes from Tx + - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some + human-readable textual representation on top of the binary representation + from SIGN_MODE_DIRECT + - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses + Amino JSON and will be removed in the future + cosmos.tx.v1beta1.AuthInfo: type: object properties: - plan: - description: plan is the current upgrade plan. + signer_infos: + type: array + items: + $ref: '#/definitions/cosmos.tx.v1beta1.SignerInfo' + description: >- + signer_infos defines the signing modes for the required signers. The + number + + and order of elements must match the required signers from TxBody's + + messages. The first element is the primary signer and the one which + pays + + the fee. + fee: + description: >- + Fee is the fee and gas limit for the transaction. The first signer is + the + + primary signer and the one which pays the fee. The fee can be + calculated + + based on the cost of evaluating the body and doing signature + verification + + of the signers. This can be estimated via simulation. type: object properties: - name: - type: string - description: >- - Sets the name for the upgrade. This name will be used by the - upgraded + amount: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. - version of the software to apply any special "on-upgrade" commands - during - the first BeginBlock method after the upgrade is applied. It is - also used + NOTE: The amount field is an Int which implements the custom + method - to detect whether a software version can handle a given upgrade. - If no + signatures required by gogoproto. + title: amount is the amount of coins to be paid as a fee + gas_limit: + type: string + format: uint64 + title: >- + gas_limit is the maximum gas that can be used in transaction + processing - upgrade handler with this name has been set in the software, it - will be + before an out of gas error occurs + payer: + type: string + description: >- + if unset, the first signer is responsible for paying the fees. If + set, the specified account must pay the fees. - assumed that the software is out-of-date when the upgrade Time or - Height is + the payer must be a tx signer (and thus have signed this field in + AuthInfo). - reached and the software will exit. - time: + setting this field does *not* change the ordering of required + signers for the transaction. + granter: type: string - format: date-time - description: |- - The time after which the upgrade must be performed. - Leave set to its zero value to use a pre-defined Height instead. + title: >- + if set, the fee payer (either the first signer or the value of the + payer field) requests that a fee grant be used + + to pay fees instead of the fee payer's own balance. If an + appropriate fee grant does not exist or the chain does + + not support fee grants, this will fail + description: |- + AuthInfo describes the fee and signer modes that are used to sign a + transaction. + cosmos.tx.v1beta1.BroadcastMode: + type: string + enum: + - BROADCAST_MODE_UNSPECIFIED + - BROADCAST_MODE_BLOCK + - BROADCAST_MODE_SYNC + - BROADCAST_MODE_ASYNC + default: BROADCAST_MODE_UNSPECIFIED + description: >- + BroadcastMode specifies the broadcast mode for the TxService.Broadcast RPC + method. + + - BROADCAST_MODE_UNSPECIFIED: zero-value for mode ordering + - BROADCAST_MODE_BLOCK: BROADCAST_MODE_BLOCK defines a tx broadcasting mode where the client waits for + the tx to be committed in a block. + - BROADCAST_MODE_SYNC: BROADCAST_MODE_SYNC defines a tx broadcasting mode where the client waits for + a CheckTx execution response only. + - BROADCAST_MODE_ASYNC: BROADCAST_MODE_ASYNC defines a tx broadcasting mode where the client returns + immediately. + cosmos.tx.v1beta1.BroadcastTxRequest: + type: object + properties: + tx_bytes: + type: string + format: byte + description: tx_bytes is the raw transaction. + mode: + type: string + enum: + - BROADCAST_MODE_UNSPECIFIED + - BROADCAST_MODE_BLOCK + - BROADCAST_MODE_SYNC + - BROADCAST_MODE_ASYNC + default: BROADCAST_MODE_UNSPECIFIED + description: >- + BroadcastMode specifies the broadcast mode for the TxService.Broadcast + RPC method. + + - BROADCAST_MODE_UNSPECIFIED: zero-value for mode ordering + - BROADCAST_MODE_BLOCK: BROADCAST_MODE_BLOCK defines a tx broadcasting mode where the client waits for + the tx to be committed in a block. + - BROADCAST_MODE_SYNC: BROADCAST_MODE_SYNC defines a tx broadcasting mode where the client waits for + a CheckTx execution response only. + - BROADCAST_MODE_ASYNC: BROADCAST_MODE_ASYNC defines a tx broadcasting mode where the client returns + immediately. + description: |- + BroadcastTxRequest is the request type for the Service.BroadcastTxRequest + RPC method. + cosmos.tx.v1beta1.BroadcastTxResponse: + type: object + properties: + tx_response: + type: object + properties: height: type: string format: int64 - description: |- - The height at which the upgrade must be performed. - Only used if Time is not set. - info: + title: The block height + txhash: type: string - title: >- - Any application specific upgrade info to be included on-chain - - such as a git commit that validators could automatically upgrade - to - upgraded_client_state: - title: >- - IBC-enabled chains can opt-in to including the upgraded client - state in its upgrade plan - - This will make the chain commit to the correct upgraded (self) - client state before the upgrade occurs, + description: The transaction hash. + codespace: + type: string + title: Namespace for the Code + code: + type: integer + format: int64 + description: Response code. + data: + type: string + description: 'Result bytes, if any.' + raw_log: + type: string + description: |- + The output of the application's logger (raw string). May be + non-deterministic. + logs: + type: array + items: + type: object + properties: + msg_index: + type: integer + format: int64 + log: + type: string + events: + type: array + items: + type: object + properties: + type: + type: string + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + description: >- + Attribute defines an attribute wrapper where the key + and value are - so that connecting chains can verify that the new upgraded client - is valid by verifying a proof on the + strings instead of raw bytes. + description: >- + StringEvent defines en Event object wrapper where all the + attributes - previous version of the chain. + contain key/value pairs that are strings instead of raw + bytes. + description: >- + Events contains a slice of Event objects that were emitted + during some - This will allow IBC connections to persist smoothly across planned - chain upgrades + execution. + description: >- + ABCIMessageLog defines a structure containing an indexed tx ABCI + message log. + description: >- + The output of the application's logger (typed). May be + non-deterministic. + info: + type: string + description: Additional information. May be non-deterministic. + gas_wanted: + type: string + format: int64 + description: Amount of gas requested for transaction. + gas_used: + type: string + format: int64 + description: Amount of gas consumed by transaction. + tx: type: object properties: type_url: @@ -36425,201 +42848,169 @@ definitions: "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" } - description: >- - QueryCurrentPlanResponse is the response type for the Query/CurrentPlan - RPC + timestamp: + type: string + description: >- + Time of the previous block. For heights > 1, it's the weighted + median of - method. - ibc.core.channel.v1.Channel: + the timestamps of the valid votes in the block.LastCommit. For + height == 1, + + it's genesis time. + description: >- + TxResponse defines a structure containing relevant tx data and + metadata. The + + tags are stringified and the log is JSON decoded. + description: |- + BroadcastTxResponse is the response type for the + Service.BroadcastTx method. + cosmos.tx.v1beta1.Fee: type: object properties: - state: - title: current state of the channel end - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - default: STATE_UNINITIALIZED_UNSPECIFIED - description: |- - State defines if a channel is in one of the following states: - CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - ordering: - title: whether the channel is ordered or unordered - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: |- - - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - counterparty: - title: counterparty channel end - type: object - properties: - port_id: - type: string - description: >- - port on the counterparty chain which owns the other end of the - channel. - channel_id: - type: string - title: channel end on the counterparty chain - connection_hops: + amount: type: array items: - type: string - title: |- - list of connection identifiers, in order, along which packets sent on - this channel will travel - version: + type: object + properties: + denom: + type: string + amount: + type: string + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + title: amount is the amount of coins to be paid as a fee + gas_limit: type: string - title: 'opaque channel version, which is agreed upon during the handshake' - description: |- - Channel defines pipeline for exactly-once packet delivery between specific - modules on separate blockchains, which has at least one end capable of - sending packets and one end capable of receiving packets. - ibc.core.channel.v1.Counterparty: - type: object - properties: - port_id: + format: uint64 + title: >- + gas_limit is the maximum gas that can be used in transaction + processing + + before an out of gas error occurs + payer: type: string description: >- - port on the counterparty chain which owns the other end of the - channel. - channel_id: + if unset, the first signer is responsible for paying the fees. If set, + the specified account must pay the fees. + + the payer must be a tx signer (and thus have signed this field in + AuthInfo). + + setting this field does *not* change the ordering of required signers + for the transaction. + granter: type: string - title: channel end on the counterparty chain - title: Counterparty defines a channel end counterparty - ibc.core.channel.v1.IdentifiedChannel: + title: >- + if set, the fee payer (either the first signer or the value of the + payer field) requests that a fee grant be used + + to pay fees instead of the fee payer's own balance. If an appropriate + fee grant does not exist or the chain does + + not support fee grants, this will fail + description: >- + Fee includes the amount of coins paid in fees and the maximum + + gas to be used by the transaction. The ratio yields an effective + "gasprice", + + which must be above some miminum to be accepted into the mempool. + cosmos.tx.v1beta1.GetTxResponse: type: object properties: - state: - title: current state of the channel end - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - default: STATE_UNINITIALIZED_UNSPECIFIED - description: |- - State defines if a channel is in one of the following states: - CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - ordering: - title: whether the channel is ordered or unordered - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: |- - - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - counterparty: - title: counterparty channel end + tx: + $ref: '#/definitions/cosmos.tx.v1beta1.Tx' + description: tx is the queried transaction. + tx_response: type: object properties: - port_id: + height: type: string - description: >- - port on the counterparty chain which owns the other end of the - channel. - channel_id: + format: int64 + title: The block height + txhash: type: string - title: channel end on the counterparty chain - connection_hops: - type: array - items: - type: string - title: |- - list of connection identifiers, in order, along which packets sent on - this channel will travel - version: - type: string - title: 'opaque channel version, which is agreed upon during the handshake' - port_id: - type: string - title: port identifier - channel_id: - type: string - title: channel identifier - description: |- - IdentifiedChannel defines a channel with additional port and channel - identifier fields. - ibc.core.channel.v1.Order: - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: |- - - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - title: Order defines if a channel is ORDERED or UNORDERED - ibc.core.channel.v1.PacketState: - type: object - properties: - port_id: - type: string - description: channel port identifier. - channel_id: - type: string - description: channel unique identifier. - sequence: - type: string - format: uint64 - description: packet sequence. - data: - type: string - format: byte - description: embedded data that represents packet state. - description: |- - PacketState defines the generic type necessary to retrieve and store - packet commitments, acknowledgements, and receipts. - Caller is responsible for knowing the context necessary to interpret this - state as a commitment, acknowledgement, or a receipt. - ibc.core.channel.v1.QueryChannelClientStateResponse: - type: object - properties: - identified_client_state: - title: client state associated with the channel - type: object - properties: - client_id: + description: The transaction hash. + codespace: + type: string + title: Namespace for the Code + code: + type: integer + format: int64 + description: Response code. + data: + type: string + description: 'Result bytes, if any.' + raw_log: + type: string + description: |- + The output of the application's logger (raw string). May be + non-deterministic. + logs: + type: array + items: + type: object + properties: + msg_index: + type: integer + format: int64 + log: + type: string + events: + type: array + items: + type: object + properties: + type: + type: string + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + description: >- + Attribute defines an attribute wrapper where the key + and value are + + strings instead of raw bytes. + description: >- + StringEvent defines en Event object wrapper where all the + attributes + + contain key/value pairs that are strings instead of raw + bytes. + description: >- + Events contains a slice of Event objects that were emitted + during some + + execution. + description: >- + ABCIMessageLog defines a structure containing an indexed tx ABCI + message log. + description: >- + The output of the application's logger (typed). May be + non-deterministic. + info: + type: string + description: Additional information. May be non-deterministic. + gas_wanted: + type: string + format: int64 + description: Amount of gas requested for transaction. + gas_used: type: string - title: client identifier - client_state: - title: client state + format: int64 + description: Amount of gas consumed by transaction. + tx: type: object properties: type_url: @@ -36784,47 +43175,434 @@ definitions: "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" } - description: |- - IdentifiedClientState defines a client state with an additional client - identifier field. - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved + timestamp: + type: string + description: >- + Time of the previous block. For heights > 1, it's the weighted + median of + + the timestamps of the valid votes in the block.LastCommit. For + height == 1, + + it's genesis time. + description: >- + TxResponse defines a structure containing relevant tx data and + metadata. The + + tags are stringified and the log is JSON decoded. + description: GetTxResponse is the response type for the Service.GetTx method. + cosmos.tx.v1beta1.GetTxsEventResponse: + type: object + properties: + txs: + type: array + items: + $ref: '#/definitions/cosmos.tx.v1beta1.Tx' + description: txs is the list of queried transactions. + tx_responses: + type: array + items: + type: object + properties: + height: + type: string + format: int64 + title: The block height + txhash: + type: string + description: The transaction hash. + codespace: + type: string + title: Namespace for the Code + code: + type: integer + format: int64 + description: Response code. + data: + type: string + description: 'Result bytes, if any.' + raw_log: + type: string + description: |- + The output of the application's logger (raw string). May be + non-deterministic. + logs: + type: array + items: + type: object + properties: + msg_index: + type: integer + format: int64 + log: + type: string + events: + type: array + items: + type: object + properties: + type: + type: string + attributes: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + description: >- + Attribute defines an attribute wrapper where the + key and value are + + strings instead of raw bytes. + description: >- + StringEvent defines en Event object wrapper where all + the attributes + + contain key/value pairs that are strings instead of raw + bytes. + description: >- + Events contains a slice of Event objects that were emitted + during some + + execution. + description: >- + ABCIMessageLog defines a structure containing an indexed tx + ABCI message log. + description: >- + The output of the application's logger (typed). May be + non-deterministic. + info: + type: string + description: Additional information. May be non-deterministic. + gas_wanted: + type: string + format: int64 + description: Amount of gas requested for transaction. + gas_used: + type: string + format: int64 + description: Amount of gas consumed by transaction. + tx: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of the + serialized + + protocol buffer message. This string must contain at least + + one "/" character. The last segment of the URL's path must + represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in a + canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary all + types that they + + expect it to use in the context of Any. However, for URLs + which use the + + scheme `http`, `https`, or no scheme, one can optionally set + up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based on + the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the + official + + protobuf release, and it is not used for type URLs beginning + with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message + along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values in + the form + + of utility functions or additional generated methods of the Any + type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by default + use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the last + '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with an + + additional field `@type` which contains the type URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom JSON + + representation, that representation will be embedded adding a + field + + `value` which holds the custom JSON in addition to the `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + timestamp: + type: string + description: >- + Time of the previous block. For heights > 1, it's the weighted + median of + + the timestamps of the valid votes in the block.LastCommit. For + height == 1, + + it's genesis time. + description: >- + TxResponse defines a structure containing relevant tx data and + metadata. The + + tags are stringified and the log is JSON decoded. + description: tx_responses is the list of queried TxResponses. + pagination: + description: pagination defines an pagination for the response. type: object properties: - version_number: + next_key: type: string - format: uint64 - title: the version that the client is currently on - version_height: + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: type: string format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while keeping - version + title: >- + total is total number of results available if + PageRequest.count_total - number the same However some consensus algorithms may choose to reset - the + was set, its value is undefined otherwise + description: |- + GetTxsEventResponse is the response type for the Service.TxsByEvents + RPC method. + cosmos.tx.v1beta1.ModeInfo: + type: object + properties: + single: + title: single represents a single signer + type: object + properties: + mode: + title: mode is the signing mode of the single signer + type: string + enum: + - SIGN_MODE_UNSPECIFIED + - SIGN_MODE_DIRECT + - SIGN_MODE_TEXTUAL + - SIGN_MODE_LEGACY_AMINO_JSON + default: SIGN_MODE_UNSPECIFIED + description: >- + SignMode represents a signing mode with its own security + guarantees. + + - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be + rejected + - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is + verified with raw bytes from Tx + - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some + human-readable textual representation on top of the binary + representation + + from SIGN_MODE_DIRECT + - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses + Amino JSON and will be removed in the future + multi: + $ref: '#/definitions/cosmos.tx.v1beta1.ModeInfo.Multi' + title: multi represents a nested multisig signer + description: ModeInfo describes the signing mode of a single or nested multisig signer. + cosmos.tx.v1beta1.ModeInfo.Multi: + type: object + properties: + bitarray: + title: bitarray specifies which keys within the multisig are signing + type: object + properties: + extra_bits_stored: + type: integer + format: int64 + elems: + type: string + format: byte + description: >- + CompactBitArray is an implementation of a space efficient bit array. - height in certain conditions e.g. hard forks, state-machine breaking - changes + This is used to ensure that the encoded data takes up a minimal amount + of - In these cases, the version number is incremented so that height - continues to + space after proto encoding. - be monitonically increasing even as the VersionHeight gets reset + This is not thread safe, and is not intended for concurrent usage. + mode_infos: + type: array + items: + $ref: '#/definitions/cosmos.tx.v1beta1.ModeInfo' + title: |- + mode_infos is the corresponding modes of the signers of the multisig + which could include nested multisig public keys + title: Multi is the mode info for a multisig public key + cosmos.tx.v1beta1.ModeInfo.Single: + type: object + properties: + mode: + title: mode is the signing mode of the single signer + type: string + enum: + - SIGN_MODE_UNSPECIFIED + - SIGN_MODE_DIRECT + - SIGN_MODE_TEXTUAL + - SIGN_MODE_LEGACY_AMINO_JSON + default: SIGN_MODE_UNSPECIFIED + description: >- + SignMode represents a signing mode with its own security guarantees. + + - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be + rejected + - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is + verified with raw bytes from Tx + - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some + human-readable textual representation on top of the binary + representation + + from SIGN_MODE_DIRECT + - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses + Amino JSON and will be removed in the future title: |- - QueryChannelClientStateResponse is the Response type for the - Query/QueryChannelClientState RPC method - ibc.core.channel.v1.QueryChannelConsensusStateResponse: + Single is the mode info for a single signer. It is structured as a message + to allow for additional fields such as locale for SIGN_MODE_TEXTUAL in the + future + cosmos.tx.v1beta1.OrderBy: + type: string + enum: + - ORDER_BY_UNSPECIFIED + - ORDER_BY_ASC + - ORDER_BY_DESC + default: ORDER_BY_UNSPECIFIED + description: >- + - ORDER_BY_UNSPECIFIED: ORDER_BY_UNSPECIFIED specifies an unknown sorting + order. OrderBy defaults to ASC in this case. + - ORDER_BY_ASC: ORDER_BY_ASC defines ascending order + - ORDER_BY_DESC: ORDER_BY_DESC defines descending order + title: OrderBy defines the sorting order + cosmos.tx.v1beta1.SignerInfo: type: object properties: - consensus_state: - title: consensus state associated with the channel + public_key: type: object properties: type_url: @@ -36895,1758 +43673,1431 @@ definitions: Protobuf library provides support to pack/unpack Any values in the form - of utility functions or additional generated methods of the Any type. + of utility functions or additional generated methods of the Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by default use + + 'type.googleapis.com/full.type.name' as the type URL and the unpack + + methods only use the fully qualified type name after the last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with an + + additional field `@type` which contains the type URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom JSON + + representation, that representation will be embedded adding a field + + `value` which holds the custom JSON in addition to the `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + mode_info: + $ref: '#/definitions/cosmos.tx.v1beta1.ModeInfo' + title: |- + mode_info describes the signing mode of the signer and is a nested + structure to support nested multisig pubkey's + sequence: + type: string + format: uint64 + description: >- + sequence is the sequence of the account, which describes the + + number of committed transactions signed by a given address. It is used + to + + prevent replay attacks. + description: |- + SignerInfo describes the public key and signing mode of a single top-level + signer. + cosmos.tx.v1beta1.SimulateRequest: + type: object + properties: + tx: + $ref: '#/definitions/cosmos.tx.v1beta1.Tx' + description: |- + tx is the transaction to simulate. + Deprecated. Send raw tx bytes instead. + tx_bytes: + type: string + format: byte + description: tx_bytes is the raw transaction. + description: |- + SimulateRequest is the request type for the Service.Simulate + RPC method. + cosmos.tx.v1beta1.SimulateResponse: + type: object + properties: + gas_info: + description: gas_info is the information about gas used in the simulation. + type: object + properties: + gas_wanted: + type: string + format: uint64 + description: >- + GasWanted is the maximum units of work we allow this tx to + perform. + gas_used: + type: string + format: uint64 + description: GasUsed is the amount of gas actually consumed. + result: + description: result is the result of the simulation. + type: object + properties: + data: + type: string + format: byte + description: >- + Data is any data returned from message or handler execution. It + MUST be + + length prefixed in order to separate data from multiple message + executions. + log: + type: string + description: >- + Log contains the log information from message or handler + execution. + events: + type: array + items: + type: object + properties: + type: + type: string + attributes: + type: array + items: + type: object + properties: + key: + type: string + format: byte + value: + type: string + format: byte + index: + type: boolean + format: boolean + description: >- + EventAttribute is a single key-value pair, associated with + an event. + description: >- + Event allows application developers to attach additional + information to + + ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and + ResponseDeliverTx. + + Later, transactions may be queried using these events. + description: >- + Events contains a slice of Event objects that were emitted during + message + + or handler execution. + description: |- + SimulateResponse is the response type for the + Service.SimulateRPC method. + cosmos.tx.v1beta1.Tx: + type: object + properties: + body: + title: body is the processable content of the transaction + type: object + properties: + messages: + type: array + items: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of the + serialized + + protocol buffer message. This string must contain at least + + one "/" character. The last segment of the URL's path must + represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in a + canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary all + types that they + + expect it to use in the context of Any. However, for URLs + which use the + + scheme `http`, `https`, or no scheme, one can optionally set + up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based on + the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the + official + + protobuf release, and it is not used for type URLs beginning + with + type.googleapis.com. - Example 1: Pack and unpack a message in C++. - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } + Schemes other than `http`, `https` (or the empty scheme) + might be - Example 2: Pack and unpack a message in Java. + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message + along with a - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } + URL that describes the type of the serialized message. - Example 3: Pack and unpack a message in Python. - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... + Protobuf library provides support to pack/unpack Any values in + the form - Example 4: Pack and unpack a message in Go + of utility functions or additional generated methods of the Any + type. - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } - The pack methods provided by protobuf library will by default use + Example 1: Pack and unpack a message in C++. - 'type.googleapis.com/full.type.name' as the type URL and the unpack + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } - methods only use the fully qualified type name after the last '/' + Example 2: Pack and unpack a message in Java. - in the type URL, for example "foo.bar.com/x/y.z" will yield type + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } - name "y.z". + Example 3: Pack and unpack a message in Python. + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + Example 4: Pack and unpack a message in Go - JSON + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } - ==== + The pack methods provided by protobuf library will by default + use - The JSON representation of an `Any` value uses the regular + 'type.googleapis.com/full.type.name' as the type URL and the + unpack - representation of the deserialized, embedded message, with an + methods only use the fully qualified type name after the last + '/' - additional field `@type` which contains the type URL. Example: + in the type URL, for example "foo.bar.com/x/y.z" will yield type - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } + name "y.z". - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - If the embedded message type is well-known and has a custom JSON - representation, that representation will be embedded adding a field + JSON - `value` which holds the custom JSON in addition to the `@type` + ==== - field. Example (for message [google.protobuf.Duration][]): + The JSON representation of an `Any` value uses the regular - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - client_id: - type: string - title: client ID associated with the consensus state - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while keeping - version + representation of the deserialized, embedded message, with an - number the same However some consensus algorithms may choose to reset - the + additional field `@type` which contains the type URL. Example: - height in certain conditions e.g. hard forks, state-machine breaking - changes + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } - In these cases, the version number is incremented so that height - continues to + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } - be monitonically increasing even as the VersionHeight gets reset - title: |- - QueryChannelClientStateResponse is the Response type for the - Query/QueryChannelClientState RPC method - ibc.core.channel.v1.QueryChannelResponse: - type: object - properties: - channel: - title: channel associated with the request identifiers - type: object - properties: - state: - title: current state of the channel end - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - default: STATE_UNINITIALIZED_UNSPECIFIED - description: |- - State defines if a channel is in one of the following states: - CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - ordering: - title: whether the channel is ordered or unordered - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: |- - - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - counterparty: - title: counterparty channel end - type: object - properties: - port_id: - type: string - description: >- - port on the counterparty chain which owns the other end of the - channel. - channel_id: - type: string - title: channel end on the counterparty chain - connection_hops: - type: array - items: - type: string - title: >- - list of connection identifiers, in order, along which packets sent - on + If the embedded message type is well-known and has a custom JSON - this channel will travel - version: - type: string - title: 'opaque channel version, which is agreed upon during the handshake' - description: >- - Channel defines pipeline for exactly-once packet delivery between - specific + representation, that representation will be embedded adding a + field - modules on separate blockchains, which has at least one end capable of + `value` which holds the custom JSON in addition to the `@type` - sending packets and one end capable of receiving packets. - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while keeping - version + field. Example (for message [google.protobuf.Duration][]): - number the same However some consensus algorithms may choose to reset - the + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + description: >- + messages is a list of messages to be executed. The required + signers of - height in certain conditions e.g. hard forks, state-machine breaking - changes + those messages define the number and order of elements in + AuthInfo's - In these cases, the version number is incremented so that height - continues to + signer_infos and Tx's signatures. Each required signer address is + added to - be monitonically increasing even as the VersionHeight gets reset - description: >- - QueryChannelResponse is the response type for the Query/Channel RPC - method. + the list only the first time it occurs. - Besides the Channel end, it includes a proof and the height from which the + By convention, the first required signer (usually from the first + message) - proof was retrieved. - ibc.core.channel.v1.QueryChannelsResponse: - type: object - properties: - channels: - type: array - items: - type: object - properties: - state: - title: current state of the channel end - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - default: STATE_UNINITIALIZED_UNSPECIFIED - description: |- - State defines if a channel is in one of the following states: - CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - ordering: - title: whether the channel is ordered or unordered - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: |- - - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - counterparty: - title: counterparty channel end - type: object - properties: - port_id: - type: string - description: >- - port on the counterparty chain which owns the other end of - the channel. - channel_id: - type: string - title: channel end on the counterparty chain - connection_hops: - type: array - items: - type: string - title: >- - list of connection identifiers, in order, along which packets - sent on + is referred to as the primary signer and pays the fee for the + whole - this channel will travel - version: - type: string - title: >- - opaque channel version, which is agreed upon during the - handshake - port_id: - type: string - title: port identifier - channel_id: - type: string - title: channel identifier - description: |- - IdentifiedChannel defines a channel with additional port and channel - identifier fields. - description: list of stored channels of the chain. - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: + transaction. + memo: type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total + description: >- + memo is any arbitrary note/comment to be added to the transaction. - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. + WARNING: in clients, any publicly exposed text should not be + called memo, - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: + but should be called `note` instead (see + https://github.com/cosmos/cosmos-sdk/issues/9122). + timeout_height: type: string format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while keeping - version - - number the same However some consensus algorithms may choose to reset - the - - height in certain conditions e.g. hard forks, state-machine breaking - changes - - In these cases, the version number is incremented so that height - continues to - - be monitonically increasing even as the VersionHeight gets reset - description: >- - QueryChannelsResponse is the response type for the Query/Channels RPC - method. - ibc.core.channel.v1.QueryConnectionChannelsResponse: - type: object - properties: - channels: - type: array - items: - type: object - properties: - state: - title: current state of the channel end - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - default: STATE_UNINITIALIZED_UNSPECIFIED - description: |- - State defines if a channel is in one of the following states: - CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - ordering: - title: whether the channel is ordered or unordered - type: string - enum: - - ORDER_NONE_UNSPECIFIED - - ORDER_UNORDERED - - ORDER_ORDERED - default: ORDER_NONE_UNSPECIFIED - description: |- - - ORDER_NONE_UNSPECIFIED: zero-value for channel ordering - - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in - which they were sent. - - ORDER_ORDERED: packets are delivered exactly in the order which they were sent - counterparty: - title: counterparty channel end + title: |- + timeout is the block height after which this transaction will not + be processed by the chain + extension_options: + type: array + items: type: object properties: - port_id: + type_url: type: string description: >- - port on the counterparty chain which owns the other end of - the channel. - channel_id: - type: string - title: channel end on the counterparty chain - connection_hops: - type: array - items: - type: string - title: >- - list of connection identifiers, in order, along which packets - sent on - - this channel will travel - version: - type: string - title: >- - opaque channel version, which is agreed upon during the - handshake - port_id: - type: string - title: port identifier - channel_id: - type: string - title: channel identifier - description: |- - IdentifiedChannel defines a channel with additional port and channel - identifier fields. - description: list of channels associated with a connection. - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while keeping - version + A URL/resource name that uniquely identifies the type of the + serialized - number the same However some consensus algorithms may choose to reset - the + protocol buffer message. This string must contain at least - height in certain conditions e.g. hard forks, state-machine breaking - changes + one "/" character. The last segment of the URL's path must + represent - In these cases, the version number is incremented so that height - continues to + the fully qualified name of the type (as in - be monitonically increasing even as the VersionHeight gets reset - title: |- - QueryConnectionChannelsResponse is the Response type for the - Query/QueryConnectionChannels RPC method - ibc.core.channel.v1.QueryNextSequenceReceiveResponse: - type: object - properties: - next_sequence_receive: - type: string - format: uint64 - title: next sequence receive number - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while keeping - version + `path/google.protobuf.Duration`). The name should be in a + canonical form - number the same However some consensus algorithms may choose to reset - the + (e.g., leading "." is not accepted). - height in certain conditions e.g. hard forks, state-machine breaking - changes - In these cases, the version number is incremented so that height - continues to + In practice, teams usually precompile into the binary all + types that they - be monitonically increasing even as the VersionHeight gets reset - title: |- - QuerySequenceResponse is the request type for the - Query/QueryNextSequenceReceiveResponse RPC method - ibc.core.channel.v1.QueryPacketAcknowledgementResponse: - type: object - properties: - acknowledgement: - type: string - format: byte - title: packet associated with the request fields - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while keeping - version + expect it to use in the context of Any. However, for URLs + which use the - number the same However some consensus algorithms may choose to reset - the + scheme `http`, `https`, or no scheme, one can optionally set + up a type - height in certain conditions e.g. hard forks, state-machine breaking - changes + server that maps type URLs to message definitions as + follows: - In these cases, the version number is incremented so that height - continues to - be monitonically increasing even as the VersionHeight gets reset - title: |- - QueryPacketAcknowledgementResponse defines the client query response for a - packet which also includes a proof and the height from which the - proof was retrieved - ibc.core.channel.v1.QueryPacketAcknowledgementsResponse: - type: object - properties: - acknowledgements: - type: array - items: - type: object - properties: - port_id: - type: string - description: channel port identifier. - channel_id: - type: string - description: channel unique identifier. - sequence: - type: string - format: uint64 - description: packet sequence. - data: - type: string - format: byte - description: embedded data that represents packet state. - description: >- - PacketState defines the generic type necessary to retrieve and store + * If no scheme is provided, `https` is assumed. - packet commitments, acknowledgements, and receipts. + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based on + the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) - Caller is responsible for knowing the context necessary to interpret - this + Note: this functionality is not currently available in the + official - state as a commitment, acknowledgement, or a receipt. - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total + protobuf release, and it is not used for type URLs beginning + with - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. + type.googleapis.com. - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while keeping - version - number the same However some consensus algorithms may choose to reset - the + Schemes other than `http`, `https` (or the empty scheme) + might be - height in certain conditions e.g. hard forks, state-machine breaking - changes + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message + along with a - In these cases, the version number is incremented so that height - continues to + URL that describes the type of the serialized message. - be monitonically increasing even as the VersionHeight gets reset - title: |- - QueryPacketAcknowledgemetsResponse is the request type for the - Query/QueryPacketAcknowledgements RPC method - ibc.core.channel.v1.QueryPacketCommitmentResponse: - type: object - properties: - commitment: - type: string - format: byte - title: packet associated with the request fields - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while keeping - version - number the same However some consensus algorithms may choose to reset - the + Protobuf library provides support to pack/unpack Any values in + the form - height in certain conditions e.g. hard forks, state-machine breaking - changes + of utility functions or additional generated methods of the Any + type. - In these cases, the version number is incremented so that height - continues to - be monitonically increasing even as the VersionHeight gets reset - title: >- - QueryPacketCommitmentResponse defines the client query response for a - packet + Example 1: Pack and unpack a message in C++. - which also includes a proof and the height from which the proof was + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } - retrieved - ibc.core.channel.v1.QueryPacketCommitmentsResponse: - type: object - properties: - commitments: - type: array - items: - type: object - properties: - port_id: - type: string - description: channel port identifier. - channel_id: - type: string - description: channel unique identifier. - sequence: - type: string - format: uint64 - description: packet sequence. - data: - type: string - format: byte - description: embedded data that represents packet state. - description: >- - PacketState defines the generic type necessary to retrieve and store + Example 2: Pack and unpack a message in Java. - packet commitments, acknowledgements, and receipts. + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } - Caller is responsible for knowing the context necessary to interpret - this + Example 3: Pack and unpack a message in Python. - state as a commitment, acknowledgement, or a receipt. - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. + Example 4: Pack and unpack a message in Go - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while keeping - version + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } - number the same However some consensus algorithms may choose to reset - the + The pack methods provided by protobuf library will by default + use - height in certain conditions e.g. hard forks, state-machine breaking - changes + 'type.googleapis.com/full.type.name' as the type URL and the + unpack - In these cases, the version number is incremented so that height - continues to + methods only use the fully qualified type name after the last + '/' - be monitonically increasing even as the VersionHeight gets reset - title: |- - QueryPacketCommitmentsResponse is the request type for the - Query/QueryPacketCommitments RPC method - ibc.core.channel.v1.QueryPacketReceiptResponse: - type: object - properties: - received: - type: boolean - title: success flag for if receipt exists - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while keeping - version + in the type URL, for example "foo.bar.com/x/y.z" will yield type - number the same However some consensus algorithms may choose to reset - the + name "y.z". - height in certain conditions e.g. hard forks, state-machine breaking - changes - In these cases, the version number is incremented so that height - continues to - be monitonically increasing even as the VersionHeight gets reset - title: >- - QueryPacketReceiptResponse defines the client query response for a packet - receipt + JSON - which also includes a proof, and the height from which the proof was + ==== - retrieved - ibc.core.channel.v1.QueryUnreceivedAcksResponse: - type: object - properties: - sequences: - type: array - items: - type: string - format: uint64 - title: list of unreceived acknowledgement sequences - height: - title: query block height - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while keeping - version + The JSON representation of an `Any` value uses the regular - number the same However some consensus algorithms may choose to reset - the + representation of the deserialized, embedded message, with an - height in certain conditions e.g. hard forks, state-machine breaking - changes + additional field `@type` which contains the type URL. Example: - In these cases, the version number is incremented so that height - continues to + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } - be monitonically increasing even as the VersionHeight gets reset - title: |- - QueryUnreceivedAcksResponse is the response type for the - Query/UnreceivedAcks RPC method - ibc.core.channel.v1.QueryUnreceivedPacketsResponse: - type: object - properties: - sequences: - type: array - items: - type: string - format: uint64 - title: list of unreceived packet sequences - height: - title: query block height - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while keeping - version + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } - number the same However some consensus algorithms may choose to reset - the + If the embedded message type is well-known and has a custom JSON - height in certain conditions e.g. hard forks, state-machine breaking - changes + representation, that representation will be embedded adding a + field - In these cases, the version number is incremented so that height - continues to + `value` which holds the custom JSON in addition to the `@type` - be monitonically increasing even as the VersionHeight gets reset - title: |- - QueryUnreceivedPacketsResponse is the response type for the - Query/UnreceivedPacketCommitments RPC method - ibc.core.channel.v1.State: - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - - STATE_CLOSED - default: STATE_UNINITIALIZED_UNSPECIFIED - description: |- - State defines if a channel is in one of the following states: - CLOSED, INIT, TRYOPEN, OPEN or UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A channel has just started the opening handshake. - - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain. - - STATE_OPEN: A channel has completed the handshake. Open channels are - ready to send and receive packets. - - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive - packets. - ibc.core.client.v1.Height: - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while keeping - version + field. Example (for message [google.protobuf.Duration][]): - number the same However some consensus algorithms may choose to reset the + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + title: >- + extension_options are arbitrary options that can be added by + chains - height in certain conditions e.g. hard forks, state-machine breaking - changes + when the default options are not sufficient. If any of these are + present - In these cases, the version number is incremented so that height continues - to + and can't be handled, the transaction will be rejected + non_critical_extension_options: + type: array + items: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of the + serialized - be monitonically increasing even as the VersionHeight gets reset - title: >- - Height is a monotonically increasing data type + protocol buffer message. This string must contain at least - that can be compared against another Height for the purposes of updating - and + one "/" character. The last segment of the URL's path must + represent - freezing clients - ibc.core.client.v1.IdentifiedClientState: - type: object - properties: - client_id: - type: string - title: client identifier - client_state: - title: client state - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized + the fully qualified name of the type (as in - protocol buffer message. This string must contain at least + `path/google.protobuf.Duration`). The name should be in a + canonical form - one "/" character. The last segment of the URL's path must - represent + (e.g., leading "." is not accepted). - the fully qualified name of the type (as in - `path/google.protobuf.Duration`). The name should be in a - canonical form + In practice, teams usually precompile into the binary all + types that they - (e.g., leading "." is not accepted). + expect it to use in the context of Any. However, for URLs + which use the + scheme `http`, `https`, or no scheme, one can optionally set + up a type - In practice, teams usually precompile into the binary all types - that they + server that maps type URLs to message definitions as + follows: - expect it to use in the context of Any. However, for URLs which - use the - scheme `http`, `https`, or no scheme, one can optionally set up a - type + * If no scheme is provided, `https` is assumed. - server that maps type URLs to message definitions as follows: + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based on + the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + Note: this functionality is not currently available in the + official - * If no scheme is provided, `https` is assumed. + protobuf release, and it is not used for type URLs beginning + with - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) + type.googleapis.com. - Note: this functionality is not currently available in the - official - protobuf release, and it is not used for type URLs beginning with + Schemes other than `http`, `https` (or the empty scheme) + might be - type.googleapis.com. + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message + along with a + URL that describes the type of the serialized message. - Schemes other than `http`, `https` (or the empty scheme) might be - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above specified - type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message along - with a + Protobuf library provides support to pack/unpack Any values in + the form - URL that describes the type of the serialized message. + of utility functions or additional generated methods of the Any + type. - Protobuf library provides support to pack/unpack Any values in the - form + Example 1: Pack and unpack a message in C++. - of utility functions or additional generated methods of the Any type. + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + Example 2: Pack and unpack a message in Java. - Example 1: Pack and unpack a message in C++. + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } + Example 3: Pack and unpack a message in Python. - Example 2: Pack and unpack a message in Java. + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } + Example 4: Pack and unpack a message in Go - Example 3: Pack and unpack a message in Python. + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... + The pack methods provided by protobuf library will by default + use - Example 4: Pack and unpack a message in Go + 'type.googleapis.com/full.type.name' as the type URL and the + unpack - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } + methods only use the fully qualified type name after the last + '/' - The pack methods provided by protobuf library will by default use + in the type URL, for example "foo.bar.com/x/y.z" will yield type - 'type.googleapis.com/full.type.name' as the type URL and the unpack + name "y.z". - methods only use the fully qualified type name after the last '/' - in the type URL, for example "foo.bar.com/x/y.z" will yield type - name "y.z". + JSON + ==== + The JSON representation of an `Any` value uses the regular - JSON + representation of the deserialized, embedded message, with an - ==== + additional field `@type` which contains the type URL. Example: - The JSON representation of an `Any` value uses the regular + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } - representation of the deserialized, embedded message, with an + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } - additional field `@type` which contains the type URL. Example: + If the embedded message type is well-known and has a custom JSON - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } + representation, that representation will be embedded adding a + field - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } + `value` which holds the custom JSON in addition to the `@type` - If the embedded message type is well-known and has a custom JSON + field. Example (for message [google.protobuf.Duration][]): - representation, that representation will be embedded adding a field + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + title: >- + extension_options are arbitrary options that can be added by + chains - `value` which holds the custom JSON in addition to the `@type` + when the default options are not sufficient. If any of these are + present - field. Example (for message [google.protobuf.Duration][]): + and can't be handled, they will be ignored + description: TxBody is the body of a transaction that all signers sign over. + auth_info: + $ref: '#/definitions/cosmos.tx.v1beta1.AuthInfo' + title: |- + auth_info is the authorization related content of the transaction, + specifically signers, signer modes and fee + signatures: + type: array + items: + type: string + format: byte + description: >- + signatures is a list of signatures that matches the length and order + of - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - description: |- - IdentifiedClientState defines a client state with an additional client - identifier field. - ibc.core.client.v1.ConsensusStateWithHeight: + AuthInfo's signer_infos to allow connecting signature meta information + like + + public key and signing mode by position. + description: Tx is the standard type used for broadcasting transactions. + cosmos.tx.v1beta1.TxBody: type: object properties: - height: - title: consensus state height - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while keeping - version + messages: + type: array + items: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of the + serialized - number the same However some consensus algorithms may choose to reset - the + protocol buffer message. This string must contain at least - height in certain conditions e.g. hard forks, state-machine breaking - changes + one "/" character. The last segment of the URL's path must + represent - In these cases, the version number is incremented so that height - continues to + the fully qualified name of the type (as in - be monitonically increasing even as the VersionHeight gets reset - consensus_state: - title: consensus state - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized + `path/google.protobuf.Duration`). The name should be in a + canonical form - protocol buffer message. This string must contain at least + (e.g., leading "." is not accepted). - one "/" character. The last segment of the URL's path must - represent - the fully qualified name of the type (as in + In practice, teams usually precompile into the binary all types + that they - `path/google.protobuf.Duration`). The name should be in a - canonical form + expect it to use in the context of Any. However, for URLs which + use the - (e.g., leading "." is not accepted). + scheme `http`, `https`, or no scheme, one can optionally set up + a type + server that maps type URLs to message definitions as follows: - In practice, teams usually precompile into the binary all types - that they - expect it to use in the context of Any. However, for URLs which - use the + * If no scheme is provided, `https` is assumed. - scheme `http`, `https`, or no scheme, one can optionally set up a - type + * An HTTP GET on the URL must yield a [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) - server that maps type URLs to message definitions as follows: + Note: this functionality is not currently available in the + official + protobuf release, and it is not used for type URLs beginning + with - * If no scheme is provided, `https` is assumed. + type.googleapis.com. - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - Note: this functionality is not currently available in the - official + Schemes other than `http`, `https` (or the empty scheme) might + be - protobuf release, and it is not used for type URLs beginning with + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message along + with a - type.googleapis.com. + URL that describes the type of the serialized message. - Schemes other than `http`, `https` (or the empty scheme) might be + Protobuf library provides support to pack/unpack Any values in the + form - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above specified - type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message along - with a + of utility functions or additional generated methods of the Any + type. - URL that describes the type of the serialized message. + Example 1: Pack and unpack a message in C++. - Protobuf library provides support to pack/unpack Any values in the - form + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } - of utility functions or additional generated methods of the Any type. + Example 2: Pack and unpack a message in Java. + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } - Example 1: Pack and unpack a message in C++. + Example 3: Pack and unpack a message in Python. - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { + foo = Foo(...) + any = Any() + any.Pack(foo) ... - } + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... - Example 2: Pack and unpack a message in Java. + Example 4: Pack and unpack a message in Go - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } - Example 3: Pack and unpack a message in Python. + The pack methods provided by protobuf library will by default use - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... + 'type.googleapis.com/full.type.name' as the type URL and the unpack - Example 4: Pack and unpack a message in Go + methods only use the fully qualified type name after the last '/' - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } + in the type URL, for example "foo.bar.com/x/y.z" will yield type - The pack methods provided by protobuf library will by default use + name "y.z". - 'type.googleapis.com/full.type.name' as the type URL and the unpack - methods only use the fully qualified type name after the last '/' - in the type URL, for example "foo.bar.com/x/y.z" will yield type + JSON - name "y.z". + ==== + The JSON representation of an `Any` value uses the regular + representation of the deserialized, embedded message, with an - JSON + additional field `@type` which contains the type URL. Example: - ==== + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } - The JSON representation of an `Any` value uses the regular + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } - representation of the deserialized, embedded message, with an + If the embedded message type is well-known and has a custom JSON - additional field `@type` which contains the type URL. Example: + representation, that representation will be embedded adding a field - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } + `value` which holds the custom JSON in addition to the `@type` - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } + field. Example (for message [google.protobuf.Duration][]): - If the embedded message type is well-known and has a custom JSON + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + description: >- + messages is a list of messages to be executed. The required signers of - representation, that representation will be embedded adding a field + those messages define the number and order of elements in AuthInfo's - `value` which holds the custom JSON in addition to the `@type` + signer_infos and Tx's signatures. Each required signer address is + added to - field. Example (for message [google.protobuf.Duration][]): + the list only the first time it occurs. - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - description: >- - ConsensusStateWithHeight defines a consensus state with an additional - height field. - ibc.core.client.v1.QueryClientStateResponse: - type: object - properties: - client_state: - title: client state associated with the request identifier - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized + By convention, the first required signer (usually from the first + message) - protocol buffer message. This string must contain at least + is referred to as the primary signer and pays the fee for the whole - one "/" character. The last segment of the URL's path must - represent + transaction. + memo: + type: string + description: >- + memo is any arbitrary note/comment to be added to the transaction. - the fully qualified name of the type (as in + WARNING: in clients, any publicly exposed text should not be called + memo, - `path/google.protobuf.Duration`). The name should be in a - canonical form + but should be called `note` instead (see + https://github.com/cosmos/cosmos-sdk/issues/9122). + timeout_height: + type: string + format: uint64 + title: |- + timeout is the block height after which this transaction will not + be processed by the chain + extension_options: + type: array + items: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of the + serialized - (e.g., leading "." is not accepted). + protocol buffer message. This string must contain at least + one "/" character. The last segment of the URL's path must + represent - In practice, teams usually precompile into the binary all types - that they + the fully qualified name of the type (as in - expect it to use in the context of Any. However, for URLs which - use the + `path/google.protobuf.Duration`). The name should be in a + canonical form - scheme `http`, `https`, or no scheme, one can optionally set up a - type + (e.g., leading "." is not accepted). - server that maps type URLs to message definitions as follows: + In practice, teams usually precompile into the binary all types + that they - * If no scheme is provided, `https` is assumed. + expect it to use in the context of Any. However, for URLs which + use the - * An HTTP GET on the URL must yield a [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) + scheme `http`, `https`, or no scheme, one can optionally set up + a type - Note: this functionality is not currently available in the - official + server that maps type URLs to message definitions as follows: - protobuf release, and it is not used for type URLs beginning with - type.googleapis.com. + * If no scheme is provided, `https` is assumed. + * An HTTP GET on the URL must yield a [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) - Schemes other than `http`, `https` (or the empty scheme) might be + Note: this functionality is not currently available in the + official - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above specified - type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message along - with a + protobuf release, and it is not used for type URLs beginning + with - URL that describes the type of the serialized message. + type.googleapis.com. - Protobuf library provides support to pack/unpack Any values in the - form + Schemes other than `http`, `https` (or the empty scheme) might + be - of utility functions or additional generated methods of the Any type. + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message along + with a + URL that describes the type of the serialized message. - Example 1: Pack and unpack a message in C++. - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } + Protobuf library provides support to pack/unpack Any values in the + form - Example 2: Pack and unpack a message in Java. + of utility functions or additional generated methods of the Any + type. - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - Example 3: Pack and unpack a message in Python. + Example 1: Pack and unpack a message in C++. - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) + Foo foo = ...; + Any any; + any.PackFrom(foo); ... + if (any.UnpackTo(&foo)) { + ... + } - Example 4: Pack and unpack a message in Go + Example 2: Pack and unpack a message in Java. - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } - The pack methods provided by protobuf library will by default use + Example 3: Pack and unpack a message in Python. - 'type.googleapis.com/full.type.name' as the type URL and the unpack + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... - methods only use the fully qualified type name after the last '/' + Example 4: Pack and unpack a message in Go - in the type URL, for example "foo.bar.com/x/y.z" will yield type + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } - name "y.z". + The pack methods provided by protobuf library will by default use + 'type.googleapis.com/full.type.name' as the type URL and the unpack + methods only use the fully qualified type name after the last '/' - JSON + in the type URL, for example "foo.bar.com/x/y.z" will yield type - ==== + name "y.z". - The JSON representation of an `Any` value uses the regular - representation of the deserialized, embedded message, with an - additional field `@type` which contains the type URL. Example: + JSON - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } + ==== - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } + The JSON representation of an `Any` value uses the regular - If the embedded message type is well-known and has a custom JSON + representation of the deserialized, embedded message, with an - representation, that representation will be embedded adding a field + additional field `@type` which contains the type URL. Example: - `value` which holds the custom JSON in addition to the `@type` + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } - field. Example (for message [google.protobuf.Duration][]): + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while keeping - version + If the embedded message type is well-known and has a custom JSON - number the same However some consensus algorithms may choose to reset - the + representation, that representation will be embedded adding a field - height in certain conditions e.g. hard forks, state-machine breaking - changes + `value` which holds the custom JSON in addition to the `@type` - In these cases, the version number is incremented so that height - continues to + field. Example (for message [google.protobuf.Duration][]): - be monitonically increasing even as the VersionHeight gets reset - description: >- - QueryClientStateResponse is the response type for the Query/ClientState - RPC + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + title: >- + extension_options are arbitrary options that can be added by chains - method. Besides the client state, it includes a proof and the height from + when the default options are not sufficient. If any of these are + present - which the proof was retrieved. - ibc.core.client.v1.QueryClientStatesResponse: - type: object - properties: - client_states: + and can't be handled, the transaction will be rejected + non_critical_extension_options: type: array items: type: object properties: - client_id: + type_url: type: string - title: client identifier - client_state: - title: client state - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized + description: >- + A URL/resource name that uniquely identifies the type of the + serialized - protocol buffer message. This string must contain at least + protocol buffer message. This string must contain at least - one "/" character. The last segment of the URL's path must - represent + one "/" character. The last segment of the URL's path must + represent - the fully qualified name of the type (as in + the fully qualified name of the type (as in - `path/google.protobuf.Duration`). The name should be in a - canonical form + `path/google.protobuf.Duration`). The name should be in a + canonical form - (e.g., leading "." is not accepted). + (e.g., leading "." is not accepted). - In practice, teams usually precompile into the binary all - types that they + In practice, teams usually precompile into the binary all types + that they - expect it to use in the context of Any. However, for URLs - which use the + expect it to use in the context of Any. However, for URLs which + use the - scheme `http`, `https`, or no scheme, one can optionally set - up a type + scheme `http`, `https`, or no scheme, one can optionally set up + a type - server that maps type URLs to message definitions as - follows: + server that maps type URLs to message definitions as follows: - * If no scheme is provided, `https` is assumed. + * If no scheme is provided, `https` is assumed. - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on - the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) + * An HTTP GET on the URL must yield a [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) - Note: this functionality is not currently available in the - official + Note: this functionality is not currently available in the + official - protobuf release, and it is not used for type URLs beginning - with + protobuf release, and it is not used for type URLs beginning + with - type.googleapis.com. + type.googleapis.com. - Schemes other than `http`, `https` (or the empty scheme) - might be + Schemes other than `http`, `https` (or the empty scheme) might + be - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. + used with implementation specific semantics. + value: + type: string + format: byte description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message along + with a - URL that describes the type of the serialized message. + URL that describes the type of the serialized message. - Protobuf library provides support to pack/unpack Any values in - the form + Protobuf library provides support to pack/unpack Any values in the + form - of utility functions or additional generated methods of the Any - type. + of utility functions or additional generated methods of the Any + type. - Example 1: Pack and unpack a message in C++. + Example 1: Pack and unpack a message in C++. - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } - Example 2: Pack and unpack a message in Java. + Example 2: Pack and unpack a message in Java. - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } - Example 3: Pack and unpack a message in Python. + Example 3: Pack and unpack a message in Python. - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... - Example 4: Pack and unpack a message in Go + Example 4: Pack and unpack a message in Go - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } - The pack methods provided by protobuf library will by default - use + The pack methods provided by protobuf library will by default use - 'type.googleapis.com/full.type.name' as the type URL and the - unpack + 'type.googleapis.com/full.type.name' as the type URL and the unpack - methods only use the fully qualified type name after the last - '/' + methods only use the fully qualified type name after the last '/' - in the type URL, for example "foo.bar.com/x/y.z" will yield type + in the type URL, for example "foo.bar.com/x/y.z" will yield type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with an + + additional field `@type` which contains the type URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } - name "y.z". + If the embedded message type is well-known and has a custom JSON + representation, that representation will be embedded adding a field + `value` which holds the custom JSON in addition to the `@type` - JSON + field. Example (for message [google.protobuf.Duration][]): - ==== + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + title: >- + extension_options are arbitrary options that can be added by chains - The JSON representation of an `Any` value uses the regular + when the default options are not sufficient. If any of these are + present - representation of the deserialized, embedded message, with an + and can't be handled, they will be ignored + description: TxBody is the body of a transaction that all signers sign over. + tendermint.abci.Event: + type: object + properties: + type: + type: string + attributes: + type: array + items: + type: object + properties: + key: + type: string + format: byte + value: + type: string + format: byte + index: + type: boolean + format: boolean + description: 'EventAttribute is a single key-value pair, associated with an event.' + description: >- + Event allows application developers to attach additional information to - additional field `@type` which contains the type URL. Example: + ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and + ResponseDeliverTx. - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } + Later, transactions may be queried using these events. + tendermint.abci.EventAttribute: + type: object + properties: + key: + type: string + format: byte + value: + type: string + format: byte + index: + type: boolean + format: boolean + description: 'EventAttribute is a single key-value pair, associated with an event.' + cosmos.upgrade.v1beta1.ModuleVersion: + type: object + properties: + name: + type: string + title: name of the app module + version: + type: string + format: uint64 + title: consensus version of the app module + description: ModuleVersion specifies a module and its consensus version. + cosmos.upgrade.v1beta1.Plan: + type: object + properties: + name: + type: string + description: >- + Sets the name for the upgrade. This name will be used by the upgraded - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } + version of the software to apply any special "on-upgrade" commands + during - If the embedded message type is well-known and has a custom JSON + the first BeginBlock method after the upgrade is applied. It is also + used - representation, that representation will be embedded adding a - field + to detect whether a software version can handle a given upgrade. If no - `value` which holds the custom JSON in addition to the `@type` + upgrade handler with this name has been set in the software, it will + be - field. Example (for message [google.protobuf.Duration][]): + assumed that the software is out-of-date when the upgrade Time or + Height is - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - description: >- - IdentifiedClientState defines a client state with an additional - client + reached and the software will exit. + time: + type: string + format: date-time + description: >- + Deprecated: Time based upgrades have been deprecated. Time based + upgrade logic - identifier field. - description: list of stored ClientStates of the chain. - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total + has been removed from the SDK. - was set, its value is undefined otherwise + If this field is not empty, an error will be thrown. + height: + type: string + format: int64 description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - description: >- - QueryClientStatesResponse is the response type for the Query/ClientStates - RPC - - method. - ibc.core.client.v1.QueryConsensusStateResponse: - type: object - properties: - consensus_state: - title: >- - consensus state associated with the client identifier at the given - height + The height at which the upgrade must be performed. + Only used if Time is not set. + info: + type: string + title: |- + Any application specific upgrade info to be included on-chain + such as a git commit that validators could automatically upgrade to + upgraded_client_state: type: object properties: type_url: @@ -38805,507 +45256,74 @@ definitions: "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" } - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while keeping - version - - number the same However some consensus algorithms may choose to reset - the - - height in certain conditions e.g. hard forks, state-machine breaking - changes - - In these cases, the version number is incremented so that height - continues to - - be monitonically increasing even as the VersionHeight gets reset - title: >- - QueryConsensusStateResponse is the response type for the - Query/ConsensusState - - RPC method - ibc.core.client.v1.QueryConsensusStatesResponse: - type: object - properties: - consensus_states: - type: array - items: - type: object - properties: - height: - title: consensus state height - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while - keeping version - - number the same However some consensus algorithms may choose to - reset the - - height in certain conditions e.g. hard forks, state-machine - breaking changes - - In these cases, the version number is incremented so that height - continues to - - be monitonically increasing even as the VersionHeight gets reset - consensus_state: - title: consensus state - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of the - serialized - - protocol buffer message. This string must contain at least - - one "/" character. The last segment of the URL's path must - represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in a - canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary all - types that they - - expect it to use in the context of Any. However, for URLs - which use the - - scheme `http`, `https`, or no scheme, one can optionally set - up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based on - the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in the - official - - protobuf release, and it is not used for type URLs beginning - with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer message - along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values in - the form - - of utility functions or additional generated methods of the Any - type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := ptypes.MarshalAny(foo) - ... - foo := &pb.Foo{} - if err := ptypes.UnmarshalAny(any, foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by default - use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the last - '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield type - - name "y.z". - - - - JSON - - ==== - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with an - - additional field `@type` which contains the type URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom JSON - - representation, that representation will be embedded adding a - field - - `value` which holds the custom JSON in addition to the `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - description: >- - ConsensusStateWithHeight defines a consensus state with an - additional height field. - title: consensus states associated with the identifier - pagination: - title: pagination response - type: object - properties: - next_key: - type: string - format: byte - title: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - title: |- - QueryConsensusStatesResponse is the response type for the - Query/ConsensusStates RPC method - ibc.core.commitment.v1.MerklePrefix: + description: >- + Plan specifies information about a planned upgrade and when it should + occur. + cosmos.upgrade.v1beta1.QueryAppliedPlanResponse: type: object properties: - key_prefix: + height: type: string - format: byte - title: |- - MerklePrefix is merkle path prefixed to the key. - The constructed key from the Path and the key will be append(Path.KeyPath, - append(Path.KeyPrefix, key...)) - ibc.core.connection.v1.ConnectionEnd: + format: int64 + description: height is the block height at which the plan was applied. + description: >- + QueryAppliedPlanResponse is the response type for the Query/AppliedPlan + RPC + + method. + cosmos.upgrade.v1beta1.QueryCurrentPlanResponse: type: object properties: - client_id: - type: string - description: client associated with this connection. - versions: - type: array - items: - type: object - properties: - identifier: - type: string - title: unique version identifier - features: - type: array - items: - type: string - title: list of features compatible with the specified identifier - description: >- - Version defines the versioning scheme used to negotiate the IBC - verison in - - the connection handshake. - title: >- - IBC version which can be utilised to determine encodings or protocols - for - - channels or packets utilising this connection - state: - description: current state of the connection end. - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - default: STATE_UNINITIALIZED_UNSPECIFIED - counterparty: - description: counterparty chain associated with this connection. + plan: + description: plan is the current upgrade plan. type: object properties: - client_id: - type: string - description: >- - identifies the client on the counterparty chain associated with a - given - - connection. - connection_id: + name: type: string description: >- - identifies the connection end on the counterparty chain associated - with a - - given connection. - prefix: - title: commitment merkle prefix of the counterparty chain - type: object - properties: - key_prefix: - type: string - format: byte - description: >- - ConnectionEnd defines a stateful object on a chain connected to another + Sets the name for the upgrade. This name will be used by the + upgraded - separate one. NOTE: there must only be 2 defined ConnectionEnds to - establish + version of the software to apply any special "on-upgrade" commands + during - a connection between two chains. - ibc.core.connection.v1.Counterparty: - type: object - properties: - client_id: - type: string - description: >- - identifies the client on the counterparty chain associated with a - given + the first BeginBlock method after the upgrade is applied. It is + also used - connection. - connection_id: - type: string - description: >- - identifies the connection end on the counterparty chain associated - with a + to detect whether a software version can handle a given upgrade. + If no - given connection. - prefix: - title: commitment merkle prefix of the counterparty chain - type: object - properties: - key_prefix: - type: string - format: byte - description: >- - Counterparty defines the counterparty chain associated with a connection - end. - ibc.core.connection.v1.IdentifiedConnection: - type: object - properties: - id: - type: string - description: connection identifier. - client_id: - type: string - description: client associated with this connection. - versions: - type: array - items: - type: object - properties: - identifier: - type: string - title: unique version identifier - features: - type: array - items: - type: string - title: list of features compatible with the specified identifier - description: >- - Version defines the versioning scheme used to negotiate the IBC - verison in + upgrade handler with this name has been set in the software, it + will be - the connection handshake. - title: >- - IBC version which can be utilised to determine encodings or protocols - for + assumed that the software is out-of-date when the upgrade Time or + Height is - channels or packets utilising this connection - state: - description: current state of the connection end. - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - default: STATE_UNINITIALIZED_UNSPECIFIED - counterparty: - description: counterparty chain associated with this connection. - type: object - properties: - client_id: + reached and the software will exit. + time: type: string + format: date-time description: >- - identifies the client on the counterparty chain associated with a - given + Deprecated: Time based upgrades have been deprecated. Time based + upgrade logic - connection. - connection_id: - type: string - description: >- - identifies the connection end on the counterparty chain associated - with a + has been removed from the SDK. - given connection. - prefix: - title: commitment merkle prefix of the counterparty chain - type: object - properties: - key_prefix: - type: string - format: byte - description: |- - IdentifiedConnection defines a connection with additional connection - identifier field. - ibc.core.connection.v1.QueryClientConnectionsResponse: - type: object - properties: - connection_paths: - type: array - items: - type: string - description: slice of all the connection paths associated with a client. - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was generated - type: object - properties: - version_number: + If this field is not empty, an error will be thrown. + height: type: string - format: uint64 - title: the version that the client is currently on - version_height: + format: int64 + description: |- + The height at which the upgrade must be performed. + Only used if Time is not set. + info: type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while keeping - version - - number the same However some consensus algorithms may choose to reset - the - - height in certain conditions e.g. hard forks, state-machine breaking - changes - - In these cases, the version number is incremented so that height - continues to + title: >- + Any application specific upgrade info to be included on-chain - be monitonically increasing even as the VersionHeight gets reset - title: |- - QueryClientConnectionsResponse is the response type for the - Query/ClientConnections RPC method - ibc.core.connection.v1.QueryConnectionClientStateResponse: - type: object - properties: - identified_client_state: - title: client state associated with the channel - type: object - properties: - client_id: - type: string - title: client identifier - client_state: - title: client state + such as a git commit that validators could automatically upgrade + to + upgraded_client_state: type: object properties: type_url: @@ -39464,53 +45482,56 @@ definitions: `value` which holds the custom JSON in addition to the `@type` - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - description: |- - IdentifiedClientState defines a client state with an additional client - identifier field. - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while keeping - version + field. Example (for message [google.protobuf.Duration][]): - number the same However some consensus algorithms may choose to reset - the + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + description: >- + QueryCurrentPlanResponse is the response type for the Query/CurrentPlan + RPC - height in certain conditions e.g. hard forks, state-machine breaking - changes + method. + cosmos.upgrade.v1beta1.QueryModuleVersionsResponse: + type: object + properties: + module_versions: + type: array + items: + type: object + properties: + name: + type: string + title: name of the app module + version: + type: string + format: uint64 + title: consensus version of the app module + description: ModuleVersion specifies a module and its consensus version. + description: >- + module_versions is a list of module names with their consensus + versions. + description: >- + QueryModuleVersionsResponse is the response type for the + Query/ModuleVersions - In these cases, the version number is incremented so that height - continues to + RPC method. + cosmos.upgrade.v1beta1.QueryUpgradedConsensusStateResponse: + type: object + properties: + upgraded_consensus_state: + type: string + format: byte + description: >- + QueryUpgradedConsensusStateResponse is the response type for the + Query/UpgradedConsensusState - be monitonically increasing even as the VersionHeight gets reset - title: |- - QueryConnectionClientStateResponse is the response type for the - Query/ConnectionClientState RPC method - ibc.core.connection.v1.QueryConnectionConsensusStateResponse: + RPC method. + cosmos.authz.v1beta1.Grant: type: object properties: - consensus_state: - title: consensus state associated with the channel + authorization: type: object properties: type_url: @@ -39669,231 +45690,198 @@ definitions: "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" } - client_id: + expiration: type: string - title: client ID associated with the consensus state - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while keeping - version - - number the same However some consensus algorithms may choose to reset - the - - height in certain conditions e.g. hard forks, state-machine breaking - changes - - In these cases, the version number is incremented so that height - continues to - - be monitonically increasing even as the VersionHeight gets reset - title: |- - QueryConnectionConsensusStateResponse is the response type for the - Query/ConnectionConsensusState RPC method - ibc.core.connection.v1.QueryConnectionResponse: + format: date-time + description: |- + Grant gives permissions to execute + the provide method with expiration time. + cosmos.authz.v1beta1.QueryGrantsResponse: type: object properties: - connection: - title: connection associated with the request identifier - type: object - properties: - client_id: - type: string - description: client associated with this connection. - versions: - type: array - items: + grants: + type: array + items: + type: object + properties: + authorization: type: object properties: - identifier: + type_url: type: string - title: unique version identifier - features: - type: array - items: - type: string - title: list of features compatible with the specified identifier - description: >- - Version defines the versioning scheme used to negotiate the IBC - verison in + description: >- + A URL/resource name that uniquely identifies the type of the + serialized - the connection handshake. - title: >- - IBC version which can be utilised to determine encodings or - protocols for + protocol buffer message. This string must contain at least - channels or packets utilising this connection - state: - description: current state of the connection end. - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - default: STATE_UNINITIALIZED_UNSPECIFIED - counterparty: - description: counterparty chain associated with this connection. - type: object - properties: - client_id: - type: string - description: >- - identifies the client on the counterparty chain associated - with a given + one "/" character. The last segment of the URL's path must + represent - connection. - connection_id: - type: string - description: >- - identifies the connection end on the counterparty chain - associated with a + the fully qualified name of the type (as in - given connection. - prefix: - title: commitment merkle prefix of the counterparty chain - type: object - properties: - key_prefix: - type: string - format: byte - description: >- - ConnectionEnd defines a stateful object on a chain connected to - another + `path/google.protobuf.Duration`). The name should be in a + canonical form - separate one. NOTE: there must only be 2 defined ConnectionEnds to - establish + (e.g., leading "." is not accepted). - a connection between two chains. - proof: - type: string - format: byte - title: merkle proof of existence - proof_height: - title: height at which the proof was retrieved - type: object - properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: - type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while keeping - version - number the same However some consensus algorithms may choose to reset - the + In practice, teams usually precompile into the binary all + types that they - height in certain conditions e.g. hard forks, state-machine breaking - changes + expect it to use in the context of Any. However, for URLs + which use the - In these cases, the version number is incremented so that height - continues to + scheme `http`, `https`, or no scheme, one can optionally set + up a type - be monitonically increasing even as the VersionHeight gets reset - description: >- - QueryConnectionResponse is the response type for the Query/Connection RPC + server that maps type URLs to message definitions as + follows: - method. Besides the connection end, it includes a proof and the height - from - which the proof was retrieved. - ibc.core.connection.v1.QueryConnectionsResponse: - type: object - properties: - connections: - type: array - items: - type: object - properties: - id: - type: string - description: connection identifier. - client_id: - type: string - description: client associated with this connection. - versions: - type: array - items: - type: object - properties: - identifier: - type: string - title: unique version identifier - features: - type: array - items: - type: string - title: list of features compatible with the specified identifier - description: >- - Version defines the versioning scheme used to negotiate the - IBC verison in + * If no scheme is provided, `https` is assumed. - the connection handshake. - title: >- - IBC version which can be utilised to determine encodings or - protocols for + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based on + the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the + official + + protobuf release, and it is not used for type URLs beginning + with + + type.googleapis.com. - channels or packets utilising this connection - state: - description: current state of the connection end. - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - default: STATE_UNINITIALIZED_UNSPECIFIED - counterparty: - description: counterparty chain associated with this connection. - type: object - properties: - client_id: - type: string - description: >- - identifies the client on the counterparty chain associated - with a given - connection. - connection_id: + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. + value: type: string + format: byte description: >- - identifies the connection end on the counterparty chain - associated with a + Must be a valid serialized protocol buffer of the above + specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer message + along with a - given connection. - prefix: - title: commitment merkle prefix of the counterparty chain - type: object - properties: - key_prefix: - type: string - format: byte + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any values in + the form + + of utility functions or additional generated methods of the Any + type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := ptypes.MarshalAny(foo) + ... + foo := &pb.Foo{} + if err := ptypes.UnmarshalAny(any, foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by default + use + + 'type.googleapis.com/full.type.name' as the type URL and the + unpack + + methods only use the fully qualified type name after the last + '/' + + in the type URL, for example "foo.bar.com/x/y.z" will yield type + + name "y.z". + + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with an + + additional field `@type` which contains the type URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a custom JSON + + representation, that representation will be embedded adding a + field + + `value` which holds the custom JSON in addition to the `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + expiration: + type: string + format: date-time description: |- - IdentifiedConnection defines a connection with additional connection - identifier field. - description: list of stored connections of the chain. + Grant gives permissions to execute + the provide method with expiration time. + description: authorizations is a list of grants granted for grantee by granter. pagination: - title: pagination response + description: pagination defines an pagination for the response. type: object properties: next_key: @@ -39910,166 +45898,260 @@ definitions: PageRequest.count_total was set, its value is undefined otherwise - description: |- - PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - height: - title: query block height + description: >- + QueryGrantsResponse is the response type for the Query/Authorizations RPC + method. + cosmos.feegrant.v1beta1.Grant: + type: object + properties: + granter: + type: string + description: >- + granter is the address of the user granting an allowance of their + funds. + grantee: + type: string + description: >- + grantee is the address of the user being granted an allowance of + another user's funds. + allowance: + description: allowance can be any of basic and filtered fee allowance. type: object properties: - version_number: - type: string - format: uint64 - title: the version that the client is currently on - version_height: + type_url: type: string - format: uint64 - title: the height within the given version - description: >- - Normally the VersionHeight is incremented at each height while keeping - version + description: >- + A URL/resource name that uniquely identifies the type of the + serialized - number the same However some consensus algorithms may choose to reset - the + protocol buffer message. This string must contain at least - height in certain conditions e.g. hard forks, state-machine breaking - changes + one "/" character. The last segment of the URL's path must + represent - In these cases, the version number is incremented so that height - continues to + the fully qualified name of the type (as in - be monitonically increasing even as the VersionHeight gets reset - description: >- - QueryConnectionsResponse is the response type for the Query/Connections - RPC + `path/google.protobuf.Duration`). The name should be in a + canonical form - method. - ibc.core.connection.v1.State: - type: string - enum: - - STATE_UNINITIALIZED_UNSPECIFIED - - STATE_INIT - - STATE_TRYOPEN - - STATE_OPEN - default: STATE_UNINITIALIZED_UNSPECIFIED - description: |- - State defines if a connection is in one of the following states: - INIT, TRYOPEN, OPEN or UNINITIALIZED. - - - STATE_UNINITIALIZED_UNSPECIFIED: Default State - - STATE_INIT: A connection end has just started the opening handshake. - - STATE_TRYOPEN: A connection end has acknowledged the handshake step on the counterparty - chain. - - STATE_OPEN: A connection end has completed the handshake. - ibc.core.connection.v1.Version: - type: object - properties: - identifier: - type: string - title: unique version identifier - features: - type: array - items: - type: string - title: list of features compatible with the specified identifier - description: |- - Version defines the versioning scheme used to negotiate the IBC verison in - the connection handshake. - ibc.applications.transfer.v1.DenomTrace: - type: object - properties: - path: - type: string - description: >- - path defines the chain of port/channel identifiers used for tracing - the + (e.g., leading "." is not accepted). - source of the fungible token. - base_denom: - type: string - description: base denomination of the relayed fungible token. - description: >- - DenomTrace contains the base denomination for ICS20 fungible tokens and - the - source tracing information path. - ibc.applications.transfer.v1.Params: - type: object - properties: - send_enabled: - type: boolean - description: >- - send_enabled enables or disables all cross-chain token transfers from - this + In practice, teams usually precompile into the binary all types + that they - chain. - receive_enabled: - type: boolean - description: >- - receive_enabled enables or disables all cross-chain token transfers to - this + expect it to use in the context of Any. However, for URLs which + use the - chain. - description: >- - Params defines the set of IBC transfer parameters. + scheme `http`, `https`, or no scheme, one can optionally set up a + type + + server that maps type URLs to message definitions as follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the + official + + protobuf release, and it is not used for type URLs beginning with + + type.googleapis.com. - NOTE: To prevent a single token from being transferred, set the - TransfersEnabled parameter to true and then set the bank module's - SendEnabled + Schemes other than `http`, `https` (or the empty scheme) might be - parameter for the denomination to false. - ibc.applications.transfer.v1.QueryDenomTraceResponse: + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above specified + type. + title: Grant is stored in the KVStore to record a grant with full context + cosmos.feegrant.v1beta1.QueryAllowanceResponse: type: object properties: - denom_trace: - description: denom_trace returns the requested denomination trace information. + allowance: + description: allowance is a allowance granted for grantee by granter. type: object properties: - path: + granter: type: string description: >- - path defines the chain of port/channel identifiers used for - tracing the - - source of the fungible token. - base_denom: + granter is the address of the user granting an allowance of their + funds. + grantee: type: string - description: base denomination of the relayed fungible token. - description: |- - QueryDenomTraceResponse is the response type for the Query/DenomTrace RPC + description: >- + grantee is the address of the user being granted an allowance of + another user's funds. + allowance: + description: allowance can be any of basic and filtered fee allowance. + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of the + serialized + + protocol buffer message. This string must contain at least + + one "/" character. The last segment of the URL's path must + represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in a + canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary all + types that they + + expect it to use in the context of Any. However, for URLs + which use the + + scheme `http`, `https`, or no scheme, one can optionally set + up a type + + server that maps type URLs to message definitions as follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based on + the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the + official + + protobuf release, and it is not used for type URLs beginning + with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) might + be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + title: Grant is stored in the KVStore to record a grant with full context + description: >- + QueryAllowanceResponse is the response type for the Query/Allowance RPC method. - ibc.applications.transfer.v1.QueryDenomTracesResponse: + cosmos.feegrant.v1beta1.QueryAllowancesResponse: type: object properties: - denom_traces: + allowances: type: array items: type: object properties: - path: + granter: type: string description: >- - path defines the chain of port/channel identifiers used for - tracing the - - source of the fungible token. - base_denom: + granter is the address of the user granting an allowance of + their funds. + grantee: type: string - description: base denomination of the relayed fungible token. - description: >- - DenomTrace contains the base denomination for ICS20 fungible tokens - and the + description: >- + grantee is the address of the user being granted an allowance of + another user's funds. + allowance: + description: allowance can be any of basic and filtered fee allowance. + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of the + serialized + + protocol buffer message. This string must contain at least + + one "/" character. The last segment of the URL's path must + represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in a + canonical form - source tracing information path. - description: denom_traces returns all denominations trace information. + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary all + types that they + + expect it to use in the context of Any. However, for URLs + which use the + + scheme `http`, `https`, or no scheme, one can optionally set + up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results based on + the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in the + official + + protobuf release, and it is not used for type URLs beginning + with + + type.googleapis.com. + + + Schemes other than `http`, `https` (or the empty scheme) + might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the above + specified type. + title: Grant is stored in the KVStore to record a grant with full context + description: allowances are allowance's granted for grantee by granter. pagination: - description: pagination defines the pagination in the response. + description: pagination defines an pagination for the response. type: object properties: next_key: @@ -40087,32 +46169,8 @@ definitions: was set, its value is undefined otherwise description: >- - QueryConnectionsResponse is the response type for the Query/DenomTraces - RPC - + QueryAllowancesResponse is the response type for the Query/Allowances RPC method. - ibc.applications.transfer.v1.QueryParamsResponse: - type: object - properties: - params: - description: params defines the parameters of the module. - type: object - properties: - send_enabled: - type: boolean - description: >- - send_enabled enables or disables all cross-chain token transfers - from this - - chain. - receive_enabled: - type: boolean - description: >- - receive_enabled enables or disables all cross-chain token - transfers to this - - chain. - description: QueryParamsResponse is the response type for the Query/Params RPC method. securityDefinitions: kms: type: basic diff --git a/cmd/akash/cmd/genaccounts.go b/cmd/akash/cmd/genaccounts.go index 86e8939603..f0ae4a5302 100644 --- a/cmd/akash/cmd/genaccounts.go +++ b/cmd/akash/cmd/genaccounts.go @@ -9,7 +9,6 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/crypto/keyring" "github.com/cosmos/cosmos-sdk/server" sdk "github.com/cosmos/cosmos-sdk/types" @@ -44,8 +43,7 @@ contain valid denominations. Accounts may optionally be supplied with vesting pa Args: cobra.ExactArgs(2), RunE: func(cmd *cobra.Command, args []string) error { clientCtx := client.GetClientContextFromCmd(cmd) - depCdc := clientCtx.JSONMarshaler - cdc := depCdc.(codec.Marshaler) + cdc := clientCtx.Codec serverCtx := server.GetServerContextFromCmd(cmd) config := serverCtx.Config @@ -152,7 +150,7 @@ contain valid denominations. Accounts may optionally be supplied with vesting pa appState[authtypes.ModuleName] = authGenStateBz - bankGenState := banktypes.GetGenesisStateFromAppState(depCdc, appState) + bankGenState := banktypes.GetGenesisStateFromAppState(cdc, appState) bankGenState.Balances = append(bankGenState.Balances, balances) bankGenState.Balances = banktypes.SanitizeGenesisBalances(bankGenState.Balances) bankGenState.Supply = bankGenState.Supply.Add(balances.Coins...) diff --git a/cmd/akash/cmd/root.go b/cmd/akash/cmd/root.go index 1d81317e98..67544b3ba3 100644 --- a/cmd/akash/cmd/root.go +++ b/cmd/akash/cmd/root.go @@ -20,7 +20,6 @@ import ( "github.com/cosmos/cosmos-sdk/snapshots" "github.com/cosmos/cosmos-sdk/store" sdk "github.com/cosmos/cosmos-sdk/types" - authclient "github.com/cosmos/cosmos-sdk/x/auth/client" authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" vestingcli "github.com/cosmos/cosmos-sdk/x/auth/vesting/client/cli" @@ -65,7 +64,7 @@ func bindFlags(cmd *cobra.Command, v *viper.Viper) { func NewRootCmd() (*cobra.Command, params.EncodingConfig) { encodingConfig := app.MakeEncodingConfig() initClientCtx := client.Context{}. - WithJSONMarshaler(encodingConfig.Marshaler). + WithCodec(encodingConfig.Marshaler). WithInterfaceRegistry(encodingConfig.InterfaceRegistry). WithTxConfig(encodingConfig.TxConfig). WithLegacyAmino(encodingConfig.Amino). @@ -80,7 +79,7 @@ func NewRootCmd() (*cobra.Command, params.EncodingConfig) { Long: "Akash CLI Utility.\n\nAkash is a peer-to-peer marketplace for computing resources and \na deployment platform for heavily distributed applications. \nFind out more at https://akash.network", SilenceUsage: true, PersistentPreRunE: func(cmd *cobra.Command, _ []string) error { - if err := server.InterceptConfigsPreRunHandler(cmd); err != nil { + if err := server.InterceptConfigsPreRunHandler(cmd, "", nil); err != nil { return err } @@ -119,7 +118,6 @@ func Execute(rootCmd *cobra.Command) error { func initRootCmd(rootCmd *cobra.Command, encodingConfig params.EncodingConfig) { sdkutil.InitSDKConfig() - authclient.Codec = encodingConfig.Marshaler rootCmd.AddCommand( rpc.StatusCommand(), dcmd.RootCmd(), diff --git a/deploy/cmd/utils.go b/deploy/cmd/utils.go index e8c7218252..ef45708e3d 100644 --- a/deploy/cmd/utils.go +++ b/deploy/cmd/utils.go @@ -4,6 +4,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/tx" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/ovrclk/akash/sdkutil" "github.com/spf13/pflag" ) @@ -31,13 +32,13 @@ func BuildAndBroadcastTx(clientCtx client.Context, flags *pflag.FlagSet, msgs [] return nil, err } - txf, err = tx.PrepareFactory(clientCtx, txf) + txf, err = sdkutil.PrepareFactory(clientCtx, txf) if err != nil { return nil, err } // If users pass gas adjustment, then calculate gas - _, adjusted, err := tx.CalculateGas(clientCtx.QueryWithData, txf, msgs...) + _, adjusted, err := tx.CalculateGas(clientCtx, txf, msgs...) if err != nil { return nil, err } diff --git a/go.mod b/go.mod index 3e5c114fb2..2d15570644 100644 --- a/go.mod +++ b/go.mod @@ -6,11 +6,12 @@ require ( github.com/avast/retry-go v2.7.0+incompatible github.com/blang/semver v3.5.1+incompatible github.com/boz/go-lifecycle v0.1.1-0.20190620234137-5139c86739b8 - github.com/cosmos/cosmos-sdk v0.41.3 + github.com/cosmos/cosmos-sdk v0.43.0 + github.com/cosmos/ibc-go v1.0.0 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/go-kit/kit v0.10.0 github.com/gogo/protobuf v1.3.3 - github.com/golang/protobuf v1.4.3 + github.com/golang/protobuf v1.5.2 github.com/gorilla/context v1.1.1 github.com/gorilla/mux v1.8.0 github.com/gorilla/websocket v1.4.2 @@ -21,25 +22,24 @@ require ( github.com/moby/term v0.0.0-20200312100748-672ec06f55cd github.com/pkg/errors v0.9.1 github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_golang v1.8.0 + github.com/prometheus/client_golang v1.11.0 github.com/rakyll/statik v0.1.7 github.com/rs/cors v1.7.1-0.20191011001009-dcbccb712443 // indirect - github.com/rs/zerolog v1.20.0 + github.com/rs/zerolog v1.23.0 github.com/satori/go.uuid v1.2.0 github.com/shopspring/decimal v1.2.0 github.com/spf13/cast v1.3.1 - github.com/spf13/cobra v1.1.1 + github.com/spf13/cobra v1.1.3 github.com/spf13/pflag v1.0.5 - github.com/spf13/viper v1.7.1 + github.com/spf13/viper v1.8.0 github.com/stretchr/objx v0.2.1-0.20190415111823-35313a95ee26 // indirect github.com/stretchr/testify v1.7.0 github.com/subosito/gotenv v1.2.1-0.20190917103637-de67a6614a4d // indirect - github.com/tendermint/tendermint v0.34.9 + github.com/tendermint/tendermint v0.34.11 github.com/tendermint/tm-db v0.6.4 - golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 - google.golang.org/appengine v1.6.6-0.20191016204603-16bce7d3dc4e // indirect - google.golang.org/genproto v0.0.0-20210114201628-6edceaf6022f - google.golang.org/grpc v1.35.0 + golang.org/x/sync v0.0.0-20210220032951-036812b2e83c + google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c + google.golang.org/grpc v1.38.0 gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b k8s.io/api v0.19.3 k8s.io/apimachinery v0.20.2 @@ -56,12 +56,4 @@ replace github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alp replace google.golang.org/grpc => google.golang.org/grpc v1.33.2 -replace github.com/cosmos/cosmos-sdk => github.com/ovrclk/cosmos-sdk v0.41.4-akash-4 - -replace github.com/tendermint/tendermint => github.com/ovrclk/tendermint v0.34.9-akash-1 - -replace ( - github.com/cosmos/ledger-cosmos-go => github.com/ovrclk/ledger-cosmos-go v0.13.2 - github.com/zondax/hid => github.com/troian/hid v0.9.9 - github.com/zondax/ledger-go => github.com/ovrclk/ledger-go v0.13.4 -) +replace github.com/tendermint/tendermint => github.com/ovrclk/tendermint v0.34.11-patches diff --git a/go.sum b/go.sum index 5a5169a1f3..c8183f603e 100644 --- a/go.sum +++ b/go.sum @@ -4,22 +4,54 @@ cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6A cloud.google.com/go v0.44.2/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.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/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/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/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= 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= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +filippo.io/edwards25519 v1.0.0-beta.2 h1:/BZRNzm8N4K4eWfK28dL4yescorxtO7YG1yun8fy+pI= +filippo.io/edwards25519 v1.0.0-beta.2/go.mod h1:X+pm78QAUPtFLi1z9PYIlS/bdDnvbCOGKtZ+ACWEf7o= 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.1.6 h1:kVDC2uCgVwecxCk+9zoCt2uEL6dt+dfVzMvGgnVcIuM= github.com/99designs/keyring v1.1.6/go.mod h1:16e0ds7LGQQcT59QqkTg72Hh5ShM51Byv5PEmW6uoRU= +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-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest v0.9.6/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= 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/adal v0.8.2/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= 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= @@ -50,10 +82,13 @@ github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= 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.52 h1:PLSK6pwn8mYdaoaCZEMsXBpBotr4HHn9abU0yMQt0NI= github.com/Workiva/go-datastructures v1.0.52/go.mod h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA= +github.com/Zilliqa/gozilliqa-sdk v1.2.1-0.20201201074141-dd0ecada1be6/go.mod h1:eSYp2T6f0apnuW8TzhV3f6Aff2SE8Dwio++U4ha4yEM= 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/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -63,20 +98,23 @@ github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRF github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/alessio/shellescape v1.4.1 h1:V7yhSDDn8LP4lc4jS8pFkt0zCnzVJlG5JXy9BVKJUX0= github.com/alessio/shellescape v1.4.1/go.mod h1:PZAiSCk0LJaZkiCSkPv8qIobYglO3FPpyFjDCtHLS30= +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= -github.com/armon/go-metrics v0.3.6 h1:x/tmtOF9cDBoXH7XoAGOz2qqm1DknFD1590XmD/DUJ8= -github.com/armon/go-metrics v0.3.6/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= +github.com/armon/go-metrics v0.3.9 h1:O2sNqxBdvq8Eq5xmzljcYzAORli6RWCvEym4cJf9m18= +github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= 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/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/avast/retry-go v2.7.0+incompatible h1:XaGnzl7gESAideSjr+I8Hki/JBi+Yb9baHlMRPeSC84= github.com/avast/retry-go v2.7.0+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevBhOOCWBLXXy3hyiqqBrY= 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-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -86,20 +124,26 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= +github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/boz/go-lifecycle v0.1.1-0.20190620234137-5139c86739b8 h1:0SsyL78bVw6RwFKVKFHv8kdREXxuGbQKDlo7FVy7Zss= github.com/boz/go-lifecycle v0.1.1-0.20190620234137-5139c86739b8/go.mod h1:zdagAUMcC2C0OmQkBlJZFV77uF4GCVaGphAexGi7oho= +github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0= +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 h1:At9hIZdJW0s9E/fAz28nrz6AmcNlSVucCH796ZteX1M= github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94= +github.com/btcsuite/btcd v0.22.0-beta h1:LTDpDKUM5EeOFBPM8IXpinEcmZ6FWfNZbE3lfrfdnWo= +github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN0VB8L8svzOA= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +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 h1:9iZ1Terx9fMIOtq1VrwdqfsATL9MC2l8ZrUY6YZ2uts= 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/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= @@ -110,6 +154,7 @@ github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46f github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= 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 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= @@ -121,11 +166,15 @@ github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMn 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/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= 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/confio/ics23/go v0.6.3 h1:PuGK2V1NJWZ8sSkNDq91jgT/cahFEW9RGp4Y5jxulf0= +github.com/coinbase/rosetta-sdk-go v0.6.10 h1:rgHD/nHjxLh0lMEdfGDqpTtlvtSBwULqrrZ2qPdNaCM= +github.com/coinbase/rosetta-sdk-go v0.6.10/go.mod h1:J/JFMsfcePrjJZkwQFLh+hJErkAmdm9Iyy3D5Y0LfXo= github.com/confio/ics23/go v0.6.3/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg= +github.com/confio/ics23/go v0.6.6 h1:pkOy18YxxJ/r0XFDCnrl4Bjv6h4LkBSpLS6F38mrKL8= +github.com/confio/ics23/go v0.6.6/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= @@ -134,13 +183,23 @@ github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee 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-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.3.2/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/cosmos-sdk v0.43.0 h1:l2GXJMDVtJyHb35pDUCw+uyr6eZtBo8vt+7PSsq+Fjo= +github.com/cosmos/cosmos-sdk v0.43.0/go.mod h1:ctcrTEAhei9s8O3KSNvL0dxe+fVQGp07QyRb/7H9JYE= 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/iavl v0.15.3 h1:xE9r6HW8GeKeoYJN4zefpljZ1oukVScP/7M8oj6SUts= github.com/cosmos/iavl v0.15.3/go.mod h1:OLjQiAQ4fGD2KDZooyJG9yz+p2ao2IAYSbke8mVvSA4= +github.com/cosmos/iavl v0.16.0 h1:ICIOB8xysirTX27GmVAaoeSpeozzgSu9d49w36xkVJA= +github.com/cosmos/iavl v0.16.0/go.mod h1:2A8O/Jz9YwtjqXMO0CjnnbTYEEaovE8jWcwrakH3PoE= +github.com/cosmos/ibc-go v1.0.0 h1:RtIRERSENyApp6WK7Germ3/wq8xvHxfsqfW/Xh+CJ2o= +github.com/cosmos/ibc-go v1.0.0/go.mod h1:2wHKQUa+BLJMEyN635KrHfmTTwSNHBtXcqdY8JWGuXA= +github.com/cosmos/ledger-cosmos-go v0.11.1 h1:9JIYsGnXP613pb2vPjFeMMjBI5lEDsEaF6oYorTy6J4= +github.com/cosmos/ledger-cosmos-go v0.11.1/go.mod h1:J8//BsAGTo3OC/vDLjMRFLW6q0WAaXvHnVc7ZmE8iUY= +github.com/cosmos/ledger-go v0.9.2 h1:Nnao/dLwaVTk1Q5U9THldpUMMXU94BOTWPddSmVB6pI= +github.com/cosmos/ledger-go v0.9.2/go.mod h1:oZJ2hHAZROdlHiwTg4t7kP+GKIIkBT+o6c9QWFanOyI= github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= 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= @@ -155,7 +214,10 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1:dv4zxwHi5C/8AeI+4gX4dCWOIvNi7I6JCSX0HvlKPgE= +github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= +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 h1:EjjK0KqwaFMlPin1ajhP943VPENHJdEz1KLIegjaI3k= github.com/dgraph-io/badger/v2 v2.2007.2/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= @@ -166,18 +228,23 @@ 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/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.7.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/spdystream v0.0.0-20160310174837-449fdfce4d96 h1:cenwrSVm+Z7QLSV/BsnenAOcDXdX4cMv4wP0B/5QbPg= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +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/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b h1:HBah4D48ypg3J7Np4N+HY/ZR76fx3HEUGxDU6Uk39oQ= github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b/go.mod h1:7BvyPhdbLxMXIYTFPLsyJRFMsKmOZnQmzh6Gb+uquuM= +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/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= @@ -188,6 +255,7 @@ github.com/enigmampc/btcutil v1.0.3-0.20200723161021-e2fb6adb2a25 h1:2vLKys4RBU4 github.com/enigmampc/btcutil v1.0.3-0.20200723161021-e2fb6adb2a25/go.mod h1:hTr8+TLQmkUkgcuh3mcr5fjrT9c64ZzsBCdCEC6UppY= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= 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/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.2.0 h1:8ozOH5xxoMYDt5/u+yMTsVXydVCbTORFnOOoq2lumco= @@ -200,9 +268,12 @@ github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqL github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870 h1:E2s37DuLxFhQDg5gKsWoLBOB0n+ZW8s599zru8FJ2/Y= github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= +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/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= @@ -210,8 +281,13 @@ github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= 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= @@ -219,6 +295,7 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.10.0 h1:dXFJfIHVvUcpSgDOV+Ne6t7jXri8Tfv2uOLHUZ2XNuo= github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= 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 h1:TrB8swr/68K7m9CcGut2g3UOihhbcbiMAYiuTXdEih4= @@ -226,6 +303,7 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= github.com/go-openapi/jsonpointer v0.19.3 h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm72325Bq8FI3w= @@ -241,11 +319,26 @@ github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dp github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +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 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY= +github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= 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= +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/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/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= @@ -257,13 +350,19 @@ github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18h github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 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.4 h1:l75CXGRSwbaYNpl/Z2X1XIIAMSCquvXgpVZDhwEIJsc= +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= @@ -272,12 +371,15 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W 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 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= 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 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.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.2 h1:aeE13tS0IiQgFjYdoL8qN3K1N2bXXtI6Vi51/y7BpMw= -github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3 h1:ur2rms48b3Ep1dxh7aUV2FZEQ8jEVO2F6ILKx8ofkAg= +github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golangplus/bytes v0.0.0-20160111154220-45c989fe5450/go.mod h1:Bk6SMAONeMXrxql8uvOKuAZSu8aM5RUGv+1C6IJaEho= github.com/golangplus/fmt v0.0.0-20150411045040-2a5d6d7d2995/go.mod h1:lJgMEyOkYFkPcDKwRXegd+iM6E7matEszMG5HhwytU8= github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= @@ -288,19 +390,35 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a 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.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM= +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 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 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.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa h1:Q75Upo5UN4JbPFURXZ8nLKYUvF85dyFRop/vQ0Rv+64= +github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= 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/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-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/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= @@ -312,6 +430,7 @@ github.com/googleapis/gnostic v0.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyyc github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= 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/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= @@ -322,13 +441,17 @@ 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.0/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.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= 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 h1:FlFbCRLd5Jr4iYXZufAvgWN6Ao0JrI5chLINnUXDDr0= 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.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= @@ -373,16 +496,29 @@ 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-20210204194344-59a8610d2b87 h1:uUjLpLt6bVvZ72SQc/B4dXcPBw4Vgd7soowdRl52qEM= +github.com/hdevalence/ed25519consensus v0.0.0-20210204194344-59a8610d2b87/go.mod h1:XGsKKeXxeRr95aEOgipvluMPlgjr7dGlk9ZTWOjcUcg= +github.com/holiman/uint256 v1.1.1/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= 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/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.5 h1:JboBksRwiiAJWvIYJVo46AfV+IAIKZpfrSzVKj42R4Q= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/improbable-eng/grpc-web v0.14.0 h1:GdoK+cXABdB+1keuqsV1drSFO2XLYIxqt/4Rj8SWGBk= +github.com/improbable-eng/grpc-web v0.14.0/go.mod h1:6hRR09jOEG81ADP5wCQju1z71g6OL4eEvELdran/3cs= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +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.8.2 h1:k2xE7wcUomeqwY0LDCYA16y4WWfyTcMx5mKhk0d4ua0= +github.com/jhump/protoreflect v1.8.2/go.mod h1:7GcYQDdMU/O/BBrl/cX6PNHpXh6cenjd8pneu5yW7Tg= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= github.com/jmhodges/levigo v1.0.1-0.20191019112844-b572e7f4cdac h1:GcJkaxD5Wy/Ucn+L0USlpbGJy9O6+7r0nBI7ftJ7Uu0= @@ -394,18 +530,23 @@ github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCV 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 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= 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 h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= 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.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/kkdai/bstream v1.0.0/go.mod h1:FDnDOHt5Yx4p3FaHcioFT0QjDOtgUpvjeZqAs+NVZZA= +github.com/klauspost/compress v1.10.3 h1:OP96hzwJVBIHYU52pVTI6CczrxPvrGfgqF9N5eTO0Q8= +github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= 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 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -418,6 +559,9 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +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/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= github.com/libp2p/go-buffer-pool v0.0.3-0.20190619091711-d94255cb3dfc h1:0hdbTX4400jUo9y5f7n+O1s15cAcyrL0O+K+2B2iD3I= github.com/libp2p/go-buffer-pool v0.0.3-0.20190619091711-d94255cb3dfc/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= @@ -425,21 +569,30 @@ github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9 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/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= +github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77/go.mod h1:5ELEyG+X8f+meRWHuqUOewBOhvHkl7M76pdGEansxW4= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.4 h1:8KGKTcQQGm0Kv7vEbKFErAoAOFyyacLStRtQSeYtvkY= -github.com/magiconair/properties v1.8.4/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= +github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= 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/mailru/easyjson v0.7.0 h1:aizVhC/NAAcKWb+5QsU1iNOZb4Yws5UO2I+aIprQITM= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= 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-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.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= +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.13 h1:qdl+GuBjcsKKDco5BsxPJlId98mSWNKqYA+Co0SC1yA= +github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= 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= @@ -458,8 +611,10 @@ github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUb 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 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= 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.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/moby/term v0.0.0-20200312100748-672ec06f55cd h1:aY7OQNf2XqY/JQ6qREWamhI/81os/agb2BAGpcx5yWI= github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -472,8 +627,11 @@ 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/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= 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/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +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= @@ -481,12 +639,16 @@ 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/nishanths/predeclared v0.0.0-20200524104333-86fad755b4d3/go.mod h1:nt3d53pc1VYcphSCIaYAJtnPYnr3Zyn8fMq2wvPGPso= github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= 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 v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= 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= @@ -511,31 +673,27 @@ github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxS 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/otiai10/copy v1.4.2 h1:RTiz2sol3eoXPLF4o+YWqEybwfUa/Q2Nkc4ZIUs3fwI= -github.com/otiai10/copy v1.4.2/go.mod h1:XWfuS3CrI0R6IE0FbgHsEazaXO8G0LpMp9o8tos0x4E= +github.com/otiai10/copy v1.6.0 h1:IinKAryFFuPONZ7cm6T6E2QX/vcJwSnlaA5lfoaXIiQ= +github.com/otiai10/copy v1.6.0/go.mod h1:XWfuS3CrI0R6IE0FbgHsEazaXO8G0LpMp9o8tos0x4E= 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.2/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= -github.com/ovrclk/cosmos-sdk v0.41.4-akash-4 h1:0Iw/WWpWXnUSyLgW+K3dvNgH6PKxQCoJKIuGwWqWZ0I= -github.com/ovrclk/cosmos-sdk v0.41.4-akash-4/go.mod h1:iLH8pH47p0ilfI1cJVPT628FyVdvcoDMxXg1lrl/1MA= -github.com/ovrclk/ledger-cosmos-go v0.13.2 h1:MwjDy5tw1olqUHaVIGrPexvdkAl/5wMQubnfjgvT8M4= -github.com/ovrclk/ledger-cosmos-go v0.13.2/go.mod h1:yFLa7PuoNE5B4kcZhurZbVXMae2jJeaijmh91+RiSto= -github.com/ovrclk/ledger-go v0.13.4 h1:etwWczrjFota24DRSFctc0kA3MkabLfsExWxdXqvWuk= -github.com/ovrclk/ledger-go v0.13.4/go.mod h1:ePOnJDViaVfCnOfW5A4SjvgyqWupEEdsbvUEAqwliwA= -github.com/ovrclk/tendermint v0.34.9-akash-1 h1:uQl6MuQjvptQedjLItCds5foqmWpCPaiNd1iKiTM418= -github.com/ovrclk/tendermint v0.34.9-akash-1/go.mod h1:kl4Z1JwGx1I+u1SXIzMDy7Z3T8LiMeCAOnzNn6AIMT4= +github.com/ovrclk/tendermint v0.34.11-patches h1:KzyMoGgEYH2GzD8X8RTKYhssXxFLQHtIjoOyQRnxtec= +github.com/ovrclk/tendermint v0.34.11-patches/go.mod h1:aeHL7alPh4uTBIJQ8mgFEE8VwJLXI1VD3rVOmH2Mcy0= 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.8.0/go.mod h1:D6yutnOGMveHEPV7VQOuvI/gXY61bv+9bAOTRnLElKs= -github.com/pelletier/go-toml v1.8.1 h1:1Nf83orprkJyknT6h7zbuEGUEjcyVlCxSUGTENmNCRM= github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= +github.com/pelletier/go-toml v1.9.3 h1:zeC5b1GviRUyKYd6OJPvBU/mcVDVoL1OhT17FCt5dSQ= +github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +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/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= @@ -557,8 +715,9 @@ 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.8.0 h1:zvJNkoCFAnYFNC24FV8nW4JdRJ3GIFcLbg65lL/JDcw= github.com/prometheus/client_golang v1.8.0/go.mod h1:O9VU6huf47PktckDQfMTX0Y8tY0/7TSWwj+ITvv0TnM= +github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ= +github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= 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= @@ -574,16 +733,19 @@ 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.14.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.15.0 h1:4fgOnadei3EZvgRwxJ7RMpG1k1pOZth5Pc13tyspaKM= -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.29.0 h1:3jqPBvKT4OHAbje2Ql7KeaaSicDBCxMYwEJU1zRJceE= +github.com/prometheus/common v0.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= 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.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= 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.2.0 h1:wH4vA7pcjKuZzjF7lM8awk4fnuJO6idemZXoKnULUx4= github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= 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= @@ -594,15 +756,18 @@ github.com/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzy 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/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/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.1-0.20191011001009-dcbccb712443 h1:UnXq+ihqH+nJzMBSIiuRtKIwXSw5ium5ryplPnzB218= github.com/rs/cors v1.7.1-0.20191011001009-dcbccb712443/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= -github.com/rs/zerolog v1.20.0 h1:38k9hgtUBdxFwE34yS8rTHmHBa4eN16E4DJlv177LNs= -github.com/rs/zerolog v1.20.0/go.mod h1:IzD0RJ65iWH0w97OQQebJEvTZYvsCUm9WVLWBQrJRjo= +github.com/rs/zerolog v1.23.0 h1:UskrK+saS9P9Y789yNNulYKdARjPZuS35B8gJF2x60g= +github.com/rs/zerolog v1.23.0/go.mod h1:6c7hFfxPOy7TacJc4Fcdi24/J0NKYGzjG8FWRI916Qo= github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= @@ -614,6 +779,8 @@ github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa/go.mod h1:F7 github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= 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/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= @@ -634,16 +801,17 @@ github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0b 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.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/afero v1.3.4 h1:8q6vk3hthlpb2SouZcnBVKboxWQWMDNF38bwholZrJc= -github.com/spf13/afero v1.3.4/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= +github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= 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.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= -github.com/spf13/cobra v1.1.1 h1:KfztREH0tPxJJ+geloSLaAkaPkr4ki2Er5quFV1TDo4= github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= +github.com/spf13/cobra v1.1.3 h1:xghbfqPkxzxP3C/f3n5DdpAbdKLj4ZE4BWQI362l53M= +github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= 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= @@ -655,8 +823,12 @@ 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.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk= github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/spf13/viper v1.8.0 h1:QRwDgoG8xX+kp69di68D+YYTCWfYEckbZRfUlEIAal0= +github.com/spf13/viper v1.8.0/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= +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/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= @@ -668,6 +840,7 @@ github.com/stretchr/objx v0.2.1-0.20190415111823-35313a95ee26/go.mod h1:qt09Ya8v 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 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= @@ -687,48 +860,77 @@ github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoM github.com/tendermint/tm-db v0.6.3/go.mod h1:lfA1dL9/Y/Y8wwyPp2NMLyn5P5Ptr/gvDFNWtrCWSf8= github.com/tendermint/tm-db v0.6.4 h1:3N2jlnYQkXNQclQwd/eKV/NzlqPlfK21cpRRIx80XXQ= github.com/tendermint/tm-db v0.6.4/go.mod h1:dptYhIpJ2M5kUuenLr+Yyf3zQOv1SgBZcl8/BmWlMBw= +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/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/troian/hid v0.9.9 h1:5cSdziibXdFwmcP80t00SbHW+YDCFGTqNHqzH1qt6TI= -github.com/troian/hid v0.9.9/go.mod h1:n6adloQ1876oEXZr6fFsthy4FDHxwJhh7QYQspm30Ds= 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.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +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/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/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1/go.mod h1:QcJo0QPSfTONNIgpN5RA8prR7fF8nkF6cTWTcNerRO8= 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/zondax/hid v0.9.0 h1:eiT3P6vNxAEVxXMw66eZUAAnU2zD33JBkfG/EnfAKl8= +github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= 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.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/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/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= 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-20190611184440-5c40567a22f8/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-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= @@ -736,15 +938,21 @@ golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/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-20201117144127-c1f2f97bffc9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad h1:DN0cp81fZ3njFcrLCytUHRSUkqBjfTo4Tx9RJTWs0EY= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= 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= 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/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= @@ -755,18 +963,28 @@ golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHl 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/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 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= 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 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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-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= @@ -782,34 +1000,64 @@ golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR 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-20190827160401-ba9fcec4b297/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-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-20201110031124-69a78807bb2b h1:uwuIcX0g4Yl1NC5XAz37xsr2lTtcqevgzYNVt49waME= +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-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-20210525063256-abc453219eb5 h1:wjuX4b5yYQnEQHzd+CBcrcC6OVR2J1CN6mUy0oSxIPo= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 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 h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= 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-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c h1:pkQiBZBvdos9qq4wBAHqlzuZHEXo07pqV06ef90u1WI= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 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-20201020160332-67f06af15bc9 h1:SQFwaSi55rU7vdNs9Yr0Z324VNlrF+0wMqRXT4St8ck= +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 h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/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-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -841,30 +1089,59 @@ golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7w 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-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-20200622214017-ed371f2e16b4/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-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c h1:VwygUrnw9jn88c4u8GD3rZQbqrP/tgas88tPUbBxQrk= +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-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221 h1:/ZHdbVpdR/jk3g30/d4yUL0JU9kksj8+F/bnQUVLGDM= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/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-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40 h1:JWgyZ1qgdTaF3N3oxC+MdTV7qvEEgHo3otj+HB5CM7Q= +golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/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 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +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 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc= 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 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 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= @@ -886,21 +1163,52 @@ golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgw 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-20190828213141-aed303cbaa74/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-20191112195655-aa38f8e97acc/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-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= +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-20200522201501-cb1345f3a375/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/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-20210106214847-113979e3529a h1:CB3a9Nez8M13wwlr/E2YtwoU+qYHKfC+JrDa45RXXoQ= +golang.org/x/tools v0.0.0-20200717024301-6ddee64345a6/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-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-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/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 h1:kRBLX7v7Af8W7Gdbbc908OJcdgtK8bOz9Uaj8/F1ACA= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 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= @@ -912,14 +1220,31 @@ google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E 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.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= 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-0.20191016204603-16bce7d3dc4e h1:MfwK2BUGIt3D4CrP9KbL9+Glm0M2DsgJuPzkEJMbyNk= -google.golang.org/appengine v1.6.6-0.20191016204603-16bce7d3dc4e/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= @@ -931,14 +1256,42 @@ google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98 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-20201119123407-9b1e624d6bc4/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210114201628-6edceaf6022f h1:izedQ6yVIc5mZsRuXzmSreCOlzI0lCU1HpG8yEdMiKw= -google.golang.org/genproto v0.0.0-20210114201628-6edceaf6022f/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-20210222152913-aa3ee6e6a81c/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-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c h1:wtujag7C+4D6KMoulW9YauvK2lgdvCMS260jsqqBXr0= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= @@ -950,8 +1303,11 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 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 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.25.1-0.20200805231151-a709e31e5d12/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 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= 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= @@ -963,11 +1319,15 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU= +gopkg.in/ini.v1 v1.62.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= @@ -990,6 +1350,8 @@ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWh 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= k8s.io/api v0.19.3 h1:GN6ntFnv44Vptj/b+OnMW7FmzkpDoIDLZRvKX3XH9aU= k8s.io/api v0.19.3/go.mod h1:VF+5FT1B74Pw3KxMdKyinLo+zynBaMBiAfGMuldcNDs= k8s.io/apimachinery v0.19.3/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA= @@ -1017,7 +1379,11 @@ k8s.io/metrics v0.19.3 h1:p/goUqtdCslX76mSNowzZkNxiKzNRQW4bUP02U34+QQ= k8s.io/metrics v0.19.3/go.mod h1:Eap/Lk1FiAIjkaArFuv41v+ph6dbDpVGwAg7jMI+4vg= k8s.io/utils v0.0.0-20200729134348-d5654de09c73 h1:uJmqzgNWG7XyClnU/mLPBWwfKKF1K8Hf8whTseBgJcg= k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= +nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= 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/kind v0.11.1 h1:pVzOkhUwMBrCB0Q/WllQDO3v14Y+o2V0tFgjTqIUjwA= sigs.k8s.io/kind v0.11.1/go.mod h1:fRpgVhtqAWrtLB9ED7zQahUimpUXuG/iHT88xYqEGIA= sigs.k8s.io/kustomize v2.0.3+incompatible/go.mod h1:MkjgH3RdOWrievjo6c9T245dYlB5QeXV4WCbnt/PEpU= diff --git a/integration/e2e_test.go b/integration/e2e_test.go index f9535fea5b..8e6342ea17 100644 --- a/integration/e2e_test.go +++ b/integration/e2e_test.go @@ -6,8 +6,6 @@ import ( "encoding/json" "errors" "fmt" - sdktest "github.com/cosmos/cosmos-sdk/testutil" - "github.com/ovrclk/akash/provider/gateway/rest" "io/ioutil" "net" "net/url" @@ -17,6 +15,9 @@ import ( "testing" "time" + sdktest "github.com/cosmos/cosmos-sdk/testutil" + "github.com/ovrclk/akash/provider/gateway/rest" + "github.com/cosmos/cosmos-sdk/server" bankcli "github.com/cosmos/cosmos-sdk/x/bank/client/testutil" "github.com/stretchr/testify/assert" @@ -81,14 +82,14 @@ func (s *IntegrationTestSuite) SetupSuite() { // Create a network for test cfg := testutil.DefaultConfig() cfg.NumValidators = 1 - cfg.MinGasPrices = "" + cfg.MinGasPrices = fmt.Sprintf("0%s", testutil.CoinDenom) s.cfg = cfg s.network = network.New(s.T(), cfg) kb := s.network.Validators[0].ClientCtx.Keyring - _, _, err := kb.NewMnemonic("keyBar", keyring.English, sdk.FullFundraiserPath, hd.Secp256k1) + _, _, err := kb.NewMnemonic("keyBar", keyring.English, sdk.FullFundraiserPath, "", hd.Secp256k1) s.Require().NoError(err) - _, _, err = kb.NewMnemonic("keyFoo", keyring.English, sdk.FullFundraiserPath, hd.Secp256k1) + _, _, err = kb.NewMnemonic("keyFoo", keyring.English, sdk.FullFundraiserPath, "", hd.Secp256k1) s.Require().NoError(err) // Wait for the network to start @@ -226,7 +227,7 @@ func (s *IntegrationTestSuite) SetupSuite() { s.Require().NoError(err) out := &types.QueryProvidersResponse{} - err = s.validator.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), out) + err = s.validator.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), out) s.Require().NoError(err) s.Require().Len(out.Providers, 1, "Provider Creation Failed") providers := out.Providers @@ -238,7 +239,7 @@ func (s *IntegrationTestSuite) SetupSuite() { s.Require().NoError(err) var provider types.Provider - err = s.validator.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), &provider) + err = s.validator.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), &provider) s.Require().NoError(err) s.Require().Equal(createdProvider, provider) @@ -277,7 +278,7 @@ func (s *IntegrationTestSuite) closeDeployments() int { resp, err := deploycli.QueryDeploymentsExec(s.validator.ClientCtx.WithOutputFormat("json")) s.Require().NoError(err) deployResp := &dtypes.QueryDeploymentsResponse{} - err = s.validator.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), deployResp) + err = s.validator.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), deployResp) s.Require().NoError(err) s.Require().False(0 == len(deployResp.Deployments), "no deployments created") @@ -318,7 +319,7 @@ func (s *IntegrationTestSuite) TearDownSuite() { s.Require().NoError(err) qResp := &dtypes.QueryDeploymentsResponse{} - err = s.validator.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), qResp) + err = s.validator.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), qResp) s.Require().NoError(err) s.Require().True(len(qResp.Deployments) == n, "Deployment Close Failed") @@ -477,7 +478,7 @@ func (s *E2EAppNodePort) TestE2EAppNodePort() { s.Require().NoError(err) leaseRes := &mtypes.QueryLeasesResponse{} - err = s.validator.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), leaseRes) + err = s.validator.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), leaseRes) s.Require().NoError(err) s.Require().Len(leaseRes.Leases, 1) @@ -605,7 +606,7 @@ func (s *E2EDeploymentUpdate) TestE2EDeploymentUpdate() { s.Require().NoError(err) leaseRes := &mtypes.QueryLeasesResponse{} - err = s.validator.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), leaseRes) + err = s.validator.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), leaseRes) s.Require().NoError(err) s.Require().Len(leaseRes.Leases, 1) @@ -693,7 +694,7 @@ func (s *E2EApp) TestE2EApp() { s.Require().NoError(err) deployResp := &dtypes.QueryDeploymentsResponse{} - err = s.validator.ClientCtx.JSONMarshaler.UnmarshalJSON(res.Bytes(), deployResp) + err = s.validator.ClientCtx.Codec.UnmarshalJSON(res.Bytes(), deployResp) s.Require().NoError(err) s.Require().Len(deployResp.Deployments, 1, "Deployment Create Failed") deployments := deployResp.Deployments @@ -705,7 +706,7 @@ func (s *E2EApp) TestE2EApp() { s.Require().NoError(err) deploymentResp := dtypes.QueryDeploymentResponse{} - err = s.validator.ClientCtx.JSONMarshaler.UnmarshalJSON(res.Bytes(), &deploymentResp) + err = s.validator.ClientCtx.Codec.UnmarshalJSON(res.Bytes(), &deploymentResp) s.Require().NoError(err) s.Require().Equal(createdDep, deploymentResp) s.Require().NotEmpty(deploymentResp.Deployment.Version) @@ -719,7 +720,7 @@ func (s *E2EApp) TestE2EApp() { s.Require().NoError(err, "Error when fetching deployments with owner filter") deployResp = &dtypes.QueryDeploymentsResponse{} - err = s.validator.ClientCtx.JSONMarshaler.UnmarshalJSON(res.Bytes(), deployResp) + err = s.validator.ClientCtx.Codec.UnmarshalJSON(res.Bytes(), deployResp) s.Require().NoError(err) s.Require().Len(deployResp.Deployments, 1) @@ -729,7 +730,7 @@ func (s *E2EApp) TestE2EApp() { s.Require().NoError(err) result := &mtypes.QueryOrdersResponse{} - err = s.validator.ClientCtx.JSONMarshaler.UnmarshalJSON(res.Bytes(), result) + err = s.validator.ClientCtx.Codec.UnmarshalJSON(res.Bytes(), result) s.Require().NoError(err) s.Require().Len(result.Orders, 1) orders := result.Orders @@ -743,7 +744,7 @@ func (s *E2EApp) TestE2EApp() { res, err = mcli.QueryBidsExec(cctxJSON) s.Require().NoError(err) bidsRes := &mtypes.QueryBidsResponse{} - err = s.validator.ClientCtx.JSONMarshaler.UnmarshalJSON(res.Bytes(), bidsRes) + err = s.validator.ClientCtx.Codec.UnmarshalJSON(res.Bytes(), bidsRes) s.Require().NoError(err) s.Require().Len(bidsRes.Bids, 1) @@ -764,7 +765,7 @@ func (s *E2EApp) TestE2EApp() { s.Require().NoError(err) leaseRes := &mtypes.QueryLeasesResponse{} - err = s.validator.ClientCtx.JSONMarshaler.UnmarshalJSON(res.Bytes(), leaseRes) + err = s.validator.ClientCtx.Codec.UnmarshalJSON(res.Bytes(), leaseRes) s.Require().NoError(err) s.Require().Len(leaseRes.Leases, 1) @@ -895,7 +896,7 @@ func (s *E2EDeploymentUpdate) TestE2ELeaseShell() { s.Require().NoError(err) leaseRes := &mtypes.QueryLeasesResponse{} - err = s.validator.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), leaseRes) + err = s.validator.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), leaseRes) s.Require().NoError(err) lease := newestLease(leaseRes.Leases) diff --git a/integration/test_helpers.go b/integration/test_helpers.go index ab0ed2c4cf..5323bffd52 100644 --- a/integration/test_helpers.go +++ b/integration/test_helpers.go @@ -11,7 +11,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" sdk "github.com/cosmos/cosmos-sdk/types" - authclient "github.com/cosmos/cosmos-sdk/x/auth/client" + "github.com/cosmos/cosmos-sdk/x/auth/tx" "github.com/gogo/protobuf/jsonpb" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -141,7 +141,7 @@ func validateTxSuccessful(t testing.TB, cctx client.Context, data []byte) { err := jsonpb.Unmarshal(bytes.NewBuffer(data), &resp) require.NoError(t, err) - res, err := authclient.QueryTx(cctx, resp.TxHash) + res, err := tx.QueryTx(cctx, resp.TxHash) require.NoError(t, err) require.Zero(t, res.Code, res) diff --git a/make/mod.mk b/make/mod.mk index 3e2f309bc6..609a7111a6 100644 --- a/make/mod.mk +++ b/make/mod.mk @@ -20,7 +20,8 @@ modvendor: $(MODVENDOR) modsensure @echo "vendoring non-go files..." $(MODVENDOR) -copy="**/*.proto" -include=\ github.com/cosmos/cosmos-sdk/proto,\ -github.com/cosmos/cosmos-sdk/third_party/proto +github.com/cosmos/cosmos-sdk/third_party/proto,\ +github.com/cosmos/ibc-go/proto $(MODVENDOR) -copy="**/*.h **/*.c" -include=\ github.com/zondax/hid $(MODVENDOR) -copy="**/swagger.yaml" -include=\ diff --git a/script/protoc-swagger-gen.sh b/script/protoc-swagger-gen.sh index b8ebc07422..b3716b53a3 100755 --- a/script/protoc-swagger-gen.sh +++ b/script/protoc-swagger-gen.sh @@ -21,7 +21,7 @@ done # combine swagger files # uses nodejs package `swagger-combine`. # all the individual swagger files need to be configured in `config.json` for merging -swagger-combine ./client/docs/config.json \ +.cache/node_modules/.bin/swagger-combine ./client/docs/config.json \ -o ./client/docs/swagger-ui/swagger.yaml -f yaml \ --continueOnConflictingPaths true \ --includeDefinitions true diff --git a/sdkutil/address.go b/sdkutil/address.go new file mode 100644 index 0000000000..36a82ebb7f --- /dev/null +++ b/sdkutil/address.go @@ -0,0 +1,13 @@ +package sdkutil + +import sdk "github.com/cosmos/cosmos-sdk/types" + +// MustAccAddressFromBech32 creates an AccAddress from a Bech32 string. +// It panics if there is an error. +func MustAccAddressFromBech32(address string) sdk.AccAddress { + addr, err := sdk.AccAddressFromBech32(address) + if err != nil { + panic(err) + } + return addr +} diff --git a/sdkutil/broadcast.go b/sdkutil/broadcast.go index 7c618b1b5c..3f1e4d1d00 100644 --- a/sdkutil/broadcast.go +++ b/sdkutil/broadcast.go @@ -13,7 +13,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/input" "github.com/cosmos/cosmos-sdk/client/tx" sdk "github.com/cosmos/cosmos-sdk/types" - authclient "github.com/cosmos/cosmos-sdk/x/auth/client" + authtx "github.com/cosmos/cosmos-sdk/x/auth/tx" "github.com/spf13/pflag" ttypes "github.com/tendermint/tendermint/types" ) @@ -44,7 +44,7 @@ func BroadcastTX(ctx client.Context, flags *pflag.FlagSet, msgs ...sdk.Msg) erro return tx.GenerateTx(ctx, txf, msgs...) } - txf, err := tx.PrepareFactory(ctx, txf) + txf, err := PrepareFactory(ctx, txf) if err != nil { return err } @@ -67,6 +67,7 @@ func BroadcastTX(ctx client.Context, flags *pflag.FlagSet, msgs ...sdk.Msg) erro return err } + txb.SetFeeGranter(ctx.GetFeeGranterAddress()) err = tx.Sign(txf, ctx.GetFromName(), txb, true) if err != nil { return err @@ -86,6 +87,34 @@ func BroadcastTX(ctx client.Context, flags *pflag.FlagSet, msgs ...sdk.Msg) erro } +// PrepareFactory has been copied from cosmos-sdk to make it public. +// Source: https://github.com/cosmos/cosmos-sdk/blob/v0.43.0-rc2/client/tx/tx.go#L311 +func PrepareFactory(clientCtx client.Context, txf tx.Factory) (tx.Factory, error) { + from := clientCtx.GetFromAddress() + + if err := txf.AccountRetriever().EnsureExists(clientCtx, from); err != nil { + return txf, err + } + + initNum, initSeq := txf.AccountNumber(), txf.Sequence() + if initNum == 0 || initSeq == 0 { + num, seq, err := txf.AccountRetriever().GetAccountNumberSequence(clientCtx, from) + if err != nil { + return txf, err + } + + if initNum == 0 { + txf = txf.WithAccountNumber(num) + } + + if initSeq == 0 { + txf = txf.WithSequence(seq) + } + } + + return txf, nil +} + func doBroadcast(ctx client.Context, timeout time.Duration, txb ttypes.Tx) (*sdk.TxResponse, error) { switch ctx.BroadcastMode { case flags.BroadcastSync: @@ -124,7 +153,8 @@ func doBroadcast(ctx client.Context, timeout time.Duration, txb ttypes.Tx) (*sdk } // check transaction - res, err := authclient.QueryTx(ctx, cres.TxHash) + // https://github.com/cosmos/cosmos-sdk/pull/8734 + res, err := authtx.QueryTx(ctx, cres.TxHash) if err == nil { return res, nil } @@ -165,7 +195,7 @@ func adjustGas(ctx client.Context, txf tx.Factory, msgs ...sdk.Msg) (tx.Factory, if !ctx.Simulate && !txf.SimulateAndExecute() { return txf, nil } - _, adjusted, err := tx.CalculateGas(ctx.QueryWithData, txf, msgs...) + _, adjusted, err := tx.CalculateGas(ctx, txf, msgs...) if err != nil { return txf, err } diff --git a/testutil/types.go b/testutil/types.go index da4ef56728..0163819e4f 100644 --- a/testutil/types.go +++ b/testutil/types.go @@ -117,9 +117,9 @@ func DefaultConfig() network.Config { NumValidators: 4, BondDenom: CoinDenom, MinGasPrices: fmt.Sprintf("0.000006%s", CoinDenom), - AccountTokens: sdk.TokensFromConsensusPower(1000000000000), - StakingTokens: sdk.TokensFromConsensusPower(100000), - BondedTokens: sdk.TokensFromConsensusPower(100), + AccountTokens: sdk.TokensFromConsensusPower(1000000000000, sdk.DefaultPowerReduction), + StakingTokens: sdk.TokensFromConsensusPower(100000, sdk.DefaultPowerReduction), + BondedTokens: sdk.TokensFromConsensusPower(100, sdk.DefaultPowerReduction), PruningStrategy: storetypes.PruningOptionNothing, CleanupDir: true, SigningAlgo: string(hd.Secp256k1Type), diff --git a/types/attribute.pb.go b/types/attribute.pb.go index c717adea83..9f643586a9 100644 --- a/types/attribute.pb.go +++ b/types/attribute.pb.go @@ -479,10 +479,7 @@ func (m *Attribute) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthAttribute - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthAttribute } if (iNdEx + skippy) > l { @@ -596,10 +593,7 @@ func (m *SignedBy) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthAttribute - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthAttribute } if (iNdEx + skippy) > l { @@ -716,10 +710,7 @@ func (m *PlacementRequirements) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthAttribute - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthAttribute } if (iNdEx + skippy) > l { diff --git a/types/endpoint.pb.go b/types/endpoint.pb.go index b1f3854d9a..095b4deaf8 100644 --- a/types/endpoint.pb.go +++ b/types/endpoint.pb.go @@ -256,10 +256,7 @@ func (m *Endpoint) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthEndpoint - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthEndpoint } if (iNdEx + skippy) > l { diff --git a/types/resource.pb.go b/types/resource.pb.go index 304562d26d..d57d658466 100644 --- a/types/resource.pb.go +++ b/types/resource.pb.go @@ -842,10 +842,7 @@ func (m *CPU) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthResource - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthResource } if (iNdEx + skippy) > l { @@ -962,10 +959,7 @@ func (m *Memory) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthResource - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthResource } if (iNdEx + skippy) > l { @@ -1082,10 +1076,7 @@ func (m *Storage) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthResource - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthResource } if (iNdEx + skippy) > l { @@ -1277,10 +1268,7 @@ func (m *ResourceUnits) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthResource - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthResource } if (iNdEx + skippy) > l { diff --git a/types/resourcevalue.pb.go b/types/resourcevalue.pb.go index 64db259f5d..89767e5511 100644 --- a/types/resourcevalue.pb.go +++ b/types/resourcevalue.pb.go @@ -241,10 +241,7 @@ func (m *ResourceValue) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthResourcevalue - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthResourcevalue } if (iNdEx + skippy) > l { diff --git a/util/legacy/v013/helpers.go b/util/legacy/v013/helpers.go new file mode 100644 index 0000000000..350357d33f --- /dev/null +++ b/util/legacy/v013/helpers.go @@ -0,0 +1,37 @@ +package v013 + +import ( + "github.com/cosmos/cosmos-sdk/store/prefix" + "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/address" +) + +const ( + V012Bech32AddrLen = 44 // length of an akash address when encoded as a bech32 string in v0.12 +) + +// MigratePrefixBech32AddrBytes is a helper function that migrates all keys of format: +// prefix_bytes | address_bech32_bytes | arbitrary_bytes +// into format: +// prefix_bytes | address_len (1 byte) | address_bytes | arbitrary_bytes +func MigratePrefixBech32AddrBytes(store types.KVStore, prefixBz []byte) { + oldStore := prefix.NewStore(store, prefixBz) + + oldStoreIter := oldStore.Iterator(nil, nil) + defer oldStoreIter.Close() + + for ; oldStoreIter.Valid(); oldStoreIter.Next() { + bech32Addr := string(oldStoreIter.Key()[:V012Bech32AddrLen]) + addr, err := types.AccAddressFromBech32(bech32Addr) + if err != nil { + panic(err) + } + + endBz := oldStoreIter.Key()[V012Bech32AddrLen:] + newStoreKey := append(append(prefixBz, address.MustLengthPrefix(addr)...), endBz...) + + // Set new key on store. Values don't change. + store.Set(newStoreKey, oldStoreIter.Value()) + oldStore.Delete(oldStoreIter.Key()) + } +} diff --git a/x/audit/keeper/grpc_query.go b/x/audit/keeper/grpc_query.go index 35e26aac5c..15a45e4ce8 100644 --- a/x/audit/keeper/grpc_query.go +++ b/x/audit/keeper/grpc_query.go @@ -34,7 +34,7 @@ func (q Querier) AllProvidersAttributes( pageRes, err := sdkquery.Paginate(store, req.Pagination, func(key []byte, value []byte) error { var provider types.Provider - err := q.cdc.UnmarshalBinaryBare(value, &provider) + err := q.cdc.Unmarshal(value, &provider) if err != nil { return err } @@ -128,7 +128,7 @@ func (q Querier) AuditorAttributes( pageRes, err := sdkquery.Paginate(store, req.Pagination, func(key []byte, value []byte) error { var provider types.Provider - err := q.cdc.UnmarshalBinaryBare(value, &provider) + err := q.cdc.Unmarshal(value, &provider) if err != nil { return err } diff --git a/x/audit/keeper/keeper.go b/x/audit/keeper/keeper.go index 366331b2e1..7dd0605b76 100644 --- a/x/audit/keeper/keeper.go +++ b/x/audit/keeper/keeper.go @@ -24,16 +24,16 @@ type IKeeper interface { // Keeper of the provider store type Keeper struct { skey sdk.StoreKey - cdc codec.BinaryMarshaler + cdc codec.BinaryCodec } // NewKeeper creates and returns an instance for Market keeper -func NewKeeper(cdc codec.BinaryMarshaler, skey sdk.StoreKey) Keeper { +func NewKeeper(cdc codec.BinaryCodec, skey sdk.StoreKey) Keeper { return Keeper{cdc: cdc, skey: skey} } // Codec returns keeper codec -func (k Keeper) Codec() codec.BinaryMarshaler { +func (k Keeper) Codec() codec.BinaryCodec { return k.cdc } @@ -47,7 +47,7 @@ func (k Keeper) GetProviderByAuditor(ctx sdk.Context, id types.ProviderID) (type } var val types.Provider - k.cdc.MustUnmarshalBinaryBare(buf, &val) + k.cdc.MustUnmarshal(buf, &val) return val, true } @@ -65,7 +65,7 @@ func (k Keeper) GetProviderAttributes(ctx sdk.Context, id sdk.Address) (types.Pr for ; iter.Valid(); iter.Next() { var val types.Provider - k.cdc.MustUnmarshalBinaryBare(iter.Value(), &val) + k.cdc.MustUnmarshal(iter.Value(), &val) attr = append(attr, val) } @@ -92,7 +92,7 @@ func (k Keeper) CreateOrUpdateProviderAttributes(ctx sdk.Context, id types.Provi buf := store.Get(key) if buf != nil { tmp := types.Provider{} - k.cdc.MustUnmarshalBinaryBare(buf, &tmp) + k.cdc.MustUnmarshal(buf, &tmp) kv := make(map[string]string) @@ -120,7 +120,7 @@ func (k Keeper) CreateOrUpdateProviderAttributes(ctx sdk.Context, id types.Provi return prov.Attributes[i].Key < prov.Attributes[j].Key }) - store.Set(key, k.cdc.MustMarshalBinaryBare(&prov)) + store.Set(key, k.cdc.MustMarshal(&prov)) ctx.EventManager().EmitEvent( types.NewEventTrustedAuditorCreated(id.Owner, id.Auditor).ToSDKEvent(), @@ -147,7 +147,7 @@ func (k Keeper) DeleteProviderAttributes(ctx sdk.Context, id types.ProviderID, k } tmp := types.Provider{} - k.cdc.MustUnmarshalBinaryBare(buf, &tmp) + k.cdc.MustUnmarshal(buf, &tmp) kv := make(map[string]string) @@ -184,7 +184,7 @@ func (k Keeper) DeleteProviderAttributes(ctx sdk.Context, id types.ProviderID, k prov.Attributes = attr - store.Set(key, k.cdc.MustMarshalBinaryBare(&prov)) + store.Set(key, k.cdc.MustMarshal(&prov)) } } @@ -206,7 +206,7 @@ func (k Keeper) WithProviders(ctx sdk.Context, fn func(types.Provider) bool) { for ; iter.Valid(); iter.Next() { var val types.Provider - k.cdc.MustUnmarshalBinaryBare(iter.Value(), &val) + k.cdc.MustUnmarshal(iter.Value(), &val) if stop := fn(val); stop { break } @@ -223,7 +223,7 @@ func (k Keeper) WithProvider(ctx sdk.Context, id sdk.Address, fn func(types.Prov for ; iter.Valid(); iter.Next() { var val types.Provider - k.cdc.MustUnmarshalBinaryBare(iter.Value(), &val) + k.cdc.MustUnmarshal(iter.Value(), &val) if stop := fn(val); stop { break } diff --git a/x/audit/keeper/key.go b/x/audit/keeper/key.go index 5020004d1f..87fc2b7b2f 100644 --- a/x/audit/keeper/key.go +++ b/x/audit/keeper/key.go @@ -3,22 +3,20 @@ package keeper import ( "bytes" + "github.com/cosmos/cosmos-sdk/types/address" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/ovrclk/akash/x/audit/types" ) -var ( - prefixProviderID = []byte{0x01} -) - func providerKey(id types.ProviderID) []byte { - buf := bytes.NewBuffer(prefixProviderID) - if _, err := buf.Write(id.Owner.Bytes()); err != nil { + buf := bytes.NewBuffer(types.PrefixProviderID()) + if _, err := buf.Write(address.MustLengthPrefix(id.Owner.Bytes())); err != nil { panic(err) } - if _, err := buf.Write(id.Auditor.Bytes()); err != nil { + if _, err := buf.Write(address.MustLengthPrefix(id.Auditor.Bytes())); err != nil { panic(err) } @@ -26,8 +24,8 @@ func providerKey(id types.ProviderID) []byte { } func providerPrefix(id sdk.Address) []byte { - buf := bytes.NewBuffer(prefixProviderID) - if _, err := buf.Write(id.Bytes()); err != nil { + buf := bytes.NewBuffer(types.PrefixProviderID()) + if _, err := buf.Write(address.MustLengthPrefix(id.Bytes())); err != nil { panic(err) } diff --git a/x/audit/keeper/migrations.go b/x/audit/keeper/migrations.go new file mode 100644 index 0000000000..c7753959e2 --- /dev/null +++ b/x/audit/keeper/migrations.go @@ -0,0 +1,21 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + v013 "github.com/ovrclk/akash/x/audit/legacy/v013" +) + +// Migrator is a struct for handling in-place store migrations. +type Migrator struct { + keeper Keeper +} + +// NewMigrator returns a new Migrator. +func NewMigrator(k Keeper) Migrator { + return Migrator{keeper: k} +} + +// Migrate1to2 migrates from version 1 to 2. +func (m Migrator) Migrate1to2(ctx sdk.Context) error { + return v013.MigrateStore(ctx, m.keeper.skey) +} diff --git a/x/audit/legacy/v013/store.go b/x/audit/legacy/v013/store.go new file mode 100644 index 0000000000..4d1ad66a53 --- /dev/null +++ b/x/audit/legacy/v013/store.go @@ -0,0 +1,18 @@ +package v013 + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + v043 "github.com/cosmos/cosmos-sdk/x/distribution/legacy/v043" + "github.com/ovrclk/akash/x/audit/types" +) + +// MigrateStore performs in-place store migrations from v0.12 to v0.13. The +// migration includes: +// +// - Change addresses to be length-prefixed +func MigrateStore(ctx sdk.Context, storeKey sdk.StoreKey) error { + store := ctx.KVStore(storeKey) + v043.MigratePrefixAddressAddress(store, types.PrefixProviderID()) + + return nil +} diff --git a/x/audit/module.go b/x/audit/module.go index 67e9b63f13..e26a0dd6b9 100644 --- a/x/audit/module.go +++ b/x/audit/module.go @@ -37,7 +37,7 @@ var ( // AppModuleBasic defines the basic application module used by the provider module. type AppModuleBasic struct { - cdc codec.Marshaler + cdc codec.Codec } // Name returns provider module's name @@ -57,12 +57,12 @@ func (b AppModuleBasic) RegisterInterfaces(registry cdctypes.InterfaceRegistry) // DefaultGenesis returns default genesis state as raw bytes for the provider // module. -func (AppModuleBasic) DefaultGenesis(cdc codec.JSONMarshaler) json.RawMessage { +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { return cdc.MustMarshalJSON(DefaultGenesisState()) } // ValidateGenesis validation check of the Genesis -func (AppModuleBasic) ValidateGenesis(cdc codec.JSONMarshaler, _ client.TxEncodingConfig, bz json.RawMessage) error { +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, _ client.TxEncodingConfig, bz json.RawMessage) error { // AuditedAttributes may not be present in genesis file. // todo: in fact we don't have any requirements of genesis entry for audited attributes for now if bz == nil { @@ -122,7 +122,7 @@ type AppModule struct { } // NewAppModule creates a new AppModule object -func NewAppModule(cdc codec.Marshaler, k keeper.Keeper) AppModule { +func NewAppModule(cdc codec.Codec, k keeper.Keeper) AppModule { return AppModule{ AppModuleBasic: AppModuleBasic{cdc: cdc}, keeper: k, @@ -157,6 +157,11 @@ func (am AppModule) RegisterServices(cfg module.Configurator) { types.RegisterMsgServer(cfg.MsgServer(), handler.NewMsgServerImpl(am.keeper)) querier := keeper.Querier{Keeper: am.keeper} types.RegisterQueryServer(cfg.QueryServer(), querier) + + m := keeper.NewMigrator(am.keeper) + if err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil { + panic(err) + } } // RegisterQueryService registers a GRPC query service to respond to the @@ -177,7 +182,7 @@ func (am AppModule) EndBlock(ctx sdk.Context, _ abci.RequestEndBlock) []abci.Val // InitGenesis performs genesis initialization for the audit module. It returns // no validator updates. -func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONMarshaler, data json.RawMessage) []abci.ValidatorUpdate { +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate { var genesisState types.GenesisState cdc.MustUnmarshalJSON(data, &genesisState) return InitGenesis(ctx, am.keeper, &genesisState) @@ -185,11 +190,16 @@ func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONMarshaler, data j // ExportGenesis returns the exported genesis state as raw bytes for the audit // module. -func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONMarshaler) json.RawMessage { +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { gs := ExportGenesis(ctx, am.keeper) return cdc.MustMarshalJSON(gs) } +// ConsensusVersion implements module.AppModule#ConsensusVersion +func (am AppModule) ConsensusVersion() uint64 { + return 2 +} + // ____________________________________________________________________________ // AppModuleSimulation implements an application simulation module for the audit module. diff --git a/x/audit/types/audit.pb.go b/x/audit/types/audit.pb.go index 80a2288b5c..17e2ec0cb1 100644 --- a/x/audit/types/audit.pb.go +++ b/x/audit/types/audit.pb.go @@ -1238,10 +1238,7 @@ func (m *Provider) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthAudit - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthAudit } if (iNdEx + skippy) > l { @@ -1389,10 +1386,7 @@ func (m *AuditedAttributes) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthAudit - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthAudit } if (iNdEx + skippy) > l { @@ -1476,10 +1470,7 @@ func (m *AttributesResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthAudit - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthAudit } if (iNdEx + skippy) > l { @@ -1593,10 +1584,7 @@ func (m *AttributesFilters) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthAudit - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthAudit } if (iNdEx + skippy) > l { @@ -1744,10 +1732,7 @@ func (m *MsgSignProviderAttributes) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthAudit - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthAudit } if (iNdEx + skippy) > l { @@ -1797,10 +1782,7 @@ func (m *MsgSignProviderAttributesResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthAudit - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthAudit } if (iNdEx + skippy) > l { @@ -1946,10 +1928,7 @@ func (m *MsgDeleteProviderAttributes) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthAudit - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthAudit } if (iNdEx + skippy) > l { @@ -1999,10 +1978,7 @@ func (m *MsgDeleteProviderAttributesResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthAudit - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthAudit } if (iNdEx + skippy) > l { diff --git a/x/audit/types/genesis.pb.go b/x/audit/types/genesis.pb.go index 798c71b91f..3b82ecdb69 100644 --- a/x/audit/types/genesis.pb.go +++ b/x/audit/types/genesis.pb.go @@ -231,10 +231,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenesis - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenesis } if (iNdEx + skippy) > l { diff --git a/x/audit/types/key.go b/x/audit/types/key.go index 7696f8025d..2563501ba9 100644 --- a/x/audit/types/key.go +++ b/x/audit/types/key.go @@ -10,3 +10,7 @@ const ( // RouterKey is the message route for provider RouterKey = ModuleName ) + +func PrefixProviderID() []byte { + return []byte{0x01} +} diff --git a/x/audit/types/query.pb.go b/x/audit/types/query.pb.go index 14c3c30bc8..40eb2be3b9 100644 --- a/x/audit/types/query.pb.go +++ b/x/audit/types/query.pb.go @@ -1066,10 +1066,7 @@ func (m *QueryProvidersResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -1183,10 +1180,7 @@ func (m *QueryProviderRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -1272,10 +1266,7 @@ func (m *QueryAllProvidersAttributesRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -1393,10 +1384,7 @@ func (m *QueryProviderAttributesRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -1510,10 +1498,7 @@ func (m *QueryProviderAuditorRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -1631,10 +1616,7 @@ func (m *QueryAuditorAttributesRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { diff --git a/x/audit/types/query.pb.gw.go b/x/audit/types/query.pb.gw.go index 8c3739d639..e4af45b61c 100644 --- a/x/audit/types/query.pb.gw.go +++ b/x/audit/types/query.pb.gw.go @@ -20,6 +20,7 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" ) @@ -30,6 +31,7 @@ var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray var _ = descriptor.ForMessage +var _ = metadata.Join var ( filter_Query_AllProvidersAttributes_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} @@ -290,12 +292,14 @@ func local_request_Query_AuditorAttributes_0(ctx context.Context, marshaler runt // 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 (such as grpc.SendHeader, etc) to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +// 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_AllProvidersAttributes_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 { @@ -303,6 +307,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_AllProvidersAttributes_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) @@ -316,6 +321,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_ProviderAttributes_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 { @@ -323,6 +330,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_ProviderAttributes_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) @@ -336,6 +344,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_ProviderAuditorAttributes_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 { @@ -343,6 +353,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_ProviderAuditorAttributes_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) @@ -356,6 +367,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_AuditorAttributes_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 { @@ -363,6 +376,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_AuditorAttributes_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) diff --git a/x/cert/client/cli/tx.go b/x/cert/client/cli/tx.go index 85294ca6bf..914e3e6bbd 100644 --- a/x/cert/client/cli/tx.go +++ b/x/cert/client/cli/tx.go @@ -21,7 +21,6 @@ import ( sdkclient "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" cinpuit "github.com/cosmos/cosmos-sdk/client/input" - "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/server" "github.com/cosmos/cosmos-sdk/x/genutil" genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" @@ -303,7 +302,7 @@ func addCertToGenesis(cmd *cobra.Command, cert types.GenesisCertificate) error { return err } - cdc := cctx.JSONMarshaler.(codec.Marshaler) + cdc := cctx.Codec serverCtx := server.GetServerContextFromCmd(cmd) config := serverCtx.Config diff --git a/x/cert/genesis.go b/x/cert/genesis.go index 4a6d6275c0..e66d9eda36 100644 --- a/x/cert/genesis.go +++ b/x/cert/genesis.go @@ -53,7 +53,7 @@ func DefaultGenesisState() *types.GenesisState { // GetGenesisStateFromAppState returns x/cert GenesisState given raw application // genesis state. -func GetGenesisStateFromAppState(cdc codec.JSONMarshaler, appState map[string]json.RawMessage) *types.GenesisState { +func GetGenesisStateFromAppState(cdc codec.JSONCodec, appState map[string]json.RawMessage) *types.GenesisState { var genesisState types.GenesisState if appState[ModuleName] != nil { diff --git a/x/cert/keeper/keeper.go b/x/cert/keeper/keeper.go index 79472f4d1b..558e93f495 100644 --- a/x/cert/keeper/keeper.go +++ b/x/cert/keeper/keeper.go @@ -10,7 +10,7 @@ import ( // Keeper of the provider store type Keeper interface { Querier() types.QueryServer - Codec() codec.BinaryMarshaler + Codec() codec.BinaryCodec CreateCertificate(sdk.Context, sdk.Address, []byte, []byte) error RevokeCertificate(sdk.Context, types.CertID) error GetCertificateByID(ctx sdk.Context, id types.CertID) (types.CertificateResponse, bool) @@ -22,13 +22,13 @@ type Keeper interface { type keeper struct { skey sdk.StoreKey - cdc codec.BinaryMarshaler + cdc codec.BinaryCodec } var _ Keeper = (*keeper)(nil) // NewKeeper creates and returns an instance for Market keeper -func NewKeeper(cdc codec.BinaryMarshaler, skey sdk.StoreKey) Keeper { +func NewKeeper(cdc codec.BinaryCodec, skey sdk.StoreKey) Keeper { return &keeper{cdc: cdc, skey: skey} } @@ -38,7 +38,7 @@ func (k keeper) Querier() types.QueryServer { } // Codec returns keeper codec -func (k keeper) Codec() codec.BinaryMarshaler { +func (k keeper) Codec() codec.BinaryCodec { return k.cdc } @@ -59,18 +59,13 @@ func (k keeper) CreateCertificate(ctx sdk.Context, owner sdk.Address, crt []byte return types.ErrCertificateExists } - iter := sdk.KVStorePrefixIterator(store, certificatePrefix(owner)) - defer func() { - _ = iter.Close() - }() - val := types.Certificate{ State: types.CertificateValid, Cert: crt, Pubkey: pubkey, } - store.Set(key, k.cdc.MustMarshalBinaryBare(&val)) + store.Set(key, k.cdc.MustMarshal(&val)) return nil } @@ -85,7 +80,7 @@ func (k keeper) RevokeCertificate(ctx sdk.Context, id types.CertID) error { } var cert types.Certificate - k.cdc.MustUnmarshalBinaryBare(buf, &cert) + k.cdc.MustUnmarshal(buf, &cert) if cert.State == types.CertificateRevoked { return types.ErrCertificateAlreadyRevoked @@ -93,7 +88,7 @@ func (k keeper) RevokeCertificate(ctx sdk.Context, id types.CertID) error { cert.State = types.CertificateRevoked - store.Set(key, k.cdc.MustMarshalBinaryBare(&cert)) + store.Set(key, k.cdc.MustMarshal(&cert)) return nil } @@ -108,7 +103,7 @@ func (k keeper) GetCertificateByID(ctx sdk.Context, id types.CertID) (types.Cert } var val types.Certificate - k.cdc.MustUnmarshalBinaryBare(buf, &val) + k.cdc.MustUnmarshal(buf, &val) return types.CertificateResponse{ Certificate: val, @@ -191,7 +186,7 @@ func (k keeper) mustUnmarshal(key, val []byte) types.CertificateResponse { item := types.CertificateResponse{ Serial: serial.String(), } - k.cdc.MustUnmarshalBinaryBare(val, &item.Certificate) + k.cdc.MustUnmarshal(val, &item.Certificate) return item } @@ -202,7 +197,7 @@ func (k keeper) unmarshalIterator(key, val []byte) (types.CertificateResponse, e Serial: serial.String(), } - if err := k.cdc.UnmarshalBinaryBare(val, &item.Certificate); err != nil { + if err := k.cdc.Unmarshal(val, &item.Certificate); err != nil { return types.CertificateResponse{}, err } diff --git a/x/cert/keeper/key.go b/x/cert/keeper/key.go index 6d80f01ca1..13457c3f39 100644 --- a/x/cert/keeper/key.go +++ b/x/cert/keeper/key.go @@ -5,21 +5,20 @@ import ( "math/big" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/address" "github.com/ovrclk/akash/x/cert/types" ) const ( - keyAddrPrefixLen = 1 + sdk.AddrLen -) - -var ( - prefixCertificateID = []byte{0x01} + keyAddrPrefixLen = 2 // 1 byte for PrefixCertificateID followed by 1 byte for owner_address_len ) +// certificateKey creates a store key of the format: +// prefix_bytes | owner_address_len (1 byte) | owner_address_bytes | serial_bytes func certificateKey(id types.CertID) []byte { - buf := bytes.NewBuffer(prefixCertificateID) - if _, err := buf.Write(id.Owner.Bytes()); err != nil { + buf := bytes.NewBuffer(types.PrefixCertificateID()) + if _, err := buf.Write(address.MustLengthPrefix(id.Owner.Bytes())); err != nil { panic(err) } @@ -31,8 +30,8 @@ func certificateKey(id types.CertID) []byte { } func certificatePrefix(id sdk.Address) []byte { - buf := bytes.NewBuffer(prefixCertificateID) - if _, err := buf.Write(id.Bytes()); err != nil { + buf := bytes.NewBuffer(types.PrefixCertificateID()) + if _, err := buf.Write(address.MustLengthPrefix(id.Bytes())); err != nil { panic(err) } @@ -40,9 +39,14 @@ func certificatePrefix(id sdk.Address) []byte { } func certificateSerialFromKey(key []byte) big.Int { - if len(key) < keyAddrPrefixLen+1 { + if len(key) < keyAddrPrefixLen { + panic("invalid key size") + } + + addrLen := int(key[keyAddrPrefixLen-1]) + if len(key) < keyAddrPrefixLen+addrLen+1 { panic("invalid key size") } - return *new(big.Int).SetBytes(key[keyAddrPrefixLen:]) + return *new(big.Int).SetBytes(key[keyAddrPrefixLen+addrLen:]) } diff --git a/x/cert/keeper/migrations.go b/x/cert/keeper/migrations.go new file mode 100644 index 0000000000..5083170b65 --- /dev/null +++ b/x/cert/keeper/migrations.go @@ -0,0 +1,21 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + v013 "github.com/ovrclk/akash/x/cert/legacy/v013" +) + +// Migrator is a struct for handling in-place store migrations. +type Migrator struct { + keeper *keeper +} + +// NewMigrator returns a new Migrator. +func NewMigrator(k Keeper) Migrator { + return Migrator{keeper: k.(*keeper)} +} + +// Migrate1to2 migrates from version 1 to 2. +func (m Migrator) Migrate1to2(ctx sdk.Context) error { + return v013.MigrateStore(ctx, m.keeper.skey) +} diff --git a/x/cert/legacy/v013/store.go b/x/cert/legacy/v013/store.go new file mode 100644 index 0000000000..a58927a103 --- /dev/null +++ b/x/cert/legacy/v013/store.go @@ -0,0 +1,18 @@ +package v013 + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + v043 "github.com/cosmos/cosmos-sdk/x/distribution/legacy/v043" + "github.com/ovrclk/akash/x/cert/types" +) + +// MigrateStore performs in-place store migrations from v0.12 to v0.13. The +// migration includes: +// +// - Change addresses to be length-prefixed +func MigrateStore(ctx sdk.Context, storeKey sdk.StoreKey) error { + store := ctx.KVStore(storeKey) + v043.MigratePrefixAddressBytes(store, types.PrefixCertificateID()) + + return nil +} diff --git a/x/cert/module.go b/x/cert/module.go index 5ceae67b44..53f3b61acd 100644 --- a/x/cert/module.go +++ b/x/cert/module.go @@ -35,7 +35,7 @@ var ( // AppModuleBasic defines the basic application module used by the provider module. type AppModuleBasic struct { - cdc codec.Marshaler + cdc codec.Codec } // Name returns provider module's name @@ -55,12 +55,12 @@ func (b AppModuleBasic) RegisterInterfaces(registry cdctypes.InterfaceRegistry) // DefaultGenesis returns default genesis state as raw bytes for the provider // module. -func (AppModuleBasic) DefaultGenesis(cdc codec.JSONMarshaler) json.RawMessage { +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { return cdc.MustMarshalJSON(DefaultGenesisState()) } // ValidateGenesis validation check of the Genesis -func (AppModuleBasic) ValidateGenesis(cdc codec.JSONMarshaler, _ client.TxEncodingConfig, bz json.RawMessage) error { +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, _ client.TxEncodingConfig, bz json.RawMessage) error { if bz == nil { return nil } @@ -110,7 +110,7 @@ type AppModule struct { } // NewAppModule creates a new AppModule object -func NewAppModule(cdc codec.Marshaler, k keeper.Keeper) AppModule { +func NewAppModule(cdc codec.Codec, k keeper.Keeper) AppModule { return AppModule{ AppModuleBasic: AppModuleBasic{cdc: cdc}, keeper: k, @@ -144,6 +144,11 @@ func (am AppModule) LegacyQuerierHandler(_ *codec.LegacyAmino) sdk.Querier { func (am AppModule) RegisterServices(cfg module.Configurator) { types.RegisterMsgServer(cfg.MsgServer(), handler.NewMsgServerImpl(am.keeper)) types.RegisterQueryServer(cfg.QueryServer(), am.keeper.Querier()) + + m := keeper.NewMigrator(am.keeper) + if err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil { + panic(err) + } } // BeginBlock performs no-op @@ -157,7 +162,7 @@ func (am AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.Valid // InitGenesis performs genesis initialization for the audit module. It returns // no validator updates. -func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONMarshaler, data json.RawMessage) []abci.ValidatorUpdate { +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate { var genesisState types.GenesisState cdc.MustUnmarshalJSON(data, &genesisState) return InitGenesis(ctx, am.keeper, &genesisState) @@ -165,11 +170,16 @@ func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONMarshaler, data j // ExportGenesis returns the exported genesis state as raw bytes for the audit // module. -func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONMarshaler) json.RawMessage { +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { gs := ExportGenesis(ctx, am.keeper) return cdc.MustMarshalJSON(gs) } +// ConsensusVersion implements module.AppModule#ConsensusVersion +func (am AppModule) ConsensusVersion() uint64 { + return 2 +} + // ____________________________________________________________________________ // AppModuleSimulation implements an application simulation module for the audit module. diff --git a/x/cert/types/cert.pb.go b/x/cert/types/cert.pb.go index 724673dc51..16538ef89f 100644 --- a/x/cert/types/cert.pb.go +++ b/x/cert/types/cert.pb.go @@ -1058,10 +1058,7 @@ func (m *CertificateID) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthCert - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthCert } if (iNdEx + skippy) > l { @@ -1198,10 +1195,7 @@ func (m *Certificate) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthCert - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthCert } if (iNdEx + skippy) > l { @@ -1347,10 +1341,7 @@ func (m *CertificateFilter) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthCert - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthCert } if (iNdEx + skippy) > l { @@ -1500,10 +1491,7 @@ func (m *MsgCreateCertificate) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthCert - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthCert } if (iNdEx + skippy) > l { @@ -1553,10 +1541,7 @@ func (m *MsgCreateCertificateResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthCert - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthCert } if (iNdEx + skippy) > l { @@ -1639,10 +1624,7 @@ func (m *MsgRevokeCertificate) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthCert - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthCert } if (iNdEx + skippy) > l { @@ -1692,10 +1674,7 @@ func (m *MsgRevokeCertificateResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthCert - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthCert } if (iNdEx + skippy) > l { diff --git a/x/cert/types/genesis.go b/x/cert/types/genesis.go index dc6b580932..b39dd3013a 100644 --- a/x/cert/types/genesis.go +++ b/x/cert/types/genesis.go @@ -47,7 +47,7 @@ func (m *GenesisState) Validate() error { // GetGenesisStateFromAppState returns x/cert GenesisState given raw application // genesis state. -func GetGenesisStateFromAppState(cdc codec.JSONMarshaler, appState map[string]json.RawMessage) *GenesisState { +func GetGenesisStateFromAppState(cdc codec.JSONCodec, appState map[string]json.RawMessage) *GenesisState { var genesisState GenesisState if appState[ModuleName] != nil { diff --git a/x/cert/types/genesis.pb.go b/x/cert/types/genesis.pb.go index a1421d0a7f..df23a611db 100644 --- a/x/cert/types/genesis.pb.go +++ b/x/cert/types/genesis.pb.go @@ -376,10 +376,7 @@ func (m *GenesisCertificate) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenesis - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenesis } if (iNdEx + skippy) > l { @@ -463,10 +460,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenesis - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenesis } if (iNdEx + skippy) > l { diff --git a/x/cert/types/key.go b/x/cert/types/key.go index 675b72a0d3..34fec7e1e2 100644 --- a/x/cert/types/key.go +++ b/x/cert/types/key.go @@ -10,3 +10,7 @@ const ( // RouterKey is the message route for provider RouterKey = ModuleName ) + +func PrefixCertificateID() []byte { + return []byte{0x01} +} diff --git a/x/cert/types/query.pb.go b/x/cert/types/query.pb.go index 0470d7c487..dbcf9a8202 100644 --- a/x/cert/types/query.pb.go +++ b/x/cert/types/query.pb.go @@ -612,10 +612,7 @@ func (m *CertificateResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -734,10 +731,7 @@ func (m *QueryCertificatesRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -857,10 +851,7 @@ func (m *QueryCertificatesResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { diff --git a/x/cert/types/query.pb.gw.go b/x/cert/types/query.pb.gw.go index 9737bedd0d..83483d7f69 100644 --- a/x/cert/types/query.pb.gw.go +++ b/x/cert/types/query.pb.gw.go @@ -20,6 +20,7 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" ) @@ -30,6 +31,7 @@ var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray var _ = descriptor.ForMessage +var _ = metadata.Join var ( filter_Query_Certificates_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} @@ -70,12 +72,14 @@ func local_request_Query_Certificates_0(ctx context.Context, marshaler runtime.M // 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 (such as grpc.SendHeader, etc) to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +// 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_Certificates_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 { @@ -83,6 +87,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Certificates_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) diff --git a/x/deployment/client/cli/cli_test.go b/x/deployment/client/cli/cli_test.go index 68a578a312..ec2585b8dc 100644 --- a/x/deployment/client/cli/cli_test.go +++ b/x/deployment/client/cli/cli_test.go @@ -85,7 +85,7 @@ func (s *IntegrationTestSuite) TestDeployment() { s.Require().NoError(err) out := &types.QueryDeploymentsResponse{} - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), out) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), out) s.Require().NoError(err) s.Require().Len(out.Deployments, 1, "Deployment Create Failed") deployments := out.Deployments @@ -98,7 +98,7 @@ func (s *IntegrationTestSuite) TestDeployment() { var deployment types.QueryDeploymentResponse fmt.Println(string(resp.Bytes())) - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), &deployment) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), &deployment) s.Require().NoError(err) s.Require().Equal(createdDep, deployment) @@ -111,7 +111,7 @@ func (s *IntegrationTestSuite) TestDeployment() { s.Require().NoError(err, "Error when fetching deployments with owner filter") out = &types.QueryDeploymentsResponse{} - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), out) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), out) s.Require().NoError(err) s.Require().Len(out.Deployments, 1) @@ -134,7 +134,7 @@ func (s *IntegrationTestSuite) TestDeployment() { s.Require().NoError(err) var deploymentV2 types.QueryDeploymentResponse - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), &deploymentV2) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), &deploymentV2) s.Require().NoError(err) s.Require().NotEqual(deployment.Deployment.Version, deploymentV2.Deployment.Version) @@ -174,7 +174,7 @@ func (s *IntegrationTestSuite) TestDeployment() { s.Require().NoError(err) out = &types.QueryDeploymentsResponse{} - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), out) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), out) s.Require().NoError(err) s.Require().Len(out.Deployments, 1, "Deployment Close Failed") } @@ -207,7 +207,7 @@ func (s *IntegrationTestSuite) TestGroup() { s.Require().NoError(err) out := &types.QueryDeploymentsResponse{} - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), out) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), out) s.Require().NoError(err) s.Require().Len(out.Deployments, 1, "Deployment Create Failed") deployments := out.Deployments @@ -235,7 +235,7 @@ func (s *IntegrationTestSuite) TestGroup() { s.Require().NoError(err) var group types.Group - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), &group) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), &group) s.Require().NoError(err) s.Require().Equal(types.GroupClosed, group.State) } diff --git a/x/deployment/client/cli/grpc_rest_test.go b/x/deployment/client/cli/grpc_rest_test.go index a5a84ba1e1..def109c6eb 100644 --- a/x/deployment/client/cli/grpc_rest_test.go +++ b/x/deployment/client/cli/grpc_rest_test.go @@ -74,7 +74,7 @@ func (s *GRPCRestTestSuite) SetupSuite() { s.Require().NoError(err) out := &types.QueryDeploymentsResponse{} - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), out) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), out) s.Require().NoError(err) s.Require().Len(out.Deployments, 1, "Deployment Create Failed") deployments := out.Deployments @@ -134,7 +134,7 @@ func (s *GRPCRestTestSuite) TestGetDeployments() { s.Require().NoError(err) var deployments types.QueryDeploymentsResponse - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp, &deployments) + err = val.ClientCtx.Codec.UnmarshalJSON(resp, &deployments) if tc.expErr { s.Require().NotNil(err) @@ -194,7 +194,7 @@ func (s *GRPCRestTestSuite) TestGetDeployment() { s.Require().NoError(err) var out types.QueryDeploymentResponse - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp, &out) + err = val.ClientCtx.Codec.UnmarshalJSON(resp, &out) if tc.expErr { s.Require().Error(err) @@ -254,7 +254,7 @@ func (s *GRPCRestTestSuite) TestGetGroup() { s.Require().NoError(err) var out types.QueryGroupResponse - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp, &out) + err = val.ClientCtx.Codec.UnmarshalJSON(resp, &out) if tc.expErr { s.Require().Error(err) diff --git a/x/deployment/keeper/grpc_query.go b/x/deployment/keeper/grpc_query.go index a79002a626..6a3b76deb9 100644 --- a/x/deployment/keeper/grpc_query.go +++ b/x/deployment/keeper/grpc_query.go @@ -35,12 +35,12 @@ func (k Querier) Deployments(c context.Context, req *types.QueryDeploymentsReque ctx := sdk.UnwrapSDKContext(c) store := ctx.KVStore(k.skey) - depStore := prefix.NewStore(store, deploymentPrefix) + depStore := prefix.NewStore(store, types.DeploymentPrefix()) pageRes, err := sdkquery.FilteredPaginate(depStore, req.Pagination, func(key []byte, value []byte, accumulate bool) (bool, error) { var deployment types.Deployment - err := k.cdc.UnmarshalBinaryBare(value, &deployment) + err := k.cdc.Unmarshal(value, &deployment) if err != nil { return false, err } diff --git a/x/deployment/keeper/keeper.go b/x/deployment/keeper/keeper.go index b8db520d9f..a21c76b500 100644 --- a/x/deployment/keeper/keeper.go +++ b/x/deployment/keeper/keeper.go @@ -10,7 +10,7 @@ import ( ) type IKeeper interface { - Codec() codec.BinaryMarshaler + Codec() codec.BinaryCodec GetDeployment(ctx sdk.Context, id types.DeploymentID) (types.Deployment, bool) GetGroup(ctx sdk.Context, id types.GroupID) (types.Group, bool) GetGroups(ctx sdk.Context, id types.DeploymentID) []types.Group @@ -33,13 +33,13 @@ type IKeeper interface { // Keeper of the deployment store type Keeper struct { skey sdk.StoreKey - cdc codec.BinaryMarshaler + cdc codec.BinaryCodec pspace paramtypes.Subspace ekeeper EscrowKeeper } // NewKeeper creates and returns an instance for deployment keeper -func NewKeeper(cdc codec.BinaryMarshaler, skey sdk.StoreKey, pspace paramtypes.Subspace, ekeeper EscrowKeeper) IKeeper { +func NewKeeper(cdc codec.BinaryCodec, skey sdk.StoreKey, pspace paramtypes.Subspace, ekeeper EscrowKeeper) IKeeper { if !pspace.HasKeyTable() { pspace = pspace.WithKeyTable(types.ParamKeyTable()) @@ -58,7 +58,7 @@ func (k Keeper) NewQuerier() Querier { } // Codec returns keeper codec -func (k Keeper) Codec() codec.BinaryMarshaler { +func (k Keeper) Codec() codec.BinaryCodec { return k.cdc } @@ -76,7 +76,7 @@ func (k Keeper) GetDeployment(ctx sdk.Context, id types.DeploymentID) (types.Dep var val types.Deployment - k.cdc.MustUnmarshalBinaryBare(buf, &val) + k.cdc.MustUnmarshal(buf, &val) return val, true } @@ -95,7 +95,7 @@ func (k Keeper) GetGroup(ctx sdk.Context, id types.GroupID) (types.Group, bool) var val types.Group - k.cdc.MustUnmarshalBinaryBare(buf, &val) + k.cdc.MustUnmarshal(buf, &val) return val, true } @@ -111,7 +111,7 @@ func (k Keeper) GetGroups(ctx sdk.Context, id types.DeploymentID) []types.Group for ; iter.Valid(); iter.Next() { var val types.Group - k.cdc.MustUnmarshalBinaryBare(iter.Value(), &val) + k.cdc.MustUnmarshal(iter.Value(), &val) vals = append(vals, val) } @@ -129,7 +129,7 @@ func (k Keeper) Create(ctx sdk.Context, deployment types.Deployment, groups []ty return types.ErrDeploymentExists } - store.Set(key, k.cdc.MustMarshalBinaryBare(&deployment)) + store.Set(key, k.cdc.MustMarshal(&deployment)) for idx := range groups { group := groups[idx] @@ -138,7 +138,7 @@ func (k Keeper) Create(ctx sdk.Context, deployment types.Deployment, groups []ty return types.ErrInvalidGroupID } gkey := groupKey(group.ID()) - store.Set(gkey, k.cdc.MustMarshalBinaryBare(&group)) + store.Set(gkey, k.cdc.MustMarshal(&group)) } ctx.EventManager().EmitEvent( @@ -165,7 +165,7 @@ func (k Keeper) UpdateDeployment(ctx sdk.Context, deployment types.Deployment) e ToSDKEvent(), ) - store.Set(key, k.cdc.MustMarshalBinaryBare(&deployment)) + store.Set(key, k.cdc.MustMarshal(&deployment)) return nil } @@ -188,7 +188,7 @@ func (k Keeper) CloseDeployment(ctx sdk.Context, deployment types.Deployment) { ToSDKEvent(), ) - store.Set(key, k.cdc.MustMarshalBinaryBare(&deployment)) + store.Set(key, k.cdc.MustMarshal(&deployment)) } // OnCloseGroup provides shutdown API for a Group @@ -206,7 +206,7 @@ func (k Keeper) OnCloseGroup(ctx sdk.Context, group types.Group, state types.Gro ToSDKEvent(), ) - store.Set(key, k.cdc.MustMarshalBinaryBare(&group)) + store.Set(key, k.cdc.MustMarshal(&group)) return nil } @@ -225,7 +225,7 @@ func (k Keeper) OnPauseGroup(ctx sdk.Context, group types.Group) error { ToSDKEvent(), ) - store.Set(key, k.cdc.MustMarshalBinaryBare(&group)) + store.Set(key, k.cdc.MustMarshal(&group)) return nil } @@ -244,18 +244,18 @@ func (k Keeper) OnStartGroup(ctx sdk.Context, group types.Group) error { ToSDKEvent(), ) - store.Set(key, k.cdc.MustMarshalBinaryBare(&group)) + store.Set(key, k.cdc.MustMarshal(&group)) return nil } // WithDeployments iterates all deployments in deployment store func (k Keeper) WithDeployments(ctx sdk.Context, fn func(types.Deployment) bool) { store := ctx.KVStore(k.skey) - iter := sdk.KVStorePrefixIterator(store, deploymentPrefix) + iter := sdk.KVStorePrefixIterator(store, types.DeploymentPrefix()) defer iter.Close() for ; iter.Valid(); iter.Next() { var val types.Deployment - k.cdc.MustUnmarshalBinaryBare(iter.Value(), &val) + k.cdc.MustUnmarshal(iter.Value(), &val) if stop := fn(val); stop { break } @@ -294,7 +294,7 @@ func (k Keeper) SetParams(ctx sdk.Context, params types.Params) { func (k Keeper) updateDeployment(ctx sdk.Context, obj types.Deployment) { store := ctx.KVStore(k.skey) key := deploymentKey(obj.ID()) - store.Set(key, k.cdc.MustMarshalBinaryBare(&obj)) + store.Set(key, k.cdc.MustMarshal(&obj)) } // nolint: unused @@ -302,5 +302,5 @@ func (k Keeper) updateGroup(ctx sdk.Context, group types.Group) { store := ctx.KVStore(k.skey) key := groupKey(group.ID()) - store.Set(key, k.cdc.MustMarshalBinaryBare(&group)) + store.Set(key, k.cdc.MustMarshal(&group)) } diff --git a/x/deployment/keeper/key.go b/x/deployment/keeper/key.go index 1613c2216f..63ab5537fd 100644 --- a/x/deployment/keeper/key.go +++ b/x/deployment/keeper/key.go @@ -4,17 +4,16 @@ import ( "bytes" "encoding/binary" - "github.com/ovrclk/akash/x/deployment/types" -) + "github.com/ovrclk/akash/sdkutil" -var ( - deploymentPrefix = []byte{0x01} - groupPrefix = []byte{0x02} + "github.com/cosmos/cosmos-sdk/types/address" + + "github.com/ovrclk/akash/x/deployment/types" ) func deploymentKey(id types.DeploymentID) []byte { - buf := bytes.NewBuffer(deploymentPrefix) - buf.Write([]byte(id.Owner)) + buf := bytes.NewBuffer(types.DeploymentPrefix()) + buf.Write(address.MustLengthPrefix(sdkutil.MustAccAddressFromBech32(id.Owner))) if err := binary.Write(buf, binary.BigEndian, id.DSeq); err != nil { panic(err) } @@ -23,8 +22,8 @@ func deploymentKey(id types.DeploymentID) []byte { // groupKey provides prefixed key for a Group's marshalled data. func groupKey(id types.GroupID) []byte { - buf := bytes.NewBuffer(groupPrefix) - buf.Write([]byte(id.Owner)) + buf := bytes.NewBuffer(types.GroupPrefix()) + buf.Write(address.MustLengthPrefix(sdkutil.MustAccAddressFromBech32(id.Owner))) if err := binary.Write(buf, binary.BigEndian, id.DSeq); err != nil { panic(err) } @@ -36,8 +35,8 @@ func groupKey(id types.GroupID) []byte { // groupsKey provides default store Key for Group data. func groupsKey(id types.DeploymentID) []byte { - buf := bytes.NewBuffer(groupPrefix) - buf.Write([]byte(id.Owner)) + buf := bytes.NewBuffer(types.GroupPrefix()) + buf.Write(address.MustLengthPrefix(sdkutil.MustAccAddressFromBech32(id.Owner))) if err := binary.Write(buf, binary.BigEndian, id.DSeq); err != nil { panic(err) } diff --git a/x/deployment/keeper/migrations.go b/x/deployment/keeper/migrations.go new file mode 100644 index 0000000000..590b8e6866 --- /dev/null +++ b/x/deployment/keeper/migrations.go @@ -0,0 +1,21 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + v013 "github.com/ovrclk/akash/x/deployment/legacy/v013" +) + +// Migrator is a struct for handling in-place store migrations. +type Migrator struct { + keeper Keeper +} + +// NewMigrator returns a new Migrator. +func NewMigrator(k IKeeper) Migrator { + return Migrator{keeper: k.(Keeper)} +} + +// Migrate1to2 migrates from version 1 to 2. +func (m Migrator) Migrate1to2(ctx sdk.Context) error { + return v013.MigrateStore(ctx, m.keeper.skey) +} diff --git a/x/deployment/legacy/v013/store.go b/x/deployment/legacy/v013/store.go new file mode 100644 index 0000000000..97d49af664 --- /dev/null +++ b/x/deployment/legacy/v013/store.go @@ -0,0 +1,19 @@ +package v013 + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + v013 "github.com/ovrclk/akash/util/legacy/v013" + "github.com/ovrclk/akash/x/deployment/types" +) + +// MigrateStore performs in-place store migrations from v0.12 to v0.13. The +// migration includes: +// +// - Change addresses to be length-prefixed +func MigrateStore(ctx sdk.Context, storeKey sdk.StoreKey) error { + store := ctx.KVStore(storeKey) + v013.MigratePrefixBech32AddrBytes(store, types.DeploymentPrefix()) + v013.MigratePrefixBech32AddrBytes(store, types.GroupPrefix()) + + return nil +} diff --git a/x/deployment/module.go b/x/deployment/module.go index 976ae0054c..8dd48301bf 100644 --- a/x/deployment/module.go +++ b/x/deployment/module.go @@ -39,7 +39,7 @@ var ( // AppModuleBasic defines the basic application module used by the deployment module. type AppModuleBasic struct { - cdc codec.Marshaler + cdc codec.Codec } // Name returns deployment module's name @@ -59,12 +59,12 @@ func (b AppModuleBasic) RegisterInterfaces(registry cdctypes.InterfaceRegistry) // DefaultGenesis returns default genesis state as raw bytes for the deployment // module. -func (AppModuleBasic) DefaultGenesis(cdc codec.JSONMarshaler) json.RawMessage { +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { return cdc.MustMarshalJSON(DefaultGenesisState()) } // ValidateGenesis does validation check of the Genesis and returns error incase of failure -func (AppModuleBasic) ValidateGenesis(cdc codec.JSONMarshaler, config client.TxEncodingConfig, bz json.RawMessage) error { +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { var data types.GenesisState err := cdc.UnmarshalJSON(bz, &data) if err != nil { @@ -111,7 +111,7 @@ type AppModule struct { } // NewAppModule creates a new AppModule Object -func NewAppModule(cdc codec.Marshaler, k keeper.IKeeper, mkeeper handler.MarketKeeper, ekeeper handler.EscrowKeeper, bankKeeper bankkeeper.Keeper) AppModule { +func NewAppModule(cdc codec.Codec, k keeper.IKeeper, mkeeper handler.MarketKeeper, ekeeper handler.EscrowKeeper, bankKeeper bankkeeper.Keeper) AppModule { return AppModule{ AppModuleBasic: AppModuleBasic{cdc: cdc}, keeper: k, @@ -149,6 +149,11 @@ func (am AppModule) RegisterServices(cfg module.Configurator) { types.RegisterMsgServer(cfg.MsgServer(), handler.NewServer(am.keeper, am.mkeeper, am.ekeeper)) querier := am.keeper.NewQuerier() types.RegisterQueryServer(cfg.QueryServer(), querier) + + m := keeper.NewMigrator(am.keeper) + if err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil { + panic(err) + } } // BeginBlock performs no-op @@ -162,7 +167,7 @@ func (am AppModule) EndBlock(ctx sdk.Context, _ abci.RequestEndBlock) []abci.Val // InitGenesis performs genesis initialization for the deployment module. It returns // no validator updates. -func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONMarshaler, data json.RawMessage) []abci.ValidatorUpdate { +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate { var genesisState types.GenesisState cdc.MustUnmarshalJSON(data, &genesisState) return InitGenesis(ctx, am.keeper, &genesisState) @@ -170,11 +175,16 @@ func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONMarshaler, data j // ExportGenesis returns the exported genesis state as raw bytes for the deployment // module. -func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONMarshaler) json.RawMessage { +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { gs := ExportGenesis(ctx, am.keeper) return cdc.MustMarshalJSON(gs) } +// ConsensusVersion implements module.AppModule#ConsensusVersion +func (am AppModule) ConsensusVersion() uint64 { + return 2 +} + // AppModuleSimulation implements an application simulation module for the deployment module. type AppModuleSimulation struct { keeper keeper.IKeeper diff --git a/x/deployment/simulation/operations.go b/x/deployment/simulation/operations.go index 9ba567517a..ef9f5e7eca 100644 --- a/x/deployment/simulation/operations.go +++ b/x/deployment/simulation/operations.go @@ -31,7 +31,7 @@ const ( // WeightedOperations returns all the operations from the module with their respective weights func WeightedOperations( - appParams simtypes.AppParams, cdc codec.JSONMarshaler, ak govtypes.AccountKeeper, + appParams simtypes.AppParams, cdc codec.JSONCodec, ak govtypes.AccountKeeper, bk bankkeeper.Keeper, k keeper.IKeeper) simulation.WeightedOperations { var ( weightMsgCreateDeployment int @@ -156,7 +156,7 @@ func SimulateMsgCreateDeployment(ak govtypes.AccountKeeper, bk bankkeeper.Keeper return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "create deployment - unable to deliver mock tx"), nil, err } - return simtypes.NewOperationMsg(msg, true, ""), nil, nil + return simtypes.NewOperationMsg(msg, true, "", nil), nil, nil } } @@ -245,7 +245,7 @@ func SimulateMsgUpdateDeployment(ak govtypes.AccountKeeper, bk bankkeeper.Keeper return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "update deployment - unable to deliver mock tx"), nil, err } - return simtypes.NewOperationMsg(msg, true, ""), nil, nil + return simtypes.NewOperationMsg(msg, true, "", nil), nil, nil } } @@ -312,7 +312,7 @@ func SimulateMsgCloseDeployment(ak govtypes.AccountKeeper, bk bankkeeper.Keeper, return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "close deployment - unable to deliver mock tx"), nil, err } - return simtypes.NewOperationMsg(msg, true, ""), nil, nil + return simtypes.NewOperationMsg(msg, true, "", nil), nil, nil } } @@ -397,6 +397,6 @@ func SimulateMsgCloseGroup(ak govtypes.AccountKeeper, bk bankkeeper.Keeper, k ke err = errors.Wrapf(err, "%s: msg delivery error closing group: %v", types.ModuleName, group.ID()) return simtypes.NoOpMsg(types.ModuleName, msg.Type(), err.Error()), nil, err } - return simtypes.NewOperationMsg(msg, true, "submitting MsgCloseGroup"), nil, nil + return simtypes.NewOperationMsg(msg, true, "submitting MsgCloseGroup", nil), nil, nil } } diff --git a/x/deployment/types/deployment.pb.go b/x/deployment/types/deployment.pb.go index c907076da6..603b9a1ea9 100644 --- a/x/deployment/types/deployment.pb.go +++ b/x/deployment/types/deployment.pb.go @@ -1766,10 +1766,7 @@ func (m *MsgCreateDeployment) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthDeployment - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthDeployment } if (iNdEx + skippy) > l { @@ -1819,10 +1816,7 @@ func (m *MsgCreateDeploymentResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthDeployment - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthDeployment } if (iNdEx + skippy) > l { @@ -1938,10 +1932,7 @@ func (m *MsgDepositDeployment) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthDeployment - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthDeployment } if (iNdEx + skippy) > l { @@ -1991,10 +1982,7 @@ func (m *MsgDepositDeploymentResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthDeployment - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthDeployment } if (iNdEx + skippy) > l { @@ -2145,10 +2133,7 @@ func (m *MsgUpdateDeployment) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthDeployment - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthDeployment } if (iNdEx + skippy) > l { @@ -2198,10 +2183,7 @@ func (m *MsgUpdateDeploymentResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthDeployment - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthDeployment } if (iNdEx + skippy) > l { @@ -2284,10 +2266,7 @@ func (m *MsgCloseDeployment) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthDeployment - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthDeployment } if (iNdEx + skippy) > l { @@ -2337,10 +2316,7 @@ func (m *MsgCloseDeploymentResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthDeployment - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthDeployment } if (iNdEx + skippy) > l { @@ -2441,10 +2417,7 @@ func (m *DeploymentID) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthDeployment - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthDeployment } if (iNdEx + skippy) > l { @@ -2599,10 +2572,7 @@ func (m *Deployment) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthDeployment - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthDeployment } if (iNdEx + skippy) > l { @@ -2735,10 +2705,7 @@ func (m *DeploymentFilters) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthDeployment - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthDeployment } if (iNdEx + skippy) > l { diff --git a/x/deployment/types/genesis.pb.go b/x/deployment/types/genesis.pb.go index 9231bedc2e..98d28d8132 100644 --- a/x/deployment/types/genesis.pb.go +++ b/x/deployment/types/genesis.pb.go @@ -411,10 +411,7 @@ func (m *GenesisDeployment) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenesis - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenesis } if (iNdEx + skippy) > l { @@ -531,10 +528,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenesis - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenesis } if (iNdEx + skippy) > l { diff --git a/x/deployment/types/group.pb.go b/x/deployment/types/group.pb.go index 67478dc27a..7a0531c844 100644 --- a/x/deployment/types/group.pb.go +++ b/x/deployment/types/group.pb.go @@ -1200,10 +1200,7 @@ func (m *MsgCloseGroup) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGroup - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGroup } if (iNdEx + skippy) > l { @@ -1253,10 +1250,7 @@ func (m *MsgCloseGroupResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGroup - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGroup } if (iNdEx + skippy) > l { @@ -1339,10 +1333,7 @@ func (m *MsgPauseGroup) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGroup - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGroup } if (iNdEx + skippy) > l { @@ -1392,10 +1383,7 @@ func (m *MsgPauseGroupResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGroup - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGroup } if (iNdEx + skippy) > l { @@ -1478,10 +1466,7 @@ func (m *MsgStartGroup) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGroup - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGroup } if (iNdEx + skippy) > l { @@ -1531,10 +1516,7 @@ func (m *MsgStartGroupResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGroup - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGroup } if (iNdEx + skippy) > l { @@ -1654,10 +1636,7 @@ func (m *GroupID) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGroup - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGroup } if (iNdEx + skippy) > l { @@ -1806,10 +1785,7 @@ func (m *GroupSpec) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGroup - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGroup } if (iNdEx + skippy) > l { @@ -1963,10 +1939,7 @@ func (m *Group) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGroup - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGroup } if (iNdEx + skippy) > l { @@ -2101,10 +2074,7 @@ func (m *Resource) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGroup - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGroup } if (iNdEx + skippy) > l { diff --git a/x/deployment/types/key.go b/x/deployment/types/key.go index ad59c94de2..fdcb5bc611 100644 --- a/x/deployment/types/key.go +++ b/x/deployment/types/key.go @@ -10,3 +10,11 @@ const ( // RouterKey is the message route for deployment RouterKey = ModuleName ) + +func DeploymentPrefix() []byte { + return []byte{0x01} +} + +func GroupPrefix() []byte { + return []byte{0x02} +} diff --git a/x/deployment/types/params.pb.go b/x/deployment/types/params.pb.go index a21441a5ae..dcf864f76b 100644 --- a/x/deployment/types/params.pb.go +++ b/x/deployment/types/params.pb.go @@ -227,10 +227,7 @@ func (m *Params) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthParams - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthParams } if (iNdEx + skippy) > l { diff --git a/x/deployment/types/query.pb.go b/x/deployment/types/query.pb.go index 5d0801057c..b3f6060c8e 100644 --- a/x/deployment/types/query.pb.go +++ b/x/deployment/types/query.pb.go @@ -1007,10 +1007,7 @@ func (m *QueryDeploymentsRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -1130,10 +1127,7 @@ func (m *QueryDeploymentsResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -1216,10 +1210,7 @@ func (m *QueryDeploymentRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -1369,10 +1360,7 @@ func (m *QueryDeploymentResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -1455,10 +1443,7 @@ func (m *QueryGroupRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -1541,10 +1526,7 @@ func (m *QueryGroupResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { diff --git a/x/deployment/types/query.pb.gw.go b/x/deployment/types/query.pb.gw.go index 376b71f2d0..f42d302e95 100644 --- a/x/deployment/types/query.pb.gw.go +++ b/x/deployment/types/query.pb.gw.go @@ -20,6 +20,7 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" ) @@ -30,6 +31,7 @@ var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray var _ = descriptor.ForMessage +var _ = metadata.Join var ( filter_Query_Deployments_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} @@ -142,12 +144,14 @@ func local_request_Query_Group_0(ctx context.Context, marshaler runtime.Marshale // 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 (such as grpc.SendHeader, etc) to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +// 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_Deployments_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 { @@ -155,6 +159,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Deployments_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) @@ -168,6 +173,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Deployment_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 { @@ -175,6 +182,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Deployment_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) @@ -188,6 +196,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Group_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 { @@ -195,6 +205,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Group_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) diff --git a/x/escrow/keeper/keeper.go b/x/escrow/keeper/keeper.go index 5872468b63..3f36c1d15a 100644 --- a/x/escrow/keeper/keeper.go +++ b/x/escrow/keeper/keeper.go @@ -30,7 +30,7 @@ type Keeper interface { SavePayment(sdk.Context, types.Payment) } -func NewKeeper(cdc codec.BinaryMarshaler, skey sdk.StoreKey, bkeeper BankKeeper) Keeper { +func NewKeeper(cdc codec.BinaryCodec, skey sdk.StoreKey, bkeeper BankKeeper) Keeper { return &keeper{ cdc: cdc, skey: skey, @@ -39,7 +39,7 @@ func NewKeeper(cdc codec.BinaryMarshaler, skey sdk.StoreKey, bkeeper BankKeeper) } type keeper struct { - cdc codec.BinaryMarshaler + cdc codec.BinaryCodec skey sdk.StoreKey bkeeper BankKeeper @@ -74,7 +74,7 @@ func (k *keeper) AccountCreate(ctx sdk.Context, id types.AccountID, owner sdk.Ac return err } - store.Set(key, k.cdc.MustMarshalBinaryBare(obj)) + store.Set(key, k.cdc.MustMarshal(obj)) return nil } @@ -103,7 +103,7 @@ func (k *keeper) AccountDeposit(ctx sdk.Context, id types.AccountID, amount sdk. obj.Balance = obj.Balance.Add(amount) - store.Set(key, k.cdc.MustMarshalBinaryBare(&obj)) + store.Set(key, k.cdc.MustMarshal(&obj)) return nil } @@ -190,7 +190,7 @@ func (k *keeper) PaymentCreate(ctx sdk.Context, id types.AccountID, pid string, Withdrawn: sdk.NewCoin(rate.Denom, sdk.ZeroInt()), } - store.Set(key, k.cdc.MustMarshalBinaryBare(obj)) + store.Set(key, k.cdc.MustMarshal(obj)) return nil } @@ -280,7 +280,7 @@ func (k *keeper) GetAccount(ctx sdk.Context, id types.AccountID) (types.Account, var obj types.Account - k.cdc.MustUnmarshalBinaryBare(buf, &obj) + k.cdc.MustUnmarshal(buf, &obj) return obj, nil } @@ -297,7 +297,7 @@ func (k *keeper) GetPayment(ctx sdk.Context, id types.AccountID, pid string) (ty var obj types.Payment - k.cdc.MustUnmarshalBinaryBare(buf, &obj) + k.cdc.MustUnmarshal(buf, &obj) return obj, nil } @@ -316,7 +316,7 @@ func (k *keeper) WithAccounts(ctx sdk.Context, fn func(types.Account) bool) { defer iter.Close() for ; iter.Valid(); iter.Next() { var val types.Account - k.cdc.MustUnmarshalBinaryBare(iter.Value(), &val) + k.cdc.MustUnmarshal(iter.Value(), &val) if stop := fn(val); stop { break } @@ -329,7 +329,7 @@ func (k *keeper) WithPayments(ctx sdk.Context, fn func(types.Payment) bool) { defer iter.Close() for ; iter.Valid(); iter.Next() { var val types.Payment - k.cdc.MustUnmarshalBinaryBare(iter.Value(), &val) + k.cdc.MustUnmarshal(iter.Value(), &val) if stop := fn(val); stop { break } @@ -428,13 +428,13 @@ func (k *keeper) doAccountSettle(ctx sdk.Context, id types.AccountID) (types.Acc func (k *keeper) saveAccount(ctx sdk.Context, obj *types.Account) { store := ctx.KVStore(k.skey) key := accountKey(obj.ID) - store.Set(key, k.cdc.MustMarshalBinaryBare(obj)) + store.Set(key, k.cdc.MustMarshal(obj)) } func (k *keeper) savePayment(ctx sdk.Context, obj *types.Payment) { store := ctx.KVStore(k.skey) key := paymentKey(obj.AccountID, obj.PaymentID) - store.Set(key, k.cdc.MustMarshalBinaryBare(obj)) + store.Set(key, k.cdc.MustMarshal(obj)) } func (k *keeper) accountPayments(ctx sdk.Context, id types.AccountID) []types.Payment { @@ -446,7 +446,7 @@ func (k *keeper) accountPayments(ctx sdk.Context, id types.AccountID) []types.Pa defer iter.Close() for ; iter.Valid(); iter.Next() { var val types.Payment - k.cdc.MustUnmarshalBinaryBare(iter.Value(), &val) + k.cdc.MustUnmarshal(iter.Value(), &val) payments = append(payments, val) } diff --git a/x/escrow/module.go b/x/escrow/module.go index fa50fb8d1d..e674927971 100644 --- a/x/escrow/module.go +++ b/x/escrow/module.go @@ -36,7 +36,7 @@ var ( // AppModuleBasic defines the basic application module used by the provider module. type AppModuleBasic struct { - cdc codec.Marshaler + cdc codec.Codec } // Name returns provider module's name @@ -56,12 +56,12 @@ func (b AppModuleBasic) RegisterInterfaces(registry cdctypes.InterfaceRegistry) // DefaultGenesis returns default genesis state as raw bytes for the provider // module. -func (AppModuleBasic) DefaultGenesis(cdc codec.JSONMarshaler) json.RawMessage { +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { return cdc.MustMarshalJSON(DefaultGenesisState()) } // ValidateGenesis validation check of the Genesis -func (AppModuleBasic) ValidateGenesis(cdc codec.JSONMarshaler, _ client.TxEncodingConfig, bz json.RawMessage) error { +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, _ client.TxEncodingConfig, bz json.RawMessage) error { if bz == nil { return nil } @@ -119,7 +119,7 @@ type AppModule struct { } // NewAppModule creates a new AppModule object -func NewAppModule(cdc codec.Marshaler, k keeper.Keeper) AppModule { +func NewAppModule(cdc codec.Codec, k keeper.Keeper) AppModule { return AppModule{ AppModuleBasic: AppModuleBasic{cdc: cdc}, keeper: k, @@ -173,7 +173,7 @@ func (am AppModule) EndBlock(ctx sdk.Context, _ abci.RequestEndBlock) []abci.Val // InitGenesis performs genesis initialization for the audit module. It returns // no validator updates. -func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONMarshaler, data json.RawMessage) []abci.ValidatorUpdate { +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate { var genesisState types.GenesisState cdc.MustUnmarshalJSON(data, &genesisState) return InitGenesis(ctx, am.keeper, &genesisState) @@ -181,11 +181,16 @@ func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONMarshaler, data j // ExportGenesis returns the exported genesis state as raw bytes for the audit // module. -func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONMarshaler) json.RawMessage { +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { gs := ExportGenesis(ctx, am.keeper) return cdc.MustMarshalJSON(gs) } +// ConsensusVersion implements module.AppModule#ConsensusVersion +func (am AppModule) ConsensusVersion() uint64 { + return 1 +} + // ____________________________________________________________________________ // AppModuleSimulation implements an application simulation module for the audit module. diff --git a/x/escrow/types/genesis.pb.go b/x/escrow/types/genesis.pb.go index 953151e771..a819c54ceb 100644 --- a/x/escrow/types/genesis.pb.go +++ b/x/escrow/types/genesis.pb.go @@ -296,10 +296,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenesis - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenesis } if (iNdEx + skippy) > l { diff --git a/x/escrow/types/query.pb.go b/x/escrow/types/query.pb.go index 86286a4f95..f9cc8e1dea 100644 --- a/x/escrow/types/query.pb.go +++ b/x/escrow/types/query.pb.go @@ -1017,10 +1017,7 @@ func (m *QueryAccountsRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -1140,10 +1137,7 @@ func (m *QueryAccountsResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -1389,10 +1383,7 @@ func (m *QueryPaymentsRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -1512,10 +1503,7 @@ func (m *QueryPaymentsResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { diff --git a/x/escrow/types/query.pb.gw.go b/x/escrow/types/query.pb.gw.go index 6605a36dcb..67edc95efa 100644 --- a/x/escrow/types/query.pb.gw.go +++ b/x/escrow/types/query.pb.gw.go @@ -20,6 +20,7 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" ) @@ -30,6 +31,7 @@ var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray var _ = descriptor.ForMessage +var _ = metadata.Join var ( filter_Query_Accounts_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} @@ -106,12 +108,14 @@ func local_request_Query_Payments_0(ctx context.Context, marshaler runtime.Marsh // 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 (such as grpc.SendHeader, etc) to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +// 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_Accounts_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 { @@ -119,6 +123,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Accounts_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) @@ -132,6 +137,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Payments_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 { @@ -139,6 +146,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Payments_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) diff --git a/x/escrow/types/types.pb.go b/x/escrow/types/types.pb.go index 8f4c3633c8..6ab73f1f1c 100644 --- a/x/escrow/types/types.pb.go +++ b/x/escrow/types/types.pb.go @@ -762,10 +762,7 @@ func (m *AccountID) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTypes } if (iNdEx + skippy) > l { @@ -984,10 +981,7 @@ func (m *Account) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTypes } if (iNdEx + skippy) > l { @@ -1252,10 +1246,7 @@ func (m *Payment) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTypes } if (iNdEx + skippy) > l { diff --git a/x/market/client/cli/cli_test.go b/x/market/client/cli/cli_test.go index a60101d5b8..1b2e3a11ad 100644 --- a/x/market/client/cli/cli_test.go +++ b/x/market/client/cli/cli_test.go @@ -43,7 +43,7 @@ func (s *IntegrationTestSuite) SetupSuite() { s.network = network.New(s.T(), cfg) kb := s.network.Validators[0].ClientCtx.Keyring - _, _, err := kb.NewMnemonic("keyBar", keyring.English, sdk.FullFundraiserPath, hd.Secp256k1) + _, _, err := kb.NewMnemonic("keyBar", keyring.English, sdk.FullFundraiserPath, "", hd.Secp256k1) s.Require().NoError(err) _, err = s.network.WaitForHeight(1) @@ -96,7 +96,7 @@ func (s *IntegrationTestSuite) Test1QueryOrders() { s.Require().NoError(err) out := &dtypes.QueryDeploymentsResponse{} - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), out) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), out) s.Require().NoError(err) s.Require().Len(out.Deployments, 1) s.Require().Equal(val.Address.String(), out.Deployments[0].Deployment.DeploymentID.Owner) @@ -106,7 +106,7 @@ func (s *IntegrationTestSuite) Test1QueryOrders() { s.Require().NoError(err) result := &types.QueryOrdersResponse{} - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), result) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), result) s.Require().NoError(err) s.Require().Len(result.Orders, 1) orders := result.Orders @@ -118,7 +118,7 @@ func (s *IntegrationTestSuite) Test1QueryOrders() { s.Require().NoError(err) var order types.Order - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), &order) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), &order) s.Require().NoError(err) s.Require().Equal(createdOrder, order) @@ -131,7 +131,7 @@ func (s *IntegrationTestSuite) Test1QueryOrders() { s.Require().NoError(err) result = &types.QueryOrdersResponse{} - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), result) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), result) s.Require().NoError(err) s.Require().Len(result.Orders, 1) s.Require().Equal(createdOrder, result.Orders[0]) @@ -181,7 +181,7 @@ func (s *IntegrationTestSuite) Test2CreateBid() { s.Require().NoError(err) var balRes banktypes.QueryAllBalancesResponse - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), &balRes) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), &balRes) s.Require().NoError(err) s.Require().Equal(sendTokens.Amount, balRes.Balances.AmountOf(s.cfg.BondDenom)) @@ -204,7 +204,7 @@ func (s *IntegrationTestSuite) Test2CreateBid() { s.Require().NoError(err) out := &ptypes.QueryProvidersResponse{} - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), out) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), out) s.Require().NoError(err) s.Require().Len(out.Providers, 1, "Provider Creation Failed in TestCreateBid") s.Require().Equal(keyBar.GetAddress().String(), out.Providers[0].Owner) @@ -214,7 +214,7 @@ func (s *IntegrationTestSuite) Test2CreateBid() { s.Require().NoError(err) result := &types.QueryOrdersResponse{} - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), result) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), result) s.Require().NoError(err) s.Require().Len(result.Orders, 1) @@ -242,7 +242,7 @@ func (s *IntegrationTestSuite) Test2CreateBid() { s.Require().NoError(err) bidRes := &types.QueryBidsResponse{} - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), bidRes) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), bidRes) s.Require().NoError(err) s.Require().Len(bidRes.Bids, 1) bids := bidRes.Bids @@ -255,7 +255,7 @@ func (s *IntegrationTestSuite) Test2CreateBid() { var bid types.QueryBidResponse fmt.Println(string(resp.Bytes())) - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), &bid) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), &bid) s.Require().NoError(err) s.Require().Equal(createdBid, bid.Bid) @@ -268,7 +268,7 @@ func (s *IntegrationTestSuite) Test2CreateBid() { s.Require().NoError(err) bidRes = &types.QueryBidsResponse{} - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), bidRes) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), bidRes) s.Require().NoError(err) s.Require().Len(bidRes.Bids, 1) s.Require().Equal(createdBid, bidRes.Bids[0].Bid) @@ -314,7 +314,7 @@ func (s *IntegrationTestSuite) Test3QueryLeasesAndCloseBid() { s.Require().NoError(err) leaseRes := &types.QueryLeasesResponse{} - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), leaseRes) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), leaseRes) s.Require().NoError(err) s.Require().Len(leaseRes.Leases, 1) leases := leaseRes.Leases @@ -326,7 +326,7 @@ func (s *IntegrationTestSuite) Test3QueryLeasesAndCloseBid() { s.Require().NoError(err) var lease types.QueryLeaseResponse - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), &lease) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), &lease) s.Require().NoError(err) s.Require().Equal(createdLease, lease.Lease) @@ -348,7 +348,7 @@ func (s *IntegrationTestSuite) Test3QueryLeasesAndCloseBid() { s.Require().NoError(err) bidRes := &types.QueryBidsResponse{} - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), bidRes) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), bidRes) s.Require().NoError(err) s.Require().Len(bidRes.Bids, 1) s.Require().Equal(keyBar.GetAddress().String(), bidRes.Bids[0].Bid.BidID.Provider) @@ -358,7 +358,7 @@ func (s *IntegrationTestSuite) Test3QueryLeasesAndCloseBid() { s.Require().NoError(err) leaseRes = &types.QueryLeasesResponse{} - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), leaseRes) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), leaseRes) s.Require().NoError(err) s.Require().Len(leaseRes.Leases, 1) @@ -389,7 +389,7 @@ func (s *IntegrationTestSuite) Test4CloseOrder() { s.Require().NoError(err) result := &types.QueryOrdersResponse{} - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), result) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), result) s.Require().NoError(err) openedOrders := result.Orders s.Require().Len(openedOrders, 0) diff --git a/x/market/client/cli/grpc_rest_test.go b/x/market/client/cli/grpc_rest_test.go index 690e6b2610..eec55f810e 100644 --- a/x/market/client/cli/grpc_rest_test.go +++ b/x/market/client/cli/grpc_rest_test.go @@ -43,7 +43,8 @@ func (s *GRPCRestTestSuite) SetupSuite() { s.network = network.New(s.T(), cfg) kb := s.network.Validators[0].ClientCtx.Keyring - keyBar, _, err := kb.NewMnemonic("keyBar", keyring.English, sdk.FullFundraiserPath, hd.Secp256k1) + keyBar, _, err := kb.NewMnemonic("keyBar", keyring.English, sdk.FullFundraiserPath, "", + hd.Secp256k1) s.Require().NoError(err) _, err = s.network.WaitForHeight(1) @@ -89,7 +90,7 @@ func (s *GRPCRestTestSuite) SetupSuite() { s.Require().NoError(err) result := &types.QueryOrdersResponse{} - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), result) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), result) s.Require().NoError(err) s.Require().Len(result.Orders, 1) orders := result.Orders @@ -149,7 +150,7 @@ func (s *GRPCRestTestSuite) SetupSuite() { s.Require().NoError(err) bidRes := &types.QueryBidsResponse{} - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), bidRes) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), bidRes) s.Require().NoError(err) s.Require().Len(bidRes.Bids, 1) bids := bidRes.Bids @@ -176,7 +177,7 @@ func (s *GRPCRestTestSuite) SetupSuite() { s.Require().NoError(err) leaseRes := &types.QueryLeasesResponse{} - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), leaseRes) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), leaseRes) s.Require().NoError(err) s.Require().Len(leaseRes.Leases, 1) leases := leaseRes.Leases @@ -240,7 +241,7 @@ func (s *GRPCRestTestSuite) TestGetOrders() { s.Require().NoError(err) var orders types.QueryOrdersResponse - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp, &orders) + err = val.ClientCtx.Codec.UnmarshalJSON(resp, &orders) if tc.expErr { s.Require().NotNil(err) @@ -300,7 +301,7 @@ func (s *GRPCRestTestSuite) TestGetOrder() { s.Require().NoError(err) var out types.QueryOrderResponse - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp, &out) + err = val.ClientCtx.Codec.UnmarshalJSON(resp, &out) if tc.expErr { s.Require().Error(err) @@ -363,7 +364,7 @@ func (s *GRPCRestTestSuite) TestGetBids() { s.Require().NoError(err) var bids types.QueryBidsResponse - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp, &bids) + err = val.ClientCtx.Codec.UnmarshalJSON(resp, &bids) if tc.expErr { s.Require().NotNil(err) @@ -423,7 +424,7 @@ func (s *GRPCRestTestSuite) TestGetBid() { s.Require().NoError(err) var out types.QueryBidResponse - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp, &out) + err = val.ClientCtx.Codec.UnmarshalJSON(resp, &out) if tc.expErr { s.Require().Error(err) @@ -486,7 +487,7 @@ func (s *GRPCRestTestSuite) TestGetLeases() { s.Require().NoError(err) var leases types.QueryLeasesResponse - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp, &leases) + err = val.ClientCtx.Codec.UnmarshalJSON(resp, &leases) if tc.expErr { s.Require().NotNil(err) @@ -547,7 +548,7 @@ func (s *GRPCRestTestSuite) TestGetLease() { s.Require().NoError(err) var out types.QueryLeaseResponse - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp, &out) + err = val.ClientCtx.Codec.UnmarshalJSON(resp, &out) if tc.expErr { s.Require().Error(err) diff --git a/x/market/handler/handler_test.go b/x/market/handler/handler_test.go index c7b29c23f2..57605e6247 100644 --- a/x/market/handler/handler_test.go +++ b/x/market/handler/handler_test.go @@ -120,8 +120,8 @@ func TestCreateBidNonExistingOrder(t *testing.T) { suite := setupTestSuite(t) msg := &types.MsgCreateBid{ - Order: types.OrderID{}, - Provider: "", + Order: types.OrderID{Owner: testutil.AccAddress(t).String()}, + Provider: testutil.AccAddress(t).String(), Price: sdk.Coin{}, } diff --git a/x/market/keeper/grpc_query.go b/x/market/keeper/grpc_query.go index 1f679bdb4a..9820be3357 100644 --- a/x/market/keeper/grpc_query.go +++ b/x/market/keeper/grpc_query.go @@ -36,12 +36,12 @@ func (k Querier) Orders(c context.Context, req *types.QueryOrdersRequest) (*type ctx := sdk.UnwrapSDKContext(c) store := ctx.KVStore(k.skey) - orderStore := prefix.NewStore(store, orderPrefix) + orderStore := prefix.NewStore(store, types.OrderPrefix()) pageRes, err := sdkquery.FilteredPaginate(orderStore, req.Pagination, func(key []byte, value []byte, accumulate bool) (bool, error) { var order types.Order - err := k.cdc.UnmarshalBinaryBare(value, &order) + err := k.cdc.Unmarshal(value, &order) if err != nil { return false, err } @@ -103,12 +103,12 @@ func (k Querier) Bids(c context.Context, req *types.QueryBidsRequest) (*types.Qu ctx := sdk.UnwrapSDKContext(c) store := ctx.KVStore(k.skey) - bidStore := prefix.NewStore(store, bidPrefix) + bidStore := prefix.NewStore(store, types.BidPrefix()) pageRes, err := sdkquery.FilteredPaginate(bidStore, req.Pagination, func(key []byte, value []byte, accumulate bool) (bool, error) { var bid types.Bid - err := k.cdc.UnmarshalBinaryBare(value, &bid) + err := k.cdc.Unmarshal(value, &bid) if err != nil { return false, err } @@ -190,12 +190,12 @@ func (k Querier) Leases(c context.Context, req *types.QueryLeasesRequest) (*type ctx := sdk.UnwrapSDKContext(c) store := ctx.KVStore(k.skey) - leaseStore := prefix.NewStore(store, leasePrefix) + leaseStore := prefix.NewStore(store, types.LeasePrefix()) pageRes, err := sdkquery.FilteredPaginate(leaseStore, req.Pagination, func(key []byte, value []byte, accumulate bool) (bool, error) { var lease types.Lease - err := k.cdc.UnmarshalBinaryBare(value, &lease) + err := k.cdc.Unmarshal(value, &lease) if err != nil { return false, err } diff --git a/x/market/keeper/keeper.go b/x/market/keeper/keeper.go index 3a128b1244..fcd655bd39 100644 --- a/x/market/keeper/keeper.go +++ b/x/market/keeper/keeper.go @@ -12,7 +12,7 @@ import ( // TODO: use interface for all keepers, queriers type IKeeper interface { NewQuerier() Querier - Codec() codec.BinaryMarshaler + Codec() codec.BinaryCodec CreateOrder(ctx sdk.Context, gid dtypes.GroupID, spec dtypes.GroupSpec) (types.Order, error) CreateBid(ctx sdk.Context, oid types.OrderID, provider sdk.AccAddress, price sdk.Coin) (types.Bid, error) CreateLease(ctx sdk.Context, bid types.Bid) @@ -39,14 +39,14 @@ type IKeeper interface { // Keeper of the market store type Keeper struct { - cdc codec.BinaryMarshaler + cdc codec.BinaryCodec skey sdk.StoreKey pspace paramtypes.Subspace ekeeper EscrowKeeper } // NewKeeper creates and returns an instance for Market keeper -func NewKeeper(cdc codec.BinaryMarshaler, skey sdk.StoreKey, pspace paramtypes.Subspace, ekeeper EscrowKeeper) IKeeper { +func NewKeeper(cdc codec.BinaryCodec, skey sdk.StoreKey, pspace paramtypes.Subspace, ekeeper EscrowKeeper) IKeeper { if !pspace.HasKeyTable() { pspace = pspace.WithKeyTable(types.ParamKeyTable()) @@ -65,7 +65,7 @@ func (k Keeper) NewQuerier() Querier { } // Codec returns keeper codec -func (k Keeper) Codec() codec.BinaryMarshaler { +func (k Keeper) Codec() codec.BinaryCodec { return k.cdc } @@ -101,7 +101,7 @@ func (k Keeper) CreateOrder(ctx sdk.Context, gid dtypes.GroupID, spec dtypes.Gro return types.Order{}, types.ErrOrderExists } - store.Set(key, k.cdc.MustMarshalBinaryBare(&order)) + store.Set(key, k.cdc.MustMarshal(&order)) ctx.Logger().Info("created order", "order", order.ID()) ctx.EventManager().EmitEvent( @@ -128,7 +128,7 @@ func (k Keeper) CreateBid(ctx sdk.Context, oid types.OrderID, provider sdk.AccAd return types.Bid{}, types.ErrBidExists } - store.Set(key, k.cdc.MustMarshalBinaryBare(&bid)) + store.Set(key, k.cdc.MustMarshal(&bid)) ctx.EventManager().EmitEvent( types.NewEventBidCreated(bid.ID(), price). @@ -152,7 +152,7 @@ func (k Keeper) CreateLease(ctx sdk.Context, bid types.Bid) { // create (active) lease in store key := leaseKey(lease.ID()) - store.Set(key, k.cdc.MustMarshalBinaryBare(&lease)) + store.Set(key, k.cdc.MustMarshal(&lease)) ctx.Logger().Info("created lease", "lease", lease.ID()) ctx.EventManager().EmitEvent( @@ -258,7 +258,7 @@ func (k Keeper) GetOrder(ctx sdk.Context, id types.OrderID) (types.Order, bool) buf := store.Get(key) var val types.Order - k.cdc.MustUnmarshalBinaryBare(buf, &val) + k.cdc.MustUnmarshal(buf, &val) return val, true } @@ -273,7 +273,7 @@ func (k Keeper) GetBid(ctx sdk.Context, id types.BidID) (types.Bid, bool) { buf := store.Get(key) var val types.Bid - k.cdc.MustUnmarshalBinaryBare(buf, &val) + k.cdc.MustUnmarshal(buf, &val) return val, true } @@ -288,7 +288,7 @@ func (k Keeper) GetLease(ctx sdk.Context, id types.LeaseID) (types.Lease, bool) buf := store.Get(key) var val types.Lease - k.cdc.MustUnmarshalBinaryBare(buf, &val) + k.cdc.MustUnmarshal(buf, &val) return val, true } @@ -316,11 +316,11 @@ func (k Keeper) LeaseForOrder(ctx sdk.Context, oid types.OrderID) (types.Lease, // WithOrders iterates all orders in market func (k Keeper) WithOrders(ctx sdk.Context, fn func(types.Order) bool) { store := ctx.KVStore(k.skey) - iter := sdk.KVStorePrefixIterator(store, orderPrefix) + iter := sdk.KVStorePrefixIterator(store, types.OrderPrefix()) defer iter.Close() for ; iter.Valid(); iter.Next() { var val types.Order - k.cdc.MustUnmarshalBinaryBare(iter.Value(), &val) + k.cdc.MustUnmarshal(iter.Value(), &val) if stop := fn(val); stop { break } @@ -330,11 +330,11 @@ func (k Keeper) WithOrders(ctx sdk.Context, fn func(types.Order) bool) { // WithBids iterates all bids in market func (k Keeper) WithBids(ctx sdk.Context, fn func(types.Bid) bool) { store := ctx.KVStore(k.skey) - iter := sdk.KVStorePrefixIterator(store, bidPrefix) + iter := sdk.KVStorePrefixIterator(store, types.BidPrefix()) defer iter.Close() for ; iter.Valid(); iter.Next() { var val types.Bid - k.cdc.MustUnmarshalBinaryBare(iter.Value(), &val) + k.cdc.MustUnmarshal(iter.Value(), &val) if stop := fn(val); stop { break } @@ -344,11 +344,11 @@ func (k Keeper) WithBids(ctx sdk.Context, fn func(types.Bid) bool) { // WithLeases iterates all leases in market func (k Keeper) WithLeases(ctx sdk.Context, fn func(types.Lease) bool) { store := ctx.KVStore(k.skey) - iter := sdk.KVStorePrefixIterator(store, leasePrefix) + iter := sdk.KVStorePrefixIterator(store, types.LeasePrefix()) defer iter.Close() for ; iter.Valid(); iter.Next() { var val types.Lease - k.cdc.MustUnmarshalBinaryBare(iter.Value(), &val) + k.cdc.MustUnmarshal(iter.Value(), &val) if stop := fn(val); stop { break } @@ -362,7 +362,7 @@ func (k Keeper) WithOrdersForGroup(ctx sdk.Context, id dtypes.GroupID, fn func(t defer iter.Close() for ; iter.Valid(); iter.Next() { var val types.Order - k.cdc.MustUnmarshalBinaryBare(iter.Value(), &val) + k.cdc.MustUnmarshal(iter.Value(), &val) if stop := fn(val); stop { break } @@ -377,7 +377,7 @@ func (k Keeper) WithBidsForOrder(ctx sdk.Context, id types.OrderID, fn func(type defer iter.Close() for ; iter.Valid(); iter.Next() { var val types.Bid - k.cdc.MustUnmarshalBinaryBare(iter.Value(), &val) + k.cdc.MustUnmarshal(iter.Value(), &val) if stop := fn(val); stop { break } @@ -409,17 +409,17 @@ func (k Keeper) SetParams(ctx sdk.Context, params types.Params) { func (k Keeper) updateOrder(ctx sdk.Context, order types.Order) { store := ctx.KVStore(k.skey) key := orderKey(order.ID()) - store.Set(key, k.cdc.MustMarshalBinaryBare(&order)) + store.Set(key, k.cdc.MustMarshal(&order)) } func (k Keeper) updateBid(ctx sdk.Context, bid types.Bid) { store := ctx.KVStore(k.skey) key := bidKey(bid.ID()) - store.Set(key, k.cdc.MustMarshalBinaryBare(&bid)) + store.Set(key, k.cdc.MustMarshal(&bid)) } func (k Keeper) updateLease(ctx sdk.Context, lease types.Lease) { store := ctx.KVStore(k.skey) key := leaseKey(lease.ID()) - store.Set(key, k.cdc.MustMarshalBinaryBare(&lease)) + store.Set(key, k.cdc.MustMarshal(&lease)) } diff --git a/x/market/keeper/key.go b/x/market/keeper/key.go index a358a568bd..1e6c3f730b 100644 --- a/x/market/keeper/key.go +++ b/x/market/keeper/key.go @@ -4,19 +4,15 @@ import ( "bytes" "encoding/binary" + "github.com/cosmos/cosmos-sdk/types/address" + "github.com/ovrclk/akash/sdkutil" dtypes "github.com/ovrclk/akash/x/deployment/types" "github.com/ovrclk/akash/x/market/types" ) -var ( - orderPrefix = []byte{0x01, 0x00} - bidPrefix = []byte{0x02, 0x00} - leasePrefix = []byte{0x03, 0x00} -) - func orderKey(id types.OrderID) []byte { - buf := bytes.NewBuffer(orderPrefix) - buf.Write([]byte(id.Owner)) + buf := bytes.NewBuffer(types.OrderPrefix()) + buf.Write(address.MustLengthPrefix(sdkutil.MustAccAddressFromBech32(id.Owner))) if err := binary.Write(buf, binary.BigEndian, id.DSeq); err != nil { panic(err) } @@ -30,8 +26,8 @@ func orderKey(id types.OrderID) []byte { } func bidKey(id types.BidID) []byte { - buf := bytes.NewBuffer(bidPrefix) - buf.Write([]byte(id.Owner)) + buf := bytes.NewBuffer(types.BidPrefix()) + buf.Write(address.MustLengthPrefix(sdkutil.MustAccAddressFromBech32(id.Owner))) if err := binary.Write(buf, binary.BigEndian, id.DSeq); err != nil { panic(err) } @@ -41,13 +37,13 @@ func bidKey(id types.BidID) []byte { if err := binary.Write(buf, binary.BigEndian, id.OSeq); err != nil { panic(err) } - buf.Write([]byte(id.Provider)) + buf.Write(address.MustLengthPrefix(sdkutil.MustAccAddressFromBech32(id.Provider))) return buf.Bytes() } func leaseKey(id types.LeaseID) []byte { - buf := bytes.NewBuffer(leasePrefix) - buf.Write([]byte(id.Owner)) + buf := bytes.NewBuffer(types.LeasePrefix()) + buf.Write(address.MustLengthPrefix(sdkutil.MustAccAddressFromBech32(id.Owner))) if err := binary.Write(buf, binary.BigEndian, id.DSeq); err != nil { panic(err) } @@ -57,13 +53,13 @@ func leaseKey(id types.LeaseID) []byte { if err := binary.Write(buf, binary.BigEndian, id.OSeq); err != nil { panic(err) } - buf.Write([]byte(id.Provider)) + buf.Write(address.MustLengthPrefix(sdkutil.MustAccAddressFromBech32(id.Provider))) return buf.Bytes() } func ordersForGroupPrefix(id dtypes.GroupID) []byte { - buf := bytes.NewBuffer(orderPrefix) - buf.Write([]byte(id.Owner)) + buf := bytes.NewBuffer(types.OrderPrefix()) + buf.Write(address.MustLengthPrefix(sdkutil.MustAccAddressFromBech32(id.Owner))) if err := binary.Write(buf, binary.BigEndian, id.DSeq); err != nil { panic(err) } @@ -74,8 +70,8 @@ func ordersForGroupPrefix(id dtypes.GroupID) []byte { } func bidsForOrderPrefix(id types.OrderID) []byte { - buf := bytes.NewBuffer(bidPrefix) - buf.Write([]byte(id.Owner)) + buf := bytes.NewBuffer(types.BidPrefix()) + buf.Write(address.MustLengthPrefix(sdkutil.MustAccAddressFromBech32(id.Owner))) if err := binary.Write(buf, binary.BigEndian, id.DSeq); err != nil { panic(err) } diff --git a/x/market/keeper/migrations.go b/x/market/keeper/migrations.go new file mode 100644 index 0000000000..df19c39752 --- /dev/null +++ b/x/market/keeper/migrations.go @@ -0,0 +1,21 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + v013 "github.com/ovrclk/akash/x/market/legacy/v013" +) + +// Migrator is a struct for handling in-place store migrations. +type Migrator struct { + keeper Keeper +} + +// NewMigrator returns a new Migrator. +func NewMigrator(k IKeeper) Migrator { + return Migrator{keeper: k.(Keeper)} +} + +// Migrate1to2 migrates from version 1 to 2. +func (m Migrator) Migrate1to2(ctx sdk.Context) error { + return v013.MigrateStore(ctx, m.keeper.skey) +} diff --git a/x/market/legacy/v013/store.go b/x/market/legacy/v013/store.go new file mode 100644 index 0000000000..e868c7687c --- /dev/null +++ b/x/market/legacy/v013/store.go @@ -0,0 +1,55 @@ +package v013 + +import ( + "github.com/cosmos/cosmos-sdk/store/prefix" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/address" + v013 "github.com/ovrclk/akash/util/legacy/v013" + "github.com/ovrclk/akash/x/market/types" +) + +// MigrateStore performs in-place store migrations from v0.12 to v0.13. The +// migration includes: +// +// - Change addresses to be length-prefixed +func MigrateStore(ctx sdk.Context, storeKey sdk.StoreKey) error { + store := ctx.KVStore(storeKey) + v013.MigratePrefixBech32AddrBytes(store, types.OrderPrefix()) + migratePrefixBech32Uint64Uint32Uint32Bech32(store, types.BidPrefix()) + migratePrefixBech32Uint64Uint32Uint32Bech32(store, types.LeasePrefix()) + + return nil +} + +// migratePrefixBech32Uint64Uint32Uint32Bech32 is a helper function that migrates all keys of format: +// prefix_bytes | address1_bech32_bytes | uint64 | uint32 | uint32 | address2_bech32_bytes +// into format: +// prefix_bytes | address1_len (1 byte) | address1_bytes | uint64 | uint32 | uint32 | address2_len (1 byte) | address2_bytes +func migratePrefixBech32Uint64Uint32Uint32Bech32(store sdk.KVStore, prefixBz []byte) { + oldStore := prefix.NewStore(store, prefixBz) + + oldStoreIter := oldStore.Iterator(nil, nil) + defer oldStoreIter.Close() + + for ; oldStoreIter.Valid(); oldStoreIter.Next() { + bech32Addr1 := string(oldStoreIter.Key()[:v013.V012Bech32AddrLen]) + addr1, err := sdk.AccAddressFromBech32(bech32Addr1) + if err != nil { + panic(err) + } + + midBz := oldStoreIter.Key()[v013.V012Bech32AddrLen : v013.V012Bech32AddrLen+16] + + bech32Addr2 := string(oldStoreIter.Key()[v013.V012Bech32AddrLen+16:]) + addr2, err := sdk.AccAddressFromBech32(bech32Addr2) + if err != nil { + panic(err) + } + + newStoreKey := append(append(append(prefixBz, address.MustLengthPrefix(addr1)...), midBz...), address.MustLengthPrefix(addr2)...) + + // Set new key on store. Values don't change. + store.Set(newStoreKey, oldStoreIter.Value()) + oldStore.Delete(oldStoreIter.Key()) + } +} diff --git a/x/market/module.go b/x/market/module.go index 6c4b922088..b8c0005c2b 100644 --- a/x/market/module.go +++ b/x/market/module.go @@ -38,7 +38,7 @@ var ( // AppModuleBasic defines the basic application module used by the market module. type AppModuleBasic struct { - cdc codec.Marshaler + cdc codec.Codec } // Name returns market module's name @@ -58,12 +58,12 @@ func (b AppModuleBasic) RegisterInterfaces(registry cdctypes.InterfaceRegistry) // DefaultGenesis returns default genesis state as raw bytes for the market // module. -func (AppModuleBasic) DefaultGenesis(cdc codec.JSONMarshaler) json.RawMessage { +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { return cdc.MustMarshalJSON(DefaultGenesisState()) } // ValidateGenesis validation check of the Genesis -func (AppModuleBasic) ValidateGenesis(cdc codec.JSONMarshaler, config client.TxEncodingConfig, bz json.RawMessage) error { +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { var data types.GenesisState err := cdc.UnmarshalJSON(bz, &data) if err != nil { @@ -108,7 +108,7 @@ type AppModule struct { // NewAppModule creates a new AppModule object func NewAppModule( - cdc codec.Marshaler, + cdc codec.Codec, keeper keeper.IKeeper, ekeeper ekeeper.Keeper, akeeper akeeper.Keeper, @@ -157,6 +157,11 @@ func (am AppModule) RegisterServices(cfg module.Configurator) { types.RegisterMsgServer(cfg.MsgServer(), handler.NewServer(am.keepers)) querier := am.keepers.Market.NewQuerier() types.RegisterQueryServer(cfg.QueryServer(), querier) + + m := keeper.NewMigrator(am.keepers.Market) + if err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil { + panic(err) + } } // BeginBlock performs no-op @@ -170,7 +175,7 @@ func (am AppModule) EndBlock(ctx sdk.Context, _ abci.RequestEndBlock) []abci.Val // InitGenesis performs genesis initialization for the market module. It returns // no validator updates. -func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONMarshaler, data json.RawMessage) []abci.ValidatorUpdate { +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate { var genesisState types.GenesisState cdc.MustUnmarshalJSON(data, &genesisState) return InitGenesis(ctx, am.keepers.Market, &genesisState) @@ -178,11 +183,16 @@ func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONMarshaler, data j // ExportGenesis returns the exported genesis state as raw bytes for the market // module. -func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONMarshaler) json.RawMessage { +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { gs := ExportGenesis(ctx, am.keepers.Market) return cdc.MustMarshalJSON(gs) } +// ConsensusVersion implements module.AppModule#ConsensusVersion +func (am AppModule) ConsensusVersion() uint64 { + return 2 +} + // AppModuleSimulation implements an application simulation module for the market module. type AppModuleSimulation struct { keepers handler.Keepers diff --git a/x/market/simulation/operations.go b/x/market/simulation/operations.go index 5311e618fb..3cee86c209 100644 --- a/x/market/simulation/operations.go +++ b/x/market/simulation/operations.go @@ -27,7 +27,7 @@ const ( // WeightedOperations returns all the operations from the module with their respective weights func WeightedOperations( - appParams simtypes.AppParams, cdc codec.JSONMarshaler, ak govtypes.AccountKeeper, + appParams simtypes.AppParams, cdc codec.JSONCodec, ak govtypes.AccountKeeper, ks keepers.Keepers) simulation.WeightedOperations { var ( weightMsgCreateBid int @@ -142,9 +142,9 @@ func SimulateMsgCreateBid(ak govtypes.AccountKeeper, ks keepers.Keepers) simtype _, _, err = app.Deliver(txGen.TxEncoder(), tx) switch { case err == nil: - return simtypes.NewOperationMsg(msg, true, ""), nil, nil + return simtypes.NewOperationMsg(msg, true, "", nil), nil, nil case errors.Is(err, types.ErrBidExists): - return simtypes.NewOperationMsg(msg, false, ""), nil, nil + return simtypes.NewOperationMsg(msg, false, "", nil), nil, nil default: return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to deliver mock tx"), nil, err } @@ -218,7 +218,7 @@ func SimulateMsgCloseBid(ak govtypes.AccountKeeper, ks keepers.Keepers) simtypes return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to deliver tx"), nil, err } - return simtypes.NewOperationMsg(msg, true, ""), nil, nil + return simtypes.NewOperationMsg(msg, true, "", nil), nil, nil } } diff --git a/x/market/types/bid.pb.go b/x/market/types/bid.pb.go index 660f8e9bd3..57f9bbdfe1 100644 --- a/x/market/types/bid.pb.go +++ b/x/market/types/bid.pb.go @@ -1154,10 +1154,7 @@ func (m *MsgCreateBid) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthBid - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthBid } if (iNdEx + skippy) > l { @@ -1207,10 +1204,7 @@ func (m *MsgCreateBidResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthBid - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthBid } if (iNdEx + skippy) > l { @@ -1293,10 +1287,7 @@ func (m *MsgCloseBid) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthBid - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthBid } if (iNdEx + skippy) > l { @@ -1346,10 +1337,7 @@ func (m *MsgCloseBidResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthBid - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthBid } if (iNdEx + skippy) > l { @@ -1520,10 +1508,7 @@ func (m *BidID) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthBid - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthBid } if (iNdEx + skippy) > l { @@ -1677,10 +1662,7 @@ func (m *Bid) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthBid - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthBid } if (iNdEx + skippy) > l { @@ -1883,10 +1865,7 @@ func (m *BidFilters) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthBid - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthBid } if (iNdEx + skippy) > l { diff --git a/x/market/types/genesis.pb.go b/x/market/types/genesis.pb.go index 0d15460804..892ae87e8d 100644 --- a/x/market/types/genesis.pb.go +++ b/x/market/types/genesis.pb.go @@ -352,10 +352,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenesis - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenesis } if (iNdEx + skippy) > l { diff --git a/x/market/types/key.go b/x/market/types/key.go index fd9e288143..e7aabc8d2e 100644 --- a/x/market/types/key.go +++ b/x/market/types/key.go @@ -10,3 +10,15 @@ const ( // RouterKey is the message route for market RouterKey = ModuleName ) + +func OrderPrefix() []byte { + return []byte{0x01, 0x00} +} + +func BidPrefix() []byte { + return []byte{0x02, 0x00} +} + +func LeasePrefix() []byte { + return []byte{0x03, 0x00} +} diff --git a/x/market/types/lease.pb.go b/x/market/types/lease.pb.go index 095d732f94..50d3051394 100644 --- a/x/market/types/lease.pb.go +++ b/x/market/types/lease.pb.go @@ -1240,10 +1240,7 @@ func (m *LeaseID) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthLease - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthLease } if (iNdEx + skippy) > l { @@ -1397,10 +1394,7 @@ func (m *Lease) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthLease - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthLease } if (iNdEx + skippy) > l { @@ -1603,10 +1597,7 @@ func (m *LeaseFilters) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthLease - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthLease } if (iNdEx + skippy) > l { @@ -1689,10 +1680,7 @@ func (m *MsgCreateLease) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthLease - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthLease } if (iNdEx + skippy) > l { @@ -1742,10 +1730,7 @@ func (m *MsgCreateLeaseResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthLease - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthLease } if (iNdEx + skippy) > l { @@ -1828,10 +1813,7 @@ func (m *MsgWithdrawLease) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthLease - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthLease } if (iNdEx + skippy) > l { @@ -1881,10 +1863,7 @@ func (m *MsgWithdrawLeaseResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthLease - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthLease } if (iNdEx + skippy) > l { @@ -1967,10 +1946,7 @@ func (m *MsgCloseLease) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthLease - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthLease } if (iNdEx + skippy) > l { @@ -2020,10 +1996,7 @@ func (m *MsgCloseLeaseResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthLease - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthLease } if (iNdEx + skippy) > l { diff --git a/x/market/types/order.pb.go b/x/market/types/order.pb.go index 17825c48be..6ce4f2a7f8 100644 --- a/x/market/types/order.pb.go +++ b/x/market/types/order.pb.go @@ -680,10 +680,7 @@ func (m *OrderID) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthOrder - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthOrder } if (iNdEx + skippy) > l { @@ -837,10 +834,7 @@ func (m *Order) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthOrder - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthOrder } if (iNdEx + skippy) > l { @@ -1011,10 +1005,7 @@ func (m *OrderFilters) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthOrder - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthOrder } if (iNdEx + skippy) > l { diff --git a/x/market/types/params.pb.go b/x/market/types/params.pb.go index 61abd05b32..173ff7a089 100644 --- a/x/market/types/params.pb.go +++ b/x/market/types/params.pb.go @@ -263,10 +263,7 @@ func (m *Params) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthParams - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthParams } if (iNdEx + skippy) > l { diff --git a/x/market/types/query.pb.go b/x/market/types/query.pb.go index f79d3ddc8f..3c8ac216c3 100644 --- a/x/market/types/query.pb.go +++ b/x/market/types/query.pb.go @@ -1770,10 +1770,7 @@ func (m *QueryOrdersRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -1893,10 +1890,7 @@ func (m *QueryOrdersResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -1979,10 +1973,7 @@ func (m *QueryOrderRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -2065,10 +2056,7 @@ func (m *QueryOrderResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -2187,10 +2175,7 @@ func (m *QueryBidsRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -2310,10 +2295,7 @@ func (m *QueryBidsResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -2396,10 +2378,7 @@ func (m *QueryBidRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -2515,10 +2494,7 @@ func (m *QueryBidResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -2637,10 +2613,7 @@ func (m *QueryLeasesRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -2760,10 +2733,7 @@ func (m *QueryLeasesResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -2846,10 +2816,7 @@ func (m *QueryLeaseRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -2965,10 +2932,7 @@ func (m *QueryLeaseResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { diff --git a/x/market/types/query.pb.gw.go b/x/market/types/query.pb.gw.go index c95636f3fd..fb23219f73 100644 --- a/x/market/types/query.pb.gw.go +++ b/x/market/types/query.pb.gw.go @@ -20,6 +20,7 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" ) @@ -30,6 +31,7 @@ var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray var _ = descriptor.ForMessage +var _ = metadata.Join var ( filter_Query_Orders_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} @@ -250,12 +252,14 @@ func local_request_Query_Lease_0(ctx context.Context, marshaler runtime.Marshale // 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 (such as grpc.SendHeader, etc) to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +// 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_Orders_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 { @@ -263,6 +267,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Orders_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) @@ -276,6 +281,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Order_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 { @@ -283,6 +290,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Order_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) @@ -296,6 +304,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Bids_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 { @@ -303,6 +313,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Bids_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) @@ -316,6 +327,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Bid_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 { @@ -323,6 +336,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Bid_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) @@ -336,6 +350,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Leases_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 { @@ -343,6 +359,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Leases_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) @@ -356,6 +373,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Lease_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 { @@ -363,6 +382,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Lease_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) diff --git a/x/provider/client/cli/cli_test.go b/x/provider/client/cli/cli_test.go index e87b557a5b..22e02bd6cf 100644 --- a/x/provider/client/cli/cli_test.go +++ b/x/provider/client/cli/cli_test.go @@ -68,7 +68,7 @@ func (s *IntegrationTestSuite) TestProvider() { s.Require().NoError(err) out := &types.QueryProvidersResponse{} - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), out) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), out) s.Require().NoError(err) s.Require().Len(out.Providers, 1, "Provider Creation Failed") providers := out.Providers @@ -80,7 +80,7 @@ func (s *IntegrationTestSuite) TestProvider() { s.Require().NoError(err) var provider types.Provider - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), &provider) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), &provider) s.Require().NoError(err) s.Require().Equal(createdProvider, provider) @@ -102,7 +102,7 @@ func (s *IntegrationTestSuite) TestProvider() { s.Require().NoError(err) var providerV2 types.Provider - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), &providerV2) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), &providerV2) s.Require().NoError(err) s.Require().NotEqual(provider.HostURI, providerV2.HostURI) } diff --git a/x/provider/client/cli/grpc_rest_test.go b/x/provider/client/cli/grpc_rest_test.go index cb7532700a..24cbca50e6 100644 --- a/x/provider/client/cli/grpc_rest_test.go +++ b/x/provider/client/cli/grpc_rest_test.go @@ -60,7 +60,7 @@ func (s *GRPCRestTestSuite) SetupSuite() { s.Require().NoError(err) out := &types.QueryProvidersResponse{} - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), out) + err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), out) s.Require().NoError(err) s.Require().Len(out.Providers, 1, "Provider Creation Failed") providers := out.Providers @@ -100,7 +100,7 @@ func (s *GRPCRestTestSuite) TestGetProviders() { s.Require().NoError(err) var providers types.QueryProvidersResponse - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp, &providers) + err = val.ClientCtx.Codec.UnmarshalJSON(resp, &providers) s.Require().NoError(err) s.Require().Len(providers.Providers, tc.expLen) @@ -148,7 +148,7 @@ func (s *GRPCRestTestSuite) TestGetProvider() { s.Require().NoError(err) var out types.QueryProviderResponse - err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp, &out) + err = val.ClientCtx.Codec.UnmarshalJSON(resp, &out) if tc.expErr { s.Require().Error(err) diff --git a/x/provider/keeper/grpc_query.go b/x/provider/keeper/grpc_query.go index c0fe07d2a2..0e87e5b2c3 100644 --- a/x/provider/keeper/grpc_query.go +++ b/x/provider/keeper/grpc_query.go @@ -32,7 +32,7 @@ func (k Querier) Providers(c context.Context, req *types.QueryProvidersRequest) pageRes, err := sdkquery.Paginate(store, req.Pagination, func(key []byte, value []byte) error { var provider types.Provider - err := k.cdc.UnmarshalBinaryBare(value, &provider) + err := k.cdc.Unmarshal(value, &provider) if err != nil { return err } diff --git a/x/provider/keeper/keeper.go b/x/provider/keeper/keeper.go index 4fdf5f1e20..3dbd3ee114 100644 --- a/x/provider/keeper/keeper.go +++ b/x/provider/keeper/keeper.go @@ -8,7 +8,7 @@ import ( ) type IKeeper interface { - Codec() codec.BinaryMarshaler + Codec() codec.BinaryCodec Get(ctx sdk.Context, id sdk.Address) (types.Provider, bool) Create(ctx sdk.Context, provider types.Provider) error WithProviders(ctx sdk.Context, fn func(types.Provider) bool) @@ -20,11 +20,11 @@ type IKeeper interface { // Keeper of the provider store type Keeper struct { skey sdk.StoreKey - cdc codec.BinaryMarshaler + cdc codec.BinaryCodec } // NewKeeper creates and returns an instance for Provider keeper -func NewKeeper(cdc codec.BinaryMarshaler, skey sdk.StoreKey) IKeeper { +func NewKeeper(cdc codec.BinaryCodec, skey sdk.StoreKey) IKeeper { return Keeper{ skey: skey, cdc: cdc, @@ -36,7 +36,7 @@ func (k Keeper) NewQuerier() Querier { } // Codec returns keeper codec -func (k Keeper) Codec() codec.BinaryMarshaler { +func (k Keeper) Codec() codec.BinaryCodec { return k.cdc } @@ -51,7 +51,7 @@ func (k Keeper) Get(ctx sdk.Context, id sdk.Address) (types.Provider, bool) { buf := store.Get(key) var val types.Provider - k.cdc.MustUnmarshalBinaryBare(buf, &val) + k.cdc.MustUnmarshal(buf, &val) return val, true } @@ -69,7 +69,7 @@ func (k Keeper) Create(ctx sdk.Context, provider types.Provider) error { return types.ErrProviderExists } - store.Set(key, k.cdc.MustMarshalBinaryBare(&provider)) + store.Set(key, k.cdc.MustMarshal(&provider)) ctx.EventManager().EmitEvent( types.EventProviderCreated{Owner: owner}.ToSDKEvent(), @@ -85,7 +85,7 @@ func (k Keeper) WithProviders(ctx sdk.Context, fn func(types.Provider) bool) { defer iter.Close() for ; iter.Valid(); iter.Next() { var val types.Provider - k.cdc.MustUnmarshalBinaryBare(iter.Value(), &val) + k.cdc.MustUnmarshal(iter.Value(), &val) if stop := fn(val); stop { break } @@ -105,7 +105,7 @@ func (k Keeper) Update(ctx sdk.Context, provider types.Provider) error { if !store.Has(key) { return types.ErrProviderNotFound } - store.Set(key, k.cdc.MustMarshalBinaryBare(&provider)) + store.Set(key, k.cdc.MustMarshal(&provider)) ctx.EventManager().EmitEvent( types.EventProviderUpdated{Owner: owner}.ToSDKEvent(), diff --git a/x/provider/keeper/key.go b/x/provider/keeper/key.go index d350aa36c2..c5c121a2a3 100644 --- a/x/provider/keeper/key.go +++ b/x/provider/keeper/key.go @@ -1,7 +1,10 @@ package keeper -import sdk "github.com/cosmos/cosmos-sdk/types" +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/address" +) func providerKey(id sdk.Address) []byte { - return id.Bytes() + return address.MustLengthPrefix(id.Bytes()) } diff --git a/x/provider/keeper/migrations.go b/x/provider/keeper/migrations.go new file mode 100644 index 0000000000..25be4c4a02 --- /dev/null +++ b/x/provider/keeper/migrations.go @@ -0,0 +1,21 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + v013 "github.com/ovrclk/akash/x/provider/legacy/v013" +) + +// Migrator is a struct for handling in-place store migrations. +type Migrator struct { + keeper Keeper +} + +// NewMigrator returns a new Migrator. +func NewMigrator(k IKeeper) Migrator { + return Migrator{keeper: k.(Keeper)} +} + +// Migrate1to2 migrates from version 1 to 2. +func (m Migrator) Migrate1to2(ctx sdk.Context) error { + return v013.MigrateStore(ctx, m.keeper.skey) +} diff --git a/x/provider/legacy/v013/store.go b/x/provider/legacy/v013/store.go new file mode 100644 index 0000000000..477f206849 --- /dev/null +++ b/x/provider/legacy/v013/store.go @@ -0,0 +1,37 @@ +package v013 + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/address" +) + +// MigrateStore performs in-place store migrations from v0.12 to v0.13. The +// migration includes: +// +// - Change addresses to be length-prefixed +func MigrateStore(ctx sdk.Context, storeKey sdk.StoreKey) error { + store := ctx.KVStore(storeKey) + migrateProviderKeys(store) + + return nil +} + +// migrateProviderKeys migrate the provider keys to cater for variable-length +// addresses. +func migrateProviderKeys(store sdk.KVStore) { + // old key is of format: + // ownerAddrBytes (20 bytes) + // new key is of format + // ownerAddrLen (1 byte) || ownerAddrBytes + + oldStoreIter := store.Iterator(nil, nil) + defer oldStoreIter.Close() + + for ; oldStoreIter.Valid(); oldStoreIter.Next() { + newStoreKey := address.MustLengthPrefix(oldStoreIter.Key()) + + // Set new key on store. Values don't change. + store.Set(newStoreKey, oldStoreIter.Value()) + store.Delete(oldStoreIter.Key()) + } +} diff --git a/x/provider/module.go b/x/provider/module.go index a4c4dcd828..1ea76a6852 100644 --- a/x/provider/module.go +++ b/x/provider/module.go @@ -38,7 +38,7 @@ var ( // AppModuleBasic defines the basic application module used by the provider module. type AppModuleBasic struct { - cdc codec.Marshaler + cdc codec.Codec } // Name returns provider module's name @@ -58,12 +58,12 @@ func (b AppModuleBasic) RegisterInterfaces(registry cdctypes.InterfaceRegistry) // DefaultGenesis returns default genesis state as raw bytes for the provider // module. -func (AppModuleBasic) DefaultGenesis(cdc codec.JSONMarshaler) json.RawMessage { +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { return cdc.MustMarshalJSON(DefaultGenesisState()) } // ValidateGenesis validation check of the Genesis -func (AppModuleBasic) ValidateGenesis(cdc codec.JSONMarshaler, config client.TxEncodingConfig, bz json.RawMessage) error { +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { var data types.GenesisState err := cdc.UnmarshalJSON(bz, &data) if err != nil { @@ -109,7 +109,8 @@ type AppModule struct { } // NewAppModule creates a new AppModule object -func NewAppModule(cdc codec.Marshaler, k keeper.IKeeper, bkeeper bankkeeper.Keeper, mkeeper mkeeper.IKeeper) AppModule { +func NewAppModule(cdc codec.Codec, k keeper.IKeeper, bkeeper bankkeeper.Keeper, + mkeeper mkeeper.IKeeper) AppModule { return AppModule{ AppModuleBasic: AppModuleBasic{cdc: cdc}, keeper: k, @@ -146,6 +147,11 @@ func (am AppModule) RegisterServices(cfg module.Configurator) { types.RegisterMsgServer(cfg.MsgServer(), handler.NewMsgServerImpl(am.keeper, am.mkeeper)) querier := am.keeper.NewQuerier() types.RegisterQueryServer(cfg.QueryServer(), querier) + + m := keeper.NewMigrator(am.keeper) + if err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil { + panic(err) + } } // BeginBlock performs no-op @@ -159,7 +165,7 @@ func (am AppModule) EndBlock(ctx sdk.Context, _ abci.RequestEndBlock) []abci.Val // InitGenesis performs genesis initialization for the provider module. It returns // no validator updates. -func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONMarshaler, data json.RawMessage) []abci.ValidatorUpdate { +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate { var genesisState types.GenesisState cdc.MustUnmarshalJSON(data, &genesisState) return InitGenesis(ctx, am.keeper, &genesisState) @@ -167,11 +173,16 @@ func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONMarshaler, data j // ExportGenesis returns the exported genesis state as raw bytes for the provider // module. -func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONMarshaler) json.RawMessage { +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { gs := ExportGenesis(ctx, am.keeper) return cdc.MustMarshalJSON(gs) } +// ConsensusVersion implements module.AppModule#ConsensusVersion +func (am AppModule) ConsensusVersion() uint64 { + return 2 +} + // ____________________________________________________________________________ // AppModuleSimulation implements an application simulation module for the provider module. diff --git a/x/provider/simulation/operations.go b/x/provider/simulation/operations.go index ce6947b360..e66b46c456 100644 --- a/x/provider/simulation/operations.go +++ b/x/provider/simulation/operations.go @@ -28,7 +28,7 @@ const ( // WeightedOperations returns all the operations from the module with their respective weights func WeightedOperations( - appParams simtypes.AppParams, cdc codec.JSONMarshaler, ak govtypes.AccountKeeper, + appParams simtypes.AppParams, cdc codec.JSONCodec, ak govtypes.AccountKeeper, bk bankkeeper.Keeper, k keeper.IKeeper) simulation.WeightedOperations { var ( weightMsgCreate int @@ -108,7 +108,7 @@ func SimulateMsgCreate(ak govtypes.AccountKeeper, bk bankkeeper.Keeper, k keeper return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to deliver mock tx"), nil, err } - return simtypes.NewOperationMsg(msg, true, ""), nil, nil + return simtypes.NewOperationMsg(msg, true, "", nil), nil, nil } } @@ -179,6 +179,6 @@ func SimulateMsgUpdate(ak govtypes.AccountKeeper, bk bankkeeper.Keeper, k keeper return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to deliver mock tx"), nil, err } - return simtypes.NewOperationMsg(msg, true, ""), nil, nil + return simtypes.NewOperationMsg(msg, true, "", nil), nil, nil } } diff --git a/x/provider/types/genesis.pb.go b/x/provider/types/genesis.pb.go index f0d97c8358..b6c68b8120 100644 --- a/x/provider/types/genesis.pb.go +++ b/x/provider/types/genesis.pb.go @@ -232,10 +232,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenesis - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenesis } if (iNdEx + skippy) > l { diff --git a/x/provider/types/provider.pb.go b/x/provider/types/provider.pb.go index 3340b187e9..2ed703d240 100644 --- a/x/provider/types/provider.pb.go +++ b/x/provider/types/provider.pb.go @@ -1225,10 +1225,7 @@ func (m *ProviderInfo) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthProvider - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthProvider } if (iNdEx + skippy) > l { @@ -1409,10 +1406,7 @@ func (m *MsgCreateProvider) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthProvider - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthProvider } if (iNdEx + skippy) > l { @@ -1462,10 +1456,7 @@ func (m *MsgCreateProviderResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthProvider - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthProvider } if (iNdEx + skippy) > l { @@ -1646,10 +1637,7 @@ func (m *MsgUpdateProvider) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthProvider - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthProvider } if (iNdEx + skippy) > l { @@ -1699,10 +1687,7 @@ func (m *MsgUpdateProviderResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthProvider - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthProvider } if (iNdEx + skippy) > l { @@ -1784,10 +1769,7 @@ func (m *MsgDeleteProvider) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthProvider - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthProvider } if (iNdEx + skippy) > l { @@ -1837,10 +1819,7 @@ func (m *MsgDeleteProviderResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthProvider - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthProvider } if (iNdEx + skippy) > l { @@ -2021,10 +2000,7 @@ func (m *Provider) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthProvider - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthProvider } if (iNdEx + skippy) > l { diff --git a/x/provider/types/query.pb.go b/x/provider/types/query.pb.go index 97f8128ab6..c2e719deff 100644 --- a/x/provider/types/query.pb.go +++ b/x/provider/types/query.pb.go @@ -672,10 +672,7 @@ func (m *QueryProvidersRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -795,10 +792,7 @@ func (m *QueryProvidersResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -880,10 +874,7 @@ func (m *QueryProviderRequest) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { @@ -966,10 +957,7 @@ func (m *QueryProviderResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthQuery } if (iNdEx + skippy) > l { diff --git a/x/provider/types/query.pb.gw.go b/x/provider/types/query.pb.gw.go index 828f07ff65..36bac30b7d 100644 --- a/x/provider/types/query.pb.gw.go +++ b/x/provider/types/query.pb.gw.go @@ -20,6 +20,7 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" ) @@ -30,6 +31,7 @@ var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray var _ = descriptor.ForMessage +var _ = metadata.Join var ( filter_Query_Providers_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} @@ -124,12 +126,14 @@ func local_request_Query_Provider_0(ctx context.Context, marshaler runtime.Marsh // 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 (such as grpc.SendHeader, etc) to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +// 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_Providers_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 { @@ -137,6 +141,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Providers_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) @@ -150,6 +155,8 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv mux.Handle("GET", pattern_Query_Provider_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 { @@ -157,6 +164,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Query_Provider_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)